UNPKG

cotizador

Version:

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

180 lines 31.3 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; import * as i2 from "@ionic/angular"; import * as i3 from "@angular/common"; import * as i4 from "@angular/forms"; export class CotizadorComponent { constructor(sanitizer) { this.sanitizer = sanitizer; this.submitCredit = new EventEmitter(); this.minAmount = 0; this.maxAmount = 0; this.increment = 0; this.incrementFrecuncy = 0; this.insuranceCost = 0; this.insuranceToPay = 0; this.maxFrecuency = 0; this.minFrecuency = 0; this.frecuencySelect = ''; this.inputFrecuency = false; this.inner = false; this.frecuencyText = ''; this.title = ''; this.subtitle = ''; this.content = ''; this.amountToPay = 0; this.paymentsText = ''; this.paymentsTextComplement = ''; this.anualTax = 0; this.factor = 0; this.Iva = 0; this.inputAmountText = ''; this.inputPaymentsText = ''; } ngOnInit() { this.paymentsTextComplement = ''; this.incrementFrecuncy = 1; this.title = this.jsonCreditQuoteDesign.header.title; this.subtitle = this.jsonCreditQuoteDesign.header.subtitle; this.content = this.jsonCreditQuoteDesign.contentComponent.contentComponentInner; this.safeContentHeader = this.sanitizer.bypassSecurityTrustHtml(this.subtitle); this.safeContentCard = this.sanitizer.bypassSecurityTrustHtml(this.content); this.minAmount = this.jsonCreditQuoteDesign.contentComponent.minAmount; this.maxAmount = this.jsonCreditQuoteDesign.contentComponent.maxAmount; this.increment = this.jsonCreditQuoteDesign.contentComponent.increment; this.frecuency = this.jsonCreditQuoteDesign.contentComponent.frecuency.options; this.inputAmountText = this.jsonCreditQuoteDesign.contentComponent.inputAmountText; this.inputPaymentsText = this.jsonCreditQuoteDesign.contentComponent.inputPaymentsText; this.setVariable(); this.selectfrecuency(this.frecuency[0]); } paymentCalc(select) { this.inner = false; if (select == 'frecuency') { this.paymentsText = this.payments + ' ' + this.paymentsTextComplement; this.insuranceToPay = this.insuranceCost * this.payments; setTimeout(() => { this.inner = this.amountSelect > 0 ? true : false; }, 200); } else if (this.payments > 0) { this.insuranceToPay = this.insuranceCost * this.payments; setTimeout(() => { this.inner = true; }, 200); } if (this.frecuencySelect == 'Mensual') { this.amountToPay = ((this.amountSelect + this.insuranceToPay) * ((this.anualTax / 100) / 12)) / (1 - (Math.pow((1 + ((this.anualTax / 100) / 12)), (-this.payments)))); } else { this.amountToPay = ((((this.amountSelect + this.insuranceToPay) * (this.payments * this.factor) * this.anualTax)) + (this.amountSelect + this.insuranceToPay)) / this.payments; } this.setVariable(); let arraySubmit = { amountSelect: this.amountSelect, payments: this.payments, insuranceCost: this.insuranceCost, frecuency: this.frecuencySelect, amountToPay: this.amountToPay, amountToPayTotal: (this.amountToPay * this.payments), insuranceToPay: this.insuranceToPay, frecuencyText: this.frecuencyText }; this.submitCredit.emit(arraySubmit); } selectfrecuency(frecuency) { this.payments = 0; this.paymentsText = ''; this.inner = false; for (let i of this.frecuency) { i.selected = false; } this.frecuencySelect = frecuency.id; frecuency.selected = true; this.inputFrecuency = true; this.minFrecuency = frecuency.min; this.maxFrecuency = frecuency.max; this.frecuencyText = frecuency.text; this.paymentsTextComplement = frecuency.text2; this.insuranceCost = frecuency.insuranceCost; this.anualTax = frecuency.anualTax; this.factor = frecuency.factor; this.Iva = frecuency.iva; } setVariable() { setTimeout(() => { let contentHTML = document.querySelectorAll("span"); if (contentHTML == null) { this.setVariable(); } else { contentHTML.forEach(element => { switch (element.textContent) { case '{{maxAmount}}': { element.innerHTML = this.maxAmount.toLocaleString('en-US', { style: 'currency', currency: 'USD', }); break; } case '{{minAmount}}': { element.innerHTML = this.minAmount.toLocaleString('en-US', { style: 'currency', currency: 'USD', }); break; } case '{{amountSelect}}': { element.innerHTML = this.amountSelect.toLocaleString('en-US', { style: 'currency', currency: 'USD', }); break; } case '{{paymentsSelect}}': { element.innerHTML = this.payments.toString(); break; } case '{{paymentsText}}': { element.innerHTML = this.paymentsText; break; } case '{{frecuencyText}}': { element.innerHTML = this.frecuencyText; break; } case '{{amountToPay}}': { element.innerHTML = this.amountToPay.toLocaleString('en-US', { style: 'currency', currency: 'USD', }); break; } case '{{insuranceCost}}': { element.innerHTML = this.insuranceToPay.toLocaleString('en-US', { style: 'currency', currency: 'USD', }); break; } } }); } }, 200); } back() { console.log(''); } } CotizadorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CotizadorComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); CotizadorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: CotizadorComponent, selector: "tks-cotizador", inputs: { jsonCreditQuoteDesign: "jsonCreditQuoteDesign" }, outputs: { submitCredit: "submitCredit" }, ngImport: i0, template: "<div class=\"creditQuote\">\n <h1>\n <ion-icon style=\"color:#493176; margin-left: -50px; cursor: pointer;\" name=\"arrow-back-outline\" (click)=\"back()\"></ion-icon>\n {{title}}\n </h1>\n <div class=\"inner\" [innerHTML]=\"subtitle\"></div>\n <h3 class=\"amountSelect\">{{amountSelect | currency}}</h3>\n <div style=\"text-align: -webkit-center;\">\n <ion-grid class=\"tabs\">\n <ion-row>\n <ion-col *ngFor=\"let item of frecuency\">\n <ion-chip (click)=\"selectfrecuency(item)\" [ngClass]=\"item.selected ? 'active' : 'nonActive' \">\n <ion-label>{{item.id}}</ion-label>\n </ion-chip>\n </ion-col>\n </ion-row>\n </ion-grid>\n <h4 class=\"labelsInputs\">{{inputAmountText}} <span>{{amountSelect | currency}}</span> </h4>\n <div class=\"inputRangeAmount\">\n <input class=\"range\" type=\"range\" min=\"{{minAmount}}\" max=\"{{maxAmount}}\" value=\"0\" step=\"{{increment}}\"\n [(ngModel)]=\"amountSelect\" (input)=\"paymentCalc('amout')\">\n </div>\n <h4 class=\"labelsInputs\">{{inputPaymentsText}} <span>{{paymentsText}}</span></h4>\n <div class=\"inputRangeFrecuency\" >\n <input class=\"range\" type=\"range\" min=\"{{minFrecuency}}\" max=\"{{maxFrecuency}}\" value=\"0\" step=\"{{incrementFrecuncy}}\"\n [(ngModel)]=\"payments\" (input)=\"paymentCalc('frecuency')\">\n </div>\n </div>\n <div class=\"inner2\" [innerHTML]=\"content\" *ngIf=\"inner\"></div>\n</div>\n", styles: [""], components: [{ type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i2.IonRow, selector: "ion-row" }, { type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i2.IonChip, selector: "ion-chip", inputs: ["color", "disabled", "mode", "outline"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "currency": i3.CurrencyPipe } }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CotizadorComponent, decorators: [{ type: Component, args: [{ selector: 'tks-cotizador', template: "<div class=\"creditQuote\">\n <h1>\n <ion-icon style=\"color:#493176; margin-left: -50px; cursor: pointer;\" name=\"arrow-back-outline\" (click)=\"back()\"></ion-icon>\n {{title}}\n </h1>\n <div class=\"inner\" [innerHTML]=\"subtitle\"></div>\n <h3 class=\"amountSelect\">{{amountSelect | currency}}</h3>\n <div style=\"text-align: -webkit-center;\">\n <ion-grid class=\"tabs\">\n <ion-row>\n <ion-col *ngFor=\"let item of frecuency\">\n <ion-chip (click)=\"selectfrecuency(item)\" [ngClass]=\"item.selected ? 'active' : 'nonActive' \">\n <ion-label>{{item.id}}</ion-label>\n </ion-chip>\n </ion-col>\n </ion-row>\n </ion-grid>\n <h4 class=\"labelsInputs\">{{inputAmountText}} <span>{{amountSelect | currency}}</span> </h4>\n <div class=\"inputRangeAmount\">\n <input class=\"range\" type=\"range\" min=\"{{minAmount}}\" max=\"{{maxAmount}}\" value=\"0\" step=\"{{increment}}\"\n [(ngModel)]=\"amountSelect\" (input)=\"paymentCalc('amout')\">\n </div>\n <h4 class=\"labelsInputs\">{{inputPaymentsText}} <span>{{paymentsText}}</span></h4>\n <div class=\"inputRangeFrecuency\" >\n <input class=\"range\" type=\"range\" min=\"{{minFrecuency}}\" max=\"{{maxFrecuency}}\" value=\"0\" step=\"{{incrementFrecuncy}}\"\n [(ngModel)]=\"payments\" (input)=\"paymentCalc('frecuency')\">\n </div>\n </div>\n <div class=\"inner2\" [innerHTML]=\"content\" *ngIf=\"inner\"></div>\n</div>\n", styles: [""] }] }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { jsonCreditQuoteDesign: [{ type: Input }], submitCredit: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY290aXphZG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvdGl6YWRvci9zcmMvbGliL2NvdGl6YWRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3RpemFkb3Ivc3JjL2xpYi9jb3RpemFkb3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBUS9FLE1BQU0sT0FBTyxrQkFBa0I7SUFpQzdCLFlBQ1UsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQS9CdkIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSWpELGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUU5QixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFXLENBQUMsQ0FBQztRQUMzQixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUN6QixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUV6QixvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUU3QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxVQUFLLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLDJCQUFzQixHQUFXLEVBQUUsQ0FBQztRQUNwQyxhQUFRLEdB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LE1BQU07eUJBQ1A7d0JBQ0QsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDOzRCQUN0QixPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRTtnQ0FDM0QsS0FBSyxFQUFFLFVBQVU7Z0NBQ2pCLFFBQVEsRUFBRSxLQUFLOzZCQUNoQixDQUFDLENBQUM7NEJBQ0gsTUFBTTt5QkFDUDt3QkFDRCxLQUFLLG1CQUFtQixDQUFDLENBQUM7NEJBQ3hCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO2dDQUM5RCxLQUFLLEVBQUUsVUFBVTtnQ0FDakIsUUFBUSxFQUFFLEtBQUs7NkJBQ2hCLENBQUMsQ0FBQzs0QkFDSCxNQUFNO3lCQUNQO3FCQUNGO2dCQUVILENBQUMsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFbEIsQ0FBQzs7K0dBakxVLGtCQUFrQjttR0FBbEIsa0JBQWtCLDRKQ1IvQixrOUNBOEJBOzJGRHRCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZUFBZTttR0FNaEIscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Rrcy1jb3RpemFkb3InLFxuICB0ZW1wbGF0ZVVybDogJy4vY290aXphZG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY290aXphZG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENvdGl6YWRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkganNvbkNyZWRpdFF1b3RlRGVzaWduOiBhbnk7XG4gIEBPdXRwdXQoKSBzdWJtaXRDcmVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBzYWZlQ29udGVudENhcmQ6IFNhZmVIdG1sO1xuICBzYWZlQ29udGVudEhlYWRlcjogU2FmZUh0bWw7XG4gIG1pbkFtb3VudDogbnVtYmVyID0gMDtcbiAgbWF4QW1vdW50OiBudW1iZXIgPSAwO1xuICBpbmNyZW1lbnQ6IG51bWJlciA9IDA7XG4gIGluY3JlbWVudEZyZWN1bmN5OiBudW1iZXIgPSAwO1xuICBhbW91bnRTZWxlY3Q6IGFueTtcbiAgaW5zdXJhbmNlQ29zdDogbnVtYmVyID0gMDtcbiAgaW5zdXJhbmNlVG9QYXk6IG51bWJlciA9IDA7XG4gIG1heEZyZWN1ZW5jeTogbnVtYmVyID0gMDtcbiAgbWluRnJlY3VlbmN5OiBudW1iZXIgPSAwO1xuICBmcmVjdWVuY3k6IGFueTtcbiAgZnJlY3VlbmN5U2VsZWN0OiBzdHJpbmcgPSAnJztcbiAgcGF5bWVudHM6IG51bWJlcjtcbiAgaW5wdXRGcmVjdWVuY3k6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5uZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZnJlY3VlbmN5VGV4dDogc3RyaW5nID0gJyc7XG4gIHRpdGxlOiBzdHJpbmcgPSAnJztcbiAgc3VidGl0bGU6IHN0cmluZyA9ICcnO1xuICBjb250ZW50OiBzdHJpbmcgPSAnJztcbiAgYW1vdW50VG9QYXk6IG51bWJlciA9IDA7XG4gIHBheW1lbnRzVGV4dDogc3RyaW5nID0gJyc7XG4gIHBheW1lbnRzVGV4dENvbXBsZW1lbnQ6IHN0cmluZyA9ICcnO1xuICBhbnVhbFRheDogbnVtYmVyID0gMDtcbiAgZmFjdG9yOiBudW1iZXIgPSAwO1xuICBJdmE6IG51bWJlciA9IDA7XG4gIGlucHV0QW1vdW50VGV4dDogc3RyaW5nID0gJyc7XG4gIGlucHV0UGF5bWVudHNUZXh0OiBzdHJpbmcgPSAnJztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGF5bWVudHNUZXh0Q29tcGxlbWVudCA9ICcnO1xuICAgIHRoaXMuaW5jcmVtZW50RnJlY3VuY3kgPSAxO1xuICAgIHRoaXMudGl0bGUgPSB0aGlzLmpzb25DcmVkaXRRdW90ZURlc2lnbi5oZWFkZXIudGl0bGU7XG4gICAgdGhpcy5zdWJ0aXRsZSA9IHRoaXMuanNvbkNyZWRpdFF1b3RlRGVzaWduLmhlYWRlci5zdWJ0aXRsZTtcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmpzb25DcmVkaXRRdW90ZURlc2lnbi5jb250ZW50Q29tcG9uZW50LmNvbnRlbnRDb21wb25lbnRJbm5lcjtcbiAgICB0aGlzLnNhZmVDb250ZW50SGVhZGVyID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICB0aGlzLnN1YnRpdGxlXG4gICAgKTtcbiAgICB0aGlzLnNhZmVDb250ZW50Q2FyZCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgdGhpcy5jb250ZW50XG4gICAgKTtcbiAgICB0aGlzLm1pbkFtb3VudCA9IHRoaXMuanNvbkNyZWRpdFF1b3RlRGVzaWduLmNvbnRlbnRDb21wb25lbnQubWluQW1vdW50O1xuICAgIHRoaXMubWF4QW1vdW50ID0gdGhpcy5qc29uQ3JlZGl0UXVvdGVEZXNpZ24uY29udGVudENvbXBvbmVudC5tYXhBbW91bnQ7XG4gICAgdGhpcy5pbmNyZW1lbnQgPSB0aGlzLmpzb25DcmVkaXRRdW90ZURlc2lnbi5jb250ZW50Q29tcG9uZW50LmluY3JlbWVudDtcbiAgICB0aGlzLmZyZWN1ZW5jeSA9IHRoaXMuanNvbkNyZWRpdFF1b3RlRGVzaWduLmNvbnRlbnRDb21wb25lbnQuZnJlY3VlbmN5Lm9wdGlvbnM7XG4gICAgdGhpcy5pbnB1dEFtb3VudFRleHQgPSB0aGlzLmpzb25DcmVkaXRRdW90ZURlc2lnbi5jb250ZW50Q29tcG9uZW50LmlucHV0QW1vdW50VGV4dDtcbiAgICB0aGlzLmlucHV0UGF5bWVudHNUZXh0ID0gdGhpcy5qc29uQ3JlZGl0UXVvdGVEZXNpZ24uY29udGVudENvbXBvbmVudC5pbnB1dFBheW1lbnRzVGV4dDtcbiAgICB0aGlzLnNldFZhcmlhYmxlKCk7XG4gICAgdGhpcy5zZWxlY3RmcmVjdWVuY3kodGhpcy5mcmVjdWVuY3lbMF0pXG4gIH1cbiAgcGF5bWVudENhbGMoc2VsZWN0KSB7XG4gICAgdGhpcy5pbm5lciA9IGZhbHNlO1xuICAgIGlmKHNlbGVjdCA9PSAnZnJlY3VlbmN5JyApe1xuICAgICAgdGhpcy5wYXltZW50c1RleHQgPSB0aGlzLnBheW1lbnRzICsgJyAnICsgdGhpcy5wYXltZW50c1RleHRDb21wbGVtZW50O1xuICAgICAgdGhpcy5pbnN1cmFuY2VUb1BheSA9IHRoaXMuaW5zdXJhbmNlQ29zdCAqIHRoaXMucGF5bWVudHM7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbm5lciA9IHRoaXMuYW1vdW50U2VsZWN0ID4gMCA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICAgIGVsc2UgaWYodGhpcy5wYXltZW50cyA+IDApe1xuICAgICAgdGhpcy5pbnN1cmFuY2VUb1BheSA9IHRoaXMuaW5zdXJhbmNlQ29zdCAqIHRoaXMucGF5bWVudHM7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbm5lciA9IHRydWU7XG4gICAgICB9LCAyMDApO1xuICAgIH1cbiAgICBpZih0aGlzLmZyZWN1ZW5jeVNlbGVjdCA9PSAnTWVuc3VhbCcpe1xuICAgICAgdGhpcy5hbW91bnRUb1BheSA9ICggKHRoaXMuYW1vdW50U2VsZWN0K3RoaXMuaW5zdXJhbmNlVG9QYXkpICogKCh0aGlzLmFudWFsVGF4LzEwMCkvMTIpICkgLyAoIDEgLSAoIE1hdGgucG93KCgxKygodGhpcy5hbnVhbFRheC8xMDApLzEyKSksKC10aGlzLnBheW1lbnRzKSkpICk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLmFtb3VudFRvUGF5ID0gKCgoKHRoaXMuYW1vdW50U2VsZWN0K3RoaXMuaW5zdXJhbmNlVG9QYXkpKih0aGlzLnBheW1lbnRzKnRoaXMuZmFjdG9yKSp0aGlzLmFudWFsVGF4KSkgKyAodGhpcy5hbW91bnRTZWxlY3QrdGhpcy5pbnN1cmFuY2VUb1BheSkgKSAvIHRoaXMucGF5bWVudHMgO1xuICAgIH1cbiAgICB0aGlzLnNldFZhcmlhYmxlKCk7XG4gICAgbGV0IGFycmF5U3VibWl0ID0ge1xuICAgICAgYW1vdW50U2VsZWN0OiB0aGlzLmFtb3VudFNlbGVjdCxcbiAgICAgIHBheW1lbnRzOiB0aGlzLnBheW1lbnRzLFxuICAgICAgaW5zdXJhbmNlQ29zdDogdGhpcy5pbnN1cmFuY2VDb3N0LFxuICAgICAgZnJlY3VlbmN5OiB0aGlzLmZyZWN1ZW5jeVNlbGVjdCxcbiAgICAgIGFtb3VudFRvUGF5OiB0aGlzLmFtb3VudFRvUGF5LFxuICAgICAgYW1vdW50VG9QYXlUb3RhbDogKHRoaXMuYW1vdW50VG9QYXkqdGhpcy5wYXltZW50cyksXG4gICAgICBpbnN1cmFuY2VUb1BheTogdGhpcy5pbnN1cmFuY2VUb1BheSxcbiAgICAgIGZyZWN1ZW5jeVRleHQ6IHRoaXMuZnJlY3VlbmN5VGV4dFxuICAgIH1cbiAgICB0aGlzLnN1Ym1pdENyZWRpdC5lbWl0KGFycmF5U3VibWl0KVxuICB9XG4gIHNlbGVjdGZyZWN1ZW5jeShmcmVjdWVuY3kpIHtcbiAgICB0aGlzLnBheW1lbnRzID0gMDtcbiAgICB0aGlzLnBheW1lbnRzVGV4dCA9ICcnO1xuICAgIHRoaXMuaW5uZXIgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpIG9mIHRoaXMuZnJlY3VlbmN5KSB7XG4gICAgICBpLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZnJlY3VlbmN5U2VsZWN0ID0gZnJlY3VlbmN5LmlkO1xuICAgIGZyZWN1ZW5jeS5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5pbnB1dEZyZWN1ZW5jeSA9IHRydWU7XG4gICAgdGhpcy5taW5GcmVjdWVuY3kgPSBmcmVjdWVuY3kubWluO1xuICAgIHRoaXMubWF4RnJlY3VlbmN5ID0gZnJlY3VlbmN5Lm1heDtcbiAgICB0aGlzLmZyZWN1ZW5jeVRleHQgPSBmcmVjdWVuY3kudGV4dDtcbiAgICB0aGlzLnBheW1lbnRzVGV4dENvbXBsZW1lbnQgPSBmcmVjdWVuY3kudGV4dDI7XG4gICAgdGhpcy5pbnN1cmFuY2VDb3N0ID0gZnJlY3VlbmN5Lmluc3VyYW5jZUNvc3Q7XG4gICAgdGhpcy5hbnVhbFRheCA9IGZyZWN1ZW5jeS5hbnVhbFRheDtcbiAgICB0aGlzLmZhY3RvciA9IGZyZWN1ZW5jeS5mYWN0b3I7XG4gICAgdGhpcy5JdmEgPSBmcmVjdWVuY3kuaXZhXG4gIH1cbiAgc2V0VmFyaWFibGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsZXQgY29udGVudEhUTUwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3BhblwiKTtcbiAgICAgIGlmIChjb250ZW50SFRNTCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0VmFyaWFibGUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb250ZW50SFRNTC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZWxlbWVudC50ZXh0Q29udGVudCkge1xuICAgICAgICAgICAgY2FzZSAne3ttYXhBbW91bnR9fSc6IHtcbiAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLm1heEFtb3VudC50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICd7e21pbkFtb3VudH19Jzoge1xuICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHRoaXMubWluQW1vdW50LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ3t7YW1vdW50U2VsZWN0fX0nOiB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5hbW91bnRTZWxlY3QudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAne3twYXltZW50c1NlbGVjdH19Jzoge1xuICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGF5bWVudHMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICd7e3BheW1lbnRzVGV4dH19Jzoge1xuICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGF5bWVudHNUZXh0XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAne3tmcmVjdWVuY3lUZXh0fX0nOiB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5mcmVjdWVuY3lUZXh0XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAne3thbW91bnRUb1BheX19Jzoge1xuICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHRoaXMuYW1vdW50VG9QYXkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAne3tpbnN1cmFuY2VDb3N0fX0nOiB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5pbnN1cmFuY2VUb1BheS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGJhY2soKXtcbiAgICBjb25zb2xlLmxvZygnJyk7XG5cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY3JlZGl0UXVvdGVcIj5cbiAgPGgxPlxuICAgIDxpb24taWNvbiBzdHlsZT1cImNvbG9yOiM0OTMxNzY7IG1hcmdpbi1sZWZ0OiAtNTBweDsgY3Vyc29yOiBwb2ludGVyO1wiIG5hbWU9XCJhcnJvdy1iYWNrLW91dGxpbmVcIiAoY2xpY2spPVwiYmFjaygpXCI+PC9pb24taWNvbj5cbiAgICB7e3RpdGxlfX1cbiAgPC9oMT5cbiAgPGRpdiBjbGFzcz1cImlubmVyXCIgW2lubmVySFRNTF09XCJzdWJ0aXRsZVwiPjwvZGl2PlxuICA8aDMgY2xhc3M9XCJhbW91bnRTZWxlY3RcIj57e2Ftb3VudFNlbGVjdCB8IGN1cnJlbmN5fX08L2gzPlxuICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogLXdlYmtpdC1jZW50ZXI7XCI+XG4gICAgPGlvbi1ncmlkIGNsYXNzPVwidGFic1wiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZyZWN1ZW5jeVwiPlxuICAgICAgICAgIDxpb24tY2hpcCAoY2xpY2spPVwic2VsZWN0ZnJlY3VlbmN5KGl0ZW0pXCIgW25nQ2xhc3NdPVwiaXRlbS5zZWxlY3RlZCA/ICdhY3RpdmUnIDogJ25vbkFjdGl2ZScgXCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPnt7aXRlbS5pZH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24tY2hpcD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gICAgPGg0IGNsYXNzPVwibGFiZWxzSW5wdXRzXCI+e3tpbnB1dEFtb3VudFRleHR9fSA8c3Bhbj57e2Ftb3VudFNlbGVjdCB8IGN1cnJlbmN5fX08L3NwYW4+ICA8L2g0PlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dFJhbmdlQW1vdW50XCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyYW5nZVwiIHR5cGU9XCJyYW5nZVwiIG1pbj1cInt7bWluQW1vdW50fX1cIiBtYXg9XCJ7e21heEFtb3VudH19XCIgdmFsdWU9XCIwXCIgc3RlcD1cInt7aW5jcmVtZW50fX1cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImFtb3VudFNlbGVjdFwiIChpbnB1dCk9XCJwYXltZW50Q2FsYygnYW1vdXQnKVwiPlxuICAgIDwvZGl2PlxuICAgIDxoNCBjbGFzcz1cImxhYmVsc0lucHV0c1wiPnt7aW5wdXRQYXltZW50c1RleHR9fSA8c3Bhbj57e3BheW1lbnRzVGV4dH19PC9zcGFuPjwvaDQ+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0UmFuZ2VGcmVjdWVuY3lcIiA+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyYW5nZVwiIHR5cGU9XCJyYW5nZVwiIG1pbj1cInt7bWluRnJlY3VlbmN5fX1cIiBtYXg9XCJ7e21heEZyZWN1ZW5jeX19XCIgdmFsdWU9XCIwXCIgc3RlcD1cInt7aW5jcmVtZW50RnJlY3VuY3l9fVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicGF5bWVudHNcIiAoaW5wdXQpPVwicGF5bWVudENhbGMoJ2ZyZWN1ZW5jeScpXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiaW5uZXIyXCIgW2lubmVySFRNTF09XCJjb250ZW50XCIgKm5nSWY9XCJpbm5lclwiPjwvZGl2PlxuPC9kaXY+XG4iXX0=