@vendure/admin-ui 2.0.0-next.17 → 2.0.0-next.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/catalog/catalog.module.d.ts +8 -3
- package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +22 -0
- package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +41 -0
- package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
- package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
- package/catalog/components/collection-list/collection-list.component.d.ts +7 -5
- package/catalog/components/collection-tree/collection-tree-node.component.d.ts +10 -6
- package/catalog/components/collection-tree/collection-tree.component.d.ts +3 -1
- package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
- package/catalog/components/facet-list/facet-list.component.d.ts +2 -1
- package/catalog/components/product-detail/product-detail.component.d.ts +1 -1
- package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
- package/catalog/components/product-list/product-list.component.d.ts +4 -2
- package/catalog/public_api.d.ts +6 -0
- package/core/common/generated-types.d.ts +269 -2
- package/core/common/utilities/bulk-action-utils.d.ts +19 -0
- package/core/common/utilities/selection-manager.d.ts +7 -0
- package/core/common/version.d.ts +1 -1
- package/core/data/definitions/collection-definitions.d.ts +3 -0
- package/core/data/definitions/facet-definitions.d.ts +3 -0
- package/core/data/definitions/product-definitions.d.ts +1 -0
- package/core/data/providers/collection-data.service.d.ts +3 -0
- package/core/data/providers/facet-data.service.d.ts +3 -0
- package/core/data/providers/product-data.service.d.ts +1 -0
- package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +9 -0
- package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
- package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
- package/core/providers/modal/modal.types.d.ts +2 -0
- package/core/providers/nav-builder/nav-builder-types.d.ts +1 -0
- package/core/public_api.d.ts +5 -0
- package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +1 -1
- package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +32 -0
- package/core/shared/components/data-table/data-table.component.d.ts +27 -8
- package/core/shared/shared.module.d.ts +32 -31
- package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +11 -4
- package/esm2020/catalog/catalog.module.mjs +31 -6
- package/esm2020/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +4 -1
- package/esm2020/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +50 -0
- package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.mjs +84 -0
- package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.mjs +69 -0
- package/esm2020/catalog/components/collection-contents/collection-contents.component.mjs +1 -1
- package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +3 -3
- package/esm2020/catalog/components/collection-list/collection-list-bulk-actions.mjs +143 -0
- package/esm2020/catalog/components/collection-list/collection-list.component.mjs +16 -7
- package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +13 -6
- package/esm2020/catalog/components/collection-tree/collection-tree.component.mjs +5 -3
- package/esm2020/catalog/components/facet-list/facet-list-bulk-actions.mjs +202 -0
- package/esm2020/catalog/components/facet-list/facet-list.component.mjs +14 -5
- package/esm2020/catalog/components/generate-product-variants/generate-product-variants.component.mjs +1 -1
- package/esm2020/catalog/components/option-value-input/option-value-input.component.mjs +1 -1
- package/esm2020/catalog/components/product-detail/product-detail.component.mjs +34 -22
- package/esm2020/catalog/components/product-list/product-list-bulk-actions.mjs +168 -0
- package/esm2020/catalog/components/product-list/product-list.component.mjs +9 -4
- package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs +3 -3
- package/esm2020/catalog/providers/routing/collection-resolver.mjs +2 -1
- package/esm2020/catalog/public_api.mjs +7 -1
- package/esm2020/core/common/generated-types.mjs +3 -2
- package/esm2020/core/common/introspection-result.mjs +266 -191
- package/esm2020/core/common/utilities/bulk-action-utils.mjs +35 -0
- package/esm2020/core/common/utilities/configurable-operation-utils.mjs +2 -2
- package/esm2020/core/common/utilities/selection-manager.mjs +33 -1
- package/esm2020/core/common/version.mjs +2 -2
- package/esm2020/core/data/definitions/collection-definitions.mjs +30 -1
- package/esm2020/core/data/definitions/facet-definitions.mjs +31 -1
- package/esm2020/core/data/definitions/order-definitions.mjs +443 -443
- package/esm2020/core/data/definitions/product-definitions.mjs +751 -743
- package/esm2020/core/data/providers/collection-data.service.mjs +17 -2
- package/esm2020/core/data/providers/facet-data.service.mjs +18 -2
- package/esm2020/core/data/providers/product-data.service.mjs +7 -2
- package/esm2020/core/data/utils/remove-readonly-custom-fields.mjs +1 -1
- package/esm2020/core/providers/bulk-action-registry/bulk-action-registry.service.mjs +28 -0
- package/esm2020/core/providers/bulk-action-registry/bulk-action-types.mjs +2 -0
- package/esm2020/core/providers/bulk-action-registry/register-bulk-action.mjs +63 -0
- package/esm2020/core/providers/modal/modal.service.mjs +2 -1
- package/esm2020/core/providers/modal/modal.types.mjs +1 -1
- package/esm2020/core/providers/nav-builder/nav-builder-types.mjs +1 -1
- package/esm2020/core/public_api.mjs +6 -1
- package/esm2020/core/shared/components/asset-gallery/asset-gallery.component.mjs +2 -2
- package/esm2020/core/shared/components/bulk-action-menu/bulk-action-menu.component.mjs +97 -0
- package/esm2020/core/shared/components/custom-field-control/custom-field-control.component.mjs +1 -1
- package/esm2020/core/shared/components/data-table/data-table.component.mjs +62 -19
- package/esm2020/core/shared/components/dropdown/dropdown-menu.component.mjs +2 -2
- package/esm2020/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +7 -4
- package/esm2020/core/shared/components/language-selector/language-selector.component.mjs +3 -3
- package/esm2020/core/shared/components/simple-dialog/simple-dialog.component.mjs +3 -3
- package/esm2020/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +1 -1
- package/esm2020/core/shared/pipes/custom-field-label.pipe.mjs +1 -1
- package/esm2020/core/shared/pipes/locale-currency.pipe.mjs +1 -1
- package/esm2020/core/shared/shared.module.mjs +7 -3
- package/esm2020/customer/components/customer-detail/customer-detail.component.mjs +1 -1
- package/esm2020/customer/components/customer-group-list/customer-group-list.component.mjs +3 -3
- package/esm2020/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +3 -3
- package/esm2020/customer/components/customer-list/customer-list.component.mjs +1 -1
- package/esm2020/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +1 -1
- package/esm2020/marketing/components/promotion-list/promotion-list.component.mjs +1 -1
- package/esm2020/order/components/order-editor/order-editor.component.mjs +1 -1
- package/esm2020/order/components/order-list/order-list.component.mjs +1 -1
- package/esm2020/settings/components/administrator-list/administrator-list.component.mjs +1 -1
- package/esm2020/settings/components/channel-list/channel-list.component.mjs +1 -1
- package/esm2020/settings/components/country-list/country-list.component.mjs +1 -1
- package/esm2020/settings/components/payment-method-list/payment-method-list.component.mjs +1 -1
- package/esm2020/settings/components/role-list/role-list.component.mjs +1 -1
- package/esm2020/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +3 -1
- package/esm2020/settings/components/shipping-method-list/shipping-method-list.component.mjs +1 -1
- package/esm2020/settings/components/tax-category-list/tax-category-list.component.mjs +1 -1
- package/esm2020/settings/components/tax-rate-list/tax-rate-list.component.mjs +1 -1
- package/esm2020/settings/components/zone-list/zone-list.component.mjs +3 -3
- package/esm2020/settings/components/zone-member-list/zone-member-list.component.mjs +3 -3
- package/esm2020/system/components/job-list/job-list.component.mjs +1 -1
- package/fesm2015/vendure-admin-ui-catalog.mjs +801 -48
- package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-core.mjs +1916 -1448
- package/fesm2015/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-customer.mjs +6 -6
- package/fesm2015/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-dashboard.mjs +1 -1
- package/fesm2015/vendure-admin-ui-marketing.mjs +1 -1
- package/fesm2015/vendure-admin-ui-order.mjs +1 -1
- package/fesm2015/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-settings.mjs +14 -12
- package/fesm2015/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-system.mjs +1 -1
- package/fesm2020/vendure-admin-ui-catalog.mjs +794 -48
- package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-core.mjs +1909 -1448
- package/fesm2020/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-customer.mjs +6 -6
- package/fesm2020/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-dashboard.mjs +1 -1
- package/fesm2020/vendure-admin-ui-marketing.mjs +1 -1
- package/fesm2020/vendure-admin-ui-order.mjs +1 -1
- package/fesm2020/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-settings.mjs +14 -12
- package/fesm2020/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-system.mjs +1 -1
- package/package.json +2 -2
- package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -1
- package/static/i18n-messages/cs.json +19 -0
- package/static/i18n-messages/de.json +19 -0
- package/static/i18n-messages/en.json +22 -4
- package/static/i18n-messages/es.json +19 -0
- package/static/i18n-messages/fr.json +19 -0
- package/static/i18n-messages/it.json +19 -0
- package/static/i18n-messages/pl.json +19 -0
- package/static/i18n-messages/pt_BR.json +19 -0
- package/static/i18n-messages/pt_PT.json +19 -0
- package/static/i18n-messages/ru.json +19 -0
- package/static/i18n-messages/uk.json +19 -0
- package/static/i18n-messages/zh_Hans.json +19 -0
- package/static/i18n-messages/zh_Hant.json +19 -0
- package/static/styles/global/_overrides.scss +1 -1
- package/static/theme.min.css +1 -1
|
@@ -385,4 +385,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
|
|
|
385
385
|
type: Component,
|
|
386
386
|
args: [{ selector: 'vdr-order-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button class=\"btn btn-secondary\" (click)=\"transitionToPriorState(order)\">\r\n {{ 'order.cancel-modification' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <table class=\"order-table table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th *ngIf=\"orderLineCustomFields.length\">{{ 'common.custom-fields' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let line of order.lines; let i = index\"\r\n class=\"order-line\"\r\n [class.is-cancelled]=\"line.quantity === 0\"\r\n [class.modified]=\"isLineModified(line)\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"line.featuredAsset\"\r\n [src]=\"line.featuredAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.unitPrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"line.quantity\"\r\n (input)=\"updateLineQuantity(line, $event.target.value)\"\r\n />\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n <vdr-line-fulfillment\r\n [line]=\"line\"\r\n [orderState]=\"order.state\"\r\n ></vdr-line-fulfillment>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"OrderLine\"\r\n [customFields]=\"orderLineCustomFields\"\r\n [customFieldsFormGroup]=\"orderLineCustomFieldsFormArray.get([i])\"\r\n [compact]=\"true\"\r\n ></vdr-tabbed-custom-fields>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.linePriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.linePrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n *ngFor=\"let addedLine of addedLines; trackBy: trackByProductVariantId; let i = index\"\r\n class=\"modified\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"addedLine.productAsset\"\r\n [src]=\"addedLine.productAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ addedLine.productVariantName }}</td>\r\n <td class=\"align-middle sku\">{{ addedLine.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ addedLine.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ addedLine.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"addedLine.quantity\"\r\n (input)=\"updateAddedItemQuantity(addedLine, $event.target.value)\"\r\n />\r\n <button class=\"icon-button\" (click)=\"removeAddedItem(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{\r\n (addedLine.priceWithTax * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{\r\n (addedLine.price * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"surcharge\" *ngFor=\"let surcharge of order.surcharges\">\r\n <td class=\"align-middle name left\" colspan=\"2\">{{ surcharge.description }}</td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n {{ surcharge.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surcharge.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n class=\"surcharge modified\"\r\n *ngFor=\"let surcharge of modifyOrderInput.surcharges; let i = index\"\r\n >\r\n <td class=\"align-middle name left\" colspan=\"2\">\r\n {{ surcharge.description }}\r\n <button class=\"icon-button\" (click)=\"removeSurcharge(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n <ng-container *ngIf=\"getSurchargePrices(surcharge) as surchargePrice\">\r\n {{ surchargePrice.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surchargePrice.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr class=\"shipping\">\r\n <td class=\"left clr-align-middle\">{{ 'order.shipping' | translate }}</td>\r\n <td class=\"clr-align-middle\">{{ order.shippingLines[0]?.shippingMethod?.name }}</td>\r\n <td colspan=\"3\"></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.shippingWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.shipping | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <h4 class=\"mb2\">{{ 'order.modifications' | translate }}</h4>\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-item-to-order' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-product-variant-selector class=\"mb4\" (productSelected)=\"addItemSelectedVariant = $event\">\r\n </vdr-product-variant-selector>\r\n <div *ngIf=\"addItemSelectedVariant\" class=\"flex mb4\">\r\n <img\r\n *ngIf=\"addItemSelectedVariant.productAsset as asset\"\r\n [src]=\"asset | assetPreview: 'tiny'\"\r\n class=\"mr4\"\r\n />\r\n <div>\r\n <strong class=\"mr4\">{{ addItemSelectedVariant.productVariantName }}</strong>\r\n <small>{{ addItemSelectedVariant.sku }}</small>\r\n <div>\r\n {{\r\n getSelectedItemPrice(addItemSelectedVariant)\r\n | localeCurrency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [readonly]=\"!addItemSelectedVariant\"\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsForm\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"!addItemSelectedVariant || addItemCustomFieldsForm.invalid\"\r\n (click)=\"addItemToOrder(addItemSelectedVariant)\"\r\n >\r\n {{ 'order.add-item-to-order' | translate }}\r\n </button>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.set-coupon-codes' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <ng-select\r\n [items]=\"availableCouponCodes$ | async\"\r\n appendTo=\"body\"\r\n bindLabel=\"code\"\r\n bindValue=\"code\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n [minTermLength]=\"2\"\r\n typeToSearchText=\"\"\r\n [typeahead]=\"couponCodeInput$\"\r\n [formControl]=\"couponCodesControl\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <vdr-chip>{{ item.code }}</vdr-chip>\r\n {{ item.promotionName }}\r\n </ng-template>\r\n </ng-select>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-surcharge' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <form [formGroup]=\"surchargeForm\" (submit)=\"addSurcharge(surchargeForm.value)\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\"\r\n ><input id=\"description\" type=\"text\" formControlName=\"description\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.product-sku' | translate\" for=\"sku\"\r\n ><input id=\"sku\" type=\"text\" formControlName=\"sku\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'common.price' | translate\" for=\"price\">\r\n <vdr-currency-input\r\n [currencyCode]=\"order.currencyCode\"\r\n id=\"price\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"\r\n 'catalog.price-includes-tax-at'\r\n | translate: { rate: surchargeForm.get('taxRate')?.value }\r\n \"\r\n for=\"priceIncludesTax\"\r\n ><input\r\n id=\"priceIncludesTax\"\r\n type=\"checkbox\"\r\n clrCheckbox\r\n formControlName=\"priceIncludesTax\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-rate' | translate\" for=\"taxRate\">\r\n <vdr-affixed-input suffix=\"%\"\r\n ><input\r\n id=\"taxRate\"\r\n type=\"number\"\r\n min=\"0\"\r\n max=\"100\"\r\n formControlName=\"taxRate\"\r\n /></vdr-affixed-input>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-description' | translate\" for=\"taxDescription\"\r\n ><input id=\"taxDescription\" type=\"text\" formControlName=\"taxDescription\"\r\n /></vdr-form-field>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"\r\n surchargeForm.invalid ||\r\n surchargeForm.pristine ||\r\n surchargeForm.get('price')?.value === 0\r\n \"\r\n >\r\n {{ 'order.add-surcharge' | translate }}\r\n </button>\r\n </form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-shipping-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"shippingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-billing-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"billingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'order.modification-summary' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <ul>\r\n <li *ngIf=\"modifyOrderInput.addItems?.length\">\r\n {{\r\n 'order.modification-adding-items'\r\n | translate: { count: modifyOrderInput.addItems?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.adjustOrderLines?.length\">\r\n {{\r\n 'order.modification-adjusting-lines'\r\n | translate: { count: modifyOrderInput.adjustOrderLines?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.surcharges?.length\">\r\n {{\r\n 'order.modification-adding-surcharges'\r\n | translate: { count: modifyOrderInput.surcharges?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"shippingAddressForm.dirty\">\r\n {{ 'order.modification-updating-shipping-address' | translate }}\r\n </li>\r\n <li *ngIf=\"billingAddressForm.dirty\">\r\n {{ 'order.modification-updating-billing-address' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"card-block\">\r\n <label class=\"clr-control-label\">{{ 'order.note' | translate }}</label>\r\n <textarea [(ngModel)]=\"note\" name=\"note\" clrTextarea required></textarea>\r\n <clr-checkbox-wrapper class=\"\">\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"recalculateShipping\" />\r\n <label>{{ 'order.modification-recalculate-shipping' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button\r\n class=\"btn btn-primary\"\r\n [disabled]=\"!canPreviewChanges()\"\r\n (click)=\"previewAndModify(order)\"\r\n >\r\n {{ 'order.preview-changes' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".order-table .is-cancelled td{text-decoration:line-through;background-color:var(--color-component-bg-200)}.order-table .sub-total td{border-top:1px dashed var(--color-component-border-200)}.order-table .total td{font-weight:700;border-top:1px dashed var(--color-component-border-200)}.order-table td.custom-fields-row{border-top-style:dashed;border-top-color:var(--color-grey-200)}.order-table .order-line-custom-fields{display:flex;flex-wrap:wrap}.order-table .order-line-custom-fields .custom-field{text-align:start;max-width:200px;overflow:hidden;text-overflow:ellipsis;margin-bottom:6px;margin-right:18px}.order-table .order-line-custom-field{background-color:var(--color-component-bg-100)}.order-table .order-line-custom-field .custom-field-ellipsis{color:var(--color-text-300)}.order-table .net-price{font-size:11px;color:var(--color-text-300)}.order-table .promotions-label{-webkit-text-decoration:underline dotted var(--color-text-200);text-decoration:underline dotted var(--color-text-200);font-size:11px;margin-top:6px;cursor:pointer;text-transform:lowercase}.order-table .thumb img{width:50px;height:50px}.order-table tr.modified td{background-color:var(--color-warning-100)}.order-table .order-line-custom-field{text-align:start}\n"] }]
|
|
387
387
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i2.NotificationService }, { type: i2.ModalService }, { type: i3.OrderTransitionService }]; } });
|
|
388
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvb3JkZXItZWRpdG9yL29yZGVyLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWVkaXRvci9vcmRlci1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBR0gsbUJBQW1CLEVBS25CLGdCQUFnQixFQVNoQixTQUFTLEVBRVQsa0NBQWtDLEdBQ3JDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsR0FBRyxFQUNILEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEdBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLGdDQUFnQyxHQUNuQyxNQUFNLG9FQUFvRSxDQUFDOzs7Ozs7Ozs7Ozs7QUF5QjVFLE1BQU0sT0FBTyxvQkFDVCxTQUFRLG1CQUF3QztJQWdDaEQsWUFDSSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsbUJBQXdDLEVBQ2hDLGNBQWlDLEVBQy9CLFdBQXdCLEVBQzFCLG1CQUF3QyxFQUN4QyxZQUEwQixFQUMxQixzQkFBOEM7UUFFdEQsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFOL0MsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzFCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQW5DMUQscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUV6QyxlQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsdUJBQWtCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQU12QyxxQkFBZ0IsR0FBb0I7WUFDaEMsTUFBTSxFQUFFLElBQUk7WUFDWixPQUFPLEVBQUUsRUFBRTtZQUNYLFFBQVEsRUFBRSxFQUFFO1lBQ1osZ0JBQWdCLEVBQUUsRUFBRTtZQUNwQixVQUFVLEVBQUUsRUFBRTtZQUNkLElBQUksRUFBRSxFQUFFO1lBQ1IscUJBQXFCLEVBQUUsRUFBRTtZQUN6QixvQkFBb0IsRUFBRSxFQUFFO1NBQzNCLENBQUM7UUFJRixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1Ysd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRW5CLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7SUFhL0QsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFtQyxFQUFFLEVBQUUsQ0FDaEUsS0FBSyxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7YUFDeEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDakUsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsT0FBTztvQkFDSCxHQUFHLFdBQVc7b0JBQ2QsS0FBSyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7b0JBQzdDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO29CQUMzRCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7aUJBQ3pCLENBQUM7YUFDTDtRQUNMLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUM7UUFDakYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFELElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFNBQVMsQ0FBQztnQkFDL0IsV0FBVyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNyRCxHQUFHLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN4QixLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLGdCQUFnQixFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDdkMsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsY0FBYyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQzthQUN0QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxTQUFTLENBQUM7b0JBQ3JDLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQztvQkFDMUQsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDO29CQUN4RCxXQUFXLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUM7b0JBQ2hFLFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQztvQkFDaEUsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDO29CQUNsRCxRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUM7b0JBQzFELFVBQVUsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQztvQkFDOUQsV0FBVyxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDO29CQUNoRSxXQUFXLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUM7aUJBQ25FLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUN6RjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFNBQVMsQ0FBQztvQkFDcEMsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDO29CQUN6RCxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUM7b0JBQ3ZELFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQztvQkFDL0QsV0FBVyxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO29CQUMvRCxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7b0JBQ2pELFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQztvQkFDekQsVUFBVSxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDO29CQUM3RCxXQUFXLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7b0JBQy9ELFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQztpQkFDbEUsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3ZGO1lBQ0QsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtvQkFDL0MsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUUsSUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2pGO2dCQUNELFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3BFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3ZELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUNqQyxDQUFDO29CQUNGLElBQUksQ0FBQyxTQUFTLEVBQUU7d0JBQ1osU0FBUyxHQUFHOzRCQUNSLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTs0QkFDcEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO3lCQUMxQixDQUFDO3dCQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQzFEO29CQUNELElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRTt3QkFDbkMsU0FBUyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7cUJBQ2xDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdkQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3RCLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FDTCxJQUFJLENBQUMsRUFBRSxDQUNILElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzVDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7U0FDakMsQ0FBQyxDQUFDLE9BQU8sQ0FDakIsRUFDRCxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUU7UUFDbkIsaURBQWlEO1FBQ2pELFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUM5RSxFQUNELFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FDaEIsQ0FDSixDQUFDO1FBQ0YsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNsRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ2hGO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTthQUMvQyxxQkFBcUIsRUFBRTthQUN2QixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzthQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLO2FBQ2pCLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ3RCLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFO2dCQUNGLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSTthQUM1QjtZQUNELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO1NBQ3BFLENBQUM7YUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUEwQjtRQUM3QyxJQUFJLENBQUMsc0JBQXNCO2FBQ3RCLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQzthQUN6RCxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxpQkFBaUI7UUFDYixNQUFNLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6RSxPQUFPLENBQ0gsQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNO1lBQ2xCLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTTtZQUNwQixDQUFDLENBQUMsZ0JBQWdCLEVBQUUsTUFBTTtZQUMxQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztZQUNsRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztZQUNoRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUNoQyxDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUEwQztRQUNyRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUNqRCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQ2pFLENBQUM7SUFDTixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBMEMsRUFBRSxRQUFnQjtRQUMzRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDbkQsSUFBSSxHQUFHLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNwQyx5REFBeUQ7WUFDekQscUJBQXFCO1lBQ3JCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRUQsdUJBQXVCLENBQUMsSUFBZSxFQUFFLFFBQWdCO1FBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BHLElBQUksR0FBRyxFQUFFO1lBQ0wsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUFhLEVBQUUsSUFBZTtRQUNsRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBdUM7UUFDeEQsUUFBUSxNQUFNLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUNyQyxLQUFLLGFBQWE7Z0JBQ2QsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNyQztnQkFDSSxPQUFPLENBQUMsQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBdUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNO1lBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSztZQUNwQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUNyRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakUsSUFBSSxZQUFZLEVBQUU7Z0JBQ2QsR0FBRyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7YUFDbkM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QzthQUFNO1lBQ0gsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxZQUFZLEVBQUU7WUFDZCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDckQsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNyRDtZQUNELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEQsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDcEUsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsR0FBRyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7aUJBQzVCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLG9CQUFvQixDQUN4QixHQUF3QyxFQUN4QyxNQUEyQixFQUMzQixZQUFpQjtRQUVqQixPQUFPLENBQ0gsR0FBRyxDQUFDLGdCQUFnQixLQUFLLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FDcEUsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQXlCO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0I7WUFDM0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0I7WUFDcEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3RCLE9BQU87WUFDSCxLQUFLO1lBQ0wsWUFBWTtTQUNmLENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDckIsS0FBSyxFQUFFLENBQUM7WUFDUixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLE9BQU8sRUFBRSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBMEI7UUFDdkMsTUFBTSxnQkFBZ0IsR0FBb0I7WUFDdEMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3hCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2hFLE9BQU8sa0NBQWtDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2pHLENBQUMsQ0FBQztTQUNMLENBQUM7UUFDRixNQUFNLEtBQUssR0FBcUI7WUFDNUIsR0FBRyxnQkFBZ0I7WUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUM5QixDQUFDLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFO2dCQUMzRCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsTUFBTSxFQUFFLElBQUk7WUFDWixXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztZQUN0RixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ3JCLE9BQU8sRUFBRTtnQkFDTCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2FBQ2hEO1NBQ0osQ0FBQztRQUNGLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7YUFDakIsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUNsQixJQUFJLENBQ0QsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1lBQzFCLFFBQVEsV0FBVyxDQUFDLFVBQVUsRUFBRTtnQkFDNUIsS0FBSyxPQUFPO29CQUNSLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLEVBQUU7d0JBQ3JFLElBQUksRUFBRSxJQUFJO3dCQUNWLFFBQVEsRUFBRSxLQUFLO3dCQUNmLE1BQU0sRUFBRTs0QkFDSixvQkFBb0I7NEJBQ3BCLEtBQUssRUFBRSxXQUFXOzRCQUNsQixxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCOzRCQUNqRCxnQkFBZ0IsRUFBRSxLQUFLO3lCQUMxQjtxQkFDSixDQUFDLENBQUM7Z0JBQ1AsS0FBSyx3QkFBd0IsQ0FBQztnQkFDOUIsS0FBSyx1QkFBdUIsQ0FBQztnQkFDN0IsS0FBSyx5QkFBeUIsQ0FBQztnQkFDL0IsS0FBSyxpQkFBaUIsQ0FBQztnQkFDdkIsS0FBSyw2QkFBNkIsQ0FBQztnQkFDbkMsS0FBSywyQkFBMkIsQ0FBQztnQkFDakMsS0FBSyw2QkFBNkIsQ0FBQztnQkFDbkMsS0FBSyxzQkFBc0IsQ0FBQztnQkFDNUIsS0FBSyx3QkFBd0IsQ0FBQztnQkFDOUIsS0FBSyx3QkFBd0IsQ0FBQyxDQUFDO29CQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEQsT0FBTyxFQUFFLENBQUMsS0FBYyxDQUFDLENBQUM7aUJBQzdCO2dCQUNELEtBQUssSUFBSSxDQUFDO2dCQUNWLEtBQUssU0FBUztvQkFDVixPQUFPLEVBQUUsQ0FBQyxLQUFjLENBQUMsQ0FBQztnQkFDOUI7b0JBQ0ksV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2hDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtnQkFDekQsb0VBQW9FO2dCQUNwRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzFFO2lCQUFNO2dCQUNILHNCQUFzQjtnQkFDdEIsTUFBTSxXQUFXLEdBQUc7b0JBQ2hCLEdBQUcsS0FBSztvQkFDUixNQUFNLEVBQUUsS0FBSztpQkFDaEIsQ0FBQztnQkFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUMsTUFBTSxFQUFFO29CQUM5QyxXQUFXLENBQUMsTUFBTSxHQUFHO3dCQUNqQixTQUFTLEVBQUUsTUFBTSxDQUFDLGVBQWU7d0JBQ2pDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVTtxQkFDNUIsQ0FBQztpQkFDTDtnQkFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ3ZELFNBQVMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxXQUFXLENBQUMsVUFBVSxLQUFLLE9BQU8sRUFBRTt3QkFDcEMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFlBQVksR0FBRyxvQkFBb0IsQ0FBQzt3QkFDbkUsTUFBTSxTQUFTLEdBQ1gsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7d0JBRXZFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLOzZCQUN4QixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQzs2QkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3FCQUMxQjt5QkFBTTt3QkFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFFLFdBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3JFLE9BQU8sS0FBSyxDQUFDO3FCQUNoQjtnQkFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoQixJQUFJLE1BQU0sRUFBRTtnQkFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQzdEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sK0JBQStCLENBQ25DLGVBQTBCLEVBQzFCLE9BQXFDO1FBRXJDLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7WUFDNUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxLQUFLLE1BQU0sY0FBYyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkQsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDakMsTUFBTSxLQUFLLEdBQUksT0FBZSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwRCw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDekU7WUFDRCxlQUFlLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVTLGFBQWEsQ0FBQyxNQUEyQixFQUFFLFlBQTBCO1FBQzNFLGNBQWM7SUFDbEIsQ0FBQzs7aUhBaGJRLG9CQUFvQjtxR0FBcEIsb0JBQW9CLCtFQ2xFakMsdWhzQkEyWEE7MkZEelRhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIEFkZEl0ZW1JbnB1dCxcbiAgICBBZGp1c3RPcmRlckxpbmVJbnB1dCxcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxuICAgIEN1c3RvbUZpZWxkQ29uZmlnLFxuICAgIERhdGFTZXJ2aWNlLFxuICAgIEVycm9yUmVzdWx0LFxuICAgIEdldEF2YWlsYWJsZUNvdW50cmllc1F1ZXJ5LFxuICAgIEhpc3RvcnlFbnRyeVR5cGUsXG4gICAgTGFuZ3VhZ2VDb2RlLFxuICAgIE1vZGFsU2VydmljZSxcbiAgICBNb2RpZnlPcmRlcklucHV0LFxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgT3JkZXJBZGRyZXNzRnJhZ21lbnQsXG4gICAgT3JkZXJEZXRhaWxGcmFnbWVudCxcbiAgICBQcm9kdWN0U2VsZWN0b3JTZWFyY2hRdWVyeSxcbiAgICBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxuICAgIFNvcnRPcmRlcixcbiAgICBTdXJjaGFyZ2VJbnB1dCxcbiAgICB0cmFuc2Zvcm1SZWxhdGlvbkN1c3RvbUZpZWxkSW5wdXRzLFxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcbmltcG9ydCB7IGFzc2VydE5ldmVyLCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XG5pbXBvcnQgeyBzaW1wbGVEZWVwQ2xvbmUgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NpbXBsZS1kZWVwLWNsb25lJztcbmltcG9ydCB7IGNvbmNhdCwgRU1QVFksIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIG1hcCxcbiAgICBtYXBUbyxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBzdGFydFdpdGgsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBPcmRlclRyYW5zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL29yZGVyLXRyYW5zaXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICAgIE9yZGVyRWRpdFJlc3VsdFR5cGUsXG4gICAgT3JkZXJFZGl0c1ByZXZpZXdEaWFsb2dDb21wb25lbnQsXG59IGZyb20gJy4uL29yZGVyLWVkaXRzLXByZXZpZXctZGlhbG9nL29yZGVyLWVkaXRzLXByZXZpZXctZGlhbG9nLmNvbXBvbmVudCc7XG5cbnR5cGUgUHJvZHVjdFNlbGVjdG9ySXRlbSA9IFByb2R1Y3RTZWxlY3RvclNlYXJjaFF1ZXJ5WydzZWFyY2gnXVsnaXRlbXMnXVtudW1iZXJdO1xuXG5pbnRlcmZhY2UgQWRkZWRMaW5lIHtcbiAgICBwcm9kdWN0VmFyaWFudElkOiBzdHJpbmc7XG4gICAgcHJvZHVjdEFzc2V0PzogUHJvZHVjdFNlbGVjdG9ySXRlbVsncHJvZHVjdEFzc2V0J10gfCBudWxsO1xuICAgIHByb2R1Y3RWYXJpYW50TmFtZTogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuICAgIHByaWNlV2l0aFRheDogbnVtYmVyO1xuICAgIHByaWNlOiBudW1iZXI7XG4gICAgcXVhbnRpdHk6IG51bWJlcjtcbn1cblxudHlwZSBNb2RpZnlPcmRlckRhdGEgPSBPbWl0PE1vZGlmeU9yZGVySW5wdXQsICdhZGRJdGVtcycgfCAnYWRqdXN0T3JkZXJMaW5lcyc+ICYge1xuICAgIGFkZEl0ZW1zOiBBcnJheTxBZGRJdGVtSW5wdXQgJiB7IGN1c3RvbUZpZWxkcz86IGFueSB9PjtcbiAgICBhZGp1c3RPcmRlckxpbmVzOiBBcnJheTxBZGp1c3RPcmRlckxpbmVJbnB1dCAmIHsgY3VzdG9tRmllbGRzPzogYW55IH0+O1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd2ZHItb3JkZXItZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3JkZXItZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9vcmRlci1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgT3JkZXJFZGl0b3JDb21wb25lbnRcbiAgICBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8T3JkZXJEZXRhaWxGcmFnbWVudD5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgYXZhaWxhYmxlQ291bnRyaWVzJDogT2JzZXJ2YWJsZTxHZXRBdmFpbGFibGVDb3VudHJpZXNRdWVyeVsnY291bnRyaWVzJ11bJ2l0ZW1zJ10+O1xuICAgIGF2YWlsYWJsZUNvdXBvbkNvZGVzJDogT2JzZXJ2YWJsZTxBcnJheTx7IGNvZGU6IHN0cmluZzsgcHJvbW90aW9uTmFtZTogc3RyaW5nIH0+PjtcbiAgICBjb3Vwb25Db2RlSW5wdXQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIGFkZHJlc3NDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XG4gICAgZGV0YWlsRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgIGNvdXBvbkNvZGVzQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIG9yZGVyTGluZUN1c3RvbUZpZWxkc0Zvcm1BcnJheTogRm9ybUFycmF5O1xuICAgIGFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtQXJyYXk6IEZvcm1BcnJheTtcbiAgICBhZGRJdGVtQ3VzdG9tRmllbGRzRm9ybTogRm9ybUdyb3VwO1xuICAgIGFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQ6IFByb2R1Y3RTZWxlY3Rvckl0ZW0gfCB1bmRlZmluZWQ7XG4gICAgb3JkZXJMaW5lQ3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xuICAgIG1vZGlmeU9yZGVySW5wdXQ6IE1vZGlmeU9yZGVyRGF0YSA9IHtcbiAgICAgICAgZHJ5UnVuOiB0cnVlLFxuICAgICAgICBvcmRlcklkOiAnJyxcbiAgICAgICAgYWRkSXRlbXM6IFtdLFxuICAgICAgICBhZGp1c3RPcmRlckxpbmVzOiBbXSxcbiAgICAgICAgc3VyY2hhcmdlczogW10sXG4gICAgICAgIG5vdGU6ICcnLFxuICAgICAgICB1cGRhdGVTaGlwcGluZ0FkZHJlc3M6IHt9LFxuICAgICAgICB1cGRhdGVCaWxsaW5nQWRkcmVzczoge30sXG4gICAgfTtcbiAgICBzdXJjaGFyZ2VGb3JtOiBGb3JtR3JvdXA7XG4gICAgc2hpcHBpbmdBZGRyZXNzRm9ybTogRm9ybUdyb3VwO1xuICAgIGJpbGxpbmdBZGRyZXNzRm9ybTogRm9ybUdyb3VwO1xuICAgIG5vdGUgPSAnJztcbiAgICByZWNhbGN1bGF0ZVNoaXBwaW5nID0gdHJ1ZTtcbiAgICBwcmV2aW91c1N0YXRlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBhZGRlZFZhcmlhbnRzID0gbmV3IE1hcDxzdHJpbmcsIFByb2R1Y3RTZWxlY3Rvckl0ZW0+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgc2VydmVyQ29uZmlnU2VydmljZTogU2VydmVyQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBvcmRlclRyYW5zaXRpb25TZXJ2aWNlOiBPcmRlclRyYW5zaXRpb25TZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcihyb3V0ZSwgcm91dGVyLCBzZXJ2ZXJDb25maWdTZXJ2aWNlLCBkYXRhU2VydmljZSk7XG4gICAgfVxuXG4gICAgZ2V0IGFkZGVkTGluZXMoKTogQWRkZWRMaW5lW10ge1xuICAgICAgICBjb25zdCBnZXRTaW5nbGVQcmljZVZhbHVlID0gKHByaWNlOiBQcm9kdWN0U2VsZWN0b3JJdGVtWydwcmljZSddKSA9PlxuICAgICAgICAgICAgcHJpY2UuX190eXBlbmFtZSA9PT0gJ1NpbmdsZVByaWNlJyA/IHByaWNlLnZhbHVlIDogMDtcbiAgICAgICAgcmV0dXJuICh0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRkSXRlbXMgfHwgW10pXG4gICAgICAgICAgICAubWFwKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudEluZm8gPSB0aGlzLmFkZGVkVmFyaWFudHMuZ2V0KHJvdy5wcm9kdWN0VmFyaWFudElkKTtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudEluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZhcmlhbnRJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IGdldFNpbmdsZVByaWNlVmFsdWUodmFyaWFudEluZm8ucHJpY2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VXaXRoVGF4OiBnZXRTaW5nbGVQcmljZVZhbHVlKHZhcmlhbnRJbmZvLnByaWNlV2l0aFRheCksXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogcm93LnF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB0aGlzLmFkZHJlc3NDdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdBZGRyZXNzJyk7XG4gICAgICAgIHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5vcmRlcklkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykgYXMgc3RyaW5nO1xuICAgICAgICB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ09yZGVyTGluZScpO1xuICAgICAgICB0aGlzLmVudGl0eSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShvcmRlciA9PiB7XG4gICAgICAgICAgICBpZiAob3JkZXIuY291cG9uQ29kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vwb25Db2Rlc0NvbnRyb2wuc2V0VmFsdWUob3JkZXIuY291cG9uQ29kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdXJjaGFyZ2VGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICAgICAgc2t1OiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgICAgICAgICAgIHByaWNlOiBuZXcgRm9ybUNvbnRyb2woMCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICAgICAgcHJpY2VJbmNsdWRlc1RheDogbmV3IEZvcm1Db250cm9sKHRydWUpLFxuICAgICAgICAgICAgICAgIHRheFJhdGU6IG5ldyBGb3JtQ29udHJvbCgwKSxcbiAgICAgICAgICAgICAgICB0YXhEZXNjcmlwdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LmZ1bGxOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGFueTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uY29tcGFueSksXG4gICAgICAgICAgICAgICAgICAgIHN0cmVldExpbmUxOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5zdHJlZXRMaW5lMSksXG4gICAgICAgICAgICAgICAgICAgIHN0cmVldExpbmUyOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5zdHJlZXRMaW5lMiksXG4gICAgICAgICAgICAgICAgICAgIGNpdHk6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LmNpdHkpLFxuICAgICAgICAgICAgICAgICAgICBwcm92aW5jZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8ucHJvdmluY2UpLFxuICAgICAgICAgICAgICAgICAgICBwb3N0YWxDb2RlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5wb3N0YWxDb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LmNvdW50cnlDb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgcGhvbmVOdW1iZXI6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LnBob25lTnVtYmVyKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAodGhpcy5zaGlwcGluZ0FkZHJlc3NGb3JtLCBvcmRlci5zaGlwcGluZ0FkZHJlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmlsbGluZ0FkZHJlc3NGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LmZ1bGxOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGFueTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5jb21wYW55KSxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWV0TGluZTE6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uc3RyZWV0TGluZTEpLFxuICAgICAgICAgICAgICAgICAgICBzdHJlZXRMaW5lMjogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5zdHJlZXRMaW5lMiksXG4gICAgICAgICAgICAgICAgICAgIGNpdHk6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uY2l0eSksXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpbmNlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LnByb3ZpbmNlKSxcbiAgICAgICAgICAgICAgICAgICAgcG9zdGFsQ29kZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5wb3N0YWxDb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uY291bnRyeUNvZGUpLFxuICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlcjogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5waG9uZU51bWJlciksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRBZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwKHRoaXMuYmlsbGluZ0FkZHJlc3NGb3JtLCBvcmRlci5iaWxsaW5nQWRkcmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkc0Zvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXkoW10pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG9yZGVyLmxpbmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB7IG5hbWUgfSBvZiB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbChuYW1lLCBuZXcgRm9ybUNvbnRyb2woKGxpbmUgYXMgYW55KS5jdXN0b21GaWVsZHNbbmFtZV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGlmeVJvdyA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICBsID0+IGwub3JkZXJMaW5lSWQgPT09IGxpbmUuaWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZ5Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnlSb3cgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJMaW5lSWQ6IGxpbmUuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGxpbmUucXVhbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkanVzdE9yZGVyTGluZXMucHVzaChtb2RpZnlSb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeVJvdy5jdXN0b21GaWVsZHMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzRm9ybUFycmF5LnB1c2goZm9ybUdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ291cG9uQ29kZXMkID0gY29uY2F0KFxuICAgICAgICAgICAgdGhpcy5jb3Vwb25Db2RlSW5wdXQkLnBpcGUoXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgICAgICAgICAgIHRlcm0gPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UucHJvbW90aW9uLmdldFByb21vdGlvbnMoMTAsIDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vwb25Db2RlOiB7IGNvbnRhaW5zOiB0ZXJtIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5zaW5nbGUkLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWFwKCh7IHByb21vdGlvbnMgfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25zLml0ZW1zLm1hcChwID0+ICh7IGNvZGU6IHAuY291cG9uQ29kZSEsIHByb21vdGlvbk5hbWU6IHAubmFtZSB9KSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgoW10pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybUFycmF5ID0gbmV3IEZvcm1BcnJheShbXSk7XG4gICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgZm9yIChjb25zdCBjdXN0b21GaWVsZCBvZiB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcykge1xuICAgICAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybS5hZGRDb250cm9sKGN1c3RvbUZpZWxkLm5hbWUsIG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF2YWlsYWJsZUNvdW50cmllcyQgPSB0aGlzLmRhdGFTZXJ2aWNlLnNldHRpbmdzXG4gICAgICAgICAgICAuZ2V0QXZhaWxhYmxlQ291bnRyaWVzKClcbiAgICAgICAgICAgIC5tYXBTaW5nbGUocmVzdWx0ID0+IHJlc3VsdC5jb3VudHJpZXMuaXRlbXMpXG4gICAgICAgICAgICAucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgIC5nZXRPcmRlckhpc3RvcnkodGhpcy5pZCwge1xuICAgICAgICAgICAgICAgIHRha2U6IDEsXG4gICAgICAgICAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFNvcnRPcmRlci5ERVNDLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsdGVyOiB7IHR5cGU6IHsgZXE6IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfU1RBVEVfVFJBTlNJVElPTiB9IH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNpbmdsZSQuc3Vic2NyaWJlKCh7IG9yZGVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU3RhdGUgPSBvcmRlcj8uaGlzdG9yeS5pdGVtc1swXS5kYXRhLmZyb207XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdHJhbnNpdGlvblRvUHJpb3JTdGF0ZShvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCkge1xuICAgICAgICB0aGlzLm9yZGVyVHJhbnNpdGlvblNlcnZpY2VcbiAgICAgICAgICAgIC50cmFuc2l0aW9uVG9QcmVNb2RpZnlpbmdTdGF0ZShvcmRlci5pZCwgb3JkZXIubmV4dFN0YXRlcylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhblByZXZpZXdDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IGFkZEl0ZW1zLCBhZGp1c3RPcmRlckxpbmVzLCBzdXJjaGFyZ2VzIH0gPSB0aGlzLm1vZGlmeU9yZGVySW5wdXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhIWFkZEl0ZW1zPy5sZW5ndGggfHxcbiAgICAgICAgICAgICEhc3VyY2hhcmdlcz8ubGVuZ3RoIHx8XG4gICAgICAgICAgICAhIWFkanVzdE9yZGVyTGluZXM/Lmxlbmd0aCB8fFxuICAgICAgICAgICAgKHRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybS5kaXJ0eSAmJiB0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0udmFsaWQpIHx8XG4gICAgICAgICAgICAodGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0uZGlydHkgJiYgdGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0udmFsaWQpIHx8XG4gICAgICAgICAgICB0aGlzLmNvdXBvbkNvZGVzQ29udHJvbC5kaXJ0eVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzTGluZU1vZGlmaWVkKGxpbmU6IE9yZGVyRGV0YWlsRnJhZ21lbnRbJ2xpbmVzJ11bbnVtYmVyXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRqdXN0T3JkZXJMaW5lcz8uZmluZChcbiAgICAgICAgICAgIGwgPT4gbC5vcmRlckxpbmVJZCA9PT0gbGluZS5pZCAmJiBsLnF1YW50aXR5ICE9PSBsaW5lLnF1YW50aXR5LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVwZGF0ZUxpbmVRdWFudGl0eShsaW5lOiBPcmRlckRldGFpbEZyYWdtZW50WydsaW5lcyddW251bWJlcl0sIHF1YW50aXR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgeyBhZGp1c3RPcmRlckxpbmVzIH0gPSB0aGlzLm1vZGlmeU9yZGVySW5wdXQ7XG4gICAgICAgIGxldCByb3cgPSBhZGp1c3RPcmRlckxpbmVzPy5maW5kKGwgPT4gbC5vcmRlckxpbmVJZCA9PT0gbGluZS5pZCk7XG4gICAgICAgIGlmIChyb3cgJiYgK3F1YW50aXR5ID09PSBsaW5lLnF1YW50aXR5KSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG1vZGlmaWNhdGlvbiBpZiB0aGUgcXVhbnRpdHkgaXMgdGhlIHNhbWUgYXNcbiAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBvcmRlclxuICAgICAgICAgICAgYWRqdXN0T3JkZXJMaW5lcz8uc3BsaWNlKGFkanVzdE9yZGVyTGluZXM/LmluZGV4T2Yocm93KSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJvdyA9IHsgb3JkZXJMaW5lSWQ6IGxpbmUuaWQsIHF1YW50aXR5OiArcXVhbnRpdHkgfTtcbiAgICAgICAgICAgIGFkanVzdE9yZGVyTGluZXM/LnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgICByb3cucXVhbnRpdHkgPSArcXVhbnRpdHk7XG4gICAgfVxuXG4gICAgdXBkYXRlQWRkZWRJdGVtUXVhbnRpdHkoaXRlbTogQWRkZWRMaW5lLCBxdWFudGl0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcz8uZmluZChsID0+IGwucHJvZHVjdFZhcmlhbnRJZCA9PT0gaXRlbS5wcm9kdWN0VmFyaWFudElkKTtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LnF1YW50aXR5ID0gK3F1YW50aXR5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhY2tCeVByb2R1Y3RWYXJpYW50SWQoaW5kZXg6IG51bWJlciwgaXRlbTogQWRkZWRMaW5lKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnByb2R1Y3RWYXJpYW50SWQ7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRJdGVtUHJpY2UocmVzdWx0OiBQcm9kdWN0U2VsZWN0b3JJdGVtIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgICAgICAgc3dpdGNoIChyZXN1bHQ/LnByaWNlV2l0aFRheC5fX3R5cGVuYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdTaW5nbGVQcmljZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5wcmljZVdpdGhUYXgudmFsdWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkSXRlbVRvT3JkZXIocmVzdWx0OiBQcm9kdWN0U2VsZWN0b3JJdGVtIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VzdG9tRmllbGRzID0gdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm0udmFsdWVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcm93ID0gdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zPy5maW5kKGwgPT5cbiAgICAgICAgICAgIHRoaXMuaXNNYXRjaGluZ0FkZEl0ZW1Sb3cobCwgcmVzdWx0LCBjdXN0b21GaWVsZHMpLFxuICAgICAgICApO1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcm93ID0geyBwcm9kdWN0VmFyaWFudElkOiByZXN1bHQucHJvZHVjdFZhcmlhbnRJZCwgcXVhbnRpdHk6IDEgfTtcbiAgICAgICAgICAgIGlmIChjdXN0b21GaWVsZHMpIHtcbiAgICAgICAgICAgICAgICByb3cuY3VzdG9tRmllbGRzID0gY3VzdG9tRmllbGRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zPy5wdXNoKHJvdyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3cucXVhbnRpdHkrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VzdG9tRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGN1c3RvbUZpZWxkcykpIHtcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbChrZXksIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybUFycmF5LnB1c2goZm9ybUdyb3VwKTtcbiAgICAgICAgICAgIGZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgICAgICAgICByb3cuY3VzdG9tRmllbGRzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybS5yZXNldCh7fSk7XG4gICAgICAgIHRoaXMuYWRkSXRlbVNlbGVjdGVkVmFyaWFudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5hZGRlZFZhcmlhbnRzLnNldChyZXN1bHQucHJvZHVjdFZhcmlhbnRJZCwgcmVzdWx0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTWF0Y2hpbmdBZGRJdGVtUm93KFxuICAgICAgICByb3c6IE1vZGlmeU9yZGVyRGF0YVsnYWRkSXRlbXMnXVtudW1iZXJdLFxuICAgICAgICByZXN1bHQ6IFByb2R1Y3RTZWxlY3Rvckl0ZW0sXG4gICAgICAgIGN1c3RvbUZpZWxkczogYW55LFxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcm93LnByb2R1Y3RWYXJpYW50SWQgPT09IHJlc3VsdC5wcm9kdWN0VmFyaWFudElkICYmXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShyb3cuY3VzdG9tRmllbGRzKSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VzdG9tRmllbGRzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbW92ZUFkZGVkSXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBpZiAoLTEgPCBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFN1cmNoYXJnZVByaWNlcyhzdXJjaGFyZ2U6IFN1cmNoYXJnZUlucHV0KSB7XG4gICAgICAgIGNvbnN0IHByaWNlV2l0aFRheCA9IHN1cmNoYXJnZS5wcmljZUluY2x1ZGVzVGF4XG4gICAgICAgICAgICA/IHN1cmNoYXJnZS5wcmljZVxuICAgICAgICAgICAgOiBNYXRoLnJvdW5kKHN1cmNoYXJnZS5wcmljZSAqICgoMTAwICsgKHN1cmNoYXJnZS50YXhSYXRlIHx8IDApKSAvIDEwMCkpO1xuICAgICAgICBjb25zdCBwcmljZSA9IHN1cmNoYXJnZS5wcmljZUluY2x1ZGVzVGF4XG4gICAgICAgICAgICA/IE1hdGgucm91bmQoc3VyY2hhcmdlLnByaWNlIC8gKCgxMDAgKyAoc3VyY2hhcmdlLnRheFJhdGUgfHwgMCkpIC8gMTAwKSlcbiAgICAgICAgICAgIDogc3VyY2hhcmdlLnByaWNlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpY2UsXG4gICAgICAgICAgICBwcmljZVdpdGhUYXgsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkU3VyY2hhcmdlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LnN1cmNoYXJnZXM/LnB1c2godmFsdWUpO1xuICAgICAgICB0aGlzLnN1cmNoYXJnZUZvcm0ucmVzZXQoe1xuICAgICAgICAgICAgcHJpY2U6IDAsXG4gICAgICAgICAgICBwcmljZUluY2x1ZGVzVGF4OiB0cnVlLFxuICAgICAgICAgICAgdGF4UmF0ZTogMCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlU3VyY2hhcmdlKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LnN1cmNoYXJnZXM/LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcHJldmlld0FuZE1vZGlmeShvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCkge1xuICAgICAgICBjb25zdCBtb2RpZnlPcmRlcklucHV0OiBNb2RpZnlPcmRlckRhdGEgPSB7XG4gICAgICAgICAgICAuLi50aGlzLm1vZGlmeU9yZGVySW5wdXQsXG4gICAgICAgICAgICBhZGp1c3RPcmRlckxpbmVzOiB0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRqdXN0T3JkZXJMaW5lcy5tYXAobGluZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVJlbGF0aW9uQ3VzdG9tRmllbGRJbnB1dHMoc2ltcGxlRGVlcENsb25lKGxpbmUpLCB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaW5wdXQ6IE1vZGlmeU9yZGVySW5wdXQgPSB7XG4gICAgICAgICAgICAuLi5tb2RpZnlPcmRlcklucHV0LFxuICAgICAgICAgICAgLi4uKHRoaXMuYmlsbGluZ0FkZHJlc3NGb3JtLmRpcnR5ID8geyB1cGRhdGVCaWxsaW5nQWRkcmVzczogdGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0udmFsdWUgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLih0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0uZGlydHlcbiAgICAgICAgICAgICAgICA/IHsgdXBkYXRlU2hpcHBpbmdBZGRyZXNzOiB0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0udmFsdWUgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgZHJ5UnVuOiB0cnVlLFxuICAgICAgICAgICAgY291cG9uQ29kZXM6IHRoaXMuY291cG9uQ29kZXNDb250cm9sLmRpcnR5ID8gdGhpcy5jb3Vwb25Db2Rlc0NvbnRyb2wudmFsdWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBub3RlOiB0aGlzLm5vdGUgPz8gJycsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVTaGlwcGluZzogdGhpcy5yZWNhbGN1bGF0ZVNoaXBwaW5nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUb3RhbFdpdGhUYXggPSBvcmRlci50b3RhbFdpdGhUYXg7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgIC5tb2RpZnlPcmRlcihpbnB1dClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBtb2RpZnlPcmRlciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobW9kaWZ5T3JkZXIuX190eXBlbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3JkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5mcm9tQ29tcG9uZW50KE9yZGVyRWRpdHNQcmV2aWV3RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6ICd4bCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFRvdGFsV2l0aFRheCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBtb2RpZnlPcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyTGluZUN1c3RvbUZpZWxkczogdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnlPcmRlcklucHV0OiBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luc3VmZmljaWVudFN0b2NrRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTmVnYXRpdmVRdWFudGl0eUVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ05vQ2hhbmdlc1NwZWNpZmllZEVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyTGltaXRFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlck1vZGlmaWNhdGlvblN0YXRlRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGF5bWVudE1ldGhvZE1pc3NpbmdFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWZ1bmRQYXltZW50SWRNaXNzaW5nRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ291cG9uQ29kZUxpbWl0RXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ291cG9uQ29kZUV4cGlyZWRFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDb3Vwb25Db2RlSW52YWxpZEVycm9yJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihtb2RpZnlPcmRlci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UgYXMgY29uc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlIGFzIGNvbnN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0TmV2ZXIobW9kaWZ5T3JkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5yZXN1bHQgPT09IE9yZGVyRWRpdFJlc3VsdFR5cGUuQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZS1mZXRjaCBzbyB0aGF0IHRoZSBwcmV2aWV3IHZhbHVlcyBnZXQgb3ZlcndyaXR0ZW4gaW4gdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuZ2V0T3JkZXIodGhpcy5pZCkubWFwU2luZ2xlKCgpID0+IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHRoZSBtb2RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdldFJ1bklucHV0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeVJ1bjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQgPT09IE9yZGVyRWRpdFJlc3VsdFR5cGUuUmVmdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2V0UnVuSW5wdXQucmVmdW5kID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50SWQ6IHJlc3VsdC5yZWZ1bmRQYXltZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVzdWx0LnJlZnVuZE5vdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLm1vZGlmeU9yZGVyKHdldFJ1bklucHV0KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBtb2RpZnlPcmRlciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZnlPcmRlci5fX3R5cGVuYW1lID09PSAnT3JkZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZURlbHRhID0gbW9kaWZ5T3JkZXIudG90YWxXaXRoVGF4IC0gb3JpZ2luYWxUb3RhbFdpdGhUYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0U3RhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPCBwcmljZURlbHRhID8gJ0FycmFuZ2luZ0FkZGl0aW9uYWxQYXltZW50JyA6IHRoaXMucHJldmlvdXNTdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHJhbnNpdGlvblRvU3RhdGUob3JkZXIuaWQsIG5leHRTdGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShtYXBUbyh0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoKG1vZGlmeU9yZGVyIGFzIEVycm9yUmVzdWx0KS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQWRkcmVzc0N1c3RvbUZpZWxkc0Zvcm1Hcm91cChcbiAgICAgICAgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXAsXG4gICAgICAgIGFkZHJlc3M/OiBPcmRlckFkZHJlc3NGcmFnbWVudCB8IG51bGwsXG4gICAgKSB7XG4gICAgICAgIGlmIChhZGRyZXNzICYmIHRoaXMuYWRkcmVzc0N1c3RvbUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3VzdG9tRmllbGREZWYgb2YgdGhpcy5hZGRyZXNzQ3VzdG9tRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGN1c3RvbUZpZWxkRGVmLm5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoYWRkcmVzcyBhcyBhbnkpLmN1c3RvbUZpZWxkcz8uW25hbWVdO1xuICAgICAgICAgICAgICAgIGFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAuYWRkQ29udHJvbChuYW1lLCBuZXcgRm9ybUNvbnRyb2wodmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudEZvcm1Hcm91cC5hZGRDb250cm9sKCdjdXN0b21GaWVsZHMnLCBhZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogT3JkZXJEZXRhaWxGcmFnbWVudCwgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpOiB2b2lkIHtcbiAgICAgICAgLyogbm90IHVzZWQgKi9cbiAgICB9XG59XG4iLCI8dmRyLWFjdGlvbi1iYXIgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgb3JkZXJcIj5cclxuICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjbHItYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDx2ZHItZW50aXR5LWluZm8gW2VudGl0eV09XCJlbnRpdHkkIHwgYXN5bmNcIj48L3Zkci1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgPHZkci1vcmRlci1zdGF0ZS1sYWJlbCBbc3RhdGVdPVwib3JkZXIuc3RhdGVcIj48L3Zkci1vcmRlci1zdGF0ZS1sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwidHJhbnNpdGlvblRvUHJpb3JTdGF0ZShvcmRlcilcIj5cclxuICAgICAgICAgICAge3sgJ29yZGVyLmNhbmNlbC1tb2RpZmljYXRpb24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L3Zkci1hYi1yaWdodD5cclxuPC92ZHItYWN0aW9uLWJhcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgb3JkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbHItcm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNsci1jb2wtbGctOFwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJvcmRlci10YWJsZSB0YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIucHJvZHVjdC1uYW1lJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIucHJvZHVjdC1za3UnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci51bml0LXByaWNlJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIucXVhbnRpdHknIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzLmxlbmd0aFwiPnt7ICdjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnRvdGFsJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsaW5lIG9mIG9yZGVyLmxpbmVzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcmRlci1saW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWNhbmNlbGxlZF09XCJsaW5lLnF1YW50aXR5ID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1vZGlmaWVkXT1cImlzTGluZU1vZGlmaWVkKGxpbmUpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB0aHVtYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGluZS5mZWF0dXJlZEFzc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImxpbmUuZmVhdHVyZWRBc3NldCB8IGFzc2V0UHJldmlldzogJ3RpbnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBuYW1lXCI+e3sgbGluZS5wcm9kdWN0VmFyaWFudC5uYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHNrdVwiPnt7IGxpbmUucHJvZHVjdFZhcmlhbnQuc2t1IH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHVuaXQtcHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxpbmUudW5pdFByaWNlV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXQtcHJpY2VcIiBbdGl0bGVdPVwiJ29yZGVyLm5ldC1wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5lLnVuaXRQcmljZSB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgcXVhbnRpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsaW5lLnF1YW50aXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlTGluZVF1YW50aXR5KGxpbmUsICRldmVudC50YXJnZXQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWxpbmUtcmVmdW5kcyBbbGluZV09XCJsaW5lXCIgW3BheW1lbnRzXT1cIm9yZGVyLnBheW1lbnRzXCI+PC92ZHItbGluZS1yZWZ1bmRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1saW5lLWZ1bGZpbGxtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmVdPVwibGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29yZGVyU3RhdGVdPVwib3JkZXIuc3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWxpbmUtZnVsZmlsbG1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcIiBjbGFzcz1cIm9yZGVyLWxpbmUtY3VzdG9tLWZpZWxkIGFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJPcmRlckxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cIm9yZGVyTGluZUN1c3RvbUZpZWxkc0Zvcm1BcnJheS5nZXQoW2ldKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItdGFiYmVkLWN1c3RvbS1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB0b3RhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluZS5saW5lUHJpY2VXaXRoVGF4IHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldC1wcmljZVwiIFt0aXRsZV09XCInb3JkZXIubmV0LXByaWNlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxpbmUubGluZVByaWNlIHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFkZGVkTGluZSBvZiBhZGRlZExpbmVzOyB0cmFja0J5OiB0cmFja0J5UHJvZHVjdFZhcmlhbnRJZDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9kaWZpZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRodW1iXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhZGRlZExpbmUucHJvZHVjdEFzc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImFkZGVkTGluZS5wcm9kdWN0QXNzZXQgfCBhc3NldFByZXZpZXc6ICd0aW55J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgbmFtZVwiPnt7IGFkZGVkTGluZS5wcm9kdWN0VmFyaWFudE5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgc2t1XCI+e3sgYWRkZWRMaW5lLnNrdSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB1bml0LXByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhZGRlZExpbmUucHJpY2VXaXRoVGF4IHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldC1wcmljZVwiIFt0aXRsZV09XCInb3JkZXIubmV0LXByaWNlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFkZGVkTGluZS5wcmljZSB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgcXVhbnRpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhZGRlZExpbmUucXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVBZGRlZEl0ZW1RdWFudGl0eShhZGRlZExpbmUsICRldmVudC50YXJnZXQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idXR0b25cIiAoY2xpY2spPVwicmVtb3ZlQWRkZWRJdGVtKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwidHJhc2hcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcIiBjbGFzcz1cIm9yZGVyLWxpbmUtY3VzdG9tLWZpZWxkIGFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3VzdG9tRmllbGQgb2Ygb3JkZXJMaW5lQ3VzdG9tRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jdXN0b20tZmllbGQtY29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRdPVwiY3VzdG9tRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cImFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtQXJyYXkuZ2V0KFtpXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiT3JkZXJMaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWN1c3RvbS1maWVsZC1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB0b3RhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkZWRMaW5lLnByaWNlV2l0aFRheCAqIGFkZGVkTGluZS5xdWFudGl0eSkgLyAxMDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldC1wcmljZVwiIFt0aXRsZV09XCInb3JkZXIubmV0LXByaWNlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGRlZExpbmUucHJpY2UgKiBhZGRlZExpbmUucXVhbnRpdHkpIC8gMTAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJzdXJjaGFyZ2VcIiAqbmdGb3I9XCJsZXQgc3VyY2hhcmdlIG9mIG9yZGVyLnN1cmNoYXJnZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIG5hbWUgbGVmdFwiIGNvbHNwYW49XCIyXCI+e3sgc3VyY2hhcmdlLmRlc2NyaXB0aW9uIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHNrdVwiPnt7IHN1cmNoYXJnZS5za3UgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzLmxlbmd0aFwiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB0b3RhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VyY2hhcmdlLnByaWNlV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXQtcHJpY2VcIiBbdGl0bGVdPVwiJ29yZGVyLm5ldC1wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdXJjaGFyZ2UucHJpY2UgfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN1cmNoYXJnZSBtb2RpZmllZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdXJjaGFyZ2Ugb2YgbW9kaWZ5T3JkZXJJbnB1dC5zdXJjaGFyZ2VzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBuYW1lIGxlZnRcIiBjb2xzcGFuPVwiMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VyY2hhcmdlLmRlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idXR0b25cIiAoY2xpY2spPVwicmVtb3ZlU3VyY2hhcmdlKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwidHJhc2hcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBza3VcIj57eyBzdXJjaGFyZ2Uuc2t1IH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgdG90YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRTdXJjaGFyZ2VQcmljZXMoc3VyY2hhcmdlKSBhcyBzdXJjaGFyZ2VQcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1cmNoYXJnZVByaWNlLnByaWNlV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV0LXByaWNlXCIgW3RpdGxlXT1cIidvcmRlci5uZXQtcHJpY2UnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1cmNoYXJnZVByaWNlLnByaWNlIHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJzaGlwcGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsZWZ0IGNsci1hbGlnbi1taWRkbGVcIj57eyAnb3JkZXIuc2hpcHBpbmcnIHwgdHJhbnNsYXRlIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2xyLWFsaWduLW1pZGRsZVwiPnt7IG9yZGVyLnNoaXBwaW5nTGluZXNbMF0/LnNoaXBwaW5nTWV0aG9kPy5uYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzLmxlbmd0aFwiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNsci1hbGlnbi1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9yZGVyLnNoaXBwaW5nV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXQtcHJpY2VcIiBbdGl0bGVdPVwiJ29yZGVyLm5ldC1wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmRlci5zaGlwcGluZyB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICAgICAgPGg0IGNsYXNzPVwibWIyXCI+e3sgJ29yZGVyLm1vZGlmaWNhdGlvbnMnIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgICAgICAgICAgPGNsci1hY2NvcmRpb24+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi10aXRsZT57eyAnb3JkZXIuYWRkLWl0ZW0tdG8tb3JkZXInIHwgdHJhbnNsYXRlIH19PC9jbHItYWNjb3JkaW9uLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLWNvbnRlbnQgKmNscklmRXhwYW5kZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItcHJvZHVjdC12YXJpYW50LXNlbGVjdG9yIGNsYXNzPVwibWI0XCIgKHByb2R1Y3RTZWxlY3RlZCk9XCJhZGRJdGVtU2VsZWN0ZWRWYXJpYW50ID0gJGV2ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLXByb2R1Y3QtdmFyaWFudC1zZWxlY3Rvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFkZEl0ZW1TZWxlY3RlZFZhcmlhbnRcIiBjbGFzcz1cImZsZXggbWI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhZGRJdGVtU2VsZWN0ZWRWYXJpYW50LnByb2R1Y3RBc3NldCBhcyBhc3NldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhc3NldCB8IGFzc2V0UHJldmlldzogJ3RpbnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwibXI0XCI+e3sgYWRkSXRlbVNlbGVjdGVkVmFyaWFudC5wcm9kdWN0VmFyaWFudE5hbWUgfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+e3sgYWRkSXRlbVNlbGVjdGVkVmFyaWFudC5za3UgfX08L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTZWxlY3RlZEl0ZW1QcmljZShhZGRJdGVtU2VsZWN0ZWRWYXJpYW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjdXN0b21GaWVsZCBvZiBvcmRlckxpbmVDdXN0b21GaWVsZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY3VzdG9tLWZpZWxkLWNvbnRyb2xcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIWFkZEl0ZW1TZWxlY3RlZFZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZF09XCJjdXN0b21GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJhZGRJdGVtQ3VzdG9tRmllbGRzRm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIk9yZGVyTGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY3VzdG9tLWZpZWxkLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWRkSXRlbVNlbGVjdGVkVmFyaWFudCB8fCBhZGRJdGVtQ3VzdG9tRmllbGRzRm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRJdGVtVG9PcmRlcihhZGRJdGVtU2VsZWN0ZWRWYXJpYW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5hZGQtaXRlbS10by1vcmRlcicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi10aXRsZT57eyAnb3JkZXIuc2V0LWNvdXBvbi1jb2RlcycgfCB0cmFuc2xhdGUgfX08L2Nsci1hY2NvcmRpb24tdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tY29udGVudCAqY2xySWZFeHBhbmRlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImF2YWlsYWJsZUNvdXBvbkNvZGVzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FkZFRhZ109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVNlbGVjdGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pblRlcm1MZW5ndGhdPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVG9TZWFyY2hUZXh0PVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlYWhlYWRdPVwiY291cG9uQ29kZUlucHV0JFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY291cG9uQ29kZXNDb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwPnt7IGl0ZW0uY29kZSB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5wcm9tb3Rpb25OYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvY2xyLWFjY29yZGlvbi1wYW5lbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi10aXRsZT57eyAnb3JkZXIuYWRkLXN1cmNoYXJnZScgfCB0cmFuc2xhdGUgfX08L2Nsci1hY2NvcmRpb24tdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tY29udGVudCAqY2xySWZFeHBhbmRlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzdXJjaGFyZ2VGb3JtXCIgKHN1Ym1pdCk9XCJhZGRTdXJjaGFyZ2Uoc3VyY2hhcmdlRm9ybS52YWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIiBmb3I9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxpbnB1dCBpZD1cImRlc2NyaXB0aW9uXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPjwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidvcmRlci5wcm9kdWN0LXNrdScgfCB0cmFuc2xhdGVcIiBmb3I9XCJza3VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aW5wdXQgaWQ9XCJza3VcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInNrdVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPjwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24ucHJpY2UnIHwgdHJhbnNsYXRlXCIgZm9yPVwicHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWN1cnJlbmN5LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwib3JkZXIuY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwcmljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY3VycmVuY3ktaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0YWxvZy5wcmljZS1pbmNsdWRlcy10YXgtYXQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyByYXRlOiBzdXJjaGFyZ2VGb3JtLmdldCgndGF4UmF0ZScpPy52YWx1ZSB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJwcmljZUluY2x1ZGVzVGF4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicHJpY2VJbmNsdWRlc1RheFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByaWNlSW5jbHVkZXNUYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz48L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInb3JkZXIudGF4LXJhdGUnIHwgdHJhbnNsYXRlXCIgZm9yPVwidGF4UmF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItYWZmaXhlZC1pbnB1dCBzdWZmaXg9XCIlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0YXhSYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGF4UmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz48L3Zkci1hZmZpeGVkLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ29yZGVyLnRheC1kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIiBmb3I9XCJ0YXhEZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxpbnB1dCBpZD1cInRheERlc2NyaXB0aW9uXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ0YXhEZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPjwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJjaGFyZ2VGb3JtLmludmFsaWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VyY2hhcmdlRm9ybS5wcmlzdGluZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJjaGFyZ2VGb3JtLmdldCgncHJpY2UnKT8udmFsdWUgPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5hZGQtc3VyY2hhcmdlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvY2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLXRpdGxlPnt7ICdvcmRlci5lZGl0LXNoaXBwaW5nLWFkZHJlc3MnIHwgdHJhbnNsYXRlIH19PC9jbHItYWNjb3JkaW9uLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLWNvbnRlbnQgKmNscklmRXhwYW5kZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItYWRkcmVzcy1mb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cInNoaXBwaW5nQWRkcmVzc0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZUNvdW50cmllc109XCJhdmFpbGFibGVDb3VudHJpZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJhZGRyZXNzQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWFkZHJlc3MtZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvY2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLXRpdGxlPnt7ICdvcmRlci5lZGl0LWJpbGxpbmctYWRkcmVzcycgfCB0cmFuc2xhdGUgfX08L2Nsci1hY2NvcmRpb24tdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tY29udGVudCAqY2xySWZFeHBhbmRlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1hZGRyZXNzLWZvcm1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiYmlsbGluZ0FkZHJlc3NGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVDb3VudHJpZXNdPVwiYXZhaWxhYmxlQ291bnRyaWVzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiYWRkcmVzc0N1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1hZGRyZXNzLWZvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgIDwvY2xyLWFjY29yZGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xyLWNvbC1sZy00IG9yZGVyLWNhcmRzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIubW9kaWZpY2F0aW9uLXN1bW1hcnknIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJtb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLm1vZGlmaWNhdGlvbi1hZGRpbmctaXRlbXMnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBtb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zPy5sZW5ndGggfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwibW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLm1vZGlmaWNhdGlvbi1hZGp1c3RpbmctbGluZXMnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBtb2RpZnlPcmRlcklucHV0LmFkanVzdE9yZGVyTGluZXM/Lmxlbmd0aCB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJtb2RpZnlPcmRlcklucHV0LnN1cmNoYXJnZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkZXIubW9kaWZpY2F0aW9uLWFkZGluZy1zdXJjaGFyZ2VzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBjb3VudDogbW9kaWZ5T3JkZXJJbnB1dC5zdXJjaGFyZ2VzPy5sZW5ndGggfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwic2hpcHBpbmdBZGRyZXNzRm9ybS5kaXJ0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLm1vZGlmaWNhdGlvbi11cGRhdGluZy1zaGlwcGluZy1hZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJiaWxsaW5nQWRkcmVzc0Zvcm0uZGlydHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5tb2RpZmljYXRpb24tdXBkYXRpbmctYmlsbGluZy1hZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2xyLWNvbnRyb2wtbGFiZWxcIj57eyAnb3JkZXIubm90ZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cIm5vdGVcIiBuYW1lPVwibm90ZVwiIGNsclRleHRhcmVhIHJlcXVpcmVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbHJDaGVja2JveCBbKG5nTW9kZWwpXT1cInJlY2FsY3VsYXRlU2hpcHBpbmdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ29yZGVyLm1vZGlmaWNhdGlvbi1yZWNhbGN1bGF0ZS1zaGlwcGluZycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblByZXZpZXdDaGFuZ2VzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldmlld0FuZE1vZGlmeShvcmRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnByZXZpZXctY2hhbmdlcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvb3JkZXItZWRpdG9yL29yZGVyLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWVkaXRvci9vcmRlci1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBR0gsbUJBQW1CLEVBS25CLGdCQUFnQixFQVNoQixTQUFTLEVBRVQsa0NBQWtDLEdBQ3JDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsR0FBRyxFQUNILEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEdBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLGdDQUFnQyxHQUNuQyxNQUFNLG9FQUFvRSxDQUFDOzs7Ozs7Ozs7Ozs7QUF5QjVFLE1BQU0sT0FBTyxvQkFDVCxTQUFRLG1CQUF3QztJQWdDaEQsWUFDSSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsbUJBQXdD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LElBQUksQ0FBQyxDQUFDO2dCQUNwRCw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDekU7WUFDRCxlQUFlLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVTLGFBQWEsQ0FBQyxNQUEyQixFQUFFLFlBQTBCO1FBQzNFLGNBQWM7SUFDbEIsQ0FBQzs7aUhBaGJRLG9CQUFvQjtxR0FBcEIsb0JBQW9CLCtFQ2xFakMsdWhzQkEyWEE7MkZEelRhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQWRkSXRlbUlucHV0LFxyXG4gICAgQWRqdXN0T3JkZXJMaW5lSW5wdXQsXHJcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIEVycm9yUmVzdWx0LFxyXG4gICAgR2V0QXZhaWxhYmxlQ291bnRyaWVzUXVlcnksXHJcbiAgICBIaXN0b3J5RW50cnlUeXBlLFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgTW9kaWZ5T3JkZXJJbnB1dCxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBPcmRlckFkZHJlc3NGcmFnbWVudCxcclxuICAgIE9yZGVyRGV0YWlsRnJhZ21lbnQsXHJcbiAgICBQcm9kdWN0U2VsZWN0b3JTZWFyY2hRdWVyeSxcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICBTb3J0T3JkZXIsXHJcbiAgICBTdXJjaGFyZ2VJbnB1dCxcclxuICAgIHRyYW5zZm9ybVJlbGF0aW9uQ3VzdG9tRmllbGRJbnB1dHMsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGFzc2VydE5ldmVyLCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IHNpbXBsZURlZXBDbG9uZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvc2ltcGxlLWRlZXAtY2xvbmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIEVNUFRZLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgICBtYXAsXHJcbiAgICBtYXBUbyxcclxuICAgIHNoYXJlUmVwbGF5LFxyXG4gICAgc3RhcnRXaXRoLFxyXG4gICAgc3dpdGNoTWFwLFxyXG4gICAgdGFrZVVudGlsLFxyXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IE9yZGVyVHJhbnNpdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvb3JkZXItdHJhbnNpdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICAgIE9yZGVyRWRpdFJlc3VsdFR5cGUsXHJcbiAgICBPcmRlckVkaXRzUHJldmlld0RpYWxvZ0NvbXBvbmVudCxcclxufSBmcm9tICcuLi9vcmRlci1lZGl0cy1wcmV2aWV3LWRpYWxvZy9vcmRlci1lZGl0cy1wcmV2aWV3LWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxudHlwZSBQcm9kdWN0U2VsZWN0b3JJdGVtID0gUHJvZHVjdFNlbGVjdG9yU2VhcmNoUXVlcnlbJ3NlYXJjaCddWydpdGVtcyddW251bWJlcl07XHJcblxyXG5pbnRlcmZhY2UgQWRkZWRMaW5lIHtcclxuICAgIHByb2R1Y3RWYXJpYW50SWQ6IHN0cmluZztcclxuICAgIHByb2R1Y3RBc3NldD86IFByb2R1Y3RTZWxlY3Rvckl0ZW1bJ3Byb2R1Y3RBc3NldCddIHwgbnVsbDtcclxuICAgIHByb2R1Y3RWYXJpYW50TmFtZTogc3RyaW5nO1xyXG4gICAgc2t1OiBzdHJpbmc7XHJcbiAgICBwcmljZVdpdGhUYXg6IG51bWJlcjtcclxuICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICBxdWFudGl0eTogbnVtYmVyO1xyXG59XHJcblxyXG50eXBlIE1vZGlmeU9yZGVyRGF0YSA9IE9taXQ8TW9kaWZ5T3JkZXJJbnB1dCwgJ2FkZEl0ZW1zJyB8ICdhZGp1c3RPcmRlckxpbmVzJz4gJiB7XHJcbiAgICBhZGRJdGVtczogQXJyYXk8QWRkSXRlbUlucHV0ICYgeyBjdXN0b21GaWVsZHM/OiBhbnkgfT47XHJcbiAgICBhZGp1c3RPcmRlckxpbmVzOiBBcnJheTxBZGp1c3RPcmRlckxpbmVJbnB1dCAmIHsgY3VzdG9tRmllbGRzPzogYW55IH0+O1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1vcmRlci1lZGl0b3InLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL29yZGVyLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9vcmRlci1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgT3JkZXJFZGl0b3JDb21wb25lbnRcclxuICAgIGV4dGVuZHMgQmFzZURldGFpbENvbXBvbmVudDxPcmRlckRldGFpbEZyYWdtZW50PlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgICBhdmFpbGFibGVDb3VudHJpZXMkOiBPYnNlcnZhYmxlPEdldEF2YWlsYWJsZUNvdW50cmllc1F1ZXJ5Wydjb3VudHJpZXMnXVsnaXRlbXMnXT47XHJcbiAgICBhdmFpbGFibGVDb3Vwb25Db2RlcyQ6IE9ic2VydmFibGU8QXJyYXk8eyBjb2RlOiBzdHJpbmc7IHByb21vdGlvbk5hbWU6IHN0cmluZyB9Pj47XHJcbiAgICBjb3Vwb25Db2RlSW5wdXQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgYWRkcmVzc0N1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIGRldGFpbEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIGNvdXBvbkNvZGVzQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgb3JkZXJMaW5lQ3VzdG9tRmllbGRzRm9ybUFycmF5OiBGb3JtQXJyYXk7XHJcbiAgICBhZGRJdGVtQ3VzdG9tRmllbGRzRm9ybUFycmF5OiBGb3JtQXJyYXk7XHJcbiAgICBhZGRJdGVtQ3VzdG9tRmllbGRzRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgYWRkSXRlbVNlbGVjdGVkVmFyaWFudDogUHJvZHVjdFNlbGVjdG9ySXRlbSB8IHVuZGVmaW5lZDtcclxuICAgIG9yZGVyTGluZUN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIG1vZGlmeU9yZGVySW5wdXQ6IE1vZGlmeU9yZGVyRGF0YSA9IHtcclxuICAgICAgICBkcnlSdW46IHRydWUsXHJcbiAgICAgICAgb3JkZXJJZDogJycsXHJcbiAgICAgICAgYWRkSXRlbXM6IFtdLFxyXG4gICAgICAgIGFkanVzdE9yZGVyTGluZXM6IFtdLFxyXG4gICAgICAgIHN1cmNoYXJnZXM6IFtdLFxyXG4gICAgICAgIG5vdGU6ICcnLFxyXG4gICAgICAgIHVwZGF0ZVNoaXBwaW5nQWRkcmVzczoge30sXHJcbiAgICAgICAgdXBkYXRlQmlsbGluZ0FkZHJlc3M6IHt9LFxyXG4gICAgfTtcclxuICAgIHN1cmNoYXJnZUZvcm06IEZvcm1Hcm91cDtcclxuICAgIHNoaXBwaW5nQWRkcmVzc0Zvcm06IEZvcm1Hcm91cDtcclxuICAgIGJpbGxpbmdBZGRyZXNzRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgbm90ZSA9ICcnO1xyXG4gICAgcmVjYWxjdWxhdGVTaGlwcGluZyA9IHRydWU7XHJcbiAgICBwcmV2aW91c1N0YXRlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGFkZGVkVmFyaWFudHMgPSBuZXcgTWFwPHN0cmluZywgUHJvZHVjdFNlbGVjdG9ySXRlbT4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgc2VydmVyQ29uZmlnU2VydmljZTogU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgb3JkZXJUcmFuc2l0aW9uU2VydmljZTogT3JkZXJUcmFuc2l0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYWRkZWRMaW5lcygpOiBBZGRlZExpbmVbXSB7XHJcbiAgICAgICAgY29uc3QgZ2V0U2luZ2xlUHJpY2VWYWx1ZSA9IChwcmljZTogUHJvZHVjdFNlbGVjdG9ySXRlbVsncHJpY2UnXSkgPT5cclxuICAgICAgICAgICAgcHJpY2UuX190eXBlbmFtZSA9PT0gJ1NpbmdsZVByaWNlJyA/IHByaWNlLnZhbHVlIDogMDtcclxuICAgICAgICByZXR1cm4gKHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcyB8fCBbXSlcclxuICAgICAgICAgICAgLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudEluZm8gPSB0aGlzLmFkZGVkVmFyaWFudHMuZ2V0KHJvdy5wcm9kdWN0VmFyaWFudElkKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZhcmlhbnRJbmZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogZ2V0U2luZ2xlUHJpY2VWYWx1ZSh2YXJpYW50SW5mby5wcmljZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlV2l0aFRheDogZ2V0U2luZ2xlUHJpY2VWYWx1ZSh2YXJpYW50SW5mby5wcmljZVdpdGhUYXgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogcm93LnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLmFkZHJlc3NDdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdBZGRyZXNzJyk7XHJcbiAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0Lm9yZGVySWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKSBhcyBzdHJpbmc7XHJcbiAgICAgICAgdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdPcmRlckxpbmUnKTtcclxuICAgICAgICB0aGlzLmVudGl0eSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShvcmRlciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvcmRlci5jb3Vwb25Db2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cG9uQ29kZXNDb250cm9sLnNldFZhbHVlKG9yZGVyLmNvdXBvbkNvZGVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN1cmNoYXJnZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgICAgICAgICAgc2t1OiBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IG5ldyBGb3JtQ29udHJvbCgwLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgICAgIHByaWNlSW5jbHVkZXNUYXg6IG5ldyBGb3JtQ29udHJvbCh0cnVlKSxcclxuICAgICAgICAgICAgICAgIHRheFJhdGU6IG5ldyBGb3JtQ29udHJvbCgwKSxcclxuICAgICAgICAgICAgICAgIHRheERlc2NyaXB0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5mdWxsTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGFueTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uY29tcGFueSksXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWV0TGluZTE6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LnN0cmVldExpbmUxKSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJlZXRMaW5lMjogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uc3RyZWV0TGluZTIpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNpdHk6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LmNpdHkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpbmNlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5wcm92aW5jZSksXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zdGFsQ29kZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSksXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LmNvdW50cnlDb2RlKSxcclxuICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlcjogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8ucGhvbmVOdW1iZXIpLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAodGhpcy5zaGlwcGluZ0FkZHJlc3NGb3JtLCBvcmRlci5zaGlwcGluZ0FkZHJlc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmlsbGluZ0FkZHJlc3NGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uZnVsbE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhbnk6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uY29tcGFueSksXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWV0TGluZTE6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uc3RyZWV0TGluZTEpLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVldExpbmUyOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LnN0cmVldExpbmUyKSxcclxuICAgICAgICAgICAgICAgICAgICBjaXR5OiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LmNpdHkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpbmNlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LnByb3ZpbmNlKSxcclxuICAgICAgICAgICAgICAgICAgICBwb3N0YWxDb2RlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LnBvc3RhbENvZGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LmNvdW50cnlDb2RlKSxcclxuICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlcjogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5waG9uZU51bWJlciksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQWRkcmVzc0N1c3RvbUZpZWxkc0Zvcm1Hcm91cCh0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybSwgb3JkZXIuYmlsbGluZ0FkZHJlc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzRm9ybUFycmF5ID0gbmV3IEZvcm1BcnJheShbXSk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBvcmRlci5saW5lcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSB9IG9mIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2wobmFtZSwgbmV3IEZvcm1Db250cm9sKChsaW5lIGFzIGFueSkuY3VzdG9tRmllbGRzW25hbWVdKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtb2RpZnlSb3cgPSB0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRqdXN0T3JkZXJMaW5lcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsID0+IGwub3JkZXJMaW5lSWQgPT09IGxpbmUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZGlmeVJvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnlSb3cgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlckxpbmVJZDogbGluZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBsaW5lLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRqdXN0T3JkZXJMaW5lcy5wdXNoKG1vZGlmeVJvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5Um93LmN1c3RvbUZpZWxkcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHNGb3JtQXJyYXkucHVzaChmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVDb3Vwb25Db2RlcyQgPSBjb25jYXQoXHJcbiAgICAgICAgICAgIHRoaXMuY291cG9uQ29kZUlucHV0JC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UucHJvbW90aW9uLmdldFByb21vdGlvbnMoMTAsIDAsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXBvbkNvZGU6IHsgY29udGFpbnM6IHRlcm0gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuc2luZ2xlJCxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBtYXAoKHsgcHJvbW90aW9ucyB9KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25zLml0ZW1zLm1hcChwID0+ICh7IGNvZGU6IHAuY291cG9uQ29kZSEsIHByb21vdGlvbk5hbWU6IHAubmFtZSB9KSksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKFtdKSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXkoW10pO1xyXG4gICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICBmb3IgKGNvbnN0IGN1c3RvbUZpZWxkIG9mIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm0uYWRkQ29udHJvbChjdXN0b21GaWVsZC5uYW1lLCBuZXcgRm9ybUNvbnRyb2woKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ291bnRyaWVzJCA9IHRoaXMuZGF0YVNlcnZpY2Uuc2V0dGluZ3NcclxuICAgICAgICAgICAgLmdldEF2YWlsYWJsZUNvdW50cmllcygpXHJcbiAgICAgICAgICAgIC5tYXBTaW5nbGUocmVzdWx0ID0+IHJlc3VsdC5jb3VudHJpZXMuaXRlbXMpXHJcbiAgICAgICAgICAgIC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgIC5nZXRPcmRlckhpc3RvcnkodGhpcy5pZCwge1xyXG4gICAgICAgICAgICAgICAgdGFrZTogMSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFNvcnRPcmRlci5ERVNDLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcjogeyB0eXBlOiB7IGVxOiBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1NUQVRFX1RSQU5TSVRJT04gfSB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc2luZ2xlJC5zdWJzY3JpYmUoKHsgb3JkZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1N0YXRlID0gb3JkZXI/Lmhpc3RvcnkuaXRlbXNbMF0uZGF0YS5mcm9tO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uVG9QcmlvclN0YXRlKG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KSB7XHJcbiAgICAgICAgdGhpcy5vcmRlclRyYW5zaXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC50cmFuc2l0aW9uVG9QcmVNb2RpZnlpbmdTdGF0ZShvcmRlci5pZCwgb3JkZXIubmV4dFN0YXRlcylcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLiddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhblByZXZpZXdDaGFuZ2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHsgYWRkSXRlbXMsIGFkanVzdE9yZGVyTGluZXMsIHN1cmNoYXJnZXMgfSA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIWFkZEl0ZW1zPy5sZW5ndGggfHxcclxuICAgICAgICAgICAgISFzdXJjaGFyZ2VzPy5sZW5ndGggfHxcclxuICAgICAgICAgICAgISFhZGp1c3RPcmRlckxpbmVzPy5sZW5ndGggfHxcclxuICAgICAgICAgICAgKHRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybS5kaXJ0eSAmJiB0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0udmFsaWQpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybS5kaXJ0eSAmJiB0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybS52YWxpZCkgfHxcclxuICAgICAgICAgICAgdGhpcy5jb3Vwb25Db2Rlc0NvbnRyb2wuZGlydHlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTGluZU1vZGlmaWVkKGxpbmU6IE9yZGVyRGV0YWlsRnJhZ21lbnRbJ2xpbmVzJ11bbnVtYmVyXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzPy5maW5kKFxyXG4gICAgICAgICAgICBsID0+IGwub3JkZXJMaW5lSWQgPT09IGxpbmUuaWQgJiYgbC5xdWFudGl0eSAhPT0gbGluZS5xdWFudGl0eSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVRdWFudGl0eShsaW5lOiBPcmRlckRldGFpbEZyYWdtZW50WydsaW5lcyddW251bWJlcl0sIHF1YW50aXR5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB7IGFkanVzdE9yZGVyTGluZXMgfSA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dDtcclxuICAgICAgICBsZXQgcm93ID0gYWRqdXN0T3JkZXJMaW5lcz8uZmluZChsID0+IGwub3JkZXJMaW5lSWQgPT09IGxpbmUuaWQpO1xyXG4gICAgICAgIGlmIChyb3cgJiYgK3F1YW50aXR5ID09PSBsaW5lLnF1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgbW9kaWZpY2F0aW9uIGlmIHRoZSBxdWFudGl0eSBpcyB0aGUgc2FtZSBhc1xyXG4gICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgb3JkZXJcclxuICAgICAgICAgICAgYWRqdXN0T3JkZXJMaW5lcz8uc3BsaWNlKGFkanVzdE9yZGVyTGluZXM/LmluZGV4T2Yocm93KSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcm93KSB7XHJcbiAgICAgICAgICAgIHJvdyA9IHsgb3JkZXJMaW5lSWQ6IGxpbmUuaWQsIHF1YW50aXR5OiArcXVhbnRpdHkgfTtcclxuICAgICAgICAgICAgYWRqdXN0T3JkZXJMaW5lcz8ucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb3cucXVhbnRpdHkgPSArcXVhbnRpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQWRkZWRJdGVtUXVhbnRpdHkoaXRlbTogQWRkZWRMaW5lLCBxdWFudGl0eTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zPy5maW5kKGwgPT4gbC5wcm9kdWN0VmFyaWFudElkID09PSBpdGVtLnByb2R1Y3RWYXJpYW50SWQpO1xyXG4gICAgICAgIGlmIChyb3cpIHtcclxuICAgICAgICAgICAgcm93LnF1YW50aXR5ID0gK3F1YW50aXR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5UHJvZHVjdFZhcmlhbnRJZChpbmRleDogbnVtYmVyLCBpdGVtOiBBZGRlZExpbmUpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5wcm9kdWN0VmFyaWFudElkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdGVkSXRlbVByaWNlKHJlc3VsdDogUHJvZHVjdFNlbGVjdG9ySXRlbSB8IHVuZGVmaW5lZCk6IG51bWJlciB7XHJcbiAgICAgICAgc3dpdGNoIChyZXN1bHQ/LnByaWNlV2l0aFRheC5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ1NpbmdsZVByaWNlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucHJpY2VXaXRoVGF4LnZhbHVlO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEl0ZW1Ub09yZGVyKHJlc3VsdDogUHJvZHVjdFNlbGVjdG9ySXRlbSB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VzdG9tRmllbGRzID0gdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybS52YWx1ZVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICBsZXQgcm93ID0gdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zPy5maW5kKGwgPT5cclxuICAgICAgICAgICAgdGhpcy5pc01hdGNoaW5nQWRkSXRlbVJvdyhsLCByZXN1bHQsIGN1c3RvbUZpZWxkcyksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXJvdykge1xyXG4gICAgICAgICAgICByb3cgPSB7IHByb2R1Y3RWYXJpYW50SWQ6IHJlc3VsdC5wcm9kdWN0VmFyaWFudElkLCBxdWFudGl0eTogMSB9O1xyXG4gICAgICAgICAgICBpZiAoY3VzdG9tRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICByb3cuY3VzdG9tRmllbGRzID0gY3VzdG9tRmllbGRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcz8ucHVzaChyb3cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJvdy5xdWFudGl0eSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY3VzdG9tRmllbGRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjdXN0b21GaWVsZHMpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbChrZXksIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm1BcnJheS5wdXNoKGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIGZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocm93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LmN1c3RvbUZpZWxkcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybS5yZXNldCh7fSk7XHJcbiAgICAgICAgdGhpcy5hZGRJdGVtU2VsZWN0ZWRWYXJpYW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuYWRkZWRWYXJpYW50cy5zZXQocmVzdWx0LnByb2R1Y3RWYXJpYW50SWQsIHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc01hdGNoaW5nQWRkSXRlbVJvdyhcclxuICAgICAgICByb3c6IE1vZGlmeU9yZGVyRGF0YVsnYWRkSXRlbXMnXVtudW1iZXJdLFxyXG4gICAgICAgIHJlc3VsdDogUHJvZHVjdFNlbGVjdG9ySXRlbSxcclxuICAgICAgICBjdXN0b21GaWVsZHM6IGFueSxcclxuICAgICk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHJvdy5wcm9kdWN0VmFyaWFudElkID09PSByZXN1bHQucHJvZHVjdFZhcmlhbnRJZCAmJlxyXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShyb3cuY3VzdG9tRmllbGRzKSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VzdG9tRmllbGRzKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQWRkZWRJdGVtKGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRkSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAoLTEgPCBpbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTdXJjaGFyZ2VQcmljZXMoc3VyY2hhcmdlOiBTdXJjaGFyZ2VJbnB1dCkge1xyXG4gICAgICAgIGNvbnN0IHByaWNlV2l0aFRheCA9IHN1cmNoYXJnZS5wcmljZUluY2x1ZGVzVGF4XHJcbiAgICAgICAgICAgID8gc3VyY2hhcmdlLnByaWNlXHJcbiAgICAgICAgICAgIDogTWF0aC5yb3VuZChzdXJjaGFyZ2UucHJpY2UgKiAoKDEwMCArIChzdXJjaGFyZ2UudGF4UmF0ZSB8fCAwKSkgLyAxMDApKTtcclxuICAgICAgICBjb25zdCBwcmljZSA9IHN1cmNoYXJnZS5wcmljZUluY2x1ZGVzVGF4XHJcbiAgICAgICAgICAgID8gTWF0aC5yb3VuZChzdXJjaGFyZ2UucHJpY2UgLyAoKDEwMCArIChzdXJjaGFyZ2UudGF4UmF0ZSB8fCAwKSkgLyAxMDApKVxyXG4gICAgICAgICAgICA6IHN1cmNoYXJnZS5wcmljZTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcmljZSxcclxuICAgICAgICAgICAgcHJpY2VXaXRoVGF4LFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU3VyY2hhcmdlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQuc3VyY2hhcmdlcz8ucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zdXJjaGFyZ2VGb3JtLnJlc2V0KHtcclxuICAgICAgICAgICAgcHJpY2U6IDAsXHJcbiAgICAgICAgICAgIHByaWNlSW5jbHVkZXNUYXg6IHRydWUsXHJcbiAgICAgICAgICAgIHRheFJhdGU6IDAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlU3VyY2hhcmdlKGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQuc3VyY2hhcmdlcz8uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2aWV3QW5kTW9kaWZ5KG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KSB7XHJcbiAgICAgICAgY29uc3QgbW9kaWZ5T3JkZXJJbnB1dDogTW9kaWZ5T3JkZXJEYXRhID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm1vZGlmeU9yZGVySW5wdXQsXHJcbiAgICAgICAgICAgIGFkanVzdE9yZGVyTGluZXM6IHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzLm1hcChsaW5lID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1SZWxhdGlvbkN1c3RvbUZpZWxkSW5wdXRzKHNpbXBsZURlZXBDbG9uZShsaW5lKSwgdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGlucHV0OiBNb2RpZnlPcmRlcklucHV0ID0ge1xyXG4gICAgICAgICAgICAuLi5tb2RpZnlPcmRlcklucHV0LFxyXG4gICAgICAgICAgICAuLi4odGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0uZGlydHkgPyB7IHVwZGF0ZUJpbGxpbmdBZGRyZXNzOiB0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybS52YWx1ZSB9IDoge30pLFxyXG4gICAgICAgICAgICAuLi4odGhpcy5zaGlwcGluZ0FkZHJlc3NGb3JtLmRpcnR5XHJcbiAgICAgICAgICAgICAgICA/IHsgdXBkYXRlU2hpcHBpbmdBZGRyZXNzOiB0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0udmFsdWUgfVxyXG4gICAgICAgICAgICAgICAgOiB7fSksXHJcbiAgICAgICAgICAgIGRyeVJ1bjogdHJ1ZSxcclxuICAgICAgICAgICAgY291cG9uQ29kZXM6IHRoaXMuY291cG9uQ29kZXNDb250cm9sLmRpcnR5ID8gdGhpcy5jb3Vwb25Db2Rlc0NvbnRyb2wudmFsdWUgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIG5vdGU6IHRoaXMubm90ZSA/PyAnJyxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVTaGlwcGluZzogdGhpcy5yZWNhbGN1bGF0ZVNoaXBwaW5nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUb3RhbFdpdGhUYXggPSBvcmRlci50b3RhbFdpdGhUYXg7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlclxyXG4gICAgICAgICAgICAubW9kaWZ5T3JkZXIoaW5wdXQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IG1vZGlmeU9yZGVyIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGlmeU9yZGVyLl9fdHlwZW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3JkZXInOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoT3JkZXJFZGl0c1ByZXZpZXdEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAneGwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxUb3RhbFdpdGhUYXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBtb2RpZnlPcmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJMaW5lQ3VzdG9tRmllbGRzOiB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5T3JkZXJJbnB1dDogaW5wdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbnN1ZmZpY2llbnRTdG9ja0Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTmVnYXRpdmVRdWFudGl0eUVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTm9DaGFuZ2VzU3BlY2lmaWVkRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlckxpbWl0RXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlck1vZGlmaWNhdGlvblN0YXRlRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQYXltZW50TWV0aG9kTWlzc2luZ0Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUmVmdW5kUGF5bWVudElkTWlzc2luZ0Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ291cG9uQ29kZUxpbWl0RXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDb3Vwb25Db2RlRXhwaXJlZEVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ291cG9uQ29kZUludmFsaWRFcnJvcic6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihtb2RpZnlPcmRlci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSBhcyBjb25zdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBudWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSBhcyBjb25zdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnROZXZlcihtb2RpZnlPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQucmVzdWx0ID09PSBPcmRlckVkaXRSZXN1bHRUeXBlLkNhbmNlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZS1mZXRjaCBzbyB0aGF0IHRoZSBwcmV2aWV3IHZhbHVlcyBnZXQgb3ZlcndyaXR0ZW4gaW4gdGhlIGNhY2hlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlci5nZXRPcmRlcih0aGlzLmlkKS5tYXBTaW5nbGUoKCkgPT4gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHRoZSBtb2RpZmljYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2V0UnVuSW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeVJ1bjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0ID09PSBPcmRlckVkaXRSZXN1bHRUeXBlLlJlZnVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2V0UnVuSW5wdXQucmVmdW5kID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheW1lbnRJZDogcmVzdWx0LnJlZnVuZFBheW1lbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHJlc3VsdC5yZWZ1bmROb3RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlci5tb2RpZnlPcmRlcih3ZXRSdW5JbnB1dCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBtb2RpZnlPcmRlciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmeU9yZGVyLl9fdHlwZW5hbWUgPT09ICdPcmRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpY2VEZWx0YSA9IG1vZGlmeU9yZGVyLnRvdGFsV2l0aFRheCAtIG9yaWdpbmFsVG90YWxXaXRoVGF4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0U3RhdGUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA8IHByaWNlRGVsdGEgPyAnQXJyYW5naW5nQWRkaXRpb25hbFBheW1lbnQnIDogdGhpcy5wcmV2aW91c1N0YXRlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2l0aW9uVG9TdGF0ZShvcmRlci5pZCwgbmV4dFN0YXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwVG8odHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcigobW9kaWZ5T3JkZXIgYXMgRXJyb3JSZXN1bHQpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRBZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwKFxyXG4gICAgICAgIHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwLFxyXG4gICAgICAgIGFkZHJlc3M/OiBPcmRlckFkZHJlc3NGcmFnbWVudCB8IG51bGwsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoYWRkcmVzcyAmJiB0aGlzLmFkZHJlc3NDdXN0b21GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjdXN0b21GaWVsZERlZiBvZiB0aGlzLmFkZHJlc3NDdXN0b21GaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBjdXN0b21GaWVsZERlZi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoYWRkcmVzcyBhcyBhbnkpLmN1c3RvbUZpZWxkcz8uW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0N1c3RvbUZpZWxkc0Zvcm1Hcm91cC5hZGRDb250cm9sKG5hbWUsIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudEZvcm1Hcm91cC5hZGRDb250cm9sKCdjdXN0b21GaWVsZHMnLCBhZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoZW50aXR5OiBPcmRlckRldGFpbEZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSk6IHZvaWQge1xyXG4gICAgICAgIC8qIG5vdCB1c2VkICovXHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1hY3Rpb24tYmFyICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIG9yZGVyXCI+XHJcbiAgICA8dmRyLWFiLWxlZnQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2xyLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8dmRyLWVudGl0eS1pbmZvIFtlbnRpdHldPVwiZW50aXR5JCB8IGFzeW5jXCI+PC92ZHItZW50aXR5LWluZm8+XHJcbiAgICAgICAgICAgIDx2ZHItb3JkZXItc3RhdGUtbGFiZWwgW3N0YXRlXT1cIm9yZGVyLnN0YXRlXCI+PC92ZHItb3JkZXItc3RhdGUtbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cInRyYW5zaXRpb25Ub1ByaW9yU3RhdGUob3JkZXIpXCI+XHJcbiAgICAgICAgICAgIHt7ICdvcmRlci5jYW5jZWwtbW9kaWZpY2F0aW9uJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC92ZHItYWItcmlnaHQ+XHJcbjwvdmRyLWFjdGlvbi1iYXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIG9yZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2xyLXJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbHItY29sLWxnLThcIj5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwib3JkZXItdGFibGUgdGFibGVcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnByb2R1Y3QtbmFtZScgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnByb2R1Y3Qtc2t1JyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIudW5pdC1wcmljZScgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnF1YW50aXR5JyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcIj57eyAnY29tbW9uLmN1c3RvbS1maWVsZHMnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci50b3RhbCcgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGluZSBvZiBvcmRlci5saW5lczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3JkZXItbGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1jYW5jZWxsZWRdPVwibGluZS5xdWFudGl0eSA9PT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tb2RpZmllZF09XCJpc0xpbmVNb2RpZmllZChsaW5lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGh1bWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxpbmUuZmVhdHVyZWRBc3NldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJsaW5lLmZlYXR1cmVkQXNzZXQgfCBhc3NldFByZXZpZXc6ICd0aW55J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgbmFtZVwiPnt7IGxpbmUucHJvZHVjdFZhcmlhbnQubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBza3VcIj57eyBsaW5lLnByb2R1Y3RWYXJpYW50LnNrdSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB1bml0LXByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5lLnVuaXRQcmljZVdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV0LXByaWNlXCIgW3RpdGxlXT1cIidvcmRlci5uZXQtcHJpY2UnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluZS51bml0UHJpY2UgfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHF1YW50aXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGluZS5xdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZUxpbmVRdWFudGl0eShsaW5lLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1saW5lLXJlZnVuZHMgW2xpbmVdPVwibGluZVwiIFtwYXltZW50c109XCJvcmRlci5wYXltZW50c1wiPjwvdmRyLWxpbmUtcmVmdW5kcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItbGluZS1mdWxmaWxsbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5lXT1cImxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcmRlclN0YXRlXT1cIm9yZGVyLnN0YXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1saW5lLWZ1bGZpbGxtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJvcmRlckxpbmVDdXN0b21GaWVsZHMubGVuZ3RoXCIgY2xhc3M9XCJvcmRlci1saW5lLWN1c3RvbS1maWVsZCBhbGlnbi1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiT3JkZXJMaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cIm9yZGVyTGluZUN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJvcmRlckxpbmVDdXN0b21GaWVsZHNGb3JtQXJyYXkuZ2V0KFtpXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgdG90YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxpbmUubGluZVByaWNlV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXQtcHJpY2VcIiBbdGl0bGVdPVwiJ29yZGVyLm5ldC1wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5lLmxpbmVQcmljZSB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhZGRlZExpbmUgb2YgYWRkZWRMaW5lczsgdHJhY2tCeTogdHJhY2tCeVByb2R1Y3RWYXJpYW50SWQ7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1vZGlmaWVkXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB0aHVtYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWRkZWRMaW5lLnByb2R1Y3RBc3NldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhZGRlZExpbmUucHJvZHVjdEFzc2V0IHwgYXNzZXRQcmV2aWV3OiAndGlueSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIG5hbWVcIj57eyBhZGRlZExpbmUucHJvZHVjdFZhcmlhbnROYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHNrdVwiPnt7IGFkZGVkTGluZS5za3UgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgdW5pdC1wcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWRkZWRMaW5lLnByaWNlV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXQtcHJpY2VcIiBbdGl0bGVdPVwiJ29yZGVyLm5ldC1wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhZGRlZExpbmUucHJpY2UgfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHF1YW50aXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYWRkZWRMaW5lLnF1YW50aXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlQWRkZWRJdGVtUXVhbnRpdHkoYWRkZWRMaW5lLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnV0dG9uXCIgKGNsaWNrKT1cInJlbW92ZUFkZGVkSXRlbShpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJvcmRlckxpbmVDdXN0b21GaWVsZHMubGVuZ3RoXCIgY2xhc3M9XCJvcmRlci1saW5lLWN1c3RvbS1maWVsZCBhbGlnbi1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGN1c3RvbUZpZWxkIG9mIG9yZGVyTGluZUN1c3RvbUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY3VzdG9tLWZpZWxkLWNvbnRyb2xcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkXT1cImN1c3RvbUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJhZGRJdGVtQ3VzdG9tRmllbGRzRm9ybUFycmF5LmdldChbaV0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIk9yZGVyTGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1jdXN0b20tZmllbGQtY29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgdG90YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZGVkTGluZS5wcmljZVdpdGhUYXggKiBhZGRlZExpbmUucXVhbnRpdHkpIC8gMTAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXQtcHJpY2VcIiBbdGl0bGVdPVwiJ29yZGVyLm5ldC1wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkZWRMaW5lLnByaWNlICogYWRkZWRMaW5lLnF1YW50aXR5KSAvIDEwMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwic3VyY2hhcmdlXCIgKm5nRm9yPVwibGV0IHN1cmNoYXJnZSBvZiBvcmRlci5zdXJjaGFyZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBuYW1lIGxlZnRcIiBjb2xzcGFuPVwiMlwiPnt7IHN1cmNoYXJnZS5kZXNjcmlwdGlvbiB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBza3VcIj57eyBzdXJjaGFyZ2Uuc2t1IH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgdG90YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1cmNoYXJnZS5wcmljZVdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV0LXByaWNlXCIgW3RpdGxlXT1cIidvcmRlci5uZXQtcHJpY2UnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VyY2hhcmdlLnByaWNlIHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdXJjaGFyZ2UgbW9kaWZpZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3VyY2hhcmdlIG9mIG1vZGlmeU9yZGVySW5wdXQuc3VyY2hhcmdlczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgbmFtZSBsZWZ0XCIgY29sc3Bhbj1cIjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1cmNoYXJnZS5kZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnV0dG9uXCIgKGNsaWNrKT1cInJlbW92ZVN1cmNoYXJnZShpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgc2t1XCI+e3sgc3VyY2hhcmdlLnNrdSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJvcmRlckxpbmVDdXN0b21GaWVsZHMubGVuZ3RoXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3VyY2hhcmdlUHJpY2VzKHN1cmNoYXJnZSkgYXMgc3VyY2hhcmdlUHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdXJjaGFyZ2VQcmljZS5wcmljZVdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldC1wcmljZVwiIFt0aXRsZV09XCInb3JkZXIubmV0LXByaWNlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdXJjaGFyZ2VQcmljZS5wcmljZSB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwic2hpcHBpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibGVmdCBjbHItYWxpZ24tbWlkZGxlXCI+e3sgJ29yZGVyLnNoaXBwaW5nJyB8IHRyYW5zbGF0ZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNsci1hbGlnbi1taWRkbGVcIj57eyBvcmRlci5zaGlwcGluZ0xpbmVzWzBdPy5zaGlwcGluZ01ldGhvZD8ubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjbHItYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmRlci5zaGlwcGluZ1dpdGhUYXggfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV0LXByaWNlXCIgW3RpdGxlXT1cIidvcmRlci5uZXQtcHJpY2UnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JkZXIuc2hpcHBpbmcgfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1iMlwiPnt7ICdvcmRlci5tb2RpZmljYXRpb25zJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tdGl0bGU+e3sgJ29yZGVyLmFkZC1pdGVtLXRvLW9yZGVyJyB8IHRyYW5zbGF0ZSB9fTwvY2xyLWFjY29yZGlvbi10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1jb250ZW50ICpjbHJJZkV4cGFuZGVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXByb2R1Y3QtdmFyaWFudC1zZWxlY3RvciBjbGFzcz1cIm1iNFwiIChwcm9kdWN0U2VsZWN0ZWQpPVwiYWRkSXRlbVNlbGVjdGVkVmFyaWFudCA9ICRldmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1wcm9kdWN0LXZhcmlhbnQtc2VsZWN0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhZGRJdGVtU2VsZWN0ZWRWYXJpYW50XCIgY2xhc3M9XCJmbGV4IG1iNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWRkSXRlbVNlbGVjdGVkVmFyaWFudC5wcm9kdWN0QXNzZXQgYXMgYXNzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYXNzZXQgfCBhc3NldFByZXZpZXc6ICd0aW55J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cIm1yNFwiPnt7IGFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQucHJvZHVjdFZhcmlhbnROYW1lIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IGFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQuc2t1IH19PC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2VsZWN0ZWRJdGVtUHJpY2UoYWRkSXRlbVNlbGVjdGVkVmFyaWFudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3VzdG9tRmllbGQgb2Ygb3JkZXJMaW5lQ3VzdG9tRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWN1c3RvbS1maWVsZC1jb250cm9sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFhZGRJdGVtU2VsZWN0ZWRWYXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRdPVwiY3VzdG9tRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJPcmRlckxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWN1c3RvbS1maWVsZC1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQgfHwgYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm0uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkSXRlbVRvT3JkZXIoYWRkSXRlbVNlbGVjdGVkVmFyaWFudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuYWRkLWl0ZW0tdG8tb3JkZXInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xyLWFjY29yZGlvbi1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tdGl0bGU+e3sgJ29yZGVyLnNldC1jb3Vwb24tY29kZXMnIHwgdHJhbnNsYXRlIH19PC9jbHItYWNjb3JkaW9uLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLWNvbnRlbnQgKmNscklmRXhwYW5kZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJhdmFpbGFibGVDb3Vwb25Db2RlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZGRUYWddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVTZWxlY3RlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5UZXJtTGVuZ3RoXT1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVRvU2VhcmNoVGV4dD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZWFoZWFkXT1cImNvdXBvbkNvZGVJbnB1dCRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvdXBvbkNvZGVzQ29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcD57eyBpdGVtLmNvZGUgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ucHJvbW90aW9uTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tcGFuZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tdGl0bGU+e3sgJ29yZGVyLmFkZC1zdXJjaGFyZ2UnIHwgdHJhbnNsYXRlIH19PC9jbHItYWNjb3JkaW9uLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLWNvbnRlbnQgKmNscklmRXhwYW5kZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic3VyY2hhcmdlRm9ybVwiIChzdWJtaXQpPVwiYWRkU3VyY2hhcmdlKHN1cmNoYXJnZUZvcm0udmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24uZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCIgZm9yPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aW5wdXQgaWQ9XCJkZXNjcmlwdGlvblwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz48L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInb3JkZXIucHJvZHVjdC1za3UnIHwgdHJhbnNsYXRlXCIgZm9yPVwic2t1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGlucHV0IGlkPVwic2t1XCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJza3VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz48L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY29tbW9uLnByaWNlJyB8IHRyYW5zbGF0ZVwiIGZvcj1cInByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jdXJyZW5jeS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb2RlXT1cIm9yZGVyLmN1cnJlbmN5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicHJpY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcmljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWN1cnJlbmN5LWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGFsb2cucHJpY2UtaW5jbHVkZXMtdGF4LWF0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgcmF0ZTogc3VyY2hhcmdlRm9ybS5nZXQoJ3RheFJhdGUnKT8udmFsdWUgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwicHJpY2VJbmNsdWRlc1RheFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInByaWNlSW5jbHVkZXNUYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcmljZUluY2x1ZGVzVGF4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+PC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ29yZGVyLnRheC1yYXRlJyB8IHRyYW5zbGF0ZVwiIGZvcj1cInRheFJhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWFmZml4ZWQtaW5wdXQgc3VmZml4PVwiJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidGF4UmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRheFJhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+PC92ZHItYWZmaXhlZC1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidvcmRlci50YXgtZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCIgZm9yPVwidGF4RGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aW5wdXQgaWQ9XCJ0YXhEZXNjcmlwdGlvblwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGF4RGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz48L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VyY2hhcmdlRm9ybS5pbnZhbGlkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cmNoYXJnZUZvcm0ucHJpc3RpbmUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VyY2hhcmdlRm9ybS5nZXQoJ3ByaWNlJyk/LnZhbHVlID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuYWRkLXN1cmNoYXJnZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi10aXRsZT57eyAnb3JkZXIuZWRpdC1zaGlwcGluZy1hZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fTwvY2xyLWFjY29yZGlvbi10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1jb250ZW50ICpjbHJJZkV4cGFuZGVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWFkZHJlc3MtZm9ybVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJzaGlwcGluZ0FkZHJlc3NGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVDb3VudHJpZXNdPVwiYXZhaWxhYmxlQ291bnRyaWVzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiYWRkcmVzc0N1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1hZGRyZXNzLWZvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi10aXRsZT57eyAnb3JkZXIuZWRpdC1iaWxsaW5nLWFkZHJlc3MnIHwgdHJhbnNsYXRlIH19PC9jbHItYWNjb3JkaW9uLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLWNvbnRlbnQgKmNscklmRXhwYW5kZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItYWRkcmVzcy1mb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImJpbGxpbmdBZGRyZXNzRm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlQ291bnRyaWVzXT1cImF2YWlsYWJsZUNvdW50cmllcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImFkZHJlc3NDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItYWRkcmVzcy1mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xyLWFjY29yZGlvbi1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNsci1jb2wtbGctNCBvcmRlci1jYXJkc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLm1vZGlmaWNhdGlvbi1zdW1tYXJ5JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwibW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlci5tb2RpZmljYXRpb24tYWRkaW5nLWl0ZW1zJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBjb3VudDogbW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcz8ubGVuZ3RoIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cIm1vZGlmeU9yZGVySW5wdXQuYWRqdXN0T3JkZXJMaW5lcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlci5tb2RpZmljYXRpb24tYWRqdXN0aW5nLWxpbmVzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBjb3VudDogbW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzPy5sZW5ndGggfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwibW9kaWZ5T3JkZXJJbnB1dC5zdXJjaGFyZ2VzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLm1vZGlmaWNhdGlvbi1hZGRpbmctc3VyY2hhcmdlcydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgY291bnQ6IG1vZGlmeU9yZGVySW5wdXQuc3VyY2hhcmdlcz8ubGVuZ3RoIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cInNoaXBwaW5nQWRkcmVzc0Zvcm0uZGlydHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5tb2RpZmljYXRpb24tdXBkYXRpbmctc2hpcHBpbmctYWRkcmVzcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiYmlsbGluZ0FkZHJlc3NGb3JtLmRpcnR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIubW9kaWZpY2F0aW9uLXVwZGF0aW5nLWJpbGxpbmctYWRkcmVzcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNsci1jb250cm9sLWxhYmVsXCI+e3sgJ29yZGVyLm5vdGUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJub3RlXCIgbmFtZT1cIm5vdGVcIiBjbHJUZXh0YXJlYSByZXF1aXJlZD48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItY2hlY2tib3gtd3JhcHBlciBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xyQ2hlY2tib3ggWyhuZ01vZGVsKV09XCJyZWNhbGN1bGF0ZVNoaXBwaW5nXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdvcmRlci5tb2RpZmljYXRpb24tcmVjYWxjdWxhdGUtc2hpcHBpbmcnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5QcmV2aWV3Q2hhbmdlcygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpZXdBbmRNb2RpZnkob3JkZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5wcmV2aWV3LWNoYW5nZXMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -191,7 +191,7 @@ export class OrderListComponent extends BaseListComponent {
|
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
193
|
OrderListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: OrderListComponent, deps: [{ token: i1.ServerConfigService }, { token: i1.DataService }, { token: i1.LocalStorageService }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
194
|
-
OrderListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: OrderListComponent, selector: "vdr-order-list", usesInheritance: true, ngImport: i0, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"search-form\">\r\n <div class=\"btn-group btn-outline-primary\" *ngIf=\"activePreset$ | async as activePreset\">\r\n <button\r\n class=\"btn\"\r\n *ngFor=\"let preset of filterPresets\"\r\n [class.btn-primary]=\"activePreset === preset.name\"\r\n (click)=\"selectFilterPreset(preset.name)\"\r\n >\r\n {{ preset.label | translate }}\r\n </button>\r\n <button\r\n class=\"btn\"\r\n [class.btn-primary]=\"activePreset === 'custom'\"\r\n (click)=\"selectFilterPreset('custom')\"\r\n >\r\n {{ 'order.filter-custom' | translate }}\r\n <clr-icon shape=\"angle down\"></clr-icon>\r\n </button>\r\n </div>\r\n <input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"searchControl\"\r\n [placeholder]=\"'order.search-by-order-filters' | translate\"\r\n class=\"search-input\"\r\n />\r\n </div>\r\n <div class=\"custom-filters\" [class.expanded]=\"(activePreset$ | async) === 'custom'\">\r\n <form [formGroup]=\"customFilterForm\">\r\n <div class=\"flex align-center\">\r\n <ng-select\r\n [items]=\"orderStates\"\r\n appendTo=\"body\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n formControlName=\"states\"\r\n [placeholder]=\"'state.all-orders' | translate\"\r\n [clearable]=\"true\"\r\n [searchable]=\"false\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">{{ item | stateI18nToken | translate }}</ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span class=\"ng-value-label\"> {{ item | stateI18nToken | translate }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">\u00D7</span>\r\n </ng-template>\r\n </ng-select>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"customFilterForm.pristine\"\r\n (click)=\"applyCustomFilters()\"\r\n >\r\n {{ 'order.apply-filters' | translate }}\r\n <clr-icon shape=\"filter\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"flex\">\r\n <div>\r\n <label>{{ 'order.placed-at-start' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtStart\"></vdr-datetime-picker>\r\n </div>\r\n <div>\r\n <label>{{ 'order.placed-at-end' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtEnd\"></vdr-datetime-picker>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-list\"></vdr-action-bar-items>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.customer' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.total' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.updated-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.placed-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.shipping' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">{{ order.code }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.totalWithTax | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.updatedAt | timeAgo }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | localeDate: 'medium' }}</td>\r\n <td class=\"left align-middle\">{{ getShippingNames(order) }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"order.state === 'Modifying' ? ['./', order.id, 'modify'] : ['./', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: [".search-form{display:flex;flex-direction:column;align-items:baseline;width:100%;margin-bottom:6px}@media screen and (min-width: 768px){.search-form{flex-direction:row}}.search-input{margin-left:6px;margin-top:6px;min-width:300px}.custom-filters{overflow:hidden;max-height:0;padding-bottom:6px}.custom-filters.expanded{max-height:initial}.custom-filters>form{display:flex;flex-direction:column;align-items:center}.custom-filters>form>div{width:100%}ng-select{flex:1;min-width:200px;height:36px}ng-select ::ng-deep .ng-select-container{height:36px}\n"], components: [{ type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i1.DatetimePickerComponent, selector: "vdr-datetime-picker", inputs: ["yearRange", "weekStartDay", "timeGranularityInterval", "min", "max", "readonly"] }, { type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i1.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i1.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i1.CustomerLabelComponent, selector: "vdr-customer-label", inputs: ["customer"] }, { type: i1.OrderStateLabelComponent, selector: "vdr-order-state-label", inputs: ["state"] }, { type: i1.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.ClrIconCustomTag, selector: "clr-icon" }, { type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i3.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i5.ClrLabel, selector: "label", inputs: ["for"] }], pipes: { "async": i4.AsyncPipe, "translate": i7.TranslatePipe, "stateI18nToken": i1.StateI18nTokenPipe, "localeCurrency": i1.LocaleCurrencyPipe, "timeAgo": i1.TimeAgoPipe, "localeDate": i1.LocaleDatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
194
|
+
OrderListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: OrderListComponent, selector: "vdr-order-list", usesInheritance: true, ngImport: i0, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"search-form\">\r\n <div class=\"btn-group btn-outline-primary\" *ngIf=\"activePreset$ | async as activePreset\">\r\n <button\r\n class=\"btn\"\r\n *ngFor=\"let preset of filterPresets\"\r\n [class.btn-primary]=\"activePreset === preset.name\"\r\n (click)=\"selectFilterPreset(preset.name)\"\r\n >\r\n {{ preset.label | translate }}\r\n </button>\r\n <button\r\n class=\"btn\"\r\n [class.btn-primary]=\"activePreset === 'custom'\"\r\n (click)=\"selectFilterPreset('custom')\"\r\n >\r\n {{ 'order.filter-custom' | translate }}\r\n <clr-icon shape=\"angle down\"></clr-icon>\r\n </button>\r\n </div>\r\n <input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"searchControl\"\r\n [placeholder]=\"'order.search-by-order-filters' | translate\"\r\n class=\"search-input\"\r\n />\r\n </div>\r\n <div class=\"custom-filters\" [class.expanded]=\"(activePreset$ | async) === 'custom'\">\r\n <form [formGroup]=\"customFilterForm\">\r\n <div class=\"flex align-center\">\r\n <ng-select\r\n [items]=\"orderStates\"\r\n appendTo=\"body\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n formControlName=\"states\"\r\n [placeholder]=\"'state.all-orders' | translate\"\r\n [clearable]=\"true\"\r\n [searchable]=\"false\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">{{ item | stateI18nToken | translate }}</ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span class=\"ng-value-label\"> {{ item | stateI18nToken | translate }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">\u00D7</span>\r\n </ng-template>\r\n </ng-select>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"customFilterForm.pristine\"\r\n (click)=\"applyCustomFilters()\"\r\n >\r\n {{ 'order.apply-filters' | translate }}\r\n <clr-icon shape=\"filter\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"flex\">\r\n <div>\r\n <label>{{ 'order.placed-at-start' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtStart\"></vdr-datetime-picker>\r\n </div>\r\n <div>\r\n <label>{{ 'order.placed-at-end' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtEnd\"></vdr-datetime-picker>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-list\"></vdr-action-bar-items>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.customer' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.total' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.updated-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.placed-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.shipping' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">{{ order.code }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.totalWithTax | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.updatedAt | timeAgo }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | localeDate: 'medium' }}</td>\r\n <td class=\"left align-middle\">{{ getShippingNames(order) }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"order.state === 'Modifying' ? ['./', order.id, 'modify'] : ['./', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: [".search-form{display:flex;flex-direction:column;align-items:baseline;width:100%;margin-bottom:6px}@media screen and (min-width: 768px){.search-form{flex-direction:row}}.search-input{margin-left:6px;margin-top:6px;min-width:300px}.custom-filters{overflow:hidden;max-height:0;padding-bottom:6px}.custom-filters.expanded{max-height:initial}.custom-filters>form{display:flex;flex-direction:column;align-items:center}.custom-filters>form>div{width:100%}ng-select{flex:1;min-width:200px;height:36px}ng-select ::ng-deep .ng-select-container{height:36px}\n"], components: [{ type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i1.DatetimePickerComponent, selector: "vdr-datetime-picker", inputs: ["yearRange", "weekStartDay", "timeGranularityInterval", "min", "max", "readonly"] }, { type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i1.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "selectionManager", "allSelected", "isRowSelectedFn"], outputs: ["pageChange", "itemsPerPageChange", "allSelectChange", "rowSelectChange"] }, { type: i1.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i1.CustomerLabelComponent, selector: "vdr-customer-label", inputs: ["customer"] }, { type: i1.OrderStateLabelComponent, selector: "vdr-order-state-label", inputs: ["state"] }, { type: i1.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.ClrIconCustomTag, selector: "clr-icon" }, { type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i3.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i5.ClrLabel, selector: "label", inputs: ["for"] }], pipes: { "async": i4.AsyncPipe, "translate": i7.TranslatePipe, "stateI18nToken": i1.StateI18nTokenPipe, "localeCurrency": i1.LocaleCurrencyPipe, "timeAgo": i1.TimeAgoPipe, "localeDate": i1.LocaleDatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
195
195
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: OrderListComponent, decorators: [{
|
|
196
196
|
type: Component,
|
|
197
197
|
args: [{ selector: 'vdr-order-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"search-form\">\r\n <div class=\"btn-group btn-outline-primary\" *ngIf=\"activePreset$ | async as activePreset\">\r\n <button\r\n class=\"btn\"\r\n *ngFor=\"let preset of filterPresets\"\r\n [class.btn-primary]=\"activePreset === preset.name\"\r\n (click)=\"selectFilterPreset(preset.name)\"\r\n >\r\n {{ preset.label | translate }}\r\n </button>\r\n <button\r\n class=\"btn\"\r\n [class.btn-primary]=\"activePreset === 'custom'\"\r\n (click)=\"selectFilterPreset('custom')\"\r\n >\r\n {{ 'order.filter-custom' | translate }}\r\n <clr-icon shape=\"angle down\"></clr-icon>\r\n </button>\r\n </div>\r\n <input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"searchControl\"\r\n [placeholder]=\"'order.search-by-order-filters' | translate\"\r\n class=\"search-input\"\r\n />\r\n </div>\r\n <div class=\"custom-filters\" [class.expanded]=\"(activePreset$ | async) === 'custom'\">\r\n <form [formGroup]=\"customFilterForm\">\r\n <div class=\"flex align-center\">\r\n <ng-select\r\n [items]=\"orderStates\"\r\n appendTo=\"body\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n formControlName=\"states\"\r\n [placeholder]=\"'state.all-orders' | translate\"\r\n [clearable]=\"true\"\r\n [searchable]=\"false\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">{{ item | stateI18nToken | translate }}</ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span class=\"ng-value-label\"> {{ item | stateI18nToken | translate }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">\u00D7</span>\r\n </ng-template>\r\n </ng-select>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"customFilterForm.pristine\"\r\n (click)=\"applyCustomFilters()\"\r\n >\r\n {{ 'order.apply-filters' | translate }}\r\n <clr-icon shape=\"filter\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"flex\">\r\n <div>\r\n <label>{{ 'order.placed-at-start' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtStart\"></vdr-datetime-picker>\r\n </div>\r\n <div>\r\n <label>{{ 'order.placed-at-end' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtEnd\"></vdr-datetime-picker>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-list\"></vdr-action-bar-items>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.customer' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.total' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.updated-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.placed-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.shipping' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">{{ order.code }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.totalWithTax | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.updatedAt | timeAgo }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | localeDate: 'medium' }}</td>\r\n <td class=\"left align-middle\">{{ getShippingNames(order) }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"order.state === 'Modifying' ? ['./', order.id, 'modify'] : ['./', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: [".search-form{display:flex;flex-direction:column;align-items:baseline;width:100%;margin-bottom:6px}@media screen and (min-width: 768px){.search-form{flex-direction:row}}.search-input{margin-left:6px;margin-top:6px;min-width:300px}.custom-filters{overflow:hidden;max-height:0;padding-bottom:6px}.custom-filters.expanded{max-height:initial}.custom-filters>form{display:flex;flex-direction:column;align-items:center}.custom-filters>form>div{width:100%}ng-select{flex:1;min-width:200px;height:36px}ng-select ::ng-deep .ng-select-container{height:36px}\n"] }]
|
|
@@ -41,7 +41,7 @@ export class AdministratorListComponent extends BaseListComponent {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
AdministratorListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AdministratorListComponent, deps: [{ token: i1.DataService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i1.ModalService }, { token: i1.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
44
|
-
AdministratorListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: AdministratorListComponent, selector: "vdr-administrator-list", usesInheritance: true, ngImport: i0, template: "<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateAdministrator'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'admin.create-new-administrator' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'settings.first-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.last-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-administrator=\"item\">\r\n <td class=\"left align-middle\">{{ administrator.firstName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.lastName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', administrator.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteAdministrator(administrator)\"\r\n [disabled]=\"!('DeleteAdministrator' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: [""], components: [{ type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i1.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "
|
|
44
|
+
AdministratorListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: AdministratorListComponent, selector: "vdr-administrator-list", usesInheritance: true, ngImport: i0, template: "<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateAdministrator'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'admin.create-new-administrator' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'settings.first-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.last-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-administrator=\"item\">\r\n <td class=\"left align-middle\">{{ administrator.firstName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.lastName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', administrator.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteAdministrator(administrator)\"\r\n [disabled]=\"!('DeleteAdministrator' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: [""], components: [{ type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i1.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "selectionManager", "allSelected", "isRowSelectedFn"], outputs: ["pageChange", "itemsPerPageChange", "allSelectChange", "rowSelectChange"] }, { type: i1.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i1.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }, { type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }], directives: [{ type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.ClrIconCustomTag, selector: "clr-icon" }, { type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i4.TranslatePipe, "async": i5.AsyncPipe, "hasPermission": i1.HasPermissionPipe } });
|
|
45
45
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AdministratorListComponent, decorators: [{
|
|
46
46
|
type: Component,
|
|
47
47
|
args: [{ selector: 'vdr-administrator-list', template: "<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateAdministrator'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'admin.create-new-administrator' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'settings.first-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.last-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-administrator=\"item\">\r\n <td class=\"left align-middle\">{{ administrator.firstName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.lastName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', administrator.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteAdministrator(administrator)\"\r\n [disabled]=\"!('DeleteAdministrator' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: [""] }]
|