UNPKG

@spartacus/cart

Version:

`@spartacus/cart` is a package that you can include in your application, which allows you to use various cart features.

66 lines 22.8 kB
import { ChangeDetectionStrategy, Component, ViewChild, } from '@angular/core'; import { SavedCartFormType, } from '@spartacus/cart/saved-cart/root'; import { Subscription } from 'rxjs'; import { map, take } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@spartacus/core"; import * as i2 from "@spartacus/cart/saved-cart/root"; import * as i3 from "@spartacus/storefront"; import * as i4 from "@angular/common"; import * as i5 from "@angular/router"; export class SavedCartListComponent { constructor(routing, savedCartService, vcr, launchDialogService) { this.routing = routing; this.savedCartService = savedCartService; this.vcr = vcr; this.launchDialogService = launchDialogService; this.subscription = new Subscription(); this.savedCarts$ = this.savedCartService.getList().pipe(map((lists) => lists.sort((a, b) => { let date1 = a.saveTime ? new Date(a.saveTime).getTime() : new Date().getTime(); let date2 = b.saveTime ? new Date(b.saveTime).getTime() : new Date().getTime(); return date2 - date1; }))); } ngOnInit() { this.isLoading$ = this.savedCartService.getSavedCartListProcessLoading(); this.savedCartService.loadSavedCarts(); } goToSavedCartDetails(cart) { this.routing.go({ cxRoute: 'savedCartsDetails', params: { savedCartId: cart === null || cart === void 0 ? void 0 : cart.code }, }); } openDialog(event, cart) { const dialog = this.launchDialogService.openDialog("SAVED_CART" /* SAVED_CART */, this.restoreButton, this.vcr, { cart, layoutOption: SavedCartFormType.RESTORE }); if (dialog) { this.subscription.add(dialog.pipe(take(1)).subscribe()); } event.stopPropagation(); } ngOnDestroy() { var _a; this.savedCartService.clearSavedCarts(); this.savedCartService.clearSaveCart(); this.savedCartService.clearRestoreSavedCart(); (_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); } } SavedCartListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SavedCartListComponent, deps: [{ token: i1.RoutingService }, { token: i2.SavedCartFacade }, { token: i0.ViewContainerRef }, { token: i3.LaunchDialogService }], target: i0.ɵɵFactoryTarget.Component }); SavedCartListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: SavedCartListComponent, selector: "cx-saved-cart-list", viewQueries: [{ propertyName: "restoreButton", first: true, predicate: ["element"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"savedCarts$ | async as savedCarts\">\n <ng-container *ngIf=\"!(isLoading$ | async); else loading\">\n <div class=\"cx-saved-cart-list-header\">\n <h3>\n {{\n 'savedCartList.savedCarts' | cxTranslate: { count: savedCarts.length }\n }}\n </h3>\n </div>\n\n <ng-container *ngIf=\"savedCarts?.length > 0; else noSavedCarts\">\n <table class=\"table cx-saved-cart-list-table\">\n <thead class=\"cx-saved-cart-list-thead-mobile\">\n <th scope=\"col\">\n {{ 'savedCartList.cartName' | cxTranslate }}\n </th>\n <th scope=\"col\">{{ 'savedCartList.cartId' | cxTranslate }}</th>\n <th scope=\"col\">{{ 'savedCartList.dateSaved' | cxTranslate }}</th>\n <th scope=\"col\">\n {{ 'savedCartList.quantity' | cxTranslate }}\n </th>\n <th scope=\"col\">{{ 'savedCartList.total' | cxTranslate }}</th>\n <th scope=\"col\">\n {{ 'savedCartList.actions' | cxTranslate }}\n </th>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let savedCart of savedCarts\"\n (click)=\"goToSavedCartDetails(savedCart)\"\n >\n <td class=\"cx-saved-cart-list-cart-name\">\n <div class=\"cx-table-label-mobile cx-saved-cart-list-label\">\n {{ 'savedCartList.cartName' | cxTranslate }}\n </div>\n <a\n [routerLink]=\"\n {\n cxRoute: 'savedCartsDetails',\n params: { savedCartId: savedCart?.code }\n } | cxUrl\n \"\n class=\"cx-saved-cart-list-value\"\n >\n {{ savedCart?.name }}</a\n >\n </td>\n <td class=\"cx-saved-cart-list-cart-id\">\n <div class=\"cx-table-label-mobile cx-saved-cart-list-label\">\n {{ 'savedCartList.cartId' | cxTranslate }}\n </div>\n <a\n [routerLink]=\"\n {\n cxRoute: 'savedCartsDetails',\n params: { savedCartId: savedCart?.code }\n } | cxUrl\n \"\n class=\"cx-saved-cart-list-value\"\n >{{ savedCart?.code }}</a\n >\n </td>\n <td class=\"cx-saved-cart-list-date-saved\">\n <div class=\"cx-table-label-mobile cx-saved-cart-list-label\">\n {{ 'savedCartList.dateSaved' | cxTranslate }}\n </div>\n <a\n [routerLink]=\"\n {\n cxRoute: 'savedCartsDetails',\n params: { savedCartId: savedCart?.code }\n } | cxUrl\n \"\n class=\"cx-saved-cart-list-value\"\n >{{ savedCart?.saveTime | cxDate: 'longDate' }}</a\n >\n </td>\n <td class=\"cx-saved-cart-list-quantity\">\n <div class=\"cx-table-label-mobile cx-saved-cart-list-label\">\n {{ 'savedCartList.quantity' | cxTranslate }}\n </div>\n <a\n [routerLink]=\"\n {\n cxRoute: 'savedCartsDetails',\n params: { savedCartId: savedCart?.code }\n } | cxUrl\n \"\n class=\"cx-saved-cart-list-value\"\n >\n {{ savedCart?.totalUnitCount }}</a\n >\n </td>\n <td class=\"cx-saved-cart-list-total\">\n <div class=\"cx-table-label-mobile cx-saved-cart-list-label\">\n {{ 'savedCartList.total' | cxTranslate }}\n </div>\n <a\n [routerLink]=\"\n {\n cxRoute: 'savedCartsDetails',\n params: { savedCartId: savedCart?.code }\n } | cxUrl\n \"\n class=\"cx-saved-cart-list-value\"\n >\n {{ savedCart?.totalPrice?.formattedValue }}</a\n >\n </td>\n <td class=\"cx-saved-cart-list-make-cart-active\">\n <div class=\"cx-table-label-mobile cx-saved-cart-list-label\"></div>\n <button\n #element\n class=\"link cx-action-link cx-saved-cart-make-active\"\n (click)=\"openDialog($event, savedCart)\"\n >\n {{ 'savedCartList.makeCartActive' | cxTranslate }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n\n <!-- NO SAVED CART CONTAINER -->\n <ng-template #noSavedCarts>\n <div class=\"cx-saved-cart-list-no-saved-carts row\">\n <div class=\"col-sm-12 col-md-6 col-lg-4\">\n <div>{{ 'savedCartList.notFound' | cxTranslate }}</div>\n </div>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-template #loading>\n <div class=\"cx-spinner\">\n <cx-spinner></cx-spinner>\n </div>\n </ng-template>\n</ng-container>\n", components: [{ type: i3.SpinnerComponent, selector: "cx-spinner" }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }], pipes: { "async": i4.AsyncPipe, "cxTranslate": i1.TranslatePipe, "cxUrl": i1.UrlPipe, "cxDate": i1.CxDatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SavedCartListComponent, decorators: [{ type: Component, args: [{ selector: 'cx-saved-cart-list', templateUrl: './saved-cart-list.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }] }], ctorParameters: function () { return [{ type: i1.RoutingService }, { type: i2.SavedCartFacade }, { type: i0.ViewContainerRef }, { type: i3.LaunchDialogService }]; }, propDecorators: { restoreButton: [{ type: ViewChild, args: ['element'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtY2FydC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2ZlYXR1cmUtbGlicy9jYXJ0L3NhdmVkLWNhcnQvY29tcG9uZW50cy9saXN0L3NhdmVkLWNhcnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9mZWF0dXJlLWxpYnMvY2FydC9zYXZlZC1jYXJ0L2NvbXBvbmVudHMvbGlzdC9zYXZlZC1jYXJ0LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBSVQsU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxpQkFBaUIsR0FDbEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUd6QyxPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFPM0MsTUFBTSxPQUFPLHNCQUFzQjtJQW1CakMsWUFDWSxPQUF1QixFQUN2QixnQkFBaUMsRUFDakMsR0FBcUIsRUFDckIsbUJBQXdDO1FBSHhDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQXRCNUMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSzFDLGdCQUFXLEdBQXVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQ3BFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1osS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU8sRUFBRSxDQUFPLEVBQUUsRUFBRTtZQUM5QixJQUFJLEtBQUssR0FBVyxDQUFDLENBQUMsUUFBUTtnQkFDNUIsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLElBQUksS0FBSyxHQUFXLENBQUMsQ0FBQyxRQUFRO2dCQUM1QixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQkFDaEMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsT0FBTyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQztJQU1DLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUN6RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVU7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDZCxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsSUFBSSxFQUFFO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBWSxFQUFFLElBQVU7UUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsZ0NBRWhELElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQ1IsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUNsRCxDQUFDO1FBRUYsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDekQ7UUFDRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7O1FBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM5QyxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7O21IQXpEVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixvS0N2Qm5DLGduS0E0SUE7MkZEckhhLHNCQUFzQjtrQkFMbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixXQUFXLEVBQUUsa0NBQWtDO29CQUMvQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7b01BSXVCLGFBQWE7c0JBQWxDLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2F2ZWRDYXJ0RmFjYWRlLFxuICBTYXZlZENhcnRGb3JtVHlwZSxcbn0gZnJvbSAnQHNwYXJ0YWN1cy9jYXJ0L3NhdmVkLWNhcnQvcm9vdCc7XG5pbXBvcnQgeyBDYXJ0LCBSb3V0aW5nU2VydmljZSB9IGZyb20gJ0BzcGFydGFjdXMvY29yZSc7XG5pbXBvcnQgeyBMYXVuY2hEaWFsb2dTZXJ2aWNlLCBMQVVOQ0hfQ0FMTEVSIH0gZnJvbSAnQHNwYXJ0YWN1cy9zdG9yZWZyb250JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjeC1zYXZlZC1jYXJ0LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2F2ZWQtY2FydC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNhdmVkQ2FydExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2VsZW1lbnQnKSByZXN0b3JlQnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gIGlzTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNhdmVkQ2FydHMkOiBPYnNlcnZhYmxlPENhcnRbXT4gPSB0aGlzLnNhdmVkQ2FydFNlcnZpY2UuZ2V0TGlzdCgpLnBpcGUoXG4gICAgbWFwKChsaXN0cykgPT5cbiAgICAgIGxpc3RzLnNvcnQoKGE6IENhcnQsIGI6IENhcnQpID0+IHtcbiAgICAgICAgbGV0IGRhdGUxOiBudW1iZXIgPSBhLnNhdmVUaW1lXG4gICAgICAgICAgPyBuZXcgRGF0ZShhLnNhdmVUaW1lKS5nZXRUaW1lKClcbiAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBsZXQgZGF0ZTI6IG51bWJlciA9IGIuc2F2ZVRpbWVcbiAgICAgICAgICA/IG5ldyBEYXRlKGIuc2F2ZVRpbWUpLmdldFRpbWUoKVxuICAgICAgICAgIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHJldHVybiBkYXRlMiAtIGRhdGUxO1xuICAgICAgfSlcbiAgICApXG4gICk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByb3V0aW5nOiBSb3V0aW5nU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc2F2ZWRDYXJ0U2VydmljZTogU2F2ZWRDYXJ0RmFjYWRlLFxuICAgIHByb3RlY3RlZCB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJvdGVjdGVkIGxhdW5jaERpYWxvZ1NlcnZpY2U6IExhdW5jaERpYWxvZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkaW5nJCA9IHRoaXMuc2F2ZWRDYXJ0U2VydmljZS5nZXRTYXZlZENhcnRMaXN0UHJvY2Vzc0xvYWRpbmcoKTtcbiAgICB0aGlzLnNhdmVkQ2FydFNlcnZpY2UubG9hZFNhdmVkQ2FydHMoKTtcbiAgfVxuXG4gIGdvVG9TYXZlZENhcnREZXRhaWxzKGNhcnQ6IENhcnQpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRpbmcuZ28oe1xuICAgICAgY3hSb3V0ZTogJ3NhdmVkQ2FydHNEZXRhaWxzJyxcbiAgICAgIHBhcmFtczogeyBzYXZlZENhcnRJZDogY2FydD8uY29kZSB9LFxuICAgIH0pO1xuICB9XG5cbiAgb3BlbkRpYWxvZyhldmVudDogRXZlbnQsIGNhcnQ6IENhcnQpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmxhdW5jaERpYWxvZ1NlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIExBVU5DSF9DQUxMRVIuU0FWRURfQ0FSVCxcbiAgICAgIHRoaXMucmVzdG9yZUJ1dHRvbixcbiAgICAgIHRoaXMudmNyLFxuICAgICAgeyBjYXJ0LCBsYXlvdXRPcHRpb246IFNhdmVkQ2FydEZvcm1UeXBlLlJFU1RPUkUgfVxuICAgICk7XG5cbiAgICBpZiAoZGlhbG9nKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoZGlhbG9nLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCkpO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZWRDYXJ0U2VydmljZS5jbGVhclNhdmVkQ2FydHMoKTtcbiAgICB0aGlzLnNhdmVkQ2FydFNlcnZpY2UuY2xlYXJTYXZlQ2FydCgpO1xuICAgIHRoaXMuc2F2ZWRDYXJ0U2VydmljZS5jbGVhclJlc3RvcmVTYXZlZENhcnQoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInNhdmVkQ2FydHMkIHwgYXN5bmMgYXMgc2F2ZWRDYXJ0c1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpc0xvYWRpbmckIHwgYXN5bmMpOyBlbHNlIGxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3gtc2F2ZWQtY2FydC1saXN0LWhlYWRlclwiPlxuICAgICAgPGgzPlxuICAgICAgICB7e1xuICAgICAgICAgICdzYXZlZENhcnRMaXN0LnNhdmVkQ2FydHMnIHwgY3hUcmFuc2xhdGU6IHsgY291bnQ6IHNhdmVkQ2FydHMubGVuZ3RoIH1cbiAgICAgICAgfX1cbiAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2F2ZWRDYXJ0cz8ubGVuZ3RoID4gMDsgZWxzZSBub1NhdmVkQ2FydHNcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGN4LXNhdmVkLWNhcnQtbGlzdC10YWJsZVwiPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJjeC1zYXZlZC1jYXJ0LWxpc3QtdGhlYWQtbW9iaWxlXCI+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+XG4gICAgICAgICAgICB7eyAnc2F2ZWRDYXJ0TGlzdC5jYXJ0TmFtZScgfCBjeFRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3sgJ3NhdmVkQ2FydExpc3QuY2FydElkJyB8IGN4VHJhbnNsYXRlIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eyAnc2F2ZWRDYXJ0TGlzdC5kYXRlU2F2ZWQnIHwgY3hUcmFuc2xhdGUgfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlxuICAgICAgICAgICAge3sgJ3NhdmVkQ2FydExpc3QucXVhbnRpdHknIHwgY3hUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7ICdzYXZlZENhcnRMaXN0LnRvdGFsJyB8IGN4VHJhbnNsYXRlIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5cbiAgICAgICAgICAgIHt7ICdzYXZlZENhcnRMaXN0LmFjdGlvbnMnIHwgY3hUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2F2ZWRDYXJ0IG9mIHNhdmVkQ2FydHNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9TYXZlZENhcnREZXRhaWxzKHNhdmVkQ2FydClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN4LXNhdmVkLWNhcnQtbGlzdC1jYXJ0LW5hbWVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN4LXRhYmxlLWxhYmVsLW1vYmlsZSBjeC1zYXZlZC1jYXJ0LWxpc3QtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAnc2F2ZWRDYXJ0TGlzdC5jYXJ0TmFtZScgfCBjeFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY3hSb3V0ZTogJ3NhdmVkQ2FydHNEZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IHNhdmVkQ2FydElkOiBzYXZlZENhcnQ/LmNvZGUgfVxuICAgICAgICAgICAgICAgICAgfSB8IGN4VXJsXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN4LXNhdmVkLWNhcnQtbGlzdC12YWx1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBzYXZlZENhcnQ/Lm5hbWUgfX08L2FcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN4LXNhdmVkLWNhcnQtbGlzdC1jYXJ0LWlkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjeC10YWJsZS1sYWJlbC1tb2JpbGUgY3gtc2F2ZWQtY2FydC1saXN0LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgJ3NhdmVkQ2FydExpc3QuY2FydElkJyB8IGN4VHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjeFJvdXRlOiAnc2F2ZWRDYXJ0c0RldGFpbHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgc2F2ZWRDYXJ0SWQ6IHNhdmVkQ2FydD8uY29kZSB9XG4gICAgICAgICAgICAgICAgICB9IHwgY3hVcmxcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3gtc2F2ZWQtY2FydC1saXN0LXZhbHVlXCJcbiAgICAgICAgICAgICAgICA+e3sgc2F2ZWRDYXJ0Py5jb2RlIH19PC9hXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJjeC1zYXZlZC1jYXJ0LWxpc3QtZGF0ZS1zYXZlZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3gtdGFibGUtbGFiZWwtbW9iaWxlIGN4LXNhdmVkLWNhcnQtbGlzdC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7ICdzYXZlZENhcnRMaXN0LmRhdGVTYXZlZCcgfCBjeFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY3hSb3V0ZTogJ3NhdmVkQ2FydHNEZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IHNhdmVkQ2FydElkOiBzYXZlZENhcnQ/LmNvZGUgfVxuICAgICAgICAgICAgICAgICAgfSB8IGN4VXJsXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN4LXNhdmVkLWNhcnQtbGlzdC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgPnt7IHNhdmVkQ2FydD8uc2F2ZVRpbWUgfCBjeERhdGU6ICdsb25nRGF0ZScgfX08L2FcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN4LXNhdmVkLWNhcnQtbGlzdC1xdWFudGl0eVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3gtdGFibGUtbGFiZWwtbW9iaWxlIGN4LXNhdmVkLWNhcnQtbGlzdC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7ICdzYXZlZENhcnRMaXN0LnF1YW50aXR5JyB8IGN4VHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjeFJvdXRlOiAnc2F2ZWRDYXJ0c0RldGFpbHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgc2F2ZWRDYXJ0SWQ6IHNhdmVkQ2FydD8uY29kZSB9XG4gICAgICAgICAgICAgICAgICB9IHwgY3hVcmxcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3gtc2F2ZWQtY2FydC1saXN0LXZhbHVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHNhdmVkQ2FydD8udG90YWxVbml0Q291bnQgfX08L2FcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN4LXNhdmVkLWNhcnQtbGlzdC10b3RhbFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3gtdGFibGUtbGFiZWwtbW9iaWxlIGN4LXNhdmVkLWNhcnQtbGlzdC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7ICdzYXZlZENhcnRMaXN0LnRvdGFsJyB8IGN4VHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjeFJvdXRlOiAnc2F2ZWRDYXJ0c0RldGFpbHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgc2F2ZWRDYXJ0SWQ6IHNhdmVkQ2FydD8uY29kZSB9XG4gICAgICAgICAgICAgICAgICB9IHwgY3hVcmxcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3gtc2F2ZWQtY2FydC1saXN0LXZhbHVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHNhdmVkQ2FydD8udG90YWxQcmljZT8uZm9ybWF0dGVkVmFsdWUgfX08L2FcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN4LXNhdmVkLWNhcnQtbGlzdC1tYWtlLWNhcnQtYWN0aXZlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjeC10YWJsZS1sYWJlbC1tb2JpbGUgY3gtc2F2ZWQtY2FydC1saXN0LWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAjZWxlbWVudFxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGluayBjeC1hY3Rpb24tbGluayBjeC1zYXZlZC1jYXJ0LW1ha2UtYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRpYWxvZygkZXZlbnQsIHNhdmVkQ2FydClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ3NhdmVkQ2FydExpc3QubWFrZUNhcnRBY3RpdmUnIHwgY3hUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBOTyBTQVZFRCBDQVJUIENPTlRBSU5FUiAtLT5cbiAgICA8bmctdGVtcGxhdGUgI25vU2F2ZWRDYXJ0cz5cbiAgICAgIDxkaXYgY2xhc3M9XCJjeC1zYXZlZC1jYXJ0LWxpc3Qtbm8tc2F2ZWQtY2FydHMgcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgY29sLWxnLTRcIj5cbiAgICAgICAgICA8ZGl2Pnt7ICdzYXZlZENhcnRMaXN0Lm5vdEZvdW5kJyB8IGN4VHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICAgIDxkaXYgY2xhc3M9XCJjeC1zcGlubmVyXCI+XG4gICAgICA8Y3gtc3Bpbm5lcj48L2N4LXNwaW5uZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==