@fieldia/core 0.21.0 → 0.23.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 (127) hide show
  1. package/README.md +116 -1
  2. package/package.json +1 -1
  3. package/schema/page.schema.json +149 -1
  4. package/src/index.d.mts +2 -2
  5. package/src/index.d.ts +2 -2
  6. package/src/index.js +3 -1
  7. package/src/index.js.map +1 -1
  8. package/src/index.mjs +2 -2
  9. package/src/index.mjs.map +1 -1
  10. package/src/lib/format/check-page.d.mts +3 -2
  11. package/src/lib/format/check-page.d.ts +3 -2
  12. package/src/lib/format/check-page.js +9 -4
  13. package/src/lib/format/check-page.js.map +1 -1
  14. package/src/lib/format/check-page.mjs +10 -5
  15. package/src/lib/format/check-page.mjs.map +1 -1
  16. package/src/lib/format/field.d.mts +85 -0
  17. package/src/lib/format/field.d.ts +85 -0
  18. package/src/lib/format/field.js +14 -1
  19. package/src/lib/format/field.js.map +1 -1
  20. package/src/lib/format/field.mjs +13 -0
  21. package/src/lib/format/field.mjs.map +1 -1
  22. package/src/lib/format/layout.d.mts +142 -17
  23. package/src/lib/format/layout.d.ts +142 -17
  24. package/src/lib/format/layout.js +18 -1
  25. package/src/lib/format/layout.js.map +1 -1
  26. package/src/lib/format/layout.mjs +17 -0
  27. package/src/lib/format/layout.mjs.map +1 -1
  28. package/src/lib/format/layout.types.d.mts +6 -2
  29. package/src/lib/format/layout.types.d.ts +6 -2
  30. package/src/lib/format/page.d.mts +69 -10
  31. package/src/lib/format/page.d.ts +69 -10
  32. package/src/lib/format/page.js +4 -1
  33. package/src/lib/format/page.js.map +1 -1
  34. package/src/lib/format/page.mjs +5 -2
  35. package/src/lib/format/page.mjs.map +1 -1
  36. package/src/lib/format/references.d.mts +7 -0
  37. package/src/lib/format/references.d.ts +7 -0
  38. package/src/lib/format/references.js +46 -0
  39. package/src/lib/format/references.js.map +1 -1
  40. package/src/lib/format/references.mjs +46 -0
  41. package/src/lib/format/references.mjs.map +1 -1
  42. package/src/lib/format/translate.js +3 -2
  43. package/src/lib/format/translate.js.map +1 -1
  44. package/src/lib/format/translate.mjs +3 -2
  45. package/src/lib/format/translate.mjs.map +1 -1
  46. package/src/lib/format/upgrade.d.mts +41 -0
  47. package/src/lib/format/upgrade.d.ts +41 -0
  48. package/src/lib/format/upgrade.js +41 -0
  49. package/src/lib/format/upgrade.js.map +1 -0
  50. package/src/lib/format/upgrade.mjs +37 -0
  51. package/src/lib/format/upgrade.mjs.map +1 -0
  52. package/src/lib/format/validate.d.mts +2 -1
  53. package/src/lib/format/validate.d.ts +2 -1
  54. package/src/lib/format/validate.js +4 -2
  55. package/src/lib/format/validate.js.map +1 -1
  56. package/src/lib/format/validate.mjs +4 -2
  57. package/src/lib/format/validate.mjs.map +1 -1
  58. package/src/lib/format/version.d.mts +16 -1
  59. package/src/lib/format/version.d.ts +16 -1
  60. package/src/lib/format/version.js +39 -2
  61. package/src/lib/format/version.js.map +1 -1
  62. package/src/lib/format/version.mjs +36 -1
  63. package/src/lib/format/version.mjs.map +1 -1
  64. package/src/lib/record/data-source.d.mts +224 -10
  65. package/src/lib/record/data-source.d.ts +224 -10
  66. package/src/lib/record/data-source.js +29 -0
  67. package/src/lib/record/data-source.js.map +1 -1
  68. package/src/lib/record/data-source.mjs +25 -0
  69. package/src/lib/record/data-source.mjs.map +1 -1
  70. package/src/lib/record/form.d.mts +144 -5
  71. package/src/lib/record/form.d.ts +144 -5
  72. package/src/lib/record/form.js +792 -42
  73. package/src/lib/record/form.js.map +1 -1
  74. package/src/lib/record/form.mjs +791 -43
  75. package/src/lib/record/form.mjs.map +1 -1
  76. package/src/lib/record/locales/ar.js +10 -0
  77. package/src/lib/record/locales/ar.js.map +1 -1
  78. package/src/lib/record/locales/ar.mjs +10 -0
  79. package/src/lib/record/locales/ar.mjs.map +1 -1
  80. package/src/lib/record/locales/de.js +10 -0
  81. package/src/lib/record/locales/de.js.map +1 -1
  82. package/src/lib/record/locales/de.mjs +10 -0
  83. package/src/lib/record/locales/de.mjs.map +1 -1
  84. package/src/lib/record/locales/fr.js +10 -0
  85. package/src/lib/record/locales/fr.js.map +1 -1
  86. package/src/lib/record/locales/fr.mjs +10 -0
  87. package/src/lib/record/locales/fr.mjs.map +1 -1
  88. package/src/lib/record/memory-data-source.d.mts +40 -3
  89. package/src/lib/record/memory-data-source.d.ts +40 -3
  90. package/src/lib/record/memory-data-source.js +164 -20
  91. package/src/lib/record/memory-data-source.js.map +1 -1
  92. package/src/lib/record/memory-data-source.mjs +164 -20
  93. package/src/lib/record/memory-data-source.mjs.map +1 -1
  94. package/src/lib/record/messages.d.mts +21 -0
  95. package/src/lib/record/messages.d.ts +21 -0
  96. package/src/lib/record/messages.js +10 -0
  97. package/src/lib/record/messages.js.map +1 -1
  98. package/src/lib/record/messages.mjs +10 -0
  99. package/src/lib/record/messages.mjs.map +1 -1
  100. package/src/lib/record/run.d.mts +50 -7
  101. package/src/lib/record/run.d.ts +50 -7
  102. package/src/lib/record/run.js +67 -20
  103. package/src/lib/record/run.js.map +1 -1
  104. package/src/lib/record/run.mjs +67 -20
  105. package/src/lib/record/run.mjs.map +1 -1
  106. package/src/lib/record/upload-to.d.mts +50 -0
  107. package/src/lib/record/upload-to.d.ts +50 -0
  108. package/src/lib/record/upload-to.js +117 -0
  109. package/src/lib/record/upload-to.js.map +1 -0
  110. package/src/lib/record/upload-to.mjs +114 -0
  111. package/src/lib/record/upload-to.mjs.map +1 -0
  112. package/src/lib/record/uploads.d.mts +152 -0
  113. package/src/lib/record/uploads.d.ts +152 -0
  114. package/src/lib/record/uploads.js +345 -0
  115. package/src/lib/record/uploads.js.map +1 -0
  116. package/src/lib/record/uploads.mjs +337 -0
  117. package/src/lib/record/uploads.mjs.map +1 -0
  118. package/src/lib/record/values.d.mts +6 -0
  119. package/src/lib/record/values.d.ts +6 -0
  120. package/src/lib/record/values.js.map +1 -1
  121. package/src/lib/record/values.mjs.map +1 -1
  122. package/src/runtime.d.mts +10 -6
  123. package/src/runtime.d.ts +10 -6
  124. package/src/runtime.js +19 -2
  125. package/src/runtime.js.map +1 -1
  126. package/src/runtime.mjs +7 -3
  127. package/src/runtime.mjs.map +1 -1
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uploadGoing = exports.UPLOADS_AT_ONCE = void 0;
4
+ exports.fileFromBytes = fileFromBytes;
5
+ exports.withoutFileBytes = withoutFileBytes;
6
+ exports.fileBytesIn = fileBytesIn;
7
+ exports.createUploads = createUploads;
8
+ const data_source_1 = require("./data-source");
9
+ const messages_1 = require("./messages");
10
+ /** How many files go to the store at once; the rest wait their turn. */
11
+ exports.UPLOADS_AT_ONCE = 3;
12
+ const going = (status) => status !== 'failed' && status !== 'refused';
13
+ /** Whether an upload is still going: waiting, being made ready, or on its way. */
14
+ const uploadGoing = (upload) => going(upload.status);
15
+ exports.uploadGoing = uploadGoing;
16
+ /** The host's `AbortController`: every browser's, and Node's. Core names no DOM types. */
17
+ const stopper = () => new globalThis.AbortController();
18
+ const sameFile = (a, b) => a.name === b.name && a.data === b.data && a.url === b.url;
19
+ const isFile = (value) => !!value && typeof value === 'object' && typeof value.name === 'string' && typeof value.size === 'number';
20
+ const filesIn = (value) => (Array.isArray(value) ? value.filter(isFile) : isFile(value) ? [value] : []);
21
+ const holdsFiles = (def) => def?.type === 'binary' || def?.type === 'image';
22
+ /** The bytes a base64 text holds. */
23
+ function bytesOf(data) {
24
+ const text = globalThis.atob(data);
25
+ const bytes = new Uint8Array(text.length);
26
+ for (let i = 0; i < text.length; i++)
27
+ bytes[i] = text.charCodeAt(i);
28
+ return bytes;
29
+ }
30
+ /** A file held as its bytes, as the store takes a file: its name, size, kind and bytes. */
31
+ function fileFromBytes(file) {
32
+ const bytes = bytesOf(file.data ?? '');
33
+ return { name: file.name, size: bytes.length, type: file.type, arrayBuffer: async () => bytes.slice().buffer };
34
+ }
35
+ /**
36
+ * The values as a draft keeps them: a file held as its bytes is left out —
37
+ * a field holding one is not kept at all, and a line's loses that file —
38
+ * so a draft stays small enough for the browser's store, and restoring it
39
+ * leaves those fields as the record holds them.
40
+ */
41
+ function withoutFileBytes(fields, values) {
42
+ const kept = {};
43
+ for (const [name, value] of Object.entries(values)) {
44
+ const def = fields[name];
45
+ if (holdsFiles(def)) {
46
+ if (!filesIn(value).some((file) => file.data !== undefined))
47
+ kept[name] = value;
48
+ }
49
+ else if (def?.type === 'one2many' && Array.isArray(value)) {
50
+ const subs = Object.entries(def.fields).filter(([, sub]) => holdsFiles(sub)).map(([sub]) => sub);
51
+ kept[name] = !subs.length
52
+ ? value
53
+ : value.map((line) => {
54
+ const own = { ...line.values };
55
+ for (const sub of subs)
56
+ if (filesIn(own[sub]).some((file) => file.data !== undefined))
57
+ delete own[sub];
58
+ return { ...line, values: own };
59
+ });
60
+ }
61
+ else
62
+ kept[name] = value;
63
+ }
64
+ return kept;
65
+ }
66
+ /** Each file still held as its bytes in the fields that changed — on the record, or on a changed table's lines — for a save to store. */
67
+ function fileBytesIn(fields, values, changed) {
68
+ const found = [];
69
+ for (const name of changed) {
70
+ const def = fields[name];
71
+ if (holdsFiles(def))
72
+ for (const file of filesIn(values[name]))
73
+ if (file.data !== undefined)
74
+ found.push({ field: name, file });
75
+ if (def?.type !== 'one2many')
76
+ continue;
77
+ for (const line of values[name] ?? []) {
78
+ for (const [sub, subDef] of Object.entries(def.fields)) {
79
+ if (holdsFiles(subDef))
80
+ for (const file of filesIn(line.values[sub]))
81
+ if (file.data !== undefined)
82
+ found.push({ field: sub, line: { field: name, key: line.key }, file });
83
+ }
84
+ }
85
+ }
86
+ return found;
87
+ }
88
+ /**
89
+ * A field's files with a stored one put in: in place of the bytes it was
90
+ * stored for (nothing, when those are gone), in place of a field's one file,
91
+ * or among several before the first that was picked after it.
92
+ */
93
+ function placed(current, stored, how) {
94
+ if (how.replaces) {
95
+ const was = how.replaces;
96
+ if (Array.isArray(current)) {
97
+ const at = current.findIndex((file) => isFile(file) && sameFile(file, was));
98
+ return at < 0 ? undefined : current.map((file, i) => (i === at ? stored : file));
99
+ }
100
+ return isFile(current) && sameFile(current, was) ? stored : undefined;
101
+ }
102
+ if (!how.several)
103
+ return stored;
104
+ const files = filesIn(current);
105
+ const at = files.findIndex(how.pickedAfter);
106
+ const list = at < 0 ? [...files, stored] : [...files.slice(0, at), stored, ...files.slice(at)];
107
+ return list;
108
+ }
109
+ /** The uploads of one form. */
110
+ function createUploads(host) {
111
+ let entries = [];
112
+ let made = 0;
113
+ let picked = 0;
114
+ /** Where each stored file came in the order picked, by its link: a later one goes after it. */
115
+ const order = new Map();
116
+ const waiters = new Set();
117
+ const shown = (entry) => ({
118
+ id: entry.id,
119
+ field: entry.field,
120
+ ...(entry.line ? { line: entry.line } : {}),
121
+ name: entry.file.name,
122
+ size: entry.file.size,
123
+ type: entry.file.type,
124
+ status: entry.status,
125
+ sent: entry.sent,
126
+ total: entry.total,
127
+ ...(entry.error !== undefined ? { error: entry.error } : {}),
128
+ });
129
+ function tell() {
130
+ host.changed(entries.map(shown));
131
+ if (!entries.some((entry) => going(entry.status)))
132
+ for (const done of [...waiters])
133
+ done();
134
+ }
135
+ function drop(entry) {
136
+ entries = entries.filter((other) => other !== entry);
137
+ entry.stop?.();
138
+ entry.end?.();
139
+ }
140
+ /** The next to be made ready, one at a time, and the next to go, three at a time. */
141
+ function pump() {
142
+ if (!entries.some((entry) => entry.status === 'preparing')) {
143
+ const next = entries.find((entry) => entry.status === 'waiting' && !entry.ready);
144
+ if (next)
145
+ void prepare(next);
146
+ }
147
+ for (let next = nextToSend(); next && entries.filter((entry) => entry.status === 'uploading').length < exports.UPLOADS_AT_ONCE; next = nextToSend())
148
+ void send(next);
149
+ }
150
+ const nextToSend = () => entries.find((entry) => entry.status === 'waiting' && entry.ready);
151
+ async function prepare(entry) {
152
+ entry.status = 'preparing';
153
+ tell();
154
+ const original = entry.file;
155
+ let refused = null;
156
+ try {
157
+ entry.file = await entry.prepare(original);
158
+ }
159
+ catch (error) {
160
+ // A file that cannot be made ready goes as it is, never lost — unless the field refuses it as it is (too large still).
161
+ const problem = (0, data_source_1.saveProblemOf)(error);
162
+ if (problem.kind === 'rule')
163
+ refused = problem.message;
164
+ entry.file = original;
165
+ }
166
+ entry.ready = true;
167
+ if (!entries.includes(entry))
168
+ return;
169
+ entry.status = refused === null ? 'waiting' : 'refused';
170
+ if (refused !== null) {
171
+ entry.error = refused;
172
+ entry.end?.();
173
+ }
174
+ tell();
175
+ pump();
176
+ }
177
+ async function send(entry) {
178
+ const source = host.source();
179
+ if (!source?.upload)
180
+ return;
181
+ const stop = stopper();
182
+ entry.status = 'uploading';
183
+ entry.sent = 0;
184
+ entry.total = null;
185
+ delete entry.error;
186
+ entry.stop = () => stop.abort();
187
+ tell();
188
+ const lineId = entry.line ? host.lineId(entry.line.field, entry.line.key) : undefined;
189
+ const under = host.under ?? '';
190
+ const request = {
191
+ model: host.model(),
192
+ // A line's field is named on its own, its table where it sits.
193
+ field: entry.line ? entry.field : `${under}${entry.field}`,
194
+ recordId: host.recordId(),
195
+ ...(entry.line ? { line: { ...entry.line, field: `${under}${entry.line.field}`, ...(lineId !== undefined ? { id: lineId } : {}) } } : {}),
196
+ signal: stop.signal,
197
+ onProgress: (sent, total) => {
198
+ if (entry.status !== 'uploading' || !entries.includes(entry))
199
+ return;
200
+ // Told when the bar would move: a whole per cent, or the end.
201
+ const was = entry.total ? Math.floor((entry.sent * 100) / entry.total) : -1;
202
+ const now = total ? Math.floor((sent * 100) / total) : -1;
203
+ entry.sent = sent;
204
+ entry.total = total;
205
+ if (now !== was || sent === total)
206
+ tell();
207
+ },
208
+ };
209
+ try {
210
+ const stored = await source.upload(entry.file, request);
211
+ if (!entries.includes(entry))
212
+ return;
213
+ entries = entries.filter((other) => other !== entry);
214
+ put(entry, stored);
215
+ entry.end?.();
216
+ }
217
+ catch (error) {
218
+ if (!entries.includes(entry) || stop.signal.aborted || error?.name === 'AbortError') {
219
+ if (entries.includes(entry))
220
+ drop(entry);
221
+ }
222
+ else {
223
+ const problem = (0, data_source_1.saveProblemOf)(error);
224
+ entry.status = problem.kind === 'rule' ? 'refused' : 'failed';
225
+ entry.error = problem.message;
226
+ entry.end?.();
227
+ }
228
+ }
229
+ finally {
230
+ delete entry.stop;
231
+ tell();
232
+ pump();
233
+ }
234
+ }
235
+ /** The stored file in its field: exactly what the store gave — its other words kept, for bytes it stands in for. */
236
+ function put(entry, stored) {
237
+ const def = host.fileField(entry.field, entry.line);
238
+ const extra = {};
239
+ if (entry.replaces)
240
+ for (const [key, value] of Object.entries(entry.replaces))
241
+ if (!['data', 'url', 'name', 'size', 'type', 'fileId'].includes(key))
242
+ extra[key] = value;
243
+ const file = { ...stored, ...extra };
244
+ order.set(file.url ?? '', entry.seq);
245
+ const value = placed(host.read(entry.field, entry.line), file, {
246
+ several: def?.multiple === true,
247
+ ...(entry.replaces ? { replaces: entry.replaces } : {}),
248
+ pickedAfter: (other) => (order.get(other.url ?? '') ?? -1) > entry.seq,
249
+ });
250
+ if (value !== undefined)
251
+ host.write(entry.field, entry.line, value, !!entry.replaces);
252
+ }
253
+ function begin(field, line, file, more) {
254
+ const entry = { id: `upload-${++made}`, seq: ++picked, field, ...(line ? { line } : {}), file, ...(more.prepare ? { prepare: more.prepare } : {}), ready: !more.prepare, ...(more.replaces ? { replaces: more.replaces } : {}), status: 'waiting', sent: 0, total: null };
255
+ entries = [...entries, entry];
256
+ void host.track(new Promise((resolve) => (entry.end = resolve)));
257
+ return entry;
258
+ }
259
+ /** Wait until no file is still going: each one stored, failed, refused or cancelled. */
260
+ const settled = () => new Promise((resolve) => {
261
+ if (!entries.some((entry) => going(entry.status)))
262
+ return resolve();
263
+ const done = () => (waiters.delete(done), resolve());
264
+ waiters.add(done);
265
+ });
266
+ return {
267
+ /** Send files picked for a field: its ids. */
268
+ start(field, files, how = {}) {
269
+ if (!host.source()?.upload)
270
+ throw new Error('The data source has no upload: files go inside the record');
271
+ const def = host.fileField(field, how.line);
272
+ if (!def)
273
+ throw new Error(how.line ? `The lines of "${how.line.field}" have no file field "${field}"` : `"${field}" is not a file or picture field`);
274
+ // A field of one file: the last one picked is the one it keeps; one still on its way is stopped.
275
+ if (def.multiple !== true) {
276
+ for (const entry of entries.filter((e) => e.field === field && e.line?.key === how.line?.key && e.line?.field === how.line?.field && !e.replaces))
277
+ drop(entry);
278
+ files = files.slice(-1);
279
+ }
280
+ const started = files.map((file) => begin(field, how.line, file, { prepare: how.prepare }));
281
+ tell();
282
+ pump();
283
+ return started.map((entry) => entry.id);
284
+ },
285
+ cancel(id) {
286
+ const entry = entries.find((e) => e.id === id);
287
+ if (!entry)
288
+ return;
289
+ drop(entry);
290
+ tell();
291
+ pump();
292
+ },
293
+ retry(id) {
294
+ const entry = entries.find((e) => e.id === id);
295
+ if (!entry || entry.status !== 'failed')
296
+ return;
297
+ entry.status = 'waiting';
298
+ entry.sent = 0;
299
+ entry.total = null;
300
+ delete entry.error;
301
+ void host.track(new Promise((resolve) => (entry.end = resolve)));
302
+ tell();
303
+ pump();
304
+ },
305
+ /** Stop every upload: the changes they were for are gone. */
306
+ clear() {
307
+ if (!entries.length)
308
+ return;
309
+ for (const entry of [...entries])
310
+ drop(entry);
311
+ tell();
312
+ },
313
+ /** Whether any file is still going. */
314
+ going: () => entries.some((entry) => going(entry.status)),
315
+ settled,
316
+ /** Store each file still held as its bytes in the fields given, and wait for them all. */
317
+ async storeBytes(found) {
318
+ if (!found.length || !host.source()?.upload)
319
+ return;
320
+ for (const { field, line, file } of found)
321
+ begin(field, line, fileFromBytes(file), { replaces: file });
322
+ tell();
323
+ pump();
324
+ await settled();
325
+ },
326
+ /** What stops a save, under each field: a file that failed, or that the store refused. */
327
+ problems(messages) {
328
+ const out = {};
329
+ const by = new Map();
330
+ for (const entry of entries.filter((e) => !going(e.status))) {
331
+ const key = entry.line ? `${entry.line.field}.${entry.line.key}.${entry.field}` : entry.field;
332
+ by.set(key, [...(by.get(key) ?? []), entry]);
333
+ }
334
+ for (const [key, list] of by) {
335
+ const refused = list.filter((entry) => entry.status === 'refused');
336
+ out[key] =
337
+ list.length > 1 ? (0, messages_1.fill)(messages.notUploadedMany, { n: list.length })
338
+ : refused.length ? (0, messages_1.fill)(messages.fileRefused, { name: list[0].file.name, reason: list[0].error ?? '' })
339
+ : (0, messages_1.fill)(messages.notUploaded, { name: list[0].file.name });
340
+ }
341
+ return out;
342
+ },
343
+ };
344
+ }
345
+ //# sourceMappingURL=uploads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/uploads.ts"],"names":[],"mappings":";;;AAqHA,sCAGC;AAQD,4CAkBC;AAGD,kCAaC;AAwBD,sCAwNC;AAjZD,+CAA0I;AAC1I,yCAAiD;AA8CjD,wEAAwE;AAC3D,QAAA,eAAe,GAAG,CAAC,CAAC;AAEjC,MAAM,KAAK,GAAG,CAAC,MAA4B,EAAE,EAAE,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,CAAC;AAC5F,kFAAkF;AAC3E,MAAM,WAAW,GAAG,CAAC,MAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAA3D,QAAA,WAAW,eAAgD;AA+CxE,0FAA0F;AAC1F,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAK,UAAgG,CAAC,eAAe,EAAE,CAAC;AAE9I,MAAM,QAAQ,GAAG,CAAC,CAAY,EAAE,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;AAC3G,MAAM,MAAM,GAAG,CAAC,KAAc,EAAsB,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAmB,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAQ,KAAmB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9L,MAAM,OAAO,GAAG,CAAC,KAAwB,EAAe,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvJ,MAAM,UAAU,GAAG,CAAC,GAAkC,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,QAAQ,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,CAAC;AAE3G,qCAAqC;AACrC,SAAS,OAAO,CAAC,IAAY;IAC3B,MAAM,IAAI,GAAI,UAAwD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2FAA2F;AAC3F,SAAgB,aAAa,CAAC,IAAe;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;AACjH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,MAAc,EAAE,MAAwB;IACvE,MAAM,IAAI,GAAW,EAAE,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAClF,CAAC;aAAM,IAAI,GAAG,EAAE,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YAC9G,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM;gBACvB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAE,KAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC7B,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC/B,KAAK,MAAM,GAAG,IAAI,IAAI;wBAAE,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;4BAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;oBACvG,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;gBAClC,CAAC,CAAC,CAAC;QACT,CAAC;;YAAM,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yIAAyI;AACzI,SAAgB,WAAW,CAAC,MAAc,EAAE,MAAwB,EAAE,OAA0B;IAC9F,MAAM,KAAK,GAAgF,EAAE,CAAC;IAC9F,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAAE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9H,IAAI,GAAG,EAAE,IAAI,KAAK,UAAU;YAAE,SAAS;QACvC,KAAK,MAAM,IAAI,IAAK,MAAM,CAAC,IAAI,CAAmB,IAAI,EAAE,EAAE,CAAC;YACzD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvD,IAAI,UAAU,CAAC,MAAmB,CAAC;oBAAE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAAE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;4BAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACzL,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAC,OAA0B,EAAE,MAAiB,EAAE,GAA0F;IACvJ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAI,OAAqB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3F,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAG,OAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAsB,CAAC;QACxH,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,MAA2B,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,MAA0B,CAAC;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/F,OAAO,IAAwB,CAAC;AAClC,CAAC;AAED,+BAA+B;AAC/B,SAAgB,aAAa,CAAC,IAAiB;IAC7C,IAAI,OAAO,GAAY,EAAE,CAAC;IAC1B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,+FAA+F;IAC/F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;IAEtC,MAAM,KAAK,GAAG,CAAC,KAAY,EAAc,EAAE,CAAC,CAAC;QAC3C,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;QACrB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;QACrB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;QACrB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC,CAAC;IAEH,SAAS,IAAI;QACX,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAAE,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC;gBAAE,IAAI,EAAE,CAAC;IAC7F,CAAC;IAED,SAAS,IAAI,CAAC,KAAY;QACxB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACf,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;IAChB,CAAC;IAED,qFAAqF;IACrF,SAAS,IAAI;QACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjF,IAAI,IAAI;gBAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,IAAI,IAAI,GAAG,UAAU,EAAE,EAAE,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,GAAG,uBAAe,EAAE,IAAI,GAAG,UAAU,EAAE;YAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/J,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAE5F,KAAK,UAAU,OAAO,CAAC,KAAY;QACjC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;QAC3B,IAAI,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;QAC5B,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,GAAG,MAAO,KAAK,CAAC,OAAyC,CAAC,QAAQ,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uHAAuH;YACvH,MAAM,OAAO,GAAG,IAAA,2BAAa,EAAC,KAAK,CAAC,CAAC;YACrC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YACvD,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QACxB,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QACrC,KAAK,CAAC,MAAM,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACxD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;YACtB,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;IACT,CAAC;IAED,KAAK,UAAU,IAAI,CAAC,KAAY;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,MAAM;YAAE,OAAO;QAC5B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;QAC3B,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACf,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;QACnB,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAkB;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YACnB,+DAA+D;YAC/D,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;YAC1D,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzI,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC1B,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,OAAO;gBACrE,8DAA8D;gBAC9D,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5E,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBACpB,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,KAAK,KAAK;oBAAE,IAAI,EAAE,CAAC;YAC5C,CAAC;SACF,CAAC;QACF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO;YACrC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;YACrD,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACnB,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAK,KAAsB,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtG,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,IAAA,2BAAa,EAAC,KAAK,CAAC,CAAC;gBACrC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC9D,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC9B,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,OAAO,KAAK,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC;IAED,oHAAoH;IACpH,SAAS,GAAG,CAAC,KAAY,EAAE,MAAoB;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,QAAQ;YAAE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAAE,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAG,KAAiC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACrM,MAAM,IAAI,GAAc,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QAChD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE;YAC7D,OAAO,EAAG,GAAqC,EAAE,QAAQ,KAAK,IAAI;YAClE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG;SACvE,CAAC,CAAC;QACH,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxF,CAAC;IAED,SAAS,KAAK,CAAC,KAAa,EAAE,IAAmB,EAAE,IAAgB,EAAE,IAA0D;QAC7H,MAAM,KAAK,GAAU,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACjR,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wFAAwF;IACxF,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAAE,OAAO,OAAO,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEL,OAAO;QACL,8CAA8C;QAC9C,KAAK,CAAC,KAAa,EAAE,KAA4B,EAAE,MAA4D,EAAE;YAC/G,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YACzG,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,KAAK,yBAAyB,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,kCAAkC,CAAC,CAAC;YACrJ,iGAAiG;YACjG,IAAK,GAA8B,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/J,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5F,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,CAAC,EAAU;YACf,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,IAAI,CAAC,KAAK,CAAC,CAAC;YACZ,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;QACT,CAAC;QACD,KAAK,CAAC,EAAU;YACd,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO;YAChD,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;YACzB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YACf,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,OAAO,KAAK,CAAC,KAAK,CAAC;YACnB,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;QACT,CAAC;QACD,6DAA6D;QAC7D,KAAK;YACH,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAO;YAC5B,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,EAAE,CAAC;QACT,CAAC;QACD,uCAAuC;QACvC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO;QACP,0FAA0F;QAC1F,KAAK,CAAC,UAAU,CAAC,KAAiE;YAChF,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM;gBAAE,OAAO;YACpD,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK;gBAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACvG,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;QACD,0FAA0F;QAC1F,QAAQ,CAAC,QAAkB;YACzB,MAAM,GAAG,GAA2B,EAAE,CAAC;YACvC,MAAM,EAAE,GAAG,IAAI,GAAG,EAAmB,CAAC;YACtC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC9F,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;gBACnE,GAAG,CAAC,GAAG,CAAC;oBACN,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,eAAI,EAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;wBACpE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,eAAI,EAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;4BACvG,CAAC,CAAC,IAAA,eAAI,EAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC"}