@sachin9822/reports-lib 0.0.148 → 0.0.150
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 +22 -8
- package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +254 -0
- package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +463 -0
- package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +33 -53
- package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +348 -0
- package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +28 -77
- package/esm2020/lib/models/accounting-report/accounting-report-entry-model.mjs +2 -0
- package/esm2020/lib/models/accounting-report/accounting-report-model.mjs +2 -0
- package/esm2020/lib/models/branch-activity-receive-report/branch-activity-receive.model.mjs +2 -0
- package/esm2020/lib/models/cancellation-transaction-report/cancellation-transaction.model.mjs +2 -0
- package/esm2020/lib/reports-lib.module.mjs +18 -5
- package/esm2020/lib/services/report.service.mjs +91 -1
- package/esm2020/lib/shared/export-generic.service.mjs +324 -0
- package/esm2020/lib/shared/export.service.mjs +2 -2
- package/esm2020/lib/shared/metadata/metadata.component.mjs +50 -0
- package/esm2020/lib/shared/page-size-selector/page-size-selector.component.mjs +2 -2
- package/esm2020/lib/shared/search-filter/search-filter.component.mjs +402 -23
- package/esm2020/lib/shared/shared.module.mjs +8 -6
- package/esm2020/public-api.mjs +7 -1
- package/esm2020/sachin9822-reports-lib.mjs +5 -0
- package/fesm2015/sachin9822-reports-lib.mjs +4054 -0
- package/fesm2015/sachin9822-reports-lib.mjs.map +1 -0
- package/fesm2020/sachin9822-reports-lib.mjs +4013 -0
- package/fesm2020/sachin9822-reports-lib.mjs.map +1 -0
- package/index.d.ts +1 -1
- package/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.d.ts +5 -2
- package/lib/components/accounting-report/accounting-report.component.d.ts +56 -0
- package/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.d.ts +52 -0
- package/lib/components/branch-activity-send-report/branch-activity-send-report.component.d.ts +4 -31
- package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +99 -0
- package/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.d.ts +4 -32
- package/lib/models/accounting-report/accounting-report-entry-model.d.ts +24 -0
- package/lib/models/accounting-report/accounting-report-model.d.ts +8 -0
- package/lib/models/branch-activity-receive-report/branch-activity-receive.model.d.ts +18 -0
- package/lib/models/cancellation-transaction-report/cancellation-transaction.model.d.ts +44 -0
- package/lib/reports-lib.module.d.ts +13 -10
- package/lib/services/report.service.d.ts +18 -0
- package/lib/shared/export-generic.service.d.ts +47 -0
- package/lib/shared/metadata/metadata.component.d.ts +24 -0
- package/lib/shared/search-filter/search-filter.component.d.ts +3 -0
- package/lib/shared/shared.module.d.ts +5 -3
- package/package.json +1 -1
- package/public-api.d.ts +6 -0
- package/esm2020/xpressmoney-reports-lib.mjs +0 -5
- package/fesm2015/xpressmoney-reports-lib.mjs +0 -2230
- package/fesm2015/xpressmoney-reports-lib.mjs.map +0 -1
- package/fesm2020/xpressmoney-reports-lib.mjs +0 -2200
- package/fesm2020/xpressmoney-reports-lib.mjs.map +0 -1
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
// export-generic.service.ts
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import jsPDF from 'jspdf';
|
|
4
|
+
import 'jspdf-autotable';
|
|
5
|
+
import * as ExcelJS from 'exceljs';
|
|
6
|
+
import * as FileSaver from 'file-saver';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class GenericExportService {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.pdfFontSize = 10;
|
|
11
|
+
this.pdfLineHeight = 7;
|
|
12
|
+
this.pdfLeftMargin = 15;
|
|
13
|
+
this.loadImageAsBase64('assets/reports-lib/assets/images/XMLogo.png').then(base64 => {
|
|
14
|
+
this.logoBase64 = base64;
|
|
15
|
+
}).catch(() => {
|
|
16
|
+
console.warn('Logo image failed to load');
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
loadImageAsBase64(imagePath) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const img = new Image();
|
|
22
|
+
img.crossOrigin = 'anonymous';
|
|
23
|
+
img.src = imagePath;
|
|
24
|
+
img.onload = () => {
|
|
25
|
+
const scale = 6;
|
|
26
|
+
const canvas = document.createElement('canvas');
|
|
27
|
+
canvas.width = img.width * scale;
|
|
28
|
+
canvas.height = img.height * scale;
|
|
29
|
+
const ctx = canvas.getContext('2d');
|
|
30
|
+
if (ctx) {
|
|
31
|
+
ctx.scale(scale, scale);
|
|
32
|
+
ctx.drawImage(img, 0, 0);
|
|
33
|
+
resolve(canvas.toDataURL('image/png', 1.0));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
reject('Failed to get canvas context.');
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
img.onerror = () => reject('Failed to load image: ' + imagePath);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// ==================== PDF EXPORT ====================
|
|
43
|
+
async exportToPdf({ title, metadata, columns, data, options = {} }) {
|
|
44
|
+
const doc = new jsPDF({ orientation: 'landscape', unit: 'mm', format: [400, 210] });
|
|
45
|
+
const headers = ['Sr No', ...columns.map(c => c.headerName || c.field)];
|
|
46
|
+
let rows = [];
|
|
47
|
+
if (options.groupByKey && !Array.isArray(data)) {
|
|
48
|
+
for (const [group, items] of Object.entries(data)) {
|
|
49
|
+
rows.push([{ content: group, colSpan: headers.length, styles: { halign: 'left', fontStyle: 'bold' } }]);
|
|
50
|
+
rows.push(...this.prepareTableRows(items, columns, options));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
rows = this.prepareTableRows(data, columns, options);
|
|
55
|
+
}
|
|
56
|
+
// Add logo at top left if available
|
|
57
|
+
if (this.logoBase64) {
|
|
58
|
+
doc.addImage(this.logoBase64, 'PNG', 15, 10, 38.4, 17.5);
|
|
59
|
+
}
|
|
60
|
+
// Title
|
|
61
|
+
doc.setFontSize(15);
|
|
62
|
+
doc.setFont('helvetica', 'bold');
|
|
63
|
+
doc.text(title, doc.internal.pageSize.width / 2, 18, { align: 'center' });
|
|
64
|
+
// Metadata
|
|
65
|
+
let currentY = 32;
|
|
66
|
+
doc.setFontSize(this.pdfFontSize);
|
|
67
|
+
metadata.forEach(([label, value], i) => {
|
|
68
|
+
const y = currentY + i * this.pdfLineHeight;
|
|
69
|
+
doc.setFont('helvetica', 'bold');
|
|
70
|
+
const labelWithColon = label + ' :';
|
|
71
|
+
doc.text(labelWithColon, this.pdfLeftMargin, y);
|
|
72
|
+
const labelWidth = doc.getTextWidth(labelWithColon + ' ');
|
|
73
|
+
doc.setFont('helvetica', 'normal');
|
|
74
|
+
doc.text(value, this.pdfLeftMargin + labelWidth, y);
|
|
75
|
+
});
|
|
76
|
+
currentY += metadata.length * this.pdfLineHeight + 5;
|
|
77
|
+
// Table styling
|
|
78
|
+
const columnStyles = {};
|
|
79
|
+
headers.forEach((_, i) => columnStyles[i] = { cellWidth: 'auto' });
|
|
80
|
+
doc.autoTable({
|
|
81
|
+
head: [headers],
|
|
82
|
+
body: rows,
|
|
83
|
+
startY: currentY,
|
|
84
|
+
theme: 'grid',
|
|
85
|
+
headStyles: {
|
|
86
|
+
fillColor: [220, 220, 220],
|
|
87
|
+
textColor: 0,
|
|
88
|
+
fontStyle: 'bold',
|
|
89
|
+
fontSize: 9,
|
|
90
|
+
halign: 'center'
|
|
91
|
+
},
|
|
92
|
+
bodyStyles: {
|
|
93
|
+
fontSize: 8,
|
|
94
|
+
fillColor: [255, 255, 255],
|
|
95
|
+
textColor: [0, 0, 0]
|
|
96
|
+
},
|
|
97
|
+
styles: {
|
|
98
|
+
cellPadding: 2,
|
|
99
|
+
overflow: 'linebreak',
|
|
100
|
+
minCellHeight: 6
|
|
101
|
+
},
|
|
102
|
+
columnStyles
|
|
103
|
+
});
|
|
104
|
+
doc.save(title.replace(/\s/g, '-') + '.pdf');
|
|
105
|
+
}
|
|
106
|
+
// ========== EXCEL EXPORT ==========
|
|
107
|
+
async exportToExcel({ title, metadata, columns, data, options = {} }) {
|
|
108
|
+
const workbook = new ExcelJS.Workbook();
|
|
109
|
+
const worksheet = workbook.addWorksheet(title);
|
|
110
|
+
// Pre-calc
|
|
111
|
+
const headerLabels = ['Sr No', ...columns.map(col => col.headerName || col.field)];
|
|
112
|
+
const totalCols = headerLabels.length;
|
|
113
|
+
const titleStartCol = 4; // Title in 4th Cell
|
|
114
|
+
const titleColLetter = String.fromCharCode(64 + titleStartCol);
|
|
115
|
+
const titleMergeEnd = String.fromCharCode(64 + totalCols);
|
|
116
|
+
// --- Add logo in A1:C3, and make those cells tall
|
|
117
|
+
if (this.logoBase64) {
|
|
118
|
+
const base64Data = this.logoBase64.replace(/^data:image\/\w+;base64,/, '');
|
|
119
|
+
const imageId = workbook.addImage({
|
|
120
|
+
base64: base64Data,
|
|
121
|
+
extension: 'png',
|
|
122
|
+
});
|
|
123
|
+
worksheet.addImage(imageId, {
|
|
124
|
+
tl: { col: 0, row: 0 },
|
|
125
|
+
ext: { width: 145, height: 66 }
|
|
126
|
+
});
|
|
127
|
+
// Optionally, make rows 1-3 taller to fully display logo
|
|
128
|
+
worksheet.getRow(1).height = 24;
|
|
129
|
+
worksheet.getRow(2).height = 22;
|
|
130
|
+
worksheet.getRow(3).height = 22;
|
|
131
|
+
}
|
|
132
|
+
// --- Title in D1 merged up to end
|
|
133
|
+
worksheet.mergeCells(`${titleColLetter}1:${titleMergeEnd}1`);
|
|
134
|
+
const titleCell = worksheet.getRow(1).getCell(titleStartCol);
|
|
135
|
+
titleCell.value = title;
|
|
136
|
+
titleCell.font = { bold: true, size: 16 };
|
|
137
|
+
titleCell.alignment = { vertical: 'middle', horizontal: 'left' };
|
|
138
|
+
// --- Leave A2:C3 empty (for image), place metadata starting at row 4
|
|
139
|
+
let metaRowStart = 4;
|
|
140
|
+
metadata.forEach(([label, value], idx) => {
|
|
141
|
+
const row = worksheet.getRow(metaRowStart + idx);
|
|
142
|
+
row.getCell(1).value = {
|
|
143
|
+
richText: [
|
|
144
|
+
{ text: `${label} : `, font: { bold: true } },
|
|
145
|
+
{ text: value ?? '', font: { bold: false } }
|
|
146
|
+
]
|
|
147
|
+
};
|
|
148
|
+
worksheet.mergeCells(`A${row.number}:${titleMergeEnd}${row.number}`);
|
|
149
|
+
});
|
|
150
|
+
let currentRow = metaRowStart + metadata.length;
|
|
151
|
+
worksheet.getRow(++currentRow).height = 6; // Blank for readability
|
|
152
|
+
currentRow++;
|
|
153
|
+
// Add headers and rest as before...
|
|
154
|
+
const headerRow = worksheet.getRow(currentRow++);
|
|
155
|
+
headerLabels.forEach((header, i) => {
|
|
156
|
+
const cell = headerRow.getCell(i + 1);
|
|
157
|
+
cell.value = header;
|
|
158
|
+
cell.font = { bold: true };
|
|
159
|
+
cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'D9D9D9' } };
|
|
160
|
+
cell.alignment = { vertical: 'middle', horizontal: 'center' };
|
|
161
|
+
cell.border = {
|
|
162
|
+
top: { style: 'thin' },
|
|
163
|
+
bottom: { style: 'thin' },
|
|
164
|
+
left: { style: 'thin' },
|
|
165
|
+
right: { style: 'thin' }
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
// Data rows (handle grouping if present)
|
|
169
|
+
let rowIdx = currentRow;
|
|
170
|
+
if (options.groupByKey && !Array.isArray(data)) {
|
|
171
|
+
for (const [group, items] of Object.entries(data)) {
|
|
172
|
+
// Group header: bold, merged row
|
|
173
|
+
const groupRow = worksheet.getRow(rowIdx++);
|
|
174
|
+
groupRow.getCell(1).value = group;
|
|
175
|
+
groupRow.font = { bold: true };
|
|
176
|
+
worksheet.mergeCells(`A${groupRow.number}:${titleMergeEnd}${groupRow.number}`);
|
|
177
|
+
// Data rows
|
|
178
|
+
this.prepareTableRows(items, columns, options).forEach(rowData => {
|
|
179
|
+
const dataRow = worksheet.getRow(rowIdx++);
|
|
180
|
+
rowData.forEach((cellVal, cIdx) => {
|
|
181
|
+
const cell = dataRow.getCell(cIdx + 1);
|
|
182
|
+
cell.value = cellVal;
|
|
183
|
+
cell.border = {
|
|
184
|
+
top: { style: 'thin' }, bottom: { style: 'thin' },
|
|
185
|
+
left: { style: 'thin' }, right: { style: 'thin' }
|
|
186
|
+
};
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this.prepareTableRows(data, columns, options).forEach(rowData => {
|
|
193
|
+
const dataRow = worksheet.getRow(rowIdx++);
|
|
194
|
+
rowData.forEach((cellVal, cIdx) => {
|
|
195
|
+
const cell = dataRow.getCell(cIdx + 1);
|
|
196
|
+
cell.value = cellVal;
|
|
197
|
+
cell.border = {
|
|
198
|
+
top: { style: 'thin' }, bottom: { style: 'thin' },
|
|
199
|
+
left: { style: 'thin' }, right: { style: 'thin' }
|
|
200
|
+
};
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
// --- Auto column widths
|
|
205
|
+
for (let i = 1; i <= totalCols; i++) {
|
|
206
|
+
let maxLength = 10; // minimum width
|
|
207
|
+
worksheet.eachRow({ includeEmpty: true }, (row) => {
|
|
208
|
+
const cell = row.getCell(i);
|
|
209
|
+
if (cell.isMerged)
|
|
210
|
+
return;
|
|
211
|
+
let cellValue = '';
|
|
212
|
+
if (cell.value == null) {
|
|
213
|
+
cellValue = '';
|
|
214
|
+
}
|
|
215
|
+
else if (typeof cell.value === 'object' && 'richText' in cell.value) {
|
|
216
|
+
cellValue = cell.value.richText.map(rt => rt.text).join('');
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
cellValue = cell.value.toString();
|
|
220
|
+
}
|
|
221
|
+
maxLength = Math.max(maxLength, cellValue.length);
|
|
222
|
+
});
|
|
223
|
+
// cap max width (so branch names don't explode sheet)
|
|
224
|
+
const adjustedWidth = Math.min(maxLength, 50);
|
|
225
|
+
worksheet.getColumn(i).width = adjustedWidth;
|
|
226
|
+
}
|
|
227
|
+
// --- Save workbook
|
|
228
|
+
const buffer = await workbook.xlsx.writeBuffer();
|
|
229
|
+
FileSaver.saveAs(new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), title.replace(/\s/g, '-') + '.xlsx');
|
|
230
|
+
}
|
|
231
|
+
// ========== CSV EXPORT ==========
|
|
232
|
+
exportToCsv({ title, metadata, columns, data, options = {} }) {
|
|
233
|
+
const headers = ['Sr No', ...columns.map(c => c.headerName || c.field)];
|
|
234
|
+
const metaLines = metadata.map(([lbl, val]) => `${lbl}: ${val}`);
|
|
235
|
+
let csv = [title, ...metaLines, '', headers.join(',')];
|
|
236
|
+
if (options.groupByKey && !Array.isArray(data)) {
|
|
237
|
+
for (const [group, items] of Object.entries(data)) {
|
|
238
|
+
csv.push(group);
|
|
239
|
+
this.prepareTableRows(items, columns, options).forEach(row => {
|
|
240
|
+
csv.push(row.map(val => `"${val}"`).join(','));
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
this.prepareTableRows(data, columns, options).forEach(row => {
|
|
246
|
+
csv.push(row.map(val => `"${val}"`).join(','));
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
// Download
|
|
250
|
+
const blob = new Blob([csv.join('\n')], { type: 'text/csv' });
|
|
251
|
+
FileSaver.saveAs(blob, title.replace(/\s/g, '-') + '.csv');
|
|
252
|
+
}
|
|
253
|
+
// ================= HELPER: TABLE ROW PREPARATION =================
|
|
254
|
+
prepareTableRows(data, columns, options = {}) {
|
|
255
|
+
const { excludeFields = [], currencyFields = [], dateFields = [], dateFieldFormats = {}, specialDecimalFields = {} } = options;
|
|
256
|
+
const filtered = columns.filter(c => c.field && !excludeFields.some(f => c.field.toLowerCase().includes(f)));
|
|
257
|
+
return data.map((row, idx) => ([
|
|
258
|
+
idx + 1,
|
|
259
|
+
...filtered.map(col => {
|
|
260
|
+
let value = row[col.field];
|
|
261
|
+
// Format date fields with custom formats if specified
|
|
262
|
+
if (col.field && (dateFields.includes(col.field) || col.field in dateFieldFormats)) {
|
|
263
|
+
const format = dateFieldFormats[col.field] || 'dd/MM/yyyy';
|
|
264
|
+
value = this.formatDateByFormat(value, format);
|
|
265
|
+
}
|
|
266
|
+
// Format special decimal fields with specific decimals
|
|
267
|
+
else if (col.field && col.field in specialDecimalFields && value != null) {
|
|
268
|
+
const decimals = specialDecimalFields[col.field];
|
|
269
|
+
value = parseFloat(value).toFixed(decimals);
|
|
270
|
+
}
|
|
271
|
+
// Format regular currency fields with 3 decimals
|
|
272
|
+
else if (col.field && currencyFields.includes(col.field) && value != null) {
|
|
273
|
+
value = parseFloat(value).toFixed(3);
|
|
274
|
+
}
|
|
275
|
+
return value ?? '';
|
|
276
|
+
})
|
|
277
|
+
]));
|
|
278
|
+
}
|
|
279
|
+
formatDateByFormat(val, format) {
|
|
280
|
+
// Helper to pad single digits
|
|
281
|
+
const pad = (n) => n.toString().padStart(2, '0');
|
|
282
|
+
// Parse date for "DD/MM/YYYY hh:mm AM/PM" format manually
|
|
283
|
+
if (typeof val === 'string' && /^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2} [AP]M$/.test(val)) {
|
|
284
|
+
const parts = val.match(/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}) ([AP]M)$/);
|
|
285
|
+
if (!parts)
|
|
286
|
+
return '';
|
|
287
|
+
let [, dd, mm, yyyy, hh, min, ampm] = parts;
|
|
288
|
+
let hours = parseInt(hh, 10);
|
|
289
|
+
if (ampm === 'PM' && hours !== 12)
|
|
290
|
+
hours += 12;
|
|
291
|
+
if (ampm === 'AM' && hours === 12)
|
|
292
|
+
hours = 0;
|
|
293
|
+
val = new Date(parseInt(yyyy, 10), parseInt(mm, 10) - 1, parseInt(dd, 10), hours, parseInt(min, 10));
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
val = new Date(val);
|
|
297
|
+
}
|
|
298
|
+
if (isNaN(val.getTime()))
|
|
299
|
+
return '';
|
|
300
|
+
const dt = val;
|
|
301
|
+
switch (format) {
|
|
302
|
+
case 'dd/MM/yyyy hh:mm a': { // 11/07/2025 10:56 PM
|
|
303
|
+
let hours12 = dt.getHours() % 12 || 12;
|
|
304
|
+
let ampm = dt.getHours() >= 12 ? 'PM' : 'AM';
|
|
305
|
+
return `${pad(dt.getDate())}/${pad(dt.getMonth() + 1)}/${dt.getFullYear()} ${pad(hours12)}:${pad(dt.getMinutes())} ${ampm}`;
|
|
306
|
+
}
|
|
307
|
+
case 'dd/MM/yyyy HH:mm': { // 28/07/2025 13:08
|
|
308
|
+
return `${pad(dt.getDate())}/${pad(dt.getMonth() + 1)}/${dt.getFullYear()} ${pad(dt.getHours())}:${pad(dt.getMinutes())}`;
|
|
309
|
+
}
|
|
310
|
+
case 'dd/MM/yyyy': { // 28/07/2025
|
|
311
|
+
return `${pad(dt.getDate())}/${pad(dt.getMonth() + 1)}/${dt.getFullYear()}`;
|
|
312
|
+
}
|
|
313
|
+
default:
|
|
314
|
+
return dt.toLocaleString();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
GenericExportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GenericExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
319
|
+
GenericExportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GenericExportService, providedIn: 'root' });
|
|
320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GenericExportService, decorators: [{
|
|
321
|
+
type: Injectable,
|
|
322
|
+
args: [{ providedIn: 'root' }]
|
|
323
|
+
}], ctorParameters: function () { return []; } });
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvc2hhcmVkL2V4cG9ydC1nZW5lcmljLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7O0FBZ0J4QyxNQUFNLE9BQU8sb0JBQW9CO0lBTTdCO1FBSmlCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBR2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUM5QixHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUNwQixHQUFHLENBQUMsTUFB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LENBQUMsQ0FBQyxFQUFFLGFBQWE7Z0JBQzlCLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQzthQUMvRTtZQUNEO2dCQUNJLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQzs7aUhBdlhRLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGV4cG9ydC1nZW5lcmljLnNlcnZpY2UudHNcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xyXG5pbXBvcnQgJ2pzcGRmLWF1dG90YWJsZSc7XHJcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0T3B0aW9ucyB7XHJcbiAgICBjdXJyZW5jeUZpZWxkcz86IHN0cmluZ1tdO1xyXG4gICAgZGF0ZUZpZWxkcz86IHN0cmluZ1tdO1xyXG4gICAgZGF0ZUZpZWxkRm9ybWF0cz86IHtcclxuICAgICAgICBbZmllbGQ6IHN0cmluZ106ICdkZC9NTS95eXl5JyB8ICdkZC9NTS95eXl5IGhoOm1tIGEnIHwgJ2RkL01NL3l5eXkgSEg6bW0nIHwgc3RyaW5nO1xyXG4gICAgfTtcclxuICAgIGV4Y2x1ZGVGaWVsZHM/OiBzdHJpbmdbXTtcclxuICAgIGdyb3VwQnlLZXk/OiBib29sZWFuO1xyXG4gICAgc3BlY2lhbERlY2ltYWxGaWVsZHM/OiB7XHJcbiAgICAgICAgW2ZpZWxkOiBzdHJpbmddOiBudW1iZXI7XHJcbiAgICB9O1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4cG9ydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBsb2dvQmFzZTY0Pzogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZGZGb250U2l6ZSA9IDEwO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZGZMaW5lSGVpZ2h0ID0gNztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGRmTGVmdE1hcmdpbiA9IDE1O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMubG9hZEltYWdlQXNCYXNlNjQoJ2Fzc2V0cy9yZXBvcnRzLWxpYi9hc3NldHMvaW1hZ2VzL1hNTG9nby5wbmcnKS50aGVuKGJhc2U2NCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nb0Jhc2U2NCA9IGJhc2U2NDtcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignTG9nbyBpbWFnZSBmYWlsZWQgdG8gbG9hZCcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEltYWdlQXNCYXNlNjQoaW1hZ2VQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgICAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgICAgICAgICAgaW1nLnNyYyA9IGltYWdlUGF0aDtcclxuICAgICAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gNjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gaW1nLndpZHRoICogc2NhbGU7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodCAqIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJywgMS4wKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCgnRmFpbGVkIHRvIGdldCBjYW52YXMgY29udGV4dC4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoJ0ZhaWxlZCB0byBsb2FkIGltYWdlOiAnICsgaW1hZ2VQYXRoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBQREYgRVhQT1JUID09PT09PT09PT09PT09PT09PT09XHJcbiAgICBhc3luYyBleHBvcnRUb1BkZih7IHRpdGxlLCBtZXRhZGF0YSwgY29sdW1ucywgZGF0YSwgb3B0aW9ucyA9IHt9IH06IHtcclxuICAgICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICAgIG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW107XHJcbiAgICAgICAgY29sdW1uczogYW55W107XHJcbiAgICAgICAgZGF0YTogYW55W10gfCBSZWNvcmQ8c3RyaW5nLCBhbnlbXT47XHJcbiAgICAgICAgb3B0aW9ucz86IEV4cG9ydE9wdGlvbnM7XHJcbiAgICB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6IFs0MDAsIDIxMF0gfSk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5jb2x1bW5zLm1hcChjID0+IGMuaGVhZGVyTmFtZSB8fCBjLmZpZWxkKV07XHJcbiAgICAgICAgbGV0IHJvd3M6IGFueVtdW10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZ3JvdXBCeUtleSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtncm91cCwgaXRlbXNdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goW3sgY29udGVudDogZ3JvdXAsIGNvbFNwYW46IGhlYWRlcnMubGVuZ3RoLCBzdHlsZXM6IHsgaGFsaWduOiAnbGVmdCcsIGZvbnRTdHlsZTogJ2JvbGQnIH0gfV0pO1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKC4uLnRoaXMucHJlcGFyZVRhYmxlUm93cyhpdGVtcywgY29sdW1ucywgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcm93cyA9IHRoaXMucHJlcGFyZVRhYmxlUm93cyhkYXRhIGFzIGFueVtdLCBjb2x1bW5zLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBsb2dvIGF0IHRvcCBsZWZ0IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgICAgICAgZG9jLmFkZEltYWdlKHRoaXMubG9nb0Jhc2U2NCwgJ1BORycsIDE1LCAxMCwgMzguNCwgMTcuNSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGRvYy5zZXRGb250U2l6ZSgxNSk7XHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgZG9jLnRleHQodGl0bGUsIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAvIDIsIDE4LCB7IGFsaWduOiAnY2VudGVyJyB9KTtcclxuXHJcbiAgICAgICAgLy8gTWV0YWRhdGFcclxuICAgICAgICBsZXQgY3VycmVudFkgPSAzMjtcclxuICAgICAgICBkb2Muc2V0Rm9udFNpemUodGhpcy5wZGZGb250U2l6ZSk7XHJcbiAgICAgICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeSA9IGN1cnJlbnRZICsgaSAqIHRoaXMucGRmTGluZUhlaWdodDtcclxuICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsV2l0aENvbG9uID0gbGFiZWwgKyAnIDonO1xyXG4gICAgICAgICAgICBkb2MudGV4dChsYWJlbFdpdGhDb2xvbiwgdGhpcy5wZGZMZWZ0TWFyZ2luLCB5KTtcclxuICAgICAgICAgICAgY29uc3QgbGFiZWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobGFiZWxXaXRoQ29sb24gKyAnICcpO1xyXG4gICAgICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICAgICAgICBkb2MudGV4dCh2YWx1ZSwgdGhpcy5wZGZMZWZ0TWFyZ2luICsgbGFiZWxXaWR0aCwgeSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN1cnJlbnRZICs9IG1ldGFkYXRhLmxlbmd0aCAqIHRoaXMucGRmTGluZUhlaWdodCArIDU7XHJcblxyXG4gICAgICAgIC8vIFRhYmxlIHN0eWxpbmdcclxuICAgICAgICBjb25zdCBjb2x1bW5TdHlsZXM6IHsgW2tleTogbnVtYmVyXTogYW55IH0gPSB7fTtcclxuICAgICAgICBoZWFkZXJzLmZvckVhY2goKF8sIGkpID0+IGNvbHVtblN0eWxlc1tpXSA9IHsgY2VsbFdpZHRoOiAnYXV0bycgfSk7XHJcblxyXG4gICAgICAgIGRvYy5hdXRvVGFibGUoe1xyXG4gICAgICAgICAgICBoZWFkOiBbaGVhZGVyc10sXHJcbiAgICAgICAgICAgIGJvZHk6IHJvd3MsXHJcbiAgICAgICAgICAgIHN0YXJ0WTogY3VycmVudFksXHJcbiAgICAgICAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgICAgICAgIGhlYWRTdHlsZXM6IHtcclxuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxyXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxyXG4gICAgICAgICAgICAgICAgZm9udFN0eWxlOiAnYm9sZCcsXHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogOSxcclxuICAgICAgICAgICAgICAgIGhhbGlnbjogJ2NlbnRlcidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYm9keVN0eWxlczoge1xyXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDgsXHJcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IFsyNTUsIDI1NSwgMjU1XSxcclxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogWzAsIDAsIDBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlczoge1xyXG4gICAgICAgICAgICAgICAgY2VsbFBhZGRpbmc6IDIsXHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2xpbmVicmVhaycsXHJcbiAgICAgICAgICAgICAgICBtaW5DZWxsSGVpZ2h0OiA2XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbHVtblN0eWxlc1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2Muc2F2ZSh0aXRsZS5yZXBsYWNlKC9cXHMvZywgJy0nKSArICcucGRmJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PSBFWENFTCBFWFBPUlQgPT09PT09PT09PVxyXG4gICAgYXN5bmMgZXhwb3J0VG9FeGNlbCh7XHJcbiAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgbWV0YWRhdGEsXHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIG9wdGlvbnMgPSB7fVxyXG4gICAgfToge1xyXG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXTtcclxuICAgICAgICBjb2x1bW5zOiBhbnlbXTtcclxuICAgICAgICBkYXRhOiBhbnlbXSB8IFJlY29yZDxzdHJpbmcsIGFueVtdPjtcclxuICAgICAgICBvcHRpb25zPzogRXhwb3J0T3B0aW9ucztcclxuICAgIH0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCB3b3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XHJcbiAgICAgICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KHRpdGxlKTtcclxuXHJcbiAgICAgICAgLy8gUHJlLWNhbGNcclxuICAgICAgICBjb25zdCBoZWFkZXJMYWJlbHMgPSBbJ1NyIE5vJywgLi4uY29sdW1ucy5tYXAoY29sID0+IGNvbC5oZWFkZXJOYW1lIHx8IGNvbC5maWVsZCldO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsQ29scyA9IGhlYWRlckxhYmVscy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgdGl0bGVTdGFydENvbCA9IDQ7IC8vIFRpdGxlIGluIDR0aCBDZWxsXHJcbiAgICAgICAgY29uc3QgdGl0bGVDb2xMZXR0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY0ICsgdGl0bGVTdGFydENvbCk7XHJcbiAgICAgICAgY29uc3QgdGl0bGVNZXJnZUVuZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjQgKyB0b3RhbENvbHMpO1xyXG5cclxuICAgICAgICAvLyAtLS0gQWRkIGxvZ28gaW4gQTE6QzMsIGFuZCBtYWtlIHRob3NlIGNlbGxzIHRhbGxcclxuICAgICAgICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmxvZ29CYXNlNjQucmVwbGFjZSgvXmRhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvLCAnJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XHJcbiAgICAgICAgICAgICAgICBiYXNlNjQ6IGJhc2U2NERhdGEsXHJcbiAgICAgICAgICAgICAgICBleHRlbnNpb246ICdwbmcnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgd29ya3NoZWV0LmFkZEltYWdlKGltYWdlSWQsIHtcclxuICAgICAgICAgICAgICAgIHRsOiB7IGNvbDogMCwgcm93OiAwIH0sXHJcbiAgICAgICAgICAgICAgICBleHQ6IHsgd2lkdGg6IDE0NSwgaGVpZ2h0OiA2NiB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBtYWtlIHJvd3MgMS0zIHRhbGxlciB0byBmdWxseSBkaXNwbGF5IGxvZ29cclxuICAgICAgICAgICAgd29ya3NoZWV0LmdldFJvdygxKS5oZWlnaHQgPSAyNDtcclxuICAgICAgICAgICAgd29ya3NoZWV0LmdldFJvdygyKS5oZWlnaHQgPSAyMjtcclxuICAgICAgICAgICAgd29ya3NoZWV0LmdldFJvdygzKS5oZWlnaHQgPSAyMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIC0tLSBUaXRsZSBpbiBEMSBtZXJnZWQgdXAgdG8gZW5kXHJcbiAgICAgICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYCR7dGl0bGVDb2xMZXR0ZXJ9MToke3RpdGxlTWVyZ2VFbmR9MWApO1xyXG4gICAgICAgIGNvbnN0IHRpdGxlQ2VsbCA9IHdvcmtzaGVldC5nZXRSb3coMSkuZ2V0Q2VsbCh0aXRsZVN0YXJ0Q29sKTtcclxuICAgICAgICB0aXRsZUNlbGwudmFsdWUgPSB0aXRsZTtcclxuICAgICAgICB0aXRsZUNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTYgfTtcclxuICAgICAgICB0aXRsZUNlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdsZWZ0JyB9O1xyXG5cclxuICAgICAgICAvLyAtLS0gTGVhdmUgQTI6QzMgZW1wdHkgKGZvciBpbWFnZSksIHBsYWNlIG1ldGFkYXRhIHN0YXJ0aW5nIGF0IHJvdyA0XHJcbiAgICAgICAgbGV0IG1ldGFSb3dTdGFydCA9IDQ7XHJcbiAgICAgICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KG1ldGFSb3dTdGFydCArIGlkeCk7XHJcbiAgICAgICAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHRleHQ6IGAke2xhYmVsfSA6IGAsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiB2YWx1ZSA/PyAnJywgZm9udDogeyBib2xkOiBmYWxzZSB9IH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEEke3Jvdy5udW1iZXJ9OiR7dGl0bGVNZXJnZUVuZH0ke3Jvdy5udW1iZXJ9YCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBjdXJyZW50Um93ID0gbWV0YVJvd1N0YXJ0ICsgbWV0YWRhdGEubGVuZ3RoO1xyXG5cclxuICAgICAgICB3b3Jrc2hlZXQuZ2V0Um93KCsrY3VycmVudFJvdykuaGVpZ2h0ID0gNjsgLy8gQmxhbmsgZm9yIHJlYWRhYmlsaXR5XHJcbiAgICAgICAgY3VycmVudFJvdysrO1xyXG5cclxuICAgICAgICAvLyBBZGQgaGVhZGVycyBhbmQgcmVzdCBhcyBiZWZvcmUuLi5cclxuICAgICAgICBjb25zdCBoZWFkZXJSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgICAgaGVhZGVyTGFiZWxzLmZvckVhY2goKGhlYWRlciwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgICAgICBjZWxsLnZhbHVlID0gaGVhZGVyO1xyXG4gICAgICAgICAgICBjZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgICAgICAgICAgY2VsbC5maWxsID0geyB0eXBlOiAncGF0dGVybicsIHBhdHRlcm46ICdzb2xpZCcsIGZnQ29sb3I6IHsgYXJnYjogJ0Q5RDlEOScgfSB9O1xyXG4gICAgICAgICAgICBjZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnY2VudGVyJyB9O1xyXG4gICAgICAgICAgICBjZWxsLmJvcmRlciA9IHtcclxuICAgICAgICAgICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgICAgICAgICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgICAgICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gRGF0YSByb3dzIChoYW5kbGUgZ3JvdXBpbmcgaWYgcHJlc2VudClcclxuICAgICAgICBsZXQgcm93SWR4ID0gY3VycmVudFJvdztcclxuICAgICAgICBpZiAob3B0aW9ucy5ncm91cEJ5S2V5ICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2dyb3VwLCBpdGVtc10gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEdyb3VwIGhlYWRlcjogYm9sZCwgbWVyZ2VkIHJvd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KHJvd0lkeCsrKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwUm93LmdldENlbGwoMSkudmFsdWUgPSBncm91cDtcclxuICAgICAgICAgICAgICAgIGdyb3VwUm93LmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKGBBJHtncm91cFJvdy5udW1iZXJ9OiR7dGl0bGVNZXJnZUVuZH0ke2dyb3VwUm93Lm51bWJlcn1gKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBEYXRhIHJvd3NcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVRhYmxlUm93cyhpdGVtcywgY29sdW1ucywgb3B0aW9ucykuZm9yRWFjaChyb3dEYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhUm93ID0gd29ya3NoZWV0LmdldFJvdyhyb3dJZHgrKyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5mb3JFYWNoKChjZWxsVmFsLCBjSWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkYXRhUm93LmdldENlbGwoY0lkeCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gY2VsbFZhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5ib3JkZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVUYWJsZVJvd3MoZGF0YSBhcyBhbnlbXSwgY29sdW1ucywgb3B0aW9ucykuZm9yRWFjaChyb3dEYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KHJvd0lkeCsrKTtcclxuICAgICAgICAgICAgICAgIHJvd0RhdGEuZm9yRWFjaCgoY2VsbFZhbCwgY0lkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkYXRhUm93LmdldENlbGwoY0lkeCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBjZWxsVmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwuYm9yZGVyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIC0tLSBBdXRvIGNvbHVtbiB3aWR0aHNcclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbENvbHM7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgbWF4TGVuZ3RoID0gMTA7IC8vIG1pbmltdW0gd2lkdGhcclxuICAgICAgICAgICAgd29ya3NoZWV0LmVhY2hSb3coeyBpbmNsdWRlRW1wdHk6IHRydWUgfSwgKHJvdykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDZWxsKGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNlbGwuaXNNZXJnZWQpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGxldCBjZWxsVmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChjZWxsLnZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNlbGwudmFsdWUgPT09ICdvYmplY3QnICYmICdyaWNoVGV4dCcgaW4gY2VsbC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZSA9IGNlbGwudmFsdWUucmljaFRleHQubWFwKHJ0ID0+IHJ0LnRleHQpLmpvaW4oJycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgPSBjZWxsLnZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGggPSBNYXRoLm1heChtYXhMZW5ndGgsIGNlbGxWYWx1ZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gY2FwIG1heCB3aWR0aCAoc28gYnJhbmNoIG5hbWVzIGRvbid0IGV4cGxvZGUgc2hlZXQpXHJcbiAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkV2lkdGggPSBNYXRoLm1pbihtYXhMZW5ndGgsIDUwKTtcclxuICAgICAgICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpKS53aWR0aCA9IGFkanVzdGVkV2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAtLS0gU2F2ZSB3b3JrYm9va1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcclxuICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKFxyXG4gICAgICAgICAgICBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIH0pLFxyXG4gICAgICAgICAgICB0aXRsZS5yZXBsYWNlKC9cXHMvZywgJy0nKSArICcueGxzeCdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyA9PT09PT09PT09IENTViBFWFBPUlQgPT09PT09PT09PVxyXG4gICAgZXhwb3J0VG9Dc3Yoe1xyXG4gICAgICAgIHRpdGxlLFxyXG4gICAgICAgIG1ldGFkYXRhLFxyXG4gICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBvcHRpb25zID0ge31cclxuICAgIH06IHtcclxuICAgICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICAgIG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW107XHJcbiAgICAgICAgY29sdW1uczogYW55W107XHJcbiAgICAgICAgZGF0YTogYW55W10gfCBSZWNvcmQ8c3RyaW5nLCBhbnlbXT47XHJcbiAgICAgICAgb3B0aW9ucz86IEV4cG9ydE9wdGlvbnM7XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5jb2x1bW5zLm1hcChjID0+IGMuaGVhZGVyTmFtZSB8fCBjLmZpZWxkKV07XHJcbiAgICAgICAgY29uc3QgbWV0YUxpbmVzID0gbWV0YWRhdGEubWFwKChbbGJsLCB2YWxdKSA9PiBgJHtsYmx9OiAke3ZhbH1gKTtcclxuICAgICAgICBsZXQgY3N2ID0gW3RpdGxlLCAuLi5tZXRhTGluZXMsICcnLCBoZWFkZXJzLmpvaW4oJywnKV07XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmdyb3VwQnlLZXkgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBbZ3JvdXAsIGl0ZW1zXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgY3N2LnB1c2goZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlVGFibGVSb3dzKGl0ZW1zLCBjb2x1bW5zLCBvcHRpb25zKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3N2LnB1c2gocm93Lm1hcCh2YWwgPT4gYFwiJHt2YWx9XCJgKS5qb2luKCcsJykpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVUYWJsZVJvd3MoZGF0YSBhcyBhbnlbXSwgY29sdW1ucywgb3B0aW9ucykuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgY3N2LnB1c2gocm93Lm1hcCh2YWwgPT4gYFwiJHt2YWx9XCJgKS5qb2luKCcsJykpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERvd25sb2FkXHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3Yuam9pbignXFxuJyldLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XHJcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCB0aXRsZS5yZXBsYWNlKC9cXHMvZywgJy0nKSArICcuY3N2Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT0gSEVMUEVSOiBUQUJMRSBST1cgUFJFUEFSQVRJT04gPT09PT09PT09PT09PT09PT1cclxuICAgIHByaXZhdGUgcHJlcGFyZVRhYmxlUm93cyhkYXRhOiBhbnlbXSwgY29sdW1uczogYW55W10sIG9wdGlvbnM6IEV4cG9ydE9wdGlvbnMgPSB7fSk6IGFueVtdW10ge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgZXhjbHVkZUZpZWxkcyA9IFtdLFxyXG4gICAgICAgICAgICBjdXJyZW5jeUZpZWxkcyA9IFtdLFxyXG4gICAgICAgICAgICBkYXRlRmllbGRzID0gW10sXHJcbiAgICAgICAgICAgIGRhdGVGaWVsZEZvcm1hdHMgPSB7fSxcclxuICAgICAgICAgICAgc3BlY2lhbERlY2ltYWxGaWVsZHMgPSB7fVxyXG4gICAgICAgIH0gPSBvcHRpb25zO1xyXG5cclxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGNvbHVtbnMuZmlsdGVyKGMgPT5cclxuICAgICAgICAgICAgYy5maWVsZCAmJiAhZXhjbHVkZUZpZWxkcy5zb21lKGYgPT4gYy5maWVsZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGYpKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhLm1hcCgocm93LCBpZHgpID0+IChbXHJcbiAgICAgICAgICAgIGlkeCArIDEsXHJcbiAgICAgICAgICAgIC4uLmZpbHRlcmVkLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcm93W2NvbC5maWVsZF07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IGRhdGUgZmllbGRzIHdpdGggY3VzdG9tIGZvcm1hdHMgaWYgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sLmZpZWxkICYmIChkYXRlRmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgfHwgY29sLmZpZWxkIGluIGRhdGVGaWVsZEZvcm1hdHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZGF0ZUZpZWxkRm9ybWF0c1tjb2wuZmllbGRdIHx8ICdkZC9NTS95eXl5JztcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZUJ5Rm9ybWF0KHZhbHVlLCBmb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IHNwZWNpYWwgZGVjaW1hbCBmaWVsZHMgd2l0aCBzcGVjaWZpYyBkZWNpbWFsc1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmZpZWxkICYmIGNvbC5maWVsZCBpbiBzcGVjaWFsRGVjaW1hbEZpZWxkcyAmJiB2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSBzcGVjaWFsRGVjaW1hbEZpZWxkc1tjb2wuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChkZWNpbWFscyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgcmVndWxhciBjdXJyZW5jeSBmaWVsZHMgd2l0aCAzIGRlY2ltYWxzXHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZmllbGQgJiYgY3VycmVuY3lGaWVsZHMuaW5jbHVkZXMoY29sLmZpZWxkKSAmJiB2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/PyAnJztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb3JtYXREYXRlQnlGb3JtYXQodmFsOiBhbnksIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICAvLyBIZWxwZXIgdG8gcGFkIHNpbmdsZSBkaWdpdHNcclxuICAgICAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuXHJcbiAgICAgICAgLy8gUGFyc2UgZGF0ZSBmb3IgXCJERC9NTS9ZWVlZIGhoOm1tIEFNL1BNXCIgZm9ybWF0IG1hbnVhbGx5XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIC9eXFxkezJ9XFwvXFxkezJ9XFwvXFxkezR9IFxcZHsyfTpcXGR7Mn0gW0FQXU0kLy50ZXN0KHZhbCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSB2YWwubWF0Y2goL14oXFxkezJ9KVxcLyhcXGR7Mn0pXFwvKFxcZHs0fSkgKFxcZHsyfSk6KFxcZHsyfSkgKFtBUF1NKSQvKTtcclxuICAgICAgICAgICAgaWYgKCFwYXJ0cykgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICBsZXQgWywgZGQsIG1tLCB5eXl5LCBoaCwgbWluLCBhbXBtXSA9IHBhcnRzO1xyXG4gICAgICAgICAgICBsZXQgaG91cnMgPSBwYXJzZUludChoaCwgMTApO1xyXG4gICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ1BNJyAmJiBob3VycyAhPT0gMTIpIGhvdXJzICs9IDEyO1xyXG4gICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ0FNJyAmJiBob3VycyA9PT0gMTIpIGhvdXJzID0gMDtcclxuICAgICAgICAgICAgdmFsID0gbmV3IERhdGUocGFyc2VJbnQoeXl5eSwgMTApLCBwYXJzZUludChtbSwgMTApIC0gMSwgcGFyc2VJbnQoZGQsIDEwKSwgaG91cnMsIHBhcnNlSW50KG1pbiwgMTApKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWwgPSBuZXcgRGF0ZSh2YWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbC5nZXRUaW1lKCkpKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IGR0ID0gdmFsO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xyXG4gICAgICAgICAgICBjYXNlICdkZC9NTS95eXl5IGhoOm1tIGEnOiB7IC8vIDExLzA3LzIwMjUgMTA6NTYgUE1cclxuICAgICAgICAgICAgICAgIGxldCBob3VyczEyID0gZHQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFtcG0gPSBkdC5nZXRIb3VycygpID49IDEyID8gJ1BNJyA6ICdBTSc7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7cGFkKGR0LmdldERhdGUoKSl9LyR7cGFkKGR0LmdldE1vbnRoKCkgKyAxKX0vJHtkdC5nZXRGdWxsWWVhcigpfSAke3BhZChob3VyczEyKX06JHtwYWQoZHQuZ2V0TWludXRlcygpKX0gJHthbXBtfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnZGQvTU0veXl5eSBISDptbSc6IHsgLy8gMjgvMDcvMjAyNSAxMzowOFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3BhZChkdC5nZXREYXRlKCkpfS8ke3BhZChkdC5nZXRNb250aCgpICsgMSl9LyR7ZHQuZ2V0RnVsbFllYXIoKX0gJHtwYWQoZHQuZ2V0SG91cnMoKSl9OiR7cGFkKGR0LmdldE1pbnV0ZXMoKSl9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdkZC9NTS95eXl5JzogeyAvLyAyOC8wNy8yMDI1XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7cGFkKGR0LmdldERhdGUoKSl9LyR7cGFkKGR0LmdldE1vbnRoKCkgKyAxKX0vJHtkdC5nZXRGdWxsWWVhcigpfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBkdC50b0xvY2FsZVN0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -60,7 +60,7 @@ export class ExportService {
|
|
|
60
60
|
return metadata.filter(([_, value]) => value !== undefined && value !== null);
|
|
61
61
|
}
|
|
62
62
|
prepareExportTable(data, columnDefs, options = {}) {
|
|
63
|
-
const { excludeFields = ['srno'
|
|
63
|
+
const { excludeFields = ['srno'], currencyFields = [] } = options;
|
|
64
64
|
const filteredColumns = columnDefs.filter(col => col.field &&
|
|
65
65
|
!excludeFields.some(ex => col.field.toLowerCase().includes(ex)) &&
|
|
66
66
|
!excludeFields.some(ex => col.headerName?.toLowerCase().includes(ex)));
|
|
@@ -241,4 +241,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
241
241
|
providedIn: 'root'
|
|
242
242
|
}]
|
|
243
243
|
}], ctorParameters: function () { return []; } });
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NoYXJlZC9leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOztBQVd4QyxNQUFNLE9BQU8sYUFBYTtJQU94QjtRQUxnQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNoQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUlsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsNkNBQTZDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNERBQTREO0lBQ3BELGlCQUFpQixDQUFDLFNBQWlCO1FBQzNDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUM5QixHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUVwQixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxD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QUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDOzswR0FuUlUsYUFBYTs4R0FBYixhQUFhLGNBRlosTUFBTTsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0ICdqc3BkZi1hdXRvdGFibGUnO1xyXG5pbXBvcnQgKiBhcyBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcblxyXG5kZWNsYXJlIG1vZHVsZSAnanNwZGYnIHtcclxuICBpbnRlcmZhY2UganNQREYge1xyXG4gICAgYXV0b1RhYmxlOiAob3B0aW9uczogYW55KSA9PiBqc1BERjtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEV4cG9ydFNlcnZpY2Uge1xyXG5cclxuIHByaXZhdGUgcmVhZG9ubHkgcGRmRm9udFNpemUgPSAxMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IHBkZkxpbmVIZWlnaHQgPSA3O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGRmTGVmdE1hcmdpbiA9IDE1O1xyXG4gIHByaXZhdGUgbG9nb0Jhc2U2NDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmxvYWRJbWFnZUFzQmFzZTY0KCdhc3NldHMvcmVwb3J0cy1saWIvYXNzZXRzL2ltYWdlcy9YTUxvZ28ucG5nJykudGhlbihiYXNlNjQgPT4ge1xyXG4gICAgICB0aGlzLmxvZ29CYXNlNjQgPSBiYXNlNjQ7XHJcbiAgICB9KTtcclxuICB9XHJcbiBcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVXRpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBwcml2YXRlIGxvYWRJbWFnZUFzQmFzZTY0KGltYWdlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgIGltZy5zcmMgPSBpbWFnZVBhdGg7XHJcbiBcclxuICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gNjtcclxuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aCAqIHNjYWxlO1xyXG4gICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodCAqIHNjYWxlO1xyXG4gXHJcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycsIDEuMCk7IC8vIDEuMCA9IGhpZ2hlc3QgcXVhbGl0eVxyXG4gICAgICAgIHJlc29sdmUoYmFzZTY0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZWplY3QoJ0ZhaWxlZCB0byBnZXQgY2FudmFzIGNvbnRleHQuJyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiBcclxuICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KCdGYWlsZWQgdG8gbG9hZCBpbWFnZTogJyArIGltYWdlUGF0aCk7XHJcbiAgfSk7XHJcbn1cclxuIFxyXG4gIGZvcm1hdERhdGUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgcmV0dXJuIGlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/ICcnIDpcclxuICAgICAgYCR7ZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfS8keyhkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9LyR7ZGF0ZS5nZXRGdWxsWWVhcigpfWA7XHJcbiAgfVxyXG4gIFxyXG4gIGZvcm1hdERhdGVUaW1lKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICBjb25zdCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHJcbiAgLy8gMTItaG91ciBmb3JtYXRcclxuICBsZXQgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XHJcbiAgY29uc3QgbWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICBjb25zdCBhbXBtID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJztcclxuICBob3VycyA9IGhvdXJzICUgMTI7XHJcbiAgaG91cnMgPSBob3VycyA/IGhvdXJzIDogMTI7IC8vIHRoZSBob3VyICcwJyBzaG91bGQgYmUgJzEyJ1xyXG4gIGNvbnN0IGhvdXJzU3RyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG5cclxuICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9ICR7aG91cnNTdHJ9OiR7bWludXRlc30gJHthbXBtfWA7XHJcbn1cclxuIFxyXG4gIGdlbmVyYXRlUmVwb3J0TWV0YWRhdGEobWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSk6IFtzdHJpbmcsIHN0cmluZ11bXSB7XHJcbiAgcmV0dXJuIG1ldGFkYXRhLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCk7XHJcbiAgfVxyXG4gXHJcbiAgcHJlcGFyZUV4cG9ydFRhYmxlKGRhdGE6IGFueVtdLCBjb2x1bW5EZWZzOiBhbnlbXSwgb3B0aW9uczoge1xyXG4gICAgZXhjbHVkZUZpZWxkcz86IHN0cmluZ1tdLFxyXG4gICAgY3VycmVuY3lGaWVsZHM/OiBzdHJpbmdbXVxyXG4gIH0gPSB7fSk6IHsgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10gfSB7XHJcbiAgICBjb25zdCB7IGV4Y2x1ZGVGaWVsZHMgPSBbJ3Nybm8nLCAnc2VyaWFsJywgJ2FjdGlvbiddLCBjdXJyZW5jeUZpZWxkcyA9IFtdIH0gPSBvcHRpb25zO1xyXG4gXHJcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5EZWZzLmZpbHRlcihjb2wgPT5cclxuICAgICAgY29sLmZpZWxkICYmXHJcbiAgICAgICFleGNsdWRlRmllbGRzLnNvbWUoZXggPT4gY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXgpKSAmJlxyXG4gICAgICAhZXhjbHVkZUZpZWxkcy5zb21lKGV4ID0+IGNvbC5oZWFkZXJOYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV4KSlcclxuICAgICk7XHJcbiBcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBbJ1NyIE5vJywgLi4uZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4gY29sLmhlYWRlck5hbWUgfHwgY29sLmZpZWxkKV07XHJcbiBcclxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLm1hcCgocm93LCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCByb3dEYXRhID0gZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHJvd1tjb2wuZmllbGRdO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSB8fCAnJztcclxuIFxyXG4gICAgICAgIC8vIEhhbmRsZSB2YXJpb3VzIGRhdGUgZmllbGQgbmFtZXNcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGROYW1lLmluY2x1ZGVzKCdkYXRlJykgfHxcclxuICAgICAgICAgICAgZmllbGROYW1lLmluY2x1ZGVzKCdidXNpbmVzc2RhdGUnKSkgJiZcclxuICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gXHJcbiAgICAgICAgLy8gRm9ybWF0IGN1cnJlbmN5IGZpZWxkc1xyXG4gICAgICAgIGlmIChjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZCgzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID8/ICcnO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIFtpbmRleCArIDEsIC4uLnJvd0RhdGFdO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4geyBoZWFkZXJzLCByb3dzIH07XHJcbiAgfVxyXG4gXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBERiBVbml2ZXJzYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgYXN5bmMgZXhwb3J0VG9QZGZVbml2ZXJzYWwodGl0bGU6IHN0cmluZywgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSwgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10sIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7IG9yaWVudGF0aW9uOiAnbGFuZHNjYXBlJywgdW5pdDogJ21tJywgZm9ybWF0OiBbNDAwLCAyMTBdIH0pO1xyXG4gXHJcbiAgICBjb25zdCBsb2dvV2lkdGggPSAzOC40LCBsb2dvSGVpZ2h0ID0gMTcuNSwgbG9nb1ggPSAxNSwgbG9nb1kgPSAxMDtcclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aDtcclxuICAgIGNvbnN0IHRpdGxlWSA9IDE4O1xyXG4gXHJcbiAgICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICAgIGRvYy5hZGRJbWFnZSh0aGlzLmxvZ29CYXNlNjQsICdQTkcnLCBsb2dvWCwgbG9nb1ksIGxvZ29XaWR0aCwgbG9nb0hlaWdodCk7XHJcbiAgICB9XHJcbiBcclxuICAgIGRvYy5zZXRGb250U2l6ZSgxNSk7XHJcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgIGRvYy50ZXh0KHRpdGxlLCBwYWdlV2lkdGggLyAyLCB0aXRsZVksIHsgYWxpZ246ICdjZW50ZXInIH0pO1xyXG4gXHJcbiAgICBsZXQgY3VycmVudFkgPSB0aXRsZVkgKyAxNDtcclxuICAgIGRvYy5zZXRGb250U2l6ZSh0aGlzLnBkZkZvbnRTaXplKTtcclxuICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHkgPSBjdXJyZW50WSArIGkgKiB0aGlzLnBkZkxpbmVIZWlnaHQ7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChsYWJlbCwgdGhpcy5wZGZMZWZ0TWFyZ2luLCB5KTtcclxuICAgICAgY29uc3QgbGFiZWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobGFiZWwgKyAnICcpO1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICBkb2MudGV4dCh2YWx1ZSwgdGhpcy5wZGZMZWZ0TWFyZ2luICsgbGFiZWxXaWR0aCwgeSk7XHJcbiAgICB9KTtcclxuICAgIGN1cnJlbnRZICs9IG1ldGFkYXRhLmxlbmd0aCAqIHRoaXMucGRmTGluZUhlaWdodCArIDU7XHJcbiBcclxuICAgIGNvbnN0IGNvbHVtblN0eWxlczogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IHt9O1xyXG4gICAgaGVhZGVycy5mb3JFYWNoKChfLCBpKSA9PiBjb2x1bW5TdHlsZXNbaV0gPSB7IGNlbGxXaWR0aDogJ2F1dG8nIH0pO1xyXG4gXHJcbiAgICBkb2MuYXV0b1RhYmxlKHtcclxuICAgICAgaGVhZDogW2hlYWRlcnNdLFxyXG4gICAgICBib2R5OiByb3dzLFxyXG4gICAgICBzdGFydFk6IGN1cnJlbnRZLFxyXG4gICAgICB0aGVtZTogJ2dyaWQnLFxyXG4gICAgICBoZWFkU3R5bGVzOiB7XHJcbiAgICAgICAgZmlsbENvbG9yOiBbMjIwLCAyMjAsIDIyMF0sIHRleHRDb2xvcjogMCxcclxuICAgICAgICBmb250U3R5bGU6ICdib2xkJywgZm9udFNpemU6IDksIGhhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHlTdHlsZXM6IHsgZm9udFNpemU6IDgsIGZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTVdLCB0ZXh0Q29sb3I6IFswLCAwLCAwXSB9LFxyXG4gICAgICBzdHlsZXM6IHsgY2VsbFBhZGRpbmc6IDIsIG92ZXJmbG93OiAnbGluZWJyZWFrJywgbWluQ2VsbEhlaWdodDogNiB9LFxyXG4gICAgICBjb2x1bW5TdHlsZXNcclxuICAgIH0pO1xyXG4gXHJcbiAgICBkb2Muc2F2ZShmaWxlTmFtZSk7XHJcbiAgfVxyXG4gXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV4Y2VsIFVuaXZlcnNhbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBleHBvcnRUb0V4Y2VsVW5pdmVyc2FsKHRpdGxlOiBzdHJpbmcsIG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10sIGhlYWRlcnM6IHN0cmluZ1tdLCByb3dzOiBhbnlbXVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xyXG4gIGNvbnN0IHdvcmtzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCh0aXRsZSk7XHJcbiBcclxuICBsZXQgY3VycmVudFJvdyA9IDE7XHJcbiBcclxuICAvLyBBZGQgaW1hZ2UgaWYgYXZhaWxhYmxlXHJcbiAgaWYgKHRoaXMubG9nb0Jhc2U2NCkge1xyXG4gICAgY29uc3QgYmFzZTY0RGF0YSA9IHRoaXMubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcclxuICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XHJcbiAgICAgIGJhc2U2NDogYmFzZTY0RGF0YSxcclxuICAgICAgZXh0ZW5zaW9uOiAncG5nJyxcclxuICAgIH0pO1xyXG4gXHJcbiAgICAvLyBQbGFjZSBpbWFnZSBhdCB0b3AtbGVmdCAoZS5nLiwgQTE6QzQpXHJcbiAgICB3b3Jrc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwge1xyXG4gICAgICB0bDogeyBjb2w6IDAsIHJvdzogMCB9LFxyXG4gICAgICBleHQ6IHsgd2lkdGg6IDE0NSwgaGVpZ2h0OiA2NiB9LFxyXG4gICAgICBlZGl0QXM6ICdvbmVDZWxsJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gXHJcbiAgLy8gQWRkIHRpdGxlIGFsaWduZWQgaW4gbWlkZGxlIGhvcml6b250YWxseSAobWVyZ2VkIGFjcm9zcyBhbGwgY29sdW1ucylcclxuICBjb25zdCB0aXRsZVJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdyk7XHJcbiAgdGl0bGVSb3cuZ2V0Q2VsbCg0KS52YWx1ZSA9IHRpdGxlO1xyXG4gIHRpdGxlUm93LmdldENlbGwoNCkuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTYgfTtcclxuICB0aXRsZVJvdy5nZXRDZWxsKDQpLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnbGVmdCcgfTtcclxuIFxyXG4gIGNvbnN0IHRpdGxlTWVyZ2VFbmQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY0ICsgaGVhZGVycy5sZW5ndGgpO1xyXG4gIHdvcmtzaGVldC5tZXJnZUNlbGxzKGBEJHtjdXJyZW50Um93fToke3RpdGxlTWVyZ2VFbmR9JHtjdXJyZW50Um93fWApO1xyXG4gIGN1cnJlbnRSb3cgKz0gMzsgLy8gTW92ZSBwYXN0IGltYWdlIHNwYWNlXHJcbiBcclxuICAvLyBBZGQgbWV0YWRhdGFcclxuICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSkgPT4ge1xyXG4gICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDZWxsKDEpO1xyXG4gICAgY2VsbC52YWx1ZSA9IHtcclxuICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICB7IHRleHQ6IGAke2xhYmVsfTogYCwgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICB7IHRleHQ6IHZhbHVlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEEke3Jvdy5udW1iZXJ9OiR7U3RyaW5nLmZyb21DaGFyQ29kZSg2NCArIGhlYWRlcnMubGVuZ3RoKX0ke3Jvdy5udW1iZXJ9YCk7XHJcbiAgfSk7XHJcbiBcclxuICB3b3Jrc2hlZXQuYWRkUm93KFtdKTtcclxuICBjdXJyZW50Um93Kys7XHJcbiBcclxuICAvLyBBZGQgdGFibGUgaGVhZGVyIHJvd1xyXG4gIGNvbnN0IGhlYWRlclJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICBoZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaSkgPT4ge1xyXG4gICAgY29uc3QgY2VsbCA9IGhlYWRlclJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgIGNlbGwudmFsdWUgPSBoZWFkZXI7XHJcbiAgICBjZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgIGNlbGwuZmlsbCA9IHsgdHlwZTogJ3BhdHRlcm4nLCBwYXR0ZXJuOiAnc29saWQnLCBmZ0NvbG9yOiB7IGFyZ2I6ICdEOUQ5RDknIH0gfTtcclxuICAgIGNlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdjZW50ZXInIH07XHJcbiAgICBjZWxsLmJvcmRlciA9IHtcclxuICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgfTtcclxuICB9KTtcclxuIFxyXG4gIGNvbnN0IGRhdGFTdGFydFJvdyA9IGN1cnJlbnRSb3c7XHJcbiAgcm93cy5mb3JFYWNoKHJvd0RhdGEgPT4ge1xyXG4gICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgcm93RGF0YS5mb3JFYWNoKCh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBjZWxsID0gcm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICBjZWxsLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIGNlbGwuYm9yZGVyID0ge1xyXG4gICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG4gXHJcbiAgLy8gQXV0byBjb2x1bW4gd2lkdGhzXHJcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgbGV0IG1heExlbmd0aCA9IGhlYWRlcnNbaSAtIDFdLmxlbmd0aDtcclxuICAgIGZvciAobGV0IHJvd051bSA9IGRhdGFTdGFydFJvdzsgcm93TnVtIDw9IHdvcmtzaGVldC5sYXN0Um93IS5udW1iZXI7IHJvd051bSsrKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IHdvcmtzaGVldC5nZXRSb3cocm93TnVtKS5nZXRDZWxsKGkpLnZhbHVlPy50b1N0cmluZygpIHx8ICcnO1xyXG4gICAgICBtYXhMZW5ndGggPSBNYXRoLm1heChtYXhMZW5ndGgsIHZhbC5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgd29ya3NoZWV0LmdldENvbHVtbihpKS53aWR0aCA9IG1heExlbmd0aCArIDI7XHJcbiAgfVxyXG4gXHJcbiAgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpLnRoZW4oYnVmZmVyID0+IHtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXHJcbiAgICB9KTtcclxuICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xyXG4gIH0pO1xyXG59XHJcbiBcclxuIFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDU1YgVW5pdmVyc2FsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIGV4cG9ydFRvQ3N2VW5pdmVyc2FsKHRpdGxlOiBzdHJpbmcsIG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10sIGhlYWRlcnM6IHN0cmluZ1tdLCByb3dzOiBhbnlbXVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBtZXRhUm93cyA9IG1ldGFkYXRhLm1hcCgoW2ssIHZdKSA9PiBbYCR7a306ICR7dn1gXSk7XHJcbiAgICBjb25zdCBjc3ZDb250ZW50ID0gW1xyXG4gICAgICBbdGl0bGVdLFxyXG4gICAgICAuLi5tZXRhUm93cyxcclxuICAgICAgW10sXHJcbiAgICAgIGhlYWRlcnMsXHJcbiAgICAgIC4uLnJvd3MubWFwKHJvdyA9PiByb3cubWFwKHZhbHVlID0+IGBcIiR7dmFsdWV9XCJgKSlcclxuICAgIF0ubWFwKGUgPT4gZS5qb2luKCcsJykpLmpvaW4oJ1xcbicpO1xyXG4gXHJcbiAgICB0aGlzLmRvd25sb2FkRmlsZShjc3ZDb250ZW50LCBmaWxlTmFtZSwgJ3RleHQvY3N2Jyk7XHJcbiAgfVxyXG4gXHJcbiAgcHJpdmF0ZSBkb3dubG9hZEZpbGUoZGF0YTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHsgdHlwZSB9KTtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuIl19
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NoYXJlZC9leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOztBQVd4QyxNQUFNLE9BQU8sYUFBYTtJQU94QjtRQUxnQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNoQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUlsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsNkNBQTZDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNERBQTREO0lBQ3BELGlCQUFpQixDQUFDLFNBQWlCO1FBQzNDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUM5QixHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUVwQixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxD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QUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7MEdBblJVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcclxuaW1wb3J0ICogYXMgRXhjZWxKUyBmcm9tICdleGNlbGpzJztcclxuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5cclxuZGVjbGFyZSBtb2R1bGUgJ2pzcGRmJyB7XHJcbiAgaW50ZXJmYWNlIGpzUERGIHtcclxuICAgIGF1dG9UYWJsZTogKG9wdGlvbnM6IGFueSkgPT4ganNQREY7XHJcbiAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFeHBvcnRTZXJ2aWNlIHtcclxuXHJcbiBwcml2YXRlIHJlYWRvbmx5IHBkZkZvbnRTaXplID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwZGZMaW5lSGVpZ2h0ID0gNztcclxuICBwcml2YXRlIHJlYWRvbmx5IHBkZkxlZnRNYXJnaW4gPSAxNTtcclxuICBwcml2YXRlIGxvZ29CYXNlNjQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuIFxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5sb2FkSW1hZ2VBc0Jhc2U2NCgnYXNzZXRzL3JlcG9ydHMtbGliL2Fzc2V0cy9pbWFnZXMvWE1Mb2dvLnBuZycpLnRoZW4oYmFzZTY0ID0+IHtcclxuICAgICAgdGhpcy5sb2dvQmFzZTY0ID0gYmFzZTY0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFV0aWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBsb2FkSW1hZ2VBc0Jhc2U2NChpbWFnZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICBpbWcuc3JjID0gaW1hZ2VQYXRoO1xyXG4gXHJcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IDY7XHJcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiBzY2FsZTtcclxuICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQgKiBzY2FsZTtcclxuIFxyXG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgaWYgKGN0eCkge1xyXG4gICAgICAgIGN0eC5zY2FsZShzY2FsZSwgc2NhbGUpO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICBjb25zdCBiYXNlNjQgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApOyAvLyAxLjAgPSBoaWdoZXN0IHF1YWxpdHlcclxuICAgICAgICByZXNvbHZlKGJhc2U2NCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVqZWN0KCdGYWlsZWQgdG8gZ2V0IGNhbnZhcyBjb250ZXh0LicpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gXHJcbiAgICBpbWcub25lcnJvciA9ICgpID0+IHJlamVjdCgnRmFpbGVkIHRvIGxvYWQgaW1hZ2U6ICcgKyBpbWFnZVBhdGgpO1xyXG4gIH0pO1xyXG59XHJcbiBcclxuICBmb3JtYXREYXRlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSkgPyAnJyA6XHJcbiAgICAgIGAke2RhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0vJHsoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfS8ke2RhdGUuZ2V0RnVsbFllYXIoKX1gO1xyXG4gIH1cclxuICBcclxuICBmb3JtYXREYXRlVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgY29uc3QgbW9udGggPSAoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gIC8vIDEyLWhvdXIgZm9ybWF0XHJcbiAgbGV0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xyXG4gIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgY29uc3QgYW1wbSA9IGhvdXJzID49IDEyID8gJ1BNJyA6ICdBTSc7XHJcbiAgaG91cnMgPSBob3VycyAlIDEyO1xyXG4gIGhvdXJzID0gaG91cnMgPyBob3VycyA6IDEyOyAvLyB0aGUgaG91ciAnMCcgc2hvdWxkIGJlICcxMidcclxuICBjb25zdCBob3Vyc1N0ciA9IGhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuXHJcbiAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfSAke2hvdXJzU3RyfToke21pbnV0ZXN9ICR7YW1wbX1gO1xyXG59XHJcbiBcclxuICBnZW5lcmF0ZVJlcG9ydE1ldGFkYXRhKG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10pOiBbc3RyaW5nLCBzdHJpbmddW10ge1xyXG4gIHJldHVybiBtZXRhZGF0YS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpO1xyXG4gIH1cclxuIFxyXG4gIHByZXBhcmVFeHBvcnRUYWJsZShkYXRhOiBhbnlbXSwgY29sdW1uRGVmczogYW55W10sIG9wdGlvbnM6IHtcclxuICAgIGV4Y2x1ZGVGaWVsZHM/OiBzdHJpbmdbXSxcclxuICAgIGN1cnJlbmN5RmllbGRzPzogc3RyaW5nW11cclxuICB9ID0ge30pOiB7IGhlYWRlcnM6IHN0cmluZ1tdLCByb3dzOiBhbnlbXVtdIH0ge1xyXG4gICAgY29uc3QgeyBleGNsdWRlRmllbGRzID0gWydzcm5vJ10sIGN1cnJlbmN5RmllbGRzID0gW10gfSA9IG9wdGlvbnM7XHJcbiBcclxuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IGNvbHVtbkRlZnMuZmlsdGVyKGNvbCA9PlxyXG4gICAgICBjb2wuZmllbGQgJiZcclxuICAgICAgIWV4Y2x1ZGVGaWVsZHMuc29tZShleCA9PiBjb2wuZmllbGQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhleCkpICYmXHJcbiAgICAgICFleGNsdWRlRmllbGRzLnNvbWUoZXggPT4gY29sLmhlYWRlck5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXgpKVxyXG4gICAgKTtcclxuIFxyXG4gICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5maWx0ZXJlZENvbHVtbnMubWFwKGNvbCA9PiBjb2wuaGVhZGVyTmFtZSB8fCBjb2wuZmllbGQpXTtcclxuIFxyXG4gICAgY29uc3Qgcm93cyA9IGRhdGEubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJvd0RhdGEgPSBmaWx0ZXJlZENvbHVtbnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gcm93W2NvbC5maWVsZF07XHJcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gXHJcbiAgICAgICAgLy8gSGFuZGxlIHZhcmlvdXMgZGF0ZSBmaWVsZCBuYW1lc1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZE5hbWUuaW5jbHVkZXMoJ2RhdGUnKSB8fFxyXG4gICAgICAgICAgICBmaWVsZE5hbWUuaW5jbHVkZXMoJ2J1c2luZXNzZGF0ZScpKSAmJlxyXG4gICAgICAgICAgdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiBcclxuICAgICAgICAvLyBGb3JtYXQgY3VycmVuY3kgZmllbGRzXHJcbiAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgJiYgdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93RGF0YV07XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IGhlYWRlcnMsIHJvd3MgfTtcclxuICB9XHJcbiBcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUERGIFVuaXZlcnNhbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBhc3luYyBleHBvcnRUb1BkZlVuaXZlcnNhbCh0aXRsZTogc3RyaW5nLCBtZXRhZGF0YTogW3N0cmluZywgc3RyaW5nXVtdLCBoZWFkZXJzOiBzdHJpbmdbXSwgcm93czogYW55W11bXSwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6IFs0MDAsIDIxMF0gfSk7XHJcbiBcclxuICAgIGNvbnN0IGxvZ29XaWR0aCA9IDM4LjQsIGxvZ29IZWlnaHQgPSAxNy41LCBsb2dvWCA9IDE1LCBsb2dvWSA9IDEwO1xyXG4gICAgY29uc3QgcGFnZVdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoO1xyXG4gICAgY29uc3QgdGl0bGVZID0gMTg7XHJcbiBcclxuICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgZG9jLmFkZEltYWdlKHRoaXMubG9nb0Jhc2U2NCwgJ1BORycsIGxvZ29YLCBsb2dvWSwgbG9nb1dpZHRoLCBsb2dvSGVpZ2h0KTtcclxuICAgIH1cclxuIFxyXG4gICAgZG9jLnNldEZvbnRTaXplKDE1KTtcclxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgZG9jLnRleHQodGl0bGUsIHBhZ2VXaWR0aCAvIDIsIHRpdGxlWSwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XHJcbiBcclxuICAgIGxldCBjdXJyZW50WSA9IHRpdGxlWSArIDE0O1xyXG4gICAgZG9jLnNldEZvbnRTaXplKHRoaXMucGRmRm9udFNpemUpO1xyXG4gICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGkpID0+IHtcclxuICAgICAgY29uc3QgeSA9IGN1cnJlbnRZICsgaSAqIHRoaXMucGRmTGluZUhlaWdodDtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgIGRvYy50ZXh0KGxhYmVsLCB0aGlzLnBkZkxlZnRNYXJnaW4sIHkpO1xyXG4gICAgICBjb25zdCBsYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChsYWJlbCArICcgJyk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgIGRvYy50ZXh0KHZhbHVlLCB0aGlzLnBkZkxlZnRNYXJnaW4gKyBsYWJlbFdpZHRoLCB5KTtcclxuICAgIH0pO1xyXG4gICAgY3VycmVudFkgKz0gbWV0YWRhdGEubGVuZ3RoICogdGhpcy5wZGZMaW5lSGVpZ2h0ICsgNTtcclxuIFxyXG4gICAgY29uc3QgY29sdW1uU3R5bGVzOiB7IFtrZXk6IG51bWJlcl06IGFueSB9ID0ge307XHJcbiAgICBoZWFkZXJzLmZvckVhY2goKF8sIGkpID0+IGNvbHVtblN0eWxlc1tpXSA9IHsgY2VsbFdpZHRoOiAnYXV0bycgfSk7XHJcbiBcclxuICAgIGRvYy5hdXRvVGFibGUoe1xyXG4gICAgICBoZWFkOiBbaGVhZGVyc10sXHJcbiAgICAgIGJvZHk6IHJvd3MsXHJcbiAgICAgIHN0YXJ0WTogY3VycmVudFksXHJcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgIGhlYWRTdHlsZXM6IHtcclxuICAgICAgICBmaWxsQ29sb3I6IFsyMjAsIDIyMCwgMjIwXSwgdGV4dENvbG9yOiAwLFxyXG4gICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLCBmb250U2l6ZTogOSwgaGFsaWduOiAnY2VudGVyJyxcclxuICAgICAgfSxcclxuICAgICAgYm9keVN0eWxlczogeyBmb250U2l6ZTogOCwgZmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0sIHRleHRDb2xvcjogWzAsIDAsIDBdIH0sXHJcbiAgICAgIHN0eWxlczogeyBjZWxsUGFkZGluZzogMiwgb3ZlcmZsb3c6ICdsaW5lYnJlYWsnLCBtaW5DZWxsSGVpZ2h0OiA2IH0sXHJcbiAgICAgIGNvbHVtblN0eWxlc1xyXG4gICAgfSk7XHJcbiBcclxuICAgIGRvYy5zYXZlKGZpbGVOYW1lKTtcclxuICB9XHJcbiBcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXhjZWwgVW5pdmVyc2FsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIGV4cG9ydFRvRXhjZWxVbml2ZXJzYWwodGl0bGU6IHN0cmluZywgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSwgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICBjb25zdCB3b3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XHJcbiAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KHRpdGxlKTtcclxuIFxyXG4gIGxldCBjdXJyZW50Um93ID0gMTtcclxuIFxyXG4gIC8vIEFkZCBpbWFnZSBpZiBhdmFpbGFibGVcclxuICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICBjb25zdCBiYXNlNjREYXRhID0gdGhpcy5sb2dvQmFzZTY0LnJlcGxhY2UoL15kYXRhOmltYWdlXFwvXFx3KztiYXNlNjQsLywgJycpO1xyXG4gICAgY29uc3QgaW1hZ2VJZCA9IHdvcmtib29rLmFkZEltYWdlKHtcclxuICAgICAgYmFzZTY0OiBiYXNlNjREYXRhLFxyXG4gICAgICBleHRlbnNpb246ICdwbmcnLFxyXG4gICAgfSk7XHJcbiBcclxuICAgIC8vIFBsYWNlIGltYWdlIGF0IHRvcC1sZWZ0IChlLmcuLCBBMTpDNClcclxuICAgIHdvcmtzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XHJcbiAgICAgIHRsOiB7IGNvbDogMCwgcm93OiAwIH0sXHJcbiAgICAgIGV4dDogeyB3aWR0aDogMTQ1LCBoZWlnaHQ6IDY2IH0sXHJcbiAgICAgIGVkaXRBczogJ29uZUNlbGwnXHJcbiAgICB9KTtcclxuICB9XHJcbiBcclxuICAvLyBBZGQgdGl0bGUgYWxpZ25lZCBpbiBtaWRkbGUgaG9yaXpvbnRhbGx5IChtZXJnZWQgYWNyb3NzIGFsbCBjb2x1bW5zKVxyXG4gIGNvbnN0IHRpdGxlUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KTtcclxuICB0aXRsZVJvdy5nZXRDZWxsKDQpLnZhbHVlID0gdGl0bGU7XHJcbiAgdGl0bGVSb3cuZ2V0Q2VsbCg0KS5mb250ID0geyBib2xkOiB0cnVlLCBzaXplOiAxNiB9O1xyXG4gIHRpdGxlUm93LmdldENlbGwoNCkuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdsZWZ0JyB9O1xyXG4gXHJcbiAgY29uc3QgdGl0bGVNZXJnZUVuZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjQgKyBoZWFkZXJzLmxlbmd0aCk7XHJcbiAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEQke2N1cnJlbnRSb3d9OiR7dGl0bGVNZXJnZUVuZH0ke2N1cnJlbnRSb3d9YCk7XHJcbiAgY3VycmVudFJvdyArPSAzOyAvLyBNb3ZlIHBhc3QgaW1hZ2Ugc3BhY2VcclxuIFxyXG4gIC8vIEFkZCBtZXRhZGF0YVxyXG4gIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdKSA9PiB7XHJcbiAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICBjb25zdCBjZWxsID0gcm93LmdldENlbGwoMSk7XHJcbiAgICBjZWxsLnZhbHVlID0ge1xyXG4gICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgIHsgdGV4dDogYCR7bGFiZWx9OiBgLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LFxyXG4gICAgICAgIHsgdGV4dDogdmFsdWUgPz8gJycsIGZvbnQ6IHsgYm9sZDogZmFsc2UgfSB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgQSR7cm93Lm51bWJlcn06JHtTdHJpbmcuZnJvbUNoYXJDb2RlKDY0ICsgaGVhZGVycy5sZW5ndGgpfSR7cm93Lm51bWJlcn1gKTtcclxuICB9KTtcclxuIFxyXG4gIHdvcmtzaGVldC5hZGRSb3coW10pO1xyXG4gIGN1cnJlbnRSb3crKztcclxuIFxyXG4gIC8vIEFkZCB0YWJsZSBoZWFkZXIgcm93XHJcbiAgY29uc3QgaGVhZGVyUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpKSA9PiB7XHJcbiAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgY2VsbC52YWx1ZSA9IGhlYWRlcjtcclxuICAgIGNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xyXG4gICAgY2VsbC5maWxsID0geyB0eXBlOiAncGF0dGVybicsIHBhdHRlcm46ICdzb2xpZCcsIGZnQ29sb3I6IHsgYXJnYjogJ0Q5RDlEOScgfSB9O1xyXG4gICAgY2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2NlbnRlcicgfTtcclxuICAgIGNlbGwuYm9yZGVyID0ge1xyXG4gICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICB9O1xyXG4gIH0pO1xyXG4gXHJcbiAgY29uc3QgZGF0YVN0YXJ0Um93ID0gY3VycmVudFJvdztcclxuICByb3dzLmZvckVhY2gocm93RGF0YSA9PiB7XHJcbiAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICByb3dEYXRhLmZvckVhY2goKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2VsbChpICsgMSk7XHJcbiAgICAgIGNlbGwudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgY2VsbC5ib3JkZXIgPSB7XHJcbiAgICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbiBcclxuICAvLyBBdXRvIGNvbHVtbiB3aWR0aHNcclxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBsZXQgbWF4TGVuZ3RoID0gaGVhZGVyc1tpIC0gMV0ubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgcm93TnVtID0gZGF0YVN0YXJ0Um93OyByb3dOdW0gPD0gd29ya3NoZWV0Lmxhc3RSb3chLm51bWJlcjsgcm93TnVtKyspIHtcclxuICAgICAgY29uc3QgdmFsID0gd29ya3NoZWV0LmdldFJvdyhyb3dOdW0pLmdldENlbGwoaSkudmFsdWU/LnRvU3RyaW5nKCkgfHwgJyc7XHJcbiAgICAgIG1heExlbmd0aCA9IE1hdGgubWF4KG1heExlbmd0aCwgdmFsLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKGkpLndpZHRoID0gbWF4TGVuZ3RoICsgMjtcclxuICB9XHJcbiBcclxuICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWZmZXIgPT4ge1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XHJcbiAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcclxuICAgIH0pO1xyXG4gICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCBmaWxlTmFtZSk7XHJcbiAgfSk7XHJcbn1cclxuIFxyXG4gXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENTViBVbml2ZXJzYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgZXhwb3J0VG9Dc3ZVbml2ZXJzYWwodGl0bGU6IHN0cmluZywgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSwgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1ldGFSb3dzID0gbWV0YWRhdGEubWFwKChbaywgdl0pID0+IFtgJHtrfTogJHt2fWBdKTtcclxuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbXHJcbiAgICAgIFt0aXRsZV0sXHJcbiAgICAgIC4uLm1ldGFSb3dzLFxyXG4gICAgICBbXSxcclxuICAgICAgaGVhZGVycyxcclxuICAgICAgLi4ucm93cy5tYXAocm93ID0+IHJvdy5tYXAodmFsdWUgPT4gYFwiJHt2YWx1ZX1cImApKVxyXG4gICAgXS5tYXAoZSA9PiBlLmpvaW4oJywnKSkuam9pbignXFxuJyk7XHJcbiBcclxuICAgIHRoaXMuZG93bmxvYWRGaWxlKGNzdkNvbnRlbnQsIGZpbGVOYW1lLCAndGV4dC9jc3YnKTtcclxuICB9XHJcbiBcclxuICBwcml2YXRlIGRvd25sb2FkRmlsZShkYXRhOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlIH0pO1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICB9XHJcblxyXG59XHJcblxyXG4iXX0=
|