reports-hyper74
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.0.
134 lines • 24.9 kB
JavaScript
import { Component, EventEmitter, Input, Output, } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';
import { jsPDF } from 'jspdf';
import 'jspdf-autotable';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "../reports.service";
import * as i3 from "@angular/common";
import * as i4 from "@angular/material/icon";
import * as i5 from "@angular/material/button";
import * as i6 from "@angular/material/table";
import * as i7 from "@angular/material/paginator";
import * as i8 from "../no-data/no-data.component";
export class ExecuteReportComponent {
constructor(route, cd, reportService, datePipe) {
this.route = route;
this.cd = cd;
this.reportService = reportService;
this.datePipe = datePipe;
this.backClicked = new EventEmitter();
this.$subs = [];
this.query = { total: 0, pageNum: 0, pageSize: 10, data: null, reportId: null };
this.excel = [];
this.reportId = +this.route.snapshot.params['id'];
this.query.reportId = this.reportId;
const formExecuted = sessionStorage.getItem('executeForm');
this.executeForm = JSON.parse(formExecuted);
this.reportName = sessionStorage.getItem('reportName');
this.query.data = this.executeForm;
}
ngOnInit() {
this.query.pageNum = 1;
this.loadDataExecuted();
}
loadDataExecuted(fileType) {
const sub1 = this.reportService
.executeReport(this.urlRpt, this.query)
.subscribe((res) => {
switch (fileType) {
case 'excel':
// console.log('res.detailsExcel', res.details);
this.hiddenListData = new MatTableDataSource(res.details);
this.hiddenData = res;
this.hiddenDisplayedColumns = res.headers.map((el) => el.property);
this.cd.detectChanges();
this.reportService.exportAsExcelFile(this.excel, this.reportName);
break;
case 'pdf':
this.hiddenListData = new MatTableDataSource(res.details);
this.hiddenData = res;
this.hiddenDisplayedColumns = res.headers.map((el) => el.property);
this.cd.detectChanges();
this.pdfPreparing();
break;
default:
this.data = res;
this.list = new MatTableDataSource(res.details);
this.query.total = res.totalCount;
this.displayedColumns = res.headers.map((el) => el.property);
break;
}
});
this.$subs.push(sub1);
}
ngOnDestroy() {
this.query = {
total: 0,
pageNum: 0,
pageSize: 10,
data: null,
reportId: null,
};
// console.log('query', this.query);
this.$subs.forEach((item) => item.unsubscribe());
}
getNextPage(e) {
this.query.pageNum = e.pageIndex + 1;
this.query.pageSize = e.pageSize;
this.loadDataExecuted();
}
SavePDF() {
this.query.pageSize = -1;
this.query.pageNum = -1;
this.loadDataExecuted('pdf');
}
SaveEXCEL() {
this.query.pageSize = -1;
this.query.pageNum = -1;
this.loadDataExecuted('excel');
}
pdfPreparing() {
const pdfsize = 'a0';
const doc = new jsPDF('l', 'pt', pdfsize);
// @ts-ignore
doc.autoTable({
html: '#excelDataTable',
startY: 60,
margin: { horizontal: 7 },
styles: {
fontSize: 50,
cellWidth: 'wrap',
},
columnStyles: {
1: { cellWidth: 'auto' },
},
});
doc.save(this.reportName + '.pdf');
}
onBackClicked() {
this.backClicked.emit({ back: true });
}
check(el, type) {
if (type === 'Timestamp') {
el = this.datePipe.transform(el, 'yyyy-MM-dd h:mm a');
//yyyy-MM-dd h:mm a
}
return el;
}
}
ExecuteReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ExecuteReportComponent, deps: [{ token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i2.ReportsService }, { token: i3.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
ExecuteReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ExecuteReportComponent, selector: "lib-execute-report", inputs: { urlRpt: "urlRpt" }, outputs: { backClicked: "backClicked" }, ngImport: i0, template: "<div class=\"mat-elevation-z8\">\n <div class=\"backBtn\">\n <h3><mat-icon (click)=\"onBackClicked()\" class=\"back-btn\">arrow_back</mat-icon> Report Results</h3>\n </div>\n <div class=\"btns\">\n <button *ngIf=\"data?.details.length>0\" type=\"button\" mat-button value=\"PDF\" class=\"btn savePdf\" (click)=\"SavePDF()\">PDF</button>\n \n <button *ngIf=\"data?.details.length>0\" type=\"button\" mat-button value=\"XLS\" class=\"btn savePdf\" (click)=\"SaveEXCEL()\">Excel</button>\n </div>\n\n <table *ngIf=\"data?.details.length>0\" mat-table [dataSource]=\"list\">\n <ng-container *ngFor=\"let el of data.headers\" matColumnDef=\"{{el.property}}\">\n <th mat-header-cell *matHeaderCellDef> {{el.property}} </th>\n <td mat-cell *matCellDef=\"let row\">\n <span>{{row[el.property] ? check(row[el.property],el.type) : \"N/A\"}}</span>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell\" colspan=\"4\">No data matching</td>\n </tr>\n </table>\n <mat-paginator *ngIf=\"data?.totalCount>0\" [length]=\"query.total\"\n (page)=\"getNextPage($event)\"\n [pageSizeOptions]=\"[10, 25, 100]\">\n </mat-paginator>\n\n\n <table style=\"display: none;width: 100%\" mat-table [dataSource]=\"hiddenListData\" id=\"excelDataTable\">\n <ng-container *ngFor=\"let el of hiddenData?.headers\" matColumnDef=\"{{el.property}}\">\n <th mat-header-cell *matHeaderCellDef> {{el.property}} </th>\n <td mat-cell *matCellDef=\"let row\">\n <span>{{row[el.property] !== undefined ? check(row[el.property],el.type) : \"N/A\"}}</span>\n<!-- <span *ngIf=\"row[el.type]==='Timestamp'\">{{row[el.property] ? (row[el.property]|date:'short') : 'N/A'}}</span>;-->\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"hiddenDisplayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: hiddenDisplayedColumns;\"></tr>\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell\" colspan=\"4\">No data matching</td>\n </tr>\n </table>\n</div>\n\n\n<lib-no-data *ngIf=\"data?.details?.length===0\"></lib-no-data>\n", styles: ["table{width:100%}.savePdf{color:#fff;background-color:#f60;border-color:#f60}.mat-elevation-z8{box-shadow:none;background:#ffffff}.btns{text-align:right;margin-bottom:25px;margin-right:5px}.back-btn{vertical-align:sub;color:#f60;cursor:pointer}h3{font-size:18px;font-weight:600;color:#000}\n"], components: [{ type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i8.NoDataComponent, selector: "lib-no-data" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i6.MatCellDef, selector: "[matCellDef]" }, { type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i6.MatNoDataRow, selector: "ng-template[matNoDataRow]" }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ExecuteReportComponent, decorators: [{
type: Component,
args: [{
selector: 'lib-execute-report',
templateUrl: './execute-report.component.html',
styleUrls: ['./execute-report.component.css'],
}]
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i2.ReportsService }, { type: i3.DatePipe }]; }, propDecorators: { urlRpt: [{
type: Input
}], backClicked: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy9zcmMvbGliL2V4ZWN1dGUtcmVwb3J0L2V4ZWN1dGUtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMvc3JjL2xpYi9leGVjdXRlLXJlcG9ydC9leGVjdXRlLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFHOUIsT0FBTyxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQVF6QixNQUFNLE9BQU8sc0JBQXNCO0lBa0JqQyxZQUNVLEtBQXFCLEVBQ3JCLEVBQXFCLEVBQ3JCLGFBQTZCLEVBQzdCLFFBQWtCO1FBSGxCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQUM3QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBcEJsQixnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBR25FLFVBQUssR0FBbUIsRUFBRSxDQUFDO1FBQzNCLFVBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBVTNFLFVBQUssR0FBRyxFQUFFLENBQUM7UUFRVCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDcEMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBbUIsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFjO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhO2FBQzVCLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDdEMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsUUFBUSxRQUFRLEVBQUU7Z0JBQ2hCLEtBQUssT0FBTztvQkFDVixnREFBZ0Q7b0JBQ2hELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxrQkFBa0IsQ0FBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO29CQUN0QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQzNDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUN6QixDQUFDO29CQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2xFLE1BQU07Z0JBQ1IsS0FBSyxLQUFLO29CQUNSLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxrQkFBa0IsQ0FBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO29CQUN0QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQzNDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUN6QixDQUFDO29CQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsTUFBTTtnQkFDUjtvQkFDRSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2xFLE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsS0FBSyxFQUFFLENBQUM7WUFDUixPQUFPLEVBQUUsQ0FBQztZQUNWLFFBQVEsRUFBRSxFQUFFO1lBQ1osSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7UUFDRixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxXQUFXLENBQUMsQ0FBWTtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUFZO1FBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsYUFBYTtRQUNiLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDWixJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRTtZQUN6QixNQUFNLEVBQUU7Z0JBQ04sUUFBUSxFQUFFLEVBQUU7Z0JBQ1osU0FBUyxFQUFFLE1BQU07YUFDbEI7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTthQUN6QjtTQUNGLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELEtBQUssQ0FBQyxFQUFPLEVBQUUsSUFBUztRQUN0QixJQUFJLElBQUksS0FBSyxXQUFXLEVBQUU7WUFDeEIsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3RELG1CQUFtQjtTQUNwQjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7b0hBbklVLHNCQUFzQjt3R0FBdEIsc0JBQXNCLGlJQ3pCbkMsc3lFQWlEQTs0RkR4QmEsc0JBQXNCO2tCQUxsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFdBQVcsRUFBRSxpQ0FBaUM7b0JBQzlDLFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO2lCQUM5Qzt5TEFFVSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBSZXBvcnRzU2VydmljZSB9IGZyb20gJy4uL3JlcG9ydHMuc2VydmljZSc7XG5pbXBvcnQgeyBqc1BERiB9IGZyb20gJ2pzcGRmJztcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBBbWlyaVJlZ3VsYXIgfSBmcm9tICcuL2FyYWJpYy5mb250JztcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWV4ZWN1dGUtcmVwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4ZWN1dGUtcmVwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZXhlY3V0ZS1yZXBvcnQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBFeGVjdXRlUmVwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdXJsUnB0OiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBiYWNrQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgZXhlY3V0ZUZvcm06IGFueTtcbiAgcmVwb3J0TmFtZTogYW55O1xuICAkc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcXVlcnkgPSB7IHRvdGFsOiAwLCBwYWdlTnVtOiAwLCBwYWdlU2l6ZTogMTAsIGRhdGE6IG51bGwsIHJlcG9ydElkOiBudWxsIH07XG4gIHJlcG9ydElkOiBhbnk7XG4gIGRhdGE6IGFueTtcbiAgbGlzdDogYW55O1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBhbnk7XG4gIGhpZGRlbkRpc3BsYXllZENvbHVtbnM6IGFueTtcbiAgaGlkZGVuTGlzdERhdGE6IGFueTtcbiAgaGlkZGVuRGF0YTogYW55O1xuICBoaWRkZW5IZWFkZXI6IGFueTtcbiAgdGVtcERhdGE6IGFueTtcbiAgZXhjZWwgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIHRoaXMucmVwb3J0SWQgPSArdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ107XG4gICAgdGhpcy5xdWVyeS5yZXBvcnRJZCA9IHRoaXMucmVwb3J0SWQ7XG4gICAgY29uc3QgZm9ybUV4ZWN1dGVkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXhlY3V0ZUZvcm0nKTtcbiAgICB0aGlzLmV4ZWN1dGVGb3JtID0gSlNPTi5wYXJzZShmb3JtRXhlY3V0ZWQgYXMgYW55KTtcbiAgICB0aGlzLnJlcG9ydE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdyZXBvcnROYW1lJyk7XG4gICAgdGhpcy5xdWVyeS5kYXRhID0gdGhpcy5leGVjdXRlRm9ybTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnkucGFnZU51bSA9IDE7XG4gICAgdGhpcy5sb2FkRGF0YUV4ZWN1dGVkKCk7XG4gIH1cblxuICBsb2FkRGF0YUV4ZWN1dGVkKGZpbGVUeXBlPzogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc3ViMSA9IHRoaXMucmVwb3J0U2VydmljZVxuICAgICAgLmV4ZWN1dGVSZXBvcnQodGhpcy51cmxScHQsIHRoaXMucXVlcnkpXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgc3dpdGNoIChmaWxlVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2V4Y2VsJzpcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXMuZGV0YWlsc0V4Y2VsJywgcmVzLmRldGFpbHMpO1xuICAgICAgICAgICAgdGhpcy5oaWRkZW5MaXN0RGF0YSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PihyZXMuZGV0YWlscyk7XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkRhdGEgPSByZXM7XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkRpc3BsYXllZENvbHVtbnMgPSByZXMuaGVhZGVycy5tYXAoXG4gICAgICAgICAgICAgIChlbDogYW55KSA9PiBlbC5wcm9wZXJ0eVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmV4cG9ydEFzRXhjZWxGaWxlKHRoaXMuZXhjZWwsIHRoaXMucmVwb3J0TmFtZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdwZGYnOlxuICAgICAgICAgICAgdGhpcy5oaWRkZW5MaXN0RGF0YSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PihyZXMuZGV0YWlscyk7XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkRhdGEgPSByZXM7XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkRpc3BsYXllZENvbHVtbnMgPSByZXMuaGVhZGVycy5tYXAoXG4gICAgICAgICAgICAgIChlbDogYW55KSA9PiBlbC5wcm9wZXJ0eVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5wZGZQcmVwYXJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSByZXM7XG4gICAgICAgICAgICB0aGlzLmxpc3QgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4ocmVzLmRldGFpbHMpO1xuICAgICAgICAgICAgdGhpcy5xdWVyeS50b3RhbCA9IHJlcy50b3RhbENvdW50O1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gcmVzLmhlYWRlcnMubWFwKChlbDogYW55KSA9PiBlbC5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy4kc3Vicy5wdXNoKHN1YjEpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeSA9IHtcbiAgICAgIHRvdGFsOiAwLFxuICAgICAgcGFnZU51bTogMCxcbiAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgICByZXBvcnRJZDogbnVsbCxcbiAgICB9O1xuICAgIC8vIGNvbnNvbGUubG9nKCdxdWVyeScsIHRoaXMucXVlcnkpO1xuICAgIHRoaXMuJHN1YnMuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIGdldE5leHRQYWdlKGU6IFBhZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnkucGFnZU51bSA9IGUucGFnZUluZGV4ICsgMTtcbiAgICB0aGlzLnF1ZXJ5LnBhZ2VTaXplID0gZS5wYWdlU2l6ZTtcbiAgICB0aGlzLmxvYWREYXRhRXhlY3V0ZWQoKTtcbiAgfVxuXG4gIFNhdmVQREYoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeS5wYWdlU2l6ZSA9IC0xO1xuICAgIHRoaXMucXVlcnkucGFnZU51bSA9IC0xO1xuICAgIHRoaXMubG9hZERhdGFFeGVjdXRlZCgncGRmJyk7XG4gIH1cblxuICBTYXZlRVhDRUwoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeS5wYWdlU2l6ZSA9IC0xO1xuICAgIHRoaXMucXVlcnkucGFnZU51bSA9IC0xO1xuICAgIHRoaXMubG9hZERhdGFFeGVjdXRlZCgnZXhjZWwnKTtcbiAgfVxuXG4gIHBkZlByZXBhcmluZygpIHtcbiAgICBjb25zdCBwZGZzaXplID0gJ2EwJztcbiAgICBjb25zdCBkb2MgPSBuZXcganNQREYoJ2wnLCAncHQnLCBwZGZzaXplKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZG9jLmF1dG9UYWJsZSh7XG4gICAgICBodG1sOiAnI2V4Y2VsRGF0YVRhYmxlJyxcbiAgICAgIHN0YXJ0WTogNjAsXG4gICAgICBtYXJnaW46IHsgaG9yaXpvbnRhbDogNyB9LFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGZvbnRTaXplOiA1MCxcbiAgICAgICAgY2VsbFdpZHRoOiAnd3JhcCcsXG4gICAgICB9LFxuICAgICAgY29sdW1uU3R5bGVzOiB7XG4gICAgICAgIDE6IHsgY2VsbFdpZHRoOiAnYXV0bycgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBkb2Muc2F2ZSh0aGlzLnJlcG9ydE5hbWUgKyAnLnBkZicpO1xuICB9XG5cbiAgb25CYWNrQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmJhY2tDbGlja2VkLmVtaXQoeyBiYWNrOiB0cnVlIH0pO1xuICB9XG4gIGNoZWNrKGVsOiBhbnksIHR5cGU6IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGUgPT09ICdUaW1lc3RhbXAnKSB7XG4gICAgICBlbCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGVsLCAneXl5eS1NTS1kZCBoOm1tIGEnKTtcbiAgICAgIC8veXl5eS1NTS1kZCBoOm1tIGFcbiAgICB9XG4gICAgcmV0dXJuIGVsO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OFwiPlxuICA8ZGl2IGNsYXNzPVwiYmFja0J0blwiPlxuICAgIDxoMz48bWF0LWljb24gKGNsaWNrKT1cIm9uQmFja0NsaWNrZWQoKVwiIGNsYXNzPVwiYmFjay1idG5cIj5hcnJvd19iYWNrPC9tYXQtaWNvbj4gUmVwb3J0IFJlc3VsdHM8L2gzPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImJ0bnNcIj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YT8uZGV0YWlscy5sZW5ndGg+MFwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIHZhbHVlPVwiUERGXCIgY2xhc3M9XCJidG4gc2F2ZVBkZlwiIChjbGljayk9XCJTYXZlUERGKClcIj5QREY8L2J1dHRvbj5cbiAgICAmbmJzcDtcbiAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YT8uZGV0YWlscy5sZW5ndGg+MFwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIHZhbHVlPVwiWExTXCIgY2xhc3M9XCJidG4gc2F2ZVBkZlwiIChjbGljayk9XCJTYXZlRVhDRUwoKVwiPkV4Y2VsPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDx0YWJsZSAqbmdJZj1cImRhdGE/LmRldGFpbHMubGVuZ3RoPjBcIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwibGlzdFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsIG9mIGRhdGEuaGVhZGVyc1wiIG1hdENvbHVtbkRlZj1cInt7ZWwucHJvcGVydHl9fVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4ge3tlbC5wcm9wZXJ0eX19IDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgIDxzcGFuPnt7cm93W2VsLnByb3BlcnR5XSA/IGNoZWNrKHJvd1tlbC5wcm9wZXJ0eV0sZWwudHlwZSkgOiBcIk4vQVwifX08L3NwYW4+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIj48L3RyPlxuICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbWF0Tm9EYXRhUm93PlxuICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIiBjb2xzcGFuPVwiNFwiPk5vIGRhdGEgbWF0Y2hpbmc8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGFibGU+XG4gIDxtYXQtcGFnaW5hdG9yICAqbmdJZj1cImRhdGE/LnRvdGFsQ291bnQ+MFwiIFtsZW5ndGhdPVwicXVlcnkudG90YWxcIlxuICAgICAgICAgICAgICAgICAocGFnZSk9XCJnZXROZXh0UGFnZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbMTAsIDI1LCAxMDBdXCI+XG4gIDwvbWF0LXBhZ2luYXRvcj5cblxuXG4gIDx0YWJsZSBzdHlsZT1cImRpc3BsYXk6IG5vbmU7d2lkdGg6IDEwMCVcIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwiaGlkZGVuTGlzdERhdGFcIiBpZD1cImV4Y2VsRGF0YVRhYmxlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWwgb2YgaGlkZGVuRGF0YT8uaGVhZGVyc1wiIG1hdENvbHVtbkRlZj1cInt7ZWwucHJvcGVydHl9fVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4ge3tlbC5wcm9wZXJ0eX19IDwvdGg+XG4gICAgICA8dGQgIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICA8c3Bhbj57e3Jvd1tlbC5wcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCA/IGNoZWNrKHJvd1tlbC5wcm9wZXJ0eV0sZWwudHlwZSkgOiBcIk4vQVwifX08L3NwYW4+XG48IS0tICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1tlbC50eXBlXT09PSdUaW1lc3RhbXAnXCI+e3tyb3dbZWwucHJvcGVydHldID8gKHJvd1tlbC5wcm9wZXJ0eV18ZGF0ZTonc2hvcnQnKSA6ICdOL0EnfX08L3NwYW4+Oy0tPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiaGlkZGVuRGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGhpZGRlbkRpc3BsYXllZENvbHVtbnM7XCI+PC90cj5cbiAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsXCIgY29sc3Bhbj1cIjRcIj5ObyBkYXRhIG1hdGNoaW5nPC90ZD5cbiAgICA8L3RyPlxuICA8L3RhYmxlPlxuPC9kaXY+XG5cblxuPGxpYi1uby1kYXRhICpuZ0lmPVwiZGF0YT8uZGV0YWlscz8ubGVuZ3RoPT09MFwiPjwvbGliLW5vLWRhdGE+XG4iXX0=