ticbuild 1.0.9 → 1.0.11

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 (85) hide show
  1. package/README.md +146 -25
  2. package/dist/backend/importUtils.d.ts +2 -1
  3. package/dist/backend/importUtils.d.ts.map +1 -1
  4. package/dist/backend/importUtils.js +8 -1
  5. package/dist/backend/importUtils.js.map +1 -1
  6. package/dist/backend/luaBinaryEncoding.d.ts +15 -1
  7. package/dist/backend/luaBinaryEncoding.d.ts.map +1 -1
  8. package/dist/backend/luaBinaryEncoding.js +230 -7
  9. package/dist/backend/luaBinaryEncoding.js.map +1 -1
  10. package/dist/backend/luaEncode.d.ts +16 -0
  11. package/dist/backend/luaEncode.d.ts.map +1 -0
  12. package/dist/backend/luaEncode.js +398 -0
  13. package/dist/backend/luaEncode.js.map +1 -0
  14. package/dist/backend/luaEncode.test.d.ts +2 -0
  15. package/dist/backend/luaEncode.test.d.ts.map +1 -0
  16. package/dist/backend/luaEncode.test.js +315 -0
  17. package/dist/backend/luaEncode.test.js.map +1 -0
  18. package/dist/backend/luaEncodeBase.d.ts +2 -0
  19. package/dist/backend/luaEncodeBase.d.ts.map +1 -0
  20. package/dist/backend/luaEncodeBase.js +3 -0
  21. package/dist/backend/luaEncodeBase.js.map +1 -0
  22. package/dist/backend/luaEncodeHelpers.d.ts +5 -0
  23. package/dist/backend/luaEncodeHelpers.d.ts.map +1 -0
  24. package/dist/backend/luaEncodeHelpers.js +129 -0
  25. package/dist/backend/luaEncodeHelpers.js.map +1 -0
  26. package/dist/backend/luaPreprocessor.d.ts.map +1 -1
  27. package/dist/backend/luaPreprocessor.js +46 -65
  28. package/dist/backend/luaPreprocessor.js.map +1 -1
  29. package/dist/backend/luaPreprocessor.test.js +52 -21
  30. package/dist/backend/luaPreprocessor.test.js.map +1 -1
  31. package/dist/backend/manifestTypes.d.ts +1 -0
  32. package/dist/backend/manifestTypes.d.ts.map +1 -1
  33. package/dist/backend/manifestTypes.js.map +1 -1
  34. package/dist/backend/tic80Controller/customController.d.ts +2 -0
  35. package/dist/backend/tic80Controller/customController.d.ts.map +1 -1
  36. package/dist/backend/tic80Controller/customController.js +10 -2
  37. package/dist/backend/tic80Controller/customController.js.map +1 -1
  38. package/dist/buildInfo.d.ts +4 -4
  39. package/dist/buildInfo.js +4 -4
  40. package/dist/buildInfo.js.map +1 -1
  41. package/dist/frontend/parseOptions.d.ts +1 -0
  42. package/dist/frontend/parseOptions.d.ts.map +1 -1
  43. package/dist/frontend/parseOptions.js.map +1 -1
  44. package/dist/frontend/repl.d.ts +7 -0
  45. package/dist/frontend/repl.d.ts.map +1 -0
  46. package/dist/frontend/repl.js +271 -0
  47. package/dist/frontend/repl.js.map +1 -0
  48. package/dist/frontend/run.d.ts.map +1 -1
  49. package/dist/frontend/run.js +4 -1
  50. package/dist/frontend/run.js.map +1 -1
  51. package/dist/frontend/watch.d.ts.map +1 -1
  52. package/dist/frontend/watch.js +4 -1
  53. package/dist/frontend/watch.js.map +1 -1
  54. package/dist/index.js +18 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/obj/build.log +5 -5
  57. package/dist/obj/resolvedManifest.ticbuild.jsonc +6 -6
  58. package/dist/obj/variables.json +4 -4
  59. package/dist/utils/encoding/codecRegistry.d.ts +176 -62
  60. package/dist/utils/encoding/codecRegistry.d.ts.map +1 -1
  61. package/dist/utils/encoding/codecRegistry.js +48 -8
  62. package/dist/utils/encoding/codecRegistry.js.map +1 -1
  63. package/dist/utils/encoding/rle.d.ts +3 -0
  64. package/dist/utils/encoding/rle.d.ts.map +1 -0
  65. package/dist/utils/encoding/rle.js +37 -0
  66. package/dist/utils/encoding/rle.js.map +1 -0
  67. package/dist/utils/help.d.ts +1 -0
  68. package/dist/utils/help.d.ts.map +1 -1
  69. package/dist/utils/help.js +5 -0
  70. package/dist/utils/help.js.map +1 -1
  71. package/dist/utils/tic80/cartWriter.d.ts +0 -1
  72. package/dist/utils/tic80/cartWriter.d.ts.map +1 -1
  73. package/dist/utils/tic80/cartWriter.js +2 -10
  74. package/dist/utils/tic80/cartWriter.js.map +1 -1
  75. package/dist/utils/tic80/tic80.d.ts +5 -5
  76. package/dist/utils/utils.d.ts +1 -0
  77. package/dist/utils/utils.d.ts.map +1 -1
  78. package/dist/utils/utils.js +8 -0
  79. package/dist/utils/utils.js.map +1 -1
  80. package/package.json +1 -1
  81. package/scripts/terminal.ps1 +1 -0
  82. package/templates/TIC-80-ticbuild/tic80.exe +0 -0
  83. package/templates/help/main.txt +1 -0
  84. package/templates/help/repl.txt +46 -0
  85. package/ticbuild.schema.json +10 -1
package/README.md CHANGED
@@ -106,11 +106,89 @@ ticbuild run
106
106
  # build and live-update with changes in a tic80
107
107
  ticbuild watch
108
108
 
109
+ # interactive Lua preprocessing/minification REPL
110
+ ticbuild repl
111
+
109
112
  # create a new empty project
110
113
  ticbuild init
111
114
 
112
115
  ```
113
116
 
117
+ ## REPL mode (interactive preprocessing/minification)
118
+
119
+ Interactive Lua processing on the command line, using the same context as
120
+ the build process. Useful for testing / debugging, or just doing some ad-hock
121
+ encoding.
122
+
123
+ Note: It doesn't actually EXECUTE the Lua. Just outputs the preprocessed + minified
124
+ Lua code.
125
+
126
+ ### Usage
127
+
128
+ ```bash
129
+ ticbuild repl [manifest] [--multi-line] [--mode <name>] [--var <key=value>]
130
+ ```
131
+
132
+ * **Manifest and build configuration**
133
+ * The REPL loads the project in the same way as `build`.
134
+ * `--mode` and `--var` are supported
135
+
136
+ * **Single-line mode (default)**
137
+ * Each line you enter is processed immediately.
138
+ * The resulting Lua code is printed to stdout after each line.
139
+
140
+ * **Multi-line mode**
141
+ * Enable with `--multi-line`.
142
+ * Input is collected until a terminator is entered on its own line:
143
+ * `:end`, `:eof`, or a lone `:`
144
+ * Once the terminator is received, the full block is processed and printed.
145
+
146
+ ### REPL commands
147
+
148
+ Commands always start with `:`.
149
+
150
+ ```
151
+ :help
152
+ :minify on
153
+ :minify off
154
+ :minify <rule> on
155
+ :minify <rule> off
156
+ :end
157
+ :eof
158
+ :
159
+ :quit
160
+ ```
161
+
162
+ #### `:minify` details
163
+
164
+ * `:minify on|off` toggles overall minification for the session.
165
+ * `:minify <rule> on|off` overrides individual minification rules. rules:
166
+
167
+ ```
168
+ stripComments
169
+ renameLocalVariables
170
+ aliasRepeatedExpressions
171
+ aliasLiterals
172
+ simplifyExpressions
173
+ removeUnusedLocals
174
+ removeUnusedFunctions
175
+ renameTableFields
176
+ packLocalDeclarations
177
+ ```
178
+
179
+ These overrides are applied on top of the manifest’s
180
+ `assembly.lua.minification` settings.
181
+
182
+ ### Examples
183
+
184
+ ```bash
185
+ # default single-line mode
186
+ ticbuild repl
187
+
188
+ # multi-line input mode
189
+ ticbuild repl --multi-line
190
+ ```
191
+
114
192
  ## TIC-80 binary location
115
193
 
116
194
  By default, `ticbuild` will use a special build of TIC-80 which allows profiling and
@@ -139,6 +217,7 @@ The manifest file is canonically `*.ticbuild.jsonc`. Its location defines the pr
139
217
  "$schema": "./ticbuild.schema.json",
140
218
  "project": {
141
219
  "name": "my demo",
220
+ "launchArgs": ["--fs=./", "--skip"], // args that are passed to the tic80 when launched.
142
221
  "includeDirs": ["./src", "./include"], // includes these dirs in source file lookup
143
222
  "importDirs": ["./assets", "./images"], // include these dirs in resource import lookup
144
223
  "binDir": "./dist/bin",
@@ -175,7 +254,7 @@ The manifest file is canonically `*.ticbuild.jsonc`. Its location defines the pr
175
254
  // like other resources, loading from file is fine:
176
255
  // "path": "path_to_file.txt"
177
256
  // but you can also just specify the value here. Again, string substitution is supported.
178
- "value": "greetz to everyone at the party coding is omg so beer fartschnapps",
257
+ "value": "greetz to everyone at the party",
179
258
  },
180
259
  // it is not necessary to specify all source files here; main.lua can import
181
260
  // files directly by relative path.
@@ -383,26 +462,71 @@ print("debug")
383
462
  -- at the preprocessor level though, and emitted as a string literal.
384
463
  local s = __EXPAND("the project name is: $(project.name)")
385
464
 
386
- -- Import binary data with various encodings, emits as lua literal.
387
- -- this is for kind=binary imports.
388
- -- first arg is the *output* encoding.
389
- -- second arg is an import reference, same syntax as #include
390
- local paletteString = __IMPORTBIN("hex", "import:twilight_bog_palette")
465
+ -- __IMPORT and __ENCODE data transforms emitting as Lua literals.
466
+ --
467
+ -- __IMPORT(pipelineSpec, importRef)
468
+ -- __ENCODE(pipelineSpec, literalValue)
469
+ --
470
+ -- pipelineSpec is a single comma-chain of codecs/transforms.
471
+ -- It contains exactly one value codec, and everything before that is
472
+ -- interpreted as the source codec + byte transforms.
473
+ -- Whitespace is ignored.
474
+ --
475
+ -- Outputs either values or string (not a table literal)
476
+ -- local t = { __ENCODE(...) }
477
+ -- => local t = { 1,2,3 }
478
+ --
479
+ -- local a,b,c = __ENCODE(...)
480
+ -- => local a,b,c = 1,2,3
481
+
482
+ -- Source codecs (string input):
483
+ -- u8, s8, u16le, s16le, u24le, s24le, u32le, s32le
484
+ -- u16be, s16be, u24be, s24be, u32be, s32be
485
+ -- f16le, f16be, f32le, f32be, f64le, f64be
486
+ -- hex, b85+1, ascii, utf8, base64
487
+ -- Source codecs (binary input only):
488
+ -- raw, lz
489
+ -- Byte transforms:
490
+ -- lz, unlz, rle, unrle, ttz, take(start,length)
491
+ --
492
+ -- start is 0-based.
493
+ --
494
+ -- Value codecs:
495
+ -- u8, s8, u16le, s16le, u24le, s24le, u32le, s32le
496
+ -- u16be, s16be, u24be, s24be, u32be, s32be
497
+ -- f16le, f16be, f32le, f32be, f64le, f64be
498
+ -- hex, b85+1, ascii, utf8, base64
499
+ -- Value transforms:
500
+ -- norm, scale(k), q(B), w(W), toUppercase
501
+ --
502
+ -- where `k` is scalar (required)
503
+ -- where `B` is fractional bits
504
+ -- where `W` is maximum # of decimals after point
505
+
506
+ -- hex literal to normalized RGBA bytes
507
+ local c = { __ENCODE("hex,u8,norm", "#ff8000"), 0.5 }
508
+ -- generates:
509
+ local c = { 1,0.5,0,0.5 }
510
+
511
+ -- import hex palette as a hex string
512
+ local paletteString = __IMPORT("hex", "import:twilight_bog_palette")
391
513
  -- generates:
392
514
  local paletteString = "1f17143439434e5a6d5d8da289baabb8cfb9839c77727546383f38704b63a66470b8948ec8bfbfe1e6eaa48db6785a96"
393
515
 
394
- -- U8, S8, U16, S16, U32, S32 output tables of numbers from the binary input
395
- local paletteString = __IMPORTBIN("s32", "import:twilight_bog_palette")
516
+ -- import palette to signed 32-bit values (values output, not a table)
517
+ local paletteValues = { __IMPORT("s32", "import:twilight_bog_palette") }
396
518
  -- generates:
397
- local paletteString = {873731871,1515078457,-1567793811,-1196705143,-1669088817,1182102135,1882734392,1688625995,-1902856080,-507527224,-1918571802,-1772455754}
519
+ local paletteValues = {873731871,1515078457,-1567793811,-1196705143,-1669088817,1182102135,1882734392,1688625995,-1902856080,-507527224,-1918571802,-1772455754}
398
520
 
399
- -- base85+1 is base85 encoding with a prefix char describing the length remainder.
400
- local paletteString = __IMPORTBIN("b85+1", "import:twilight_bog_palette")
521
+ -- base85+1 encoding with LZ compression in the source spec
522
+ local paletteCompressed = __IMPORT("ascii,lz,b85+1", "import:creditstxt")
401
523
  -- generates:
402
- local paletteString = "!*u>VJ3C?PFD-`-qM7Tatcae[uGB.gq3'TBA94Oi0E4D-maM5LKk3Ab%[WkuA"
524
+ local paletteCompressed = "..."
525
+
526
+ -- NOTE: string substitution is performed on spec strings and import/literal values.
403
527
 
404
528
  -- LZ compression possible. The payload is compressed, then encoded with base85+1.
405
- local paletteString = __IMPORTBIN("lz85+1", "import:twilight_bog_palette") -- LZ compressed binary + base 85 encoding
529
+ local paletteString = __IMPORT("raw,lz", "b85+1", "import:twilight_bog_palette") -- LZ compressed binary + base 85 encoding
406
530
  -- generates:
407
531
  local paletteString = "#!&,K2'Jqg;:0ML?NM;9@X16KdK:I.+F[e>T3,hN#VIXYUP`Ei\"^Z\">?UlDg->*]-g"
408
532
 
@@ -414,25 +538,22 @@ local paletteString = "#!&,K2'Jqg;:0ML?NM;9@X16KdK:I.+F[e>T3,hN#VIXYUP`Ei\"^Z\">
414
538
  -- 2. we don't want to create another weird syntax like "hex:123456"
415
539
  -- 3. we don't want to make overloads of this function just for literals.
416
540
 
417
- -- ...So we make another function: __ENCODE where you must specify the input encoding,
418
- -- output encoding, and the literal source value.
419
- -- only string-based source encoding types are supported (so no LZ for example, but lz85+1 is ok)
420
- local paletteString = __ENCODE("hex", "b85+1", "1f17143439434e5a6d5d8da289baabb8cfb9839c77727546383f38704b63a66470b8948ec8bfbfe1e6eaa48db6785a96")
541
+ -- ...So we have another function: __ENCODE where you must specify the input encoding,
542
+ -- output spec, and the literal source value.
543
+ -- only string-based source format types are supported (so no "raw" for example, but "b85+1,lz" is ok)
544
+ local paletteString = __ENCODE("hex,lz", "b85+1", "1f17143439434e5a6d5d8da289baabb8cfb9839c77727546383f38704b63a66470b8948ec8bfbfe1e6eaa48db6785a96")
421
545
  -- generates:
422
546
  local paletteString = "!*u>VJ3C?PFD-`-qM7Tatcae[uGB.gq3'TBA94Oi0E4D-maM5LKk3Ab%[WkuA"
423
- -- ...without requiring an import at all to perform the encoding.
424
- -- note the extra param. This version of __IMPORTBIN is (sourceEncoding, destEncoding, value)
425
- -- where the value is processed the same as if it was in the manifest "value" key.
426
-
427
- -- NOTE: both parameters support $(variables). string substitution is performed.
547
+ -- "#!&,K2'Jqg;:0ML?NM;9@X16KdK:I.+F[e>T3,hN#VIXYUP`Ei\"^Z\">?UlDg->*]-g"
548
+ -- test with round trip:
549
+ local s = __ENCODE("b85+1,lz", "hex", "#!&,K2'Jqg;:0ML?NM;9@X16KdK:I.+F[e>T3,hN#VIXYUP`Ei\"^Z\">?UlDg->*]-g")
428
550
 
429
551
  -- allows emitting a string literal from an imported text resource.
430
- local scrollText = __IMPORTTEXT("import:scroll_text")
552
+ local scrollText = __IMPORT("", "", "import:somecart:")
431
553
 
432
554
  -- once again, "import:" is required for consistency, and to allow literals (though it's not much
433
555
  -- value but there for completeness.)
434
- -- string substitution is performed.
435
- local s = __IMPORTTEXT("the project name is: $(project.name)") -- effectively the same as __EXPAND
556
+ local s = __ENCODE("ascii", "ascii", "the project name is: $(project.name)") -- effectively the same as __EXPAND
436
557
 
437
558
  -- macros are handy esp for writing optimized code (avoid symbol lookups, plus give
438
559
  -- the minifier the chance to simplify / reduce expressions.
@@ -1,8 +1,9 @@
1
1
  import { ImportDefinition } from "./manifestTypes";
2
2
  import { TicbuildProjectCore } from "./projectCore";
3
+ import { Tic80CartChunkTypeKey } from "../utils/tic80/tic80";
3
4
  export type ImportReference = {
4
5
  importName: string;
5
- chunkSpec?: string;
6
+ chunkSpec?: Tic80CartChunkTypeKey;
6
7
  };
7
8
  export type ImportDataResult<T> = {
8
9
  data: T;
@@ -1 +1 @@
1
- {"version":3,"file":"importUtils.d.ts","sourceRoot":"","sources":["../../src/backend/importUtils.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAe,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,IAAI,EAAE,CAAC,CAAC;IACR,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAevE;AAUD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAmCvC;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAoBnC"}
1
+ {"version":3,"file":"importUtils.d.ts","sourceRoot":"","sources":["../../src/backend/importUtils.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAe,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAwB,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,IAAI,EAAE,CAAC,CAAC;IACR,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAuBvE;AAUD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAmCvC;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAoBnC"}
@@ -6,6 +6,7 @@ exports.loadTextImportData = loadTextImportData;
6
6
  const fileSystem_1 = require("../utils/fileSystem");
7
7
  const codecRegistry_1 = require("../utils/encoding/codecRegistry");
8
8
  const manifestTypes_1 = require("./manifestTypes");
9
+ const tic80_1 = require("../utils/tic80/tic80");
9
10
  function parseImportReference(reference) {
10
11
  if (!reference.startsWith("import:")) {
11
12
  throw new Error(`Import reference must start with "import:": ${reference}`);
@@ -20,7 +21,13 @@ function parseImportReference(reference) {
20
21
  throw new Error(`Import reference has too many ':' segments: ${reference}`);
21
22
  }
22
23
  const chunkSpec = parts.length > 1 ? parts[1].trim() : undefined;
23
- return { importName, chunkSpec };
24
+ const coercedChunkSpec = (() => {
25
+ if (!chunkSpec) {
26
+ return undefined;
27
+ }
28
+ return tic80_1.kTic80CartChunkTypes.coerceByKey(chunkSpec)?.key;
29
+ })();
30
+ return { importName, chunkSpec: coercedChunkSpec };
24
31
  }
25
32
  function resolveSourceEncodingKey(importDef) {
26
33
  if (!importDef.sourceEncoding) {
@@ -1 +1 @@
1
- {"version":3,"file":"importUtils.js","sourceRoot":"","sources":["../../src/backend/importUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"importUtils.js","sourceRoot":"","sources":["../../src/backend/importUtils.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,20 @@
1
- export type BinaryOutputEncoding = "u8" | "s8" | "u16le" | "s16le" | "u16be" | "s16be" | "u24le" | "s24le" | "u24be" | "s24be" | "u32le" | "s32le" | "u32be" | "s32be" | "hex" | "b85+1" | "lz85+1";
1
+ export type BinaryOutputEncoding = "u8" | "s8" | "u16le" | "s16le" | "u16be" | "s16be" | "u24le" | "s24le" | "u24be" | "s24be" | "u32le" | "s32le" | "u32be" | "s32be" | "f16le" | "f16be" | "f32le" | "f32be" | "f64le" | "f64be" | "ascii" | "utf8" | "base64" | "hex" | "b85+1";
2
2
  export declare function normalizeBinaryOutputEncoding(raw: string): BinaryOutputEncoding;
3
3
  export declare function isBinaryOutputEncoding(value: string): value is BinaryOutputEncoding;
4
4
  export declare function isStringBinaryOutputEncoding(value: BinaryOutputEncoding): boolean;
5
+ export declare function isNumericBinaryOutputEncoding(value: BinaryOutputEncoding): boolean;
5
6
  export declare function encodeBinaryAsLuaLiteral(data: Uint8Array, encoding: BinaryOutputEncoding): string;
7
+ export declare function encodeBinaryAsLuaValues(data: Uint8Array, encoding: BinaryOutputEncoding): string;
8
+ export declare function decodeBinaryToValues(data: Uint8Array, encoding: BinaryOutputEncoding): number[];
9
+ export type ValueEncodingInfo = {
10
+ kind: "int";
11
+ bitWidth: number;
12
+ signed: boolean;
13
+ } | {
14
+ kind: "float";
15
+ bitWidth: number;
16
+ };
17
+ export declare function getNumericEncodingInfo(encoding: BinaryOutputEncoding): ValueEncodingInfo | null;
18
+ export declare function encodeValuesToBytes(values: number[], encoding: BinaryOutputEncoding): Uint8Array;
19
+ export declare function encodeBinaryAsString(data: Uint8Array, encoding: BinaryOutputEncoding): string;
6
20
  //# sourceMappingURL=luaBinaryEncoding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"luaBinaryEncoding.d.ts","sourceRoot":"","sources":["../../src/backend/luaBinaryEncoding.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,oBAAoB,GAC5B,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,KAAK,GACL,OAAO,GACP,QAAQ,CAAC;AA2Bb,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAM/E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,oBAAoB,CAEnF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAEjF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAsBjG"}
1
+ {"version":3,"file":"luaBinaryEncoding.d.ts","sourceRoot":"","sources":["../../src/backend/luaBinaryEncoding.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,oBAAoB,GAC5B,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,MAAM,GACN,QAAQ,GACR,KAAK,GACL,OAAO,CAAC;AAgDZ,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAM/E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,oBAAoB,CAEnF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAEjF;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAElF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAsBjG;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAQhG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAuB/F;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,iBAAiB,GAAG,IAAI,CAU/F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,oBAAoB,GAAG,UAAU,CAiBhG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAe7F"}
@@ -3,13 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeBinaryOutputEncoding = normalizeBinaryOutputEncoding;
4
4
  exports.isBinaryOutputEncoding = isBinaryOutputEncoding;
5
5
  exports.isStringBinaryOutputEncoding = isStringBinaryOutputEncoding;
6
+ exports.isNumericBinaryOutputEncoding = isNumericBinaryOutputEncoding;
6
7
  exports.encodeBinaryAsLuaLiteral = encodeBinaryAsLuaLiteral;
8
+ exports.encodeBinaryAsLuaValues = encodeBinaryAsLuaValues;
9
+ exports.decodeBinaryToValues = decodeBinaryToValues;
10
+ exports.getNumericEncodingInfo = getNumericEncodingInfo;
11
+ exports.encodeValuesToBytes = encodeValuesToBytes;
12
+ exports.encodeBinaryAsString = encodeBinaryAsString;
7
13
  const lua_fundamentals_1 = require("../utils/lua/lua_fundamentals");
8
14
  const b85_1 = require("../utils/encoding/b85");
9
15
  const hex_1 = require("../utils/encoding/hex");
10
- const lz_1 = require("../utils/encoding/lz");
11
- const stringEncodings = new Set(["hex", "b85+1", "lz85+1"]);
12
- const tableEncodings = {
16
+ const stringEncodings = new Set([
17
+ "hex",
18
+ "b85+1",
19
+ "ascii",
20
+ "utf8",
21
+ "base64",
22
+ ]);
23
+ const intEncodings = {
13
24
  u8: { bytes: 1, signed: false, endian: "le" },
14
25
  s8: { bytes: 1, signed: true, endian: "le" },
15
26
  u16le: { bytes: 2, signed: false, endian: "le" },
@@ -25,6 +36,14 @@ const tableEncodings = {
25
36
  u32be: { bytes: 4, signed: false, endian: "be" },
26
37
  s32be: { bytes: 4, signed: true, endian: "be" },
27
38
  };
39
+ const floatEncodings = {
40
+ f16le: { bytes: 2, endian: "le", expBits: 5, mantissaBits: 10 },
41
+ f16be: { bytes: 2, endian: "be", expBits: 5, mantissaBits: 10 },
42
+ f32le: { bytes: 4, endian: "le", expBits: 8, mantissaBits: 23 },
43
+ f32be: { bytes: 4, endian: "be", expBits: 8, mantissaBits: 23 },
44
+ f64le: { bytes: 8, endian: "le", expBits: 11, mantissaBits: 52 },
45
+ f64be: { bytes: 8, endian: "be", expBits: 11, mantissaBits: 52 },
46
+ };
28
47
  function normalizeBinaryOutputEncoding(raw) {
29
48
  const normalized = raw.trim().toLowerCase();
30
49
  if (!isBinaryOutputEncoding(normalized)) {
@@ -33,17 +52,20 @@ function normalizeBinaryOutputEncoding(raw) {
33
52
  return normalized;
34
53
  }
35
54
  function isBinaryOutputEncoding(value) {
36
- return value in tableEncodings || stringEncodings.has(value);
55
+ return value in intEncodings || value in floatEncodings || stringEncodings.has(value);
37
56
  }
38
57
  function isStringBinaryOutputEncoding(value) {
39
58
  return stringEncodings.has(value);
40
59
  }
60
+ function isNumericBinaryOutputEncoding(value) {
61
+ return !stringEncodings.has(value);
62
+ }
41
63
  function encodeBinaryAsLuaLiteral(data, encoding) {
42
64
  if (stringEncodings.has(encoding)) {
43
65
  const encoded = encodeBinaryAsString(data, encoding);
44
66
  return (0, lua_fundamentals_1.toLuaStringLiteral)(encoded);
45
67
  }
46
- const config = tableEncodings[encoding];
68
+ const config = intEncodings[encoding];
47
69
  if (!config) {
48
70
  throw new Error(`Unsupported binary table encoding: ${encoding}`);
49
71
  }
@@ -57,14 +79,72 @@ function encodeBinaryAsLuaLiteral(data, encoding) {
57
79
  }
58
80
  return `{${values.join(",")}}`;
59
81
  }
82
+ function encodeBinaryAsLuaValues(data, encoding) {
83
+ if (stringEncodings.has(encoding)) {
84
+ const encoded = encodeBinaryAsString(data, encoding);
85
+ return (0, lua_fundamentals_1.toLuaStringLiteral)(encoded);
86
+ }
87
+ const values = decodeBinaryToValues(data, encoding);
88
+ return values.join(",");
89
+ }
90
+ function decodeBinaryToValues(data, encoding) {
91
+ const intConfig = intEncodings[encoding];
92
+ if (intConfig) {
93
+ if (data.length % intConfig.bytes !== 0) {
94
+ throw new Error(`Binary data length ${data.length} is not divisible by ${intConfig.bytes} for encoding ${encoding}`);
95
+ }
96
+ const values = [];
97
+ for (let offset = 0; offset < data.length; offset += intConfig.bytes) {
98
+ const unsigned = readUnsigned(data, offset, intConfig.bytes, intConfig.endian);
99
+ values.push(intConfig.signed ? toSigned(unsigned, intConfig.bytes * 8) : unsigned);
100
+ }
101
+ return values;
102
+ }
103
+ const floatConfig = floatEncodings[encoding];
104
+ if (floatConfig) {
105
+ return decodeFloats(data, floatConfig);
106
+ }
107
+ throw new Error(`Unsupported binary numeric encoding: ${encoding}`);
108
+ }
109
+ function getNumericEncodingInfo(encoding) {
110
+ const intConfig = intEncodings[encoding];
111
+ if (intConfig) {
112
+ return { kind: "int", bitWidth: intConfig.bytes * 8, signed: intConfig.signed };
113
+ }
114
+ const floatConfig = floatEncodings[encoding];
115
+ if (floatConfig) {
116
+ return { kind: "float", bitWidth: floatConfig.bytes * 8 };
117
+ }
118
+ return null;
119
+ }
120
+ function encodeValuesToBytes(values, encoding) {
121
+ const intConfig = intEncodings[encoding];
122
+ if (intConfig) {
123
+ const bytes = new Uint8Array(values.length * intConfig.bytes);
124
+ for (let i = 0; i < values.length; i += 1) {
125
+ const unsigned = toUnsignedInteger(values[i], intConfig.bytes * 8, intConfig.signed);
126
+ writeUnsigned(bytes, i * intConfig.bytes, intConfig.bytes, intConfig.endian, unsigned);
127
+ }
128
+ return bytes;
129
+ }
130
+ const floatConfig = floatEncodings[encoding];
131
+ if (floatConfig) {
132
+ return encodeFloats(values, floatConfig);
133
+ }
134
+ throw new Error(`Unsupported numeric encoding: ${encoding}`);
135
+ }
60
136
  function encodeBinaryAsString(data, encoding) {
61
137
  switch (encoding) {
62
138
  case "hex":
63
139
  return (0, hex_1.encodeHexString)(data);
140
+ case "ascii":
141
+ return bytesToAscii(data);
142
+ case "utf8":
143
+ return new TextDecoder("utf-8").decode(data);
144
+ case "base64":
145
+ return Buffer.from(data).toString("base64");
64
146
  case "b85+1":
65
147
  return (0, b85_1.base85Plus1Encode)(data);
66
- case "lz85+1":
67
- return (0, b85_1.base85Plus1Encode)((0, lz_1.lzCompress)(data, lz_1.gSomaticLZDefaultConfig));
68
148
  default:
69
149
  throw new Error(`Unsupported string encoding: ${encoding}`);
70
150
  }
@@ -83,6 +163,18 @@ function readUnsigned(data, offset, bytes, endian) {
83
163
  }
84
164
  return value;
85
165
  }
166
+ function writeUnsigned(data, offset, bytes, endian, value) {
167
+ if (endian === "le") {
168
+ for (let i = 0; i < bytes; i++) {
169
+ data[offset + i] = (value >> (8 * i)) & 0xff;
170
+ }
171
+ }
172
+ else {
173
+ for (let i = 0; i < bytes; i++) {
174
+ data[offset + (bytes - 1 - i)] = (value >> (8 * i)) & 0xff;
175
+ }
176
+ }
177
+ }
86
178
  function toSigned(value, bitWidth) {
87
179
  const signBit = 2 ** (bitWidth - 1);
88
180
  if (value >= signBit) {
@@ -91,4 +183,135 @@ function toSigned(value, bitWidth) {
91
183
  }
92
184
  return value;
93
185
  }
186
+ function toUnsignedInteger(value, bitWidth, signed) {
187
+ if (!Number.isFinite(value)) {
188
+ throw new Error(`Value ${value} is not finite`);
189
+ }
190
+ if (!Number.isInteger(value)) {
191
+ throw new Error(`Value ${value} is not an integer`);
192
+ }
193
+ if (signed) {
194
+ const min = -(2 ** (bitWidth - 1));
195
+ const max = 2 ** (bitWidth - 1) - 1;
196
+ if (value < min || value > max) {
197
+ throw new Error(`Value ${value} is out of range for signed ${bitWidth}-bit integer`);
198
+ }
199
+ return value < 0 ? value + 2 ** bitWidth : value;
200
+ }
201
+ const max = 2 ** bitWidth - 1;
202
+ if (value < 0 || value > max) {
203
+ throw new Error(`Value ${value} is out of range for unsigned ${bitWidth}-bit integer`);
204
+ }
205
+ return value;
206
+ }
207
+ function decodeFloats(data, config) {
208
+ if (data.length % config.bytes !== 0) {
209
+ throw new Error(`Binary data length ${data.length} is not divisible by ${config.bytes}`);
210
+ }
211
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
212
+ const values = [];
213
+ for (let offset = 0; offset < data.length; offset += config.bytes) {
214
+ const littleEndian = config.endian === "le";
215
+ if (config.bytes === 4) {
216
+ values.push(view.getFloat32(offset, littleEndian));
217
+ }
218
+ else if (config.bytes === 8) {
219
+ values.push(view.getFloat64(offset, littleEndian));
220
+ }
221
+ else {
222
+ const bits = view.getUint16(offset, littleEndian);
223
+ values.push(float16ToFloat32(bits));
224
+ }
225
+ }
226
+ return values;
227
+ }
228
+ function encodeFloats(values, config) {
229
+ const data = new Uint8Array(values.length * config.bytes);
230
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
231
+ for (let i = 0; i < values.length; i += 1) {
232
+ const offset = i * config.bytes;
233
+ const littleEndian = config.endian === "le";
234
+ if (config.bytes === 4) {
235
+ view.setFloat32(offset, values[i], littleEndian);
236
+ }
237
+ else if (config.bytes === 8) {
238
+ view.setFloat64(offset, values[i], littleEndian);
239
+ }
240
+ else {
241
+ const bits = float32ToFloat16(values[i]);
242
+ view.setUint16(offset, bits, littleEndian);
243
+ }
244
+ }
245
+ return data;
246
+ }
247
+ function float32ToFloat16(value) {
248
+ if (Number.isNaN(value)) {
249
+ return 0x7e00;
250
+ }
251
+ if (value === Infinity) {
252
+ return 0x7c00;
253
+ }
254
+ if (value === -Infinity) {
255
+ return 0xfc00;
256
+ }
257
+ const floatView = new DataView(new ArrayBuffer(4));
258
+ floatView.setFloat32(0, value, true);
259
+ const bits = floatView.getUint32(0, true);
260
+ const sign = (bits >> 16) & 0x8000;
261
+ let exp = (bits >> 23) & 0xff;
262
+ let mantissa = bits & 0x7fffff;
263
+ if (exp === 0) {
264
+ return sign;
265
+ }
266
+ exp = exp - 127 + 15;
267
+ if (exp >= 0x1f) {
268
+ return sign | 0x7c00;
269
+ }
270
+ if (exp <= 0) {
271
+ if (exp < -10) {
272
+ return sign;
273
+ }
274
+ mantissa = (mantissa | 0x800000) >> (1 - exp);
275
+ return sign | ((mantissa + 0x1000) >> 13);
276
+ }
277
+ return sign | (exp << 10) | ((mantissa + 0x1000) >> 13);
278
+ }
279
+ function float16ToFloat32(bits) {
280
+ const sign = (bits & 0x8000) << 16;
281
+ let exp = (bits >> 10) & 0x1f;
282
+ let mantissa = bits & 0x3ff;
283
+ if (exp === 0) {
284
+ if (mantissa === 0) {
285
+ return sign ? -0 : 0;
286
+ }
287
+ exp = 1;
288
+ while ((mantissa & 0x400) === 0) {
289
+ mantissa <<= 1;
290
+ exp -= 1;
291
+ }
292
+ mantissa &= 0x3ff;
293
+ }
294
+ else if (exp === 0x1f) {
295
+ if (mantissa === 0) {
296
+ return sign ? -Infinity : Infinity;
297
+ }
298
+ return NaN;
299
+ }
300
+ const exp32 = exp - 15 + 127;
301
+ const bits32 = sign | (exp32 << 23) | (mantissa << 13);
302
+ const view = new DataView(new ArrayBuffer(4));
303
+ view.setUint32(0, bits32, true);
304
+ return view.getFloat32(0, true);
305
+ }
306
+ function bytesToAscii(data) {
307
+ let out = "";
308
+ for (let i = 0; i < data.length; i += 1) {
309
+ const byte = data[i];
310
+ if (byte > 0x7f) {
311
+ throw new Error(`ASCII decode: invalid byte ${byte} at index ${i}`);
312
+ }
313
+ out += String.fromCharCode(byte);
314
+ }
315
+ return out;
316
+ }
94
317
  //# sourceMappingURL=luaBinaryEncoding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"luaBinaryEncoding.js","sourceRoot":"","sources":["../../src/backend/luaBinaryEncoding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"luaBinaryEncoding.js","sourceRoot":"","sources":["../../src/backend/luaBinaryEncoding.ts"],"names":[],"mappings":";;AA6EA,sEAMC;AAED,wDAEC;AAED,oEAEC;AAED,sEAEC;AAED,4DAsBC;AAED,0DAQC;AAED,oDAuBC;AAMD,wDAUC;AAED,kDAiBC;AAED,oDAeC;AA9MD,oEAAmE;AACnE,+CAA0D;AAC1D,+CAAwD;AA6BxD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAuB;IACpD,KAAK;IACL,OAAO;IACP,OAAO;IACP,MAAM;IACN,QAAQ;CACT,CAAC,CAAC;AAcH,MAAM,YAAY,GAAsC;IACtD,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAC7C,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAC5C,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAChD,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAC/C,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAChD,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAC/C,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAChD,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAC/C,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAChD,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAC/C,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAChD,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAC/C,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAChD,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;CAChD,CAAC;AAEF,MAAM,cAAc,GAAwC;IAC1D,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;IAC/D,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;IAC/D,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;IAC/D,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;IAC/D,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;IAChE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;CACjE,CAAC;AAEF,SAAgB,6BAA6B,CAAC,GAAW;IACvD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAA0B,CAAC;IACpE,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAa;IAClD,OAAO,KAAK,IAAI,YAAY,IAAI,KAAK,IAAI,cAAc,IAAI,eAAe,CAAC,GAAG,CAAC,KAA6B,CAAC,CAAC;AAChH,CAAC;AAED,SAAgB,4BAA4B,CAAC,KAA2B;IACtE,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,6BAA6B,CAAC,KAA2B;IACvE,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,wBAAwB,CAAC,IAAgB,EAAE,QAA8B;IACvF,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,IAAA,qCAAkB,EAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,MAAM,wBAAwB,MAAM,CAAC,KAAK,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IACpH,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACjC,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAgB,EAAE,QAA8B;IACtF,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,IAAA,qCAAkB,EAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAgB,EAAE,QAA8B;IACnF,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,MAAM,wBAAwB,SAAS,CAAC,KAAK,iBAAiB,QAAQ,EAAE,CACpG,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YAC/E,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;AACtE,CAAC;AAMD,SAAgB,sBAAsB,CAAC,QAA8B;IACnE,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;IAClF,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,mBAAmB,CAAC,MAAgB,EAAE,QAA8B;IAClF,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YACrF,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAgB,EAAE,QAA8B;IACnF,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,KAAK;YACR,OAAO,IAAA,qBAAe,EAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,MAAM;YACT,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9C,KAAK,OAAO;YACV,OAAO,IAAA,uBAAiB,EAAC,IAAI,CAAC,CAAC;QACjC;YACE,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAgB,EAAE,MAAc,EAAE,KAAa,EAAE,MAAmB;IACxF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CACpB,IAAgB,EAChB,MAAc,EACd,KAAa,EACb,MAAmB,EACnB,KAAa;IAEb,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC/C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,QAAgB;IAC/C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACpC,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC;QAC3B,OAAO,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,QAAgB,EAAE,MAAe;IACzE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,gBAAgB,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,oBAAoB,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,+BAA+B,QAAQ,cAAc,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,iCAAiC,QAAQ,cAAc,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,IAAgB,EAAE,MAA2B;IACjE,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,MAAM,wBAAwB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC;QAC5C,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAAgB,EAAE,MAA2B;IACjE,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QAChC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC;QAC5C,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;IACnC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC9B,IAAI,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC;IAE/B,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;IACrB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,IAAI,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QACD,QAAQ,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC9C,OAAO,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC9B,IAAI,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC;IAE5B,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,GAAG,GAAG,CAAC,CAAC;QACR,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,QAAQ,KAAK,CAAC,CAAC;YACf,GAAG,IAAI,CAAC,CAAC;QACX,CAAC;QACD,QAAQ,IAAI,KAAK,CAAC;IACpB,CAAC;SAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACxB,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,IAAgB;IACpC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}