iptdevs-design-system 2.7.29 → 2.7.31

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 (40) hide show
  1. package/esm2020/lib/cod/cod-documents-section/cod-documents-section.component.mjs +16 -0
  2. package/esm2020/lib/cod/cod-form/cod-form.component.mjs +227 -0
  3. package/esm2020/lib/cod/cod.module.mjs +86 -0
  4. package/esm2020/lib/cod/logic/calculate-quotes.service.mjs +72 -0
  5. package/esm2020/lib/cod/logic/cod-form-controls.mjs +91 -0
  6. package/esm2020/lib/cod/logic/cod-form-steps.mjs +29 -0
  7. package/esm2020/lib/cod/logic/communicator.service.mjs +28 -0
  8. package/esm2020/lib/cod/logic/local-storage-cod.service.mjs +39 -0
  9. package/esm2020/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.mjs +145 -0
  10. package/esm2020/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.mjs +251 -0
  11. package/esm2020/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.mjs +200 -0
  12. package/esm2020/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.mjs +175 -0
  13. package/esm2020/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.mjs +255 -0
  14. package/esm2020/lib/core/core.module.mjs +6 -3
  15. package/esm2020/lib/core/services/copies.service.mjs +17 -0
  16. package/esm2020/lib/core/utils/copies.mjs +214 -0
  17. package/esm2020/lib/design-system.module.mjs +8 -4
  18. package/esm2020/public-api.mjs +19 -1
  19. package/fesm2015/iptdevs-design-system.mjs +1790 -51
  20. package/fesm2015/iptdevs-design-system.mjs.map +1 -1
  21. package/fesm2020/iptdevs-design-system.mjs +1790 -51
  22. package/fesm2020/iptdevs-design-system.mjs.map +1 -1
  23. package/lib/cod/cod-documents-section/cod-documents-section.component.d.ts +8 -0
  24. package/lib/cod/cod-form/cod-form.component.d.ts +37 -0
  25. package/lib/cod/cod.module.d.ts +20 -0
  26. package/lib/cod/logic/calculate-quotes.service.d.ts +14 -0
  27. package/lib/cod/logic/cod-form-controls.d.ts +16 -0
  28. package/lib/cod/logic/cod-form-steps.d.ts +15 -0
  29. package/lib/cod/logic/communicator.service.d.ts +13 -0
  30. package/lib/cod/logic/local-storage-cod.service.d.ts +8 -0
  31. package/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.d.ts +31 -0
  32. package/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.d.ts +47 -0
  33. package/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.d.ts +46 -0
  34. package/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.d.ts +35 -0
  35. package/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.d.ts +44 -0
  36. package/lib/core/services/copies.service.d.ts +7 -0
  37. package/lib/core/utils/copies.d.ts +1 -0
  38. package/lib/design-system.module.d.ts +2 -1
  39. package/package.json +1 -1
  40. package/public-api.d.ts +14 -0
@@ -0,0 +1,175 @@
1
+ import { Component, EventEmitter, Output } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { CodFormControls } from '../../logic/cod-form-controls';
4
+ import { CodFormSteps } from '../../logic/cod-form-steps';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ import * as i2 from "../../../core/services/parameters-service/parameters.service";
8
+ import * as i3 from "../../logic/cod-form-controls";
9
+ import * as i4 from "../../../components/atoms/select/select.component";
10
+ import * as i5 from "../../../components/atoms/input/input.component";
11
+ import * as i6 from "@angular/common";
12
+ import * as i7 from "primeng/button";
13
+ export class CodFormStepThreeComponent extends CodFormSteps {
14
+ constructor(fb, parameterService, codFormControls) {
15
+ super();
16
+ this.fb = fb;
17
+ this.parameterService = parameterService;
18
+ this.codFormControls = codFormControls;
19
+ this.changeStepEvent = new EventEmitter();
20
+ this.globalControls = new CodFormControls();
21
+ this.errorMessage = 'Faltan campos por llenar.';
22
+ this.needAtendants = [
23
+ { code: '1', name: 'Si requiere acudiente' },
24
+ { code: '2', name: 'No requiere acudiente' },
25
+ ];
26
+ // Controls del formulario
27
+ this.controls = new CodFormControls().controls[2];
28
+ }
29
+ ngOnInit() {
30
+ this.getParameters();
31
+ this.initForm();
32
+ this.startLocalStorageWork();
33
+ this.validateErrors();
34
+ }
35
+ validateErrors() {
36
+ this.codFormStepThree.valueChanges.subscribe(changes => {
37
+ if (this.codFormStepThree.controls['parent_name'].hasError('minlength')) {
38
+ this.errorMessage = 'Los nombres deben tener mínimo 3 caracteres';
39
+ }
40
+ else if (this.codFormStepThree.controls['parent_last_name'].hasError('minlength')) {
41
+ this.errorMessage = 'Los apellidos deben tener mínimo 5 caracteres';
42
+ }
43
+ else {
44
+ this.errorMessage = 'Faltan campos por llenar';
45
+ }
46
+ });
47
+ }
48
+ startLocalStorageWork() {
49
+ this.controls.forEach(control => {
50
+ let localStorageValue = this.readAndWriteLS(3, control.name);
51
+ this.codFormStepThree.controls[control.name].setValue(localStorageValue.value);
52
+ this.listenFormChanges(3, control.name, this.codFormStepThree.controls[control.name].valueChanges);
53
+ });
54
+ }
55
+ getParameters() {
56
+ this.parameterService.getCardTypes('col').subscribe((response) => {
57
+ this.idTypes = response.data;
58
+ });
59
+ this.parameterService.getIndicatives().subscribe((response) => {
60
+ this.indicatives = response.data;
61
+ });
62
+ }
63
+ initForm() {
64
+ this.codFormStepThree = this.fb.group({
65
+ parent_id_card_type: ['', [Validators.required]],
66
+ parent_id_card: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(20),],],
67
+ parent_last_name: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(32),],],
68
+ parent_name: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(32)],],
69
+ needAtendant: ['', [Validators.required], []],
70
+ parent_phone_indicative: ['', [Validators.required], []],
71
+ parent_occupation: ['', [Validators.required], []],
72
+ parent_address: ['', [Validators.required], []],
73
+ parent_phone_number: ['', [Validators.required, Validators.minLength(10), Validators.maxLength(15),],],
74
+ });
75
+ this.listenNeedAtendantField();
76
+ }
77
+ listenNeedAtendantField() {
78
+ const control = this.codFormStepThree.get('needAtendant');
79
+ control?.valueChanges.subscribe((change) => {
80
+ if (change === '1') {
81
+ // Poner validaciones
82
+ this.codFormStepThree.controls['parent_id_card_type'].setValidators([Validators.required]);
83
+ this.codFormStepThree.controls['parent_id_card'].setValidators([Validators.required, Validators.minLength(5), Validators.maxLength(20)]);
84
+ this.codFormStepThree.controls['parent_last_name'].setValidators([Validators.required, Validators.minLength(5), Validators.maxLength(32)]);
85
+ this.codFormStepThree.controls['parent_name'].setValidators([Validators.required, Validators.minLength(3), Validators.maxLength(32)]);
86
+ this.codFormStepThree.controls['parent_phone_indicative'].setValidators([Validators.required]);
87
+ this.codFormStepThree.controls['parent_occupation'].setValidators([Validators.required]);
88
+ this.codFormStepThree.controls['parent_address'].setValidators([Validators.required]);
89
+ this.codFormStepThree.controls['parent_phone_number'].setValidators([Validators.required, Validators.minLength(10), Validators.maxLength(15)]);
90
+ // Actualizar para que se tomen los cambios
91
+ this.updateValueAndValidity();
92
+ // Actualizar los controls globales
93
+ this.updateGlobalControls(change);
94
+ }
95
+ if (change === '2') {
96
+ // Quitar las validaciones
97
+ this.codFormStepThree.controls['parent_id_card_type'].clearValidators();
98
+ this.codFormStepThree.controls['parent_id_card'].clearValidators();
99
+ this.codFormStepThree.controls['parent_last_name'].clearValidators();
100
+ this.codFormStepThree.controls['parent_name'].clearValidators();
101
+ this.codFormStepThree.controls['parent_phone_indicative'].clearValidators();
102
+ this.codFormStepThree.controls['parent_occupation'].clearValidators();
103
+ this.codFormStepThree.controls['parent_address'].clearValidators();
104
+ this.codFormStepThree.controls['parent_phone_number'].clearValidators();
105
+ // Actualizar para que se tomen los cambios
106
+ this.updateValueAndValidity();
107
+ // Actualizar los controls globales
108
+ this.updateGlobalControls(change);
109
+ }
110
+ });
111
+ }
112
+ updateGlobalControls(change) {
113
+ let controls = this.controls.filter(control => control.name !== 'needAtendant');
114
+ controls.forEach(control => {
115
+ if (change === '1')
116
+ this.codFormControls.changeValue(3, control.name, true);
117
+ if (change === '2')
118
+ this.codFormControls.changeValue(3, control.name, false);
119
+ });
120
+ }
121
+ updateValueAndValidity() {
122
+ this.codFormStepThree.controls['parent_id_card_type'].updateValueAndValidity();
123
+ this.codFormStepThree.controls['parent_id_card'].updateValueAndValidity();
124
+ this.codFormStepThree.controls['parent_last_name'].updateValueAndValidity();
125
+ this.codFormStepThree.controls['parent_name'].updateValueAndValidity();
126
+ this.codFormStepThree.controls['parent_phone_indicative'].updateValueAndValidity();
127
+ this.codFormStepThree.controls['parent_occupation'].updateValueAndValidity();
128
+ this.codFormStepThree.controls['parent_address'].updateValueAndValidity();
129
+ this.codFormStepThree.controls['parent_phone_number'].updateValueAndValidity();
130
+ }
131
+ needAtendant() {
132
+ return this.codFormStepThree.controls['needAtendant'].value == 1;
133
+ }
134
+ sendForm() {
135
+ this.codFormStepThree.markAllAsTouched();
136
+ if (this.codFormStepThree.controls['needAtendant'].value === '1' && this.codFormStepThree.invalid)
137
+ return;
138
+ // Movernos al paso 4
139
+ this.changeStepEvent.emit(3);
140
+ }
141
+ // Eventos de los select
142
+ selectNeedAtendant(needAtendant) {
143
+ if (needAtendant !== 'Requiere acudiente') {
144
+ this.codFormStepThree.controls['needAtendant'].setValue(needAtendant);
145
+ }
146
+ else {
147
+ this.codFormStepThree.controls['needAtendant'].setValue(null);
148
+ }
149
+ }
150
+ selectIdTypeParents(value) {
151
+ if (value !== 'Tipo de documento') {
152
+ this.codFormStepThree.controls['parent_id_card_type'].setValue(value);
153
+ }
154
+ else {
155
+ this.codFormStepThree.controls['parent_id_card_type'].setValue(null);
156
+ }
157
+ }
158
+ selectIndicativesParents(value) {
159
+ if (value !== 'Indicativo') {
160
+ this.codFormStepThree.controls['parent_phone_indicative'].setValue(value);
161
+ }
162
+ else {
163
+ this.codFormStepThree.controls['parent_phone_indicative'].setValue(null);
164
+ }
165
+ }
166
+ }
167
+ CodFormStepThreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CodFormStepThreeComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ParameterService }, { token: i3.CodFormControls }], target: i0.ɵɵFactoryTarget.Component });
168
+ CodFormStepThreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: CodFormStepThreeComponent, selector: "app-cod-form-step-three", outputs: { changeStepEvent: "changeStepEvent" }, usesInheritance: true, ngImport: i0, template: "<form autocomplete=\"off\" [formGroup]=\"codFormStepThree\"class=\"grid\">\r\n <div class=\"col-12\">\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['needAtendant'].value\"\r\n [control]=\"codFormStepThree.controls['needAtendant']\"\r\n (eventSelect)=\"selectNeedAtendant($event)\"\r\n [data]=\"needAtendants\"\r\n [defaultText]=\"'Requiere acudiente'\"\r\n ></ipt-select>\r\n </div>\r\n\r\n <div *ngIf=\"needAtendant()\" class=\"grid col-12\">\r\n <div class=\"col-12 md:col-6\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nombres'\"\r\n [control]=\"codFormStepThree.controls['parent_name']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['parent_id_card_type'].value\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdTypeParents($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n [control]=\"codFormStepThree.controls['parent_id_card_type']\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['parent_phone_indicative'].value\"\r\n [data]=\"indicatives\"\r\n (eventSelect)=\"selectIndicativesParents($event)\"\r\n [defaultText]=\"'Indicativo'\"\r\n [control]=\"codFormStepThree.controls['parent_phone_indicative']\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Ocupaci\u00F3n'\"\r\n [control]=\"codFormStepThree.controls['parent_occupation']\"\r\n ></ipt-input>\r\n </div>\r\n <div class=\"col-12 md:col-6\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Apellidos'\"\r\n [control]=\"codFormStepThree.controls['parent_last_name']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de documento'\"\r\n [control]=\"codFormStepThree.controls['parent_id_card']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de tel\u00E9fono'\"\r\n [control]=\"codFormStepThree.controls['parent_phone_number']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Direcci\u00F3n - Oficina'\"\r\n [control]=\"codFormStepThree.controls['parent_address']\"\r\n ></ipt-input>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<div class=\"flex mt-3 align-items-center gap-3\">\r\n <span *ngIf=\"(codFormStepThree.invalid && codFormStepThree.touched) && needAtendant()\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span>\r\n <button type=\"submit\" class=\"ml-auto p-button-sm\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\r\n</div>\r\n", styles: [""], components: [{ type: i4.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "control"], outputs: ["eventSelect"] }, { type: i5.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal"], outputs: ["dateSelected"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }] });
169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CodFormStepThreeComponent, decorators: [{
170
+ type: Component,
171
+ args: [{ selector: 'app-cod-form-step-three', template: "<form autocomplete=\"off\" [formGroup]=\"codFormStepThree\"class=\"grid\">\r\n <div class=\"col-12\">\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['needAtendant'].value\"\r\n [control]=\"codFormStepThree.controls['needAtendant']\"\r\n (eventSelect)=\"selectNeedAtendant($event)\"\r\n [data]=\"needAtendants\"\r\n [defaultText]=\"'Requiere acudiente'\"\r\n ></ipt-select>\r\n </div>\r\n\r\n <div *ngIf=\"needAtendant()\" class=\"grid col-12\">\r\n <div class=\"col-12 md:col-6\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nombres'\"\r\n [control]=\"codFormStepThree.controls['parent_name']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['parent_id_card_type'].value\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdTypeParents($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n [control]=\"codFormStepThree.controls['parent_id_card_type']\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['parent_phone_indicative'].value\"\r\n [data]=\"indicatives\"\r\n (eventSelect)=\"selectIndicativesParents($event)\"\r\n [defaultText]=\"'Indicativo'\"\r\n [control]=\"codFormStepThree.controls['parent_phone_indicative']\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Ocupaci\u00F3n'\"\r\n [control]=\"codFormStepThree.controls['parent_occupation']\"\r\n ></ipt-input>\r\n </div>\r\n <div class=\"col-12 md:col-6\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Apellidos'\"\r\n [control]=\"codFormStepThree.controls['parent_last_name']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de documento'\"\r\n [control]=\"codFormStepThree.controls['parent_id_card']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de tel\u00E9fono'\"\r\n [control]=\"codFormStepThree.controls['parent_phone_number']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Direcci\u00F3n - Oficina'\"\r\n [control]=\"codFormStepThree.controls['parent_address']\"\r\n ></ipt-input>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<div class=\"flex mt-3 align-items-center gap-3\">\r\n <span *ngIf=\"(codFormStepThree.invalid && codFormStepThree.touched) && needAtendant()\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span>\r\n <button type=\"submit\" class=\"ml-auto p-button-sm\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\r\n</div>\r\n", styles: [""] }]
172
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ParameterService }, { type: i3.CodFormControls }]; }, propDecorators: { changeStepEvent: [{
173
+ type: Output
174
+ }] } });
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWZvcm0tc3RlcC10aHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdGhyZWUvY29kLWZvcm0tc3RlcC10aHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdGhyZWUvY29kLWZvcm0tc3RlcC10aHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQXNCLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7OztBQU85RSxNQUFNLE9BQU8seUJBQTBCLFNBQVEsWUFBWTtJQWdCekQsWUFDVSxFQUFlLEVBQ2YsZ0JBQWtDLEVBQ2xDLGVBQWdDO1FBRXhDLEtBQUssRUFBRSxDQUFDO1FBSkEsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBbEJoQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdkQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBS3ZDLGlCQUFZLEdBQVcsMkJBQTJCLENBQUM7UUFDbkQsa0JBQWEsR0FBVTtZQUNyQixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQzVDLEVBQUUsSUFBSSxFQUFFLEdB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Q0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBYTtRQUNwQyxJQUFJLEtBQUssS0FBSyxZQUFZLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzRTthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxRTtJQUNILENBQUM7O3NIQTNLVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qix1SUNYdEMsZzNGQW1FQTsyRkR4RGEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHlCQUF5QjsrSkFLekIsZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFBhcmFtZXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3BhcmFtZXRlcnMtc2VydmljZS9wYXJhbWV0ZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2RGb3JtQ29udHJvbHMgfSBmcm9tICcuLi8uLi9sb2dpYy9jb2QtZm9ybS1jb250cm9scyc7XHJcbmltcG9ydCB7IENvZEZvcm1TdGVwcywgbG9jYWxTdG9yYWdlVmFsdWVzIH0gZnJvbSAnLi4vLi4vbG9naWMvY29kLWZvcm0tc3RlcHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY29kLWZvcm0tc3RlcC10aHJlZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvZC1mb3JtLXN0ZXAtdGhyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvZC1mb3JtLXN0ZXAtdGhyZWUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2RGb3JtU3RlcFRocmVlQ29tcG9uZW50IGV4dGVuZHMgQ29kRm9ybVN0ZXBzIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAT3V0cHV0KCkgY2hhbmdlU3RlcEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgZ2xvYmFsQ29udHJvbHMgPSBuZXcgQ29kRm9ybUNvbnRyb2xzKCk7XHJcblxyXG4gIGlkVHlwZXM6IGFueTtcclxuICBpbmRpY2F0aXZlczogYW55O1xyXG4gIGNvZEZvcm1TdGVwVGhyZWUhOiBGb3JtR3JvdXA7XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnRmFsdGFuIGNhbXBvcyBwb3IgbGxlbmFyLic7XHJcbiAgbmVlZEF0ZW5kYW50czogYW55W10gPSBbXHJcbiAgICB7IGNvZGU6ICcxJywgbmFtZTogJ1NpIHJlcXVpZXJlIGFjdWRpZW50ZScgfSxcclxuICAgIHsgY29kZTogJzInLCBuYW1lOiAnTm8gcmVxdWllcmUgYWN1ZGllbnRlJyB9LFxyXG4gIF07XHJcblxyXG4gICAvLyBDb250cm9scyBkZWwgZm9ybXVsYXJpb1xyXG4gICBjb250cm9scyA9IG5ldyBDb2RGb3JtQ29udHJvbHMoKS5jb250cm9sc1syXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgcGFyYW1ldGVyU2VydmljZTogUGFyYW1ldGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29kRm9ybUNvbnRyb2xzOiBDb2RGb3JtQ29udHJvbHNcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0UGFyYW1ldGVycygpO1xyXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgdGhpcy5zdGFydExvY2FsU3RvcmFnZVdvcmsoKTtcclxuICAgIHRoaXMudmFsaWRhdGVFcnJvcnMoKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRXJyb3JzKCkge1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoY2hhbmdlcyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9uYW1lJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnTG9zIG5vbWJyZXMgZGViZW4gdGVuZXIgbcOtbmltbyAzIGNhcmFjdGVyZXMnO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2xhc3RfbmFtZSddLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSkge1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0xvcyBhcGVsbGlkb3MgZGViZW4gdGVuZXIgbcOtbmltbyA1IGNhcmFjdGVyZXMnO1xyXG4gICAgICB9XHJcbiAgICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdGYWx0YW4gY2FtcG9zIHBvciBsbGVuYXInO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc3RhcnRMb2NhbFN0b3JhZ2VXb3JrKCkge1xyXG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICBsZXQgbG9jYWxTdG9yYWdlVmFsdWU6IGxvY2FsU3RvcmFnZVZhbHVlcyA9IHRoaXMucmVhZEFuZFdyaXRlTFMoMywgY29udHJvbC5uYW1lKTtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzW2NvbnRyb2wubmFtZV0uc2V0VmFsdWUobG9jYWxTdG9yYWdlVmFsdWUudmFsdWUpO1xyXG4gICAgICB0aGlzLmxpc3RlbkZvcm1DaGFuZ2VzKDMsIGNvbnRyb2wubmFtZSwgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzW2NvbnRyb2wubmFtZV0udmFsdWVDaGFuZ2VzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyYW1ldGVycygpIHtcclxuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRDYXJkVHlwZXMoJ2NvbCcpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5pZFR5cGVzID0gcmVzcG9uc2UuZGF0YTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldEluZGljYXRpdmVzKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmluZGljYXRpdmVzID0gcmVzcG9uc2UuZGF0YTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5pdEZvcm0oKSB7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcGFyZW50X2lkX2NhcmRfdHlwZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBwYXJlbnRfaWRfY2FyZDogWycnLFtWYWxpZGF0b3JzLnJlcXVpcmVkLFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwKSxdLF0sXHJcbiAgICAgIHBhcmVudF9sYXN0X25hbWU6IFsnJyxbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSxWYWxpZGF0b3JzLm1heExlbmd0aCgzMiksXSxdLFxyXG4gICAgICBwYXJlbnRfbmFtZTogWycnLFtWYWxpZGF0b3JzLnJlcXVpcmVkLFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMyKV0sXSxcclxuICAgICAgbmVlZEF0ZW5kYW50OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSwgW11dLFxyXG4gICAgICBwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIFtdXSxcclxuICAgICAgcGFyZW50X29jY3VwYXRpb246IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbXV0sXHJcbiAgICAgIHBhcmVudF9hZGRyZXNzOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSwgW11dLFxyXG4gICAgICBwYXJlbnRfcGhvbmVfbnVtYmVyOiBbJycsW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5taW5MZW5ndGgoMTApLFZhbGlkYXRvcnMubWF4TGVuZ3RoKDE1KSxdLF0sXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMubGlzdGVuTmVlZEF0ZW5kYW50RmllbGQoKVxyXG4gIH1cclxuXHJcbiAgbGlzdGVuTmVlZEF0ZW5kYW50RmllbGQoKSB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb2RGb3JtU3RlcFRocmVlLmdldCgnbmVlZEF0ZW5kYW50Jyk7XHJcbiAgICBjb250cm9sPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgaWYgKGNoYW5nZSA9PT0gJzEnKSB7XHJcbiAgICAgICAgLy8gUG9uZXIgdmFsaWRhY2lvbmVzXHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZCddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjApXSlcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9sYXN0X25hbWUnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMyKV0pXHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfbmFtZSddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIpXSlcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfb2NjdXBhdGlvbiddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2FkZHJlc3MnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9waG9uZV9udW1iZXInXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSxWYWxpZGF0b3JzLm1heExlbmd0aCgxNSldKVxyXG5cclxuICAgICAgICAvLyBBY3R1YWxpemFyIHBhcmEgcXVlIHNlIHRvbWVuIGxvcyBjYW1iaW9zXHJcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgIC8vIEFjdHVhbGl6YXIgbG9zIGNvbnRyb2xzIGdsb2JhbGVzXHJcbiAgICAgICAgdGhpcy51cGRhdGVHbG9iYWxDb250cm9scyhjaGFuZ2UpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoYW5nZSA9PT0gJzInKSB7XHJcbiAgICAgICAgLy8gUXVpdGFyIGxhcyB2YWxpZGFjaW9uZXNcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkX3R5cGUnXS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkJ10uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfbGFzdF9uYW1lJ10uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfbmFtZSddLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX2luZGljYXRpdmUnXS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9vY2N1cGF0aW9uJ10uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfYWRkcmVzcyddLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX251bWJlciddLmNsZWFyVmFsaWRhdG9ycygpO1xyXG5cclxuICAgICAgICAvLyBBY3R1YWxpemFyIHBhcmEgcXVlIHNlIHRvbWVuIGxvcyBjYW1iaW9zXHJcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgIC8vIEFjdHVhbGl6YXIgbG9zIGNvbnRyb2xzIGdsb2JhbGVzXHJcbiAgICAgICAgdGhpcy51cGRhdGVHbG9iYWxDb250cm9scyhjaGFuZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlR2xvYmFsQ29udHJvbHMoY2hhbmdlOiBzdHJpbmcpIHtcclxuICAgIGxldCBjb250cm9scyA9IHRoaXMuY29udHJvbHMuZmlsdGVyKGNvbnRyb2wgPT4gY29udHJvbC5uYW1lICE9PSAnbmVlZEF0ZW5kYW50Jyk7XHJcbiAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICBpZiAoY2hhbmdlID09PSAnMScpIHRoaXMuY29kRm9ybUNvbnRyb2xzLmNoYW5nZVZhbHVlKDMsIGNvbnRyb2wubmFtZSwgdHJ1ZSlcclxuICAgICAgaWYgKGNoYW5nZSA9PT0gJzInKSB0aGlzLmNvZEZvcm1Db250cm9scy5jaGFuZ2VWYWx1ZSgzLCBjb250cm9sLm5hbWUsIGZhbHNlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCkge1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZCddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2xhc3RfbmFtZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X25hbWUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfb2NjdXBhdGlvbiddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2FkZHJlc3MnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9waG9uZV9udW1iZXInXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBuZWVkQXRlbmRhbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWyduZWVkQXRlbmRhbnQnXS52YWx1ZSA9PSAxO1xyXG4gIH1cclxuXHJcbiAgc2VuZEZvcm0oKSB7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgaWYgKHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1snbmVlZEF0ZW5kYW50J10udmFsdWUgPT09ICcxJyAmJiB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuaW52YWxpZCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIE1vdmVybm9zIGFsIHBhc28gNFxyXG4gICAgdGhpcy5jaGFuZ2VTdGVwRXZlbnQuZW1pdCgzKTtcclxuICB9XHJcblxyXG4gIC8vIEV2ZW50b3MgZGUgbG9zIHNlbGVjdFxyXG4gIHNlbGVjdE5lZWRBdGVuZGFudChuZWVkQXRlbmRhbnQ6IGFueSkge1xyXG4gICAgaWYgKG5lZWRBdGVuZGFudCAhPT0gJ1JlcXVpZXJlIGFjdWRpZW50ZScpIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWyduZWVkQXRlbmRhbnQnXS5zZXRWYWx1ZShuZWVkQXRlbmRhbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWyduZWVkQXRlbmRhbnQnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdElkVHlwZVBhcmVudHModmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlICE9PSAnVGlwbyBkZSBkb2N1bWVudG8nKSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2lkX2NhcmRfdHlwZSddLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2lkX2NhcmRfdHlwZSddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0SW5kaWNhdGl2ZXNQYXJlbnRzKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gJ0luZGljYXRpdm8nKSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX2luZGljYXRpdmUnXS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImNvZEZvcm1TdGVwVGhyZWVcImNsYXNzPVwiZ3JpZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1snbmVlZEF0ZW5kYW50J10udmFsdWVcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWyduZWVkQXRlbmRhbnQnXVwiXHJcbiAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3ROZWVkQXRlbmRhbnQoJGV2ZW50KVwiXHJcbiAgICAgIFtkYXRhXT1cIm5lZWRBdGVuZGFudHNcIlxyXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ1JlcXVpZXJlIGFjdWRpZW50ZSdcIlxyXG4gICAgPjwvaXB0LXNlbGVjdD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIm5lZWRBdGVuZGFudCgpXCIgY2xhc3M9XCJncmlkIGNvbC0xMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtNlwiPlxyXG4gICAgICA8aXB0LWlucHV0XHJcbiAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxyXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInTm9tYnJlcydcIlxyXG4gICAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9uYW1lJ11cIlxyXG4gICAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ10udmFsdWVcIlxyXG4gICAgICAgIFtkYXRhXT1cImlkVHlwZXNcIlxyXG4gICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJZFR5cGVQYXJlbnRzKCRldmVudClcIlxyXG4gICAgICAgIFtkZWZhdWx0VGV4dF09XCInVGlwbyBkZSBkb2N1bWVudG8nXCJcclxuICAgICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ11cIlxyXG4gICAgICA+PC9pcHQtc2VsZWN0PlxyXG4gICAgICA8aXB0LXNlbGVjdFxyXG4gICAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX2luZGljYXRpdmUnXS52YWx1ZVwiXHJcbiAgICAgICAgW2RhdGFdPVwiaW5kaWNhdGl2ZXNcIlxyXG4gICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJbmRpY2F0aXZlc1BhcmVudHMoJGV2ZW50KVwiXHJcbiAgICAgICAgW2RlZmF1bHRUZXh0XT1cIidJbmRpY2F0aXZvJ1wiXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX2luZGljYXRpdmUnXVwiXHJcbiAgICAgID48L2lwdC1zZWxlY3Q+XHJcbiAgICAgIDxpcHQtaW5wdXRcclxuICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXHJcbiAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidPY3VwYWNpw7NuJ1wiXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X29jY3VwYXRpb24nXVwiXHJcbiAgICAgID48L2lwdC1pbnB1dD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtNlwiPlxyXG4gICAgICA8aXB0LWlucHV0XHJcbiAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxyXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInQXBlbGxpZG9zJ1wiXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2xhc3RfbmFtZSddXCJcclxuICAgICAgPjwvaXB0LWlucHV0PlxyXG4gICAgICA8aXB0LWlucHV0XHJcbiAgICAgICAgW2lucHV0VHlwZV09XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidOw7ptZXJvIGRlIGRvY3VtZW50bydcIlxyXG4gICAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkJ11cIlxyXG4gICAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICAgIDxpcHQtaW5wdXRcclxuICAgICAgICBbaW5wdXRUeXBlXT1cIidudW1iZXInXCJcclxuICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ07Dum1lcm8gZGUgdGVsw6lmb25vJ1wiXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX251bWJlciddXCJcclxuICAgICAgPjwvaXB0LWlucHV0PlxyXG4gICAgICA8aXB0LWlucHV0XHJcbiAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxyXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInRGlyZWNjacOzbiAtIE9maWNpbmEnXCJcclxuICAgICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfYWRkcmVzcyddXCJcclxuICAgICAgPjwvaXB0LWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcbjxkaXYgY2xhc3M9XCJmbGV4IG10LTMgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgPHNwYW4gKm5nSWY9XCIoY29kRm9ybVN0ZXBUaHJlZS5pbnZhbGlkICYmIGNvZEZvcm1TdGVwVGhyZWUudG91Y2hlZCkgJiYgbmVlZEF0ZW5kYW50KClcIiBjbGFzcz1cInRleHQtcmVkLTUwMCBmb250LWJvbGQgdGV4dC1jZW50ZXIgbXQtMSBweS0yIGJnLXJlZC0xMDAgdy1mdWxsIGJvcmRlci1yb3VuZC14bFwiPnt7IGVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cclxuICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cIm1sLWF1dG8gcC1idXR0b24tc21cIiAoY2xpY2spPVwic2VuZEZvcm0oKVwiIHBCdXR0b24gbGFiZWw9XCJTaWd1aWVudGVcIiBpY29uPVwicGkgcGktYXJyb3ctcmlnaHRcIj48L2J1dHRvbj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,255 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { map } from 'rxjs';
4
+ import { CodFormControls } from '../../logic/cod-form-controls';
5
+ import { CodFormSteps } from '../../logic/cod-form-steps';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "../../../core/services/parameters-service/parameters.service";
9
+ import * as i3 from "../../../components/atoms/input/input.component";
10
+ import * as i4 from "../../../components/atoms/select/select.component";
11
+ import * as i5 from "@angular/common";
12
+ import * as i6 from "primeng/button";
13
+ export class CodFormStepTwoComponent extends CodFormSteps {
14
+ constructor(fb, parameterService) {
15
+ super();
16
+ this.fb = fb;
17
+ this.parameterService = parameterService;
18
+ this.changeStepEvent = new EventEmitter();
19
+ this.errorMessage = 'Faltan campos por llenar.';
20
+ this.hasErrors = false;
21
+ this.genders = [];
22
+ // Controls del formulario
23
+ this.controls = new CodFormControls().controls[1];
24
+ }
25
+ ngOnInit() {
26
+ this.getParameters();
27
+ this.initForm();
28
+ this.startLocalStorageWork();
29
+ this.validateErrors();
30
+ if (this.initialData)
31
+ this.setDataFromPreviusCod();
32
+ this.selectCountry(this.localStorageCOD.getCodFormData(2, 'country'));
33
+ }
34
+ setDataFromPreviusCod() {
35
+ this.codFormStepTwo.controls['student_name'].setValue(this.initialData.name);
36
+ this.codFormStepTwo.controls['student_last_name'].setValue(this.initialData.last_name);
37
+ this.codFormStepTwo.controls['student_id_card_type'].setValue(this.initialData.id_card_type);
38
+ this.codFormStepTwo.controls['student_id_card'].setValue(this.initialData.id_card);
39
+ this.codFormStepTwo.controls['student_phone_indicative'].setValue(this.initialData.phone_indicative);
40
+ this.codFormStepTwo.controls['student_phone_number'].setValue(this.initialData.phone_number);
41
+ this.codFormStepTwo.controls['birthdate'].setValue(this.initialData.birthdate);
42
+ }
43
+ validateErrors() {
44
+ this.codFormStepTwo.valueChanges.subscribe(changes => {
45
+ if (this.codFormStepTwo.controls['student_name'].hasError('minlength')) {
46
+ this.errorMessage = 'Los nombres deben tener mínimo 3 caracteres';
47
+ }
48
+ else if (this.codFormStepTwo.controls['student_last_name'].hasError('minlength')) {
49
+ this.errorMessage = 'Los apellidos deben tener mínimo 5 caracteres';
50
+ }
51
+ else if (this.codFormStepTwo.controls['password'].hasError('minlength')) {
52
+ this.errorMessage = 'La contraseña debe tener mínimo 6 caracteres';
53
+ }
54
+ else if (this.codFormStepTwo.controls['password'].value !== this.codFormStepTwo.controls['re_password'].value) {
55
+ this.errorMessage = 'Las contraseñas no coinciden';
56
+ }
57
+ else if (this.codFormStepTwo.controls['age'].errors) {
58
+ this.errorMessage = 'Fecha de nacimiento no válida';
59
+ }
60
+ else {
61
+ this.errorMessage = 'Faltan campos por llenar';
62
+ }
63
+ });
64
+ }
65
+ startLocalStorageWork() {
66
+ this.controls.forEach(control => {
67
+ let localStorageValue = this.readAndWriteLS(2, control.name);
68
+ this.codFormStepTwo.controls[control.name].setValue(localStorageValue.value);
69
+ this.listenFormChanges(2, control.name, this.codFormStepTwo.controls[control.name].valueChanges);
70
+ });
71
+ }
72
+ initForm() {
73
+ this.codFormStepTwo = this.fb.group({
74
+ student_address: ['', [Validators.required], []],
75
+ birthdate: ['', [Validators.required], []],
76
+ country: ['', [Validators.required], []],
77
+ state: ['', [Validators.required], []],
78
+ city: ['', [Validators.required], []],
79
+ student_id_card_type: ['', [Validators.required], []],
80
+ student_id_card: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(20)]],
81
+ student_last_name: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(32)]],
82
+ student_name: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(32)]],
83
+ student_email: ['', [Validators.required, Validators.email]],
84
+ nickname: ['', [Validators.required]],
85
+ gender: ['', [Validators.required]],
86
+ age: ['', [Validators.required], []],
87
+ student_occupation: ['', [Validators.required]],
88
+ stratum: ['', [Validators.required]],
89
+ grade: ['', [Validators.required]],
90
+ civil_status: ['', [Validators.required]],
91
+ student_phone_indicative: ['', [Validators.required], []],
92
+ student_phone_number: ['', [Validators.required, Validators.minLength(10), Validators.maxLength(15)]],
93
+ password: ['', [Validators.required, Validators.minLength(6)]],
94
+ re_password: ['', [Validators.required, Validators.minLength(6)]],
95
+ });
96
+ // Calcular edad y setear valor
97
+ this.codFormStepTwo.controls['birthdate'].valueChanges.subscribe({
98
+ next: (change) => {
99
+ let today = new Date();
100
+ let birthday = new Date(change);
101
+ let age = today.getFullYear() - birthday.getFullYear();
102
+ let month = today.getMonth() - birthday.getMonth();
103
+ if (month < 0 || (month === 0 && today.getDate() < birthday.getDate())) {
104
+ age--;
105
+ }
106
+ if (age < 3) {
107
+ this.errorMessage = 'Fecha de nacimiento no válida';
108
+ this.codFormStepTwo.controls['birthdate'].setErrors({
109
+ invalidAge: true
110
+ });
111
+ }
112
+ else {
113
+ this.codFormStepTwo.controls['birthdate'].setErrors(null);
114
+ }
115
+ this.codFormStepTwo.controls['age'].setValue(age);
116
+ }
117
+ });
118
+ }
119
+ getParameters() {
120
+ this.parameterService.getCardTypes('col').subscribe((response) => {
121
+ this.idTypes = response.data;
122
+ });
123
+ this.parameterService.getIndicatives().subscribe((response) => {
124
+ this.indicatives = response.data;
125
+ });
126
+ this.parameterService.getCountries().subscribe((response) => {
127
+ this.countries = response.data;
128
+ });
129
+ this.parameterService.getStratums().subscribe((response) => {
130
+ this.stratums = response.data;
131
+ });
132
+ this.parameterService.getCivilStatus().subscribe((response) => {
133
+ this.civilStatus = response.data;
134
+ });
135
+ this.parameterService.getGenders().pipe(map((response) => response.data))
136
+ .subscribe((genders) => {
137
+ genders.forEach(gender => {
138
+ let genderItem = {
139
+ code: gender.code,
140
+ name: gender.name_spanish
141
+ };
142
+ this.genders.push(genderItem);
143
+ });
144
+ });
145
+ }
146
+ sendForm() {
147
+ this.codFormStepTwo.markAllAsTouched();
148
+ if (this.codFormStepTwo.invalid)
149
+ return;
150
+ // Movernos al paso 3
151
+ this.changeStepEvent.emit(2);
152
+ }
153
+ getState(state) {
154
+ this.getCity(state);
155
+ }
156
+ getCity(state) {
157
+ this.parameterService.getCitiesByState(state).subscribe((response) => {
158
+ this.cities = response.data;
159
+ this.selectCity(this.localStorageCOD.getCodFormData(2, 'city'));
160
+ });
161
+ }
162
+ // Eventos de los select
163
+ selectCountry(country) {
164
+ if (country !== 'País de residencia') {
165
+ this.codFormStepTwo.controls['country'].setValue(country);
166
+ let iso = '';
167
+ if (country === '1')
168
+ iso = 'null';
169
+ if (country === '2')
170
+ iso = 'col';
171
+ if (country === '3')
172
+ iso = 'ven';
173
+ if (country === '4')
174
+ iso = 'usa';
175
+ this.parameterService.getStatesByCountry(iso).subscribe((response) => {
176
+ this.states = response.data;
177
+ this.selectState(this.localStorageCOD.getCodFormData(2, 'state'));
178
+ });
179
+ }
180
+ else {
181
+ this.codFormStepTwo.controls['country'].setValue(null);
182
+ }
183
+ this.countrySelected = country;
184
+ }
185
+ selectState(state) {
186
+ if (state !== 'Departamento o estado') {
187
+ this.codFormStepTwo.controls['state'].setValue(state);
188
+ this.getState(state);
189
+ }
190
+ else {
191
+ this.codFormStepTwo.controls['state'].setValue(null);
192
+ this.codFormStepTwo.controls['city'].setValue(null);
193
+ this.cities = [];
194
+ }
195
+ }
196
+ selectCity(city) {
197
+ if (city !== 'Ciudad de residencia') {
198
+ this.codFormStepTwo.controls['city'].setValue(city);
199
+ }
200
+ else {
201
+ this.codFormStepTwo.controls['city'].setValue(null);
202
+ }
203
+ }
204
+ selectIdType(idType) {
205
+ if (idType !== 'Tipo de documento') {
206
+ this.codFormStepTwo.controls['student_id_card_type'].setValue(idType);
207
+ }
208
+ else {
209
+ this.codFormStepTwo.controls['student_id_card_type'].setValue(null);
210
+ }
211
+ }
212
+ selectIndicatives(indicative) {
213
+ if (indicative !== 'Indicativo') {
214
+ this.codFormStepTwo.controls['student_phone_indicative'].setValue(indicative);
215
+ }
216
+ else {
217
+ this.codFormStepTwo.controls['student_phone_indicative'].setValue(null);
218
+ }
219
+ }
220
+ selectGender(gender) {
221
+ if (gender !== 'Género') {
222
+ this.codFormStepTwo.controls['gender'].setValue(gender);
223
+ }
224
+ else {
225
+ this.codFormStepTwo.controls['gender'].setValue(null);
226
+ }
227
+ }
228
+ selectStratum(stratum) {
229
+ if (stratum !== 'Estrato') {
230
+ this.codFormStepTwo.controls['stratum'].setValue(stratum);
231
+ }
232
+ else {
233
+ this.codFormStepTwo.controls['stratum'].setValue(null);
234
+ }
235
+ }
236
+ selectCivilStatus(civil_status) {
237
+ if (civil_status !== 'Estado civil') {
238
+ this.codFormStepTwo.controls['civil_status'].setValue(civil_status);
239
+ }
240
+ else {
241
+ this.codFormStepTwo.controls['civil_status'].setValue(null);
242
+ }
243
+ }
244
+ }
245
+ CodFormStepTwoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CodFormStepTwoComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ParameterService }], target: i0.ɵɵFactoryTarget.Component });
246
+ CodFormStepTwoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: CodFormStepTwoComponent, selector: "app-cod-form-step-two", inputs: { initialData: "initialData" }, outputs: { changeStepEvent: "changeStepEvent" }, usesInheritance: true, ngImport: i0, template: "<form autocomplete=\"off\" [formGroup]=\"codFormStepTwo\" class=\"grid\">\r\n\r\n <div class=\"col\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nombres'\"\r\n [control]=\"codFormStepTwo.controls['student_name']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['student_id_card_type'].value\"\r\n [control]=\"codFormStepTwo.controls['student_id_card_type']\"\r\n [selectCode]=\"codFormStepTwo.controls['student_id_card_type'].value === null ? 'Tipo de documento' : codFormStepTwo.controls['student_id_card_type'].value\"\r\n [isRequired]=\"true\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdType($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['country'].value\"\r\n [control]=\"codFormStepTwo.controls['country']\"\r\n [selectCode]=\"codFormStepTwo.controls['country'].value === null ? 'Pa\u00EDs de residencia' : codFormStepTwo.controls['country'].value\"\r\n (eventSelect)=\"selectCountry($event)\"\r\n [data]=\"countries\"\r\n [defaultText]=\"'Pa\u00EDs de residencia'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['city'].value\"\r\n [control]=\"codFormStepTwo.controls['city']\"\r\n [selectCode]=\"codFormStepTwo.controls['city'].value === null ? 'Ciudad de residencia' : codFormStepTwo.controls['city'].value\"\r\n (eventSelect)=\"selectCity($event)\"\r\n [data]=\"cities\"\r\n [defaultText]=\"'Ciudad de residencia'\"\r\n ></ipt-select>\r\n <ipt-input\r\n onfocus=\"(this.type='date')\"\r\n [inputType]=\"'date'\"\r\n [control]=\"codFormStepTwo.controls['birthdate']\"\r\n [placeHolder]=\"'Fecha de nacimiento'\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['gender'].value\"\r\n [control]=\"codFormStepTwo.controls['gender']\"\r\n [data]=\"genders\"\r\n (eventSelect)=\"selectGender($event)\"\r\n [defaultText]=\"'G\u00E9nero'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['stratum'].value\"\r\n [control]=\"codFormStepTwo.controls['stratum']\"\r\n [data]=\"stratums\"\r\n (eventSelect)=\"selectStratum($event)\"\r\n [defaultText]=\"'Estrato'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Grado'\"\r\n [control]=\"codFormStepTwo.controls['grade']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['student_phone_indicative'].value\"\r\n [control]=\"codFormStepTwo.controls['student_phone_indicative']\"\r\n [data]=\"indicatives\"\r\n (eventSelect)=\"selectIndicatives($event)\"\r\n [defaultText]=\"'Indicativo'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'email'\"\r\n [placeHolder]=\"'Correo electr\u00F3nico'\"\r\n [control]=\"codFormStepTwo.controls['student_email']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'password'\"\r\n [placeHolder]=\"'Repetir contrase\u00F1a'\"\r\n [control]=\"codFormStepTwo.controls['re_password']\"\r\n ></ipt-input>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Apellidos'\"\r\n [control]=\"codFormStepTwo.controls['student_last_name']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de documento'\"\r\n [control]=\"codFormStepTwo.controls['student_id_card']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['state'].value\"\r\n [control]=\"codFormStepTwo.controls['state']\"\r\n [selectCode]=\"codFormStepTwo.controls['state'].value === null ? 'Departamento o estado' : codFormStepTwo.controls['state'].value\"\r\n [isRequired]=\"true\"\r\n (eventSelect)=\"selectState($event)\"\r\n [data]=\"states\"\r\n [defaultText]=\"'Departamento o estado'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Direcci\u00F3n'\"\r\n [control]=\"codFormStepTwo.controls['student_address']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'Edad'\"\r\n [control]=\"codFormStepTwo.controls['age']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nickname'\"\r\n [control]=\"codFormStepTwo.controls['nickname']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Ocupaci\u00F3n'\"\r\n [control]=\"codFormStepTwo.controls['student_occupation']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['civil_status'].value\"\r\n [control]=\"codFormStepTwo.controls['civil_status']\"\r\n [data]=\"civilStatus\"\r\n (eventSelect)=\"selectCivilStatus($event)\"\r\n [defaultText]=\"'Estado civil'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de tel\u00E9fono'\"\r\n [control]=\"codFormStepTwo.controls['student_phone_number']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'password'\"\r\n [placeHolder]=\"'Contrase\u00F1a'\"\r\n [control]=\"codFormStepTwo.controls['password']\"\r\n ></ipt-input>\r\n </div>\r\n\r\n <div class=\"col-12\"></div>\r\n\r\n</form>\r\n\r\n<div class=\"flex mt-3 align-items-center gap-3\">\r\n <span *ngIf=\"codFormStepTwo.invalid && codFormStepTwo.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span>\r\n <button type=\"submit\" class=\"ml-auto p-button-sm\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\r\n</div>\r\n", styles: [""], components: [{ type: i3.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal"], outputs: ["dateSelected"] }, { type: i4.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "control"], outputs: ["eventSelect"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }] });
247
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CodFormStepTwoComponent, decorators: [{
248
+ type: Component,
249
+ args: [{ selector: 'app-cod-form-step-two', template: "<form autocomplete=\"off\" [formGroup]=\"codFormStepTwo\" class=\"grid\">\r\n\r\n <div class=\"col\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nombres'\"\r\n [control]=\"codFormStepTwo.controls['student_name']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['student_id_card_type'].value\"\r\n [control]=\"codFormStepTwo.controls['student_id_card_type']\"\r\n [selectCode]=\"codFormStepTwo.controls['student_id_card_type'].value === null ? 'Tipo de documento' : codFormStepTwo.controls['student_id_card_type'].value\"\r\n [isRequired]=\"true\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdType($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['country'].value\"\r\n [control]=\"codFormStepTwo.controls['country']\"\r\n [selectCode]=\"codFormStepTwo.controls['country'].value === null ? 'Pa\u00EDs de residencia' : codFormStepTwo.controls['country'].value\"\r\n (eventSelect)=\"selectCountry($event)\"\r\n [data]=\"countries\"\r\n [defaultText]=\"'Pa\u00EDs de residencia'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['city'].value\"\r\n [control]=\"codFormStepTwo.controls['city']\"\r\n [selectCode]=\"codFormStepTwo.controls['city'].value === null ? 'Ciudad de residencia' : codFormStepTwo.controls['city'].value\"\r\n (eventSelect)=\"selectCity($event)\"\r\n [data]=\"cities\"\r\n [defaultText]=\"'Ciudad de residencia'\"\r\n ></ipt-select>\r\n <ipt-input\r\n onfocus=\"(this.type='date')\"\r\n [inputType]=\"'date'\"\r\n [control]=\"codFormStepTwo.controls['birthdate']\"\r\n [placeHolder]=\"'Fecha de nacimiento'\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['gender'].value\"\r\n [control]=\"codFormStepTwo.controls['gender']\"\r\n [data]=\"genders\"\r\n (eventSelect)=\"selectGender($event)\"\r\n [defaultText]=\"'G\u00E9nero'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['stratum'].value\"\r\n [control]=\"codFormStepTwo.controls['stratum']\"\r\n [data]=\"stratums\"\r\n (eventSelect)=\"selectStratum($event)\"\r\n [defaultText]=\"'Estrato'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Grado'\"\r\n [control]=\"codFormStepTwo.controls['grade']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['student_phone_indicative'].value\"\r\n [control]=\"codFormStepTwo.controls['student_phone_indicative']\"\r\n [data]=\"indicatives\"\r\n (eventSelect)=\"selectIndicatives($event)\"\r\n [defaultText]=\"'Indicativo'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'email'\"\r\n [placeHolder]=\"'Correo electr\u00F3nico'\"\r\n [control]=\"codFormStepTwo.controls['student_email']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'password'\"\r\n [placeHolder]=\"'Repetir contrase\u00F1a'\"\r\n [control]=\"codFormStepTwo.controls['re_password']\"\r\n ></ipt-input>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Apellidos'\"\r\n [control]=\"codFormStepTwo.controls['student_last_name']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de documento'\"\r\n [control]=\"codFormStepTwo.controls['student_id_card']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['state'].value\"\r\n [control]=\"codFormStepTwo.controls['state']\"\r\n [selectCode]=\"codFormStepTwo.controls['state'].value === null ? 'Departamento o estado' : codFormStepTwo.controls['state'].value\"\r\n [isRequired]=\"true\"\r\n (eventSelect)=\"selectState($event)\"\r\n [data]=\"states\"\r\n [defaultText]=\"'Departamento o estado'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Direcci\u00F3n'\"\r\n [control]=\"codFormStepTwo.controls['student_address']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'Edad'\"\r\n [control]=\"codFormStepTwo.controls['age']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nickname'\"\r\n [control]=\"codFormStepTwo.controls['nickname']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Ocupaci\u00F3n'\"\r\n [control]=\"codFormStepTwo.controls['student_occupation']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['civil_status'].value\"\r\n [control]=\"codFormStepTwo.controls['civil_status']\"\r\n [data]=\"civilStatus\"\r\n (eventSelect)=\"selectCivilStatus($event)\"\r\n [defaultText]=\"'Estado civil'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de tel\u00E9fono'\"\r\n [control]=\"codFormStepTwo.controls['student_phone_number']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'password'\"\r\n [placeHolder]=\"'Contrase\u00F1a'\"\r\n [control]=\"codFormStepTwo.controls['password']\"\r\n ></ipt-input>\r\n </div>\r\n\r\n <div class=\"col-12\"></div>\r\n\r\n</form>\r\n\r\n<div class=\"flex mt-3 align-items-center gap-3\">\r\n <span *ngIf=\"codFormStepTwo.invalid && codFormStepTwo.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span>\r\n <button type=\"submit\" class=\"ml-auto p-button-sm\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\r\n</div>\r\n", styles: [""] }]
250
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ParameterService }]; }, propDecorators: { initialData: [{
251
+ type: Input
252
+ }], changeStepEvent: [{
253
+ type: Output
254
+ }] } });
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWZvcm0tc3RlcC10d28uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC9zdGVwcy9jb2QtZm9ybS1zdGVwLXR3by9jb2QtZm9ybS1zdGVwLXR3by5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdHdvL2NvZC1mb3JtLXN0ZXAtdHdvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBMEIsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQXNCLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7O0FBTzlFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxZQUFZO0lBb0J2RCxZQUNVLEVBQWUsRUFDZixnQkFBa0M7UUFFMUMsS0FBSyxFQUFFLENBQUM7UUFIQSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXBCbEMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBT3ZELGlCQUFZLEdBQVcsMkJBQTJCLENBQUM7UUFDbkQsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUkzQixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBR3BCLDBCQUEwQjtRQUMxQixhQUFRLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFPN0MsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25ELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN0RSxJQUFJLENBQUMsWUFBWSxHQUFHLDZDQUE2QyxDQUFDO2FBQ25FO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ2xGLElBQUksQ0FBQyxZQUFZLEdBQUcsK0NBQStDLENBQUM7YUFDckU7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ3pFLElBQUksQ0FBQyxZQUFZLEdBQUcsOENBQThDLENBQUM7YUFDcEU7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUMvRyxJQUFJLENBQUMsWUFBWSxHQUFHLDhCQUE4QixDQUFDO2FBQ3BEO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLCtCQUErQixDQUFDO2FBQ3JEO2lCQUNLO2dCQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsMEJBQTBCLENBQUM7YUFDaEQ7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxpQkFBaUIsR0FBdUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNsQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hELFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JELGVBQWUsRUFBRSxDQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEcsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUYsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUQsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLHdCQUF3QixFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6RCxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEUsQ0FBQyxDQUFDO1FBRUgsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDL0QsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRW5ELElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO29CQUN0RSxHQUFHLEVBQUUsQ0FBQztpQkFDUDtnQkFFRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRywrQkFBK0IsQ0FBQTtvQkFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUNsRCxVQUFVLEVBQUUsSUFBSTtxQkFDakIsQ0FBQyxDQUFBO2lCQUNIO3FCQUFNO29CQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDM0Q7Z0JBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUN0QzthQUNBLFNBQVMsQ0FBQyxDQUFDLE9BQWMsRUFBRSxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksVUFBVSxHQUFHO29CQUNmLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2lCQUMxQixDQUFBO2dCQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQy9CLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTztZQUFFLE9BQU87UUFFeEMscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBVTtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLGFBQWEsQ0FBQyxPQUFZO1FBQ3hCLElBQUksT0FBTyxLQUFLLG9CQUFvQixFQUFFO1lBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLE9BQU8sS0FBSyxHQUFHO2dCQUFFLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFDbEMsSUFBSSxPQUFPLEtBQUssR0FBRztnQkFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksT0FBTyxLQUFLLEdBQUc7Z0JBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLE9BQU8sS0FBSyxHQUFHO2dCQUFFLEdBQUcsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNuRSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksS0FBSyxLQUFLLHVCQUF1QixFQUFFO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLElBQUksSUFBSSxLQUFLLHNCQUFzQixFQUFFO1lBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLElBQUksTUFBTSxLQUFLLG1CQUFtQixFQUFFO1lBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZFO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxVQUFlO1FBQy9CLElBQUksVUFBVSxLQUFLLFlBQVksRUFBRTtZQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMvRTthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekU7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFZO1FBQ3hCLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0Q7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxZQUFpQjtRQUNqQyxJQUFJLFlBQVksS0FBSyxjQUFjLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3JFO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDOztvSEExUFUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsNktDWnBDLHE1TEFnSkE7MkZEcElhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSx1QkFBdUI7aUlBS3hCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUGFyYW1ldGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvcGFyYW1ldGVycy1zZXJ2aWNlL3BhcmFtZXRlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IG1hcCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvZEZvcm1Db250cm9scyB9IGZyb20gJy4uLy4uL2xvZ2ljL2NvZC1mb3JtLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgQ29kRm9ybVN0ZXBzLCBsb2NhbFN0b3JhZ2VWYWx1ZXMgfSBmcm9tICcuLi8uLi9sb2dpYy9jb2QtZm9ybS1zdGVwcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jb2QtZm9ybS1zdGVwLXR3bycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvZC1mb3JtLXN0ZXAtdHdvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb2QtZm9ybS1zdGVwLXR3by5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvZEZvcm1TdGVwVHdvQ29tcG9uZW50IGV4dGVuZHMgQ29kRm9ybVN0ZXBzIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBpbml0aWFsRGF0YT86IGFueTtcclxuICBAT3V0cHV0KCkgY2hhbmdlU3RlcEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIGNvZEZvcm1TdGVwVHdvITogRm9ybUdyb3VwO1xyXG4gIGNvdW50cnlTZWxlY3RlZDogYW55O1xyXG4gIGNvdW50cmllczogYW55O1xyXG4gIHN0YXRlczogYW55O1xyXG4gIGNpdGllczogYW55O1xyXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJ0ZhbHRhbiBjYW1wb3MgcG9yIGxsZW5hci4nO1xyXG4gIGhhc0Vycm9yczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlkVHlwZXM6IGFueTtcclxuICBpbmRpY2F0aXZlczogYW55O1xyXG4gIGNpdmlsU3RhdHVzOiBhbnk7XHJcbiAgZ2VuZGVyczogYW55W10gPSBbXTtcclxuICBzdHJhdHVtczogYW55O1xyXG5cclxuICAvLyBDb250cm9scyBkZWwgZm9ybXVsYXJpb1xyXG4gIGNvbnRyb2xzID0gbmV3IENvZEZvcm1Db250cm9scygpLmNvbnRyb2xzWzFdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBwYXJhbWV0ZXJTZXJ2aWNlOiBQYXJhbWV0ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldFBhcmFtZXRlcnMoKTtcclxuICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgIHRoaXMuc3RhcnRMb2NhbFN0b3JhZ2VXb3JrKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRlRXJyb3JzKClcclxuICAgIGlmICh0aGlzLmluaXRpYWxEYXRhKSB0aGlzLnNldERhdGFGcm9tUHJldml1c0NvZCgpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0Q291bnRyeSh0aGlzLmxvY2FsU3RvcmFnZUNPRC5nZXRDb2RGb3JtRGF0YSgyLCAnY291bnRyeScpKTtcclxuICB9XHJcblxyXG4gIHNldERhdGFGcm9tUHJldml1c0NvZCgpIHtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfbmFtZSddLnNldFZhbHVlKHRoaXMuaW5pdGlhbERhdGEubmFtZSk7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2xhc3RfbmFtZSddLnNldFZhbHVlKHRoaXMuaW5pdGlhbERhdGEubGFzdF9uYW1lKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfaWRfY2FyZF90eXBlJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5pZF9jYXJkX3R5cGUpO1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9pZF9jYXJkJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5pZF9jYXJkKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZSddLnNldFZhbHVlKHRoaXMuaW5pdGlhbERhdGEucGhvbmVfaW5kaWNhdGl2ZSk7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X3Bob25lX251bWJlciddLnNldFZhbHVlKHRoaXMuaW5pdGlhbERhdGEucGhvbmVfbnVtYmVyKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2JpcnRoZGF0ZSddLnNldFZhbHVlKHRoaXMuaW5pdGlhbERhdGEuYmlydGhkYXRlKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRXJyb3JzKCkge1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFR3by52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNoYW5nZXMgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9uYW1lJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnTG9zIG5vbWJyZXMgZGViZW4gdGVuZXIgbcOtbmltbyAzIGNhcmFjdGVyZXMnO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfbGFzdF9uYW1lJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnTG9zIGFwZWxsaWRvcyBkZWJlbiB0ZW5lciBtw61uaW1vIDUgY2FyYWN0ZXJlcyc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1sncGFzc3dvcmQnXS5oYXNFcnJvcignbWlubGVuZ3RoJykpIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdMYSBjb250cmFzZcOxYSBkZWJlIHRlbmVyIG3DrW5pbW8gNiBjYXJhY3RlcmVzJztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydwYXNzd29yZCddLnZhbHVlICE9PSB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydyZV9wYXNzd29yZCddLnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnTGFzIGNvbnRyYXNlw7FhcyBubyBjb2luY2lkZW4nO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2FnZSddLmVycm9ycykge1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZlY2hhIGRlIG5hY2ltaWVudG8gbm8gdsOhbGlkYSc7XHJcbiAgICAgIH1cclxuICAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhbHRhbiBjYW1wb3MgcG9yIGxsZW5hcic7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdGFydExvY2FsU3RvcmFnZVdvcmsoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGxldCBsb2NhbFN0b3JhZ2VWYWx1ZTogbG9jYWxTdG9yYWdlVmFsdWVzID0gdGhpcy5yZWFkQW5kV3JpdGVMUygyLCBjb250cm9sLm5hbWUpO1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzW2NvbnRyb2wubmFtZV0uc2V0VmFsdWUobG9jYWxTdG9yYWdlVmFsdWUudmFsdWUpO1xyXG4gICAgICB0aGlzLmxpc3RlbkZvcm1DaGFuZ2VzKDIsIGNvbnRyb2wubmFtZSwgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1tjb250cm9sLm5hbWVdLnZhbHVlQ2hhbmdlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXRGb3JtKCkge1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFR3byA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBzdHVkZW50X2FkZHJlc3M6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbXV0sXHJcbiAgICAgIGJpcnRoZGF0ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIFtdXSxcclxuICAgICAgY291bnRyeTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIFtdXSxcclxuICAgICAgc3RhdGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbXV0sXHJcbiAgICAgIGNpdHk6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbXV0sXHJcbiAgICAgIHN0dWRlbnRfaWRfY2FyZF90eXBlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSwgW11dLFxyXG4gICAgICBzdHVkZW50X2lkX2NhcmQ6IFsgJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjApXV0sXHJcbiAgICAgIHN0dWRlbnRfbGFzdF9uYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIpXV0sXHJcbiAgICAgIHN0dWRlbnRfbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMyKV1dLFxyXG4gICAgICBzdHVkZW50X2VtYWlsOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXV0sXHJcbiAgICAgIG5pY2tuYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGdlbmRlcjogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBhZ2U6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbXV0sXHJcbiAgICAgIHN0dWRlbnRfb2NjdXBhdGlvbjogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzdHJhdHVtOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGdyYWRlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGNpdmlsX3N0YXR1czogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzdHVkZW50X3Bob25lX2luZGljYXRpdmU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbXV0sXHJcbiAgICAgIHN0dWRlbnRfcGhvbmVfbnVtYmVyOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDE1KV1dLFxyXG4gICAgICBwYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildXSxcclxuICAgICAgcmVfcGFzc3dvcmQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDYWxjdWxhciBlZGFkIHkgc2V0ZWFyIHZhbG9yXHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydiaXJ0aGRhdGUnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGNoYW5nZSkgPT4ge1xyXG4gICAgICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgbGV0IGJpcnRoZGF5ID0gbmV3IERhdGUoY2hhbmdlKTtcclxuICAgICAgICBsZXQgYWdlID0gdG9kYXkuZ2V0RnVsbFllYXIoKSAtIGJpcnRoZGF5LmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgbGV0IG1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKSAtIGJpcnRoZGF5LmdldE1vbnRoKCk7XHJcblxyXG4gICAgICAgIGlmIChtb250aCA8IDAgfHwgKG1vbnRoID09PSAwICYmIHRvZGF5LmdldERhdGUoKSA8IGJpcnRoZGF5LmdldERhdGUoKSkpIHtcclxuICAgICAgICAgIGFnZS0tO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFnZSA8IDMpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZlY2hhIGRlIG5hY2ltaWVudG8gbm8gdsOhbGlkYSdcclxuICAgICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2JpcnRoZGF0ZSddLnNldEVycm9ycyh7XHJcbiAgICAgICAgICAgIGludmFsaWRBZ2U6IHRydWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2JpcnRoZGF0ZSddLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2FnZSddLnNldFZhbHVlKGFnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRQYXJhbWV0ZXJzKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldENhcmRUeXBlcygnY29sJykuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmlkVHlwZXMgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuZ2V0SW5kaWNhdGl2ZXMoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5kaWNhdGl2ZXMgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuZ2V0Q291bnRyaWVzKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmNvdW50cmllcyA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRTdHJhdHVtcygpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5zdHJhdHVtcyA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRDaXZpbFN0YXR1cygpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5jaXZpbFN0YXR1cyA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRHZW5kZXJzKCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5kYXRhKVxyXG4gICAgKVxyXG4gICAgLnN1YnNjcmliZSgoZ2VuZGVyczogYW55W10pID0+IHtcclxuICAgICAgZ2VuZGVycy5mb3JFYWNoKGdlbmRlciA9PiB7XHJcbiAgICAgICAgbGV0IGdlbmRlckl0ZW0gPSB7XHJcbiAgICAgICAgICBjb2RlOiBnZW5kZXIuY29kZSxcclxuICAgICAgICAgIG5hbWU6IGdlbmRlci5uYW1lX3NwYW5pc2hcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW5kZXJzLnB1c2goZ2VuZGVySXRlbSlcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZW5kRm9ybSgpIHtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUd28ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgaWYgKHRoaXMuY29kRm9ybVN0ZXBUd28uaW52YWxpZCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIE1vdmVybm9zIGFsIHBhc28gM1xyXG4gICAgdGhpcy5jaGFuZ2VTdGVwRXZlbnQuZW1pdCgyKTtcclxuICB9XHJcblxyXG4gIGdldFN0YXRlKHN0YXRlOiBhbnkpIHtcclxuICAgIHRoaXMuZ2V0Q2l0eShzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXR5KHN0YXRlOiBhbnkpIHtcclxuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRDaXRpZXNCeVN0YXRlKHN0YXRlKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuY2l0aWVzID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgdGhpcy5zZWxlY3RDaXR5KHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDIsICdjaXR5JykpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBFdmVudG9zIGRlIGxvcyBzZWxlY3RcclxuICBzZWxlY3RDb3VudHJ5KGNvdW50cnk6IGFueSkge1xyXG4gICAgaWYgKGNvdW50cnkgIT09ICdQYcOtcyBkZSByZXNpZGVuY2lhJykge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjb3VudHJ5J10uc2V0VmFsdWUoY291bnRyeSk7XHJcbiAgICAgIGxldCBpc28gPSAnJztcclxuICAgICAgaWYgKGNvdW50cnkgPT09ICcxJykgaXNvID0gJ251bGwnO1xyXG4gICAgICBpZiAoY291bnRyeSA9PT0gJzInKSBpc28gPSAnY29sJztcclxuICAgICAgaWYgKGNvdW50cnkgPT09ICczJykgaXNvID0gJ3Zlbic7XHJcbiAgICAgIGlmIChjb3VudHJ5ID09PSAnNCcpIGlzbyA9ICd1c2EnO1xyXG4gICAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuZ2V0U3RhdGVzQnlDb3VudHJ5KGlzbykuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdGVzID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICB0aGlzLnNlbGVjdFN0YXRlKHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDIsICdzdGF0ZScpKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjb3VudHJ5J10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvdW50cnlTZWxlY3RlZCA9IGNvdW50cnk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTdGF0ZShzdGF0ZTogYW55KSB7XHJcbiAgICBpZiAoc3RhdGUgIT09ICdEZXBhcnRhbWVudG8gbyBlc3RhZG8nKSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0YXRlJ10uc2V0VmFsdWUoc3RhdGUpO1xyXG4gICAgICB0aGlzLmdldFN0YXRlKHN0YXRlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0YXRlJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NpdHknXS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgdGhpcy5jaXRpZXMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdENpdHkoY2l0eTogYW55KSB7XHJcbiAgICBpZiAoY2l0eSAhPT0gJ0NpdWRhZCBkZSByZXNpZGVuY2lhJykge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjaXR5J10uc2V0VmFsdWUoY2l0eSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjaXR5J10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RJZFR5cGUoaWRUeXBlOiBhbnkpIHtcclxuICAgIGlmIChpZFR5cGUgIT09ICdUaXBvIGRlIGRvY3VtZW50bycpIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9pZF9jYXJkX3R5cGUnXS5zZXRWYWx1ZShpZFR5cGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9pZF9jYXJkX3R5cGUnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEluZGljYXRpdmVzKGluZGljYXRpdmU6IGFueSkge1xyXG4gICAgaWYgKGluZGljYXRpdmUgIT09ICdJbmRpY2F0aXZvJykge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X3Bob25lX2luZGljYXRpdmUnXS5zZXRWYWx1ZShpbmRpY2F0aXZlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZSddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0R2VuZGVyKGdlbmRlcjogYW55KSB7XHJcbiAgICBpZiAoZ2VuZGVyICE9PSAnR8OpbmVybycpIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snZ2VuZGVyJ10uc2V0VmFsdWUoZ2VuZGVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2dlbmRlciddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0U3RyYXR1bShzdHJhdHVtOiBhbnkpIHtcclxuICAgIGlmIChzdHJhdHVtICE9PSAnRXN0cmF0bycpIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3RyYXR1bSddLnNldFZhbHVlKHN0cmF0dW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3RyYXR1bSddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2l2aWxTdGF0dXMoY2l2aWxfc3RhdHVzOiBhbnkpIHtcclxuICAgIGlmIChjaXZpbF9zdGF0dXMgIT09ICdFc3RhZG8gY2l2aWwnKSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NpdmlsX3N0YXR1cyddLnNldFZhbHVlKGNpdmlsX3N0YXR1cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjaXZpbF9zdGF0dXMnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJjb2RGb3JtU3RlcFR3b1wiIGNsYXNzPVwiZ3JpZFwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidOb21icmVzJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X25hbWUnXVwiXHJcbiAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICA8aXB0LXNlbGVjdFxyXG4gICAgICBbaW5pdGlhbFZhbHVlXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2lkX2NhcmRfdHlwZSddLnZhbHVlXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfaWRfY2FyZF90eXBlJ11cIlxyXG4gICAgICBbc2VsZWN0Q29kZV09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9pZF9jYXJkX3R5cGUnXS52YWx1ZSA9PT0gbnVsbCA/ICdUaXBvIGRlIGRvY3VtZW50bycgOiBjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9pZF9jYXJkX3R5cGUnXS52YWx1ZVwiXHJcbiAgICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICBbZGF0YV09XCJpZFR5cGVzXCJcclxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdElkVHlwZSgkZXZlbnQpXCJcclxuICAgICAgW2RlZmF1bHRUZXh0XT1cIidUaXBvIGRlIGRvY3VtZW50bydcIlxyXG4gICAgPjwvaXB0LXNlbGVjdD5cclxuICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NvdW50cnknXS52YWx1ZVwiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjb3VudHJ5J11cIlxyXG4gICAgICBbc2VsZWN0Q29kZV09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snY291bnRyeSddLnZhbHVlID09PSBudWxsID8gJ1Bhw61zIGRlIHJlc2lkZW5jaWEnIDogY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NvdW50cnknXS52YWx1ZVwiXHJcbiAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RDb3VudHJ5KCRldmVudClcIlxyXG4gICAgICBbZGF0YV09XCJjb3VudHJpZXNcIlxyXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ1Bhw61zIGRlIHJlc2lkZW5jaWEnXCJcclxuICAgID48L2lwdC1zZWxlY3Q+XHJcbiAgICA8aXB0LXNlbGVjdFxyXG4gICAgICBbaW5pdGlhbFZhbHVlXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjaXR5J10udmFsdWVcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snY2l0eSddXCJcclxuICAgICAgW3NlbGVjdENvZGVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NpdHknXS52YWx1ZSA9PT0gbnVsbCA/ICdDaXVkYWQgZGUgcmVzaWRlbmNpYScgOiBjb2RGb3JtU3RlcFR3by5jb250cm9sc1snY2l0eSddLnZhbHVlXCJcclxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdENpdHkoJGV2ZW50KVwiXHJcbiAgICAgIFtkYXRhXT1cImNpdGllc1wiXHJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInQ2l1ZGFkIGRlIHJlc2lkZW5jaWEnXCJcclxuICAgID48L2lwdC1zZWxlY3Q+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIG9uZm9jdXM9XCIodGhpcy50eXBlPSdkYXRlJylcIlxyXG4gICAgICBbaW5wdXRUeXBlXT1cIidkYXRlJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydiaXJ0aGRhdGUnXVwiXHJcbiAgICAgIFtwbGFjZUhvbGRlcl09XCInRmVjaGEgZGUgbmFjaW1pZW50bydcIlxyXG4gICAgPjwvaXB0LWlucHV0PlxyXG4gICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2dlbmRlciddLnZhbHVlXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2dlbmRlciddXCJcclxuICAgICAgW2RhdGFdPVwiZ2VuZGVyc1wiXHJcbiAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RHZW5kZXIoJGV2ZW50KVwiXHJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInR8OpbmVybydcIlxyXG4gICAgPjwvaXB0LXNlbGVjdD5cclxuICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0cmF0dW0nXS52YWx1ZVwiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHJhdHVtJ11cIlxyXG4gICAgICBbZGF0YV09XCJzdHJhdHVtc1wiXHJcbiAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RTdHJhdHVtKCRldmVudClcIlxyXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ0VzdHJhdG8nXCJcclxuICAgID48L2lwdC1zZWxlY3Q+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidHcmFkbydcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snZ3JhZGUnXVwiXHJcbiAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICA8aXB0LXNlbGVjdFxyXG4gICAgICBbaW5pdGlhbFZhbHVlXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X3Bob25lX2luZGljYXRpdmUnXS52YWx1ZVwiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X3Bob25lX2luZGljYXRpdmUnXVwiXHJcbiAgICAgIFtkYXRhXT1cImluZGljYXRpdmVzXCJcclxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdEluZGljYXRpdmVzKCRldmVudClcIlxyXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ0luZGljYXRpdm8nXCJcclxuICAgID48L2lwdC1zZWxlY3Q+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ2VtYWlsJ1wiXHJcbiAgICAgIFtwbGFjZUhvbGRlcl09XCInQ29ycmVvIGVsZWN0csOzbmljbydcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9lbWFpbCddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICAgIDxpcHQtaW5wdXRcclxuICAgICAgW2lucHV0VHlwZV09XCIncGFzc3dvcmQnXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidSZXBldGlyIGNvbnRyYXNlw7FhJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydyZV9wYXNzd29yZCddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgPGlwdC1pbnB1dFxyXG4gICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXHJcbiAgICAgIFtwbGFjZUhvbGRlcl09XCInQXBlbGxpZG9zJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2xhc3RfbmFtZSddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICAgIDxpcHQtaW5wdXRcclxuICAgICAgW2lucHV0VHlwZV09XCInbnVtYmVyJ1wiXHJcbiAgICAgIFtwbGFjZUhvbGRlcl09XCInTsO6bWVybyBkZSBkb2N1bWVudG8nXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfaWRfY2FyZCddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0YXRlJ10udmFsdWVcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3RhdGUnXVwiXHJcbiAgICAgIFtzZWxlY3RDb2RlXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdGF0ZSddLnZhbHVlID09PSBudWxsID8gJ0RlcGFydGFtZW50byBvIGVzdGFkbycgOiBjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3RhdGUnXS52YWx1ZVwiXHJcbiAgICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0U3RhdGUoJGV2ZW50KVwiXHJcbiAgICAgIFtkYXRhXT1cInN0YXRlc1wiXHJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInRGVwYXJ0YW1lbnRvIG8gZXN0YWRvJ1wiXHJcbiAgICA+PC9pcHQtc2VsZWN0PlxyXG4gICAgPGlwdC1pbnB1dFxyXG4gICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXHJcbiAgICAgIFtwbGFjZUhvbGRlcl09XCInRGlyZWNjacOzbidcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9hZGRyZXNzJ11cIlxyXG4gICAgPjwvaXB0LWlucHV0PlxyXG4gICAgPGlwdC1pbnB1dFxyXG4gICAgICBbaW5wdXRUeXBlXT1cIidudW1iZXInXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidFZGFkJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydhZ2UnXVwiXHJcbiAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidOaWNrbmFtZSdcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snbmlja25hbWUnXVwiXHJcbiAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidPY3VwYWNpw7NuJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X29jY3VwYXRpb24nXVwiXHJcbiAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICA8aXB0LXNlbGVjdFxyXG4gICAgICBbaW5pdGlhbFZhbHVlXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjaXZpbF9zdGF0dXMnXS52YWx1ZVwiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjaXZpbF9zdGF0dXMnXVwiXHJcbiAgICAgIFtkYXRhXT1cImNpdmlsU3RhdHVzXCJcclxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdENpdmlsU3RhdHVzKCRldmVudClcIlxyXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ0VzdGFkbyBjaXZpbCdcIlxyXG4gICAgPjwvaXB0LXNlbGVjdD5cclxuICAgIDxpcHQtaW5wdXRcclxuICAgICAgW2lucHV0VHlwZV09XCInbnVtYmVyJ1wiXHJcbiAgICAgIFtwbGFjZUhvbGRlcl09XCInTsO6bWVybyBkZSB0ZWzDqWZvbm8nXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfcGhvbmVfbnVtYmVyJ11cIlxyXG4gICAgPjwvaXB0LWlucHV0PlxyXG4gICAgPGlwdC1pbnB1dFxyXG4gICAgICBbaW5wdXRUeXBlXT1cIidwYXNzd29yZCdcIlxyXG4gICAgICBbcGxhY2VIb2xkZXJdPVwiJ0NvbnRyYXNlw7FhJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydwYXNzd29yZCddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPjwvZGl2PlxyXG5cclxuPC9mb3JtPlxyXG5cclxuPGRpdiBjbGFzcz1cImZsZXggbXQtMyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICA8c3BhbiAqbmdJZj1cImNvZEZvcm1TdGVwVHdvLmludmFsaWQgJiYgY29kRm9ybVN0ZXBUd28udG91Y2hlZFwiIGNsYXNzPVwidGV4dC1yZWQtNTAwIGZvbnQtYm9sZCB0ZXh0LWNlbnRlciBtdC0xIHB5LTIgYmctcmVkLTEwMCB3LWZ1bGwgYm9yZGVyLXJvdW5kLXhsXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxyXG4gIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwibWwtYXV0byBwLWJ1dHRvbi1zbVwiIChjbGljayk9XCJzZW5kRm9ybSgpXCIgcEJ1dHRvbiBsYWJlbD1cIlNpZ3VpZW50ZVwiIGljb249XCJwaSBwaS1hcnJvdy1yaWdodFwiPjwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19