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.

434 lines 78.7 kB
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { Subject } from 'rxjs';
import { map, shareReplay, tap } from 'rxjs/operators';
import { AltriSoggettiGiudiziarioDTO } from '../../models/altri-soggetti-giudiziario-dto';
import { AltriSoggettiNoEsproprioDTO } from '../../models/altri-soggetti-no-esproprio-dto';
import { InfoAnagrafichePFDTO } from '../../models/info-anagrafiche-pf';
import { InfoNascitaPFDTO } from '../../models/info-nascita-pf.dto';
import { PersonaFisicaDTO } from '../../models/persona-fisica-dto';
import { PersonaGiuridicaDTO } from '../../models/persona-giuridica-dto';
import { ComponentOutputStatus } from '../../normalizzazione/component-output-status';
import { DelegheService } from '../../services/deleghe-services/deleghe.service';
import { MessageService } from '../../services/message.service';
import { ComponentReducer } from '../../utils/component-reducer';
import { Modals } from '../../utils/modals';
export class AltriSoggettiComponent {
    constructor(delegheService, modals, msg) {
        this.delegheService = delegheService;
        this.modals = modals;
        this.msg = msg;
        this.nextStep = new EventEmitter();
        this.salvaBozza = new EventEmitter();
        this.previousStep = new EventEmitter();
        //TODO
        // changesPF$ = new Subject<
        // 	ComponentOutputStatus<(value: AltriSoggettiGiudiziarioDTO) => void>
        // >();
        //TODO
        // changesPF2$ = new Subject<
        // 	ComponentOutputStatus<(value: AltriSoggettiNoEsproprioDTO) => void>
        // >();
        this.changesRicercaPG$ = new Subject();
        this.changesRicercaPF$ = new Subject();
        this.changesPersonaGiuridica$ = new Subject();
        this.changesPersonaFisica$ = new Subject();
        this.direction = "both-ways";
        this.isFinal = false;
        this.showComponentRicercaPF = false;
        this.showComponentRicercaPG = false;
        this.isSearching = false;
    }
    ngOnInit() {
        //console.log('[AltriSoggettiGiudiziarioDTO - AltriSoggettiNoEsproprioDTO]', this.altriSoggetti);
        this.form = new FormGroup({});
        let valid = true;
        this.nspg = "nsRapprLegpg";
        if (!this.altriSoggetti) {
            this.initAltriSoggetti();
            valid = false;
        }
        else {
            if (this.formControlSoggetto) {
                this.personaGiuridica = this.altriSoggetti.personaGiuridica;
                if (this.personaGiuridica) {
                    this.showComponentRicercaPG = true;
                }
                this.personaFisica = this.altriSoggetti.personaFisica;
                if (this.personaFisica) {
                    this.showComponentRicercaPF = true;
                }
                if (this.altriSoggetti.codiceTipoAltroSoggetto === 'SOGGETTO_DA_IDENTIFICARE') {
                    this.altriSoggetti.codiceRegione = '';
                }
            }
            else {
                if (!(this.altriSoggetti.soggettoNonIdentificato)) {
                    this.personaFisica = this.mapperPersonaFisica(this.altriSoggetti);
                }
            }
        }
        this.tipoSoggetto = new FormControl({ value: this.altriSoggetti.codiceTipoAltroSoggetto, disabled: false }, [Validators.required]);
        this.form.addControl('tipoSoggetto', this.tipoSoggetto);
        this.soggettoNonIdentificato = new FormControl({ value: this.altriSoggetti.soggettoNonIdentificato, disabled: false });
        this.form.addControl('soggettoNonIdentificato', this.soggettoNonIdentificato);
        this.namespaceInfoPf = this.namespace + "infoPF";
        if (!this.formControlSoggetto) {
            if (this.altriSoggetti.soggettoNonIdentificato) {
                this.showComponentRicercaPF = false;
            }
            else {
                this.showComponentRicercaPF = true;
            }
        }
        this.checkSoggetto$ = this.soggettoNonIdentificato.valueChanges.pipe(
        // tap(checkSoggetto => console.log('[checkSoggetto$] - soggettoNonIdentificato:', checkSoggetto)),
        tap((checkSoggetto) => {
            if (!checkSoggetto) {
                this.showComponentRicercaPF = true;
                this.isSearching = false;
            }
            else {
                this.resetSoggetti();
                this.showComponentRicercaPF = false;
                this.isSearching = false;
            }
        }), shareReplay());
        const changesCheckSoggetto$ = this.checkSoggetto$.pipe(
        // tap(checkSoggetto => console.log('[changesCheckSoggetto$] - soggettoNonIdentificato:', checkSoggetto)),
        map((checkSoggetto) => {
            this.changesPersonaFisica$.next(ComponentOutputStatus.of(true, (personaFisica) => (sogg) => { }));
            return ComponentOutputStatus.of(true, (soggetto) => (soggetto.soggettoNonIdentificato = checkSoggetto));
        }));
        this.tipoSoggetto$ = this.tipoSoggetto.valueChanges.pipe(
        // tap(tipo => console.log('[tipoSoggetto$] - codiceSoggetto:', tipo)),
        tap((tipo) => {
            if (tipo != 'SOGGETTO_DA_IDENTIFICARE') {
                this.setSoggetto(tipo);
                this.isSearching = false;
            }
            else {
                this.resetSoggetti();
                this.showComponentRicercaPF = false;
                this.showComponentRicercaPG = false;
                this.isSearching = false;
                this.resetValidation();
            }
        }), shareReplay());
        const tipoSoggettoChanges$ = this.tipoSoggetto$.pipe(
        // tap(tipoSoggettoChanges => console.log('[tipoSoggettoChanges$] - codiceTipoAltroSoggetto:', tipoSoggettoChanges)),
        map((tipo) => {
            return ComponentOutputStatus.of(this.tipoSoggetto.valid, (sog) => (sog.codiceTipoAltroSoggetto = tipo));
        }));
        const altriSoggetti$ = ComponentReducer.reducer4(tipoSoggettoChanges$, changesCheckSoggetto$, 
        // TODO
        // this.changesRicercaPF$,
        this.changesPersonaFisica$, 
        // this.changesRicercaPG$,
        // TODO
        this.changesPersonaGiuridica$, (soggetto) => {
            let isValid;
            // console.log('[codiceTipoAltroSoggetto]', (<AltriSoggettiNoEsproprioDTO>soggetto).codiceTipoAltroSoggetto);
            // console.log('[soggettoNonIdentificato]', (<AltriSoggettiGiudiziarioDTO>soggetto).soggettoNonIdentificato);
            if (this.formControlSoggetto) {
                switch (soggetto.codiceTipoAltroSoggetto) {
                    case 'PRESUNTO_BENEFICIARIO':
                        // isValid = (<AltriSoggettiNoEsproprioDTO>soggetto).idPersona != null && this.tipoSoggetto.value;
                        isValid = soggetto.idPersona != null && this.tipoSoggetto.value;
                        break;
                    case 'AUTORITA_ORDINANTE':
                        // isValid = (<AltriSoggettiNoEsproprioDTO>soggetto).idPersona != null && this.tipoSoggetto.value;
                        isValid = soggetto.idPersona != null && this.tipoSoggetto.value;
                        break;
                    default:
                        isValid = true;
                }
            }
            else {
                soggetto.soggettoNonIdentificato ?
                    // isValid = true : isValid = (<AltriSoggettiGiudiziarioDTO>soggetto).idPersona != null
                    isValid = true : isValid = soggetto.idPersona != null;
            }
            // console.log('[idPersona]', (<AltriSoggettiNoEsproprioDTO>soggetto).idPersona)
            // console.log('[idPersona]', (<AltriSoggettiGiudiziarioDTO>soggetto).idPersona)
            return isValid;
        }, ComponentOutputStatus.of(valid, this.altriSoggetti));
        altriSoggetti$.subscribe((soggetto) => {
            // console.log('[AltriSoggettiComponent] altriSoggetti', soggetto);
            this.altriSoggetti = soggetto.output;
            this.altriSoggetti.idPersona = soggetto.output.idPersona;
            this.isFormValid = soggetto.status;
        });
    }
    resetValidation() {
        this.changesPersonaFisica$.next(ComponentOutputStatus.of(true, (personaFisica) => (sogg) => { }));
        this.changesPersonaGiuridica$.next(ComponentOutputStatus.of(true, (personaGiuridica) => (sogg) => { }));
    }
    initAltriSoggetti() {
        if (this.formControlSoggetto) {
            this.altriSoggetti = new AltriSoggettiNoEsproprioDTO();
        }
        else {
            this.altriSoggetti = new AltriSoggettiGiudiziarioDTO();
        }
    }
    // TODO
    viewPersona() {
        if (this.formControlSoggetto) {
            return !this.tipoSoggetto.value ||
                this.tipoSoggetto.value === "SOGGETTO_DA_IDENTIFICARE";
        }
        else {
            let showComponent;
            this.checkSoggetto$.subscribe(_ => {
                // console.log('[checkSoggetto]', _);
                showComponent = _.valueOf();
            });
            return showComponent;
        }
    }
    setSoggetto(tipo) {
        // console.log('[setDelega]', delega);
        // console.log('[isPersonaFisica]', this.isPersonaFisica(this.rappresentanza.codiceDelega))
        // console.log('[isPersonaGiuridica]', this.isPersonaGiuridica(this.rappresentanza.codiceDelega))
        // console.log('[codiceDelega]', this.rappresentanza.codiceDelega);
        this.resetSoggetti();
        if (this.isPersonaFisica(tipo)) {
            this.showComponentRicercaPF = true;
            this.showComponentRicercaPG = false;
        }
        if (this.isPersonaGiuridica(tipo)) {
            this.showComponentRicercaPF = false;
            this.showComponentRicercaPG = true;
        }
    }
    resetSoggetti() {
        if (!this.altriSoggetti) {
            this.initAltriSoggetti();
        }
        if (this.formControlSoggetto) {
            this.altriSoggetti.personaGiuridica = null;
            this.personaGiuridica = null;
            this.altriSoggetti.codiceRegione = '';
        }
        else {
            this.altriSoggetti.soggettoNonIdentificato = this.soggettoNonIdentificato.value;
            this.altriSoggetti.cognome = null;
            this.altriSoggetti.nome = null;
            this.altriSoggetti.codFiscale = null;
            this.altriSoggetti.comuneNascita = null;
            this.altriSoggetti.provinciaNascita = null;
            this.altriSoggetti.dataNascita = null;
        }
        this.altriSoggetti.idPersona = null;
        this.altriSoggetti.personaFisica = null;
        this.personaFisica = null;
    }
    isPersonaFisica(codiceSoggetto) {
        return (codiceSoggetto === "PRESUNTO_BENEFICIARIO");
    }
    isPersonaGiuridica(codiceSoggetto) {
        return (codiceSoggetto === 'AUTORITA_ORDINANTE');
    }
    ricercaPFReady(ricercaPFStatus) {
        // console.log('[ricercaPFReady]', ricercaPFStatus);
        this.changesRicercaPF$.next(ricercaPFStatus.mapValue((infoPF) => (sogg) => {
            this.getPersonaFisica(infoPF.id);
            if (!this.formControlSoggetto) {
                sogg.soggettoNonIdentificato = false;
            }
            sogg.idPersona = infoPF.id;
        }));
    }
    personaFisicaReady(personaFisicaStatus) {
        //console.log('[personaFisicaReady]', personaFisicaStatus);
        this.changesPersonaFisica$.next(personaFisicaStatus.mapValue((personaFisica) => (sogg) => {
            var _a, _b, _c, _d, _e, _f;
            const pf = new PersonaFisicaDTO();
            pf.infoAnagrafiche = personaFisica.infoAnagrafiche;
            pf.infoNascita = personaFisica.infoNascita;
            pf.id = personaFisica.id;
            if (personaFisica.id) {
                sogg.idPersona = personaFisica.id;
            }
            sogg.personaFisica = pf;
            if (!this.formControlSoggetto) {
                this.soggettoNonIdentificato.value ?
                    sogg.soggettoNonIdentificato = this.soggettoNonIdentificato.value :
                    sogg.soggettoNonIdentificato = false;
                sogg.cognome = (_a = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoAnagrafiche) === null || _a === void 0 ? void 0 : _a.cognome;
                sogg.nome = (_b = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoAnagrafiche) === null || _b === void 0 ? void 0 : _b.nome;
                sogg.codFiscale = (_c = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoAnagrafiche) === null || _c === void 0 ? void 0 : _c.codFiscale;
                sogg.comuneNascita = (_d = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoNascita) === null || _d === void 0 ? void 0 : _d.comuneNascita;
                sogg.provinciaNascita = (_e = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoNascita) === null || _e === void 0 ? void 0 : _e.provinciaNascita;
                //TODO
                // (<AltriSoggettiGiudiziarioDTO>sogg).dataNascita = new Date(moment(personaFisica?.infoNascita?.dataNascita, "DD/MM/YYYY").toDate());
                // (<AltriSoggettiGiudiziarioDTO>sogg).dataNascita = moment(personaFisica?.infoNascita?.dataNascita, "DD/MM/YYYY").toDate();
                sogg.dataNascita = (_f = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoNascita) === null || _f === void 0 ? void 0 : _f.dataNascita;
            }
        }));
    }
    ricercaPGReady(ricercaPGStatus) {
        // console.log('[ricercaPGReady]', ricercaPGStatus);
        this.changesRicercaPG$.next(ricercaPGStatus.mapValue((infoPG) => (sogg) => {
            this.getPersonaGiuridica(infoPG.datiPersonaGiuridica.id);
            sogg.idPersona = infoPG.datiPersonaGiuridica.id;
        }));
    }
    personaGiuridicaReady(personaGiuridicaStatus) {
        // console.log("[personaGiuridicaReady]", personaGiuridicaStatus);
        this.changesPersonaGiuridica$.next(personaGiuridicaStatus.mapValue((personaGiuridica) => (sogg) => {
            var _a, _b, _c;
            const pg = new PersonaGiuridicaDTO();
            pg.codiceFiscale = personaGiuridica.codiceFiscale;
            pg.ragioneSociale = personaGiuridica.ragioneSociale;
            pg.partitaIVA = personaGiuridica.partitaIVA;
            pg.idPersonaGiuridica = personaGiuridica.idPersonaGiuridica;
            sogg.idPersona = personaGiuridica.idPersonaGiuridica;
            sogg.personaGiuridica = pg;
            if (personaGiuridica.sedi != undefined) {
                sogg.codiceRegione = (_c = (_b = (_a = personaGiuridica === null || personaGiuridica === void 0 ? void 0 : personaGiuridica.sedi[0]) === null || _a === void 0 ? void 0 : _a.indirizzo) === null || _b === void 0 ? void 0 : _b.regione) === null || _c === void 0 ? void 0 : _c.sigla;
            }
        }));
    }
    getPersonaFisica(id) {
        this.showComponentRicercaPF = false;
        //debugger
        this.personaFisica$ = this.delegheService.getPersona(id)
            .pipe(shareReplay());
        this.pfSubscription = this.personaFisica$.pipe(
        // pluck("datiPersonaFisica")
        ).subscribe(
        // (pf: DatiPersonaFisica) => {
        (pf) => {
            var _a, _b;
            //console.log('[pf]', pf);
            this.personaFisica = this.mapperPersonaFisica(pf.datiPersonaFisica);
            // this.personaFisica = pf;
            this.altriSoggetti.codiceRegione = (_b = (_a = pf === null || pf === void 0 ? void 0 : pf.residenza) === null || _a === void 0 ? void 0 : _a.regione) === null || _b === void 0 ? void 0 : _b.sigla;
            //(<AltriSoggettiGiudiziarioDTO>this.altriSoggetti).personaFisica = this.personaFisica;
            this.altriSoggetti.idPersona = id;
            // this.showComponentRicercaPF = true;
            if (this.personaFisica) {
                setTimeout(() => this.showComponentRicercaPF = true, 0);
            }
            this.isSearching = true;
        }, _ => {
            this.modals.failure([
                "recupero.datipersonafisica.failure"
            ], []);
        });
    }
    getPersonaGiuridica(id) {
        this.personaGiuridica$ = this.delegheService.getDatiSocieta(id)
            .pipe(shareReplay());
        this.pgSubscription = this.personaGiuridica$.pipe(
        // pluck("datiPersonaGiuridica")
        ).subscribe((pg) => {
            // console.log('[pg]', pg);
            this.mapperPersonaGiuridica(pg);
            this.personaGiuridica = pg;
            // (<AltriSoggettiNoEsproprioDTO>this.altriSoggetti).idPersona = id;
            this.altriSoggetti.idPersona = id;
            this.showComponentRicercaPG = false;
            this.isSearching = true;
            if (pg.sedi != undefined) {
                const sede = pg.sedi.filter(sedeLegale => sedeLegale.tipoSede.codice === "LEGALE");
                this.altriSoggetti.codiceRegione = sede[0].indirizzo.regione.sigla;
            }
        }, _ => {
            this.modals.failure([
                "recupero.datipersonagiuridica.failure"
            ], []);
        });
    }
    mapperPersonaFisica(datiPersona) {
        //console.log('[mapperPersonaFisica]- datiPersona', datiPersona);
        const personaFisica = new PersonaFisicaDTO();
        const infoAnagrafiche = new InfoAnagrafichePFDTO();
        infoAnagrafiche.codFiscale = datiPersona.codFiscale;
        infoAnagrafiche.cognome = datiPersona.cognome;
        infoAnagrafiche.nome = datiPersona.nome;
        personaFisica.infoAnagrafiche = infoAnagrafiche;
        personaFisica.id = datiPersona.idPersona;
        const infoNascita = new InfoNascitaPFDTO();
        infoNascita.comuneNascita = datiPersona.comuneNascita;
        infoNascita.provinciaNascita = datiPersona.provinciaNascita;
        infoNascita.dataNascita = datiPersona.dataNascita;
        personaFisica.infoNascita = infoNascita;
        this.altriSoggetti.personaFisica = personaFisica;
        //console.log('[mapperPersonaFisica]- personaFisica', personaFisica);
        //console.log('[mapperPersonaFisica]- altriSoggetti', this.altriSoggetti.personaFisica);
        setTimeout(() => this.showComponentRicercaPF = true, 0);
        return personaFisica;
    }
    mapperPersonaGiuridica(datiPersona) {
        // console.log('[mapperPersonaGiuridica]', datiPersona);
        if (!this.altriSoggetti) {
            this.initAltriSoggetti();
        }
        const personaGiuridica = new PersonaGiuridicaDTO();
        personaGiuridica.codiceFiscale = datiPersona.datiPersonaGiuridica.codiceFiscale;
        personaGiuridica.ragioneSociale = datiPersona.datiPersonaGiuridica.ragioneSociale;
        personaGiuridica.partitaIVA = datiPersona.datiPersonaGiuridica.partitaIVA;
        this.altriSoggetti.personaGiuridica = personaGiuridica;
    }
    enableSearch() {
        this.resetSoggetti();
        // console.log('[enableSearch] - codiceSoggetto:', (<AltriSoggettiNoEsproprioDTO>this.altriSoggetti).codiceTipoAltroSoggetto);
        // console.log('[enableSearch] - soggettoNonIdentificato:', (<AltriSoggettiGiudiziarioDTO>this.altriSoggetti).soggettoNonIdentificato);
        if (this.altriSoggetti.codiceTipoAltroSoggetto) {
            this.tipoSoggetto.setValue(this.altriSoggetti.codiceTipoAltroSoggetto);
            if (this.isPersonaFisica(this.altriSoggetti.codiceTipoAltroSoggetto)) {
                setTimeout(() => this.showComponentRicercaPF = true, 0);
            }
            if (this.isPersonaGiuridica(this.altriSoggetti.codiceTipoAltroSoggetto)) {
                setTimeout(() => this.showComponentRicercaPG = true, 0);
            }
        }
        else {
            this.soggettoNonIdentificato.setValue(this.altriSoggetti.soggettoNonIdentificato);
            setTimeout(() => this.showComponentRicercaPF = true, 0);
        }
    }
    forward(_) {
        this.nextStep.emit(this.altriSoggetti);
    }
    backward($event) {
        this.previousStep.emit(this.altriSoggetti);
    }
    complete($event) { }
    onSalvaBozza($event) {
        this.salvaBozza.emit(this.altriSoggetti);
    }
    ngOnDestroy() {
        if (this.altriSoggettiChangedSub) {
            this.altriSoggettiChangedSub.unsubscribe();
        }
    }
}
AltriSoggettiComponent.decorators = [
    { type: Component, args: [{
                selector: 'lib-altri-soggetti',
                template: "<!-- <p>altri-soggetti works!</p> -->\r\n<div class=\"mt-3 mb-5\">\r\n\t<mat-expansion-panel class=\"panel\" [expanded]=\"true\">\r\n\t\t<mat-expansion-panel-header [collapsedHeight]=\"'48px'\" [expandedHeight]=\"'48px'\" class=\"custom-header\">\r\n\t\t\t<mat-panel-title>\r\n\t\t\t\t<!-- <h3>{{'altri-soggetti' | traduzione}}</h3> -->\r\n\r\n\t\t\t\t<div *ngIf=\"!formControlSoggetto\">\r\n\t\t\t\t\t<h3 class=\"h5 mb-0\"><info-tip-label label=\"altri-soggetti\"></info-tip-label></h3>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div *ngIf=\"formControlSoggetto\">\r\n\t\t\t\t\t<h3 class=\"h5 mb-0\"><info-tip-label label=\"altri-soggetti-interessati\"></info-tip-label></h3>\r\n\t\t\t\t</div>\r\n\t\t\t</mat-panel-title>\r\n\t\t</mat-expansion-panel-header>\r\n\t\t<form [formGroup]=\"form\">\r\n\t\t\t<div class=\"collapse-body mt-2\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div *ngIf=\"formControlSoggetto\" class=\"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}}{{'soggetto' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"tipoSoggetto\">\r\n\t\t\t\t\t\t\t\t<mat-option *ngFor=\"let soggetto of tipologieSoggetto$ | async\"\r\n\t\t\t\t\t\t\t\t\t[value]=\"soggetto.codice\">\r\n\t\t\t\t\t\t\t\t\t{{soggetto.descrizione}}\r\n\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"form.controls['tipoSoggetto'].invalid\">\r\n\t\t\t\t\t\t\t\t{{msg.produceMessage('obbligatorio', form.controls['tipoSoggetto']) | traduzione}}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t\t<mat-hint *infoTip=\"'soggetto'\"></mat-hint>\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 *ngIf=\"!formControlSoggetto\" class=\"col-md-4\">\r\n\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\t\tformControlName=\"soggettoNonIdentificato\">\r\n\t\t\t\t\t\t\t\t{{'soggetto-non-identificato' | traduzione }}\r\n\t\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t\t\t<mat-hint *infoTip=\"'soggetto-non-identificato'\"></mat-hint>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-md-8\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t*ngIf=\"isSearching && !showComponentRicercaPF && !showComponentRicercaPG\"\r\n\t\t\t\t\t\t\tmat-flat-button color=\"primary\"\r\n\t\t\t\t\t\t\tclass=\"text-uppercase mb-2\"\r\n\t\t\t\t\t\t\t(click)=\"enableSearch()\"\r\n\t\t\t\t\t\t\t> {{'ricerca' | traduzione}}\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<!-- TODO -->\r\n\t\t\t\t<!-- <lib-info-pf *ngIf=\"!viewPersona() \" -->\r\n\t\t\t\t<!-- <lib-info-pf *ngIf=\"!(checkSoggetto$ | async)\" -->\r\n\t\t\t\t<!-- <lib-info-pf *ngIf=\"!viewPersona()\"\r\n\t\t\t\t\t[cfDifferentFrom]=\"cfDifferentFrom\"\r\n\t\t\t\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t\t\t\t(done)=\"infoPfReady2($event)\"\r\n\t\t\t\t\t[infopf]=\"altriSoggetti\"\r\n\t\t\t\t\t[readOnly]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-info-pf> -->\r\n\t\t\t\t<div class=\"mt-4\"></div>\r\n\t\t\t\t<!-- <lib-ricerca-pf\r\n\t\t\t\t\t*ngIf=\"showComponentRicercaPF\"\r\n\t\t\t\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t\t\t\t[readOnly]=\"false\"\r\n\t\t\t\t\t(done)=\"ricercaPFReady($event)\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-ricerca-pf>\r\n\t\t\t\t<lib-info-pf\r\n\t\t\t\t\t*ngIf=\"personaFisica\"\r\n\t\t\t\t\t[cfDifferentFrom]=\"cfDifferentFrom\"\r\n\t\t\t\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t\t\t\t[infopf]=\"altriSoggetti?.personaFisica?.infoAnagrafiche\"\r\n\t\t\t\t\t[readOnly]=\"true\"\r\n\t\t\t\t\t[validatorFormControl]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-info-pf> -->\r\n\t\t\t\t<lib-persona-fisica\r\n\t\t\t\t\t*ngIf=\"showComponentRicercaPF\"\r\n\t\t\t\t\t(done)=\"personaFisicaReady($event)\"\r\n\t\t\t\t\t[nazioni]=\"nazioni\"\r\n\t\t\t\t\t[province]=\"province\"\r\n\t\t\t\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t\t\t\t[infoPersonaFisica]=\"altriSoggetti?.personaFisica\"\r\n\t\t\t\t\t[idDelega]=\"null\"\r\n\t\t\t\t\t[validatorFormControl]=\"true\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-persona-fisica>\r\n\t\t\t\t<!-- <lib-ricerca-pg\r\n\t\t\t\t\t*ngIf=\"showComponentRicercaPG\"\r\n\t\t\t\t\t[namespace]=\"nspg\"\r\n\t\t\t\t\t[readOnly]=\"false\"\r\n\t\t\t\t\t(done)=\"ricercaPGReady($event)\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-ricerca-pg>\r\n\t\t\t\t<lib-persona-giuridica\r\n\t\t\t\t\t*ngIf=\"personaGiuridica\"\r\n\t\t\t\t\t[namespace]=\"nspg\"\r\n\t\t\t\t\t[datisocieta]=\"altriSoggetti?.personaGiuridica\"\r\n\t\t\t\t\t[idDelega]=\"altriSoggetti.idPersona\"\r\n\t\t\t\t\t[validatorFormControl]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-persona-giuridica> -->\r\n\t\t\t\t<!-- TODO -->\r\n\t\t\t\t<lib-persona-giuridica\r\n\t\t\t\t\t*ngIf=\"showComponentRicercaPG\"\r\n\t\t\t\t\t(done)=\"personaGiuridicaReady($event)\"\r\n\t\t\t\t\t[namespace]=\"nspg\"\r\n\t\t\t\t\t[datisocieta]=\"altriSoggetti?.personaGiuridica\"\r\n\t\t\t\t\t[idDelega]=\"null\"\r\n\t\t\t\t\t[validatorFormControl]=\"false\"\r\n\t\t\t\t\t[gestioneSedi]=\"false\"\r\n\t\t\t\t\t[couldBeDittaIndividuale]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-persona-giuridica>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</mat-expansion-panel>\r\n\t<div class=\"mt-4\"></div>\r\n\t<lib-stepper-navigator\r\n\t\t[form]=\"form\"\r\n\t\t[direction]=\"direction\"\r\n\t\t[isFinal]=\"isFinal\"\r\n\t\t[isContainerValid]=\"isFormValid\"\r\n\t\t(goForward)=\"forward($event)\"\r\n\t\t(goBackward)=\"backward($event)\"\r\n\t\t(salvaBozza)=\"onSalvaBozza($event)\"\r\n\t\t(complete)=\"complete($event)\"\r\n\t>\r\n\t</lib-stepper-navigator>\r\n</div>\r\n",
                styles: [""]
            },] }
];
AltriSoggettiComponent.ctorParameters = () => [
    { type: DelegheService },
    { type: Modals },
    { type: MessageService }
];
AltriSoggettiComponent.propDecorators = {
    altriSoggetti: [{ type: Input }],
    tipologieSoggetto$: [{ type: Input }],
    cfDifferentFrom: [{ type: Input }],
    namespace: [{ type: Input }],
    formControlSoggetto: [{ type: Input }],
    province: [{ type: Input }],
    nazioni: [{ type: Input }],
    nextStep: [{ type: Output }],
    salvaBozza: [{ type: Output }],
    previousStep: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0cmktc29nZ2V0dGkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2dldHRpL0RBRy9zb3JnZW50aS9naXRsYWItc29mdHdhcmVmYWN0b3J5L2NvbW1vbi1jb21wb25lbnQtbGliL3Byb2plY3RzL3BvcnRhbC1jb21tb24tY29tcG9uZW50LWxpYi9zcmMvIiwic291cmNlcyI6WyJsaWIvZGVwb3NpdGkvY29tcG9uZW50cy9hbHRyaS1zb2dnZXR0aS9hbHRyaS1zb2dnZXR0aS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLEdBQUcsRUFBUyxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDMUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFLekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVB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SztzQkFHTCxLQUFLO3VCQUdMLE1BQU07eUJBSU4sTUFBTTsyQkFJTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBwbHVjaywgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FsdHJpLXNvZ2dldHRpLWdpdWRpemlhcmlvLWR0byc7XHJcbmltcG9ydCB7IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTyB9IGZyb20gJy4uLy4uL21vZGVscy9hbHRyaS1zb2dnZXR0aS1uby1lc3Byb3ByaW8tZHRvJztcclxuaW1wb3J0IHsgSW5mb0FuYWdyYWZpY2hlUEZEVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvaW5mby1hbmFncmFmaWNoZS1wZic7XHJcbmltcG9ydCB7IEluZm9OYXNjaXRhUEZEVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvaW5mby1uYXNjaXRhLXBmLmR0byc7XHJcbmltcG9ydCB7IFBlcnNvbmFGaXNpY2FEVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvcGVyc29uYS1maXNpY2EtZHRvJztcclxuaW1wb3J0IHsgUGVyc29uYUdpdXJpZGljYURUTyB9IGZyb20gJy4uLy4uL21vZGVscy9wZXJzb25hLWdpdXJpZGljYS1kdG8nO1xyXG5pbXBvcnQgeyBEYXRpUGVyc29uYUZpc2ljYSB9IGZyb20gJy4uLy4uL21vZGVscy9wb3J0YWxlL2RhdGktcGVyc29uYS1maXNpY2EnO1xyXG5pbXBvcnQgeyBQZXJzb25hRmlzaWNhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvcnRhbGUvcGVyc29uYS1maXNpY2EtbW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJzb25hR2l1cmlkaWNhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvcnRhbGUvcGVyc29uYS1naXVyaWRpY2EtbW9kZWwnO1xyXG5pbXBvcnQgeyBUaXBvbG9naWNhRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RpcG9sb2dpY2EtZC10LW8nO1xyXG5pbXBvcnQgeyBDb21wb25lbnRPdXRwdXRTdGF0dXMgfSBmcm9tICcuLi8uLi9ub3JtYWxpenphemlvbmUvY29tcG9uZW50LW91dHB1dC1zdGF0dXMnO1xyXG5pbXBvcnQgeyBEZWxlZ2hlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RlbGVnaGUtc2VydmljZXMvZGVsZWdoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZWR1Y2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tcG9uZW50LXJlZHVjZXInO1xyXG5pbXBvcnQgeyBNb2RhbHMgfSBmcm9tICcuLi8uLi91dGlscy9tb2RhbHMnO1xyXG5pbXBvcnQgeyBMb2NhbGl0YSB9IGZyb20gJy4uLy4uL21vZGVscy9wb3J0YWxlL2xvY2FsaXRhJztcclxuaW1wb3J0IHsgTmF6aW9uZSB9IGZyb20gJy4uLy4uL21vZGVscy9wb3J0YWxlL25hemlvbmUnO1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2xpYi1hbHRyaS1zb2dnZXR0aScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2FsdHJpLXNvZ2dldHRpLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9hbHRyaS1zb2dnZXR0aS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFsdHJpU29nZ2V0dGlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG5cdGZvcm06IEZvcm1Hcm91cDtcclxuXHJcblx0QElucHV0KClcclxuXHRhbHRyaVNvZ2dldHRpOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8gfCBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE87XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0dGlwb2xvZ2llU29nZ2V0dG8kOiBPYnNlcnZhYmxlPEFycmF5PFRpcG9sb2dpY2FEVE8+PjtcclxuXHJcblx0QElucHV0KClcclxuXHRjZkRpZmZlcmVudEZyb206IHN0cmluZztcclxuXHJcblx0QElucHV0KClcclxuXHRuYW1lc3BhY2U6IHN0cmluZztcclxuXHJcblx0QElucHV0KClcclxuXHRmb3JtQ29udHJvbFNvZ2dldHRvOiBib29sZWFuO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHByb3ZpbmNlOiBPYnNlcnZhYmxlPEFycmF5PExvY2FsaXRhPj47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0bmF6aW9uaTogT2JzZXJ2YWJsZTxBcnJheTxOYXppb25lPj47XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdG5leHRTdGVwOiBFdmVudEVtaXR0ZXI8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPIHwgQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPlxyXG5cdFx0PSBuZXcgRXZlbnRFbWl0dGVyPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTyB8IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0c2FsdmFCb3p6YTogRXZlbnRFbWl0dGVyPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTyB8IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5cclxuXHRcdD0gbmV3IEV2ZW50RW1pdHRlcjxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8gfCBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdHByZXZpb3VzU3RlcDogRXZlbnRFbWl0dGVyPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTyB8IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5cclxuXHRcdD0gbmV3IEV2ZW50RW1pdHRlcjxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8gfCBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+KCk7XHJcblxyXG5cdC8vVE9ET1xyXG5cdC8vIGNoYW5nZXNQRiQgPSBuZXcgU3ViamVjdDxcclxuXHQvLyBcdENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTykgPT4gdm9pZD5cclxuXHQvLyA+KCk7XHJcblxyXG5cdC8vVE9ET1xyXG5cdC8vIGNoYW5nZXNQRjIkID0gbmV3IFN1YmplY3Q8XHJcblx0Ly8gXHRDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8pID0+IHZvaWQ+XHJcblx0Ly8gPigpO1xyXG5cclxuXHRjaGFuZ2VzUmljZXJjYVBHJCA9IG5ldyBTdWJqZWN0PFxyXG5cdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPKSA9PiB2b2lkPlxyXG5cdD4oKTtcclxuXHJcblx0Y2hhbmdlc1JpY2VyY2FQRiQgPSBuZXcgU3ViamVjdDxcclxuXHRcdENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTykgPT4gdm9pZD5cclxuXHQ+KCk7XHJcblxyXG5cdGNoYW5nZXNQZXJzb25hR2l1cmlkaWNhJCA9IG5ldyBTdWJqZWN0PFxyXG5cdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPKSA9PiB2b2lkPlxyXG5cdD4oKTtcclxuXHJcblx0Y2hhbmdlc1BlcnNvbmFGaXNpY2EkID0gbmV3IFN1YmplY3Q8XHJcblx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8gfCBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8pID0+IHZvaWQ+XHJcblx0PigpO1xyXG5cclxuXHRuYW1lc3BhY2VJbmZvUGY6IHN0cmluZztcclxuXHJcblx0YWx0cmlTb2dnZXR0aUNoYW5nZWRTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0dGlwb1NvZ2dldHRvOiBGb3JtQ29udHJvbDtcclxuXHRzb2dnZXR0b05vbklkZW50aWZpY2F0bzogRm9ybUNvbnRyb2w7XHJcblxyXG5cdGNoZWNrU29nZ2V0dG8kOiBPYnNlcnZhYmxlPEJvb2xlYW4+O1xyXG5cclxuXHR0aXBvU29nZ2V0dG8kOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcblxyXG5cdGRpcmVjdGlvbjogc3RyaW5nID0gXCJib3RoLXdheXNcIjtcclxuXHRpc0ZpbmFsOiBib29sZWFuID0gZmFsc2U7XHJcblx0aXNGb3JtVmFsaWQ6IGJvb2xlYW47XHJcblxyXG5cdHNob3dDb21wb25lbnRSaWNlcmNhUEY6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRzaG93Q29tcG9uZW50UmljZXJjYVBHOiBib29sZWFuID0gZmFsc2U7XHJcblx0aXNTZWFyY2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0Ly8gcGVyc29uYUdpdXJpZGljYTogUGVyc29uYUdpdXJpZGljYTtcclxuXHRwZXJzb25hR2l1cmlkaWNhOiBhbnk7XHJcblx0cGVyc29uYUdpdXJpZGljYSQ6IE9ic2VydmFibGU8UGVyc29uYUdpdXJpZGljYT47XHJcblx0Ly8gcGVyc29uYUZpc2ljYTogRGF0aVBlcnNvbmFGaXNpY2E7XHJcblx0cGVyc29uYUZpc2ljYTogUGVyc29uYUZpc2ljYURUTztcclxuXHRwZXJzb25hRmlzaWNhJDogT2JzZXJ2YWJsZTxQZXJzb25hRmlzaWNhPjtcclxuXHJcblx0cGZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0cGdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHRuc3BnOiBzdHJpbmc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBkZWxlZ2hlU2VydmljZTogRGVsZWdoZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIG1vZGFsczogTW9kYWxzLFxyXG5cdFx0cHJpdmF0ZSBtc2c6IE1lc3NhZ2VTZXJ2aWNlXHJcblx0KSB7IH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblxyXG5cdFx0Ly9jb25zb2xlLmxvZygnW0FsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTyAtIEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUT10nLCB0aGlzLmFsdHJpU29nZ2V0dGkpO1xyXG5cclxuXHRcdHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0bGV0IHZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0XHR0aGlzLm5zcGcgPSBcIm5zUmFwcHJMZWdwZ1wiO1xyXG5cclxuXHRcdGlmICghdGhpcy5hbHRyaVNvZ2dldHRpKSB7XHJcblx0XHRcdHRoaXMuaW5pdEFsdHJpU29nZ2V0dGkoKTtcclxuXHRcdFx0dmFsaWQgPSBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLmZvcm1Db250cm9sU29nZ2V0dG8pIHtcclxuXHRcdFx0XHR0aGlzLnBlcnNvbmFHaXVyaWRpY2EgPSAoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLnBlcnNvbmFHaXVyaWRpY2E7XHJcblx0XHRcdFx0aWYgKHRoaXMucGVyc29uYUdpdXJpZGljYSkge1xyXG5cdFx0XHRcdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBHID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRoaXMucGVyc29uYUZpc2ljYSA9ICg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkucGVyc29uYUZpc2ljYTtcclxuXHRcdFx0XHRpZiAodGhpcy5wZXJzb25hRmlzaWNhKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlVGlwb0FsdHJvU29nZ2V0dG8gPT09ICdTT0dHRVRUT19EQV9JREVOVElGSUNBUkUnKSB7XHJcblx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZGljZVJlZ2lvbmUgPSAnJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmICghKCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8pKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGVyc29uYUZpc2ljYSA9IHRoaXMubWFwcGVyUGVyc29uYUZpc2ljYSg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnRpcG9Tb2dnZXR0byA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogKDxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5jb2RpY2VUaXBvQWx0cm9Tb2dnZXR0bywgZGlzYWJsZWQ6IGZhbHNlIH0sXHJcblx0XHRcdFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbCgndGlwb1NvZ2dldHRvJywgdGhpcy50aXBvU29nZ2V0dG8pO1xyXG5cclxuXHRcdHRoaXMuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8gPSBuZXcgRm9ybUNvbnRyb2woXHJcblx0XHRcdHsgdmFsdWU6ICg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8sIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKCdzb2dnZXR0b05vbklkZW50aWZpY2F0bycsIHRoaXMuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8pO1xyXG5cclxuXHRcdHRoaXMubmFtZXNwYWNlSW5mb1BmID0gdGhpcy5uYW1lc3BhY2UgKyBcImluZm9QRlwiO1xyXG5cclxuXHRcdGlmICghdGhpcy5mb3JtQ29udHJvbFNvZ2dldHRvKSB7XHJcblx0XHRcdGlmICgoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLnNvZ2dldHRvTm9uSWRlbnRpZmljYXRvKSB7XHJcblx0XHRcdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBGID0gZmFsc2U7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBGID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuY2hlY2tTb2dnZXR0byQgPSB0aGlzLnNvZ2dldHRvTm9uSWRlbnRpZmljYXRvLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHQvLyB0YXAoY2hlY2tTb2dnZXR0byA9PiBjb25zb2xlLmxvZygnW2NoZWNrU29nZ2V0dG8kXSAtIHNvZ2dldHRvTm9uSWRlbnRpZmljYXRvOicsIGNoZWNrU29nZ2V0dG8pKSxcclxuXHRcdFx0dGFwKChjaGVja1NvZ2dldHRvKSA9PiB7XHJcblx0XHRcdFx0aWYgKCFjaGVja1NvZ2dldHRvKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSB0cnVlO1xyXG5cdFx0XHRcdFx0dGhpcy5pc1NlYXJjaGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlc2V0U29nZ2V0dGkoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRiA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGhpcy5pc1NlYXJjaGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSksXHJcblx0XHRcdHNoYXJlUmVwbGF5KCkpO1xyXG5cclxuXHRcdGNvbnN0IGNoYW5nZXNDaGVja1NvZ2dldHRvJDogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8XHJcblx0XHRcdCh2YWx1ZTogQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPKSA9PiB2b2lkXHJcblx0XHQ+PiA9IHRoaXMuY2hlY2tTb2dnZXR0byQucGlwZShcclxuXHRcdFx0Ly8gdGFwKGNoZWNrU29nZ2V0dG8gPT4gY29uc29sZS5sb2coJ1tjaGFuZ2VzQ2hlY2tTb2dnZXR0byRdIC0gc29nZ2V0dG9Ob25JZGVudGlmaWNhdG86JywgY2hlY2tTb2dnZXR0bykpLFxyXG5cdFx0XHRtYXAoKGNoZWNrU29nZ2V0dG8pID0+IHtcclxuXHRcdFx0XHR0aGlzLmNoYW5nZXNQZXJzb25hRmlzaWNhJC5uZXh0KFxyXG5cdFx0XHRcdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKHRydWUsIChwZXJzb25hRmlzaWNhKSA9PiAoc29nZzogQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPKSA9PiB7fSkpO1xyXG5cdFx0XHRcdHJldHVybiBDb21wb25lbnRPdXRwdXRTdGF0dXMub2YodHJ1ZSxcclxuXHRcdFx0XHRcdChzb2dnZXR0bzogQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPKSA9PiAoc29nZ2V0dG8uc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8gPSBjaGVja1NvZ2dldHRvKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMudGlwb1NvZ2dldHRvJCA9IHRoaXMudGlwb1NvZ2dldHRvLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHQvLyB0YXAodGlwbyA9PiBjb25zb2xlLmxvZygnW3RpcG9Tb2dnZXR0byRdIC0gY29kaWNlU29nZ2V0dG86JywgdGlwbykpLFxyXG5cdFx0XHR0YXAoKHRpcG8pID0+IHtcclxuXHRcdFx0XHRpZiAodGlwbyAhPSAnU09HR0VUVE9fREFfSURFTlRJRklDQVJFJykge1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRTb2dnZXR0byh0aXBvKTtcclxuXHRcdFx0XHRcdHRoaXMuaXNTZWFyY2hpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5yZXNldFNvZ2dldHRpKCk7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGhpcy5pc1NlYXJjaGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGhpcy5yZXNldFZhbGlkYXRpb24oKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRzaGFyZVJlcGxheSgpXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IHRpcG9Tb2dnZXR0b0NoYW5nZXMkOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxcclxuXHRcdFx0KHZhbHVlOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8pID0+IHZvaWRcclxuXHRcdD4+ID0gdGhpcy50aXBvU29nZ2V0dG8kLnBpcGUoXHJcblx0XHRcdC8vIHRhcCh0aXBvU29nZ2V0dG9DaGFuZ2VzID0+IGNvbnNvbGUubG9nKCdbdGlwb1NvZ2dldHRvQ2hhbmdlcyRdIC0gY29kaWNlVGlwb0FsdHJvU29nZ2V0dG86JywgdGlwb1NvZ2dldHRvQ2hhbmdlcykpLFxyXG5cdFx0XHRtYXAoKHRpcG8pID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKFxyXG5cdFx0XHRcdFx0dGhpcy50aXBvU29nZ2V0dG8udmFsaWQsXHJcblx0XHRcdFx0XHQoc29nOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8pID0+IChzb2cuY29kaWNlVGlwb0FsdHJvU29nZ2V0dG8gPSB0aXBvKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGFsdHJpU29nZ2V0dGkkID0gQ29tcG9uZW50UmVkdWNlci5yZWR1Y2VyNChcclxuXHRcdFx0dGlwb1NvZ2dldHRvQ2hhbmdlcyQsXHJcblx0XHRcdGNoYW5nZXNDaGVja1NvZ2dldHRvJCxcclxuXHRcdFx0Ly8gVE9ET1xyXG5cdFx0XHQvLyB0aGlzLmNoYW5nZXNSaWNlcmNhUEYkLFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQZXJzb25hRmlzaWNhJCxcclxuXHRcdFx0Ly8gdGhpcy5jaGFuZ2VzUmljZXJjYVBHJCxcclxuXHRcdFx0Ly8gVE9ET1xyXG5cdFx0XHR0aGlzLmNoYW5nZXNQZXJzb25hR2l1cmlkaWNhJCxcclxuXHRcdFx0KHNvZ2dldHRvKSA9PiB7XHJcblx0XHRcdFx0bGV0IGlzVmFsaWQ6IGJvb2xlYW47XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ1tjb2RpY2VUaXBvQWx0cm9Tb2dnZXR0b10nLCAoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz5zb2dnZXR0bykuY29kaWNlVGlwb0FsdHJvU29nZ2V0dG8pO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdbc29nZ2V0dG9Ob25JZGVudGlmaWNhdG9dJywgKDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+c29nZ2V0dG8pLnNvZ2dldHRvTm9uSWRlbnRpZmljYXRvKTtcclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtQ29udHJvbFNvZ2dldHRvKSB7XHJcblx0XHRcdFx0XHRzd2l0Y2ggKCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnNvZ2dldHRvKS5jb2RpY2VUaXBvQWx0cm9Tb2dnZXR0bykge1xyXG5cdFx0XHRcdFx0XHRjYXNlICdQUkVTVU5UT19CRU5FRklDSUFSSU8nOlxyXG5cdFx0XHRcdFx0XHRcdC8vIGlzVmFsaWQgPSAoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz5zb2dnZXR0bykuaWRQZXJzb25hICE9IG51bGwgJiYgdGhpcy50aXBvU29nZ2V0dG8udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0aXNWYWxpZCA9IHNvZ2dldHRvLmlkUGVyc29uYSAhPSBudWxsICYmIHRoaXMudGlwb1NvZ2dldHRvLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdBVVRPUklUQV9PUkRJTkFOVEUnOlxyXG5cdFx0XHRcdFx0XHRcdC8vIGlzVmFsaWQgPSAoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz5zb2dnZXR0bykuaWRQZXJzb25hICE9IG51bGwgJiYgdGhpcy50aXBvU29nZ2V0dG8udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0aXNWYWxpZCA9IHNvZ2dldHRvLmlkUGVyc29uYSAhPSBudWxsICYmIHRoaXMudGlwb1NvZ2dldHRvLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRcdGlzVmFsaWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnZXR0bykuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8gP1xyXG5cdFx0XHRcdFx0XHQvLyBpc1ZhbGlkID0gdHJ1ZSA6IGlzVmFsaWQgPSAoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnZXR0bykuaWRQZXJzb25hICE9IG51bGxcclxuXHRcdFx0XHRcdFx0aXNWYWxpZCA9IHRydWUgOiBpc1ZhbGlkID0gc29nZ2V0dG8uaWRQZXJzb25hICE9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdbaWRQZXJzb25hXScsICg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnNvZ2dldHRvKS5pZFBlcnNvbmEpXHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ1tpZFBlcnNvbmFdJywgKDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+c29nZ2V0dG8pLmlkUGVyc29uYSlcclxuXHRcdFx0XHRyZXR1cm4gaXNWYWxpZDtcclxuXHRcdFx0fSxcclxuXHRcdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKHZhbGlkLCB0aGlzLmFsdHJpU29nZ2V0dGkpXHJcblx0XHQpXHJcblxyXG5cdFx0YWx0cmlTb2dnZXR0aSQuc3Vic2NyaWJlKChzb2dnZXR0bzogQ29tcG9uZW50T3V0cHV0U3RhdHVzPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTyB8IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz4pID0+IHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ1tBbHRyaVNvZ2dldHRpQ29tcG9uZW50XSBhbHRyaVNvZ2dldHRpJywgc29nZ2V0dG8pO1xyXG5cdFx0XHR0aGlzLmFsdHJpU29nZ2V0dGkgPSBzb2dnZXR0by5vdXRwdXQ7XHJcblx0XHRcdHRoaXMuYWx0cmlTb2dnZXR0aS5pZFBlcnNvbmEgPSBzb2dnZXR0by5vdXRwdXQuaWRQZXJzb25hO1xyXG5cdFx0XHR0aGlzLmlzRm9ybVZhbGlkID0gc29nZ2V0dG8uc3RhdHVzO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZXNldFZhbGlkYXRpb24oKSB7XHJcblx0XHR0aGlzLmNoYW5nZXNQZXJzb25hRmlzaWNhJC5uZXh0KFxyXG5cdFx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXMub2YodHJ1ZSwgKHBlcnNvbmFGaXNpY2EpID0+IChzb2dnOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8pID0+IHsgfSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5jaGFuZ2VzUGVyc29uYUdpdXJpZGljYSQubmV4dChcclxuXHRcdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKHRydWUsIChwZXJzb25hR2l1cmlkaWNhKSA9PiAoc29nZzogQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPKSA9PiB7IH0pXHJcblx0XHQpXHJcblx0fVxyXG5cclxuXHRpbml0QWx0cmlTb2dnZXR0aSgpIHtcclxuXHRcdGlmICh0aGlzLmZvcm1Db250cm9sU29nZ2V0dG8pIHtcclxuXHRcdFx0dGhpcy5hbHRyaVNvZ2dldHRpID0gbmV3IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTygpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5hbHRyaVNvZ2dldHRpID0gbmV3IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gVE9ET1xyXG5cdHB1YmxpYyB2aWV3UGVyc29uYSgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmZvcm1Db250cm9sU29nZ2V0dG8pIHtcclxuXHRcdFx0cmV0dXJuICF0aGlzLnRpcG9Tb2dnZXR0by52YWx1ZSB8fFxyXG5cdFx0XHRcdHRoaXMudGlwb1NvZ2dldHRvLnZhbHVlID09PSBcIlNPR0dFVFRPX0RBX0lERU5USUZJQ0FSRVwiXHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0bGV0IHNob3dDb21wb25lbnQ6IGJvb2xlYW47XHJcblx0XHRcdHRoaXMuY2hlY2tTb2dnZXR0byQuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdbY2hlY2tTb2dnZXR0b10nLCBfKTtcclxuXHRcdFx0XHRzaG93Q29tcG9uZW50ID0gXy52YWx1ZU9mKCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm4gc2hvd0NvbXBvbmVudDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHNldFNvZ2dldHRvKHRpcG86IHN0cmluZykge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJ1tzZXREZWxlZ2FdJywgZGVsZWdhKTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdbaXNQZXJzb25hRmlzaWNhXScsIHRoaXMuaXNQZXJzb25hRmlzaWNhKHRoaXMucmFwcHJlc2VudGFuemEuY29kaWNlRGVsZWdhKSlcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdbaXNQZXJzb25hR2l1cmlkaWNhXScsIHRoaXMuaXNQZXJzb25hR2l1cmlkaWNhKHRoaXMucmFwcHJlc2VudGFuemEuY29kaWNlRGVsZWdhKSlcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdbY29kaWNlRGVsZWdhXScsIHRoaXMucmFwcHJlc2VudGFuemEuY29kaWNlRGVsZWdhKTtcclxuXHJcblx0XHR0aGlzLnJlc2V0U29nZ2V0dGkoKTtcclxuXHJcblx0XHRpZiAodGhpcy5pc1BlcnNvbmFGaXNpY2EodGlwbykpIHtcclxuXHRcdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBGID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBHID0gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNQZXJzb25hR2l1cmlkaWNhKHRpcG8pKSB7XHJcblx0XHRcdHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRiA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVzZXRTb2dnZXR0aSgpIHtcclxuXHJcblx0XHRpZiAoIXRoaXMuYWx0cmlTb2dnZXR0aSkge1xyXG5cdFx0XHR0aGlzLmluaXRBbHRyaVNvZ2dldHRpKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZm9ybUNvbnRyb2xTb2dnZXR0bykge1xyXG5cdFx0XHQoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLnBlcnNvbmFHaXVyaWRpY2EgPSBudWxsO1xyXG5cdFx0XHR0aGlzLnBlcnNvbmFHaXVyaWRpY2EgPSBudWxsO1xyXG5cdFx0XHQoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZGljZVJlZ2lvbmUgPSAnJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8gPSB0aGlzLnNvZ2dldHRvTm9uSWRlbnRpZmljYXRvLnZhbHVlO1xyXG5cdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZ25vbWUgPSBudWxsO1xyXG5cdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLm5vbWUgPSBudWxsO1xyXG5cdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZEZpc2NhbGUgPSBudWxsO1xyXG5cdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvbXVuZU5hc2NpdGEgPSBudWxsO1xyXG5cdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLnByb3ZpbmNpYU5hc2NpdGEgPSBudWxsO1xyXG5cdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmRhdGFOYXNjaXRhID0gbnVsbDtcclxuXHRcdH1cclxuXHRcdHRoaXMuYWx0cmlTb2dnZXR0aS5pZFBlcnNvbmEgPSBudWxsO1xyXG5cdFx0dGhpcy5hbHRyaVNvZ2dldHRpLnBlcnNvbmFGaXNpY2EgPSBudWxsO1xyXG5cdFx0dGhpcy5wZXJzb25hRmlzaWNhID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdGlzUGVyc29uYUZpc2ljYShjb2RpY2VTb2dnZXR0bzogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKGNvZGljZVNvZ2dldHRvID09PSBcIlBSRVNVTlRPX0JFTkVGSUNJQVJJT1wiKVxyXG5cdH1cclxuXHJcblx0aXNQZXJzb25hR2l1cmlkaWNhKGNvZGljZVNvZ2dldHRvOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoY29kaWNlU29nZ2V0dG8gPT09ICdBVVRPUklUQV9PUkRJTkFOVEUnKVxyXG5cdH1cclxuXHJcblx0cmljZXJjYVBGUmVhZHkocmljZXJjYVBGU3RhdHVzOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8RGF0aVBlcnNvbmFGaXNpY2E+KSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZygnW3JpY2VyY2FQRlJlYWR5XScsIHJpY2VyY2FQRlN0YXR1cyk7XHJcblx0XHR0aGlzLmNoYW5nZXNSaWNlcmNhUEYkLm5leHQoXHJcblx0XHRcdHJpY2VyY2FQRlN0YXR1cy5tYXBWYWx1ZShcclxuXHRcdFx0XHQoaW5mb1BGKSA9PiAoc29nZzogQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPIHwgQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmdldFBlcnNvbmFGaXNpY2EoaW5mb1BGLmlkKTtcclxuXHRcdFx0XHRcdGlmICghdGhpcy5mb3JtQ29udHJvbFNvZ2dldHRvKSB7XHJcblx0XHRcdFx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnNvZ2cpLnNvZ2dldHRvTm9uSWRlbnRpZmljYXRvID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRzb2dnLmlkUGVyc29uYSA9IGluZm9QRi5pZDtcclxuXHRcdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHBlcnNvbmFGaXNpY2FSZWFkeShwZXJzb25hRmlzaWNhU3RhdHVzOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8UGVyc29uYUZpc2ljYURUTz4pIHtcclxuXHRcdC8vY29uc29sZS5sb2coJ1twZXJzb25hRmlzaWNhUmVhZHldJywgcGVyc29uYUZpc2ljYVN0YXR1cyk7XHJcblx0XHR0aGlzLmNoYW5nZXNQZXJzb25hRmlzaWNhJC5uZXh0KFxyXG5cdFx0XHRwZXJzb25hRmlzaWNhU3RhdHVzLm1hcFZhbHVlKFxyXG5cdFx0XHRcdChwZXJzb25hRmlzaWNhKSA9PiAoc29nZzogQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPIHwgQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBwZiA9IG5ldyBQZXJzb25hRmlzaWNhRFRPKCk7XHJcblx0XHRcdFx0XHRwZi5pbmZvQW5hZ3JhZmljaGUgPSBwZXJzb25hRmlzaWNhLmluZm9BbmFncmFmaWNoZTtcclxuXHRcdFx0XHRcdHBmLmluZm9OYXNjaXRhID0gcGVyc29uYUZpc2ljYS5pbmZvTmFzY2l0YTtcclxuXHRcdFx0XHRcdHBmLmlkID0gcGVyc29uYUZpc2ljYS5pZDtcclxuXHRcdFx0XHRcdGlmKHBlcnNvbmFGaXNpY2EuaWQpe1xyXG5cdFx0XHRcdFx0XHRzb2dnLmlkUGVyc29uYSA9IHBlcnNvbmFGaXNpY2EuaWQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRzb2dnLnBlcnNvbmFGaXNpY2EgPSBwZjtcclxuXHRcdFx0XHRcdGlmICghdGhpcy5mb3JtQ29udHJvbFNvZ2dldHRvKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8udmFsdWUgP1xyXG5cdFx0XHRcdFx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnNvZ2cpLnNvZ2dldHRvTm9uSWRlbnRpZmljYXRvID0gdGhpcy5zb2dnZXR0b05vbklkZW50aWZpY2F0by52YWx1ZSA6XHJcblx0XHRcdFx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnKS5zb2dnZXR0b05vbklkZW50aWZpY2F0byA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0KDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+c29nZykuY29nbm9tZSA9IHBlcnNvbmFGaXNpY2E/LmluZm9BbmFncmFmaWNoZT8uY29nbm9tZTtcclxuXHRcdFx0XHRcdFx0KDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+c29nZykubm9tZSA9IHBlcnNvbmFGaXNpY2E/LmluZm9BbmFncmFmaWNoZT8ubm9tZTtcclxuXHRcdFx0XHRcdFx0KDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+c29nZykuY29kRmlzY2FsZSA9IHBlcnNvbmFGaXNpY2E/LmluZm9BbmFncmFmaWNoZT8uY29kRmlzY2FsZTtcclxuXHRcdFx0XHRcdFx0KDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+c29nZykuY29tdW5lTmFzY2l0YSA9IHBlcnNvbmFGaXNpY2E/LmluZm9OYXNjaXRhPy5jb211bmVOYXNjaXRhO1xyXG5cdFx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnKS5wcm92aW5jaWFOYXNjaXRhID0gcGVyc29uYUZpc2ljYT8uaW5mb05hc2NpdGE/LnByb3ZpbmNpYU5hc2NpdGE7XHJcblx0XHRcdFx0XHRcdC8vVE9ET1xyXG5cdFx0XHRcdFx0XHQvLyAoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnKS5kYXRhTmFzY2l0YSA9IG5ldyBEYXRlKG1vbWVudChwZXJzb25hRmlzaWNhPy5pbmZvTmFzY2l0YT8uZGF0YU5hc2NpdGEsIFwiREQvTU0vWVlZWVwiKS50b0RhdGUoKSk7XHJcblx0XHRcdFx0XHRcdC8vICg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnNvZ2cpLmRhdGFOYXNjaXRhID0gbW9tZW50KHBlcnNvbmFGaXNpY2E/LmluZm9OYXNjaXRhPy5kYXRhTmFzY2l0YSwgXCJERC9NTS9ZWVlZXCIpLnRvRGF0ZSgpO1xyXG5cdFx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnKS5kYXRhTmFzY2l0YSA9IHBlcnNvbmFGaXNpY2E/LmluZm9OYXNjaXRhPy5kYXRhTmFzY2l0YTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyaWNlcmNhUEdSZWFkeShyaWNlcmNhUEdTdGF0dXM6IENvbXBvbmVudE91dHB1dFN0YXR1czxQZXJzb25hR2l1cmlkaWNhPikge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJ1tyaWNlcmNhUEdSZWFkeV0nLCByaWNlcmNhUEdTdGF0dXMpO1xyXG5cdFx0dGhpcy5jaGFuZ2VzUmljZXJjYVBHJC5uZXh0KFxyXG5cdFx0XHRyaWNlcmNhUEdTdGF0dXMubWFwVmFsdWUoXHJcblx0XHRcdFx0KGluZm9QRykgPT4gKHNvZ2c6IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTykgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXRQZXJzb25hR2l1cmlkaWNhKGluZm9QRy5kYXRpUGVyc29uYUdpdXJpZGljYS5pZCk7XHJcblx0XHRcdFx0XHRzb2dnLmlkUGVyc29uYSA9IGluZm9QRy5kYXRpUGVyc29uYUdpdXJpZGljYS5pZDtcclxuXHRcdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHBlcnNvbmFHaXVyaWRpY2FSZWFkeShwZXJzb25hR2l1cmlkaWNhU3RhdHVzOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8UGVyc29uYUdpdXJpZGljYURUTz4pIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKFwiW3BlcnNvbmFHaXVyaWRpY2FSZWFkeV1cIiwgcGVyc29uYUdpdXJpZGljYVN0YXR1cyk7XHJcblx0XHR0aGlzLmNoYW5nZXNQZXJzb25hR2l1cmlkaWNhJC5uZXh0KFxyXG5cdFx0XHRwZXJzb25hR2l1cmlkaWNhU3RhdHVzLm1hcFZhbHVlKFxyXG5cdFx0XHRcdChwZXJzb25hR2l1cmlkaWNhKSA9PiAoc29nZzogQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBwZyA9IG5ldyBQZXJzb25hR2l1cmlkaWNhRFRPKCk7XHJcblx0XHRcdFx0XHRwZy5jb2RpY2VGaXNjYWxlID0gcGVyc29uYUdpdXJpZGljYS5jb2RpY2VGaXNjYWxlO1xyXG5cdFx0XHRcdFx0cGcucmFnaW9uZVNvY2lhbGUgPSBwZXJzb25hR2l1cmlkaWNhLnJhZ2lvbmVTb2NpYWxlO1xyXG5cdFx0XHRcdFx0cGcucGFydGl0YUlWQSA9IHBlcnNvbmFHaXVyaWRpY2EucGFydGl0YUlWQTtcclxuXHRcdFx0XHRcdHBnLmlkUGVyc29uYUdpdXJpZGljYSA9IHBlcnNvbmFHaXVyaWRpY2EuaWRQZXJzb25hR2l1cmlkaWNhO1xyXG5cdFx0XHRcdFx0c29nZy5pZFBlcnNvbmEgPSBwZXJzb25hR2l1cmlkaWNhLmlkUGVyc29uYUdpdXJpZGljYTtcclxuXHRcdFx0XHRcdHNvZ2cucGVyc29uYUdpdXJpZGljYSA9IHBnO1xyXG5cdFx0XHRcdFx0aWYgKHBlcnNvbmFHaXVyaWRpY2Euc2VkaSAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0c29nZy5jb2RpY2VSZWdpb25lID0gcGVyc29uYUdpdXJpZGljYT8uc2VkaVswXT8uaW5kaXJpenpvPy5yZWdpb25lPy5zaWdsYTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRQZXJzb25hRmlzaWNhKGlkOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRiA9IGZhbHNlO1xyXG5cdFx0Ly9kZWJ1Z2dlclxyXG5cdFx0dGhpcy5wZXJzb25hRmlzaWNhJCA9IHRoaXMuZGVsZWdoZVNlcnZpY2UuZ2V0UGVyc29uYShpZClcclxuXHRcdFx0LnBpcGUoc2hhcmVSZXBsYXkoKSk7XHJcblxyXG5cdFx0dGhpcy5wZlN1YnNjcmlwdGlvbiA9IHRoaXMucGVyc29uYUZpc2ljYSQucGlwZShcclxuXHRcdFx0Ly8gcGx1Y2soXCJkYXRpUGVyc29uYUZpc2ljYVwiKVxyXG5cdFx0KS5zdWJzY3JpYmUoXHJcblx0XHRcdC8vIChwZjogRGF0aVBlcnNvbmFGaXNpY2EpID0+IHtcclxuXHRcdFx0KHBmKSA9PiB7XHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZygnW3BmXScsIHBmKTtcclxuXHRcdFx0XHR0aGlzLnBlcnNvbmFGaXNpY2EgPSB0aGlzLm1hcHBlclBlcnNvbmFGaXNpY2EocGYuZGF0aVBlcnNvbmFGaXNpY2EpO1xyXG5cdFx0XHRcdC8vIHRoaXMucGVyc29uYUZpc2ljYSA9IHBmO1xyXG5cdFx0XHRcdCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlUmVnaW9uZSA9IHBmPy5yZXNpZGVuemE/LnJlZ2lvbmU/LnNpZ2xhO1xyXG5cdFx0XHRcdC8vKDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5wZXJzb25hRmlzaWNhID0gdGhpcy5wZXJzb25hRmlzaWNhO1xyXG5cdFx0XHRcdHRoaXMuYWx0cmlTb2dnZXR0aS5pZFBlcnNvbmEgPSBpZDtcclxuXHRcdFx0XHQvLyB0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSB0cnVlO1xyXG5cdFx0XHRcdGlmICh0aGlzLnBlcnNvbmFGaXNpY2EpIHtcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBGID0gdHJ1ZSwgMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuaXNTZWFyY2hpbmcgPSB0cnVlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRfID0+IHtcclxuXHRcdFx0XHR0aGlzLm1vZGFscy5mYWlsdXJlKFtcclxuXHRcdFx0XHRcdFwicmVjdXBlcm8uZGF0aXBlcnNvbmFmaXNpY2EuZmFpbHVyZVwiXHJcblx0XHRcdFx0XSwgW10pO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0UGVyc29uYUdpdXJpZGljYShpZDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnBlcnNvbmFHaXVyaWRpY2EkID0gdGhpcy5kZWxlZ2hlU2VydmljZS5nZXREYXRpU29jaWV0YShpZClcclxuXHRcdFx0LnBpcGUoc2hhcmVSZXBsYXkoKSk7XHJcblxyXG5cdFx0dGhpcy5wZ1N1YnNjcmlwdGlvbiA9IHRoaXMucGVyc29uYUdpdXJpZGljYSQucGlwZShcclxuXHRcdFx0Ly8gcGx1Y2soXCJkYXRpUGVyc29uYUdpdXJpZGljYVwiKVxyXG5cdFx0KS5zdWJzY3JpYmUoXHJcblx0XHRcdChwZzogUGVyc29uYUdpdXJpZGljYSkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdbcGddJywgcGcpO1xyXG5cdFx0XHRcdHRoaXMubWFwcGVyUGVyc29uYUdpdXJpZGljYShwZyk7XHJcblx0XHRcdFx0dGhpcy5wZXJzb25hR2l1cmlkaWNhID0gcGc7XHJcblx0XHRcdFx0Ly8gKDxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5pZFBlcnNvbmEgPSBpZDtcclxuXHRcdFx0XHR0aGlzLmFsdHJpU29nZ2V0dGkuaWRQZXJzb25hID0gaWQ7XHJcblx0XHRcdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBHID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5pc1NlYXJjaGluZyA9IHRydWU7XHJcblx0XHRcdFx0aWYgKHBnLnNlZGkgIT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRjb25zdCBzZWRlID0gcGcuc2VkaS5maWx0ZXIoc2VkZUxlZ2FsZSA9PiBzZWRlTGVnYWxlLnRpcG9TZWRlLmNvZGljZSA9PT0gXCJMRUdBTEVcIik7XHJcblx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZGljZVJlZ2lvbmUgPSBzZWRlWzBdLmluZGlyaXp6by5yZWdpb25lLnNpZ2xhO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0XyA9PiB7XHJcblx0XHRcdFx0dGhpcy5tb2RhbHMuZmFpbHVyZShbXHJcblx0XHRcdFx0XHRcInJlY3VwZXJvLmRhdGlwZXJzb25hZ2l1cmlkaWNhLmZhaWx1cmVcIlxyXG5cdFx0XHRcdF0sIFtdKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdG1hcHBlclBlcnNvbmFGaXNpY2EoZGF0aVBlcnNvbmEpOiBQZXJzb25hRmlzaWNhRFRPIHtcclxuXHRcdC8vY29uc29sZS5sb2coJ1ttYXBwZXJQZXJzb25hRmlzaWNhXS0gZGF0aVBlcnNvbmEnLCBkYXRpUGVyc29uYSk7XHJcblxyXG5cdFx0Y29uc3QgcGVyc29uYUZpc2ljYSA9IG5ldyBQZXJzb25hRmlzaWNhRFRPKCk7XHJcblx0XHRjb25zdCBpbmZvQW5hZ3JhZmljaGUgPSBuZXcgSW5mb0FuYWdyYWZpY2hlUEZEVE8oKTtcclxuXHRcdGluZm9BbmFncmFmaWNoZS5jb2RGaXNjYWxlID0gZGF0aVBlcnNvbmEuY29kRmlzY2FsZTtcclxuXHRcdGluZm9BbmFncmFmaWNoZS5jb2dub21lID0gZGF0aVBlcnNvbmEuY29nbm9tZTtcclxuXHRcdGluZm9BbmFncmFmaWNoZS5ub21lID0gZGF0aVBlcnNvbmEubm9tZTtcclxuXHRcdHBlcnNvbmFGaXNpY2EuaW5mb0FuYWdyYWZpY2hlID0gaW5mb0FuYWdyYWZpY2hlO1xyXG5cdFx0cGVyc29uYUZpc2ljYS5pZCA9IGRhdGlQZXJzb25hLmlkUGVyc29uYTtcclxuXHRcdGNvbnN0IGluZm9OYXNjaXRhID0gbmV3IEluZm9OYXNjaXRhUEZEVE8oKTtcclxuXHRcdGluZm9OYXNjaXRhLmNvbXVuZU5hc2NpdGEgPSBkYXRpUGVyc29uYS5jb211bmVOYXNjaXRhO1xyXG5cdFx0aW5mb05hc2NpdGEucHJvdmluY2lhTmFzY2l0YSA9IGRhdGlQZXJzb25hLnByb3ZpbmNpYU5hc2NpdGE7XHJcblx0XHRpbmZvTmFzY2l0YS5kYXRhTmFzY2l0YSA9IGRhdGlQZXJzb25hLmRhdGFOYXNjaXRhO1xyXG5cdFx0cGVyc29uYUZpc2ljYS5pbmZvTmFzY2l0YSA9IGluZm9OYXNjaXRhO1xyXG5cdFx0KDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5wZXJzb25hRmlzaWNhID0gcGVyc29uYUZpc2ljYTtcclxuXHRcdC8vY29uc29sZS5sb2coJ1ttYXBwZXJQZXJzb25hRmlzaWNhXS0gcGVyc29uYUZpc2ljYScsIHBlcnNvbmFGaXNpY2EpO1xyXG5cdFx0Ly9jb25zb2xlLmxvZygnW21hcHBlclBlcnNvbmFGaXNpY2FdLSBhbHRyaVNvZ2dldHRpJywgdGhpcy5hbHRyaVNvZ2dldHRpLnBlcnNvbmFGaXNpY2EpO1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSB0cnVlLCAwKTtcclxuXHRcdHJldHVybiBwZXJzb25hRmlzaWNhO1xyXG5cdH1cclxuXHJcblx0bWFwcGVyUGVyc29uYUdpdXJpZGljYShkYXRpUGVyc29uYTogUGVyc29uYUdpdXJpZGljYSkge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJ1ttYXBwZXJQZXJzb25hR2l1cmlkaWNhXScsIGRhdGlQZXJzb25hKTtcclxuXHJcblx0XHRpZiAoIXRoaXMuYWx0cmlTb2dnZXR0aSkge1xyXG5cdFx0XHR0aGlzLmluaXRBbHRyaVNvZ2dldHRpKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcGVyc29uYUdpdXJpZGljYSA9IG5ldyBQZXJzb25hR2l1cmlkaWNhRFRPKCk7XHJcblx0XHRwZXJzb25hR2l1cmlkaWNhLmNvZGljZUZpc2NhbGUgPSBkYXRpUGVyc29uYS5kYXRpUGVyc29uYUdpdXJpZGljYS5jb2RpY2VGaXNjYWxlO1xyXG5cdFx0cGVyc29uYUdpdXJpZGljYS5yYWdpb25lU29jaWFsZSA9IGRhdGlQZXJzb25hLmRhdGlQZXJzb25hR2l1cmlkaWNhLnJhZ2lvbmVTb2NpYWxlO1xyXG5cdFx0cGVyc29uYUdpdXJpZGljYS5wYXJ0aXRhSVZBID0gZGF0aVBlcnNvbmEuZGF0aVBlcnNvbmFHaXVyaWRpY2EucGFydGl0YUlWQTtcclxuXHRcdCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkucGVyc29uYUdpdXJpZGljYSA9IHBlcnNvbmFHaXVyaWRpY2E7XHJcblx0fVxyXG5cclxuXHRlbmFibGVTZWFyY2goKSB7XHJcblx0XHR0aGlzLnJlc2V0U29nZ2V0dGkoKTtcclxuXHJcblx0XHQvLyBjb25zb2xlLmxvZygnW2VuYWJsZVNlYXJjaF0gLSBjb2RpY2VTb2dnZXR0bzonLCAoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZGljZVRpcG9BbHRyb1NvZ2dldHRvKTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdbZW5hYmxlU2VhcmNoXSAtIHNvZ2dldHRvTm9uSWRlbnRpZmljYXRvOicsICg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8pO1xyXG5cclxuXHRcdGlmICgoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZGljZVRpcG9BbHRyb1NvZ2dldHRvKSB7XHJcblxyXG5cdFx0XHR0aGlzLnRpcG9Tb2dnZXR0by5zZXRWYWx1ZSgoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZGljZVRpcG9BbHRyb1NvZ2dldHRvKTtcclxuXHJcblx0XHRcdGlmICh0aGlzLmlzUGVyc29uYUZpc2ljYSgoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZGljZVRpcG9BbHRyb1NvZ2dldHRvKSkge1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBGID0gdHJ1ZSwgMCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLmlzUGVyc29uYUdpdXJpZGljYSgoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZGljZVRpcG9BbHRyb1NvZ2dldHRvKSkge1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBHID0gdHJ1ZSwgMCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8uc2V0VmFsdWUoKDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5zb2dnZXR0b05vbklkZW50aWZpY2F0byk7XHJcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBGID0gdHJ1ZSwgMCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3J3YXJkKF86IGFueSkge1xyXG5cdFx0dGhpcy5uZXh0U3RlcC5lbWl0KHRoaXMuYWx0cmlTb2dnZXR0aSk7XHJcblx0fVxyXG5cclxuXHRiYWNrd2FyZCgkZXZlbnQ6IGFueSkge1xyXG5cdFx0dGhpcy5wcmV2aW91c1N0ZXAuZW1pdCh0aGlzLmFsdHJpU29nZ2V0dGkpO1xyXG5cdH1cclxuXHJcblx0Y29tcGxldGUoJGV2ZW50OiBhbnkpIHsgfVxyXG5cclxuXHRvblNhbHZhQm96emEoJGV2ZW50OiBhbnkpIHtcclxuXHRcdHRoaXMuc2FsdmFCb3p6YS5lbWl0KHRoaXMuYWx0cmlTb2dnZXR0aSk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmFsdHJpU29nZ2V0dGlDaGFuZ2VkU3ViKSB7XHJcblx0XHRcdHRoaXMuYWx0cmlTb2dnZXR0aUNoYW5nZWRTdWIudW5zdWJzY3JpYmUoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl19