@sachin9822/reports-lib 0.0.183 → 0.0.185
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +2 -2
- package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +3 -3
- package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +78 -334
- package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +94 -355
- package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +67 -99
- package/esm2020/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.mjs +213 -0
- package/esm2020/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.mjs +618 -0
- package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +40 -43
- package/esm2020/lib/models/cancellation-transaction-report/cancellation-transaction.model.mjs +10 -2
- package/esm2020/lib/models/revenue-per-transaction-report/revenue-per-transaction.model.mjs +2 -0
- package/esm2020/lib/models/statement-of-account-report/statement-of-accounts.model.mjs +2 -0
- package/esm2020/lib/reports-lib.module.mjs +9 -1
- package/esm2020/lib/services/report.service.mjs +56 -25
- package/esm2020/lib/shared/metadata/metadata.component.mjs +4 -4
- package/esm2020/lib/shared/search-filter/search-filter.component.mjs +173 -28
- package/esm2020/public-api.mjs +5 -1
- package/fesm2015/sachin9822-reports-lib.mjs +1454 -993
- package/fesm2015/sachin9822-reports-lib.mjs.map +1 -1
- package/fesm2020/sachin9822-reports-lib.mjs +1464 -1014
- package/fesm2020/sachin9822-reports-lib.mjs.map +1 -1
- package/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.d.ts +6 -6
- package/lib/components/branch-activity-send-report/branch-activity-send-report.component.d.ts +8 -18
- package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +23 -14
- package/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.d.ts +50 -0
- package/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.d.ts +104 -0
- package/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.d.ts +12 -2
- package/lib/models/cancellation-transaction-report/cancellation-transaction.model.d.ts +1 -1
- package/lib/models/revenue-per-transaction-report/revenue-per-transaction.model.d.ts +33 -0
- package/lib/models/statement-of-account-report/statement-of-accounts.model.d.ts +18 -0
- package/lib/reports-lib.module.d.ts +13 -11
- package/lib/services/report.service.d.ts +19 -10
- package/lib/shared/search-filter/search-filter.component.d.ts +6 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { ReportService } from '../../services/report.service';
|
|
3
|
+
import { ExportService } from '../../shared/export.service';
|
|
4
|
+
import { ComponentLoadingStates } from '../../models/component-loading-states';
|
|
5
|
+
import { formatDate } from '@angular/common';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "ag-grid-angular";
|
|
8
|
+
import * as i2 from "@angular/common";
|
|
9
|
+
import * as i3 from "../../shared/page-size-selector/page-size-selector.component";
|
|
10
|
+
import * as i4 from "../../shared/metadata/metadata.component";
|
|
11
|
+
import * as i5 from "../../shared/loader/loader.component";
|
|
12
|
+
import * as i6 from "../../shared/search-filter/search-filter.component";
|
|
13
|
+
export class RevenuePerTransactionReportComponent {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.data = [];
|
|
16
|
+
this.filteredData = [];
|
|
17
|
+
this.user = "";
|
|
18
|
+
this.sysUserId = "";
|
|
19
|
+
this.ReportName = "Revenue Per Transaction";
|
|
20
|
+
this.reportService = inject(ReportService);
|
|
21
|
+
this.exportService = inject(ExportService);
|
|
22
|
+
this.ComponentLoadingState = ComponentLoadingStates;
|
|
23
|
+
this.loadingState = ComponentLoadingStates.Complete;
|
|
24
|
+
this.searchText = '';
|
|
25
|
+
this.pageSize = 15;
|
|
26
|
+
this.showReport = false;
|
|
27
|
+
this.noDataFound = false;
|
|
28
|
+
this.columnDefs = [
|
|
29
|
+
{ field: 'payInDate', headerName: 'SendDate', flex: 1, headerClass: 'ag-header-cell', minWidth: 100, tooltipField: 'payInDate' },
|
|
30
|
+
{ field: 'payOutDate', headerName: 'Receive Date', flex: 1, headerClass: 'ag-header-cell', minWidth: 100, wrapText: true, autoHeight: true, tooltipField: 'payOutDate' },
|
|
31
|
+
{ field: 'transactionNumber', headerName: 'Transaction Number', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, tooltipField: 'transactionNumber' },
|
|
32
|
+
{ field: 'productCode', headerName: 'Product', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, tooltipField: 'productCode' },
|
|
33
|
+
{ field: 'sendCountry', headerName: 'Send Country', flex: 1, headerClass: 'ag-header-cell', minWidth: 90, wrapText: true, autoHeight: true, tooltipField: 'sendCountry' },
|
|
34
|
+
{ field: 'sendAgentName', headerName: 'SendClient Name', flex: 1, headerClass: 'ag-header-cell', minWidth: 120, wrapText: true, autoHeight: true, tooltipField: 'sendAgentName' },
|
|
35
|
+
{ field: 'sendAgentCode', headerName: 'SendClient Code', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, tooltipField: 'sendAgentCode' },
|
|
36
|
+
{ field: 'sendAgentBranchCode', headerName: 'SendClient BranchCode', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, tooltipField: 'sendAgentBranchCode' },
|
|
37
|
+
{ field: 'receiveCountry', headerName: 'Receive Country', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, tooltipField: 'receiveCountry' },
|
|
38
|
+
{ field: 'receiveAgentName', headerName: 'ReceiveClient Name', flex: 1, headerClass: 'ag-header-cell', minWidth: 150, wrapText: true, autoHeight: true, tooltipField: 'receiveAgentName' },
|
|
39
|
+
{ field: 'receiveAgentCode', headerName: 'ReceiveClient Code', flex: 1, headerClass: 'ag-header-cell', minWidth: 90, wrapText: true, autoHeight: true, tooltipField: 'receiveAgentCode' },
|
|
40
|
+
{ field: 'payInCurrency', headerName: 'Send CcyCode', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, tooltipField: 'payInCurrency' },
|
|
41
|
+
{ field: 'payInAmount', headerName: 'Send Amount', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'payInAmount' },
|
|
42
|
+
{ field: 'transactionCommission', headerName: 'Service Fee', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'transactionCommission' },
|
|
43
|
+
{ field: 'usdRate', headerName: 'USD Rate', flex: 1, headerClass: 'ag-header-cell', wrapText: true, minWidth: 80, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'usdRate' },
|
|
44
|
+
{ field: 'ezRemitSellMargin', headerName: 'XM SellMargin', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'ezRemitSellMargin' },
|
|
45
|
+
{ field: 'ezRemitSellRate', headerName: 'XM SellRate', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'ezRemitSellRate' },
|
|
46
|
+
{ field: 'bankSellRate', headerName: 'Bank SellRate', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'bankSellRate' },
|
|
47
|
+
{ field: 'payOutCurrency', headerName: 'Receive CcyCode', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, tooltipField: 'payOutCurrency' },
|
|
48
|
+
{ field: 'payOutAmount', headerName: 'Receive Amount', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'payOutAmount' },
|
|
49
|
+
{ field: 'beneDeductAmount', headerName: 'BeneDeduct Amount', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'beneDeductAmount' },
|
|
50
|
+
{ field: 'usdRateAppliedPayout', headerName: 'USDRate @Payout', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'usdRateAppliedPayout' },
|
|
51
|
+
{ field: 'xMsCommissionShare', headerName: "XM's Service Fee Share", flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'xmsCommissionShare' },
|
|
52
|
+
{ field: 'xmExchangeVariation', headerName: 'XM Exchange Variation (Gain/Loss)', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'xmExchangeVariation' },
|
|
53
|
+
{ field: 'xMsBeneDeductShare', headerName: "XM's BeneDeduct Share", flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'xmsBeneDeductShare' },
|
|
54
|
+
{ field: 'revenuePerTransaction', headerName: 'Revenue Per Transaction', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'revenuePerTransaction' },
|
|
55
|
+
{ field: 'totalSettleAmount', headerName: 'Total Settlement', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, valueFormatter: this.formatAmount.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'totalSettleAmount' },
|
|
56
|
+
{ field: 'transactionStatus', headerName: 'Transaction Status', flex: 1, headerClass: 'ag-header-cell', minWidth: 80, wrapText: true, autoHeight: true, tooltipField: 'transactionStatus' },
|
|
57
|
+
];
|
|
58
|
+
this.defaultColDef = {
|
|
59
|
+
sortable: true,
|
|
60
|
+
filter: true,
|
|
61
|
+
resizable: true,
|
|
62
|
+
minwidth: 40,
|
|
63
|
+
wrapHeaderText: true,
|
|
64
|
+
autoHeaderHeight: true,
|
|
65
|
+
suppressSizeToFit: false,
|
|
66
|
+
wrapText: true
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
ngOnInit() {
|
|
70
|
+
if (sessionStorage.getItem('fossilusername')) {
|
|
71
|
+
this.sysUserId = sessionStorage.getItem('fossilusername');
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.sysUserId = sessionStorage.getItem('ezremitusername');
|
|
75
|
+
}
|
|
76
|
+
this.sysUserId = this.sysUserId.replace(/^["'](.*)["']$/, '$1');
|
|
77
|
+
}
|
|
78
|
+
onGridReady(params) {
|
|
79
|
+
this.gridApi = params.api;
|
|
80
|
+
this.gridColumnApi = params.columnApi;
|
|
81
|
+
}
|
|
82
|
+
// Currency Formatter
|
|
83
|
+
formatAmount(params) {
|
|
84
|
+
if (params.value == null)
|
|
85
|
+
return '0.000';
|
|
86
|
+
const num = Number(params.value);
|
|
87
|
+
return num.toFixed(3);
|
|
88
|
+
}
|
|
89
|
+
onSearch(text) {
|
|
90
|
+
this.searchText = text;
|
|
91
|
+
if (this.searchText === "") {
|
|
92
|
+
this.filteredData = JSON.parse(JSON.stringify(this.data));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const data = JSON.parse(JSON.stringify(this.data));
|
|
96
|
+
this.filteredData = data.filter((row) => Object.values(row).some(val => String(val).toLowerCase().includes(this.searchText.toLowerCase())));
|
|
97
|
+
}
|
|
98
|
+
handleExport(option) {
|
|
99
|
+
this.selectedExportOption = option;
|
|
100
|
+
if (this.selectedExportOption === 'pdf') {
|
|
101
|
+
this.exportToPDF();
|
|
102
|
+
}
|
|
103
|
+
else if (this.selectedExportOption === 'excel') {
|
|
104
|
+
this.exportToExcel();
|
|
105
|
+
}
|
|
106
|
+
else if (this.selectedExportOption === 'csv') {
|
|
107
|
+
this.exportToCSV();
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
alert('Please select a valid export format.');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exportToExcel() {
|
|
114
|
+
if (!this.data?.length)
|
|
115
|
+
return;
|
|
116
|
+
const title = this.ReportName;
|
|
117
|
+
const metadata = this.exportService.generateReportMetadata([
|
|
118
|
+
['Report User ', this.sysUserId],
|
|
119
|
+
['Report Time ', this.reportDate]
|
|
120
|
+
]);
|
|
121
|
+
const { headers, rows } = this.exportService.prepareExportTable(this.data, this.columnDefs, {
|
|
122
|
+
currencyFields: ['usdRate', 'ezRemitSellMargin', 'ezRemitSellRate', 'bankSellRate', 'payInAmount', 'payOutAmount',
|
|
123
|
+
'transactionCommission', 'beneDeductAmount', 'usdRateAppliedPayout', 'xMsCommissionShare', 'xmExchangeVariation',
|
|
124
|
+
'xMsBeneDeductShare', 'revenuePerTransaction', 'totalSettleAmount'
|
|
125
|
+
]
|
|
126
|
+
});
|
|
127
|
+
this.exportService.exportToExcelUniversal(title, metadata, headers, rows, 'Revenue_Per_Transaction.xlsx');
|
|
128
|
+
}
|
|
129
|
+
exportToCSV() {
|
|
130
|
+
if (!this.data?.length)
|
|
131
|
+
return;
|
|
132
|
+
const title = this.ReportName;
|
|
133
|
+
const metadata = this.exportService.generateReportMetadata([
|
|
134
|
+
['Report User : ', this.sysUserId],
|
|
135
|
+
['Report Time : ', this.reportDate]
|
|
136
|
+
]);
|
|
137
|
+
const { headers, rows } = this.exportService.prepareExportTable(this.data, this.columnDefs, {
|
|
138
|
+
currencyFields: ['usdRate', 'ezRemitSellMargin', 'ezRemitSellRate', 'bankSellRate', 'payInAmount', 'payOutAmount',
|
|
139
|
+
'transactionCommission', 'beneDeductAmount', 'usdRateAppliedPayout', 'xMsCommissionShare', 'xmExchangeVariation',
|
|
140
|
+
'xMsBeneDeductShare', 'revenuePerTransaction', 'totalSettleAmount'
|
|
141
|
+
]
|
|
142
|
+
});
|
|
143
|
+
this.exportService.exportToCsvUniversal(title, metadata, headers, rows, 'Revenue_Per_Transaction.csv');
|
|
144
|
+
}
|
|
145
|
+
exportToPDF() {
|
|
146
|
+
if (!this.data?.length)
|
|
147
|
+
return;
|
|
148
|
+
const title = 'Transaction Enquiry';
|
|
149
|
+
const metadata = this.exportService.generateReportMetadata([
|
|
150
|
+
['Report User : ', this.sysUserId],
|
|
151
|
+
['Report Time : ', this.reportDate]
|
|
152
|
+
]);
|
|
153
|
+
const { headers, rows } = this.exportService.prepareExportTable(this.data, this.columnDefs, {
|
|
154
|
+
currencyFields: ['usdRate', 'ezRemitSellMargin', 'ezRemitSellRate', 'bankSellRate', 'payInAmount', 'payOutAmount',
|
|
155
|
+
'transactionCommission', 'beneDeductAmount', 'usdRateAppliedPayout', 'xMsCommissionShare', 'xmExchangeVariation',
|
|
156
|
+
'xMsBeneDeductShare', 'revenuePerTransaction', 'totalSettleAmount'
|
|
157
|
+
]
|
|
158
|
+
});
|
|
159
|
+
this.exportService.exportToPdfUniversal(title, metadata, headers, rows, 'Revenue_Per_Transaction.pdf')
|
|
160
|
+
.then(() => {
|
|
161
|
+
console.log('PDF export completed.');
|
|
162
|
+
})
|
|
163
|
+
.catch(err => {
|
|
164
|
+
console.error('PDF export failed:', err);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
handleSearch(criteria) {
|
|
168
|
+
this.reportDate = new Date().toISOString();
|
|
169
|
+
this.reportDate = formatDate(this.reportDate, 'dd/MM/yyyy hh:mm a', 'en-US');
|
|
170
|
+
const modal = criteria.modal;
|
|
171
|
+
this.user = this.sysUserId;
|
|
172
|
+
console.log(modal);
|
|
173
|
+
// Code For Meta Data
|
|
174
|
+
this.metaDataOne = {
|
|
175
|
+
'Report User': this.user,
|
|
176
|
+
'Report Time': this.reportDate
|
|
177
|
+
};
|
|
178
|
+
const searchData = {
|
|
179
|
+
"StartDate": modal.fromDate,
|
|
180
|
+
"EndDate": modal.toDate,
|
|
181
|
+
"SendCountryCode": modal.sendCountry,
|
|
182
|
+
"RecvCountryCode": modal.receiveCountry,
|
|
183
|
+
"sendBusinessPartnerId": modal.sendBusinessPartner,
|
|
184
|
+
"RecvBusinessPartenrId": modal.recvBusinessPartner,
|
|
185
|
+
"TransactionStatus": modal.transactionStatus.join(",")
|
|
186
|
+
};
|
|
187
|
+
this.loadingState = ComponentLoadingStates.Loading;
|
|
188
|
+
this.reportService.getRevenuePerTransactionReport(searchData)
|
|
189
|
+
.subscribe({
|
|
190
|
+
next: (data) => {
|
|
191
|
+
this.data = data;
|
|
192
|
+
this.filteredData = JSON.parse(JSON.stringify(this.data));
|
|
193
|
+
console.log(this.data);
|
|
194
|
+
this.noDataFound = data?.length === 0 ? true : false;
|
|
195
|
+
},
|
|
196
|
+
error: (err) => {
|
|
197
|
+
console.log(err);
|
|
198
|
+
this.loadingState = ComponentLoadingStates.Complete;
|
|
199
|
+
},
|
|
200
|
+
complete: () => {
|
|
201
|
+
this.showReport = true;
|
|
202
|
+
this.loadingState = ComponentLoadingStates.Complete;
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
RevenuePerTransactionReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RevenuePerTransactionReportComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
208
|
+
RevenuePerTransactionReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RevenuePerTransactionReportComponent, selector: "lib-revenue-per-transaction-report", ngImport: i0, template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"handleSearch($event)\">\r\n</lib-search-filter>\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n<section *ngIf=\"showReport\" class=\"my-2 mx-1\">\r\n\r\n <ng-container *ngIf=\"!noDataFound\">\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"false\"\r\n [metaDataOne]=\"metaDataOne\" [metaDataTwo]=\"\" (exportEvent)=\"handleExport($event)\"\r\n (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n <div style=\"position: relative;\" *ngIf=\"filteredData?.length>0\">\r\n <lib-page-size-selector [totalEntries]=\"data?.length\" [defaultSize]=\"'15'\" [gridApi]=\"gridApi\">\r\n ></lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid\" style=\"width: 100%;height: 407px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"filteredData\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [pagination]=\"true\" [paginationPageSize]=\"pageSize\"\r\n (gridReady)=\"onGridReady($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data found matching your search criteria.\r\n </div>\r\n\r\n</section>", styles: [".transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important;height:auto!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: i1.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "component", type: i4.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i5.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i6.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked"] }] });
|
|
209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RevenuePerTransactionReportComponent, decorators: [{
|
|
210
|
+
type: Component,
|
|
211
|
+
args: [{ selector: 'lib-revenue-per-transaction-report', template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"handleSearch($event)\">\r\n</lib-search-filter>\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n<section *ngIf=\"showReport\" class=\"my-2 mx-1\">\r\n\r\n <ng-container *ngIf=\"!noDataFound\">\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"false\"\r\n [metaDataOne]=\"metaDataOne\" [metaDataTwo]=\"\" (exportEvent)=\"handleExport($event)\"\r\n (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n <div style=\"position: relative;\" *ngIf=\"filteredData?.length>0\">\r\n <lib-page-size-selector [totalEntries]=\"data?.length\" [defaultSize]=\"'15'\" [gridApi]=\"gridApi\">\r\n ></lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid\" style=\"width: 100%;height: 407px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"filteredData\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [pagination]=\"true\" [paginationPageSize]=\"pageSize\"\r\n (gridReady)=\"onGridReady($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data found matching your search criteria.\r\n </div>\r\n\r\n</section>", styles: [".transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important;height:auto!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}\n"] }]
|
|
212
|
+
}], ctorParameters: function () { return []; } });
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZW51ZS1wZXItdHJhbnNhY3Rpb24tcmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9yZXZlbnVlLXBlci10cmFuc2FjdGlvbi1yZXBvcnQvcmV2ZW51ZS1wZXItdHJhbnNhY3Rpb24tcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9yZXZlbnVlLXBlci10cmFuc2FjdGlvbi1yZXBvcnQvcmV2ZW51ZS1wZXItdHJhbnNhY3Rpb24tcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQU83QyxNQUFNLE9BQU8sb0NBQW9DO0lBOEQvQztRQTdEQSxTQUFJLEdBQXlDLEVBQUUsQ0FBQztRQUNoRCxpQkFBWSxHQUF5QyxFQUFFLENBQUM7UUFDeEQsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyx5QkFBeUIsQ0FBQTtRQUN0QyxrQkFBYSxHQUFrQixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckQsa0JBQWEsR0FBa0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBR3JELDBCQUFxQixHQUFHLHNCQUFzQixDQUFD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TyxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsVUFBVSxDQUFDO2FBQzFELFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7WUFDdEQsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNOLENBQUM7O2lJQXJOVSxvQ0FBb0M7cUhBQXBDLG9DQUFvQywwRUNiakQsMDdDQXlCVTsyRkRaRyxvQ0FBb0M7a0JBTGhELFNBQVM7K0JBQ0Usb0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXNwb25zZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3JldmVudWUtcGVyLXRyYW5zYWN0aW9uLXJlcG9ydC9yZXZlbnVlLXBlci10cmFuc2FjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFJlcG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXhwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRMb2FkaW5nU3RhdGVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBvbmVudC1sb2FkaW5nLXN0YXRlcyc7XHJcbmltcG9ydCB7IENvbERlZiwgQ29sdW1uQXBpLCBHcmlkQXBpLCBHcmlkUmVhZHlFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1yZXZlbnVlLXBlci10cmFuc2FjdGlvbi1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXZlbnVlLXBlci10cmFuc2FjdGlvbi1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JldmVudWUtcGVyLXRyYW5zYWN0aW9uLXJlcG9ydC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGRhdGE6IFJldmVudWVQZXJUcmFuc2FjdGlvblJlc3BvbnNlTW9kZWxbXSA9IFtdO1xyXG4gIGZpbHRlcmVkRGF0YTogUmV2ZW51ZVBlclRyYW5zYWN0aW9uUmVzcG9uc2VNb2RlbFtdID0gW107XHJcbiAgdXNlcjogc3RyaW5nID0gXCJcIjtcclxuICBzeXNVc2VySWQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgUmVwb3J0TmFtZSA9IFwiUmV2ZW51ZSBQZXIgVHJhbnNhY3Rpb25cIlxyXG4gIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2VydmljZSk7XHJcbiAgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSA9IGluamVjdChFeHBvcnRTZXJ2aWNlKTtcclxuICByZXBvcnREYXRlOiBzdHJpbmc7XHJcbiAgbWV0YURhdGFPbmU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgQ29tcG9uZW50TG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcztcclxuICBsb2FkaW5nU3RhdGU6IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gIHNlbGVjdGVkRXhwb3J0T3B0aW9uOiBzdHJpbmc7XHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcGFnZVNpemU6IG51bWJlciA9IDE1O1xyXG5cclxuICBncmlkQXBpOiBHcmlkQXBpO1xyXG4gIGdyaWRDb2x1bW5BcGk6IENvbHVtbkFwaTtcclxuICBzaG93UmVwb3J0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgbm9EYXRhRm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29sdW1uRGVmczogQ29sRGVmPFJldmVudWVQZXJUcmFuc2FjdGlvblJlc3BvbnNlTW9kZWw+W10gPSBbXHJcbiAgICB7IGZpZWxkOiAncGF5SW5EYXRlJywgaGVhZGVyTmFtZTogJ1NlbmREYXRlJywgZmxleDogMSwgaGVhZGVyQ2xhc3M6ICdhZy1oZWFkZXItY2VsbCcsIG1pbldpZHRoOiAxMDAsIHRvb2x0aXBGaWVsZDogJ3BheUluRGF0ZScgfSxcclxuICAgIHsgZmllbGQ6ICdwYXlPdXREYXRlJywgaGVhZGVyTmFtZTogJ1JlY2VpdmUgRGF0ZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogMTAwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdG9vbHRpcEZpZWxkOiAncGF5T3V0RGF0ZScgfSxcclxuICAgIHsgZmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicsIGhlYWRlck5hbWU6ICdUcmFuc2FjdGlvbiBOdW1iZXInLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDgwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdG9vbHRpcEZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInIH0sXHJcbiAgICB7IGZpZWxkOiAncHJvZHVjdENvZGUnLCBoZWFkZXJOYW1lOiAnUHJvZHVjdCcsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB0b29sdGlwRmllbGQ6ICdwcm9kdWN0Q29kZScgfSxcclxuICAgIHsgZmllbGQ6ICdzZW5kQ291bnRyeScsIGhlYWRlck5hbWU6ICdTZW5kIENvdW50cnknLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDkwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdG9vbHRpcEZpZWxkOiAnc2VuZENvdW50cnknIH0sXHJcbiAgICB7IGZpZWxkOiAnc2VuZEFnZW50TmFtZScsIGhlYWRlck5hbWU6ICdTZW5kQ2xpZW50IE5hbWUnLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDEyMCwgd3JhcFRleHQ6IHRydWUsIGF1dG9IZWlnaHQ6IHRydWUsIHRvb2x0aXBGaWVsZDogJ3NlbmRBZ2VudE5hbWUnIH0sXHJcbiAgICB7IGZpZWxkOiAnc2VuZEFnZW50Q29kZScsIGhlYWRlck5hbWU6ICdTZW5kQ2xpZW50IENvZGUnLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDgwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdG9vbHRpcEZpZWxkOiAnc2VuZEFnZW50Q29kZScgfSxcclxuICAgIHsgZmllbGQ6ICdzZW5kQWdlbnRCcmFuY2hDb2RlJywgaGVhZGVyTmFtZTogJ1NlbmRDbGllbnQgQnJhbmNoQ29kZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB0b29sdGlwRmllbGQ6ICdzZW5kQWdlbnRCcmFuY2hDb2RlJyB9LFxyXG4gICAgeyBmaWVsZDogJ3JlY2VpdmVDb3VudHJ5JywgaGVhZGVyTmFtZTogJ1JlY2VpdmUgQ291bnRyeScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB0b29sdGlwRmllbGQ6ICdyZWNlaXZlQ291bnRyeScgfSxcclxuICAgIHsgZmllbGQ6ICdyZWNlaXZlQWdlbnROYW1lJywgaGVhZGVyTmFtZTogJ1JlY2VpdmVDbGllbnQgTmFtZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogMTUwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdG9vbHRpcEZpZWxkOiAncmVjZWl2ZUFnZW50TmFtZScgfSxcclxuICAgIHsgZmllbGQ6ICdyZWNlaXZlQWdlbnRDb2RlJywgaGVhZGVyTmFtZTogJ1JlY2VpdmVDbGllbnQgQ29kZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogOTAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB0b29sdGlwRmllbGQ6ICdyZWNlaXZlQWdlbnRDb2RlJyB9LFxyXG4gICAgeyBmaWVsZDogJ3BheUluQ3VycmVuY3knLCBoZWFkZXJOYW1lOiAnU2VuZCBDY3lDb2RlJywgZmxleDogMSwgaGVhZGVyQ2xhc3M6ICdhZy1oZWFkZXItY2VsbCcsIG1pbldpZHRoOiA4MCwgd3JhcFRleHQ6IHRydWUsIGF1dG9IZWlnaHQ6IHRydWUsIHRvb2x0aXBGaWVsZDogJ3BheUluQ3VycmVuY3knIH0sXHJcbiAgICB7IGZpZWxkOiAncGF5SW5BbW91bnQnLCBoZWFkZXJOYW1lOiAnU2VuZCBBbW91bnQnLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDgwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuZm9ybWF0QW1vdW50LmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICdwYXlJbkFtb3VudCcgfSxcclxuICAgIHsgZmllbGQ6ICd0cmFuc2FjdGlvbkNvbW1pc3Npb24nLCBoZWFkZXJOYW1lOiAnU2VydmljZSBGZWUnLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDgwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuZm9ybWF0QW1vdW50LmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbkNvbW1pc3Npb24nIH0sXHJcbiAgICB7IGZpZWxkOiAndXNkUmF0ZScsIGhlYWRlck5hbWU6ICdVU0QgUmF0ZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCB3cmFwVGV4dDogdHJ1ZSwgbWluV2lkdGg6IDgwLCBhdXRvSGVpZ2h0OiB0cnVlLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXRBbW91bnQuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3VzZFJhdGUnIH0sXHJcbiAgICB7IGZpZWxkOiAnZXpSZW1pdFNlbGxNYXJnaW4nLCBoZWFkZXJOYW1lOiAnWE0gU2VsbE1hcmdpbicsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXRBbW91bnQuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ2V6UmVtaXRTZWxsTWFyZ2luJyB9LFxyXG4gICAgeyBmaWVsZDogJ2V6UmVtaXRTZWxsUmF0ZScsIGhlYWRlck5hbWU6ICdYTSBTZWxsUmF0ZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXRBbW91bnQuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ2V6UmVtaXRTZWxsUmF0ZScgfSxcclxuICAgIHsgZmllbGQ6ICdiYW5rU2VsbFJhdGUnLCBoZWFkZXJOYW1lOiAnQmFuayBTZWxsUmF0ZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXRBbW91bnQuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ2JhbmtTZWxsUmF0ZScgfSxcclxuICAgIHsgZmllbGQ6ICdwYXlPdXRDdXJyZW5jeScsIGhlYWRlck5hbWU6ICdSZWNlaXZlIENjeUNvZGUnLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDgwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdG9vbHRpcEZpZWxkOiAncGF5T3V0Q3VycmVuY3knIH0sXHJcbiAgICB7IGZpZWxkOiAncGF5T3V0QW1vdW50JywgaGVhZGVyTmFtZTogJ1JlY2VpdmUgQW1vdW50JywgZmxleDogMSwgaGVhZGVyQ2xhc3M6ICdhZy1oZWFkZXItY2VsbCcsIG1pbldpZHRoOiA4MCwgd3JhcFRleHQ6IHRydWUsIGF1dG9IZWlnaHQ6IHRydWUsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmZvcm1hdEFtb3VudC5iaW5kKHRoaXMpLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwgY29tcGFjdC1jZWxsJywgdG9vbHRpcEZpZWxkOiAncGF5T3V0QW1vdW50JyB9LFxyXG4gICAgeyBmaWVsZDogJ2JlbmVEZWR1Y3RBbW91bnQnLCBoZWFkZXJOYW1lOiAnQmVuZURlZHVjdCBBbW91bnQnLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDgwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuZm9ybWF0QW1vdW50LmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICdiZW5lRGVkdWN0QW1vdW50JyB9LFxyXG4gICAgeyBmaWVsZDogJ3VzZFJhdGVBcHBsaWVkUGF5b3V0JywgaGVhZGVyTmFtZTogJ1VTRFJhdGUgQFBheW91dCcsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXRBbW91bnQuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3VzZFJhdGVBcHBsaWVkUGF5b3V0JyB9LFxyXG4gICAgeyBmaWVsZDogJ3hNc0NvbW1pc3Npb25TaGFyZScsIGhlYWRlck5hbWU6IFwiWE0ncyBTZXJ2aWNlIEZlZSBTaGFyZVwiLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDgwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuZm9ybWF0QW1vdW50LmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICd4bXNDb21taXNzaW9uU2hhcmUnIH0sXHJcbiAgICB7IGZpZWxkOiAneG1FeGNoYW5nZVZhcmlhdGlvbicsIGhlYWRlck5hbWU6ICdYTSBFeGNoYW5nZSBWYXJpYXRpb24gKEdhaW4vTG9zcyknLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDgwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuZm9ybWF0QW1vdW50LmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICd4bUV4Y2hhbmdlVmFyaWF0aW9uJyB9LFxyXG4gICAgeyBmaWVsZDogJ3hNc0JlbmVEZWR1Y3RTaGFyZScsIGhlYWRlck5hbWU6IFwiWE0ncyBCZW5lRGVkdWN0IFNoYXJlXCIsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXRBbW91bnQuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3htc0JlbmVEZWR1Y3RTaGFyZScgfSxcclxuICAgIHsgZmllbGQ6ICdyZXZlbnVlUGVyVHJhbnNhY3Rpb24nLCBoZWFkZXJOYW1lOiAnUmV2ZW51ZSBQZXIgVHJhbnNhY3Rpb24nLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDgwLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuZm9ybWF0QW1vdW50LmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICdyZXZlbnVlUGVyVHJhbnNhY3Rpb24nIH0sXHJcbiAgICB7IGZpZWxkOiAndG90YWxTZXR0bGVBbW91bnQnLCBoZWFkZXJOYW1lOiAnVG90YWwgU2V0dGxlbWVudCcsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXRBbW91bnQuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3RvdGFsU2V0dGxlQW1vdW50JyB9LFxyXG4gICAgeyBmaWVsZDogJ3RyYW5zYWN0aW9uU3RhdHVzJywgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIFN0YXR1cycsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtaW5XaWR0aDogODAsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvblN0YXR1cycgfSxcclxuICBdXHJcblxyXG4gIGRlZmF1bHRDb2xEZWYgPSB7XHJcbiAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgIGZpbHRlcjogdHJ1ZSxcclxuICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgIG1pbndpZHRoOiA0MCxcclxuICAgIHdyYXBIZWFkZXJUZXh0OiB0cnVlLFxyXG4gICAgYXV0b0hlYWRlckhlaWdodDogdHJ1ZSxcclxuICAgIHN1cHByZXNzU2l6ZVRvRml0OiBmYWxzZSxcclxuICAgIHdyYXBUZXh0OiB0cnVlXHJcbiAgfTtcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmb3NzaWx1c2VybmFtZScpKSB7XHJcbiAgICAgIHRoaXMuc3lzVXNlcklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZm9zc2lsdXNlcm5hbWUnKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3lzVXNlcklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXpyZW1pdHVzZXJuYW1lJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN5c1VzZXJJZCA9IHRoaXMuc3lzVXNlcklkLnJlcGxhY2UoL15bXCInXSguKilbXCInXSQvLCAnJDEnKTtcclxuICB9XHJcblxyXG4gIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQpIHtcclxuICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XHJcbiAgICB0aGlzLmdyaWRDb2x1bW5BcGkgPSBwYXJhbXMuY29sdW1uQXBpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ3VycmVuY3kgRm9ybWF0dGVyXHJcbiAgZm9ybWF0QW1vdW50KHBhcmFtczogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChwYXJhbXMudmFsdWUgPT0gbnVsbCkgcmV0dXJuICcwLjAwMCc7XHJcbiAgICBjb25zdCBudW0gPSBOdW1iZXIocGFyYW1zLnZhbHVlKTtcclxuICAgIHJldHVybiBudW0udG9GaXhlZCgzKTsgXHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRleHQ7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0ID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IGRhdGEuZmlsdGVyKChyb3cpID0+XHJcbiAgICAgIE9iamVjdC52YWx1ZXMocm93KS5zb21lKHZhbCA9PiBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIGhhbmRsZUV4cG9ydChvcHRpb246IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiA9IG9wdGlvbjtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uID09PSAncGRmJykge1xyXG4gICAgICB0aGlzLmV4cG9ydFRvUERGKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24gPT09ICdleGNlbCcpIHtcclxuICAgICAgdGhpcy5leHBvcnRUb0V4Y2VsKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24gPT09ICdjc3YnKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0VG9DU1YoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGEgdmFsaWQgZXhwb3J0IGZvcm1hdC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydFRvRXhjZWwoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YT8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLlJlcG9ydE5hbWU7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVJlcG9ydE1ldGFkYXRhKFtcclxuICAgICAgWydSZXBvcnQgVXNlciAnLCB0aGlzLnN5c1VzZXJJZF0sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWUgJywgdGhpcy5yZXBvcnREYXRlXVxyXG4gICAgXSk7XHJcblxyXG4gICAgY29uc3QgeyBoZWFkZXJzLCByb3dzIH0gPSB0aGlzLmV4cG9ydFNlcnZpY2UucHJlcGFyZUV4cG9ydFRhYmxlKHRoaXMuZGF0YSwgdGhpcy5jb2x1bW5EZWZzLCB7XHJcbiAgICAgIGN1cnJlbmN5RmllbGRzOiBbJ3VzZFJhdGUnLCAnZXpSZW1pdFNlbGxNYXJnaW4nLCAnZXpSZW1pdFNlbGxSYXRlJywgJ2JhbmtTZWxsUmF0ZScsICdwYXlJbkFtb3VudCcsICdwYXlPdXRBbW91bnQnLFxyXG4gICAgICAgICd0cmFuc2FjdGlvbkNvbW1pc3Npb24nLCAnYmVuZURlZHVjdEFtb3VudCcsICd1c2RSYXRlQXBwbGllZFBheW91dCcsICd4TXNDb21taXNzaW9uU2hhcmUnLCAneG1FeGNoYW5nZVZhcmlhdGlvbicsXHJcbiAgICAgICAgJ3hNc0JlbmVEZWR1Y3RTaGFyZScsICdyZXZlbnVlUGVyVHJhbnNhY3Rpb24nLCAndG90YWxTZXR0bGVBbW91bnQnXHJcbiAgICAgIF1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRUb0V4Y2VsVW5pdmVyc2FsKHRpdGxlLCBtZXRhZGF0YSwgaGVhZGVycywgcm93cywgJ1JldmVudWVfUGVyX1RyYW5zYWN0aW9uLnhsc3gnKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFRvQ1NWKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRhdGE/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5SZXBvcnROYW1lO1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVSZXBvcnRNZXRhZGF0YShbXHJcbiAgICAgIFsnUmVwb3J0IFVzZXIgOiAnLCB0aGlzLnN5c1VzZXJJZF0sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWUgOiAnLCB0aGlzLnJlcG9ydERhdGVdXHJcbiAgICBdKTtcclxuXHJcbiAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMuZXhwb3J0U2VydmljZS5wcmVwYXJlRXhwb3J0VGFibGUodGhpcy5kYXRhLCB0aGlzLmNvbHVtbkRlZnMsIHtcclxuICAgICAgY3VycmVuY3lGaWVsZHM6IFsndXNkUmF0ZScsICdlelJlbWl0U2VsbE1hcmdpbicsICdlelJlbWl0U2VsbFJhdGUnLCAnYmFua1NlbGxSYXRlJywgJ3BheUluQW1vdW50JywgJ3BheU91dEFtb3VudCcsXHJcbiAgICAgICAgJ3RyYW5zYWN0aW9uQ29tbWlzc2lvbicsICdiZW5lRGVkdWN0QW1vdW50JywgJ3VzZFJhdGVBcHBsaWVkUGF5b3V0JywgJ3hNc0NvbW1pc3Npb25TaGFyZScsICd4bUV4Y2hhbmdlVmFyaWF0aW9uJyxcclxuICAgICAgICAneE1zQmVuZURlZHVjdFNoYXJlJywgJ3JldmVudWVQZXJUcmFuc2FjdGlvbicsICd0b3RhbFNldHRsZUFtb3VudCdcclxuICAgICAgXVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydFRvQ3N2VW5pdmVyc2FsKHRpdGxlLCBtZXRhZGF0YSwgaGVhZGVycywgcm93cywgJ1JldmVudWVfUGVyX1RyYW5zYWN0aW9uLmNzdicpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9QREYoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YT8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGl0bGUgPSAnVHJhbnNhY3Rpb24gRW5xdWlyeSc7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVJlcG9ydE1ldGFkYXRhKFtcclxuICAgICAgWydSZXBvcnQgVXNlciA6ICcsIHRoaXMuc3lzVXNlcklkXSxcclxuICAgICAgWydSZXBvcnQgVGltZSA6ICcsIHRoaXMucmVwb3J0RGF0ZV1cclxuICAgIF0pO1xyXG5cclxuICAgIGNvbnN0IHsgaGVhZGVycywgcm93cyB9ID0gdGhpcy5leHBvcnRTZXJ2aWNlLnByZXBhcmVFeHBvcnRUYWJsZSh0aGlzLmRhdGEsIHRoaXMuY29sdW1uRGVmcywge1xyXG4gICAgICBjdXJyZW5jeUZpZWxkczogWyd1c2RSYXRlJywgJ2V6UmVtaXRTZWxsTWFyZ2luJywgJ2V6UmVtaXRTZWxsUmF0ZScsICdiYW5rU2VsbFJhdGUnLCAncGF5SW5BbW91bnQnLCAncGF5T3V0QW1vdW50JyxcclxuICAgICAgICAndHJhbnNhY3Rpb25Db21taXNzaW9uJywgJ2JlbmVEZWR1Y3RBbW91bnQnLCAndXNkUmF0ZUFwcGxpZWRQYXlvdXQnLCAneE1zQ29tbWlzc2lvblNoYXJlJywgJ3htRXhjaGFuZ2VWYXJpYXRpb24nLFxyXG4gICAgICAgICd4TXNCZW5lRGVkdWN0U2hhcmUnLCAncmV2ZW51ZVBlclRyYW5zYWN0aW9uJywgJ3RvdGFsU2V0dGxlQW1vdW50J1xyXG4gICAgICBdXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0VG9QZGZVbml2ZXJzYWwodGl0bGUsIG1ldGFkYXRhLCBoZWFkZXJzLCByb3dzLCAnUmV2ZW51ZV9QZXJfVHJhbnNhY3Rpb24ucGRmJylcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQREYgZXhwb3J0IGNvbXBsZXRlZC4nKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignUERGIGV4cG9ydCBmYWlsZWQ6JywgZXJyKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTZWFyY2goY3JpdGVyaWE6IGFueSkge1xyXG4gICAgdGhpcy5yZXBvcnREYXRlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgdGhpcy5yZXBvcnREYXRlID0gZm9ybWF0RGF0ZSh0aGlzLnJlcG9ydERhdGUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcclxuICAgIGNvbnN0IG1vZGFsID0gY3JpdGVyaWEubW9kYWw7XHJcbiAgICB0aGlzLnVzZXIgPSB0aGlzLnN5c1VzZXJJZDtcclxuICAgIGNvbnNvbGUubG9nKG1vZGFsKTtcclxuICAgIC8vIENvZGUgRm9yIE1ldGEgRGF0YVxyXG4gICAgdGhpcy5tZXRhRGF0YU9uZSA9IHtcclxuICAgICAgJ1JlcG9ydCBVc2VyJzogdGhpcy51c2VyLFxyXG4gICAgICAnUmVwb3J0IFRpbWUnOiB0aGlzLnJlcG9ydERhdGVcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWFyY2hEYXRhID0ge1xyXG4gICAgICBcIlN0YXJ0RGF0ZVwiOiBtb2RhbC5mcm9tRGF0ZSxcclxuICAgICAgXCJFbmREYXRlXCI6IG1vZGFsLnRvRGF0ZSxcclxuICAgICAgXCJTZW5kQ291bnRyeUNvZGVcIjogbW9kYWwuc2VuZENvdW50cnksXHJcbiAgICAgIFwiUmVjdkNvdW50cnlDb2RlXCI6IG1vZGFsLnJlY2VpdmVDb3VudHJ5LFxyXG4gICAgICBcInNlbmRCdXNpbmVzc1BhcnRuZXJJZFwiOiBtb2RhbC5zZW5kQnVzaW5lc3NQYXJ0bmVyLFxyXG4gICAgICBcIlJlY3ZCdXNpbmVzc1BhcnRlbnJJZFwiOiBtb2RhbC5yZWN2QnVzaW5lc3NQYXJ0bmVyLFxyXG4gICAgICBcIlRyYW5zYWN0aW9uU3RhdHVzXCI6IG1vZGFsLnRyYW5zYWN0aW9uU3RhdHVzLmpvaW4oXCIsXCIpXHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcclxuICAgIHRoaXMucmVwb3J0U2VydmljZS5nZXRSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXBvcnQoc2VhcmNoRGF0YSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IGRhdGE/Lmxlbmd0aCA9PT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd1JlcG9ydCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGxpYi1zZWFyY2gtZmlsdGVyIFtSZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiAoc2VhcmNoQ2xpY2tlZCk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiPlxyXG48L2xpYi1zZWFyY2gtZmlsdGVyPlxyXG48YXBwLWxvYWRlciBjbGFzcz1cIlwiICpuZ0lmPVwibG9hZGluZ1N0YXRlID09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nXCI+PC9hcHAtbG9hZGVyPlxyXG48c2VjdGlvbiAqbmdJZj1cInNob3dSZXBvcnRcIiBjbGFzcz1cIm15LTIgbXgtMVwiPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9EYXRhRm91bmRcIj5cclxuICAgICAgICA8bGliLW1ldGFkYXRhIFtyZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiBbc2hvd21ldGFEYXRhT25lXT1cInRydWVcIiBbc2hvd21ldGFEYXRhVHdvXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW21ldGFEYXRhT25lXT1cIm1ldGFEYXRhT25lXCIgW21ldGFEYXRhVHdvXT1cIlwiIChleHBvcnRFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzZWFyY2hFdmVudCk9XCJvblNlYXJjaCgkZXZlbnQpXCI+PC9saWItbWV0YWRhdGE+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIiAqbmdJZj1cImZpbHRlcmVkRGF0YT8ubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgPGxpYi1wYWdlLXNpemUtc2VsZWN0b3IgW3RvdGFsRW50cmllc109XCJkYXRhPy5sZW5ndGhcIiBbZGVmYXVsdFNpemVdPVwiJzE1J1wiIFtncmlkQXBpXT1cImdyaWRBcGlcIj5cclxuICAgICAgICAgICAgICAgID48L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XHJcblxyXG4gICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lIHRyYW5zYWN0aW9uLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2hlaWdodDogNDA3cHg7XCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgW3Jvd0RhdGFdPVwiZmlsdGVyZWREYXRhXCIgW3Jvd0hlaWdodF09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjIyXCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbXQtM1wiICpuZ0lmPVwibm9EYXRhRm91bmRcIj5cclxuICAgICAgICBObyBEYXRhIGZvdW5kIG1hdGNoaW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhLlxyXG4gICAgPC9kaXY+XHJcblxyXG48L3NlY3Rpb24+Il19
|