UNPKG

iptdevs-design-system

Version:

Library common elements into IPT Plattform.

430 lines 90.6 kB
import { Component, EventEmitter, Input, Output } from '@angular/core';
import Swal from 'sweetalert2';
import * as i0 from "@angular/core";
import * as i1 from "../../core/utils/base-service/base.service";
import * as i2 from "../logic/local-storage-cod.service";
import * as i3 from "../logic/cod-form-controls";
import * as i4 from "../../core/services/commercial-service/comercial.service";
import * as i5 from "../../core/services/parameters-service/parameters.service";
import * as i6 from "@angular/common";
import * as i7 from "primeng/tabview";
import * as i8 from "../../components/atoms/loader/loader.component";
import * as i9 from "../steps/cod-form-step-one/cod-form-step-one.component";
import * as i10 from "../steps/cod-form-step-two/cod-form-step-two.component";
import * as i11 from "../steps/cod-form-step-three/cod-form-step-three.component";
import * as i12 from "../steps/cod-form-step-four/cod-form-step-four.component";
import * as i13 from "../steps/cod-form-step-five/cod-form-step-five.component";
export class CodFormComponent {
    constructor(baseService, localStorageCOD, codFormControls, commercialService, parameterService) {
        this.baseService = baseService;
        this.localStorageCOD = localStorageCOD;
        this.codFormControls = codFormControls;
        this.commercialService = commercialService;
        this.parameterService = parameterService;
        this.okCreatedCOD = new EventEmitter();
        this.allowedRoles = [
            1, 30, 31, 32, 40, 41, 42, 50, 51, 52,
        ];
        this.currentStep = 0;
        this.formTitle = 'Formulario para creación del COD';
        this.formSteps = 5;
        this.isLoading = false;
        this.loaderMessage = '';
        this.codCreationSubscription = null;
        this.userRole = this.baseService.getUserRole();
        this.getParameters();
    }
    ngOnChanges(changes) {
        if (changes['editCod'] && this.dataFromPreviusCodData) {
            if (this.editCod) {
                if (!this.dataFromPreviusCodData.edit_course_payment) {
                    Swal.fire({
                        title: 'Querido asesor',
                        text: 'Solo puede editar Datos del estudiante',
                        icon: 'warning'
                    });
                }
                this.formTitle = 'Formulario para verificar y editar información del COD actual';
            }
            else if (this.dataFromPreviusCodData?.cod_renovation == false && this.editCod == false) {
                this.formTitle = 'Formulario para creación del COD';
            }
            else if (this.dataFromPreviusCodData.cod_renovation == true && this.editCod == false) {
                this.formTitle = 'Formulario para la renovacion del COD';
            }
        }
    }
    ngOnDestroy() {
        if (this.subscription) {
            this.subscription.unsubscribe();
        }
    }
    allowedRole() {
        return this.allowedRoles.includes(this.userRole);
    }
    getCodbyCode() {
        // TODO: Traer COD por código y pintarlo
    }
    saveFinancingData(data) {
        if (data) {
            const dates = [];
            data.forEach(p => {
                const date = p[2];
                dates.push(date);
            });
            this.financingData = dates;
        }
    }
    getFormAction(action) {
        if (this.isRenovation == true) {
            this.financingData = [];
        }
        else {
            if (!this.financingData && this.localStorageCOD.getCodFormData(4, 'payment_method') === '1') {
                Swal.fire({
                    title: 'Querido asesor',
                    text: 'Debe hacer el cálculo de las cuotas en el paso 4',
                    icon: 'error'
                });
                return;
            }
        }
        const totalData = [];
        this.subscription = this.codFormControls.getControlValues().subscribe((controls) => {
            for (let i = 1; i <= this.formSteps; i++) {
                let controlsByStep = controls[i - 1];
                controlsByStep.forEach(control => {
                    let value = this.localStorageCOD.getCodFormData(i, control.name);
                    // Cambiar True/False del multiculturalismo 1/0
                    if (value === 'false' && control.description === 'Multiculturalismo') {
                        totalData.push({
                            control: control.name,
                            isRequired: control.required,
                            value: '0',
                            description: control.description
                        });
                    }
                    else if (value === 'true' && control.description === 'Multiculturalismo') {
                        totalData.push({
                            control: control.name,
                            isRequired: control.required,
                            value: '1',
                            description: control.description
                        });
                    }
                    else {
                        totalData.push({
                            control: control.name,
                            isRequired: control.required,
                            value,
                            description: control.description
                        });
                    }
                });
            }
            // Validar errores
            for (let i = 0; i < totalData.length; i++) {
                const element = totalData[i];
                if (!element.value && element.isRequired) {
                    Swal.fire({
                        title: 'Error Form Action Validate Error',
                        text: `Revisar el campo: "${element.description}"`,
                        icon: 'error'
                    });
                    break;
                }
            }
            if (action === 'create')
                this.createCOD(totalData);
            if (action === 'update')
                this.updateCOD(totalData);
        });
        this.subscription.unsubscribe();
    }
    updateCOD(totalData) {
        if (this.codCreationSubscription && !this.codCreationSubscription.closed) {
            return;
        }
        this.isLoading = true;
        this.loaderMessage = 'Editando COD, espere un momento';
        let request = this.getUpdateCOD(totalData);
        this.commercialService.updateCOD(request).subscribe({
            next: (response) => {
                if (response.message.code === 1) {
                    this.isLoading = false;
                    this.loaderMessage = '';
                    Swal.fire({
                        title: 'Perfecto!',
                        text: 'El COD ha sido Editado exitosamente.',
                        icon: 'success'
                    });
                    this.localStorageCOD.clearData();
                    this.okCreatedCOD.emit(true);
                }
                else if (response.message.code === 4) {
                    this.isLoading = false;
                    this.loaderMessage = '';
                    const errorMessages = response.data.errors.map(error => `- ${error.message}`).join('<br>');
                    Swal.fire({
                        title: 'Revisar lo seleccionado en los campos',
                        html: `${errorMessages}`,
                        icon: 'warning'
                    });
                }
                else {
                    this.isLoading = false;
                    this.loaderMessage = '';
                    Swal.fire({
                        title: 'Warning!',
                        text: response.message.message,
                        icon: 'error'
                    });
                }
            },
            error: (err) => {
                this.isLoading = false;
                this.loaderMessage = '';
                Swal.fire({
                    title: 'Error in cod creation',
                    text: err.message,
                    icon: 'error'
                });
            },
            complete: () => {
                this.codCreationSubscription = null;
            }
        });
    }
    createCOD(totalData) {
        if (this.codCreationSubscription && !this.codCreationSubscription.closed) {
            return;
        }
        this.isLoading = true;
        this.loaderMessage = 'Creando COD, espere un momento';
        let request = this.getCreateCOD(totalData);
        this.commercialService.createCOD(request).subscribe({
            next: (response) => {
                if (response.message.code === 1) {
                    this.isLoading = false;
                    this.loaderMessage = '';
                    Swal.fire({
                        title: 'Perfecto!',
                        text: 'El COD ha sido creado exitosamente.',
                        icon: 'success'
                    });
                    this.localStorageCOD.clearData();
                    this.okCreatedCOD.emit(true);
                }
                else if (response.message.code === 3) {
                    let alertHtml = `
          <div class="my-custom-alert">
              <h2>Warning!</h2>
          `;
                    if (!response.data.warning.average_score) {
                        alertHtml += `<p>No pasó el promedio final</p><br>`;
                    }
                    if (!response.data.warning.non_attendance) {
                        alertHtml += `<p>Tiene más del 25% de inasistencias</p><br>`;
                    }
                    if (!response.data.warning.outstanding_payments) {
                        alertHtml += `<p>Tiene pagos pendientes</p>`;
                    }
                    alertHtml += `</div>`;
                    Swal.fire({
                        html: alertHtml,
                        icon: 'error',
                        // showCancelButton: true,
                        confirmButtonText: 'Confirmar',
                        // cancelButtonText: 'Cancelar',
                    });
                    this.isLoading = false;
                }
                else if (response.message.code === 4) {
                    this.isLoading = false;
                    this.loaderMessage = '';
                    const errorMessages = response.data.errors.map(error => `- ${error.message}`).join('<br>');
                    Swal.fire({
                        title: 'Revisar lo seleccionado en los campos',
                        html: `${errorMessages}`,
                        icon: 'warning'
                    });
                }
                else {
                    this.isLoading = false;
                    this.loaderMessage = '';
                    Swal.fire({
                        title: 'Warning!',
                        text: response.message.message,
                        icon: 'error'
                    });
                }
            },
            error: (err) => {
                this.isLoading = false;
                this.loaderMessage = '';
                Swal.fire({
                    title: 'Error in cod creation',
                    text: err.message,
                    icon: 'error'
                });
            },
            complete: () => {
                this.codCreationSubscription = null;
            }
        });
    }
    getCreateCOD(data) {
        let request = {
            token: this.baseService.getUserToken(),
            student_name: data.filter(data => data.control === 'student_name')[0].value,
            student_last_name: data.filter(data => data.control === 'student_last_name')[0].value,
            nickname: data.filter(data => data.control === 'nickname')[0].value,
            student_email: data.filter(data => data.control === 'student_email')[0].value,
            student_phone_indicative: data.filter(data => data.control === 'student_phone_indicative')[0].value,
            student_phone_number: data.filter(data => data.control === 'student_phone_number')[0].value,
            gender: data.filter(data => data.control === 'gender')[0].value,
            birthdate: data.filter(data => data.control === 'birthdate')[0].value,
            city: data.filter(data => data.control === 'city')[0].value,
            student_id_card_type: data.filter(data => data.control === 'student_id_card_type')[0].value,
            student_id_card: data.filter(data => data.control === 'student_id_card')[0].value,
            password: data.filter(data => data.control === 'password')[0].value,
            needAtendant: data.filter(data => data.control === 'needAtendant')[0].value,
            parent_name: data.filter(data => data.control === 'parent_name')[0].value,
            parent_last_name: data.filter(data => data.control === 'parent_last_name')[0].value,
            parent_id_card_type: data.filter(data => data.control === 'parent_id_card_type')[0].value,
            parent_id_card: data.filter(data => data.control === 'parent_id_card')[0].value,
            parent_phone_indicative: data.filter(data => data.control === 'parent_phone_indicative')[0].value,
            parent_phone_number: data.filter(data => data.control === 'parent_phone_number')[0].value,
            parent_occupation: data.filter(data => data.control === 'parent_occupation')[0].value,
            parent_office_address: data.filter(data => data.control === 'parent_address')[0].value,
            social_stratum: data.filter(data => data.control === 'stratum')[0].value,
            civil_status: data.filter(data => data.control === 'civil_status')[0].value,
            educational_level: data.filter(data => data.control === 'grade')[0].value,
            student_address: data.filter(data => data.control === 'student_address')[0].value,
            student_occupation: data.filter(data => data.control === 'student_occupation')[0].value,
            disability: data.filter(data => data.control === 'disability')[0].value,
            health_regimen: data.filter(data => data.control === 'health_regimen')[0].value,
            marketing_reasons: data.filter(data => data.control === 'marketing_reasons')[0].value,
            study_reasons: data.filter(data => data.control === 'study_reasons')[0].value,
            observation: data.filter(data => data.control === 'observation')[0].value,
            multiculturalism_1: data.filter(data => data.control === 'multiculturalism_1')[0].value,
            multiculturalism_2: data.filter(data => data.control === 'multiculturalism_2')[0].value,
            multiculturalism_3: data.filter(data => data.control === 'multiculturalism_3')[0].value,
            multiculturalism_4: data.filter(data => data.control === 'multiculturalism_4')[0].value,
            multiculturalism_5: data.filter(data => data.control === 'multiculturalism_5')[0].value,
            multiculturalism_6: data.filter(data => data.control === 'multiculturalism_6')[0].value,
            availible_courses: data.filter(data => data.control === 'availible_courses')[0].value,
            course_type: data.filter(data => data.control === 'course_type')[0].value,
            agreement_by_category: data.filter(data => data.control === 'agreement_by_category')[0].value,
            english_level: data.filter(data => data.control === 'english_level')[0].value,
            payment_method: data.filter(data => data.control === 'payment_method')[0].value,
            quota_times: data.filter(data => data.control === 'quota_times')[0].value,
            payment_date: data.filter(data => data.control === 'payment_date')[0].value,
            payment_dates: this.financingData,
            program_price: data.filter(data => data.control === 'program_price')[0].value,
            total_price: data.filter(data => data.control === 'total_price')[0].value,
            paid_level: data.filter(data => data.control === 'paid_level')[0].value,
            terms: data.filter(data => data.control === 'terms')[0].value,
            re_password: data.filter(data => data.control === 're_password')[0].value,
            age: data.filter(data => data.control === 'age')[0].value,
            country: data.filter(data => data.control === 'country')[0].value,
            state: data.filter(data => data.control === 'state')[0].value,
            academic_plan: data.filter(data => data.control === 'academic_plan')[0].value,
            code_refers: data.filter(data => data.control === 'code_refers')[0].value,
        };
        return request;
    }
    getUpdateCOD(data) {
        let request = {
            token: this.baseService.getUserToken(),
            student_name: data.filter(data => data.control === 'student_name')[0].value,
            student_last_name: data.filter(data => data.control === 'student_last_name')[0].value,
            nickname: data.filter(data => data.control === 'nickname')[0].value,
            student_email: data.filter(data => data.control === 'student_email')[0].value,
            student_phone_indicative: data.filter(data => data.control === 'student_phone_indicative')[0].value,
            student_phone_number: data.filter(data => data.control === 'student_phone_number')[0].value,
            gender: data.filter(data => data.control === 'gender')[0].value,
            birthdate: data.filter(data => data.control === 'birthdate')[0].value,
            city: data.filter(data => data.control === 'city')[0].value,
            student_id_card_type: data.filter(data => data.control === 'student_id_card_type')[0].value,
            student_id_card: data.filter(data => data.control === 'student_id_card')[0].value,
            needAtendant: data.filter(data => data.control === 'needAtendant')[0].value,
            parent_name: data.filter(data => data.control === 'parent_name')[0].value,
            parent_last_name: data.filter(data => data.control === 'parent_last_name')[0].value,
            parent_id_card_type: data.filter(data => data.control === 'parent_id_card_type')[0].value,
            parent_id_card: data.filter(data => data.control === 'parent_id_card')[0].value,
            parent_phone_indicative: data.filter(data => data.control === 'parent_phone_indicative')[0].value,
            parent_phone_number: data.filter(data => data.control === 'parent_phone_number')[0].value,
            parent_occupation: data.filter(data => data.control === 'parent_occupation')[0].value,
            parent_office_address: data.filter(data => data.control === 'parent_address')[0].value,
            social_stratum: data.filter(data => data.control === 'stratum')[0].value,
            civil_status: data.filter(data => data.control === 'civil_status')[0].value,
            educational_level: data.filter(data => data.control === 'grade')[0].value,
            student_address: data.filter(data => data.control === 'student_address')[0].value,
            student_occupation: data.filter(data => data.control === 'student_occupation')[0].value,
            disability: data.filter(data => data.control === 'disability')[0].value,
            health_regimen: data.filter(data => data.control === 'health_regimen')[0].value,
            marketing_reasons: data.filter(data => data.control === 'marketing_reasons')[0].value,
            study_reasons: data.filter(data => data.control === 'study_reasons')[0].value,
            observation: data.filter(data => data.control === 'observation')[0].value,
            multiculturalism_1: data.filter(data => data.control === 'multiculturalism_1')[0].value,
            multiculturalism_2: data.filter(data => data.control === 'multiculturalism_2')[0].value,
            multiculturalism_3: data.filter(data => data.control === 'multiculturalism_3')[0].value,
            multiculturalism_4: data.filter(data => data.control === 'multiculturalism_4')[0].value,
            multiculturalism_5: data.filter(data => data.control === 'multiculturalism_5')[0].value,
            multiculturalism_6: data.filter(data => data.control === 'multiculturalism_6')[0].value,
            availible_courses: data.filter(data => data.control === 'availible_courses')[0].value,
            course_type: data.filter(data => data.control === 'course_type')[0].value,
            agreement_by_category: data.filter(data => data.control === 'agreement_by_category')[0].value,
            english_level: data.filter(data => data.control === 'english_level')[0].value,
            payment_method: data.filter(data => data.control === 'payment_method')[0].value,
            quota_times: data.filter(data => data.control === 'quota_times')[0].value,
            payment_date: data.filter(data => data.control === 'payment_date')[0].value,
            payment_dates: this.financingData,
            program_price: data.filter(data => data.control === 'program_price')[0].value,
            total_price: data.filter(data => data.control === 'total_price')[0].value,
            paid_level: data.filter(data => data.control === 'paid_level')[0].value,
            terms: data.filter(data => data.control === 'terms')[0].value,
            age: data.filter(data => data.control === 'age')[0].value,
            country: data.filter(data => data.control === 'country')[0].value,
            state: data.filter(data => data.control === 'state')[0].value,
            academic_plan: data.filter(data => data.control === 'academic_plan')[0].value,
            code_refers: this.parseNumber(data.filter(data => data.control === 'code_refers')[0].value),
            code_cod: data.filter(data => data.control === 'code_cod')[0].value,
        };
        return request;
    }
    changeStep(step) {
        this.currentStep = step;
    }
    parseNumber(value) {
        const parsedValue = parseFloat(value);
        return isNaN(parsedValue) ? null : parsedValue;
    }
    getParameters() {
        this.parameterService.getAllParametersCodForm().subscribe((response) => {
            this.parametersAll = response.data;
        });
    }
}
CodFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodFormComponent, deps: [{ token: i1.BaseService }, { token: i2.LocalStorageCODService }, { token: i3.CodFormControls }, { token: i4.CommercialService }, { token: i5.ParameterService }], target: i0.ɵɵFactoryTarget.Component });
CodFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodFormComponent, selector: "ipt-cod-form", inputs: { dataFromPreviusCodData: "dataFromPreviusCodData", courseSelect: "courseSelect", isNewCod: "isNewCod", editCod: "editCod", CourseSelectRenovation: "CourseSelectRenovation", isRenovation: "isRenovation" }, outputs: { okCreatedCOD: "okCreatedCOD" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"allowedRole() ; else Unauthorized\" class=\"container flex flex-column bg-white border-round-2xl p-3 container animate__animated animate__fadeInUp\">\n\n  <span *ngIf=\"editCod\" class=\"bg-yellow-500 p-2 border-round mb-2 w-auto text-lg font-semibold\" style=\"color: white;\">{{ formTitle }}</span>\n  <span *ngIf=\"!editCod && !dataFromPreviusCodData?.cod_renovation\" class=\"bg-primary p-2 border-round mb-2 w-auto text-lg font-semibold\">{{ formTitle }}</span>\n  <span *ngIf=\"!editCod && dataFromPreviusCodData?.cod_renovation == true\" class=\"p-2 border-round mb-2 w-auto text-lg font-semibold\" style=\"background-color:#1da750; color: white;\">{{ formTitle }}</span>\n  <div *ngIf=\"parametersAll !== null\">\n    <p-tabView [activeIndex]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\" [scrollable]=\"true\">\n      <p-tabPanel leftIcon=\"pi pi-star\" header=\"1. Planes y convenios\">\n        <app-cod-form-step-one (changeStepEvent)=\"changeStep($event)\" [initialData]=\"courseSelect\" [dataPreviusCodData]=\"dataFromPreviusCodData\" [isEditCod]=\"editCod\" [courseSelectRenovation]=\"CourseSelectRenovation\" [isRenovation]=\"isRenovation\" [parametersAll]=\"parametersAll\" class=\"p-1\"></app-cod-form-step-one>\n      </p-tabPanel>\n      <p-tabPanel leftIcon=\"pi pi-id-card\" header=\"2. Datos del estudiante\">\n        <app-cod-form-step-two (changeStepEvent)=\"changeStep($event)\" [initialData]=\"dataFromPreviusCodData\" [isEditCod]=\"editCod\" [parametersAll]=\"parametersAll\" class=\"p-1\"></app-cod-form-step-two>\n      </p-tabPanel>\n      <p-tabPanel leftIcon=\"pi pi-user-edit\" header=\"3. Datos del acudiente\">\n        <app-cod-form-step-three  (changeStepEvent)=\"changeStep($event)\" [initialData]=\"dataFromPreviusCodData\" [isEditCod]=\"editCod\" [parametersAll]=\"parametersAll\" class=\"p-1\"></app-cod-form-step-three>\n      </p-tabPanel>\n      <p-tabPanel leftIcon=\"pi pi-money-bill\" header=\"4. Valores\">\n        <app-cod-form-step-four (changeStepEvent)=\"changeStep($event)\" (financingData)=\"saveFinancingData($event)\" [initialData]=\"dataFromPreviusCodData\" [isEditCod]=\"editCod\" class=\"p-1\" [isRenovation]=\"isRenovation\"></app-cod-form-step-four>\n      </p-tabPanel>\n      <p-tabPanel leftIcon=\"pi pi-eye\" header=\"5. Observaciones\">\n        <app-cod-form-step-five (changeStepEvent)=\"changeStep($event)\" [userRole]=\"userRole\" [initialData]=\"dataFromPreviusCodData\" (action)=\"getFormAction($event)\" [isEditCod]=\"editCod\" [isRenovation]=\"isRenovation\" class=\"p-1\" [parametersAll]=\"parametersAll\"></app-cod-form-step-five>\n      </p-tabPanel>\n    </p-tabView>\n  </div>\n\n</div>\n\n<ng-template #Unauthorized>\n  <span class=\"flex justify-content-center font-bold p-2 bg-yellow-200 border-round-lg w-full\">\n    No tienes los permisos para acceder a esta funcionalidad, comun\u00EDcate con el desarrollador.\n  </span>\n</ng-template>\n\n\n<ipt-loader *ngIf=\"isLoading\" [isDialog]=\"true\" [message]=\"loaderMessage\"></ipt-loader>\n", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i8.LoaderComponent, selector: "ipt-loader", inputs: ["message", "isDialog"] }, { kind: "component", type: i9.CodFormStepOneComponent, selector: "app-cod-form-step-one", inputs: ["initialData", "dataPreviusCodData", "isEditCod", "courseSelectRenovation", "isRenovation", "parametersAll"], outputs: ["changeStepEvent"] }, { kind: "component", type: i10.CodFormStepTwoComponent, selector: "app-cod-form-step-two", inputs: ["initialData", "isEditCod", "parametersAll"], outputs: ["changeStepEvent"] }, { kind: "component", type: i11.CodFormStepThreeComponent, selector: "app-cod-form-step-three", inputs: ["initialData", "isEditCod", "parametersAll"], outputs: ["changeStepEvent"] }, { kind: "component", type: i12.CodFormStepFourComponent, selector: "app-cod-form-step-four", inputs: ["isEditCod", "initialData", "isRenovation"], outputs: ["changeStepEvent", "financingData"] }, { kind: "component", type: i13.CodFormStepFiveComponent, selector: "app-cod-form-step-five", inputs: ["userRole", "initialData", "isEditCod", "isRenovation", "parametersAll"], outputs: ["changeStepEvent", "action"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodFormComponent, decorators: [{
            type: Component,
            args: [{ selector: 'ipt-cod-form', template: "<div *ngIf=\"allowedRole() ; else Unauthorized\" class=\"container flex flex-column bg-white border-round-2xl p-3 container animate__animated animate__fadeInUp\">\n\n  <span *ngIf=\"editCod\" class=\"bg-yellow-500 p-2 border-round mb-2 w-auto text-lg font-semibold\" style=\"color: white;\">{{ formTitle }}</span>\n  <span *ngIf=\"!editCod && !dataFromPreviusCodData?.cod_renovation\" class=\"bg-primary p-2 border-round mb-2 w-auto text-lg font-semibold\">{{ formTitle }}</span>\n  <span *ngIf=\"!editCod && dataFromPreviusCodData?.cod_renovation == true\" class=\"p-2 border-round mb-2 w-auto text-lg font-semibold\" style=\"background-color:#1da750; color: white;\">{{ formTitle }}</span>\n  <div *ngIf=\"parametersAll !== null\">\n    <p-tabView [activeIndex]=\"currentStep\" (activeIndexChange)=\"currentStep = $event\" [scrollable]=\"true\">\n      <p-tabPanel leftIcon=\"pi pi-star\" header=\"1. Planes y convenios\">\n        <app-cod-form-step-one (changeStepEvent)=\"changeStep($event)\" [initialData]=\"courseSelect\" [dataPreviusCodData]=\"dataFromPreviusCodData\" [isEditCod]=\"editCod\" [courseSelectRenovation]=\"CourseSelectRenovation\" [isRenovation]=\"isRenovation\" [parametersAll]=\"parametersAll\" class=\"p-1\"></app-cod-form-step-one>\n      </p-tabPanel>\n      <p-tabPanel leftIcon=\"pi pi-id-card\" header=\"2. Datos del estudiante\">\n        <app-cod-form-step-two (changeStepEvent)=\"changeStep($event)\" [initialData]=\"dataFromPreviusCodData\" [isEditCod]=\"editCod\" [parametersAll]=\"parametersAll\" class=\"p-1\"></app-cod-form-step-two>\n      </p-tabPanel>\n      <p-tabPanel leftIcon=\"pi pi-user-edit\" header=\"3. Datos del acudiente\">\n        <app-cod-form-step-three  (changeStepEvent)=\"changeStep($event)\" [initialData]=\"dataFromPreviusCodData\" [isEditCod]=\"editCod\" [parametersAll]=\"parametersAll\" class=\"p-1\"></app-cod-form-step-three>\n      </p-tabPanel>\n      <p-tabPanel leftIcon=\"pi pi-money-bill\" header=\"4. Valores\">\n        <app-cod-form-step-four (changeStepEvent)=\"changeStep($event)\" (financingData)=\"saveFinancingData($event)\" [initialData]=\"dataFromPreviusCodData\" [isEditCod]=\"editCod\" class=\"p-1\" [isRenovation]=\"isRenovation\"></app-cod-form-step-four>\n      </p-tabPanel>\n      <p-tabPanel leftIcon=\"pi pi-eye\" header=\"5. Observaciones\">\n        <app-cod-form-step-five (changeStepEvent)=\"changeStep($event)\" [userRole]=\"userRole\" [initialData]=\"dataFromPreviusCodData\" (action)=\"getFormAction($event)\" [isEditCod]=\"editCod\" [isRenovation]=\"isRenovation\" class=\"p-1\" [parametersAll]=\"parametersAll\"></app-cod-form-step-five>\n      </p-tabPanel>\n    </p-tabView>\n  </div>\n\n</div>\n\n<ng-template #Unauthorized>\n  <span class=\"flex justify-content-center font-bold p-2 bg-yellow-200 border-round-lg w-full\">\n    No tienes los permisos para acceder a esta funcionalidad, comun\u00EDcate con el desarrollador.\n  </span>\n</ng-template>\n\n\n<ipt-loader *ngIf=\"isLoading\" [isDialog]=\"true\" [message]=\"loaderMessage\"></ipt-loader>\n" }]
        }], ctorParameters: function () { return [{ type: i1.BaseService }, { type: i2.LocalStorageCODService }, { type: i3.CodFormControls }, { type: i4.CommercialService }, { type: i5.ParameterService }]; }, propDecorators: { dataFromPreviusCodData: [{
                type: Input
            }], courseSelect: [{
                type: Input
            }], isNewCod: [{
                type: Input
            }], editCod: [{
                type: Input
            }], CourseSelectRenovation: [{
                type: Input
            }], isRenovation: [{
                type: Input
            }], okCreatedCOD: [{
                type: Output
            }] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC9jb2QtZm9ybS9jb2QtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kL2NvZC1mb3JtL2NvZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRTVHLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBYy9CLE1BQU0sT0FBTyxnQkFBZ0I7SUEwQjNCLFlBQ1UsV0FBd0IsRUFDeEIsZUFBdUMsRUFDdkMsZUFBZ0MsRUFDaEMsaUJBQW9DLEVBQ3BDLGdCQUFrQztRQUpsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDdkMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXRCbEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRzdDLGlCQUFZLEdBQWE7WUFDL0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtTQUN0QyxDQUFDO1FBRUssZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsY0FBUyxHQUFXLGtDQUFrQyxDQUFDO1FBRXZELGNBQVMsR0FBVyxDQUFDLENBQUM7UUFFdEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixrQkFBYSxHQUFXLEVBQUUs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QjtpR0FBaEIsZ0JBQWdCLDBVQ2hCN0IsaS9GQW1DQTsyRkRuQmEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGNBQWM7b09BTWYsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5pbXBvcnQgeyBDcmVhdGVDT0RScSwgSVVwZGF0ZUNPRFJxIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvY29kL2NvZC1ycS5tb2RlbCc7XG5pbXBvcnQgeyBDb21tZXJjaWFsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvY29tbWVyY2lhbC1zZXJ2aWNlL2NvbWVyY2lhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9iYXNlLXNlcnZpY2UvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvZEZvcm1Db250cm9scywgQ29udHJvbCB9IGZyb20gJy4uL2xvZ2ljL2NvZC1mb3JtLWNvbnRyb2xzJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZUNPRFNlcnZpY2UgfSBmcm9tICcuLi9sb2dpYy9sb2NhbC1zdG9yYWdlLWNvZC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhcmFtZXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3BhcmFtZXRlcnMtc2VydmljZS9wYXJhbWV0ZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVBhcmFtZXRlcnNBbGxScyB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3BhcmFtZXRlcnMvcGFyYW1ldGVycy1ycy5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lwdC1jb2QtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2QtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgQ29kRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBkYXRhRnJvbVByZXZpdXNDb2REYXRhPzogYW55O1xuICBASW5wdXQoKSBjb3Vyc2VTZWxlY3Q/OiBhbnk7XG4gIEBJbnB1dCgpIGlzTmV3Q29kITogYm9vbGVhbjtcbiAgQElucHV0KCkgZWRpdENvZCE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIENvdXJzZVNlbGVjdFJlbm92YXRpb24hOmFueTtcbiAgQElucHV0KCkgaXNSZW5vdmF0aW9uPzpib29sZWFuO1xuXG4gIEBPdXRwdXQoKSBva0NyZWF0ZWRDT0QgPSBuZXcgRXZlbnRFbWl0dGVyPEJvb2xlYW4+KCk7XG4gIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGFsbG93ZWRSb2xlczogbnVtYmVyW10gPSBbXG4gICAgMSwgMzAsIDMxLCAzMiwgNDAsIDQxLCA0MiwgNTAsIDUxLCA1MixcbiAgXTtcblxuICBwdWJsaWMgY3VycmVudFN0ZXA6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBmb3JtVGl0bGU6IHN0cmluZyA9ICdGb3JtdWxhcmlvIHBhcmEgY3JlYWNpw7NuIGRlbCBDT0QnO1xuICBwdWJsaWMgdXNlclJvbGU6IG51bWJlcjtcbiAgcHVibGljIGZvcm1TdGVwczogbnVtYmVyID0gNTtcbiAgcHVibGljIGZpbmFuY2luZ0RhdGE/OiBhbnlbXTtcbiAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbG9hZGVyTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBjb2RDcmVhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBwYXJhbWV0ZXJzQWxsPzpJUGFyYW1ldGVyc0FsbFJzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlQ09EOiBMb2NhbFN0b3JhZ2VDT0RTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29kRm9ybUNvbnRyb2xzOiBDb2RGb3JtQ29udHJvbHMsXG4gICAgcHJpdmF0ZSBjb21tZXJjaWFsU2VydmljZTogQ29tbWVyY2lhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXJhbWV0ZXJTZXJ2aWNlOiBQYXJhbWV0ZXJTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLnVzZXJSb2xlID0gdGhpcy5iYXNlU2VydmljZS5nZXRVc2VyUm9sZSgpO1xuICAgIHRoaXMuZ2V0UGFyYW1ldGVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydlZGl0Q29kJ10gJiYgdGhpcy5kYXRhRnJvbVByZXZpdXNDb2REYXRhKSB7XG4gICAgICBpZiAodGhpcy5lZGl0Q29kKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhRnJvbVByZXZpdXNDb2REYXRhLmVkaXRfY291cnNlX3BheW1lbnQpIHtcbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdRdWVyaWRvIGFzZXNvcicsXG4gICAgICAgICAgICB0ZXh0OiAnU29sbyBwdWVkZSBlZGl0YXIgRGF0b3MgZGVsIGVzdHVkaWFudGUnLFxuICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1UaXRsZSA9ICdGb3JtdWxhcmlvIHBhcmEgdmVyaWZpY2FyIHkgZWRpdGFyIGluZm9ybWFjacOzbiBkZWwgQ09EIGFjdHVhbCc7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YUZyb21QcmV2aXVzQ29kRGF0YT8uY29kX3Jlbm92YXRpb24gPT0gZmFsc2UgJiYgdGhpcy5lZGl0Q29kID09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZm9ybVRpdGxlID0gJ0Zvcm11bGFyaW8gcGFyYSBjcmVhY2nDs24gZGVsIENPRCc7XG4gICAgICB9ZWxzZSBpZih0aGlzLmRhdGFGcm9tUHJldml1c0NvZERhdGEuY29kX3Jlbm92YXRpb24gPT0gdHJ1ZSAmJiB0aGlzLmVkaXRDb2QgPT0gZmFsc2Upe1xuICAgICAgICB0aGlzLmZvcm1UaXRsZSA9ICdGb3JtdWxhcmlvIHBhcmEgbGEgcmVub3ZhY2lvbiBkZWwgQ09EJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYWxsb3dlZFJvbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dlZFJvbGVzLmluY2x1ZGVzKHRoaXMudXNlclJvbGUpO1xuICB9XG5cbiAgZ2V0Q29kYnlDb2RlKCkge1xuICAgIC8vIFRPRE86IFRyYWVyIENPRCBwb3IgY8OzZGlnbyB5IHBpbnRhcmxvXG4gIH1cblxuXG4gIHNhdmVGaW5hbmNpbmdEYXRhKGRhdGE6IGFueVtdKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNvbnN0IGRhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZGF0YS5mb3JFYWNoKHAgPT4ge1xuICAgICAgICBjb25zdCBkYXRlID0gcFsyXTtcbiAgICAgICAgZGF0ZXMucHVzaChkYXRlKTtcbiAgICAgIH0pXG4gICAgICB0aGlzLmZpbmFuY2luZ0RhdGEgPSBkYXRlcztcbiAgICB9XG4gIH1cblxuICBnZXRGb3JtQWN0aW9uKGFjdGlvbjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNSZW5vdmF0aW9uID09dHJ1ZSkge1xuICAgICAgdGhpcy5maW5hbmNpbmdEYXRhPVtdO1xuICAgIH1lbHNle1xuICAgICAgaWYgKCF0aGlzLmZpbmFuY2luZ0RhdGEgICYmIHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDQsICdwYXltZW50X21ldGhvZCcpID09PSAnMScpIHtcbiAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICB0aXRsZTogJ1F1ZXJpZG8gYXNlc29yJyxcbiAgICAgICAgICB0ZXh0OiAnRGViZSBoYWNlciBlbCBjw6FsY3VsbyBkZSBsYXMgY3VvdGFzIGVuIGVsIHBhc28gNCcsXG4gICAgICAgICAgaWNvbjogJ2Vycm9yJ1xuICAgICAgICB9KVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRvdGFsRGF0YTogYW55W10gPSBbXTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jb2RGb3JtQ29udHJvbHMuZ2V0Q29udHJvbFZhbHVlcygpLnN1YnNjcmliZSgoY29udHJvbHMpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5mb3JtU3RlcHM7IGkrKykge1xuICAgICAgICAgIGxldCBjb250cm9sc0J5U3RlcDogQ29udHJvbFtdID0gY29udHJvbHNbaS0xXTtcbiAgICAgICAgICAgIGNvbnRyb2xzQnlTdGVwLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKGksIGNvbnRyb2wubmFtZSk7XG4gICAgICAgICAgICAgIC8vIENhbWJpYXIgVHJ1ZS9GYWxzZSBkZWwgbXVsdGljdWx0dXJhbGlzbW8gMS8wXG4gICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJyAmJiBjb250cm9sLmRlc2NyaXB0aW9uID09PSAnTXVsdGljdWx0dXJhbGlzbW8nKSB7XG4gICAgICAgICAgICAgICAgdG90YWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgY29udHJvbDogY29udHJvbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZDogY29udHJvbC5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogY29udHJvbC5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICd0cnVlJyAmJiBjb250cm9sLmRlc2NyaXB0aW9uID09PSAnTXVsdGljdWx0dXJhbGlzbW8nKSB7XG4gICAgICAgICAgICAgICAgdG90YWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgY29udHJvbDogY29udHJvbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZDogY29udHJvbC5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMScsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogY29udHJvbC5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG90YWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgY29udHJvbDogY29udHJvbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZDogY29udHJvbC5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvbnRyb2wuZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhciBlcnJvcmVzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdG90YWxEYXRhW2ldO1xuICAgICAgICBpZiAoIWVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgIHRpdGxlOiAnRXJyb3IgRm9ybSBBY3Rpb24gVmFsaWRhdGUgRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogYFJldmlzYXIgZWwgY2FtcG86IFwiJHtlbGVtZW50LmRlc2NyaXB0aW9ufVwiYCxcbiAgICAgICAgICAgIGljb246ICdlcnJvcidcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWN0aW9uID09PSAnY3JlYXRlJykgdGhpcy5jcmVhdGVDT0QodG90YWxEYXRhKTtcbiAgICAgIGlmIChhY3Rpb24gPT09ICd1cGRhdGUnKSB0aGlzLnVwZGF0ZUNPRCh0b3RhbERhdGEpO1xuICAgIH0pXG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgdXBkYXRlQ09EKHRvdGFsRGF0YTogYW55W10pIHtcbiAgICBpZiAodGhpcy5jb2RDcmVhdGlvblN1YnNjcmlwdGlvbiAmJiAhdGhpcy5jb2RDcmVhdGlvblN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMubG9hZGVyTWVzc2FnZSA9ICdFZGl0YW5kbyBDT0QsIGVzcGVyZSB1biBtb21lbnRvJ1xuICAgIGxldCByZXF1ZXN0OiBJVXBkYXRlQ09EUnEgPSB0aGlzLmdldFVwZGF0ZUNPRCh0b3RhbERhdGEpO1xuICAgIHRoaXMuY29tbWVyY2lhbFNlcnZpY2UudXBkYXRlQ09EKHJlcXVlc3QpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UubWVzc2FnZS5jb2RlID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmxvYWRlck1lc3NhZ2UgPSAnJztcbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdQZXJmZWN0byEnLFxuICAgICAgICAgICAgdGV4dDogJ0VsIENPRCBoYSBzaWRvIEVkaXRhZG8gZXhpdG9zYW1lbnRlLicsXG4gICAgICAgICAgICBpY29uOiAnc3VjY2VzcydcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlQ09ELmNsZWFyRGF0YSgpO1xuICAgICAgICAgIHRoaXMub2tDcmVhdGVkQ09ELmVtaXQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UubWVzc2FnZS5jb2RlID09PSA0KSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmxvYWRlck1lc3NhZ2UgPSAnJztcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gKHJlc3BvbnNlLmRhdGEuZXJyb3JzIGFzIGFueVtdKS5tYXAoZXJyb3IgPT4gYC0gJHtlcnJvci5tZXNzYWdlfWApLmpvaW4oJzxicj4nKTtcblxuICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICB0aXRsZTogJ1JldmlzYXIgbG8gc2VsZWNjaW9uYWRvIGVuIGxvcyBjYW1wb3MnLFxuICAgICAgICAgICAgaHRtbDogYCR7ZXJyb3JNZXNzYWdlc31gLFxuICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmxvYWRlck1lc3NhZ2UgPSAnJztcblxuICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICB0aXRsZTogJ1dhcm5pbmchJyxcbiAgICAgICAgICAgIHRleHQ6IHJlc3BvbnNlLm1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICAgIGljb246ICdlcnJvcidcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRlck1lc3NhZ2UgPSAnJztcbiAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICB0aXRsZTogJ0Vycm9yIGluIGNvZCBjcmVhdGlvbicsXG4gICAgICAgICAgdGV4dDogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgaWNvbjogJ2Vycm9yJ1xuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29kQ3JlYXRpb25TdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgfVxuICAgIH0pXG5cbiAgfVxuXG4gIGNyZWF0ZUNPRCh0b3RhbERhdGE6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMuY29kQ3JlYXRpb25TdWJzY3JpcHRpb24gJiYgIXRoaXMuY29kQ3JlYXRpb25TdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRlck1lc3NhZ2UgPSAnQ3JlYW5kbyBDT0QsIGVzcGVyZSB1biBtb21lbnRvJ1xuICAgIGxldCByZXF1ZXN0OiBDcmVhdGVDT0RScSA9IHRoaXMuZ2V0Q3JlYXRlQ09EKHRvdGFsRGF0YSk7XG4gICAgdGhpcy5jb21tZXJjaWFsU2VydmljZS5jcmVhdGVDT0QocmVxdWVzdCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlLmNvZGUgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMubG9hZGVyTWVzc2FnZSA9ICcnO1xuICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICB0aXRsZTogJ1BlcmZlY3RvIScsXG4gICAgICAgICAgICB0ZXh0OiAnRWwgQ09EIGhhIHNpZG8gY3JlYWRvIGV4aXRvc2FtZW50ZS4nLFxuICAgICAgICAgICAgaWNvbjogJ3N1Y2Nlc3MnXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZUNPRC5jbGVhckRhdGEoKTtcbiAgICAgICAgICB0aGlzLm9rQ3JlYXRlZENPRC5lbWl0KHRydWUpO1xuICAgICAgICB9ZWxzZSBpZihyZXNwb25zZS5tZXNzYWdlLmNvZGUgPT09IDMpe1xuICAgICAgICAgIGxldCBhbGVydEh0bWwgPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm15LWN1c3RvbS1hbGVydFwiPlxuICAgICAgICAgICAgICA8aDI+V2FybmluZyE8L2gyPlxuICAgICAgICAgIGA7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmRhdGEud2FybmluZy5hdmVyYWdlX3Njb3JlKSB7XG4gICAgICAgICAgICAgICAgYWxlcnRIdG1sICs9IGA8cD5ObyBwYXPDsyBlbCBwcm9tZWRpbyBmaW5hbDwvcD48YnI+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZGF0YS53YXJuaW5nLm5vbl9hdHRlbmRhbmNlKSB7XG4gICAgICAgICAgICAgICAgYWxlcnRIdG1sICs9IGA8cD5UaWVuZSBtw6FzIGRlbCAyNSUgZGUgaW5hc2lzdGVuY2lhczwvcD48YnI+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZGF0YS53YXJuaW5nLm91dHN0YW5kaW5nX3BheW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgYWxlcnRIdG1sICs9IGA8cD5UaWVuZSBwYWdvcyBwZW5kaWVudGVzPC9wPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgYWxlcnRIdG1sICs9IGA8L2Rpdj5gO1xuICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICBodG1sOiBhbGVydEh0bWwsXG4gICAgICAgICAgICBpY29uOiAnZXJyb3InLFxuICAgICAgICAgICAgLy8gc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnQ29uZmlybWFyJyxcbiAgICAgICAgICAgIC8vIGNhbmNlbEJ1dHRvblRleHQ6ICdDYW5jZWxhcicsXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLm1lc3NhZ2UuY29kZSA9PT0gNCkge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5sb2FkZXJNZXNzYWdlID0gJyc7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IChyZXNwb25zZS5kYXRhLmVycm9ycyBhcyBhbnlbXSkubWFwKGVycm9yID0+IGAtICR7ZXJyb3IubWVzc2FnZX1gKS5qb2luKCc8YnI+Jyk7XG5cbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdSZXZpc2FyIGxvIHNlbGVjY2lvbmFkbyBlbiBsb3MgY2FtcG9zJyxcbiAgICAgICAgICAgIGh0bWw6IGAke2Vycm9yTWVzc2FnZXN9YCxcbiAgICAgICAgICAgIGljb246ICd3YXJuaW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5sb2FkZXJNZXNzYWdlID0gJyc7XG5cbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdXYXJuaW5nIScsXG4gICAgICAgICAgICB0ZXh0OiByZXNwb25zZS5tZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgICBpY29uOiAnZXJyb3InXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkZXJNZXNzYWdlID0gJyc7XG4gICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgdGl0bGU6ICdFcnJvciBpbiBjb2QgY3JlYXRpb24nLFxuICAgICAgICAgIHRleHQ6IGVyci5tZXNzYWdlLFxuICAgICAgICAgIGljb246ICdlcnJvcidcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLmNvZENyZWF0aW9uU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KVxuXG4gIH1cblxuICBnZXRDcmVhdGVDT0QoZGF0YTogYW55W10pOiBDcmVhdGVDT0RScSB7XG4gICAgbGV0IHJlcXVlc3Q6IENyZWF0ZUNPRFJxID0ge1xuICAgICAgdG9rZW46IHRoaXMuYmFzZVNlcnZpY2UuZ2V0VXNlclRva2VuKCksXG4gICAgICBzdHVkZW50X25hbWU6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9uYW1lJylbMF0udmFsdWUsXG4gICAgICBzdHVkZW50X2xhc3RfbmFtZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdzdHVkZW50X2xhc3RfbmFtZScpWzBdLnZhbHVlLFxuICAgICAgbmlja25hbWU6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnbmlja25hbWUnKVswXS52YWx1ZSxcbiAgICAgIHN0dWRlbnRfZW1haWw6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9lbWFpbCcpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9waG9uZV9pbmRpY2F0aXZlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZScpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9waG9uZV9udW1iZXI6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9waG9uZV9udW1iZXInKVswXS52YWx1ZSxcbiAgICAgIGdlbmRlcjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdnZW5kZXInKVswXS52YWx1ZSxcbiAgICAgIGJpcnRoZGF0ZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdiaXJ0aGRhdGUnKVswXS52YWx1ZSxcbiAgICAgIGNpdHk6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnY2l0eScpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9pZF9jYXJkX3R5cGU6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9pZF9jYXJkX3R5cGUnKVswXS52YWx1ZSxcbiAgICAgIHN0dWRlbnRfaWRfY2FyZDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdzdHVkZW50X2lkX2NhcmQnKVswXS52YWx1ZSxcbiAgICAgIHBhc3N3b3JkOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3Bhc3N3b3JkJylbMF0udmFsdWUsXG4gICAgICBuZWVkQXRlbmRhbnQ6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnbmVlZEF0ZW5kYW50JylbMF0udmFsdWUsXG4gICAgICBwYXJlbnRfbmFtZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfbmFtZScpWzBdLnZhbHVlLFxuICAgICAgcGFyZW50X2xhc3RfbmFtZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfbGFzdF9uYW1lJylbMF0udmFsdWUsXG4gICAgICBwYXJlbnRfaWRfY2FyZF90eXBlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3BhcmVudF9pZF9jYXJkX3R5cGUnKVswXS52YWx1ZSxcbiAgICAgIHBhcmVudF9pZF9jYXJkOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3BhcmVudF9pZF9jYXJkJylbMF0udmFsdWUsXG4gICAgICBwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZScpWzBdLnZhbHVlLFxuICAgICAgcGFyZW50X3Bob25lX251bWJlcjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfcGhvbmVfbnVtYmVyJylbMF0udmFsdWUsXG4gICAgICBwYXJlbnRfb2NjdXBhdGlvbjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfb2NjdXBhdGlvbicpWzBdLnZhbHVlLFxuICAgICAgcGFyZW50X29mZmljZV9hZGRyZXNzOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3BhcmVudF9hZGRyZXNzJylbMF0udmFsdWUsXG4gICAgICBzb2NpYWxfc3RyYXR1bTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdzdHJhdHVtJylbMF0udmFsdWUsXG4gICAgICBjaXZpbF9zdGF0dXM6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnY2l2aWxfc3RhdHVzJylbMF0udmFsdWUsXG4gICAgICBlZHVjYXRpb25hbF9sZXZlbDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdncmFkZScpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9hZGRyZXNzOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfYWRkcmVzcycpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9vY2N1cGF0aW9uOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfb2NjdXBhdGlvbicpWzBdLnZhbHVlLFxuICAgICAgZGlzYWJpbGl0eTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdkaXNhYmlsaXR5JylbMF0udmFsdWUsXG4gICAgICBoZWFsdGhfcmVnaW1lbjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdoZWFsdGhfcmVnaW1lbicpWzBdLnZhbHVlLFxuICAgICAgbWFya2V0aW5nX3JlYXNvbnM6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnbWFya2V0aW5nX3JlYXNvbnMnKVswXS52YWx1ZSxcbiAgICAgIHN0dWR5X3JlYXNvbnM6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZHlfcmVhc29ucycpWzBdLnZhbHVlLFxuICAgICAgb2JzZXJ2YXRpb246IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnb2JzZXJ2YXRpb24nKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fMTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzEnKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fMjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzInKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fMzogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzMnKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fNDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzQnKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fNTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzUnKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fNjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzYnKVswXS52YWx1ZSxcbiAgICAgIGF2YWlsaWJsZV9jb3Vyc2VzOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2F2YWlsaWJsZV9jb3Vyc2VzJylbMF0udmFsdWUsXG4gICAgICBjb3Vyc2VfdHlwZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdjb3Vyc2VfdHlwZScpWzBdLnZhbHVlLFxuICAgICAgYWdyZWVtZW50X2J5X2NhdGVnb3J5OiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2FncmVlbWVudF9ieV9jYXRlZ29yeScpWzBdLnZhbHVlLFxuICAgICAgZW5nbGlzaF9sZXZlbDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdlbmdsaXNoX2xldmVsJylbMF0udmFsdWUsXG4gICAgICBwYXltZW50X21ldGhvZDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXltZW50X21ldGhvZCcpWzBdLnZhbHVlLFxuICAgICAgcXVvdGFfdGltZXM6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAncXVvdGFfdGltZXMnKVswXS52YWx1ZSxcbiAgICAgIHBheW1lbnRfZGF0ZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXltZW50X2RhdGUnKVswXS52YWx1ZSxcbiAgICAgIHBheW1lbnRfZGF0ZXM6IHRoaXMuZmluYW5jaW5nRGF0YSEsXG4gICAgICBwcm9ncmFtX3ByaWNlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3Byb2dyYW1fcHJpY2UnKVswXS52YWx1ZSxcbiAgICAgIHRvdGFsX3ByaWNlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3RvdGFsX3ByaWNlJylbMF0udmFsdWUsXG4gICAgICBwYWlkX2xldmVsOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3BhaWRfbGV2ZWwnKVswXS52YWx1ZSxcbiAgICAgIHRlcm1zOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3Rlcm1zJylbMF0udmFsdWUsXG4gICAgICByZV9wYXNzd29yZDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdyZV9wYXNzd29yZCcpWzBdLnZhbHVlLFxuICAgICAgYWdlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2FnZScpWzBdLnZhbHVlLFxuICAgICAgY291bnRyeTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdjb3VudHJ5JylbMF0udmFsdWUsXG4gICAgICBzdGF0ZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdzdGF0ZScpWzBdLnZhbHVlLFxuICAgICAgYWNhZGVtaWNfcGxhbjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdhY2FkZW1pY19wbGFuJylbMF0udmFsdWUsXG4gICAgICBjb2RlX3JlZmVyczogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdjb2RlX3JlZmVycycpWzBdLnZhbHVlLFxuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIGdldFVwZGF0ZUNPRChkYXRhOiBhbnlbXSk6IElVcGRhdGVDT0RScSB7XG4gICAgbGV0IHJlcXVlc3Q6IElVcGRhdGVDT0RScSA9IHtcbiAgICAgIHRva2VuOiB0aGlzLmJhc2VTZXJ2aWNlLmdldFVzZXJUb2tlbigpLFxuICAgICAgc3R1ZGVudF9uYW1lOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfbmFtZScpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9sYXN0X25hbWU6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9sYXN0X25hbWUnKVswXS52YWx1ZSxcbiAgICAgIG5pY2tuYW1lOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ25pY2tuYW1lJylbMF0udmFsdWUsXG4gICAgICBzdHVkZW50X2VtYWlsOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfZW1haWwnKVswXS52YWx1ZSxcbiAgICAgIHN0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdzdHVkZW50X3Bob25lX2luZGljYXRpdmUnKVswXS52YWx1ZSxcbiAgICAgIHN0dWRlbnRfcGhvbmVfbnVtYmVyOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfcGhvbmVfbnVtYmVyJylbMF0udmFsdWUsXG4gICAgICBnZW5kZXI6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnZ2VuZGVyJylbMF0udmFsdWUsXG4gICAgICBiaXJ0aGRhdGU6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnYmlydGhkYXRlJylbMF0udmFsdWUsXG4gICAgICBjaXR5OiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2NpdHknKVswXS52YWx1ZSxcbiAgICAgIHN0dWRlbnRfaWRfY2FyZF90eXBlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfaWRfY2FyZF90eXBlJylbMF0udmFsdWUsXG4gICAgICBzdHVkZW50X2lkX2NhcmQ6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZGVudF9pZF9jYXJkJylbMF0udmFsdWUsXG4gICAgICBuZWVkQXRlbmRhbnQ6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnbmVlZEF0ZW5kYW50JylbMF0udmFsdWUsXG4gICAgICBwYXJlbnRfbmFtZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfbmFtZScpWzBdLnZhbHVlLFxuICAgICAgcGFyZW50X2xhc3RfbmFtZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfbGFzdF9uYW1lJylbMF0udmFsdWUsXG4gICAgICBwYXJlbnRfaWRfY2FyZF90eXBlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3BhcmVudF9pZF9jYXJkX3R5cGUnKVswXS52YWx1ZSxcbiAgICAgIHBhcmVudF9pZF9jYXJkOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3BhcmVudF9pZF9jYXJkJylbMF0udmFsdWUsXG4gICAgICBwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZScpWzBdLnZhbHVlLFxuICAgICAgcGFyZW50X3Bob25lX251bWJlcjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfcGhvbmVfbnVtYmVyJylbMF0udmFsdWUsXG4gICAgICBwYXJlbnRfb2NjdXBhdGlvbjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXJlbnRfb2NjdXBhdGlvbicpWzBdLnZhbHVlLFxuICAgICAgcGFyZW50X29mZmljZV9hZGRyZXNzOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3BhcmVudF9hZGRyZXNzJylbMF0udmFsdWUsXG4gICAgICBzb2NpYWxfc3RyYXR1bTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdzdHJhdHVtJylbMF0udmFsdWUsXG4gICAgICBjaXZpbF9zdGF0dXM6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnY2l2aWxfc3RhdHVzJylbMF0udmFsdWUsXG4gICAgICBlZHVjYXRpb25hbF9sZXZlbDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdncmFkZScpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9hZGRyZXNzOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfYWRkcmVzcycpWzBdLnZhbHVlLFxuICAgICAgc3R1ZGVudF9vY2N1cGF0aW9uOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0dWRlbnRfb2NjdXBhdGlvbicpWzBdLnZhbHVlLFxuICAgICAgZGlzYWJpbGl0eTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdkaXNhYmlsaXR5JylbMF0udmFsdWUsXG4gICAgICBoZWFsdGhfcmVnaW1lbjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdoZWFsdGhfcmVnaW1lbicpWzBdLnZhbHVlLFxuICAgICAgbWFya2V0aW5nX3JlYXNvbnM6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnbWFya2V0aW5nX3JlYXNvbnMnKVswXS52YWx1ZSxcbiAgICAgIHN0dWR5X3JlYXNvbnM6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnc3R1ZHlfcmVhc29ucycpWzBdLnZhbHVlLFxuICAgICAgb2JzZXJ2YXRpb246IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnb2JzZXJ2YXRpb24nKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fMTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzEnKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fMjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzInKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fMzogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzMnKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fNDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzQnKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fNTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzUnKVswXS52YWx1ZSxcbiAgICAgIG11bHRpY3VsdHVyYWxpc21fNjogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdtdWx0aWN1bHR1cmFsaXNtXzYnKVswXS52YWx1ZSxcbiAgICAgIGF2YWlsaWJsZV9jb3Vyc2VzOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2F2YWlsaWJsZV9jb3Vyc2VzJylbMF0udmFsdWUsXG4gICAgICBjb3Vyc2VfdHlwZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdjb3Vyc2VfdHlwZScpWzBdLnZhbHVlLFxuICAgICAgYWdyZWVtZW50X2J5X2NhdGVnb3J5OiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2FncmVlbWVudF9ieV9jYXRlZ29yeScpWzBdLnZhbHVlLFxuICAgICAgZW5nbGlzaF9sZXZlbDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdlbmdsaXNoX2xldmVsJylbMF0udmFsdWUsXG4gICAgICBwYXltZW50X21ldGhvZDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXltZW50X21ldGhvZCcpWzBdLnZhbHVlLFxuICAgICAgcXVvdGFfdGltZXM6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAncXVvdGFfdGltZXMnKVswXS52YWx1ZSxcbiAgICAgIHBheW1lbnRfZGF0ZTogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdwYXltZW50X2RhdGUnKVswXS52YWx1ZSxcbiAgICAgIHBheW1lbnRfZGF0ZXM6IHRoaXMuZmluYW5jaW5nRGF0YSEsXG4gICAgICBwcm9ncmFtX3ByaWNlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3Byb2dyYW1fcHJpY2UnKVswXS52YWx1ZSxcbiAgICAgIHRvdGFsX3ByaWNlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3RvdGFsX3ByaWNlJylbMF0udmFsdWUsXG4gICAgICBwYWlkX2xldmVsOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3BhaWRfbGV2ZWwnKVswXS52YWx1ZSxcbiAgICAgIHRlcm1zOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3Rlcm1zJylbMF0udmFsdWUsXG4gICAgICBhZ2U6IGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnYWdlJylbMF0udmFsdWUsXG4gICAgICBjb3VudHJ5OiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2NvdW50cnknKVswXS52YWx1ZSxcbiAgICAgIHN0YXRlOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ3N0YXRlJylbMF0udmFsdWUsXG4gICAgICBhY2FkZW1pY19wbGFuOiBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuY29udHJvbCA9PT0gJ2FjYWRlbWljX3BsYW4nKVswXS52YWx1ZSxcbiAgICAgIGNvZGVfcmVmZXJzOiB0aGlzLnBhcnNlTnVtYmVyKGRhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5jb250cm9sID09PSAnY29kZV9yZWZlcnMnKVswXS52YWx1ZSksXG4gICAgICBjb2RlX2NvZDogZGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLmNvbnRyb2wgPT09ICdjb2RlX2NvZCcpWzBdLnZhbHVlLFxuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIGNoYW5nZVN0ZXAoc3RlcDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IHN0ZXA7XG4gIH1cblxuICBwYXJzZU51bWJlcih2YWx1ZTogYW55KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICByZXR1cm4gaXNOYU4ocGFyc2VkVmFsdWUpID8gbnVsbCA6IHBhcnNlZFZhbHVlO1xuICB9XG5cbiAgZ2V0UGFyYW1ldGVycygpe1xuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRBbGxQYXJhbWV0ZXJzQ29kRm9ybSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMucGFyYW1ldGVyc0FsbCA9IHJlc3BvbnNlLmRhdGE7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJhbGxvd2VkUm9sZSgpIDsgZWxzZSBVbmF1dGhvcml6ZWRcIiBjbGFzcz1cImNvbnRhaW5lciBmbGV4IGZsZXgtY29sdW1uIGJnLXdoaXRlIGJvcmRlci1yb3VuZC0yeGwgcC0zIGNvbnRhaW5lciBhbmltYXRlX19hbmltYXRlZCBhbmltYXRlX19mYWRlSW5VcFwiPlxuXG4gIDxzcGFuICpuZ0lmPVwiZWRpdENvZFwiIGNsYXNzPVwiYmcteWVsbG93LTUwMCBwLTIgYm9yZGVyLXJvdW5kIG1iLTIgdy1hdXRvIHRleHQtbGcgZm9udC1zZW1pYm9sZFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlO1wiPnt7IGZvcm1UaXRsZSB9fTwvc3Bhbj5cbiAgPHNwYW4gKm5nSWY9XCIhZWRpdENvZCAmJiAhZGF0YUZyb21QcmV2aXVzQ29kRGF0YT8uY29kX3Jlbm92YXRpb25cIiBjbGFzcz1cImJnLXByaW1hcnkgcC0yIGJvcmRlci1yb3VuZCBtYi0yIHctYXV0byB0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIj57eyBmb3JtVGl0bGUgfX08L3NwYW4+XG4gIDxzcGFuICpuZ0lmPVwiIWVkaXRDb2QgJiYgZGF0YUZyb21QcmV2aXVzQ29kRGF0YT8uY29kX3Jlbm92YXRpb24gPT0gdHJ1ZVwiIGNsYXNzPVwicC0yIGJvcmRlci1yb3VuZCBtYi0yIHctYXV0byB0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IzFkYTc1MDsgY29sb3I6IHdoaXRlO1wiPnt7IGZvcm1UaXRsZSB9fTwvc3Bhbj5cbiAgPGRpdiAqbmdJZj1cInBhcmFtZXRlcnNBbGwgIT09IG51bGxcIj5cbiAgICA8cC10YWJWaWV3IFthY3RpdmVJbmRleF09XCJjdXJyZW50U3RlcFwiIChhY3RpdmVJbmRleENoYW5nZSk9XCJjdXJyZW50U3RlcCA9ICRldmVudFwiIFtzY3JvbGxhYmxlXT1cInRydWVcIj5cbiAgICAgIDxwLXRhYlBhbmVsIGxlZnRJY29uPVwicGkgcGktc3RhclwiIGhlYWRlcj1cIjEuIFBsYW5lcyB5IGNvbnZlbmlvc1wiPlxuICAgICAgICA8YXBwLWNvZC1mb3JtLXN0ZXAtb25lIChjaGFuZ2VTdGVwRXZlbnQpPVwiY2hhbmdlU3RlcCgkZXZlbnQpXCIgW2luaXRpYWxEYXRhXT1cImNvdXJzZVNlbGVjdFwiIFtkYXRhUHJldml1c0NvZERhdGFdPVwiZGF0YUZyb21QcmV2aXVzQ29kRGF0YVwiIFtpc0VkaXRDb2RdPVwiZWRpdENvZFwiIFtjb3Vyc2VTZWxlY3RSZW5vdmF0aW9uXT1cIkNvdXJzZVNlbGVjdFJlbm92YXRpb25cIiBbaXNSZW5vdmF0aW9uXT1cImlzUmVub3ZhdGlvblwiIFtwYXJhbWV0ZXJzQWxsXT1cInBhcmFtZXRlcnNBbGxcIiBjbGFzcz1cInAtMVwiPjwvYXBwLWNvZC1mb3JtLXN0ZXAtb25lPlxuICAgICAgPC9wLXRhYlBhbmVsPlxuICAgICAgPHAtdGFiUGFuZWwgbGVmdEljb249XCJwaSBwaS1pZC1jYXJkXCIgaGVhZGVyPVwiMi4gRGF0b3MgZGVsIGVzdHVkaWFudGVcIj5cbiAgICAgICAgPGFwcC1jb2QtZm9ybS1zdGVwLXR3byAoY2hhbmdlU3RlcEV2ZW50KT1cImNoYW5nZVN0ZXAoJGV2ZW50KVwiIFtpbml0aWFsRGF0YV09XCJkYXRhRnJvbVByZXZpdXNDb2REYXRhXCIgW2lzRWRpdENvZF09XCJlZGl0Q29kXCIgW3BhcmFtZXRlcnNBbGxdPVwicGFyYW1ldGVyc0FsbFwiIGNsYXNzPVwicC0xXCI+PC9hcHAtY29kLWZvcm0tc3RlcC10d28+XG4gICAgICA8L3AtdGFiUGFuZWw+XG4gICAgICA8cC10YWJQYW5lbCBsZWZ0SWNvbj1cInBpIHBpLXVzZXItZWRpdFwiIGhlYWRlcj1cIjMuIERhdG9zIGRlbCBhY3VkaWVudGVcIj5cbiAgICAgICAgPGFwcC1jb2QtZm9ybS1zdGVwLXRocmVlICAoY2hhbmdlU3RlcEV2ZW50KT1cImNoYW5nZVN0ZXAoJGV2ZW50KVwiIFtpbml0aWFsRGF0YV09XCJkYXRhRnJvbVByZXZpdXNDb2REYXRhXCIgW2lzRWRpdENvZF09XCJlZGl0Q29kXCIgW3BhcmFtZXRlcnNBbGxdPVwicGFyYW1ldGVyc0FsbFwiIGNsYXNzPVwicC0xXCI+PC9hcHAtY29kLWZvcm0tc3RlcC10aHJlZT5cbiAgICAgIDwvcC10YWJQYW5lbD5cbiAgICAgIDxwLXRhYlBhbmVsIGxlZnRJY29uPVwicGkgcGktbW9uZXktYmlsbFwiIGhlYWRlcj1cIjQuIFZhbG9yZXNcIj5cbiAgICAgICAgPGFwcC1jb2QtZm9ybS1zdGVwLWZvdXIgKGNoYW5nZVN0ZXBFdmVudCk9XCJjaGFuZ2VTdGVwKCRldmVudClcIiAoZmluYW5jaW5nRGF0YSk9XCJzYXZlRmluYW5jaW5nRGF0YSgkZXZlbnQpXCIgW2luaXRpYWxEYXRhXT1cImRhdGFGcm9tUHJldml1c0NvZERhdGFcIiBbaXNFZGl0Q29kXT1cImVkaXRDb2RcIiBjbGFzcz1cInAtMVwiIFtpc1Jlbm92YXRpb25dPVwiaXNSZW5vdmF0aW9uXCI+PC9hcHAtY29kLWZvcm0tc3RlcC1mb3VyPlxuICAgICAgPC9wLXRhYlBhbmVsPlxuICAgICAgPHAtdGFiUGFuZWwgbGVmdEljb249XCJwaSBwaS1leWVcIiBoZWFkZXI9XCI1LiBPYnNlcnZhY2lvbmVzXCI+XG4gICAgICAgIDxhcHAtY29kLWZvcm0tc3RlcC1maXZlIChjaGFuZ2VTdGVwRXZlbnQpPVwiY2hhbmdlU3RlcCgkZXZlbnQpXCIgW3VzZXJSb2xlXT1cInVzZXJSb2xlXCIgW2luaXRpYWxEYXRhXT1cImRhdGFGcm9tUHJldml1c0NvZERhdGFcIiAoYWN0aW9uKT1cImdldEZvcm1BY3Rpb24oJGV2ZW50KVwiIFtpc0VkaXRDb2RdPVwiZWRpdENvZFwiIFtpc1Jlbm92YXRpb25dPVwiaXNSZW5vdmF0aW9uXCIgY2xhc3M9XCJwLTFcIiBbcGFyYW1ldGVyc0FsbF09XCJwYXJhbWV0ZXJzQWxsXCI+PC9hcHAtY29kLWZvcm0tc3RlcC1maXZlPlxuICAgICAgPC9wLXRhYlBhbmVsPlxuICAgIDwvcC10YWJWaWV3PlxuICA8L2Rpdj5cblxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjVW5hdXRob3JpemVkPlxuICA8c3BhbiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmb250LWJvbGQgcC0yIGJnLXllbGxvdy0yMDAgYm9yZGVyLXJvdW5kLWxnIHctZnVsbFwiPlxuICAgIE5vIHRpZW5lcyBsb3MgcGVybWlzb3MgcGFyYSBhY2NlZGVyIGEgZXN0YSBmdW5jaW9uYWxpZGFkLCBjb211bsOtY2F0ZSBjb24gZWwgZGVzYXJyb2xsYWRvci5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48aXB0LWxvYWRlciAqbmdJZj1cImlzTG9hZGluZ1wiIFtpc0RpYWxvZ109XCJ0cnVlXCIgW21lc3NhZ2VdPVwibG9hZGVyTWVzc2FnZVwiPjwvaXB0LWxvYWRlcj5cbiJdfQ==