tywrap 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 (137) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +319 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +263 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/index.d.ts +41 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +234 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/core/analyzer.d.ts +63 -0
  12. package/dist/core/analyzer.d.ts.map +1 -0
  13. package/dist/core/analyzer.js +676 -0
  14. package/dist/core/analyzer.js.map +1 -0
  15. package/dist/core/discovery.d.ts +85 -0
  16. package/dist/core/discovery.d.ts.map +1 -0
  17. package/dist/core/discovery.js +344 -0
  18. package/dist/core/discovery.js.map +1 -0
  19. package/dist/core/generator.d.ts +37 -0
  20. package/dist/core/generator.d.ts.map +1 -0
  21. package/dist/core/generator.js +368 -0
  22. package/dist/core/generator.js.map +1 -0
  23. package/dist/core/mapper.d.ts +40 -0
  24. package/dist/core/mapper.d.ts.map +1 -0
  25. package/dist/core/mapper.js +401 -0
  26. package/dist/core/mapper.js.map +1 -0
  27. package/dist/core/validation.d.ts +79 -0
  28. package/dist/core/validation.d.ts.map +1 -0
  29. package/dist/core/validation.js +486 -0
  30. package/dist/core/validation.js.map +1 -0
  31. package/dist/index.d.ts +26 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +29 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/runtime/base.d.ts +12 -0
  36. package/dist/runtime/base.d.ts.map +1 -0
  37. package/dist/runtime/base.js +6 -0
  38. package/dist/runtime/base.js.map +1 -0
  39. package/dist/runtime/errors.d.ts +17 -0
  40. package/dist/runtime/errors.d.ts.map +1 -0
  41. package/dist/runtime/errors.js +21 -0
  42. package/dist/runtime/errors.js.map +1 -0
  43. package/dist/runtime/http.d.ts +22 -0
  44. package/dist/runtime/http.d.ts.map +1 -0
  45. package/dist/runtime/http.js +79 -0
  46. package/dist/runtime/http.js.map +1 -0
  47. package/dist/runtime/index.d.ts +8 -0
  48. package/dist/runtime/index.d.ts.map +1 -0
  49. package/dist/runtime/index.js +17 -0
  50. package/dist/runtime/index.js.map +1 -0
  51. package/dist/runtime/node.d.ts +48 -0
  52. package/dist/runtime/node.d.ts.map +1 -0
  53. package/dist/runtime/node.js +328 -0
  54. package/dist/runtime/node.js.map +1 -0
  55. package/dist/runtime/optimized-node.d.ts +131 -0
  56. package/dist/runtime/optimized-node.d.ts.map +1 -0
  57. package/dist/runtime/optimized-node.js +622 -0
  58. package/dist/runtime/optimized-node.js.map +1 -0
  59. package/dist/runtime/protocol.d.ts +3 -0
  60. package/dist/runtime/protocol.d.ts.map +1 -0
  61. package/dist/runtime/protocol.js +3 -0
  62. package/dist/runtime/protocol.js.map +1 -0
  63. package/dist/runtime/pyodide.d.ts +27 -0
  64. package/dist/runtime/pyodide.d.ts.map +1 -0
  65. package/dist/runtime/pyodide.js +191 -0
  66. package/dist/runtime/pyodide.js.map +1 -0
  67. package/dist/tools/python_suite.js +173 -0
  68. package/dist/tools/python_suite.js.map +1 -0
  69. package/dist/types/index.d.ts +299 -0
  70. package/dist/types/index.d.ts.map +1 -0
  71. package/dist/types/index.js +5 -0
  72. package/dist/types/index.js.map +1 -0
  73. package/dist/tywrap.d.ts +29 -0
  74. package/dist/tywrap.d.ts.map +1 -0
  75. package/dist/tywrap.js +589 -0
  76. package/dist/tywrap.js.map +1 -0
  77. package/dist/utils/bundle-optimizer.d.ts +182 -0
  78. package/dist/utils/bundle-optimizer.d.ts.map +1 -0
  79. package/dist/utils/bundle-optimizer.js +680 -0
  80. package/dist/utils/bundle-optimizer.js.map +1 -0
  81. package/dist/utils/cache.d.ts +149 -0
  82. package/dist/utils/cache.d.ts.map +1 -0
  83. package/dist/utils/cache.js +492 -0
  84. package/dist/utils/cache.js.map +1 -0
  85. package/dist/utils/codec.d.ts +94 -0
  86. package/dist/utils/codec.d.ts.map +1 -0
  87. package/dist/utils/codec.js +150 -0
  88. package/dist/utils/codec.js.map +1 -0
  89. package/dist/utils/logger.d.ts +42 -0
  90. package/dist/utils/logger.d.ts.map +1 -0
  91. package/dist/utils/logger.js +140 -0
  92. package/dist/utils/logger.js.map +1 -0
  93. package/dist/utils/memory-profiler.d.ts +123 -0
  94. package/dist/utils/memory-profiler.d.ts.map +1 -0
  95. package/dist/utils/memory-profiler.js +426 -0
  96. package/dist/utils/memory-profiler.js.map +1 -0
  97. package/dist/utils/parallel-processor.d.ts +146 -0
  98. package/dist/utils/parallel-processor.d.ts.map +1 -0
  99. package/dist/utils/parallel-processor.js +636 -0
  100. package/dist/utils/parallel-processor.js.map +1 -0
  101. package/dist/utils/python.d.ts +8 -0
  102. package/dist/utils/python.d.ts.map +1 -0
  103. package/dist/utils/python.js +56 -0
  104. package/dist/utils/python.js.map +1 -0
  105. package/dist/utils/runtime.d.ts +153 -0
  106. package/dist/utils/runtime.d.ts.map +1 -0
  107. package/dist/utils/runtime.js +519 -0
  108. package/dist/utils/runtime.js.map +1 -0
  109. package/package.json +136 -0
  110. package/runtime/python_bridge.py +476 -0
  111. package/src/cli.ts +331 -0
  112. package/src/config/index.ts +289 -0
  113. package/src/core/analyzer.ts +788 -0
  114. package/src/core/discovery.ts +415 -0
  115. package/src/core/generator.ts +447 -0
  116. package/src/core/mapper.ts +504 -0
  117. package/src/core/validation.ts +693 -0
  118. package/src/index.ts +83 -0
  119. package/src/runtime/base.ts +32 -0
  120. package/src/runtime/errors.ts +19 -0
  121. package/src/runtime/http.ts +132 -0
  122. package/src/runtime/index.ts +24 -0
  123. package/src/runtime/node.ts +431 -0
  124. package/src/runtime/optimized-node.ts +838 -0
  125. package/src/runtime/protocol.ts +2 -0
  126. package/src/runtime/pyodide.ts +228 -0
  127. package/src/types/global.d.ts +60 -0
  128. package/src/types/index.ts +410 -0
  129. package/src/tywrap.ts +669 -0
  130. package/src/utils/bundle-optimizer.ts +876 -0
  131. package/src/utils/cache.ts +634 -0
  132. package/src/utils/codec.ts +275 -0
  133. package/src/utils/logger.ts +201 -0
  134. package/src/utils/memory-profiler.ts +582 -0
  135. package/src/utils/parallel-processor.ts +879 -0
  136. package/src/utils/python.ts +79 -0
  137. package/src/utils/runtime.ts +616 -0
package/dist/tywrap.js ADDED
@@ -0,0 +1,589 @@
1
+ /**
2
+ * Main tywrap API entry point
3
+ */
4
+ import { CodeGenerator } from './core/generator.js';
5
+ import { TypeMapper } from './core/mapper.js';
6
+ import { createConfig } from './config/index.js';
7
+ import { fsUtils, pathUtils, processUtils, hashUtils } from './utils/runtime.js';
8
+ import { globalCache } from './utils/cache.js';
9
+ import { globalParallelProcessor } from './utils/parallel-processor.js';
10
+ import { resolvePythonExecutable } from './utils/python.js';
11
+ // Collect unknown typing constructs encountered during annotation parsing (per-generate run)
12
+ let unknownTypeNamesCollector = new Map();
13
+ function recordUnknown(name) {
14
+ const prev = unknownTypeNamesCollector.get(name) ?? 0;
15
+ unknownTypeNamesCollector.set(name, prev + 1);
16
+ }
17
+ export async function tywrap(options = {}) {
18
+ const mapper = new TypeMapper({ presets: options.types?.presets });
19
+ const generator = new CodeGenerator(mapper);
20
+ globalCache.setDebug(options.debug ?? false);
21
+ globalParallelProcessor.setDebug(options.debug ?? false);
22
+ return {
23
+ mapper,
24
+ generator,
25
+ options,
26
+ };
27
+ }
28
+ export default tywrap;
29
+ /**
30
+ * Append minimal tsd tests for a generated module (optional dev aid)
31
+ */
32
+ export async function emitTypeTestsForModule(moduleName, outDir = 'test-d/generated') {
33
+ const { writeFile, mkdir } = await import('fs/promises');
34
+ const { join } = await import('path');
35
+ try {
36
+ await mkdir(outDir, { recursive: true });
37
+ }
38
+ catch { }
39
+ const filePath = join(outDir, `${moduleName}.test-d.ts`);
40
+ const content = `import { expectType } from 'tsd';
41
+ import * as mod from '../../generated/${moduleName}.generated.ts';
42
+
43
+ // Opportunistic: ensure module namespace is an object
44
+ expectType<Record<string, unknown>>(mod);
45
+ `;
46
+ await writeFile(filePath, content, 'utf-8');
47
+ }
48
+ /**
49
+ * Generate TypeScript wrappers for configured Python modules.
50
+ * Minimal MVP implementation: resolves module file, analyzes, generates TS, writes to output.dir
51
+ */
52
+ export async function generate(options) {
53
+ const resolvedOptions = createConfig(options);
54
+ const instance = await tywrap(resolvedOptions);
55
+ const written = [];
56
+ const warnings = [];
57
+ const outputDir = resolvedOptions.output.dir;
58
+ const caching = resolvedOptions.performance.caching;
59
+ const cacheDir = '.tywrap/cache';
60
+ const pythonPath = await resolvePythonExecutable({
61
+ pythonPath: resolvedOptions.runtime?.node?.pythonPath,
62
+ virtualEnv: resolvedOptions.runtime?.node?.virtualEnv,
63
+ });
64
+ // Ensure directory exists (Node-only best-effort)
65
+ try {
66
+ const modFs = await import('fs/promises');
67
+ await modFs.mkdir(outputDir, { recursive: true });
68
+ }
69
+ catch {
70
+ // ignore in non-node or if already exists
71
+ }
72
+ const modules = resolvedOptions.pythonModules ?? {};
73
+ for (const entry of Object.entries(modules)) {
74
+ const moduleKey = entry[0];
75
+ // reset collector for each module
76
+ unknownTypeNamesCollector = new Map();
77
+ // Prefer Python IR extractor over TS analyzer with optional cache
78
+ const cacheKey = await computeCacheKey(moduleKey, options);
79
+ let ir = null;
80
+ let irError;
81
+ if (caching && fsUtils.isAvailable()) {
82
+ try {
83
+ const modFs = await import('fs/promises');
84
+ await modFs.mkdir(cacheDir, { recursive: true });
85
+ }
86
+ catch { }
87
+ try {
88
+ const cached = await fsUtils.readFile(pathUtils.join(cacheDir, cacheKey));
89
+ ir = JSON.parse(cached);
90
+ }
91
+ catch {
92
+ ir = null;
93
+ }
94
+ }
95
+ if (!ir) {
96
+ const fetchResult = await fetchPythonIr(moduleKey, pythonPath);
97
+ ir = fetchResult.ir;
98
+ irError = fetchResult.error;
99
+ if (ir && caching && fsUtils.isAvailable()) {
100
+ try {
101
+ await fsUtils.writeFile(pathUtils.join(cacheDir, cacheKey), JSON.stringify(ir));
102
+ }
103
+ catch { }
104
+ }
105
+ }
106
+ if (!ir) {
107
+ warnings.push(`No IR produced for module ${moduleKey}${irError ? `: ${irError}` : ''}`);
108
+ continue;
109
+ }
110
+ const moduleModel = transformIrToTsModel(ir);
111
+ // Generate module code
112
+ const annotatedJSDoc = Boolean(resolvedOptions.output?.annotatedJSDoc);
113
+ const gen = instance.generator.generateModuleDefinition(moduleModel, annotatedJSDoc);
114
+ // Write file
115
+ const baseName = moduleModel.name || 'module';
116
+ const outPath = pathUtils.join(outputDir, `${baseName}.generated.ts`);
117
+ await fsUtils.writeFile(outPath, gen.typescript);
118
+ written.push(outPath);
119
+ // Optional .d.ts emission (header-only declarations mirroring exports)
120
+ if (resolvedOptions.output?.declaration) {
121
+ const dtsPath = pathUtils.join(outputDir, `${baseName}.generated.d.ts`);
122
+ const dts = renderDts(gen.typescript);
123
+ await fsUtils.writeFile(dtsPath, dts);
124
+ written.push(dtsPath);
125
+ }
126
+ // Optional source map emission (placeholder mapping for now)
127
+ if (resolvedOptions.output?.sourceMap) {
128
+ const mapPath = pathUtils.join(outputDir, `${baseName}.generated.ts.map`);
129
+ const map = renderSourceMapPlaceholder(moduleModel.name);
130
+ await fsUtils.writeFile(mapPath, map);
131
+ written.push(mapPath);
132
+ }
133
+ // Emit warning summary of unknown typing constructs (best-effort)
134
+ if (unknownTypeNamesCollector.size > 0) {
135
+ const entries = Array.from(unknownTypeNamesCollector.entries()).sort((a, b) => b[1] - a[1]);
136
+ const unkList = entries
137
+ .slice(0, 25)
138
+ .map(([n, c]) => `${n}:${c}`)
139
+ .join(', ');
140
+ warnings.push(`Module ${baseName}: unknown typing constructs encountered: ${unkList}${entries.length > 25 ? '…' : ''}`);
141
+ // Write JSON report
142
+ try {
143
+ const reportsDir = pathUtils.join('.tywrap', 'reports');
144
+ await fsUtils.writeFile(pathUtils.join(reportsDir, `${baseName}.json`), JSON.stringify({
145
+ module: baseName,
146
+ unknowns: Object.fromEntries(entries),
147
+ generatedAt: new Date().toISOString(),
148
+ }));
149
+ }
150
+ catch {
151
+ // ignore
152
+ }
153
+ }
154
+ }
155
+ return { written, warnings };
156
+ }
157
+ /**
158
+ * Invoke the Python IR CLI to get JSON IR for a module.
159
+ */
160
+ async function fetchPythonIr(moduleName, pythonPath) {
161
+ if (!processUtils.isAvailable()) {
162
+ return { ir: null, error: 'Subprocess operations not available in this runtime' };
163
+ }
164
+ try {
165
+ const result = await processUtils.exec(pythonPath, [
166
+ '-m',
167
+ 'tywrap_ir',
168
+ '--module',
169
+ moduleName,
170
+ '--no-pretty',
171
+ ]);
172
+ if (result.code === 0) {
173
+ try {
174
+ return { ir: JSON.parse(result.stdout) };
175
+ }
176
+ catch {
177
+ return {
178
+ ir: null,
179
+ error: `Failed to parse tywrap_ir output. stderr: ${result.stderr.trim() || 'empty'}`,
180
+ };
181
+ }
182
+ }
183
+ // Fallback to invoking local __main__.py
184
+ const localMain = pathUtils.join(process.cwd(), 'tywrap_ir', 'tywrap_ir', '__main__.py');
185
+ const fallback = await processUtils.exec(pythonPath, [
186
+ localMain,
187
+ '--module',
188
+ moduleName,
189
+ '--no-pretty',
190
+ ]);
191
+ if (fallback.code !== 0) {
192
+ return {
193
+ ir: null,
194
+ error: `tywrap_ir failed. stderr: ${fallback.stderr.trim() || result.stderr.trim() || 'empty'}`,
195
+ };
196
+ }
197
+ try {
198
+ return { ir: JSON.parse(fallback.stdout) };
199
+ }
200
+ catch {
201
+ return {
202
+ ir: null,
203
+ error: `Failed to parse tywrap_ir fallback output. stderr: ${fallback.stderr.trim() || 'empty'}`,
204
+ };
205
+ }
206
+ }
207
+ catch (err) {
208
+ return { ir: null, error: err instanceof Error ? err.message : String(err) };
209
+ }
210
+ }
211
+ /**
212
+ * Convert JSON IR from Python into the internal TypeScript model used by the generator.
213
+ */
214
+ function transformIrToTsModel(ir) {
215
+ const obj = typeof ir === 'object' && ir !== null ? ir : {};
216
+ const functions = obj.functions ?? [];
217
+ const classes = obj.classes ?? [];
218
+ const mapParam = (p) => ({
219
+ name: String(p.name ?? ''),
220
+ type: parseAnnotationToPythonType(p.annotation),
221
+ optional: Boolean(p.default),
222
+ varArgs: p.kind === 'VAR_POSITIONAL',
223
+ kwArgs: p.kind === 'VAR_KEYWORD',
224
+ });
225
+ const mapFunc = (f) => ({
226
+ name: String(f.name ?? ''),
227
+ signature: {
228
+ parameters: Array.isArray(f.parameters)
229
+ ? f.parameters.map(v => mapParam((v ?? {})))
230
+ : [],
231
+ returnType: parseAnnotationToPythonType(f.returns),
232
+ isAsync: Boolean(f.is_async),
233
+ isGenerator: Boolean(f.is_generator),
234
+ },
235
+ docstring: f.docstring ?? undefined,
236
+ decorators: [],
237
+ isAsync: Boolean(f.is_async),
238
+ isGenerator: Boolean(f.is_generator),
239
+ returnType: parseAnnotationToPythonType(f.returns),
240
+ parameters: Array.isArray(f.parameters)
241
+ ? f.parameters.map(v => mapParam((v ?? {})))
242
+ : [],
243
+ });
244
+ const mapClass = (c) => ({
245
+ name: String(c.name ?? ''),
246
+ bases: Array.isArray(c.bases) ? c.bases : [],
247
+ methods: Array.isArray(c.methods)
248
+ ? c.methods.map(v => mapFunc((v ?? {})))
249
+ : [],
250
+ properties: Array.isArray(c.fields)
251
+ ? c.fields.map(v => {
252
+ const p = (v ?? {});
253
+ const optional = Boolean(p.default);
254
+ return {
255
+ name: String(p.name ?? ''),
256
+ type: parseAnnotationToPythonType(p.annotation),
257
+ readonly: false,
258
+ setter: false,
259
+ getter: true,
260
+ optional,
261
+ };
262
+ })
263
+ : [],
264
+ docstring: c.docstring ?? undefined,
265
+ decorators: c.typed_dict ? ['__typed_dict__'] : [],
266
+ kind: c.typed_dict
267
+ ? 'typed_dict'
268
+ : c.is_protocol
269
+ ? 'protocol'
270
+ : c.is_namedtuple
271
+ ? 'namedtuple'
272
+ : c.is_dataclass
273
+ ? 'dataclass'
274
+ : c.is_pydantic
275
+ ? 'pydantic'
276
+ : 'class',
277
+ });
278
+ const moduleModel = {
279
+ name: obj.module ?? 'module',
280
+ path: undefined,
281
+ version: typeof obj.metadata?.package_version === 'string'
282
+ ? obj.metadata?.package_version
283
+ : undefined,
284
+ functions: functions.map(v => mapFunc((v ?? {}))),
285
+ classes: classes.map(v => mapClass((v ?? {}))),
286
+ imports: [],
287
+ exports: [],
288
+ };
289
+ return moduleModel;
290
+ }
291
+ function unknownType() {
292
+ return { kind: 'custom', name: 'Any', module: 'typing' };
293
+ }
294
+ // Parse Python IR annotation string -> PythonType
295
+ function parseAnnotationToPythonType(annotation, depth = 0) {
296
+ if (annotation === null || annotation === undefined) {
297
+ return unknownType();
298
+ }
299
+ if (depth > 100) {
300
+ return unknownType();
301
+ }
302
+ const raw = String(annotation).trim();
303
+ // Handle built-in class repr: <class 'int'>
304
+ const classMatch = raw.match(/^<class ['"][^'"]+['"]>$/);
305
+ if (classMatch) {
306
+ const inner = (raw.match(/^<class ['"]([^'"]+)['"]>$/) ?? [])[1] ?? '';
307
+ const name = (inner.split('.').pop() ?? '').toString();
308
+ return mapSimpleName(name);
309
+ }
310
+ // PEP 604 unions: int | str | None
311
+ if (raw.includes(' | ')) {
312
+ const parts = splitTopLevel(raw, '|');
313
+ const types = parts.map(p => parseAnnotationToPythonType(p.trim(), depth + 1));
314
+ return { kind: 'union', types };
315
+ }
316
+ // typing.Union[...]
317
+ if (raw.startsWith('typing.Union[') || raw.startsWith('Union[')) {
318
+ const inner = raw.slice(raw.indexOf('[') + 1, raw.lastIndexOf(']'));
319
+ const parts = splitTopLevel(inner, ',');
320
+ const types = parts.map(p => parseAnnotationToPythonType(p.trim(), depth + 1));
321
+ return { kind: 'union', types };
322
+ }
323
+ // Optional[T]
324
+ if (raw.startsWith('typing.Optional[') || raw.startsWith('Optional[')) {
325
+ const inner = raw.slice(raw.indexOf('[') + 1, raw.lastIndexOf(']'));
326
+ const base = parseAnnotationToPythonType(inner, depth + 1);
327
+ return { kind: 'optional', type: base };
328
+ }
329
+ // Literal[...] -> literal values union
330
+ if (raw.startsWith('typing.Literal[') || raw.startsWith('Literal[')) {
331
+ const inner = raw.slice(raw.indexOf('[') + 1, raw.lastIndexOf(']'));
332
+ const parts = splitTopLevel(inner, ',');
333
+ if (parts.length === 1) {
334
+ return mapLiteral(String(parts[0] ?? '').trim());
335
+ }
336
+ return { kind: 'union', types: parts.map(p => mapLiteral(String(p).trim())) };
337
+ }
338
+ // typing_extensions wrappers: ClassVar[T], Final[T], Required[T], NotRequired[T]
339
+ const extMatch = raw.match(/^(typing\.|typing_extensions\.)?(ClassVar|Final|Required|NotRequired)\[(.*)\]$/);
340
+ if (extMatch) {
341
+ const inner = extMatch[3] ?? '';
342
+ const base = parseAnnotationToPythonType(inner, depth + 1);
343
+ return base;
344
+ }
345
+ // LiteralString
346
+ if (raw === 'typing.LiteralString' || raw === 'LiteralString') {
347
+ return { kind: 'primitive', name: 'str' };
348
+ }
349
+ // Callable[[...], R]
350
+ if (raw.startsWith('typing.Callable[') || raw.startsWith('Callable[')) {
351
+ const inner = raw.slice(raw.indexOf('[') + 1, raw.lastIndexOf(']'));
352
+ const parts = splitTopLevel(inner, ',');
353
+ if (parts.length >= 2) {
354
+ const paramsPart = (parts[0] ?? '').trim();
355
+ const returnPart = parts.slice(1).join(',').trim();
356
+ const paramInner = paramsPart.startsWith('[') && paramsPart.endsWith(']') ? paramsPart.slice(1, -1) : '';
357
+ const paramTypes = (() => {
358
+ const trimmed = paramInner.trim();
359
+ if (trimmed === '...' || trimmed === 'Ellipsis') {
360
+ return [{ kind: 'custom', name: '...' }];
361
+ }
362
+ return trimmed
363
+ ? splitTopLevel(trimmed, ',').map(p => parseAnnotationToPythonType(p.trim(), depth + 1))
364
+ : [];
365
+ })();
366
+ const returnType = parseAnnotationToPythonType(returnPart, depth + 1);
367
+ return { kind: 'callable', parameters: paramTypes, returnType };
368
+ }
369
+ }
370
+ // Mapping[K, V] / Dict[K, V] normalization
371
+ if (raw.startsWith('typing.Mapping[') || raw.startsWith('Mapping[')) {
372
+ const inner = raw.slice(raw.indexOf('[') + 1, raw.lastIndexOf(']'));
373
+ const parts = splitTopLevel(inner, ',');
374
+ const itemTypes = parts.map(p => parseAnnotationToPythonType(p.trim(), depth + 1));
375
+ return { kind: 'collection', name: 'dict', itemTypes };
376
+ }
377
+ // Annotated[T, ...] -> annotated node with base and metadata
378
+ if (raw.startsWith('typing.Annotated[') || raw.startsWith('Annotated[')) {
379
+ const inner = raw.slice(raw.indexOf('[') + 1, raw.lastIndexOf(']'));
380
+ const parts = splitTopLevel(inner, ',');
381
+ if (parts.length > 0) {
382
+ const base = parseAnnotationToPythonType((parts[0] ?? '').trim(), depth + 1);
383
+ const metaParts = parts.slice(1).map(p => String(p).trim());
384
+ return { kind: 'annotated', base, metadata: metaParts };
385
+ }
386
+ }
387
+ // Collections: list[T], dict[K,V], tuple[...], set[T]
388
+ const coll = normalizeCollectionName(raw);
389
+ if (coll) {
390
+ const { name, inner } = coll;
391
+ const itemParts = name === 'dict' ? splitTopLevel(inner ?? '', ',') : splitTopLevel(inner ?? '', ',');
392
+ const itemTypes = (inner ? itemParts : []).map(p => parseAnnotationToPythonType(p.trim(), depth + 1));
393
+ return { kind: 'collection', name, itemTypes };
394
+ }
395
+ // typing.Callable[...] unlikely for now - treat as custom
396
+ // Bare names like int, str, float, bool, bytes, None
397
+ return mapSimpleName(raw);
398
+ }
399
+ function mapSimpleName(name) {
400
+ const n = name.replace(/^typing\./, '').trim();
401
+ if (n === 'int' || n === 'float' || n === 'str' || n === 'bool' || n === 'bytes') {
402
+ // cast to the specific union type without using any
403
+ return { kind: 'primitive', name: n };
404
+ }
405
+ // Track unknown typing-ish names for diagnostics
406
+ if (n === 'Any' ||
407
+ n === 'Never' ||
408
+ n === 'LiteralString' ||
409
+ n === 'ClassVar' ||
410
+ n === 'Final' ||
411
+ n === 'TypeAlias' ||
412
+ n === 'Required' ||
413
+ n === 'NotRequired') {
414
+ try {
415
+ recordUnknown(n);
416
+ }
417
+ catch { }
418
+ }
419
+ if (n === 'None' || n.toLowerCase() === 'nonetype') {
420
+ return { kind: 'primitive', name: 'None' };
421
+ }
422
+ if (n === 'list' || n === 'List') {
423
+ return { kind: 'collection', name: 'list', itemTypes: [] };
424
+ }
425
+ if (n === 'dict' || n === 'Dict') {
426
+ return { kind: 'collection', name: 'dict', itemTypes: [] };
427
+ }
428
+ if (n === 'tuple' || n === 'Tuple') {
429
+ return { kind: 'collection', name: 'tuple', itemTypes: [] };
430
+ }
431
+ if (n === 'set' || n === 'Set') {
432
+ return { kind: 'collection', name: 'set', itemTypes: [] };
433
+ }
434
+ return { kind: 'custom', name: n };
435
+ }
436
+ function normalizeCollectionName(raw) {
437
+ const m = raw.match(/^(typing\.)?(List|Dict|Tuple|Set|list|dict|tuple|set)\[(.*)\]$/);
438
+ if (!m) {
439
+ return null;
440
+ }
441
+ const nameRaw = String(m[2] ?? '');
442
+ const name = nameRaw.toLowerCase() === 'list'
443
+ ? 'list'
444
+ : nameRaw.toLowerCase() === 'dict'
445
+ ? 'dict'
446
+ : nameRaw.toLowerCase() === 'tuple'
447
+ ? 'tuple'
448
+ : 'set';
449
+ return { name, inner: String(m[3] ?? '') };
450
+ }
451
+ function splitTopLevel(input, sep) {
452
+ const results = [];
453
+ let level = 0;
454
+ let cur = '';
455
+ let guard = 0;
456
+ for (let i = 0; i < input.length; i++) {
457
+ // Depth/length guard to avoid pathological recursion/loops
458
+ guard++;
459
+ if (guard > 20000) {
460
+ // Bail out safely; push remaining and break
461
+ if (cur.trim()) {
462
+ results.push(cur.trim());
463
+ }
464
+ break;
465
+ }
466
+ const ch = input.charAt(i);
467
+ if (ch === '[' || ch === '(') {
468
+ level++;
469
+ }
470
+ if (ch === ']' || ch === ')') {
471
+ level = Math.max(0, level - 1);
472
+ }
473
+ if (level === 0 && input.slice(i, i + sep.length) === sep) {
474
+ results.push(cur.trim());
475
+ cur = '';
476
+ i += sep.length - 1;
477
+ continue;
478
+ }
479
+ cur += ch;
480
+ }
481
+ if (cur.trim()) {
482
+ results.push(cur.trim());
483
+ }
484
+ return results;
485
+ }
486
+ function mapLiteral(text) {
487
+ // strip quotes if present
488
+ const t = text.trim();
489
+ if ((t.startsWith("'") && t.endsWith("'")) || (t.startsWith('"') && t.endsWith('"'))) {
490
+ return { kind: 'literal', value: t.slice(1, -1) };
491
+ }
492
+ if (t === 'True' || t === 'False') {
493
+ return { kind: 'literal', value: t === 'True' };
494
+ }
495
+ if (t === 'None') {
496
+ return { kind: 'literal', value: null };
497
+ }
498
+ const num = Number(t);
499
+ if (!Number.isNaN(num)) {
500
+ return { kind: 'literal', value: num };
501
+ }
502
+ // fallback
503
+ return { kind: 'custom', name: t };
504
+ }
505
+ /**
506
+ * Compute a stable cache key filename for a module and options
507
+ */
508
+ async function computeCacheKey(moduleName, options) {
509
+ const modules = options.pythonModules ?? {};
510
+ const foundEntry = Object.entries(modules).find(([name]) => name === moduleName);
511
+ const moduleConfig = foundEntry ? foundEntry[1] : undefined;
512
+ const runtimePython = await resolvePythonExecutable({
513
+ pythonPath: options.runtime?.node?.pythonPath,
514
+ virtualEnv: options.runtime?.node?.virtualEnv,
515
+ });
516
+ const keyObject = {
517
+ module: moduleName,
518
+ moduleVersion: moduleConfig?.version ?? null,
519
+ runtime: {
520
+ pythonPath: runtimePython,
521
+ virtualEnv: options.runtime?.node?.virtualEnv ?? null,
522
+ },
523
+ output: {
524
+ format: options.output?.format ?? 'esm',
525
+ declaration: options.output?.declaration ?? false,
526
+ sourceMap: options.output?.sourceMap ?? false,
527
+ },
528
+ performance: {
529
+ caching: options.performance?.caching ?? false,
530
+ compression: options.performance?.compression ?? 'none',
531
+ },
532
+ typeHints: moduleConfig?.typeHints ?? 'strict',
533
+ };
534
+ const normalized = JSON.stringify(keyObject);
535
+ const digest = await hashUtils.sha256Hex(normalized);
536
+ return `ir_${moduleName}_${digest.slice(0, 16)}.json`;
537
+ }
538
+ /**
539
+ * Very lightweight .d.ts emitter derived from generated TS wrappers
540
+ * This is intentionally minimal and stable for our wrappers shape.
541
+ */
542
+ function renderDts(generatedTs) {
543
+ const header = `// Generated by tywrap\n// Type Declarations\n// DO NOT EDIT MANUALLY\n\n`;
544
+ const lines = [header];
545
+ // Extract function exports
546
+ const funcRegex = /export\s+async\s+function\s+(\w+)\s*\(([^)]*)\)\s*:\s*Promise<([^>]+)>/g;
547
+ let m;
548
+ while ((m = funcRegex.exec(generatedTs)) !== null) {
549
+ const name = m[1];
550
+ const params = m[2];
551
+ const ret = m[3];
552
+ lines.push(`export function ${name}(${params}): Promise<${ret}>;`);
553
+ }
554
+ // Extract class exports and methods
555
+ const classRegex = /export\s+class\s+(\w+)\s*\{([\s\S]*?)\n\}/g;
556
+ while ((m = classRegex.exec(generatedTs)) !== null) {
557
+ const className = String(m[1] ?? '');
558
+ const body = String(m[2] ?? '');
559
+ // Constructor is always variadic unknown[] in current generator
560
+ const methods = [];
561
+ const methodRegex = /\n\s+async\s+(\w+)\s*\(([^)]*)\)\s*:\s*Promise<([^>]+)>/g;
562
+ let mm;
563
+ while ((mm = methodRegex.exec(body)) !== null) {
564
+ methods.push(` ${mm[1]}(${mm[2]}): Promise<${mm[3]}>;`);
565
+ }
566
+ lines.push(`export class ${className} {`);
567
+ lines.push(` constructor(...args: unknown[]);`);
568
+ if (methods.length > 0) {
569
+ lines.push(methods.join('\n'));
570
+ }
571
+ lines.push('}');
572
+ }
573
+ return `${lines.join('\n')}\n`;
574
+ }
575
+ /**
576
+ * Minimal source map placeholder (stable, empty mappings)
577
+ */
578
+ function renderSourceMapPlaceholder(moduleName) {
579
+ const safe = moduleName ?? 'module';
580
+ const map = {
581
+ version: 3,
582
+ file: `${safe}.generated.ts`,
583
+ sources: [],
584
+ names: [],
585
+ mappings: '',
586
+ };
587
+ return JSON.stringify(map, null, 0);
588
+ }
589
+ //# sourceMappingURL=tywrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tywrap.js","sourceRoot":"","sources":["../src/tywrap.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AASjD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,6FAA6F;AAC7F,IAAI,yBAAyB,GAAwB,IAAI,GAAG,EAAE,CAAC;AAC/D,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,IAAI,GAAG,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,yBAAyB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAkC,EAAE;IAC/D,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAE5C,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAC7C,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAEzD,OAAO;QACL,MAAM;QACN,SAAS;QACT,OAAO;KACR,CAAC;AACJ,CAAC;AAED,eAAe,MAAM,CAAC;AAEtB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAkB,EAClB,MAAM,GAAG,kBAAkB;IAE3B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,YAAY,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG;wCACsB,UAAU;;;;CAIjD,CAAC;IACA,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAA+B;IAE/B,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;IAC7C,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC;IACpD,MAAM,QAAQ,GAAG,eAAe,CAAC;IACjC,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC;QAC/C,UAAU,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU;QACrD,UAAU,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU;KACtD,CAAC,CAAC;IAEH,kDAAkD;IAClD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,aAAa,IAAI,EAAE,CAAC;IACpD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,kCAAkC;QAClC,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;QACtC,kEAAkE;QAClE,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,EAAE,GAAmB,IAAI,CAAC;QAC9B,IAAI,OAA2B,CAAC;QAChC,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC1C,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC1E,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE,GAAG,IAAI,CAAC;YACZ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC/D,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;YACpB,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,IAAI,EAAE,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC3C,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClF,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,QAAQ,CAAC,IAAI,CAAC,6BAA6B,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxF,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAE7C,uBAAuB;QACvB,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,wBAAwB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAErF,aAAa;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,IAAI,QAAQ,CAAC;QAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,eAAe,CAAC,CAAC;QACtE,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtB,uEAAuE;QACvE,IAAI,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,iBAAiB,CAAC,CAAC;YACxE,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,6DAA6D;QAC7D,IAAI,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,mBAAmB,CAAC,CAAC;YAC1E,MAAM,GAAG,GAAG,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,kEAAkE;QAClE,IAAI,yBAAyB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5F,MAAM,OAAO,GAAG,OAAO;iBACpB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBACZ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;iBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,QAAQ,CAAC,IAAI,CACX,UAAU,QAAQ,4CAA4C,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACzG,CAAC;YACF,oBAAoB;YACpB,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBACxD,MAAM,OAAO,CAAC,SAAS,CACrB,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,OAAO,CAAC,EAC9C,IAAI,CAAC,SAAS,CAAC;oBACb,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;oBACrC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACtC,CAAC,CACH,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,UAAkB,EAClB,UAAkB;IAElB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QAChC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,qDAAqD,EAAE,CAAC;IACpF,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE;YACjD,IAAI;YACJ,WAAW;YACX,UAAU;YACV,UAAU;YACV,aAAa;SACd,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,KAAK,EAAE,6CAA6C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,EAAE;iBACtF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACzF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE;YACnD,SAAS;YACT,UAAU;YACV,UAAU;YACV,aAAa;SACd,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,6BAA6B,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,EAAE;aAChG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,sDAAsD,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,EAAE;aACjG,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,EAAW;IACvC,MAAM,GAAG,GACP,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAE,EAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,MAAM,SAAS,GAAI,GAAG,CAAC,SAAuB,IAAI,EAAE,CAAC;IACrD,MAAM,OAAO,GAAI,GAAG,CAAC,OAAqB,IAAI,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,CAAC,CAA0B,EAAa,EAAE,CAAC,CAAC;QAC3D,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,UAAU,CAAC;QAC/C,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5B,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,gBAAgB;QACpC,MAAM,EAAE,CAAC,CAAC,IAAI,KAAK,aAAa;KACjC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,CAA0B,EAAkB,EAAE,CAAC,CAAC;QAC/D,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,SAAS,EAAE;YACT,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;gBACrC,CAAC,CAAE,CAAC,CAAC,UAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC,CAAC;gBACtF,CAAC,CAAC,EAAE;YACN,UAAU,EAAE,2BAA2B,CAAC,CAAC,CAAC,OAAO,CAAC;YAClD,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5B,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;SACrC;QACD,SAAS,EAAG,CAAC,CAAC,SAAgC,IAAI,SAAS;QAC3D,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5B,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;QACpC,UAAU,EAAE,2BAA2B,CAAC,CAAC,CAAC,OAAO,CAAC;QAClD,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACrC,CAAC,CAAE,CAAC,CAAC,UAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC,CAAC;YACtF,CAAC,CAAC,EAAE;KACP,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,CAAC,CAA0B,EAAe,EAAE,CAAC,CAAC;QAC7D,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,KAAkB,CAAC,CAAC,CAAC,EAAE;QAC1D,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,CAAC,CAAE,CAAC,CAAC,OAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC,CAAC;YAClF,CAAC,CAAC,EAAE;QACN,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACjC,CAAC,CAAG,CAAC,CAAC,MAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;gBAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACpC,OAAO;oBACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;oBAC1B,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,UAAU,CAAC;oBAC/C,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,IAAI;oBACZ,QAAQ;iBACW,CAAC;YACxB,CAAC,CAA0C;YAC7C,CAAC,CAAC,EAAE;QACN,SAAS,EAAG,CAAC,CAAC,SAAgC,IAAI,SAAS;QAC3D,UAAU,EAAG,CAAC,CAAC,UAAsB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;QAC/D,IAAI,EAAG,CAAC,CAAC,UAAsB;YAC7B,CAAC,CAAC,YAAY;YACd,CAAC,CAAE,CAAC,CAAC,WAAuB;gBAC1B,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAE,CAAC,CAAC,aAAyB;oBAC5B,CAAC,CAAC,YAAY;oBACd,CAAC,CAAE,CAAC,CAAC,YAAwB;wBAC3B,CAAC,CAAC,WAAW;wBACb,CAAC,CAAE,CAAC,CAAC,WAAuB;4BAC1B,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC,OAAO;KACpB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAmB;QAClC,IAAI,EAAG,GAAG,CAAC,MAAiB,IAAI,QAAQ;QACxC,IAAI,EAAE,SAAS;QACf,OAAO,EACL,OAAQ,GAAG,CAAC,QAAgD,EAAE,eAAe,KAAK,QAAQ;YACxF,CAAC,CAAG,GAAG,CAAC,QAAgD,EAAE,eAA0B;YACpF,CAAC,CAAC,SAAS;QACf,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC,CAAC;QAC5E,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC,CAAC;QACzE,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC3D,CAAC;AAED,kDAAkD;AAClD,SAAS,2BAA2B,CAAC,UAAmB,EAAE,KAAK,GAAG,CAAC;IACjE,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAChB,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAEtC,4CAA4C;IAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACzD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,mCAAmC;IACnC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,oBAAoB;IACpB,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,cAAc;IACd,IAAI,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC3D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,uCAAuC;IACvC,IAAI,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAgB,CAAC;IAC9F,CAAC;IAED,iFAAiF;IACjF,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CACxB,gFAAgF,CACjF,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAChB,IAAI,GAAG,KAAK,sBAAsB,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;QAC9D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAgB,CAAC;IAC1D,CAAC;IAED,qBAAqB;IACrB,IAAI,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,MAAM,UAAU,GACd,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,MAAM,UAAU,GAAG,CAAC,GAAiB,EAAE;gBACrC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBAChD,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAgB,CAAC,CAAC;gBACzD,CAAC;gBACD,OAAO,OAAO;oBACZ,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxF,CAAC,CAAC,EAAE,CAAC;YACT,CAAC,CAAC,EAAE,CAAC;YACL,MAAM,UAAU,GAAG,2BAA2B,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACtE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAgB,CAAC;QAChF,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,IAAI,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAgB,CAAC;IACvE,CAAC;IAED,6DAA6D;IAC7D,IAAI,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACxE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,2BAA2B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAgB,CAAC;QACxE,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,MAAM,IAAI,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,SAAS,GACb,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QACtF,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACjD,2BAA2B,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CACjD,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,0DAA0D;IAE1D,qDAAqD;IACrD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QACjF,oDAAoD;QACpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxC,CAAC;IACD,iDAAiD;IACjD,IACE,CAAC,KAAK,KAAK;QACX,CAAC,KAAK,OAAO;QACb,CAAC,KAAK,eAAe;QACrB,CAAC,KAAK,UAAU;QAChB,CAAC,KAAK,OAAO;QACb,CAAC,KAAK,WAAW;QACjB,CAAC,KAAK,UAAU;QAChB,CAAC,KAAK,aAAa,EACnB,CAAC;QACD,IAAI,CAAC;YACH,aAAa,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,uBAAuB,CAC9B,GAAW;IAEX,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACtF,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GACR,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM;QAC9B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM;YAChC,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO;gBACjC,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,KAAK,CAAC;IAChB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,GAAc;IAClD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,2DAA2D;QAC3D,KAAK,EAAE,CAAC;QACR,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;YAClB,4CAA4C;YAC5C,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM;QACR,CAAC;QACD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7B,KAAK,EAAE,CAAC;QACV,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,GAAG,GAAG,EAAE,CAAC;YACT,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,0BAA0B;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAgB,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,MAAM,EAAgB,CAAC;IAChE,CAAC;IACD,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAgB,CAAC;IACxD,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAgB,CAAC;IACvD,CAAC;IACD,WAAW;IACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAgB,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,UAAkB,EAClB,OAA+B;IAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC;QAClD,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU;QAC7C,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU;KAC9C,CAAC,CAAC;IACH,MAAM,SAAS,GAAG;QAChB,MAAM,EAAE,UAAU;QAClB,aAAa,EAAE,YAAY,EAAE,OAAO,IAAI,IAAI;QAC5C,OAAO,EAAE;YACP,UAAU,EAAE,aAAa;YACzB,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI;SACtD;QACD,MAAM,EAAE;YACN,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK;YACvC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,KAAK;YACjD,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK;SAC9C;QACD,WAAW,EAAE;YACX,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,IAAI,KAAK;YAC9C,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,IAAI,MAAM;SACxD;QACD,SAAS,EAAE,YAAY,EAAE,SAAS,IAAI,QAAQ;KACtC,CAAC;IACX,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACrD,OAAO,MAAM,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,WAAmB;IACpC,MAAM,MAAM,GAAG,2EAA2E,CAAC;IAC3F,MAAM,KAAK,GAAa,CAAC,MAAM,CAAC,CAAC;IACjC,2BAA2B;IAC3B,MAAM,SAAS,GAAG,yEAAyE,CAAC;IAC5F,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,oCAAoC;IACpC,MAAM,UAAU,GAAG,4CAA4C,CAAC;IAChE,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,gEAAgE;QAChE,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,0DAA0D,CAAC;QAC/E,IAAI,EAA0B,CAAC;QAC/B,OAAO,CAAC,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,IAAI,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,UAA8B;IAChE,MAAM,IAAI,GAAG,UAAU,IAAI,QAAQ,CAAC;IACpC,MAAM,GAAG,GAAG;QACV,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,GAAG,IAAI,eAAe;QAC5B,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACJ,CAAC;IACX,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC"}