UNPKG

@infordata-web/portal-common-component-lib

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.

146 lines 31.2 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; import { Subscription } from 'rxjs'; import { take } from 'rxjs/operators'; import { getErrorMessage } from '../../utils/validators-messages.utils'; import { ModalitaPagamentoService } from '../../services/modalita-pagamento.service'; import { ValidateName, ValidatePhone } from '../../utils/validators.utils'; export class VagliaBdiComponent { constructor(modalitaPagamentoService) { this.modalitaPagamentoService = modalitaPagamentoService; this.setComuni = new EventEmitter(); this.getCapOptions = new EventEmitter(); this.resetIndirizzoForm = new EventEmitter(); this.vagliaReady = new EventEmitter(); this.indirizzoEmitter = new EventEmitter(); this.subscription = new Subscription(); this.getErrorMessage = getErrorMessage; // this.initVagliaForm(); } ngOnInit() { this.initVagliaForm(); this.vagliaForm.setValidators(form => { return (!form.get('pec').value && !form.get('email').value) && (form.get('domicilioRichiedenteCoincideConResidenza').value === false) ? { requiredMail: true } : null; }); this.subscription.add(this.vagliaForm.controls['domicilioRichiedenteCoincideConResidenza'].valueChanges.subscribe(isDomicilio => { if (isDomicilio) { this.vagliaForm.controls['nome'].setValidators([]); this.vagliaForm.controls['nome'].patchValue(null); this.vagliaForm.controls['nome'].updateValueAndValidity(); this.vagliaForm.controls['cognome'].setValidators([]); this.vagliaForm.controls['cognome'].patchValue(null); this.vagliaForm.controls['cognome'].updateValueAndValidity(); this.vagliaForm.controls["email"].patchValue(null); this.vagliaForm.controls["pec"].patchValue(null); this.vagliaForm.controls["telefono"].patchValue(null); this.resetIndirizzoForm.emit(); } else { this.vagliaForm.controls['nome'].setValidators([Validators.required, ValidateName]), this.vagliaForm.controls['nome'].updateValueAndValidity(); this.vagliaForm.controls['cognome'].setValidators([Validators.required, ValidateName]), this.vagliaForm.controls['cognome'].updateValueAndValidity(); } })); this.vagliaForm.valueChanges.subscribe(() => { // if (this.vagliaForm.valid) { const vaglia = { intestatarioStudioLegale: this.vagliaForm.get('intestatoSudioLegale').value, domicilioRichiedenteCoincideConResidenza: this.vagliaForm.get('domicilioRichiedenteCoincideConResidenza').value, nome: this.vagliaForm.get('nome').value, denominazione: this.vagliaForm.get('cognome').value, contatti: this.vagliaForm.get('domicilioRichiedenteCoincideConResidenza').value === true ? null : { email: this.vagliaForm.get('email').value, pec: this.vagliaForm.get('pec').value, telefono: this.vagliaForm.get('telefono').value, }, indirizzo: this.vagliaForm.get('domicilioRichiedenteCoincideConResidenza').value === true ? null : this.indirizzo }; const isFormValid = this.vagliaForm.valid; const isFormIndirizzoValid = this.vagliaForm.get('domicilioRichiedenteCoincideConResidenza').value === true ? true : this.isIndirizzoValid; const isValid = isFormValid && isFormIndirizzoValid; this.vagliaReady.emit({ vaglia: vaglia, isValid }); //} }); } initVagliaForm() { var _a, _b, _c, _d, _e, _f, _g, _h; this.vagliaForm = new FormGroup({ nome: new FormControl((_a = this.vagliaBDI) === null || _a === void 0 ? void 0 : _a.nome), cognome: new FormControl((_b = this.vagliaBDI) === null || _b === void 0 ? void 0 : _b.denominazione), email: new FormControl((_d = (_c = this.vagliaBDI) === null || _c === void 0 ? void 0 : _c.contatti) === null || _d === void 0 ? void 0 : _d.email, [this.ValidateMail, Validators.maxLength(200)]), pec: new FormControl((_f = (_e = this.vagliaBDI) === null || _e === void 0 ? void 0 : _e.contatti) === null || _f === void 0 ? void 0 : _f.pec, [this.ValidateMail, Validators.maxLength(200)]), telefono: new FormControl((_h = (_g = this.vagliaBDI) === null || _g === void 0 ? void 0 : _g.contatti) === null || _h === void 0 ? void 0 : _h.telefono, [ValidatePhone]), intestatoSudioLegale: new FormControl(this.vagliaBDI != null ? this.vagliaBDI.intestatarioStudioLegale : false, this.isAntistatario ? [Validators.required] : null), domicilioRichiedenteCoincideConResidenza: new FormControl(this.vagliaBDI != null ? this.vagliaBDI.domicilioRichiedenteCoincideConResidenza : false, [Validators.required]), }); } getComuni(siglaProvincia) { if (siglaProvincia) { this.modalitaPagamentoService.getComuni$(siglaProvincia).pipe(take(1)) .subscribe(comuni => { this.setComuni.emit(comuni); const comune = comuni.find(comuneItem => comuneItem.codiceCatastale === this.codiceCatastale); this.getCapOptions.emit(comune === null || comune === void 0 ? void 0 : comune.codiceIstat); }); } else { this.setComuni.emit([]); } } getCap(codiceCatastale) { var _a; if (codiceCatastale) { this.codiceCatastale = codiceCatastale; } const comune = (_a = this.comuni) === null || _a === void 0 ? void 0 : _a.find(comuneItem => comuneItem.codiceCatastale === codiceCatastale); this.getCapOptions.emit(comune === null || comune === void 0 ? void 0 : comune.codiceIstat); } ngOnDestroy() { this.subscription.unsubscribe(); } ValidateMail(control) { if (!control.value) { return null; } const formatoEmail = /^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/; if (formatoEmail.test(control.value)) { return null; } return { invalidMail: true }; } onIndirizzoReady(event) { this.indirizzo = event.indirizzo; this.isIndirizzoValid = event.isValid; this.indirizzoEmitter.emit({ indirizzo: event.indirizzo, isValid: event.isValid }); } } VagliaBdiComponent.decorators = [ { type: Component, args: [{ selector: 'lib-vaglia-bdi', template: "<form [formGroup]=\"vagliaForm\" [ngxsForm]=\"vagliaFormPath\">\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-12\">\r\n\t\t\t<div class=\"col-12\">\r\n\t\t\t\t<h3 class=\"h5 mb-0\">{{ \"accreditamento-bdi\" | traduzione }}</h3>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"col-md-12 my-3\">\r\n\t\t\t\t<div class=\"alert alert-primary\" role=\"alert\">\r\n\t\t\t\t\t<p>\r\n\t\t\t\t\t\t{{ \"nota-bdi\" | traduzione }}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"row\">\r\n\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t<mat-radio-group class=\"radio-group\"\r\n\t\t\t\t\t\t\t\t\taria-labelledby=\"radio-group-label-1\"\r\n\t\t\t\t\t\t\t\t\tformControlName=\"domicilioRichiedenteCoincideConResidenza\">\r\n\t\t\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"true\">\r\n\t\t\t\t\t\t\t{{ \"domicilio-coincide-con-residenza\" | traduzione }}\r\n\t\t\t\t\t\t</mat-radio-button>\r\n\t\t\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"false\">\r\n\t\t\t\t\t\t\t{{ \"domicilio-non-coincide-con-residenza\" | traduzione }}\r\n\t\t\t\t\t\t</mat-radio-button>\r\n\t\t\t\t\t</mat-radio-group>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"col-12\" *ngIf=\"!vagliaForm.controls['domicilioRichiedenteCoincideConResidenza'].value\">\r\n\t\t\t\t<div class=\"row my-2\">\r\n\t\t\t\t\t<div class=\"col-md-6\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<input matInput [maxlength]=\"100\" placeholder=\"{{ 'required' | traduzione }}{{ 'nome' | traduzione }}\" formControlName=\"nome\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['nome'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['nome']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-md-6\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<input matInput [maxlength]=\"100\" placeholder=\"{{ 'required' | traduzione }}{{ 'denominazione' | traduzione }}\" formControlName=\"cognome\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['cognome'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['cognome']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<lib-indirizzo-pagamento [ngxsFormPath]=\"indirizzoVagliaFormPath\"\r\n\t\t\t\t\t\t\t\t[nazioni]=\"nazioni\"\r\n\t\t\t\t\t\t\t\t[province]=\"province\"\r\n\t\t\t\t\t\t\t\t[comuni]=\"comuni\"\r\n\t\t\t\t\t\t\t\t[capOptions]=\"capOptions\"\r\n\t\t\t\t\t\t\t\t[indirizzo]=\"vagliaBDI?.indirizzo\"\r\n\t\t\t\t\t\t\t\t(selectedProvinciaEmitter)=\"getComuni($event)\"\r\n\t\t\t\t\t\t\t\t(selectedComuneEmitter)=\"getCap($event)\"\r\n\t\t\t\t\t\t\t\t(indirizzoEmitter)=\"onIndirizzoReady($event)\">\r\n\t\t\t\t>\r\n\t\t\t\t</lib-indirizzo-pagamento>\r\n\t\t\t\t<div class=\"row mt-2\">\r\n\t\t\t\t\t<div class=\"col-12 col-md-4\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{'email' | traduzione}}</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"email\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['email'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['email']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-12 col-md-4\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{'pec' | traduzione}}</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"pec\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['pec'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['pec']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-12 col-md-4\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<mat-label>{{ \"telefono\" | traduzione }}</mat-label>\r\n\t\t\t\t\t\t\t<input matInput [maxlength]=\"20\" formControlName=\"telefono\" />\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.controls['telefono'].invalid\">\r\n\t\t\t\t\t\t\t\t{{ getErrorMessage(vagliaForm.controls['telefono']) | traduzione }}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t<mat-error *ngIf=\"vagliaForm.getError('requiredMail')\">\r\n\t\t\t\t\t\t\t{{ \"validation-requiredMail\" | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<ng-container *ngIf=\"isAntistatario\">\r\n\t\t\t\t<div class=\"col-12 mt-3\">\r\n\t\t\t\t\t<h3 class=\"h5 mb-0\">{{ \"intestatario\" | traduzione }}</h3>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-md-12 my-3\">\r\n\t\t\t\t\t<mat-radio-group class=\"radio-group\" aria-labelledby=\"radio-group-label-1\" formControlName=\"intestatoSudioLegale\">\r\n\t\t\t\t\t\t<mat-radio-button class=\"radio-button\" [value]=\"false\">{{ \"me-medesimo\" | traduzione }} </mat-radio-button>\r\n\t\t\t\t\t\t<mat-radio-button class=\"pl-3 radio-button\" [value]=\"true\">{{ \"studio-legale\" | traduzione }} </mat-radio-button>\r\n\t\t\t\t\t</mat-radio-group>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</div>\r\n</form>\r\n\r\n", styles: [""] },] } ]; VagliaBdiComponent.ctorParameters = () => [ { type: ModalitaPagamentoService } ]; VagliaBdiComponent.propDecorators = { vagliaBDI: [{ type: Input }], comuni: [{ type: Input }], capOptions: [{ type: Input }], isAntistatario: [{ type: Input }], nazioni: [{ type: Input }], province: [{ type: Input }], vagliaFormPath: [{ type: Input }], indirizzoVagliaFormPath: [{ type: Input }], setComuni: [{ type: Output }], getCapOptions: [{ type: Output }], resetIndirizzoForm: [{ type: Output }], vagliaReady: [{ type: Output }], indirizzoEmitter: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFnbGlhLWJkaS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiRDovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi10ZXJuaS9jb21tb24tY29tcG9uZW50LWxpYi9wcm9qZWN0cy9wb3J0YWwtY29tbW9uLWNvbXBvbmVudC1saWIvc3JjLyIsInNvdXJjZXMiOlsibGliL21vZGFsaXRhLXBhZ2FtZW50by9jb21wb25lbnRzL3ZhZ2xpYS1iZGkvdmFnbGlhLWJkaS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFrQixXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXBDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUVuRixPQUFPLEVBQUMsWUFBWSxFQUFFLGFBQWEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBT3pFLE1BQU0sT0FBTyxrQkFBa0I7SUFzRDlCLFlBQW9CLHdCQUFrRDtRQUFsRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBM0J0RSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFHOUMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzNDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFHOUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBZ0QsQ0FBQztRQUcvRSxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBbUQsQ0FBQztRQVEvRSxp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RXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7Q29tdW5lTW9kZWwsIEluZGlyaXp6b01vZGVsLCBMb2NhbGl0YU1vZGVsLCBOYXppb25lTW9kZWx9IGZyb20gJy4uLy4uL21vZGVscy9lc3RyZW1pLXBlcnNvbmEtZmlzaWNhLm1vZGVsJztcclxuaW1wb3J0IHtnZXRFcnJvck1lc3NhZ2V9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMtbWVzc2FnZXMudXRpbHMnO1xyXG5pbXBvcnQge01vZGFsaXRhUGFnYW1lbnRvU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kYWxpdGEtcGFnYW1lbnRvLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhZ2xpYUJESU1vZGVsfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFnbGlhLWJkaS5tb2RlbCc7XHJcbmltcG9ydCB7VmFsaWRhdGVOYW1lLCBWYWxpZGF0ZVBob25lfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzLnV0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnbGliLXZhZ2xpYS1iZGknLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi92YWdsaWEtYmRpLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi92YWdsaWEtYmRpLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWYWdsaWFCZGlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG5cdEBJbnB1dCgpXHJcbiAgdmFnbGlhQkRJOiBWYWdsaWFCRElNb2RlbDtcclxuXHJcblx0QElucHV0KClcclxuXHRjb211bmk6IENvbXVuZU1vZGVsW107XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0Y2FwT3B0aW9uczogc3RyaW5nW107XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0aXNBbnRpc3RhdGFyaW86IGJvb2xlYW47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0bmF6aW9uaTogTmF6aW9uZU1vZGVsW107XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0cHJvdmluY2U6IExvY2FsaXRhTW9kZWxbXTtcclxuXHJcblx0QElucHV0KClcclxuXHR2YWdsaWFGb3JtUGF0aDogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGluZGlyaXp6b1ZhZ2xpYUZvcm1QYXRoOiBzdHJpbmc7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdHNldENvbXVuaSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tdW5lTW9kZWxbXT4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0Z2V0Q2FwT3B0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRyZXNldEluZGlyaXp6b0Zvcm0gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdHZhZ2xpYVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHZhZ2xpYTogVmFnbGlhQkRJTW9kZWwsIGlzVmFsaWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0aW5kaXJpenpvRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpbmRpcml6em86IEluZGlyaXp6b01vZGVsLCBpc1ZhbGlkOiBib29sZWFuIH0+KCk7XHJcblxyXG5cdGNhcDogc3RyaW5nW107XHJcblxyXG5cdHZhZ2xpYUZvcm06IEZvcm1Hcm91cDtcclxuXHJcblx0Y29kaWNlQ2F0YXN0YWxlOiBzdHJpbmc7XHJcblxyXG5cdHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG5cdGdldEVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZTtcclxuXHJcblx0aW5kaXJpenpvOiBJbmRpcml6em9Nb2RlbDtcclxuXHRpc0luZGlyaXp6b1ZhbGlkOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsaXRhUGFnYW1lbnRvU2VydmljZTogTW9kYWxpdGFQYWdhbWVudG9TZXJ2aWNlKSB7XHJcblx0XHQvLyB0aGlzLmluaXRWYWdsaWFGb3JtKCk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuaW5pdFZhZ2xpYUZvcm0oKTtcclxuXHRcdHRoaXMudmFnbGlhRm9ybS5zZXRWYWxpZGF0b3JzKGZvcm0gPT4ge1xyXG5cdFx0XHRyZXR1cm4gKCFmb3JtLmdldCgncGVjJykudmFsdWUgJiYgIWZvcm0uZ2V0KCdlbWFpbCcpLnZhbHVlKSAmJlxyXG5cdFx0XHRcdFx0KGZvcm0uZ2V0KCdkb21pY2lsaW9SaWNoaWVkZW50ZUNvaW5jaWRlQ29uUmVzaWRlbnphJykudmFsdWUgPT09IGZhbHNlKSA/XHJcblx0XHRcdHtyZXF1aXJlZE1haWw6IHRydWV9IDogbnVsbDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbJ2RvbWljaWxpb1JpY2hpZWRlbnRlQ29pbmNpZGVDb25SZXNpZGVuemEnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGlzRG9taWNpbGlvID0+IHtcclxuXHRcdFx0aWYoaXNEb21pY2lsaW8pe1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1snbm9tZSddLnNldFZhbGlkYXRvcnMoW10pO1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1snbm9tZSddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdFx0dGhpcy52YWdsaWFGb3JtLmNvbnRyb2xzWydub21lJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1snY29nbm9tZSddLnNldFZhbGlkYXRvcnMoW10pO1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1snY29nbm9tZSddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdFx0dGhpcy52YWdsaWFGb3JtLmNvbnRyb2xzWydjb2dub21lJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1tcImVtYWlsXCJdLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdFx0dGhpcy52YWdsaWFGb3JtLmNvbnRyb2xzW1wicGVjXCJdLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdFx0dGhpcy52YWdsaWFGb3JtLmNvbnRyb2xzW1widGVsZWZvbm9cIl0ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdFx0XHR0aGlzLnJlc2V0SW5kaXJpenpvRm9ybS5lbWl0KCk7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1snbm9tZSddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRlTmFtZV0pLFxyXG5cdFx0XHRcdHRoaXMudmFnbGlhRm9ybS5jb250cm9sc1snbm9tZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0XHR0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbJ2NvZ25vbWUnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0ZU5hbWVdKSxcclxuXHRcdFx0XHR0aGlzLnZhZ2xpYUZvcm0uY29udHJvbHNbJ2NvZ25vbWUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdH1cclxuXHRcdH0pKTtcclxuXHJcblx0XHR0aGlzLnZhZ2xpYUZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIGlmICh0aGlzLnZhZ2xpYUZvcm0udmFsaWQpIHtcclxuICAgICAgICBjb25zdCB2YWdsaWE6IFZhZ2xpYUJESU1vZGVsID0ge1xyXG5cdFx0XHRcdFx0aW50ZXN0YXRhcmlvU3R1ZGlvTGVnYWxlOiB0aGlzLnZhZ2xpYUZvcm0uZ2V0KCdpbnRlc3RhdG9TdWRpb0xlZ2FsZScpLnZhbHVlLFxyXG5cdFx0XHRcdFx0ZG9taWNpbGlvUmljaGllZGVudGVDb2luY2lkZUNvblJlc2lkZW56YTogdGhpcy52YWdsaWFGb3JtLmdldCgnZG9taWNpbGlvUmljaGllZGVudGVDb2luY2lkZUNvblJlc2lkZW56YScpLnZhbHVlLFxyXG5cdFx0XHRcdFx0bm9tZTogdGhpcy52YWdsaWFGb3JtLmdldCgnbm9tZScpLnZhbHVlLFxyXG5cdFx0XHRcdFx0ZGVub21pbmF6aW9uZTogIHRoaXMudmFnbGlhRm9ybS5nZXQoJ2NvZ25vbWUnKS52YWx1ZSxcclxuXHRcdFx0XHRcdGNvbnRhdHRpOiB0aGlzLnZhZ2xpYUZvcm0uZ2V0KCdkb21pY2lsaW9SaWNoaWVkZW50ZUNvaW5jaWRlQ29uUmVzaWRlbnphJykudmFsdWUgPT09IHRydWUgPyBudWxsIDpcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRlbWFpbDogdGhpcy52YWdsaWFGb3JtLmdldCgnZW1haWwnKS52YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHBlYzogdGhpcy52YWdsaWFGb3JtLmdldCgncGVjJykudmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHR0ZWxlZm9ubzogdGhpcy52YWdsaWFGb3JtLmdldCgndGVsZWZvbm8nKS52YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0aW5kaXJpenpvOiB0aGlzLnZhZ2xpYUZvcm0uZ2V0KCdkb21pY2lsaW9SaWNoaWVkZW50ZUNvaW5jaWRlQ29uUmVzaWRlbnphJykudmFsdWUgPT09IHRydWUgPyBudWxsIDogdGhpcy5pbmRpcml6em9cclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRjb25zdCBpc0Zvcm1WYWxpZCA9IHRoaXMudmFnbGlhRm9ybS52YWxpZDtcclxuXHRcdFx0XHRjb25zdCBpc0Zvcm1JbmRpcml6em9WYWxpZCA9IHRoaXMudmFnbGlhRm9ybS5nZXQoJ2RvbWljaWxpb1JpY2hpZWRlbnRlQ29pbmNpZGVDb25SZXNpZGVuemEnKS52YWx1ZSA9PT0gdHJ1ZSA/IHRydWUgOiB0aGlzLmlzSW5kaXJpenpvVmFsaWQ7XHJcbiAgICAgICAgY29uc3QgaXNWYWxpZCA9IGlzRm9ybVZhbGlkICYmIGlzRm9ybUluZGlyaXp6b1ZhbGlkO1xyXG5cclxuICAgICAgICB0aGlzLnZhZ2xpYVJlYWR5LmVtaXQoeyB2YWdsaWE6IHZhZ2xpYSwgaXNWYWxpZCB9KTtcclxuICAgICAgIC8vfVxyXG4gICAgfSk7XHJcblxyXG5cdH1cclxuXHJcblx0aW5pdFZhZ2xpYUZvcm0oKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhZ2xpYUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcclxuXHRcdFx0bm9tZTogbmV3IEZvcm1Db250cm9sKHRoaXMudmFnbGlhQkRJPy5ub21lKSxcclxuXHRcdFx0Y29nbm9tZTogbmV3IEZvcm1Db250cm9sKHRoaXMudmFnbGlhQkRJPy5kZW5vbWluYXppb25lKSxcclxuXHRcdFx0ZW1haWw6IG5ldyBGb3JtQ29udHJvbCh0aGlzLnZhZ2xpYUJEST8uY29udGF0dGk/LmVtYWlsLCBbdGhpcy5WYWxpZGF0ZU1haWwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwMCldKSxcclxuXHRcdFx0cGVjOiBuZXcgRm9ybUNvbnRyb2wodGhpcy52YWdsaWFCREk/LmNvbnRhdHRpPy5wZWMsIFt0aGlzLlZhbGlkYXRlTWFpbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwKV0pLFxyXG5cdFx0XHR0ZWxlZm9ubzogbmV3IEZvcm1Db250cm9sKHRoaXMudmFnbGlhQkRJPy5jb250YXR0aT8udGVsZWZvbm8sIFtWYWxpZGF0ZVBob25lXSksXHJcblx0XHRcdGludGVzdGF0b1N1ZGlvTGVnYWxlOiBuZXcgRm9ybUNvbnRyb2wodGhpcy52YWdsaWFCREkgIT0gbnVsbCA/IHRoaXMudmFnbGlhQkRJLmludGVzdGF0YXJpb1N0dWRpb0xlZ2FsZSA6IGZhbHNlLCB0aGlzLmlzQW50aXN0YXRhcmlvID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogbnVsbCksXHJcblx0XHRcdGRvbWljaWxpb1JpY2hpZWRlbnRlQ29pbmNpZGVDb25SZXNpZGVuemE6IG5ldyBGb3JtQ29udHJvbCh0aGlzLnZhZ2xpYUJESSAhPSBudWxsID8gdGhpcy52YWdsaWFCREkuZG9taWNpbGlvUmljaGllZGVudGVDb2luY2lkZUNvblJlc2lkZW56YSA6IGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRnZXRDb211bmkoc2lnbGFQcm92aW5jaWE6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0aWYgKHNpZ2xhUHJvdmluY2lhKSB7XHJcblx0XHRcdHRoaXMubW9kYWxpdGFQYWdhbWVudG9TZXJ2aWNlLmdldENvbXVuaSQoc2lnbGFQcm92aW5jaWEpLnBpcGUodGFrZSgxKSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKGNvbXVuaSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Q29tdW5pLmVtaXQoY29tdW5pKTtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbXVuZSA9IGNvbXVuaS5maW5kKGNvbXVuZUl0ZW0gPT4gY29tdW5lSXRlbS5jb2RpY2VDYXRhc3RhbGUgPT09IHRoaXMuY29kaWNlQ2F0YXN0YWxlKTtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0Q2FwT3B0aW9ucy5lbWl0KGNvbXVuZT8uY29kaWNlSXN0YXQpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldENvbXVuaS5lbWl0KFtdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENhcChjb2RpY2VDYXRhc3RhbGU6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0aWYgKGNvZGljZUNhdGFzdGFsZSkge1xyXG5cdFx0XHR0aGlzLmNvZGljZUNhdGFzdGFsZSA9IGNvZGljZUNhdGFzdGFsZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGNvbXVuZSA9IHRoaXMuY29tdW5pPy5maW5kKGNvbXVuZUl0ZW0gPT4gY29tdW5lSXRlbS5jb2RpY2VDYXRhc3RhbGUgPT09IGNvZGljZUNhdGFzdGFsZSk7XHJcblx0XHR0aGlzLmdldENhcE9wdGlvbnMuZW1pdChjb211bmU/LmNvZGljZUlzdGF0KTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHR9XHJcblxyXG5cdFZhbGlkYXRlTWFpbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcclxuXHRcdGlmICghY29udHJvbC52YWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZvcm1hdG9FbWFpbDogUmVnRXhwID0gL14oW2EtekEtWjAtOV9cXC1cXC5dKylAKFthLXpBLVowLTlfXFwtXFwuXSspXFwuKFthLXpBLVpdezIsNX0pJC87XHJcblx0XHRpZiAoZm9ybWF0b0VtYWlsLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBpbnZhbGlkTWFpbDogdHJ1ZSB9O1xyXG5cdH1cclxuXHJcblx0b25JbmRpcml6em9SZWFkeShldmVudDogeyBpbmRpcml6em86IEluZGlyaXp6b01vZGVsLCBpc1ZhbGlkOiBib29sZWFuIH0pIHtcclxuXHRcdHRoaXMuaW5kaXJpenpvID0gZXZlbnQuaW5kaXJpenpvO1xyXG5cdFx0dGhpcy5pc0luZGlyaXp6b1ZhbGlkID0gZXZlbnQuaXNWYWxpZDtcclxuXHRcdHRoaXMuaW5kaXJpenpvRW1pdHRlci5lbWl0KHsgaW5kaXJpenpvOiBldmVudC5pbmRpcml6em8sIGlzVmFsaWQ6IGV2ZW50LmlzVmFsaWQgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==