@iobroker/js-controller-adapter 7.2.3 → 8.0.0-alpha.1-20260921-e5941ca8a

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 (101) hide show
  1. package/build/cjs/index.d.ts +0 -1
  2. package/build/cjs/index.js +5 -8
  3. package/build/cjs/index.js.map +2 -2
  4. package/build/cjs/lib/_Types.d.ts +394 -63
  5. package/build/cjs/lib/adapter/adapter.d.ts +1818 -177
  6. package/build/cjs/lib/adapter/adapter.js +715 -1035
  7. package/build/cjs/lib/adapter/adapter.js.map +2 -2
  8. package/build/cjs/lib/adapter/asyncAdapter.d.ts +124 -0
  9. package/build/cjs/lib/adapter/asyncAdapter.js +184 -0
  10. package/build/cjs/lib/adapter/asyncAdapter.js.map +7 -0
  11. package/build/cjs/lib/adapter/context.d.ts +34 -0
  12. package/build/cjs/lib/adapter/context.js +17 -0
  13. package/build/cjs/lib/adapter/context.js.map +7 -0
  14. package/build/cjs/lib/adapter/defaultObjs.d.ts +5 -0
  15. package/build/cjs/lib/adapter/defaultObjs.js +2 -0
  16. package/build/cjs/lib/adapter/defaultObjs.js.map +2 -2
  17. package/build/cjs/lib/adapter/log.d.ts +25 -0
  18. package/build/cjs/lib/adapter/log.js +29 -0
  19. package/build/cjs/lib/adapter/log.js.map +2 -2
  20. package/build/cjs/lib/adapter/managers/AdapterContextBase.d.ts +49 -0
  21. package/build/cjs/lib/adapter/managers/AdapterContextBase.js +98 -0
  22. package/build/cjs/lib/adapter/managers/AdapterContextBase.js.map +7 -0
  23. package/build/cjs/lib/adapter/managers/AliasManager.d.ts +103 -0
  24. package/build/cjs/lib/adapter/managers/AliasManager.js +293 -0
  25. package/build/cjs/lib/adapter/managers/AliasManager.js.map +7 -0
  26. package/build/cjs/lib/adapter/managers/CertificateManager.d.ts +50 -0
  27. package/build/cjs/lib/adapter/managers/CertificateManager.js +174 -0
  28. package/build/cjs/lib/adapter/managers/CertificateManager.js.map +7 -0
  29. package/build/cjs/lib/adapter/managers/MessagingManager.d.ts +58 -0
  30. package/build/cjs/lib/adapter/managers/MessagingManager.js +289 -0
  31. package/build/cjs/lib/adapter/managers/MessagingManager.js.map +7 -0
  32. package/build/cjs/lib/adapter/managers/SubscriptionManager.d.ts +107 -0
  33. package/build/cjs/lib/adapter/managers/SubscriptionManager.js +349 -0
  34. package/build/cjs/lib/adapter/managers/SubscriptionManager.js.map +7 -0
  35. package/build/cjs/lib/adapter/userInterfaceMessagingController.d.ts +10 -0
  36. package/build/cjs/lib/adapter/userInterfaceMessagingController.js +9 -2
  37. package/build/cjs/lib/adapter/userInterfaceMessagingController.js.map +2 -2
  38. package/build/cjs/lib/adapter/utils.js +15 -1
  39. package/build/cjs/lib/adapter/utils.js.map +2 -2
  40. package/build/cjs/lib/adapter/validator.d.ts +10 -5
  41. package/build/cjs/lib/adapter/validator.js +6 -5
  42. package/build/cjs/lib/adapter/validator.js.map +2 -2
  43. package/build/esm/index.d.ts +0 -1
  44. package/build/esm/index.d.ts.map +1 -1
  45. package/build/esm/index.js +0 -1
  46. package/build/esm/index.js.map +1 -1
  47. package/build/esm/lib/_Types.d.ts +394 -63
  48. package/build/esm/lib/_Types.d.ts.map +1 -1
  49. package/build/esm/lib/adapter/adapter.d.ts +1818 -177
  50. package/build/esm/lib/adapter/adapter.d.ts.map +1 -1
  51. package/build/esm/lib/adapter/adapter.js +827 -1215
  52. package/build/esm/lib/adapter/adapter.js.map +1 -1
  53. package/build/esm/lib/adapter/asyncAdapter.d.ts +124 -0
  54. package/build/esm/lib/adapter/asyncAdapter.d.ts.map +1 -0
  55. package/build/esm/lib/adapter/asyncAdapter.js +157 -0
  56. package/build/esm/lib/adapter/asyncAdapter.js.map +1 -0
  57. package/build/esm/lib/adapter/context.d.ts +34 -0
  58. package/build/esm/lib/adapter/context.d.ts.map +1 -0
  59. package/build/esm/lib/adapter/context.js +2 -0
  60. package/build/esm/lib/adapter/context.js.map +1 -0
  61. package/build/esm/lib/adapter/defaultObjs.d.ts +5 -0
  62. package/build/esm/lib/adapter/defaultObjs.d.ts.map +1 -1
  63. package/build/esm/lib/adapter/defaultObjs.js +5 -0
  64. package/build/esm/lib/adapter/defaultObjs.js.map +1 -1
  65. package/build/esm/lib/adapter/log.d.ts +25 -0
  66. package/build/esm/lib/adapter/log.d.ts.map +1 -1
  67. package/build/esm/lib/adapter/log.js +25 -0
  68. package/build/esm/lib/adapter/log.js.map +1 -1
  69. package/build/esm/lib/adapter/managers/AdapterContextBase.d.ts +49 -0
  70. package/build/esm/lib/adapter/managers/AdapterContextBase.d.ts.map +1 -0
  71. package/build/esm/lib/adapter/managers/AdapterContextBase.js +77 -0
  72. package/build/esm/lib/adapter/managers/AdapterContextBase.js.map +1 -0
  73. package/build/esm/lib/adapter/managers/AliasManager.d.ts +103 -0
  74. package/build/esm/lib/adapter/managers/AliasManager.d.ts.map +1 -0
  75. package/build/esm/lib/adapter/managers/AliasManager.js +269 -0
  76. package/build/esm/lib/adapter/managers/AliasManager.js.map +1 -0
  77. package/build/esm/lib/adapter/managers/CertificateManager.d.ts +50 -0
  78. package/build/esm/lib/adapter/managers/CertificateManager.d.ts.map +1 -0
  79. package/build/esm/lib/adapter/managers/CertificateManager.js +142 -0
  80. package/build/esm/lib/adapter/managers/CertificateManager.js.map +1 -0
  81. package/build/esm/lib/adapter/managers/MessagingManager.d.ts +58 -0
  82. package/build/esm/lib/adapter/managers/MessagingManager.d.ts.map +1 -0
  83. package/build/esm/lib/adapter/managers/MessagingManager.js +267 -0
  84. package/build/esm/lib/adapter/managers/MessagingManager.js.map +1 -0
  85. package/build/esm/lib/adapter/managers/SubscriptionManager.d.ts +107 -0
  86. package/build/esm/lib/adapter/managers/SubscriptionManager.d.ts.map +1 -0
  87. package/build/esm/lib/adapter/managers/SubscriptionManager.js +374 -0
  88. package/build/esm/lib/adapter/managers/SubscriptionManager.js.map +1 -0
  89. package/build/esm/lib/adapter/userInterfaceMessagingController.d.ts +10 -0
  90. package/build/esm/lib/adapter/userInterfaceMessagingController.d.ts.map +1 -1
  91. package/build/esm/lib/adapter/userInterfaceMessagingController.js +8 -2
  92. package/build/esm/lib/adapter/userInterfaceMessagingController.js.map +1 -1
  93. package/build/esm/lib/adapter/utils.d.ts.map +1 -1
  94. package/build/esm/lib/adapter/utils.js +1 -1
  95. package/build/esm/lib/adapter/utils.js.map +1 -1
  96. package/build/esm/lib/adapter/validator.d.ts +10 -5
  97. package/build/esm/lib/adapter/validator.d.ts.map +1 -1
  98. package/build/esm/lib/adapter/validator.js +8 -5
  99. package/build/esm/lib/adapter/validator.js.map +1 -1
  100. package/build/tsconfig.build.tsbuildinfo +1 -1
  101. package/package.json +25 -20
@@ -0,0 +1,267 @@
1
+ import { AdapterContextBase } from '../../../lib/adapter/managers/AdapterContextBase.js';
2
+ import { isMessageboxSupported } from '../../../lib/adapter/utils.js';
3
+ /** Owns the adapter's outbound messaging and the pending-reply registry. */
4
+ export class MessagingManager extends AdapterContextBase {
5
+ #pending = new Map();
6
+ #callbackId = 1;
7
+ #mboxSubscribed = false;
8
+ /**
9
+ * @param ctx Shared adapter context providing live runtime state
10
+ */
11
+ constructor(ctx) {
12
+ super(ctx);
13
+ }
14
+ /**
15
+ * Sends a message to another adapter instance.
16
+ *
17
+ * When `opts.expectReply` is true and the target is a specific instance (not broadcast),
18
+ * the returned promise resolves with the reply message when it arrives, or rejects with
19
+ * `Error('Timeout exceeded')` if `opts.options.timeout` elapses.
20
+ *
21
+ * @param opts Normalized send options
22
+ */
23
+ async sendTo(opts) {
24
+ const { command, message, callback, options, expectReply } = opts;
25
+ let { instanceName } = opts;
26
+ if (!instanceName) {
27
+ throw new Error('No instanceName provided or not a string');
28
+ }
29
+ if (!instanceName.startsWith('system.adapter.')) {
30
+ instanceName = `system.adapter.${instanceName}`;
31
+ }
32
+ const obj = {
33
+ command,
34
+ message,
35
+ from: `system.adapter.${this.namespace}`,
36
+ };
37
+ const states = this.states;
38
+ if (typeof message !== 'object') {
39
+ this.logger.silly(`${this.namespaceLog} sendTo "${command}" to ${instanceName} from system.adapter.${this.namespace}: ${message}`);
40
+ }
41
+ else {
42
+ this.logger.silly(`${this.namespaceLog} sendTo "${command}" to ${instanceName} from system.adapter.${this.namespace}`);
43
+ }
44
+ if (!instanceName.match(/\.[0-9]+$/)) {
45
+ const objects = this.objects;
46
+ // Only the instance lookup is best-effort; per-instance push errors must surface.
47
+ const res = await objects
48
+ .getObjectView('system', 'instance', {
49
+ startkey: `${instanceName}.`,
50
+ endkey: `${instanceName}.\u9999`,
51
+ })
52
+ .catch(() => undefined);
53
+ if (res) {
54
+ for (const row of res.rows) {
55
+ await states.pushMessage(row.id, obj);
56
+ }
57
+ }
58
+ return;
59
+ }
60
+ if (expectReply) {
61
+ return this.#registerReply(states, instanceName, obj, options);
62
+ }
63
+ if (callback) {
64
+ obj.callback = { ...callback, ack: true };
65
+ }
66
+ await states.pushMessage(instanceName, obj);
67
+ }
68
+ /**
69
+ * Subscribes to this instance's messagebox on demand when the adapter does not advertise
70
+ * messagebox support, so replies to outbound messages are received. Idempotent.
71
+ *
72
+ * @param states the connected states DB client
73
+ */
74
+ #maybeSubscribe(states) {
75
+ const common = this.common;
76
+ if (common && !isMessageboxSupported(common) && !this.#mboxSubscribed) {
77
+ this.#mboxSubscribed = true;
78
+ states
79
+ .subscribeMessage(`system.adapter.${this.namespace}`)
80
+ .catch(e => this.logger.error(`${this.namespaceLog} Cannot subscribe to messages: ${e.message}`));
81
+ }
82
+ }
83
+ /**
84
+ * Sets a reply callback header on `obj`, registers a pending-reply resolver keyed by its id,
85
+ * subscribes the messagebox on demand, pushes the message and returns a promise that resolves
86
+ * with the reply once `resolveCallback` is invoked for the matching id, or rejects with
87
+ * `Error('Timeout exceeded')` when `options.timeout` elapses.
88
+ *
89
+ * @param states the connected states DB client
90
+ * @param target the recipient id (instance or host) for `pushMessage`
91
+ * @param obj the message to send; its `callback` header is set here
92
+ * @param options additional send options (e.g. timeout)
93
+ */
94
+ async #registerReply(states, target, obj, options) {
95
+ this.#maybeSubscribe(states);
96
+ const id = this.#callbackId++;
97
+ if (this.#callbackId >= 0xffffffff) {
98
+ this.#callbackId = 1;
99
+ }
100
+ obj.callback = {
101
+ message: obj.message,
102
+ id,
103
+ ack: false,
104
+ time: Date.now(),
105
+ };
106
+ let pendingEntry;
107
+ const replyPromise = new Promise((resolve, reject) => {
108
+ let timer;
109
+ if (options?.timeout) {
110
+ timer = setTimeout(() => {
111
+ if (this.#pending.has(id)) {
112
+ this.#pending.delete(id);
113
+ reject(new Error('Timeout exceeded'));
114
+ }
115
+ }, options.timeout);
116
+ }
117
+ pendingEntry = { resolve, reject, timer, time: Date.now() };
118
+ this.#pending.set(id, pendingEntry);
119
+ });
120
+ const now = Date.now();
121
+ for (const [_id, entry] of this.#pending) {
122
+ if (now - entry.time > 3_600_000) {
123
+ this.#pending.delete(_id);
124
+ }
125
+ }
126
+ try {
127
+ await states.pushMessage(target, obj);
128
+ }
129
+ catch (e) {
130
+ if (pendingEntry.timer) {
131
+ clearTimeout(pendingEntry.timer);
132
+ }
133
+ this.#pending.delete(id);
134
+ throw e;
135
+ }
136
+ return replyPromise;
137
+ }
138
+ /**
139
+ * Sends a message to a host, or broadcasts to all hosts when `hostName` is `null`.
140
+ *
141
+ * When `opts.expectReply` is true and a specific host is targeted, the returned promise
142
+ * resolves with the reply message when it arrives, or rejects with `Error('Timeout exceeded')`
143
+ * if `opts.options.timeout` elapses. Broadcasts (hostName === null) resolve void.
144
+ *
145
+ * @param opts Normalized send options
146
+ */
147
+ async sendToHost(opts) {
148
+ const { command, message, expectReply, options, callback } = opts;
149
+ let { hostName } = opts;
150
+ const obj = {
151
+ command,
152
+ message,
153
+ from: `system.adapter.${this.namespace}`,
154
+ };
155
+ const states = this.states;
156
+ if (hostName && !hostName.startsWith('system.host.')) {
157
+ hostName = `system.host.${hostName}`;
158
+ }
159
+ if (!hostName) {
160
+ const objects = this.objects;
161
+ const res = await objects.getObjectList({ startkey: 'system.host.', endkey: 'system.host.\u9999' });
162
+ if (res?.rows.length) {
163
+ for (const row of res.rows) {
164
+ const parts = row.id.split('.');
165
+ // ignore system.host.name.alive and so on
166
+ if (parts.length === 3) {
167
+ await states.pushMessage(row.id, obj);
168
+ }
169
+ }
170
+ }
171
+ return;
172
+ }
173
+ if (expectReply) {
174
+ return this.#registerReply(states, hostName, obj, options);
175
+ }
176
+ if (callback) {
177
+ obj.callback = { ...callback, ack: true };
178
+ }
179
+ await states.pushMessage(hostName, obj);
180
+ }
181
+ /**
182
+ * Resolves a pending reply promise for an acked messagebox message.
183
+ * Returns true if a pending entry was found and consumed.
184
+ *
185
+ * @param obj incoming message object from the messagebox
186
+ */
187
+ resolveCallback(obj) {
188
+ if (!obj.callback?.ack || !obj.callback.id) {
189
+ return false;
190
+ }
191
+ const entry = this.#pending.get(obj.callback.id);
192
+ if (!entry) {
193
+ return false;
194
+ }
195
+ if (entry.timer) {
196
+ clearTimeout(entry.timer);
197
+ }
198
+ this.#pending.delete(obj.callback.id);
199
+ entry.resolve(obj.message);
200
+ const now = Date.now();
201
+ for (const [id, pending] of this.#pending) {
202
+ if (now - pending.time > 3_600_000) {
203
+ this.#pending.delete(id);
204
+ }
205
+ }
206
+ return true;
207
+ }
208
+ /**
209
+ * Rejects all pending reply promises and clears their timers (used on stop).
210
+ */
211
+ clearPendingCallbacks() {
212
+ if (this.#pending.size) {
213
+ const err = new Error('Adapter stopped');
214
+ for (const entry of this.#pending.values()) {
215
+ if (entry.timer) {
216
+ clearTimeout(entry.timer);
217
+ }
218
+ entry.reject(err);
219
+ }
220
+ this.#pending.clear();
221
+ }
222
+ }
223
+ /**
224
+ * Sends a message to a single UI client, or broadcasts to all connected UI clients when `clientId` is omitted.
225
+ *
226
+ * @param options clientId and data options
227
+ */
228
+ sendToUI(options) {
229
+ const states = this.states;
230
+ const { clientId, data } = options;
231
+ if (clientId === undefined) {
232
+ return this.uiMessagingController.sendToAllClients({
233
+ data,
234
+ states,
235
+ });
236
+ }
237
+ return this.uiMessagingController.sendToClient({
238
+ clientId,
239
+ data,
240
+ states,
241
+ });
242
+ }
243
+ /**
244
+ * Sends an addNotification command to the host of this adapter instance.
245
+ *
246
+ * @param scope notification scope
247
+ * @param category notification category, or `null` to match by scope regex
248
+ * @param message notification message
249
+ * @param options additional notification options
250
+ */
251
+ async registerNotification(scope, category, message, options) {
252
+ const states = this.states;
253
+ const obj = {
254
+ command: 'addNotification',
255
+ message: {
256
+ scope,
257
+ category,
258
+ message,
259
+ instance: this.namespace,
260
+ contextData: options?.contextData,
261
+ },
262
+ from: `system.adapter.${this.namespace}`,
263
+ };
264
+ await states.pushMessage(`system.host.${this.host}`, obj);
265
+ }
266
+ }
267
+ //# sourceMappingURL=MessagingManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessagingManager.js","sourceRoot":"","sources":["../../../../../src/lib/adapter/managers/MessagingManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import type { Pattern } from '../../_Types.js';
2
+ import type { AdapterContext } from '../../../lib/adapter/context.js';
3
+ import { AdapterContextBase } from '../../../lib/adapter/managers/AdapterContextBase.js';
4
+ import type { AliasManager } from '../../../lib/adapter/managers/AliasManager.js';
5
+ /** Prefixes an id or pattern with this adapter's namespace unless already namespaced. Bound to the adapter's Validator. */
6
+ export type FixId = (id: string, isPattern?: boolean) => string;
7
+ type SubOptions = {
8
+ user?: ioBroker.ObjectIDs.User;
9
+ } | null | undefined;
10
+ /** Reads the objects matching a pattern, used to discover alias objects during state subscription. */
11
+ export interface ObjectAccess {
12
+ /**
13
+ * Objects matching `pattern`, keyed by id. Bound to the legacy `getForeignObjects(pattern, null, null, options)`
14
+ * call, whose `null` type/enums args clobber `options` — so no type filter and no user-ACL are applied;
15
+ * only `alias.*` ids in the result are consumed. Kept as-is for behavior parity.
16
+ */
17
+ getForeignStateObjects(pattern: string, options?: {
18
+ user?: ioBroker.ObjectIDs.User;
19
+ } | null): Promise<Record<string, ioBroker.AnyObject>>;
20
+ }
21
+ /** Owns object-, file- and state-change subscriptions plus the auto-subscribe bookkeeping. */
22
+ export declare class SubscriptionManager extends AdapterContextBase {
23
+ #private;
24
+ /**
25
+ * @param ctx Shared adapter context providing live runtime state
26
+ * @param fixId Namespace-prefixer bound to the adapter's Validator
27
+ * @param aliasManager Alias subscription cache and bookkeeping
28
+ * @param objectAccess Reader for state-typed objects matching a pattern
29
+ */
30
+ constructor(ctx: AdapterContext, fixId: FixId, aliasManager: AliasManager, objectAccess: ObjectAccess);
31
+ /**
32
+ * Subscribe to object changes within this instance's namespace.
33
+ *
34
+ * @param pattern pattern without namespace, `*` for all own objects, or an array of patterns
35
+ * passed through as-is (not namespaced)
36
+ * @param options optional user context
37
+ */
38
+ subscribeObjects(pattern: Pattern, options?: SubOptions): Promise<void>;
39
+ /**
40
+ * Unsubscribe from object changes within this instance's namespace.
41
+ *
42
+ * @param pattern pattern without namespace, `*` for all own objects, or an array of patterns
43
+ * passed through as-is (not namespaced)
44
+ * @param options optional user context
45
+ */
46
+ unsubscribeObjects(pattern: Pattern, options?: SubOptions): Promise<void>;
47
+ /**
48
+ * Subscribe to object changes in any instance.
49
+ *
50
+ * @param pattern pattern or array of patterns
51
+ * @param options optional user context
52
+ */
53
+ subscribeForeignObjects(pattern: Pattern, options?: SubOptions): Promise<void>;
54
+ /**
55
+ * Unsubscribe from object changes in any instance.
56
+ *
57
+ * @param pattern pattern or array of patterns (defaults to `*`)
58
+ * @param options optional user context
59
+ */
60
+ unsubscribeForeignObjects(pattern: Pattern, options?: SubOptions): Promise<void>;
61
+ /**
62
+ * Subscribe to file changes in a specific instance.
63
+ *
64
+ * @param id adapter id, e.g. `vis-2.0`
65
+ * @param pattern pattern or array of patterns
66
+ * @param options optional user context
67
+ */
68
+ subscribeForeignFiles(id: string, pattern: Pattern, options?: SubOptions): Promise<void>;
69
+ /**
70
+ * Unsubscribe from file changes in a specific instance.
71
+ *
72
+ * @param id adapter id, e.g. `vis-2.0`
73
+ * @param pattern pattern or array of patterns (defaults to `*`)
74
+ * @param options optional user context
75
+ */
76
+ unsubscribeForeignFiles(id: string, pattern: Pattern, options?: SubOptions): Promise<void>;
77
+ /**
78
+ * Register an instance as auto-subscribable (its `subscribes` counter is maintained on subscribe/unsubscribe).
79
+ *
80
+ * @param id instance id, e.g. `pushover.0`
81
+ */
82
+ addSubscribableInstance(id: string): void;
83
+ /**
84
+ * Stop treating an instance as auto-subscribable.
85
+ *
86
+ * @param id instance id, e.g. `pushover.0`
87
+ */
88
+ removeSubscribableInstance(id: string): void;
89
+ /** Populate the auto-subscribe instance list from the objects DB. */
90
+ autoSubscribeOn(): Promise<void>;
91
+ /**
92
+ * Subscribe to state changes in any instance, resolving aliases and maintaining auto-subscribe counters.
93
+ *
94
+ * @param pattern pattern, `*`, an `alias.*` id, or an array of ids/patterns
95
+ * @param options optional user context
96
+ */
97
+ subscribeForeignStates(pattern: Pattern, options?: SubOptions): Promise<void>;
98
+ /**
99
+ * Unsubscribe from state changes in any instance, mirroring {@link subscribeForeignStates}.
100
+ *
101
+ * @param pattern pattern, `*`, an `alias.*` id, or an array of ids/patterns
102
+ * @param options optional user context
103
+ */
104
+ unsubscribeForeignStates(pattern: Pattern, options?: SubOptions): Promise<void>;
105
+ }
106
+ export {};
107
+ //# sourceMappingURL=SubscriptionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionManager.d.ts","sourceRoot":"","sources":["../../../../../src/lib/adapter/managers/SubscriptionManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAG3E,2HAA2H;AAC3H,MAAM,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;AAEhE,KAAK,UAAU,GAAG;IAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAExE,sGAAsG;AACtG,MAAM,WAAW,YAAY;IACzB;;;;OAIG;IACH,sBAAsB,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAA;KAAE,GAAG,IAAI,GACpD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;CAClD;AAED,8FAA8F;AAC9F,qBAAa,mBAAoB,SAAQ,kBAAkB;;IAMvD;;;;;OAKG;gBACS,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY;IAOrG;;;;;;OAMG;IACG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7E;;;;;;OAMG;IACG,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/E;;;;;OAKG;IACG,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpF;;;;;OAKG;IACG,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAItF;;;;;;OAMG;IACG,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9F;;;;;;OAMG;IACG,uBAAuB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhG;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMzC;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAO5C,qEAAqE;IAC/D,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BtC;;;;;OAKG;IACG,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA+JnF;;;;;OAKG;IACG,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA2FxF"}