dolphin-server-modules 2.11.1 → 2.11.2

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 (115) hide show
  1. package/TUTORIAL_NEPALI.md +181 -0
  2. package/dist/adapters/mongoose/index.test.d.ts +1 -0
  3. package/dist/adapters/mongoose/index.test.js +145 -0
  4. package/dist/adapters/mongoose/index.test.js.map +1 -0
  5. package/dist/adapters/mongoose/integration.test.d.ts +5 -0
  6. package/dist/adapters/mongoose/integration.test.js +217 -0
  7. package/dist/adapters/mongoose/integration.test.js.map +1 -0
  8. package/dist/ai/dolphin-agent/agent.d.ts +5 -0
  9. package/dist/ai/dolphin-agent/agent.js +93 -46
  10. package/dist/ai/dolphin-agent/agent.js.map +1 -1
  11. package/dist/ai/dolphin-agent/config.js +19 -23
  12. package/dist/ai/dolphin-agent/config.js.map +1 -1
  13. package/dist/auth/auth.test.d.ts +1 -0
  14. package/dist/auth/auth.test.js +286 -0
  15. package/dist/auth/auth.test.js.map +1 -0
  16. package/dist/authController/authController.js +1 -1
  17. package/dist/authController/authController.js.map +1 -1
  18. package/dist/authController/authController.test.d.ts +1 -0
  19. package/dist/authController/authController.test.js +359 -0
  20. package/dist/authController/authController.test.js.map +1 -0
  21. package/dist/bin/cli.js +494 -131
  22. package/dist/bin/cli.js.map +1 -1
  23. package/dist/client.test.d.ts +22 -0
  24. package/dist/client.test.js +573 -0
  25. package/dist/client.test.js.map +1 -0
  26. package/dist/controller/controller.test.d.ts +1 -0
  27. package/dist/controller/controller.test.js +37 -0
  28. package/dist/controller/controller.test.js.map +1 -0
  29. package/dist/curd/crud.test.d.ts +1 -0
  30. package/dist/curd/crud.test.js +104 -0
  31. package/dist/curd/crud.test.js.map +1 -0
  32. package/dist/demo-server.d.ts +1 -0
  33. package/dist/demo-server.js +191 -0
  34. package/dist/demo-server.js.map +1 -0
  35. package/dist/djson/djson.test.d.ts +1 -0
  36. package/dist/djson/djson.test.js +200 -0
  37. package/dist/djson/djson.test.js.map +1 -0
  38. package/dist/dolphin-bench.d.ts +1 -0
  39. package/dist/dolphin-bench.js +63 -0
  40. package/dist/dolphin-bench.js.map +1 -0
  41. package/dist/hard-performance-test.d.ts +1 -0
  42. package/dist/hard-performance-test.js +97 -0
  43. package/dist/hard-performance-test.js.map +1 -0
  44. package/dist/index.d.ts +4 -4
  45. package/dist/index.js +4 -4
  46. package/dist/index.js.map +1 -1
  47. package/dist/middleware/zod.test.d.ts +1 -0
  48. package/dist/middleware/zod.test.js +74 -0
  49. package/dist/middleware/zod.test.js.map +1 -0
  50. package/dist/performance-test.d.ts +1 -0
  51. package/dist/performance-test.js +92 -0
  52. package/dist/performance-test.js.map +1 -0
  53. package/dist/real-test-mongoose.d.ts +1 -0
  54. package/dist/real-test-mongoose.js +104 -0
  55. package/dist/real-test-mongoose.js.map +1 -0
  56. package/dist/realtime/camera.d.ts +119 -0
  57. package/dist/realtime/camera.js +299 -0
  58. package/dist/realtime/camera.js.map +1 -0
  59. package/dist/realtime/camera.test.d.ts +1 -0
  60. package/dist/realtime/camera.test.js +345 -0
  61. package/dist/realtime/camera.test.js.map +1 -0
  62. package/dist/realtime/core.d.ts +5 -5
  63. package/dist/realtime/core.js +6 -6
  64. package/dist/realtime/core.js.map +1 -1
  65. package/dist/realtime/index.d.ts +6 -4
  66. package/dist/realtime/index.js +6 -4
  67. package/dist/realtime/index.js.map +1 -1
  68. package/dist/realtime/realtime.test.d.ts +1 -0
  69. package/dist/realtime/realtime.test.js +623 -0
  70. package/dist/realtime/realtime.test.js.map +1 -0
  71. package/dist/realtime/rtsp.d.ts +65 -0
  72. package/dist/realtime/rtsp.js +410 -0
  73. package/dist/realtime/rtsp.js.map +1 -0
  74. package/dist/realtime/rtsp.test.d.ts +1 -0
  75. package/dist/realtime/rtsp.test.js +361 -0
  76. package/dist/realtime/rtsp.test.js.map +1 -0
  77. package/dist/router/router.test.d.ts +1 -0
  78. package/dist/router/router.test.js +45 -0
  79. package/dist/router/router.test.js.map +1 -0
  80. package/dist/server/server.d.ts +8 -8
  81. package/dist/server/server.js +2 -11
  82. package/dist/server/server.js.map +1 -1
  83. package/dist/server/server.test.d.ts +1 -0
  84. package/dist/server/server.test.js +299 -0
  85. package/dist/server/server.test.js.map +1 -0
  86. package/dist/services/ai-service.js +22 -11
  87. package/dist/services/ai-service.js.map +1 -1
  88. package/dist/signaling/index.d.ts +1 -1
  89. package/dist/signaling/signaling.test.d.ts +1 -0
  90. package/dist/signaling/signaling.test.js +112 -0
  91. package/dist/signaling/signaling.test.js.map +1 -0
  92. package/dist/swagger/swagger.test.d.ts +1 -0
  93. package/dist/swagger/swagger.test.js +38 -0
  94. package/dist/swagger/swagger.test.js.map +1 -0
  95. package/dist/templates/index.d.ts +6 -0
  96. package/dist/templates/index.js +247 -70
  97. package/dist/templates/index.js.map +1 -1
  98. package/dist/test-2fa-real.d.ts +1 -0
  99. package/dist/test-2fa-real.js +105 -0
  100. package/dist/test-2fa-real.js.map +1 -0
  101. package/dist/test-dolphin.d.ts +1 -0
  102. package/dist/test-dolphin.js +98 -0
  103. package/dist/test-dolphin.js.map +1 -0
  104. package/dist/utils/ctx.d.ts +50 -0
  105. package/dist/utils/ctx.js +82 -0
  106. package/dist/utils/ctx.js.map +1 -0
  107. package/package.json +156 -65
  108. package/scripts/client.js +838 -703
  109. package/scripts/benchmark.js +0 -12
  110. package/scripts/benchmark.ts +0 -12
  111. package/scripts/list-models.js +0 -34
  112. package/scripts/run-real-ai-test.js +0 -79
  113. package/scripts/test-ai-logic.js +0 -44
  114. package/scripts/test-client.js +0 -105
  115. package/scripts/test-dolphin.js +0 -36
@@ -0,0 +1,573 @@
1
+ "use strict";
2
+ /**
3
+ * client.test.ts — DolphinClient को लागि Jest unit tests
4
+ *
5
+ * Test गरिएका कुराहरू:
6
+ * - DolphinClient constructor + URL parsing
7
+ * - setToken / storage
8
+ * - APIHandler (proxy path building, request, timeout, 401 auto-refresh)
9
+ * - AuthHandler (login, logout, refresh, 2FA)
10
+ * - _matchTopic (MQTT wildcards)
11
+ * - pub/sub (subscribe / unsubscribe / publish / offline queue)
12
+ * - pubFile (chunked file upload)
13
+ * - _uint8ToBase64
14
+ * - DolphinStore (collection, where, orderBy, remote update)
15
+ * - disconnect
16
+ */
17
+ // Custom jest-esm-strip-transform.cjs ले automatically ESM export line strip गर्छ
18
+ // त्यसैले सिधै client.js import गर्न मिल्छ — client.cjs manually बनाउनु पर्दैन
19
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
20
+ const { DolphinClient } = require('../scripts/client.js');
21
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
22
+ /** Build a fake WebSocket that triggers onopen immediately */
23
+ function makeFakeWS(overrides = {}) {
24
+ const ws = {
25
+ readyState: 1 /* OPEN */,
26
+ sent: [],
27
+ send(msg) { this.sent.push(msg); },
28
+ close() { if (this.onclose)
29
+ this.onclose(); },
30
+ onopen: null,
31
+ onmessage: null,
32
+ onclose: null,
33
+ onerror: null,
34
+ ...overrides,
35
+ };
36
+ return ws;
37
+ }
38
+ /** Inject a fake WebSocket constructor into global scope */
39
+ function injectFakeWS(ws) {
40
+ global.WebSocket = class {
41
+ static OPEN = 1;
42
+ readyState = ws.readyState;
43
+ sent = ws.sent;
44
+ send = ws.send.bind(ws);
45
+ close = ws.close.bind(ws);
46
+ set onopen(v) { ws.onopen = v; }
47
+ get onopen() { return ws.onopen; }
48
+ set onmessage(v) { ws.onmessage = v; }
49
+ get onmessage() { return ws.onmessage; }
50
+ set onclose(v) { ws.onclose = v; }
51
+ get onclose() { return ws.onclose; }
52
+ set onerror(v) { ws.onerror = v; }
53
+ get onerror() { return ws.onerror; }
54
+ constructor() { setTimeout(() => ws.onopen && ws.onopen(), 0); }
55
+ };
56
+ }
57
+ /** Build a fake fetch that resolves with the given body */
58
+ function makeFetch(status, body, contentType = 'application/json') {
59
+ return jest.fn().mockResolvedValue({
60
+ ok: status >= 200 && status < 300,
61
+ status,
62
+ headers: { get: () => contentType },
63
+ json: async () => body,
64
+ text: async () => JSON.stringify(body),
65
+ });
66
+ }
67
+ // ─────────────────────────────────────────────────────────────────────────────
68
+ // 1. Constructor + URL parsing
69
+ // ─────────────────────────────────────────────────────────────────────────────
70
+ describe('DolphinClient — constructor', () => {
71
+ test('http:// URL parse गर्छ', () => {
72
+ const c = new DolphinClient('http://localhost:3000');
73
+ expect(c.httpUrl).toBe('http://localhost:3000');
74
+ expect(c.host).toBe('localhost:3000');
75
+ });
76
+ test('https:// URL parse गर्छ', () => {
77
+ const c = new DolphinClient('https://example.com');
78
+ expect(c.httpUrl).toBe('https://example.com');
79
+ });
80
+ test('trailing slash हटाउँछ', () => {
81
+ const c = new DolphinClient('http://localhost:3000/');
82
+ expect(c.host).toBe('localhost:3000');
83
+ });
84
+ test('default options सेट हुन्छन्', () => {
85
+ const c = new DolphinClient('http://localhost:3000');
86
+ expect(c.options.timeout).toBe(15000);
87
+ expect(c.options.chunkSize).toBe(65536);
88
+ expect(c.options.maxReconnect).toBe(5);
89
+ expect(c.options.autoRefreshToken).toBe(true);
90
+ });
91
+ test('custom options override हुन्छन्', () => {
92
+ const c = new DolphinClient('http://localhost:3000', 'dev1', { timeout: 5000, maxReconnect: 2 });
93
+ expect(c.options.timeout).toBe(5000);
94
+ expect(c.options.maxReconnect).toBe(2);
95
+ });
96
+ test('deviceId custom सेट हुन्छ', () => {
97
+ const c = new DolphinClient('http://localhost:3000', 'myDevice');
98
+ expect(c.deviceId).toBe('myDevice');
99
+ });
100
+ test('deviceId auto-generate हुन्छ जब दिइँदैन', () => {
101
+ const c = new DolphinClient('http://localhost:3000');
102
+ expect(c.deviceId).toMatch(/^web_/);
103
+ });
104
+ });
105
+ // ─────────────────────────────────────────────────────────────────────────────
106
+ // 2. setToken
107
+ // ─────────────────────────────────────────────────────────────────────────────
108
+ describe('DolphinClient — setToken', () => {
109
+ let c;
110
+ let store;
111
+ beforeEach(() => {
112
+ store = {};
113
+ c = new DolphinClient('http://localhost:3000');
114
+ c.storage = {
115
+ getItem: (k) => store[k] ?? null,
116
+ setItem: (k, v) => { store[k] = v; },
117
+ removeItem: (k) => { delete store[k]; },
118
+ };
119
+ });
120
+ test('token set र storage मा save गर्छ', () => {
121
+ c.setToken('abc123');
122
+ expect(c.accessToken).toBe('abc123');
123
+ expect(store['dolphin_token']).toBe('abc123');
124
+ });
125
+ test('null दिँदा token clear हुन्छ', () => {
126
+ c.setToken('abc123');
127
+ c.setToken(null);
128
+ expect(c.accessToken).toBeNull();
129
+ expect(store['dolphin_token']).toBeUndefined();
130
+ });
131
+ });
132
+ // ─────────────────────────────────────────────────────────────────────────────
133
+ // 3. APIHandler — proxy path building
134
+ // ─────────────────────────────────────────────────────────────────────────────
135
+ describe('APIHandler — proxy paths', () => {
136
+ let c;
137
+ beforeEach(() => {
138
+ c = new DolphinClient('http://localhost:3000');
139
+ global.fetch = makeFetch(200, { ok: true });
140
+ });
141
+ afterEach(() => { delete global.fetch; });
142
+ test('api.users.get() → /users मा GET request', async () => {
143
+ await c.api.users.get();
144
+ const url = global.fetch.mock.calls[0][0];
145
+ expect(url).toBe('http://localhost:3000/users');
146
+ });
147
+ test('api.users.posts.get() → /users/posts', async () => {
148
+ await c.api.users.posts.get();
149
+ const url = global.fetch.mock.calls[0][0];
150
+ expect(url).toBe('http://localhost:3000/users/posts');
151
+ });
152
+ test('api.users.post(body) → POST /users', async () => {
153
+ await c.api.users.post({ name: 'Ram' });
154
+ const [url, opts] = global.fetch.mock.calls[0];
155
+ expect(url).toBe('http://localhost:3000/users');
156
+ expect(opts.method).toBe('POST');
157
+ expect(JSON.parse(opts.body)).toEqual({ name: 'Ram' });
158
+ });
159
+ test('api.users.del() → DELETE /users', async () => {
160
+ await c.api.users.del();
161
+ const [, opts] = global.fetch.mock.calls[0];
162
+ expect(opts.method).toBe('DELETE');
163
+ });
164
+ test('Authorization header token हुँदा लाग्छ', async () => {
165
+ c.setToken('tok99');
166
+ await c.api.me.get();
167
+ const [, opts] = global.fetch.mock.calls[0];
168
+ expect(opts.headers['Authorization']).toBe('Bearer tok99');
169
+ });
170
+ });
171
+ // ─────────────────────────────────────────────────────────────────────────────
172
+ // 4. APIHandler — request timeout
173
+ // ─────────────────────────────────────────────────────────────────────────────
174
+ describe('APIHandler — timeout', () => {
175
+ test('AbortError → 408 थ्रो गर्छ', async () => {
176
+ const c = new DolphinClient('http://localhost:3000', '', { timeout: 100 });
177
+ global.fetch = jest.fn().mockRejectedValue(Object.assign(new Error('abort'), { name: 'AbortError' }));
178
+ await expect(c.api.request('GET', '/slow', null)).rejects.toMatchObject({ status: 408 });
179
+ delete global.fetch;
180
+ });
181
+ });
182
+ // ─────────────────────────────────────────────────────────────────────────────
183
+ // 5. APIHandler — 401 auto-refresh
184
+ // ─────────────────────────────────────────────────────────────────────────────
185
+ describe('APIHandler — 401 auto-refresh', () => {
186
+ test('401 मा token refresh गरेर retry गर्छ', async () => {
187
+ const c = new DolphinClient('http://localhost:3000');
188
+ let callCount = 0;
189
+ global.fetch = jest.fn().mockImplementation(() => {
190
+ callCount++;
191
+ if (callCount === 1) {
192
+ // First call → 401
193
+ return Promise.resolve({
194
+ ok: false, status: 401,
195
+ headers: { get: () => 'application/json' },
196
+ json: async () => ({ error: 'Unauthorized' }),
197
+ });
198
+ }
199
+ if (callCount === 2) {
200
+ // Refresh call → new token
201
+ return Promise.resolve({
202
+ ok: true, status: 200,
203
+ headers: { get: () => 'application/json' },
204
+ json: async () => ({ accessToken: 'newTok' }),
205
+ });
206
+ }
207
+ // Retry call → success
208
+ return Promise.resolve({
209
+ ok: true, status: 200,
210
+ headers: { get: () => 'application/json' },
211
+ json: async () => ({ data: 'ok' }),
212
+ });
213
+ });
214
+ const res = await c.api.request('GET', '/protected');
215
+ expect(res).toEqual({ data: 'ok' });
216
+ expect(c.accessToken).toBe('newTok');
217
+ delete global.fetch;
218
+ });
219
+ });
220
+ // ─────────────────────────────────────────────────────────────────────────────
221
+ // 6. AuthHandler
222
+ // ─────────────────────────────────────────────────────────────────────────────
223
+ describe('AuthHandler', () => {
224
+ let c;
225
+ beforeEach(() => {
226
+ c = new DolphinClient('http://localhost:3000');
227
+ });
228
+ afterEach(() => { delete global.fetch; });
229
+ test('login — token र user set गर्छ', async () => {
230
+ global.fetch = makeFetch(200, { accessToken: 'tok1', user: { id: 1, email: 'a@b.com' } });
231
+ await c.auth.login('a@b.com', 'pass');
232
+ expect(c.accessToken).toBe('tok1');
233
+ expect(c.auth.user).toEqual({ id: 1, email: 'a@b.com' });
234
+ });
235
+ test('logout — token clear गर्छ', async () => {
236
+ global.fetch = makeFetch(200, {});
237
+ c.setToken('tok1');
238
+ await c.auth.logout();
239
+ expect(c.accessToken).toBeNull();
240
+ expect(c.auth.user).toBeNull();
241
+ });
242
+ test('register — POST /auth/register', async () => {
243
+ global.fetch = makeFetch(200, { success: true });
244
+ await c.auth.register({ email: 'new@b.com', password: '123456' });
245
+ const [url, opts] = global.fetch.mock.calls[0];
246
+ expect(url).toContain('/auth/register');
247
+ expect(opts.method).toBe('POST');
248
+ });
249
+ test('me — user update गर्छ', async () => {
250
+ global.fetch = makeFetch(200, { success: true, data: { id: 2 } });
251
+ await c.auth.me();
252
+ expect(c.auth.user).toEqual({ id: 2 });
253
+ });
254
+ test('verify2FA — token set गर्छ', async () => {
255
+ global.fetch = makeFetch(200, { accessToken: 'tok2fa', user: { id: 3 } });
256
+ c.auth.user = { email: 'x@y.com' };
257
+ await c.auth.verify2FA('123456');
258
+ expect(c.accessToken).toBe('tok2fa');
259
+ expect(c.auth.user).toEqual({ id: 3 });
260
+ });
261
+ test('forgotPassword — POST /auth/forgot-password', async () => {
262
+ global.fetch = makeFetch(200, { success: true });
263
+ await c.auth.forgotPassword('test@example.com');
264
+ const [url] = global.fetch.mock.calls[0];
265
+ expect(url).toContain('/auth/forgot-password');
266
+ });
267
+ test('resetPassword — POST /auth/reset-password', async () => {
268
+ global.fetch = makeFetch(200, { success: true });
269
+ await c.auth.resetPassword('reset-tok', 'newPass');
270
+ const [url, opts] = global.fetch.mock.calls[0];
271
+ expect(url).toContain('/auth/reset-password');
272
+ expect(JSON.parse(opts.body)).toEqual({ token: 'reset-tok', newPassword: 'newPass' });
273
+ });
274
+ });
275
+ // ─────────────────────────────────────────────────────────────────────────────
276
+ // 7. _matchTopic — MQTT wildcard matching
277
+ // ─────────────────────────────────────────────────────────────────────────────
278
+ describe('_matchTopic — MQTT wildcards', () => {
279
+ let c;
280
+ beforeAll(() => { c = new DolphinClient('http://localhost:3000'); });
281
+ const cases = [
282
+ ['sensor/temp', 'sensor/temp', true],
283
+ ['sensor/+', 'sensor/temp', true],
284
+ ['sensor/+', 'sensor/humid', true],
285
+ ['sensor/+', 'sensor/a/b', false],
286
+ ['#', 'anything/deep/path', true],
287
+ ['sensor/#', 'sensor/a/b/c', true],
288
+ ['sensor/#', 'other/topic', false],
289
+ ['a/b/c', 'a/b/d', false],
290
+ ['a/b', 'a/b/c', false],
291
+ ];
292
+ test.each(cases)('pattern="%s" topic="%s" → %s', (pattern, topic, expected) => {
293
+ expect(c._matchTopic(pattern, topic)).toBe(expected);
294
+ });
295
+ });
296
+ // ─────────────────────────────────────────────────────────────────────────────
297
+ // 8. Pub/Sub — subscribe / unsubscribe / publish
298
+ // ─────────────────────────────────────────────────────────────────────────────
299
+ describe('Pub/Sub', () => {
300
+ let c;
301
+ let ws;
302
+ beforeEach(() => {
303
+ ws = makeFakeWS();
304
+ injectFakeWS(ws);
305
+ c = new DolphinClient('http://localhost:3000');
306
+ });
307
+ afterEach(() => { delete global.WebSocket; });
308
+ test('subscribe — handler register हुन्छ', () => {
309
+ const cb = jest.fn();
310
+ c.subscribe('news', cb);
311
+ expect(c.handlers.has('news')).toBe(true);
312
+ });
313
+ test('subscribe — WS मा sub message पठाउँछ (जब connected)', async () => {
314
+ await c.connect();
315
+ const cb = jest.fn();
316
+ c.subscribe('chat', cb);
317
+ const subMsg = ws.sent.find((s) => {
318
+ try {
319
+ return JSON.parse(s).type === 'sub';
320
+ }
321
+ catch {
322
+ return false;
323
+ }
324
+ });
325
+ expect(subMsg).toBeDefined();
326
+ });
327
+ test('unsubscribe — handler हटाउँछ', () => {
328
+ const cb = jest.fn();
329
+ c.subscribe('room', cb);
330
+ c.unsubscribe('room', cb);
331
+ expect(c.handlers.has('room')).toBe(false);
332
+ });
333
+ test('publish — WS मा message पठाउँछ', async () => {
334
+ await c.connect();
335
+ c.publish('topic1', { hello: 'world' });
336
+ const pub = ws.sent.find((s) => {
337
+ try {
338
+ const p = JSON.parse(s);
339
+ return p.topic === 'topic1';
340
+ }
341
+ catch {
342
+ return false;
343
+ }
344
+ });
345
+ expect(pub).toBeDefined();
346
+ expect(JSON.parse(pub).payload).toEqual({ hello: 'world' });
347
+ });
348
+ test('_handleMessage — topic callback fire हुन्छ', () => {
349
+ const cb = jest.fn();
350
+ c.subscribe('data/sensor', cb);
351
+ c._handleMessage(JSON.stringify({ topic: 'data/sensor', payload: { v: 42 } }));
352
+ expect(cb).toHaveBeenCalledWith({ v: 42 }, 'data/sensor');
353
+ });
354
+ test('+ wildcard — matching topic मा callback fire हुन्छ', () => {
355
+ const cb = jest.fn();
356
+ c.subscribe('data/+', cb);
357
+ c._handleMessage(JSON.stringify({ topic: 'data/temp', payload: 25 }));
358
+ expect(cb).toHaveBeenCalledWith(25, 'data/temp');
359
+ });
360
+ test('# wildcard — सबै subtopic मा callback fire हुन्छ', () => {
361
+ const cb = jest.fn();
362
+ c.subscribe('data/#', cb);
363
+ c._handleMessage(JSON.stringify({ topic: 'data/a/b/c', payload: 99 }));
364
+ expect(cb).toHaveBeenCalledWith(99, 'data/a/b/c');
365
+ });
366
+ });
367
+ // ─────────────────────────────────────────────────────────────────────────────
368
+ // 9. Offline queue
369
+ // ─────────────────────────────────────────────────────────────────────────────
370
+ describe('Offline queue', () => {
371
+ test('socket नभएको बेला message queue मा जान्छ', () => {
372
+ const c = new DolphinClient('http://localhost:3000');
373
+ c.socket = null;
374
+ c.publish('topic', { x: 1 });
375
+ expect(c._offlineQueue.length).toBe(1);
376
+ });
377
+ test('connect भएपछि queue flush हुन्छ', async () => {
378
+ const ws = makeFakeWS();
379
+ injectFakeWS(ws);
380
+ const c = new DolphinClient('http://localhost:3000');
381
+ c._offlineQueue.push(JSON.stringify({ topic: 'q', payload: 'hi' }));
382
+ await c.connect();
383
+ expect(c._offlineQueue.length).toBe(0);
384
+ delete global.WebSocket;
385
+ });
386
+ test('100 भन्दा बढी queue हुँदैन', () => {
387
+ const c = new DolphinClient('http://localhost:3000');
388
+ c.socket = null;
389
+ for (let i = 0; i < 150; i++)
390
+ c.publish('t', i);
391
+ expect(c._offlineQueue.length).toBe(100);
392
+ });
393
+ });
394
+ // ─────────────────────────────────────────────────────────────────────────────
395
+ // 10. pubFile — chunked file upload
396
+ // ─────────────────────────────────────────────────────────────────────────────
397
+ describe('pubFile — chunked upload', () => {
398
+ let c;
399
+ let ws;
400
+ beforeEach(async () => {
401
+ ws = makeFakeWS();
402
+ injectFakeWS(ws);
403
+ c = new DolphinClient('http://localhost:3000', '', { chunkSize: 4 });
404
+ await c.connect();
405
+ });
406
+ afterEach(() => { delete global.WebSocket; });
407
+ test('FILE_UPLOAD_START + CHUNK + DONE messages पठाउँछ', async () => {
408
+ const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); // 8 bytes → 2 chunks of 4
409
+ await c.pubFile('file1', data, 'test.bin');
410
+ const msgs = ws.sent.map((s) => JSON.parse(s));
411
+ const start = msgs.find((m) => m.type === 'FILE_UPLOAD_START');
412
+ const chunks = msgs.filter((m) => m.type === 'FILE_UPLOAD_CHUNK');
413
+ const done = msgs.find((m) => m.type === 'FILE_UPLOAD_DONE');
414
+ expect(start).toBeDefined();
415
+ expect(start.fileId).toBe('file1');
416
+ expect(start.totalChunks).toBe(2);
417
+ expect(chunks).toHaveLength(2);
418
+ expect(done).toBeDefined();
419
+ });
420
+ test('onProgress callback सही percent call हुन्छ', async () => {
421
+ const data = new Uint8Array([1, 2, 3, 4]);
422
+ const progress = [];
423
+ await c.pubFile('file2', data, 'tiny.bin', (p) => progress.push(p));
424
+ expect(progress).toContain(100);
425
+ });
426
+ });
427
+ // ─────────────────────────────────────────────────────────────────────────────
428
+ // 11. _uint8ToBase64
429
+ // ─────────────────────────────────────────────────────────────────────────────
430
+ describe('_uint8ToBase64', () => {
431
+ let c;
432
+ beforeAll(() => { c = new DolphinClient('http://localhost:3000'); });
433
+ test('empty array → empty string', () => {
434
+ expect(c._uint8ToBase64(new Uint8Array([]))).toBe('');
435
+ });
436
+ test('known bytes → correct base64', () => {
437
+ // [72, 101, 108, 108, 111] = "Hello"
438
+ const result = c._uint8ToBase64(new Uint8Array([72, 101, 108, 108, 111]));
439
+ expect(result).toBe('SGVsbG8=');
440
+ });
441
+ });
442
+ // ─────────────────────────────────────────────────────────────────────────────
443
+ // 12. Signaling handlers
444
+ // ─────────────────────────────────────────────────────────────────────────────
445
+ describe('Signaling handlers', () => {
446
+ let c;
447
+ beforeEach(() => {
448
+ c = new DolphinClient('http://localhost:3000', 'deviceA');
449
+ });
450
+ test('onSignal — handler register र fire हुन्छ', () => {
451
+ const handler = jest.fn();
452
+ c.onSignal(handler);
453
+ c._handleMessage(JSON.stringify({
454
+ msgId: 'm1', type: 'offer', from: 'deviceB', to: 'deviceA', data: {}, timestamp: Date.now()
455
+ }));
456
+ expect(handler).toHaveBeenCalled();
457
+ });
458
+ test('offSignal — handler हटाइन्छ', () => {
459
+ const handler = jest.fn();
460
+ c.onSignal(handler);
461
+ c.offSignal(handler);
462
+ c._handleMessage(JSON.stringify({
463
+ msgId: 'm2', type: 'offer', from: 'deviceB', to: 'deviceA', data: {}, timestamp: Date.now()
464
+ }));
465
+ expect(handler).not.toHaveBeenCalled();
466
+ });
467
+ test('onFileAvailable — handler register हुन्छ', () => {
468
+ const handler = jest.fn();
469
+ c.onFileAvailable(handler);
470
+ c._handleMessage(JSON.stringify({ type: 'FILE_AVAILABLE', fileId: 'f1', name: 'img.png', size: 1024, totalChunks: 1, chunkSize: 65536 }));
471
+ expect(handler).toHaveBeenCalled();
472
+ });
473
+ });
474
+ // ─────────────────────────────────────────────────────────────────────────────
475
+ // 13. DolphinStore — collection management
476
+ // ─────────────────────────────────────────────────────────────────────────────
477
+ describe('DolphinStore', () => {
478
+ let c;
479
+ beforeEach(() => {
480
+ c = new DolphinClient('http://localhost:3000');
481
+ // Stub fetch to return empty list (store does HTTP GET)
482
+ global.fetch = makeFetch(200, []);
483
+ });
484
+ afterEach(() => { delete global.fetch; });
485
+ test('store.users access → collection object return गर्छ', () => {
486
+ const col = c.store.users;
487
+ expect(col).toBeDefined();
488
+ expect(col.loading).toBe(true);
489
+ expect(col.items).toEqual([]);
490
+ });
491
+ test('getSnapshot — default state return गर्छ जब collection छैन', () => {
492
+ const snap = c.store.getSnapshot('nonexistent');
493
+ expect(snap).toEqual({ items: [], loading: false, error: null, success: false });
494
+ });
495
+ test('subscribe listener — notify हुन्छ', async () => {
496
+ const listener = jest.fn();
497
+ const unsub = c.store.subscribe(listener);
498
+ // Trigger a remote update manually
499
+ c.store.data.set('items', { _rawItems: [{ id: 1 }], items: [], loading: false, success: true, error: null, _filter: null, _sort: null });
500
+ c.store._applyTransform(c.store.data.get('items'));
501
+ expect(listener).toHaveBeenCalled();
502
+ unsub();
503
+ });
504
+ test('_handleRemoteUpdate — create: item थपिन्छ', () => {
505
+ c.store.data.set('posts', {
506
+ _rawItems: [{ _id: 'a', title: 'First' }],
507
+ items: [], loading: false, success: true, error: null, _filter: null, _sort: null,
508
+ });
509
+ c.store._handleRemoteUpdate('posts', { type: 'create', data: { _id: 'b', title: 'Second' } });
510
+ const col = c.store.data.get('posts');
511
+ expect(col._rawItems).toHaveLength(2);
512
+ });
513
+ test('_handleRemoteUpdate — update: item update हुन्छ', () => {
514
+ c.store.data.set('posts', {
515
+ _rawItems: [{ _id: 'a', title: 'Old' }],
516
+ items: [], loading: false, success: true, error: null, _filter: null, _sort: null,
517
+ });
518
+ c.store._handleRemoteUpdate('posts', { type: 'update', data: { _id: 'a', title: 'New' } });
519
+ expect(c.store.data.get('posts')._rawItems[0].title).toBe('New');
520
+ });
521
+ test('_handleRemoteUpdate — delete: item हटाइन्छ', () => {
522
+ c.store.data.set('posts', {
523
+ _rawItems: [{ _id: 'a' }, { _id: 'b' }],
524
+ items: [], loading: false, success: true, error: null, _filter: null, _sort: null,
525
+ });
526
+ c.store._handleRemoteUpdate('posts', { type: 'delete', data: { _id: 'a' } });
527
+ expect(c.store.data.get('posts')._rawItems).toHaveLength(1);
528
+ });
529
+ test('where filter लाग्छ', () => {
530
+ const col = {
531
+ _rawItems: [{ id: 1, active: true }, { id: 2, active: false }],
532
+ items: [], loading: false, success: true, error: null, _filter: null, _sort: null,
533
+ where: (fn) => { col._filter = fn; c.store._applyTransform(col); return col; },
534
+ orderBy: () => col,
535
+ reset: () => col,
536
+ };
537
+ c.store.data.set('filter_test', col);
538
+ col.where((item) => item.active);
539
+ expect(col.items).toHaveLength(1);
540
+ expect(col.items[0].id).toBe(1);
541
+ });
542
+ test('orderBy sort लाग्छ', () => {
543
+ const col = {
544
+ _rawItems: [{ id: 2 }, { id: 1 }, { id: 3 }],
545
+ items: [], loading: false, success: true, error: null, _filter: null, _sort: null,
546
+ where: () => col,
547
+ orderBy: (key, dir = 'asc') => {
548
+ col._sort = { key, direction: dir };
549
+ c.store._applyTransform(col);
550
+ return col;
551
+ },
552
+ reset: () => col,
553
+ };
554
+ c.store.data.set('sort_test', col);
555
+ col.orderBy('id', 'asc');
556
+ expect(col.items.map((i) => i.id)).toEqual([1, 2, 3]);
557
+ });
558
+ });
559
+ // ─────────────────────────────────────────────────────────────────────────────
560
+ // 14. disconnect
561
+ // ─────────────────────────────────────────────────────────────────────────────
562
+ describe('disconnect', () => {
563
+ test('socket null गर्छ र auto-reconnect हुँदैन', async () => {
564
+ const ws = makeFakeWS();
565
+ injectFakeWS(ws);
566
+ const c = new DolphinClient('http://localhost:3000');
567
+ await c.connect();
568
+ c.disconnect();
569
+ expect(c.socket).toBeNull();
570
+ delete global.WebSocket;
571
+ });
572
+ });
573
+ //# sourceMappingURL=client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../src/client.test.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;AAEH,kFAAkF;AAClF,+EAA+E;AAC/E,8DAA8D;AAC9D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAE1D,iFAAiF;AAEjF,8DAA8D;AAC9D,SAAS,UAAU,CAAC,YAAgC,EAAE;IACpD,MAAM,EAAE,GAAQ;QACd,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,IAAI,EAAE,EAAc;QACpB,IAAI,CAAC,GAAW,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1C,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,EAAE,IAAW;QACnB,SAAS,EAAE,IAAW;QACtB,OAAO,EAAE,IAAW;QACpB,OAAO,EAAE,IAAW;QACpB,GAAG,SAAS;KACb,CAAC;IACF,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,4DAA4D;AAC5D,SAAS,YAAY,CAAC,EAAO;IAC1B,MAAc,CAAC,SAAS,GAAG;QAC1B,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QAChB,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;QAC3B,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;QACf,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,CAAM,IAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,MAAM,KAAc,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,IAAI,SAAS,CAAC,CAAM,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAW,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,CAAM,IAAM,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,OAAO,KAAa,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,CAAM,IAAM,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,OAAO,KAAa,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,gBAAgB,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,SAAS,SAAS,CAAC,MAAc,EAAE,IAAS,EAAE,WAAW,GAAG,kBAAkB;IAC5E,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;QACjC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QACjC,MAAM;QACN,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QACtB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KACvC,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,+BAA+B;AAC/B,gFAAgF;AAEhF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,wBAAwB,CAAC,CAAC;QACtD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QACjG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,CAAM,CAAC;IACX,IAAI,KAA6B,CAAC;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,GAAG,EAAE,CAAC;QACX,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QAC/C,CAAC,CAAC,OAAO,GAAG;YACV,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;YACxC,OAAO,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpD,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAEhF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,CAAM,CAAC;IAEX,UAAU,CAAC,GAAG,EAAE;QACd,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QAC9C,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,GAAG,OAAQ,MAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,MAAM,GAAG,GAAI,MAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAI,MAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAI,MAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,MAAM,CAAC,EAAE,IAAI,CAAC,GAAI,MAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,EAAE,IAAI,CAAC,GAAI,MAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,kCAAkC;AAClC,gFAAgF;AAEhF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,MAAc,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CACjD,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAC1D,CAAC;QACF,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACzF,OAAQ,MAAc,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,mCAAmC;AACnC,gFAAgF;AAEhF,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACrD,IAAI,SAAS,GAAG,CAAC,CAAC;QACjB,MAAc,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACxD,SAAS,EAAE,CAAC;YACZ,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,mBAAmB;gBACnB,OAAO,OAAO,CAAC,OAAO,CAAC;oBACrB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG;oBACtB,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;oBAC1C,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;iBAC9C,CAAC,CAAC;YACL,CAAC;YACD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,2BAA2B;gBAC3B,OAAO,OAAO,CAAC,OAAO,CAAC;oBACrB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG;oBACrB,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;oBAC1C,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;iBAC9C,CAAC,CAAC;YACL,CAAC;YACD,uBAAuB;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG;gBACrB,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;gBAC1C,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;aACnC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAQ,MAAc,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,CAAM,CAAC;IAEX,UAAU,CAAC,GAAG,EAAE;QACd,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,GAAG,OAAQ,MAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACnG,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnB,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAI,MAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACnC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,GAAI,MAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAI,MAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,0CAA0C;AAC1C,gFAAgF;AAEhF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,CAAM,CAAC;IACX,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,MAAM,KAAK,GAAgC;QACzC,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;QACpC,CAAC,UAAU,EAAI,aAAa,EAAE,IAAI,CAAC;QACnC,CAAC,UAAU,EAAI,cAAc,EAAE,IAAI,CAAC;QACpC,CAAC,UAAU,EAAI,YAAY,EAAE,KAAK,CAAC;QACnC,CAAC,GAAG,EAAW,oBAAoB,EAAE,IAAI,CAAC;QAC1C,CAAC,UAAU,EAAI,cAAc,EAAE,IAAI,CAAC;QACpC,CAAC,UAAU,EAAI,aAAa,EAAE,KAAK,CAAC;QACpC,CAAC,OAAO,EAAO,OAAO,EAAE,KAAK,CAAC;QAC9B,CAAC,KAAK,EAAS,OAAO,EAAE,KAAK,CAAC;KAC/B,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,8BAA8B,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC5E,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,iDAAiD;AACjD,gFAAgF;AAEhF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAI,CAAM,CAAC;IACX,IAAI,EAAO,CAAC;IAEZ,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,GAAG,UAAU,EAAE,CAAC;QAClB,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,GAAG,OAAQ,MAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE;YACxC,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,KAAK,CAAC;YAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE;YACrC,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,KAAK,CAAC;YAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACrD,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACrD,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,OAAQ,MAAc,CAAC,SAAS,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACrD,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;YAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,oCAAoC;AACpC,gFAAgF;AAEhF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,CAAM,CAAC;IACX,IAAI,EAAO,CAAC;IAEZ,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,GAAG,UAAU,EAAE,CAAC;QAClB,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,GAAG,OAAQ,MAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B;QACjF,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAE3C,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;QACvE,MAAM,IAAI,GAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;QAEnE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,CAAM,CAAC;IACX,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,qCAAqC;QACrC,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,CAAM,CAAC;IAEX,UAAU,CAAC,GAAG,EAAE;QACd,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9B,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SAC5F,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9B,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SAC5F,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1I,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,2CAA2C;AAC3C,gFAAgF;AAEhF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,CAAM,CAAC;IAEX,UAAU,CAAC,GAAG,EAAE;QACd,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QAC/C,wDAAwD;QACvD,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,GAAG,OAAQ,MAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC9D,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACrE,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1C,mCAAmC;QACnC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzI,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACpC,KAAK,EAAE,CAAC;IACV,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACrD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YACxB,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YACzC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;SAClF,CAAC,CAAC;QACH,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC3D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YACxB,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACvC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;SAClF,CAAC,CAAC;QACH,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACtD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YACxB,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACvC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;SAClF,CAAC,CAAC;QACH,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC9B,MAAM,GAAG,GAAQ;YACf,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC9D,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;YACjF,KAAK,EAAE,CAAC,EAAO,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACnF,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG;YAClB,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG;SACjB,CAAC;QACF,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC9B,MAAM,GAAG,GAAQ;YACf,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC5C,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;YACjF,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG;YAChB,OAAO,EAAE,CAAC,GAAW,EAAE,MAAc,KAAK,EAAE,EAAE;gBAC5C,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;gBACpC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBAC7B,OAAO,GAAG,CAAC;YACb,CAAC;YACD,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG;SACjB,CAAC;QACF,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACnC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC,CAAC,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,OAAQ,MAAc,CAAC,SAAS,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};