ng-easycommerce 0.1.1 → 1.1.2
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 +4 -0
- package/assets/ec-i18n/ct.json +2 -0
- package/assets/ec-i18n/en.json +2 -0
- package/assets/ec-i18n/es.json +2 -0
- package/assets/ec-i18n/fr.json +2 -0
- package/assets/ec-i18n/gl.json +2 -0
- package/assets/ec-i18n/pr.json +2 -0
- package/bundles/ng-easycommerce.umd.js +84 -20
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +6 -2
- package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +24 -9
- package/esm2015/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm2015/lib/interfaces/checkout-data.js +1 -1
- package/esm2015/lib/services/cart.service.js +9 -1
- package/esm2015/lib/services/checkout/checkout.service.js +3 -1
- package/esm2015/lib/utils/order-util.service.js +22 -2
- package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +6 -2
- package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +29 -14
- package/esm5/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm5/lib/interfaces/checkout-data.js +1 -1
- package/esm5/lib/services/cart.service.js +13 -1
- package/esm5/lib/services/checkout/checkout.service.js +3 -2
- package/esm5/lib/utils/order-util.service.js +22 -2
- package/fesm2015/ng-easycommerce.js +75 -14
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +84 -20
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +1 -1
- package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +1 -1
- package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +3 -0
- package/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.d.ts +3 -0
- package/lib/interfaces/checkout-data.d.ts +6 -1
- package/lib/services/cart.service.d.ts +3 -0
- package/lib/utils/order-util.service.d.ts +1 -0
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -267,11 +267,11 @@ var OrderEcComponent = /** @class */ (function (_super) {
|
|
|
267
267
|
OrderEcComponent = __decorate([
|
|
268
268
|
Component({
|
|
269
269
|
selector: 'app-order-ec',
|
|
270
|
-
template: "<main class=\"py-5\" id=\"orderEcComponent\">\n <div class=\"container\">\n <div class=\"wrap\" *ngIf=\"!loading; else loadingView\">\n <div *ngIf=\"order; else noOrder\">\n\n <div class=\"row justify-content-between \">\n <div class=\"col-sm-auto col-12 font-brandon\">\n <h4 class=\"tit1 fw-bold\">{{ ('order' | translate) + ': ' + order.number }}</h4>\n </div>\n <ng-container *ngIf=\"order?.invoice\">\n <div class=\"col-sm col-12 font-brandon\" *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <a target=\"_blank\" [href]=\"consts.getUrlBase().slice(0, -1) + order.invoice\"\n class=\"btn btn-link btn-invoice\">\n <i class=\"fas fa-file-download me-1\"></i>\n {{ 'download' | translate }} {{ 'invoices' | translate | titlecase }}\n </a>\n </div>\n </ng-container>\n <a (click)=\"volver()\" class=\"col-auto text-end\">\n <button class=\"btn btvolver bg-gray text-white\">{{ 'back-to-orders' | translate }}</button>\n </a>\n </div>\n\n <section id=\"orders\">\n <div class=\"row pt-2\">\n <div class=\"col-md-2 col-12\">\n <p class=\"st\">{{ 'payment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'payment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0]?.method?.name | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].method.name }}\n </p>\n <!-- ACA DEBERIA IR EL LINK DE SEGUIMIENTO -->\n <a *ngIf=\"order.tracking\" [href]=\"order.tracking\"\n class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver\n seguimiento</a>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'date' | translate }}:</p>\n <p class=\"\">\n {{ toDate(order.checkoutCompletedAt, 'DD/MM/YYYY') | translate }}<br>\n {{ toDate(order.checkoutCompletedAt, 'h:mm:ss a') | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"st\">{{ 'total' | translate }}:</p>\n <h5 class=\"fw-bold\">\n {{ (order.totals.total) | ecCurrencySymbol:'alwaysShowDecimals'}}\n\n </h5>\n </div>\n </div>\n </section>\n\n <div class=\"text-end mt-3\" *ngIf=\"!hidePrices && allowRepeatOrders\">\n <button class=\"btn btn-primary mb-2\" (click)=\"repeatOrder()\">\n {{ 'repeat-order' | translate }}\n </button>\n </div>\n\n <div class=\"container py-3 border-top border-bottom\">\n <div *ngIf=\"order.items.length; else noProducts\" class=\"row\">\n <div class=\"col-2 font-sm font-brandon d-none d-md-block\">\n {{ 'product' | translate | uppercase }}\n </div>\n <div class=\"col-3 font-sm font-brandon d-none d-md-block\">\n {{ 'description' | translate | uppercase }}\n </div>\n <div id=\"colLots\" *ngIf=\"ordersService.channelConfig.applyOrderLot\"\n class=\"col-1 font-sm font-brandon d-none d-md-block\">\n <!-- {{ 'description' | translate | uppercase }} -->\n {{ 'lots' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'unit-price' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-center font-sm font-brandon d-none d-md-block\">\n {{ 'quantity' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'discount' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'subtotal' | translate | uppercase }}\n </div>\n </div>\n <ng-container *ngFor=\"let item of order.items; let i = index\">\n <div class=\"row cart-items\">\n <div class=\"col-5 col-md-2 py-2\">\n <ng-container *ngIf=\"item.product.variants[0]?.images?.length ; else defaultpicture\">\n <img class=\"smc maxwidth img-fluid rounded-custom \"\n [src]=\"consts.mediaUrl() + item.product.variants[0].images[0]\" alt=\"\">\n </ng-container>\n <ng-template #defaultpicture>\n <img *ngIf=\"item.product.picturesdefault\"\n class=\"smc maxwidth img-fluid rounded-custom\"\n [src]=\"consts.mediaUrl() + item.product.picturesdefault[0]\" alt=\"\">\n </ng-template>\n </div> \n <div\n class=\"col-md-3 col-7 d-flex flex-column justify-content-center\">\n <p class=\"font-brandon d-flex w-100 mb-0\">\n {{ item.product.name }} (Cod:{{ item.product.variants[0].code }})\n </p>\n <p *ngIf=\"enableFieldNotesInArticleFile && item.comments\" class=\"comment-truncated fst-italic small text-muted mt-1\">\n \"{{ item.comments }}\"\n </p>\n </div>\n <div class=\"col-md-1 col-1 flex-column flex-md-row justify-content-start d-flex align-items-center\"\n *ngIf=\"ordersService.channelConfig.applyOrderLot\">\n <input type=\"button\" class=\"btn btn-primary btnSeguir m-0 text-center\" type=\"button\"\n [attr.data-bs-toggle]=\"'collapse'\" [attr.data-bs-target]=\"'#collapseExample'+i\"\n aria-expanded=\"false\" [attr.aria-controls]=\"'collapseExample'+i\"\n value=\"{{ 'see' | translate | uppercase }}\">\n </div>\n <div class=\"container d-md-none\">\n <div class=\"row\">\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'unit-price' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'unit'); else noMobileUnit\">\n {{ getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileUnit>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'quantity' | translate }}</small>\n <p class=\"text-center w-100 m-0\">{{ item.quantity }}</p>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'discount' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"getOrderLineValue(item, 'discount') !== 0; else noMobileDiscount\">\n {{ getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileDiscount>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'subtotal' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'subtotal'); else noMobileSubtotal\">\n {{ getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileSubtotal>-</ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'unit') ? (getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\">\n <p class=\"text-center w-100 m-0\"> {{ item.quantity }}</p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\" [class.text-muted]=\"getOrderLineValue(item, 'discount') === 0\">\n {{ getOrderLineValue(item, 'discount') !== 0 ? (getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'subtotal') ? (getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"collapse\" [attr.id]=\"'collapseExample'+i\">\n <div class=\"card card-body\">\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Estado</th>\n <th scope=\"col\">Cantidad</th>\n <th scope=\"col\">Fecha Solicitada</th>\n <th scope=\"col\">Fecha Estimada</th>\n <th scope=\"col\">Sede</th>\n <th scope=\"col\">Nota</th>\n <th scope=\"col\">Total Lote</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let lot of item.orderItemLot\">\n <tr>\n <th scope=\"row\">{{lot.id}}</th>\n <td>{{lot.lot_status}}</td>\n <td>{{lot.quantity}}</td>\n <td>{{ toDate(lot.date_request, 'DD/MM/YYYY') | translate }}</td>\n <td *ngIf=\"lot.date_deliver; else sinFechaEstimada\">{{\n toDate(lot.date_deliver, 'DD/MM/YYYY') | translate }}</td>\n <ng-template #sinFechaEstimada>\n <td>Pendiente</td>\n </ng-template>\n <td>{{lot.shipping_address_name}}</td>\n <td>{{lot.notes}}</td>\n <td>{{lot.total_lot | ecCurrencySymbol:'alwaysShowDecimals'}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n </ng-container>\n </div>\n\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\"></div>\n <div class=\"col-12 col-md-6\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <div class=\"order-summary py-4\">\n <div class=\"order-summary-row\">\n <span>{{ 'subtotal' | translate }}</span>\n <strong>\n {{ getHistoricalProductsSubtotal() !== null\n ? (getHistoricalProductsSubtotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalOrderDiscount() !== null && getHistoricalOrderDiscount() !== 0\">\n <span>{{ 'discount' | translate }}</span>\n <strong>{{ getHistoricalOrderDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalCouponDiscount() !== null && getHistoricalCouponDiscount() !== 0\">\n <span>{{ 'coupon' | translate }}</span>\n <strong>{{ getHistoricalCouponDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--tax\"\n *ngIf=\"!showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row\"\n *ngIf=\"getHistoricalShipping() !== null\">\n <span>{{ 'shipment' | translate }}</span>\n <strong>{{ getHistoricalShipping() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--total\">\n <span>{{ 'total' | translate | uppercase }}</span>\n <strong>\n {{ getHistoricalTotal() !== null\n ? (getHistoricalTotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-tax-info\"\n *ngIf=\"showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes-included-in-total' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n</main>\n\n<ng-template #noOrder>\n <div class=\"w-100 h-50\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <h5>{{ 'no-orders' | translate }}</h5>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingView>\n <div class=\"w-100 h-50 py-5\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n</ng-template>\n",
|
|
270
|
+
template: "<main class=\"py-5\" id=\"orderEcComponent\">\n <div class=\"container\">\n <div class=\"wrap\" *ngIf=\"!loading; else loadingView\">\n <div *ngIf=\"order; else noOrder\">\n\n <div class=\"row justify-content-between \">\n <div class=\"col-sm-auto col-12 font-brandon\">\n <h4 class=\"tit1 fw-bold\">{{ ('order' | translate) + ': ' + order.number }}</h4>\n </div>\n <ng-container *ngIf=\"order?.invoice\">\n <div class=\"col-sm col-12 font-brandon\" *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <a target=\"_blank\" [href]=\"consts.getUrlBase().slice(0, -1) + order.invoice\"\n class=\"btn btn-link btn-invoice\">\n <i class=\"fas fa-file-download me-1\"></i>\n {{ 'download' | translate }} {{ 'invoices' | translate | titlecase }}\n </a>\n </div>\n </ng-container>\n <a (click)=\"volver()\" class=\"col-auto text-end\">\n <button class=\"btn btvolver bg-gray text-white\">{{ 'back-to-orders' | translate }}</button>\n </a>\n </div>\n\n <section id=\"orders\">\n <div class=\"row pt-2\">\n <div class=\"col-md-2 col-12\">\n <p class=\"st\">{{ 'payment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'payment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0]?.method?.name | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].method.name }}\n </p>\n <!-- ACA DEBERIA IR EL LINK DE SEGUIMIENTO -->\n <a *ngIf=\"order.tracking\" [href]=\"order.tracking\"\n class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver\n seguimiento</a>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'date' | translate }}:</p>\n <p class=\"\">\n {{ toDate(order.checkoutCompletedAt, 'DD/MM/YYYY') | translate }}<br>\n {{ toDate(order.checkoutCompletedAt, 'h:mm:ss a') | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"st\">{{ 'total' | translate }}:</p>\n <h5 class=\"fw-bold\">\n {{ (order.totals.total) | ecCurrencySymbol:'alwaysShowDecimals'}}\n\n </h5>\n </div>\n </div>\n </section>\n\n <div class=\"text-end mt-3\" *ngIf=\"!hidePrices && allowRepeatOrders\">\n <button class=\"btn btn-primary mb-2\" (click)=\"repeatOrder()\">\n {{ 'repeat-order' | translate }}\n </button>\n </div>\n\n <div class=\"container py-3 border-top border-bottom\">\n <div *ngIf=\"order.items.length; else noProducts\" class=\"row\">\n <div class=\"col-2 font-sm font-brandon d-none d-md-block\">\n {{ 'product' | translate | uppercase }}\n </div>\n <div class=\"col-3 font-sm font-brandon d-none d-md-block\">\n {{ 'description' | translate | uppercase }}\n </div>\n <div id=\"colLots\" *ngIf=\"ordersService.channelConfig.applyOrderLot\"\n class=\"col-1 font-sm font-brandon d-none d-md-block\">\n <!-- {{ 'description' | translate | uppercase }} -->\n {{ 'lots' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'unit-price' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-center font-sm font-brandon d-none d-md-block\">\n {{ 'quantity' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'discount' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'subtotal' | translate | uppercase }}\n </div>\n </div>\n <ng-container *ngFor=\"let item of order.items; let i = index\">\n <div class=\"row cart-items\">\n <div class=\"col-5 col-md-2 py-2\">\n <ng-container *ngIf=\"item.product.variants[0]?.images?.length ; else defaultpicture\">\n <img class=\"smc maxwidth img-fluid rounded-custom \"\n [src]=\"consts.mediaUrl() + item.product.variants[0].images[0]\" alt=\"\">\n </ng-container>\n <ng-template #defaultpicture>\n <img *ngIf=\"item.product.picturesdefault\"\n class=\"smc maxwidth img-fluid rounded-custom\"\n [src]=\"consts.mediaUrl() + item.product.picturesdefault[0]\" alt=\"\">\n </ng-template>\n </div> \n <div\n class=\"col-md-3 col-7 d-flex flex-column justify-content-center\">\n <p class=\"font-brandon d-flex w-100 mb-0\">\n {{ item.product.name }} (Cod:{{ item.product.variants[0].code }})\n </p>\n <p *ngIf=\"enableFieldNotesInArticleFile && item.comments\" class=\"comment-truncated fst-italic small text-muted mt-1\">\n \"{{ item.comments }}\"\n </p>\n </div>\n <div class=\"col-md-1 col-1 flex-column flex-md-row justify-content-start d-flex align-items-center\"\n *ngIf=\"ordersService.channelConfig.applyOrderLot\">\n <input type=\"button\" class=\"btn btn-primary btnSeguir m-0 text-center\" type=\"button\"\n [attr.data-bs-toggle]=\"'collapse'\" [attr.data-bs-target]=\"'#collapseExample'+i\"\n aria-expanded=\"false\" [attr.aria-controls]=\"'collapseExample'+i\"\n value=\"{{ 'see' | translate | uppercase }}\">\n </div>\n <div class=\"container d-md-none\">\n <div class=\"row\">\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'unit-price' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'unit'); else noMobileUnit\">\n {{ getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileUnit>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'quantity' | translate }}</small>\n <p class=\"text-center w-100 m-0\">{{ item.quantity }}</p>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'discount' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"getOrderLineValue(item, 'discount') !== 0; else noMobileDiscount\">\n {{ getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileDiscount>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'subtotal' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'subtotal'); else noMobileSubtotal\">\n {{ getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileSubtotal>-</ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'unit') ? (getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\">\n <p class=\"text-center w-100 m-0\"> {{ item.quantity }}</p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\" [class.text-muted]=\"getOrderLineValue(item, 'discount') === 0\">\n {{ getOrderLineValue(item, 'discount') !== 0 ? (getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'subtotal') ? (getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"collapse\" [attr.id]=\"'collapseExample'+i\">\n <div class=\"card card-body\">\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Estado</th>\n <th scope=\"col\">Cantidad</th>\n <th scope=\"col\">Fecha Solicitada</th>\n <th scope=\"col\">Fecha Estimada</th>\n <th scope=\"col\">Sede</th>\n <th scope=\"col\">Nota</th>\n <th scope=\"col\">Total Lote</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let lot of item.orderItemLot\">\n <tr>\n <th scope=\"row\">{{lot.id}}</th>\n <td>{{lot.lot_status}}</td>\n <td>{{lot.quantity}}</td>\n <td>{{ toDate(lot.date_request, 'DD/MM/YYYY') | translate }}</td>\n <td *ngIf=\"lot.date_deliver; else sinFechaEstimada\">{{\n toDate(lot.date_deliver, 'DD/MM/YYYY') | translate }}</td>\n <ng-template #sinFechaEstimada>\n <td>Pendiente</td>\n </ng-template>\n <td>{{lot.shipping_address_name}}</td>\n <td>{{lot.notes}}</td>\n <td>{{lot.total_lot | ecCurrencySymbol:'alwaysShowDecimals'}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n </ng-container>\n </div>\n\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\"></div>\n <div class=\"col-12 col-md-6\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <div class=\"order-summary py-4\">\n <div class=\"order-summary-row\">\n <span>{{ 'subtotal' | translate }}</span>\n <strong>\n {{ getHistoricalProductsSubtotal() !== null\n ? (getHistoricalProductsSubtotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalOrderDiscount() !== null && getHistoricalOrderDiscount() !== 0\">\n <span>{{ 'discount' | translate }}</span>\n <strong>{{ getHistoricalOrderDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalCouponDiscount() !== null && getHistoricalCouponDiscount() !== 0\">\n <span>{{ 'coupon' | translate }}</span>\n <strong>{{ getHistoricalCouponDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"order?.totals?.paymentMethodAdjustment !== null && order?.totals?.paymentMethodAdjustment !== undefined && order?.totals?.paymentMethodAdjustment !== 0\">\n <span>\n {{ (order.totals.paymentMethodAdjustment < 0 ? 'payment-method-discount' : 'payment-method-surcharge') | translate }}\n <ng-container *ngIf=\"order.totals.paymentMethodAdjustmentLabel\">\n \u00B7 {{ order.totals.paymentMethodAdjustmentLabel }}\n </ng-container>\n </span>\n <strong>{{ order.totals.paymentMethodAdjustment | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--tax\"\n *ngIf=\"!showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row\"\n *ngIf=\"getHistoricalShipping() !== null\">\n <span>{{ 'shipment' | translate }}</span>\n <strong>{{ getHistoricalShipping() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--total\">\n <span>{{ 'total' | translate | uppercase }}</span>\n <strong>\n {{ getHistoricalTotal() !== null\n ? (getHistoricalTotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-tax-info\"\n *ngIf=\"showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes-included-in-total' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n</main>\n\n<ng-template #noOrder>\n <div class=\"w-100 h-50\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <h5>{{ 'no-orders' | translate }}</h5>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingView>\n <div class=\"w-100 h-50 py-5\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n</ng-template>\n",
|
|
271
271
|
styles: [".maxwidth{max-width:100px}.comment-truncated{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;white-space:normal;max-height:3em}.order-line-label{display:block;color:#6b7280;font-size:.72rem;line-height:1.2;text-transform:uppercase}.order-summary{display:flex;flex-direction:column;gap:.65rem;color:#4b5563}.order-summary-row{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;min-width:0;font-size:.95rem}.order-summary-row span{min-width:0}.order-summary-row strong{flex:0 0 auto;white-space:nowrap;color:#111827;font-weight:600;text-align:right}.order-summary-row--discount strong{color:#15803d}.order-summary-row--tax{color:#4b5563}.order-summary-row--total{margin-top:.35rem;padding-top:.8rem;border-top:1px solid #d1d5db;color:#111827;font-size:1.15rem;font-weight:700}.order-summary-row--total strong{font-size:1.2rem;font-weight:700}.order-summary-tax-info{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-top:-.15rem;color:#6b7280;font-size:.82rem;font-weight:400}.order-summary-tax-info strong{flex:0 0 auto;white-space:nowrap;font-weight:400}@media (max-width:767.98px){.order-summary{padding-top:1rem;padding-bottom:1rem}.order-summary-row,.order-summary-tax-info{gap:.75rem}.order-summary-row--total{font-size:1.05rem}.order-summary-row--total strong{font-size:1.1rem}}"]
|
|
272
272
|
})
|
|
273
273
|
], OrderEcComponent);
|
|
274
274
|
return OrderEcComponent;
|
|
275
275
|
}(ComponentHelper));
|
|
276
276
|
export { OrderEcComponent };
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9hY2NvdW50LWVjL29yZGVyLWVjL29yZGVyLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQU9oRjtJQUFzQyxvQ0FBZTtJQWlCakQsMEJBQ1csYUFBNEIsRUFDekIsWUFBNEIsRUFDL0IsTUFBYyxFQUNkLE1BQWlCLEVBQ2hCLFdBQXdCLEVBQ3hCLG9CQUEwQztRQU50RCxZQVFJLGlCQUFPLFNBRVY7UUFUVSxtQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUN6QixrQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDL0IsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFlBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQW9CLEdBQXBCLG9C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U0FBUztZQUM1QyxLQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ25CLENBQUM7SUE2SEQsc0NBQVcsR0FBWDtRQUNJLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNEO0lBQ0wsQ0FBQzs7Z0JBbkx5QixhQUFhO2dCQUNYLGNBQWM7Z0JBQ3ZCLE1BQU07Z0JBQ04sU0FBUztnQkFDSCxXQUFXO2dCQUNGLG9CQUFvQjs7SUFmN0M7UUFBUixLQUFLLEVBQUU7eURBQW1CO0lBUmxCLGdCQUFnQjtRQUw1QixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsY0FBYztZQUN4Qiw2dG5CQUFzQzs7U0FFekMsQ0FBQztPQUNXLGdCQUFnQixDQXVNNUI7SUFBRCx1QkFBQztDQUFBLEFBdk1ELENBQXNDLGVBQWUsR0F1TXBEO1NBdk1ZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT3JkZXJzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjY291bnQvb3JkZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLW9yZGVyLWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJ29yZGVyLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnb3JkZXItZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBPcmRlckVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHByb3RlY3RlZCBvcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuXG4gICAgcHVibGljIG9yZGVyJCA9IHRoaXMub3JkZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBvcmRlciA9IG51bGxcbiAgICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gICAgcHVibGljIGVycm9yO1xuICAgIEBJbnB1dCgpIG51bWJlck9yZGVyID0gbnVsbFxuICAgIHB1YmxpYyBhbGxvd1JlcGVhdE9yZGVycyA9IGZhbHNlO1xuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVEaXNjb3VudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgb3JkZXJzU2VydmljZTogT3JkZXJzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGFjdGl2ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHVibGljIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcmRlcnNTZXJ2aWNlLnNlbGVjdGVkT3JkZXIkLnN1YnNjcmliZShcbiAgICAgICAgICAgIGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWJlck9yZGVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJPcmRlciA9IHRoaXMuYWN0aXZlZFJvdXRlLnNuYXBzaG90LnBhcmFtcy5udW1iZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcykgb3JkZXIgPSByZXM7XG4gICAgICAgICAgICAgICAgZWxzZSBvcmRlciA9IGF3YWl0IHRoaXMub3JkZXJzU2VydmljZS5maW5kT3JkZXIodGhpcy5udW1iZXJPcmRlcik7XG4gICAgICAgICAgICAgICAgb3JkZXIgJiYgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG4gICAgICAgICAgICAgICAgIW9yZGVyICYmIHRoaXMuY2FsbEVycm9yKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlciA9IG9yZGVyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlcnNTZXJ2aWNlLmVycm9yJC50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB0aGlzLmVycm9yID0gcmVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxFcnJvcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93UmVwZWF0T3JkZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd1JlcGVhdE9yZGVycyA9IGNvbmZpZy5hbGxvd1JlcGVhdE9yZGVycztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93UmVwZWF0T3JkZXJzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZVByaWNlcyA9IGNvbmZpZz8uaGlkZVByaWNlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVEaXNjb3VudHMgPSBjb25maWc/LmhpZGVEaXNjb3VudHMgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjb25maWc/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPSBjb25maWc/LnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA9IGNvbmZpZz8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPz8gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVjT25Jbml0KClcbiAgICB9XG5cbiAgICB0b0RhdGUgPSAoZGF0ZSwgZm9ybWF0KSA9PiBtb21lbnQoZGF0ZSkuZm9ybWF0KCFmb3JtYXQgJiYgJ0REL01NL1lZWVksIGg6bW06c3MgYScgfHwgZm9ybWF0KVxuXG4gICAgcHJpdmF0ZSBnZXRMaW5lUHJpY2luZyA9IChpdGVtOiBhbnkpOiBhbnkgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgcHJpY2luZyA9IGl0ZW0/LmxpbmVQcmljaW5nIHx8IGl0ZW0/LmxpbmVfcHJpY2luZztcbiAgICAgICAgaWYgKCFwcmljaW5nIHx8ICFwcmljaW5nLnVuaXQgfHwgIXByaWNpbmcuZGlzY291bnQgfHwgIXByaWNpbmcuc3VidG90YWwpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gWyd1bml0JywgJ2Rpc2NvdW50JywgJ3N1YnRvdGFsJ107XG4gICAgICAgIGNvbnN0IHZhbGlkID0gc2VjdGlvbnMuZXZlcnkoc2VjdGlvbiA9PlxuICAgICAgICAgICAgWyduZXQnLCAndGF4JywgJ2dyb3NzJ10uZXZlcnkoa2V5ID0+IE51bWJlci5pc0Zpbml0ZShOdW1iZXIocHJpY2luZ1tzZWN0aW9uXVtrZXldKSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkID8gcHJpY2luZyA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIaXN0b3JpY2FsUHJpY2luZ0tleSA9ICgpOiAnbmV0JyB8ICdncm9zcycgPT5cbiAgICAgICAgdGhpcy5zaG93UHJpY2VXaXRoVGF4ZXNXaGlsZUJyb3dzaW5nID8gJ2dyb3NzJyA6ICduZXQnO1xuXG4gICAgZ2V0T3JkZXJMaW5lVmFsdWUgPSAoaXRlbTogYW55LCBzZWN0aW9uOiAndW5pdCcgfCAnZGlzY291bnQnIHwgJ3N1YnRvdGFsJyk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBsaW5lUHJpY2luZyA9IHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSk7XG4gICAgICAgIGlmIChsaW5lUHJpY2luZykge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihsaW5lUHJpY2luZ1tzZWN0aW9uXVt0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWN0aW9uID09PSAndW5pdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXRQcmljZSA9IGl0ZW0/LnVuaXRQcmljZSA/PyBpdGVtPy51bml0X3ByaWNlO1xuICAgICAgICAgICAgaWYgKHVuaXRQcmljZSAhPT0gbnVsbCAmJiB1bml0UHJpY2UgIT09IHVuZGVmaW5lZCAmJiB1bml0UHJpY2UgIT09ICcnKSByZXR1cm4gTnVtYmVyKHVuaXRQcmljZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhpc3RvcmljYWxTdWJ0b3RhbCA9IGl0ZW0/LnN1YnRvdGFsID8/IGl0ZW0/LnRvdGFsO1xuICAgICAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBOdW1iZXIoaXRlbT8ucXVhbnRpdHkgfHwgMCk7XG4gICAgICAgICAgICBpZiAoaGlzdG9yaWNhbFN1YnRvdGFsICE9PSBudWxsICYmIGhpc3RvcmljYWxTdWJ0b3RhbCAhPT0gdW5kZWZpbmVkICYmIHF1YW50aXR5ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaGlzdG9yaWNhbFN1YnRvdGFsKSAvIHF1YW50aXR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wYXRpYmlsaWRhZCBleHRyZW1hIGNvbiByZXNwdWVzdGFzIGFudGlndWFzIHF1ZSBubyBjb250aWVuZW5cbiAgICAgICAgICAgIC8vIG5pbmfDum4gaW1wb3J0ZSBkZWwgT3JkZXJJdGVtLiBOdW5jYSB0aWVuZSBwcmlvcmlkYWQgc29icmUgZGF0b3NcbiAgICAgICAgICAgIC8vIGhpc3TDs3JpY29zIHBlcnNpc3RpZG9zLlxuICAgICAgICAgICAgY29uc3QgdmFyaWFudCA9IGl0ZW0/LnByb2R1Y3Q/LnZhcmlhbnRzPy5bMF07XG4gICAgICAgICAgICBjb25zdCBjYXRhbG9nUHJpY2UgPSB2YXJpYW50Py5zYWxlcHJpY2UgPz8gdmFyaWFudD8ucHJpY2U7XG4gICAgICAgICAgICByZXR1cm4gY2F0YWxvZ1ByaWNlID09PSBudWxsIHx8IGNhdGFsb2dQcmljZSA9PT0gdW5kZWZpbmVkIHx8IGNhdGFsb2dQcmljZSA9PT0gJydcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IE51bWJlcihjYXRhbG9nUHJpY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdkaXNjb3VudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2NvdW50ID0gaXRlbT8uZGlzY291bnQ7XG4gICAgICAgICAgICByZXR1cm4gZGlzY291bnQgPT09IG51bGwgfHwgZGlzY291bnQgPT09IHVuZGVmaW5lZCB8fCBkaXNjb3VudCA9PT0gJycgPyAwIDogTnVtYmVyKGRpc2NvdW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YnRvdGFsID0gaXRlbT8uc3VidG90YWwgPz8gaXRlbT8udG90YWw7XG4gICAgICAgIGlmIChzdWJ0b3RhbCAhPT0gbnVsbCAmJiBzdWJ0b3RhbCAhPT0gdW5kZWZpbmVkICYmIHN1YnRvdGFsICE9PSAnJykgcmV0dXJuIE51bWJlcihzdWJ0b3RhbCk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaGFzT3JkZXJMaW5lVmFsdWUgPSAoaXRlbTogYW55LCBzZWN0aW9uOiAndW5pdCcgfCAnZGlzY291bnQnIHwgJ3N1YnRvdGFsJyk6IGJvb2xlYW4gPT5cbiAgICAgICAgdGhpcy5nZXRPcmRlckxpbmVWYWx1ZShpdGVtLCBzZWN0aW9uKSAhPT0gbnVsbDtcblxuICAgIHByaXZhdGUgZ2V0VG90YWxzUHJpY2luZyA9ICh0b3RhbHM6IGFueSwgY2FtZWxLZXk6IHN0cmluZywgc25ha2VLZXk6IHN0cmluZyk6IGFueSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gdG90YWxzPy5bY2FtZWxLZXldIHx8IHRvdGFscz8uW3NuYWtlS2V5XTtcbiAgICAgICAgaWYgKCFwcmljaW5nIHx8ICFbJ25ldCcsICd0YXgnLCAnZ3Jvc3MnXS5ldmVyeShrZXkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihwcmljaW5nW2tleV0pKSkpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gcHJpY2luZztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkVG90YWxzUHJpY2luZyA9ICh0b3RhbHM6IGFueSwgY2FtZWxLZXk6IHN0cmluZywgc25ha2VLZXk6IHN0cmluZyk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gdGhpcy5nZXRUb3RhbHNQcmljaW5nKHRvdGFscywgY2FtZWxLZXksIHNuYWtlS2V5KTtcbiAgICAgICAgcmV0dXJuIHByaWNpbmcgPyBOdW1iZXIocHJpY2luZ1t0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNIaXN0b3JpY2FsTGluZVByaWNpbmcgPSAoKTogYm9vbGVhbiA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMub3JkZXI/Lml0ZW1zKVxuICAgICAgICAmJiB0aGlzLm9yZGVyLml0ZW1zLmxlbmd0aCA+IDBcbiAgICAgICAgJiYgdGhpcy5vcmRlci5pdGVtcy5ldmVyeShpdGVtID0+IHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSkpO1xuXG4gICAgZ2V0SGlzdG9yaWNhbFByb2R1Y3RzU3VidG90YWwgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0hpc3RvcmljYWxMaW5lUHJpY2luZygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcmRlci5pdGVtcy5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PlxuICAgICAgICAgICAgICAgIHRvdGFsICsgTnVtYmVyKHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSkuc3VidG90YWxbdGhpcy5nZXRIaXN0b3JpY2FsUHJpY2luZ0tleSgpXSksIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VidG90YWwgPSB0aGlzLm9yZGVyPy50b3RhbHM/LmNhcnRTdWJ0b3RhbFxuICAgICAgICAgICAgPz8gdGhpcy5vcmRlcj8udG90YWxzPy5jYXJ0X3N1YnRvdGFsXG4gICAgICAgICAgICA/PyB0aGlzLm9yZGVyPy50b3RhbHM/LnN1YnRvdGFsO1xuICAgICAgICByZXR1cm4gc3VidG90YWwgPT09IG51bGwgfHwgc3VidG90YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIoc3VidG90YWwpO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxPcmRlckRpc2NvdW50ID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBleHBsaWNpdCA9IHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ29yZGVyRGlzY291bnRQcmljaW5nJywgJ29yZGVyX2Rpc2NvdW50X3ByaWNpbmcnKTtcbiAgICAgICAgaWYgKGV4cGxpY2l0ICE9PSBudWxsKSByZXR1cm4gZXhwbGljaXQ7XG5cbiAgICAgICAgY29uc3QgdG90YWxzID0gdGhpcy5vcmRlcj8udG90YWxzIHx8IHt9O1xuICAgICAgICByZXR1cm4gdG90YWxzLnByb21vdGlvbiA9PT0gbnVsbCB8fCB0b3RhbHMucHJvbW90aW9uID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHRvdGFscy5wcm9tb3Rpb24pO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxDb3Vwb25EaXNjb3VudCA9ICgpOiBudW1iZXIgfCBudWxsID0+XG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ2NvdXBvbkRpc2NvdW50UHJpY2luZycsICdjb3Vwb25fZGlzY291bnRfcHJpY2luZycpO1xuXG4gICAgZ2V0SGlzdG9yaWNhbFNoaXBwaW5nID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBleHBsaWNpdCA9IHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ3NoaXBwaW5nUHJpY2luZycsICdzaGlwcGluZ19wcmljaW5nJyk7XG4gICAgICAgIGlmIChleHBsaWNpdCAhPT0gbnVsbCkgcmV0dXJuIGV4cGxpY2l0O1xuXG4gICAgICAgIGNvbnN0IHNoaXBwaW5nID0gdGhpcy5vcmRlcj8udG90YWxzPy5zaGlwcGluZztcbiAgICAgICAgcmV0dXJuIHNoaXBwaW5nID09PSBudWxsIHx8IHNoaXBwaW5nID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHNoaXBwaW5nKTtcbiAgICB9XG5cbiAgICBnZXRIaXN0b3JpY2FsVGF4ZXMgPSAoKTogbnVtYmVyID0+IE51bWJlcih0aGlzLm9yZGVyPy50b3RhbHM/LnRheGVzXG4gICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydFRheGVzXG4gICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydF90YXhlc1xuICAgICAgICA/PyAwKTtcblxuICAgIGhhc0hpc3RvcmljYWxUYXhlcyA9ICgpOiBib29sZWFuID0+IHRoaXMuZ2V0SGlzdG9yaWNhbFRheGVzKCkgIT09IDA7XG5cbiAgICBnZXRIaXN0b3JpY2FsVG90YWwgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gdGhpcy5vcmRlcj8udG90YWxzPy50b3RhbDtcbiAgICAgICAgcmV0dXJuIHRvdGFsID09PSBudWxsIHx8IHRvdGFsID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHRvdGFsKTtcbiAgICB9XG5cbiAgICBjYWxsRXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSAnPyc7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ2FjY291bnQvb3JkZXJzJyk7XG4gICAgfVxuXG4gICAgdm9sdmVyID0gKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnYWNjb3VudC9vcmRlcnMnKTtcblxuICAgIHJlcGVhdE9yZGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hbGxvd1JlcGVhdE9yZGVycyAmJiB0aGlzLm9yZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZFJlcGVhdE9yZGVyVG9DYXJ0KHRoaXMub3JkZXIuaXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9hY2NvdW50LWVjL29yZGVyLWVjL29yZGVyLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQU9oRjtJQUFzQyxvQ0FBZTtJQWlCakQsMEJBQ1csYUFBNEIsRUFDekIsWUFBNEIsRUFDL0IsTUFBYyxFQUNkLE1BQWlCLEVBQ2hCLFdBQXdCLEVBQ3hCLG9CQUEwQztRQU50RCxZQVFJLGlCQUFPLFNBRVY7UUFUVSxtQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUN6QixrQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDL0IsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFlBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQW9CLEdBQXBCLG9C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U0FBUztZQUM1QyxLQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ25CLENBQUM7SUE2SEQsc0NBQVcsR0FBWDtRQUNJLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNEO0lBQ0wsQ0FBQzs7Z0JBbkx5QixhQUFhO2dCQUNYLGNBQWM7Z0JBQ3ZCLE1BQU07Z0JBQ04sU0FBUztnQkFDSCxXQUFXO2dCQUNGLG9CQUFvQjs7SUFmN0M7UUFBUixLQUFLLEVBQUU7eURBQW1CO0lBUmxCLGdCQUFnQjtRQUw1QixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsY0FBYztZQUN4Qix1cnBCQUFzQzs7U0FFekMsQ0FBQztPQUNXLGdCQUFnQixDQXVNNUI7SUFBRCx1QkFBQztDQUFBLEFBdk1ELENBQXNDLGVBQWUsR0F1TXBEO1NBdk1ZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT3JkZXJzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjY291bnQvb3JkZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLW9yZGVyLWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJ29yZGVyLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnb3JkZXItZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBPcmRlckVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHByb3RlY3RlZCBvcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuXG4gICAgcHVibGljIG9yZGVyJCA9IHRoaXMub3JkZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBvcmRlciA9IG51bGxcbiAgICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gICAgcHVibGljIGVycm9yO1xuICAgIEBJbnB1dCgpIG51bWJlck9yZGVyID0gbnVsbFxuICAgIHB1YmxpYyBhbGxvd1JlcGVhdE9yZGVycyA9IGZhbHNlO1xuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVEaXNjb3VudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgb3JkZXJzU2VydmljZTogT3JkZXJzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGFjdGl2ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHVibGljIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcmRlcnNTZXJ2aWNlLnNlbGVjdGVkT3JkZXIkLnN1YnNjcmliZShcbiAgICAgICAgICAgIGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWJlck9yZGVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJPcmRlciA9IHRoaXMuYWN0aXZlZFJvdXRlLnNuYXBzaG90LnBhcmFtcy5udW1iZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcykgb3JkZXIgPSByZXM7XG4gICAgICAgICAgICAgICAgZWxzZSBvcmRlciA9IGF3YWl0IHRoaXMub3JkZXJzU2VydmljZS5maW5kT3JkZXIodGhpcy5udW1iZXJPcmRlcik7XG4gICAgICAgICAgICAgICAgb3JkZXIgJiYgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG4gICAgICAgICAgICAgICAgIW9yZGVyICYmIHRoaXMuY2FsbEVycm9yKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlciA9IG9yZGVyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlcnNTZXJ2aWNlLmVycm9yJC50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB0aGlzLmVycm9yID0gcmVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxFcnJvcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93UmVwZWF0T3JkZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd1JlcGVhdE9yZGVycyA9IGNvbmZpZy5hbGxvd1JlcGVhdE9yZGVycztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93UmVwZWF0T3JkZXJzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZVByaWNlcyA9IGNvbmZpZz8uaGlkZVByaWNlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVEaXNjb3VudHMgPSBjb25maWc/LmhpZGVEaXNjb3VudHMgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjb25maWc/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPSBjb25maWc/LnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA9IGNvbmZpZz8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPz8gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVjT25Jbml0KClcbiAgICB9XG5cbiAgICB0b0RhdGUgPSAoZGF0ZSwgZm9ybWF0KSA9PiBtb21lbnQoZGF0ZSkuZm9ybWF0KCFmb3JtYXQgJiYgJ0REL01NL1lZWVksIGg6bW06c3MgYScgfHwgZm9ybWF0KVxuXG4gICAgcHJpdmF0ZSBnZXRMaW5lUHJpY2luZyA9IChpdGVtOiBhbnkpOiBhbnkgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgcHJpY2luZyA9IGl0ZW0/LmxpbmVQcmljaW5nIHx8IGl0ZW0/LmxpbmVfcHJpY2luZztcbiAgICAgICAgaWYgKCFwcmljaW5nIHx8ICFwcmljaW5nLnVuaXQgfHwgIXByaWNpbmcuZGlzY291bnQgfHwgIXByaWNpbmcuc3VidG90YWwpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gWyd1bml0JywgJ2Rpc2NvdW50JywgJ3N1YnRvdGFsJ107XG4gICAgICAgIGNvbnN0IHZhbGlkID0gc2VjdGlvbnMuZXZlcnkoc2VjdGlvbiA9PlxuICAgICAgICAgICAgWyduZXQnLCAndGF4JywgJ2dyb3NzJ10uZXZlcnkoa2V5ID0+IE51bWJlci5pc0Zpbml0ZShOdW1iZXIocHJpY2luZ1tzZWN0aW9uXVtrZXldKSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkID8gcHJpY2luZyA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIaXN0b3JpY2FsUHJpY2luZ0tleSA9ICgpOiAnbmV0JyB8ICdncm9zcycgPT5cbiAgICAgICAgdGhpcy5zaG93UHJpY2VXaXRoVGF4ZXNXaGlsZUJyb3dzaW5nID8gJ2dyb3NzJyA6ICduZXQnO1xuXG4gICAgZ2V0T3JkZXJMaW5lVmFsdWUgPSAoaXRlbTogYW55LCBzZWN0aW9uOiAndW5pdCcgfCAnZGlzY291bnQnIHwgJ3N1YnRvdGFsJyk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBsaW5lUHJpY2luZyA9IHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSk7XG4gICAgICAgIGlmIChsaW5lUHJpY2luZykge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihsaW5lUHJpY2luZ1tzZWN0aW9uXVt0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWN0aW9uID09PSAndW5pdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXRQcmljZSA9IGl0ZW0/LnVuaXRQcmljZSA/PyBpdGVtPy51bml0X3ByaWNlO1xuICAgICAgICAgICAgaWYgKHVuaXRQcmljZSAhPT0gbnVsbCAmJiB1bml0UHJpY2UgIT09IHVuZGVmaW5lZCAmJiB1bml0UHJpY2UgIT09ICcnKSByZXR1cm4gTnVtYmVyKHVuaXRQcmljZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhpc3RvcmljYWxTdWJ0b3RhbCA9IGl0ZW0/LnN1YnRvdGFsID8/IGl0ZW0/LnRvdGFsO1xuICAgICAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBOdW1iZXIoaXRlbT8ucXVhbnRpdHkgfHwgMCk7XG4gICAgICAgICAgICBpZiAoaGlzdG9yaWNhbFN1YnRvdGFsICE9PSBudWxsICYmIGhpc3RvcmljYWxTdWJ0b3RhbCAhPT0gdW5kZWZpbmVkICYmIHF1YW50aXR5ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaGlzdG9yaWNhbFN1YnRvdGFsKSAvIHF1YW50aXR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wYXRpYmlsaWRhZCBleHRyZW1hIGNvbiByZXNwdWVzdGFzIGFudGlndWFzIHF1ZSBubyBjb250aWVuZW5cbiAgICAgICAgICAgIC8vIG5pbmfDum4gaW1wb3J0ZSBkZWwgT3JkZXJJdGVtLiBOdW5jYSB0aWVuZSBwcmlvcmlkYWQgc29icmUgZGF0b3NcbiAgICAgICAgICAgIC8vIGhpc3TDs3JpY29zIHBlcnNpc3RpZG9zLlxuICAgICAgICAgICAgY29uc3QgdmFyaWFudCA9IGl0ZW0/LnByb2R1Y3Q/LnZhcmlhbnRzPy5bMF07XG4gICAgICAgICAgICBjb25zdCBjYXRhbG9nUHJpY2UgPSB2YXJpYW50Py5zYWxlcHJpY2UgPz8gdmFyaWFudD8ucHJpY2U7XG4gICAgICAgICAgICByZXR1cm4gY2F0YWxvZ1ByaWNlID09PSBudWxsIHx8IGNhdGFsb2dQcmljZSA9PT0gdW5kZWZpbmVkIHx8IGNhdGFsb2dQcmljZSA9PT0gJydcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IE51bWJlcihjYXRhbG9nUHJpY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdkaXNjb3VudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2NvdW50ID0gaXRlbT8uZGlzY291bnQ7XG4gICAgICAgICAgICByZXR1cm4gZGlzY291bnQgPT09IG51bGwgfHwgZGlzY291bnQgPT09IHVuZGVmaW5lZCB8fCBkaXNjb3VudCA9PT0gJycgPyAwIDogTnVtYmVyKGRpc2NvdW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YnRvdGFsID0gaXRlbT8uc3VidG90YWwgPz8gaXRlbT8udG90YWw7XG4gICAgICAgIGlmIChzdWJ0b3RhbCAhPT0gbnVsbCAmJiBzdWJ0b3RhbCAhPT0gdW5kZWZpbmVkICYmIHN1YnRvdGFsICE9PSAnJykgcmV0dXJuIE51bWJlcihzdWJ0b3RhbCk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaGFzT3JkZXJMaW5lVmFsdWUgPSAoaXRlbTogYW55LCBzZWN0aW9uOiAndW5pdCcgfCAnZGlzY291bnQnIHwgJ3N1YnRvdGFsJyk6IGJvb2xlYW4gPT5cbiAgICAgICAgdGhpcy5nZXRPcmRlckxpbmVWYWx1ZShpdGVtLCBzZWN0aW9uKSAhPT0gbnVsbDtcblxuICAgIHByaXZhdGUgZ2V0VG90YWxzUHJpY2luZyA9ICh0b3RhbHM6IGFueSwgY2FtZWxLZXk6IHN0cmluZywgc25ha2VLZXk6IHN0cmluZyk6IGFueSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gdG90YWxzPy5bY2FtZWxLZXldIHx8IHRvdGFscz8uW3NuYWtlS2V5XTtcbiAgICAgICAgaWYgKCFwcmljaW5nIHx8ICFbJ25ldCcsICd0YXgnLCAnZ3Jvc3MnXS5ldmVyeShrZXkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihwcmljaW5nW2tleV0pKSkpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gcHJpY2luZztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkVG90YWxzUHJpY2luZyA9ICh0b3RhbHM6IGFueSwgY2FtZWxLZXk6IHN0cmluZywgc25ha2VLZXk6IHN0cmluZyk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gdGhpcy5nZXRUb3RhbHNQcmljaW5nKHRvdGFscywgY2FtZWxLZXksIHNuYWtlS2V5KTtcbiAgICAgICAgcmV0dXJuIHByaWNpbmcgPyBOdW1iZXIocHJpY2luZ1t0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNIaXN0b3JpY2FsTGluZVByaWNpbmcgPSAoKTogYm9vbGVhbiA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMub3JkZXI/Lml0ZW1zKVxuICAgICAgICAmJiB0aGlzLm9yZGVyLml0ZW1zLmxlbmd0aCA+IDBcbiAgICAgICAgJiYgdGhpcy5vcmRlci5pdGVtcy5ldmVyeShpdGVtID0+IHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSkpO1xuXG4gICAgZ2V0SGlzdG9yaWNhbFByb2R1Y3RzU3VidG90YWwgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0hpc3RvcmljYWxMaW5lUHJpY2luZygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcmRlci5pdGVtcy5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PlxuICAgICAgICAgICAgICAgIHRvdGFsICsgTnVtYmVyKHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSkuc3VidG90YWxbdGhpcy5nZXRIaXN0b3JpY2FsUHJpY2luZ0tleSgpXSksIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VidG90YWwgPSB0aGlzLm9yZGVyPy50b3RhbHM/LmNhcnRTdWJ0b3RhbFxuICAgICAgICAgICAgPz8gdGhpcy5vcmRlcj8udG90YWxzPy5jYXJ0X3N1YnRvdGFsXG4gICAgICAgICAgICA/PyB0aGlzLm9yZGVyPy50b3RhbHM/LnN1YnRvdGFsO1xuICAgICAgICByZXR1cm4gc3VidG90YWwgPT09IG51bGwgfHwgc3VidG90YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIoc3VidG90YWwpO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxPcmRlckRpc2NvdW50ID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBleHBsaWNpdCA9IHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ29yZGVyRGlzY291bnRQcmljaW5nJywgJ29yZGVyX2Rpc2NvdW50X3ByaWNpbmcnKTtcbiAgICAgICAgaWYgKGV4cGxpY2l0ICE9PSBudWxsKSByZXR1cm4gZXhwbGljaXQ7XG5cbiAgICAgICAgY29uc3QgdG90YWxzID0gdGhpcy5vcmRlcj8udG90YWxzIHx8IHt9O1xuICAgICAgICByZXR1cm4gdG90YWxzLnByb21vdGlvbiA9PT0gbnVsbCB8fCB0b3RhbHMucHJvbW90aW9uID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHRvdGFscy5wcm9tb3Rpb24pO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxDb3Vwb25EaXNjb3VudCA9ICgpOiBudW1iZXIgfCBudWxsID0+XG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ2NvdXBvbkRpc2NvdW50UHJpY2luZycsICdjb3Vwb25fZGlzY291bnRfcHJpY2luZycpO1xuXG4gICAgZ2V0SGlzdG9yaWNhbFNoaXBwaW5nID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBleHBsaWNpdCA9IHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ3NoaXBwaW5nUHJpY2luZycsICdzaGlwcGluZ19wcmljaW5nJyk7XG4gICAgICAgIGlmIChleHBsaWNpdCAhPT0gbnVsbCkgcmV0dXJuIGV4cGxpY2l0O1xuXG4gICAgICAgIGNvbnN0IHNoaXBwaW5nID0gdGhpcy5vcmRlcj8udG90YWxzPy5zaGlwcGluZztcbiAgICAgICAgcmV0dXJuIHNoaXBwaW5nID09PSBudWxsIHx8IHNoaXBwaW5nID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHNoaXBwaW5nKTtcbiAgICB9XG5cbiAgICBnZXRIaXN0b3JpY2FsVGF4ZXMgPSAoKTogbnVtYmVyID0+IE51bWJlcih0aGlzLm9yZGVyPy50b3RhbHM/LnRheGVzXG4gICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydFRheGVzXG4gICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydF90YXhlc1xuICAgICAgICA/PyAwKTtcblxuICAgIGhhc0hpc3RvcmljYWxUYXhlcyA9ICgpOiBib29sZWFuID0+IHRoaXMuZ2V0SGlzdG9yaWNhbFRheGVzKCkgIT09IDA7XG5cbiAgICBnZXRIaXN0b3JpY2FsVG90YWwgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gdGhpcy5vcmRlcj8udG90YWxzPy50b3RhbDtcbiAgICAgICAgcmV0dXJuIHRvdGFsID09PSBudWxsIHx8IHRvdGFsID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHRvdGFsKTtcbiAgICB9XG5cbiAgICBjYWxsRXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSAnPyc7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ2FjY291bnQvb3JkZXJzJyk7XG4gICAgfVxuXG4gICAgdm9sdmVyID0gKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnYWNjb3VudC9vcmRlcnMnKTtcblxuICAgIHJlcGVhdE9yZGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hbGxvd1JlcGVhdE9yZGVycyAmJiB0aGlzLm9yZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZFJlcGVhdE9yZGVyVG9DYXJ0KHRoaXMub3JkZXIuaXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
|