ng-easycommerce-v18 0.4.0 → 0.4.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/assets/ec-i18n/ct.json +4 -0
- package/assets/ec-i18n/en.json +12 -1
- package/assets/ec-i18n/es.json +12 -1
- package/assets/ec-i18n/fr.json +4 -0
- package/assets/ec-i18n/gl.json +4 -0
- package/assets/ec-i18n/pr.json +4 -0
- package/esm2022/lib/ec-components/account-ec/order-ec/order-ec.component.mjs +5 -9
- package/esm2022/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.mjs +11 -5
- package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +12 -3
- package/esm2022/lib/ec-components/checkout-ec/checkout-ec.component.mjs +8 -1
- package/esm2022/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.mjs +5 -3
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +44 -4
- package/esm2022/lib/ec-components/checkout-ec/success-ec/success-ec.component.mjs +4 -3
- package/esm2022/lib/ec-components/credit-account-banner-ec/credit-account-banner-ec.component.mjs +79 -0
- package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +25 -11
- package/esm2022/lib/ec-components/index.mjs +2 -1
- package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/sidebar-ec/sidebar-ec.component.mjs +5 -7
- package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +5 -11
- package/esm2022/lib/ec-services/cart.service.mjs +42 -7
- package/esm2022/lib/ec-services/index.mjs +2 -1
- package/esm2022/lib/ec-services/price-visibility.service.mjs +40 -0
- package/esm2022/lib/ec-services/product-detail.service.mjs +45 -7
- package/fesm2022/ng-easycommerce-v18.mjs +295 -61
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/ec-components/account-ec/order-ec/order-ec.component.d.ts +2 -2
- package/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.d.ts +3 -0
- package/lib/ec-components/cart-ec/cart-ec.component.d.ts +4 -2
- package/lib/ec-components/checkout-ec/checkout-ec.component.d.ts +2 -0
- package/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +2 -0
- package/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.d.ts +6 -0
- package/lib/ec-components/checkout-ec/success-ec/success-ec.component.d.ts +1 -0
- package/lib/ec-components/credit-account-banner-ec/credit-account-banner-ec.component.d.ts +27 -0
- package/lib/ec-components/header-ec/header-ec.component.d.ts +12 -4
- package/lib/ec-components/index.d.ts +1 -0
- package/lib/ec-components/sidebar-ec/sidebar-ec.component.d.ts +2 -1
- package/lib/ec-components/widgets-ec/price-ec/price-ec.component.d.ts +2 -4
- package/lib/ec-services/cart.service.d.ts +1 -0
- package/lib/ec-services/index.d.ts +1 -0
- package/lib/ec-services/price-visibility.service.d.ts +23 -0
- package/lib/ec-services/product-detail.service.d.ts +3 -0
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import { EcCurrencySymbolPipe } from "../../../ec-pipe/ec-currency-symbol.pipe";
|
|
|
3
3
|
import { ChannelService } from '../../../ec-services';
|
|
4
4
|
import { TranslateModule } from '@ngx-translate/core';
|
|
5
5
|
import { CommonModule } from '@angular/common';
|
|
6
|
-
import {
|
|
6
|
+
import { PriceVisibilityService } from '../../../ec-services/price-visibility.service';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "@angular/common";
|
|
9
9
|
import * as i2 from "@ngx-translate/core";
|
|
@@ -29,20 +29,14 @@ export class PriceEcComponent {
|
|
|
29
29
|
customTaxTemplate = null;
|
|
30
30
|
customOnlyTaxLabelTemplate = null;
|
|
31
31
|
_channelService = inject(ChannelService);
|
|
32
|
-
|
|
32
|
+
priceVisibility = inject(PriceVisibilityService);
|
|
33
33
|
showTaxLegend = false;
|
|
34
34
|
hideTaxes = false;
|
|
35
|
-
showPricesOnlyToLoggedUsers = false;
|
|
36
|
-
logged = false;
|
|
37
|
-
hidePrices = false;
|
|
38
35
|
ngOnInit() {
|
|
39
36
|
this._channelService.channel$.subscribe(cfg => {
|
|
40
37
|
this.showTaxLegend = !!cfg.showTaxLegend;
|
|
41
38
|
this.hideTaxes = !!cfg.hideTaxes;
|
|
42
|
-
this.showPricesOnlyToLoggedUsers = !!cfg.showPricesOnlyToLoggedUsers;
|
|
43
|
-
this.hidePrices = !!cfg.hidePrices;
|
|
44
39
|
});
|
|
45
|
-
this.logged = this._authService.isAuthenticated();
|
|
46
40
|
}
|
|
47
41
|
/** Determina si mostrar la sección de impuestos */
|
|
48
42
|
get shouldShowTaxes() {
|
|
@@ -61,11 +55,11 @@ export class PriceEcComponent {
|
|
|
61
55
|
return !!value && value.split(' - ').length === 2;
|
|
62
56
|
}
|
|
63
57
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PriceEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
64
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PriceEcComponent, isStandalone: true, selector: "app-price-ec", inputs: { price: "price", saleprice: "saleprice", basePrice: "basePrice", taxeAmount: "taxeAmount", taxes: "taxes", priceSize: "priceSize", showTaxLegendOnly: "showTaxLegendOnly", disableTaxInfo: "disableTaxInfo", customPriceTemplate: "customPriceTemplate", customSalePriceTemplate: "customSalePriceTemplate", customSimplePriceTemplate: "customSimplePriceTemplate", customSimpleSalePriceTemplate: "customSimpleSalePriceTemplate", customTaxTemplate: "customTaxTemplate", customOnlyTaxLabelTemplate: "customOnlyTaxLabelTemplate" }, ngImport: i0, template: "@if
|
|
58
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PriceEcComponent, isStandalone: true, selector: "app-price-ec", inputs: { price: "price", saleprice: "saleprice", basePrice: "basePrice", taxeAmount: "taxeAmount", taxes: "taxes", priceSize: "priceSize", showTaxLegendOnly: "showTaxLegendOnly", disableTaxInfo: "disableTaxInfo", customPriceTemplate: "customPriceTemplate", customSalePriceTemplate: "customSalePriceTemplate", customSimplePriceTemplate: "customSimplePriceTemplate", customSimpleSalePriceTemplate: "customSimpleSalePriceTemplate", customTaxTemplate: "customTaxTemplate", customOnlyTaxLabelTemplate: "customOnlyTaxLabelTemplate" }, ngImport: i0, template: "@if (priceVisibility.canShowPrices()) {\n<ng-container *ngIf=\"customSalePriceTemplate || customPriceTemplate; else defaultPriceBlock\">\n <ng-container *ngTemplateOutlet=\"customSalePriceTemplate || customPriceTemplate\">\n </ng-container>\n</ng-container>\n\n<ng-template #defaultPriceBlock>\n <div class=\"price\">\n <!-- Con precio de oferta -->\n <div *ngIf=\"saleprice; else onlyPriceBlock\" class=\"line-height-custom\">\n\n <!-- Precio original como rango o tachado simple -->\n <div *ngIf=\"hasRange(price); else simplePriceDel\" class=\"price-whithSaleprice\">\n <del class=\"\">\n {{\n price!.split(' - ')[0] | ecCurrencySymbol\n }}\n {{\n price!.split(' - ')[1] | ecCurrencySymbol\n }}\n </del>\n </div>\n\n <!-- Oferta como rango o simple -->\n <div *ngIf=\"hasRange(saleprice); else simpleSalePrice\" class=\"\">\n {{\n saleprice!.split(' - ')[0] | ecCurrencySymbol\n }}\n {{\n saleprice!.split(' - ')[1] | ecCurrencySymbol\n }}\n </div>\n </div>\n\n <!-- S\u00F3lo precio sin oferta -->\n <ng-template #onlyPriceBlock>\n <div *ngIf=\"hasRange(price); else simplePrice\" class=\"price-onlyPrice\">\n {{\n price!.split(' - ')[0] | ecCurrencySymbol\n }} -\n {{\n price!.split(' - ')[1] | ecCurrencySymbol\n }}\n </div>\n </ng-template>\n\n <!-- Fallback simple price -->\n <ng-template #simplePrice>\n <ng-container *ngIf=\"customSimplePriceTemplate; else fallbackSimplePrice\">\n <ng-container *ngTemplateOutlet=\"customSimplePriceTemplate\"></ng-container>\n </ng-container>\n </ng-template>\n <ng-template #fallbackSimplePrice>\n <del> </del>\n <div class=\"price-simplePrice\">\n {{ price | ecCurrencySymbol }}\n </div>\n </ng-template>\n\n <!-- Fallback simple price-del -->\n <ng-template #simplePriceDel>\n <div class=\"price-simpleDel\">\n <del class=\"\">{{ price | ecCurrencySymbol }}</del>\n </div>\n </ng-template>\n\n <!-- Fallback simple saleprice -->\n <ng-template #simpleSalePrice>\n <ng-container *ngIf=\"customSimpleSalePriceTemplate; else fallbackSimpleSalePrice\">\n <ng-container *ngTemplateOutlet=\"customSimpleSalePriceTemplate\"></ng-container>\n </ng-container>\n </ng-template>\n <ng-template #fallbackSimpleSalePrice>\n <div class=\"price-simpleSaleprice\">\n {{ saleprice | ecCurrencySymbol }}\n </div>\n </ng-template>\n </div>\n</ng-template>\n\n<!-- Secci\u00F3n de impuestos -->\n<ng-container *ngIf=\"shouldShowTaxes\">\n <!-- S\u00F3lo leyenda -->\n <ng-container *ngIf=\"showTaxLegendOnly; else detailedTaxBlock\">\n <ng-container *ngIf=\"customOnlyTaxLabelTemplate; else defaultOnlyTaxLabel\">\n <ng-container *ngTemplateOutlet=\"customOnlyTaxLabelTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultOnlyTaxLabel>\n <p class=\"taxes-title\">\n {{ 'price-without-national-taxes' | translate }}:\n {{ basePrice! | ecCurrencySymbol }}\n </p>\n </ng-template>\n </ng-container>\n\n <!-- Detalle impuestos -->\n <ng-template #detailedTaxBlock>\n <ng-container *ngIf=\"customTaxTemplate; else defaultTaxBlock\">\n <ng-container *ngTemplateOutlet=\"customTaxTemplate\"></ng-container>\n </ng-container>\n </ng-template>\n</ng-container>\n\n<ng-template #defaultTaxBlock>\n <div class=\"taxes-section\">\n <p class=\"taxes-title\">\n {{ 'price-without-national-taxes' | translate }}:\n {{ basePrice! | ecCurrencySymbol }}\n </p>\n <ul class=\"taxes-list\">\n <li>\n {{ taxes.Name }}: {{ taxeAmount | ecCurrencySymbol }}\n </li>\n </ul>\n </div>\n</ng-template>\n}\n", styles: [".price-sm{font-size:13px}.price{font-size:18px}.line-height-custom{line-height:1.2}.lnth{text-decoration:line-through;color:gray}.taxes-section{margin-top:.5rem;border-radius:.5rem;font-size:.95rem;color:#333;line-height:1.4;max-width:400px}.taxes-title{font-weight:500;margin-bottom:.2rem;font-size:.7rem;color:#222}.taxes-list{list-style:none;padding:0;margin:0}.taxes-list li{display:flex;justify-content:space-between;margin-bottom:.1rem;font-size:.65rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: EcCurrencySymbolPipe, name: "ecCurrencySymbol" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
65
59
|
}
|
|
66
60
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PriceEcComponent, decorators: [{
|
|
67
61
|
type: Component,
|
|
68
|
-
args: [{ selector: 'app-price-ec', standalone: true, imports: [CommonModule, EcCurrencySymbolPipe, TranslateModule], template: "@if
|
|
62
|
+
args: [{ selector: 'app-price-ec', standalone: true, imports: [CommonModule, EcCurrencySymbolPipe, TranslateModule], template: "@if (priceVisibility.canShowPrices()) {\n<ng-container *ngIf=\"customSalePriceTemplate || customPriceTemplate; else defaultPriceBlock\">\n <ng-container *ngTemplateOutlet=\"customSalePriceTemplate || customPriceTemplate\">\n </ng-container>\n</ng-container>\n\n<ng-template #defaultPriceBlock>\n <div class=\"price\">\n <!-- Con precio de oferta -->\n <div *ngIf=\"saleprice; else onlyPriceBlock\" class=\"line-height-custom\">\n\n <!-- Precio original como rango o tachado simple -->\n <div *ngIf=\"hasRange(price); else simplePriceDel\" class=\"price-whithSaleprice\">\n <del class=\"\">\n {{\n price!.split(' - ')[0] | ecCurrencySymbol\n }}\n {{\n price!.split(' - ')[1] | ecCurrencySymbol\n }}\n </del>\n </div>\n\n <!-- Oferta como rango o simple -->\n <div *ngIf=\"hasRange(saleprice); else simpleSalePrice\" class=\"\">\n {{\n saleprice!.split(' - ')[0] | ecCurrencySymbol\n }}\n {{\n saleprice!.split(' - ')[1] | ecCurrencySymbol\n }}\n </div>\n </div>\n\n <!-- S\u00F3lo precio sin oferta -->\n <ng-template #onlyPriceBlock>\n <div *ngIf=\"hasRange(price); else simplePrice\" class=\"price-onlyPrice\">\n {{\n price!.split(' - ')[0] | ecCurrencySymbol\n }} -\n {{\n price!.split(' - ')[1] | ecCurrencySymbol\n }}\n </div>\n </ng-template>\n\n <!-- Fallback simple price -->\n <ng-template #simplePrice>\n <ng-container *ngIf=\"customSimplePriceTemplate; else fallbackSimplePrice\">\n <ng-container *ngTemplateOutlet=\"customSimplePriceTemplate\"></ng-container>\n </ng-container>\n </ng-template>\n <ng-template #fallbackSimplePrice>\n <del> </del>\n <div class=\"price-simplePrice\">\n {{ price | ecCurrencySymbol }}\n </div>\n </ng-template>\n\n <!-- Fallback simple price-del -->\n <ng-template #simplePriceDel>\n <div class=\"price-simpleDel\">\n <del class=\"\">{{ price | ecCurrencySymbol }}</del>\n </div>\n </ng-template>\n\n <!-- Fallback simple saleprice -->\n <ng-template #simpleSalePrice>\n <ng-container *ngIf=\"customSimpleSalePriceTemplate; else fallbackSimpleSalePrice\">\n <ng-container *ngTemplateOutlet=\"customSimpleSalePriceTemplate\"></ng-container>\n </ng-container>\n </ng-template>\n <ng-template #fallbackSimpleSalePrice>\n <div class=\"price-simpleSaleprice\">\n {{ saleprice | ecCurrencySymbol }}\n </div>\n </ng-template>\n </div>\n</ng-template>\n\n<!-- Secci\u00F3n de impuestos -->\n<ng-container *ngIf=\"shouldShowTaxes\">\n <!-- S\u00F3lo leyenda -->\n <ng-container *ngIf=\"showTaxLegendOnly; else detailedTaxBlock\">\n <ng-container *ngIf=\"customOnlyTaxLabelTemplate; else defaultOnlyTaxLabel\">\n <ng-container *ngTemplateOutlet=\"customOnlyTaxLabelTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultOnlyTaxLabel>\n <p class=\"taxes-title\">\n {{ 'price-without-national-taxes' | translate }}:\n {{ basePrice! | ecCurrencySymbol }}\n </p>\n </ng-template>\n </ng-container>\n\n <!-- Detalle impuestos -->\n <ng-template #detailedTaxBlock>\n <ng-container *ngIf=\"customTaxTemplate; else defaultTaxBlock\">\n <ng-container *ngTemplateOutlet=\"customTaxTemplate\"></ng-container>\n </ng-container>\n </ng-template>\n</ng-container>\n\n<ng-template #defaultTaxBlock>\n <div class=\"taxes-section\">\n <p class=\"taxes-title\">\n {{ 'price-without-national-taxes' | translate }}:\n {{ basePrice! | ecCurrencySymbol }}\n </p>\n <ul class=\"taxes-list\">\n <li>\n {{ taxes.Name }}: {{ taxeAmount | ecCurrencySymbol }}\n </li>\n </ul>\n </div>\n</ng-template>\n}\n", styles: [".price-sm{font-size:13px}.price{font-size:18px}.line-height-custom{line-height:1.2}.lnth{text-decoration:line-through;color:gray}.taxes-section{margin-top:.5rem;border-radius:.5rem;font-size:.95rem;color:#333;line-height:1.4;max-width:400px}.taxes-title{font-weight:500;margin-bottom:.2rem;font-size:.7rem;color:#222}.taxes-list{list-style:none;padding:0;margin:0}.taxes-list li{display:flex;justify-content:space-between;margin-bottom:.1rem;font-size:.65rem}\n"] }]
|
|
69
63
|
}], propDecorators: { price: [{
|
|
70
64
|
type: Input
|
|
71
65
|
}], saleprice: [{
|
|
@@ -95,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
95
89
|
}], customOnlyTaxLabelTemplate: [{
|
|
96
90
|
type: Input
|
|
97
91
|
}] } });
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvd2lkZ2V0cy1lYy9wcmljZS1lYy9wcmljZS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy93aWRnZXRzLWVjL3ByaWNlLWVjL3ByaWNlLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBQ25EOztHQUVHO0FBUUgsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixVQUFVO0lBQ0QsS0FBSyxDQUFVO0lBQ2YsU0FBUyxDQUFVO0lBQ25CLFNBQVMsQ0FBVTtJQUNuQixVQUFVLENBQVU7SUFDcEIsS0FBSyxHQUF5QyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBRW5GLFdBQVc7SUFDRixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUNuQyxjQUFjLEdBQVksS0FBSyxDQUFDO0lBRXpDLHdDQUF3QztJQUMvQixtQkFBbUIsR0FBc0MsSUFBSSxDQUFDO0lBQzlELHVCQUF1QixHQUFrQyxJQUFJLENBQUM7SUFDOUQseUJBQXlCLEdBQWdDLElBQUksQ0FBQztJQUM5RCw2QkFBNkIsR0FBNEIsSUFBSSxDQUFDO0lBQzlELGlCQUFpQixHQUF3QyxJQUFJLENBQUM7SUFDOUQsMEJBQTBCLEdBQStCLElBQUksQ0FBQztJQUUvRCxlQUFlLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRCxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDZixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTFCLFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQ3JDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO1lBQ3JFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsTUFBTSxHQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjO2VBQ3BCLElBQUksQ0FBQyxhQUFhO2VBQ2xCLENBQUMsSUFBSSxDQUFDLFNBQVM7ZUFDZixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7ZUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQy9DLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsUUFBUSxDQUFDLEtBQWM7UUFDckIsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO3dHQXhEVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQiwwbEJDaEI3QixvMUlBc0hDLHNnQkQxR1csWUFBWSxxU0FBRSxvQkFBb0Isd0RBQUUsZUFBZTs7NEZBSWxELGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsQ0FBQzs4QkFNckQsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFY0N1cnJlbmN5U3ltYm9sUGlwZSB9IGZyb20gXCIuLi8uLi8uLi9lYy1waXBlL2VjLWN1cnJlbmN5LXN5bWJvbC5waXBlXCI7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2VjLXNlcnZpY2VzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xuLyoqXG4gKiBDb21wb25lbnRlIHBhcmEgbWFuZWphciBsYSB2aXN0YSBkZWwgcHJlY2lvIGRlIHVuIHByb2R1Y3RvLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcHJpY2UtZWMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBFY0N1cnJlbmN5U3ltYm9sUGlwZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByaWNlLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3ByaWNlLWVjLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBQcmljZUVjQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gUHJlY2lvc1xuICBASW5wdXQoKSBwcmljZSE6IHN0cmluZztcbiAgQElucHV0KCkgc2FsZXByaWNlPzogc3RyaW5nO1xuICBASW5wdXQoKSBiYXNlUHJpY2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRheGVBbW91bnQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHRheGVzOiB7IE5hbWU6IHN0cmluZzsgdGF4ZUFtb3VudDogbnVtYmVyIH0gPSB7IE5hbWU6ICcnLCB0YXhlQW1vdW50OiAwIH07XG5cbiAgLy8gT3BjaW9uZXNcbiAgQElucHV0KCkgcHJpY2VTaXplOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dUYXhMZWdlbmRPbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVUYXhJbmZvOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gVGVtcGxhdGVzIHBlcnNvbmFsaXphZG9zIChwcm95ZWNjacOzbilcbiAgQElucHV0KCkgY3VzdG9tUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgICAgICAgICAgID0gbnVsbDtcbiAgQElucHV0KCkgY3VzdG9tU2FsZVByaWNlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsICAgICAgID0gbnVsbDtcbiAgQElucHV0KCkgY3VzdG9tU2ltcGxlUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgICAgID0gbnVsbDtcbiAgQElucHV0KCkgY3VzdG9tU2ltcGxlU2FsZVByaWNlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgY3VzdG9tVGF4VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsICAgICAgICAgICAgID0gbnVsbDtcbiAgQElucHV0KCkgY3VzdG9tT25seVRheExhYmVsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsICAgID0gbnVsbDtcblxuICBwcml2YXRlIF9jaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UgPSBpbmplY3QoQ2hhbm5lbFNlcnZpY2UpO1xuICBwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwdWJsaWMgc2hvd1RheExlZ2VuZCA9IGZhbHNlO1xuICBwdWJsaWMgaGlkZVRheGVzID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnMgPSBmYWxzZTtcbiAgcHVibGljIGxvZ2dlZCA9IGZhbHNlO1xuICBwdWJsaWMgaGlkZVByaWNlcyA9IGZhbHNlO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2NoYW5uZWxTZXJ2aWNlLmNoYW5uZWwkLnN1YnNjcmliZShjZmcgPT4ge1xuICAgICAgdGhpcy5zaG93VGF4TGVnZW5kID0gISFjZmcuc2hvd1RheExlZ2VuZDtcbiAgICAgIHRoaXMuaGlkZVRheGVzICAgICA9ICEhY2ZnLmhpZGVUYXhlcztcbiAgICAgIHRoaXMuc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzID0gISFjZmcuc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzO1xuICAgICAgdGhpcy5oaWRlUHJpY2VzID0gISFjZmcuaGlkZVByaWNlcztcbiAgICB9KTtcbiAgIHRoaXMubG9nZ2VkPSB0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcbiAgfVxuXG4gIC8qKiBEZXRlcm1pbmEgc2kgbW9zdHJhciBsYSBzZWNjacOzbiBkZSBpbXB1ZXN0b3MgKi9cbiAgZ2V0IHNob3VsZFNob3dUYXhlcygpOiBib29sZWFuIHsgICAgXG4gICAgcmV0dXJuICF0aGlzLmRpc2FibGVUYXhJbmZvXG4gICAgICAgICYmIHRoaXMuc2hvd1RheExlZ2VuZFxuICAgICAgICAmJiAhdGhpcy5oaWRlVGF4ZXNcbiAgICAgICAgJiYgISF0aGlzLmJhc2VQcmljZVxuICAgICAgICAmJiAhIXRoaXMudGF4ZUFtb3VudDtcbiAgfVxuXG4gIC8qKiBDbGFzZSBDU1MgYmFzZSBzZWfDum4gdGFtYcOxbyAqL1xuICBnZXQgcHJpY2VDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByaWNlU2l6ZSA/ICdwcmljZS1zbScgOiAncHJpY2UnO1xuICB9XG5cbiAgLyoqIEhlbHBlciBwYXJhIGRldGVjdGFyIHJhbmdvcyAqL1xuICBoYXNSYW5nZSh2YWx1ZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXZhbHVlICYmIHZhbHVlLnNwbGl0KCcgLSAnKS5sZW5ndGggPT09IDI7XG4gIH1cbn1cbiIsIkBpZighaGlkZVByaWNlcyl7XG5AaWYgKCFzaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnMgfHwgbG9nZ2VkKSB7XG48bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tU2FsZVByaWNlVGVtcGxhdGUgfHwgY3VzdG9tUHJpY2VUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0UHJpY2VCbG9ja1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21TYWxlUHJpY2VUZW1wbGF0ZSB8fCBjdXN0b21QcmljZVRlbXBsYXRlXCI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UHJpY2VCbG9jaz5cbiAgICA8ZGl2IGNsYXNzPVwicHJpY2VcIj5cbiAgICAgICAgPCEtLSBDb24gcHJlY2lvIGRlIG9mZXJ0YSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNhbGVwcmljZTsgZWxzZSBvbmx5UHJpY2VCbG9ja1wiIGNsYXNzPVwibGluZS1oZWlnaHQtY3VzdG9tXCI+XG5cbiAgICAgICAgICAgIDwhLS0gUHJlY2lvIG9yaWdpbmFsIGNvbW8gcmFuZ28gbyB0YWNoYWRvIHNpbXBsZSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNSYW5nZShwcmljZSk7IGVsc2Ugc2ltcGxlUHJpY2VEZWxcIiBjbGFzcz1cInByaWNlLXdoaXRoU2FsZXByaWNlXCI+XG4gICAgICAgICAgICAgICAgPGRlbCBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBwcmljZSEuc3BsaXQoJyAtICcpWzBdIHwgZWNDdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBwcmljZSEuc3BsaXQoJyAtICcpWzFdIHwgZWNDdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvZGVsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gT2ZlcnRhIGNvbW8gcmFuZ28gbyBzaW1wbGUgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzUmFuZ2Uoc2FsZXByaWNlKTsgZWxzZSBzaW1wbGVTYWxlUHJpY2VcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgc2FsZXByaWNlIS5zcGxpdCgnIC0gJylbMF0gfCBlY0N1cnJlbmN5U3ltYm9sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHNhbGVwcmljZSEuc3BsaXQoJyAtICcpWzFdIHwgZWNDdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBTw7NsbyBwcmVjaW8gc2luIG9mZXJ0YSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNvbmx5UHJpY2VCbG9jaz5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNSYW5nZShwcmljZSk7IGVsc2Ugc2ltcGxlUHJpY2VcIiBjbGFzcz1cInByaWNlLW9ubHlQcmljZVwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgcHJpY2UhLnNwbGl0KCcgLSAnKVswXSB8IGVjQ3VycmVuY3lTeW1ib2xcbiAgICAgICAgICAgICAgICB9fSAtXG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBwcmljZSEuc3BsaXQoJyAtICcpWzFdIHwgZWNDdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIEZhbGxiYWNrIHNpbXBsZSBwcmljZSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVQcmljZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21TaW1wbGVQcmljZVRlbXBsYXRlOyBlbHNlIGZhbGxiYWNrU2ltcGxlUHJpY2VcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU2ltcGxlUHJpY2VUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZmFsbGJhY2tTaW1wbGVQcmljZT5cbiAgICAgICAgICAgIDxkZWw+Jm5ic3A7PC9kZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJpY2Utc2ltcGxlUHJpY2VcIj5cbiAgICAgICAgICAgICAgICB7eyBwcmljZSB8IGVjQ3VycmVuY3lTeW1ib2wgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gRmFsbGJhY2sgc2ltcGxlIHByaWNlLWRlbCAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVQcmljZURlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljZS1zaW1wbGVEZWxcIj5cbiAgICAgICAgICAgICAgICA8ZGVsIGNsYXNzPVwiXCI+e3sgcHJpY2UgfCBlY0N1cnJlbmN5U3ltYm9sIH19PC9kZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIEZhbGxiYWNrIHNpbXBsZSBzYWxlcHJpY2UgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2ltcGxlU2FsZVByaWNlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVNpbXBsZVNhbGVQcmljZVRlbXBsYXRlOyBlbHNlIGZhbGxiYWNrU2ltcGxlU2FsZVByaWNlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVNpbXBsZVNhbGVQcmljZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmYWxsYmFja1NpbXBsZVNhbGVQcmljZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljZS1zaW1wbGVTYWxlcHJpY2VcIj5cbiAgICAgICAgICAgICAgICB7eyBzYWxlcHJpY2UgfCBlY0N1cnJlbmN5U3ltYm9sIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gU2VjY2nDs24gZGUgaW1wdWVzdG9zIC0tPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dUYXhlc1wiPlxuICAgIDwhLS0gU8OzbG8gbGV5ZW5kYSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RheExlZ2VuZE9ubHk7IGVsc2UgZGV0YWlsZWRUYXhCbG9ja1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tT25seVRheExhYmVsVGVtcGxhdGU7IGVsc2UgZGVmYXVsdE9ubHlUYXhMYWJlbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbU9ubHlUYXhMYWJlbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPbmx5VGF4TGFiZWw+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRheGVzLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3ByaWNlLXdpdGhvdXQtbmF0aW9uYWwtdGF4ZXMnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgIHt7IGJhc2VQcmljZSEgfCBlY0N1cnJlbmN5U3ltYm9sIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERldGFsbGUgaW1wdWVzdG9zIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGV0YWlsZWRUYXhCbG9jaz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVRheFRlbXBsYXRlOyBlbHNlIGRlZmF1bHRUYXhCbG9ja1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVRheFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGF4QmxvY2s+XG4gICAgPGRpdiBjbGFzcz1cInRheGVzLXNlY3Rpb25cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0YXhlcy10aXRsZVwiPlxuICAgICAgICAgICAge3sgJ3ByaWNlLXdpdGhvdXQtbmF0aW9uYWwtdGF4ZXMnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAge3sgYmFzZVByaWNlISB8IGVjQ3VycmVuY3lTeW1ib2wgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJ0YXhlcy1saXN0XCI+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAge3sgdGF4ZXMuTmFtZSB9fToge3sgdGF4ZUFtb3VudCB8IGVjQ3VycmVuY3lTeW1ib2wgfX1cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxufVxufSJdfQ==
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvd2lkZ2V0cy1lYy9wcmljZS1lYy9wcmljZS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy93aWRnZXRzLWVjL3ByaWNlLWVjL3ByaWNlLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7QUFDdkY7O0dBRUc7QUFRSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFVBQVU7SUFDRCxLQUFLLENBQVU7SUFDZixTQUFTLENBQVU7SUFDbkIsU0FBUyxDQUFVO0lBQ25CLFVBQVUsQ0FBVTtJQUNwQixLQUFLLEdBQXlDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFFbkYsV0FBVztJQUNGLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsaUJBQWlCLEdBQVksS0FBSyxDQUFDO0lBQ25DLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFekMsd0NBQXdDO0lBQy9CLG1CQUFtQixHQUFzQyxJQUFJLENBQUM7SUFDOUQsdUJBQXVCLEdBQWtDLElBQUksQ0FBQztJQUM5RCx5QkFBeUIsR0FBZ0MsSUFBSSxDQUFDO0lBQzlELDZCQUE2QixHQUE0QixJQUFJLENBQUM7SUFDOUQsaUJBQWlCLEdBQXdDLElBQUksQ0FBQztJQUM5RCwwQkFBMEIsR0FBK0IsSUFBSSxDQUFDO0lBRS9ELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELGVBQWUsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMxRCxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFekIsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELElBQUksZUFBZTtRQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWM7ZUFDcEIsSUFBSSxDQUFDLGFBQWE7ZUFDbEIsQ0FBQyxJQUFJLENBQUMsU0FBUztlQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztlQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDL0MsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxRQUFRLENBQUMsS0FBYztRQUNyQixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7d0dBbERVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLDBsQkNoQjdCLHl6SUFxSEEsc2dCRHpHWSxZQUFZLHFTQUFFLG9CQUFvQix3REFBRSxlQUFlOzs0RkFJbEQsZ0JBQWdCO2tCQVA1QixTQUFTOytCQUNFLGNBQWMsY0FDWixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxDQUFDOzhCQU1yRCxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBQ0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVjQ3VycmVuY3lTeW1ib2xQaXBlIH0gZnJvbSBcIi4uLy4uLy4uL2VjLXBpcGUvZWMtY3VycmVuY3ktc3ltYm9sLnBpcGVcIjtcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUHJpY2VWaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2VjLXNlcnZpY2VzL3ByaWNlLXZpc2liaWxpdHkuc2VydmljZSc7XG4vKipcbiAqIENvbXBvbmVudGUgcGFyYSBtYW5lamFyIGxhIHZpc3RhIGRlbCBwcmVjaW8gZGUgdW4gcHJvZHVjdG8uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1wcmljZS1lYycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEVjQ3VycmVuY3lTeW1ib2xQaXBlLCBUcmFuc2xhdGVNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJpY2UtZWMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcHJpY2UtZWMuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFByaWNlRWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyBQcmVjaW9zXG4gIEBJbnB1dCgpIHByaWNlITogc3RyaW5nO1xuICBASW5wdXQoKSBzYWxlcHJpY2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJhc2VQcmljZT86IHN0cmluZztcbiAgQElucHV0KCkgdGF4ZUFtb3VudD86IG51bWJlcjtcbiAgQElucHV0KCkgdGF4ZXM6IHsgTmFtZTogc3RyaW5nOyB0YXhlQW1vdW50OiBudW1iZXIgfSA9IHsgTmFtZTogJycsIHRheGVBbW91bnQ6IDAgfTtcblxuICAvLyBPcGNpb25lc1xuICBASW5wdXQoKSBwcmljZVNpemU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1RheExlZ2VuZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZVRheEluZm86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBUZW1wbGF0ZXMgcGVyc29uYWxpemFkb3MgKHByb3llY2Npw7NuKVxuICBASW5wdXQoKSBjdXN0b21QcmljZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCAgICAgICAgICAgPSBudWxsO1xuICBASW5wdXQoKSBjdXN0b21TYWxlUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgICAgICAgPSBudWxsO1xuICBASW5wdXQoKSBjdXN0b21TaW1wbGVQcmljZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCAgICAgPSBudWxsO1xuICBASW5wdXQoKSBjdXN0b21TaW1wbGVTYWxlUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBjdXN0b21UYXhUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgICAgICAgICAgICAgPSBudWxsO1xuICBASW5wdXQoKSBjdXN0b21Pbmx5VGF4TGFiZWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgICAgPSBudWxsO1xuXG4gIHByaXZhdGUgX2NoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XG4gIHB1YmxpYyByZWFkb25seSBwcmljZVZpc2liaWxpdHkgPSBpbmplY3QoUHJpY2VWaXNpYmlsaXR5U2VydmljZSk7XG4gIHB1YmxpYyBzaG93VGF4TGVnZW5kID0gZmFsc2U7XG4gIHB1YmxpYyBoaWRlVGF4ZXMgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9jaGFubmVsU2VydmljZS5jaGFubmVsJC5zdWJzY3JpYmUoY2ZnID0+IHtcbiAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9ICEhY2ZnLnNob3dUYXhMZWdlbmQ7XG4gICAgICB0aGlzLmhpZGVUYXhlcyAgICAgPSAhIWNmZy5oaWRlVGF4ZXM7XG4gICAgfSk7XG4gIH1cblxuICAvKiogRGV0ZXJtaW5hIHNpIG1vc3RyYXIgbGEgc2VjY2nDs24gZGUgaW1wdWVzdG9zICovXG4gIGdldCBzaG91bGRTaG93VGF4ZXMoKTogYm9vbGVhbiB7ICAgIFxuICAgIHJldHVybiAhdGhpcy5kaXNhYmxlVGF4SW5mb1xuICAgICAgICAmJiB0aGlzLnNob3dUYXhMZWdlbmRcbiAgICAgICAgJiYgIXRoaXMuaGlkZVRheGVzXG4gICAgICAgICYmICEhdGhpcy5iYXNlUHJpY2VcbiAgICAgICAgJiYgISF0aGlzLnRheGVBbW91bnQ7XG4gIH1cblxuICAvKiogQ2xhc2UgQ1NTIGJhc2Ugc2Vnw7puIHRhbWHDsW8gKi9cbiAgZ2V0IHByaWNlQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcmljZVNpemUgPyAncHJpY2Utc20nIDogJ3ByaWNlJztcbiAgfVxuXG4gIC8qKiBIZWxwZXIgcGFyYSBkZXRlY3RhciByYW5nb3MgKi9cbiAgaGFzUmFuZ2UodmFsdWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnIC0gJykubGVuZ3RoID09PSAyO1xuICB9XG59XG4iLCJAaWYgKHByaWNlVmlzaWJpbGl0eS5jYW5TaG93UHJpY2VzKCkpIHtcbjxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21TYWxlUHJpY2VUZW1wbGF0ZSB8fCBjdXN0b21QcmljZVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRQcmljZUJsb2NrXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVNhbGVQcmljZVRlbXBsYXRlIHx8IGN1c3RvbVByaWNlVGVtcGxhdGVcIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRQcmljZUJsb2NrPlxuICAgIDxkaXYgY2xhc3M9XCJwcmljZVwiPlxuICAgICAgICA8IS0tIENvbiBwcmVjaW8gZGUgb2ZlcnRhIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2FsZXByaWNlOyBlbHNlIG9ubHlQcmljZUJsb2NrXCIgY2xhc3M9XCJsaW5lLWhlaWdodC1jdXN0b21cIj5cblxuICAgICAgICAgICAgPCEtLSBQcmVjaW8gb3JpZ2luYWwgY29tbyByYW5nbyBvIHRhY2hhZG8gc2ltcGxlIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhhc1JhbmdlKHByaWNlKTsgZWxzZSBzaW1wbGVQcmljZURlbFwiIGNsYXNzPVwicHJpY2Utd2hpdGhTYWxlcHJpY2VcIj5cbiAgICAgICAgICAgICAgICA8ZGVsIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHByaWNlIS5zcGxpdCgnIC0gJylbMF0gfCBlY0N1cnJlbmN5U3ltYm9sXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHByaWNlIS5zcGxpdCgnIC0gJylbMV0gfCBlY0N1cnJlbmN5U3ltYm9sXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9kZWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBPZmVydGEgY29tbyByYW5nbyBvIHNpbXBsZSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNSYW5nZShzYWxlcHJpY2UpOyBlbHNlIHNpbXBsZVNhbGVQcmljZVwiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBzYWxlcHJpY2UhLnNwbGl0KCcgLSAnKVswXSB8IGVjQ3VycmVuY3lTeW1ib2xcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgc2FsZXByaWNlIS5zcGxpdCgnIC0gJylbMV0gfCBlY0N1cnJlbmN5U3ltYm9sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFPDs2xvIHByZWNpbyBzaW4gb2ZlcnRhIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI29ubHlQcmljZUJsb2NrPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhhc1JhbmdlKHByaWNlKTsgZWxzZSBzaW1wbGVQcmljZVwiIGNsYXNzPVwicHJpY2Utb25seVByaWNlXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBwcmljZSEuc3BsaXQoJyAtICcpWzBdIHwgZWNDdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgIH19IC1cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHByaWNlIS5zcGxpdCgnIC0gJylbMV0gfCBlY0N1cnJlbmN5U3ltYm9sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gRmFsbGJhY2sgc2ltcGxlIHByaWNlIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3NpbXBsZVByaWNlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVNpbXBsZVByaWNlVGVtcGxhdGU7IGVsc2UgZmFsbGJhY2tTaW1wbGVQcmljZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21TaW1wbGVQcmljZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmYWxsYmFja1NpbXBsZVByaWNlPlxuICAgICAgICAgICAgPGRlbD4mbmJzcDs8L2RlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljZS1zaW1wbGVQcmljZVwiPlxuICAgICAgICAgICAgICAgIHt7IHByaWNlIHwgZWNDdXJyZW5jeVN5bWJvbCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSBGYWxsYmFjayBzaW1wbGUgcHJpY2UtZGVsIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3NpbXBsZVByaWNlRGVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlLXNpbXBsZURlbFwiPlxuICAgICAgICAgICAgICAgIDxkZWwgY2xhc3M9XCJcIj57eyBwcmljZSB8IGVjQ3VycmVuY3lTeW1ib2wgfX08L2RlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gRmFsbGJhY2sgc2ltcGxlIHNhbGVwcmljZSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVTYWxlUHJpY2U+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tU2ltcGxlU2FsZVByaWNlVGVtcGxhdGU7IGVsc2UgZmFsbGJhY2tTaW1wbGVTYWxlUHJpY2VcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU2ltcGxlU2FsZVByaWNlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2ZhbGxiYWNrU2ltcGxlU2FsZVByaWNlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlLXNpbXBsZVNhbGVwcmljZVwiPlxuICAgICAgICAgICAgICAgIHt7IHNhbGVwcmljZSB8IGVjQ3VycmVuY3lTeW1ib2wgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBTZWNjacOzbiBkZSBpbXB1ZXN0b3MgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd1RheGVzXCI+XG4gICAgPCEtLSBTw7NsbyBsZXllbmRhIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGF4TGVnZW5kT25seTsgZWxzZSBkZXRhaWxlZFRheEJsb2NrXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21Pbmx5VGF4TGFiZWxUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0T25seVRheExhYmVsXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tT25seVRheExhYmVsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE9ubHlUYXhMYWJlbD5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGF4ZXMtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJpY2Utd2l0aG91dC1uYXRpb25hbC10YXhlcycgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAge3sgYmFzZVByaWNlISB8IGVjQ3VycmVuY3lTeW1ib2wgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRGV0YWxsZSBpbXB1ZXN0b3MgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNkZXRhaWxlZFRheEJsb2NrPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tVGF4VGVtcGxhdGU7IGVsc2UgZGVmYXVsdFRheEJsb2NrXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tVGF4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUYXhCbG9jaz5cbiAgICA8ZGl2IGNsYXNzPVwidGF4ZXMtc2VjdGlvblwiPlxuICAgICAgICA8cCBjbGFzcz1cInRheGVzLXRpdGxlXCI+XG4gICAgICAgICAgICB7eyAncHJpY2Utd2l0aG91dC1uYXRpb25hbC10YXhlcycgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICB7eyBiYXNlUHJpY2UhIHwgZWNDdXJyZW5jeVN5bWJvbCB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDx1bCBjbGFzcz1cInRheGVzLWxpc3RcIj5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICB7eyB0YXhlcy5OYW1lIH19OiB7eyB0YXhlQW1vdW50IHwgZWNDdXJyZW5jeVN5bWJvbCB9fVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG59XG4iXX0=
|
|
@@ -3,7 +3,7 @@ import { AuthService } from './auth.service';
|
|
|
3
3
|
import { ToastService } from './toast.service';
|
|
4
4
|
import { ConnectionService } from '../api';
|
|
5
5
|
import { ApiConstantsService, CoreConstantsService } from '../constants';
|
|
6
|
-
import { BehaviorSubject, firstValueFrom, map } from 'rxjs';
|
|
6
|
+
import { BehaviorSubject, distinctUntilChanged, firstValueFrom, map } from 'rxjs';
|
|
7
7
|
import { AnalyticsService } from './analytics';
|
|
8
8
|
import { LocalStorageService } from './local-storage.service';
|
|
9
9
|
import { ChannelService } from './channel.service';
|
|
@@ -62,16 +62,19 @@ export class CartService {
|
|
|
62
62
|
this._items = JSON.parse(this._localStorage.getItem(this.CART_KEY) || '[]');
|
|
63
63
|
this.cartToken = this._localStorage.getItem(this.CART_TOKEN_KEY) || null;
|
|
64
64
|
// 🔑 CLAVE: Suscripción a cambios de estado de login
|
|
65
|
-
this._authService.loggedIn$.subscribe(isLoggedIn => {
|
|
66
|
-
if (isLoggedIn
|
|
65
|
+
this._authService.loggedIn$.pipe(distinctUntilChanged()).subscribe(isLoggedIn => {
|
|
66
|
+
if (isLoggedIn) {
|
|
67
|
+
// Al pasar de invitado -> logueado, siempre sincronizar para traer balanceCustomer
|
|
68
|
+
// (si no, el header no muestra cuenta corriente hasta recargar).
|
|
67
69
|
this.syncCartOnLogin();
|
|
68
70
|
this._cartInitialized = true;
|
|
71
|
+
return;
|
|
69
72
|
}
|
|
70
|
-
|
|
73
|
+
if (this._cartInitialized) {
|
|
71
74
|
// Usuario cerró sesión, limpiar y resetear carrito
|
|
72
75
|
this.clearAndResetCustomerCart();
|
|
73
|
-
this._cartInitialized = false; // Reset flag para permitir nueva inicialización
|
|
74
76
|
}
|
|
77
|
+
this._cartInitialized = false; // Reset flag para permitir nueva inicialización
|
|
75
78
|
});
|
|
76
79
|
this._channelService.channel$.subscribe(res => this.channelConfig = res);
|
|
77
80
|
// ⚠️ FIX: Solo inicializar para usuarios no autenticados
|
|
@@ -163,6 +166,11 @@ export class CartService {
|
|
|
163
166
|
this._toastService.show('must-select-customer');
|
|
164
167
|
return;
|
|
165
168
|
}
|
|
169
|
+
const isExistingItem = this._items.some((item) => item.product.id === product.id && item.variant_id === variantId);
|
|
170
|
+
// Validación de saldo para items nuevos (los existentes se validan en updateItemQuantity)
|
|
171
|
+
if (!isExistingItem && !this.hasCreditsForNewItem(product, quantity, variantId)) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
166
174
|
this._requestInProcess.next(true);
|
|
167
175
|
let added = this.addIfAllreadyExists(product, variantId, quantity);
|
|
168
176
|
if (!added) {
|
|
@@ -533,10 +541,14 @@ export class CartService {
|
|
|
533
541
|
if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
|
|
534
542
|
return true;
|
|
535
543
|
}
|
|
544
|
+
if (balance.allowAnyPaymentMethod) {
|
|
545
|
+
return true;
|
|
546
|
+
}
|
|
536
547
|
if (balance.remainingCredits === undefined) {
|
|
537
548
|
return false;
|
|
538
549
|
}
|
|
539
|
-
|
|
550
|
+
const total = this._cartSubject.value?.totals?.total ?? 0;
|
|
551
|
+
if (!balance.allowExceedBalance && total > balance.creditAmount) {
|
|
540
552
|
this._toastService.show('not-enough-credits');
|
|
541
553
|
return false;
|
|
542
554
|
}
|
|
@@ -547,6 +559,9 @@ export class CartService {
|
|
|
547
559
|
if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
|
|
548
560
|
return true;
|
|
549
561
|
}
|
|
562
|
+
if (balance.allowAnyPaymentMethod) {
|
|
563
|
+
return true;
|
|
564
|
+
}
|
|
550
565
|
if (balance.remainingCredits === undefined) {
|
|
551
566
|
return false;
|
|
552
567
|
}
|
|
@@ -562,6 +577,26 @@ export class CartService {
|
|
|
562
577
|
}
|
|
563
578
|
return true;
|
|
564
579
|
};
|
|
580
|
+
hasCreditsForNewItem = (product, quantity, variantId) => {
|
|
581
|
+
const balance = this._balanceCustomerSubject.value;
|
|
582
|
+
if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
|
|
583
|
+
return true;
|
|
584
|
+
}
|
|
585
|
+
if (balance.allowAnyPaymentMethod) {
|
|
586
|
+
return true;
|
|
587
|
+
}
|
|
588
|
+
if (balance.remainingCredits === undefined) {
|
|
589
|
+
return false;
|
|
590
|
+
}
|
|
591
|
+
const variant = product?.variants?.find(v => v.code === variantId) ?? product?.variants?.[0];
|
|
592
|
+
const unitPrice = variant?.saleprice ?? variant?.price ?? product?.price ?? 0;
|
|
593
|
+
const totalCost = unitPrice * quantity;
|
|
594
|
+
if (!balance.allowExceedBalance && totalCost > balance.remainingCredits) {
|
|
595
|
+
this._toastService.show('not-enough-credits');
|
|
596
|
+
return false;
|
|
597
|
+
}
|
|
598
|
+
return true;
|
|
599
|
+
};
|
|
565
600
|
addRepeatOrderToCart(items) {
|
|
566
601
|
if (this._cartItemsSubject.value.length > 0) {
|
|
567
602
|
this._toastService.show('cart-not-empty');
|
|
@@ -625,4 +660,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
625
660
|
providedIn: 'root'
|
|
626
661
|
}]
|
|
627
662
|
}], ctorParameters: () => [] });
|
|
628
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBaUIsY0FBYyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7SUFDZixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELFVBQVUsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDOUQsaUJBQWlCLEdBQXFCLE1B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QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0YsQ0FBQyxFQUNBLEdBQUcsQ0FBQyxFQUFFO1lBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUM7YUFDRixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FockJXLFdBQVc7NEdBQVgsV0FBVyxjQUZYLE1BQU07OzRGQUVOLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYWxhbmNlQ3VzdG9tZXIsIENhcnRJdGVtLCBJQ291cG9uLCBQcm9kdWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4vdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlLCBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpcnN0VmFsdWVGcm9tLCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENhcnRTZXJ2aWNlIHtcblx0cHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xuXHRwcml2YXRlIF9hcGlDb25zdHM6IEFwaUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XG5cdHByaXZhdGUgX2FuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UgPSBpbmplY3QoQW5hbHl0aWNzU2VydmljZSk7XG5cdHByaXZhdGUgX2xvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSA9IGluamVjdChMb2NhbFN0b3JhZ2VTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlID0gaW5qZWN0KENoYW5uZWxTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XG5cdHByaXZhdGUgX3N0b3JhZ2U6IE5neExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTmd4TG9jYWxTdG9yYWdlU2VydmljZSk7XG5cdHByaXZhdGUgX3JvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cblx0cHJpdmF0ZSBfY2FydFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblx0cHJpdmF0ZSBfcHJvbW90aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG5cdHByaXZhdGUgX2NvdXBvblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblx0cHJpdmF0ZSBfY2FydEl0ZW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPihbXSlcblx0cHJpdmF0ZSBfcmVxdWVzdEluUHJvY2VzczogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cdHByaXZhdGUgX2JhbGFuY2VDdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxCYWxhbmNlQ3VzdG9tZXIgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QmFsYW5jZUN1c3RvbWVyIHwgbnVsbD4obnVsbCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBDQVJUX0tFWTogc3RyaW5nID0gJ2NhcnQnO1xuXHRwcml2YXRlIHJlYWRvbmx5IENBUlRfVE9LRU5fS0VZOiBzdHJpbmcgPSAnY2FydF90b2tlbic7XG5cblx0cHJpdmF0ZSBfaXRlbXM6IGFueVtdID0gW107XG5cdHByaXZhdGUgX2NvdW50OiBudW1iZXIgPSAwO1xuXHRwdWJsaWMgY2FydFRva2VuOiBzdHJpbmcgfCBudWxsID0gJyc7XG5cdHB1YmxpYyBjaGFubmVsQ29uZmlnOiBhbnkgPSB7fTtcblx0cHJpdmF0ZSBfbG9jYWxlID0gXCJcIjtcblx0cHJpdmF0ZSBfY2FydEluaXRpYWxpemVkID0gZmFsc2U7IC8vIOKaoO+4jyBGSVg6IEZsYWcgcGFyYSBldml0YXIgaW5pY2lhbGl6YWNpb25lcyBkdXBsaWNhZGFzXG5cdHB1YmxpYyBjYXJ0SXRlbXMkID0gdGhpcy5fY2FydEl0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKG1hcChpdGVtcyA9PiB0aGlzLnN3aXRjaFByaWNlSW5DYXJ0SXRlbShpdGVtcykpKVxuXHRwdWJsaWMgY291cG9uJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5fY291cG9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHVibGljIGNhcnQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9jYXJ0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHVibGljIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5hc09ic2VydmFibGUoKTtcblx0cHJpdmF0ZSBfaGF2ZVRvVXBkYXRlID0gdHJ1ZTtcblx0cHVibGljIGJhbGFuY2VDdXN0b21lciQgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgYWxsb3dBbnlQYXltZW50TWV0aG9kJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LmFsbG93QW55UGF5bWVudE1ldGhvZCA/PyBudWxsKSk7XG5cdHB1YmxpYyBhbGxvd0V4Y2VlZEJhbGFuY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dFeGNlZWRCYWxhbmNlID8/IG51bGwpKTtcblx0cHVibGljIGNyZWRpdEFtb3VudCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5jcmVkaXRBbW91bnQgPz8gbnVsbCkpO1xuXHRwdWJsaWMgc2hvd01heCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5zaG93TWF4ID8/IG51bGwpKTtcblx0cHVibGljIHNob3dQcmljZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5zaG93UHJpY2UgPz8gbnVsbCkpO1xuXHRwdWJsaWMgcHJvbW90aW9ucyQgPSB0aGlzLl9wcm9tb3Rpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0Ly9BUEkgVVJMXG5cdHByaXZhdGUgX2NhcnRCYXNlVXJsOiBzdHJpbmcgPSBgJHt0aGlzLl9hcGlDb25zdHMuU0hPUF9BUElfVVJMfSR7dGhpcy5fYXBpQ29uc3RzLkNIQU5ORUx9L2NhcnRzYDtcblxuXHRwdWJsaWMgdXBkYXRlSXRlbVF1YW50aXR5QXBpKGl0ZW1faWQ6IGFueSkgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTsgfVxuXHRwdWJsaWMgYWRkSXRlbUFwaSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXM/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFIH1cblx0cHVibGljIGFkZEFsbEl0ZW1zQXBpID0gKCkgPT4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvbXVsdGlwbGUtaXRlbXMnICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEU7XG5cdHB1YmxpYyBjYXJ0SXRlbXNBcGkoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUgfVxuXHRwdWJsaWMgZGVsZXRlSXRlbUFwaShpdGVtX2lkOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEU7IH1cblx0cHVibGljIGNvdXBvbkFwaSgpIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2NvdXBvbicgfTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XG5cblx0XHQvLyDinIUgQ2FyZ2FyIGNhcnJpdG8gbG9jYWwgeSB0b2tlbiBwcmV2aW9cblx0XHR0aGlzLl9pdGVtcyA9IEpTT04ucGFyc2UodGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DQVJUX0tFWSkgfHwgJ1tdJyk7XG5cdFx0dGhpcy5jYXJ0VG9rZW4gPSB0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNBUlRfVE9LRU5fS0VZKSB8fCBudWxsO1xuXG5cdFx0Ly8g8J+UkSBDTEFWRTogU3VzY3JpcGNpw7NuIGEgY2FtYmlvcyBkZSBlc3RhZG8gZGUgbG9naW5cblx0XHR0aGlzLl9hdXRoU2VydmljZS5sb2dnZWRJbiQuc3Vic2NyaWJlKGlzTG9nZ2VkSW4gPT4ge1xuXHRcdFx0aWYgKGlzTG9nZ2VkSW4gJiYgIXRoaXMuX2NhcnRJbml0aWFsaXplZCkge1xuXHRcdFx0XHR0aGlzLnN5bmNDYXJ0T25Mb2dpbigpO1xuXHRcdFx0XHR0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmICghaXNMb2dnZWRJbiAmJiB0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQpIHtcblx0XHRcdFx0Ly8gVXN1YXJpbyBjZXJyw7Mgc2VzacOzbiwgbGltcGlhciB5IHJlc2V0ZWFyIGNhcnJpdG9cblx0XHRcdFx0dGhpcy5jbGVhckFuZFJlc2V0Q3VzdG9tZXJDYXJ0KCk7XG5cdFx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IGZhbHNlOyAvLyBSZXNldCBmbGFnIHBhcmEgcGVybWl0aXIgbnVldmEgaW5pY2lhbGl6YWNpw7NuXG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9jaGFubmVsU2VydmljZS5jaGFubmVsJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcyk7XG5cblx0XHQvLyDimqDvuI8gRklYOiBTb2xvIGluaWNpYWxpemFyIHBhcmEgdXN1YXJpb3Mgbm8gYXV0ZW50aWNhZG9zXG5cdFx0Ly8gRWwgY2Fycml0byBkZSB1c3VhcmlvcyBhdXRlbnRpY2Fkb3Mgc2UgaW5pY2lhbGl6YSBlbiBsYSBzdXNjcmlwY2nDs24gbG9nZ2VkSW4kXG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAhdGhpcy5fY2FydEluaXRpYWxpemVkKSB7XG5cdFx0XHQvLyBTaSBoYXkgdG9rZW4sIGludGVudGFyIG9idGVuZXIgY2Fycml0byBwb3IgdG9rZW4sIHNpbm8gY3JlYXIgbnVldm9cblx0XHRcdGlmICh0aGlzLmNhcnRUb2tlbikge1xuXHRcdFx0XHR0aGlzLmdldENhcnQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZ2V0Q2FydEJ5Q3VzdG9tZXIoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNpbmNyb25pemEgZWwgY2Fycml0byBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGxvZ2luXG5cdCAqIEltcGxlbWVudGEgbGEgbMOzZ2ljYSBkZSBBbmd1bGFyIDkgcGFyYSBwcmVzZXJ2YXIgZWwgY2Fycml0byBkZWwgaW52aXRhZG9cblx0ICovXG5cdHByaXZhdGUgc3luY0NhcnRPbkxvZ2luKCkge1xuXHRcdC8vIOKaoO+4jyBGSVg6IFNpIGhheSB0b2tlbiAoY2Fycml0byBleGlzdGVudGUpLCBzaWVtcHJlIGludGVudGFyIHJlY3VwZXJhcmxvXG5cdFx0Ly8gTm8gZGVwZW5kZW1vcyBzb2xvIGRlIGxvcyBpdGVtcyBsb2NhbGVzIHF1ZSBwdWVkZW4gZXN0YXIgdmFjw61vcyBhbCByZWNhcmdhclxuXHRcdGlmICh0aGlzLmNhcnRUb2tlbikge1xuXHRcdFx0Ly8gRW52w61hIGVsIHRva2VuIHBhcmEgcmVjdXBlcmFyL2Z1c2lvbmFyIGNhcnJpdG9zXG5cdFx0XHR0aGlzLmdldENhcnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2luIHRva2VuIGRlIGNhcnJpdG8sIG9idGVuZXIgY2Fycml0byBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkb1xuXHRcdFx0dGhpcy5nZXRDYXJ0QnlDdXN0b21lcigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSBlbCBjYXJyaXRvIGRlc2RlIGVsIGJhY2tlbmQgY29uIGzDs2dpY2EgZGUgc2luY3Jvbml6YWNpw7NuXG5cdCAqIEVudsOtYSBlbCB0b2tlbiBzaSBoYXkgY2Fycml0byBsb2NhbCBwYXJhIGZ1c2lvbmFyIGNhcnJpdG9zXG5cdCAqL1xuXHRwcml2YXRlIGdldENhcnQoKSB7XG5cdFx0Ly8g4pqg77iPIEZJWDogRW52aWFyIHRva2VuIHNpIGV4aXN0ZSwgc2luIGltcG9ydGFyIHNpIGhheSBpdGVtcyBsb2NhbGVzXG5cdFx0Ly8gRXN0byBwZXJtaXRlIHJlY3VwZXJhciBlbCBjYXJyaXRvIGV4aXN0ZW50ZSBhbCByZWNhcmdhciBsYSBww6FnaW5hXG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRoaXMuY2FydFRva2VuID8geyB0b2tlbjogdGhpcy5jYXJ0VG9rZW4gfSA6IHVuZGVmaW5lZDtcblxuXHRcdGZpcnN0VmFsdWVGcm9tKFxuXHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksIHBheWxvYWQpXG5cdFx0KS50aGVuKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0Ly9jb25zb2xlLmxvZygnZ2V0Q2FydCByZXNwb25zZTonLCByZXMpO1xuXHRcdFx0dGhpcy5pbml0aWFsaXplQ2FydChyZXMpO1xuXHRcdH0pLmNhdGNoKGVycm9yID0+IHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgY2FydDonLCBlcnJvcik7XG5cdFx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDb25maWd1cmEgZWwgY2Fycml0byBjb24gbG9zIHBhcmFtZXRyb3MgaW5pY2lhbGVzLlxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0aW5pdGlhbGl6ZUNhcnQocmVzcG9uc2U6IGFueSk6IGFueSB7XG5cdFx0dGhpcy5jYXJ0VG9rZW4gPSByZXNwb25zZS50b2tlblZhbHVlO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVksIHRoaXMuY2FydFRva2VuKTtcblx0XHR0aGlzLl9sb2NhbGUgPSByZXNwb25zZS5sb2NhbGU7XG5cblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcblx0XHR0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvKipcblx0ICogQWN0dWFsaXphIGxvcyBpdGVtcyBkZWwgY2Fycml0by5cblx0ICogQHBhcmFtIGl0ZW1zIFxuXHQgKi9cblx0dXBkYXRlQ2FydEl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuXHRcdHRoaXMuX2l0ZW1zID0gaXRlbXM7XG5cdFx0dGhpcy5fY291bnQgPSBpdGVtcy5sZW5ndGg7XG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdH1cblx0LyoqXG5cdCAqIEFncmVnYSB1biBwcm9kdWN0byBhbCBjYXJyaXRvIGNvbiBsYSBjYW50aWRhZCBkZXNlYWRhLiBcblx0ICogQHBhcmFtIHByb2R1Y3QgUHJvZHVjdG8gYSBhZ3JlZ2FyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBDYW50aWRhZCBcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBJZCBkZSBsYSB2YXJpYW50ZVxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGFkZFRvQ2FydChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50SWQ6IHN0cmluZykge1xuXHRcdGNvbnN0IGJhbGFuY2U6IEJhbGFuY2VDdXN0b21lciB8IG51bGwgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xuXHRcdGNvbnN0IGFwcGx5TWF4T3JkZXJzOiBib29sZWFuID0gYmFsYW5jZT8uYXBwbHlNYXhPcmRlcnMgPz8gZmFsc2U7XG5cdFx0Y29uc3QgbWF4T3JkZXJzOiBudW1iZXIgPSBiYWxhbmNlPy5tYXhPcmRlcnMgPz8gSW5maW5pdHk7XG5cblx0XHRpZiAoYXBwbHlNYXhPcmRlcnMgJiYgKG1heE9yZGVycyA8PSAwIHx8IG1heE9yZGVycyA9PT0gbnVsbCkpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXgtb3JkZXJzLXJlYWNoZWQnKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblx0XHRsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudElkLCBxdWFudGl0eSk7XG5cblx0XHRpZiAoIWFkZGVkKSB7XG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50SWQgfSkpXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdHJlcyA9PiB7XG5cdFx0XHRcdFx0XHQvLyBNYW5lamFyIGxhIHJlc3B1ZXN0YSBIVFRQIGV4aXRvc2EgKGPDs2RpZ28gMjAwKVxuXHRcdFx0XHRcdFx0dGhpcy5hcHBlbmRUb0NhcnQocmVzKTtcblx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcblx0XHRcdFx0XHRcdGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ8OzZGlnbyBkZSBlcnJvciA1MDAgKHRpbWVvdXQpXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2NhcnQtZXJyb3InKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIE90cm8gY8OzZGlnbyBkZSBlcnJvclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdlcnJvci1zZXJ2ZXInKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBBY3R1YWxpemEgZWwgY2Fycml0byBhZ3JlZ2FuZG8gbG9zIG51ZXZvcyBpdGVtcy5cblx0ICogQHBhcmFtIGNhcnQgXG5cdCAqL1xuXHRhcHBlbmRUb0NhcnQoY2FydDogYW55KSB7XG5cdFx0dGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQpO1xuXHRcdHRoaXMuX2l0ZW1zID0gdGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0Lml0ZW1zKTtcblx0XHR0aGlzLl9jb3VudCA9IHRoaXMuX2l0ZW1zLmxlbmd0aDtcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcblx0fVxuXHQvKipcblx0ICogTWFwZWEgbG9zIGl0ZW1zIGRlbCBjYXJyaXRvIHBhcmEgZGFybGUgdW4gbWVqb3IgZm9ybWF0byBzaW1pbGFyIGEgbGEgaW50ZXJmYXogYENhcnRJdGVtYC5cblx0ICogQHBhcmFtIGl0ZW1zIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHRyYW5zZm9ybUl0ZW1zKGl0ZW1zOiBhbnkpOiBhbnlbXSB7XG5cdFx0cmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRwcm9kdWN0OiBpdGVtLnByb2R1Y3QsXG5cdFx0XHRcdHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxuXHRcdFx0XHRsb3Q6IGl0ZW0ub3JkZXJJdGVtTG90LFxuXHRcdFx0XHRxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcblx0XHRcdFx0aXRlbV9pZDogaXRlbS5pZCxcblx0XHRcdFx0dG90YWw6IGl0ZW0udG90YWxcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogQ2hlcXVlYSBzaSBlbCBwcm9kdWN0byB5YSBleGlzdGUgZW4gZWwgY2Fycml0byBkZSBjb21wcmFzLlxuXHQgKiBAcGFyYW0gcHJvZHVjdCBcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBcblx0ICogQHBhcmFtIHF1YW50aXR5QWRkIENhbnRpZGFkIGEgYWdyZWdhci4gUG9yIGRlZmVjdG8gZXMgMS5cblx0ICovXG5cdGFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdDogUHJvZHVjdCwgdmFyaWFudElkOiBzdHJpbmcsIHF1YW50aXR5QWRkOiBudW1iZXIgPSAxKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoKGl0ZW06IGFueSwgaW5kZXgpID0+IHtcblx0XHRcdGlmIChpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdC5pZCAmJiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudElkKSB7XG5cdFx0XHRcdHRoaXMudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIHRoaXMuZmluZEl0ZW0ocHJvZHVjdC5pZCkucXVhbnRpdHkgKyBxdWFudGl0eUFkZCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pXG5cdH1cblx0LyoqXG5cdCAqIE9idGllbmUgbGEgY2FudGlkYWQgZGUgdW4gcHJvZHVjdG8gZGVsIGl0ZW0gZGVsIGNhcnJpdG8gXG5cdCAqIEBwYXJhbSBjb2RlVmFyaWFudCBjb2RpZ28gZGUgbGEgdmFyaWFudGUuXG5cdCAqIEByZXR1cm5zIGxhIGNhbnRpZGFkIG8gYDBgIGVuIHN1IGRlZmVjdG8uXG5cdCAqL1xuXHRnZXRDb3VudEZyb21JdGVtSW5DYXJ0KGNvZGVWYXJpYW50OiBhbnkpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IGNvZGVWYXJpYW50KT8ucXVhbnRpdHkgfHwgMDtcblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSB1biBvYnNlcnZhYmxlIGNvbiBsYSBjYW50aWRhZCBkZSBpdGVtcyBlbiBlbCBjYXJyaXRvLlxuXHQgKi9cblx0Z2V0Q291bnRDYXJ0SXRlbXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5jYXJ0SXRlbXMkLnBpcGUobWFwKChjYXJ0SXRlbXMpID0+IGNhcnRJdGVtcz8ubGVuZ3RoKSk7XG5cdH1cblx0LyoqXG5cdCAqIE1hcGVhIGxvcyBwcm9kdWN0b3MgZW4gZWwgY2Fycml0byBwYXJhIGNhbWJpYXIgZWwgcHJlY2lvIG9idGVuaWVuZG8gZGUgbGEgdmFyaWFudGUgeSBzZWxlY2Npb25hbmRvIHNpIGVzXG5cdCAqIHByZWNpbyBkZSBvZmVydGEgbyBlbCBwcmVjaW8gbm9ybWFsLlxuXHQgKiBAcGFyYW0gaXRlbXMgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBzd2l0Y2hQcmljZUluQ2FydEl0ZW0gPSAoaXRlbXM6IGFueVtdKSA9PiB7XG5cdFx0cmV0dXJuIGl0ZW1zLm1hcChcblx0XHRcdGl0ZW0gPT4ge1xuXHRcdFx0XHRpZiAoaXRlbS5wcm9kdWN0KSB7XG5cdFx0XHRcdFx0aXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGl0ZW1cblx0XHRcdH1cblx0XHQpXG5cdH1cblx0LyoqXG5cdCAqIEFjdHVhbGl6YSBsYSBjYW50aWRhZCBkZSB1biBwcm9kdWN0byBleGlzdGVudGUgZW4gZWwgY2Fycml0by5cblx0ICogQHBhcmFtIGl0ZW0gZWwgaXRlbSBhIGFjdHVhbGl6YXIuXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBsYSBjYW50aWRhZCBudWV2YS5cblx0ICovXG5cdHVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdC8vIFZhbGlkYXIgYW50ZXMgZGUgcHJvY2VkZXJcblx0XHRpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSAmJiAodGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhpdGVtLCBxdWFudGl0eSkpKSB7XG5cdFx0XHQvLyBTaSBwYXNhIGxhcyB2YWxpZGFjaW9uZXMsIGhhY2VyIGxhIHBldGljacOzbiBIVFRQXG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy51cGRhdGVJdGVtUXVhbnRpdHlBcGkodGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZCkpLCB7ICdxdWFudGl0eSc6IE51bWJlcihxdWFudGl0eSkgfSkpXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdHJlcyA9PiB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKSAmJiB0aGlzLnVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkoaXRlbS52YXJpYW50X2lkLCBOdW1iZXIocXVhbnRpdHkpKSxcblx0XHRcdFx0XHRlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXG5cdFx0XHRcdCk7XG5cblx0XHRcdHJldHVybiB0cnVlOyAvLyBWYWxpZGFjaW9uZXMgcGFzYXJvbiwgb3BlcmFjacOzbiBpbmljaWFkYVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIFZhbGlkYWNpb25lcyBmYWxsYXJvblxuXHRcdH1cblx0fVxuXHQvKipcblx0ICogTWFuZWphIGVsIGVycm9yIGVuIGNhc28gZGUgcXVlIG5vIHNlIHB1ZWRhIGFncmVnYXIgYWwgY2Fycml0byBlbCBwcm9kdWN0by5cblx0ICogQHBhcmFtIGVyciBcblx0ICovXG5cdGhhbmRsZUVycm9yKGVycjogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdH1cblx0LyoqXG5cdCAqIEFjdHVhbGl6YSBsYSBjYW50aWRhZCBkZWwgaXRlbSBkZWwgcHJvZHVjdG8gZGVsIGNhcnJpdG8uXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgSUQgZGUgbGEgdmFyaWFudGUgcGFyYSBidXNjYXIgZWwgaXRlbS5cblx0ICogQHBhcmFtIHF1YW50aXR5IE51ZXZhIGNhbnRpZGFkLiBcblx0ICovXG5cdHVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkodmFyaWFudElkOiBhbnksIHF1YW50aXR5OiBudW1iZXIpOiB2b2lkIHtcblx0XHQvL2NvbnNvbGUubG9nKFwidXBkYXRlQ2FydEl0ZW1RdWFudGl0eVwiLCB0aGlzLl9pdGVtcywgdmFyaWFudElkKVxuXHRcdGxldCBuZXdRdWFudGl0eSA9IHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudElkKS5xdWFudGl0eSA9IHF1YW50aXR5O1xuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xuXHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LXVwZGF0ZWQnLCB7IHF1YW50aXR5OiBuZXdRdWFudGl0eSB9KTtcblx0fVxuXHQvKipcblx0ICogQWN0dWFsaXphIGxvcyBkYXRvcyBkZWwgY2Fycml0byBlbiBlbCBsb2NhbFN0b3JhZ2UuIFxuXHQgKi9cblx0dXBkYXRlTG9jYWxDYXJ0KCkge1xuXHRcdHRoaXMuX3N0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCB0aGlzLl9pdGVtcylcblx0fVxuXHQvKipcblx0ICogQWN0dWFsaXphIGVsIGNhcnJpdG8uIEVtaXRlIGV2ZW50byBkZSBhbmFsaXRpY3MuIFxuXHQgKiBBY3R1YWxpemEgdG9kbyBsbyByZWxhY2lvbmFkbyBhbCBjdXDDs24uXG5cdCAqIEBwYXJhbSBjYXJ0IFJlc3B1ZXN0YSBwcm9kdWNpZGEgcG9yIGVsIGVucG9pbnQgY29uIGluZm9ybWFjacOzbiBkZWwgY2Fycml0by5cblx0ICogQHBhcmFtIGVtaXRFdmVudCBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHR1cGRhdGVDYXJ0T2JqKGNhcnQ6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IGJvb2xlYW4ge1xuXHRcdHRoaXMuX2NhcnRTdWJqZWN0Lm5leHQoY2FydCk7XG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhjYXJ0Py5iYWxhbmNlQ3VzdG9tZXIsIGNhcnQ/LnRvdGFscz8udG90YWwpO1xuXHRcdGVtaXRFdmVudCAmJiB0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcblx0XHQvL3RoaXMuX3Byb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xuXG5cdFx0Y2FydC5jb3Vwb25Db2RlXG5cdFx0XHQ/IHRoaXMuZm9ybWF0Q291cG9uKGNhcnQpXG5cdFx0XHQ6IHRoaXMuX2NvdXBvblN1YmplY3QubmV4dChudWxsKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvKipcblx0ICogQXBsaWNhciB1biBtZWpvciBmb3JtYXRvIGEgbG9zIGRhdG9zIGRlIGxvcyBjdXBvbmVzIGFwbGljYWRvcy5cblx0ICogQHBhcmFtIGNhcnQgXG5cdCAqL1xuXHRmb3JtYXRDb3Vwb24oY2FydDogYW55KSB7XG5cdFx0bGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5fY291cG9uU3ViamVjdC52YWx1ZTtcblx0XHRsZXQgY291cG9uOiBJQ291cG9uID0geyBjb2RlOiBjYXJ0LmNvdXBvbkNvZGUgfTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcblx0XHRcdGNvdXBvbiA9IHtcblx0XHRcdFx0Li4uY291cG9uLFxuXHRcdFx0XHRhbW91bnQ6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0uYW1vdW50LmN1cnJlbnQpIHx8IDAsXG5cdFx0XHRcdG5hbWU6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0ubmFtZSkgfHwgJ25vLW5hbWUnXG5cdFx0XHR9O1xuXHRcdH0gY2F0Y2ggKGUpIHsgfVxuXHRcdChjb3Vwb24gIT0gY3VycmVudF9jb3Vwb24pICYmIHRoaXMuX2NvdXBvblN1YmplY3QubmV4dChjb3Vwb24pO1xuXHRcdC8vY29uc29sZS5sb2coY291cG9uKTtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSBlbCBJRCBkZWwgaXRlbSBkZWwgY2Fycml0by5cblx0ICogQHBhcmFtIHZhcmlhbnRfaWQgSWQgZGUgbGEgdmFyaWFudGUgdXRpbGl6YWRhIHBhcmEgYnVzY2FyIGVsIGl0ZW0uXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0ZmluZEl0ZW1CeUlkVmFyaWFudCh2YXJpYW50X2lkOiBhbnkpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpIS5pdGVtX2lkXG5cdH1cblx0LyoqXG5cdCAqIFZhbGlkYSBsYSBjYW50aWRhZCBwYXJhIHNhYmVyIHNpIHNlIHB1ZWRlIGFjdHVhbGl6YXIgbyBuby5cblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBkZWwgY2Fycml0b1xuXHQgKiBAcGFyYW0gcXVhbnRpdHkgY2FudGlkYWQgYSBhZ3JlZ2FyXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0dmFsaWRhdGVRdWFudGl0eShpdGVtOiBhbnksIHF1YW50aXR5OiBhbnkpIHtcblx0XHRjb25zdCBhY3R1YWxRdWFudGl0eSA9IE51bWJlcih0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkpOyAvLyA8LS0gRm9yemFyIGEgbsO6bWVyb1xuXHRcdGNvbnN0IG5ld1F1YW50aXR5ID0gTnVtYmVyKHF1YW50aXR5KTsgLy8gPC0tIEZvcnphciBhIG7Dum1lcm9cblxuXHRcdGlmICgoYWN0dWFsUXVhbnRpdHkgKyBuZXdRdWFudGl0eSkgPiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cdFx0aWYgKChhY3R1YWxRdWFudGl0eSArIG5ld1F1YW50aXR5KSA8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0XHRpZiAoaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgPiAxKSB7XG5cdFx0XHRpZiAoKGFjdHVhbFF1YW50aXR5ICsgbmV3UXVhbnRpdHkpICUgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgIT09IDApIHtcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ211bHRpcGxlLXF1YW50aXR5LXJlcXVpcmVkJywge1xuXHRcdFx0XHRcdG11bHRpcGxlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSxcblx0XHRcdFx0XHRjdXJyZW50OiBhY3R1YWxRdWFudGl0eSArIG5ld1F1YW50aXR5IC8vIDwtLSBBaG9yYSBzdW1hIGNvcnJlY3RhbWVudGVcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cdC8qKlxuXHQgKiBCdXNjYSB1biBwcm9kdWN0byBhIHRyYXbDqXMgZGUgc3UgSUQgZW4gbG9zIGl0ZW1zIGRlbCBjYXJyaXRvLlxuXHQgKiBAcGFyYW0gcHJvZHVjdF9pZCBcblx0ICogQHJldHVybnNcblx0ICovXG5cdGZpbmRJdGVtKHByb2R1Y3RfaWQ6IGFueSk6IGFueSB7IHJldHVybiB0aGlzLl9pdGVtcy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0X2lkKSB9XG5cdC8qKlxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZGVsIGNhcnJpdG8gZW4gZWwgYmFja2VuZC5cblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBhIGVsaW1pbmFyXG5cdCAqIEBwYXJhbSB0b2FzdCBpbmRpY2Egc2kgc2UgZGlzcGFyYSB1biB0b2FzdCAgbyBuby4gUG9yIGRlZmVjdG8gZW4gYHRydWVgLlxuXHQgKi9cblx0ZGVsZXRlQ2FydEl0ZW0oaXRlbTogYW55LCB0b2FzdDogYm9vbGVhbiA9IHRydWUpIHtcblx0XHRsZXQgaWRJdGVtU2VhcmNoZWQgPSB0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKVxuXHRcdC8vY29uc29sZS5sb2coaWRJdGVtU2VhcmNoZWQpXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24uZGVsZXRlKHRoaXMuZGVsZXRlSXRlbUFwaShpZEl0ZW1TZWFyY2hlZCkpKS50aGVuKFxuXHRcdFx0cmVzID0+IHtcblx0XHRcdFx0dGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTtcblx0XHRcdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XG5cdFx0XHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0KVxuXHR9XG5cdC8qKlxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZW4gY2Fycml0byBkZSBmb3JtYSBsb2NhbC4gXG5cdCAqIEBwYXJhbSBjYXJ0IENhcnJpdG8sIGVzIGRlY2lyLCByZXNwdWVzdGEgZGVsIGJhY2tlbmQuXG5cdCAqIEBwYXJhbSBwcm9kdWN0IHByb2R1Y3RvIGEgZWxpbWluYXJcblx0ICogQHBhcmFtIHRvYXN0IHtib29sZWFufSBwYXJhIGluZGljYXIgc2kgc2UgZGlzcGFyYSB1biB0b2FzdCBvIG5vLiBcblx0ICovXG5cdHJlbW92ZUNhcnRJdGVtKGNhcnQ6IGFueSwgcHJvZHVjdDogYW55LCB0b2FzdDogYm9vbGVhbikge1xuXHRcdHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0LCBmYWxzZSk7XG5cdFx0dGhpcy5faXRlbXMuc3BsaWNlKHRoaXMuX2l0ZW1zLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pdGVtX2lkID09PSBwcm9kdWN0Lml0ZW1faWQpLCAxKTtcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xuXHRcdHRvYXN0ICYmIHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdFx0dG9hc3QgJiYgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZCcpO1xuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XG5cdFx0dGhpcy5fYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3JlbW92ZV9mcm9tX2NhcnQnLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLl9jb25zdHMuY3VycmVuY3kuY29kZSB9KVxuXHR9XG5cdC8qKlxuXHQgKiBBZ3JlZ2EgdW4gY3Vwb24gYWwgY2Fycml0by5cblx0ICogQHBhcmFtIHZhbHVlIENvZGlnbyBkZWwgY3Vww7NuLlxuXHQgKi9cblx0YWRkQ291cG9uKHZhbHVlOiBzdHJpbmcpIHtcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogdmFsdWUgfSkpLnRoZW4oXG5cdFx0XHRyZXMgPT4ge1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlcylcblx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlcylcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0N1cG9uIGFwbGljYWRvJylcblx0XHRcdH0sXG5cdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHQvL2NvbnNvbGUuZXJyb3IoZXJyKSBcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2ludmFsaWQtY291cG9uJylcblx0XHRcdH1cblx0XHQpXG5cdH1cblx0LyoqXG5cdCAqIEVsaW1pbmEgdW4gY3Vww7NuIGRlbCBjYXJyaXRvLiBcblx0ICovXG5cdHJlbW92ZUNvdXBvbigpIHtcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmNvdXBvbkFwaSgpKSkudGhlbihcblx0XHRcdHJlcyA9PiB7XG5cdFx0XHRcdC8vY29uc29sZS5sb2cocmVzKVxuXHRcdFx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKVxuXHRcdFx0fVxuXHRcdClcblx0fVxuXG5cdGdldENvdXBvbkNvZGUoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LmNvdXBvbkNvZGUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHN1YnRvdGFsIGRlbCBjYXJyaXRvLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldFN1YlRvdGFsQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8uc3VidG90YWwpKTtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCB0b3RhbCBkZWwgbW9udG8gZGUgbGFzIHByb21vY2lvbmVzIGFwbGljYWRhcy5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRnZXRUb3RhbFByb21vdGlvbkFtb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnByb21vdGlvbikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldG9ybmEgdW4gb2JzZXJ2YWJsZSBjb24gZWwgbW9udG8gZGUgbG9zIGltcHVlc3RvcyBhcGxpY2Fkb3MuXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Z2V0VGF4ZXNBbW91bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LnRheGVzIDogMCkpO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIG1vbnRvIHRvdGFsIGRlbCBjYXJyaXRvLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldFRvdGFsQW1vdW50KCkge1xuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XG5cdH1cblx0LyoqXG5cdCAqIFJldG9ybmEgZWwgdG9rZW4gZGVsIGNhcnJpdG8uXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Z2V0Q2FydFRva2VuKCkge1xuXHRcdHJldHVybiB0aGlzLmNhcnRUb2tlbjtcblx0fVxuXHRjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWU6IGFueSkgPT4gdGhpcy5faGF2ZVRvVXBkYXRlID0gdmFsdWU7XG5cdGNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKSB7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJDbGVhcmluZyBhbmQgcmVzZXRpbmcuLi5cIilcblx0XHR0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XG5cdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCkpLnN1YnNjcmliZShcblx0XHRcdHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcblx0XHQpXG5cdHByaXZhdGUgcmVzZXRDYXJ0ID0gKGZuPzogYW55KSA9PiB7XG5cdFx0dGhpcy5faXRlbXMgPSBbXTtcblx0XHR0aGlzLl9jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xuXHRcdHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMobnVsbCk7XG5cdFx0dGhpcy5jYXJ0VG9rZW4gPSBudWxsO1xuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XG5cdFx0dGhpcy5fY291bnQgPSAwO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9LRVksIFwiW11cIik7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSk7XG5cdFx0dGhpcy5fY2FydEluaXRpYWxpemVkID0gZmFsc2U7IC8vIOKaoO+4jyBGSVg6IFJlc2V0IGRlbCBmbGFnIGRlIGluaWNpYWxpemFjacOzblxuXHRcdGZuICYmIGZuKCk7XG5cdH1cblx0Y2xlYXJBbmRSZXNldENhcnQoKSB7XG5cdFx0dGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0QnlDdXN0b21lcik7IC8vIOKaoO+4jyBGSVg6IENyZWFyIG51ZXZvIGNhcnJpdG8gZGVzcHXDqXMgZGUgY29tcGxldGFyIGNvbXByYVxuXHR9XG5cblx0cHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGJhbGFuY2U6IGFueSwgdG90YWw6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XG5cblx0XHRpZiAoIWJhbGFuY2UpIHtcblx0XHRcdHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB0b3RhbEFtb3VudCA9IHRvdGFsID8/IDA7XG5cblx0XHRjb25zdCBiYWxhbmNlRGF0YSA9IHtcblx0XHRcdGFsbG93QW55UGF5bWVudE1ldGhvZDogYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QsXG5cdFx0XHRhbGxvd0V4Y2VlZEJhbGFuY2U6IGJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlLFxuXHRcdFx0Y3JlZGl0QW1vdW50OiBiYWxhbmNlLmNyZWRpdEFtb3VudCxcblx0XHRcdHNob3dNYXg6IGJhbGFuY2Uuc2hvd01heCxcblx0XHRcdHNob3dQcmljZTogYmFsYW5jZS5zaG93UHJpY2UsXG5cdFx0XHRyZW1haW5pbmdDcmVkaXRzOlxuXHRcdFx0XHRiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcblx0XHRcdFx0XHQ/IGJhbGFuY2UuY3JlZGl0QW1vdW50IC0gdG90YWxBbW91bnRcblx0XHRcdFx0XHQ6IDAsXG5cdFx0XHRhcHBseU1heE9yZGVyczogYmFsYW5jZS5hcHBseU1heE9yZGVycyxcblx0XHRcdG1heE9yZGVyczogYmFsYW5jZS5tYXhPcmRlcnNcblx0XHR9O1xuXG5cdFx0dGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KGJhbGFuY2VEYXRhKTtcblx0fVxuXHRhZGRUb0xvdChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkOiBhbnksIGlkPzogbnVtYmVyLCBvcmRlcl9pdGVtX2lkPzogYW55LCBsb3RfcXVhbnRpdHk/OiBhbnksIHVuaXRfcHJpY2U/OiBhbnksIHVuaXRfdG90YWw/OiBhbnksIGFqdXN0ZW1lbnRfdG90YWw/OiBhbnksIHRvdGFsX2xvdD86IG51bWJlciwgbG90X3N0YXR1cz86IHN0cmluZywgZGF0ZV9yZXF1ZXN0Pzogc3RyaW5nLCBub3Rlcz86IHN0cmluZywgc2hpcHBpbmdfYWRkcmVzc19pZD86IG51bWJlciwgc2hpcHBpbmdfYWRkcmVzc19uYW1lPzogc3RyaW5nLCBhY3Rpb24/OiBzdHJpbmcpIHtcblx0XHRpZiAoIXRoaXMuX2F1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRsZXQgYWRkZWQgPSAnJztcblx0XHQhYWRkZWQgJiYgdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXG5cdFx0XHQuc3Vic2NyaWJlKHtcblx0XHRcdFx0bmV4dDogKHJlcykgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcblx0XHRcdFx0ZXJyb3I6IChlcnIpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxuXHRcdFx0fSk7XG5cdH1cblxuXG5cdGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XG5cdFx0dGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKFxuXHRcdFx0bWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8uY3JlZGl0QW1vdW50ID8/IG51bGwpXG5cdFx0KTtcblxuXG5cdGdldFJlbWFpbmluZ0NyZWRpdHMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCB1bmRlZmluZWQ+ID0+XG5cdFx0dGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LnJlbWFpbmluZ0NyZWRpdHMpKTtcblxuXG5cdHB1YmxpYyBoYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCA9ICgpOiBib29sZWFuID0+IHtcblx0XHRjb25zdCBiYWxhbmNlID0gdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcblxuXHRcdGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoKHRoaXMuX2NhcnRTdWJqZWN0LnZhbHVlPy50b3RhbHM/LnRvdGFsID8/IDApID4gYmFsYW5jZS5jcmVkaXRBbW91bnQpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHRwcml2YXRlIHZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eTogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG5cdFx0Y29uc3QgYmFsYW5jZSA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XG5cblx0XHRpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdW5pdFByaWNlID0gaXRlbS50b3RhbCAvIGl0ZW0ucXVhbnRpdHk7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFF1YW50aXR5ID0gcXVhbnRpdHkgLSBpdGVtLnF1YW50aXR5O1xuXG5cdFx0aWYgKGFkZGl0aW9uYWxRdWFudGl0eSA8PSAwKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBhZGRpdGlvbmFsQ29zdCA9IHVuaXRQcmljZSAqIGFkZGl0aW9uYWxRdWFudGl0eTtcblxuXHRcdGlmIChhZGRpdGlvbmFsQ29zdCA+IGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cykge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdGFkZFJlcGVhdE9yZGVyVG9DYXJ0KGl0ZW1zOiBhbnlbXSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdjYXJ0LW5vdC1lbXB0eScpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IGl0ZW1zVG9BZGQgPSBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuXHRcdFx0cHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcblx0XHRcdHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxuXHRcdFx0dmFyaWFudENvZGU6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlXG5cdFx0fSkpO1xuXG5cdFx0aWYgKGl0ZW1zVG9BZGQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm8tcHJvZHVjdHMtdG8tYWRkJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0aXRlbXM6IGl0ZW1zVG9BZGRcblx0XHR9O1xuXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xuXG5cdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkQWxsSXRlbXNBcGkoKSwgcGFyYW1zKVxuXHRcdFx0LnRvUHJvbWlzZSgpXG5cdFx0XHQudGhlbihyZXMgPT4ge1xuXG5cdFx0XHRcdGlmIChyZXM/LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gcmVzLmVycm9yPy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJ18nKSB8fCAndW5rbm93bl9lcnJvcic7XG5cdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBpdGVtc1Jlc3BvbnNlID0gcmVzPy5pdGVtc19yZXNwb25zZSB8fCBbXTtcblx0XHRcdFx0Y29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcblxuXHRcdFx0XHRjb25zdCBvdXRPZlN0b2NrSXRlbXMgPSBpdGVtc1Jlc3BvbnNlLmZpbHRlcigoaXRlbTogYW55KSA9PlxuXHRcdFx0XHRcdGl0ZW0uc3RhdHVzID09PSAnZmFpbHVyZScgJiZcblx0XHRcdFx0XHRpdGVtLmVycm9ycy5zb21lKChlcnJvcjogYW55KSA9PiBlcnJvci5jb2RlID09PSAnb3V0X29mX3N0b2NrJylcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoY2FydEl0ZW1zLmxlbmd0aCA9PT0gMCAmJiBvdXRPZlN0b2NrSXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdhbGwtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3NvbWUtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY2FydEl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpO1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydEl0ZW1zKSk7XG5cdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3RzLWFkZGVkJyk7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRcdGVyciA9PiB7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuXHRcdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGVyciA9PiB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcblx0XHRcdH0pO1xuXHR9XG5cbn1cbiJdfQ==
|
|
663
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBaUIsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUM3RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7SUFDZixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELFVBQVUsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDOUQsaUJB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QUcsQ0FBQyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBaHVCVyxXQUFXOzRHQUFYLFdBQVcsY0FGWCxNQUFNOzs0RkFFTixXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFsYW5jZUN1c3RvbWVyLCBDYXJ0SXRlbSwgSUNvdXBvbiwgUHJvZHVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlyc3RWYWx1ZUZyb20sIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYW5hbHl0aWNzJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IE5neExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL25neC1sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xuXHRwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuXHRwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuXHRwcml2YXRlIF9jb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSk7XG5cdHByaXZhdGUgX2FwaUNvbnN0czogQXBpQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChBcGlDb25zdGFudHNTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xuXHRwcml2YXRlIF9jaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UgPSBpbmplY3QoQ2hhbm5lbFNlcnZpY2UpO1xuXHRwcml2YXRlIF9jb25zdHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfc3RvcmFnZTogTmd4TG9jYWxTdG9yYWdlU2VydmljZSA9IGluamVjdChOZ3hMb2NhbFN0b3JhZ2VTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuXHRwcml2YXRlIF9jYXJ0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXHRwcml2YXRlIF9wcm9tb3Rpb25zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblx0cHJpdmF0ZSBfY291cG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXHRwcml2YXRlIF9jYXJ0SXRlbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2FydEl0ZW1bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+KFtdKVxuXHRwcml2YXRlIF9yZXF1ZXN0SW5Qcm9jZXNzOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblx0cHJpdmF0ZSBfYmFsYW5jZUN1c3RvbWVyU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEJhbGFuY2VDdXN0b21lciB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCYWxhbmNlQ3VzdG9tZXIgfCBudWxsPihudWxsKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IENBUlRfS0VZOiBzdHJpbmcgPSAnY2FydCc7XG5cdHByaXZhdGUgcmVhZG9ubHkgQ0FSVF9UT0tFTl9LRVk6IHN0cmluZyA9ICdjYXJ0X3Rva2VuJztcblxuXHRwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcblx0cHJpdmF0ZSBfY291bnQ6IG51bWJlciA9IDA7XG5cdHB1YmxpYyBjYXJ0VG9rZW46IHN0cmluZyB8IG51bGwgPSAnJztcblx0cHVibGljIGNoYW5uZWxDb25maWc6IGFueSA9IHt9O1xuXHRwcml2YXRlIF9sb2NhbGUgPSBcIlwiO1xuXHRwcml2YXRlIF9jYXJ0SW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8g4pqg77iPIEZJWDogRmxhZyBwYXJhIGV2aXRhciBpbmljaWFsaXphY2lvbmVzIGR1cGxpY2FkYXNcblx0cHVibGljIGNhcnRJdGVtcyQgPSB0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXG5cdHB1YmxpYyBjb3Vwb24kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9jb3Vwb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgY2FydCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2NhcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLmFzT2JzZXJ2YWJsZSgpO1xuXHRwcml2YXRlIF9oYXZlVG9VcGRhdGUgPSB0cnVlO1xuXHRwdWJsaWMgYmFsYW5jZUN1c3RvbWVyJCA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHB1YmxpYyBhbGxvd0FueVBheW1lbnRNZXRob2QkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dBbnlQYXltZW50TWV0aG9kID8/IG51bGwpKTtcblx0cHVibGljIGFsbG93RXhjZWVkQmFsYW5jZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0V4Y2VlZEJhbGFuY2UgPz8gbnVsbCkpO1xuXHRwdWJsaWMgY3JlZGl0QW1vdW50JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LmNyZWRpdEFtb3VudCA/PyBudWxsKSk7XG5cdHB1YmxpYyBzaG93TWF4JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dNYXggPz8gbnVsbCkpO1xuXHRwdWJsaWMgc2hvd1ByaWNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dQcmljZSA/PyBudWxsKSk7XG5cdHB1YmxpYyBwcm9tb3Rpb25zJCA9IHRoaXMuX3Byb21vdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHQvL0FQSSBVUkxcblx0cHJpdmF0ZSBfY2FydEJhc2VVcmw6IHN0cmluZyA9IGAke3RoaXMuX2FwaUNvbnN0cy5TSE9QX0FQSV9VUkx9JHt0aGlzLl9hcGlDb25zdHMuQ0hBTk5FTH0vY2FydHNgO1xuXG5cdHB1YmxpYyB1cGRhdGVJdGVtUXVhbnRpdHlBcGkoaXRlbV9pZDogYW55KSB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFOyB9XG5cdHB1YmxpYyBhZGRJdGVtQXBpKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9pdGVtcz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUgfVxuXHRwdWJsaWMgYWRkQWxsSXRlbXNBcGkgPSAoKSA9PiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9tdWx0aXBsZS1pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTtcblx0cHVibGljIGNhcnRJdGVtc0FwaSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRSB9XG5cdHB1YmxpYyBkZWxldGVJdGVtQXBpKGl0ZW1faWQ6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTsgfVxuXHRwdWJsaWMgY291cG9uQXBpKCkgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvY291cG9uJyB9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblxuXHRcdC8vIOKchSBDYXJnYXIgY2Fycml0byBsb2NhbCB5IHRva2VuIHByZXZpb1xuXHRcdHRoaXMuX2l0ZW1zID0gSlNPTi5wYXJzZSh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNBUlRfS0VZKSB8fCAnW10nKTtcblx0XHR0aGlzLmNhcnRUb2tlbiA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVkpIHx8IG51bGw7XG5cblx0XHQvLyDwn5SRIENMQVZFOiBTdXNjcmlwY2nDs24gYSBjYW1iaW9zIGRlIGVzdGFkbyBkZSBsb2dpblxuXHRcdHRoaXMuX2F1dGhTZXJ2aWNlLmxvZ2dlZEluJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZShpc0xvZ2dlZEluID0+IHtcblx0XHRcdGlmIChpc0xvZ2dlZEluKSB7XG5cdFx0XHRcdC8vIEFsIHBhc2FyIGRlIGludml0YWRvIC0+IGxvZ3VlYWRvLCBzaWVtcHJlIHNpbmNyb25pemFyIHBhcmEgdHJhZXIgYmFsYW5jZUN1c3RvbWVyXG5cdFx0XHRcdC8vIChzaSBubywgZWwgaGVhZGVyIG5vIG11ZXN0cmEgY3VlbnRhIGNvcnJpZW50ZSBoYXN0YSByZWNhcmdhcikuXG5cdFx0XHRcdHRoaXMuc3luY0NhcnRPbkxvZ2luKCk7XG5cdFx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX2NhcnRJbml0aWFsaXplZCkge1xuXHRcdFx0XHQvLyBVc3VhcmlvIGNlcnLDsyBzZXNpw7NuLCBsaW1waWFyIHkgcmVzZXRlYXIgY2Fycml0b1xuXHRcdFx0XHR0aGlzLmNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IGZhbHNlOyAvLyBSZXNldCBmbGFnIHBhcmEgcGVybWl0aXIgbnVldmEgaW5pY2lhbGl6YWNpw7NuXG5cdFx0fSk7XG5cblx0XHR0aGlzLl9jaGFubmVsU2VydmljZS5jaGFubmVsJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcyk7XG5cblx0XHQvLyDimqDvuI8gRklYOiBTb2xvIGluaWNpYWxpemFyIHBhcmEgdXN1YXJpb3Mgbm8gYXV0ZW50aWNhZG9zXG5cdFx0Ly8gRWwgY2Fycml0byBkZSB1c3VhcmlvcyBhdXRlbnRpY2Fkb3Mgc2UgaW5pY2lhbGl6YSBlbiBsYSBzdXNjcmlwY2nDs24gbG9nZ2VkSW4kXG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAhdGhpcy5fY2FydEluaXRpYWxpemVkKSB7XG5cdFx0XHQvLyBTaSBoYXkgdG9rZW4sIGludGVudGFyIG9idGVuZXIgY2Fycml0byBwb3IgdG9rZW4sIHNpbm8gY3JlYXIgbnVldm9cblx0XHRcdGlmICh0aGlzLmNhcnRUb2tlbikge1xuXHRcdFx0XHR0aGlzLmdldENhcnQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZ2V0Q2FydEJ5Q3VzdG9tZXIoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNpbmNyb25pemEgZWwgY2Fycml0byBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGxvZ2luXG5cdCAqIEltcGxlbWVudGEgbGEgbMOzZ2ljYSBkZSBBbmd1bGFyIDkgcGFyYSBwcmVzZXJ2YXIgZWwgY2Fycml0byBkZWwgaW52aXRhZG9cblx0ICovXG5cdHByaXZhdGUgc3luY0NhcnRPbkxvZ2luKCkge1xuXHRcdC8vIOKaoO+4jyBGSVg6IFNpIGhheSB0b2tlbiAoY2Fycml0byBleGlzdGVudGUpLCBzaWVtcHJlIGludGVudGFyIHJlY3VwZXJhcmxvXG5cdFx0Ly8gTm8gZGVwZW5kZW1vcyBzb2xvIGRlIGxvcyBpdGVtcyBsb2NhbGVzIHF1ZSBwdWVkZW4gZXN0YXIgdmFjw61vcyBhbCByZWNhcmdhclxuXHRcdGlmICh0aGlzLmNhcnRUb2tlbikge1xuXHRcdFx0Ly8gRW52w61hIGVsIHRva2VuIHBhcmEgcmVjdXBlcmFyL2Z1c2lvbmFyIGNhcnJpdG9zXG5cdFx0XHR0aGlzLmdldENhcnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2luIHRva2VuIGRlIGNhcnJpdG8sIG9idGVuZXIgY2Fycml0byBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkb1xuXHRcdFx0dGhpcy5nZXRDYXJ0QnlDdXN0b21lcigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSBlbCBjYXJyaXRvIGRlc2RlIGVsIGJhY2tlbmQgY29uIGzDs2dpY2EgZGUgc2luY3Jvbml6YWNpw7NuXG5cdCAqIEVudsOtYSBlbCB0b2tlbiBzaSBoYXkgY2Fycml0byBsb2NhbCBwYXJhIGZ1c2lvbmFyIGNhcnJpdG9zXG5cdCAqL1xuXHRwcml2YXRlIGdldENhcnQoKSB7XG5cdFx0Ly8g4pqg77iPIEZJWDogRW52aWFyIHRva2VuIHNpIGV4aXN0ZSwgc2luIGltcG9ydGFyIHNpIGhheSBpdGVtcyBsb2NhbGVzXG5cdFx0Ly8gRXN0byBwZXJtaXRlIHJlY3VwZXJhciBlbCBjYXJyaXRvIGV4aXN0ZW50ZSBhbCByZWNhcmdhciBsYSBww6FnaW5hXG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRoaXMuY2FydFRva2VuID8geyB0b2tlbjogdGhpcy5jYXJ0VG9rZW4gfSA6IHVuZGVmaW5lZDtcblxuXHRcdGZpcnN0VmFsdWVGcm9tKFxuXHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksIHBheWxvYWQpXG5cdFx0KS50aGVuKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0Ly9jb25zb2xlLmxvZygnZ2V0Q2FydCByZXNwb25zZTonLCByZXMpO1xuXHRcdFx0dGhpcy5pbml0aWFsaXplQ2FydChyZXMpO1xuXHRcdH0pLmNhdGNoKGVycm9yID0+IHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgY2FydDonLCBlcnJvcik7XG5cdFx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDb25maWd1cmEgZWwgY2Fycml0byBjb24gbG9zIHBhcmFtZXRyb3MgaW5pY2lhbGVzLlxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0aW5pdGlhbGl6ZUNhcnQocmVzcG9uc2U6IGFueSk6IGFueSB7XG5cdFx0dGhpcy5jYXJ0VG9rZW4gPSByZXNwb25zZS50b2tlblZhbHVlO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVksIHRoaXMuY2FydFRva2VuKTtcblx0XHR0aGlzLl9sb2NhbGUgPSByZXNwb25zZS5sb2NhbGU7XG5cblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcblx0XHR0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvKipcblx0ICogQWN0dWFsaXphIGxvcyBpdGVtcyBkZWwgY2Fycml0by5cblx0ICogQHBhcmFtIGl0ZW1zIFxuXHQgKi9cblx0dXBkYXRlQ2FydEl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuXHRcdHRoaXMuX2l0ZW1zID0gaXRlbXM7XG5cdFx0dGhpcy5fY291bnQgPSBpdGVtcy5sZW5ndGg7XG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdH1cblx0LyoqXG5cdCAqIEFncmVnYSB1biBwcm9kdWN0byBhbCBjYXJyaXRvIGNvbiBsYSBjYW50aWRhZCBkZXNlYWRhLiBcblx0ICogQHBhcmFtIHByb2R1Y3QgUHJvZHVjdG8gYSBhZ3JlZ2FyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBDYW50aWRhZCBcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBJZCBkZSBsYSB2YXJpYW50ZVxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGFkZFRvQ2FydChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50SWQ6IHN0cmluZykge1xuXHRcdGNvbnN0IGJhbGFuY2U6IEJhbGFuY2VDdXN0b21lciB8IG51bGwgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xuXHRcdGNvbnN0IGFwcGx5TWF4T3JkZXJzOiBib29sZWFuID0gYmFsYW5jZT8uYXBwbHlNYXhPcmRlcnMgPz8gZmFsc2U7XG5cdFx0Y29uc3QgbWF4T3JkZXJzOiBudW1iZXIgPSBiYWxhbmNlPy5tYXhPcmRlcnMgPz8gSW5maW5pdHk7XG5cblx0XHRpZiAoYXBwbHlNYXhPcmRlcnMgJiYgKG1heE9yZGVycyA8PSAwIHx8IG1heE9yZGVycyA9PT0gbnVsbCkpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXgtb3JkZXJzLXJlYWNoZWQnKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxuXHRcdFx0cmV0dXJuXG5cdFx0IH1cblx0XHRjb25zdCBpc0V4aXN0aW5nSXRlbSA9IHRoaXMuX2l0ZW1zLnNvbWUoKGl0ZW06IGFueSkgPT4gaXRlbS5wcm9kdWN0LmlkID09PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudElkKTtcblxuXHRcdC8vIFZhbGlkYWNpw7NuIGRlIHNhbGRvIHBhcmEgaXRlbXMgbnVldm9zIChsb3MgZXhpc3RlbnRlcyBzZSB2YWxpZGFuIGVuIHVwZGF0ZUl0ZW1RdWFudGl0eSlcblx0XHRpZiAoIWlzRXhpc3RpbmdJdGVtICYmICF0aGlzLmhhc0NyZWRpdHNGb3JOZXdJdGVtKHByb2R1Y3QsIHF1YW50aXR5LCB2YXJpYW50SWQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblx0XHRsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudElkLCBxdWFudGl0eSk7XG5cblx0XHRpZiAoIWFkZGVkKSB7XG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50SWQgfSkpXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdHJlcyA9PiB7XG5cdFx0XHRcdFx0XHQvLyBNYW5lamFyIGxhIHJlc3B1ZXN0YSBIVFRQIGV4aXRvc2EgKGPDs2RpZ28gMjAwKVxuXHRcdFx0XHRcdFx0dGhpcy5hcHBlbmRUb0NhcnQocmVzKTtcblx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcblx0XHRcdFx0XHRcdGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ8OzZGlnbyBkZSBlcnJvciA1MDAgKHRpbWVvdXQpXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2NhcnQtZXJyb3InKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIE90cm8gY8OzZGlnbyBkZSBlcnJvclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdlcnJvci1zZXJ2ZXInKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBBY3R1YWxpemEgZWwgY2Fycml0byBhZ3JlZ2FuZG8gbG9zIG51ZXZvcyBpdGVtcy5cblx0ICogQHBhcmFtIGNhcnQgXG5cdCAqL1xuXHRhcHBlbmRUb0NhcnQoY2FydDogYW55KSB7XG5cdFx0dGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQpO1xuXHRcdHRoaXMuX2l0ZW1zID0gdGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0Lml0ZW1zKTtcblx0XHR0aGlzLl9jb3VudCA9IHRoaXMuX2l0ZW1zLmxlbmd0aDtcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcblx0fVxuXHQvKipcblx0ICogTWFwZWEgbG9zIGl0ZW1zIGRlbCBjYXJyaXRvIHBhcmEgZGFybGUgdW4gbWVqb3IgZm9ybWF0byBzaW1pbGFyIGEgbGEgaW50ZXJmYXogYENhcnRJdGVtYC5cblx0ICogQHBhcmFtIGl0ZW1zIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHRyYW5zZm9ybUl0ZW1zKGl0ZW1zOiBhbnkpOiBhbnlbXSB7XG5cdFx0cmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRwcm9kdWN0OiBpdGVtLnByb2R1Y3QsXG5cdFx0XHRcdHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxuXHRcdFx0XHRsb3Q6IGl0ZW0ub3JkZXJJdGVtTG90LFxuXHRcdFx0XHRxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcblx0XHRcdFx0aXRlbV9pZDogaXRlbS5pZCxcblx0XHRcdFx0dG90YWw6IGl0ZW0udG90YWxcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogQ2hlcXVlYSBzaSBlbCBwcm9kdWN0byB5YSBleGlzdGUgZW4gZWwgY2Fycml0byBkZSBjb21wcmFzLlxuXHQgKiBAcGFyYW0gcHJvZHVjdCBcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBcblx0ICogQHBhcmFtIHF1YW50aXR5QWRkIENhbnRpZGFkIGEgYWdyZWdhci4gUG9yIGRlZmVjdG8gZXMgMS5cblx0ICovXG5cdGFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdDogUHJvZHVjdCwgdmFyaWFudElkOiBzdHJpbmcsIHF1YW50aXR5QWRkOiBudW1iZXIgPSAxKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoKGl0ZW06IGFueSwgaW5kZXgpID0+IHtcblx0XHRcdGlmIChpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdC5pZCAmJiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudElkKSB7XG5cdFx0XHRcdHRoaXMudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIHRoaXMuZmluZEl0ZW0ocHJvZHVjdC5pZCkucXVhbnRpdHkgKyBxdWFudGl0eUFkZCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pXG5cdH1cblx0LyoqXG5cdCAqIE9idGllbmUgbGEgY2FudGlkYWQgZGUgdW4gcHJvZHVjdG8gZGVsIGl0ZW0gZGVsIGNhcnJpdG8gXG5cdCAqIEBwYXJhbSBjb2RlVmFyaWFudCBjb2RpZ28gZGUgbGEgdmFyaWFudGUuXG5cdCAqIEByZXR1cm5zIGxhIGNhbnRpZGFkIG8gYDBgIGVuIHN1IGRlZmVjdG8uXG5cdCAqL1xuXHRnZXRDb3VudEZyb21JdGVtSW5DYXJ0KGNvZGVWYXJpYW50OiBhbnkpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IGNvZGVWYXJpYW50KT8ucXVhbnRpdHkgfHwgMDtcblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSB1biBvYnNlcnZhYmxlIGNvbiBsYSBjYW50aWRhZCBkZSBpdGVtcyBlbiBlbCBjYXJyaXRvLlxuXHQgKi9cblx0Z2V0Q291bnRDYXJ0SXRlbXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5jYXJ0SXRlbXMkLnBpcGUobWFwKChjYXJ0SXRlbXMpID0+IGNhcnRJdGVtcz8ubGVuZ3RoKSk7XG5cdH1cblx0LyoqXG5cdCAqIE1hcGVhIGxvcyBwcm9kdWN0b3MgZW4gZWwgY2Fycml0byBwYXJhIGNhbWJpYXIgZWwgcHJlY2lvIG9idGVuaWVuZG8gZGUgbGEgdmFyaWFudGUgeSBzZWxlY2Npb25hbmRvIHNpIGVzXG5cdCAqIHByZWNpbyBkZSBvZmVydGEgbyBlbCBwcmVjaW8gbm9ybWFsLlxuXHQgKiBAcGFyYW0gaXRlbXMgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBzd2l0Y2hQcmljZUluQ2FydEl0ZW0gPSAoaXRlbXM6IGFueVtdKSA9PiB7XG5cdFx0cmV0dXJuIGl0ZW1zLm1hcChcblx0XHRcdGl0ZW0gPT4ge1xuXHRcdFx0XHRpZiAoaXRlbS5wcm9kdWN0KSB7XG5cdFx0XHRcdFx0aXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGl0ZW1cblx0XHRcdH1cblx0XHQpXG5cdH1cblx0LyoqXG5cdCAqIEFjdHVhbGl6YSBsYSBjYW50aWRhZCBkZSB1biBwcm9kdWN0byBleGlzdGVudGUgZW4gZWwgY2Fycml0by5cblx0ICogQHBhcmFtIGl0ZW0gZWwgaXRlbSBhIGFjdHVhbGl6YXIuXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBsYSBjYW50aWRhZCBudWV2YS5cblx0ICovXG5cdHVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdC8vIFZhbGlkYXIgYW50ZXMgZGUgcHJvY2VkZXJcblx0XHRpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSAmJiAodGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhpdGVtLCBxdWFudGl0eSkpKSB7XG5cdFx0XHQvLyBTaSBwYXNhIGxhcyB2YWxpZGFjaW9uZXMsIGhhY2VyIGxhIHBldGljacOzbiBIVFRQXG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy51cGRhdGVJdGVtUXVhbnRpdHlBcGkodGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZCkpLCB7ICdxdWFudGl0eSc6IE51bWJlcihxdWFudGl0eSkgfSkpXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdHJlcyA9PiB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKSAmJiB0aGlzLnVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkoaXRlbS52YXJpYW50X2lkLCBOdW1iZXIocXVhbnRpdHkpKSxcblx0XHRcdFx0XHRlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXG5cdFx0XHRcdCk7XG5cblx0XHRcdHJldHVybiB0cnVlOyAvLyBWYWxpZGFjaW9uZXMgcGFzYXJvbiwgb3BlcmFjacOzbiBpbmljaWFkYVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIFZhbGlkYWNpb25lcyBmYWxsYXJvblxuXHRcdH1cblx0fVxuXHQvKipcblx0ICogTWFuZWphIGVsIGVycm9yIGVuIGNhc28gZGUgcXVlIG5vIHNlIHB1ZWRhIGFncmVnYXIgYWwgY2Fycml0byBlbCBwcm9kdWN0by5cblx0ICogQHBhcmFtIGVyciBcblx0ICovXG5cdGhhbmRsZUVycm9yKGVycjogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdH1cblx0LyoqXG5cdCAqIEFjdHVhbGl6YSBsYSBjYW50aWRhZCBkZWwgaXRlbSBkZWwgcHJvZHVjdG8gZGVsIGNhcnJpdG8uXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgSUQgZGUgbGEgdmFyaWFudGUgcGFyYSBidXNjYXIgZWwgaXRlbS5cblx0ICogQHBhcmFtIHF1YW50aXR5IE51ZXZhIGNhbnRpZGFkLiBcblx0ICovXG5cdHVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkodmFyaWFudElkOiBhbnksIHF1YW50aXR5OiBudW1iZXIpOiB2b2lkIHtcblx0XHQvL2NvbnNvbGUubG9nKFwidXBkYXRlQ2FydEl0ZW1RdWFudGl0eVwiLCB0aGlzLl9pdGVtcywgdmFyaWFudElkKVxuXHRcdGxldCBuZXdRdWFudGl0eSA9IHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudElkKS5xdWFudGl0eSA9IHF1YW50aXR5O1xuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xuXHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LXVwZGF0ZWQnLCB7IHF1YW50aXR5OiBuZXdRdWFudGl0eSB9KTtcblx0fVxuXHQvKipcblx0ICogQWN0dWFsaXphIGxvcyBkYXRvcyBkZWwgY2Fycml0byBlbiBlbCBsb2NhbFN0b3JhZ2UuIFxuXHQgKi9cblx0dXBkYXRlTG9jYWxDYXJ0KCkge1xuXHRcdHRoaXMuX3N0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCB0aGlzLl9pdGVtcylcblx0fVxuXHQvKipcblx0ICogQWN0dWFsaXphIGVsIGNhcnJpdG8uIEVtaXRlIGV2ZW50byBkZSBhbmFsaXRpY3MuIFxuXHQgKiBBY3R1YWxpemEgdG9kbyBsbyByZWxhY2lvbmFkbyBhbCBjdXDDs24uXG5cdCAqIEBwYXJhbSBjYXJ0IFJlc3B1ZXN0YSBwcm9kdWNpZGEgcG9yIGVsIGVucG9pbnQgY29uIGluZm9ybWFjacOzbiBkZWwgY2Fycml0by5cblx0ICogQHBhcmFtIGVtaXRFdmVudCBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHR1cGRhdGVDYXJ0T2JqKGNhcnQ6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IGJvb2xlYW4ge1xuXHRcdHRoaXMuX2NhcnRTdWJqZWN0Lm5leHQoY2FydCk7XG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhjYXJ0Py5iYWxhbmNlQ3VzdG9tZXIsIGNhcnQ/LnRvdGFscz8udG90YWwpO1xuXHRcdGVtaXRFdmVudCAmJiB0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcblx0XHQvL3RoaXMuX3Byb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xuXG5cdFx0Y2FydC5jb3Vwb25Db2RlXG5cdFx0XHQ/IHRoaXMuZm9ybWF0Q291cG9uKGNhcnQpXG5cdFx0XHQ6IHRoaXMuX2NvdXBvblN1YmplY3QubmV4dChudWxsKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvKipcblx0ICogQXBsaWNhciB1biBtZWpvciBmb3JtYXRvIGEgbG9zIGRhdG9zIGRlIGxvcyBjdXBvbmVzIGFwbGljYWRvcy5cblx0ICogQHBhcmFtIGNhcnQgXG5cdCAqL1xuXHRmb3JtYXRDb3Vwb24oY2FydDogYW55KSB7XG5cdFx0bGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5fY291cG9uU3ViamVjdC52YWx1ZTtcblx0XHRsZXQgY291cG9uOiBJQ291cG9uID0geyBjb2RlOiBjYXJ0LmNvdXBvbkNvZGUgfTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcblx0XHRcdGNvdXBvbiA9IHtcblx0XHRcdFx0Li4uY291cG9uLFxuXHRcdFx0XHRhbW91bnQ6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0uYW1vdW50LmN1cnJlbnQpIHx8IDAsXG5cdFx0XHRcdG5hbWU6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0ubmFtZSkgfHwgJ25vLW5hbWUnXG5cdFx0XHR9O1xuXHRcdH0gY2F0Y2ggKGUpIHsgfVxuXHRcdChjb3Vwb24gIT0gY3VycmVudF9jb3Vwb24pICYmIHRoaXMuX2NvdXBvblN1YmplY3QubmV4dChjb3Vwb24pO1xuXHRcdC8vY29uc29sZS5sb2coY291cG9uKTtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSBlbCBJRCBkZWwgaXRlbSBkZWwgY2Fycml0by5cblx0ICogQHBhcmFtIHZhcmlhbnRfaWQgSWQgZGUgbGEgdmFyaWFudGUgdXRpbGl6YWRhIHBhcmEgYnVzY2FyIGVsIGl0ZW0uXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0ZmluZEl0ZW1CeUlkVmFyaWFudCh2YXJpYW50X2lkOiBhbnkpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpIS5pdGVtX2lkXG5cdH1cblx0LyoqXG5cdCAqIFZhbGlkYSBsYSBjYW50aWRhZCBwYXJhIHNhYmVyIHNpIHNlIHB1ZWRlIGFjdHVhbGl6YXIgbyBuby5cblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBkZWwgY2Fycml0b1xuXHQgKiBAcGFyYW0gcXVhbnRpdHkgY2FudGlkYWQgYSBhZ3JlZ2FyXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0dmFsaWRhdGVRdWFudGl0eShpdGVtOiBhbnksIHF1YW50aXR5OiBhbnkpIHtcblx0XHRjb25zdCBhY3R1YWxRdWFudGl0eSA9IE51bWJlcih0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkpOyAvLyA8LS0gRm9yemFyIGEgbsO6bWVyb1xuXHRcdGNvbnN0IG5ld1F1YW50aXR5ID0gTnVtYmVyKHF1YW50aXR5KTsgLy8gPC0tIEZvcnphciBhIG7Dum1lcm9cblxuXHRcdGlmICgoYWN0dWFsUXVhbnRpdHkgKyBuZXdRdWFudGl0eSkgPiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cdFx0aWYgKChhY3R1YWxRdWFudGl0eSArIG5ld1F1YW50aXR5KSA8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0XHRpZiAoaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgPiAxKSB7XG5cdFx0XHRpZiAoKGFjdHVhbFF1YW50aXR5ICsgbmV3UXVhbnRpdHkpICUgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgIT09IDApIHtcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ211bHRpcGxlLXF1YW50aXR5LXJlcXVpcmVkJywge1xuXHRcdFx0XHRcdG11bHRpcGxlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSxcblx0XHRcdFx0XHRjdXJyZW50OiBhY3R1YWxRdWFudGl0eSArIG5ld1F1YW50aXR5IC8vIDwtLSBBaG9yYSBzdW1hIGNvcnJlY3RhbWVudGVcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cdC8qKlxuXHQgKiBCdXNjYSB1biBwcm9kdWN0byBhIHRyYXbDqXMgZGUgc3UgSUQgZW4gbG9zIGl0ZW1zIGRlbCBjYXJyaXRvLlxuXHQgKiBAcGFyYW0gcHJvZHVjdF9pZCBcblx0ICogQHJldHVybnNcblx0ICovXG5cdGZpbmRJdGVtKHByb2R1Y3RfaWQ6IGFueSk6IGFueSB7IHJldHVybiB0aGlzLl9pdGVtcy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0X2lkKSB9XG5cdC8qKlxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZGVsIGNhcnJpdG8gZW4gZWwgYmFja2VuZC5cblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBhIGVsaW1pbmFyXG5cdCAqIEBwYXJhbSB0b2FzdCBpbmRpY2Egc2kgc2UgZGlzcGFyYSB1biB0b2FzdCAgbyBuby4gUG9yIGRlZmVjdG8gZW4gYHRydWVgLlxuXHQgKi9cblx0ZGVsZXRlQ2FydEl0ZW0oaXRlbTogYW55LCB0b2FzdDogYm9vbGVhbiA9IHRydWUpIHtcblx0XHRsZXQgaWRJdGVtU2VhcmNoZWQgPSB0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKVxuXHRcdC8vY29uc29sZS5sb2coaWRJdGVtU2VhcmNoZWQpXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24uZGVsZXRlKHRoaXMuZGVsZXRlSXRlbUFwaShpZEl0ZW1TZWFyY2hlZCkpKS50aGVuKFxuXHRcdFx0cmVzID0+IHtcblx0XHRcdFx0dGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTtcblx0XHRcdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XG5cdFx0XHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0KVxuXHR9XG5cdC8qKlxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZW4gY2Fycml0byBkZSBmb3JtYSBsb2NhbC4gXG5cdCAqIEBwYXJhbSBjYXJ0IENhcnJpdG8sIGVzIGRlY2lyLCByZXNwdWVzdGEgZGVsIGJhY2tlbmQuXG5cdCAqIEBwYXJhbSBwcm9kdWN0IHByb2R1Y3RvIGEgZWxpbWluYXJcblx0ICogQHBhcmFtIHRvYXN0IHtib29sZWFufSBwYXJhIGluZGljYXIgc2kgc2UgZGlzcGFyYSB1biB0b2FzdCBvIG5vLiBcblx0ICovXG5cdHJlbW92ZUNhcnRJdGVtKGNhcnQ6IGFueSwgcHJvZHVjdDogYW55LCB0b2FzdDogYm9vbGVhbikge1xuXHRcdHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0LCBmYWxzZSk7XG5cdFx0dGhpcy5faXRlbXMuc3BsaWNlKHRoaXMuX2l0ZW1zLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pdGVtX2lkID09PSBwcm9kdWN0Lml0ZW1faWQpLCAxKTtcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xuXHRcdHRvYXN0ICYmIHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdFx0dG9hc3QgJiYgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZCcpO1xuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XG5cdFx0dGhpcy5fYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3JlbW92ZV9mcm9tX2NhcnQnLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLl9jb25zdHMuY3VycmVuY3kuY29kZSB9KVxuXHR9XG5cdC8qKlxuXHQgKiBBZ3JlZ2EgdW4gY3Vwb24gYWwgY2Fycml0by5cblx0ICogQHBhcmFtIHZhbHVlIENvZGlnbyBkZWwgY3Vww7NuLlxuXHQgKi9cblx0YWRkQ291cG9uKHZhbHVlOiBzdHJpbmcpIHtcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogdmFsdWUgfSkpLnRoZW4oXG5cdFx0XHRyZXMgPT4ge1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlcylcblx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlcylcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0N1cG9uIGFwbGljYWRvJylcblx0XHRcdH0sXG5cdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHQvL2NvbnNvbGUuZXJyb3IoZXJyKSBcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2ludmFsaWQtY291cG9uJylcblx0XHRcdH1cblx0XHQpXG5cdH1cblx0LyoqXG5cdCAqIEVsaW1pbmEgdW4gY3Vww7NuIGRlbCBjYXJyaXRvLiBcblx0ICovXG5cdHJlbW92ZUNvdXBvbigpIHtcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmNvdXBvbkFwaSgpKSkudGhlbihcblx0XHRcdHJlcyA9PiB7XG5cdFx0XHRcdC8vY29uc29sZS5sb2cocmVzKVxuXHRcdFx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKVxuXHRcdFx0fVxuXHRcdClcblx0fVxuXG5cdGdldENvdXBvbkNvZGUoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LmNvdXBvbkNvZGUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHN1YnRvdGFsIGRlbCBjYXJyaXRvLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldFN1YlRvdGFsQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8uc3VidG90YWwpKTtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCB0b3RhbCBkZWwgbW9udG8gZGUgbGFzIHByb21vY2lvbmVzIGFwbGljYWRhcy5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRnZXRUb3RhbFByb21vdGlvbkFtb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnByb21vdGlvbikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldG9ybmEgdW4gb2JzZXJ2YWJsZSBjb24gZWwgbW9udG8gZGUgbG9zIGltcHVlc3RvcyBhcGxpY2Fkb3MuXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Z2V0VGF4ZXNBbW91bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LnRheGVzIDogMCkpO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIG1vbnRvIHRvdGFsIGRlbCBjYXJyaXRvLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldFRvdGFsQW1vdW50KCkge1xuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XG5cdH1cblx0LyoqXG5cdCAqIFJldG9ybmEgZWwgdG9rZW4gZGVsIGNhcnJpdG8uXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Z2V0Q2FydFRva2VuKCkge1xuXHRcdHJldHVybiB0aGlzLmNhcnRUb2tlbjtcblx0fVxuXHRjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWU6IGFueSkgPT4gdGhpcy5faGF2ZVRvVXBkYXRlID0gdmFsdWU7XG5cdGNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKSB7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJDbGVhcmluZyBhbmQgcmVzZXRpbmcuLi5cIilcblx0XHR0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XG5cdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCkpLnN1YnNjcmliZShcblx0XHRcdHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcblx0XHQpXG5cdHByaXZhdGUgcmVzZXRDYXJ0ID0gKGZuPzogYW55KSA9PiB7XG5cdFx0dGhpcy5faXRlbXMgPSBbXTtcblx0XHR0aGlzLl9jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xuXHRcdHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMobnVsbCk7XG5cdFx0dGhpcy5jYXJ0VG9rZW4gPSBudWxsO1xuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XG5cdFx0dGhpcy5fY291bnQgPSAwO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9LRVksIFwiW11cIik7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSk7XG5cdFx0dGhpcy5fY2FydEluaXRpYWxpemVkID0gZmFsc2U7IC8vIOKaoO+4jyBGSVg6IFJlc2V0IGRlbCBmbGFnIGRlIGluaWNpYWxpemFjacOzblxuXHRcdGZuICYmIGZuKCk7XG5cdH1cblx0Y2xlYXJBbmRSZXNldENhcnQoKSB7XG5cdFx0dGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0QnlDdXN0b21lcik7IC8vIOKaoO+4jyBGSVg6IENyZWFyIG51ZXZvIGNhcnJpdG8gZGVzcHXDqXMgZGUgY29tcGxldGFyIGNvbXByYVxuXHR9XG5cblx0cHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGJhbGFuY2U6IGFueSwgdG90YWw6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XG5cblx0XHRpZiAoIWJhbGFuY2UpIHtcblx0XHRcdHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB0b3RhbEFtb3VudCA9IHRvdGFsID8/IDA7XG5cblx0XHRjb25zdCBiYWxhbmNlRGF0YSA9IHtcblx0XHRcdGFsbG93QW55UGF5bWVudE1ldGhvZDogYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QsXG5cdFx0XHRhbGxvd0V4Y2VlZEJhbGFuY2U6IGJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlLFxuXHRcdFx0Y3JlZGl0QW1vdW50OiBiYWxhbmNlLmNyZWRpdEFtb3VudCxcblx0XHRcdHNob3dNYXg6IGJhbGFuY2Uuc2hvd01heCxcblx0XHRcdHNob3dQcmljZTogYmFsYW5jZS5zaG93UHJpY2UsXG5cdFx0XHRyZW1haW5pbmdDcmVkaXRzOlxuXHRcdFx0XHRiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcblx0XHRcdFx0XHQ/IGJhbGFuY2UuY3JlZGl0QW1vdW50IC0gdG90YWxBbW91bnRcblx0XHRcdFx0XHQ6IDAsXG5cdFx0XHRhcHBseU1heE9yZGVyczogYmFsYW5jZS5hcHBseU1heE9yZGVycyxcblx0XHRcdG1heE9yZGVyczogYmFsYW5jZS5tYXhPcmRlcnNcblx0XHR9O1xuXG5cdFx0dGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KGJhbGFuY2VEYXRhKTtcblx0fVxuXHRhZGRUb0xvdChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkOiBhbnksIGlkPzogbnVtYmVyLCBvcmRlcl9pdGVtX2lkPzogYW55LCBsb3RfcXVhbnRpdHk/OiBhbnksIHVuaXRfcHJpY2U/OiBhbnksIHVuaXRfdG90YWw/OiBhbnksIGFqdXN0ZW1lbnRfdG90YWw/OiBhbnksIHRvdGFsX2xvdD86IG51bWJlciwgbG90X3N0YXR1cz86IHN0cmluZywgZGF0ZV9yZXF1ZXN0Pzogc3RyaW5nLCBub3Rlcz86IHN0cmluZywgc2hpcHBpbmdfYWRkcmVzc19pZD86IG51bWJlciwgc2hpcHBpbmdfYWRkcmVzc19uYW1lPzogc3RyaW5nLCBhY3Rpb24/OiBzdHJpbmcpIHtcblx0XHRpZiAoIXRoaXMuX2F1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRsZXQgYWRkZWQgPSAnJztcblx0XHQhYWRkZWQgJiYgdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXG5cdFx0XHQuc3Vic2NyaWJlKHtcblx0XHRcdFx0bmV4dDogKHJlcykgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcblx0XHRcdFx0ZXJyb3I6IChlcnIpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxuXHRcdFx0fSk7XG5cdH1cblxuXG5cdGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XG5cdFx0dGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKFxuXHRcdFx0bWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8uY3JlZGl0QW1vdW50ID8/IG51bGwpXG5cdFx0KTtcblxuXG5cdGdldFJlbWFpbmluZ0NyZWRpdHMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCB1bmRlZmluZWQ+ID0+XG5cdFx0dGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LnJlbWFpbmluZ0NyZWRpdHMpKTtcblxuXG5cdHB1YmxpYyBoYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCA9ICgpOiBib29sZWFuID0+IHtcblx0XHRjb25zdCBiYWxhbmNlID0gdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcblxuXHRcdGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRvdGFsID0gdGhpcy5fY2FydFN1YmplY3QudmFsdWU/LnRvdGFscz8udG90YWwgPz8gMDtcblxuXHRcdGlmICghYmFsYW5jZS5hbGxvd0V4Y2VlZEJhbGFuY2UgJiYgdG90YWwgPiBiYWxhbmNlLmNyZWRpdEFtb3VudCkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdHByaXZhdGUgdmFsaWRhdGVQcmljZUFuZENyZWRpdHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpOiBib29sZWFuID0+IHtcblx0XHRjb25zdCBiYWxhbmNlID0gdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcblxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cblx0XHRpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCB1bml0UHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eTtcblx0XHRjb25zdCBhZGRpdGlvbmFsUXVhbnRpdHkgPSBxdWFudGl0eSAtIGl0ZW0ucXVhbnRpdHk7XG5cblx0XHRpZiAoYWRkaXRpb25hbFF1YW50aXR5IDw9IDApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFkZGl0aW9uYWxDb3N0ID0gdW5pdFByaWNlICogYWRkaXRpb25hbFF1YW50aXR5O1xuXG4gICAgICAgIGlmIChhZGRpdGlvbmFsQ29zdCA+IGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cykge1xuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuXHRwcml2YXRlIGhhc0NyZWRpdHNGb3JOZXdJdGVtID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRJZDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cdFx0Y29uc3QgYmFsYW5jZSA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XG5cblx0XHRpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCB2YXJpYW50ID0gcHJvZHVjdD8udmFyaWFudHM/LmZpbmQodiA9PiB2LmNvZGUgPT09IHZhcmlhbnRJZCkgPz8gcHJvZHVjdD8udmFyaWFudHM/LlswXTtcblx0XHRjb25zdCB1bml0UHJpY2UgPSB2YXJpYW50Py5zYWxlcHJpY2UgPz8gdmFyaWFudD8ucHJpY2UgPz8gcHJvZHVjdD8ucHJpY2UgPz8gMDtcblx0XHRjb25zdCB0b3RhbENvc3QgPSB1bml0UHJpY2UgKiBxdWFudGl0eTtcblxuXHRcdGlmICghYmFsYW5jZS5hbGxvd0V4Y2VlZEJhbGFuY2UgJiYgdG90YWxDb3N0ID4gYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm90LWVub3VnaC1jcmVkaXRzJyk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cblx0YWRkUmVwZWF0T3JkZXJUb0NhcnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2NhcnRJdGVtc1N1YmplY3QudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2NhcnQtbm90LWVtcHR5Jyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Y29uc3QgaXRlbXNUb0FkZCA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XG5cdFx0XHRwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxuXHRcdFx0cXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXG5cdFx0XHR2YXJpYW50Q29kZTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGVcblx0XHR9KSk7XG5cblx0XHRpZiAoaXRlbXNUb0FkZC5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCduby1wcm9kdWN0cy10by1hZGQnKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRpdGVtczogaXRlbXNUb0FkZFxuXHRcdH07XG5cblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XG5cblx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRBbGxJdGVtc0FwaSgpLCBwYXJhbXMpXG5cdFx0XHQudG9Qcm9taXNlKClcblx0XHRcdC50aGVuKHJlcyA9PiB7XG5cblx0XHRcdFx0aWYgKHJlcz8uc3RhdHVzID09PSAnZmFpbHVyZScpIHtcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSByZXMuZXJyb3I/LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpIHx8ICd1bmtub3duX2Vycm9yJztcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGl0ZW1zUmVzcG9uc2UgPSByZXM/Lml0ZW1zX3Jlc3BvbnNlIHx8IFtdO1xuXHRcdFx0XHRjb25zdCBjYXJ0SXRlbXMgPSByZXM/LmNhcnQ/Lml0ZW1zIHx8IFtdO1xuXG5cdFx0XHRcdGNvbnN0IG91dE9mU3RvY2tJdGVtcyA9IGl0ZW1zUmVzcG9uc2UuZmlsdGVyKChpdGVtOiBhbnkpID0+XG5cdFx0XHRcdFx0aXRlbS5zdGF0dXMgPT09ICdmYWlsdXJlJyAmJlxuXHRcdFx0XHRcdGl0ZW0uZXJyb3JzLnNvbWUoKGVycm9yOiBhbnkpID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmIChjYXJ0SXRlbXMubGVuZ3RoID09PSAwICYmIG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2FsbC1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob3V0T2ZTdG9ja0l0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnc29tZS1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjYXJ0SXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlQ2FydE9iaihyZXMuY2FydCk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0SXRlbXMpKTtcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcblx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdFx0ZXJyID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XG5cdFx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZXJyID0+IHtcblx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuXHRcdFx0fSk7XG5cdH1cblxufVxuIl19
|
|
@@ -26,4 +26,5 @@ export * from './test.service';
|
|
|
26
26
|
export * from './orders.service';
|
|
27
27
|
export * from './runtime-config.service';
|
|
28
28
|
export * from './base-api.service';
|
|
29
|
-
|
|
29
|
+
export * from './price-visibility.service';
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vb3B0aW9ucy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGFyYW1ldGVycy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYmxvY2tzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ibG9ja3MtcmVwb3NpdG9yeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYW5hbHl0aWNzJztcbmV4cG9ydCAqIGZyb20gJy4vY3VycmVuY3kuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NoYW5uZWwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yZS1jYXB0Y2hhLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9kdWN0cy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsdGVycy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NhcnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL25neC1sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGVja291dC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYWRkcmVzc2luZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aC5zdG9yYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zaGlwbWVudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vb3JkZXItdXRpbGl0eS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGF5bWVudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vb3JkZXJzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ydW50aW1lLWNvbmZpZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZS1hcGkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3ByaWNlLXZpc2liaWxpdHkuc2VydmljZSc7XG4iXX0=
|