brainloper-ui 14.1.8 → 14.1.9
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/brainloper-ui.mjs +4 -4
- package/esm2020/public_api.mjs +57 -56
- package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +310 -310
- package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +29 -29
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +23 -23
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +83 -83
- package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +40 -40
- package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +176 -176
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +728 -728
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +118 -118
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +186 -186
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +1 -1
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +1 -1
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +1 -1
- package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +222 -222
- package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +115 -115
- package/esm2020/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.mjs +145 -145
- package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +108 -108
- package/esm2020/src/app/modules/directives/carousel-item.directive.mjs +18 -18
- package/esm2020/src/app/modules/interfaces/buttons/button-icon.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/combos/combos-configuration.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/params.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/rules.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/table-columns.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/table-configuration.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/enum/enumActions.mjs +8 -8
- package/esm2020/src/app/modules/interfaces/enum/enumRules.mjs +8 -8
- package/esm2020/src/app/modules/interfaces/enum/httpResponseType.mjs +8 -0
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/filters/header-filters.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +8 -8
- package/esm2020/src/app/modules/interfaces/report/template-pdf-base.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/report/template-pdf-ot.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/report/template-pfd-fo.mjs +2 -2
- package/esm2020/src/app/modules/services/crypto.service.mjs +37 -37
- package/esm2020/src/app/modules/services/export-data.service.mjs +166 -166
- package/esm2020/src/app/modules/services/file-forms.service.mjs +24 -24
- package/esm2020/src/app/modules/services/fuel-order-pdf.service.mjs +528 -528
- package/esm2020/src/app/modules/services/functions.service.mjs +54 -54
- package/esm2020/src/app/modules/services/generate-pdf.service.mjs +109 -109
- package/esm2020/src/app/modules/services/http.service.mjs +126 -97
- package/esm2020/src/app/modules/services/loading/loading.component.mjs +28 -28
- package/esm2020/src/app/modules/services/local-storage.service.mjs +115 -115
- package/esm2020/src/app/modules/services/message.service.mjs +200 -200
- package/esm2020/src/app/modules/services/screen-size-util.mjs +6 -6
- package/esm2020/src/app/modules/services/session.service.mjs +42 -42
- package/esm2020/src/app/modules/services/work-order-pdf.service.mjs +384 -384
- package/fesm2015/brainloper-ui.mjs +3885 -3849
- package/fesm2015/brainloper-ui.mjs.map +1 -1
- package/fesm2020/brainloper-ui.mjs +3855 -3819
- package/fesm2020/brainloper-ui.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/package.json +1 -1
- package/public_api.d.ts +56 -55
- package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +62 -62
- package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +13 -13
- package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +10 -10
- package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +24 -24
- package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +16 -16
- package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +46 -46
- package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +125 -125
- package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +21 -21
- package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +42 -42
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +2 -2
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +2 -2
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +2 -2
- package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +30 -30
- package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +41 -41
- package/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.d.ts +40 -40
- package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +26 -26
- package/src/app/modules/directives/carousel-item.directive.d.ts +9 -9
- package/src/app/modules/interfaces/buttons/button-icon.d.ts +9 -9
- package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +6 -6
- package/src/app/modules/interfaces/combos/combos-configuration.d.ts +13 -13
- package/src/app/modules/interfaces/data-table/params.d.ts +7 -7
- package/src/app/modules/interfaces/data-table/rules.d.ts +8 -8
- package/src/app/modules/interfaces/data-table/table-columns.d.ts +25 -25
- package/src/app/modules/interfaces/data-table/table-configuration.d.ts +26 -26
- package/src/app/modules/interfaces/enum/enumActions.d.ts +6 -6
- package/src/app/modules/interfaces/enum/enumRules.d.ts +6 -6
- package/src/app/modules/interfaces/enum/httpResponseType.d.ts +6 -0
- package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +4 -4
- package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +13 -13
- package/src/app/modules/interfaces/filters/header-filters.d.ts +13 -13
- package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +10 -10
- package/src/app/modules/interfaces/report/template-pdf-base.d.ts +17 -17
- package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +6 -6
- package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +7 -7
- package/src/app/modules/services/crypto.service.d.ts +10 -10
- package/src/app/modules/services/export-data.service.d.ts +18 -18
- package/src/app/modules/services/file-forms.service.d.ts +7 -7
- package/src/app/modules/services/fuel-order-pdf.service.d.ts +59 -59
- package/src/app/modules/services/functions.service.d.ts +13 -13
- package/src/app/modules/services/generate-pdf.service.d.ts +21 -21
- package/src/app/modules/services/http.service.d.ts +23 -22
- package/src/app/modules/services/loading/loading.component.d.ts +15 -15
- package/src/app/modules/services/local-storage.service.d.ts +49 -49
- package/src/app/modules/services/message.service.d.ts +23 -23
- package/src/app/modules/services/screen-size-util.d.ts +3 -3
- package/src/app/modules/services/session.service.d.ts +14 -14
- package/src/app/modules/services/work-order-pdf.service.d.ts +60 -60
|
@@ -1,145 +1,145 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { jsPDF } from 'jspdf';
|
|
3
|
-
import html2canvas from 'html2canvas';
|
|
4
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/dialog";
|
|
7
|
-
import * as i2 from "../../../../services/message.service";
|
|
8
|
-
import * as i3 from "../../../../services/work-order-pdf.service";
|
|
9
|
-
import * as i4 from "@angular/material/button";
|
|
10
|
-
export class TemplateOtComponent {
|
|
11
|
-
constructor(dialogRef, dataModal, dialog, message, workOrderPdfService) {
|
|
12
|
-
this.dialogRef = dialogRef;
|
|
13
|
-
this.dataModal = dataModal;
|
|
14
|
-
this.dialog = dialog;
|
|
15
|
-
this.message = message;
|
|
16
|
-
this.workOrderPdfService = workOrderPdfService;
|
|
17
|
-
this.data = {
|
|
18
|
-
name: '',
|
|
19
|
-
nit: '',
|
|
20
|
-
address: '',
|
|
21
|
-
telephone: '',
|
|
22
|
-
mail: '',
|
|
23
|
-
image: '',
|
|
24
|
-
code: '',
|
|
25
|
-
date: '',
|
|
26
|
-
responsible: '',
|
|
27
|
-
third: '',
|
|
28
|
-
odometer: '',
|
|
29
|
-
approved_by: '',
|
|
30
|
-
description: '',
|
|
31
|
-
consecutive: '',
|
|
32
|
-
nameProvider: '',
|
|
33
|
-
addressProvider: '',
|
|
34
|
-
area: '',
|
|
35
|
-
invoiceReference: '',
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
ngOnInit() {
|
|
39
|
-
this.data = this.dataModal.data;
|
|
40
|
-
}
|
|
41
|
-
ngAfterViewInit() {
|
|
42
|
-
if (this.dataModal.autoGenerate) {
|
|
43
|
-
if (this.dataModal.useNewMethod) {
|
|
44
|
-
this.generatePdfWithJsPDFVersion2();
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
this.generatePdfWithHtml2Canvas();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
generatePdfWithHtml2Canvas() {
|
|
52
|
-
this.message.openLoading("Cargando", "Generando PDF");
|
|
53
|
-
const DATA = document.getElementById('templateOT');
|
|
54
|
-
const doc = new jsPDF('p', 'pt', 'a4');
|
|
55
|
-
const options = {
|
|
56
|
-
background: 'white',
|
|
57
|
-
scale: 3
|
|
58
|
-
};
|
|
59
|
-
html2canvas(DATA, options)
|
|
60
|
-
.then((canvas) => {
|
|
61
|
-
const img = canvas.toDataURL('image/PNG');
|
|
62
|
-
const bufferX = 15;
|
|
63
|
-
const bufferY = 15;
|
|
64
|
-
const imgProps = doc.getImageProperties(img);
|
|
65
|
-
const pdfWidth = doc.internal.pageSize.getWidth() - 2 * bufferX;
|
|
66
|
-
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
|
|
67
|
-
doc.addImage(img, 'PNG', bufferX, bufferY, pdfWidth, pdfHeight, undefined, 'FAST');
|
|
68
|
-
return doc;
|
|
69
|
-
})
|
|
70
|
-
.then((docResult) => {
|
|
71
|
-
docResult.output('dataurlnewwindow', { filename: 'reporte.pdf' });
|
|
72
|
-
this.dialog.closeAll();
|
|
73
|
-
this.message.closeLoading();
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
generatePdfWithJsPDFVersion2() {
|
|
77
|
-
this.message.openLoading("Cargando", "Generando PDF con nuevo método");
|
|
78
|
-
try {
|
|
79
|
-
const doc = new jsPDF('p', 'pt', 'letter');
|
|
80
|
-
const pageWidth = doc.internal.pageSize.getWidth();
|
|
81
|
-
const margin = 40;
|
|
82
|
-
let currentY = margin;
|
|
83
|
-
// Encabezado simple
|
|
84
|
-
doc.setFont('helvetica', 'bold');
|
|
85
|
-
doc.setFontSize(18);
|
|
86
|
-
const title = 'ORDEN DE TRABAJO';
|
|
87
|
-
const titleWidth = doc.getTextWidth(title);
|
|
88
|
-
doc.text(title, (pageWidth - titleWidth) / 2, currentY);
|
|
89
|
-
currentY += 30;
|
|
90
|
-
doc.setFontSize(14);
|
|
91
|
-
const numberText = `N° ${this.data.consecutive}`;
|
|
92
|
-
const numberWidth = doc.getTextWidth(numberText);
|
|
93
|
-
doc.text(numberText, (pageWidth - numberWidth) / 2, currentY);
|
|
94
|
-
currentY += 40;
|
|
95
|
-
// Información básica
|
|
96
|
-
doc.setFont('helvetica', 'normal');
|
|
97
|
-
doc.setFontSize(12);
|
|
98
|
-
const info = [
|
|
99
|
-
`Empresa: ${this.data.name}`,
|
|
100
|
-
`NIT: ${this.data.nit}`,
|
|
101
|
-
`Área: ${this.data.area}`,
|
|
102
|
-
`Código: ${this.data.code}`,
|
|
103
|
-
`Fecha: ${this.data.date}`,
|
|
104
|
-
`Operario: ${this.data.responsible}`,
|
|
105
|
-
`Proveedor: ${this.data.nameProvider}`,
|
|
106
|
-
`Descripción: ${this.data.description}`
|
|
107
|
-
];
|
|
108
|
-
info.forEach(line => {
|
|
109
|
-
doc.text(line, margin, currentY);
|
|
110
|
-
currentY += 20;
|
|
111
|
-
});
|
|
112
|
-
doc.output('dataurlnewwindow', { filename: 'orden_trabajo.pdf' });
|
|
113
|
-
this.dialog.closeAll();
|
|
114
|
-
this.message.closeLoading();
|
|
115
|
-
}
|
|
116
|
-
catch (error) {
|
|
117
|
-
console.error('Error generando PDF nuevo:', error);
|
|
118
|
-
this.message.closeLoading();
|
|
119
|
-
this.generatePdfWithHtml2Canvas();
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
generatePdfWithJsPDFVersion3() {
|
|
123
|
-
this.message.openLoading("Cargando", "Generando PDF profesional");
|
|
124
|
-
this.workOrderPdfService.generateWorkOrderPDF(this.data)
|
|
125
|
-
.then(() => {
|
|
126
|
-
this.dialog.closeAll();
|
|
127
|
-
this.message.closeLoading();
|
|
128
|
-
})
|
|
129
|
-
.catch((error) => {
|
|
130
|
-
console.error('Error generando PDF profesional:', error);
|
|
131
|
-
this.message.closeLoading();
|
|
132
|
-
this.generatePdfWithHtml2Canvas();
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
TemplateOtComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TemplateOtComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i1.MatDialog }, { token: i2.MessageService }, { token: i3.WorkOrderPdfService }], target: i0.ɵɵFactoryTarget.Component });
|
|
137
|
-
TemplateOtComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TemplateOtComponent, selector: "app-template-ot", ngImport: i0, template: "<div id=\"templateOT\" #templateOT>\
|
|
138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TemplateOtComponent, decorators: [{
|
|
139
|
-
type: Component,
|
|
140
|
-
args: [{ selector: 'app-template-ot', template: "<div id=\"templateOT\" #templateOT>\
|
|
141
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
142
|
-
type: Inject,
|
|
143
|
-
args: [MAT_DIALOG_DATA]
|
|
144
|
-
}] }, { type: i1.MatDialog }, { type: i2.MessageService }, { type: i3.WorkOrderPdfService }]; } });
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtb3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9yZXBvcnQvdGVtcGxhdGUtb3QvdGVtcGxhdGUtb3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9yZXBvcnQvdGVtcGxhdGUtb3QvdGVtcGxhdGUtb3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUEyQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBT3BGLE1BQU0sT0FBTyxtQkFBbUI7SUF1QjlCLFlBQ1MsU0FBNEMsRUFDbkIsU0FBUyxFQUNqQyxNQUFpQixFQUNsQixPQUF1QixFQUN0QixtQkFBd0M7UUFKekMsY0FBUyxHQUFULFNBQVMsQ0FBbUM7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBQTtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2xCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3RCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUExQmxELFNBQUksR0FBRztZQUNMLElBQUksRUFBRSxFQUFFO1lBQ1IsR0FBRyxFQUFFLEVBQUU7WUFDUCxPQUFPLEVBQUUsRUFBRTtZQUNYLFNBQVMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLEVB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Q0FBQztRQUM5QixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O2dIQW5KVSxtQkFBbUIsOENBeUJwQixlQUFlO29HQXpCZCxtQkFBbUIsdURDWmhDLDZwTEE0SE07MkZEaEhPLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7OzBCQTZCeEIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrT3JkZXJQZGZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvd29yay1vcmRlci1wZGYuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsganNQREYgfSBmcm9tICdqc3BkZic7XHJcbmltcG9ydCBodG1sMmNhbnZhcyBmcm9tICdodG1sMmNhbnZhcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdGVtcGxhdGUtb3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS1vdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGVtcGxhdGUtb3QuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVPdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGRhdGEgPSB7XHJcbiAgICBuYW1lOiAnJyxcclxuICAgIG5pdDogJycsXHJcbiAgICBhZGRyZXNzOiAnJyxcclxuICAgIHRlbGVwaG9uZTogJycsXHJcbiAgICBtYWlsOiAnJyxcclxuICAgIGltYWdlOiAnJyxcclxuICAgIGNvZGU6ICcnLFxyXG4gICAgZGF0ZTogJycsXHJcbiAgICByZXNwb25zaWJsZTogJycsXHJcbiAgICB0aGlyZDogJycsXHJcbiAgICBvZG9tZXRlcjogJycsXHJcbiAgICBhcHByb3ZlZF9ieTogJycsXHJcbiAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICBjb25zZWN1dGl2ZTogJycsXHJcbiAgICBuYW1lUHJvdmlkZXI6ICcnLFxyXG4gICAgYWRkcmVzc1Byb3ZpZGVyOiAnJyxcclxuICAgIGFyZWE6ICcnLFxyXG4gICAgaW52b2ljZVJlZmVyZW5jZTogJycsXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZU90Q29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YU1vZGFsLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBtZXNzYWdlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgd29ya09yZGVyUGRmU2VydmljZTogV29ya09yZGVyUGRmU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhTW9kYWwuZGF0YVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YU1vZGFsLmF1dG9HZW5lcmF0ZSkge1xyXG4gICAgICBpZiAodGhpcy5kYXRhTW9kYWwudXNlTmV3TWV0aG9kKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVBkZldpdGhKc1BERlZlcnNpb24yKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVBkZldpdGhIdG1sMkNhbnZhcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVQZGZXaXRoSHRtbDJDYW52YXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lc3NhZ2Uub3BlbkxvYWRpbmcoXCJDYXJnYW5kb1wiLCBcIkdlbmVyYW5kbyBQREZcIilcclxuICAgIGNvbnN0IERBVEEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVtcGxhdGVPVCcpO1xyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKCdwJywgJ3B0JywgJ2E0Jyk7XHJcbiAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICBiYWNrZ3JvdW5kOiAnd2hpdGUnLFxyXG4gICAgICBzY2FsZTogM1xyXG4gICAgfTtcclxuICAgIGh0bWwyY2FudmFzKERBVEEsIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChjYW52YXMpID0+IHtcclxuICAgICAgICBjb25zdCBpbWcgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9QTkcnKTtcclxuXHJcbiAgICAgICAgY29uc3QgYnVmZmVyWCA9IDE1O1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlclkgPSAxNTtcclxuICAgICAgICBjb25zdCBpbWdQcm9wcyA9IChkb2MgYXMgYW55KS5nZXRJbWFnZVByb3BlcnRpZXMoaW1nKTtcclxuICAgICAgICBjb25zdCBwZGZXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpIC0gMiAqIGJ1ZmZlclg7XHJcbiAgICAgICAgY29uc3QgcGRmSGVpZ2h0ID0gKGltZ1Byb3BzLmhlaWdodCAqIHBkZldpZHRoKSAvIGltZ1Byb3BzLndpZHRoO1xyXG4gICAgICAgIGRvYy5hZGRJbWFnZShcclxuICAgICAgICAgIGltZyxcclxuICAgICAgICAgICdQTkcnLFxyXG4gICAgICAgICAgYnVmZmVyWCxcclxuICAgICAgICAgIGJ1ZmZlclksXHJcbiAgICAgICAgICBwZGZXaWR0aCxcclxuICAgICAgICAgIHBkZkhlaWdodCxcclxuICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICdGQVNUJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGRvYztcclxuICAgICAgfSlcclxuICAgICAgLnRoZW4oKGRvY1Jlc3VsdCkgPT4ge1xyXG4gICAgICAgIGRvY1Jlc3VsdC5vdXRwdXQoJ2RhdGF1cmxuZXd3aW5kb3cnLCB7IGZpbGVuYW1lOiAncmVwb3J0ZS5wZGYnIH0pO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nLmNsb3NlQWxsKClcclxuICAgICAgICB0aGlzLm1lc3NhZ2UuY2xvc2VMb2FkaW5nKClcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAgIHB1YmxpYyBnZW5lcmF0ZVBkZldpdGhKc1BERlZlcnNpb24yKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXNzYWdlLm9wZW5Mb2FkaW5nKFwiQ2FyZ2FuZG9cIiwgXCJHZW5lcmFuZG8gUERGIGNvbiBudWV2byBtw6l0b2RvXCIpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcsICdsZXR0ZXInKTtcclxuICAgICAgY29uc3QgcGFnZVdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCk7XHJcbiAgICAgIGNvbnN0IG1hcmdpbiA9IDQwO1xyXG4gICAgICBsZXQgY3VycmVudFkgPSBtYXJnaW47XHJcblxyXG4gICAgICAvLyBFbmNhYmV6YWRvIHNpbXBsZVxyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgZG9jLnNldEZvbnRTaXplKDE4KTtcclxuICAgICAgY29uc3QgdGl0bGUgPSAnT1JERU4gREUgVFJBQkFKTyc7XHJcbiAgICAgIGNvbnN0IHRpdGxlV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcclxuICAgICAgZG9jLnRleHQodGl0bGUsIChwYWdlV2lkdGggLSB0aXRsZVdpZHRoKSAvIDIsIGN1cnJlbnRZKTtcclxuICAgICAgY3VycmVudFkgKz0gMzA7XHJcblxyXG4gICAgICBkb2Muc2V0Rm9udFNpemUoMTQpO1xyXG4gICAgICBjb25zdCBudW1iZXJUZXh0ID0gYE7CsCAke3RoaXMuZGF0YS5jb25zZWN1dGl2ZX1gO1xyXG4gICAgICBjb25zdCBudW1iZXJXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobnVtYmVyVGV4dCk7XHJcbiAgICAgIGRvYy50ZXh0KG51bWJlclRleHQsIChwYWdlV2lkdGggLSBudW1iZXJXaWR0aCkgLyAyLCBjdXJyZW50WSk7XHJcbiAgICAgIGN1cnJlbnRZICs9IDQwO1xyXG5cclxuICAgICAgLy8gSW5mb3JtYWNpw7NuIGLDoXNpY2FcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgZG9jLnNldEZvbnRTaXplKDEyKTtcclxuXHJcbiAgICAgIGNvbnN0IGluZm8gPSBbXHJcbiAgICAgICAgYEVtcHJlc2E6ICR7dGhpcy5kYXRhLm5hbWV9YCxcclxuICAgICAgICBgTklUOiAke3RoaXMuZGF0YS5uaXR9YCxcclxuICAgICAgICBgw4FyZWE6ICR7dGhpcy5kYXRhLmFyZWF9YCxcclxuICAgICAgICBgQ8OzZGlnbzogJHt0aGlzLmRhdGEuY29kZX1gLFxyXG4gICAgICAgIGBGZWNoYTogJHt0aGlzLmRhdGEuZGF0ZX1gLFxyXG4gICAgICAgIGBPcGVyYXJpbzogJHt0aGlzLmRhdGEucmVzcG9uc2libGV9YCxcclxuICAgICAgICBgUHJvdmVlZG9yOiAke3RoaXMuZGF0YS5uYW1lUHJvdmlkZXJ9YCxcclxuICAgICAgICBgRGVzY3JpcGNpw7NuOiAke3RoaXMuZGF0YS5kZXNjcmlwdGlvbn1gXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBpbmZvLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgZG9jLnRleHQobGluZSwgbWFyZ2luLCBjdXJyZW50WSk7XHJcbiAgICAgICAgY3VycmVudFkgKz0gMjA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZG9jLm91dHB1dCgnZGF0YXVybG5ld3dpbmRvdycsIHsgZmlsZW5hbWU6ICdvcmRlbl90cmFiYWpvLnBkZicgfSk7XHJcbiAgICAgIHRoaXMuZGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdlbmVyYW5kbyBQREYgbnVldm86JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLm1lc3NhZ2UuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVQZGZXaXRoSHRtbDJDYW52YXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZW5lcmF0ZVBkZldpdGhKc1BERlZlcnNpb24zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXNzYWdlLm9wZW5Mb2FkaW5nKFwiQ2FyZ2FuZG9cIiwgXCJHZW5lcmFuZG8gUERGIHByb2Zlc2lvbmFsXCIpO1xyXG5cclxuICAgIHRoaXMud29ya09yZGVyUGRmU2VydmljZS5nZW5lcmF0ZVdvcmtPcmRlclBERih0aGlzLmRhdGEpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdlbmVyYW5kbyBQREYgcHJvZmVzaW9uYWw6JywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlUGRmV2l0aEh0bWwyQ2FudmFzKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBpZD1cInRlbXBsYXRlT1RcIiAjdGVtcGxhdGVPVD5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gdy0xMDAgd2hpdGUtYmFja2dyb3VuZFwiPlxyXG5cclxuICAgICAgICA8IS0tIEVuY2FiZXphZG8gIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSB3LTEwMCBkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGhlYWRlci1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6ODAlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWhlYWRlciB0ZXh0LXVwcGVyY2FzZSB3cmFwLXRleHRcIj57e2RhdGEubmFtZX19PC9oMj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInRleHQtaGVhZGVyIHdyYXAtdGV4dFwiPk5JVDoge3tkYXRhLm5pdH19PC9oMj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWV2ZW5seVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtaGVhZGVyIHdyYXAtdGV4dFwiPnt7ZGF0YS5hZGRyZXNzfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtaGVhZGVyIHdyYXAtdGV4dFwiPlRFTDoge3tkYXRhLnRlbGVwaG9uZX19PC9oMz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjIwJVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZyB3LTEwMFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cIid1cmwoJyArIGRhdGEuaW1hZ2UgKyAnKSdcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlIGNvbnRhaW5lci1oZWFkZXJzXCI+XHJcbiAgICAgICAgICAgIDxoMj5PcmRlbiBkZSB0cmFiYWpvPC9oMj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+TsKwOiB7e2RhdGEuY29uc2VjdXRpdmV9fTwvaDI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQ3VlcnBvIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSB3LTEwMCBmbGV4aWJsZS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj7DgXJlYTo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6MzIlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEuYXJlYX19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5Dw7NkaWdvOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDoxNiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIndyYXAtdGV4dFwiPnt7ZGF0YS5jb2RlfX08L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5GZWNoYTo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6MTYlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEuZGF0ZX19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSB3LTEwMCBmbGV4aWJsZS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5PcGVyYXJpbzo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6MzIlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEucmVzcG9uc2libGV9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjEyJVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZnctYm9sZFwiPk9kw7NtZXRybzo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6MTYlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEub2RvbWV0ZXJ9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5SZWZlcmVuY2lhIEZhY3R1cmE6PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItdGV4dCB0ZXh0LWNvbnRlbnRcIiBzdHlsZT1cIndpZHRoOjE2JVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+e3tkYXRhLmludm9pY2VSZWZlcmVuY2V9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGUgY29udGFpbmVyLWhlYWRlcnNcIj5cclxuICAgICAgICAgICAgPGgyPkRhdG9zIGRlbCBwcm92ZWVkb3I8L2gyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGUgZmxleGlibGUtcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItciBjb250YWluZXItdGV4dFwiIHN0eWxlPVwid2lkdGg6MTUlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJmdy1ib2xkXCI+Tm9tYnJlOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDozNSVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIndyYXAtdGV4dFwiPnt7ZGF0YS5uYW1lUHJvdmlkZXJ9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjE1JVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZnctYm9sZFwiPkRpcmVjY2nDs246PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItdGV4dCB0ZXh0LWNvbnRlbnRcIiBzdHlsZT1cIndpZHRoOjM1JVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+e3tkYXRhLmFkZHJlc3NQcm92aWRlcn19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSBjb250YWluZXItaGVhZGVyc1wiPlxyXG4gICAgICAgICAgICA8aDI+RGV0YWxsZXMgZGVsIHNlcnZpY2lvPC9oMj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlIHctMTAwIGRlc2NyaXB0aW9uLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0IHRleHQtc3RhcnRcIj57e2RhdGEuZGVzY3JpcHRpb259fTwvaDI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSB3LTEwMCBmbGV4aWJsZS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDozNSVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5BVVRPUklaQURBIFBPUjo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6NjUlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEuYXBwcm92ZWRfYnl9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIHBpc28gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCBmb290ZXItc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8aDI+RmF2b3IgYWRqdW50YXIgbGEgb3JkZW4gYSBsYSBmYWN0dXJhIG8gY3VlbnRhIGRlIGNvYnJvPC9oMj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+e3tkYXRhLm1haWx9fTwvaDI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImRvd25sb2FkLWNvbnRhaW5lclwiPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiZ2VuZXJhdGVQZGZXaXRoSHRtbDJDYW52YXMoKVwiIGNvbG9yPSdwcmltYXJ5JyBtYXQtcmFpc2VkLWJ1dHRvbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweDtcIj5cclxuICAgICAgICBHZW5lcmFyIFBERlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8IS0tIDxidXR0b24gKGNsaWNrKT1cImdlbmVyYXRlUGRmV2l0aEpzUERGVmVyc2lvbjIoKVwiIGNvbG9yPSd3YXJuJyBtYXQtcmFpc2VkLWJ1dHRvbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweDtcIj5cclxuICAgICAgICAgICAgR2VuZXJhciBQREYgKHZlcnNpb24gMi4wKVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJnZW5lcmF0ZVBkZldpdGhKc1BERlZlcnNpb24zKClcIiBjb2xvcj0nYWNjZW50JyBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LWljb24+cGljdHVyZV9hc19wZGY8L21hdC1pY29uPlxyXG4gICAgICAgIEdlbmVyYXIgUERGICh2ZXJzaW9uIDMuMClcclxuICAgIDwvYnV0dG9uPiAtLT5cclxuXHJcbjwvZGl2PiJdfQ==
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { jsPDF } from 'jspdf';
|
|
3
|
+
import html2canvas from 'html2canvas';
|
|
4
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/dialog";
|
|
7
|
+
import * as i2 from "../../../../services/message.service";
|
|
8
|
+
import * as i3 from "../../../../services/work-order-pdf.service";
|
|
9
|
+
import * as i4 from "@angular/material/button";
|
|
10
|
+
export class TemplateOtComponent {
|
|
11
|
+
constructor(dialogRef, dataModal, dialog, message, workOrderPdfService) {
|
|
12
|
+
this.dialogRef = dialogRef;
|
|
13
|
+
this.dataModal = dataModal;
|
|
14
|
+
this.dialog = dialog;
|
|
15
|
+
this.message = message;
|
|
16
|
+
this.workOrderPdfService = workOrderPdfService;
|
|
17
|
+
this.data = {
|
|
18
|
+
name: '',
|
|
19
|
+
nit: '',
|
|
20
|
+
address: '',
|
|
21
|
+
telephone: '',
|
|
22
|
+
mail: '',
|
|
23
|
+
image: '',
|
|
24
|
+
code: '',
|
|
25
|
+
date: '',
|
|
26
|
+
responsible: '',
|
|
27
|
+
third: '',
|
|
28
|
+
odometer: '',
|
|
29
|
+
approved_by: '',
|
|
30
|
+
description: '',
|
|
31
|
+
consecutive: '',
|
|
32
|
+
nameProvider: '',
|
|
33
|
+
addressProvider: '',
|
|
34
|
+
area: '',
|
|
35
|
+
invoiceReference: '',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
this.data = this.dataModal.data;
|
|
40
|
+
}
|
|
41
|
+
ngAfterViewInit() {
|
|
42
|
+
if (this.dataModal.autoGenerate) {
|
|
43
|
+
if (this.dataModal.useNewMethod) {
|
|
44
|
+
this.generatePdfWithJsPDFVersion2();
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.generatePdfWithHtml2Canvas();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
generatePdfWithHtml2Canvas() {
|
|
52
|
+
this.message.openLoading("Cargando", "Generando PDF");
|
|
53
|
+
const DATA = document.getElementById('templateOT');
|
|
54
|
+
const doc = new jsPDF('p', 'pt', 'a4');
|
|
55
|
+
const options = {
|
|
56
|
+
background: 'white',
|
|
57
|
+
scale: 3
|
|
58
|
+
};
|
|
59
|
+
html2canvas(DATA, options)
|
|
60
|
+
.then((canvas) => {
|
|
61
|
+
const img = canvas.toDataURL('image/PNG');
|
|
62
|
+
const bufferX = 15;
|
|
63
|
+
const bufferY = 15;
|
|
64
|
+
const imgProps = doc.getImageProperties(img);
|
|
65
|
+
const pdfWidth = doc.internal.pageSize.getWidth() - 2 * bufferX;
|
|
66
|
+
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
|
|
67
|
+
doc.addImage(img, 'PNG', bufferX, bufferY, pdfWidth, pdfHeight, undefined, 'FAST');
|
|
68
|
+
return doc;
|
|
69
|
+
})
|
|
70
|
+
.then((docResult) => {
|
|
71
|
+
docResult.output('dataurlnewwindow', { filename: 'reporte.pdf' });
|
|
72
|
+
this.dialog.closeAll();
|
|
73
|
+
this.message.closeLoading();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
generatePdfWithJsPDFVersion2() {
|
|
77
|
+
this.message.openLoading("Cargando", "Generando PDF con nuevo método");
|
|
78
|
+
try {
|
|
79
|
+
const doc = new jsPDF('p', 'pt', 'letter');
|
|
80
|
+
const pageWidth = doc.internal.pageSize.getWidth();
|
|
81
|
+
const margin = 40;
|
|
82
|
+
let currentY = margin;
|
|
83
|
+
// Encabezado simple
|
|
84
|
+
doc.setFont('helvetica', 'bold');
|
|
85
|
+
doc.setFontSize(18);
|
|
86
|
+
const title = 'ORDEN DE TRABAJO';
|
|
87
|
+
const titleWidth = doc.getTextWidth(title);
|
|
88
|
+
doc.text(title, (pageWidth - titleWidth) / 2, currentY);
|
|
89
|
+
currentY += 30;
|
|
90
|
+
doc.setFontSize(14);
|
|
91
|
+
const numberText = `N° ${this.data.consecutive}`;
|
|
92
|
+
const numberWidth = doc.getTextWidth(numberText);
|
|
93
|
+
doc.text(numberText, (pageWidth - numberWidth) / 2, currentY);
|
|
94
|
+
currentY += 40;
|
|
95
|
+
// Información básica
|
|
96
|
+
doc.setFont('helvetica', 'normal');
|
|
97
|
+
doc.setFontSize(12);
|
|
98
|
+
const info = [
|
|
99
|
+
`Empresa: ${this.data.name}`,
|
|
100
|
+
`NIT: ${this.data.nit}`,
|
|
101
|
+
`Área: ${this.data.area}`,
|
|
102
|
+
`Código: ${this.data.code}`,
|
|
103
|
+
`Fecha: ${this.data.date}`,
|
|
104
|
+
`Operario: ${this.data.responsible}`,
|
|
105
|
+
`Proveedor: ${this.data.nameProvider}`,
|
|
106
|
+
`Descripción: ${this.data.description}`
|
|
107
|
+
];
|
|
108
|
+
info.forEach(line => {
|
|
109
|
+
doc.text(line, margin, currentY);
|
|
110
|
+
currentY += 20;
|
|
111
|
+
});
|
|
112
|
+
doc.output('dataurlnewwindow', { filename: 'orden_trabajo.pdf' });
|
|
113
|
+
this.dialog.closeAll();
|
|
114
|
+
this.message.closeLoading();
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error('Error generando PDF nuevo:', error);
|
|
118
|
+
this.message.closeLoading();
|
|
119
|
+
this.generatePdfWithHtml2Canvas();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
generatePdfWithJsPDFVersion3() {
|
|
123
|
+
this.message.openLoading("Cargando", "Generando PDF profesional");
|
|
124
|
+
this.workOrderPdfService.generateWorkOrderPDF(this.data)
|
|
125
|
+
.then(() => {
|
|
126
|
+
this.dialog.closeAll();
|
|
127
|
+
this.message.closeLoading();
|
|
128
|
+
})
|
|
129
|
+
.catch((error) => {
|
|
130
|
+
console.error('Error generando PDF profesional:', error);
|
|
131
|
+
this.message.closeLoading();
|
|
132
|
+
this.generatePdfWithHtml2Canvas();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
TemplateOtComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TemplateOtComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i1.MatDialog }, { token: i2.MessageService }, { token: i3.WorkOrderPdfService }], target: i0.ɵɵFactoryTarget.Component });
|
|
137
|
+
TemplateOtComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TemplateOtComponent, selector: "app-template-ot", ngImport: i0, template: "<div id=\"templateOT\" #templateOT>\n <div class=\"d-flex flex-column w-100 white-background\">\n\n <!-- Encabezado -->\n <div class=\"borde w-100 d-flex flex-row align-items-center header-section\">\n <div class=\"d-flex flex-column align-items-center text-content\" style=\"width:80%\">\n <h2 class=\"text-header text-uppercase wrap-text\">{{data.name}}</h2>\n <h2 class=\"text-header wrap-text\">NIT: {{data.nit}}</h2>\n <div class=\"w-100 d-flex flex-row justify-content-evenly\">\n <h3 class=\"text-header wrap-text\">{{data.address}}</h3>\n <h3 class=\"text-header wrap-text\">TEL: {{data.telephone}}</h3>\n </div>\n </div>\n <div style=\"width:20%\">\n <div class=\"img w-100\" [style.background-image]=\"'url(' + data.image + ')'\">\n </div>\n </div>\n </div>\n\n <div class=\"borde container-headers\">\n <h2>Orden de trabajo</h2>\n <h2 class=\"wrap-text\">N\u00B0: {{data.consecutive}}</h2>\n </div>\n\n <!-- Cuerpo -->\n <div class=\"borde w-100 flexible-row\">\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">\u00C1rea:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:32%\">\n <h2 class=\"wrap-text\">{{data.area}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">C\u00F3digo:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:16%\">\n <h2 class=\"wrap-text\">{{data.code}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">Fecha:</h2>\n </div>\n <div class=\"container-text text-content\" style=\"width:16%\">\n <h2 class=\"wrap-text\">{{data.date}}</h2>\n </div>\n </div>\n\n <div class=\"borde w-100 flexible-row\">\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">Operario:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:32%\">\n <h2 class=\"wrap-text\">{{data.responsible}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">Od\u00F3metro:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:16%\">\n <h2 class=\"wrap-text\">{{data.odometer}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">Referencia Factura:</h2>\n </div>\n <div class=\"container-text text-content\" style=\"width:16%\">\n <h2 class=\"wrap-text\">{{data.invoiceReference}}</h2>\n </div>\n </div>\n\n <div class=\"borde container-headers\">\n <h2>Datos del proveedor</h2>\n </div>\n\n <div class=\"borde flexible-row\">\n <div class=\"border-r container-text\" style=\"width:15%\">\n <h2 class=\"fw-bold\">Nombre:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:35%\">\n <h2 class=\"wrap-text\">{{data.nameProvider}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:15%\">\n <h2 class=\"fw-bold\">Direcci\u00F3n:</h2>\n </div>\n <div class=\"container-text text-content\" style=\"width:35%\">\n <h2 class=\"wrap-text\">{{data.addressProvider}}</h2>\n </div>\n </div>\n\n <div class=\"borde container-headers\">\n <h2>Detalles del servicio</h2>\n </div>\n\n <div class=\"borde w-100 description-section\">\n <h2 class=\"wrap-text text-start\">{{data.description}}</h2>\n </div>\n\n <div class=\"borde w-100 flexible-row\">\n <div class=\"border-r container-text\" style=\"width:35%\">\n <h2 class=\"fw-bold\">AUTORIZADA POR:</h2>\n </div>\n <div class=\"container-text text-content\" style=\"width:65%\">\n <h2 class=\"wrap-text\">{{data.approved_by}}</h2>\n </div>\n </div>\n\n <!-- piso -->\n <div class=\"borde d-flex flex-column align-items-center justify-content-center w-100 footer-section\">\n <h2>Favor adjuntar la orden a la factura o cuenta de cobro</h2>\n <h2 class=\"wrap-text\">{{data.mail}}</h2>\n </div>\n\n </div>\n</div>\n\n<div class=\"download-container\">\n <button (click)=\"generatePdfWithHtml2Canvas()\" color='primary' mat-raised-button style=\"margin-right: 10px;\">\n Generar PDF\n </button>\n <!-- <button (click)=\"generatePdfWithJsPDFVersion2()\" color='warn' mat-raised-button style=\"margin-right: 10px;\">\n Generar PDF (version 2.0)\n </button>\n <button (click)=\"generatePdfWithJsPDFVersion3()\" color='accent' mat-raised-button>\n <mat-icon>picture_as_pdf</mat-icon>\n Generar PDF (version 3.0)\n </button> -->\n\n</div>", styles: [".img{background-size:100%!important;background-repeat:no-repeat!important;background-position:center!important;background-size:contain!important;height:22mm!important;margin:0!important;padding:0!important}h2{font-size:1rem!important;line-height:1.2!important;margin:0!important;padding:0!important;text-align:center!important}h3{line-height:1.2!important;margin:0!important;padding:0!important;text-align:center!important}.text-header{line-height:1.5!important;font-weight:700!important}.text-uppercase{text-transform:uppercase!important}.wrap-text{white-space:pre-wrap!important}.text-content{padding:5px!important;word-wrap:break-word!important;overflow-wrap:break-word!important}.borde{border:1px solid blue!important}.border-r{border-right:1px solid blue!important;min-height:100%!important;align-self:stretch!important}.container-text{display:flex!important;justify-content:center!important;align-items:center!important;min-height:inherit!important}.container-headers{display:flex!important;align-items:center!important;justify-content:space-evenly!important;width:100%!important;min-height:8mm!important;background:rgba(240,244,255,.6117647059)!important;padding:5px!important;word-wrap:break-word!important;overflow-wrap:break-word!important}.container-headers h2{font-weight:700!important}.flexible-row{display:flex!important;flex-direction:row!important;align-items:stretch!important;min-height:11mm!important}.header-section{min-height:25mm!important}.footer-section{min-height:14mm!important;background:rgba(240,244,255,.35)!important;padding:5px!important;word-wrap:break-word!important;overflow-wrap:break-word!important}.description-section{min-height:20mm!important;padding:10px!important;word-wrap:break-word!important;overflow-wrap:break-word!important}.w-100{width:100%!important}.text-start{text-align:start!important}.white-background{background-color:#fff!important}.download-container{display:flex!important;justify-content:center!important;margin-top:15px!important}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TemplateOtComponent, decorators: [{
|
|
139
|
+
type: Component,
|
|
140
|
+
args: [{ selector: 'app-template-ot', template: "<div id=\"templateOT\" #templateOT>\n <div class=\"d-flex flex-column w-100 white-background\">\n\n <!-- Encabezado -->\n <div class=\"borde w-100 d-flex flex-row align-items-center header-section\">\n <div class=\"d-flex flex-column align-items-center text-content\" style=\"width:80%\">\n <h2 class=\"text-header text-uppercase wrap-text\">{{data.name}}</h2>\n <h2 class=\"text-header wrap-text\">NIT: {{data.nit}}</h2>\n <div class=\"w-100 d-flex flex-row justify-content-evenly\">\n <h3 class=\"text-header wrap-text\">{{data.address}}</h3>\n <h3 class=\"text-header wrap-text\">TEL: {{data.telephone}}</h3>\n </div>\n </div>\n <div style=\"width:20%\">\n <div class=\"img w-100\" [style.background-image]=\"'url(' + data.image + ')'\">\n </div>\n </div>\n </div>\n\n <div class=\"borde container-headers\">\n <h2>Orden de trabajo</h2>\n <h2 class=\"wrap-text\">N\u00B0: {{data.consecutive}}</h2>\n </div>\n\n <!-- Cuerpo -->\n <div class=\"borde w-100 flexible-row\">\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">\u00C1rea:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:32%\">\n <h2 class=\"wrap-text\">{{data.area}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">C\u00F3digo:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:16%\">\n <h2 class=\"wrap-text\">{{data.code}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">Fecha:</h2>\n </div>\n <div class=\"container-text text-content\" style=\"width:16%\">\n <h2 class=\"wrap-text\">{{data.date}}</h2>\n </div>\n </div>\n\n <div class=\"borde w-100 flexible-row\">\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">Operario:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:32%\">\n <h2 class=\"wrap-text\">{{data.responsible}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">Od\u00F3metro:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:16%\">\n <h2 class=\"wrap-text\">{{data.odometer}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:12%\">\n <h2 class=\"fw-bold\">Referencia Factura:</h2>\n </div>\n <div class=\"container-text text-content\" style=\"width:16%\">\n <h2 class=\"wrap-text\">{{data.invoiceReference}}</h2>\n </div>\n </div>\n\n <div class=\"borde container-headers\">\n <h2>Datos del proveedor</h2>\n </div>\n\n <div class=\"borde flexible-row\">\n <div class=\"border-r container-text\" style=\"width:15%\">\n <h2 class=\"fw-bold\">Nombre:</h2>\n </div>\n <div class=\"border-r container-text text-content\" style=\"width:35%\">\n <h2 class=\"wrap-text\">{{data.nameProvider}}</h2>\n </div>\n <div class=\"border-r container-text\" style=\"width:15%\">\n <h2 class=\"fw-bold\">Direcci\u00F3n:</h2>\n </div>\n <div class=\"container-text text-content\" style=\"width:35%\">\n <h2 class=\"wrap-text\">{{data.addressProvider}}</h2>\n </div>\n </div>\n\n <div class=\"borde container-headers\">\n <h2>Detalles del servicio</h2>\n </div>\n\n <div class=\"borde w-100 description-section\">\n <h2 class=\"wrap-text text-start\">{{data.description}}</h2>\n </div>\n\n <div class=\"borde w-100 flexible-row\">\n <div class=\"border-r container-text\" style=\"width:35%\">\n <h2 class=\"fw-bold\">AUTORIZADA POR:</h2>\n </div>\n <div class=\"container-text text-content\" style=\"width:65%\">\n <h2 class=\"wrap-text\">{{data.approved_by}}</h2>\n </div>\n </div>\n\n <!-- piso -->\n <div class=\"borde d-flex flex-column align-items-center justify-content-center w-100 footer-section\">\n <h2>Favor adjuntar la orden a la factura o cuenta de cobro</h2>\n <h2 class=\"wrap-text\">{{data.mail}}</h2>\n </div>\n\n </div>\n</div>\n\n<div class=\"download-container\">\n <button (click)=\"generatePdfWithHtml2Canvas()\" color='primary' mat-raised-button style=\"margin-right: 10px;\">\n Generar PDF\n </button>\n <!-- <button (click)=\"generatePdfWithJsPDFVersion2()\" color='warn' mat-raised-button style=\"margin-right: 10px;\">\n Generar PDF (version 2.0)\n </button>\n <button (click)=\"generatePdfWithJsPDFVersion3()\" color='accent' mat-raised-button>\n <mat-icon>picture_as_pdf</mat-icon>\n Generar PDF (version 3.0)\n </button> -->\n\n</div>", styles: [".img{background-size:100%!important;background-repeat:no-repeat!important;background-position:center!important;background-size:contain!important;height:22mm!important;margin:0!important;padding:0!important}h2{font-size:1rem!important;line-height:1.2!important;margin:0!important;padding:0!important;text-align:center!important}h3{line-height:1.2!important;margin:0!important;padding:0!important;text-align:center!important}.text-header{line-height:1.5!important;font-weight:700!important}.text-uppercase{text-transform:uppercase!important}.wrap-text{white-space:pre-wrap!important}.text-content{padding:5px!important;word-wrap:break-word!important;overflow-wrap:break-word!important}.borde{border:1px solid blue!important}.border-r{border-right:1px solid blue!important;min-height:100%!important;align-self:stretch!important}.container-text{display:flex!important;justify-content:center!important;align-items:center!important;min-height:inherit!important}.container-headers{display:flex!important;align-items:center!important;justify-content:space-evenly!important;width:100%!important;min-height:8mm!important;background:rgba(240,244,255,.6117647059)!important;padding:5px!important;word-wrap:break-word!important;overflow-wrap:break-word!important}.container-headers h2{font-weight:700!important}.flexible-row{display:flex!important;flex-direction:row!important;align-items:stretch!important;min-height:11mm!important}.header-section{min-height:25mm!important}.footer-section{min-height:14mm!important;background:rgba(240,244,255,.35)!important;padding:5px!important;word-wrap:break-word!important;overflow-wrap:break-word!important}.description-section{min-height:20mm!important;padding:10px!important;word-wrap:break-word!important;overflow-wrap:break-word!important}.w-100{width:100%!important}.text-start{text-align:start!important}.white-background{background-color:#fff!important}.download-container{display:flex!important;justify-content:center!important;margin-top:15px!important}\n"] }]
|
|
141
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
142
|
+
type: Inject,
|
|
143
|
+
args: [MAT_DIALOG_DATA]
|
|
144
|
+
}] }, { type: i1.MatDialog }, { type: i2.MessageService }, { type: i3.WorkOrderPdfService }]; } });
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtb3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9yZXBvcnQvdGVtcGxhdGUtb3QvdGVtcGxhdGUtb3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9yZXBvcnQvdGVtcGxhdGUtb3QvdGVtcGxhdGUtb3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUEyQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBT3BGLE1BQU0sT0FBTyxtQkFBbUI7SUF1QjlCLFlBQ1MsU0FBNEMsRUFDbkIsU0FBUyxFQUNqQyxNQUFpQixFQUNsQixPQUF1QixFQUN0QixtQkFBd0M7UUFKekMsY0FBUyxHQUFULFNBQVMsQ0FBbUM7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBQTtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2xCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3RCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUExQmxELFNBQUksR0FBRztZQUNMLElBQUksRUFBRSxFQUFFO1lBQ1IsR0FBRyxFQUFFLEVBQUU7WUFDUCxPQUFPLEVBQUUsRUFBRTtZQUNYLFNBQVMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLEVB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Q0FBQztRQUM5QixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O2dIQW5KVSxtQkFBbUIsOENBeUJwQixlQUFlO29HQXpCZCxtQkFBbUIsdURDWmhDLHE2S0E0SE07MkZEaEhPLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7OzBCQTZCeEIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya09yZGVyUGRmU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3dvcmstb3JkZXItcGRmLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsganNQREYgfSBmcm9tICdqc3BkZic7XG5pbXBvcnQgaHRtbDJjYW52YXMgZnJvbSAnaHRtbDJjYW52YXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZW1wbGF0ZS1vdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS1vdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RlbXBsYXRlLW90LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVPdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgZGF0YSA9IHtcbiAgICBuYW1lOiAnJyxcbiAgICBuaXQ6ICcnLFxuICAgIGFkZHJlc3M6ICcnLFxuICAgIHRlbGVwaG9uZTogJycsXG4gICAgbWFpbDogJycsXG4gICAgaW1hZ2U6ICcnLFxuICAgIGNvZGU6ICcnLFxuICAgIGRhdGU6ICcnLFxuICAgIHJlc3BvbnNpYmxlOiAnJyxcbiAgICB0aGlyZDogJycsXG4gICAgb2RvbWV0ZXI6ICcnLFxuICAgIGFwcHJvdmVkX2J5OiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgY29uc2VjdXRpdmU6ICcnLFxuICAgIG5hbWVQcm92aWRlcjogJycsXG4gICAgYWRkcmVzc1Byb3ZpZGVyOiAnJyxcbiAgICBhcmVhOiAnJyxcbiAgICBpbnZvaWNlUmVmZXJlbmNlOiAnJyxcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZU90Q29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGFNb2RhbCxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHB1YmxpYyBtZXNzYWdlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHdvcmtPcmRlclBkZlNlcnZpY2U6IFdvcmtPcmRlclBkZlNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGFNb2RhbC5kYXRhXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuZGF0YU1vZGFsLmF1dG9HZW5lcmF0ZSkge1xuICAgICAgaWYgKHRoaXMuZGF0YU1vZGFsLnVzZU5ld01ldGhvZCkge1xuICAgICAgICB0aGlzLmdlbmVyYXRlUGRmV2l0aEpzUERGVmVyc2lvbjIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVQZGZXaXRoSHRtbDJDYW52YXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVQZGZXaXRoSHRtbDJDYW52YXMoKTogdm9pZCB7XG4gICAgdGhpcy5tZXNzYWdlLm9wZW5Mb2FkaW5nKFwiQ2FyZ2FuZG9cIiwgXCJHZW5lcmFuZG8gUERGXCIpXG4gICAgY29uc3QgREFUQSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wbGF0ZU9UJyk7XG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKCdwJywgJ3B0JywgJ2E0Jyk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICBzY2FsZTogM1xuICAgIH07XG4gICAgaHRtbDJjYW52YXMoREFUQSwgb3B0aW9ucylcbiAgICAgIC50aGVuKChjYW52YXMpID0+IHtcbiAgICAgICAgY29uc3QgaW1nID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvUE5HJyk7XG5cbiAgICAgICAgY29uc3QgYnVmZmVyWCA9IDE1O1xuICAgICAgICBjb25zdCBidWZmZXJZID0gMTU7XG4gICAgICAgIGNvbnN0IGltZ1Byb3BzID0gKGRvYyBhcyBhbnkpLmdldEltYWdlUHJvcGVydGllcyhpbWcpO1xuICAgICAgICBjb25zdCBwZGZXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpIC0gMiAqIGJ1ZmZlclg7XG4gICAgICAgIGNvbnN0IHBkZkhlaWdodCA9IChpbWdQcm9wcy5oZWlnaHQgKiBwZGZXaWR0aCkgLyBpbWdQcm9wcy53aWR0aDtcbiAgICAgICAgZG9jLmFkZEltYWdlKFxuICAgICAgICAgIGltZyxcbiAgICAgICAgICAnUE5HJyxcbiAgICAgICAgICBidWZmZXJYLFxuICAgICAgICAgIGJ1ZmZlclksXG4gICAgICAgICAgcGRmV2lkdGgsXG4gICAgICAgICAgcGRmSGVpZ2h0LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAnRkFTVCdcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGRvYztcbiAgICAgIH0pXG4gICAgICAudGhlbigoZG9jUmVzdWx0KSA9PiB7XG4gICAgICAgIGRvY1Jlc3VsdC5vdXRwdXQoJ2RhdGF1cmxuZXd3aW5kb3cnLCB7IGZpbGVuYW1lOiAncmVwb3J0ZS5wZGYnIH0pO1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpXG4gICAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKVxuICAgICAgfSk7XG4gIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZVBkZldpdGhKc1BERlZlcnNpb24yKCk6IHZvaWQge1xuICAgIHRoaXMubWVzc2FnZS5vcGVuTG9hZGluZyhcIkNhcmdhbmRvXCIsIFwiR2VuZXJhbmRvIFBERiBjb24gbnVldm8gbcOpdG9kb1wiKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkb2MgPSBuZXcganNQREYoJ3AnLCAncHQnLCAnbGV0dGVyJyk7XG4gICAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0V2lkdGgoKTtcbiAgICAgIGNvbnN0IG1hcmdpbiA9IDQwO1xuICAgICAgbGV0IGN1cnJlbnRZID0gbWFyZ2luO1xuXG4gICAgICAvLyBFbmNhYmV6YWRvIHNpbXBsZVxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoMTgpO1xuICAgICAgY29uc3QgdGl0bGUgPSAnT1JERU4gREUgVFJBQkFKTyc7XG4gICAgICBjb25zdCB0aXRsZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0aXRsZSk7XG4gICAgICBkb2MudGV4dCh0aXRsZSwgKHBhZ2VXaWR0aCAtIHRpdGxlV2lkdGgpIC8gMiwgY3VycmVudFkpO1xuICAgICAgY3VycmVudFkgKz0gMzA7XG5cbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxNCk7XG4gICAgICBjb25zdCBudW1iZXJUZXh0ID0gYE7CsCAke3RoaXMuZGF0YS5jb25zZWN1dGl2ZX1gO1xuICAgICAgY29uc3QgbnVtYmVyV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKG51bWJlclRleHQpO1xuICAgICAgZG9jLnRleHQobnVtYmVyVGV4dCwgKHBhZ2VXaWR0aCAtIG51bWJlcldpZHRoKSAvIDIsIGN1cnJlbnRZKTtcbiAgICAgIGN1cnJlbnRZICs9IDQwO1xuXG4gICAgICAvLyBJbmZvcm1hY2nDs24gYsOhc2ljYVxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMik7XG5cbiAgICAgIGNvbnN0IGluZm8gPSBbXG4gICAgICAgIGBFbXByZXNhOiAke3RoaXMuZGF0YS5uYW1lfWAsXG4gICAgICAgIGBOSVQ6ICR7dGhpcy5kYXRhLm5pdH1gLFxuICAgICAgICBgw4FyZWE6ICR7dGhpcy5kYXRhLmFyZWF9YCxcbiAgICAgICAgYEPDs2RpZ286ICR7dGhpcy5kYXRhLmNvZGV9YCxcbiAgICAgICAgYEZlY2hhOiAke3RoaXMuZGF0YS5kYXRlfWAsXG4gICAgICAgIGBPcGVyYXJpbzogJHt0aGlzLmRhdGEucmVzcG9uc2libGV9YCxcbiAgICAgICAgYFByb3ZlZWRvcjogJHt0aGlzLmRhdGEubmFtZVByb3ZpZGVyfWAsXG4gICAgICAgIGBEZXNjcmlwY2nDs246ICR7dGhpcy5kYXRhLmRlc2NyaXB0aW9ufWBcbiAgICAgIF07XG5cbiAgICAgIGluZm8uZm9yRWFjaChsaW5lID0+IHtcbiAgICAgICAgZG9jLnRleHQobGluZSwgbWFyZ2luLCBjdXJyZW50WSk7XG4gICAgICAgIGN1cnJlbnRZICs9IDIwO1xuICAgICAgfSk7XG5cbiAgICAgIGRvYy5vdXRwdXQoJ2RhdGF1cmxuZXd3aW5kb3cnLCB7IGZpbGVuYW1lOiAnb3JkZW5fdHJhYmFqby5wZGYnIH0pO1xuICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKTtcbiAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2VuZXJhbmRvIFBERiBudWV2bzonLCBlcnJvcik7XG4gICAgICB0aGlzLm1lc3NhZ2UuY2xvc2VMb2FkaW5nKCk7XG4gICAgICB0aGlzLmdlbmVyYXRlUGRmV2l0aEh0bWwyQ2FudmFzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlUGRmV2l0aEpzUERGVmVyc2lvbjMoKTogdm9pZCB7XG4gICAgdGhpcy5tZXNzYWdlLm9wZW5Mb2FkaW5nKFwiQ2FyZ2FuZG9cIiwgXCJHZW5lcmFuZG8gUERGIHByb2Zlc2lvbmFsXCIpO1xuXG4gICAgdGhpcy53b3JrT3JkZXJQZGZTZXJ2aWNlLmdlbmVyYXRlV29ya09yZGVyUERGKHRoaXMuZGF0YSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlLmNsb3NlTG9hZGluZygpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2VuZXJhbmRvIFBERiBwcm9mZXNpb25hbDonLCBlcnJvcik7XG4gICAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVBkZldpdGhIdG1sMkNhbnZhcygpO1xuICAgICAgfSk7XG4gIH1cblxuXG5cblxufVxuIiwiPGRpdiBpZD1cInRlbXBsYXRlT1RcIiAjdGVtcGxhdGVPVD5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHctMTAwIHdoaXRlLWJhY2tncm91bmRcIj5cblxuICAgICAgICA8IS0tIEVuY2FiZXphZG8gIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGUgdy0xMDAgZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBoZWFkZXItc2VjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDo4MCVcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWhlYWRlciB0ZXh0LXVwcGVyY2FzZSB3cmFwLXRleHRcIj57e2RhdGEubmFtZX19PC9oMj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWhlYWRlciB3cmFwLXRleHRcIj5OSVQ6IHt7ZGF0YS5uaXR9fTwvaDI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZXZlbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtaGVhZGVyIHdyYXAtdGV4dFwiPnt7ZGF0YS5hZGRyZXNzfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LWhlYWRlciB3cmFwLXRleHRcIj5URUw6IHt7ZGF0YS50ZWxlcGhvbmV9fTwvaDM+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoyMCVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nIHctMTAwXCIgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnICsgZGF0YS5pbWFnZSArICcpJ1wiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSBjb250YWluZXItaGVhZGVyc1wiPlxuICAgICAgICAgICAgPGgyPk9yZGVuIGRlIHRyYWJham88L2gyPlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+TsKwOiB7e2RhdGEuY29uc2VjdXRpdmV9fTwvaDI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ3VlcnBvIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGUgdy0xMDAgZmxleGlibGUtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjEyJVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj7DgXJlYTo8L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDozMiVcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEuYXJlYX19PC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjEyJVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5Dw7NkaWdvOjwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItciBjb250YWluZXItdGV4dCB0ZXh0LWNvbnRlbnRcIiBzdHlsZT1cIndpZHRoOjE2JVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIndyYXAtdGV4dFwiPnt7ZGF0YS5jb2RlfX08L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjEyJVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5GZWNoYTo8L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDoxNiVcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEuZGF0ZX19PC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGUgdy0xMDAgZmxleGlibGUtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjEyJVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5PcGVyYXJpbzo8L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDozMiVcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEucmVzcG9uc2libGV9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItciBjb250YWluZXItdGV4dFwiIHN0eWxlPVwid2lkdGg6MTIlXCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZnctYm9sZFwiPk9kw7NtZXRybzo8L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDoxNiVcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEub2RvbWV0ZXJ9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjEyJVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5SZWZlcmVuY2lhIEZhY3R1cmE6PC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6MTYlXCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+e3tkYXRhLmludm9pY2VSZWZlcmVuY2V9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlIGNvbnRhaW5lci1oZWFkZXJzXCI+XG4gICAgICAgICAgICA8aDI+RGF0b3MgZGVsIHByb3ZlZWRvcjwvaDI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSBmbGV4aWJsZS1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItciBjb250YWluZXItdGV4dFwiIHN0eWxlPVwid2lkdGg6MTUlXCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZnctYm9sZFwiPk5vbWJyZTo8L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDozNSVcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEubmFtZVByb3ZpZGVyfX08L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjE1JVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5EaXJlY2Npw7NuOjwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItdGV4dCB0ZXh0LWNvbnRlbnRcIiBzdHlsZT1cIndpZHRoOjM1JVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIndyYXAtdGV4dFwiPnt7ZGF0YS5hZGRyZXNzUHJvdmlkZXJ9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlIGNvbnRhaW5lci1oZWFkZXJzXCI+XG4gICAgICAgICAgICA8aDI+RGV0YWxsZXMgZGVsIHNlcnZpY2lvPC9oMj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlIHctMTAwIGRlc2NyaXB0aW9uLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxoMiBjbGFzcz1cIndyYXAtdGV4dCB0ZXh0LXN0YXJ0XCI+e3tkYXRhLmRlc2NyaXB0aW9ufX08L2gyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGUgdy0xMDAgZmxleGlibGUtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjM1JVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5BVVRPUklaQURBIFBPUjo8L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDo2NSVcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEuYXBwcm92ZWRfYnl9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBwaXNvIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGUgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwIGZvb3Rlci1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8aDI+RmF2b3IgYWRqdW50YXIgbGEgb3JkZW4gYSBsYSBmYWN0dXJhIG8gY3VlbnRhIGRlIGNvYnJvPC9oMj5cbiAgICAgICAgICAgIDxoMiBjbGFzcz1cIndyYXAtdGV4dFwiPnt7ZGF0YS5tYWlsfX08L2gyPlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJkb3dubG9hZC1jb250YWluZXJcIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJnZW5lcmF0ZVBkZldpdGhIdG1sMkNhbnZhcygpXCIgY29sb3I9J3ByaW1hcnknIG1hdC1yYWlzZWQtYnV0dG9uIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4O1wiPlxuICAgICAgICBHZW5lcmFyIFBERlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS0gPGJ1dHRvbiAoY2xpY2spPVwiZ2VuZXJhdGVQZGZXaXRoSnNQREZWZXJzaW9uMigpXCIgY29sb3I9J3dhcm4nIG1hdC1yYWlzZWQtYnV0dG9uIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4O1wiPlxuICAgICAgICAgICAgR2VuZXJhciBQREYgKHZlcnNpb24gMi4wKVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImdlbmVyYXRlUGRmV2l0aEpzUERGVmVyc2lvbjMoKVwiIGNvbG9yPSdhY2NlbnQnIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAgICA8bWF0LWljb24+cGljdHVyZV9hc19wZGY8L21hdC1pY29uPlxuICAgICAgICBHZW5lcmFyIFBERiAodmVyc2lvbiAzLjApXG4gICAgPC9idXR0b24+IC0tPlxuXG48L2Rpdj4iXX0=
|