brainloper-ui 14.1.13 → 14.1.14

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.
Files changed (25) hide show
  1. package/esm2020/public_api.mjs +2 -1
  2. package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +4 -35
  3. package/esm2020/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.mjs +4 -68
  4. package/esm2020/src/app/modules/interfaces/report/template-pdf-base.mjs +1 -1
  5. package/esm2020/src/app/modules/interfaces/report/template-pdf-purchase-order.mjs +2 -0
  6. package/esm2020/src/app/modules/services/fuel-order-pdf.service.mjs +31 -213
  7. package/esm2020/src/app/modules/services/functions.service.mjs +22 -1
  8. package/esm2020/src/app/modules/services/generate-pdf.service.mjs +25 -45
  9. package/esm2020/src/app/modules/services/purchase-order-pdf.service.mjs +173 -0
  10. package/esm2020/src/app/modules/services/work-order-pdf.service.mjs +56 -77
  11. package/fesm2015/brainloper-ui.mjs +298 -433
  12. package/fesm2015/brainloper-ui.mjs.map +1 -1
  13. package/fesm2020/brainloper-ui.mjs +303 -433
  14. package/fesm2020/brainloper-ui.mjs.map +1 -1
  15. package/package.json +1 -1
  16. package/public_api.d.ts +1 -0
  17. package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +0 -2
  18. package/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.d.ts +0 -2
  19. package/src/app/modules/interfaces/report/template-pdf-base.d.ts +1 -0
  20. package/src/app/modules/interfaces/report/template-pdf-purchase-order.d.ts +18 -0
  21. package/src/app/modules/services/fuel-order-pdf.service.d.ts +5 -39
  22. package/src/app/modules/services/functions.service.d.ts +2 -0
  23. package/src/app/modules/services/generate-pdf.service.d.ts +7 -6
  24. package/src/app/modules/services/purchase-order-pdf.service.d.ts +21 -0
  25. package/src/app/modules/services/work-order-pdf.service.d.ts +14 -41
@@ -2,12 +2,28 @@ import { Injectable } from '@angular/core';
2
2
  import { jsPDF } from 'jspdf';
3
3
  import 'jspdf-autotable';
4
4
  import * as i0 from "@angular/core";
5
+ // export interface TemplatePdfOt {
6
+ // name?: string;
7
+ // nit?: string;
8
+ // address?: string;
9
+ // telephone?: string;
10
+ // mail?: string;
11
+ // image?: string;
12
+ // code?: string;
13
+ // date?: string;
14
+ // responsible?: string;
15
+ // third?: string;
16
+ // approved_by?: string;
17
+ // description?: string;
18
+ // consecutive?: string;
19
+ // nameProvider?: string;
20
+ // addressProvider?: string;
21
+ // area?: string;
22
+ // odometer?: string;
23
+ // invoiceReference?: string;
24
+ // }
5
25
  export class WorkOrderPdfService {
6
26
  constructor() { }
7
- /**
8
- * Genera PDF de orden de trabajo con diseño profesional
9
- * Dimensiones fijas, independiente del DOM
10
- */
11
27
  generateWorkOrderPDF(data, options) {
12
28
  return new Promise((resolve, reject) => {
13
29
  try {
@@ -57,6 +73,41 @@ export class WorkOrderPdfService {
57
73
  }
58
74
  });
59
75
  }
76
+ /**
77
+ * Genera PDF optimizado para impresión
78
+ */
79
+ generateForPrint(data) {
80
+ return this.generateWorkOrderPDF(data, {
81
+ format: 'letter',
82
+ download: false
83
+ });
84
+ }
85
+ /**
86
+ * Genera PDF y lo devuelve como Blob para envío por email
87
+ */
88
+ generateAsBlob(data) {
89
+ return new Promise((resolve, reject) => {
90
+ this.generateWorkOrderPDF(data, { download: false })
91
+ .then(doc => {
92
+ const pdfBlob = doc.output('blob');
93
+ resolve(pdfBlob);
94
+ })
95
+ .catch(reject);
96
+ });
97
+ }
98
+ /**
99
+ * Genera PDF y lo devuelve como base64
100
+ */
101
+ generateAsBase64(data) {
102
+ return new Promise((resolve, reject) => {
103
+ this.generateWorkOrderPDF(data, { download: false })
104
+ .then(doc => {
105
+ const base64 = doc.output('datauristring');
106
+ resolve(base64);
107
+ })
108
+ .catch(reject);
109
+ });
110
+ }
60
111
  addHeader(doc, data, margin, y, pageWidth, color) {
61
112
  // Fondo del encabezado
62
113
  doc.setFillColor(color[0], color[1], color[2]);
@@ -259,43 +310,6 @@ export class WorkOrderPdfService {
259
310
  }
260
311
  return finalBoxY + boxHeight;
261
312
  }
262
- /**
263
- * Método auxiliar para manejar texto largo que puede necesitar múltiples páginas
264
- */
265
- addLongText(doc, text, x, y, maxWidth, fontSize = 11) {
266
- if (!text || !text.trim())
267
- return y;
268
- doc.setFontSize(fontSize);
269
- const lines = doc.splitTextToSize(text.trim(), maxWidth);
270
- const lineHeight = fontSize + 3;
271
- const pageHeight = doc.internal.pageSize.getHeight();
272
- const margin = 40;
273
- let currentY = y;
274
- let lineIndex = 0;
275
- while (lineIndex < lines.length) {
276
- // Verificar si necesitamos una nueva página
277
- if (currentY + lineHeight > pageHeight - margin) {
278
- doc.addPage();
279
- currentY = margin;
280
- }
281
- // Calcular cuántas líneas caben en la página actual
282
- const remainingSpace = pageHeight - currentY - margin;
283
- const maxLinesInPage = Math.floor(remainingSpace / lineHeight);
284
- if (maxLinesInPage > 0) {
285
- const linesToShow = Math.min(maxLinesInPage, lines.length - lineIndex);
286
- const pageLines = lines.slice(lineIndex, lineIndex + linesToShow);
287
- doc.text(pageLines, x, currentY);
288
- currentY += pageLines.length * lineHeight;
289
- lineIndex += linesToShow;
290
- }
291
- else {
292
- // Si no cabe ni una línea, ir a nueva página
293
- doc.addPage();
294
- currentY = margin;
295
- }
296
- }
297
- return currentY;
298
- }
299
313
  addAuthorization(doc, data, y, margin, pageWidth) {
300
314
  const tableData = [
301
315
  [
@@ -337,41 +351,6 @@ export class WorkOrderPdfService {
337
351
  // Resetear color
338
352
  doc.setTextColor(0, 0, 0);
339
353
  }
340
- /**
341
- * Genera PDF optimizado para impresión
342
- */
343
- generateForPrint(data) {
344
- return this.generateWorkOrderPDF(data, {
345
- format: 'letter',
346
- download: false
347
- });
348
- }
349
- /**
350
- * Genera PDF y lo devuelve como Blob para envío por email
351
- */
352
- generateAsBlob(data) {
353
- return new Promise((resolve, reject) => {
354
- this.generateWorkOrderPDF(data, { download: false })
355
- .then(doc => {
356
- const pdfBlob = doc.output('blob');
357
- resolve(pdfBlob);
358
- })
359
- .catch(reject);
360
- });
361
- }
362
- /**
363
- * Genera PDF y lo devuelve como base64
364
- */
365
- generateAsBase64(data) {
366
- return new Promise((resolve, reject) => {
367
- this.generateWorkOrderPDF(data, { download: false })
368
- .then(doc => {
369
- const base64 = doc.output('datauristring');
370
- resolve(base64);
371
- })
372
- .catch(reject);
373
- });
374
- }
375
354
  }
376
355
  WorkOrderPdfService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WorkOrderPdfService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
377
356
  WorkOrderPdfService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WorkOrderPdfService, providedIn: 'root' });
@@ -381,4 +360,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
381
360
  providedIn: 'root'
382
361
  }]
383
362
  }], ctorParameters: function () { return []; } });
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1vcmRlci1wZGYuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zZXJ2aWNlcy93b3JrLW9yZGVyLXBkZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLGlCQUFpQixDQUFDOztBQTBCekIsTUFBTSxPQUFPLG1CQUFtQjtJQUU5QixnQkFBZ0IsQ0FBQztJQUVqQjs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxJQUFtQixFQUFFLE9BSXpDO1FBQ0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJO2dCQUNGLE1BQU0sSUFBSSxHQUFHO29CQUNYLE1BQU0sRUFBRSxRQUFRO29CQUNoQixRQUFRLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixHQUFHLE9BQU87aUJBQ1gsQ0FBQztnQkFFRixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQztnQkFFdEIsdUJBQXVCO2dCQUN2QixNQUFNLFlBQVksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMs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bmJVLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGpzUERGIH0gZnJvbSAnanNwZGYnO1xuaW1wb3J0ICdqc3BkZi1hdXRvdGFibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtPcmRlckRhdGEge1xuICBuYW1lPzogc3RyaW5nO1xuICBuaXQ/OiBzdHJpbmc7XG4gIGFkZHJlc3M/OiBzdHJpbmc7XG4gIHRlbGVwaG9uZT86IHN0cmluZztcbiAgbWFpbD86IHN0cmluZztcbiAgaW1hZ2U/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRhdGU/OiBzdHJpbmc7XG4gIHJlc3BvbnNpYmxlPzogc3RyaW5nO1xuICB0aGlyZD86IHN0cmluZztcbiAgYXBwcm92ZWRfYnk/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjb25zZWN1dGl2ZT86IHN0cmluZztcbiAgbmFtZVByb3ZpZGVyPzogc3RyaW5nO1xuICBhZGRyZXNzUHJvdmlkZXI/OiBzdHJpbmc7XG4gIGFyZWE/OiBzdHJpbmc7XG4gIG9kb21ldGVyPzogc3RyaW5nO1xuICBpbnZvaWNlUmVmZXJlbmNlPzogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBXb3JrT3JkZXJQZGZTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmEgUERGIGRlIG9yZGVuIGRlIHRyYWJham8gY29uIGRpc2XDsW8gcHJvZmVzaW9uYWxcbiAgICogRGltZW5zaW9uZXMgZmlqYXMsIGluZGVwZW5kaWVudGUgZGVsIERPTVxuICAgKi9cbiAgZ2VuZXJhdGVXb3JrT3JkZXJQREYoZGF0YTogV29ya09yZGVyRGF0YSwgb3B0aW9ucz86IHtcbiAgICBmb3JtYXQ/OiAnbGV0dGVyJyB8ICdhNCc7XG4gICAgZG93bmxvYWQ/OiBib29sZWFuO1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxqc1BERj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgIGZvcm1hdDogJ2xldHRlcicsXG4gICAgICAgICAgZG93bmxvYWQ6IHRydWUsXG4gICAgICAgICAgZmlsZW5hbWU6ICdvcmRlbl90cmFiYWpvLnBkZicsXG4gICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcsIG9wdHMuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgcGFnZVdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCk7XG4gICAgICAgIGNvbnN0IHBhZ2VIZWlnaHQgPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0SGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IDQwO1xuICAgICAgICBsZXQgY3VycmVudFkgPSBtYXJnaW47XG5cbiAgICAgICAgLy8gQ29sb3JlcyBjb3Jwb3JhdGl2b3NcbiAgICAgICAgY29uc3QgcHJpbWFyeUNvbG9yID0gWzUyLCAxNTIsIDIxOV07IC8vIEF6dWwgcGFyYSDDs3JkZW5lcyBkZSB0cmFiYWpvXG4gICAgICAgIGNvbnN0IHNlY29uZGFyeUNvbG9yID0gWzQ0LCA2MiwgODBdOyAvLyBHcmlzIG9zY3Vyb1xuICAgICAgICBjb25zdCBhY2NlbnRDb2xvciA9IFsxNTUsIDg5LCAxODJdOyAvLyBNb3JhZG9cblxuICAgICAgICAvLyA9PT0gRU5DQUJFWkFETyBQUklOQ0lQQUwgPT09XG4gICAgICAgIHRoaXMuYWRkSGVhZGVyKGRvYywgZGF0YSwgbWFyZ2luLCBjdXJyZW50WSwgcGFnZVdpZHRoLCBwcmltYXJ5Q29sb3IpO1xuICAgICAgICBjdXJyZW50WSA9IDE0MDtcblxuICAgICAgICAvLyA9PT0gVMONVFVMTyBERUwgRE9DVU1FTlRPID09PVxuICAgICAgICBjdXJyZW50WSA9IHRoaXMuYWRkRG9jdW1lbnRUaXRsZShkb2MsIGRhdGEsIGN1cnJlbnRZLCBwYWdlV2lkdGgsIGFjY2VudENvbG9yKTtcbiAgICAgICAgY3VycmVudFkgKz0gMjU7XG5cbiAgICAgICAgLy8gPT09IElORk9STUFDScOTTiBQUklOQ0lQQUwgPT09XG4gICAgICAgIGN1cnJlbnRZID0gdGhpcy5hZGRNYWluSW5mbyhkb2MsIGRhdGEsIGN1cnJlbnRZLCBtYXJnaW4sIHBhZ2VXaWR0aCk7XG4gICAgICAgIGN1cnJlbnRZICs9IDIwO1xuXG4gICAgICAgIC8vID09PSBEQVRPUyBERUwgUFJPVkVFRE9SID09PVxuICAgICAgICBjdXJyZW50WSA9IHRoaXMuYWRkUHJvdmlkZXJJbmZvKGRvYywgZGF0YSwgY3VycmVudFksIG1hcmdpbiwgcGFnZVdpZHRoLCBzZWNvbmRhcnlDb2xvcik7XG4gICAgICAgIGN1cnJlbnRZICs9IDIwO1xuXG4gICAgICAgIC8vID09PSBERVRBTExFUyBERUwgU0VSVklDSU8gPT09XG4gICAgICAgIGN1cnJlbnRZID0gdGhpcy5hZGRTZXJ2aWNlRGV0YWlscyhkb2MsIGRhdGEsIGN1cnJlbnRZLCBtYXJnaW4sIHBhZ2VXaWR0aCwgc2Vjb25kYXJ5Q29sb3IpO1xuICAgICAgICBjdXJyZW50WSArPSAyMDtcblxuICAgICAgICAvLyA9PT0gQVVUT1JJWkFDScOTTiA9PT1cbiAgICAgICAgY3VycmVudFkgPSB0aGlzLmFkZEF1dGhvcml6YXRpb24oZG9jLCBkYXRhLCBjdXJyZW50WSwgbWFyZ2luLCBwYWdlV2lkdGgpO1xuICAgICAgICBjdXJyZW50WSArPSAzMDtcblxuICAgICAgICAvLyA9PT0gUElFIERFIFDDgUdJTkEgPT09XG4gICAgICAgIHRoaXMuYWRkRm9vdGVyKGRvYywgZGF0YSwgcGFnZUhlaWdodCAtIDgwLCBwYWdlV2lkdGgsIHByaW1hcnlDb2xvcik7XG5cbiAgICAgICAgLy8gPT09IEdFTkVSQVIvREVTQ0FSR0FSID09PVxuICAgICAgICBpZiAob3B0cy5kb3dubG9hZCkge1xuICAgICAgICAgIGRvYy5vdXRwdXQoJ2RhdGF1cmxuZXd3aW5kb3cnLCB7IGZpbGVuYW1lOiBvcHRzLmZpbGVuYW1lIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShkb2MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkSGVhZGVyKGRvYzoganNQREYsIGRhdGE6IFdvcmtPcmRlckRhdGEsIG1hcmdpbjogbnVtYmVyLCB5OiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAvLyBGb25kbyBkZWwgZW5jYWJlemFkb1xuICAgIGRvYy5zZXRGaWxsQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnJlY3QobWFyZ2luLCB5LCBwYWdlV2lkdGggLSAobWFyZ2luICogMiksIDgwLCAnRicpO1xuXG4gICAgLy8gVGV4dG8gZGVsIGVuY2FiZXphZG8gZW4gYmxhbmNvXG4gICAgZG9jLnNldFRleHRDb2xvcigyNTUsIDI1NSwgMjU1KTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTgpO1xuICAgIFxuICAgIGNvbnN0IGNvbXBhbnlOYW1lID0gKGRhdGEubmFtZSB8fCAnJykudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBuYW1lV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGNvbXBhbnlOYW1lKTtcbiAgICBkb2MudGV4dChjb21wYW55TmFtZSwgKHBhZ2VXaWR0aCAtIG5hbWVXaWR0aCkgLyAyLCB5ICsgMjUpO1xuXG4gICAgZG9jLnNldEZvbnRTaXplKDEyKTtcbiAgICBjb25zdCBuaXRUZXh0ID0gYE5JVDogJHtkYXRhLm5pdCB8fCAnJ31gO1xuICAgIGNvbnN0IG5pdFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChuaXRUZXh0KTtcbiAgICBkb2MudGV4dChuaXRUZXh0LCAocGFnZVdpZHRoIC0gbml0V2lkdGgpIC8gMiwgeSArIDQ1KTtcblxuICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XG4gICAgY29uc3QgYWRkcmVzc1RleHQgPSBgJHtkYXRhLmFkZHJlc3MgfHwgJyd9IC0gVEVMOiAke2RhdGEudGVsZXBob25lIHx8ICcnfWA7XG4gICAgY29uc3QgYWRkcmVzc1dpZHRoID0gZG9jLmdldFRleHRXaWR0aChhZGRyZXNzVGV4dCk7XG4gICAgZG9jLnRleHQoYWRkcmVzc1RleHQsIChwYWdlV2lkdGggLSBhZGRyZXNzV2lkdGgpIC8gMiwgeSArIDY1KTtcblxuICAgIC8vIFJlc2V0ZWFyIGNvbG9yIGRlIHRleHRvXG4gICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRG9jdW1lbnRUaXRsZShkb2M6IGpzUERGLCBkYXRhOiBXb3JrT3JkZXJEYXRhLCB5OiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDIwKTtcbiAgICBcbiAgICBjb25zdCB0aXRsZSA9ICdPUkRFTiBERSBUUkFCQUpPJztcbiAgICBjb25zdCB0aXRsZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0aXRsZSk7XG4gICAgZG9jLnRleHQodGl0bGUsIChwYWdlV2lkdGggLSB0aXRsZVdpZHRoKSAvIDIsIHkpO1xuXG4gICAgZG9jLnNldEZvbnRTaXplKDE2KTtcbiAgICBjb25zdCBudW1iZXJUZXh0ID0gYE7CsCAke2RhdGEuY29uc2VjdXRpdmUgfHwgJyd9YDtcbiAgICBjb25zdCBudW1iZXJXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobnVtYmVyVGV4dCk7XG4gICAgZG9jLnRleHQobnVtYmVyVGV4dCwgKHBhZ2VXaWR0aCAtIG51bWJlcldpZHRoKSAvIDIsIHkgKyAyNSk7XG5cbiAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuICAgIHJldHVybiB5ICsgNDA7XG4gIH1cblxuICBwcml2YXRlIGFkZE1haW5JbmZvKGRvYzoganNQREYsIGRhdGE6IFdvcmtPcmRlckRhdGEsIHk6IG51bWJlciwgbWFyZ2luOiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0YWJsZURhdGEgPSBbXG4gICAgICBbXG4gICAgICAgIHsgY29udGVudDogJ8OBcmVhOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuYXJlYSB8fCAnJywgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdDw7NkaWdvOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuY29kZSB8fCAnJywgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdGZWNoYTonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLmRhdGUgfHwgJycsIHN0eWxlczoge30gfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb250ZW50OiAnT3BlcmFyaW86Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5yZXNwb25zaWJsZSB8fCAnJywgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdPZMOzbWV0cm86Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5vZG9tZXRlciB8fCAnJywgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdSZWYuIEZhY3R1cmE6Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5pbnZvaWNlUmVmZXJlbmNlIHx8ICctJywgc3R5bGVzOiB7fSB9XG4gICAgICBdXG4gICAgXTtcblxuICAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xuICAgICAgc3RhcnRZOiB5LFxuICAgICAgYm9keTogdGFibGVEYXRhLFxuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250U2l6ZTogMTEsXG4gICAgICAgIGNlbGxQYWRkaW5nOiA4LFxuICAgICAgICBsaW5lQ29sb3I6IFsyMDAsIDIwMCwgMjAwXSxcbiAgICAgICAgbGluZVdpZHRoOiAwLjVcbiAgICAgIH0sXG4gICAgICBjb2x1bW5TdHlsZXM6IHtcbiAgICAgICAgMDogeyBjZWxsV2lkdGg6IDcwIH0sXG4gICAgICAgIDE6IHsgY2VsbFdpZHRoOiAxMDAgfSxcbiAgICAgICAgMjogeyBjZWxsV2lkdGg6IDcwIH0sXG4gICAgICAgIDM6IHsgY2VsbFdpZHRoOiA4MCB9LFxuICAgICAgICA0OiB7IGNlbGxXaWR0aDogNzAgfSxcbiAgICAgICAgNTogeyBjZWxsV2lkdGg6IDgwIH1cbiAgICAgIH0sXG4gICAgICBtYXJnaW46IHsgbGVmdDogbWFyZ2luLCByaWdodDogbWFyZ2luIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFk7XG4gIH1cblxuICBwcml2YXRlIGFkZFByb3ZpZGVySW5mbyhkb2M6IGpzUERGLCBkYXRhOiBXb3JrT3JkZXJEYXRhLCB5OiBudW1iZXIsIG1hcmdpbjogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlciwgY29sb3I6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICAvLyBUw610dWxvIGRlIHNlY2Npw7NuXG4gICAgZG9jLnNldFRleHRDb2xvcihjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdKTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTQpO1xuICAgIGNvbnN0IHRpdGxlID0gJ0RBVE9TIERFTCBQUk9WRUVET1InO1xuICAgIGNvbnN0IHRpdGxlV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcbiAgICBkb2MudGV4dCh0aXRsZSwgKHBhZ2VXaWR0aCAtIHRpdGxlV2lkdGgpIC8gMiwgeSk7XG4gICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcblxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IFtcbiAgICAgIFtcbiAgICAgICAgeyBjb250ZW50OiAnTm9tYnJlOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEubmFtZVByb3ZpZGVyIHx8ICcnLCBzdHlsZXM6IHt9IH0sXG4gICAgICAgIHsgY29udGVudDogJ0RpcmVjY2nDs246Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5hZGRyZXNzUHJvdmlkZXIgfHwgJycsIHN0eWxlczoge30gfVxuICAgICAgXVxuICAgIF07XG5cbiAgICAoZG9jIGFzIGFueSkuYXV0b1RhYmxlKHtcbiAgICAgIHN0YXJ0WTogeSArIDIwLFxuICAgICAgYm9keTogdGFibGVEYXRhLFxuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250U2l6ZTogMTEsXG4gICAgICAgIGNlbGxQYWRkaW5nOiA4LFxuICAgICAgICBsaW5lQ29sb3I6IFsyMDAsIDIwMCwgMjAwXSxcbiAgICAgICAgbGluZVdpZHRoOiAwLjVcbiAgICAgIH0sXG4gICAgICBjb2x1bW5TdHlsZXM6IHtcbiAgICAgICAgMDogeyBjZWxsV2lkdGg6IDgwIH0sXG4gICAgICAgIDE6IHsgY2VsbFdpZHRoOiAxNjAgfSxcbiAgICAgICAgMjogeyBjZWxsV2lkdGg6IDgwIH0sXG4gICAgICAgIDM6IHsgY2VsbFdpZHRoOiAxNTAgfVxuICAgICAgfSxcbiAgICAgIG1hcmdpbjogeyBsZWZ0OiBtYXJnaW4sIHJpZ2h0OiBtYXJnaW4gfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIChkb2MgYXMgYW55KS5sYXN0QXV0b1RhYmxlLmZpbmFsWTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU2VydmljZURldGFpbHMoZG9jOiBqc1BERiwgZGF0YTogV29ya09yZGVyRGF0YSwgeTogbnVtYmVyLCBtYXJnaW46IG51bWJlciwgcGFnZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgLy8gVMOtdHVsbyBkZSBzZWNjacOzblxuICAgIGRvYy5zZXRUZXh0Q29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDE0KTtcbiAgICBjb25zdCB0aXRsZSA9ICdERVRBTExFUyBERUwgU0VSVklDSU8nO1xuICAgIGNvbnN0IHRpdGxlV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcbiAgICBkb2MudGV4dCh0aXRsZSwgKHBhZ2VXaWR0aCAtIHRpdGxlV2lkdGgpIC8gMiwgeSk7XG4gICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcblxuICAgIC8vIFByZXBhcmFyIHRleHRvIHBhcmEgY2FsY3VsYXIgYWx0dXJhIG5lY2VzYXJpYVxuICAgIGNvbnN0IGJveFkgPSB5ICsgMjA7XG4gICAgY29uc3QgYm94V2lkdGggPSBwYWdlV2lkdGggLSAobWFyZ2luICogMik7XG4gICAgY29uc3QgdGV4dE1hcmdpbiA9IG1hcmdpbiArIDE1O1xuICAgIGNvbnN0IG1heFdpZHRoID0gYm94V2lkdGggLSAzMDtcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gMTU7XG4gICAgY29uc3QgbWluQm94SGVpZ2h0ID0gNjA7IC8vIEFsdHVyYSBtw61uaW1hIGRlbCBjb250ZW5lZG9yXG4gICAgY29uc3QgcGFkZGluZyA9IDQwOyAvLyBQYWRkaW5nIHN1cGVyaW9yIGUgaW5mZXJpb3IgKDIwIGFycmliYSArIDIwIGFiYWpvKVxuXG4gICAgLy8gQ2FsY3VsYXIgbMOtbmVhcyBkZSB0ZXh0byBuZWNlc2FyaWFzXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTEpO1xuICAgIFxuICAgIGxldCB0b3RhbExpbmVzID0gMDtcbiAgICBsZXQgY3VycmVudFRleHRZID0gMjA7IC8vIFBvc2ljacOzbiByZWxhdGl2YSBkZW50cm8gZGVsIGJveFxuXG4gICAgaWYgKGRhdGEuZGVzY3JpcHRpb24gJiYgZGF0YS5kZXNjcmlwdGlvbi50cmltKCkpIHtcbiAgICAgIGNvbnN0IGRlc2NMaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUoZGF0YS5kZXNjcmlwdGlvbi50cmltKCksIG1heFdpZHRoKTtcbiAgICAgIHRvdGFsTGluZXMgKz0gZGVzY0xpbmVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhciBhbHR1cmEgbmVjZXNhcmlhIGJhc2FkYSBlbiBlbCBjb250ZW5pZG9cbiAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gTWF0aC5tYXgodG90YWxMaW5lcyAqIGxpbmVIZWlnaHQsIDMwKTsgLy8gTcOtbmltbyAzMHB0IHBhcmEgY29udGVuaWRvXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gTWF0aC5tYXgobWluQm94SGVpZ2h0LCBjb250ZW50SGVpZ2h0ICsgcGFkZGluZyk7XG5cbiAgICAvLyBWZXJpZmljYXIgc2kgbmVjZXNpdGFtb3MgdW5hIG51ZXZhIHDDoWdpbmFcbiAgICBjb25zdCBwYWdlSGVpZ2h0ID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlID0gcGFnZUhlaWdodCAtIGJveFkgLSAxMDA7IC8vIERlamFyIGVzcGFjaW8gcGFyYSBmb290ZXJcbiAgICBcbiAgICBsZXQgZmluYWxCb3hZID0gYm94WTtcbiAgICBpZiAoYm94SGVpZ2h0ID4gcmVtYWluaW5nU3BhY2UpIHtcbiAgICAgIC8vIEHDsWFkaXIgbnVldmEgcMOhZ2luYVxuICAgICAgZG9jLmFkZFBhZ2UoKTtcbiAgICAgIGZpbmFsQm94WSA9IG1hcmdpbiArIDQwOyAvLyBQb3NpY2nDs24gZW4gbnVldmEgcMOhZ2luYVxuICAgIH1cblxuICAgIC8vIERpYnVqYXIgY29udGVuZWRvciBjb24gYWx0dXJhIGRpbsOhbWljYVxuICAgIC8vIEZvbmRvIGdyaXMgY2xhcm9cbiAgICBkb2Muc2V0RmlsbENvbG9yKDI1MCwgMjUwLCAyNTApO1xuICAgIGRvYy5yZWN0KG1hcmdpbiwgZmluYWxCb3hZLCBib3hXaWR0aCwgYm94SGVpZ2h0LCAnRicpO1xuICAgIFxuICAgIC8vIEJvcmRlXG4gICAgZG9jLnNldERyYXdDb2xvcigyMDAsIDIwMCwgMjAwKTtcbiAgICBkb2MucmVjdChtYXJnaW4sIGZpbmFsQm94WSwgYm94V2lkdGgsIGJveEhlaWdodCwgJ1MnKTtcblxuICAgIC8vIEHDsWFkaXIgY29udGVuaWRvIGRlIHRleHRvXG4gICAgbGV0IHRleHRZID0gZmluYWxCb3hZICsgMjA7XG5cbiAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAmJiBkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSkge1xuICAgICAgY29uc3QgZGVzY0xpbmVzID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSwgbWF4V2lkdGgpO1xuICAgICAgXG4gICAgICAvLyBTaSBoYXkgbXVjaGFzIGzDrW5lYXMsIHZlcmlmaWNhciBxdWUgcXVlcGFuIGVuIGxhIHDDoWdpbmEgYWN0dWFsXG4gICAgICBjb25zdCByZXF1aXJlZEhlaWdodCA9IGRlc2NMaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0ICsgNDA7XG4gICAgICBpZiAodGV4dFkgKyByZXF1aXJlZEhlaWdodCA+IHBhZ2VIZWlnaHQgLSA2MCkge1xuICAgICAgICAvLyBFbCBjb250ZW5pZG8gZXMgbXV5IGxhcmdvLCBkaXZpZGlyIHNpIGVzIG5lY2VzYXJpb1xuICAgICAgICBjb25zdCBtYXhMaW5lc1BlclBhZ2UgPSBNYXRoLmZsb29yKChwYWdlSGVpZ2h0IC0gdGV4dFkgLSA2MCkgLyBsaW5lSGVpZ2h0KTtcbiAgICAgICAgXG4gICAgICAgIGlmIChkZXNjTGluZXMubGVuZ3RoID4gbWF4TGluZXNQZXJQYWdlICYmIG1heExpbmVzUGVyUGFnZSA+IDApIHtcbiAgICAgICAgICAvLyBNb3N0cmFyIGzDrW5lYXMgcXVlIGNhYmVuIGVuIGxhIHDDoWdpbmEgYWN0dWFsXG4gICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VMaW5lcyA9IGRlc2NMaW5lcy5zbGljZSgwLCBtYXhMaW5lc1BlclBhZ2UpO1xuICAgICAgICAgIGRvYy50ZXh0KGN1cnJlbnRQYWdlTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDb250aW51YXIgZW4gbnVldmEgcMOhZ2luYSBzaSBoYXkgbcOhcyBjb250ZW5pZG9cbiAgICAgICAgICBpZiAoZGVzY0xpbmVzLmxlbmd0aCA+IG1heExpbmVzUGVyUGFnZSkge1xuICAgICAgICAgICAgZG9jLmFkZFBhZ2UoKTtcbiAgICAgICAgICAgIHRleHRZID0gbWFyZ2luICsgMjA7XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdMaW5lcyA9IGRlc2NMaW5lcy5zbGljZShtYXhMaW5lc1BlclBhZ2UpO1xuICAgICAgICAgICAgZG9jLnRleHQocmVtYWluaW5nTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0WSArIChyZW1haW5pbmdMaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0KSArIDIwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2MudGV4dChkZXNjTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLnRleHQoZGVzY0xpbmVzLCB0ZXh0TWFyZ2luLCB0ZXh0WSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRleHRZICs9IGRlc2NMaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0O1xuICAgIH1cblxuICAgIC8vIFNpIG5vIGhheSBkZXNjcmlwY2nDs24sIG1vc3RyYXIgdW4gbWVuc2FqZVxuICAgIGlmICghZGF0YS5kZXNjcmlwdGlvbiB8fCAhZGF0YS5kZXNjcmlwdGlvbi50cmltKCkpIHtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnaXRhbGljJyk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xuICAgICAgZG9jLnNldFRleHRDb2xvcigxNTAsIDE1MCwgMTUwKTtcbiAgICAgIGRvYy50ZXh0KCdObyBzZSBoYW4gZXNwZWNpZmljYWRvIGRldGFsbGVzIGRlbCBzZXJ2aWNpby4nLCB0ZXh0TWFyZ2luLCB0ZXh0WSk7XG4gICAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsQm94WSArIGJveEhlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIGF1eGlsaWFyIHBhcmEgbWFuZWphciB0ZXh0byBsYXJnbyBxdWUgcHVlZGUgbmVjZXNpdGFyIG3Dumx0aXBsZXMgcMOhZ2luYXNcbiAgICovXG4gIHByaXZhdGUgYWRkTG9uZ1RleHQoZG9jOiBqc1BERiwgdGV4dDogc3RyaW5nLCB4OiBudW1iZXIsIHk6IG51bWJlciwgbWF4V2lkdGg6IG51bWJlciwgZm9udFNpemU6IG51bWJlciA9IDExKTogbnVtYmVyIHtcbiAgICBpZiAoIXRleHQgfHwgIXRleHQudHJpbSgpKSByZXR1cm4geTtcblxuICAgIGRvYy5zZXRGb250U2l6ZShmb250U2l6ZSk7XG4gICAgY29uc3QgbGluZXMgPSBkb2Muc3BsaXRUZXh0VG9TaXplKHRleHQudHJpbSgpLCBtYXhXaWR0aCk7XG4gICAgY29uc3QgbGluZUhlaWdodCA9IGZvbnRTaXplICsgMztcbiAgICBjb25zdCBwYWdlSGVpZ2h0ID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpO1xuICAgIGNvbnN0IG1hcmdpbiA9IDQwO1xuXG4gICAgbGV0IGN1cnJlbnRZID0geTtcbiAgICBsZXQgbGluZUluZGV4ID0gMDtcblxuICAgIHdoaWxlIChsaW5lSW5kZXggPCBsaW5lcy5sZW5ndGgpIHtcbiAgICAgIC8vIFZlcmlmaWNhciBzaSBuZWNlc2l0YW1vcyB1bmEgbnVldmEgcMOhZ2luYVxuICAgICAgaWYgKGN1cnJlbnRZICsgbGluZUhlaWdodCA+IHBhZ2VIZWlnaHQgLSBtYXJnaW4pIHtcbiAgICAgICAgZG9jLmFkZFBhZ2UoKTtcbiAgICAgICAgY3VycmVudFkgPSBtYXJnaW47XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGN1bGFyIGN1w6FudGFzIGzDrW5lYXMgY2FiZW4gZW4gbGEgcMOhZ2luYSBhY3R1YWxcbiAgICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlID0gcGFnZUhlaWdodCAtIGN1cnJlbnRZIC0gbWFyZ2luO1xuICAgICAgY29uc3QgbWF4TGluZXNJblBhZ2UgPSBNYXRoLmZsb29yKHJlbWFpbmluZ1NwYWNlIC8gbGluZUhlaWdodCk7XG4gICAgICBcbiAgICAgIGlmIChtYXhMaW5lc0luUGFnZSA+IDApIHtcbiAgICAgICAgY29uc3QgbGluZXNUb1Nob3cgPSBNYXRoLm1pbihtYXhMaW5lc0luUGFnZSwgbGluZXMubGVuZ3RoIC0gbGluZUluZGV4KTtcbiAgICAgICAgY29uc3QgcGFnZUxpbmVzID0gbGluZXMuc2xpY2UobGluZUluZGV4LCBsaW5lSW5kZXggKyBsaW5lc1RvU2hvdyk7XG4gICAgICAgIFxuICAgICAgICBkb2MudGV4dChwYWdlTGluZXMsIHgsIGN1cnJlbnRZKTtcbiAgICAgICAgY3VycmVudFkgKz0gcGFnZUxpbmVzLmxlbmd0aCAqIGxpbmVIZWlnaHQ7XG4gICAgICAgIGxpbmVJbmRleCArPSBsaW5lc1RvU2hvdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNpIG5vIGNhYmUgbmkgdW5hIGzDrW5lYSwgaXIgYSBudWV2YSBww6FnaW5hXG4gICAgICAgIGRvYy5hZGRQYWdlKCk7XG4gICAgICAgIGN1cnJlbnRZID0gbWFyZ2luO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50WTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXV0aG9yaXphdGlvbihkb2M6IGpzUERGLCBkYXRhOiBXb3JrT3JkZXJEYXRhLCB5OiBudW1iZXIsIG1hcmdpbjogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdGFibGVEYXRhID0gW1xuICAgICAgW1xuICAgICAgICB7IGNvbnRlbnQ6ICdBVVRPUklaQURBIFBPUjonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZvbnRTaXplOiAxMiwgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuYXBwcm92ZWRfYnkgfHwgJycsIHN0eWxlczogeyBmb250U2l6ZTogMTIgfSB9XG4gICAgICBdXG4gICAgXTtcblxuICAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xuICAgICAgc3RhcnRZOiB5LFxuICAgICAgYm9keTogdGFibGVEYXRhLFxuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBjZWxsUGFkZGluZzogMTIsXG4gICAgICAgIGxpbmVDb2xvcjogWzIwMCwgMjAwLCAyMDBdLFxuICAgICAgICBsaW5lV2lkdGg6IDAuNVxuICAgICAgfSxcbiAgICAgIGNvbHVtblN0eWxlczoge1xuICAgICAgICAwOiB7IGNlbGxXaWR0aDogMTUwIH0sXG4gICAgICAgIDE6IHsgY2VsbFdpZHRoOiAzMjAgfVxuICAgICAgfSxcbiAgICAgIG1hcmdpbjogeyBsZWZ0OiBtYXJnaW4sIHJpZ2h0OiBtYXJnaW4gfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIChkb2MgYXMgYW55KS5sYXN0QXV0b1RhYmxlLmZpbmFsWTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRm9vdGVyKGRvYzoganNQREYsIGRhdGE6IFdvcmtPcmRlckRhdGEsIHk6IG51bWJlciwgcGFnZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIC8vIEZvbmRvIGRlbCBwaWUgZGUgcMOhZ2luYVxuICAgIGRvYy5zZXRGaWxsQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnJlY3QoNDAsIHksIHBhZ2VXaWR0aCAtIDgwLCA2MCwgJ0YnKTtcblxuICAgIC8vIFRleHRvIGVuIGJsYW5jb1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoMjU1LCAyNTUsIDI1NSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDEyKTtcbiAgICBcbiAgICBjb25zdCBpbnN0cnVjdGlvbiA9ICdGYXZvciBhZGp1bnRhciBsYSBvcmRlbiBhIGxhIGZhY3R1cmEgbyBjdWVudGEgZGUgY29icm8nO1xuICAgIGNvbnN0IGluc3RXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoaW5zdHJ1Y3Rpb24pO1xuICAgIGRvYy50ZXh0KGluc3RydWN0aW9uLCAocGFnZVdpZHRoIC0gaW5zdFdpZHRoKSAvIDIsIHkgKyAyNSk7XG5cbiAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xuICAgIGNvbnN0IGVtYWlsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGRhdGEubWFpbCB8fCAnJyk7XG4gICAgZG9jLnRleHQoZGF0YS5tYWlsIHx8ICcnLCAocGFnZVdpZHRoIC0gZW1haWxXaWR0aCkgLyAyLCB5ICsgNDUpO1xuXG4gICAgLy8gUmVzZXRlYXIgY29sb3JcbiAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYSBQREYgb3B0aW1pemFkbyBwYXJhIGltcHJlc2nDs25cbiAgICovXG4gIGdlbmVyYXRlRm9yUHJpbnQoZGF0YTogV29ya09yZGVyRGF0YSk6IFByb21pc2U8anNQREY+IHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVdvcmtPcmRlclBERihkYXRhLCB7XG4gICAgICBmb3JtYXQ6ICdsZXR0ZXInLFxuICAgICAgZG93bmxvYWQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIFBERiB5IGxvIGRldnVlbHZlIGNvbW8gQmxvYiBwYXJhIGVudsOtbyBwb3IgZW1haWxcbiAgICovXG4gIGdlbmVyYXRlQXNCbG9iKGRhdGE6IFdvcmtPcmRlckRhdGEpOiBQcm9taXNlPEJsb2I+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5nZW5lcmF0ZVdvcmtPcmRlclBERihkYXRhLCB7IGRvd25sb2FkOiBmYWxzZSB9KVxuICAgICAgICAudGhlbihkb2MgPT4ge1xuICAgICAgICAgIGNvbnN0IHBkZkJsb2IgPSBkb2Mub3V0cHV0KCdibG9iJyk7XG4gICAgICAgICAgcmVzb2x2ZShwZGZCbG9iKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIFBERiB5IGxvIGRldnVlbHZlIGNvbW8gYmFzZTY0XG4gICAqL1xuICBnZW5lcmF0ZUFzQmFzZTY0KGRhdGE6IFdvcmtPcmRlckRhdGEpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdlbmVyYXRlV29ya09yZGVyUERGKGRhdGEsIHsgZG93bmxvYWQ6IGZhbHNlIH0pXG4gICAgICAgIC50aGVuKGRvYyA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZTY0ID0gZG9jLm91dHB1dCgnZGF0YXVyaXN0cmluZycpO1xuICAgICAgICAgIHJlc29sdmUoYmFzZTY0KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1vcmRlci1wZGYuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zZXJ2aWNlcy93b3JrLW9yZGVyLXBkZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLGlCQUFpQixDQUFDOztBQUd6QixtQ0FBbUM7QUFDbkMsbUJBQW1CO0FBQ25CLGtCQUFrQjtBQUNsQixzQkFBc0I7QUFDdEIsd0JBQXdCO0FBQ3hCLG1CQUFtQjtBQUNuQixvQkFBb0I7QUFDcEIsbUJBQW1CO0FBQ25CLG1CQUFtQjtBQUNuQiwwQkFBMEI7QUFDMUIsb0JBQW9CO0FBQ3BCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLDJCQUEyQjtBQUMzQiw4QkFBOEI7QUFDOUIsbUJBQW1CO0FBQ25CLHVCQUF1QjtBQUN2QiwrQkFBK0I7QUFDL0IsSUFBSTtBQUtKLE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsZ0JBQWdCLENBQUM7SUFFakIsb0JBQW9CLENBQUMsSUFBbUIsRUFBRSxPQUl6QztRQUNDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSTtnQkFDRixNQUFNLElBQUksR0FBRztvQkFDWCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsR0FBRyxPQUFPO2lCQUNYLENBQUM7Z0JBRUYsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FB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Q25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsganNQREYgfSBmcm9tICdqc3BkZic7XG5pbXBvcnQgJ2pzcGRmLWF1dG90YWJsZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBkZk90IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQvdGVtcGxhdGUtcGRmLW90JztcblxuLy8gZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZVBkZk90IHtcbi8vICAgbmFtZT86IHN0cmluZztcbi8vICAgbml0Pzogc3RyaW5nO1xuLy8gICBhZGRyZXNzPzogc3RyaW5nO1xuLy8gICB0ZWxlcGhvbmU/OiBzdHJpbmc7XG4vLyAgIG1haWw/OiBzdHJpbmc7XG4vLyAgIGltYWdlPzogc3RyaW5nO1xuLy8gICBjb2RlPzogc3RyaW5nO1xuLy8gICBkYXRlPzogc3RyaW5nO1xuLy8gICByZXNwb25zaWJsZT86IHN0cmluZztcbi8vICAgdGhpcmQ/OiBzdHJpbmc7XG4vLyAgIGFwcHJvdmVkX2J5Pzogc3RyaW5nO1xuLy8gICBkZXNjcmlwdGlvbj86IHN0cmluZztcbi8vICAgY29uc2VjdXRpdmU/OiBzdHJpbmc7XG4vLyAgIG5hbWVQcm92aWRlcj86IHN0cmluZztcbi8vICAgYWRkcmVzc1Byb3ZpZGVyPzogc3RyaW5nO1xuLy8gICBhcmVhPzogc3RyaW5nO1xuLy8gICBvZG9tZXRlcj86IHN0cmluZztcbi8vICAgaW52b2ljZVJlZmVyZW5jZT86IHN0cmluZztcbi8vIH1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV29ya09yZGVyUGRmU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBnZW5lcmF0ZVdvcmtPcmRlclBERihkYXRhOiBUZW1wbGF0ZVBkZk90LCBvcHRpb25zPzoge1xuICAgIGZvcm1hdD86ICdsZXR0ZXInIHwgJ2E0JztcbiAgICBkb3dubG9hZD86IGJvb2xlYW47XG4gICAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGpzUERGPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgZm9ybWF0OiAnbGV0dGVyJyxcbiAgICAgICAgICBkb3dubG9hZDogdHJ1ZSxcbiAgICAgICAgICBmaWxlbmFtZTogJ29yZGVuX3RyYWJham8ucGRmJyxcbiAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZG9jID0gbmV3IGpzUERGKCdwJywgJ3B0Jywgb3B0cy5mb3JtYXQpO1xuICAgICAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0V2lkdGgoKTtcbiAgICAgICAgY29uc3QgcGFnZUhlaWdodCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKTtcbiAgICAgICAgY29uc3QgbWFyZ2luID0gNDA7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IG1hcmdpbjtcblxuICAgICAgICAvLyBDb2xvcmVzIGNvcnBvcmF0aXZvc1xuICAgICAgICBjb25zdCBwcmltYXJ5Q29sb3IgPSBbNTIsIDE1MiwgMjE5XTsgLy8gQXp1bCBwYXJhIMOzcmRlbmVzIGRlIHRyYWJham9cbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5Q29sb3IgPSBbNDQsIDYyLCA4MF07IC8vIEdyaXMgb3NjdXJvXG4gICAgICAgIGNvbnN0IGFjY2VudENvbG9yID0gWzE1NSwgODksIDE4Ml07IC8vIE1vcmFkb1xuXG4gICAgICAgIC8vID09PSBFTkNBQkVaQURPIFBSSU5DSVBBTCA9PT1cbiAgICAgICAgdGhpcy5hZGRIZWFkZXIoZG9jLCBkYXRhLCBtYXJnaW4sIGN1cnJlbnRZLCBwYWdlV2lkdGgsIHByaW1hcnlDb2xvcik7XG4gICAgICAgIGN1cnJlbnRZID0gMTQwO1xuXG4gICAgICAgIC8vID09PSBUw41UVUxPIERFTCBET0NVTUVOVE8gPT09XG4gICAgICAgIGN1cnJlbnRZID0gdGhpcy5hZGREb2N1bWVudFRpdGxlKGRvYywgZGF0YSwgY3VycmVudFksIHBhZ2VXaWR0aCwgYWNjZW50Q29sb3IpO1xuICAgICAgICBjdXJyZW50WSArPSAyNTtcblxuICAgICAgICAvLyA9PT0gSU5GT1JNQUNJw5NOIFBSSU5DSVBBTCA9PT1cbiAgICAgICAgY3VycmVudFkgPSB0aGlzLmFkZE1haW5JbmZvKGRvYywgZGF0YSwgY3VycmVudFksIG1hcmdpbiwgcGFnZVdpZHRoKTtcbiAgICAgICAgY3VycmVudFkgKz0gMjA7XG5cbiAgICAgICAgLy8gPT09IERBVE9TIERFTCBQUk9WRUVET1IgPT09XG4gICAgICAgIGN1cnJlbnRZID0gdGhpcy5hZGRQcm92aWRlckluZm8oZG9jLCBkYXRhLCBjdXJyZW50WSwgbWFyZ2luLCBwYWdlV2lkdGgsIHNlY29uZGFyeUNvbG9yKTtcbiAgICAgICAgY3VycmVudFkgKz0gMjA7XG5cbiAgICAgICAgLy8gPT09IERFVEFMTEVTIERFTCBTRVJWSUNJTyA9PT1cbiAgICAgICAgY3VycmVudFkgPSB0aGlzLmFkZFNlcnZpY2VEZXRhaWxzKGRvYywgZGF0YSwgY3VycmVudFksIG1hcmdpbiwgcGFnZVdpZHRoLCBzZWNvbmRhcnlDb2xvcik7XG4gICAgICAgIGN1cnJlbnRZICs9IDIwO1xuXG4gICAgICAgIC8vID09PSBBVVRPUklaQUNJw5NOID09PVxuICAgICAgICBjdXJyZW50WSA9IHRoaXMuYWRkQXV0aG9yaXphdGlvbihkb2MsIGRhdGEsIGN1cnJlbnRZLCBtYXJnaW4sIHBhZ2VXaWR0aCk7XG4gICAgICAgIGN1cnJlbnRZICs9IDMwO1xuXG4gICAgICAgIC8vID09PSBQSUUgREUgUMOBR0lOQSA9PT1cbiAgICAgICAgdGhpcy5hZGRGb290ZXIoZG9jLCBkYXRhLCBwYWdlSGVpZ2h0IC0gODAsIHBhZ2VXaWR0aCwgcHJpbWFyeUNvbG9yKTtcblxuICAgICAgICAvLyA9PT0gR0VORVJBUi9ERVNDQVJHQVIgPT09XG4gICAgICAgIGlmIChvcHRzLmRvd25sb2FkKSB7XG4gICAgICAgICAgZG9jLm91dHB1dCgnZGF0YXVybG5ld3dpbmRvdycsIHsgZmlsZW5hbWU6IG9wdHMuZmlsZW5hbWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKGRvYyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgICAvKipcbiAgICogR2VuZXJhIFBERiBvcHRpbWl6YWRvIHBhcmEgaW1wcmVzacOzblxuICAgKi9cbiAgZ2VuZXJhdGVGb3JQcmludChkYXRhOiBUZW1wbGF0ZVBkZk90KTogUHJvbWlzZTxqc1BERj4ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlV29ya09yZGVyUERGKGRhdGEsIHtcbiAgICAgIGZvcm1hdDogJ2xldHRlcicsXG4gICAgICBkb3dubG9hZDogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmEgUERGIHkgbG8gZGV2dWVsdmUgY29tbyBCbG9iIHBhcmEgZW52w61vIHBvciBlbWFpbFxuICAgKi9cbiAgZ2VuZXJhdGVBc0Jsb2IoZGF0YTogVGVtcGxhdGVQZGZPdCk6IFByb21pc2U8QmxvYj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdlbmVyYXRlV29ya09yZGVyUERGKGRhdGEsIHsgZG93bmxvYWQ6IGZhbHNlIH0pXG4gICAgICAgIC50aGVuKGRvYyA9PiB7XG4gICAgICAgICAgY29uc3QgcGRmQmxvYiA9IGRvYy5vdXRwdXQoJ2Jsb2InKTtcbiAgICAgICAgICByZXNvbHZlKHBkZkJsb2IpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmEgUERGIHkgbG8gZGV2dWVsdmUgY29tbyBiYXNlNjRcbiAgICovXG4gIGdlbmVyYXRlQXNCYXNlNjQoZGF0YTogVGVtcGxhdGVQZGZPdCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVXb3JrT3JkZXJQREYoZGF0YSwgeyBkb3dubG9hZDogZmFsc2UgfSlcbiAgICAgICAgLnRoZW4oZG9jID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlNjQgPSBkb2Mub3V0cHV0KCdkYXRhdXJpc3RyaW5nJyk7XG4gICAgICAgICAgcmVzb2x2ZShiYXNlNjQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkSGVhZGVyKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmT3QsIG1hcmdpbjogbnVtYmVyLCB5OiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAvLyBGb25kbyBkZWwgZW5jYWJlemFkb1xuICAgIGRvYy5zZXRGaWxsQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnJlY3QobWFyZ2luLCB5LCBwYWdlV2lkdGggLSAobWFyZ2luICogMiksIDgwLCAnRicpO1xuXG4gICAgLy8gVGV4dG8gZGVsIGVuY2FiZXphZG8gZW4gYmxhbmNvXG4gICAgZG9jLnNldFRleHRDb2xvcigyNTUsIDI1NSwgMjU1KTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTgpO1xuICAgIFxuICAgIGNvbnN0IGNvbXBhbnlOYW1lID0gKGRhdGEubmFtZSB8fCAnJykudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBuYW1lV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGNvbXBhbnlOYW1lKTtcbiAgICBkb2MudGV4dChjb21wYW55TmFtZSwgKHBhZ2VXaWR0aCAtIG5hbWVXaWR0aCkgLyAyLCB5ICsgMjUpO1xuXG4gICAgZG9jLnNldEZvbnRTaXplKDEyKTtcbiAgICBjb25zdCBuaXRUZXh0ID0gYE5JVDogJHtkYXRhLm5pdCB8fCAnJ31gO1xuICAgIGNvbnN0IG5pdFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChuaXRUZXh0KTtcbiAgICBkb2MudGV4dChuaXRUZXh0LCAocGFnZVdpZHRoIC0gbml0V2lkdGgpIC8gMiwgeSArIDQ1KTtcblxuICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XG4gICAgY29uc3QgYWRkcmVzc1RleHQgPSBgJHtkYXRhLmFkZHJlc3MgfHwgJyd9IC0gVEVMOiAke2RhdGEudGVsZXBob25lIHx8ICcnfWA7XG4gICAgY29uc3QgYWRkcmVzc1dpZHRoID0gZG9jLmdldFRleHRXaWR0aChhZGRyZXNzVGV4dCk7XG4gICAgZG9jLnRleHQoYWRkcmVzc1RleHQsIChwYWdlV2lkdGggLSBhZGRyZXNzV2lkdGgpIC8gMiwgeSArIDY1KTtcblxuICAgIC8vIFJlc2V0ZWFyIGNvbG9yIGRlIHRleHRvXG4gICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRG9jdW1lbnRUaXRsZShkb2M6IGpzUERGLCBkYXRhOiBUZW1wbGF0ZVBkZk90LCB5OiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDIwKTtcbiAgICBcbiAgICBjb25zdCB0aXRsZSA9ICdPUkRFTiBERSBUUkFCQUpPJztcbiAgICBjb25zdCB0aXRsZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0aXRsZSk7XG4gICAgZG9jLnRleHQodGl0bGUsIChwYWdlV2lkdGggLSB0aXRsZVdpZHRoKSAvIDIsIHkpO1xuXG4gICAgZG9jLnNldEZvbnRTaXplKDE2KTtcbiAgICBjb25zdCBudW1iZXJUZXh0ID0gYE7CsCAke2RhdGEuY29uc2VjdXRpdmUgfHwgJyd9YDtcbiAgICBjb25zdCBudW1iZXJXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobnVtYmVyVGV4dCk7XG4gICAgZG9jLnRleHQobnVtYmVyVGV4dCwgKHBhZ2VXaWR0aCAtIG51bWJlcldpZHRoKSAvIDIsIHkgKyAyNSk7XG5cbiAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuICAgIHJldHVybiB5ICsgNDA7XG4gIH1cblxuICBwcml2YXRlIGFkZE1haW5JbmZvKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmT3QsIHk6IG51bWJlciwgbWFyZ2luOiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0YWJsZURhdGEgPSBbXG4gICAgICBbXG4gICAgICAgIHsgY29udGVudDogJ8OBcmVhOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuYXJlYSB8fCAnJywgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdDw7NkaWdvOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuY29kZSB8fCAnJywgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdGZWNoYTonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLmRhdGUgfHwgJycsIHN0eWxlczoge30gfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb250ZW50OiAnT3BlcmFyaW86Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5yZXNwb25zaWJsZSB8fCAnJywgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdPZMOzbWV0cm86Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5vZG9tZXRlciB8fCAnJywgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdSZWYuIEZhY3R1cmE6Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5pbnZvaWNlUmVmZXJlbmNlIHx8ICctJywgc3R5bGVzOiB7fSB9XG4gICAgICBdXG4gICAgXTtcblxuICAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xuICAgICAgc3RhcnRZOiB5LFxuICAgICAgYm9keTogdGFibGVEYXRhLFxuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250U2l6ZTogMTEsXG4gICAgICAgIGNlbGxQYWRkaW5nOiA4LFxuICAgICAgICBsaW5lQ29sb3I6IFsyMDAsIDIwMCwgMjAwXSxcbiAgICAgICAgbGluZVdpZHRoOiAwLjVcbiAgICAgIH0sXG4gICAgICBjb2x1bW5TdHlsZXM6IHtcbiAgICAgICAgMDogeyBjZWxsV2lkdGg6IDcwIH0sXG4gICAgICAgIDE6IHsgY2VsbFdpZHRoOiAxMDAgfSxcbiAgICAgICAgMjogeyBjZWxsV2lkdGg6IDcwIH0sXG4gICAgICAgIDM6IHsgY2VsbFdpZHRoOiA4MCB9LFxuICAgICAgICA0OiB7IGNlbGxXaWR0aDogNzAgfSxcbiAgICAgICAgNTogeyBjZWxsV2lkdGg6IDgwIH1cbiAgICAgIH0sXG4gICAgICBtYXJnaW46IHsgbGVmdDogbWFyZ2luLCByaWdodDogbWFyZ2luIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFk7XG4gIH1cblxuICBwcml2YXRlIGFkZFByb3ZpZGVySW5mbyhkb2M6IGpzUERGLCBkYXRhOiBUZW1wbGF0ZVBkZk90LCB5OiBudW1iZXIsIG1hcmdpbjogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlciwgY29sb3I6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICAvLyBUw610dWxvIGRlIHNlY2Npw7NuXG4gICAgZG9jLnNldFRleHRDb2xvcihjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdKTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTQpO1xuICAgIGNvbnN0IHRpdGxlID0gJ0RBVE9TIERFTCBQUk9WRUVET1InO1xuICAgIGNvbnN0IHRpdGxlV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcbiAgICBkb2MudGV4dCh0aXRsZSwgKHBhZ2VXaWR0aCAtIHRpdGxlV2lkdGgpIC8gMiwgeSk7XG4gICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcblxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IFtcbiAgICAgIFtcbiAgICAgICAgeyBjb250ZW50OiAnTm9tYnJlOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEubmFtZVByb3ZpZGVyIHx8ICcnLCBzdHlsZXM6IHt9IH0sXG4gICAgICAgIHsgY29udGVudDogJ0RpcmVjY2nDs246Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5hZGRyZXNzUHJvdmlkZXIgfHwgJycsIHN0eWxlczoge30gfVxuICAgICAgXVxuICAgIF07XG5cbiAgICAoZG9jIGFzIGFueSkuYXV0b1RhYmxlKHtcbiAgICAgIHN0YXJ0WTogeSArIDIwLFxuICAgICAgYm9keTogdGFibGVEYXRhLFxuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250U2l6ZTogMTEsXG4gICAgICAgIGNlbGxQYWRkaW5nOiA4LFxuICAgICAgICBsaW5lQ29sb3I6IFsyMDAsIDIwMCwgMjAwXSxcbiAgICAgICAgbGluZVdpZHRoOiAwLjVcbiAgICAgIH0sXG4gICAgICBjb2x1bW5TdHlsZXM6IHtcbiAgICAgICAgMDogeyBjZWxsV2lkdGg6IDgwIH0sXG4gICAgICAgIDE6IHsgY2VsbFdpZHRoOiAxNjAgfSxcbiAgICAgICAgMjogeyBjZWxsV2lkdGg6IDgwIH0sXG4gICAgICAgIDM6IHsgY2VsbFdpZHRoOiAxNTAgfVxuICAgICAgfSxcbiAgICAgIG1hcmdpbjogeyBsZWZ0OiBtYXJnaW4sIHJpZ2h0OiBtYXJnaW4gfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIChkb2MgYXMgYW55KS5sYXN0QXV0b1RhYmxlLmZpbmFsWTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU2VydmljZURldGFpbHMoZG9jOiBqc1BERiwgZGF0YTogVGVtcGxhdGVQZGZPdCwgeTogbnVtYmVyLCBtYXJnaW46IG51bWJlciwgcGFnZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgLy8gVMOtdHVsbyBkZSBzZWNjacOzblxuICAgIGRvYy5zZXRUZXh0Q29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDE0KTtcbiAgICBjb25zdCB0aXRsZSA9ICdERVRBTExFUyBERUwgU0VSVklDSU8nO1xuICAgIGNvbnN0IHRpdGxlV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcbiAgICBkb2MudGV4dCh0aXRsZSwgKHBhZ2VXaWR0aCAtIHRpdGxlV2lkdGgpIC8gMiwgeSk7XG4gICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcblxuICAgIC8vIFByZXBhcmFyIHRleHRvIHBhcmEgY2FsY3VsYXIgYWx0dXJhIG5lY2VzYXJpYVxuICAgIGNvbnN0IGJveFkgPSB5ICsgMjA7XG4gICAgY29uc3QgYm94V2lkdGggPSBwYWdlV2lkdGggLSAobWFyZ2luICogMik7XG4gICAgY29uc3QgdGV4dE1hcmdpbiA9IG1hcmdpbiArIDE1O1xuICAgIGNvbnN0IG1heFdpZHRoID0gYm94V2lkdGggLSAzMDtcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gMTU7XG4gICAgY29uc3QgbWluQm94SGVpZ2h0ID0gNjA7IC8vIEFsdHVyYSBtw61uaW1hIGRlbCBjb250ZW5lZG9yXG4gICAgY29uc3QgcGFkZGluZyA9IDQwOyAvLyBQYWRkaW5nIHN1cGVyaW9yIGUgaW5mZXJpb3IgKDIwIGFycmliYSArIDIwIGFiYWpvKVxuXG4gICAgLy8gQ2FsY3VsYXIgbMOtbmVhcyBkZSB0ZXh0byBuZWNlc2FyaWFzXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTEpO1xuICAgIFxuICAgIGxldCB0b3RhbExpbmVzID0gMDtcbiAgICBsZXQgY3VycmVudFRleHRZID0gMjA7IC8vIFBvc2ljacOzbiByZWxhdGl2YSBkZW50cm8gZGVsIGJveFxuXG4gICAgaWYgKGRhdGEuZGVzY3JpcHRpb24gJiYgZGF0YS5kZXNjcmlwdGlvbi50cmltKCkpIHtcbiAgICAgIGNvbnN0IGRlc2NMaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUoZGF0YS5kZXNjcmlwdGlvbi50cmltKCksIG1heFdpZHRoKTtcbiAgICAgIHRvdGFsTGluZXMgKz0gZGVzY0xpbmVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhciBhbHR1cmEgbmVjZXNhcmlhIGJhc2FkYSBlbiBlbCBjb250ZW5pZG9cbiAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gTWF0aC5tYXgodG90YWxMaW5lcyAqIGxpbmVIZWlnaHQsIDMwKTsgLy8gTcOtbmltbyAzMHB0IHBhcmEgY29udGVuaWRvXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gTWF0aC5tYXgobWluQm94SGVpZ2h0LCBjb250ZW50SGVpZ2h0ICsgcGFkZGluZyk7XG5cbiAgICAvLyBWZXJpZmljYXIgc2kgbmVjZXNpdGFtb3MgdW5hIG51ZXZhIHDDoWdpbmFcbiAgICBjb25zdCBwYWdlSGVpZ2h0ID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlID0gcGFnZUhlaWdodCAtIGJveFkgLSAxMDA7IC8vIERlamFyIGVzcGFjaW8gcGFyYSBmb290ZXJcbiAgICBcbiAgICBsZXQgZmluYWxCb3hZID0gYm94WTtcbiAgICBpZiAoYm94SGVpZ2h0ID4gcmVtYWluaW5nU3BhY2UpIHtcbiAgICAgIC8vIEHDsWFkaXIgbnVldmEgcMOhZ2luYVxuICAgICAgZG9jLmFkZFBhZ2UoKTtcbiAgICAgIGZpbmFsQm94WSA9IG1hcmdpbiArIDQwOyAvLyBQb3NpY2nDs24gZW4gbnVldmEgcMOhZ2luYVxuICAgIH1cblxuICAgIC8vIERpYnVqYXIgY29udGVuZWRvciBjb24gYWx0dXJhIGRpbsOhbWljYVxuICAgIC8vIEZvbmRvIGdyaXMgY2xhcm9cbiAgICBkb2Muc2V0RmlsbENvbG9yKDI1MCwgMjUwLCAyNTApO1xuICAgIGRvYy5yZWN0KG1hcmdpbiwgZmluYWxCb3hZLCBib3hXaWR0aCwgYm94SGVpZ2h0LCAnRicpO1xuICAgIFxuICAgIC8vIEJvcmRlXG4gICAgZG9jLnNldERyYXdDb2xvcigyMDAsIDIwMCwgMjAwKTtcbiAgICBkb2MucmVjdChtYXJnaW4sIGZpbmFsQm94WSwgYm94V2lkdGgsIGJveEhlaWdodCwgJ1MnKTtcblxuICAgIC8vIEHDsWFkaXIgY29udGVuaWRvIGRlIHRleHRvXG4gICAgbGV0IHRleHRZID0gZmluYWxCb3hZICsgMjA7XG5cbiAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAmJiBkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSkge1xuICAgICAgY29uc3QgZGVzY0xpbmVzID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSwgbWF4V2lkdGgpO1xuICAgICAgXG4gICAgICAvLyBTaSBoYXkgbXVjaGFzIGzDrW5lYXMsIHZlcmlmaWNhciBxdWUgcXVlcGFuIGVuIGxhIHDDoWdpbmEgYWN0dWFsXG4gICAgICBjb25zdCByZXF1aXJlZEhlaWdodCA9IGRlc2NMaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0ICsgNDA7XG4gICAgICBpZiAodGV4dFkgKyByZXF1aXJlZEhlaWdodCA+IHBhZ2VIZWlnaHQgLSA2MCkge1xuICAgICAgICAvLyBFbCBjb250ZW5pZG8gZXMgbXV5IGxhcmdvLCBkaXZpZGlyIHNpIGVzIG5lY2VzYXJpb1xuICAgICAgICBjb25zdCBtYXhMaW5lc1BlclBhZ2UgPSBNYXRoLmZsb29yKChwYWdlSGVpZ2h0IC0gdGV4dFkgLSA2MCkgLyBsaW5lSGVpZ2h0KTtcbiAgICAgICAgXG4gICAgICAgIGlmIChkZXNjTGluZXMubGVuZ3RoID4gbWF4TGluZXNQZXJQYWdlICYmIG1heExpbmVzUGVyUGFnZSA+IDApIHtcbiAgICAgICAgICAvLyBNb3N0cmFyIGzDrW5lYXMgcXVlIGNhYmVuIGVuIGxhIHDDoWdpbmEgYWN0dWFsXG4gICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VMaW5lcyA9IGRlc2NMaW5lcy5zbGljZSgwLCBtYXhMaW5lc1BlclBhZ2UpO1xuICAgICAgICAgIGRvYy50ZXh0KGN1cnJlbnRQYWdlTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDb250aW51YXIgZW4gbnVldmEgcMOhZ2luYSBzaSBoYXkgbcOhcyBjb250ZW5pZG9cbiAgICAgICAgICBpZiAoZGVzY0xpbmVzLmxlbmd0aCA+IG1heExpbmVzUGVyUGFnZSkge1xuICAgICAgICAgICAgZG9jLmFkZFBhZ2UoKTtcbiAgICAgICAgICAgIHRleHRZID0gbWFyZ2luICsgMjA7XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdMaW5lcyA9IGRlc2NMaW5lcy5zbGljZShtYXhMaW5lc1BlclBhZ2UpO1xuICAgICAgICAgICAgZG9jLnRleHQocmVtYWluaW5nTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0WSArIChyZW1haW5pbmdMaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0KSArIDIwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2MudGV4dChkZXNjTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLnRleHQoZGVzY0xpbmVzLCB0ZXh0TWFyZ2luLCB0ZXh0WSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRleHRZICs9IGRlc2NMaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0O1xuICAgIH1cblxuICAgIC8vIFNpIG5vIGhheSBkZXNjcmlwY2nDs24sIG1vc3RyYXIgdW4gbWVuc2FqZVxuICAgIGlmICghZGF0YS5kZXNjcmlwdGlvbiB8fCAhZGF0YS5kZXNjcmlwdGlvbi50cmltKCkpIHtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnaXRhbGljJyk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xuICAgICAgZG9jLnNldFRleHRDb2xvcigxNTAsIDE1MCwgMTUwKTtcbiAgICAgIGRvYy50ZXh0KCdObyBzZSBoYW4gZXNwZWNpZmljYWRvIGRldGFsbGVzIGRlbCBzZXJ2aWNpby4nLCB0ZXh0TWFyZ2luLCB0ZXh0WSk7XG4gICAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsQm94WSArIGJveEhlaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXV0aG9yaXphdGlvbihkb2M6IGpzUERGLCBkYXRhOiBUZW1wbGF0ZVBkZk90LCB5OiBudW1iZXIsIG1hcmdpbjogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdGFibGVEYXRhID0gW1xuICAgICAgW1xuICAgICAgICB7IGNvbnRlbnQ6ICdBVVRPUklaQURBIFBPUjonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZvbnRTaXplOiAxMiwgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuYXBwcm92ZWRfYnkgfHwgJycsIHN0eWxlczogeyBmb250U2l6ZTogMTIgfSB9XG4gICAgICBdXG4gICAgXTtcblxuICAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xuICAgICAgc3RhcnRZOiB5LFxuICAgICAgYm9keTogdGFibGVEYXRhLFxuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBjZWxsUGFkZGluZzogMTIsXG4gICAgICAgIGxpbmVDb2xvcjogWzIwMCwgMjAwLCAyMDBdLFxuICAgICAgICBsaW5lV2lkdGg6IDAuNVxuICAgICAgfSxcbiAgICAgIGNvbHVtblN0eWxlczoge1xuICAgICAgICAwOiB7IGNlbGxXaWR0aDogMTUwIH0sXG4gICAgICAgIDE6IHsgY2VsbFdpZHRoOiAzMjAgfVxuICAgICAgfSxcbiAgICAgIG1hcmdpbjogeyBsZWZ0OiBtYXJnaW4sIHJpZ2h0OiBtYXJnaW4gfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIChkb2MgYXMgYW55KS5sYXN0QXV0b1RhYmxlLmZpbmFsWTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRm9vdGVyKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmT3QsIHk6IG51bWJlciwgcGFnZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIC8vIEZvbmRvIGRlbCBwaWUgZGUgcMOhZ2luYVxuICAgIGRvYy5zZXRGaWxsQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnJlY3QoNDAsIHksIHBhZ2VXaWR0aCAtIDgwLCA2MCwgJ0YnKTtcblxuICAgIC8vIFRleHRvIGVuIGJsYW5jb1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoMjU1LCAyNTUsIDI1NSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDEyKTtcbiAgICBcbiAgICBjb25zdCBpbnN0cnVjdGlvbiA9ICdGYXZvciBhZGp1bnRhciBsYSBvcmRlbiBhIGxhIGZhY3R1cmEgbyBjdWVudGEgZGUgY29icm8nO1xuICAgIGNvbnN0IGluc3RXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoaW5zdHJ1Y3Rpb24pO1xuICAgIGRvYy50ZXh0KGluc3RydWN0aW9uLCAocGFnZVdpZHRoIC0gaW5zdFdpZHRoKSAvIDIsIHkgKyAyNSk7XG5cbiAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xuICAgIGNvbnN0IGVtYWlsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGRhdGEubWFpbCB8fCAnJyk7XG4gICAgZG9jLnRleHQoZGF0YS5tYWlsIHx8ICcnLCAocGFnZVdpZHRoIC0gZW1haWxXaWR0aCkgLyAyLCB5ICsgNDUpO1xuXG4gICAgLy8gUmVzZXRlYXIgY29sb3JcbiAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuICB9XG5cblxufVxuIl19