@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
130 lines • 17.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectorRef, Component, ElementRef, HostListener, Inject, Input, NgZone, PLATFORM_ID, } from '@angular/core';
import { PieChartComponent } from '@swimlane/ngx-charts';
import { MonitoringAppGenComponent } from '../../metadata/decorators';
import { ChartDataModel, } from '../ChartDataModel';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@swimlane/ngx-charts";
import * as i3 from "@ionic/angular";
import * as i4 from "../../ui-directive/export-data.directive";
let TapVariablePieChartGridComponent = class TapVariablePieChartGridComponent extends PieChartComponent {
cdr;
results = [
{
name: '---',
value: 0,
extra: 0,
},
];
innerWidth;
innerHeight;
chartModel = new ChartDataModel();
subscription;
colorScheme = {
domain: [
'#5DADE2',
'#9B59B6',
'#F39C12',
'#5AA454',
'#A10A28',
'#C7B42C',
'#AAAAAA',
],
};
showExportButton = false;
exportedFileName;
set label(indexOrArray) {
this.chartModel.initLabel(indexOrArray);
}
set variable(variableOrArray) {
this.input = this.chartModel.initVariable(variableOrArray);
}
set input(inputs) {
this.subscription = this.chartModel
.defineInputStreamSingle(inputs, false, 0)
.subscribe((result) => {
let index = 0;
for (const item of result) {
if (this.results[index] !== undefined) {
if (item.value !== this.results[index].value) {
this.results = result;
}
}
else {
this.results = result;
}
index++;
}
this.resizeComponent();
});
}
onResize(event) {
this.innerWidth = window.innerWidth;
this.resizeComponent();
}
constructor(myChartElement, zone, cd, platformId, cdr) {
super(myChartElement, zone, cd, platformId);
this.cdr = cdr;
}
ngAfterContentInit() {
this.innerWidth = window.innerWidth;
this.resizeComponent();
this.cdr.detectChanges();
}
onSelect(event) {
/* Not implemented
this.chartModel.showDetail(event, this.modalController, TapVariableDataPopupComponent);
*/
}
resizeComponent() {
if (this.innerWidth <= 400) {
this.innerWidth = 400;
}
this.innerHeight = (150 * this.results.length) / (this.innerWidth / 300);
if (this.innerHeight <= 150) {
this.innerHeight = 150;
}
this.cdr.detectChanges();
}
ngOnDestroy() {
this.subscription?.unsubscribe();
this.chartModel.destroyCurrentSub();
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapVariablePieChartGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TapVariablePieChartGridComponent, selector: "tap-variable-pie-chart-grid", inputs: { colorScheme: "colorScheme", showExportButton: "showExportButton", exportedFileName: "exportedFileName", label: "label", variable: "variable", input: "input" }, host: { listeners: { "window:resize": "onResize($event)" } }, usesInheritance: true, ngImport: i0, template: "<div #containerRef style=\"width: 100%; overflow: auto; position: relative\">\n <ngx-charts-pie-grid\n #charts\n [view]=\"[containerRef.offsetWidth, innerHeight]\"\n [scheme]=\"colorScheme\"\n [animations]=\"false\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-pie-grid>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n *ngIf=\"showExportButton\"\n [exportedFileName]=\"exportedFileName\"\n [dataToExport]=\"results\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: ["@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}#exportFabButton{position:absolute;top:10px;right:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PieGridComponent, selector: "ngx-charts-pie-grid", inputs: ["designatedTotal", "tooltipDisabled", "tooltipText", "label", "minWidth", "activeEntries"], outputs: ["activate", "deactivate"] }, { kind: "component", type: i3.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i4.ExportDataDirective, selector: "[tapExportData]", inputs: ["exportedFileName", "dataToExport", "format"], outputs: ["exportDataError"] }] });
};
TapVariablePieChartGridComponent = __decorate([
MonitoringAppGenComponent({
constraints: {
isNumber: 'YES',
},
}),
__metadata("design:paramtypes", [ElementRef,
NgZone,
ChangeDetectorRef, String, ChangeDetectorRef])
], TapVariablePieChartGridComponent);
export { TapVariablePieChartGridComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapVariablePieChartGridComponent, decorators: [{
type: Component,
args: [{ selector: 'tap-variable-pie-chart-grid', template: "<div #containerRef style=\"width: 100%; overflow: auto; position: relative\">\n <ngx-charts-pie-grid\n #charts\n [view]=\"[containerRef.offsetWidth, innerHeight]\"\n [scheme]=\"colorScheme\"\n [animations]=\"false\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-pie-grid>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n *ngIf=\"showExportButton\"\n [exportedFileName]=\"exportedFileName\"\n [dataToExport]=\"results\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: ["@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}#exportFabButton{position:absolute;top:10px;right:10px}\n"] }]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }, { type: i0.ChangeDetectorRef }], propDecorators: { colorScheme: [{
type: Input
}], showExportButton: [{
type: Input
}], exportedFileName: [{
type: Input
}], label: [{
type: Input
}], variable: [{
type: Input
}], input: [{
type: Input
}], onResize: [{
type: HostListener,
args: ['window:resize', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWdyaWQvdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWdyaWQvdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsY0FBYyxHQUdmLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQWFwQixJQUFNLGdDQUFnQyxHQUF0QyxNQUFNLGdDQUNYLFNBQVEsaUJBQWlCO0lBZ0ZmO0lBN0VWLE9BQU8sR0FBdUI7UUFDNUI7WUFDRSxJQUFJLEVBQUUsS0FBSztZQUNYLEtBQUssRUFBRSxDQUFDO1lBQ1IsS0FBSyxFQUFFLENBQUM7U0FDVDtLQUNGLENBQUM7SUFFRixVQUFVLENBQVU7SUFDcEIsV0FBVyxDQUFVO0lBRWIsVUFBVSxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDO0lBRWxELFlBQVksQ0FB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Q0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDdEMsQ0FBQzsySEFoSFUsZ0NBQWdDLG1HQWdGakMsV0FBVzsrR0FoRlYsZ0NBQWdDLGtVQ2pDN0MsdWxCQXFCQTs7QURZYSxnQ0FBZ0M7SUFWNUMseUJBQXlCLENBQUM7UUFDekIsV0FBVyxFQUFFO1lBQ1gsUUFBUSxFQUFFLEtBQUs7U0FDaEI7S0FDRixDQUFDO3FDQW1Ga0IsVUFBVTtRQUNwQixNQUFNO1FBQ1IsaUJBQWlCLFVBRVIsaUJBQWlCO0dBakZyQixnQ0FBZ0MsQ0FpSDVDOzs0RkFqSFksZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLDZCQUE2Qjs7MEJBb0ZwQyxNQUFNOzJCQUFDLFdBQVc7eUVBNURyQixXQUFXO3NCQURWLEtBQUs7Z0JBY04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSUYsS0FBSztzQkFEUixLQUFLO2dCQU1GLFFBQVE7c0JBRFgsS0FBSztnQkFRRixLQUFLO3NCQURSLEtBQUs7Z0JBcUJOLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFZhcmlhYmxlIH0gZnJvbSAnQGlvdGl6ZS90YXAvZGF0YSc7XG5pbXBvcnQgeyBQaWVDaGFydENvbXBvbmVudCB9IGZyb20gJ0Bzd2ltbGFuZS9uZ3gtY2hhcnRzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0FwcEdlbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21ldGFkYXRhL2RlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ2hhcnREYXRhTW9kZWwsXG4gIENoYXJ0SW5wdXRTaW5nbGUsXG4gIENoYXJ0SW5wdXRTdHJlYW1WYXIsXG59IGZyb20gJy4uL0NoYXJ0RGF0YU1vZGVsJztcbmltcG9ydCB7IE9uQ2hhcnRTZWxlY3RFdmVudCB9IGZyb20gJy4uL3NoYXJlZC10eXBlcyc7XG5cbkBNb25pdG9yaW5nQXBwR2VuQ29tcG9uZW50KHtcbiAgY29uc3RyYWludHM6IHtcbiAgICBpc051bWJlcjogJ1lFUycsXG4gIH0sXG59KVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhcC12YXJpYWJsZS1waWUtY2hhcnQtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhcC12YXJpYWJsZS1waWUtY2hhcnQtZ3JpZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYXBWYXJpYWJsZVBpZUNoYXJ0R3JpZENvbXBvbmVudFxuICBleHRlbmRzIFBpZUNoYXJ0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XG57XG4gIHJlc3VsdHM6IENoYXJ0SW5wdXRTaW5nbGVbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnLS0tJyxcbiAgICAgIHZhbHVlOiAwLFxuICAgICAgZXh0cmE6IDAsXG4gICAgfSxcbiAgXTtcblxuICBpbm5lcldpZHRoITogbnVtYmVyO1xuICBpbm5lckhlaWdodD86IG51bWJlcjtcblxuICBwcml2YXRlIGNoYXJ0TW9kZWw6IENoYXJ0RGF0YU1vZGVsID0gbmV3IENoYXJ0RGF0YU1vZGVsKCk7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgQElucHV0KClcbiAgY29sb3JTY2hlbWUgPSB7XG4gICAgZG9tYWluOiBbXG4gICAgICAnIzVEQURFMicsXG4gICAgICAnIzlCNTlCNicsXG4gICAgICAnI0YzOUMxMicsXG4gICAgICAnIzVBQTQ1NCcsXG4gICAgICAnI0ExMEEyOCcsXG4gICAgICAnI0M3QjQyQycsXG4gICAgICAnI0FBQUFBQScsXG4gICAgXSxcbiAgfTtcblxuICBASW5wdXQoKVxuICBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZXhwb3J0ZWRGaWxlTmFtZT86IHN0cmluZztcblxuICBASW5wdXQoKVxuICBzZXQgbGFiZWwoaW5kZXhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy5jaGFydE1vZGVsLmluaXRMYWJlbChpbmRleE9yQXJyYXkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhcmlhYmxlKFxuICAgIHZhcmlhYmxlT3JBcnJheTogQWJzdHJhY3RWYXJpYWJsZTxudW1iZXIgfCBudW1iZXJbXT4gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy5pbnB1dCA9IHRoaXMuY2hhcnRNb2RlbC5pbml0VmFyaWFibGUodmFyaWFibGVPckFycmF5KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBpbnB1dChpbnB1dHM6IENoYXJ0SW5wdXRTdHJlYW1WYXJbXSkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFydE1vZGVsXG4gICAgICAuZGVmaW5lSW5wdXRTdHJlYW1TaW5nbGUoaW5wdXRzLCBmYWxzZSwgMClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogQ2hhcnRJbnB1dFNpbmdsZVtdKSA9PiB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiByZXN1bHQgYXMgQ2hhcnRJbnB1dFNpbmdsZVtdKSB7XG4gICAgICAgICAgaWYgKHRoaXMucmVzdWx0c1tpbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUgIT09IHRoaXMucmVzdWx0c1tpbmRleF0udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gcmVzdWx0IGFzIENoYXJ0SW5wdXRTaW5nbGVbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gcmVzdWx0IGFzIENoYXJ0SW5wdXRTaW5nbGVbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2l6ZUNvbXBvbmVudCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25SZXNpemUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaW5uZXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHRoaXMucmVzaXplQ29tcG9uZW50KCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBteUNoYXJ0RWxlbWVudDogRWxlbWVudFJlZjxhbnk+LFxuICAgIHpvbmU6IE5nWm9uZSxcbiAgICBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcihteUNoYXJ0RWxlbWVudCwgem9uZSwgY2QsIHBsYXRmb3JtSWQpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuaW5uZXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHRoaXMucmVzaXplQ29tcG9uZW50KCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25TZWxlY3QoZXZlbnQ6IE9uQ2hhcnRTZWxlY3RFdmVudCkge1xuICAgIC8qIE5vdCBpbXBsZW1lbnRlZFxuICAgIHRoaXMuY2hhcnRNb2RlbC5zaG93RGV0YWlsKGV2ZW50LCB0aGlzLm1vZGFsQ29udHJvbGxlciwgVGFwVmFyaWFibGVEYXRhUG9wdXBDb21wb25lbnQpO1xuICAgICovXG4gIH1cblxuICByZXNpemVDb21wb25lbnQoKSB7XG4gICAgaWYgKHRoaXMuaW5uZXJXaWR0aCA8PSA0MDApIHtcbiAgICAgIHRoaXMuaW5uZXJXaWR0aCA9IDQwMDtcbiAgICB9XG4gICAgdGhpcy5pbm5lckhlaWdodCA9ICgxNTAgKiB0aGlzLnJlc3VsdHMubGVuZ3RoKSAvICh0aGlzLmlubmVyV2lkdGggLyAzMDApO1xuICAgIGlmICh0aGlzLmlubmVySGVpZ2h0IDw9IDE1MCkge1xuICAgICAgdGhpcy5pbm5lckhlaWdodCA9IDE1MDtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jaGFydE1vZGVsLmRlc3Ryb3lDdXJyZW50U3ViKCk7XG4gIH1cbn1cbiIsIjxkaXYgI2NvbnRhaW5lclJlZiBzdHlsZT1cIndpZHRoOiAxMDAlOyBvdmVyZmxvdzogYXV0bzsgcG9zaXRpb246IHJlbGF0aXZlXCI+XG4gIDxuZ3gtY2hhcnRzLXBpZS1ncmlkXG4gICAgI2NoYXJ0c1xuICAgIFt2aWV3XT1cIltjb250YWluZXJSZWYub2Zmc2V0V2lkdGgsIGlubmVySGVpZ2h0XVwiXG4gICAgW3NjaGVtZV09XCJjb2xvclNjaGVtZVwiXG4gICAgW2FuaW1hdGlvbnNdPVwiZmFsc2VcIlxuICAgIFtyZXN1bHRzXT1cInJlc3VsdHNcIlxuICAgIChzZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gID5cbiAgPC9uZ3gtY2hhcnRzLXBpZS1ncmlkPlxuICA8aW9uLWZhYi1idXR0b25cbiAgICBpZD1cImV4cG9ydEZhYkJ1dHRvblwiXG4gICAgc2l6ZT1cInNtYWxsXCJcbiAgICB0YXBFeHBvcnREYXRhXG4gICAgKm5nSWY9XCJzaG93RXhwb3J0QnV0dG9uXCJcbiAgICBbZXhwb3J0ZWRGaWxlTmFtZV09XCJleHBvcnRlZEZpbGVOYW1lXCJcbiAgICBbZGF0YVRvRXhwb3J0XT1cInJlc3VsdHNcIlxuICA+XG4gICAgPGlvbi1pY29uIG5hbWU9XCJkb3dubG9hZFwiPjwvaW9uLWljb24+XG4gIDwvaW9uLWZhYi1idXR0b24+XG48L2Rpdj5cbiJdfQ==