@klevar/portal-cli 0.1.0

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 (46) hide show
  1. package/.portal.env.example +3 -0
  2. package/README.md +100 -0
  3. package/dist/bin/klevar-portal.d.ts +2 -0
  4. package/dist/bin/klevar-portal.js +5 -0
  5. package/dist/bin/klevar-portal.js.map +1 -0
  6. package/dist/commands/_exemptions.d.ts +31 -0
  7. package/dist/commands/_exemptions.js +38 -0
  8. package/dist/commands/_exemptions.js.map +1 -0
  9. package/dist/commands/clients.d.ts +98 -0
  10. package/dist/commands/clients.js +17 -0
  11. package/dist/commands/clients.js.map +1 -0
  12. package/dist/commands/docs.d.ts +16 -0
  13. package/dist/commands/docs.js +5 -0
  14. package/dist/commands/docs.js.map +1 -0
  15. package/dist/commands/index.d.ts +518 -0
  16. package/dist/commands/index.js +22 -0
  17. package/dist/commands/index.js.map +1 -0
  18. package/dist/commands/metrics.d.ts +27 -0
  19. package/dist/commands/metrics.js +7 -0
  20. package/dist/commands/metrics.js.map +1 -0
  21. package/dist/commands/onboarding.d.ts +27 -0
  22. package/dist/commands/onboarding.js +7 -0
  23. package/dist/commands/onboarding.js.map +1 -0
  24. package/dist/commands/portal.d.ts +127 -0
  25. package/dist/commands/portal.js +23 -0
  26. package/dist/commands/portal.js.map +1 -0
  27. package/dist/commands/projects.d.ts +84 -0
  28. package/dist/commands/projects.js +16 -0
  29. package/dist/commands/projects.js.map +1 -0
  30. package/dist/commands/system.d.ts +57 -0
  31. package/dist/commands/system.js +12 -0
  32. package/dist/commands/system.js.map +1 -0
  33. package/dist/commands/tasks.d.ts +35 -0
  34. package/dist/commands/tasks.js +8 -0
  35. package/dist/commands/tasks.js.map +1 -0
  36. package/dist/commands/types.d.ts +12 -0
  37. package/dist/commands/types.js +2 -0
  38. package/dist/commands/types.js.map +1 -0
  39. package/dist/commands/updates.d.ts +42 -0
  40. package/dist/commands/updates.js +9 -0
  41. package/dist/commands/updates.js.map +1 -0
  42. package/dist/lib/legacy-runner.js +820 -0
  43. package/dist/portal.d.ts +1 -0
  44. package/dist/portal.js +25 -0
  45. package/dist/portal.js.map +1 -0
  46. package/package.json +29 -0
@@ -0,0 +1,518 @@
1
+ import type { CliCommand, CommandGroup } from './types.js';
2
+ export type { CliCommand, CommandGroup };
3
+ export declare const COMMAND_GROUPS: {
4
+ system: {
5
+ health: {
6
+ method: "GET";
7
+ path: string;
8
+ auth: "public";
9
+ description: string;
10
+ };
11
+ 'health.health': {
12
+ method: "GET";
13
+ path: string;
14
+ auth: "public";
15
+ description: string;
16
+ };
17
+ 'health.db': {
18
+ method: "GET";
19
+ path: string;
20
+ auth: "public";
21
+ description: string;
22
+ };
23
+ 'health.redis': {
24
+ method: "GET";
25
+ path: string;
26
+ auth: "public";
27
+ description: string;
28
+ };
29
+ 'tenant.info': {
30
+ method: "GET";
31
+ path: string;
32
+ auth: "apiKey";
33
+ description: string;
34
+ };
35
+ dashboard: {
36
+ method: "GET";
37
+ path: string;
38
+ auth: "apiKey";
39
+ description: string;
40
+ };
41
+ 'dashboard.stats': {
42
+ method: "GET";
43
+ path: string;
44
+ auth: "apiKey";
45
+ description: string;
46
+ };
47
+ search: {
48
+ method: "GET";
49
+ path: string;
50
+ auth: "apiKey";
51
+ description: string;
52
+ queryParams: string[];
53
+ };
54
+ 'search.admin': {
55
+ method: "GET";
56
+ path: string;
57
+ auth: "apiKey";
58
+ description: string;
59
+ };
60
+ };
61
+ clients: {
62
+ 'clients.tags': {
63
+ method: "GET";
64
+ path: string;
65
+ auth: "apiKey";
66
+ description: string;
67
+ };
68
+ 'clients.list': {
69
+ method: "GET";
70
+ path: string;
71
+ auth: "apiKey";
72
+ description: string;
73
+ queryParams: string[];
74
+ };
75
+ 'clients.create': {
76
+ method: "POST";
77
+ path: string;
78
+ auth: "apiKey";
79
+ description: string;
80
+ body: string[];
81
+ };
82
+ 'clients.get': {
83
+ method: "GET";
84
+ path: string;
85
+ auth: "apiKey";
86
+ description: string;
87
+ };
88
+ 'clients.update': {
89
+ method: "PATCH";
90
+ path: string;
91
+ auth: "apiKey";
92
+ description: string;
93
+ body: string[];
94
+ };
95
+ 'clients.delete': {
96
+ method: "DELETE";
97
+ path: string;
98
+ auth: "apiKey";
99
+ description: string;
100
+ };
101
+ 'clients.purge': {
102
+ method: "DELETE";
103
+ path: string;
104
+ auth: "apiKey";
105
+ description: string;
106
+ fixedQuery: {
107
+ hard: string;
108
+ };
109
+ };
110
+ 'clients.go-live': {
111
+ method: "PATCH";
112
+ path: string;
113
+ auth: "apiKey";
114
+ description: string;
115
+ fixedBody: {
116
+ notificationsEnabled: boolean;
117
+ };
118
+ };
119
+ 'clients.mute': {
120
+ method: "PATCH";
121
+ path: string;
122
+ auth: "apiKey";
123
+ description: string;
124
+ fixedBody: {
125
+ notificationsEnabled: boolean;
126
+ };
127
+ };
128
+ 'clients.rotate-token': {
129
+ method: "POST";
130
+ path: string;
131
+ auth: "apiKey";
132
+ description: string;
133
+ };
134
+ 'token.rotate': {
135
+ method: "POST";
136
+ path: string;
137
+ auth: "apiKey";
138
+ description: string;
139
+ };
140
+ 'clients.docs-sync': {
141
+ method: "POST";
142
+ path: string;
143
+ auth: "apiKey";
144
+ description: string;
145
+ };
146
+ 'clients.docs-invoices': {
147
+ method: "GET";
148
+ path: string;
149
+ auth: "apiKey";
150
+ description: string;
151
+ };
152
+ 'clients.docs-documents': {
153
+ method: "GET";
154
+ path: string;
155
+ auth: "apiKey";
156
+ description: string;
157
+ };
158
+ };
159
+ projects: {
160
+ 'projects.all': {
161
+ method: "GET";
162
+ path: string;
163
+ auth: "apiKey";
164
+ description: string;
165
+ queryParams: string[];
166
+ };
167
+ 'projects.list': {
168
+ method: "GET";
169
+ path: string;
170
+ auth: "apiKey";
171
+ description: string;
172
+ };
173
+ 'projects.create': {
174
+ method: "POST";
175
+ path: string;
176
+ auth: "apiKey";
177
+ description: string;
178
+ body: string[];
179
+ };
180
+ 'projects.get': {
181
+ method: "GET";
182
+ path: string;
183
+ auth: "apiKey";
184
+ description: string;
185
+ };
186
+ 'projects.update': {
187
+ method: "PATCH";
188
+ path: string;
189
+ auth: "apiKey";
190
+ description: string;
191
+ body: string[];
192
+ };
193
+ 'projects.delete': {
194
+ method: "DELETE";
195
+ path: string;
196
+ auth: "apiKey";
197
+ description: string;
198
+ };
199
+ 'projects.docs-invoices': {
200
+ method: "GET";
201
+ path: string;
202
+ auth: "apiKey";
203
+ description: string;
204
+ };
205
+ 'projects.docs-documents': {
206
+ method: "GET";
207
+ path: string;
208
+ auth: "apiKey";
209
+ description: string;
210
+ };
211
+ 'milestones.list': {
212
+ method: "CUSTOM";
213
+ path: string;
214
+ auth: "apiKey";
215
+ description: string;
216
+ };
217
+ 'milestones.add': {
218
+ method: "CUSTOM";
219
+ path: string;
220
+ auth: "apiKey";
221
+ description: string;
222
+ body: string[];
223
+ };
224
+ 'milestones.done': {
225
+ method: "CUSTOM";
226
+ path: string;
227
+ auth: "apiKey";
228
+ description: string;
229
+ };
230
+ 'milestones.undo': {
231
+ method: "CUSTOM";
232
+ path: string;
233
+ auth: "apiKey";
234
+ description: string;
235
+ };
236
+ 'milestones.remove': {
237
+ method: "CUSTOM";
238
+ path: string;
239
+ auth: "apiKey";
240
+ description: string;
241
+ };
242
+ };
243
+ tasks: {
244
+ 'tasks.all': {
245
+ method: "GET";
246
+ path: string;
247
+ auth: "apiKey";
248
+ description: string;
249
+ queryParams: string[];
250
+ };
251
+ 'tasks.list': {
252
+ method: "GET";
253
+ path: string;
254
+ auth: "apiKey";
255
+ description: string;
256
+ };
257
+ 'tasks.create': {
258
+ method: "POST";
259
+ path: string;
260
+ auth: "apiKey";
261
+ description: string;
262
+ body: string[];
263
+ };
264
+ 'tasks.delete': {
265
+ method: "DELETE";
266
+ path: string;
267
+ auth: "apiKey";
268
+ description: string;
269
+ };
270
+ 'tasks.update': {
271
+ method: "PATCH";
272
+ path: string;
273
+ auth: "apiKey";
274
+ description: string;
275
+ body: string[];
276
+ };
277
+ };
278
+ updates: {
279
+ 'updates.list': {
280
+ method: "GET";
281
+ path: string;
282
+ auth: "apiKey";
283
+ description: string;
284
+ };
285
+ 'updates.create': {
286
+ method: "POST";
287
+ path: string;
288
+ auth: "apiKey";
289
+ description: string;
290
+ body: string[];
291
+ supportsFiles: true;
292
+ };
293
+ 'updates.update': {
294
+ method: "PATCH";
295
+ path: string;
296
+ auth: "apiKey";
297
+ description: string;
298
+ body: string[];
299
+ };
300
+ 'updates.delete': {
301
+ method: "DELETE";
302
+ path: string;
303
+ auth: "apiKey";
304
+ description: string;
305
+ };
306
+ 'comments.list': {
307
+ method: "GET";
308
+ path: string;
309
+ auth: "apiKey";
310
+ description: string;
311
+ };
312
+ 'comments.create': {
313
+ method: "POST";
314
+ path: string;
315
+ auth: "apiKey";
316
+ description: string;
317
+ body: string[];
318
+ };
319
+ };
320
+ onboarding: {
321
+ 'onboarding.list': {
322
+ method: "GET";
323
+ path: string;
324
+ auth: "apiKey";
325
+ description: string;
326
+ };
327
+ 'onboarding.create': {
328
+ method: "POST";
329
+ path: string;
330
+ auth: "public";
331
+ description: string;
332
+ body: string[];
333
+ };
334
+ 'onboarding.process': {
335
+ method: "POST";
336
+ path: string;
337
+ auth: "apiKey";
338
+ description: string;
339
+ };
340
+ 'onboarding.reject': {
341
+ method: "POST";
342
+ path: string;
343
+ auth: "apiKey";
344
+ description: string;
345
+ };
346
+ };
347
+ metrics: {
348
+ 'metrics.push': {
349
+ method: "POST";
350
+ path: string;
351
+ auth: "apiKey";
352
+ description: string;
353
+ body: string[];
354
+ };
355
+ 'metrics.list': {
356
+ method: "GET";
357
+ path: string;
358
+ auth: "apiKey";
359
+ description: string;
360
+ };
361
+ 'metrics.latest': {
362
+ method: "GET";
363
+ path: string;
364
+ auth: "apiKey";
365
+ description: string;
366
+ };
367
+ 'metrics.items': {
368
+ method: "GET";
369
+ path: string;
370
+ auth: "apiKey";
371
+ description: string;
372
+ };
373
+ };
374
+ docs: {
375
+ 'docs.document-download': {
376
+ method: "DOWNLOAD";
377
+ path: string;
378
+ auth: "apiKey";
379
+ description: string;
380
+ body: string[];
381
+ };
382
+ 'docs.invoice-download': {
383
+ method: "DOWNLOAD";
384
+ path: string;
385
+ auth: "apiKey";
386
+ description: string;
387
+ body: string[];
388
+ };
389
+ };
390
+ portal: {
391
+ 'portal.me': {
392
+ method: "GET";
393
+ path: string;
394
+ auth: "portalToken";
395
+ description: string;
396
+ };
397
+ 'portal.pin': {
398
+ method: "POST";
399
+ path: string;
400
+ auth: "portalToken";
401
+ description: string;
402
+ };
403
+ 'portal.projects': {
404
+ method: "GET";
405
+ path: string;
406
+ auth: "portalToken";
407
+ description: string;
408
+ };
409
+ 'portal.project': {
410
+ method: "GET";
411
+ path: string;
412
+ auth: "portalToken";
413
+ description: string;
414
+ };
415
+ 'portal.recent-updates': {
416
+ method: "GET";
417
+ path: string;
418
+ auth: "portalToken";
419
+ description: string;
420
+ };
421
+ 'portal.updates': {
422
+ method: "GET";
423
+ path: string;
424
+ auth: "portalToken";
425
+ description: string;
426
+ };
427
+ 'portal.comments.list': {
428
+ method: "GET";
429
+ path: string;
430
+ auth: "portalToken";
431
+ description: string;
432
+ };
433
+ 'portal.comments.create': {
434
+ method: "POST";
435
+ path: string;
436
+ auth: "portalToken";
437
+ description: string;
438
+ body: string[];
439
+ };
440
+ 'portal.search': {
441
+ method: "GET";
442
+ path: string;
443
+ auth: "portalToken";
444
+ description: string;
445
+ queryParams: string[];
446
+ };
447
+ 'portal.my-tasks': {
448
+ method: "GET";
449
+ path: string;
450
+ auth: "portalToken";
451
+ description: string;
452
+ };
453
+ 'portal.tasks.create': {
454
+ method: "POST";
455
+ path: string;
456
+ auth: "portalToken";
457
+ description: string;
458
+ body: string[];
459
+ };
460
+ 'portal.tasks.delete': {
461
+ method: "DELETE";
462
+ path: string;
463
+ auth: "portalToken";
464
+ description: string;
465
+ };
466
+ 'portal.tasks.list': {
467
+ method: "GET";
468
+ path: string;
469
+ auth: "portalToken";
470
+ description: string;
471
+ };
472
+ 'portal.metrics.list': {
473
+ method: "GET";
474
+ path: string;
475
+ auth: "portalToken";
476
+ description: string;
477
+ };
478
+ 'portal.metrics.latest': {
479
+ method: "GET";
480
+ path: string;
481
+ auth: "portalToken";
482
+ description: string;
483
+ };
484
+ 'portal.metrics.items': {
485
+ method: "GET";
486
+ path: string;
487
+ auth: "portalToken";
488
+ description: string;
489
+ };
490
+ 'portal.invoices': {
491
+ method: "GET";
492
+ path: string;
493
+ auth: "portalToken";
494
+ description: string;
495
+ };
496
+ 'portal.documents': {
497
+ method: "GET";
498
+ path: string;
499
+ auth: "portalToken";
500
+ description: string;
501
+ };
502
+ 'portal.document-download': {
503
+ method: "DOWNLOAD";
504
+ path: string;
505
+ auth: "portalToken";
506
+ description: string;
507
+ body: string[];
508
+ };
509
+ 'portal.invoice-download': {
510
+ method: "DOWNLOAD";
511
+ path: string;
512
+ auth: "portalToken";
513
+ description: string;
514
+ body: string[];
515
+ };
516
+ };
517
+ };
518
+ export declare const COMMANDS: Record<string, CliCommand>;
@@ -0,0 +1,22 @@
1
+ import { clientCommands } from './clients.js';
2
+ import { docsCommands } from './docs.js';
3
+ import { metricCommands } from './metrics.js';
4
+ import { onboardingCommands } from './onboarding.js';
5
+ import { portalCommands } from './portal.js';
6
+ import { projectCommands } from './projects.js';
7
+ import { systemCommands } from './system.js';
8
+ import { taskCommands } from './tasks.js';
9
+ import { updateCommands } from './updates.js';
10
+ export const COMMAND_GROUPS = {
11
+ system: systemCommands,
12
+ clients: clientCommands,
13
+ projects: projectCommands,
14
+ tasks: taskCommands,
15
+ updates: updateCommands,
16
+ onboarding: onboardingCommands,
17
+ metrics: metricCommands,
18
+ docs: docsCommands,
19
+ portal: portalCommands,
20
+ };
21
+ export const COMMANDS = Object.assign({}, ...Object.values(COMMAND_GROUPS));
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAK9C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,cAAc;IACvB,UAAU,EAAE,kBAAkB;IAC9B,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,cAAc;CACgB,CAAC;AAEzC,MAAM,CAAC,MAAM,QAAQ,GAA+B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ export declare const metricCommands: {
2
+ 'metrics.push': {
3
+ method: "POST";
4
+ path: string;
5
+ auth: "apiKey";
6
+ description: string;
7
+ body: string[];
8
+ };
9
+ 'metrics.list': {
10
+ method: "GET";
11
+ path: string;
12
+ auth: "apiKey";
13
+ description: string;
14
+ };
15
+ 'metrics.latest': {
16
+ method: "GET";
17
+ path: string;
18
+ auth: "apiKey";
19
+ description: string;
20
+ };
21
+ 'metrics.items': {
22
+ method: "GET";
23
+ path: string;
24
+ auth: "apiKey";
25
+ description: string;
26
+ };
27
+ };
@@ -0,0 +1,7 @@
1
+ export const metricCommands = {
2
+ 'metrics.push': { method: 'POST', path: '/api/integration/metrics', auth: 'apiKey', description: 'Push integration metrics', body: ['external_ref', 'source_ref', 'snapshot_date', 'metrics', 'items'] },
3
+ 'metrics.list': { method: 'GET', path: '/api/admin/projects/:id/metrics', auth: 'apiKey', description: 'List admin metrics' },
4
+ 'metrics.latest': { method: 'GET', path: '/api/admin/projects/:id/metrics/latest', auth: 'apiKey', description: 'Show latest admin metrics' },
5
+ 'metrics.items': { method: 'GET', path: '/api/admin/projects/:id/metrics/:metricId/items', auth: 'apiKey', description: 'List metric items' },
6
+ };
7
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../commands/metrics.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;IACxM,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAC7H,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wCAAwC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;IAC7I,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iDAAiD,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;CACvH,CAAC"}
@@ -0,0 +1,27 @@
1
+ export declare const onboardingCommands: {
2
+ 'onboarding.list': {
3
+ method: "GET";
4
+ path: string;
5
+ auth: "apiKey";
6
+ description: string;
7
+ };
8
+ 'onboarding.create': {
9
+ method: "POST";
10
+ path: string;
11
+ auth: "public";
12
+ description: string;
13
+ body: string[];
14
+ };
15
+ 'onboarding.process': {
16
+ method: "POST";
17
+ path: string;
18
+ auth: "apiKey";
19
+ description: string;
20
+ };
21
+ 'onboarding.reject': {
22
+ method: "POST";
23
+ path: string;
24
+ auth: "apiKey";
25
+ description: string;
26
+ };
27
+ };
@@ -0,0 +1,7 @@
1
+ export const onboardingCommands = {
2
+ 'onboarding.list': { method: 'GET', path: '/api/admin/onboarding', auth: 'apiKey', description: 'List onboarding submissions' },
3
+ 'onboarding.create': { method: 'POST', path: '/api/onboard', auth: 'public', description: 'Create onboarding submission', body: ['name', 'email', 'company', 'phone', 'platformSource', 'platformLink', 'projectDescription', 'budgetRange', 'timeline'] },
4
+ 'onboarding.process': { method: 'POST', path: '/api/admin/onboarding/:id/process', auth: 'apiKey', description: 'Process onboarding submission' },
5
+ 'onboarding.reject': { method: 'POST', path: '/api/admin/onboarding/:id/reject', auth: 'apiKey', description: 'Reject onboarding submission' },
6
+ };
7
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../commands/onboarding.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC/H,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE;IAC1P,oBAAoB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;IACjJ,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;CACxH,CAAC"}