@posiwise/admin-module 0.0.161 → 0.0.163

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 (45) hide show
  1. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +154 -105
  2. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +2 -2
  3. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +3 -2
  4. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +3 -2
  5. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +3 -2
  6. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +3 -2
  7. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +3 -2
  8. package/esm2022/lib/components/faqs/add-faq/add-faq.component.mjs +3 -3
  9. package/esm2022/lib/components/faqs/edit-faq/edit-faq.component.mjs +3 -3
  10. package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +4 -4
  11. package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +2 -2
  12. package/esm2022/lib/components/products/product-details/product-details.component.mjs +3 -3
  13. package/esm2022/lib/components/products/products-list/products-list.component.mjs +3 -3
  14. package/esm2022/lib/components/resources/resources-admin-details/resources-admin-details.component.mjs +33 -21
  15. package/esm2022/lib/components/resources/resources-admin-tabs/resources-index/resources-index.component.mjs +3 -3
  16. package/esm2022/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +4 -4
  17. package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +2 -2
  18. package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +4 -4
  19. package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +3 -3
  20. package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +2 -2
  21. package/esm2022/lib/components/subscriptions/subscription-users/add-members/add-members.component.mjs +1 -1
  22. package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +10 -9
  23. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-price/subscription-insight-average-price.component.mjs +2 -7
  24. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-user/subscription-insight-average-user.component.mjs +2 -7
  25. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +2 -7
  26. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-product-session/subscription-insight-product-session.component.mjs +2 -7
  27. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-user-session/subscription-insight-user-session.component.mjs +2 -7
  28. package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +6 -6
  29. package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +11 -10
  30. package/esm2022/lib/components/tags/tags-details/tags-details.component.mjs +15 -5
  31. package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +4 -4
  32. package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +5 -6
  33. package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +5 -6
  34. package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +4 -3
  35. package/esm2022/lib/components/tracking/events/events.component.mjs +4 -3
  36. package/esm2022/lib/components/tracking/versions/versions.component.mjs +3 -3
  37. package/esm2022/lib/components/users/user-details/user-details.component.mjs +6 -3
  38. package/esm2022/lib/components/users/users-list/users-list.component.mjs +11 -11
  39. package/fesm2022/posiwise-admin-module.mjs +291 -241
  40. package/fesm2022/posiwise-admin-module.mjs.map +1 -1
  41. package/lib/components/resources/resources-admin-details/resources-admin-details.component.d.ts +7 -0
  42. package/lib/components/subscriptions/subscription-users/add-members/add-members.component.d.ts +1 -1
  43. package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +1 -0
  44. package/lib/components/tags/tags-details/tags-details.component.d.ts +4 -2
  45. package/package.json +1 -1
@@ -56,7 +56,7 @@ export class TagDetailsComponent extends AppBaseComponent {
56
56
  }
57
57
  dataURLtoBlob(dataUrl) {
58
58
  const arr = dataUrl.split(',');
59
- const mime = arr[0].match(/:(.*?);/)?.[1] || '';
59
+ const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];
60
60
  const bstr = atob(arr[1]);
61
61
  let n = bstr.length;
62
62
  const u8arr = new Uint8Array(n);
@@ -68,8 +68,17 @@ export class TagDetailsComponent extends AppBaseComponent {
68
68
  handleImageError(event, fallbackPath) {
69
69
  HelperService.handleImageFallbackPath(event, fallbackPath);
70
70
  }
71
+ deleteTagImage() {
72
+ this.image = null;
73
+ this.file = null;
74
+ }
75
+ handleRemovals(data) {
76
+ if (!this.file && !this.image) {
77
+ data.remove_image = true;
78
+ }
79
+ }
71
80
  patchForm(data) {
72
- this.form.patchValue(data || {});
81
+ this.form.patchValue(data ?? {});
73
82
  }
74
83
  onSave() {
75
84
  if (this.form.invalid)
@@ -98,6 +107,7 @@ export class TagDetailsComponent extends AppBaseComponent {
98
107
  }
99
108
  });
100
109
  }
110
+ this.handleRemovals(data);
101
111
  data.subscription_id = this.subscriptionId;
102
112
  const save$ = id
103
113
  ? this.tagService.updateTagById(id, data)
@@ -126,10 +136,10 @@ export class TagDetailsComponent extends AppBaseComponent {
126
136
  });
127
137
  }
128
138
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TagDetailsComponent, deps: [{ token: i0.Injector }, { token: i1.TagService }, { token: i0.ChangeDetectorRef }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
129
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TagDetailsComponent, selector: "pw-tag-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 mt-4\">\n <a aria-label=\"Navigate to Target\"\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 {{ currentTag ? 'Edit Tag' : 'Create Tag' }}\n </h3>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <!-- Tag Name -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.TagName' | transloco\"\n errorMsg=\"This field is required.\" name=\"name\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"Tag Name\" />\n </pw-input-container>\n </div>\n\n <!-- Tag Type -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.TagType' | transloco\"\n errorMsg=\"This field is required.\" name=\"tag_type\">\n <p-dropdown [options]=\"tagTypes\" formControlName=\"tag_type\"\n placeholder=\"Tag Types\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <!-- Category -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.Category' | transloco\"\n errorMsg=\"This field is required.\" name=\"tag_category_id\">\n <p-dropdown [options]=\"tagCategories\" formControlName=\"tag_category_id\"\n placeholder=\"Category\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <!-- Icon Name -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.IconName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Tags.Tooltip.IconName' | transloco\"\n name=\"icon_name\">\n <input type=\"text\" class=\"form-control\" formControlName=\"icon_name\" placeholder=\"Icon Name\" />\n </pw-input-container>\n </div>\n\n <!-- Visible In Resources -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Label.Title' | transloco\" name=\"title\"\n errorMsg=\"This field is required.\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" placeholder=\"Title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Tags.Tooltip.VisibleInResources' | transloco\"\n [label]=\"'Admin.Tags.VisibleInResources' | transloco\"\n name=\"visible_in_resources\">\n <ui-switch class=\"d-block\" formControlName=\"visible_in_resources\"></ui-switch>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-8\">\n <pw-input-container [label]=\"'Admin.Tags.Description' | transloco\" name=\"description\"\n errorMsg=\"This field is required.\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\" placeholder=\"Description\"></textarea>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-4 display-grid mt-2 text-center\">\n <label for=\"tagImage\">{{ 'Admin.Tags.Image' | transloco }}</label>\n <div class=\"text-center d-flex flex-column align-items-center\">\n <img [src]=\"image !== null ? image : 'assets/img/resource/blog.png'\"\n (click)=\"openModal(imageModal)\"\n class=\"image cropped-img\"\n [ngClass]=\"{ 'w-100': image === null }\"\n alt=\"Tag Image\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n\n <a aria-label=\"Open image cropper\"\n class=\"d-inline-block mt-2\"\n (click)=\"openModal(imageModal)\">\n {{ currentTag ? 'Edit' : 'Add' }} Image\n </a>\n </div>\n </div>\n\n <!-- Image Upload -->\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\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 [buttonBusy]=\"buttonBusy\"\n [disabled]=\"!form.valid\"\n class=\"btn btn-primary\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n\n<ng-template #imageModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Image</h5>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload a JPG, GIF, or PNG file. Avoid artwork, celebrities, or copyrighted images.</small>\n <pw-image-cropper\n #cropper\n aspectRatio=\"dynamic\"\n (imageSelectionEvent)=\"onImageSelected($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: ["::ng-deep .icon-name-input .info-circle .tooltiptext:after{left:76px!important}::ng-deep .icon-name-input .info-circle .tooltiptext{left:-81px!important}.cropped-img{max-width:100%!important;max-height:400px!important}\n"], dependencies: [{ kind: "component", type: i3.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i6.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i7.ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio", "dynamicData"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "component", type: i7.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i8.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i8.LazyImgDirective, selector: "img" }, { 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: i9.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TagDetailsComponent, selector: "pw-tag-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 mt-4\">\n <a aria-label=\"Navigate to Target\"\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 {{ currentTag ? 'Edit Tag' : 'Create Tag' }}\n </h3>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <!-- Tag Name -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.TagName' | transloco\"\n errorMsg=\"This field is required.\" name=\"name\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"Tag Name\" />\n </pw-input-container>\n </div>\n\n <!-- Tag Type -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.TagType' | transloco\"\n errorMsg=\"This field is required.\" name=\"tag_type\">\n <p-dropdown [options]=\"tagTypes\" formControlName=\"tag_type\"\n placeholder=\"Tag Types\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <!-- Category -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.Category' | transloco\"\n errorMsg=\"This field is required.\" name=\"tag_category_id\">\n <p-dropdown [options]=\"tagCategories\" formControlName=\"tag_category_id\"\n placeholder=\"Category\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <!-- Icon Name -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.IconName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Tags.Tooltip.IconName' | transloco\"\n name=\"icon_name\">\n <input type=\"text\" class=\"form-control\" formControlName=\"icon_name\" placeholder=\"Icon Name\" />\n </pw-input-container>\n </div>\n\n <!-- Visible In Resources -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Label.Title' | transloco\" name=\"title\"\n errorMsg=\"This field is required.\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" placeholder=\"Title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Tags.Tooltip.VisibleInResources' | transloco\"\n [label]=\"'Admin.Tags.VisibleInResources' | transloco\"\n name=\"visible_in_resources\">\n <ui-switch class=\"d-block\" formControlName=\"visible_in_resources\"></ui-switch>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-8\">\n <pw-input-container [label]=\"'Admin.Tags.Description' | transloco\" name=\"description\"\n errorMsg=\"This field is required.\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\" placeholder=\"Description\"></textarea>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-4 display-grid mt-2 text-center\">\n <label for=\"tagImage\">{{ 'Admin.Tags.Image' | transloco }}</label>\n <div class=\"text-center d-flex flex-column align-items-center\">\n <img [src]=\"image !== null ? image : 'assets/img/resource/blog.png'\"\n (click)=\"openModal(imageModal)\"\n (keydown.enter)=\"openModal(imageModal)\"\n class=\"image cropped-img\"\n [ngClass]=\"{ 'w-100': image === null }\"\n alt=\"Tag preview\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a aria-label=\"Open image cropper\"\n class=\"d-inline-block mt-2\"\n (click)=\"openModal(imageModal)\">\n {{ currentTag ? 'Update' : 'Add' }} Image\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2\"\n title=\"Remove Image\"\n (click)=\"deleteTagImage()\"\n (keydown.enter)=\"deleteTagImage()\"\n style=\"cursor: pointer;\"\n *ngIf=\"image && !image.includes('default-photo.jpg') && !image.includes('no_image_uploaded_squared.png')\">\n </i>\n </div>\n </div>\n </div>\n\n <!-- Image Upload -->\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\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 [buttonBusy]=\"buttonBusy\"\n [disabled]=\"!form.valid\"\n class=\"btn btn-primary\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n\n<ng-template #imageModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Image</h5>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload a JPG, GIF, or PNG file. Avoid artwork, celebrities, or copyrighted images.</small>\n <pw-image-cropper\n #cropper\n aspectRatio=\"dynamic\"\n (imageSelectionEvent)=\"onImageSelected($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: ["::ng-deep .icon-name-input .info-circle .tooltiptext:after{left:76px!important}::ng-deep .icon-name-input .info-circle .tooltiptext{left:-81px!important}.cropped-img{max-width:100%!important;max-height:400px!important}\n"], dependencies: [{ kind: "component", type: i3.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i6.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i7.ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio", "dynamicData"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "component", type: i7.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i8.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i8.LazyImgDirective, selector: "img" }, { 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: i9.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None }); }
130
140
  }
131
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TagDetailsComponent, decorators: [{
132
142
  type: Component,
133
- args: [{ selector: 'pw-tag-details', encapsulation: ViewEncapsulation.None, 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 mt-4\">\n <a aria-label=\"Navigate to Target\"\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 {{ currentTag ? 'Edit Tag' : 'Create Tag' }}\n </h3>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <!-- Tag Name -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.TagName' | transloco\"\n errorMsg=\"This field is required.\" name=\"name\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"Tag Name\" />\n </pw-input-container>\n </div>\n\n <!-- Tag Type -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.TagType' | transloco\"\n errorMsg=\"This field is required.\" name=\"tag_type\">\n <p-dropdown [options]=\"tagTypes\" formControlName=\"tag_type\"\n placeholder=\"Tag Types\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <!-- Category -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.Category' | transloco\"\n errorMsg=\"This field is required.\" name=\"tag_category_id\">\n <p-dropdown [options]=\"tagCategories\" formControlName=\"tag_category_id\"\n placeholder=\"Category\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <!-- Icon Name -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.IconName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Tags.Tooltip.IconName' | transloco\"\n name=\"icon_name\">\n <input type=\"text\" class=\"form-control\" formControlName=\"icon_name\" placeholder=\"Icon Name\" />\n </pw-input-container>\n </div>\n\n <!-- Visible In Resources -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Label.Title' | transloco\" name=\"title\"\n errorMsg=\"This field is required.\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" placeholder=\"Title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Tags.Tooltip.VisibleInResources' | transloco\"\n [label]=\"'Admin.Tags.VisibleInResources' | transloco\"\n name=\"visible_in_resources\">\n <ui-switch class=\"d-block\" formControlName=\"visible_in_resources\"></ui-switch>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-8\">\n <pw-input-container [label]=\"'Admin.Tags.Description' | transloco\" name=\"description\"\n errorMsg=\"This field is required.\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\" placeholder=\"Description\"></textarea>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-4 display-grid mt-2 text-center\">\n <label for=\"tagImage\">{{ 'Admin.Tags.Image' | transloco }}</label>\n <div class=\"text-center d-flex flex-column align-items-center\">\n <img [src]=\"image !== null ? image : 'assets/img/resource/blog.png'\"\n (click)=\"openModal(imageModal)\"\n class=\"image cropped-img\"\n [ngClass]=\"{ 'w-100': image === null }\"\n alt=\"Tag Image\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n\n <a aria-label=\"Open image cropper\"\n class=\"d-inline-block mt-2\"\n (click)=\"openModal(imageModal)\">\n {{ currentTag ? 'Edit' : 'Add' }} Image\n </a>\n </div>\n </div>\n\n <!-- Image Upload -->\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\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 [buttonBusy]=\"buttonBusy\"\n [disabled]=\"!form.valid\"\n class=\"btn btn-primary\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n\n<ng-template #imageModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Image</h5>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload a JPG, GIF, or PNG file. Avoid artwork, celebrities, or copyrighted images.</small>\n <pw-image-cropper\n #cropper\n aspectRatio=\"dynamic\"\n (imageSelectionEvent)=\"onImageSelected($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: ["::ng-deep .icon-name-input .info-circle .tooltiptext:after{left:76px!important}::ng-deep .icon-name-input .info-circle .tooltiptext{left:-81px!important}.cropped-img{max-width:100%!important;max-height:400px!important}\n"] }]
143
+ args: [{ selector: 'pw-tag-details', encapsulation: ViewEncapsulation.None, 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 mt-4\">\n <a aria-label=\"Navigate to Target\"\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 {{ currentTag ? 'Edit Tag' : 'Create Tag' }}\n </h3>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <!-- Tag Name -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.TagName' | transloco\"\n errorMsg=\"This field is required.\" name=\"name\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"Tag Name\" />\n </pw-input-container>\n </div>\n\n <!-- Tag Type -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.TagType' | transloco\"\n errorMsg=\"This field is required.\" name=\"tag_type\">\n <p-dropdown [options]=\"tagTypes\" formControlName=\"tag_type\"\n placeholder=\"Tag Types\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <!-- Category -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.Category' | transloco\"\n errorMsg=\"This field is required.\" name=\"tag_category_id\">\n <p-dropdown [options]=\"tagCategories\" formControlName=\"tag_category_id\"\n placeholder=\"Category\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <!-- Icon Name -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Tags.IconName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Tags.Tooltip.IconName' | transloco\"\n name=\"icon_name\">\n <input type=\"text\" class=\"form-control\" formControlName=\"icon_name\" placeholder=\"Icon Name\" />\n </pw-input-container>\n </div>\n\n <!-- Visible In Resources -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container [label]=\"'Label.Title' | transloco\" name=\"title\"\n errorMsg=\"This field is required.\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" placeholder=\"Title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Tags.Tooltip.VisibleInResources' | transloco\"\n [label]=\"'Admin.Tags.VisibleInResources' | transloco\"\n name=\"visible_in_resources\">\n <ui-switch class=\"d-block\" formControlName=\"visible_in_resources\"></ui-switch>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-8\">\n <pw-input-container [label]=\"'Admin.Tags.Description' | transloco\" name=\"description\"\n errorMsg=\"This field is required.\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\" placeholder=\"Description\"></textarea>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-4 display-grid mt-2 text-center\">\n <label for=\"tagImage\">{{ 'Admin.Tags.Image' | transloco }}</label>\n <div class=\"text-center d-flex flex-column align-items-center\">\n <img [src]=\"image !== null ? image : 'assets/img/resource/blog.png'\"\n (click)=\"openModal(imageModal)\"\n (keydown.enter)=\"openModal(imageModal)\"\n class=\"image cropped-img\"\n [ngClass]=\"{ 'w-100': image === null }\"\n alt=\"Tag preview\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a aria-label=\"Open image cropper\"\n class=\"d-inline-block mt-2\"\n (click)=\"openModal(imageModal)\">\n {{ currentTag ? 'Update' : 'Add' }} Image\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2\"\n title=\"Remove Image\"\n (click)=\"deleteTagImage()\"\n (keydown.enter)=\"deleteTagImage()\"\n style=\"cursor: pointer;\"\n *ngIf=\"image && !image.includes('default-photo.jpg') && !image.includes('no_image_uploaded_squared.png')\">\n </i>\n </div>\n </div>\n </div>\n\n <!-- Image Upload -->\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\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 [buttonBusy]=\"buttonBusy\"\n [disabled]=\"!form.valid\"\n class=\"btn btn-primary\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n\n<ng-template #imageModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Image</h5>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload a JPG, GIF, or PNG file. Avoid artwork, celebrities, or copyrighted images.</small>\n <pw-image-cropper\n #cropper\n aspectRatio=\"dynamic\"\n (imageSelectionEvent)=\"onImageSelected($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: ["::ng-deep .icon-name-input .info-circle .tooltiptext:after{left:76px!important}::ng-deep .icon-name-input .info-circle .tooltiptext{left:-81px!important}.cropped-img{max-width:100%!important;max-height:400px!important}\n"] }]
134
144
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.TagService }, { type: i0.ChangeDetectorRef }, { type: i2.NgbModal }] });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy90YWdzL3RhZ3MtZGV0YWlscy90YWdzLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3RhZ3MvdGFncy1kZXRhaWxzL3RhZ3MtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdsRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7OztBQVF0RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBV3JELFlBQ0ksUUFBa0IsRUFDRCxVQUFzQixFQUMvQixLQUF3QixFQUN4QixZQUFzQjtRQUU5QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQy9CLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBYmxDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixlQUFVLEdB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QUMsRUFBRTtZQUMzRSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDakQsUUFBUSxDQUFDLGNBQWMsRUFDdkIsTUFBTSxFQUNOLElBQUksQ0FDUCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQWpKUSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw2RUNoQmhDLHEyTEF3SUE7OzRGRHhIYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksZ0JBQWdCLGlCQUdYLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQXBwQWRtaW4gfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlLCBQcmltZU5nSGVscGVyLCBUYWdTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctdGFnLWRldGFpbHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWdzLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi4vdGFncy1saXN0L3RhZ3MtbGlzdC5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUYWdEZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgICB0YWdUeXBlcyA9IFtdO1xuICAgIHRhZ0NhdGVnb3JpZXMgPSBbXTtcbiAgICBidXR0b25CdXN5ID0gZmFsc2U7XG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcbiAgICBjdXJyZW50VGFnO1xuXG4gICAgaW1hZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGZpbGU6IEZpbGU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRhZ1NlcnZpY2U6IFRhZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmZvcm0gPSBBcHBBZG1pbi5nZXRUYWdzRm9ybSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRUYWcgPSBoaXN0b3J5LnN0YXRlPy5kYXRhO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VGFnKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlID0gdGhpcy5jdXJyZW50VGFnPy5pbWFnZT8udXJsO1xuICAgICAgICAgICAgdGhpcy5wYXRjaEZvcm0odGhpcy5jdXJyZW50VGFnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICB0aGlzLmdldFRhZ1R5cGVzKCk7XG4gICAgICAgIHRoaXMuZ2V0VGFnQ2F0ZWdvcmllcygpO1xuICAgIH1cblxuICAgIG9wZW5Nb2RhbChtb2RhbFJlZikge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKG1vZGFsUmVmLCB7XG4gICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgfVxuXG4gICAgb25JbWFnZVNlbGVjdGVkKGRhdGFVcmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmltYWdlID0gZGF0YVVybDtcbiAgICAgICAgY29uc3QgYmxvYiA9IHRoaXMuZGF0YVVSTHRvQmxvYihkYXRhVXJsKTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHtEYXRlLm5vdygpfS5wbmdgO1xuICAgICAgICB0aGlzLmZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVuYW1lKTtcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnaW1hZ2UnKT8uc2V0VmFsdWUodGhpcy5maWxlKTtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBkYXRhVVJMdG9CbG9iKGRhdGFVcmw6IHN0cmluZyk6IEJsb2Ige1xuICAgICAgICBjb25zdCBhcnIgPSBkYXRhVXJsLnNwbGl0KCcsJyk7XG4gICAgICAgIGNvbnN0IG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKT8uWzFdIHx8ICcnO1xuICAgICAgICBjb25zdCBic3RyID0gYXRvYihhcnJbMV0pO1xuICAgICAgICBsZXQgbiA9IGJzdHIubGVuZ3RoO1xuICAgICAgICBjb25zdCB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgICB3aGlsZSAobi0tKSB7XG4gICAgICAgICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW3U4YXJyXSwgeyB0eXBlOiBtaW1lIH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUltYWdlRXJyb3IoZXZlbnQ6IEV2ZW50LCBmYWxsYmFja1BhdGg6IHN0cmluZykge1xuICAgICAgICBIZWxwZXJTZXJ2aWNlLmhhbmRsZUltYWdlRmFsbGJhY2tQYXRoKGV2ZW50LCBmYWxsYmFja1BhdGgpO1xuICAgIH1cblxuICAgIHBhdGNoRm9ybShkYXRhKSB7XG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGRhdGEgfHwge30pO1xuICAgIH1cblxuICAgIG9uU2F2ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmZvcm0uZ2V0KCdpZCcpLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuZm9ybS52YWx1ZSB9O1xuXG4gICAgICAgIGlmICh0aGlzLmZpbGUpIHtcbiAgICAgICAgICAgIGRhdGEuaW1hZ2UgPSB0aGlzLmZpbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5pbWFnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLmlkKSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5pZDtcblxuICAgICAgICAgICAgY29uc3QgZmllbGRzVG9DaGVjayA9IFsnaWNvbl9uYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ3RpdGxlJywgJ3Zpc2libGVfaW5fcmVzb3VyY2VzJ107XG4gICAgICAgICAgICBmaWVsZHNUb0NoZWNrLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2w/LnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhY29udHJvbD8uZGlydHkgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9PT0gJycgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPT09ICdudWxsJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZF07IC8vIHJlbW92ZSBpZiBub3QgZGlydHkgb3IgaGFzIG5vIG1lYW5pbmdmdWwgdmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEuc3Vic2NyaXB0aW9uX2lkID0gdGhpcy5zdWJzY3JpcHRpb25JZDtcblxuICAgICAgICBjb25zdCBzYXZlJCA9IGlkXG4gICAgICAgICAgICA/IHRoaXMudGFnU2VydmljZS51cGRhdGVUYWdCeUlkKGlkLCBkYXRhKVxuICAgICAgICAgICAgOiB0aGlzLnRhZ1NlcnZpY2UuYWRkQWRtaW5UYWcoZGF0YSk7XG5cbiAgICAgICAgc2F2ZSRcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCA/ICdBZG1pbi5UYWdzLlVwZGF0ZWRNZXNzYWdlJyA6ICdBZG1pbi5UYWdzLkFkZGVkTWVzc2FnZSdcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhZ1R5cGVzKCkge1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2UuZ2V0QXZhaWxhYmxlVGFnVHlwZSh0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy50YWdUeXBlcyA9IHJlc3BvbnNlLmF2YWlsYWJsZV90YWdfdHlwZXMubWFwKChlbDogc3RyaW5nKSA9PiAoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBlbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZWxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUYWdDYXRlZ29yaWVzKCkge1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2UuZ2V0VGFnQ2F0ZWdvcmllcyh7fSwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFnQ2F0ZWdvcmllcyA9IFByaW1lTmdIZWxwZXIuZHJvcGRvd25EYXRhU291cmNlKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnRhZ19jYXRlZ29yaWVzLFxuICAgICAgICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAgICAgICAnaWQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHB3LXRhYiBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPGRpdiBjbGFzcz1cImRhc2hib2FyZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtYm9keVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1lLWF1dG8gY29sLXhzLTYgbXQtNFwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdG8gVGFyZ2V0XCJcbiAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGgzIGNsYXNzPVwibS1zdWJoZWFkZXJfX3RpdGxlIG0tc3ViaGVhZGVyX190aXRsZS0tc2VwYXJhdG9yXCI+XG4gICAgICAgICAge3sgY3VycmVudFRhZyA/ICdFZGl0IFRhZycgOiAnQ3JlYXRlIFRhZycgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicC0yIG10LTNcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU2F2ZSgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPCEtLSBUYWcgTmFtZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLlRhZ3MuVGFnTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIGVycm9yTXNnPVwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cIiBuYW1lPVwibmFtZVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiVGFnIE5hbWVcIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRhZyBUeXBlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uVGFncy5UYWdUeXBlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgZXJyb3JNc2c9XCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLlwiIG5hbWU9XCJ0YWdfdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cInRhZ1R5cGVzXCIgZm9ybUNvbnRyb2xOYW1lPVwidGFnX3R5cGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUYWcgVHlwZXNcIiBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cbiAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQ2F0ZWdvcnkgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5UYWdzLkNhdGVnb3J5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgZXJyb3JNc2c9XCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLlwiIG5hbWU9XCJ0YWdfY2F0ZWdvcnlfaWRcIj5cbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJ0YWdDYXRlZ29yaWVzXCIgZm9ybUNvbnRyb2xOYW1lPVwidGFnX2NhdGVnb3J5X2lkXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2F0ZWdvcnlcIiBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cbiAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gSWNvbiBOYW1lIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uVGFncy5JY29uTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlRhZ3MuVG9vbHRpcC5JY29uTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJpY29uX25hbWVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImljb25fbmFtZVwiIHBsYWNlaG9sZGVyPVwiSWNvbiBOYW1lXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBWaXNpYmxlIEluIFJlc291cmNlcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0xhYmVsLlRpdGxlJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgZXJyb3JNc2c9XCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLlwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiBwbGFjZWhvbGRlcj1cIlRpdGxlXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5UYWdzLlRvb2x0aXAuVmlzaWJsZUluUmVzb3VyY2VzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5UYWdzLlZpc2libGVJblJlc291cmNlcycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ2aXNpYmxlX2luX3Jlc291cmNlc1wiPlxuICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCIgZm9ybUNvbnRyb2xOYW1lPVwidmlzaWJsZV9pbl9yZXNvdXJjZXNcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtOFwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uVGFncy5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIiBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIGVycm9yTXNnPVwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgcGxhY2Vob2xkZXI9XCJEZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTQgZGlzcGxheS1ncmlkIG10LTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRhZ0ltYWdlXCI+e3sgJ0FkbWluLlRhZ3MuSW1hZ2UnIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2UgIT09IG51bGwgPyBpbWFnZSA6ICdhc3NldHMvaW1nL3Jlc291cmNlL2Jsb2cucG5nJ1wiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKGltYWdlTW9kYWwpXCJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2UgY3JvcHBlZC1pbWdcIlxuICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndy0xMDAnOiBpbWFnZSA9PT0gbnVsbCB9XCJcbiAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlRhZyBJbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQsICdhc3NldHMvaW1nL3Jlc291cmNlL2Jsb2cucG5nJylcIiAvPlxuXG4gICAgICAgICAgICAgICAgPGEgYXJpYS1sYWJlbD1cIk9wZW4gaW1hZ2UgY3JvcHBlclwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1ibG9jayBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKGltYWdlTW9kYWwpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBjdXJyZW50VGFnID8gJ0VkaXQnIDogJ0FkZCcgfX0gSW1hZ2VcbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gSW1hZ2UgVXBsb2FkIC0tPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWVuZCBtdC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCI+XG4gICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgIFtidXR0b25CdXN5XT1cImJ1dHRvbkJ1c3lcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICB7eyAnQnV0dG9uLlNhdmUnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG5cbjxuZy10ZW1wbGF0ZSAjaW1hZ2VNb2RhbCBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlVwbG9hZCBJbWFnZTwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8c21hbGw+WW91IGNhbiB1cGxvYWQgYSBKUEcsIEdJRiwgb3IgUE5HIGZpbGUuIEF2b2lkIGFydHdvcmssIGNlbGVicml0aWVzLCBvciBjb3B5cmlnaHRlZCBpbWFnZXMuPC9zbWFsbD5cbiAgICA8cHctaW1hZ2UtY3JvcHBlclxuICAgICAgI2Nyb3BwZXJcbiAgICAgIGFzcGVjdFJhdGlvPVwiZHluYW1pY1wiXG4gICAgICAoaW1hZ2VTZWxlY3Rpb25FdmVudCk9XCJvbkltYWdlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAoY2xvc2VFdmVudCk9XCJvbkNsb3NlKClcIj5cbiAgICA8L3B3LWltYWdlLWNyb3BwZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy90YWdzL3RhZ3MtZGV0YWlscy90YWdzLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3RhZ3MvdGFncy1kZXRhaWxzL3RhZ3MtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdsRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7OztBQVF0RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBV3JELFlBQ0ksUUFBa0IsRUFDRCxVQUFzQixFQUN0QixLQUF3QixFQUN4QixZQUFzQjtRQUV2QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBYjNDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixlQUFVLEdB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LFFBQVEsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxLQUFLLEVBQUUsRUFBRTtnQkFDVCxLQUFLLEVBQUUsRUFBRTthQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQ2pELFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLE1BQU0sRUFDTixJQUFJLENBQ1AsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0E5SlEsbUJBQW1CO21HQUFuQixtQkFBbUIsNkVDaEJoQywwaU5Ba0pBOzs0RkRsSWEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNJLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFwcEFkbWluIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSwgUHJpbWVOZ0hlbHBlciwgVGFnU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXRhZy1kZXRhaWxzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFncy1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4uL3RhZ3MtbGlzdC90YWdzLWxpc3QuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVGFnRGV0YWlsc0NvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gICAgdGFnVHlwZXMgPSBbXTtcbiAgICB0YWdDYXRlZ29yaWVzID0gW107XG4gICAgYnV0dG9uQnVzeSA9IGZhbHNlO1xuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgY3VycmVudFRhZztcblxuICAgIGltYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBmaWxlOiBGaWxlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uZ2V0VGFnc0Zvcm0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFnID0gaGlzdG9yeS5zdGF0ZT8uZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRhZykge1xuICAgICAgICAgICAgdGhpcy5pbWFnZSA9IHRoaXMuY3VycmVudFRhZz8uaW1hZ2U/LnVybDtcbiAgICAgICAgICAgIHRoaXMucGF0Y2hGb3JtKHRoaXMuY3VycmVudFRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uPy5pZDtcbiAgICAgICAgdGhpcy5nZXRUYWdUeXBlcygpO1xuICAgICAgICB0aGlzLmdldFRhZ0NhdGVnb3JpZXMoKTtcbiAgICB9XG5cbiAgICBvcGVuTW9kYWwobW9kYWxSZWYpIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbFJlZiwge1xuICAgICAgICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAgICAgICB3aW5kb3dDbGFzczogJ21vZGFsLWhvbGRlcidcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgIH1cblxuICAgIG9uSW1hZ2VTZWxlY3RlZChkYXRhVXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5pbWFnZSA9IGRhdGFVcmw7XG4gICAgICAgIGNvbnN0IGJsb2IgPSB0aGlzLmRhdGFVUkx0b0Jsb2IoZGF0YVVybCk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7RGF0ZS5ub3coKX0ucG5nYDtcbiAgICAgICAgdGhpcy5maWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlbmFtZSk7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2ltYWdlJyk/LnNldFZhbHVlKHRoaXMuZmlsZSk7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZGF0YVVSTHRvQmxvYihkYXRhVXJsOiBzdHJpbmcpOiBCbG9iIHtcbiAgICAgICAgY29uc3QgYXJyID0gZGF0YVVybC5zcGxpdCgnLCcpO1xuICAgICAgICBjb25zdCBtaW1lID0gL15bQS1aXSpbYS16XSo6KC4qPyk7W0EtWl0qLy5leGVjKGFyclswXSk/LlsxXTtcbiAgICAgICAgY29uc3QgYnN0ciA9IGF0b2IoYXJyWzFdKTtcbiAgICAgICAgbGV0IG4gPSBic3RyLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgICAgd2hpbGUgKG4tLSkge1xuICAgICAgICAgICAgdThhcnJbbl0gPSBic3RyLmNoYXJDb2RlQXQobik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFt1OGFycl0sIHsgdHlwZTogbWltZSB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbWFnZUVycm9yKGV2ZW50OiBFdmVudCwgZmFsbGJhY2tQYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgSGVscGVyU2VydmljZS5oYW5kbGVJbWFnZUZhbGxiYWNrUGF0aChldmVudCwgZmFsbGJhY2tQYXRoKTtcbiAgICB9XG5cbiAgICBkZWxldGVUYWdJbWFnZSgpIHtcbiAgICAgICAgdGhpcy5pbWFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSZW1vdmFscyhkYXRhKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlICYmICF0aGlzLmltYWdlKSB7XG4gICAgICAgICAgICBkYXRhLnJlbW92ZV9pbWFnZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXRjaEZvcm0oZGF0YSkge1xuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShkYXRhID8/IHt9KTtcbiAgICB9XG5cbiAgICBvblNhdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5mb3JtLmdldCgnaWQnKS52YWx1ZTtcblxuICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0udmFsdWUgfTtcblxuICAgICAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICAgICAgICBkYXRhLmltYWdlID0gdGhpcy5maWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGEuaW1hZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5pZCkge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGEuaWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc1RvQ2hlY2sgPSBbJ2ljb25fbmFtZScsICdkZXNjcmlwdGlvbicsICd0aXRsZScsICd2aXNpYmxlX2luX3Jlc291cmNlcyddO1xuICAgICAgICAgICAgZmllbGRzVG9DaGVjay5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sPy52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWNvbnRyb2w/LmRpcnR5IHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID09PSAnbnVsbCdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGRdOyAvLyByZW1vdmUgaWYgbm90IGRpcnR5IG9yIGhhcyBubyBtZWFuaW5nZnVsIHZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZVJlbW92YWxzKGRhdGEpO1xuXG4gICAgICAgIGRhdGEuc3Vic2NyaXB0aW9uX2lkID0gdGhpcy5zdWJzY3JpcHRpb25JZDtcblxuICAgICAgICBjb25zdCBzYXZlJCA9IGlkXG4gICAgICAgICAgICA/IHRoaXMudGFnU2VydmljZS51cGRhdGVUYWdCeUlkKGlkLCBkYXRhKVxuICAgICAgICAgICAgOiB0aGlzLnRhZ1NlcnZpY2UuYWRkQWRtaW5UYWcoZGF0YSk7XG5cbiAgICAgICAgc2F2ZSRcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCA/ICdBZG1pbi5UYWdzLlVwZGF0ZWRNZXNzYWdlJyA6ICdBZG1pbi5UYWdzLkFkZGVkTWVzc2FnZSdcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhZ1R5cGVzKCkge1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2UuZ2V0QXZhaWxhYmxlVGFnVHlwZSh0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy50YWdUeXBlcyA9IHJlc3BvbnNlLmF2YWlsYWJsZV90YWdfdHlwZXMubWFwKChlbDogc3RyaW5nKSA9PiAoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBlbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZWxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUYWdDYXRlZ29yaWVzKCkge1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2UuZ2V0VGFnQ2F0ZWdvcmllcyh7fSwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFnQ2F0ZWdvcmllcyA9IFByaW1lTmdIZWxwZXIuZHJvcGRvd25EYXRhU291cmNlKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnRhZ19jYXRlZ29yaWVzLFxuICAgICAgICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAgICAgICAnaWQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHB3LXRhYiBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPGRpdiBjbGFzcz1cImRhc2hib2FyZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtYm9keVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1lLWF1dG8gY29sLXhzLTYgbXQtNFwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdG8gVGFyZ2V0XCJcbiAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGgzIGNsYXNzPVwibS1zdWJoZWFkZXJfX3RpdGxlIG0tc3ViaGVhZGVyX190aXRsZS0tc2VwYXJhdG9yXCI+XG4gICAgICAgICAge3sgY3VycmVudFRhZyA/ICdFZGl0IFRhZycgOiAnQ3JlYXRlIFRhZycgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicC0yIG10LTNcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU2F2ZSgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPCEtLSBUYWcgTmFtZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLlRhZ3MuVGFnTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIGVycm9yTXNnPVwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cIiBuYW1lPVwibmFtZVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiVGFnIE5hbWVcIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRhZyBUeXBlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uVGFncy5UYWdUeXBlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgZXJyb3JNc2c9XCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLlwiIG5hbWU9XCJ0YWdfdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cInRhZ1R5cGVzXCIgZm9ybUNvbnRyb2xOYW1lPVwidGFnX3R5cGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUYWcgVHlwZXNcIiBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cbiAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQ2F0ZWdvcnkgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5UYWdzLkNhdGVnb3J5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgZXJyb3JNc2c9XCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLlwiIG5hbWU9XCJ0YWdfY2F0ZWdvcnlfaWRcIj5cbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJ0YWdDYXRlZ29yaWVzXCIgZm9ybUNvbnRyb2xOYW1lPVwidGFnX2NhdGVnb3J5X2lkXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2F0ZWdvcnlcIiBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cbiAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gSWNvbiBOYW1lIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uVGFncy5JY29uTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlRhZ3MuVG9vbHRpcC5JY29uTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJpY29uX25hbWVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImljb25fbmFtZVwiIHBsYWNlaG9sZGVyPVwiSWNvbiBOYW1lXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBWaXNpYmxlIEluIFJlc291cmNlcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0xhYmVsLlRpdGxlJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgZXJyb3JNc2c9XCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLlwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiBwbGFjZWhvbGRlcj1cIlRpdGxlXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5UYWdzLlRvb2x0aXAuVmlzaWJsZUluUmVzb3VyY2VzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5UYWdzLlZpc2libGVJblJlc291cmNlcycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ2aXNpYmxlX2luX3Jlc291cmNlc1wiPlxuICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCIgZm9ybUNvbnRyb2xOYW1lPVwidmlzaWJsZV9pbl9yZXNvdXJjZXNcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtOFwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uVGFncy5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIiBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIGVycm9yTXNnPVwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgcGxhY2Vob2xkZXI9XCJEZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTQgZGlzcGxheS1ncmlkIG10LTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRhZ0ltYWdlXCI+e3sgJ0FkbWluLlRhZ3MuSW1hZ2UnIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2UgIT09IG51bGwgPyBpbWFnZSA6ICdhc3NldHMvaW1nL3Jlc291cmNlL2Jsb2cucG5nJ1wiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKGltYWdlTW9kYWwpXCJcbiAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5Nb2RhbChpbWFnZU1vZGFsKVwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImltYWdlIGNyb3BwZWQtaW1nXCJcbiAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3ctMTAwJzogaW1hZ2UgPT09IG51bGwgfVwiXG4gICAgICAgICAgICAgICAgICAgICBhbHQ9XCJUYWcgcHJldmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQsICdhc3NldHMvaW1nL3Jlc291cmNlL2Jsb2cucG5nJylcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgYXJpYS1sYWJlbD1cIk9wZW4gaW1hZ2UgY3JvcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2sgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTW9kYWwoaW1hZ2VNb2RhbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudFRhZyA/ICdVcGRhdGUnIDogJ0FkZCcgfX0gSW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uIHRleHQtZGFuZ2VyIG1zLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmUgSW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVRhZ0ltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZGVsZXRlVGFnSW1hZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbWFnZSAmJiAhaW1hZ2UuaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJykgJiYgIWltYWdlLmluY2x1ZGVzKCdub19pbWFnZV91cGxvYWRlZF9zcXVhcmVkLnBuZycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEltYWdlIFVwbG9hZCAtLT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dC1lbmQgbXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5TYXZlJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuXG48bmctdGVtcGxhdGUgI2ltYWdlTW9kYWwgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5VcGxvYWQgSW1hZ2U8L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj48L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPHNtYWxsPllvdSBjYW4gdXBsb2FkIGEgSlBHLCBHSUYsIG9yIFBORyBmaWxlLiBBdm9pZCBhcnR3b3JrLCBjZWxlYnJpdGllcywgb3IgY29weXJpZ2h0ZWQgaW1hZ2VzLjwvc21hbGw+XG4gICAgPHB3LWltYWdlLWNyb3BwZXJcbiAgICAgICNjcm9wcGVyXG4gICAgICBhc3BlY3RSYXRpbz1cImR5bmFtaWNcIlxuICAgICAgKGltYWdlU2VsZWN0aW9uRXZlbnQpPVwib25JbWFnZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgKGNsb3NlRXZlbnQpPVwib25DbG9zZSgpXCI+XG4gICAgPC9wdy1pbWFnZS1jcm9wcGVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -97,7 +97,7 @@ export class TagsListComponent extends AppBaseComponent {
97
97
  this.tagService.getAvailableTagType(this.subscriptionId).subscribe(response => {
98
98
  response.available_tag_types.forEach(element => {
99
99
  this.tagTypes.push({
100
- label: element || '',
100
+ label: element ?? '',
101
101
  value: element
102
102
  });
103
103
  });
@@ -136,10 +136,10 @@ export class TagsListComponent extends AppBaseComponent {
136
136
  super.ngOnDestroy();
137
137
  }
138
138
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TagsListComponent, deps: [{ token: i0.Injector }, { token: i1.NgbModal }, { token: i2.TagService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
139
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TagsListComponent, selector: "pw-admin-tags-list", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Tags</h2>\n <button *rbacAllow=\"'Pages.Admin.Roles.Create'\" data-cy=\"create-tag\" class=\"btn btn-sm btn-outline-primary float-end\"\n [routerLink]=\"['/' + routers.createTag]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create Tag </button>\n </div>\n</div>\n\n<div class=\"p-2\">\n <p>\n Here you can define the tags to be used site-wide.<br /> Tags need to be associated to categories (definable in the\n \"category\" tab).<br /> Tags also need to be associated to a \"tag_type\", which is the entity you want to associate the\n tag to, for example \"user\".\n </p>\n</div>\n\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalTagRecordsUnFilter === 0\">\n <p-table #dt\n [value]=\"tags\"\n [paginator]=\"totalTagRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [lazy]=\"true\"\n [totalRecords]=\"totalTagRecords\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\"\n [loading]=\"loading\">\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 Tag...\"\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\"\n pSortableColumn=\"name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"tag_category_id\">\n {{ 'Admin.Tags.Category' | transloco }}\n <p-sortIcon field=\"tag_category_id\"></p-sortIcon>\n </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=\"Category\">\n <span [appDynamicBadge]=\"{\n itemsArray: tagCategoryNames,\n item: item?.category_name\n }\"\n color=\"cyan\"\n class=\"badge\">{{ item?.category_name }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Roles.Edit'\"\n (click)=\"navigateToEdit(item)\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Roles.Delete'\"\n (keydown.enter)=\"onDelete(item)\"\n (click)=\"onDelete(item)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalTagRecords === 0 && totalTagRecordsUnFilter !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"totalTagRecords !== 0\" >{{ 'Label.Total' | transloco }}: {{ totalTagRecords }}</span>\n</div>\n<pw-no-data [withImage]=\"true\" [message]=\"'Admin.Tags.Category' | transloco\"\n *ngIf=\"totalTagRecordsUnFilter === 0 && !loading\">\n</pw-no-data>\n", styles: ["::ng-deep .icon-name-input .info-circle .tooltiptext:after{left:76px!important}::ng-deep .icon-name-input .info-circle .tooltiptext{left:-81px!important}.cropped-img{max-width:100%!important;max-height:400px!important}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "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", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i3.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i9.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i10.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i11.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i11.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i12.TranslocoPipe, name: "transloco" }] }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TagsListComponent, selector: "pw-admin-tags-list", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Tags</h2>\n <button *rbacAllow=\"'Pages.Admin.Roles.Create'\" data-cy=\"create-tag\" class=\"btn btn-sm btn-outline-primary float-end\"\n [routerLink]=\"['/' + routers.createTag]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create Tag </button>\n </div>\n</div>\n\n<div class=\"p-2\">\n <p>\n Here you can define the tags to be used site-wide.<br /> Tags need to be associated to categories (definable in the\n \"category\" tab).<br /> Tags also need to be associated to a \"tag_type\", which is the entity you want to associate the\n tag to, for example \"user\".\n </p>\n</div>\n\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalTagRecordsUnFilter === 0\">\n <p-table #dt\n [value]=\"tags\"\n [paginator]=\"totalTagRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [lazy]=\"true\"\n [totalRecords]=\"totalTagRecords\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\"\n [loading]=\"loading\">\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 Tag...\"\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\"\n pSortableColumn=\"name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"tag_category_id\">\n {{ 'Admin.Tags.Category' | transloco }}\n <p-sortIcon field=\"tag_category_id\"></p-sortIcon>\n </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=\"Category\">\n <span [appDynamicBadge]=\"{\n itemsArray: tagCategoryNames,\n item: item?.category_name\n }\"\n color=\"cyan\"\n class=\"badge\">{{ item?.category_name }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Roles.Edit'\"\n (keydown.enter)=\"navigateToEdit(item)\"\n (click)=\"navigateToEdit(item)\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Roles.Delete'\"\n (keydown.enter)=\"onDelete(item)\"\n (click)=\"onDelete(item)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalTagRecords === 0 && totalTagRecordsUnFilter !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"totalTagRecords !== 0\" >{{ 'Label.Total' | transloco }}: {{ totalTagRecords }}</span>\n</div>\n<pw-no-data [withImage]=\"true\" [message]=\"'Admin.Tags.Category' | transloco\"\n *ngIf=\"totalTagRecordsUnFilter === 0 && !loading\">\n</pw-no-data>\n", styles: ["::ng-deep .icon-name-input .info-circle .tooltiptext:after{left:76px!important}::ng-deep .icon-name-input .info-circle .tooltiptext{left:-81px!important}.cropped-img{max-width:100%!important;max-height:400px!important}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "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", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i3.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i9.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i10.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i11.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i11.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i12.TranslocoPipe, name: "transloco" }] }); }
140
140
  }
141
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TagsListComponent, decorators: [{
142
142
  type: Component,
143
- args: [{ selector: 'pw-admin-tags-list', template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Tags</h2>\n <button *rbacAllow=\"'Pages.Admin.Roles.Create'\" data-cy=\"create-tag\" class=\"btn btn-sm btn-outline-primary float-end\"\n [routerLink]=\"['/' + routers.createTag]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create Tag </button>\n </div>\n</div>\n\n<div class=\"p-2\">\n <p>\n Here you can define the tags to be used site-wide.<br /> Tags need to be associated to categories (definable in the\n \"category\" tab).<br /> Tags also need to be associated to a \"tag_type\", which is the entity you want to associate the\n tag to, for example \"user\".\n </p>\n</div>\n\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalTagRecordsUnFilter === 0\">\n <p-table #dt\n [value]=\"tags\"\n [paginator]=\"totalTagRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [lazy]=\"true\"\n [totalRecords]=\"totalTagRecords\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\"\n [loading]=\"loading\">\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 Tag...\"\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\"\n pSortableColumn=\"name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"tag_category_id\">\n {{ 'Admin.Tags.Category' | transloco }}\n <p-sortIcon field=\"tag_category_id\"></p-sortIcon>\n </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=\"Category\">\n <span [appDynamicBadge]=\"{\n itemsArray: tagCategoryNames,\n item: item?.category_name\n }\"\n color=\"cyan\"\n class=\"badge\">{{ item?.category_name }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Roles.Edit'\"\n (click)=\"navigateToEdit(item)\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Roles.Delete'\"\n (keydown.enter)=\"onDelete(item)\"\n (click)=\"onDelete(item)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalTagRecords === 0 && totalTagRecordsUnFilter !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"totalTagRecords !== 0\" >{{ 'Label.Total' | transloco }}: {{ totalTagRecords }}</span>\n</div>\n<pw-no-data [withImage]=\"true\" [message]=\"'Admin.Tags.Category' | transloco\"\n *ngIf=\"totalTagRecordsUnFilter === 0 && !loading\">\n</pw-no-data>\n", styles: ["::ng-deep .icon-name-input .info-circle .tooltiptext:after{left:76px!important}::ng-deep .icon-name-input .info-circle .tooltiptext{left:-81px!important}.cropped-img{max-width:100%!important;max-height:400px!important}\n"] }]
143
+ args: [{ selector: 'pw-admin-tags-list', template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Tags</h2>\n <button *rbacAllow=\"'Pages.Admin.Roles.Create'\" data-cy=\"create-tag\" class=\"btn btn-sm btn-outline-primary float-end\"\n [routerLink]=\"['/' + routers.createTag]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create Tag </button>\n </div>\n</div>\n\n<div class=\"p-2\">\n <p>\n Here you can define the tags to be used site-wide.<br /> Tags need to be associated to categories (definable in the\n \"category\" tab).<br /> Tags also need to be associated to a \"tag_type\", which is the entity you want to associate the\n tag to, for example \"user\".\n </p>\n</div>\n\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalTagRecordsUnFilter === 0\">\n <p-table #dt\n [value]=\"tags\"\n [paginator]=\"totalTagRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [lazy]=\"true\"\n [totalRecords]=\"totalTagRecords\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\"\n [loading]=\"loading\">\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 Tag...\"\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\"\n pSortableColumn=\"name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"tag_category_id\">\n {{ 'Admin.Tags.Category' | transloco }}\n <p-sortIcon field=\"tag_category_id\"></p-sortIcon>\n </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=\"Category\">\n <span [appDynamicBadge]=\"{\n itemsArray: tagCategoryNames,\n item: item?.category_name\n }\"\n color=\"cyan\"\n class=\"badge\">{{ item?.category_name }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Roles.Edit'\"\n (keydown.enter)=\"navigateToEdit(item)\"\n (click)=\"navigateToEdit(item)\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Roles.Delete'\"\n (keydown.enter)=\"onDelete(item)\"\n (click)=\"onDelete(item)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalTagRecords === 0 && totalTagRecordsUnFilter !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"totalTagRecords !== 0\" >{{ 'Label.Total' | transloco }}: {{ totalTagRecords }}</span>\n</div>\n<pw-no-data [withImage]=\"true\" [message]=\"'Admin.Tags.Category' | transloco\"\n *ngIf=\"totalTagRecordsUnFilter === 0 && !loading\">\n</pw-no-data>\n", styles: ["::ng-deep .icon-name-input .info-circle .tooltiptext:after{left:76px!important}::ng-deep .icon-name-input .info-circle .tooltiptext{left:-81px!important}.cropped-img{max-width:100%!important;max-height:400px!important}\n"] }]
144
144
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.NgbModal }, { type: i2.TagService }, { type: i0.ChangeDetectorRef }] });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy90YWdzL3RhZ3MtbGlzdC90YWdzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3RhZ3MvdGFncy1saXN0L3RhZ3MtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBR1gsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekYsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8saUJBQ1QsU0FBUSxnQkFBZ0I7SUE2QnhCLFlBQ0ksUUFBa0IsRUFDRCxZQUFzQixFQUN0QixVQUFzQixFQUN0QixHQUFzQjtRQUV2QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKQyxpQkFB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SSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0FuSlEsaUJBQWlCO21HQUFqQixpQkFBaUIsaUZDOUI5QixvL0hBd0dBOzs0RkQxRWEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNJLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFwcEFkbWluIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSwgUHJpbWVOZ0hlbHBlciwgVGFnU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgUEFHRV9TSVpFLCBQYWdpbmcgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL25ld3NsZXR0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1hZG1pbi10YWdzLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWdzLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi90YWdzLWxpc3QuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NMaXN0Q29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQsIE9uSW5pdFxue1xuICAgIHByaXZhdGUgcGFnZSA9IDE7XG5cbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgdG90YWxDYXRlZ29yeVJlY29yZHM6IG51bWJlcjtcblxuICAgIHRhZ0NhdGVnb3JpZXMgPSBbXTtcbiAgICB0YWdzOiBUYWdbXSA9IFtdO1xuXG4gICAgdG90YWxUYWdSZWNvcmRzOiBudW1iZXI7XG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGxvYWRpbmcgPSB0cnVlO1xuICAgIGlzTG9hZGVkID0gdHJ1ZTtcbiAgICBidXR0b25CdXN5ID0gZmFsc2U7XG5cbiAgICBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgICB0YWdUeXBlcyA9IFtdO1xuXG4gICAgdGFnQ2F0ZWdvcnlOYW1lcyA9IFtdO1xuXG4gICAgdG90YWxUYWdSZWNvcmRzVW5GaWx0ZXIgPSAwO1xuXG4gICAgcm91dGVycyA9IFJPVVRFUlM7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGFnU2VydmljZTogVGFnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcblxuICAgICAgICB0aGlzLmZvcm0gPSBBcHBBZG1pbi5nZXRUYWdzRm9ybSgpO1xuICAgICAgICB0aGlzLmdldFRhZ1R5cGVzKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVUb0VkaXQoaXRlbSkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nICsgdGhpcy5yb3V0ZXJzLnRhZ3MgKyBpdGVtPy5pZF0sIHtcbiAgICAgICAgICAgIHN0YXRlOiB7IGRhdGE6IGl0ZW0gfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkxhenlMb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhZ2VEZXRhaWxzID0gSGVscGVyU2VydmljZS5vblRhYmxlTGF6eUxvYWQoZXZlbnQpO1xuICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlRGV0YWlscy5wYWdlO1xuICAgICAgICB0aGlzLmdldFRhZ3Moe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICBvcmRlcl9ieTogcGFnZURldGFpbHMuc29ydEZpZWxkLFxuICAgICAgICAgICAgb3JkZXJfZGlyZWN0aW9uOiBwYWdlRGV0YWlscy5zb3J0T3JkZXIsXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhZ3MocGFyYW1zOiBQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICBjYXRlZ29yaWVzOiB0aGlzLnRhZ1NlcnZpY2UuZ2V0VGFnQ2F0ZWdvcmllcyh7fSwgdGhpcy5zdWJzY3JpcHRpb25JZCksXG4gICAgICAgICAgICB0YWdzOiB0aGlzLnRhZ1NlcnZpY2UuZ2V0VGFnc0J5VHlwZSgnJywgcGFyYW1zLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdDYXRlZ29yaWVzID0gUHJpbWVOZ0hlbHBlci5kcm9wZG93bkRhdGFTb3VyY2UoXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmNhdGVnb3JpZXMudGFnX2NhdGVnb3JpZXMsXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbENhdGVnb3J5UmVjb3JkcyA9IHRoaXMudGFnQ2F0ZWdvcmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFRhZ1JlY29yZHNVbkZpbHRlciA9IHJlc3BvbnNlLnRhZ3M/LnVuZmlsdGVyZWRfY291bnQ7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UudGFncz8udGFncz8uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFRhZyA9IHRoaXMudGFnQ2F0ZWdvcmllcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgPT4gaXRlbS50YWdfY2F0ZWdvcnlfaWQgPT09IHRhZy5pZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZFRhZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ3MucHVzaChPYmplY3QuYXNzaWduKGl0ZW0sIHsgY2F0ZWdvcnlfbmFtZTogbWF0Y2hlZFRhZ1swXS5uYW1lIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFncy5wdXNoKE9iamVjdC5hc3NpZ24oaXRlbSwgeyBjYXRlZ29yeV9uYW1lOiAnJyB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsVGFnUmVjb3JkcyA9IHRoaXMudGFncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdDYXRlZ29yeU5hbWVzID0gdGhpcy50YWdzLm1hcCh0YWcgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnPy5jYXRlZ29yeV9uYW1lO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUYWdUeXBlcygpIHtcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlLmdldEF2YWlsYWJsZVRhZ1R5cGUodGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmF2YWlsYWJsZV90YWdfdHlwZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ1R5cGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWxlbWVudCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRlbGV0ZSh0YWcpIHtcbiAgICAgICAgc3dhbC5maXJlKHtcbiAgICAgICAgICAgIHRpdGxlOiAnRGVsZXRlJyxcbiAgICAgICAgICAgIHRleHQ6IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7dGFnLm5hbWV9P2AsXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICBpY29uOiAnd2FybmluZydcbiAgICAgICAgfSkudGhlbihyZXAgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5kZWxldGVUYWdCeUlkKHRhZy5pZCwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWdzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uVGFncy5EZWxldGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25UYWdFZGl0KGNvbnRlbnQsIGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihjb250ZW50LCB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ21vZGFsLWhvbGRlcicgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvd1wiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8aDIgY2xhc3M9XCJjYXJkLXRpdGxlIHAtMCBmbG9hdC1zdGFydFwiPlRhZ3M8L2gyPlxuICAgIDxidXR0b24gKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5Sb2xlcy5DcmVhdGUnXCIgZGF0YS1jeT1cImNyZWF0ZS10YWdcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBmbG9hdC1lbmRcIlxuICAgIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyByb3V0ZXJzLmNyZWF0ZVRhZ11cIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IENyZWF0ZSBUYWcgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwLTJcIj5cbiAgPHA+XG4gICAgSGVyZSB5b3UgY2FuIGRlZmluZSB0aGUgdGFncyB0byBiZSB1c2VkIHNpdGUtd2lkZS48YnIgLz4gVGFncyBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgdG8gY2F0ZWdvcmllcyAoZGVmaW5hYmxlIGluIHRoZVxuICAgIFwiY2F0ZWdvcnlcIiB0YWIpLjxiciAvPiBUYWdzIGFsc28gbmVlZCB0byBiZSBhc3NvY2lhdGVkIHRvIGEgXCJ0YWdfdHlwZVwiLCB3aGljaCBpcyB0aGUgZW50aXR5IHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0aGVcbiAgICB0YWcgdG8sIGZvciBleGFtcGxlIFwidXNlclwiLlxuICA8L3A+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG48L2Rpdj5cblxuXG48ZGl2IGNsYXNzPVwicHJpbWVuZy1kYXRhdGFibGUtY29udGFpbmVyIHRhYmxlLXJlc3BvbnNpdmUgbXQtMFwiXG4gIFtjbGFzcy5oaWRlVGFibGVdPVwidG90YWxUYWdSZWNvcmRzVW5GaWx0ZXIgPT09IDBcIj5cbiAgPHAtdGFibGUgI2R0XG4gICAgW3ZhbHVlXT1cInRhZ3NcIlxuICAgIFtwYWdpbmF0b3JdPVwidG90YWxUYWdSZWNvcmRzICE9PSAwXCJcbiAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuICAgIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWQoJGV2ZW50KVwiXG4gICAgW2xhenldPVwidHJ1ZVwiXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFRhZ1JlY29yZHNcIlxuICAgIFtmaWx0ZXJEZWxheV09XCIxMDAwXCJcbiAgICBbY3VzdG9tU29ydF09XCJ0cnVlXCJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCI+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgc2l6ZT1cIjUwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBUYWcuLi5cIlxuICAgICAgICAgIChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxuICAgICAgICAgIGNsYXNzPVwibXctOTBcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cIm5hbWVcIj5cbiAgICAgICAgICB7eyAnTGFiZWwuTmFtZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cIm5hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInRhZ19jYXRlZ29yeV9pZFwiPlxuICAgICAgICAgIHt7ICdBZG1pbi5UYWdzLkNhdGVnb3J5JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwidGFnX2NhdGVnb3J5X2lkXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJhY3Rpb25zLWxpc3QtdHdvXCJcbiAgICAgICAgICBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuQWN0aW9ucycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgIGxldC1pdGVtPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTmFtZVwiPnt7IGl0ZW0/Lm5hbWUgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQ2F0ZWdvcnlcIj5cbiAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0FycmF5OiB0YWdDYXRlZ29yeU5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0/LmNhdGVnb3J5X25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgY29sb3I9XCJjeWFuXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBpdGVtPy5jYXRlZ29yeV9uYW1lIH19PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZSBsaXN0LWFjdGlvblwiPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJFZGl0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIlxuICAgICAgICAgICAgICAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLlJvbGVzLkVkaXQnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlVG9FZGl0KGl0ZW0pXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJEZWxldGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiXG4gICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInUGFnZXMuQWRtaW4uUm9sZXMuRGVsZXRlJ1wiXG4gICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRGVsZXRlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKGl0ZW0pXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbiAgPGRpdiAqbmdJZj1cInRvdGFsVGFnUmVjb3JkcyA9PT0gMCAmJiB0b3RhbFRhZ1JlY29yZHNVbkZpbHRlciAhPT0gMFwiPlxuICAgIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidTZWFyY2guTm9EYXRhTWVzc2FnZScgfCB0cmFuc2xvY29cIiBbZGVzY3JpcHRpb25dPVwiJ1NlYXJjaC5Ob0RhdGFEZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIiA+XG4gICAgPC9wdy1uby1kYXRhPlxuICA8L2Rpdj5cbiAgPHNwYW4gY2xhc3M9XCJ0b3RhbC1yZWNvcmRzLWNvdW50XCIgKm5nSWY9XCJ0b3RhbFRhZ1JlY29yZHMgIT09IDBcIiA+e3sgJ0xhYmVsLlRvdGFsJyB8IHRyYW5zbG9jbyB9fToge3sgdG90YWxUYWdSZWNvcmRzIH19PC9zcGFuPlxuPC9kaXY+XG48cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQWRtaW4uVGFncy5DYXRlZ29yeScgfCB0cmFuc2xvY29cIlxuICAqbmdJZj1cInRvdGFsVGFnUmVjb3Jkc1VuRmlsdGVyID09PSAwICYmICFsb2FkaW5nXCI+XG48L3B3LW5vLWRhdGE+XG4iXX0=
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy90YWdzL3RhZ3MtbGlzdC90YWdzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3RhZ3MvdGFncy1saXN0L3RhZ3MtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBR1gsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekYsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8saUJBQ1QsU0FBUSxnQkFBZ0I7SUE2QnhCLFlBQ0ksUUFBa0IsRUFDRCxZQUFzQixFQUN0QixVQUFzQixFQUN0QixHQUFzQjtRQUV2QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKQyxpQkFB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SSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0FuSlEsaUJBQWlCO21HQUFqQixpQkFBaUIsaUZDOUI5Qiw0aUlBeUdBOzs0RkQzRWEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNJLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFwcEFkbWluIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSwgUHJpbWVOZ0hlbHBlciwgVGFnU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgUEFHRV9TSVpFLCBQYWdpbmcgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL25ld3NsZXR0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1hZG1pbi10YWdzLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWdzLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi90YWdzLWxpc3QuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NMaXN0Q29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQsIE9uSW5pdFxue1xuICAgIHByaXZhdGUgcGFnZSA9IDE7XG5cbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgdG90YWxDYXRlZ29yeVJlY29yZHM6IG51bWJlcjtcblxuICAgIHRhZ0NhdGVnb3JpZXMgPSBbXTtcbiAgICB0YWdzOiBUYWdbXSA9IFtdO1xuXG4gICAgdG90YWxUYWdSZWNvcmRzOiBudW1iZXI7XG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGxvYWRpbmcgPSB0cnVlO1xuICAgIGlzTG9hZGVkID0gdHJ1ZTtcbiAgICBidXR0b25CdXN5ID0gZmFsc2U7XG5cbiAgICBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgICB0YWdUeXBlcyA9IFtdO1xuXG4gICAgdGFnQ2F0ZWdvcnlOYW1lcyA9IFtdO1xuXG4gICAgdG90YWxUYWdSZWNvcmRzVW5GaWx0ZXIgPSAwO1xuXG4gICAgcm91dGVycyA9IFJPVVRFUlM7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGFnU2VydmljZTogVGFnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcblxuICAgICAgICB0aGlzLmZvcm0gPSBBcHBBZG1pbi5nZXRUYWdzRm9ybSgpO1xuICAgICAgICB0aGlzLmdldFRhZ1R5cGVzKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVUb0VkaXQoaXRlbSkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nICsgdGhpcy5yb3V0ZXJzLnRhZ3MgKyBpdGVtPy5pZF0sIHtcbiAgICAgICAgICAgIHN0YXRlOiB7IGRhdGE6IGl0ZW0gfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkxhenlMb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhZ2VEZXRhaWxzID0gSGVscGVyU2VydmljZS5vblRhYmxlTGF6eUxvYWQoZXZlbnQpO1xuICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlRGV0YWlscy5wYWdlO1xuICAgICAgICB0aGlzLmdldFRhZ3Moe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICBvcmRlcl9ieTogcGFnZURldGFpbHMuc29ydEZpZWxkLFxuICAgICAgICAgICAgb3JkZXJfZGlyZWN0aW9uOiBwYWdlRGV0YWlscy5zb3J0T3JkZXIsXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhZ3MocGFyYW1zOiBQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICBjYXRlZ29yaWVzOiB0aGlzLnRhZ1NlcnZpY2UuZ2V0VGFnQ2F0ZWdvcmllcyh7fSwgdGhpcy5zdWJzY3JpcHRpb25JZCksXG4gICAgICAgICAgICB0YWdzOiB0aGlzLnRhZ1NlcnZpY2UuZ2V0VGFnc0J5VHlwZSgnJywgcGFyYW1zLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdDYXRlZ29yaWVzID0gUHJpbWVOZ0hlbHBlci5kcm9wZG93bkRhdGFTb3VyY2UoXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmNhdGVnb3JpZXMudGFnX2NhdGVnb3JpZXMsXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbENhdGVnb3J5UmVjb3JkcyA9IHRoaXMudGFnQ2F0ZWdvcmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFRhZ1JlY29yZHNVbkZpbHRlciA9IHJlc3BvbnNlLnRhZ3M/LnVuZmlsdGVyZWRfY291bnQ7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UudGFncz8udGFncz8uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFRhZyA9IHRoaXMudGFnQ2F0ZWdvcmllcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgPT4gaXRlbS50YWdfY2F0ZWdvcnlfaWQgPT09IHRhZy5pZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZFRhZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ3MucHVzaChPYmplY3QuYXNzaWduKGl0ZW0sIHsgY2F0ZWdvcnlfbmFtZTogbWF0Y2hlZFRhZ1swXS5uYW1lIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFncy5wdXNoKE9iamVjdC5hc3NpZ24oaXRlbSwgeyBjYXRlZ29yeV9uYW1lOiAnJyB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsVGFnUmVjb3JkcyA9IHRoaXMudGFncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdDYXRlZ29yeU5hbWVzID0gdGhpcy50YWdzLm1hcCh0YWcgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnPy5jYXRlZ29yeV9uYW1lO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUYWdUeXBlcygpIHtcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlLmdldEF2YWlsYWJsZVRhZ1R5cGUodGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmF2YWlsYWJsZV90YWdfdHlwZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ1R5cGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWxlbWVudCA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRlbGV0ZSh0YWcpIHtcbiAgICAgICAgc3dhbC5maXJlKHtcbiAgICAgICAgICAgIHRpdGxlOiAnRGVsZXRlJyxcbiAgICAgICAgICAgIHRleHQ6IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7dGFnLm5hbWV9P2AsXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICBpY29uOiAnd2FybmluZydcbiAgICAgICAgfSkudGhlbihyZXAgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5kZWxldGVUYWdCeUlkKHRhZy5pZCwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWdzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uVGFncy5EZWxldGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25UYWdFZGl0KGNvbnRlbnQsIGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihjb250ZW50LCB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ21vZGFsLWhvbGRlcicgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvd1wiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8aDIgY2xhc3M9XCJjYXJkLXRpdGxlIHAtMCBmbG9hdC1zdGFydFwiPlRhZ3M8L2gyPlxuICAgIDxidXR0b24gKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5Sb2xlcy5DcmVhdGUnXCIgZGF0YS1jeT1cImNyZWF0ZS10YWdcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBmbG9hdC1lbmRcIlxuICAgIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyByb3V0ZXJzLmNyZWF0ZVRhZ11cIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IENyZWF0ZSBUYWcgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwLTJcIj5cbiAgPHA+XG4gICAgSGVyZSB5b3UgY2FuIGRlZmluZSB0aGUgdGFncyB0byBiZSB1c2VkIHNpdGUtd2lkZS48YnIgLz4gVGFncyBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgdG8gY2F0ZWdvcmllcyAoZGVmaW5hYmxlIGluIHRoZVxuICAgIFwiY2F0ZWdvcnlcIiB0YWIpLjxiciAvPiBUYWdzIGFsc28gbmVlZCB0byBiZSBhc3NvY2lhdGVkIHRvIGEgXCJ0YWdfdHlwZVwiLCB3aGljaCBpcyB0aGUgZW50aXR5IHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0aGVcbiAgICB0YWcgdG8sIGZvciBleGFtcGxlIFwidXNlclwiLlxuICA8L3A+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG48L2Rpdj5cblxuXG48ZGl2IGNsYXNzPVwicHJpbWVuZy1kYXRhdGFibGUtY29udGFpbmVyIHRhYmxlLXJlc3BvbnNpdmUgbXQtMFwiXG4gIFtjbGFzcy5oaWRlVGFibGVdPVwidG90YWxUYWdSZWNvcmRzVW5GaWx0ZXIgPT09IDBcIj5cbiAgPHAtdGFibGUgI2R0XG4gICAgW3ZhbHVlXT1cInRhZ3NcIlxuICAgIFtwYWdpbmF0b3JdPVwidG90YWxUYWdSZWNvcmRzICE9PSAwXCJcbiAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuICAgIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWQoJGV2ZW50KVwiXG4gICAgW2xhenldPVwidHJ1ZVwiXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFRhZ1JlY29yZHNcIlxuICAgIFtmaWx0ZXJEZWxheV09XCIxMDAwXCJcbiAgICBbY3VzdG9tU29ydF09XCJ0cnVlXCJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCI+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgc2l6ZT1cIjUwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBUYWcuLi5cIlxuICAgICAgICAgIChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxuICAgICAgICAgIGNsYXNzPVwibXctOTBcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cIm5hbWVcIj5cbiAgICAgICAgICB7eyAnTGFiZWwuTmFtZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cIm5hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInRhZ19jYXRlZ29yeV9pZFwiPlxuICAgICAgICAgIHt7ICdBZG1pbi5UYWdzLkNhdGVnb3J5JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwidGFnX2NhdGVnb3J5X2lkXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJhY3Rpb25zLWxpc3QtdHdvXCJcbiAgICAgICAgICBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuQWN0aW9ucycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgIGxldC1pdGVtPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTmFtZVwiPnt7IGl0ZW0/Lm5hbWUgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQ2F0ZWdvcnlcIj5cbiAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0FycmF5OiB0YWdDYXRlZ29yeU5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0/LmNhdGVnb3J5X25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgY29sb3I9XCJjeWFuXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBpdGVtPy5jYXRlZ29yeV9uYW1lIH19PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZSBsaXN0LWFjdGlvblwiPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJFZGl0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIlxuICAgICAgICAgICAgICAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLlJvbGVzLkVkaXQnXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibmF2aWdhdGVUb0VkaXQoaXRlbSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVUb0VkaXQoaXRlbSlcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0IGVkaXQtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkRlbGV0ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCJcbiAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5Sb2xlcy5EZWxldGUnXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25EZWxldGUoaXRlbSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUoaXRlbSlcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuICA8ZGl2ICpuZ0lmPVwidG90YWxUYWdSZWNvcmRzID09PSAwICYmIHRvdGFsVGFnUmVjb3Jkc1VuRmlsdGVyICE9PSAwXCI+XG4gICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ1NlYXJjaC5Ob0RhdGFNZXNzYWdlJyB8IHRyYW5zbG9jb1wiIFtkZXNjcmlwdGlvbl09XCInU2VhcmNoLk5vRGF0YURlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiID5cbiAgICA8L3B3LW5vLWRhdGE+XG4gIDwvZGl2PlxuICA8c3BhbiBjbGFzcz1cInRvdGFsLXJlY29yZHMtY291bnRcIiAqbmdJZj1cInRvdGFsVGFnUmVjb3JkcyAhPT0gMFwiID57eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyB0b3RhbFRhZ1JlY29yZHMgfX08L3NwYW4+XG48L2Rpdj5cbjxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidBZG1pbi5UYWdzLkNhdGVnb3J5JyB8IHRyYW5zbG9jb1wiXG4gICpuZ0lmPVwidG90YWxUYWdSZWNvcmRzVW5GaWx0ZXIgPT09IDAgJiYgIWxvYWRpbmdcIj5cbjwvcHctbm8tZGF0YT5cbiJdfQ==