@vendure/admin-ui 2.0.6 → 2.1.0-next.0
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/core/common/generated-types.d.ts +83 -18
- package/core/common/version.d.ts +1 -1
- package/core/data/definitions/facet-definitions.d.ts +1 -0
- package/esm2022/catalog/components/collection-data-table/collection-data-table.component.mjs +2 -2
- package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +2 -2
- package/esm2022/catalog/components/collection-list/collection-list.component.mjs +2 -2
- package/esm2022/catalog/components/collection-tree/collection-tree-node.component.mjs +3 -3
- package/esm2022/catalog/components/facet-list/facet-list.component.mjs +8 -8
- package/esm2022/catalog/components/move-collections-dialog/move-collections-dialog.component.mjs +2 -2
- package/esm2022/catalog/components/product-detail/product-detail.component.mjs +2 -2
- package/esm2022/catalog/components/product-list/product-list.component.mjs +2 -2
- package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +2 -2
- package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +2 -2
- package/esm2022/catalog/components/product-variants-editor/product-variants-editor.component.mjs +1 -1
- package/esm2022/core/common/generated-types.mjs +8 -7
- package/esm2022/core/common/version.mjs +2 -2
- package/esm2022/core/components/app-shell/app-shell.component.mjs +2 -2
- package/esm2022/core/components/main-nav/main-nav.component.mjs +2 -2
- package/esm2022/core/components/settings-nav/settings-nav.component.mjs +2 -2
- package/esm2022/core/components/theme-switcher/theme-switcher.component.mjs +2 -2
- package/esm2022/core/components/user-menu/user-menu.component.mjs +2 -2
- package/esm2022/core/data/definitions/facet-definitions.mjs +24 -1
- package/esm2022/core/data/definitions/promotion-definitions.mjs +2 -1
- package/esm2022/core/data/providers/promotion-data.service.mjs +3 -1
- package/esm2022/core/shared/components/action-bar/action-bar.component.mjs +2 -2
- package/esm2022/core/shared/components/affixed-input/affixed-input.component.mjs +2 -2
- package/esm2022/core/shared/components/asset-gallery/asset-gallery.component.mjs +2 -2
- package/esm2022/core/shared/components/asset-preview/asset-preview.component.mjs +2 -2
- package/esm2022/core/shared/components/card/card.component.mjs +2 -2
- package/esm2022/core/shared/components/channel-assignment-control/channel-assignment-control.component.mjs +2 -2
- package/esm2022/core/shared/components/channel-badge/channel-badge.component.mjs +2 -2
- package/esm2022/core/shared/components/chip/chip.component.mjs +2 -2
- package/esm2022/core/shared/components/configurable-input/configurable-input.component.mjs +2 -2
- package/esm2022/core/shared/components/customer-label/customer-label.component.mjs +2 -2
- package/esm2022/core/shared/components/data-table-2/data-table-search.component.mjs +2 -2
- package/esm2022/core/shared/components/data-table-2/data-table2.component.mjs +2 -2
- package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +2 -2
- package/esm2022/core/shared/components/datetime-picker/datetime-picker.component.mjs +2 -2
- package/esm2022/core/shared/components/dropdown/dropdown-menu.component.mjs +2 -2
- package/esm2022/core/shared/components/edit-note-dialog/edit-note-dialog.component.mjs +2 -2
- package/esm2022/core/shared/components/facet-value-chip/facet-value-chip.component.mjs +2 -2
- package/esm2022/core/shared/components/object-tree/object-tree.component.mjs +3 -3
- package/esm2022/core/shared/components/order-state-label/order-state-label.component.mjs +2 -2
- package/esm2022/core/shared/components/page-block/page-block.component.mjs +2 -2
- package/esm2022/core/shared/components/page-header/page-header.component.mjs +2 -2
- package/esm2022/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.mjs +2 -2
- package/esm2022/core/shared/components/product-search-input/product-search-input.component.mjs +2 -2
- package/esm2022/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +2 -2
- package/esm2022/core/shared/components/radio-card/radio-card.component.mjs +2 -2
- package/esm2022/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +2 -2
- package/esm2022/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.mjs +2 -2
- package/esm2022/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +2 -2
- package/esm2022/core/shared/components/select-toggle/select-toggle.component.mjs +2 -2
- package/esm2022/core/shared/components/split-view/split-view.component.mjs +2 -2
- package/esm2022/core/shared/components/timeline-entry/timeline-entry.component.mjs +2 -2
- package/esm2022/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.mjs +2 -2
- package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +2 -2
- package/esm2022/customer/components/customer-history/customer-history.component.mjs +2 -2
- package/esm2022/login/components/login/login.component.mjs +2 -2
- package/esm2022/marketing/components/promotion-detail/promotion-detail.component.mjs +6 -3
- package/esm2022/marketing/components/promotion-list/promotion-list.component.mjs +11 -4
- package/esm2022/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +2 -2
- package/esm2022/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +2 -2
- package/esm2022/order/components/order-data-table/order-data-table.component.mjs +2 -2
- package/esm2022/order/components/order-editor/order-editor.component.mjs +2 -2
- package/esm2022/order/components/order-history/order-history.component.mjs +2 -2
- package/esm2022/order/components/order-payment-card/order-payment-card.component.mjs +2 -2
- package/esm2022/order/components/order-process-graph/order-process-node.component.mjs +2 -2
- package/esm2022/order/components/order-table/order-table.component.mjs +2 -2
- package/esm2022/order/components/refund-order-dialog/refund-order-dialog.component.mjs +2 -2
- package/esm2022/order/components/simple-item-list/simple-item-list.component.mjs +2 -2
- package/esm2022/settings/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.mjs +2 -2
- package/esm2022/settings/components/shipping-method-test-result/shipping-method-test-result.component.mjs +2 -2
- package/esm2022/settings/components/zone-list/zone-list.component.mjs +2 -2
- package/esm2022/system/components/health-check/health-check.component.mjs +2 -2
- package/esm2022/system/components/job-list/job-list.component.mjs +2 -2
- package/esm2022/system/components/job-state-label/job-state-label.component.mjs +2 -2
- package/fesm2022/vendure-admin-ui-catalog.mjs +25 -25
- package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-core.mjs +109 -82
- package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-customer.mjs +4 -4
- package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-login.mjs +2 -2
- package/fesm2022/vendure-admin-ui-login.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-marketing.mjs +15 -5
- package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-order.mjs +20 -20
- package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-settings.mjs +6 -6
- package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-system.mjs +6 -6
- package/fesm2022/vendure-admin-ui-system.mjs.map +1 -1
- package/marketing/components/promotion-detail/promotion-detail.component.d.ts +1 -0
- package/marketing/components/promotion-list/promotion-list.component.d.ts +1 -1
- package/package.json +8 -8
- package/static/i18n-messages/ar.json +777 -774
- package/static/i18n-messages/cs.json +777 -774
- package/static/i18n-messages/de.json +777 -774
- package/static/i18n-messages/en.json +777 -774
- package/static/i18n-messages/es.json +777 -774
- package/static/i18n-messages/fr.json +777 -774
- package/static/i18n-messages/he.json +777 -774
- package/static/i18n-messages/it.json +777 -774
- package/static/i18n-messages/pl.json +777 -774
- package/static/i18n-messages/pt_BR.json +777 -774
- package/static/i18n-messages/pt_PT.json +777 -774
- package/static/i18n-messages/ru.json +777 -774
- package/static/i18n-messages/uk.json +777 -774
- package/static/i18n-messages/zh_Hans.json +777 -774
- package/static/i18n-messages/zh_Hant.json +777 -774
- package/static/styles/_mixins.scss +3 -3
- package/static/styles/global/_forms.scss +2 -2
- package/static/styles/global/_global.scss +2 -2
- package/static/styles/global/_overrides.scss +1 -1
- package/static/styles/global/_utilities.scss +4 -4
- package/static/styles/rtl.scss +143 -0
- package/static/styles/styles.scss +2 -0
- package/static/theme.min.css +1 -1
|
@@ -33,6 +33,7 @@ export class PromotionDetailComponent extends TypedBaseDetailComponent {
|
|
|
33
33
|
enabled: true,
|
|
34
34
|
couponCode: null,
|
|
35
35
|
perCustomerUsageLimit: null,
|
|
36
|
+
usageLimit: null,
|
|
36
37
|
startsAt: null,
|
|
37
38
|
endsAt: null,
|
|
38
39
|
conditions: this.formBuilder.array([]),
|
|
@@ -107,6 +108,7 @@ export class PromotionDetailComponent extends TypedBaseDetailComponent {
|
|
|
107
108
|
description: '',
|
|
108
109
|
couponCode: null,
|
|
109
110
|
perCustomerUsageLimit: null,
|
|
111
|
+
usageLimit: null,
|
|
110
112
|
enabled: false,
|
|
111
113
|
conditions: [],
|
|
112
114
|
actions: [],
|
|
@@ -187,6 +189,7 @@ export class PromotionDetailComponent extends TypedBaseDetailComponent {
|
|
|
187
189
|
enabled: entity.enabled,
|
|
188
190
|
couponCode: entity.couponCode,
|
|
189
191
|
perCustomerUsageLimit: entity.perCustomerUsageLimit,
|
|
192
|
+
usageLimit: entity.usageLimit,
|
|
190
193
|
startsAt: entity.startsAt,
|
|
191
194
|
endsAt: entity.endsAt,
|
|
192
195
|
});
|
|
@@ -257,10 +260,10 @@ export class PromotionDetailComponent extends TypedBaseDetailComponent {
|
|
|
257
260
|
}
|
|
258
261
|
}
|
|
259
262
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: PromotionDetailComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DataService }, { token: i2.FormBuilder }, { token: i1.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
260
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: PromotionDetailComponent, selector: "vdr-promotion-detail", usesInheritance: true, ngImport: i0, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"promotion-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdatePromotion'\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <clr-toggle-wrapper>\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'marketing.starts-at' | translate\" for=\"startsAt\">\r\n <vdr-datetime-picker formControlName=\"startsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.ends-at' | translate\" for=\"endsAt\">\r\n <vdr-datetime-picker formControlName=\"endsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.coupon-code' | translate\" for=\"couponCode\">\r\n <input\r\n id=\"couponCode\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"couponCode\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.per-customer-limit' | translate\"\r\n for=\"perCustomerUsageLimit\"\r\n >\r\n <input\r\n id=\"perCustomerUsageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"999\"\r\n formControlName=\"perCustomerUsageLimit\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n [title]=\"'common.custom-fields' | translate\"\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Promotion\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"promotion-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'marketing.conditions' | translate\" formArrayName=\"conditions\">\r\n <div *ngFor=\"let condition of conditions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeCondition($event)\"\r\n [position]=\"i\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operation]=\"condition\"\r\n [operationDefinition]=\"getConditionDefinition(condition)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-condition' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let condition of getAvailableConditions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addCondition(condition)\"\r\n >\r\n {{ condition.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'marketing.actions' | translate\" formArrayName=\"actions\">\r\n <div *ngFor=\"let action of actions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeAction($event)\"\r\n [position]=\"i\"\r\n [operation]=\"action\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operationDefinition]=\"getActionDefinition(action)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-action' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let action of getAvailableActions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addAction(action)\"\r\n >\r\n {{ action.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n", styles: [".item-wrap{white-space:normal}\n"], dependencies: [{ kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i3.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i3.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { 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.ConfigurableInputComponent, selector: "vdr-configurable-input", inputs: ["operation", "operationDefinition", "readonly", "removable", "position"], outputs: ["remove"] }, { kind: "component", type: i1.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "component", type: i1.RichTextEditorComponent, selector: "vdr-rich-text-editor", inputs: ["label", "readonly"] }, { kind: "component", type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { 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.DatetimePickerComponent, selector: "vdr-datetime-picker", inputs: ["yearRange", "weekStartDay", "timeGranularityInterval", "min", "max", "readonly"] }, { kind: "component", type: i1.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { kind: "component", type: i1.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i1.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i1.PageDetailLayoutComponent, selector: "vdr-page-detail-layout" }, { kind: "component", type: i1.PageDetailSidebarComponent, selector: "vdr-page-detail-sidebar" }, { kind: "component", type: i1.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.HasPermissionPipe, name: "hasPermission" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
263
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: PromotionDetailComponent, selector: "vdr-promotion-detail", usesInheritance: true, ngImport: i0, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"promotion-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdatePromotion'\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <clr-toggle-wrapper>\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'marketing.starts-at' | translate\" for=\"startsAt\">\r\n <vdr-datetime-picker formControlName=\"startsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.ends-at' | translate\" for=\"endsAt\">\r\n <vdr-datetime-picker formControlName=\"endsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.coupon-code' | translate\" for=\"couponCode\">\r\n <input\r\n id=\"couponCode\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"couponCode\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.per-customer-limit' | translate\"\r\n [tooltip]=\"'marketing.per-customer-limit-tooltip' | translate\"\r\n for=\"perCustomerUsageLimit\"\r\n >\r\n <input\r\n id=\"perCustomerUsageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"999\"\r\n formControlName=\"perCustomerUsageLimit\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.usage-limit' | translate\"\r\n [tooltip]=\"'marketing.usage-limit-tooltip' | translate\"\r\n for=\"usageLimit\"\r\n >\r\n <input\r\n id=\"usageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"9999999\"\r\n formControlName=\"usageLimit\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n [title]=\"'common.custom-fields' | translate\"\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Promotion\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"promotion-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'marketing.conditions' | translate\" formArrayName=\"conditions\">\r\n <div *ngFor=\"let condition of conditions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeCondition($event)\"\r\n [position]=\"i\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operation]=\"condition\"\r\n [operationDefinition]=\"getConditionDefinition(condition)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-condition' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let condition of getAvailableConditions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addCondition(condition)\"\r\n >\r\n {{ condition.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'marketing.actions' | translate\" formArrayName=\"actions\">\r\n <div *ngFor=\"let action of actions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeAction($event)\"\r\n [position]=\"i\"\r\n [operation]=\"action\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operationDefinition]=\"getActionDefinition(action)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-action' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let action of getAvailableActions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addAction(action)\"\r\n >\r\n {{ action.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n", styles: [".item-wrap{white-space:normal}\n"], dependencies: [{ kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i3.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i3.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { 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.ConfigurableInputComponent, selector: "vdr-configurable-input", inputs: ["operation", "operationDefinition", "readonly", "removable", "position"], outputs: ["remove"] }, { kind: "component", type: i1.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "component", type: i1.RichTextEditorComponent, selector: "vdr-rich-text-editor", inputs: ["label", "readonly"] }, { kind: "component", type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { 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.DatetimePickerComponent, selector: "vdr-datetime-picker", inputs: ["yearRange", "weekStartDay", "timeGranularityInterval", "min", "max", "readonly"] }, { kind: "component", type: i1.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { kind: "component", type: i1.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i1.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i1.PageDetailLayoutComponent, selector: "vdr-page-detail-layout" }, { kind: "component", type: i1.PageDetailSidebarComponent, selector: "vdr-page-detail-sidebar" }, { kind: "component", type: i1.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.HasPermissionPipe, name: "hasPermission" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
261
264
|
}
|
|
262
265
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: PromotionDetailComponent, decorators: [{
|
|
263
266
|
type: Component,
|
|
264
|
-
args: [{ selector: 'vdr-promotion-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"promotion-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdatePromotion'\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <clr-toggle-wrapper>\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'marketing.starts-at' | translate\" for=\"startsAt\">\r\n <vdr-datetime-picker formControlName=\"startsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.ends-at' | translate\" for=\"endsAt\">\r\n <vdr-datetime-picker formControlName=\"endsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.coupon-code' | translate\" for=\"couponCode\">\r\n <input\r\n id=\"couponCode\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"couponCode\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.per-customer-limit' | translate\"\r\n for=\"perCustomerUsageLimit\"\r\n >\r\n <input\r\n id=\"perCustomerUsageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"999\"\r\n formControlName=\"perCustomerUsageLimit\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n [title]=\"'common.custom-fields' | translate\"\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Promotion\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"promotion-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'marketing.conditions' | translate\" formArrayName=\"conditions\">\r\n <div *ngFor=\"let condition of conditions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeCondition($event)\"\r\n [position]=\"i\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operation]=\"condition\"\r\n [operationDefinition]=\"getConditionDefinition(condition)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-condition' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let condition of getAvailableConditions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addCondition(condition)\"\r\n >\r\n {{ condition.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'marketing.actions' | translate\" formArrayName=\"actions\">\r\n <div *ngFor=\"let action of actions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeAction($event)\"\r\n [position]=\"i\"\r\n [operation]=\"action\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operationDefinition]=\"getActionDefinition(action)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-action' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let action of getAvailableActions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addAction(action)\"\r\n >\r\n {{ action.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n", styles: [".item-wrap{white-space:normal}\n"] }]
|
|
267
|
+
args: [{ selector: 'vdr-promotion-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"promotion-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdatePromotion'\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <clr-toggle-wrapper>\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'marketing.starts-at' | translate\" for=\"startsAt\">\r\n <vdr-datetime-picker formControlName=\"startsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.ends-at' | translate\" for=\"endsAt\">\r\n <vdr-datetime-picker formControlName=\"endsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.coupon-code' | translate\" for=\"couponCode\">\r\n <input\r\n id=\"couponCode\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"couponCode\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.per-customer-limit' | translate\"\r\n [tooltip]=\"'marketing.per-customer-limit-tooltip' | translate\"\r\n for=\"perCustomerUsageLimit\"\r\n >\r\n <input\r\n id=\"perCustomerUsageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"999\"\r\n formControlName=\"perCustomerUsageLimit\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.usage-limit' | translate\"\r\n [tooltip]=\"'marketing.usage-limit-tooltip' | translate\"\r\n for=\"usageLimit\"\r\n >\r\n <input\r\n id=\"usageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"9999999\"\r\n formControlName=\"usageLimit\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n [title]=\"'common.custom-fields' | translate\"\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Promotion\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"promotion-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'marketing.conditions' | translate\" formArrayName=\"conditions\">\r\n <div *ngFor=\"let condition of conditions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeCondition($event)\"\r\n [position]=\"i\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operation]=\"condition\"\r\n [operationDefinition]=\"getConditionDefinition(condition)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-condition' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let condition of getAvailableConditions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addCondition(condition)\"\r\n >\r\n {{ condition.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'marketing.actions' | translate\" formArrayName=\"actions\">\r\n <div *ngFor=\"let action of actions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeAction($event)\"\r\n [position]=\"i\"\r\n [operation]=\"action\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operationDefinition]=\"getActionDefinition(action)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-action' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let action of getAvailableActions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addAction(action)\"\r\n >\r\n {{ action.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n", styles: [".item-wrap{white-space:normal}\n"] }]
|
|
265
268
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DataService }, { type: i2.FormBuilder }, { type: i1.NotificationService }]; } });
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbW90aW9uLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21hcmtldGluZy9zcmMvY29tcG9uZW50cy9wcm9tb3Rpb24tZGV0YWlsL3Byb21vdGlvbi1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXJrZXRpbmcvc3JjL2NvbXBvbmVudHMvcHJvbW90aW9uLWRldGFpbC9wcm9tb3Rpb24tZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQW1ELFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUtILHlCQUF5QixFQUV6QixvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQix3QkFBd0IsRUFJeEIsa0JBQWtCLEVBRWxCLHdCQUF3QixHQUUzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFFaEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFBOzs7Ozs7TUFNakMsa0JBQWtCO0NBQ3ZCLENBQUM7QUFRRixNQUFNLE9BQU8sd0JBQ1QsU0FBUSx3QkFBd0U7SUF3QmhGLFlBQ1ksY0FBaUMsRUFDL0IsV0FBd0IsRUFDMUIsV0FBd0IsRUFDeEIsbUJBQXdDO1FBRWhELEtBQUssRUFBRSxDQUFDO1FBTEEs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Q0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN6RSxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlFLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2QsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMvQjtJQUNMLENBQUM7OEdBL1NRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLG1GQ3pDckMsbTBSQW9MQTs7MkZEM0lhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDSSxzQkFBc0IsbUJBR2YsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uLFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0LFxyXG4gICAgQ3JlYXRlUHJvbW90aW9uSW5wdXQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBlbmNvZGVDb25maWdBcmdWYWx1ZSxcclxuICAgIGZpbmRUcmFuc2xhdGlvbixcclxuICAgIGdldENvbmZpZ0FyZ1ZhbHVlLFxyXG4gICAgZ2V0RGVmYXVsdENvbmZpZ0FyZ1ZhbHVlLFxyXG4gICAgR2V0UHJvbW90aW9uRGV0YWlsRG9jdW1lbnQsXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUFJPTU9USU9OX0ZSQUdNRU5ULFxyXG4gICAgUHJvbW90aW9uRnJhZ21lbnQsXHJcbiAgICBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbiAgICBVcGRhdGVQcm9tb3Rpb25JbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgZ3FsIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1lcmdlTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEdFVF9QUk9NT1RJT05fREVUQUlMID0gZ3FsYFxyXG4gICAgcXVlcnkgR2V0UHJvbW90aW9uRGV0YWlsKCRpZDogSUQhKSB7XHJcbiAgICAgICAgcHJvbW90aW9uKGlkOiAkaWQpIHtcclxuICAgICAgICAgICAgLi4uUHJvbW90aW9uXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgJHtQUk9NT1RJT05fRlJBR01FTlR9XHJcbmA7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLXByb21vdGlvbi1kZXRhaWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb21vdGlvbi1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJvbW90aW9uLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9tb3Rpb25EZXRhaWxDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50PHR5cGVvZiBHZXRQcm9tb3Rpb25EZXRhaWxEb2N1bWVudCwgJ3Byb21vdGlvbic+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICAgIGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb21vdGlvbicpO1xyXG4gICAgZGV0YWlsRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgY291cG9uQ29kZTogbnVsbCBhcyBzdHJpbmcgfCBudWxsLFxyXG4gICAgICAgIHBlckN1c3RvbWVyVXNhZ2VMaW1pdDogbnVsbCBhcyBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIHN0YXJ0c0F0OiBudWxsLFxyXG4gICAgICAgIGVuZHNBdDogbnVsbCxcclxuICAgICAgICBjb25kaXRpb25zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICBhY3Rpb25zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcclxuICAgICAgICApLFxyXG4gICAgfSk7XHJcbiAgICBjb25kaXRpb25zOiBDb25maWd1cmFibGVPcGVyYXRpb25bXSA9IFtdO1xyXG4gICAgYWN0aW9uczogQ29uZmlndXJhYmxlT3BlcmF0aW9uW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIGFsbENvbmRpdGlvbnM6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb25bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBhbGxBY3Rpb25zOiBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9tb3Rpb24nKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnByb21vdGlvbi5nZXRQcm9tb3Rpb25BY3Rpb25zQW5kQ29uZGl0aW9ucygpLnNpbmdsZSQuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFsbEFjdGlvbnMgPSBkYXRhLnByb21vdGlvbkFjdGlvbnM7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsQ29uZGl0aW9ucyA9IGRhdGEucHJvbW90aW9uQ29uZGl0aW9ucztcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdmFpbGFibGVDb25kaXRpb25zKCk6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb25bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsQ29uZGl0aW9ucy5maWx0ZXIobyA9PiAhdGhpcy5jb25kaXRpb25zLmZpbmQoYyA9PiBjLmNvZGUgPT09IG8uY29kZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbmRpdGlvbkRlZmluaXRpb24oY29uZGl0aW9uOiBDb25maWd1cmFibGVPcGVyYXRpb24pOiBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGxDb25kaXRpb25zLmZpbmQoYyA9PiBjLmNvZGUgPT09IGNvbmRpdGlvbi5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdmFpbGFibGVBY3Rpb25zKCk6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb25bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsQWN0aW9ucy5maWx0ZXIobyA9PiAhdGhpcy5hY3Rpb25zLmZpbmQoYSA9PiBhLmNvZGUgPT09IG8uY29kZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFjdGlvbkRlZmluaXRpb24oYWN0aW9uOiBDb25maWd1cmFibGVPcGVyYXRpb24pOiBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGxBY3Rpb25zLmZpbmQoYyA9PiBjLmNvZGUgPT09IGFjdGlvbi5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQnV0dG9uRW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISEoXHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5kaXJ0eSAmJlxyXG4gICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0udmFsaWQgJiZcclxuICAgICAgICAgICAgKHRoaXMuY29uZGl0aW9ucy5sZW5ndGggIT09IDAgfHwgdGhpcy5kZXRhaWxGb3JtLnZhbHVlLmNvdXBvbkNvZGUpICYmXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5sZW5ndGggIT09IDBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZENvbmRpdGlvbihjb25kaXRpb246IENvbmZpZ3VyYWJsZU9wZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuYWRkT3BlcmF0aW9uKCdjb25kaXRpb25zJywgY29uZGl0aW9uKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBY3Rpb24oYWN0aW9uOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICB0aGlzLmFkZE9wZXJhdGlvbignYWN0aW9ucycsIGFjdGlvbik7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZmlndXJhYmxlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVPcGVyYXRpb24oJ2NvbmRpdGlvbnMnLCBjb25kaXRpb24pO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUFjdGlvbihhY3Rpb246IENvbmZpZ3VyYWJsZU9wZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlT3BlcmF0aW9uKCdhY3Rpb25zJywgYWN0aW9uKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JtQXJyYXlPZihrZXk6ICdjb25kaXRpb25zJyB8ICdhY3Rpb25zJyk6IFVudHlwZWRGb3JtQXJyYXkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRldGFpbEZvcm0uZ2V0KGtleSkgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRQcm9tb3Rpb24oXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlkOiAnJyxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogJycsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRzQXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgZW5kc0F0OiAnJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgICAgICAgICAgY291cG9uQ29kZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIHBlckN1c3RvbWVyVXNhZ2VMaW1pdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uczogW10sXHJcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXSxcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uczogW10sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgKSBhcyBDcmVhdGVQcm9tb3Rpb25JbnB1dDtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnByb21vdGlvbi5jcmVhdGVQcm9tb3Rpb24oaW5wdXQpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKHsgY3JlYXRlUHJvbW90aW9uIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoY3JlYXRlUHJvbW90aW9uLl9fdHlwZW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdQcm9tb3Rpb24nOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb21vdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nLCBjcmVhdGVQcm9tb3Rpb24uaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ01pc3NpbmdDb25kaXRpb25zRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoY3JlYXRlUHJvbW90aW9uLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvbW90aW9uJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV0YWlsRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbcGF5bWVudE1ldGhvZCwgbGFuZ3VhZ2VDb2RlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkUHJvbW90aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50TWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICApIGFzIFVwZGF0ZVByb21vdGlvbklucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLnByb21vdGlvbi51cGRhdGVQcm9tb3Rpb24oaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9tb3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9tb3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgUGF5bWVudE1ldGhvZCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBkZXRhaWxGb3JtLCB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIHVwZGF0ZWQgY29weSBvZiBpdCB3aGljaFxyXG4gICAgICogY2FuIHRoZW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZFByb21vdGlvbihcclxuICAgICAgICBwcm9tb3Rpb246IFByb21vdGlvbkZyYWdtZW50LFxyXG4gICAgICAgIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICk6IFVwZGF0ZVByb21vdGlvbklucHV0IHwgQ3JlYXRlUHJvbW90aW9uSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGZvcm1Hcm91cC52YWx1ZTtcclxuICAgICAgICBjb25zdCBpbnB1dCA9IGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUoe1xyXG4gICAgICAgICAgICB0cmFuc2xhdGFibGU6IHByb21vdGlvbixcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogZm9ybVZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBwcm9tb3Rpb24ubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9tb3Rpb24uZGVzY3JpcHRpb24gfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLmlucHV0LFxyXG4gICAgICAgICAgICBjb25kaXRpb25zOiB0aGlzLm1hcE9wZXJhdGlvbnNUb0lucHV0cyh0aGlzLmNvbmRpdGlvbnMsIGZvcm1WYWx1ZS5jb25kaXRpb25zKSxcclxuICAgICAgICAgICAgYWN0aW9uczogdGhpcy5tYXBPcGVyYXRpb25zVG9JbnB1dHModGhpcy5hY3Rpb25zLCBmb3JtVmFsdWUuYWN0aW9ucyksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgZm9ybSB2YWx1ZXMgd2hlbiB0aGUgZW50aXR5IGNoYW5nZXMuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogUHJvbW90aW9uRnJhZ21lbnQsIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKGVudGl0eSwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRUcmFuc2xhdGlvbj8ubmFtZSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGN1cnJlbnRUcmFuc2xhdGlvbj8uZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IGVudGl0eS5lbmFibGVkLFxyXG4gICAgICAgICAgICBjb3Vwb25Db2RlOiBlbnRpdHkuY291cG9uQ29kZSxcclxuICAgICAgICAgICAgcGVyQ3VzdG9tZXJVc2FnZUxpbWl0OiBlbnRpdHkucGVyQ3VzdG9tZXJVc2FnZUxpbWl0LFxyXG4gICAgICAgICAgICBzdGFydHNBdDogZW50aXR5LnN0YXJ0c0F0LFxyXG4gICAgICAgICAgICBlbmRzQXQ6IGVudGl0eS5lbmRzQXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZW50aXR5LmNvbmRpdGlvbnMuZm9yRWFjaChvID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGRPcGVyYXRpb24oJ2NvbmRpdGlvbnMnLCBvKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBlbnRpdHkuYWN0aW9ucy5mb3JFYWNoKG8gPT4gdGhpcy5hZGRPcGVyYXRpb24oJ2FjdGlvbnMnLCBvKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyh0aGlzLmN1c3RvbUZpZWxkcywgdGhpcy5kZXRhaWxGb3JtLmdldCgnY3VzdG9tRmllbGRzJyksIGVudGl0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFwcyBhbiBhcnJheSBvZiBjb25kaXRpb25zIG9yIGFjdGlvbnMgdG8gdGhlIGlucHV0IGZvcm1hdCBleHBlY3RlZCBieSB0aGUgR3JhcGhRTCBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWFwT3BlcmF0aW9uc1RvSW5wdXRzKFxyXG4gICAgICAgIG9wZXJhdGlvbnM6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbltdLFxyXG4gICAgICAgIGZvcm1WYWx1ZU9wZXJhdGlvbnM6IGFueSxcclxuICAgICk6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0W10ge1xyXG4gICAgICAgIHJldHVybiBvcGVyYXRpb25zLm1hcCgobywgaSkgPT4gKHtcclxuICAgICAgICAgICAgY29kZTogby5jb2RlLFxyXG4gICAgICAgICAgICBhcmd1bWVudHM6IE9iamVjdC52YWx1ZXM8YW55Pihmb3JtVmFsdWVPcGVyYXRpb25zW2ldLmFyZ3MpLm1hcCgodmFsdWUsIGopID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBvLmFyZ3Nbal0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBlbmNvZGVDb25maWdBcmdWYWx1ZSh2YWx1ZSksXHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbmV3IGNvbmRpdGlvbiBvciBhY3Rpb24gdG8gdGhlIHByb21vdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhZGRPcGVyYXRpb24oa2V5OiAnY29uZGl0aW9ucycgfCAnYWN0aW9ucycsIG9wZXJhdGlvbjogQ29uZmlndXJhYmxlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uc0FycmF5ID0gdGhpcy5mb3JtQXJyYXlPZihrZXkpO1xyXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBrZXkgPT09ICdjb25kaXRpb25zJyA/IHRoaXMuY29uZGl0aW9ucyA6IHRoaXMuYWN0aW9ucztcclxuICAgICAgICBjb25zdCBpbmRleCA9IG9wZXJhdGlvbnNBcnJheS52YWx1ZS5maW5kSW5kZXgobyA9PiBvLmNvZGUgPT09IG9wZXJhdGlvbi5jb2RlKTtcclxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZ3NIYXNoID0gb3BlcmF0aW9uLmFyZ3MucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKG91dHB1dCwgYXJnKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLm91dHB1dCxcclxuICAgICAgICAgICAgICAgICAgICBbYXJnLm5hbWVdOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWdBcmdWYWx1ZShhcmcudmFsdWUpID8/IHRoaXMuZ2V0RGVmYXVsdEFyZ1ZhbHVlKGtleSwgb3BlcmF0aW9uLCBhcmcubmFtZSksXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBvcGVyYXRpb25zQXJyYXkucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogb3BlcmF0aW9uLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnc0hhc2gsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGNvZGU6IG9wZXJhdGlvbi5jb2RlLFxyXG4gICAgICAgICAgICAgICAgYXJnczogb3BlcmF0aW9uLmFyZ3MubWFwKGEgPT4gKHsgbmFtZTogYS5uYW1lLCB2YWx1ZTogZ2V0Q29uZmlnQXJnVmFsdWUoYS52YWx1ZSkgfSkpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0QXJnVmFsdWUoXHJcbiAgICAgICAga2V5OiAnY29uZGl0aW9ucycgfCAnYWN0aW9ucycsXHJcbiAgICAgICAgb3BlcmF0aW9uOiBDb25maWd1cmFibGVPcGVyYXRpb24sXHJcbiAgICAgICAgYXJnTmFtZTogc3RyaW5nLFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZGVmID1cclxuICAgICAgICAgICAga2V5ID09PSAnY29uZGl0aW9ucydcclxuICAgICAgICAgICAgICAgID8gdGhpcy5hbGxDb25kaXRpb25zLmZpbmQoYyA9PiBjLmNvZGUgPT09IG9wZXJhdGlvbi5jb2RlKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLmFsbEFjdGlvbnMuZmluZChhID0+IGEuY29kZSA9PT0gb3BlcmF0aW9uLmNvZGUpO1xyXG4gICAgICAgIGlmIChkZWYpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJnRGVmID0gZGVmLmFyZ3MuZmluZChhID0+IGEubmFtZSA9PT0gYXJnTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChhcmdEZWYpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXREZWZhdWx0Q29uZmlnQXJnVmFsdWUoYXJnRGVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCB2YWx1ZSBmb3IgXCJhcmdOYW1lXCJgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBjb25kaXRpb24gb3IgYWN0aW9uIGZyb20gdGhlIHByb21vdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVPcGVyYXRpb24oa2V5OiAnY29uZGl0aW9ucycgfCAnYWN0aW9ucycsIG9wZXJhdGlvbjogQ29uZmlndXJhYmxlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uc0FycmF5ID0gdGhpcy5mb3JtQXJyYXlPZihrZXkpO1xyXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBrZXkgPT09ICdjb25kaXRpb25zJyA/IHRoaXMuY29uZGl0aW9ucyA6IHRoaXMuYWN0aW9ucztcclxuICAgICAgICBjb25zdCBpbmRleCA9IG9wZXJhdGlvbnNBcnJheS52YWx1ZS5maW5kSW5kZXgobyA9PiBvLmNvZGUgPT09IG9wZXJhdGlvbi5jb2RlKTtcclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIG9wZXJhdGlvbnNBcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb24uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2xyLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc05ldyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGUkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwicHJvbW90aW9uLWRldGFpbFwiPjwvdmRyLWFjdGlvbi1iYXItaXRlbXM+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNOZXckIHwgYXN5bmM7IGVsc2UgdXBkYXRlQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGUoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNhdmVCdXR0b25FbmFibGVkKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmNyZWF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cIidVcGRhdGVQcm9tb3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNhdmVCdXR0b25FbmFibGVkKClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC92ZHItYWItcmlnaHQ+XHJcbiAgICA8L3Zkci1hY3Rpb24tYmFyPlxyXG48L3Zkci1wYWdlLWJsb2NrPlxyXG5cclxuPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCI+XHJcbiAgICA8dmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuICAgICAgICA8dmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCAqdmRySWZQZXJtaXNzaW9ucz1cIidVcGRhdGVQcm9tb3Rpb24nXCI+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbHJUb2dnbGUgbmFtZT1cImVuYWJsZWRcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ2NvbW1vbi5lbmFibGVkJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Nsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIGVudGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvIFtlbnRpdHldPVwiZW50aXR5XCIgLz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG4gICAgICAgIDx2ZHItcGFnZS1ibG9jaz5cclxuICAgICAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEoJ1VwZGF0ZVByb21vdGlvbicgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItcmljaC10ZXh0LWVkaXRvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JpZC1zcGFuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISgnVXBkYXRlUHJvbW90aW9uJyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb21tb24uZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItcmljaC10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidtYXJrZXRpbmcuc3RhcnRzLWF0JyB8IHRyYW5zbGF0ZVwiIGZvcj1cInN0YXJ0c0F0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZGF0ZXRpbWUtcGlja2VyIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0c0F0XCI+PC92ZHItZGF0ZXRpbWUtcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInbWFya2V0aW5nLmVuZHMtYXQnIHwgdHJhbnNsYXRlXCIgZm9yPVwiZW5kc0F0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZGF0ZXRpbWUtcGlja2VyIGZvcm1Db250cm9sTmFtZT1cImVuZHNBdFwiPjwvdmRyLWRhdGV0aW1lLXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ21hcmtldGluZy5jb3Vwb24tY29kZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJjb3Vwb25Db2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb3Vwb25Db2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVQcm9tb3Rpb24nIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY291cG9uQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidtYXJrZXRpbmcucGVyLWN1c3RvbWVyLWxpbWl0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBlckN1c3RvbWVyVXNhZ2VMaW1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicGVyQ3VzdG9tZXJVc2FnZUxpbWl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVQcm9tb3Rpb24nIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjk5OVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwZXJDdXN0b21lclVzYWdlTGltaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXBOYW1lPVwiY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvbW90aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtLmdldCgnY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVQcm9tb3Rpb24nIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG5cclxuICAgICAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbklkPVwicHJvbW90aW9uLWRldGFpbFwiXHJcbiAgICAgICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxyXG4gICAgICAgICAgICA+PC92ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdD5cclxuXHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ21hcmtldGluZy5jb25kaXRpb25zJyB8IHRyYW5zbGF0ZVwiIGZvcm1BcnJheU5hbWU9XCJjb25kaXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgY29uZGl0aW9uczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItY29uZmlndXJhYmxlLWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlQ29uZGl0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVQcm9tb3Rpb24nIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uXT1cImNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVyYXRpb25EZWZpbml0aW9uXT1cImdldENvbmRpdGlvbkRlZmluaXRpb24oY29uZGl0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWNvbmZpZ3VyYWJsZS1pbnB1dD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duICp2ZHJJZlBlcm1pc3Npb25zPVwiJ1VwZGF0ZVByb21vdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ21hcmtldGluZy5hZGQtY29uZGl0aW9uJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29uZGl0aW9uIG9mIGdldEF2YWlsYWJsZUNvbmRpdGlvbnMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLXdyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb25kaXRpb24oY29uZGl0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29uZGl0aW9uLmRlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidtYXJrZXRpbmcuYWN0aW9ucycgfCB0cmFuc2xhdGVcIiBmb3JtQXJyYXlOYW1lPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWNvbmZpZ3VyYWJsZS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUFjdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uXT1cImFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVQcm9tb3Rpb24nIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uRGVmaW5pdGlvbl09XCJnZXRBY3Rpb25EZWZpbml0aW9uKGFjdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L3Zkci1jb25maWd1cmFibGUtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93biAqdmRySWZQZXJtaXNzaW9ucz1cIidVcGRhdGVQcm9tb3Rpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdtYXJrZXRpbmcuYWRkLWFjdGlvbicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBnZXRBdmFpbGFibGVBY3Rpb25zKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS13cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQWN0aW9uKGFjdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5kZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPC92ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG48L2Zvcm0+XHJcbiJdfQ==
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbW90aW9uLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21hcmtldGluZy9zcmMvY29tcG9uZW50cy9wcm9tb3Rpb24tZGV0YWlsL3Byb21vdGlvbi1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXJrZXRpbmcvc3JjL2NvbXBvbmVudHMvcHJvbW90aW9uLWRldGFpbC9wcm9tb3Rpb24tZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQW1ELFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUtILHlCQUF5QixFQUV6QixvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQix3QkFBd0IsRUFJeEIsa0JBQWtCLEVBRWxCLHdCQUF3QixHQUUzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFFaEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFBOzs7Ozs7TUFNakMsa0JBQWtCO0NBQ3ZCLENBQUM7QUFRRixNQUFNLE9BQU8sd0JBQ1QsU0FBUSx3QkFBd0U7SUF5QmhGLFlBQ1ksY0FBaUMsRUFDL0IsV0FBd0IsRUFDMUIsV0FBd0IsRUFDeEIsbUJBQXdDO1FBRWhELEtBQUssRUFBRSxDQUFDO1FBTEEs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QUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBRyxHQUFHLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3pFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUUsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDZCxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQzs4R0FsVFEsd0JBQXdCO2tHQUF4Qix3QkFBd0IsbUZDekNyQywrbFRBbU1BOzsyRkQxSmEsd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNJLHNCQUFzQixtQkFHZix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBDb25maWd1cmFibGVPcGVyYXRpb24sXHJcbiAgICBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uLFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uSW5wdXQsXHJcbiAgICBDcmVhdGVQcm9tb3Rpb25JbnB1dCxcclxuICAgIGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIGVuY29kZUNvbmZpZ0FyZ1ZhbHVlLFxyXG4gICAgZmluZFRyYW5zbGF0aW9uLFxyXG4gICAgZ2V0Q29uZmlnQXJnVmFsdWUsXHJcbiAgICBnZXREZWZhdWx0Q29uZmlnQXJnVmFsdWUsXHJcbiAgICBHZXRQcm9tb3Rpb25EZXRhaWxEb2N1bWVudCxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBQUk9NT1RJT05fRlJBR01FTlQsXHJcbiAgICBQcm9tb3Rpb25GcmFnbWVudCxcclxuICAgIFR5cGVkQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIFVwZGF0ZVByb21vdGlvbklucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWVyZ2VNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgY29uc3QgR0VUX1BST01PVElPTl9ERVRBSUwgPSBncWxgXHJcbiAgICBxdWVyeSBHZXRQcm9tb3Rpb25EZXRhaWwoJGlkOiBJRCEpIHtcclxuICAgICAgICBwcm9tb3Rpb24oaWQ6ICRpZCkge1xyXG4gICAgICAgICAgICAuLi5Qcm9tb3Rpb25cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAke1BST01PVElPTl9GUkFHTUVOVH1cclxuYDtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvbW90aW9uLWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvbW90aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9tb3Rpb24tZGV0YWlsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb21vdGlvbkRldGFpbENvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQ8dHlwZW9mIEdldFByb21vdGlvbkRldGFpbERvY3VtZW50LCAncHJvbW90aW9uJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvbW90aW9uJyk7XHJcbiAgICBkZXRhaWxGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBjb3Vwb25Db2RlOiBudWxsIGFzIHN0cmluZyB8IG51bGwsXHJcbiAgICAgICAgcGVyQ3VzdG9tZXJVc2FnZUxpbWl0OiBudWxsIGFzIG51bWJlciB8IG51bGwsXHJcbiAgICAgICAgdXNhZ2VMaW1pdDogbnVsbCBhcyBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIHN0YXJ0c0F0OiBudWxsLFxyXG4gICAgICAgIGVuZHNBdDogbnVsbCxcclxuICAgICAgICBjb25kaXRpb25zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICBhY3Rpb25zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcclxuICAgICAgICApLFxyXG4gICAgfSk7XHJcbiAgICBjb25kaXRpb25zOiBDb25maWd1cmFibGVPcGVyYXRpb25bXSA9IFtdO1xyXG4gICAgYWN0aW9uczogQ29uZmlndXJhYmxlT3BlcmF0aW9uW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIGFsbENvbmRpdGlvbnM6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb25bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBhbGxBY3Rpb25zOiBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9tb3Rpb24nKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnByb21vdGlvbi5nZXRQcm9tb3Rpb25BY3Rpb25zQW5kQ29uZGl0aW9ucygpLnNpbmdsZSQuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFsbEFjdGlvbnMgPSBkYXRhLnByb21vdGlvbkFjdGlvbnM7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsQ29uZGl0aW9ucyA9IGRhdGEucHJvbW90aW9uQ29uZGl0aW9ucztcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdmFpbGFibGVDb25kaXRpb25zKCk6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb25bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsQ29uZGl0aW9ucy5maWx0ZXIobyA9PiAhdGhpcy5jb25kaXRpb25zLmZpbmQoYyA9PiBjLmNvZGUgPT09IG8uY29kZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbmRpdGlvbkRlZmluaXRpb24oY29uZGl0aW9uOiBDb25maWd1cmFibGVPcGVyYXRpb24pOiBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGxDb25kaXRpb25zLmZpbmQoYyA9PiBjLmNvZGUgPT09IGNvbmRpdGlvbi5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdmFpbGFibGVBY3Rpb25zKCk6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb25bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsQWN0aW9ucy5maWx0ZXIobyA9PiAhdGhpcy5hY3Rpb25zLmZpbmQoYSA9PiBhLmNvZGUgPT09IG8uY29kZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFjdGlvbkRlZmluaXRpb24oYWN0aW9uOiBDb25maWd1cmFibGVPcGVyYXRpb24pOiBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGxBY3Rpb25zLmZpbmQoYyA9PiBjLmNvZGUgPT09IGFjdGlvbi5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQnV0dG9uRW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISEoXHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5kaXJ0eSAmJlxyXG4gICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0udmFsaWQgJiZcclxuICAgICAgICAgICAgKHRoaXMuY29uZGl0aW9ucy5sZW5ndGggIT09IDAgfHwgdGhpcy5kZXRhaWxGb3JtLnZhbHVlLmNvdXBvbkNvZGUpICYmXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5sZW5ndGggIT09IDBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZENvbmRpdGlvbihjb25kaXRpb246IENvbmZpZ3VyYWJsZU9wZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuYWRkT3BlcmF0aW9uKCdjb25kaXRpb25zJywgY29uZGl0aW9uKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBY3Rpb24oYWN0aW9uOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICB0aGlzLmFkZE9wZXJhdGlvbignYWN0aW9ucycsIGFjdGlvbik7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZmlndXJhYmxlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVPcGVyYXRpb24oJ2NvbmRpdGlvbnMnLCBjb25kaXRpb24pO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUFjdGlvbihhY3Rpb246IENvbmZpZ3VyYWJsZU9wZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlT3BlcmF0aW9uKCdhY3Rpb25zJywgYWN0aW9uKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JtQXJyYXlPZihrZXk6ICdjb25kaXRpb25zJyB8ICdhY3Rpb25zJyk6IFVudHlwZWRGb3JtQXJyYXkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRldGFpbEZvcm0uZ2V0KGtleSkgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRQcm9tb3Rpb24oXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlkOiAnJyxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogJycsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRzQXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgZW5kc0F0OiAnJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgICAgICAgICAgY291cG9uQ29kZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIHBlckN1c3RvbWVyVXNhZ2VMaW1pdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHVzYWdlTGltaXQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW10sXHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICkgYXMgQ3JlYXRlUHJvbW90aW9uSW5wdXQ7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9tb3Rpb24uY3JlYXRlUHJvbW90aW9uKGlucHV0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICh7IGNyZWF0ZVByb21vdGlvbiB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNyZWF0ZVByb21vdGlvbi5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUHJvbW90aW9uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9tb3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgY3JlYXRlUHJvbW90aW9uLmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdNaXNzaW5nQ29uZGl0aW9uc0Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGNyZWF0ZVByb21vdGlvbi5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb21vdGlvbicsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW3BheW1lbnRNZXRob2QsIGxhbmd1YWdlQ29kZV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZFByb21vdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bWVudE1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVQcm9tb3Rpb25JbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5wcm9tb3Rpb24udXBkYXRlUHJvbW90aW9uKGlucHV0KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvbW90aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvbW90aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIFBheW1lbnRNZXRob2QgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgaXQgd2hpY2hcclxuICAgICAqIGNhbiB0aGVuIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRQcm9tb3Rpb24oXHJcbiAgICAgICAgcHJvbW90aW9uOiBQcm9tb3Rpb25GcmFnbWVudCxcclxuICAgICAgICBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9tb3Rpb25JbnB1dCB8IENyZWF0ZVByb21vdGlvbklucHV0IHtcclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBmb3JtR3JvdXAudmFsdWU7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBwcm9tb3Rpb24sXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IGZvcm1WYWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvbW90aW9uLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvbW90aW9uLmRlc2NyaXB0aW9uIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5pbnB1dCxcclxuICAgICAgICAgICAgY29uZGl0aW9uczogdGhpcy5tYXBPcGVyYXRpb25zVG9JbnB1dHModGhpcy5jb25kaXRpb25zLCBmb3JtVmFsdWUuY29uZGl0aW9ucyksXHJcbiAgICAgICAgICAgIGFjdGlvbnM6IHRoaXMubWFwT3BlcmF0aW9uc1RvSW5wdXRzKHRoaXMuYWN0aW9ucywgZm9ybVZhbHVlLmFjdGlvbnMpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIGZvcm0gdmFsdWVzIHdoZW4gdGhlIGVudGl0eSBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IFByb21vdGlvbkZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihlbnRpdHksIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24/Lm5hbWUsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjdXJyZW50VHJhbnNsYXRpb24/LmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICBlbmFibGVkOiBlbnRpdHkuZW5hYmxlZCxcclxuICAgICAgICAgICAgY291cG9uQ29kZTogZW50aXR5LmNvdXBvbkNvZGUsXHJcbiAgICAgICAgICAgIHBlckN1c3RvbWVyVXNhZ2VMaW1pdDogZW50aXR5LnBlckN1c3RvbWVyVXNhZ2VMaW1pdCxcclxuICAgICAgICAgICAgdXNhZ2VMaW1pdDogZW50aXR5LnVzYWdlTGltaXQsXHJcbiAgICAgICAgICAgIHN0YXJ0c0F0OiBlbnRpdHkuc3RhcnRzQXQsXHJcbiAgICAgICAgICAgIGVuZHNBdDogZW50aXR5LmVuZHNBdCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBlbnRpdHkuY29uZGl0aW9ucy5mb3JFYWNoKG8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZE9wZXJhdGlvbignY29uZGl0aW9ucycsIG8pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGVudGl0eS5hY3Rpb25zLmZvckVhY2gobyA9PiB0aGlzLmFkZE9wZXJhdGlvbignYWN0aW9ucycsIG8pKTtcclxuICAgICAgICBpZiAodGhpcy5jdXN0b21GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKHRoaXMuY3VzdG9tRmllbGRzLCB0aGlzLmRldGFpbEZvcm0uZ2V0KCdjdXN0b21GaWVsZHMnKSwgZW50aXR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXBzIGFuIGFycmF5IG9mIGNvbmRpdGlvbnMgb3IgYWN0aW9ucyB0byB0aGUgaW5wdXQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBHcmFwaFFMIEFQSS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtYXBPcGVyYXRpb25zVG9JbnB1dHMoXHJcbiAgICAgICAgb3BlcmF0aW9uczogQ29uZmlndXJhYmxlT3BlcmF0aW9uW10sXHJcbiAgICAgICAgZm9ybVZhbHVlT3BlcmF0aW9uczogYW55LFxyXG4gICAgKTogQ29uZmlndXJhYmxlT3BlcmF0aW9uSW5wdXRbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9wZXJhdGlvbnMubWFwKChvLCBpKSA9PiAoe1xyXG4gICAgICAgICAgICBjb2RlOiBvLmNvZGUsXHJcbiAgICAgICAgICAgIGFyZ3VtZW50czogT2JqZWN0LnZhbHVlczxhbnk+KGZvcm1WYWx1ZU9wZXJhdGlvbnNbaV0uYXJncykubWFwKCh2YWx1ZSwgaikgPT4gKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG8uYXJnc1tqXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGVuY29kZUNvbmZpZ0FyZ1ZhbHVlKHZhbHVlKSxcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBuZXcgY29uZGl0aW9uIG9yIGFjdGlvbiB0byB0aGUgcHJvbW90aW9uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFkZE9wZXJhdGlvbihrZXk6ICdjb25kaXRpb25zJyB8ICdhY3Rpb25zJywgb3BlcmF0aW9uOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBvcGVyYXRpb25zQXJyYXkgPSB0aGlzLmZvcm1BcnJheU9mKGtleSk7XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGtleSA9PT0gJ2NvbmRpdGlvbnMnID8gdGhpcy5jb25kaXRpb25zIDogdGhpcy5hY3Rpb25zO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gb3BlcmF0aW9uc0FycmF5LnZhbHVlLmZpbmRJbmRleChvID0+IG8uY29kZSA9PT0gb3BlcmF0aW9uLmNvZGUpO1xyXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJnc0hhc2ggPSBvcGVyYXRpb24uYXJncy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAob3V0cHV0LCBhcmcpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ub3V0cHV0LFxyXG4gICAgICAgICAgICAgICAgICAgIFthcmcubmFtZV06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZ0FyZ1ZhbHVlKGFyZy52YWx1ZSkgPz8gdGhpcy5nZXREZWZhdWx0QXJnVmFsdWUoa2V5LCBvcGVyYXRpb24sIGFyZy5uYW1lKSxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIG9wZXJhdGlvbnNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHtcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiBvcGVyYXRpb24uY29kZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzSGFzaCxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgY29kZTogb3BlcmF0aW9uLmNvZGUsXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBvcGVyYXRpb24uYXJncy5tYXAoYSA9PiAoeyBuYW1lOiBhLm5hbWUsIHZhbHVlOiBnZXRDb25maWdBcmdWYWx1ZShhLnZhbHVlKSB9KSksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERlZmF1bHRBcmdWYWx1ZShcclxuICAgICAgICBrZXk6ICdjb25kaXRpb25zJyB8ICdhY3Rpb25zJyxcclxuICAgICAgICBvcGVyYXRpb246IENvbmZpZ3VyYWJsZU9wZXJhdGlvbixcclxuICAgICAgICBhcmdOYW1lOiBzdHJpbmcsXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBkZWYgPVxyXG4gICAgICAgICAgICBrZXkgPT09ICdjb25kaXRpb25zJ1xyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmFsbENvbmRpdGlvbnMuZmluZChjID0+IGMuY29kZSA9PT0gb3BlcmF0aW9uLmNvZGUpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuYWxsQWN0aW9ucy5maW5kKGEgPT4gYS5jb2RlID09PSBvcGVyYXRpb24uY29kZSk7XHJcbiAgICAgICAgaWYgKGRlZikge1xyXG4gICAgICAgICAgICBjb25zdCBhcmdEZWYgPSBkZWYuYXJncy5maW5kKGEgPT4gYS5uYW1lID09PSBhcmdOYW1lKTtcclxuICAgICAgICAgICAgaWYgKGFyZ0RlZikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHRDb25maWdBcmdWYWx1ZShhcmdEZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IHZhbHVlIGZvciBcImFyZ05hbWVcImApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGNvbmRpdGlvbiBvciBhY3Rpb24gZnJvbSB0aGUgcHJvbW90aW9uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlbW92ZU9wZXJhdGlvbihrZXk6ICdjb25kaXRpb25zJyB8ICdhY3Rpb25zJywgb3BlcmF0aW9uOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBvcGVyYXRpb25zQXJyYXkgPSB0aGlzLmZvcm1BcnJheU9mKGtleSk7XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGtleSA9PT0gJ2NvbmRpdGlvbnMnID8gdGhpcy5jb25kaXRpb25zIDogdGhpcy5hY3Rpb25zO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gb3BlcmF0aW9uc0FycmF5LnZhbHVlLmZpbmRJbmRleChvID0+IG8uY29kZSA9PT0gb3BlcmF0aW9uLmNvZGUpO1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgb3BlcmF0aW9uc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICAgICAgY29sbGVjdGlvbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjbHItYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTmV3JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXJyZW50TGFuZ3VhZ2VDb2RlXT1cImxhbmd1YWdlQ29kZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGxhbmd1YWdlQ29kZUNoYW5nZSk9XCJzZXRMYW5ndWFnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuXHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJwcm9tb3Rpb24tZGV0YWlsXCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc05ldyQgfCBhc3luYzsgZWxzZSB1cGRhdGVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2F2ZUJ1dHRvbkVuYWJsZWQoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN1cGRhdGVCdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiJ1VwZGF0ZVByb21vdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2F2ZUJ1dHRvbkVuYWJsZWQoKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi51cGRhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3Zkci1hYi1yaWdodD5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcblxyXG48Zm9ybSBjbGFzcz1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImRldGFpbEZvcm1cIj5cclxuICAgIDx2ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG4gICAgICAgIDx2ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuICAgICAgICAgICAgPHZkci1jYXJkICp2ZHJJZlBlcm1pc3Npb25zPVwiJ1VwZGF0ZVByb21vdGlvbidcIj5cclxuICAgICAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsclRvZ2dsZSBuYW1lPVwiZW5hYmxlZFwiIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY29tbW9uLmVuYWJsZWQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvY2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgZW50aXR5XCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXBhZ2UtZW50aXR5LWluZm8gW2VudGl0eV09XCJlbnRpdHlcIiAvPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcbiAgICAgICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgZm9yPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISgnVXBkYXRlUHJvbW90aW9uJyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1yaWNoLXRleHQtZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncmlkLXNwYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVQcm9tb3Rpb24nIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvbW1vbi5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L3Zkci1yaWNoLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ21hcmtldGluZy5zdGFydHMtYXQnIHwgdHJhbnNsYXRlXCIgZm9yPVwic3RhcnRzQXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRldGltZS1waWNrZXIgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRzQXRcIj48L3Zkci1kYXRldGltZS1waWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidtYXJrZXRpbmcuZW5kcy1hdCcgfCB0cmFuc2xhdGVcIiBmb3I9XCJlbmRzQXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRldGltZS1waWNrZXIgZm9ybUNvbnRyb2xOYW1lPVwiZW5kc0F0XCI+PC92ZHItZGF0ZXRpbWUtcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInbWFya2V0aW5nLmNvdXBvbi1jb2RlJyB8IHRyYW5zbGF0ZVwiIGZvcj1cImNvdXBvbkNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvdXBvbkNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEoJ1VwZGF0ZVByb21vdGlvbicgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb3Vwb25Db2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ21hcmtldGluZy5wZXItY3VzdG9tZXItbGltaXQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ21hcmtldGluZy5wZXItY3VzdG9tZXItbGltaXQtdG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJwZXJDdXN0b21lclVzYWdlTGltaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInBlckN1c3RvbWVyVXNhZ2VMaW1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISgnVXBkYXRlUHJvbW90aW9uJyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI5OTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGVyQ3VzdG9tZXJVc2FnZUxpbWl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ21hcmtldGluZy51c2FnZS1saW1pdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInbWFya2V0aW5nLnVzYWdlLWxpbWl0LXRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwidXNhZ2VMaW1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidXNhZ2VMaW1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISgnVXBkYXRlUHJvbW90aW9uJyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI5OTk5OTk5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVzYWdlTGltaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXBOYW1lPVwiY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvbW90aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtLmdldCgnY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVQcm9tb3Rpb24nIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG5cclxuICAgICAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbklkPVwicHJvbW90aW9uLWRldGFpbFwiXHJcbiAgICAgICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxyXG4gICAgICAgICAgICA+PC92ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdD5cclxuXHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ21hcmtldGluZy5jb25kaXRpb25zJyB8IHRyYW5zbGF0ZVwiIGZvcm1BcnJheU5hbWU9XCJjb25kaXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgY29uZGl0aW9uczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItY29uZmlndXJhYmxlLWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlQ29uZGl0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVQcm9tb3Rpb24nIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uXT1cImNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVyYXRpb25EZWZpbml0aW9uXT1cImdldENvbmRpdGlvbkRlZmluaXRpb24oY29uZGl0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWNvbmZpZ3VyYWJsZS1pbnB1dD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duICp2ZHJJZlBlcm1pc3Npb25zPVwiJ1VwZGF0ZVByb21vdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ21hcmtldGluZy5hZGQtY29uZGl0aW9uJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29uZGl0aW9uIG9mIGdldEF2YWlsYWJsZUNvbmRpdGlvbnMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLXdyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb25kaXRpb24oY29uZGl0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29uZGl0aW9uLmRlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidtYXJrZXRpbmcuYWN0aW9ucycgfCB0cmFuc2xhdGVcIiBmb3JtQXJyYXlOYW1lPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWNvbmZpZ3VyYWJsZS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUFjdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uXT1cImFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVQcm9tb3Rpb24nIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uRGVmaW5pdGlvbl09XCJnZXRBY3Rpb25EZWZpbml0aW9uKGFjdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L3Zkci1jb25maWd1cmFibGUtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93biAqdmRySWZQZXJtaXNzaW9ucz1cIidVcGRhdGVQcm9tb3Rpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdtYXJrZXRpbmcuYWRkLWFjdGlvbicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBnZXRBdmFpbGFibGVBY3Rpb25zKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS13cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQWN0aW9uKGFjdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5kZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPC92ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG48L2Zvcm0+XHJcbiJdfQ==
|
|
@@ -63,11 +63,17 @@ export class PromotionListComponent extends TypedBaseListComponent {
|
|
|
63
63
|
filterField: 'description',
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
|
-
name: '
|
|
66
|
+
name: 'perCustomerUsageLimit',
|
|
67
67
|
type: { kind: 'number' },
|
|
68
68
|
label: _('marketing.per-customer-limit'),
|
|
69
69
|
filterField: 'perCustomerUsageLimit',
|
|
70
70
|
},
|
|
71
|
+
{
|
|
72
|
+
name: 'usageLimit',
|
|
73
|
+
type: { kind: 'number' },
|
|
74
|
+
label: _('marketing.usage-limit'),
|
|
75
|
+
filterField: 'usageLimit',
|
|
76
|
+
},
|
|
71
77
|
])
|
|
72
78
|
.addCustomFieldFilters(this.customFields)
|
|
73
79
|
.connectToRoute(this.route);
|
|
@@ -81,6 +87,7 @@ export class PromotionListComponent extends TypedBaseListComponent {
|
|
|
81
87
|
{ name: 'name' },
|
|
82
88
|
{ name: 'couponCode' },
|
|
83
89
|
{ name: 'perCustomerUsageLimit' },
|
|
90
|
+
{ name: 'usageLimit' },
|
|
84
91
|
])
|
|
85
92
|
.addCustomFieldSorts(this.customFields)
|
|
86
93
|
.connectToRoute(this.route);
|
|
@@ -111,10 +118,10 @@ export class PromotionListComponent extends TypedBaseListComponent {
|
|
|
111
118
|
};
|
|
112
119
|
}
|
|
113
120
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: PromotionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
114
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: PromotionListComponent, selector: "vdr-promotion-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=\"customer-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreatePromotion'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.create-new-promotion' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-data-table-2\r\n id=\"promotion-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"promotion-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'marketing.search-by-name-or-coupon-code' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-promotion=\"item\">{{ promotion.id }}</ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-promotion=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', promotion.id]\"\r\n ><span> {{ promotion.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.enabled' | translate\">\r\n <ng-template let-promotion=\"item\">\r\n <vdr-chip *ngIf=\"promotion.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!promotion.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.coupon-code' | translate\" [sort]=\"sorts.get('couponCode')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.couponCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.starts-at' | translate\" [sort]=\"sorts.get('startsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.startsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.ends-at' | translate\" [sort]=\"sorts.get('endsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.endsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\"\r\n [sort]=\"sorts.get('perCustomerUsageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.perCustomerUsageLimit }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n", styles: [".search-form{padding:0}.search-input{margin:6px 8px 0 0;min-width:200px}\n"], dependencies: [{ kind: "directive", type: i1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i4.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i4.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i4.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i4.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i4.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i4.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { kind: "component", type: i4.BulkActionMenuComponent, selector: "vdr-bulk-action-menu", inputs: ["locationId", "selectionManager", "hostComponent"] }, { kind: "component", type: i4.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange"] }, { kind: "component", type: i4.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i4.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "component", type: i4.DataTableCustomFieldColumnComponent, selector: "vdr-dt2-custom-field-column", inputs: ["customField", "sorts"], exportAs: ["row"] }, { kind: "component", type: i4.PageBlockComponent, selector: "vdr-page-block" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i4.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
121
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: PromotionListComponent, selector: "vdr-promotion-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=\"customer-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreatePromotion'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.create-new-promotion' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-data-table-2\r\n id=\"promotion-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"promotion-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'marketing.search-by-name-or-coupon-code' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-promotion=\"item\">{{ promotion.id }}</ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-promotion=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', promotion.id]\"\r\n ><span> {{ promotion.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.enabled' | translate\">\r\n <ng-template let-promotion=\"item\">\r\n <vdr-chip *ngIf=\"promotion.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!promotion.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.coupon-code' | translate\" [sort]=\"sorts.get('couponCode')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.couponCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.starts-at' | translate\" [sort]=\"sorts.get('startsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.startsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.ends-at' | translate\" [sort]=\"sorts.get('endsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.endsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\"\r\n [sort]=\"sorts.get('perCustomerUsageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.perCustomerUsageLimit }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\"\r\n [sort]=\"sorts.get('usageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.usageLimit }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n", styles: [".search-form{padding:0}.search-input{margin:6px 8px 0 0;min-width:200px}\n"], dependencies: [{ kind: "directive", type: i1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i4.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i4.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i4.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i4.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i4.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i4.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { kind: "component", type: i4.BulkActionMenuComponent, selector: "vdr-bulk-action-menu", inputs: ["locationId", "selectionManager", "hostComponent"] }, { kind: "component", type: i4.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange"] }, { kind: "component", type: i4.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i4.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "component", type: i4.DataTableCustomFieldColumnComponent, selector: "vdr-dt2-custom-field-column", inputs: ["customField", "sorts"], exportAs: ["row"] }, { kind: "component", type: i4.PageBlockComponent, selector: "vdr-page-block" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i4.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
115
122
|
}
|
|
116
123
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: PromotionListComponent, decorators: [{
|
|
117
124
|
type: Component,
|
|
118
|
-
args: [{ selector: 'vdr-promotion-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=\"customer-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreatePromotion'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.create-new-promotion' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-data-table-2\r\n id=\"promotion-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"promotion-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'marketing.search-by-name-or-coupon-code' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-promotion=\"item\">{{ promotion.id }}</ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-promotion=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', promotion.id]\"\r\n ><span> {{ promotion.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.enabled' | translate\">\r\n <ng-template let-promotion=\"item\">\r\n <vdr-chip *ngIf=\"promotion.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!promotion.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.coupon-code' | translate\" [sort]=\"sorts.get('couponCode')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.couponCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.starts-at' | translate\" [sort]=\"sorts.get('startsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.startsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.ends-at' | translate\" [sort]=\"sorts.get('endsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.endsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\"\r\n [sort]=\"sorts.get('perCustomerUsageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.perCustomerUsageLimit }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n", styles: [".search-form{padding:0}.search-input{margin:6px 8px 0 0;min-width:200px}\n"] }]
|
|
125
|
+
args: [{ selector: 'vdr-promotion-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=\"customer-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreatePromotion'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.create-new-promotion' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-data-table-2\r\n id=\"promotion-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"promotion-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'marketing.search-by-name-or-coupon-code' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-promotion=\"item\">{{ promotion.id }}</ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-promotion=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', promotion.id]\"\r\n ><span> {{ promotion.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.enabled' | translate\">\r\n <ng-template let-promotion=\"item\">\r\n <vdr-chip *ngIf=\"promotion.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!promotion.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.coupon-code' | translate\" [sort]=\"sorts.get('couponCode')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.couponCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.starts-at' | translate\" [sort]=\"sorts.get('startsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.startsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.ends-at' | translate\" [sort]=\"sorts.get('endsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.endsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\"\r\n [sort]=\"sorts.get('perCustomerUsageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.perCustomerUsageLimit }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\"\r\n [sort]=\"sorts.get('usageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.usageLimit }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n", styles: [".search-form{padding:0}.search-input{margin:6px 8px 0 0;min-width:200px}\n"] }]
|
|
119
126
|
}], ctorParameters: function () { return []; } });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbW90aW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXJrZXRpbmcvc3JjL2NvbXBvbmVudHMvcHJvbW90aW9uLWxpc3QvcHJvbW90aW9uLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXJrZXRpbmcvc3JjL2NvbXBvbmVudHMvcHJvbW90aW9uLWxpc3QvcHJvbW90aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFDSCx3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLGtCQUFrQixFQUdsQixzQkFBc0IsR0FDekIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFFckMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7TUFTL0Isa0JBQWtCO0NBQ3ZCLENBQUM7QUFRRixNQUFNLE9BQU8sc0JBQ1QsU0FBUSxzQkFBcUU7SUFtRTdFO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFqRUgsaUJBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsWUFBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRTthQUMzQyxjQUFjLEVBQUU7YUFDaEIsVUFBVSxDQUFDO1lBQ1I7Z0JBQ0ksSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQzNCLEtBQUssRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUM7Z0JBQy9CLFdB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O1FBQzFDLElBQUksY0FBYyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUM7UUFDekMsSUFBSSxVQUFVLEVBQUU7WUFDWixNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDdkMsY0FBYyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUM7U0FDdkM7UUFFRCxPQUFPO1lBQ0gsT0FBTyxFQUFFO2dCQUNMLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixNQUFNO2dCQUNOLGNBQWM7Z0JBQ2QsSUFBSTthQUNQO1NBQ0osQ0FBQztJQUNOLENBQUM7OEdBckdRLHNCQUFzQjtrR0FBdEIsc0JBQXNCLGlGQzlCbkMsOC9JQXVHQTs7MkZEekVhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDSSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBHZXRQcm9tb3Rpb25MaXN0RG9jdW1lbnQsXHJcbiAgICBMb2dpY2FsT3BlcmF0b3IsXHJcbiAgICBQUk9NT1RJT05fRlJBR01FTlQsXHJcbiAgICBQcm9tb3Rpb25MaXN0T3B0aW9ucyxcclxuICAgIFByb21vdGlvblNvcnRQYXJhbWV0ZXIsXHJcbiAgICBUeXBlZEJhc2VMaXN0Q29tcG9uZW50LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcblxyXG5leHBvcnQgY29uc3QgR0VUX1BST01PVElPTl9MSVNUID0gZ3FsYFxyXG4gICAgcXVlcnkgR2V0UHJvbW90aW9uTGlzdCgkb3B0aW9uczogUHJvbW90aW9uTGlzdE9wdGlvbnMpIHtcclxuICAgICAgICBwcm9tb3Rpb25zKG9wdGlvbnM6ICRvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zIHtcclxuICAgICAgICAgICAgICAgIC4uLlByb21vdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAke1BST01PVElPTl9GUkFHTUVOVH1cclxuYDtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvbW90aW9uLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb21vdGlvbi1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb21vdGlvbi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb21vdGlvbkxpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlTGlzdENvbXBvbmVudDx0eXBlb2YgR2V0UHJvbW90aW9uTGlzdERvY3VtZW50LCAncHJvbW90aW9ucyc+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgICByZWFkb25seSBjdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9tb3Rpb24nKTtcclxuICAgIHJlYWRvbmx5IGZpbHRlcnMgPSB0aGlzLmNyZWF0ZUZpbHRlckNvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5hZGREYXRlRmlsdGVycygpXHJcbiAgICAgICAgLmFkZEZpbHRlcnMoW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnc3RhcnRzQXQnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogeyBraW5kOiAnZGF0ZVJhbmdlJyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ21hcmtldGluZy5zdGFydHMtYXQnKSxcclxuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnc3RhcnRzQXQnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZW5kc0F0JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ2RhdGVSYW5nZScgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdtYXJrZXRpbmcuZW5kcy1hdCcpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdlbmRzQXQnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZW5hYmxlZCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICdib29sZWFuJyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ2NvbW1vbi5lbmFibGVkJyksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ2NvbW1vbi5uYW1lJyksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ25hbWUnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnY291cG9uQ29kZScsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ21hcmtldGluZy5jb3Vwb24tY29kZScpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdjb3Vwb25Db2RlJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ2Rlc2MnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogeyBraW5kOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdjb21tb24uZGVzY3JpcHRpb24nKSxcclxuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnZGVzY3JpcHRpb24nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndXNhZ2VMaW1pdCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICdudW1iZXInIH0sXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXygnbWFya2V0aW5nLnBlci1jdXN0b21lci1saW1pdCcpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdwZXJDdXN0b21lclVzYWdlTGltaXQnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgLmFkZEN1c3RvbUZpZWxkRmlsdGVycyh0aGlzLmN1c3RvbUZpZWxkcylcclxuICAgICAgICAuY29ubmVjdFRvUm91dGUodGhpcy5yb3V0ZSk7XHJcblxyXG4gICAgcmVhZG9ubHkgc29ydHMgPSB0aGlzLmNyZWF0ZVNvcnRDb2xsZWN0aW9uKClcclxuICAgICAgICAuZGVmYXVsdFNvcnQoJ2NyZWF0ZWRBdCcsICdERVNDJylcclxuICAgICAgICAuYWRkU29ydHMoW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdjcmVhdGVkQXQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3VwZGF0ZWRBdCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnc3RhcnRzQXQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuZHNBdCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY291cG9uQ29kZScgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAncGVyQ3VzdG9tZXJVc2FnZUxpbWl0JyB9LFxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgLmFkZEN1c3RvbUZpZWxkU29ydHModGhpcy5jdXN0b21GaWVsZHMpXHJcbiAgICAgICAgLmNvbm5lY3RUb1JvdXRlKHRoaXMucm91dGUpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgc3VwZXIuY29uZmlndXJlKHtcclxuICAgICAgICAgICAgZG9jdW1lbnQ6IEdldFByb21vdGlvbkxpc3REb2N1bWVudCxcclxuICAgICAgICAgICAgZ2V0SXRlbXM6IGRhdGEgPT4gZGF0YS5wcm9tb3Rpb25zLFxyXG4gICAgICAgICAgICBzZXRWYXJpYWJsZXM6IChza2lwLCB0YWtlKSA9PiB0aGlzLmNyZWF0ZVF1ZXJ5T3B0aW9ucyhza2lwLCB0YWtlLCB0aGlzLnNlYXJjaFRlcm1Db250cm9sLnZhbHVlKSxcclxuICAgICAgICAgICAgcmVmcmVzaExpc3RPbkNoYW5nZXM6IFt0aGlzLmZpbHRlcnMudmFsdWVDaGFuZ2VzLCB0aGlzLnNvcnRzLnZhbHVlQ2hhbmdlc10sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVRdWVyeU9wdGlvbnMoXHJcbiAgICAgICAgc2tpcDogbnVtYmVyLFxyXG4gICAgICAgIHRha2U6IG51bWJlcixcclxuICAgICAgICBzZWFyY2hUZXJtOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgKTogeyBvcHRpb25zOiBQcm9tb3Rpb25MaXN0T3B0aW9ucyB9IHtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcnMuY3JlYXRlRmlsdGVySW5wdXQoKTtcclxuICAgICAgICBjb25zdCBzb3J0ID0gdGhpcy5zb3J0cy5jcmVhdGVTb3J0SW5wdXQoKTtcclxuICAgICAgICBsZXQgZmlsdGVyT3BlcmF0b3IgPSBMb2dpY2FsT3BlcmF0b3IuQU5EO1xyXG4gICAgICAgIGlmIChzZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICAgIGZpbHRlci5jb3Vwb25Db2RlID0geyBjb250YWluczogc2VhcmNoVGVybSB9O1xyXG4gICAgICAgICAgICBmaWx0ZXIubmFtZSA9IHsgY29udGFpbnM6IHNlYXJjaFRlcm0gfTtcclxuICAgICAgICAgICAgZmlsdGVyT3BlcmF0b3IgPSBMb2dpY2FsT3BlcmF0b3IuT1I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBza2lwLFxyXG4gICAgICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcixcclxuICAgICAgICAgICAgICAgIGZpbHRlck9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgc29ydCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1ibG9jaz5cclxuICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICA8dmRyLWFiLWxlZnQ+XHJcbiAgICAgICAgICAgIDx2ZHItbGFuZ3VhZ2Utc2VsZWN0b3JcclxuICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVMYW5ndWFnZUNvZGVzXT1cImF2YWlsYWJsZUxhbmd1YWdlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJjb250ZW50TGFuZ3VhZ2UkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgKGxhbmd1YWdlQ29kZUNoYW5nZSk9XCJzZXRMYW5ndWFnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgPjwvdmRyLWxhbmd1YWdlLXNlbGVjdG9yPlxyXG4gICAgICAgIDwvdmRyLWFiLWxlZnQ+XHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJjdXN0b21lci1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBbcm91dGVyTGlua109XCJbJy4vY3JlYXRlJ11cIiAqdmRySWZQZXJtaXNzaW9ucz1cIidDcmVhdGVQcm9tb3Rpb24nXCI+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIHt7ICdtYXJrZXRpbmcuY3JlYXRlLW5ldy1wcm9tb3Rpb24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L3Zkci1hYi1yaWdodD5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcblxyXG48dmRyLWRhdGEtdGFibGUtMlxyXG4gICAgaWQ9XCJwcm9tb3Rpb24tbGlzdFwiXHJcbiAgICBbaXRlbXNdPVwiaXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtcyQgfCBhc3luY1wiXHJcbiAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXHJcbiAgICAocGFnZUNoYW5nZSk9XCJzZXRQYWdlTnVtYmVyKCRldmVudClcIlxyXG4gICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJzZXRJdGVtc1BlclBhZ2UoJGV2ZW50KVwiXHJcbj5cclxuICAgIDx2ZHItYnVsay1hY3Rpb24tbWVudVxyXG4gICAgICAgIGxvY2F0aW9uSWQ9XCJwcm9tb3Rpb24tbGlzdFwiXHJcbiAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXHJcbiAgICAgICAgW3NlbGVjdGlvbk1hbmFnZXJdPVwic2VsZWN0aW9uTWFuYWdlclwiXHJcbiAgICAvPlxyXG4gICAgPHZkci1kdDItc2VhcmNoXHJcbiAgICAgICAgW3NlYXJjaFRlcm1Db250cm9sXT1cInNlYXJjaFRlcm1Db250cm9sXCJcclxuICAgICAgICBbc2VhcmNoVGVybVBsYWNlaG9sZGVyXT1cIidtYXJrZXRpbmcuc2VhcmNoLWJ5LW5hbWUtb3ItY291cG9uLWNvZGUnIHwgdHJhbnNsYXRlXCJcclxuICAgIC8+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5pZCcgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj57eyBwcm9tb3Rpb24uaWQgfX08L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24uY3JlYXRlZC1hdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCdjcmVhdGVkQXQnKVwiXHJcbiAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9tb3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IHByb21vdGlvbi5jcmVhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgICAgICBbc29ydF09XCJzb3J0cy5nZXQoJ3VwZGF0ZWRBdCcpXCJcclxuICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgcHJvbW90aW9uLnVwZGF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiIFtzb3J0XT1cInNvcnRzLmdldCgnbmFtZScpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9tb3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiYnV0dG9uLWdob3N0XCIgW3JvdXRlckxpbmtdPVwiWycuLycsIHByb21vdGlvbi5pZF1cIlxyXG4gICAgICAgICAgICAgICAgPjxzcGFuPiB7eyBwcm9tb3Rpb24ubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImFycm93IHJpZ2h0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uZW5hYmxlZCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPHZkci1jaGlwICpuZ0lmPVwicHJvbW90aW9uLmVuYWJsZWRcIiBjb2xvclR5cGU9XCJzdWNjZXNzXCI+e3tcclxuICAgICAgICAgICAgICAgICdjb21tb24uZW5hYmxlZCcgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCIhcHJvbW90aW9uLmVuYWJsZWRcIiBjb2xvclR5cGU9XCJ3YXJuaW5nXCI+e3tcclxuICAgICAgICAgICAgICAgICdjb21tb24uZGlzYWJsZWQnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH19PC92ZHItY2hpcD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInbWFya2V0aW5nLmNvdXBvbi1jb2RlJyB8IHRyYW5zbGF0ZVwiIFtzb3J0XT1cInNvcnRzLmdldCgnY291cG9uQ29kZScpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9tb3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IHByb21vdGlvbi5jb3Vwb25Db2RlIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ21hcmtldGluZy5zdGFydHMtYXQnIHwgdHJhbnNsYXRlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCdzdGFydHNBdCcpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9tb3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IHByb21vdGlvbi5zdGFydHNBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ21hcmtldGluZy5lbmRzLWF0JyB8IHRyYW5zbGF0ZVwiIFtzb3J0XT1cInNvcnRzLmdldCgnZW5kc0F0JylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgcHJvbW90aW9uLmVuZHNBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICBbaGVhZGluZ109XCInbWFya2V0aW5nLnBlci1jdXN0b21lci1saW1pdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgncGVyQ3VzdG9tZXJVc2FnZUxpbWl0JylcIlxyXG4gICAgICAgIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiXHJcbiAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9tb3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IHByb21vdGlvbi5wZXJDdXN0b21lclVzYWdlTGltaXQgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWN1c3RvbS1maWVsZC1jb2x1bW4gKm5nRm9yPVwibGV0IGN1c3RvbUZpZWxkIG9mIGN1c3RvbUZpZWxkc1wiIFtjdXN0b21GaWVsZF09XCJjdXN0b21GaWVsZFwiIFtzb3J0c109XCJzb3J0c1wiIC8+XHJcbjwvdmRyLWRhdGEtdGFibGUtMj5cclxuIl19
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbW90aW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXJrZXRpbmcvc3JjL2NvbXBvbmVudHMvcHJvbW90aW9uLWxpc3QvcHJvbW90aW9uLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXJrZXRpbmcvc3JjL2NvbXBvbmVudHMvcHJvbW90aW9uLWxpc3QvcHJvbW90aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFDSCx3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLGtCQUFrQixFQUdsQixzQkFBc0IsR0FDekIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFFckMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7TUFTL0Isa0JBQWtCO0NBQ3ZCLENBQUM7QUFRRixNQUFNLE9BQU8sc0JBQ1QsU0FBUSxzQkFBcUU7SUEwRTdFO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUF4RUgsaUJBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsWUFBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRTthQUMzQyxjQUFjLEVBQUU7YUFDaEIsVUFBVSxDQUFDO1lBQ1I7Z0JBQ0ksSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQzNCLEtBQUssRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUM7Z0JBQy9CLFdB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O0lBQ1AsQ0FBQztJQUVPLGtCQUFrQixDQUN0QixJQUFZLEVBQ1osSUFBWSxFQUNaLFVBQXlCO1FBRXpCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLElBQUksY0FBYyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUM7UUFDekMsSUFBSSxVQUFVLEVBQUU7WUFDWixNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDdkMsY0FBYyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUM7U0FDdkM7UUFFRCxPQUFPO1lBQ0gsT0FBTyxFQUFFO2dCQUNMLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixNQUFNO2dCQUNOLGNBQWM7Z0JBQ2QsSUFBSTthQUNQO1NBQ0osQ0FBQztJQUNOLENBQUM7OEdBNUdRLHNCQUFzQjtrR0FBdEIsc0JBQXNCLGlGQzlCbkMsbTBKQWdIQTs7MkZEbEZhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDSSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBHZXRQcm9tb3Rpb25MaXN0RG9jdW1lbnQsXHJcbiAgICBMb2dpY2FsT3BlcmF0b3IsXHJcbiAgICBQUk9NT1RJT05fRlJBR01FTlQsXHJcbiAgICBQcm9tb3Rpb25MaXN0T3B0aW9ucyxcclxuICAgIFByb21vdGlvblNvcnRQYXJhbWV0ZXIsXHJcbiAgICBUeXBlZEJhc2VMaXN0Q29tcG9uZW50LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcblxyXG5leHBvcnQgY29uc3QgR0VUX1BST01PVElPTl9MSVNUID0gZ3FsYFxyXG4gICAgcXVlcnkgR2V0UHJvbW90aW9uTGlzdCgkb3B0aW9uczogUHJvbW90aW9uTGlzdE9wdGlvbnMpIHtcclxuICAgICAgICBwcm9tb3Rpb25zKG9wdGlvbnM6ICRvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zIHtcclxuICAgICAgICAgICAgICAgIC4uLlByb21vdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAke1BST01PVElPTl9GUkFHTUVOVH1cclxuYDtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvbW90aW9uLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb21vdGlvbi1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb21vdGlvbi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb21vdGlvbkxpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlTGlzdENvbXBvbmVudDx0eXBlb2YgR2V0UHJvbW90aW9uTGlzdERvY3VtZW50LCAncHJvbW90aW9ucyc+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgICByZWFkb25seSBjdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9tb3Rpb24nKTtcclxuICAgIHJlYWRvbmx5IGZpbHRlcnMgPSB0aGlzLmNyZWF0ZUZpbHRlckNvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5hZGREYXRlRmlsdGVycygpXHJcbiAgICAgICAgLmFkZEZpbHRlcnMoW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnc3RhcnRzQXQnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogeyBraW5kOiAnZGF0ZVJhbmdlJyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ21hcmtldGluZy5zdGFydHMtYXQnKSxcclxuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnc3RhcnRzQXQnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZW5kc0F0JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ2RhdGVSYW5nZScgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdtYXJrZXRpbmcuZW5kcy1hdCcpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdlbmRzQXQnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZW5hYmxlZCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICdib29sZWFuJyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ2NvbW1vbi5lbmFibGVkJyksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ2NvbW1vbi5uYW1lJyksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ25hbWUnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnY291cG9uQ29kZScsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ21hcmtldGluZy5jb3Vwb24tY29kZScpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdjb3Vwb25Db2RlJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ2Rlc2MnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogeyBraW5kOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdjb21tb24uZGVzY3JpcHRpb24nKSxcclxuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnZGVzY3JpcHRpb24nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAncGVyQ3VzdG9tZXJVc2FnZUxpbWl0JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ251bWJlcicgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdtYXJrZXRpbmcucGVyLWN1c3RvbWVyLWxpbWl0JyksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ3BlckN1c3RvbWVyVXNhZ2VMaW1pdCcsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICd1c2FnZUxpbWl0JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ251bWJlcicgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdtYXJrZXRpbmcudXNhZ2UtbGltaXQnKSxcclxuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkOiAndXNhZ2VMaW1pdCcsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXSlcclxuICAgICAgICAuYWRkQ3VzdG9tRmllbGRGaWx0ZXJzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuXHJcbiAgICByZWFkb25seSBzb3J0cyA9IHRoaXMuY3JlYXRlU29ydENvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5kZWZhdWx0U29ydCgnY3JlYXRlZEF0JywgJ0RFU0MnKVxyXG4gICAgICAgIC5hZGRTb3J0cyhbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NyZWF0ZWRBdCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndXBkYXRlZEF0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdzdGFydHNBdCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5kc0F0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICduYW1lJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjb3Vwb25Db2RlJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdwZXJDdXN0b21lclVzYWdlTGltaXQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3VzYWdlTGltaXQnIH0sXHJcbiAgICAgICAgXSlcclxuICAgICAgICAuYWRkQ3VzdG9tRmllbGRTb3J0cyh0aGlzLmN1c3RvbUZpZWxkcylcclxuICAgICAgICAuY29ubmVjdFRvUm91dGUodGhpcy5yb3V0ZSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICBzdXBlci5jb25maWd1cmUoe1xyXG4gICAgICAgICAgICBkb2N1bWVudDogR2V0UHJvbW90aW9uTGlzdERvY3VtZW50LFxyXG4gICAgICAgICAgICBnZXRJdGVtczogZGF0YSA9PiBkYXRhLnByb21vdGlvbnMsXHJcbiAgICAgICAgICAgIHNldFZhcmlhYmxlczogKHNraXAsIHRha2UpID0+IHRoaXMuY3JlYXRlUXVlcnlPcHRpb25zKHNraXAsIHRha2UsIHRoaXMuc2VhcmNoVGVybUNvbnRyb2wudmFsdWUpLFxyXG4gICAgICAgICAgICByZWZyZXNoTGlzdE9uQ2hhbmdlczogW3RoaXMuZmlsdGVycy52YWx1ZUNoYW5nZXMsIHRoaXMuc29ydHMudmFsdWVDaGFuZ2VzXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVF1ZXJ5T3B0aW9ucyhcclxuICAgICAgICBza2lwOiBudW1iZXIsXHJcbiAgICAgICAgdGFrZTogbnVtYmVyLFxyXG4gICAgICAgIHNlYXJjaFRlcm06IHN0cmluZyB8IG51bGwsXHJcbiAgICApOiB7IG9wdGlvbnM6IFByb21vdGlvbkxpc3RPcHRpb25zIH0ge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVycy5jcmVhdGVGaWx0ZXJJbnB1dCgpO1xyXG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLnNvcnRzLmNyZWF0ZVNvcnRJbnB1dCgpO1xyXG4gICAgICAgIGxldCBmaWx0ZXJPcGVyYXRvciA9IExvZ2ljYWxPcGVyYXRvci5BTkQ7XHJcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgICAgZmlsdGVyLmNvdXBvbkNvZGUgPSB7IGNvbnRhaW5zOiBzZWFyY2hUZXJtIH07XHJcbiAgICAgICAgICAgIGZpbHRlci5uYW1lID0geyBjb250YWluczogc2VhcmNoVGVybSB9O1xyXG4gICAgICAgICAgICBmaWx0ZXJPcGVyYXRvciA9IExvZ2ljYWxPcGVyYXRvci5PUjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIHNraXAsXHJcbiAgICAgICAgICAgICAgICB0YWtlLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyT3BlcmF0b3IsXHJcbiAgICAgICAgICAgICAgICBzb3J0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgIFtjdXJyZW50TGFuZ3VhZ2VDb2RlXT1cImNvbnRlbnRMYW5ndWFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cImN1c3RvbWVyLWxpc3RcIj48L3Zkci1hY3Rpb24tYmFyLWl0ZW1zPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtyb3V0ZXJMaW5rXT1cIlsnLi9jcmVhdGUnXVwiICp2ZHJJZlBlcm1pc3Npb25zPVwiJ0NyZWF0ZVByb21vdGlvbidcIj5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAge3sgJ21hcmtldGluZy5jcmVhdGUtbmV3LXByb21vdGlvbicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuXHJcbjx2ZHItZGF0YS10YWJsZS0yXHJcbiAgICBpZD1cInByb21vdGlvbi1saXN0XCJcclxuICAgIFtpdGVtc109XCJpdGVtcyQgfCBhc3luY1wiXHJcbiAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zJCB8IGFzeW5jXCJcclxuICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZSQgfCBhc3luY1wiXHJcbiAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgIChwYWdlQ2hhbmdlKT1cInNldFBhZ2VOdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInNldEl0ZW1zUGVyUGFnZSgkZXZlbnQpXCJcclxuPlxyXG4gICAgPHZkci1idWxrLWFjdGlvbi1tZW51XHJcbiAgICAgICAgbG9jYXRpb25JZD1cInByb21vdGlvbi1saXN0XCJcclxuICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcclxuICAgICAgICBbc2VsZWN0aW9uTWFuYWdlcl09XCJzZWxlY3Rpb25NYW5hZ2VyXCJcclxuICAgIC8+XHJcbiAgICA8dmRyLWR0Mi1zZWFyY2hcclxuICAgICAgICBbc2VhcmNoVGVybUNvbnRyb2xdPVwic2VhcmNoVGVybUNvbnRyb2xcIlxyXG4gICAgICAgIFtzZWFyY2hUZXJtUGxhY2Vob2xkZXJdPVwiJ21hcmtldGluZy5zZWFyY2gtYnktbmFtZS1vci1jb3Vwb24tY29kZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgLz5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmlkJyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcHJvbW90aW9uPVwiaXRlbVwiPnt7IHByb21vdGlvbi5pZCB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jcmVhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgICAgICBbc29ydF09XCJzb3J0cy5nZXQoJ2NyZWF0ZWRBdCcpXCJcclxuICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgcHJvbW90aW9uLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICBbaGVhZGluZ109XCInY29tbW9uLnVwZGF0ZWQtYXQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIlxyXG4gICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgndXBkYXRlZEF0JylcIlxyXG4gICAgPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcHJvbW90aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBwcm9tb3Rpb24udXBkYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgW29wdGlvbmFsXT1cImZhbHNlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCduYW1lJylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJidXR0b24tZ2hvc3RcIiBbcm91dGVyTGlua109XCJbJy4vJywgcHJvbW90aW9uLmlkXVwiXHJcbiAgICAgICAgICAgICAgICA+PHNwYW4+IHt7IHByb21vdGlvbi5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiYXJyb3cgcmlnaHRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5lbmFibGVkJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcHJvbW90aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCJwcm9tb3Rpb24uZW5hYmxlZFwiIGNvbG9yVHlwZT1cInN1Y2Nlc3NcIj57e1xyXG4gICAgICAgICAgICAgICAgJ2NvbW1vbi5lbmFibGVkJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cIiFwcm9tb3Rpb24uZW5hYmxlZFwiIGNvbG9yVHlwZT1cIndhcm5pbmdcIj57e1xyXG4gICAgICAgICAgICAgICAgJ2NvbW1vbi5kaXNhYmxlZCcgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidtYXJrZXRpbmcuY291cG9uLWNvZGUnIHwgdHJhbnNsYXRlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCdjb3Vwb25Db2RlJylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgcHJvbW90aW9uLmNvdXBvbkNvZGUgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInbWFya2V0aW5nLnN0YXJ0cy1hdCcgfCB0cmFuc2xhdGVcIiBbc29ydF09XCJzb3J0cy5nZXQoJ3N0YXJ0c0F0JylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgcHJvbW90aW9uLnN0YXJ0c0F0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInbWFya2V0aW5nLmVuZHMtYXQnIHwgdHJhbnNsYXRlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCdlbmRzQXQnKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcHJvbW90aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBwcm9tb3Rpb24uZW5kc0F0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgIFtoZWFkaW5nXT1cIidtYXJrZXRpbmcucGVyLWN1c3RvbWVyLWxpbWl0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCdwZXJDdXN0b21lclVzYWdlTGltaXQnKVwiXHJcbiAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgcHJvbW90aW9uLnBlckN1c3RvbWVyVXNhZ2VMaW1pdCB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgW2hlYWRpbmddPVwiJ21hcmtldGluZy5wZXItY3VzdG9tZXItbGltaXQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBbc29ydF09XCJzb3J0cy5nZXQoJ3VzYWdlTGltaXQnKVwiXHJcbiAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb21vdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgcHJvbW90aW9uLnVzYWdlTGltaXQgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWN1c3RvbS1maWVsZC1jb2x1bW4gKm5nRm9yPVwibGV0IGN1c3RvbUZpZWxkIG9mIGN1c3RvbUZpZWxkc1wiIFtjdXN0b21GaWVsZF09XCJjdXN0b21GaWVsZFwiIFtzb3J0c109XCJzb3J0c1wiIC8+XHJcbjwvdmRyLWRhdGEtdGFibGUtMj5cclxuIl19
|