@acorex/modules 18.1.3 → 18.1.5

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 (111) hide show
  1. package/backend/lib/data/api/comment.mock.service.d.ts +62 -0
  2. package/backend/lib/data/api/notification.mock.service.d.ts +34 -0
  3. package/backend/lib/data/index.d.ts +1 -0
  4. package/esm2022/application-management/lib/application-management.service.mjs +3 -3
  5. package/esm2022/application-management/lib/module-designer/module-designer.component.mjs +1 -1
  6. package/esm2022/auth/lib/account/profile/profile-slot.component.mjs +3 -3
  7. package/esm2022/backend/lib/backend.module.mjs +11 -1
  8. package/esm2022/backend/lib/data/api/comment.mock.service.mjs +142 -0
  9. package/esm2022/backend/lib/data/api/notification.mock.service.mjs +71 -0
  10. package/esm2022/backend/lib/data/index.mjs +2 -1
  11. package/esm2022/form-management/lib/form-management.module.mjs +5 -4
  12. package/esm2022/language-management/acorex-modules-language-management.mjs +5 -0
  13. package/esm2022/language-management/index.mjs +2 -0
  14. package/esm2022/language-management/lib/entities/language.entity.mjs +242 -0
  15. package/esm2022/language-management/lib/language-management.module.mjs +39 -0
  16. package/esm2022/language-management/lib/notification-management.service.mjs +23 -0
  17. package/esm2022/notification-management/acorex-modules-notification-management.mjs +5 -0
  18. package/esm2022/notification-management/index.mjs +7 -0
  19. package/esm2022/notification-management/lib/admin-notification-slot/admin-notification-item/admin-notification-item.component.mjs +47 -0
  20. package/esm2022/notification-management/lib/admin-notification-slot/admin-notification-panel/admin-notification-panel.component.mjs +131 -0
  21. package/esm2022/notification-management/lib/admin-notification-slot/admin-notification-slot/admin-notification-slot.component.mjs +36 -0
  22. package/esm2022/notification-management/lib/entities/notification-channel.entity.mjs +345 -0
  23. package/esm2022/notification-management/lib/entities/notification-template.entity.mjs +298 -0
  24. package/esm2022/notification-management/lib/entities/notification.entity.mjs +207 -0
  25. package/esm2022/notification-management/lib/notification-management-mock-data.mjs +55 -0
  26. package/esm2022/notification-management/lib/notification-management.module.mjs +66 -0
  27. package/esm2022/notification-management/lib/notification-management.service.mjs +39 -0
  28. package/esm2022/notification-management/lib/notification-management.type.mjs +2 -0
  29. package/esm2022/notification-management/lib/notification.service.mjs +3 -0
  30. package/esm2022/template-management/acorex-modules-template-management.mjs +5 -0
  31. package/esm2022/template-management/index.mjs +4 -0
  32. package/esm2022/template-management/lib/entities/global-template.entity.mjs +298 -0
  33. package/esm2022/template-management/lib/entities/template-variable.entity.mjs +304 -0
  34. package/esm2022/template-management/lib/template-management-mock-data.mjs +11 -0
  35. package/esm2022/template-management/lib/template-management.module.mjs +45 -0
  36. package/esm2022/template-management/lib/template-management.service.mjs +24 -0
  37. package/fesm2022/{acorex-modules-application-management-module-designer.component-C-lY0Apl.mjs → acorex-modules-application-management-module-designer.component-CFLXuP2G.mjs} +2 -2
  38. package/fesm2022/{acorex-modules-application-management-module-designer.component-C-lY0Apl.mjs.map → acorex-modules-application-management-module-designer.component-CFLXuP2G.mjs.map} +1 -1
  39. package/fesm2022/acorex-modules-application-management.mjs +3 -3
  40. package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
  41. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-4OzzidjS.mjs → acorex-modules-auth-acorex-modules-auth-iGiPFEeb.mjs} +10 -10
  42. package/fesm2022/acorex-modules-auth-acorex-modules-auth-iGiPFEeb.mjs.map +1 -0
  43. package/fesm2022/{acorex-modules-auth-app-chooser.component-CHTEeWgx.mjs → acorex-modules-auth-app-chooser.component-BB3SIzCP.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-auth-app-chooser.component-CHTEeWgx.mjs.map → acorex-modules-auth-app-chooser.component-BB3SIzCP.mjs.map} +1 -1
  45. package/fesm2022/acorex-modules-auth-blank.layout-Bq822Iz4.mjs.map +1 -1
  46. package/fesm2022/{acorex-modules-auth-login.module-DMit4yw0.mjs → acorex-modules-auth-login.module-ChEv9c5I.mjs} +4 -4
  47. package/fesm2022/acorex-modules-auth-login.module-ChEv9c5I.mjs.map +1 -0
  48. package/fesm2022/{acorex-modules-auth-master.layout-BCYIjTB0.mjs → acorex-modules-auth-master.layout-CZv3BD5c.mjs} +2 -2
  49. package/fesm2022/{acorex-modules-auth-master.layout-BCYIjTB0.mjs.map → acorex-modules-auth-master.layout-CZv3BD5c.mjs.map} +1 -1
  50. package/fesm2022/{acorex-modules-auth-password.component-WA-CA0Ln.mjs → acorex-modules-auth-password.component-CPWiBXdG.mjs} +2 -2
  51. package/fesm2022/{acorex-modules-auth-password.component-WA-CA0Ln.mjs.map → acorex-modules-auth-password.component-CPWiBXdG.mjs.map} +1 -1
  52. package/fesm2022/{acorex-modules-auth-password.component-D16ms36y.mjs → acorex-modules-auth-password.component-CxZ1weks.mjs} +2 -2
  53. package/fesm2022/{acorex-modules-auth-password.component-D16ms36y.mjs.map → acorex-modules-auth-password.component-CxZ1weks.mjs.map} +1 -1
  54. package/fesm2022/{acorex-modules-auth-routes-C3ye31RS.mjs → acorex-modules-auth-routes-C7r2Jm6s.mjs} +2 -2
  55. package/fesm2022/{acorex-modules-auth-routes-C3ye31RS.mjs.map → acorex-modules-auth-routes-C7r2Jm6s.mjs.map} +1 -1
  56. package/fesm2022/acorex-modules-auth-tenant-chooser.component-CHr5_kh7.mjs.map +1 -1
  57. package/fesm2022/acorex-modules-auth-two-factor-code.component-B_7l39pX.mjs.map +1 -1
  58. package/fesm2022/{acorex-modules-auth-two-factor.module-CkZCBo0B.mjs → acorex-modules-auth-two-factor.module-BgkJYe7T.mjs} +2 -2
  59. package/fesm2022/acorex-modules-auth-two-factor.module-BgkJYe7T.mjs.map +1 -0
  60. package/fesm2022/acorex-modules-auth.mjs +1 -1
  61. package/fesm2022/acorex-modules-backend.mjs +218 -2
  62. package/fesm2022/acorex-modules-backend.mjs.map +1 -1
  63. package/fesm2022/acorex-modules-form-management-designer.page-SoPH2V7i.mjs.map +1 -1
  64. package/fesm2022/acorex-modules-form-management.mjs +4 -3
  65. package/fesm2022/acorex-modules-form-management.mjs.map +1 -1
  66. package/fesm2022/acorex-modules-language-management-language.entity-CwD5FHGc.mjs +266 -0
  67. package/fesm2022/acorex-modules-language-management-language.entity-CwD5FHGc.mjs.map +1 -0
  68. package/fesm2022/acorex-modules-language-management.mjs +46 -0
  69. package/fesm2022/acorex-modules-language-management.mjs.map +1 -0
  70. package/fesm2022/acorex-modules-notification-management.mjs +1203 -0
  71. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -0
  72. package/fesm2022/acorex-modules-template-management.mjs +690 -0
  73. package/fesm2022/acorex-modules-template-management.mjs.map +1 -0
  74. package/form-management/lib/form-management.module.d.ts +2 -1
  75. package/language-management/README.md +3 -0
  76. package/language-management/index.d.ts +1 -0
  77. package/language-management/lib/entities/language.entity.d.ts +3 -0
  78. package/language-management/lib/language-management.module.d.ts +12 -0
  79. package/language-management/lib/notification-management.service.d.ts +9 -0
  80. package/notification-management/README.md +3 -0
  81. package/notification-management/index.d.ts +6 -0
  82. package/notification-management/lib/admin-notification-slot/admin-notification-item/admin-notification-item.component.d.ts +14 -0
  83. package/notification-management/lib/admin-notification-slot/admin-notification-panel/admin-notification-panel.component.d.ts +30 -0
  84. package/notification-management/lib/admin-notification-slot/admin-notification-slot/admin-notification-slot.component.d.ts +7 -0
  85. package/notification-management/lib/entities/notification-channel.entity.d.ts +3 -0
  86. package/notification-management/lib/entities/notification-template.entity.d.ts +3 -0
  87. package/notification-management/lib/entities/notification.entity.d.ts +3 -0
  88. package/notification-management/lib/notification-management-mock-data.d.ts +41 -0
  89. package/notification-management/lib/notification-management.module.d.ts +13 -0
  90. package/notification-management/lib/notification-management.service.d.ts +15 -0
  91. package/notification-management/lib/notification-management.type.d.ts +42 -0
  92. package/notification-management/lib/notification.service.d.ts +7 -0
  93. package/package.json +23 -11
  94. package/template-management/README.md +3 -0
  95. package/template-management/index.d.ts +3 -0
  96. package/template-management/lib/entities/global-template.entity.d.ts +3 -0
  97. package/template-management/lib/entities/template-variable.entity.d.ts +3 -0
  98. package/template-management/lib/template-management-mock-data.d.ts +7 -0
  99. package/template-management/lib/template-management.module.d.ts +12 -0
  100. package/template-management/lib/template-management.service.d.ts +9 -0
  101. package/esm2022/notification/acorex-modules-notification.mjs +0 -5
  102. package/esm2022/notification/index.mjs +0 -4
  103. package/esm2022/notification/lib/notification.module.mjs +0 -16
  104. package/fesm2022/acorex-modules-auth-acorex-modules-auth-4OzzidjS.mjs.map +0 -1
  105. package/fesm2022/acorex-modules-auth-login.module-DMit4yw0.mjs.map +0 -1
  106. package/fesm2022/acorex-modules-auth-two-factor.module-CkZCBo0B.mjs.map +0 -1
  107. package/fesm2022/acorex-modules-notification.mjs +0 -26
  108. package/fesm2022/acorex-modules-notification.mjs.map +0 -1
  109. package/notification/README.md +0 -4
  110. package/notification/index.d.ts +0 -1
  111. package/notification/lib/notification.module.d.ts +0 -6
@@ -0,0 +1,131 @@
1
+ import { AXBadgeModule } from '@acorex/components/badge';
2
+ import { AXButtonModule } from '@acorex/components/button';
3
+ import { AXDecoratorModule } from '@acorex/components/decorators';
4
+ import { AXPopoverModule } from '@acorex/components/popover';
5
+ import { AXTabsModule } from '@acorex/components/tabs';
6
+ import { AXToastService } from '@acorex/components/toast';
7
+ import { AXFormatModule } from '@acorex/core/format';
8
+ import { CommonModule } from '@angular/common';
9
+ import { ChangeDetectionStrategy, Component, computed, effect, inject, output, signal } from '@angular/core';
10
+ import { AXMNotificationService } from '../../notification.service';
11
+ import { AXMAdminNotificationItemComponent } from '../admin-notification-item/admin-notification-item.component';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@acorex/components/button";
14
+ import * as i2 from "@acorex/components/tabs";
15
+ import * as i3 from "@acorex/components/decorators";
16
+ import * as i4 from "@acorex/components/badge";
17
+ export class AXMAdminNotificationPanelComponent {
18
+ constructor() {
19
+ this.onNewNotfication = output();
20
+ this.notificationService = inject(AXMNotificationService);
21
+ this.toastService = inject(AXToastService);
22
+ this.notifications = signal(undefined);
23
+ this.totalNotifications = signal(undefined);
24
+ this.tabItems = computed(() => this.getTabItems(this.notifications()), {
25
+ equal: (a, b) => JSON.stringify(a) === JSON.stringify(b),
26
+ });
27
+ this.activeTab = signal('All');
28
+ this.NewNotification = computed(() => this.getNewNotification(this.tabItems()));
29
+ this.NewNotificationEffect = effect(() => this.onNewNotfication.emit(this.NewNotification()));
30
+ this.onPressNotificationItem = (id) => {
31
+ this.notifications.update((old) => old?.map((item) => (item.id === id && !item.readAt ? { ...item, readAt: new Date() } : item)));
32
+ };
33
+ }
34
+ changeActiveTab(tab) {
35
+ this.activeTab.set(tab);
36
+ }
37
+ ngOnInit() {
38
+ this.loadNotification();
39
+ }
40
+ async loadNotification() {
41
+ try {
42
+ const response = await this.notificationService.getList();
43
+ this.totalNotifications.set(response.total);
44
+ const orderedResponse = response.items.sort((a, b) => {
45
+ if (a.template.isPinned === b.template.isPinned) {
46
+ return new Date(a.createAt).getTime() - new Date(b.createAt).getTime();
47
+ }
48
+ return a.template.isPinned ? 1 : -1;
49
+ });
50
+ this.notifications.set(orderedResponse);
51
+ }
52
+ catch (error) {
53
+ this.toastService.show({
54
+ content: typeof error === 'string' ? error : 'Failed to load notifications!',
55
+ color: 'danger',
56
+ location: 'bottom-center',
57
+ closeButton: true,
58
+ timeOut: 3000,
59
+ timeOutProgress: true,
60
+ });
61
+ }
62
+ }
63
+ getTabItems(notifications) {
64
+ if (!notifications) {
65
+ return [
66
+ {
67
+ text: 'All',
68
+ //active: true,
69
+ count: 0,
70
+ },
71
+ ];
72
+ }
73
+ const categoryCountMap = new Map();
74
+ notifications.forEach((notification) => {
75
+ const category = notification.template.category;
76
+ if (!categoryCountMap.has(category)) {
77
+ categoryCountMap.set(category, 0);
78
+ }
79
+ if (!notification.readAt) {
80
+ categoryCountMap.set(category, categoryCountMap.get(category) + 1);
81
+ }
82
+ });
83
+ const tabItems = Array.from(categoryCountMap.entries()).map(([category, count]) => ({
84
+ text: category,
85
+ count: count,
86
+ }));
87
+ const totalCount = Array.from(categoryCountMap.values()).reduce((a, b) => a + b, 0);
88
+ tabItems.unshift({
89
+ text: 'All',
90
+ count: totalCount,
91
+ });
92
+ return tabItems;
93
+ }
94
+ getNewNotification(data) {
95
+ const total = data.filter((tab) => tab.text !== 'All').reduce((sum, tab) => sum + tab.count, 0);
96
+ return total;
97
+ }
98
+ getNotificationItems(category) {
99
+ if (category === 'All') {
100
+ return this.notifications();
101
+ }
102
+ else {
103
+ return this.notifications()?.filter((item) => item.template.category === category);
104
+ }
105
+ }
106
+ //
107
+ markAllAsRead() {
108
+ this.notifications.update((notification) => notification?.map((item) => {
109
+ if (!item.readAt) {
110
+ return { ...item, readAt: new Date() };
111
+ }
112
+ return item;
113
+ }));
114
+ }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMAdminNotificationPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
116
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMAdminNotificationPanelComponent, isStandalone: true, selector: "axm-admin-notification-panel", outputs: { onNewNotfication: "onNewNotfication" }, ngImport: i0, template: "<div class=\"ax-p-4 ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-xl\">Notifications</span>\n <ax-button color=\"default\" look=\"blank\">\n <ax-icon>\n <i class=\"fa-regular fa-gear fa-lg\"></i>\n </ax-icon>\n </ax-button>\n</div>\n<ax-tabs [content]=\"cons\" look=\"with-line\" location=\"bottom\">\n @for(tab of tabItems(); track tab.text){\n <ax-tab-item [text]=\"tab.text\" [active]=\"activeTab() === tab.text\" (activeChange)=\"changeActiveTab(tab.text)\">\n <ax-suffix>\n @if(tab.count){\n <ax-badge [color]=\"activeTab() === tab.text ? 'primary' : 'ghost'\" [text]=\"tab.count.toString()\"></ax-badge>\n }\n </ax-suffix>\n <ax-content>\n <div class=\"ax-max-h-[50vh] ax-overflow-y-auto\">\n @for(notif of getNotificationItems(tab.text); track notif.id){\n <axp-master-notification-item\n [data]=\"notif\"\n (onPressNotificationItem)=\"onPressNotificationItem($event)\"\n ></axp-master-notification-item>\n }\n </div>\n <div class=\"ax-flex ax-gap-4 ax-justify-between ax-p-4 ax-border-t ax-border-default\">\n <ax-button\n [disabled]=\"NewNotification() === 0\"\n color=\"ghost\"\n text=\"Mark all as read\"\n (onClick)=\"markAllAsRead()\"\n ></ax-button>\n <ax-button color=\"primary\" text=\"View all notifications\"></ax-button>\n </div>\n </ax-content>\n </ax-tab-item>\n }\n</ax-tabs>\n\n<ng-template [axTabContent] #cons=\"axTabContent\"></ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "directive", type: i2.AXTabContentDirective, selector: "[axTabContent]", inputs: ["axTabContent"], exportAs: ["axTabContent"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i4.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: AXMAdminNotificationItemComponent, selector: "axp-master-notification-item", inputs: ["data"], outputs: ["onPressNotificationItem"] }, { kind: "ngmodule", type: AXFormatModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
117
+ }
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMAdminNotificationPanelComponent, decorators: [{
119
+ type: Component,
120
+ args: [{ selector: 'axm-admin-notification-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
121
+ CommonModule,
122
+ AXButtonModule,
123
+ AXTabsModule,
124
+ AXDecoratorModule,
125
+ AXBadgeModule,
126
+ AXPopoverModule,
127
+ AXMAdminNotificationItemComponent,
128
+ AXFormatModule,
129
+ ], template: "<div class=\"ax-p-4 ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-xl\">Notifications</span>\n <ax-button color=\"default\" look=\"blank\">\n <ax-icon>\n <i class=\"fa-regular fa-gear fa-lg\"></i>\n </ax-icon>\n </ax-button>\n</div>\n<ax-tabs [content]=\"cons\" look=\"with-line\" location=\"bottom\">\n @for(tab of tabItems(); track tab.text){\n <ax-tab-item [text]=\"tab.text\" [active]=\"activeTab() === tab.text\" (activeChange)=\"changeActiveTab(tab.text)\">\n <ax-suffix>\n @if(tab.count){\n <ax-badge [color]=\"activeTab() === tab.text ? 'primary' : 'ghost'\" [text]=\"tab.count.toString()\"></ax-badge>\n }\n </ax-suffix>\n <ax-content>\n <div class=\"ax-max-h-[50vh] ax-overflow-y-auto\">\n @for(notif of getNotificationItems(tab.text); track notif.id){\n <axp-master-notification-item\n [data]=\"notif\"\n (onPressNotificationItem)=\"onPressNotificationItem($event)\"\n ></axp-master-notification-item>\n }\n </div>\n <div class=\"ax-flex ax-gap-4 ax-justify-between ax-p-4 ax-border-t ax-border-default\">\n <ax-button\n [disabled]=\"NewNotification() === 0\"\n color=\"ghost\"\n text=\"Mark all as read\"\n (onClick)=\"markAllAsRead()\"\n ></ax-button>\n <ax-button color=\"primary\" text=\"View all notifications\"></ax-button>\n </div>\n </ax-content>\n </ax-tab-item>\n }\n</ax-tabs>\n\n<ng-template [axTabContent] #cons=\"axTabContent\"></ng-template>\n" }]
130
+ }] });
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbm90aWZpY2F0aW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9ub3RpZmljYXRpb24tbWFuYWdlbWVudC9zcmMvbGliL2FkbWluLW5vdGlmaWNhdGlvbi1zbG90L2FkbWluLW5vdGlmaWNhdGlvbi1wYW5lbC9hZG1pbi1ub3RpZmljYXRpb24tcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QvYWRtaW4tbm90aWZpY2F0aW9uLXBhbmVsL2FkbWluLW5vdGlmaWNhdGlvbi1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTXJILE9BQU8sRUFBRSxzQkFBc0Is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SSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQTBCLENBQUM7UUFDOUcsQ0FBQztJQUNILENBQUM7SUFDRCxFQUFFO0lBQ1EsYUFBYTtRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQ3pDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQixPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs4R0E1R1Usa0NBQWtDO2tHQUFsQyxrQ0FBa0MsMklDaEMvQywwaERBd0NBLDJDRGxCSSxZQUFZLDhCQUNaLGNBQWMsdVpBQ2QsWUFBWSwyaUJBQ1osaUJBQWlCLHVWQUNqQixhQUFhLHlJQUNiLGVBQWUsK0JBQ2YsaUNBQWlDLGdJQUNqQyxjQUFjOzsyRkFHTCxrQ0FBa0M7a0JBaEI5QyxTQUFTOytCQUNFLDhCQUE4QixjQUU1QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsaUNBQWlDO3dCQUNqQyxjQUFjO3FCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCYWRnZU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRhYnNNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdGFicyc7XG5pbXBvcnQgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWEZvcm1hdE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhNTm90aWZpY2F0aW9uQ2F0ZWdvcnksXG4gIEFYTU5vdGlmaWNhdGlvbkl0ZW0sXG4gIEFYTU5vdGlmaWNhdGlvblJlc3BvbnNlLFxufSBmcm9tICcuLi8uLi9ub3RpZmljYXRpb24tbWFuYWdlbWVudC50eXBlJztcbmltcG9ydCB7IEFYTU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBWE1BZG1pbk5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9hZG1pbi1ub3RpZmljYXRpb24taXRlbS9hZG1pbi1ub3RpZmljYXRpb24taXRlbS5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLWFkbWluLW5vdGlmaWNhdGlvbi1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZG1pbi1ub3RpZmljYXRpb24tcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWFRhYnNNb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWFBvcG92ZXJNb2R1bGUsXG4gICAgQVhNQWRtaW5Ob3RpZmljYXRpb25JdGVtQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0TW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1BZG1pbk5vdGlmaWNhdGlvblBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgb25OZXdOb3RmaWNhdGlvbiA9IG91dHB1dDxudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYTU5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0U2VydmljZSA9IGluamVjdChBWFRvYXN0U2VydmljZSk7XG5cbiAgbm90aWZpY2F0aW9ucyA9IHNpZ25hbDxBWE1Ob3RpZmljYXRpb25JdGVtW10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHRvdGFsTm90aWZpY2F0aW9ucyA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgdGFiSXRlbXMgPSBjb21wdXRlZDxBWFRhYkRhdGFbXT4oKCkgPT4gdGhpcy5nZXRUYWJJdGVtcyh0aGlzLm5vdGlmaWNhdGlvbnMoKSksIHtcbiAgICBlcXVhbDogKGEsIGIpID0+IEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKSxcbiAgfSk7XG4gIGFjdGl2ZVRhYiA9IHNpZ25hbDxBWE1UYWJEYXRhVGV4dD4oJ0FsbCcpO1xuXG4gIGNoYW5nZUFjdGl2ZVRhYih0YWI6IEFYTVRhYkRhdGFUZXh0KSB7XG4gICAgdGhpcy5hY3RpdmVUYWIuc2V0KHRhYik7XG4gIH1cblxuICBOZXdOb3RpZmljYXRpb24gPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHRoaXMuZ2V0TmV3Tm90aWZpY2F0aW9uKHRoaXMudGFiSXRlbXMoKSkpO1xuICBOZXdOb3RpZmljYXRpb25FZmZlY3QgPSBlZmZlY3QoKCkgPT4gdGhpcy5vbk5ld05vdGZpY2F0aW9uLmVtaXQodGhpcy5OZXdOb3RpZmljYXRpb24oKSkpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZE5vdGlmaWNhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTm90aWZpY2F0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZTogQVhNTm90aWZpY2F0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0TGlzdCgpO1xuICAgICAgdGhpcy50b3RhbE5vdGlmaWNhdGlvbnMuc2V0KHJlc3BvbnNlLnRvdGFsKTtcbiAgICAgIGNvbnN0IG9yZGVyZWRSZXNwb25zZSA9IHJlc3BvbnNlLml0ZW1zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEudGVtcGxhdGUuaXNQaW5uZWQgPT09IGIudGVtcGxhdGUuaXNQaW5uZWQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYS5jcmVhdGVBdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5jcmVhdGVBdCkuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLnRlbXBsYXRlLmlzUGlubmVkID8gMSA6IC0xO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuc2V0KG9yZGVyZWRSZXNwb25zZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICBjb250ZW50OiB0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnID8gZXJyb3IgOiAnRmFpbGVkIHRvIGxvYWQgbm90aWZpY2F0aW9ucyEnLFxuICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICB0aW1lT3V0OiAzMDAwLFxuICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25QcmVzc05vdGlmaWNhdGlvbkl0ZW0gPSAoaWQ6IHN0cmluZykgPT4ge1xuICAgIHRoaXMubm90aWZpY2F0aW9ucy51cGRhdGUoKG9sZCkgPT5cbiAgICAgIG9sZD8ubWFwKChpdGVtKSA9PiAoaXRlbS5pZCA9PT0gaWQgJiYgIWl0ZW0ucmVhZEF0ID8geyAuLi5pdGVtLCByZWFkQXQ6IG5ldyBEYXRlKCkgfSA6IGl0ZW0pKVxuICAgICk7XG4gIH07XG5cbiAgcHJpdmF0ZSBnZXRUYWJJdGVtcyhub3RpZmljYXRpb25zOiBBWE1Ob3RpZmljYXRpb25JdGVtW10gfCB1bmRlZmluZWQpOiBBWFRhYkRhdGFbXSB7XG4gICAgaWYgKCFub3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0FsbCcsXG4gICAgICAgICAgLy9hY3RpdmU6IHRydWUsXG4gICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBjYXRlZ29yeUNvdW50TWFwID0gbmV3IE1hcDxBWE1UYWJEYXRhVGV4dCwgbnVtYmVyPigpO1xuICAgIG5vdGlmaWNhdGlvbnMuZm9yRWFjaCgobm90aWZpY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjYXRlZ29yeSA9IG5vdGlmaWNhdGlvbi50ZW1wbGF0ZS5jYXRlZ29yeTtcbiAgICAgIGlmICghY2F0ZWdvcnlDb3VudE1hcC5oYXMoY2F0ZWdvcnkpKSB7XG4gICAgICAgIGNhdGVnb3J5Q291bnRNYXAuc2V0KGNhdGVnb3J5LCAwKTtcbiAgICAgIH1cbiAgICAgIGlmICghbm90aWZpY2F0aW9uLnJlYWRBdCkge1xuICAgICAgICBjYXRlZ29yeUNvdW50TWFwLnNldChjYXRlZ29yeSwgY2F0ZWdvcnlDb3VudE1hcC5nZXQoY2F0ZWdvcnkpISArIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHRhYkl0ZW1zID0gQXJyYXkuZnJvbShjYXRlZ29yeUNvdW50TWFwLmVudHJpZXMoKSkubWFwKChbY2F0ZWdvcnksIGNvdW50XSkgPT4gKHtcbiAgICAgIHRleHQ6IGNhdGVnb3J5LFxuICAgICAgY291bnQ6IGNvdW50LFxuICAgIH0pKTtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gQXJyYXkuZnJvbShjYXRlZ29yeUNvdW50TWFwLnZhbHVlcygpKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICB0YWJJdGVtcy51bnNoaWZ0KHtcbiAgICAgIHRleHQ6ICdBbGwnLFxuICAgICAgY291bnQ6IHRvdGFsQ291bnQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRhYkl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXdOb3RpZmljYXRpb24oZGF0YTogQVhUYWJEYXRhW10pOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsID0gZGF0YS5maWx0ZXIoKHRhYikgPT4gdGFiLnRleHQgIT09ICdBbGwnKS5yZWR1Y2UoKHN1bSwgdGFiKSA9PiBzdW0gKyB0YWIuY291bnQsIDApO1xuICAgIHJldHVybiB0b3RhbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXROb3RpZmljYXRpb25JdGVtcyhjYXRlZ29yeTogQVhNVGFiRGF0YVRleHQpIHtcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICdBbGwnKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnMoKT8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRlbXBsYXRlLmNhdGVnb3J5ID09PSBjYXRlZ29yeSkgYXMgQVhNTm90aWZpY2F0aW9uSXRlbVtdO1xuICAgIH1cbiAgfVxuICAvL1xuICBwcm90ZWN0ZWQgbWFya0FsbEFzUmVhZCgpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnMudXBkYXRlKChub3RpZmljYXRpb24pID0+XG4gICAgICBub3RpZmljYXRpb24/Lm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoIWl0ZW0ucmVhZEF0KSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgcmVhZEF0OiBuZXcgRGF0ZSgpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEFYVGFiRGF0YSB7XG4gIHRleHQ6IEFYTVRhYkRhdGFUZXh0O1xuICBjb3VudDogbnVtYmVyO1xufVxudHlwZSBBWE1UYWJEYXRhVGV4dCA9IEFYTU5vdGlmaWNhdGlvbkNhdGVnb3J5IHwgJ0FsbCc7XG4iLCI8ZGl2IGNsYXNzPVwiYXgtcC00IGF4LWZsZXggYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWl0ZW1zLWNlbnRlclwiPlxuICA8c3BhbiBjbGFzcz1cImF4LXRleHQteGxcIj5Ob3RpZmljYXRpb25zPC9zcGFuPlxuICA8YXgtYnV0dG9uIGNvbG9yPVwiZGVmYXVsdFwiIGxvb2s9XCJibGFua1wiPlxuICAgIDxheC1pY29uPlxuICAgICAgPGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWdlYXIgZmEtbGdcIj48L2k+XG4gICAgPC9heC1pY29uPlxuICA8L2F4LWJ1dHRvbj5cbjwvZGl2PlxuPGF4LXRhYnMgW2NvbnRlbnRdPVwiY29uc1wiIGxvb2s9XCJ3aXRoLWxpbmVcIiBsb2NhdGlvbj1cImJvdHRvbVwiPlxuICBAZm9yKHRhYiBvZiB0YWJJdGVtcygpOyB0cmFjayB0YWIudGV4dCl7XG4gIDxheC10YWItaXRlbSBbdGV4dF09XCJ0YWIudGV4dFwiIFthY3RpdmVdPVwiYWN0aXZlVGFiKCkgPT09IHRhYi50ZXh0XCIgKGFjdGl2ZUNoYW5nZSk9XCJjaGFuZ2VBY3RpdmVUYWIodGFiLnRleHQpXCI+XG4gICAgPGF4LXN1ZmZpeD5cbiAgICAgIEBpZih0YWIuY291bnQpe1xuICAgICAgPGF4LWJhZGdlIFtjb2xvcl09XCJhY3RpdmVUYWIoKSA9PT0gdGFiLnRleHQgPyAncHJpbWFyeScgOiAnZ2hvc3QnXCIgW3RleHRdPVwidGFiLmNvdW50LnRvU3RyaW5nKClcIj48L2F4LWJhZGdlPlxuICAgICAgfVxuICAgIDwvYXgtc3VmZml4PlxuICAgIDxheC1jb250ZW50PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LW1heC1oLVs1MHZoXSBheC1vdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgQGZvcihub3RpZiBvZiBnZXROb3RpZmljYXRpb25JdGVtcyh0YWIudGV4dCk7IHRyYWNrIG5vdGlmLmlkKXtcbiAgICAgICAgPGF4cC1tYXN0ZXItbm90aWZpY2F0aW9uLWl0ZW1cbiAgICAgICAgICBbZGF0YV09XCJub3RpZlwiXG4gICAgICAgICAgKG9uUHJlc3NOb3RpZmljYXRpb25JdGVtKT1cIm9uUHJlc3NOb3RpZmljYXRpb25JdGVtKCRldmVudClcIlxuICAgICAgICA+PC9heHAtbWFzdGVyLW5vdGlmaWNhdGlvbi1pdGVtPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC00IGF4LWp1c3RpZnktYmV0d2VlbiBheC1wLTQgYXgtYm9yZGVyLXQgYXgtYm9yZGVyLWRlZmF1bHRcIj5cbiAgICAgICAgPGF4LWJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJOZXdOb3RpZmljYXRpb24oKSA9PT0gMFwiXG4gICAgICAgICAgY29sb3I9XCJnaG9zdFwiXG4gICAgICAgICAgdGV4dD1cIk1hcmsgYWxsIGFzIHJlYWRcIlxuICAgICAgICAgIChvbkNsaWNrKT1cIm1hcmtBbGxBc1JlYWQoKVwiXG4gICAgICAgID48L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0ZXh0PVwiVmlldyBhbGwgbm90aWZpY2F0aW9uc1wiPjwvYXgtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9heC1jb250ZW50PlxuICA8L2F4LXRhYi1pdGVtPlxuICB9XG48L2F4LXRhYnM+XG5cbjxuZy10ZW1wbGF0ZSBbYXhUYWJDb250ZW50XSAjY29ucz1cImF4VGFiQ29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { AXBadgeModule } from '@acorex/components/badge';
2
+ import { AXButtonModule } from '@acorex/components/button';
3
+ import { AXDecoratorModule } from '@acorex/components/decorators';
4
+ import { AXPopoverModule } from '@acorex/components/popover';
5
+ import { CommonModule } from '@angular/common';
6
+ import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
7
+ import { AXMAdminNotificationItemComponent } from '../admin-notification-item/admin-notification-item.component';
8
+ import { AXMAdminNotificationPanelComponent } from '../admin-notification-panel/admin-notification-panel.component';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@acorex/components/button";
11
+ import * as i2 from "@acorex/components/decorators";
12
+ import * as i3 from "@acorex/components/badge";
13
+ import * as i4 from "@acorex/components/popover";
14
+ export class AXMAdminNotificationSlotComponent {
15
+ constructor() {
16
+ this.totalNewNotification = signal(0);
17
+ }
18
+ setTotalNewNotification(value) {
19
+ this.totalNewNotification.set(value);
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMAdminNotificationSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMAdminNotificationSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<ax-button color=\"secondary\" class=\"ax-relative\" look=\"blank\" #notification>\n <ax-icon>\n <i class=\"fa-regular fa-bell ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n <ax-suffix class=\"ax-absolute ax-top-0 ax-left-1/2\">\n @if(totalNewNotification()){\n <ax-badge color=\"success\" [text]=\"totalNewNotification().toString()\"></ax-badge>\n }\n </ax-suffix>\n</ax-button>\n<ax-popover [target]=\"notification\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-surface ax-border ax-border-default ax-rounded-md ax-shadow-md ax-w-full\">\n <axm-admin-notification-panel (onNewNotfication)=\"setTotalNewNotification($event)\"> </axm-admin-notification-panel>\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i3.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i4.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXMAdminNotificationPanelComponent, selector: "axm-admin-notification-panel", outputs: ["onNewNotfication"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMAdminNotificationSlotComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
27
+ CommonModule,
28
+ AXButtonModule,
29
+ AXDecoratorModule,
30
+ AXBadgeModule,
31
+ AXPopoverModule,
32
+ AXMAdminNotificationItemComponent,
33
+ AXMAdminNotificationPanelComponent,
34
+ ], template: "<ax-button color=\"secondary\" class=\"ax-relative\" look=\"blank\" #notification>\n <ax-icon>\n <i class=\"fa-regular fa-bell ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n <ax-suffix class=\"ax-absolute ax-top-0 ax-left-1/2\">\n @if(totalNewNotification()){\n <ax-badge color=\"success\" [text]=\"totalNewNotification().toString()\"></ax-badge>\n }\n </ax-suffix>\n</ax-button>\n<ax-popover [target]=\"notification\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-surface ax-border ax-border-default ax-rounded-md ax-shadow-md ax-w-full\">\n <axm-admin-notification-panel (onNewNotfication)=\"setTotalNewNotification($event)\"> </axm-admin-notification-panel>\n </div>\n</ax-popover>\n" }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGdFQUFnRSxDQUFDOzs7Ozs7QUFlcEgsTUFBTSxPQUFPLGlDQUFpQztJQWQ5QztRQWVFLHlCQUFvQixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztLQUkxQztJQUhDLHVCQUF1QixDQUFDLEtBQWE7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDOzhHQUpVLGlDQUFpQztrR0FBakMsaUNBQWlDLHdFQ3RCOUMseXdCQWVBLDJDREZJLFlBQVksOEJBQ1osY0FBYyx1WkFDZCxpQkFBaUIsdVZBQ2pCLGFBQWEseUlBQ2IsZUFBZSxxVEFFZixrQ0FBa0M7OzJGQUd6QixpQ0FBaUM7a0JBZDdDLFNBQVM7aUNBRUksSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixpQ0FBaUM7d0JBQ2pDLGtDQUFrQztxQkFDbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYUG9wb3Zlck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTUFkbWluTm90aWZpY2F0aW9uSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2FkbWluLW5vdGlmaWNhdGlvbi1pdGVtL2FkbWluLW5vdGlmaWNhdGlvbi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWE1BZG1pbk5vdGlmaWNhdGlvblBhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vYWRtaW4tbm90aWZpY2F0aW9uLXBhbmVsL2FkbWluLW5vdGlmaWNhdGlvbi1wYW5lbC5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9hZG1pbi1ub3RpZmljYXRpb24tc2xvdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYQmFkZ2VNb2R1bGUsXG4gICAgQVhQb3BvdmVyTW9kdWxlLFxuICAgIEFYTUFkbWluTm90aWZpY2F0aW9uSXRlbUNvbXBvbmVudCxcbiAgICBBWE1BZG1pbk5vdGlmaWNhdGlvblBhbmVsQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1BZG1pbk5vdGlmaWNhdGlvblNsb3RDb21wb25lbnQge1xuICB0b3RhbE5ld05vdGlmaWNhdGlvbiA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBzZXRUb3RhbE5ld05vdGlmaWNhdGlvbih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy50b3RhbE5ld05vdGlmaWNhdGlvbi5zZXQodmFsdWUpO1xuICB9XG59XG4iLCI8YXgtYnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgY2xhc3M9XCJheC1yZWxhdGl2ZVwiIGxvb2s9XCJibGFua1wiICNub3RpZmljYXRpb24+XG4gIDxheC1pY29uPlxuICAgIDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS1iZWxsIGF4LXRleHQtc2xhdGUtNDAwIGRhcms6YXgtdGV4dC1zbGF0ZS0yMDBcIj48L2k+XG4gIDwvYXgtaWNvbj5cbiAgPGF4LXN1ZmZpeCBjbGFzcz1cImF4LWFic29sdXRlIGF4LXRvcC0wIGF4LWxlZnQtMS8yXCI+XG4gICAgQGlmKHRvdGFsTmV3Tm90aWZpY2F0aW9uKCkpe1xuICAgIDxheC1iYWRnZSBjb2xvcj1cInN1Y2Nlc3NcIiBbdGV4dF09XCJ0b3RhbE5ld05vdGlmaWNhdGlvbigpLnRvU3RyaW5nKClcIj48L2F4LWJhZGdlPlxuICAgIH1cbiAgPC9heC1zdWZmaXg+XG48L2F4LWJ1dHRvbj5cbjxheC1wb3BvdmVyIFt0YXJnZXRdPVwibm90aWZpY2F0aW9uXCIgW29wZW5Pbl09XCIndG9nZ2xlJ1wiIFtjbG9zZU9uXT1cIidjbGlja091dCdcIiBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiPlxuICA8ZGl2IGNsYXNzPVwiYXgtYmctc3VyZmFjZSBheC1ib3JkZXIgYXgtYm9yZGVyLWRlZmF1bHQgYXgtcm91bmRlZC1tZCBheC1zaGFkb3ctbWQgYXgtdy1mdWxsXCI+XG4gICAgPGF4bS1hZG1pbi1ub3RpZmljYXRpb24tcGFuZWwgKG9uTmV3Tm90ZmljYXRpb24pPVwic2V0VG90YWxOZXdOb3RpZmljYXRpb24oJGV2ZW50KVwiPiA8L2F4bS1hZG1pbi1ub3RpZmljYXRpb24tcGFuZWw+XG4gIDwvZGl2PlxuPC9heC1wb3BvdmVyPlxuIl19
@@ -0,0 +1,345 @@
1
+ import { AXPDataGenerator, AXPEntityCommandScope, AXPEntityQueryType } from '@acorex/platform/common';
2
+ import { applyFilterArray, applySortArray } from '@acorex/platform/core';
3
+ import { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
4
+ import { NotificationManagementService } from '../notification-management.service';
5
+ export async function notificationChannelEntityFactory(injector) {
6
+ const dataService = injector.get(NotificationManagementService);
7
+ const entityDef = {
8
+ module: 'notification-management',
9
+ name: 'notificationChannel',
10
+ source: 'notification-management.notificationChannel',
11
+ title: 'Notification Channel',
12
+ formats: {
13
+ individual: 'Channel',
14
+ plural: 'Channels',
15
+ },
16
+ relatedEntities: [],
17
+ groups: [
18
+ {
19
+ id: 'notificationChannel',
20
+ title: 'Notification Channel',
21
+ },
22
+ ],
23
+ properties: [
24
+ {
25
+ name: 'title',
26
+ title: 'Title',
27
+ groupId: 'notificationChannel',
28
+ schema: {
29
+ dataType: 'string',
30
+ interface: {
31
+ type: AXPWidgetsCatalog.text,
32
+ },
33
+ },
34
+ validations: [
35
+ {
36
+ rule: 'required',
37
+ },
38
+ ],
39
+ },
40
+ {
41
+ name: 'template',
42
+ title: 'Template',
43
+ groupId: 'notificationChannel',
44
+ schema: {
45
+ dataType: 'string',
46
+ interface: {
47
+ type: AXPWidgetsCatalog.lookup,
48
+ options: {
49
+ entity: 'template-management.globalTemplate',
50
+ expose: { source: 'content', target: 'body' },
51
+ },
52
+ },
53
+ },
54
+ },
55
+ {
56
+ name: 'body',
57
+ title: 'Body',
58
+ groupId: 'notificationChannel',
59
+ schema: {
60
+ dataType: 'string',
61
+ interface: {
62
+ type: AXPWidgetsCatalog.largeText,
63
+ },
64
+ },
65
+ validations: [
66
+ {
67
+ rule: 'required',
68
+ },
69
+ ],
70
+ },
71
+ {
72
+ name: 'channel',
73
+ title: 'Channel',
74
+ groupId: 'notificationChannel',
75
+ schema: {
76
+ dataType: 'string',
77
+ interface: {
78
+ type: AXPWidgetsCatalog.select,
79
+ options: {
80
+ valueField: 'name',
81
+ textField: 'title',
82
+ dataSource: [
83
+ { title: 'SMS', name: 'sms' },
84
+ { title: 'Email', name: 'email' },
85
+ { title: 'In App', name: 'inApp' },
86
+ ],
87
+ direction: 'horizontal',
88
+ multiple: false,
89
+ },
90
+ },
91
+ },
92
+ validations: [
93
+ {
94
+ rule: 'required',
95
+ },
96
+ ],
97
+ },
98
+ {
99
+ name: 'title',
100
+ title: 'Title',
101
+ groupId: 'notificationChannel',
102
+ schema: {
103
+ dataType: 'string',
104
+ interface: {
105
+ type: AXPWidgetsCatalog.text,
106
+ },
107
+ },
108
+ validations: [
109
+ {
110
+ rule: 'required',
111
+ },
112
+ ],
113
+ },
114
+ ],
115
+ columns: [{ name: 'title' }, { name: 'body' }, { name: 'channel' }],
116
+ commands: {
117
+ create: {
118
+ execute: async (data) => {
119
+ const entity = Object.assign(data, { id: AXPDataGenerator.uuid() });
120
+ dataService.notificationChannelDataProvider.insertOne(entity);
121
+ return Promise.resolve(entity);
122
+ },
123
+ },
124
+ delete: {
125
+ execute: async (id) => {
126
+ await await dataService.notificationChannelDataProvider.deleteOne(id);
127
+ return Promise.resolve();
128
+ },
129
+ },
130
+ update: {
131
+ execute: async (data) => {
132
+ debugger;
133
+ return new Promise((resolve) => {
134
+ setTimeout(async () => {
135
+ await dataService.notificationChannelDataProvider.updateOne(data.id, data);
136
+ resolve(data);
137
+ }, 1000);
138
+ });
139
+ },
140
+ },
141
+ },
142
+ queries: {
143
+ byKey: {
144
+ execute: async (id) => {
145
+ return new Promise((resolve) => {
146
+ setTimeout(async () => {
147
+ const entity = await dataService.notificationChannelDataProvider.getOne(id);
148
+ resolve(entity);
149
+ }, 500);
150
+ });
151
+ },
152
+ type: AXPEntityQueryType.Single,
153
+ },
154
+ list: {
155
+ execute: async (e) => {
156
+ const list = await dataService.notificationChannelDataProvider.getAll();
157
+ const sortedItems = applySortArray(list, e.sort);
158
+ const filteredItems = applyFilterArray(sortedItems, e.filter ? [e.filter] : []);
159
+ return Promise.resolve({
160
+ total: filteredItems.length,
161
+ items: filteredItems.slice(e.skip, (e.skip ?? 0) + (e.take ?? 0)),
162
+ });
163
+ },
164
+ type: AXPEntityQueryType.List,
165
+ },
166
+ },
167
+ interfaces: {
168
+ master: {
169
+ create: {
170
+ sections: [
171
+ {
172
+ id: 'notificationChannel',
173
+ },
174
+ ],
175
+ properties: [
176
+ {
177
+ name: 'title',
178
+ layout: {
179
+ positions: {
180
+ lg: {
181
+ colSpan: 12,
182
+ },
183
+ },
184
+ },
185
+ },
186
+ {
187
+ name: 'body',
188
+ layout: {
189
+ positions: {
190
+ lg: {
191
+ colSpan: 12,
192
+ },
193
+ },
194
+ },
195
+ },
196
+ {
197
+ name: 'template',
198
+ layout: {
199
+ positions: {
200
+ lg: {
201
+ colSpan: 12,
202
+ },
203
+ },
204
+ },
205
+ },
206
+ {
207
+ name: 'channel',
208
+ layout: {
209
+ positions: {
210
+ lg: {
211
+ colSpan: 12,
212
+ },
213
+ },
214
+ },
215
+ },
216
+ ],
217
+ },
218
+ update: {
219
+ sections: [
220
+ {
221
+ id: 'notificationChannel',
222
+ },
223
+ ],
224
+ properties: [
225
+ {
226
+ name: 'title',
227
+ layout: {
228
+ positions: {
229
+ lg: {
230
+ colSpan: 12,
231
+ },
232
+ },
233
+ },
234
+ },
235
+ {
236
+ name: 'body',
237
+ layout: {
238
+ positions: {
239
+ lg: {
240
+ colSpan: 12,
241
+ },
242
+ },
243
+ },
244
+ },
245
+ {
246
+ name: 'channel',
247
+ layout: {
248
+ positions: {
249
+ lg: {
250
+ colSpan: 12,
251
+ },
252
+ },
253
+ },
254
+ },
255
+ ],
256
+ },
257
+ single: {
258
+ title: '{{title}}',
259
+ sections: [
260
+ {
261
+ id: 'notificationChannel',
262
+ },
263
+ ],
264
+ properties: [
265
+ {
266
+ name: 'title',
267
+ layout: {
268
+ positions: {
269
+ lg: {
270
+ colSpan: 6,
271
+ },
272
+ },
273
+ },
274
+ },
275
+ {
276
+ name: 'body',
277
+ layout: {
278
+ positions: {
279
+ lg: {
280
+ colSpan: 6,
281
+ },
282
+ },
283
+ },
284
+ },
285
+ {
286
+ name: 'channel',
287
+ layout: {
288
+ positions: {
289
+ lg: {
290
+ colSpan: 12,
291
+ },
292
+ },
293
+ },
294
+ },
295
+ ],
296
+ actions: [],
297
+ },
298
+ list: {
299
+ actions: [
300
+ {
301
+ title: 'Create New',
302
+ command: 'create-entity',
303
+ priority: 'primary',
304
+ type: 'create',
305
+ scope: AXPEntityCommandScope.TypeLevel,
306
+ },
307
+ {
308
+ title: 'Delete Items',
309
+ command: 'delete-entity',
310
+ priority: 'primary',
311
+ type: 'delete',
312
+ scope: AXPEntityCommandScope.Selected,
313
+ },
314
+ {
315
+ title: 'Details',
316
+ command: 'open-entity',
317
+ priority: 'primary',
318
+ type: 'view',
319
+ scope: AXPEntityCommandScope.Individual,
320
+ },
321
+ {
322
+ title: 'Delete',
323
+ command: 'delete-entity',
324
+ priority: 'primary',
325
+ type: 'delete',
326
+ scope: AXPEntityCommandScope.Individual,
327
+ },
328
+ ],
329
+ views: [
330
+ {
331
+ name: 'all',
332
+ title: 'All Items',
333
+ fixed: true,
334
+ columns: [],
335
+ conditions: [],
336
+ sorts: [],
337
+ },
338
+ ],
339
+ },
340
+ },
341
+ },
342
+ };
343
+ return entityDef;
344
+ }
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNoYW5uZWwuZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvZW50aXRpZXMvbm90aWZpY2F0aW9uLWNoYW5uZWwuZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRixNQUFNLENBQUMsS0FBSyxVQUFVLGdDQUFnQyxDQUFDLFFBQWtCO0lBQ3ZFLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUVoRSxNQUFNLFNBQVMsR0FBYztRQUMzQixNQUFNLEVBQUUseUJBQXlCO1FBQ2pDLElBQUksRUFBRSxxQkFBcUI7UUFDM0IsTUFBTSxFQUFFLDZDQUE2QztRQUNyRCxLQUFLLEVBQUUsc0JBQXNCO1FBQzdCLE9BQU8sRUFBRTtZQUNQLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLE1BQU0sRUFBRSxVQUFVO1NBQ25CO1FBQ0QsZUFBZSxFQUFFLEVBQUU7UUFDbkIsTUFBTSxFQUFFO1lBQ047Z0JBQ0UsRUFBRSxFQUFFLHFCQUFxQjtnQkFDekIsS0FBSyxFQUFFLHNCQUFzQjthQUM5QjtTQUNGO1FBQ0QsVUFBVSxFQUFFO1lBQ1Y7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsTUFBTSxF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LEVBQUUscUJBQXFCLENBQUMsVUFBVTt5QkFDeEM7cUJBQ0Y7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMOzRCQUNFLElBQUksRUFBRSxLQUFLOzRCQUNYLEtBQUssRUFBRSxXQUFXOzRCQUNsQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxPQUFPLEVBQUUsRUFBRTs0QkFDWCxVQUFVLEVBQUUsRUFBRTs0QkFDZCxLQUFLLEVBQUUsRUFBRTt5QkFDVjtxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUERhdGFHZW5lcmF0b3IsIEFYUEVudGl0eSwgQVhQRW50aXR5Q29tbWFuZFNjb3BlLCBBWFBFbnRpdHlRdWVyeVR5cGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBhcHBseUZpbHRlckFycmF5LCBhcHBseVNvcnRBcnJheSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBXaWRnZXRzQ2F0YWxvZyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQuc2VydmljZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub3RpZmljYXRpb25DaGFubmVsRW50aXR5RmFjdG9yeShpbmplY3RvcjogSW5qZWN0b3IpOiBQcm9taXNlPEFYUEVudGl0eSB8IG51bGw+IHtcbiAgY29uc3QgZGF0YVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTm90aWZpY2F0aW9uTWFuYWdlbWVudFNlcnZpY2UpO1xuXG4gIGNvbnN0IGVudGl0eURlZjogQVhQRW50aXR5ID0ge1xuICAgIG1vZHVsZTogJ25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50JyxcbiAgICBuYW1lOiAnbm90aWZpY2F0aW9uQ2hhbm5lbCcsXG4gICAgc291cmNlOiAnbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQubm90aWZpY2F0aW9uQ2hhbm5lbCcsXG4gICAgdGl0bGU6ICdOb3RpZmljYXRpb24gQ2hhbm5lbCcsXG4gICAgZm9ybWF0czoge1xuICAgICAgaW5kaXZpZHVhbDogJ0NoYW5uZWwnLFxuICAgICAgcGx1cmFsOiAnQ2hhbm5lbHMnLFxuICAgIH0sXG4gICAgcmVsYXRlZEVudGl0aWVzOiBbXSxcbiAgICBncm91cHM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdub3RpZmljYXRpb25DaGFubmVsJyxcbiAgICAgICAgdGl0bGU6ICdOb3RpZmljYXRpb24gQ2hhbm5lbCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcHJvcGVydGllczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICAgICAgZ3JvdXBJZDogJ25vdGlmaWNhdGlvbkNoYW5uZWwnLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgaW50ZXJmYWNlOiB7XG4gICAgICAgICAgICB0eXBlOiBBWFBXaWRnZXRzQ2F0YWxvZy50ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcnVsZTogJ3JlcXVpcmVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RlbXBsYXRlJyxcbiAgICAgICAgdGl0bGU6ICdUZW1wbGF0ZScsXG4gICAgICAgIGdyb3VwSWQ6ICdub3RpZmljYXRpb25DaGFubmVsJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cubG9va3VwLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBlbnRpdHk6ICd0ZW1wbGF0ZS1tYW5hZ2VtZW50Lmdsb2JhbFRlbXBsYXRlJyxcbiAgICAgICAgICAgICAgZXhwb3NlOiB7IHNvdXJjZTogJ2NvbnRlbnQnLCB0YXJnZXQ6ICdib2R5JyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2JvZHknLFxuICAgICAgICB0aXRsZTogJ0JvZHknLFxuICAgICAgICBncm91cElkOiAnbm90aWZpY2F0aW9uQ2hhbm5lbCcsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLmxhcmdlVGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJ1bGU6ICdyZXF1aXJlZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjaGFubmVsJyxcbiAgICAgICAgdGl0bGU6ICdDaGFubmVsJyxcbiAgICAgICAgZ3JvdXBJZDogJ25vdGlmaWNhdGlvbkNoYW5uZWwnLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgaW50ZXJmYWNlOiB7XG4gICAgICAgICAgICB0eXBlOiBBWFBXaWRnZXRzQ2F0YWxvZy5zZWxlY3QsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgdGV4dEZpZWxkOiAndGl0bGUnLFxuICAgICAgICAgICAgICBkYXRhU291cmNlOiBbXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ1NNUycsIG5hbWU6ICdzbXMnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0VtYWlsJywgbmFtZTogJ2VtYWlsJyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdJbiBBcHAnLCBuYW1lOiAnaW5BcHAnIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2hvcml6b250YWwnLFxuICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcnVsZTogJ3JlcXVpcmVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RpdGxlJyxcbiAgICAgICAgdGl0bGU6ICdUaXRsZScsXG4gICAgICAgIGdyb3VwSWQ6ICdub3RpZmljYXRpb25DaGFubmVsJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cudGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJ1bGU6ICdyZXF1aXJlZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb2x1bW5zOiBbeyBuYW1lOiAndGl0bGUnIH0sIHsgbmFtZTogJ2JvZHknIH0sIHsgbmFtZTogJ2NoYW5uZWwnIH1dLFxuICAgIGNvbW1hbmRzOiB7XG4gICAgICBjcmVhdGU6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IE9iamVjdC5hc3NpZ24oZGF0YSwgeyBpZDogQVhQRGF0YUdlbmVyYXRvci51dWlkKCkgfSk7XG5cbiAgICAgICAgICBkYXRhU2VydmljZS5ub3RpZmljYXRpb25DaGFubmVsRGF0YVByb3ZpZGVyLmluc2VydE9uZShlbnRpdHkpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50aXR5KTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBkZWxldGU6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGlkOiBhbnkpID0+IHtcbiAgICAgICAgICBhd2FpdCBhd2FpdCBkYXRhU2VydmljZS5ub3RpZmljYXRpb25DaGFubmVsRGF0YVByb3ZpZGVyLmRlbGV0ZU9uZShpZCk7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgZGF0YVNlcnZpY2Uubm90aWZpY2F0aW9uQ2hhbm5lbERhdGFQcm92aWRlci51cGRhdGVPbmUoZGF0YS5pZCwgZGF0YSk7XG4gICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyaWVzOiB7XG4gICAgICBieUtleToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IGF3YWl0IGRhdGFTZXJ2aWNlLm5vdGlmaWNhdGlvbkNoYW5uZWxEYXRhUHJvdmlkZXIuZ2V0T25lKGlkKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShlbnRpdHkpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogQVhQRW50aXR5UXVlcnlUeXBlLlNpbmdsZSxcbiAgICAgIH0sXG4gICAgICBsaXN0OiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gYXdhaXQgZGF0YVNlcnZpY2Uubm90aWZpY2F0aW9uQ2hhbm5lbERhdGFQcm92aWRlci5nZXRBbGwoKTtcbiAgICAgICAgICBjb25zdCBzb3J0ZWRJdGVtcyA9IGFwcGx5U29ydEFycmF5KGxpc3QsIGUuc29ydCk7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IGFwcGx5RmlsdGVyQXJyYXkoc29ydGVkSXRlbXMsIGUuZmlsdGVyID8gW2UuZmlsdGVyXSA6IFtdKTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgIHRvdGFsOiBmaWx0ZXJlZEl0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW1zOiBmaWx0ZXJlZEl0ZW1zLnNsaWNlKGUuc2tpcCwgKGUuc2tpcCA/PyAwKSArIChlLnRha2UgPz8gMCkpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBBWFBFbnRpdHlRdWVyeVR5cGUuTGlzdCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBpbnRlcmZhY2VzOiB7XG4gICAgICBtYXN0ZXI6IHtcbiAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdub3RpZmljYXRpb25DaGFubmVsJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMTIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnYm9keScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMTIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAndGVtcGxhdGUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEyLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ2NoYW5uZWwnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEyLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGU6IHtcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ25vdGlmaWNhdGlvbkNoYW5uZWwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiAxMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdib2R5JyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiAxMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdjaGFubmVsJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiAxMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgc2luZ2xlOiB7XG4gICAgICAgICAgdGl0bGU6ICd7e3RpdGxlfX0nLFxuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnbm90aWZpY2F0aW9uQ2hhbm5lbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnYm9keScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdjaGFubmVsJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiAxMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhY3Rpb25zOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgbGlzdDoge1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdDcmVhdGUgTmV3JyxcbiAgICAgICAgICAgICAgY29tbWFuZDogJ2NyZWF0ZS1lbnRpdHknLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICB0eXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgICAgc2NvcGU6IEFYUEVudGl0eUNvbW1hbmRTY29wZS5UeXBlTGV2ZWwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZSBJdGVtcycsXG4gICAgICAgICAgICAgIGNvbW1hbmQ6ICdkZWxldGUtZW50aXR5JyxcbiAgICAgICAgICAgICAgcHJpb3JpdHk6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICAgICAgICAgIHNjb3BlOiBBWFBFbnRpdHlDb21tYW5kU2NvcGUuU2VsZWN0ZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ0RldGFpbHMnLFxuICAgICAgICAgICAgICBjb21tYW5kOiAnb3Blbi1lbnRpdHknLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICB0eXBlOiAndmlldycsXG4gICAgICAgICAgICAgIHNjb3BlOiBBWFBFbnRpdHlDb21tYW5kU2NvcGUuSW5kaXZpZHVhbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiAnRGVsZXRlJyxcbiAgICAgICAgICAgICAgY29tbWFuZDogJ2RlbGV0ZS1lbnRpdHknLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgc2NvcGU6IEFYUEVudGl0eUNvbW1hbmRTY29wZS5JbmRpdmlkdWFsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZpZXdzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgICB0aXRsZTogJ0FsbCBJdGVtcycsXG4gICAgICAgICAgICAgIGZpeGVkOiB0cnVlLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgICAgY29uZGl0aW9uczogW10sXG4gICAgICAgICAgICAgIHNvcnRzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gZW50aXR5RGVmO1xufVxuIl19