@vendure/admin-ui 2.1.6 → 2.1.8
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/catalog/catalog.module.d.ts +3 -3
- package/catalog/components/variant-price-strategy-detail/variant-price-strategy-detail.component.d.ts +10 -0
- package/catalog/public_api.d.ts +1 -1
- package/core/common/generated-types.d.ts +20 -0
- package/core/common/version.d.ts +1 -1
- package/core/data/utils/is-entity-create-or-update-mutation.d.ts +6 -0
- package/core/data/utils/remove-readonly-custom-fields.d.ts +5 -11
- package/core/public_api.d.ts +2 -0
- package/{catalog → core/shared}/components/assets/assets.component.d.ts +2 -1
- package/core/shared/shared.module.d.ts +157 -156
- package/esm2022/catalog/catalog.module.mjs +5 -5
- package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +4 -5
- package/esm2022/catalog/components/collection-list/collection-list.component.mjs +3 -3
- package/esm2022/catalog/components/product-detail/product-detail.component.mjs +4 -5
- package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +1 -1
- package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +5 -5
- package/esm2022/catalog/components/variant-price-strategy-detail/variant-price-strategy-detail.component.mjs +33 -0
- package/esm2022/catalog/public_api.mjs +2 -2
- package/esm2022/core/common/generated-types.mjs +1 -1
- package/esm2022/core/common/version.mjs +2 -2
- package/esm2022/core/components/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/core/data/providers/base-data.service.mjs +3 -2
- package/esm2022/core/data/utils/is-entity-create-or-update-mutation.mjs +45 -0
- package/esm2022/core/data/utils/remove-readonly-custom-fields.mjs +15 -80
- package/esm2022/core/public_api.mjs +3 -1
- package/esm2022/{catalog → core/shared}/components/assets/assets.component.mjs +13 -5
- package/esm2022/core/shared/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/data-table/data-table.component.mjs +1 -1
- package/esm2022/core/shared/components/form-field/form-field.component.mjs +1 -1
- package/esm2022/core/shared/shared.module.mjs +5 -1
- package/esm2022/order/components/order-payment-card/order-payment-card.component.mjs +1 -1
- package/esm2022/order/order.routes.mjs +1 -1
- package/esm2022/react/react-hooks/use-form-control.mjs +1 -1
- package/fesm2022/vendure-admin-ui-catalog.mjs +41 -104
- package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-core.mjs +157 -82
- package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-react.mjs.map +1 -1
- package/package.json +8 -8
- package/settings/components/stock-location-list/stock-location-list.component.d.ts +1 -1
- package/static/i18n-messages/ar.json +796 -794
- package/static/i18n-messages/cs.json +796 -794
- package/static/i18n-messages/de.json +796 -794
- package/static/i18n-messages/en.json +796 -794
- package/static/i18n-messages/es.json +796 -794
- package/static/i18n-messages/fa.json +797 -795
- package/static/i18n-messages/fr.json +796 -794
- package/static/i18n-messages/he.json +796 -794
- package/static/i18n-messages/hr.json +796 -794
- package/static/i18n-messages/it.json +797 -795
- package/static/i18n-messages/ne.json +797 -795
- package/static/i18n-messages/pl.json +796 -794
- package/static/i18n-messages/pt_BR.json +796 -794
- package/static/i18n-messages/pt_PT.json +796 -794
- package/static/i18n-messages/ru.json +796 -794
- package/static/i18n-messages/sv.json +797 -0
- package/static/i18n-messages/uk.json +796 -794
- package/static/i18n-messages/zh_Hans.json +796 -794
- package/static/i18n-messages/zh_Hant.json +796 -794
- package/static/vendure-ui-config.json +2 -1
|
@@ -148,10 +148,10 @@ export class CollectionListComponent extends TypedBaseListComponent {
|
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
150
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: CollectionListComponent, deps: [{ token: i1.DataService }, { token: i1.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
151
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: CollectionListComponent, selector: "vdr-collection-list", usesInheritance: true, ngImport: i0, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-split-view [rightPanelOpen]=\"activeCollectionId$ | async\" (closeClicked)=\"closeContents()\">\r\n <ng-template vdrSplitViewLeft>\r\n <vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n [activeIndex]=\"activeCollectionIndex$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (changeOrder)=\"onRearrange($event)\"\r\n >\r\n <vdr-bulk-action-menu\r\n locationId=\"collection-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.position' | translate\" id=\"position\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('position')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.position }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.name' | translate\" id=\"name\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('name')\"\r\n >\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <a class=\"button-ghost\" [routerLink]=\"['./', collection.id]\"\r\n ><span>{{ collection.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-collection=\"item\">\r\n <vdr-chip *ngIf=\"collection.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!collection.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\">\r\n <a\r\n class=\"button-small bg-weight-150\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <span>{{ 'common.view-contents' | translate }}</span>\r\n <clr-icon shape=\"file-group\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n </vdr-collection-data-table>\r\n </ng-template>\r\n <ng-template vdrSplitViewRight [splitViewTitle]=\"activeCollectionTitle$ | async\">\r\n <ng-container *ngIf=\"activeCollectionId$ | async as activeGroup\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\"></vdr-collection-contents>\r\n </ng-container>\r\n </ng-template>\r\n</vdr-split-view>\r\n", styles: ["", ":host{--indent-spacing: 18px}.indent-1{padding-inline-start:var(--indent-spacing)}.indent-2{padding-inline-start:calc(var(--indent-spacing) * 2)}.indent-3{padding-inline-start:calc(var(--indent-spacing) * 3)}.indent-4,.indent-5,.indent-6,.indent-7,.indent-8,.indent-9{padding-inline-start:calc(var(--indent-spacing) * 4)}.child-arrow{margin:1px 6px}.child-arrow.transparent{opacity:0}.breadcrumb{display:flex}.separator{color:var(--color-weight-500);margin:0 3px}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { kind: "component", type: i1.BulkActionMenuComponent, selector: "vdr-bulk-action-menu", inputs: ["locationId", "selectionManager", "hostComponent"] }, { kind: "component", type: i1.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i1.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "component", type: i1.DataTableCustomFieldColumnComponent, selector: "vdr-dt2-custom-field-column", inputs: ["customField", "sorts"], exportAs: ["row"] }, { kind: "component", type: i1.SplitViewComponent, selector: "vdr-split-view", inputs: ["rightPanelOpen"], outputs: ["closeClicked"] }, { kind: "directive", type: i1.SplitViewLeftDirective, selector: "[vdrSplitViewLeft]" }, { kind: "directive", type: i1.SplitViewRightDirective, selector: "[vdrSplitViewRight]", inputs: ["splitViewTitle"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i5.CollectionContentsComponent, selector: "vdr-collection-contents", inputs: ["collectionId", "parentId", "inheritFilters", "updatedFilters", "previewUpdatedFilters"] }, { kind: "component", type: i6.CollectionDataTableComponent, selector: "vdr-collection-data-table", inputs: ["subCollections"], outputs: ["changeOrder"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: i8.CollectionBreadcrumbPipe, name: "collectionBreadcrumb" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
151
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: CollectionListComponent, selector: "vdr-collection-list", usesInheritance: true, ngImport: i0, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-split-view [rightPanelOpen]=\"activeCollectionId$ | async\" (closeClicked)=\"closeContents()\">\r\n <ng-template vdrSplitViewLeft>\r\n <vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n [activeIndex]=\"activeCollectionIndex$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (changeOrder)=\"onRearrange($event)\"\r\n >\r\n <vdr-bulk-action-menu\r\n locationId=\"collection-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.position' | translate\" id=\"position\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('position')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.position }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.name' | translate\" id=\"name\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('name')\"\r\n >\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <a class=\"button-ghost\" [routerLink]=\"['./', collection.id]\"\r\n ><span>{{ collection.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-collection=\"item\">\r\n <vdr-chip *ngIf=\"collection.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!collection.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\">\r\n <a\r\n class=\"button-small bg-weight-150\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n [queryParams]=\"{ contentsPage: 1 }\"\r\n queryParamsHandling=\"merge\"\r\n >\r\n <span>{{ 'common.view-contents' | translate }}</span>\r\n <clr-icon shape=\"file-group\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n </vdr-collection-data-table>\r\n </ng-template>\r\n <ng-template vdrSplitViewRight [splitViewTitle]=\"activeCollectionTitle$ | async\">\r\n <ng-container *ngIf=\"activeCollectionId$ | async as activeGroup\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\"></vdr-collection-contents>\r\n </ng-container>\r\n </ng-template>\r\n</vdr-split-view>\r\n", styles: ["", ":host{--indent-spacing: 18px}.indent-1{padding-inline-start:var(--indent-spacing)}.indent-2{padding-inline-start:calc(var(--indent-spacing) * 2)}.indent-3{padding-inline-start:calc(var(--indent-spacing) * 3)}.indent-4,.indent-5,.indent-6,.indent-7,.indent-8,.indent-9{padding-inline-start:calc(var(--indent-spacing) * 4)}.child-arrow{margin:1px 6px}.child-arrow.transparent{opacity:0}.breadcrumb{display:flex}.separator{color:var(--color-weight-500);margin:0 3px}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { kind: "component", type: i1.BulkActionMenuComponent, selector: "vdr-bulk-action-menu", inputs: ["locationId", "selectionManager", "hostComponent"] }, { kind: "component", type: i1.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i1.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "component", type: i1.DataTableCustomFieldColumnComponent, selector: "vdr-dt2-custom-field-column", inputs: ["customField", "sorts"], exportAs: ["row"] }, { kind: "component", type: i1.SplitViewComponent, selector: "vdr-split-view", inputs: ["rightPanelOpen"], outputs: ["closeClicked"] }, { kind: "directive", type: i1.SplitViewLeftDirective, selector: "[vdrSplitViewLeft]" }, { kind: "directive", type: i1.SplitViewRightDirective, selector: "[vdrSplitViewRight]", inputs: ["splitViewTitle"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i5.CollectionContentsComponent, selector: "vdr-collection-contents", inputs: ["collectionId", "parentId", "inheritFilters", "updatedFilters", "previewUpdatedFilters"] }, { kind: "component", type: i6.CollectionDataTableComponent, selector: "vdr-collection-data-table", inputs: ["subCollections"], outputs: ["changeOrder"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: i8.CollectionBreadcrumbPipe, name: "collectionBreadcrumb" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
152
152
|
}
|
|
153
153
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: CollectionListComponent, decorators: [{
|
|
154
154
|
type: Component,
|
|
155
|
-
args: [{ selector: 'vdr-collection-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-split-view [rightPanelOpen]=\"activeCollectionId$ | async\" (closeClicked)=\"closeContents()\">\r\n <ng-template vdrSplitViewLeft>\r\n <vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n [activeIndex]=\"activeCollectionIndex$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (changeOrder)=\"onRearrange($event)\"\r\n >\r\n <vdr-bulk-action-menu\r\n locationId=\"collection-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.position' | translate\" id=\"position\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('position')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.position }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.name' | translate\" id=\"name\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('name')\"\r\n >\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <a class=\"button-ghost\" [routerLink]=\"['./', collection.id]\"\r\n ><span>{{ collection.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-collection=\"item\">\r\n <vdr-chip *ngIf=\"collection.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!collection.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\">\r\n <a\r\n class=\"button-small bg-weight-150\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n queryParamsHandling=\"
|
|
155
|
+
args: [{ selector: 'vdr-collection-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-split-view [rightPanelOpen]=\"activeCollectionId$ | async\" (closeClicked)=\"closeContents()\">\r\n <ng-template vdrSplitViewLeft>\r\n <vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n [activeIndex]=\"activeCollectionIndex$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (changeOrder)=\"onRearrange($event)\"\r\n >\r\n <vdr-bulk-action-menu\r\n locationId=\"collection-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.position' | translate\" id=\"position\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('position')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.position }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.name' | translate\" id=\"name\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('name')\"\r\n >\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <a class=\"button-ghost\" [routerLink]=\"['./', collection.id]\"\r\n ><span>{{ collection.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-collection=\"item\">\r\n <vdr-chip *ngIf=\"collection.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!collection.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\">\r\n <a\r\n class=\"button-small bg-weight-150\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n [queryParams]=\"{ contentsPage: 1 }\"\r\n queryParamsHandling=\"merge\"\r\n >\r\n <span>{{ 'common.view-contents' | translate }}</span>\r\n <clr-icon shape=\"file-group\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n </vdr-collection-data-table>\r\n </ng-template>\r\n <ng-template vdrSplitViewRight [splitViewTitle]=\"activeCollectionTitle$ | async\">\r\n <ng-container *ngIf=\"activeCollectionId$ | async as activeGroup\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\"></vdr-collection-contents>\r\n </ng-container>\r\n </ng-template>\r\n</vdr-split-view>\r\n", styles: [":host{--indent-spacing: 18px}.indent-1{padding-inline-start:var(--indent-spacing)}.indent-2{padding-inline-start:calc(var(--indent-spacing) * 2)}.indent-3{padding-inline-start:calc(var(--indent-spacing) * 3)}.indent-4,.indent-5,.indent-6,.indent-7,.indent-8,.indent-9{padding-inline-start:calc(var(--indent-spacing) * 4)}.child-arrow{margin:1px 6px}.child-arrow.transparent{opacity:0}.breadcrumb{display:flex}.separator{color:var(--color-weight-500);margin:0 3px}\n"] }]
|
|
156
156
|
}], ctorParameters: function () { return [{ type: i1.DataService }, { type: i1.NotificationService }]; } });
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBRUgseUJBQXlCLEVBS3pCLHNCQUFzQixHQUN6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBU2pGLE1BQU0sT0FBTyx1QkFDVCxTQUFRLHNCQUF1RTtJQXNDL0UsWUFBc0IsV0FBd0IsRUFBVSxtQkFBd0M7UUFDNUYsS0FBSyxFQUFFLENBQUM7UUFEVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUEvQmhHLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQ2xCLGlCQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELFlBQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7YUFDM0MsV0FBVyxFQUFFO2FBQ2IsY0FBYyxFQUFFO2FBQ2hCLFNBQVMsQ0FBQztZ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QyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDSCxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEU7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLFdBQVcsRUFBRTtnQkFDVCxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ3JEO1lBQ0QsbUJBQW1CLEVBQUUsT0FBTztZQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDekIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F4S1EsdUJBQXVCO2tHQUF2Qix1QkFBdUIsa0ZDckJwQywyaFFBZ0tBOzsyRkQzSWEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgR2V0Q29sbGVjdGlvbkxpc3REb2N1bWVudCxcclxuICAgIEdldENvbGxlY3Rpb25MaXN0UXVlcnksXHJcbiAgICBJdGVtT2YsXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgVHlwZWRCYXNlTGlzdENvbXBvbmVudCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25PcmRlckV2ZW50IH0gZnJvbSAnLi4vY29sbGVjdGlvbi1kYXRhLXRhYmxlL2NvbGxlY3Rpb24tZGF0YS10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1jb2xsZWN0aW9uLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24tbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWxpc3QuY29tcG9uZW50LnNjc3MnLCAnLi9jb2xsZWN0aW9uLWxpc3QtY29tbW9uLnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkxpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlTGlzdENvbXBvbmVudDx0eXBlb2YgR2V0Q29sbGVjdGlvbkxpc3REb2N1bWVudCwgJ2NvbGxlY3Rpb25zJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICAgIGFjdGl2ZUNvbGxlY3Rpb25JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uSW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uVGl0bGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBzdWJDb2xsZWN0aW9ucyQ6IE9ic2VydmFibGU8QXJyYXk8SXRlbU9mPEdldENvbGxlY3Rpb25MaXN0UXVlcnksICdjb2xsZWN0aW9ucyc+Pj47XHJcbiAgICBleHBhbmRlZElkczogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0NvbGxlY3Rpb24nKTtcclxuICAgIHJlYWRvbmx5IGZpbHRlcnMgPSB0aGlzLmNyZWF0ZUZpbHRlckNvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5hZGRJZEZpbHRlcigpXHJcbiAgICAgICAgLmFkZERhdGVGaWx0ZXJzKClcclxuICAgICAgICAuYWRkRmlsdGVyKHtcclxuICAgICAgICAgICAgbmFtZTogJ3NsdWcnLFxyXG4gICAgICAgICAgICBsYWJlbDogXygnY29tbW9uLnNsdWcnKSxcclxuICAgICAgICAgICAgdHlwZTogeyBraW5kOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdzbHVnJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hZGRGaWx0ZXIoe1xyXG4gICAgICAgICAgICBuYW1lOiAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgICAgIGxhYmVsOiBfKCdjb21tb24udmlzaWJpbGl0eScpLFxyXG4gICAgICAgICAgICB0b0ZpbHRlcklucHV0OiB2YWx1ZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgaXNQcml2YXRlOiB7IGVxOiAhdmFsdWUgfSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkQ3VzdG9tRmllbGRGaWx0ZXJzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuICAgIHJlYWRvbmx5IHNvcnRzID0gdGhpcy5jcmVhdGVTb3J0Q29sbGVjdGlvbigpXHJcbiAgICAgICAgLmRlZmF1bHRTb3J0KCdwb3NpdGlvbicsICdBU0MnKVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ2NyZWF0ZWRBdCcgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICd1cGRhdGVkQXQnIH0pXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAnbmFtZScgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICdzbHVnJyB9KVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ3Bvc2l0aW9uJyB9KVxyXG4gICAgICAgIC5hZGRDdXN0b21GaWVsZFNvcnRzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHN1cGVyLmNvbmZpZ3VyZSh7XHJcbiAgICAgICAgICAgIGRvY3VtZW50OiBHZXRDb2xsZWN0aW9uTGlzdERvY3VtZW50LFxyXG4gICAgICAgICAgICBnZXRJdGVtczogZGF0YSA9PiBkYXRhLmNvbGxlY3Rpb25zLFxyXG4gICAgICAgICAgICBzZXRWYXJpYWJsZXM6IChza2lwLCBfdGFrZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9wTGV2ZWxPbmx5ID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1Db250cm9sLnZhbHVlID09PSAnJyAmJiB0aGlzLmZpbHRlcnMuYWN0aXZlRmlsdGVycy5sZW5ndGggPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IF90YWtlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHsgY29udGFpbnM6IHRoaXMuc2VhcmNoVGVybUNvbnRyb2wudmFsdWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZmlsdGVycy5jcmVhdGVGaWx0ZXJJbnB1dCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BMZXZlbE9ubHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuc29ydHMuY3JlYXRlU29ydElucHV0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlZnJlc2hMaXN0T25DaGFuZ2VzOiBbdGhpcy5maWx0ZXJzLnZhbHVlQ2hhbmdlcywgdGhpcy5zb3J0cy52YWx1ZUNoYW5nZXNdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVDb2xsZWN0aW9uSWQkID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocG0gPT4gcG0uZ2V0KCdjb250ZW50cycpKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGV4cGFuZGVkSWRzJCA9IHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocXBtID0+IHFwbS5nZXQoJ2V4cGFuZGVkJykpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBtYXAoaWRzID0+IChpZHMgPyBpZHMuc3BsaXQoJywnKSA6IFtdKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBleHBhbmRlZElkcyQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShpZHMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkSWRzID0gaWRzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3ViQ29sbGVjdGlvbnMkID0gY29tYmluZUxhdGVzdChleHBhbmRlZElkcyQsIHRoaXMucmVmcmVzaCQpLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoW2lkc10pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q29sbGVjdGlvbnMoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZTogOTk5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHsgaW46IGlkcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFN0cmVhbShkYXRhID0+IGRhdGEuY29sbGVjdGlvbnMuaXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25UaXRsZSQgPSBjb21iaW5lTGF0ZXN0KFxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25JZCQsXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMkLFxyXG4gICAgICAgICAgICB0aGlzLnN1YkNvbGxlY3Rpb25zJCxcclxuICAgICAgICApLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2lkLCBjb2xsZWN0aW9ucywgc3ViQ29sbGVjdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IFsuLi5jb2xsZWN0aW9ucywgLi4uc3ViQ29sbGVjdGlvbnNdLmZpbmQoYyA9PiBjLmlkID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2gubmFtZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29sbGVjdGlvbkluZGV4JCA9IGNvbWJpbmVMYXRlc3QoXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29sbGVjdGlvbklkJCxcclxuICAgICAgICAgICAgdGhpcy5pdGVtcyQsXHJcbiAgICAgICAgICAgIHRoaXMuc3ViQ29sbGVjdGlvbnMkLFxyXG4gICAgICAgICkucGlwZShcclxuICAgICAgICAgICAgbWFwKChbaWQsIGNvbGxlY3Rpb25zLCBzdWJDb2xsZWN0aW9uc10pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbENvbGxlY3Rpb25zOiB0eXBlb2YgY29sbGVjdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sbGVjdGlvbnMucHVzaChjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViQ29sbGVjdGlvbk1hdGNoZXMgPSBzdWJDb2xsZWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0+IGMucGFyZW50SWQgJiYgYy5wYXJlbnRJZCA9PT0gY29sbGVjdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sbGVjdGlvbnMucHVzaCguLi5zdWJDb2xsZWN0aW9uTWF0Y2hlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxDb2xsZWN0aW9ucy5maW5kSW5kZXgoYyA9PiBjLmlkID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SZWFycmFuZ2UoZXZlbnQ6IENvbGxlY3Rpb25PcmRlckV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLm1vdmVDb2xsZWN0aW9uKFtldmVudF0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktc2F2ZWQtY2hhbmdlcycpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXNhdmUtY2hhbmdlcy1lcnJvcicpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUNvbnRlbnRzKCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMgfTtcclxuICAgICAgICBkZWxldGUgcGFyYW1zLmNvbnRlbnRzO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nLCBwYXJhbXNdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGFuZ3VhZ2UoY29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jbGllbnQuc2V0Q29udGVudExhbmd1YWdlKGNvZGUpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUV4cGFuZGVkKGNvbGxlY3Rpb246IEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPikge1xyXG4gICAgICAgIGxldCBleHBhbmRlZElkcyA9IHRoaXMuZXhwYW5kZWRJZHM7XHJcbiAgICAgICAgaWYgKCFleHBhbmRlZElkcy5pbmNsdWRlcyhjb2xsZWN0aW9uLmlkKSkge1xyXG4gICAgICAgICAgICBleHBhbmRlZElkcy5wdXNoKGNvbGxlY3Rpb24uaWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cGFuZGVkSWRzID0gZXhwYW5kZWRJZHMuZmlsdGVyKGlkID0+IGlkICE9PSBjb2xsZWN0aW9uLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLyddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWRJZHMuZmlsdGVyKGlkID0+ICEhaWQpLmpvaW4oJywnKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwiY29udGVudExhbmd1YWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG4gICAgICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwiY29sbGVjdGlvbi1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiWydDcmVhdGVDYXRhbG9nJywgJ0NyZWF0ZUNvbGxlY3Rpb24nXVwiXHJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4vY3JlYXRlJ11cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmNyZWF0ZS1uZXctY29sbGVjdGlvbicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuPHZkci1zcGxpdC12aWV3IFtyaWdodFBhbmVsT3Blbl09XCJhY3RpdmVDb2xsZWN0aW9uSWQkIHwgYXN5bmNcIiAoY2xvc2VDbGlja2VkKT1cImNsb3NlQ29udGVudHMoKVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHZkclNwbGl0Vmlld0xlZnQ+XHJcbiAgICAgICAgPHZkci1jb2xsZWN0aW9uLWRhdGEtdGFibGVcclxuICAgICAgICAgICAgY2xhc3M9XCJtdC0yXCJcclxuICAgICAgICAgICAgaWQ9XCJjb2xsZWN0aW9uLWxpc3RcIlxyXG4gICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbc3ViQ29sbGVjdGlvbnNdPVwic3ViQ29sbGVjdGlvbnMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgICAgICAgICAgW2FjdGl2ZUluZGV4XT1cImFjdGl2ZUNvbGxlY3Rpb25JbmRleCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInNldFBhZ2VOdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0SXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAoY2hhbmdlT3JkZXIpPVwib25SZWFycmFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8dmRyLWJ1bGstYWN0aW9uLW1lbnVcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uSWQ9XCJjb2xsZWN0aW9uLWxpc3RcIlxyXG4gICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTWFuYWdlcl09XCJzZWxlY3Rpb25NYW5hZ2VyXCJcclxuICAgICAgICAgICAgPjwvdmRyLWJ1bGstYWN0aW9uLW1lbnU+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLXNlYXJjaFxyXG4gICAgICAgICAgICAgICAgW3NlYXJjaFRlcm1Db250cm9sXT1cInNlYXJjaFRlcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICAgIFtzZWFyY2hUZXJtUGxhY2Vob2xkZXJdPVwiJ2NvbW1vbi5zZWFyY2gtYnktbmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICA+PC92ZHItZHQyLXNlYXJjaD5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJpZFwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbGxlY3Rpb24uaWQgfX1cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jcmVhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiIGlkPVwiY3JlYXRlZC1hdFwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCdjcmVhdGVkQXQnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBpZD1cInVwZGF0ZWQtYXRcIlxyXG4gICAgICAgICAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgndXBkYXRlZEF0JylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sbGVjdGlvbi51cGRhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgICAgICAgICBbaGVhZGluZ109XCInY29tbW9uLnBvc2l0aW9uJyB8IHRyYW5zbGF0ZVwiIGlkPVwicG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgncG9zaXRpb24nKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLnBvc2l0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW29wdGlvbmFsXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgnbmFtZScpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiIGxldC1kZXB0aD1cImRlcHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCInaW5kZW50LScgKyBkZXB0aFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaWxkLWFycm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRyYW5zcGFyZW50XT1cImRlcHRoID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJjaGlsZC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbGxlY3Rpb24uY2hpbGRyZW4/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tYnV0dG9uIGZvbGRlci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbGxlY3Rpb24uY2hpbGRyZW4/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbmRlZChjb2xsZWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmb2xkZXJcIiAqbmdJZj1cIiFleHBhbmRlZElkcy5pbmNsdWRlcyhjb2xsZWN0aW9uLmlkKVwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImZvbGRlci1vcGVuXCIgKm5nSWY9XCJleHBhbmRlZElkcy5pbmNsdWRlcyhjb2xsZWN0aW9uLmlkKVwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidXR0b24tZ2hvc3RcIiBbcm91dGVyTGlua109XCJbJy4vJywgY29sbGVjdGlvbi5pZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PHNwYW4+e3sgY29sbGVjdGlvbi5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJhcnJvdyByaWdodFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uYnJlYWRjcnVtYicgfCB0cmFuc2xhdGVcIiBpZD1cImJyZWFkY3J1bWJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJlYWRjcnVtYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sbGVjdGlvbiB8IGNvbGxlY3Rpb25CcmVhZGNydW1iIGFzIGJyZWFkY3J1bWJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnJlYWRjcnVtYnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBicmVhZGNydW1ic1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiPi88L3NwYW4+e3sgaXRlbS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VwYXJhdG9yXCIgKm5nSWY9XCIhYnJlYWRjcnVtYnMubGVuZ3RoXCI+Lzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5zbHVnJyB8IHRyYW5zbGF0ZVwiIGlkPVwic2x1Z1wiIFtzb3J0XT1cInNvcnRzLmdldCgnc2x1ZycpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sbGVjdGlvbi5zbHVnIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi52aXNpYmlsaXR5JyB8IHRyYW5zbGF0ZVwiIGlkPVwidmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cImNvbGxlY3Rpb24uaXNQcml2YXRlXCIgY29sb3JUeXBlPVwid2FybmluZ1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb21tb24ucHJpdmF0ZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cIiFjb2xsZWN0aW9uLmlzUHJpdmF0ZVwiIGNvbG9yVHlwZT1cInN1Y2Nlc3NcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uLnB1YmxpYycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24udmlldy1jb250ZW50cycgfCB0cmFuc2xhdGVcIiBpZD1cInZpZXctY29udGVudHNcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zbWFsbCBiZy13ZWlnaHQtMTUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycuLycsIHsgY29udGVudHM6IGNvbGxlY3Rpb24uaWQgfV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nPVwicHJlc2VydmVcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ2NvbW1vbi52aWV3LWNvbnRlbnRzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZmlsZS1ncm91cFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY3VzdG9tLWZpZWxkLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGN1c3RvbUZpZWxkIG9mIGN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRdPVwiY3VzdG9tRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgW3NvcnRzXT1cInNvcnRzXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L3Zkci1jb2xsZWN0aW9uLWRhdGEtdGFibGU+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHZkclNwbGl0Vmlld1JpZ2h0IFtzcGxpdFZpZXdUaXRsZV09XCJhY3RpdmVDb2xsZWN0aW9uVGl0bGUkIHwgYXN5bmNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlQ29sbGVjdGlvbklkJCB8IGFzeW5jIGFzIGFjdGl2ZUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDx2ZHItY29sbGVjdGlvbi1jb250ZW50cyBbY29sbGVjdGlvbklkXT1cImFjdGl2ZUNvbGxlY3Rpb25JZCQgfCBhc3luY1wiPjwvdmRyLWNvbGxlY3Rpb24tY29udGVudHM+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3Zkci1zcGxpdC12aWV3PlxyXG4iXX0=
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBRUgseUJBQXlCLEVBS3pCLHNCQUFzQixHQUN6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBU2pGLE1BQU0sT0FBTyx1QkFDVCxTQUFRLHNCQUF1RTtJQXNDL0UsWUFBc0IsV0FBd0IsRUFBVSxtQkFBd0M7UUFDNUYsS0FBSyxFQUFFLENBQUM7UUFEVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUEvQmhHLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQ2xCLGlCQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELFlBQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7YUFDM0MsV0FBVyxFQUFFO2FBQ2IsY0FBYyxFQUFFO2FBQ2hCLFNBQVMsQ0FBQztZ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QyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDSCxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEU7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLFdBQVcsRUFBRTtnQkFDVCxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ3JEO1lBQ0QsbUJBQW1CLEVBQUUsT0FBTztZQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDekIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F4S1EsdUJBQXVCO2tHQUF2Qix1QkFBdUIsa0ZDckJwQyx5bFFBaUtBOzsyRkQ1SWEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgR2V0Q29sbGVjdGlvbkxpc3REb2N1bWVudCxcclxuICAgIEdldENvbGxlY3Rpb25MaXN0UXVlcnksXHJcbiAgICBJdGVtT2YsXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgVHlwZWRCYXNlTGlzdENvbXBvbmVudCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25PcmRlckV2ZW50IH0gZnJvbSAnLi4vY29sbGVjdGlvbi1kYXRhLXRhYmxlL2NvbGxlY3Rpb24tZGF0YS10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1jb2xsZWN0aW9uLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24tbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWxpc3QuY29tcG9uZW50LnNjc3MnLCAnLi9jb2xsZWN0aW9uLWxpc3QtY29tbW9uLnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkxpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlTGlzdENvbXBvbmVudDx0eXBlb2YgR2V0Q29sbGVjdGlvbkxpc3REb2N1bWVudCwgJ2NvbGxlY3Rpb25zJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICAgIGFjdGl2ZUNvbGxlY3Rpb25JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uSW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uVGl0bGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBzdWJDb2xsZWN0aW9ucyQ6IE9ic2VydmFibGU8QXJyYXk8SXRlbU9mPEdldENvbGxlY3Rpb25MaXN0UXVlcnksICdjb2xsZWN0aW9ucyc+Pj47XHJcbiAgICBleHBhbmRlZElkczogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0NvbGxlY3Rpb24nKTtcclxuICAgIHJlYWRvbmx5IGZpbHRlcnMgPSB0aGlzLmNyZWF0ZUZpbHRlckNvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5hZGRJZEZpbHRlcigpXHJcbiAgICAgICAgLmFkZERhdGVGaWx0ZXJzKClcclxuICAgICAgICAuYWRkRmlsdGVyKHtcclxuICAgICAgICAgICAgbmFtZTogJ3NsdWcnLFxyXG4gICAgICAgICAgICBsYWJlbDogXygnY29tbW9uLnNsdWcnKSxcclxuICAgICAgICAgICAgdHlwZTogeyBraW5kOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdzbHVnJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hZGRGaWx0ZXIoe1xyXG4gICAgICAgICAgICBuYW1lOiAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgICAgIGxhYmVsOiBfKCdjb21tb24udmlzaWJpbGl0eScpLFxyXG4gICAgICAgICAgICB0b0ZpbHRlcklucHV0OiB2YWx1ZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgaXNQcml2YXRlOiB7IGVxOiAhdmFsdWUgfSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkQ3VzdG9tRmllbGRGaWx0ZXJzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuICAgIHJlYWRvbmx5IHNvcnRzID0gdGhpcy5jcmVhdGVTb3J0Q29sbGVjdGlvbigpXHJcbiAgICAgICAgLmRlZmF1bHRTb3J0KCdwb3NpdGlvbicsICdBU0MnKVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ2NyZWF0ZWRBdCcgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICd1cGRhdGVkQXQnIH0pXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAnbmFtZScgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICdzbHVnJyB9KVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ3Bvc2l0aW9uJyB9KVxyXG4gICAgICAgIC5hZGRDdXN0b21GaWVsZFNvcnRzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHN1cGVyLmNvbmZpZ3VyZSh7XHJcbiAgICAgICAgICAgIGRvY3VtZW50OiBHZXRDb2xsZWN0aW9uTGlzdERvY3VtZW50LFxyXG4gICAgICAgICAgICBnZXRJdGVtczogZGF0YSA9PiBkYXRhLmNvbGxlY3Rpb25zLFxyXG4gICAgICAgICAgICBzZXRWYXJpYWJsZXM6IChza2lwLCBfdGFrZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9wTGV2ZWxPbmx5ID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1Db250cm9sLnZhbHVlID09PSAnJyAmJiB0aGlzLmZpbHRlcnMuYWN0aXZlRmlsdGVycy5sZW5ndGggPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IF90YWtlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHsgY29udGFpbnM6IHRoaXMuc2VhcmNoVGVybUNvbnRyb2wudmFsdWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZmlsdGVycy5jcmVhdGVGaWx0ZXJJbnB1dCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BMZXZlbE9ubHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuc29ydHMuY3JlYXRlU29ydElucHV0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlZnJlc2hMaXN0T25DaGFuZ2VzOiBbdGhpcy5maWx0ZXJzLnZhbHVlQ2hhbmdlcywgdGhpcy5zb3J0cy52YWx1ZUNoYW5nZXNdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVDb2xsZWN0aW9uSWQkID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocG0gPT4gcG0uZ2V0KCdjb250ZW50cycpKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGV4cGFuZGVkSWRzJCA9IHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocXBtID0+IHFwbS5nZXQoJ2V4cGFuZGVkJykpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBtYXAoaWRzID0+IChpZHMgPyBpZHMuc3BsaXQoJywnKSA6IFtdKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBleHBhbmRlZElkcyQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShpZHMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkSWRzID0gaWRzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3ViQ29sbGVjdGlvbnMkID0gY29tYmluZUxhdGVzdChleHBhbmRlZElkcyQsIHRoaXMucmVmcmVzaCQpLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoW2lkc10pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q29sbGVjdGlvbnMoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZTogOTk5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHsgaW46IGlkcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFN0cmVhbShkYXRhID0+IGRhdGEuY29sbGVjdGlvbnMuaXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25UaXRsZSQgPSBjb21iaW5lTGF0ZXN0KFxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25JZCQsXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMkLFxyXG4gICAgICAgICAgICB0aGlzLnN1YkNvbGxlY3Rpb25zJCxcclxuICAgICAgICApLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2lkLCBjb2xsZWN0aW9ucywgc3ViQ29sbGVjdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IFsuLi5jb2xsZWN0aW9ucywgLi4uc3ViQ29sbGVjdGlvbnNdLmZpbmQoYyA9PiBjLmlkID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2gubmFtZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29sbGVjdGlvbkluZGV4JCA9IGNvbWJpbmVMYXRlc3QoXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29sbGVjdGlvbklkJCxcclxuICAgICAgICAgICAgdGhpcy5pdGVtcyQsXHJcbiAgICAgICAgICAgIHRoaXMuc3ViQ29sbGVjdGlvbnMkLFxyXG4gICAgICAgICkucGlwZShcclxuICAgICAgICAgICAgbWFwKChbaWQsIGNvbGxlY3Rpb25zLCBzdWJDb2xsZWN0aW9uc10pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbENvbGxlY3Rpb25zOiB0eXBlb2YgY29sbGVjdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sbGVjdGlvbnMucHVzaChjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViQ29sbGVjdGlvbk1hdGNoZXMgPSBzdWJDb2xsZWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0+IGMucGFyZW50SWQgJiYgYy5wYXJlbnRJZCA9PT0gY29sbGVjdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sbGVjdGlvbnMucHVzaCguLi5zdWJDb2xsZWN0aW9uTWF0Y2hlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxDb2xsZWN0aW9ucy5maW5kSW5kZXgoYyA9PiBjLmlkID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SZWFycmFuZ2UoZXZlbnQ6IENvbGxlY3Rpb25PcmRlckV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLm1vdmVDb2xsZWN0aW9uKFtldmVudF0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktc2F2ZWQtY2hhbmdlcycpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXNhdmUtY2hhbmdlcy1lcnJvcicpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUNvbnRlbnRzKCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMgfTtcclxuICAgICAgICBkZWxldGUgcGFyYW1zLmNvbnRlbnRzO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nLCBwYXJhbXNdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGFuZ3VhZ2UoY29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jbGllbnQuc2V0Q29udGVudExhbmd1YWdlKGNvZGUpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUV4cGFuZGVkKGNvbGxlY3Rpb246IEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPikge1xyXG4gICAgICAgIGxldCBleHBhbmRlZElkcyA9IHRoaXMuZXhwYW5kZWRJZHM7XHJcbiAgICAgICAgaWYgKCFleHBhbmRlZElkcy5pbmNsdWRlcyhjb2xsZWN0aW9uLmlkKSkge1xyXG4gICAgICAgICAgICBleHBhbmRlZElkcy5wdXNoKGNvbGxlY3Rpb24uaWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cGFuZGVkSWRzID0gZXhwYW5kZWRJZHMuZmlsdGVyKGlkID0+IGlkICE9PSBjb2xsZWN0aW9uLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLyddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWRJZHMuZmlsdGVyKGlkID0+ICEhaWQpLmpvaW4oJywnKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwiY29udGVudExhbmd1YWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG4gICAgICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwiY29sbGVjdGlvbi1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiWydDcmVhdGVDYXRhbG9nJywgJ0NyZWF0ZUNvbGxlY3Rpb24nXVwiXHJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4vY3JlYXRlJ11cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmNyZWF0ZS1uZXctY29sbGVjdGlvbicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuPHZkci1zcGxpdC12aWV3IFtyaWdodFBhbmVsT3Blbl09XCJhY3RpdmVDb2xsZWN0aW9uSWQkIHwgYXN5bmNcIiAoY2xvc2VDbGlja2VkKT1cImNsb3NlQ29udGVudHMoKVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHZkclNwbGl0Vmlld0xlZnQ+XHJcbiAgICAgICAgPHZkci1jb2xsZWN0aW9uLWRhdGEtdGFibGVcclxuICAgICAgICAgICAgY2xhc3M9XCJtdC0yXCJcclxuICAgICAgICAgICAgaWQ9XCJjb2xsZWN0aW9uLWxpc3RcIlxyXG4gICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbc3ViQ29sbGVjdGlvbnNdPVwic3ViQ29sbGVjdGlvbnMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgICAgICAgICAgW2FjdGl2ZUluZGV4XT1cImFjdGl2ZUNvbGxlY3Rpb25JbmRleCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInNldFBhZ2VOdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0SXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAoY2hhbmdlT3JkZXIpPVwib25SZWFycmFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8dmRyLWJ1bGstYWN0aW9uLW1lbnVcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uSWQ9XCJjb2xsZWN0aW9uLWxpc3RcIlxyXG4gICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTWFuYWdlcl09XCJzZWxlY3Rpb25NYW5hZ2VyXCJcclxuICAgICAgICAgICAgPjwvdmRyLWJ1bGstYWN0aW9uLW1lbnU+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLXNlYXJjaFxyXG4gICAgICAgICAgICAgICAgW3NlYXJjaFRlcm1Db250cm9sXT1cInNlYXJjaFRlcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICAgIFtzZWFyY2hUZXJtUGxhY2Vob2xkZXJdPVwiJ2NvbW1vbi5zZWFyY2gtYnktbmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICA+PC92ZHItZHQyLXNlYXJjaD5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJpZFwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbGxlY3Rpb24uaWQgfX1cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jcmVhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiIGlkPVwiY3JlYXRlZC1hdFwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCdjcmVhdGVkQXQnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBpZD1cInVwZGF0ZWQtYXRcIlxyXG4gICAgICAgICAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgndXBkYXRlZEF0JylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sbGVjdGlvbi51cGRhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgICAgICAgICBbaGVhZGluZ109XCInY29tbW9uLnBvc2l0aW9uJyB8IHRyYW5zbGF0ZVwiIGlkPVwicG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgncG9zaXRpb24nKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLnBvc2l0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW29wdGlvbmFsXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgnbmFtZScpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiIGxldC1kZXB0aD1cImRlcHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCInaW5kZW50LScgKyBkZXB0aFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaWxkLWFycm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRyYW5zcGFyZW50XT1cImRlcHRoID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJjaGlsZC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbGxlY3Rpb24uY2hpbGRyZW4/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tYnV0dG9uIGZvbGRlci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbGxlY3Rpb24uY2hpbGRyZW4/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbmRlZChjb2xsZWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmb2xkZXJcIiAqbmdJZj1cIiFleHBhbmRlZElkcy5pbmNsdWRlcyhjb2xsZWN0aW9uLmlkKVwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImZvbGRlci1vcGVuXCIgKm5nSWY9XCJleHBhbmRlZElkcy5pbmNsdWRlcyhjb2xsZWN0aW9uLmlkKVwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidXR0b24tZ2hvc3RcIiBbcm91dGVyTGlua109XCJbJy4vJywgY29sbGVjdGlvbi5pZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PHNwYW4+e3sgY29sbGVjdGlvbi5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJhcnJvdyByaWdodFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uYnJlYWRjcnVtYicgfCB0cmFuc2xhdGVcIiBpZD1cImJyZWFkY3J1bWJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJlYWRjcnVtYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sbGVjdGlvbiB8IGNvbGxlY3Rpb25CcmVhZGNydW1iIGFzIGJyZWFkY3J1bWJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnJlYWRjcnVtYnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBicmVhZGNydW1ic1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiPi88L3NwYW4+e3sgaXRlbS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VwYXJhdG9yXCIgKm5nSWY9XCIhYnJlYWRjcnVtYnMubGVuZ3RoXCI+Lzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5zbHVnJyB8IHRyYW5zbGF0ZVwiIGlkPVwic2x1Z1wiIFtzb3J0XT1cInNvcnRzLmdldCgnc2x1ZycpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sbGVjdGlvbi5zbHVnIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi52aXNpYmlsaXR5JyB8IHRyYW5zbGF0ZVwiIGlkPVwidmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cImNvbGxlY3Rpb24uaXNQcml2YXRlXCIgY29sb3JUeXBlPVwid2FybmluZ1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb21tb24ucHJpdmF0ZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cIiFjb2xsZWN0aW9uLmlzUHJpdmF0ZVwiIGNvbG9yVHlwZT1cInN1Y2Nlc3NcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uLnB1YmxpYycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24udmlldy1jb250ZW50cycgfCB0cmFuc2xhdGVcIiBpZD1cInZpZXctY29udGVudHNcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zbWFsbCBiZy13ZWlnaHQtMTUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycuLycsIHsgY29udGVudHM6IGNvbGxlY3Rpb24uaWQgfV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwieyBjb250ZW50c1BhZ2U6IDEgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc9XCJtZXJnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnY29tbW9uLnZpZXctY29udGVudHMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmaWxlLWdyb3VwXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jdXN0b20tZmllbGQtY29sdW1uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3VzdG9tRmllbGQgb2YgY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZF09XCJjdXN0b21GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICBbc29ydHNdPVwic29ydHNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvdmRyLWNvbGxlY3Rpb24tZGF0YS10YWJsZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgdmRyU3BsaXRWaWV3UmlnaHQgW3NwbGl0Vmlld1RpdGxlXT1cImFjdGl2ZUNvbGxlY3Rpb25UaXRsZSQgfCBhc3luY1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVDb2xsZWN0aW9uSWQkIHwgYXN5bmMgYXMgYWN0aXZlR3JvdXBcIj5cclxuICAgICAgICAgICAgPHZkci1jb2xsZWN0aW9uLWNvbnRlbnRzIFtjb2xsZWN0aW9uSWRdPVwiYWN0aXZlQ29sbGVjdGlvbklkJCB8IGFzeW5jXCI+PC92ZHItY29sbGVjdGlvbi1jb250ZW50cz5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvdmRyLXNwbGl0LXZpZXc+XHJcbiJdfQ==
|