@posiwise/admin-module 0.0.14 → 0.0.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.
Files changed (66) hide show
  1. package/esm2020/lib/admin.module.mjs +34 -4
  2. package/esm2020/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +6 -6
  3. package/esm2020/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +4 -4
  4. package/esm2020/lib/components/config/global-config-details/global-config-details.component.mjs +7 -6
  5. package/esm2020/lib/components/config/global-config-list/global-config-list.component.mjs +6 -6
  6. package/esm2020/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +8 -7
  7. package/esm2020/lib/components/credentials/credentials/credentials.component.mjs +6 -6
  8. package/esm2020/lib/components/credentials/credentials-details/credentials-details.component.mjs +8 -7
  9. package/esm2020/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +5 -5
  10. package/esm2020/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +4 -4
  11. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +7 -5
  12. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +6 -5
  13. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +6 -5
  14. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +6 -5
  15. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +6 -5
  16. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +6 -5
  17. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +6 -5
  18. package/esm2020/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +9 -8
  19. package/esm2020/lib/components/faqs/faqs-list/faqs-list.component.mjs +15 -11
  20. package/esm2020/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +3 -3
  21. package/esm2020/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +8 -7
  22. package/esm2020/lib/components/generic/generic-misc/generic-misc.component.mjs +4 -3
  23. package/esm2020/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +9 -6
  24. package/esm2020/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +10 -9
  25. package/esm2020/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +7 -6
  26. package/esm2020/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +14 -10
  27. package/esm2020/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +8 -7
  28. package/esm2020/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +5 -4
  29. package/esm2020/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +12 -10
  30. package/esm2020/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +9 -8
  31. package/esm2020/lib/components/permissions/permissions-details/permissions-details.component.mjs +8 -7
  32. package/esm2020/lib/components/permissions/permissions-list/permissions-list.component.mjs +5 -5
  33. package/esm2020/lib/components/permissions/role-details/role-details.component.mjs +8 -7
  34. package/esm2020/lib/components/permissions/roles-list/roles-list.component.mjs +5 -5
  35. package/esm2020/lib/components/products/product-details/product-details.component.mjs +10 -7
  36. package/esm2020/lib/components/products/products-insight/products-insight.component.mjs +6 -4
  37. package/esm2020/lib/components/products/products-list/products-list.component.mjs +11 -9
  38. package/esm2020/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +5 -5
  39. package/esm2020/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +4 -4
  40. package/esm2020/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +8 -7
  41. package/esm2020/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +13 -11
  42. package/esm2020/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +8 -6
  43. package/esm2020/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +9 -8
  44. package/esm2020/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +10 -9
  45. package/esm2020/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +10 -8
  46. package/esm2020/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +6 -4
  47. package/esm2020/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +6 -4
  48. package/esm2020/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +11 -9
  49. package/esm2020/lib/components/tags/tags-category/tags-category.component.mjs +4 -4
  50. package/esm2020/lib/components/tags/tags-list/tags-list.component.mjs +9 -7
  51. package/esm2020/lib/components/tips/tip-detail/tip-detail.component.mjs +7 -6
  52. package/esm2020/lib/components/tips/tips-list/tips-list.component.mjs +8 -7
  53. package/esm2020/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +8 -6
  54. package/esm2020/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +9 -8
  55. package/esm2020/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +8 -7
  56. package/esm2020/lib/components/tracking/events/events.component.mjs +8 -7
  57. package/esm2020/lib/components/tracking/versions/versions.component.mjs +8 -6
  58. package/esm2020/lib/components/users/user-details/user-details.component.mjs +9 -7
  59. package/esm2020/lib/components/users/users-insight/users-insight.component.mjs +5 -3
  60. package/esm2020/lib/components/users/users-list/users-list.component.mjs +11 -10
  61. package/fesm2015/admin-module.mjs +134 -97
  62. package/fesm2015/admin-module.mjs.map +1 -1
  63. package/fesm2020/admin-module.mjs +134 -97
  64. package/fesm2020/admin-module.mjs.map +1 -1
  65. package/lib/admin.module.d.ts +17 -11
  66. package/package.json +4 -4
@@ -15,10 +15,12 @@ import * as i1 from "../../../admin.service";
15
15
  import * as i2 from "@posiwise/common-services";
16
16
  import * as i3 from "@angular/common";
17
17
  import * as i4 from "primeng/autocomplete";
18
- import * as i5 from "@posiwise/shared-components";
19
- import * as i6 from "@ng-bootstrap/ng-bootstrap";
20
- import * as i7 from "@angular/forms";
21
- import * as i8 from "@ngneat/transloco";
18
+ import * as i5 from "@angular/forms";
19
+ import * as i6 from "ngx-ui-switch";
20
+ import * as i7 from "primeng/progressspinner";
21
+ import * as i8 from "@posiwise/shared-components";
22
+ import * as i9 from "@ng-bootstrap/ng-bootstrap";
23
+ import * as i10 from "@ngneat/transloco";
22
24
  export class SubscriptionProductDetailsComponent extends AppBaseComponent {
23
25
  constructor(injector, adminService, productService, dateFormatService, datePipe) {
24
26
  super(injector);
@@ -196,7 +198,7 @@ export class SubscriptionProductDetailsComponent extends AppBaseComponent {
196
198
  }
197
199
  }
198
200
  SubscriptionProductDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SubscriptionProductDetailsComponent, deps: [{ token: i0.Injector }, { token: i1.AdminService }, { token: i2.ProductService }, { token: i2.NgbDateCustomParserFormatter }, { token: i3.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
199
- SubscriptionProductDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: SubscriptionProductDetailsComponent, selector: "pw-subscription-product-details", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Subscription Product</span>\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"p-2 mt-3\">\n <p>\n You can update the Purchased Seats, Product, and Product Expiry date as long as the user hasn't subscribed using stripe.\n </p>\n <p class=\"mb-5\">\n If you set the subscription as External Payment you'll have to manually manage the Product Expiry Date.\n </p>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.PurchasedSeats' | transloco\"\n [showTooltip]=\"true\"\n name=\"purchased_units\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.PurchasedSeats' | transloco\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"purchased_units\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n min=\"0\"\n [max]=\"form.get('purchased_units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n <!-- product expiry date -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ProductExpiryDate' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ProductExpiryDate' | transloco\"\n name=\"expires_at\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Expiry Date\"\n formControlName=\"expires_at\"\n [outsideDays]=\"'hidden'\"\n ngbDatepicker\n #c=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"disableExpiresAt\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <!-- signedup at-->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.SignedUpAt' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SignedUpAt' | transloco\"\n name=\"signed_up_at\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.SignedUpAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Signed Up At\"\n formControlName=\"signed_up_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"!isSuperAdmin\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <!-- stripe subscription id -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.StripeSubscriptionId' | transloco\"\n name=\"stripe_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.StripeSubscriptionId' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_subscription_id\" />\n </pw-input-container>\n </div>\n <!-- external payment toggle -->\n <div class=\"col-12 col-sm-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ExternalPayment' | transloco\"\n name=\"external_payment\"\n [showTooltip]=\"true\"\n [tooltipPosition]=\"'left'\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ExternalPayment' | transloco\">\n <ui-switch formControlName=\"external_payment\"\n name=\"external_payment\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n name=\"new_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Product' | transloco\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete [suggestions]=\"filteredProducts\"\n formControlName=\"new_product_id\"\n dataKey=\"value\"\n field=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n (completeMethod)=\"searchProduct($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search Product\"\n [inputStyle]=\"\n form.get('new_product_id').touched && form.get('new_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i4.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "itemSize", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText"] }, { kind: "directive", type: i6.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i7.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i8.TranslocoPipe, name: "transloco" }] });
201
+ SubscriptionProductDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: SubscriptionProductDetailsComponent, selector: "pw-subscription-product-details", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Subscription Product</span>\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"p-2 mt-3\">\n <p>\n You can update the Purchased Seats, Product, and Product Expiry date as long as the user hasn't subscribed using stripe.\n </p>\n <p class=\"mb-5\">\n If you set the subscription as External Payment you'll have to manually manage the Product Expiry Date.\n </p>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.PurchasedSeats' | transloco\"\n [showTooltip]=\"true\"\n name=\"purchased_units\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.PurchasedSeats' | transloco\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"purchased_units\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n min=\"0\"\n [max]=\"form.get('purchased_units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n <!-- product expiry date -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ProductExpiryDate' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ProductExpiryDate' | transloco\"\n name=\"expires_at\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Expiry Date\"\n formControlName=\"expires_at\"\n [outsideDays]=\"'hidden'\"\n ngbDatepicker\n #c=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"disableExpiresAt\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <!-- signedup at-->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.SignedUpAt' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SignedUpAt' | transloco\"\n name=\"signed_up_at\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.SignedUpAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Signed Up At\"\n formControlName=\"signed_up_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"!isSuperAdmin\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <!-- stripe subscription id -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.StripeSubscriptionId' | transloco\"\n name=\"stripe_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.StripeSubscriptionId' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_subscription_id\" />\n </pw-input-container>\n </div>\n <!-- external payment toggle -->\n <div class=\"col-12 col-sm-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ExternalPayment' | transloco\"\n name=\"external_payment\"\n [showTooltip]=\"true\"\n [tooltipPosition]=\"'left'\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ExternalPayment' | transloco\">\n <ui-switch formControlName=\"external_payment\"\n name=\"external_payment\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n name=\"new_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Product' | transloco\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete [suggestions]=\"filteredProducts\"\n formControlName=\"new_product_id\"\n dataKey=\"value\"\n field=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n (completeMethod)=\"searchProduct($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search Product\"\n [inputStyle]=\"\n form.get('new_product_id').touched && form.get('new_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i4.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "itemSize", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "component", type: i6.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["style", "styleClass", "strokeWidth", "fill", "animationDuration"] }, { kind: "component", type: i8.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText"] }, { kind: "directive", type: i9.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i10.TranslocoPipe, name: "transloco" }] });
200
202
  __decorate([
201
203
  ValidateForm('form'),
202
204
  __metadata("design:type", Function),
@@ -207,4 +209,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
207
209
  type: Component,
208
210
  args: [{ selector: 'pw-subscription-product-details', template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Subscription Product</span>\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"p-2 mt-3\">\n <p>\n You can update the Purchased Seats, Product, and Product Expiry date as long as the user hasn't subscribed using stripe.\n </p>\n <p class=\"mb-5\">\n If you set the subscription as External Payment you'll have to manually manage the Product Expiry Date.\n </p>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.PurchasedSeats' | transloco\"\n [showTooltip]=\"true\"\n name=\"purchased_units\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.PurchasedSeats' | transloco\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"purchased_units\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n min=\"0\"\n [max]=\"form.get('purchased_units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n <!-- product expiry date -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ProductExpiryDate' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ProductExpiryDate' | transloco\"\n name=\"expires_at\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Expiry Date\"\n formControlName=\"expires_at\"\n [outsideDays]=\"'hidden'\"\n ngbDatepicker\n #c=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"disableExpiresAt\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <!-- signedup at-->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.SignedUpAt' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SignedUpAt' | transloco\"\n name=\"signed_up_at\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.SignedUpAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Signed Up At\"\n formControlName=\"signed_up_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"!isSuperAdmin\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <!-- stripe subscription id -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.StripeSubscriptionId' | transloco\"\n name=\"stripe_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.StripeSubscriptionId' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_subscription_id\" />\n </pw-input-container>\n </div>\n <!-- external payment toggle -->\n <div class=\"col-12 col-sm-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ExternalPayment' | transloco\"\n name=\"external_payment\"\n [showTooltip]=\"true\"\n [tooltipPosition]=\"'left'\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ExternalPayment' | transloco\">\n <ui-switch formControlName=\"external_payment\"\n name=\"external_payment\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n name=\"new_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Product' | transloco\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete [suggestions]=\"filteredProducts\"\n formControlName=\"new_product_id\"\n dataKey=\"value\"\n field=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n (completeMethod)=\"searchProduct($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search Product\"\n [inputStyle]=\"\n form.get('new_product_id').touched && form.get('new_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n" }]
209
211
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.AdminService }, { type: i2.ProductService }, { type: i2.NgbDateCustomParserFormatter }, { type: i3.DatePipe }]; }, propDecorators: { onSave: [] } });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvc3Vic2NyaXB0aW9ucy9zdWJzY3JpcHRpb24tcHJvZHVjdC1kZXRhaWxzL3N1YnNjcmlwdGlvbi1wcm9kdWN0LWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscy9zdWJzY3JpcHRpb24tcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFN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QWdFO1FBQ2hFLGVBQWU7UUFDZixtRkFBbUY7UUFDbkYsUUFBUTtRQUNSLG1FQUFtRTtRQUNuRSxNQUFNO0lBQ1YsQ0FBQzs7Z0lBM05RLG1DQUFtQztvSEFBbkMsbUNBQW1DLDhGQ2xCaEQsb21QQXNLQTtBRGtCSTtJQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7aUVBaUNwQjsyRkF2TVEsbUNBQW1DO2tCQUovQyxTQUFTOytCQUNJLGlDQUFpQzt5TkEwSzNDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgZ3JvdXBCeSBmcm9tICdsb2Rhc2gvZ3JvdXBCeSc7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FkbWluLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwQWRtaW4gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL2FkbWluLm1vZGVsJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IE5nYkRhdGVDdXN0b21QYXJzZXJGb3JtYXR0ZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctc3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N1YnNjcmlwdGlvbi1wcm9kdWN0LWRldGFpbHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblByb2R1Y3REZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgaWQ6IG51bWJlcjtcblxuICAgIGRhdGE6IGFueTtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgaXNMb2FkaW5nOiBib29sZWFuO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIG1pbkRhdGUgPSBIZWxwZXJTZXJ2aWNlLm1pbkRhdGVUb2RheSgpO1xuXG4gICAgcHJpdmF0ZSBpc1B1cmNoYXNlZFVuaXRzRGlzYWJsZTogYm9vbGVhbjtcblxuICAgIGZpbHRlcmVkUHJvZHVjdHMgPSBbXTtcblxuICAgIHByb2R1Y3RzTGlzdCA9IFtdO1xuXG4gICAgZGlzYWJsZUV4cGlyZXNBdCA9IGZhbHNlO1xuXG4gICAgaXNTdXBlckFkbWluID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5pc1N1cGVyQWRtaW4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRhdGVGb3JtYXRTZXJ2aWNlOiBOZ2JEYXRlQ3VzdG9tUGFyc2VyRm9ybWF0dGVyLFxuICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMuZm9ybSA9IEFwcEFkbWluLnN1YnNjcmlwdGlvblByb2R1Y3RGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbigpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gTnVtYmVyKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ3N1YnNjcmlwdGlvbl9pZCcpKTtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmlkID0gTnVtYmVyKHBhcmFtc1snaWQnXSk7XG4gICAgICAgICAgICB0aGlzLmdldFByb2R1Y3RMaXN0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIGdldFByb2R1Y3RMaXN0KCkge1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHJvZHVjdExpc3Qoe30sIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RzTGlzdCA9IHRoaXMuZ3JvdXBQcm9kdWN0cyhyZXNwb25zZS5wcm9kdWN0cyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25Qcm9kdWN0RGV0YWlscygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uUHJvZHVjdERldGFpbHMoKSB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0U3Vic2NyaXB0aW9uUHJvZHVjdCh0aGlzLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1B1cmNoYXNlZFVuaXRzRGlzYWJsZSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNTdXBlckFkbWluKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJBZG1pbigpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhcmVzcG9uc2Uuc3RyaXBlX3N1YnNjcmlwdGlvbl9pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQdXJjaGFzZWRVbml0c0Rpc2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncHVyY2hhc2VkX3VuaXRzJykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ25ld19wcm9kdWN0X2lkJykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2V4cGlyZXNfYXQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5mb3JtLmdldCgnc2lnbmVkX3VwX2F0JykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUV4cGlyZXNBdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3B1cmNoYXNlZF91bml0cycpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnbmV3X3Byb2R1Y3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2V4cGlyZXNfYXQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZm9ybS5nZXQoJ3NpZ25lZF91cF9hdCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlRXhwaXJlc0F0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxQYXltZW50ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5pc1N1cGVyQWRtaW4oKSB8fCAhcmVzcG9uc2U/LnN0cmlwZV9zdWJzY3JpcHRpb25faWQ7XG4gICAgICAgICAgICAgICAgaWYgKGV4dGVybmFsUGF5bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdleHRlcm5hbF9wYXltZW50JykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnZXh0ZXJuYWxfcGF5bWVudCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuZXhwaXJlc19hdCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlc3BvbnNlLmV4cGlyZXNfYXQsICd5eXl5LU1NLWRkJyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5zaWduZWRfdXBfYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2lnbmVkX3VwX2F0ID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZT8uc2lnbmVkX3VwX2F0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3l5eXktTU0tZGQnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBkYXRlID0gdGhpcy5kYXRlRm9ybWF0U2VydmljZS5kYXRlRm9ybWF0Rm9yUGlja2VyKHJlc3BvbnNlPy5leHBpcmVzX2F0KTtcbiAgICAgICAgICAgICAgICBsZXQgc2lnbmVkVXBEYXRlO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uc2lnbmVkX3VwX2F0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25lZFVwRGF0ZSA9IHRoaXMuZGF0ZUZvcm1hdFNlcnZpY2UuZGF0ZUZvcm1hdEZvclBpY2tlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlPy5zaWduZWRfdXBfYXRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnc2lnbmVkX3VwX2F0JykucGF0Y2hWYWx1ZShzaWduZWRVcERhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdleHBpcmVzX2F0JykucGF0Y2hWYWx1ZShleHBkYXRlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LnByb2R1Y3RfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3Byb2R1Y3RfaWQ6IHRoaXMucHJvZHVjdHNMaXN0LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9PiB4LnZhbHVlID09PSB0aGlzLmRhdGE/LnByb2R1Y3RfaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0T2JqKG9iaikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG9ialtrZXldO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBzZWFyY2hQcm9kdWN0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQcm9kdWN0TGlzdCh7IHNlYXJjaDogZXZlbnQucXVlcnkgfSwgdGhpcy5zdWJzY3JpcHRpb25JZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRQcm9kdWN0cyA9IHRoaXMuZ3JvdXBQcm9kdWN0cyhyZXNwb25zZS5wcm9kdWN0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdyb3VwUHJvZHVjdHMocHJvZHVjdHMpIHtcbiAgICAgICAgaWYgKHByb2R1Y3RzICYmIHByb2R1Y3RzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gcHJvZHVjdHMuZmlsdGVyKHggPT4geC5kZXBlbmRlbmN5X3Byb2R1Y3RzPy5sZW5ndGggPCAxICYmIHguYWN0aXZlKTtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gZ3JvdXBCeShwcm9kdWN0cywgJ2N1cnJlbmN5Jyk7XG4gICAgICAgICAgICBwcm9kdWN0cyA9IHRoaXMuc29ydE9iaihwcm9kdWN0cyk7XG4gICAgICAgICAgICBsZXQgZ3JvdXBlZEFycmF5ID0gW107XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvZHVjdHNbcF0uc29ydChcbiAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IE51bWJlcihiLnByaWNlX3Blcl91bml0KSAtIE51bWJlcihhLnByaWNlX3Blcl91bml0KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZEFycmF5LnB1c2goLi4udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBlZEFycmF5ID0gZ3JvdXBlZEFycmF5Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeC5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke3gubmFtZX0gfCAke3gucmVnaW9ufSB8ICR7eC5iaWxsaW5nX2ZyZXF1ZW5jeX0gfCAke3gubWluX3VuaXRzfSB4ICR7KFxuICAgICAgICAgICAgICAgICAgICAgICAgeC5wcmljZV9wZXJfdW5pdCAvIDEwMFxuICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoMil9IHwgJHt4LmN1cnJlbmN5fWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBncm91cGVkQXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgQFZhbGlkYXRlRm9ybSgnZm9ybScpXG4gICAgb25TYXZlKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGV4cGRhdGUgPSB0aGlzLmZvcm0udmFsdWUuZXhwaXJlc19hdDtcbiAgICAgICAgY29uc3Qgc2lnbmVkVXBBdCA9IHRoaXMuZm9ybS52YWx1ZS5zaWduZWRfdXBfYXQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgICBwcm9kdWN0X2lkOiB0aGlzLmRhdGE/LnByb2R1Y3RfaWQsXG4gICAgICAgICAgICBleHBpcmVzX2F0OiBleHBkYXRlID8gSGVscGVyU2VydmljZS5kYXRlRm9ybWF0KGV4cGRhdGUpIDogbnVsbCxcbiAgICAgICAgICAgIHNpZ25lZF91cF9hdDogc2lnbmVkVXBBdCA/IEhlbHBlclNlcnZpY2UuZGF0ZUZvcm1hdChzaWduZWRVcEF0KSA6IG51bGwsXG4gICAgICAgICAgICBleHRlcm5hbF9wYXltZW50OiB0aGlzLmZvcm0udmFsdWUuZXh0ZXJuYWxfcGF5bWVudCxcbiAgICAgICAgICAgIHN0cmlwZV9zdWJzY3JpcHRpb25faWQ6IHRoaXMuZm9ybS52YWx1ZS5zdHJpcGVfc3Vic2NyaXB0aW9uX2lkLFxuICAgICAgICAgICAgbWluX3VuaXRzOiB0aGlzLmZvcm0udmFsdWUubWluX3VuaXRzXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsdWU/Lm5ld19wcm9kdWN0X2lkKSB7XG4gICAgICAgICAgICBkYXRhWyduZXdfcHJvZHVjdF9pZCddID0gdGhpcy5mb3JtLnZhbHVlPy5uZXdfcHJvZHVjdF9pZD8udmFsdWUgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb3JtLnZhbHVlLnB1cmNoYXNlZF91bml0cykge1xuICAgICAgICAgICAgZGF0YVsncHVyY2hhc2VkX3VuaXRzJ10gPSB0aGlzLmZvcm0udmFsdWUucHVyY2hhc2VkX3VuaXRzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlU3Vic2NyaXB0aW9uUHJvZHVjdChkYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uU3Vic2NyaXB0aW9ucy5VcGRhdGVkTWVzc2FnZScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRWYWxpZGF0aW9uKCkge1xuICAgICAgICAvLyBzdHJpcGUgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSBkaXNhYmxlIGlmIG5vdCBzdXBlcmFkbWluXG4gICAgICAgIGlmICghdGhpcy5pc1N1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3NpZ25lZF91cF9hdCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3N0cmlwZV9zdWJzY3JpcHRpb25faWQnKS5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdzaWduZWRfdXBfYXQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3N0cmlwZV9zdWJzY3JpcHRpb25faWQnKS5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHRlcm5hbCBwYXltZW50XG4gICAgICAgIC8vIHRoaXMuZm9ybS5nZXQoJ2V4dGVybmFsX3BheW1lbnQnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIC8vICAgICBpZiAoIXJlcykge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snc2lnbmVkX3VwX2F0J10uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snc2lnbmVkX3VwX2F0J10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzaWduZWRfdXBfYXQnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIC8vIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgcHctdGFiIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhc2hib2FyZC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWUtYXV0byBjb2wteHMtNlwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGgzIGNsYXNzPVwibS1zdWJoZWFkZXJfX3RpdGxlIG0tc3ViaGVhZGVyX190aXRsZS0tc2VwYXJhdG9yXCI+XG4gICAgICAgICAgPHNwYW4+U3Vic2NyaXB0aW9uIFByb2R1Y3Q8L3NwYW4+XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCJcbiAgICAgICAgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0yIG10LTNcIj5cbiAgICAgICAgPHA+XG4gICAgICAgICAgWW91IGNhbiB1cGRhdGUgdGhlIFB1cmNoYXNlZCBTZWF0cywgUHJvZHVjdCwgYW5kIFByb2R1Y3QgRXhwaXJ5IGRhdGUgYXMgbG9uZyBhcyB0aGUgdXNlciBoYXNuJ3Qgc3Vic2NyaWJlZCB1c2luZyBzdHJpcGUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi01XCI+XG4gICAgICAgICAgSWYgeW91IHNldCB0aGUgc3Vic2NyaXB0aW9uIGFzIEV4dGVybmFsIFBheW1lbnQgeW91J2xsIGhhdmUgdG8gbWFudWFsbHkgbWFuYWdlIHRoZSBQcm9kdWN0IEV4cGlyeSBEYXRlLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgICAgKG5nU3VibWl0KT1cIm9uU2F2ZSgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zIGNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlB1cmNoYXNlZFNlYXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJwdXJjaGFzZWRfdW5pdHNcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlB1cmNoYXNlZFNlYXRzJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHVyY2hhc2VkX3VuaXRzXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtMyBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5NaW5Vbml0cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwibWluX3VuaXRzXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVmFsaWRhdGlvbi5NaW5Vbml0cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLk1pblVuaXRzJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgW21heF09XCJmb3JtLmdldCgncHVyY2hhc2VkX3VuaXRzJykudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWluX3VuaXRzXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gcHJvZHVjdCBleHBpcnkgZGF0ZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Qcm9kdWN0RXhwaXJ5RGF0ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Qcm9kdWN0RXhwaXJ5RGF0ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJleHBpcmVzX2F0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFeHBpcnkgRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImV4cGlyZXNfYXRcIlxuICAgICAgICAgICAgICAgICAgICBbb3V0c2lkZURheXNdPVwiJ2hpZGRlbidcIlxuICAgICAgICAgICAgICAgICAgICBuZ2JEYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICNjPVwibmdiRGF0ZXBpY2tlclwiIC8+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlRXhwaXJlc0F0XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYy50b2dnbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gc2lnbmVkdXAgYXQtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtMyBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5TaWduZWRVcEF0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlNpZ25lZFVwQXQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwic2lnbmVkX3VwX2F0XCJcbiAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVmFsaWRhdGlvbi5TaWduZWRVcEF0JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2lnbmVkIFVwIEF0XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2lnbmVkX3VwX2F0XCJcbiAgICAgICAgICAgICAgICAgICAgbmdiRGF0ZXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAjZD1cIm5nYkRhdGVwaWNrZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzU3VwZXJBZG1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImQudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBzdHJpcGUgc3Vic2NyaXB0aW9uIGlkIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlN0cmlwZVN1YnNjcmlwdGlvbklkJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cInN0cmlwZV9zdWJzY3JpcHRpb25faWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5TdHJpcGVTdWJzY3JpcHRpb25JZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RyaXBlX3N1YnNjcmlwdGlvbl9pZFwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIGV4dGVybmFsIHBheW1lbnQgdG9nZ2xlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5FeHRlcm5hbFBheW1lbnQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZXh0ZXJuYWxfcGF5bWVudFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5FeHRlcm5hbFBheW1lbnQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBmb3JtQ29udHJvbE5hbWU9XCJleHRlcm5hbF9wYXltZW50XCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJleHRlcm5hbF9wYXltZW50XCI+XG4gICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wtc20tNFwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInTGFiZWwuUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJuZXdfcHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVmFsaWRhdGlvbi5Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRQcm9kdWN0c1wiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuZXdfcHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgICBkYXRhS2V5PVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgZmllbGQ9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZGVsYXldPVwiMTAwMFwiXG4gICAgICAgICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwic2VhcmNoUHJvZHVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCJcbiAgICAgICAgICAgICAgICAgIFtpbnB1dFN0eWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCduZXdfcHJvZHVjdF9pZCcpLnRvdWNoZWQgJiYgZm9ybS5nZXQoJ25ld19wcm9kdWN0X2lkJykuaW52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHsgYm9yZGVyOiAnMXB4IHNvbGlkICNmZjU4NmInIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IGJvcmRlcjogJzFweCBzb2xpZCBncmF5JyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRleHQtZW5kIG10LTNcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJiYWNrKClcIj5cbiAgICAgICAgICAgICAge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgIHt7ICdCdXR0b24uU3VibWl0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvc3Vic2NyaXB0aW9ucy9zdWJzY3JpcHRpb24tcHJvZHVjdC1kZXRhaWxzL3N1YnNjcmlwdGlvbi1wcm9kdWN0LWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscy9zdWJzY3JpcHRpb24tcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7OztB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RUFBZ0U7UUFDaEUsZUFBZTtRQUNmLG1GQUFtRjtRQUNuRixRQUFRO1FBQ1IsbUVBQW1FO1FBQ25FLE1BQU07SUFDVixDQUFDOztnSUEzTlEsbUNBQW1DO29IQUFuQyxtQ0FBbUMsOEZDbEJoRCxvbVBBc0tBO0FEa0JJO0lBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQzs7OztpRUFpQ3BCOzJGQXZNUSxtQ0FBbUM7a0JBSi9DLFNBQVM7K0JBQ0ksaUNBQWlDO3lOQTBLM0MsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBncm91cEJ5IGZyb20gJ2xvZGFzaC9ncm91cEJ5JztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYWRtaW4uc2VydmljZSc7XG5pbXBvcnQgeyBBcHBBZG1pbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvYWRtaW4ubW9kZWwnO1xuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdiRGF0ZUN1c3RvbVBhcnNlckZvcm1hdHRlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5pbXBvcnQgeyBQcm9kdWN0U2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgVmFsaWRhdGVGb3JtIH0gZnJvbSAnQHBvc2l3aXNlL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zdWJzY3JpcHRpb24tcHJvZHVjdC1kZXRhaWxzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uUHJvZHVjdERldGFpbHNDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG5cbiAgICBpZDogbnVtYmVyO1xuXG4gICAgZGF0YTogYW55O1xuXG4gICAgcm91dGVycyA9IFJPVVRFUlM7XG5cbiAgICBpc0xvYWRpbmc6IGJvb2xlYW47XG5cbiAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyO1xuXG4gICAgbWluRGF0ZSA9IEhlbHBlclNlcnZpY2UubWluRGF0ZVRvZGF5KCk7XG5cbiAgICBwcml2YXRlIGlzUHVyY2hhc2VkVW5pdHNEaXNhYmxlOiBib29sZWFuO1xuXG4gICAgZmlsdGVyZWRQcm9kdWN0cyA9IFtdO1xuXG4gICAgcHJvZHVjdHNMaXN0ID0gW107XG5cbiAgICBkaXNhYmxlRXhwaXJlc0F0ID0gZmFsc2U7XG5cbiAgICBpc1N1cGVyQWRtaW4gPSB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzU3VwZXJBZG1pbigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGF0ZUZvcm1hdFNlcnZpY2U6IE5nYkRhdGVDdXN0b21QYXJzZXJGb3JtYXR0ZXIsXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uc3Vic2NyaXB0aW9uUHJvZHVjdEZvcm0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnc3Vic2NyaXB0aW9uX2lkJykpO1xuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBOdW1iZXIocGFyYW1zWydpZCddKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJvZHVjdExpc3QoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgZ2V0UHJvZHVjdExpc3QoKSB7XG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQcm9kdWN0TGlzdCh7fSwgdGhpcy5zdWJzY3JpcHRpb25JZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHNMaXN0ID0gdGhpcy5ncm91cFByb2R1Y3RzKHJlc3BvbnNlLnByb2R1Y3RzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblByb2R1Y3REZXRhaWxzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25Qcm9kdWN0RGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRTdWJzY3JpcHRpb25Qcm9kdWN0KHRoaXMuaWQsIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHVyY2hhc2VkVW5pdHNEaXNhYmxlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5pc1N1cGVyQWRtaW4oKSB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5wZXJtaXNzaW9uU2VydmljZS5pc1VzZXJTdWJzY3JpcHRpb25TdXBlckFkbWluKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFyZXNwb25zZS5zdHJpcGVfc3Vic2NyaXB0aW9uX2lkKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1B1cmNoYXNlZFVuaXRzRGlzYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdwdXJjaGFzZWRfdW5pdHMnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnbmV3X3Byb2R1Y3RfaWQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnZXhwaXJlc19hdCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmZvcm0uZ2V0KCdzaWduZWRfdXBfYXQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlRXhwaXJlc0F0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncHVyY2hhc2VkX3VuaXRzJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCduZXdfcHJvZHVjdF9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnZXhwaXJlc19hdCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5mb3JtLmdldCgnc2lnbmVkX3VwX2F0JykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVFeHBpcmVzQXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5hbFBheW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzU3VwZXJBZG1pbigpIHx8ICFyZXNwb25zZT8uc3RyaXBlX3N1YnNjcmlwdGlvbl9pZDtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZXJuYWxQYXltZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2V4dGVybmFsX3BheW1lbnQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdleHRlcm5hbF9wYXltZW50JykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNwb25zZS5leHBpcmVzX2F0ID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVzcG9uc2UuZXhwaXJlc19hdCwgJ3l5eXktTU0tZGQnKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LnNpZ25lZF91cF9hdCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zaWduZWRfdXBfYXQgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlPy5zaWduZWRfdXBfYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAneXl5eS1NTS1kZCdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGRhdGUgPSB0aGlzLmRhdGVGb3JtYXRTZXJ2aWNlLmRhdGVGb3JtYXRGb3JQaWNrZXIocmVzcG9uc2U/LmV4cGlyZXNfYXQpO1xuICAgICAgICAgICAgICAgIGxldCBzaWduZWRVcERhdGU7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5zaWduZWRfdXBfYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmVkVXBEYXRlID0gdGhpcy5kYXRlRm9ybWF0U2VydmljZS5kYXRlRm9ybWF0Rm9yUGlja2VyKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U/LnNpZ25lZF91cF9hdFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdzaWduZWRfdXBfYXQnKS5wYXRjaFZhbHVlKHNpZ25lZFVwRGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2V4cGlyZXNfYXQnKS5wYXRjaFZhbHVlKGV4cGRhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8ucHJvZHVjdF9pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdfcHJvZHVjdF9pZDogdGhpcy5wcm9kdWN0c0xpc3QuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0+IHgudmFsdWUgPT09IHRoaXMuZGF0YT8ucHJvZHVjdF9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRPYmoob2JqKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHNlYXJjaFByb2R1Y3QoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmdldFByb2R1Y3RMaXN0KHsgc2VhcmNoOiBldmVudC5xdWVyeSB9LCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFByb2R1Y3RzID0gdGhpcy5ncm91cFByb2R1Y3RzKHJlc3BvbnNlLnByb2R1Y3RzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ3JvdXBQcm9kdWN0cyhwcm9kdWN0cykge1xuICAgICAgICBpZiAocHJvZHVjdHMgJiYgcHJvZHVjdHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBwcm9kdWN0cy5maWx0ZXIoeCA9PiB4LmRlcGVuZGVuY3lfcHJvZHVjdHM/Lmxlbmd0aCA8IDEgJiYgeC5hY3RpdmUpO1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBncm91cEJ5KHByb2R1Y3RzLCAnY3VycmVuY3knKTtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gdGhpcy5zb3J0T2JqKHByb2R1Y3RzKTtcbiAgICAgICAgICAgIGxldCBncm91cGVkQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgZm9yIChjb25zdCBwIGluIHByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9kdWN0c1twXS5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT4gTnVtYmVyKGIucHJpY2VfcGVyX3VuaXQpIC0gTnVtYmVyKGEucHJpY2VfcGVyX3VuaXQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBncm91cGVkQXJyYXkucHVzaCguLi52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncm91cGVkQXJyYXkgPSBncm91cGVkQXJyYXkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCR7eC5uYW1lfSB8ICR7eC5yZWdpb259IHwgJHt4LmJpbGxpbmdfZnJlcXVlbmN5fSB8ICR7eC5taW5fdW5pdHN9IHggJHsoXG4gICAgICAgICAgICAgICAgICAgICAgICB4LnByaWNlX3Blcl91bml0IC8gMTAwXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKX0gfCAke3guY3VycmVuY3l9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRBcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBAVmFsaWRhdGVGb3JtKCdmb3JtJylcbiAgICBvblNhdmUoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZXhwZGF0ZSA9IHRoaXMuZm9ybS52YWx1ZS5leHBpcmVzX2F0O1xuICAgICAgICBjb25zdCBzaWduZWRVcEF0ID0gdGhpcy5mb3JtLnZhbHVlLnNpZ25lZF91cF9hdDtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHRoaXMuZGF0YT8ucHJvZHVjdF9pZCxcbiAgICAgICAgICAgIGV4cGlyZXNfYXQ6IGV4cGRhdGUgPyBIZWxwZXJTZXJ2aWNlLmRhdGVGb3JtYXQoZXhwZGF0ZSkgOiBudWxsLFxuICAgICAgICAgICAgc2lnbmVkX3VwX2F0OiBzaWduZWRVcEF0ID8gSGVscGVyU2VydmljZS5kYXRlRm9ybWF0KHNpZ25lZFVwQXQpIDogbnVsbCxcbiAgICAgICAgICAgIGV4dGVybmFsX3BheW1lbnQ6IHRoaXMuZm9ybS52YWx1ZS5leHRlcm5hbF9wYXltZW50LFxuICAgICAgICAgICAgc3RyaXBlX3N1YnNjcmlwdGlvbl9pZDogdGhpcy5mb3JtLnZhbHVlLnN0cmlwZV9zdWJzY3JpcHRpb25faWQsXG4gICAgICAgICAgICBtaW5fdW5pdHM6IHRoaXMuZm9ybS52YWx1ZS5taW5fdW5pdHNcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWx1ZT8ubmV3X3Byb2R1Y3RfaWQpIHtcbiAgICAgICAgICAgIGRhdGFbJ25ld19wcm9kdWN0X2lkJ10gPSB0aGlzLmZvcm0udmFsdWU/Lm5ld19wcm9kdWN0X2lkPy52YWx1ZSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsdWUucHVyY2hhc2VkX3VuaXRzKSB7XG4gICAgICAgICAgICBkYXRhWydwdXJjaGFzZWRfdW5pdHMnXSA9IHRoaXMuZm9ybS52YWx1ZS5wdXJjaGFzZWRfdW5pdHM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVTdWJzY3JpcHRpb25Qcm9kdWN0KGRhdGEpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5TdWJzY3JpcHRpb25zLlVwZGF0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFZhbGlkYXRpb24oKSB7XG4gICAgICAgIC8vIHN0cmlwZSBzdWJzY3JpcHRpb24gc2hvdWxkIGJlIGRpc2FibGUgaWYgbm90IHN1cGVyYWRtaW5cbiAgICAgICAgaWYgKCF0aGlzLmlzU3VwZXJBZG1pbikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnc2lnbmVkX3VwX2F0JykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnc3RyaXBlX3N1YnNjcmlwdGlvbl9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3NpZ25lZF91cF9hdCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnc3RyaXBlX3N1YnNjcmlwdGlvbl9pZCcpLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dGVybmFsIHBheW1lbnRcbiAgICAgICAgLy8gdGhpcy5mb3JtLmdldCgnZXh0ZXJuYWxfcGF5bWVudCcpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgLy8gICAgIGlmICghcmVzKSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzaWduZWRfdXBfYXQnXS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzaWduZWRfdXBfYXQnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3NpZ25lZF91cF9hdCddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgLy8gfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBwdy10YWIgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZS1hdXRvIGNvbC14cy02XCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlvdXNcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPC9hPlxuICAgICAgICA8aDMgY2xhc3M9XCJtLXN1YmhlYWRlcl9fdGl0bGUgbS1zdWJoZWFkZXJfX3RpdGxlLS1zZXBhcmF0b3JcIj5cbiAgICAgICAgICA8c3Bhbj5TdWJzY3JpcHRpb24gUHJvZHVjdDwvc3Bhbj5cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgICAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTIgbXQtM1wiPlxuICAgICAgICA8cD5cbiAgICAgICAgICBZb3UgY2FuIHVwZGF0ZSB0aGUgUHVyY2hhc2VkIFNlYXRzLCBQcm9kdWN0LCBhbmQgUHJvZHVjdCBFeHBpcnkgZGF0ZSBhcyBsb25nIGFzIHRoZSB1c2VyIGhhc24ndCBzdWJzY3JpYmVkIHVzaW5nIHN0cmlwZS5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm1iLTVcIj5cbiAgICAgICAgICBJZiB5b3Ugc2V0IHRoZSBzdWJzY3JpcHRpb24gYXMgRXh0ZXJuYWwgUGF5bWVudCB5b3UnbGwgaGF2ZSB0byBtYW51YWxseSBtYW5hZ2UgdGhlIFByb2R1Y3QgRXhwaXJ5IERhdGUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTMgY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuUHVyY2hhc2VkU2VhdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInB1cmNoYXNlZF91bml0c1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuUHVyY2hhc2VkU2VhdHMnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwdXJjaGFzZWRfdW5pdHNcIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zIGNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLk1pblVuaXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJtaW5fdW5pdHNcIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5WYWxpZGF0aW9uLk1pblVuaXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuTWluVW5pdHMnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbbWF4XT1cImZvcm0uZ2V0KCdwdXJjaGFzZWRfdW5pdHMnKS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW5fdW5pdHNcIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBwcm9kdWN0IGV4cGlyeSBkYXRlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlByb2R1Y3RFeHBpcnlEYXRlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlByb2R1Y3RFeHBpcnlEYXRlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cImV4cGlyZXNfYXRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkV4cGlyeSBEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZXhwaXJlc19hdFwiXG4gICAgICAgICAgICAgICAgICAgIFtvdXRzaWRlRGF5c109XCInaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgI2M9XCJuZ2JEYXRlcGlja2VyXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVFeHBpcmVzQXRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjLnRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBzaWduZWR1cCBhdC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zIGNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlNpZ25lZFVwQXQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuU2lnbmVkVXBBdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJzaWduZWRfdXBfYXRcIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5WYWxpZGF0aW9uLlNpZ25lZFVwQXQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTaWduZWQgVXAgQXRcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzaWduZWRfdXBfYXRcIlxuICAgICAgICAgICAgICAgICAgICBuZ2JEYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICNkPVwibmdiRGF0ZXBpY2tlclwiIC8+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNTdXBlckFkbWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZC50b2dnbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIHN0cmlwZSBzdWJzY3JpcHRpb24gaWQgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuU3RyaXBlU3Vic2NyaXB0aW9uSWQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwic3RyaXBlX3N1YnNjcmlwdGlvbl9pZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlN0cmlwZVN1YnNjcmlwdGlvbklkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdHJpcGVfc3Vic2NyaXB0aW9uX2lkXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gZXh0ZXJuYWwgcGF5bWVudCB0b2dnbGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0yXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLkV4dGVybmFsUGF5bWVudCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJleHRlcm5hbF9wYXltZW50XCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLkV4dGVybmFsUGF5bWVudCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8dWktc3dpdGNoIGZvcm1Db250cm9sTmFtZT1cImV4dGVybmFsX3BheW1lbnRcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImV4dGVybmFsX3BheW1lbnRcIj5cbiAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC1zbS00XCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidMYWJlbC5Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cIm5ld19wcm9kdWN0X2lkXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5WYWxpZGF0aW9uLlByb2R1Y3QnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFtzdWdnZXN0aW9uc109XCJmaWx0ZXJlZFByb2R1Y3RzXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5ld19wcm9kdWN0X2lkXCJcbiAgICAgICAgICAgICAgICAgIGRhdGFLZXk9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBmaWVsZD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtkcm9wZG93bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtkZWxheV09XCIxMDAwXCJcbiAgICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJzZWFyY2hQcm9kdWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFByb2R1Y3RcIlxuICAgICAgICAgICAgICAgICAgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5nZXQoJ25ld19wcm9kdWN0X2lkJykudG91Y2hlZCAmJiBmb3JtLmdldCgnbmV3X3Byb2R1Y3RfaWQnKS5pbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsgYm9yZGVyOiAnMXB4IHNvbGlkIGdyYXknIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgdGV4dC1lbmQgbXQtM1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAge3sgJ0J1dHRvbi5TdWJtaXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -8,12 +8,13 @@ import * as i2 from "primeng/table";
8
8
  import * as i3 from "primeng/api";
9
9
  import * as i4 from "primeng/tooltip";
10
10
  import * as i5 from "@angular/common";
11
- import * as i6 from "@angular/router";
12
- import * as i7 from "@posiwise/shared-components";
13
- import * as i8 from "@posiwise/directives";
14
- import * as i9 from "@ng-bootstrap/ng-bootstrap";
15
- import * as i10 from "@angular/forms";
16
- import * as i11 from "@ngneat/transloco";
11
+ import * as i6 from "@angular/forms";
12
+ import * as i7 from "@angular/router";
13
+ import * as i8 from "primeng/progressspinner";
14
+ import * as i9 from "@posiwise/shared-components";
15
+ import * as i10 from "@posiwise/directives";
16
+ import * as i11 from "@ng-bootstrap/ng-bootstrap";
17
+ import * as i12 from "@ngneat/transloco";
17
18
  export class SubscriptionProductsComponent extends AppBaseComponent {
18
19
  constructor(subscriptionService, injector, productService) {
19
20
  super(injector);
@@ -53,9 +54,9 @@ export class SubscriptionProductsComponent extends AppBaseComponent {
53
54
  }
54
55
  }
55
56
  SubscriptionProductsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SubscriptionProductsComponent, deps: [{ token: i1.SubscriptionService }, { token: i0.Injector }, { token: i1.ProductService }], target: i0.ɵɵFactoryTarget.Component });
56
- SubscriptionProductsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: SubscriptionProductsComponent, selector: "pw-subscription-products", usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecords === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [responsive]=\"true\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100).toFixed(2) }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100).toFixed(2) }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: id }\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecords === 0 && isLoaded\">\n <pw-no-data [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n", dependencies: [{ kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.NoDataComponent, selector: "pw-no-data", inputs: ["message"] }, { kind: "directive", type: i8.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i8.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i9.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i11.TranslocoPipe, name: "transloco" }] });
57
+ SubscriptionProductsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: SubscriptionProductsComponent, selector: "pw-subscription-products", usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecords === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [responsive]=\"true\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100).toFixed(2) }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100).toFixed(2) }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: id }\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecords === 0 && isLoaded\">\n <pw-no-data [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n", dependencies: [{ kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", 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]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i8.ProgressSpinner, selector: "p-progressSpinner", inputs: ["style", "styleClass", "strokeWidth", "fill", "animationDuration"] }, { kind: "component", type: i9.NoDataComponent, selector: "pw-no-data", inputs: ["message"] }, { kind: "directive", type: i10.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i10.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i12.TranslocoPipe, name: "transloco" }] });
57
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SubscriptionProductsComponent, decorators: [{
58
59
  type: Component,
59
60
  args: [{ selector: 'pw-subscription-products', template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecords === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [responsive]=\"true\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100).toFixed(2) }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100).toFixed(2) }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: id }\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecords === 0 && isLoaded\">\n <pw-no-data [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n" }]
60
61
  }], ctorParameters: function () { return [{ type: i1.SubscriptionService }, { type: i0.Injector }, { type: i1.ProductService }]; } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9zdWJzY3JpcHRpb25zL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3RzL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBTWhGLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxnQkFBZ0I7SUFtQi9ELFlBQ1ksbUJBQXdDLEVBQ2hELFFBQWtCLEVBQ1YsY0FBOEI7UUFFdEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSlIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUV4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFuQjFDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUkxQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFZixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWhCLFlBQU8sR0FBRyxPQUFPLENBQUM7UUFFbEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLGVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBUXpCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLE9BQU8sQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQjthQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzthQUNoQixTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7UUFDbkQsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7MEhBcERRLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLHVGQ1YxQywwK0lBdUdBOzJGRDdGYSw2QkFBNkI7a0JBSnpDLFNBQVM7K0JBQ0ksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3RTZXJ2aWNlLCBTdWJzY3JpcHRpb25TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctc3Vic2NyaXB0aW9uLXByb2R1Y3RzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3Vic2NyaXB0aW9uLXByb2R1Y3RzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTdWJzY3JpcHRpb25Qcm9kdWN0c0NvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGlkOiBudW1iZXI7XG5cbiAgICBzdWJzY3JpcHRpb25Qcm9kdWN0cyA9IFtdO1xuXG4gICAgdG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBpc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgbG9hZGluZyA9IHRydWU7XG5cbiAgICBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgICByb3V0ZXJzID0gUk9VVEVSUztcblxuICAgIGN1cnJlbmN5ID0gW107XG5cbiAgICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25TZXJ2aWNlOiBTdWJzY3JpcHRpb25TZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRTdXBwb3J0ZWRDdXJyZW5jeSgpO1xuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlkID0gTnVtYmVyKGRhdGFbJ2lkJ10pO1xuICAgICAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb25EZXRhaWxzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3VwcG9ydGVkQ3VycmVuY3koKSB7XG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2UuZ2V0U3VwcG9ydGVkQ3VycmVuY3koKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3kgPSByZXM/LnJlZ2lvbnM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uRGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QnlJZCh0aGlzLmlkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25Qcm9kdWN0cyA9IHJlc3BvbnNlPy5wcm9kdWN0cyB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHJlc3BvbnNlPy5wcm9kdWN0cz8ubGVuZ3RoO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc0xvYWRlZFwiPlxuICAgIDxwLXByb2dyZXNzU3Bpbm5lcj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciB0YWJsZS1yZXNwb25zaXZlIG10LTBcIlxuICBbY2xhc3MuaGlkZVRhYmxlXT1cInRvdGFsUmVjb3JkcyA9PT0gMFwiPlxuICA8cC10YWJsZSAjZHRcbiAgICBbdmFsdWVdPVwic3Vic2NyaXB0aW9uUHJvZHVjdHNcIlxuICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXG4gICAgW3Jvd3NdPVwiUEFHRV9TSVpFXCJcbiAgICBbcmVzcG9uc2l2ZV09XCJ0cnVlXCJcbiAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgW2ZpbHRlckRlbGF5XT1cIjEwMDBcIlxuICAgIFtjdXN0b21Tb3J0XT1cInRydWVcIj5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG10LTIgbWUtMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICBzaXplPVwiNTBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHN1YnNjcmlwdGlvbiBwcm9kdWN0cy4uLlwiXG4gICAgICAgICAgKGlucHV0KT1cImR0LmZpbHRlckdsb2JhbCgkZXZlbnQudGFyZ2V0LnZhbHVlLCAnY29udGFpbnMnKVwiXG4gICAgICAgICAgY2xhc3M9XCJtdy05MFwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdMYWJlbC5OYW1lJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5QcmljZVBlclVuaXQnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLkN1cnJlbmN5JyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5CaWxsaW5nRnJlcXVlbmN5JyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5NaW5Vbml0cycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuTWF4VW5pdHMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLlB1cmNoYXNlZFVuaXRzJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5DYWxjdWxhdGVkUHJpY2UnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLklzRGVsZXRlZCcgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJhY3Rpb25zLWxpc3QtdHdvXCJcbiAgICAgICAgICBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuQWN0aW9ucycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgIGxldC1pdGVtPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTmFtZVwiPnt7IGl0ZW0ubmFtZSB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJQcmljZSBQZXIgVW5pdFwiPlxuICAgICAgICAgIDxzcGFuPnt7IChpdGVtLnByaWNlX3Blcl91bml0IC8gMTAwKS50b0ZpeGVkKDIpIH19XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8uZGlzY291bnQgJiYgb2JqZWN0S2V5cyhpdGVtPy5kaXNjb3VudCk/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJpdGVtPy5kaXNjb3VudCB8IGpzb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJDdXJyZW5jeVwiPlxuICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBjdXJyZW5jeSwgaXRlbTogaXRlbS5jdXJyZW5jeSB9XCJcbiAgICAgICAgICAgIGNvbG9yPVwiYmx1ZS1ncmV5XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBpdGVtLmN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQmlsbGluZyBGcmVxdWVuY3lcIj5cbiAgICAgICAgICB7eyBpdGVtLmJpbGxpbmdfZnJlcXVlbmN5IH19XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5wYXVzZV9jb2xsZWN0aW9uICYmIG9iamVjdEtleXMoaXRlbT8ucGF1c2VfY29sbGVjdGlvbik/Lmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cIm1zLTJcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIml0ZW0/LnBhdXNlX2NvbGxlY3Rpb24gfCBqc29uXCJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUgdGV4dC13YXJuaW5nXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIk1pbiBVbml0c1wiPnt7IGl0ZW0ubWluX3VuaXRzIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIk1heCBVbml0c1wiPnt7IGl0ZW0ubWF4X3VuaXRzIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlB1cmNoYXNlZCBVbml0c1wiPnt7IGl0ZW0ucHVyY2hhc2VkX3VuaXRzIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkNhbGN1bGF0ZWQgUHJpY2VcIj57eyAoaXRlbS5jYWxjdWxhdGVkX3ByaWNlIC8gMTAwKS50b0ZpeGVkKDIpIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkRlbGV0ZWRcIj5cbiAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogW3RydWUsIGZhbHNlXSwgaXRlbTogaXRlbT8uaXNfZGVsZXRlZCB9XCJcbiAgICAgICAgICAgIGNvbG9yPVwic3VjY2Vzcy1kYW5nZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZVwiPnt7IGl0ZW0/LmlzX2RlbGV0ZWQgPyAnWWVzJyA6ICdObycgfX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJBY3Rpb25cIj5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIGxpc3QtaW5saW5lXCI+XG4gICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkVkaXRcIlxuICAgICAgICAgICAgICAqcmJhY0FsbG93PVwiJ1N1YnNjcmlwdGlvblN1cGVyQWRtaW4nXCJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJzLnN1YnNjcmlwdGlvblByb2R1Y3REZXRhaWxzICsgaXRlbS5zdWJzY3JpcHRpb25fcHJvZHVjdF9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwieyBzdWJzY3JpcHRpb25faWQ6IGlkIH1cIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0IGVkaXQtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuICA8c3BhbiBjbGFzcz1cInRvdGFsLXJlY29yZHMtY291bnRcIj57eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyB0b3RhbFJlY29yZHMgfX08L3NwYW4+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJ0b3RhbFJlY29yZHMgPT09IDAgJiYgaXNMb2FkZWRcIj5cbiAgPHB3LW5vLWRhdGEgW21lc3NhZ2VdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuTm9TdWJzY3JpcHRpb25Qcm9kdWN0c01lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gIDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuIl19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9zdWJzY3JpcHRpb25zL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3RzL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQU1oRixNQUFNLE9BQU8sNkJBQThCLFNBQVEsZ0JBQWdCO0lBbUIvRCxZQUNZLG1CQUF3QyxFQUNoRCxRQUFrQixFQUNWLGNBQThCO1FBRXRDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUpSLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFFeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBbkIxQyx5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFJMUIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBRWYsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQixZQUFPLEdBQUcsT0FBTyxDQUFDO1FBRWxCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFFZCxlQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQVF6QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxtQkFBbUI7YUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDaEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ25ELENBQUMsQ0FBQzthQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7OzBIQXBEUSw2QkFBNkI7OEdBQTdCLDZCQUE2Qix1RkNWMUMsMCtJQXVHQTsyRkQ3RmEsNkJBQTZCO2tCQUp6QyxTQUFTOytCQUNJLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0U2VydmljZSwgU3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXN1YnNjcmlwdGlvbi1wcm9kdWN0cycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uUHJvZHVjdHNDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBpZDogbnVtYmVyO1xuXG4gICAgc3Vic2NyaXB0aW9uUHJvZHVjdHMgPSBbXTtcblxuICAgIHRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIGxvYWRpbmcgPSB0cnVlO1xuXG4gICAgc2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgcm91dGVycyA9IFJPVVRFUlM7XG5cbiAgICBjdXJyZW5jeSA9IFtdO1xuXG4gICAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uU2VydmljZTogU3Vic2NyaXB0aW9uU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHByb2R1Y3RTZXJ2aWNlOiBQcm9kdWN0U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0U3VwcG9ydGVkQ3VycmVuY3koKTtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IE51bWJlcihkYXRhWydpZCddKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uRGV0YWlscygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1cHBvcnRlZEN1cnJlbmN5KCkge1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldFN1cHBvcnRlZEN1cnJlbmN5KCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbmN5ID0gcmVzPy5yZWdpb25zO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1YnNjcmlwdGlvbkRldGFpbHMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZVxuICAgICAgICAgICAgLmdldEJ5SWQodGhpcy5pZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uUHJvZHVjdHMgPSByZXNwb25zZT8ucHJvZHVjdHMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXNwb25zZT8ucHJvZHVjdHM/Lmxlbmd0aDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNMb2FkZWRcIj5cbiAgICA8cC1wcm9ncmVzc1NwaW5uZXI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgdGFibGUtcmVzcG9uc2l2ZSBtdC0wXCJcbiAgW2NsYXNzLmhpZGVUYWJsZV09XCJ0b3RhbFJlY29yZHMgPT09IDBcIj5cbiAgPHAtdGFibGUgI2R0XG4gICAgW3ZhbHVlXT1cInN1YnNjcmlwdGlvblByb2R1Y3RzXCJcbiAgICBbcGFnaW5hdG9yXT1cInRydWVcIlxuICAgIFtyb3dzXT1cIlBBR0VfU0laRVwiXG4gICAgW3Jlc3BvbnNpdmVdPVwidHJ1ZVwiXG4gICAgW2xhenldPVwidHJ1ZVwiXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIFtmaWx0ZXJEZWxheV09XCIxMDAwXCJcbiAgICBbY3VzdG9tU29ydF09XCJ0cnVlXCI+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgc2l6ZT1cIjUwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzdWJzY3JpcHRpb24gcHJvZHVjdHMuLi5cIlxuICAgICAgICAgIChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxuICAgICAgICAgIGNsYXNzPVwibXctOTBcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuTmFtZScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuUHJpY2VQZXJVbml0JyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5DdXJyZW5jeScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuQmlsbGluZ0ZyZXF1ZW5jeScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuTWluVW5pdHMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLk1heFVuaXRzJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5QdXJjaGFzZWRVbml0cycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuQ2FsY3VsYXRlZFByaWNlJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5Jc0RlbGV0ZWQnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYWN0aW9ucy1saXN0LXR3b1wiXG4gICAgICAgICAgc2NvcGU9XCJ0cnVlXCI+e3sgJ0xhYmVsLkFjdGlvbnMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgICBsZXQtaXRlbT5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIk5hbWVcIj57eyBpdGVtLm5hbWUgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUHJpY2UgUGVyIFVuaXRcIj5cbiAgICAgICAgICA8c3Bhbj57eyAoaXRlbS5wcmljZV9wZXJfdW5pdCAvIDEwMCkudG9GaXhlZCgyKSB9fVxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWluZm8tY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/LmRpc2NvdW50ICYmIG9iamVjdEtleXMoaXRlbT8uZGlzY291bnQpPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiaXRlbT8uZGlzY291bnQgfCBqc29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQ3VycmVuY3lcIj5cbiAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogY3VycmVuY3ksIGl0ZW06IGl0ZW0uY3VycmVuY3kgfVwiXG4gICAgICAgICAgICBjb2xvcj1cImJsdWUtZ3JleVwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgaXRlbS5jdXJyZW5jeSB9fTwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkJpbGxpbmcgRnJlcXVlbmN5XCI+XG4gICAgICAgICAge3sgaXRlbS5iaWxsaW5nX2ZyZXF1ZW5jeSB9fVxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8ucGF1c2VfY29sbGVjdGlvbiAmJiBvYmplY3RLZXlzKGl0ZW0/LnBhdXNlX2NvbGxlY3Rpb24pPy5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJtcy0yXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJpdGVtPy5wYXVzZV9jb2xsZWN0aW9uIHwganNvblwiXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIHRleHQtd2FybmluZ1wiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJNaW4gVW5pdHNcIj57eyBpdGVtLm1pbl91bml0cyB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJNYXggVW5pdHNcIj57eyBpdGVtLm1heF91bml0cyB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJQdXJjaGFzZWQgVW5pdHNcIj57eyBpdGVtLnB1cmNoYXNlZF91bml0cyB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJDYWxjdWxhdGVkIFByaWNlXCI+e3sgKGl0ZW0uY2FsY3VsYXRlZF9wcmljZSAvIDEwMCkudG9GaXhlZCgyKSB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJEZWxldGVkXCI+XG4gICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IFt0cnVlLCBmYWxzZV0sIGl0ZW06IGl0ZW0/LmlzX2RlbGV0ZWQgfVwiXG4gICAgICAgICAgICBjb2xvcj1cInN1Y2Nlc3MtZGFuZ2VyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBpdGVtPy5pc19kZWxldGVkID8gJ1llcycgOiAnTm8nIH19PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZVwiPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJFZGl0XCJcbiAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidTdWJzY3JpcHRpb25TdXBlckFkbWluJ1wiXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVycy5zdWJzY3JpcHRpb25Qcm9kdWN0RGV0YWlscyArIGl0ZW0uc3Vic2NyaXB0aW9uX3Byb2R1Y3RfaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgc3Vic2NyaXB0aW9uX2lkOiBpZCB9XCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbiAgPHNwYW4gY2xhc3M9XCJ0b3RhbC1yZWNvcmRzLWNvdW50XCI+e3sgJ0xhYmVsLlRvdGFsJyB8IHRyYW5zbG9jbyB9fToge3sgdG90YWxSZWNvcmRzIH19PC9zcGFuPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwidG90YWxSZWNvcmRzID09PSAwICYmIGlzTG9hZGVkXCI+XG4gIDxwdy1uby1kYXRhIFttZXNzYWdlXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLk5vU3Vic2NyaXB0aW9uUHJvZHVjdHNNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbiJdfQ==