@boristype/bt-ir 0.1.0-alpha.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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +338 -0
  3. package/build/analyzer/index.d.ts +7 -0
  4. package/build/analyzer/index.d.ts.map +1 -0
  5. package/build/analyzer/index.js +7 -0
  6. package/build/analyzer/index.js.map +1 -0
  7. package/build/analyzer/scope-analyzer.d.ts +88 -0
  8. package/build/analyzer/scope-analyzer.d.ts.map +1 -0
  9. package/build/analyzer/scope-analyzer.js +565 -0
  10. package/build/analyzer/scope-analyzer.js.map +1 -0
  11. package/build/cli.d.ts +10 -0
  12. package/build/cli.d.ts.map +1 -0
  13. package/build/cli.js +96 -0
  14. package/build/cli.js.map +1 -0
  15. package/build/emitter/bt-emitter.d.ts +31 -0
  16. package/build/emitter/bt-emitter.d.ts.map +1 -0
  17. package/build/emitter/bt-emitter.js +919 -0
  18. package/build/emitter/bt-emitter.js.map +1 -0
  19. package/build/emitter/index.d.ts +7 -0
  20. package/build/emitter/index.d.ts.map +1 -0
  21. package/build/emitter/index.js +7 -0
  22. package/build/emitter/index.js.map +1 -0
  23. package/build/index.d.ts +25 -0
  24. package/build/index.d.ts.map +1 -0
  25. package/build/index.js +24 -0
  26. package/build/index.js.map +1 -0
  27. package/build/ir/builders.d.ts +235 -0
  28. package/build/ir/builders.d.ts.map +1 -0
  29. package/build/ir/builders.js +387 -0
  30. package/build/ir/builders.js.map +1 -0
  31. package/build/ir/index.d.ts +8 -0
  32. package/build/ir/index.d.ts.map +1 -0
  33. package/build/ir/index.js +8 -0
  34. package/build/ir/index.js.map +1 -0
  35. package/build/ir/nodes.d.ts +596 -0
  36. package/build/ir/nodes.d.ts.map +1 -0
  37. package/build/ir/nodes.js +16 -0
  38. package/build/ir/nodes.js.map +1 -0
  39. package/build/lowering/bare-visitors.d.ts +72 -0
  40. package/build/lowering/bare-visitors.d.ts.map +1 -0
  41. package/build/lowering/bare-visitors.js +287 -0
  42. package/build/lowering/bare-visitors.js.map +1 -0
  43. package/build/lowering/binding.d.ts +127 -0
  44. package/build/lowering/binding.d.ts.map +1 -0
  45. package/build/lowering/binding.js +194 -0
  46. package/build/lowering/binding.js.map +1 -0
  47. package/build/lowering/expressions.d.ts +106 -0
  48. package/build/lowering/expressions.d.ts.map +1 -0
  49. package/build/lowering/expressions.js +1172 -0
  50. package/build/lowering/expressions.js.map +1 -0
  51. package/build/lowering/function-builder.d.ts +111 -0
  52. package/build/lowering/function-builder.d.ts.map +1 -0
  53. package/build/lowering/function-builder.js +111 -0
  54. package/build/lowering/function-builder.js.map +1 -0
  55. package/build/lowering/helpers.d.ts +88 -0
  56. package/build/lowering/helpers.d.ts.map +1 -0
  57. package/build/lowering/helpers.js +347 -0
  58. package/build/lowering/helpers.js.map +1 -0
  59. package/build/lowering/index.d.ts +21 -0
  60. package/build/lowering/index.d.ts.map +1 -0
  61. package/build/lowering/index.js +28 -0
  62. package/build/lowering/index.js.map +1 -0
  63. package/build/lowering/precedence.d.ts +18 -0
  64. package/build/lowering/precedence.d.ts.map +1 -0
  65. package/build/lowering/precedence.js +104 -0
  66. package/build/lowering/precedence.js.map +1 -0
  67. package/build/lowering/spread-helpers.d.ts +12 -0
  68. package/build/lowering/spread-helpers.d.ts.map +1 -0
  69. package/build/lowering/spread-helpers.js +32 -0
  70. package/build/lowering/spread-helpers.js.map +1 -0
  71. package/build/lowering/statements.d.ts +85 -0
  72. package/build/lowering/statements.d.ts.map +1 -0
  73. package/build/lowering/statements.js +713 -0
  74. package/build/lowering/statements.js.map +1 -0
  75. package/build/lowering/visitor.d.ts +121 -0
  76. package/build/lowering/visitor.d.ts.map +1 -0
  77. package/build/lowering/visitor.js +165 -0
  78. package/build/lowering/visitor.js.map +1 -0
  79. package/build/pipeline/index.d.ts +84 -0
  80. package/build/pipeline/index.d.ts.map +1 -0
  81. package/build/pipeline/index.js +224 -0
  82. package/build/pipeline/index.js.map +1 -0
  83. package/build/polyfill-spec.d.ts +18 -0
  84. package/build/polyfill-spec.d.ts.map +1 -0
  85. package/build/polyfill-spec.js +26 -0
  86. package/build/polyfill-spec.js.map +1 -0
  87. package/package.json +48 -0
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Binding Manager - централизованная генерация уникальных имён
3
+ *
4
+ * Обеспечивает единый механизм для:
5
+ * - Генерации имён для временных переменных (__tmp0, __arr1, ...)
6
+ * - Генерации имён для анонимных функций (__arrow0, __func1, ...)
7
+ * - Переименования shadowed переменных (a → a__0, a__1, ...)
8
+ * - Защиты от коллизий с именами из исходного кода
9
+ *
10
+ * @module lowering/binding
11
+ */
12
+ /**
13
+ * Менеджер генерации уникальных имён
14
+ *
15
+ * Все сгенерированные имена гарантированно уникальны в пределах
16
+ * одного экземпляра менеджера и не конфликтуют с именами из исходного кода.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const bindings = new BindingManager();
21
+ * bindings.registerSourceNames(["__item", "foo", "bar"]);
22
+ *
23
+ * bindings.create("item"); // "__item0" (если __item0 не занято)
24
+ * bindings.create("arrow"); // "__arrow0"
25
+ * bindings.create("arrow"); // "__arrow1"
26
+ * bindings.temp(); // "__tmp0"
27
+ * bindings.shadow("x"); // "x__0"
28
+ * ```
29
+ */
30
+ export class BindingManager {
31
+ /** Счётчики для каждого префикса */
32
+ counters = new Map();
33
+ /** Имена из исходного кода (для проверки коллизий) */
34
+ sourceNames = new Set();
35
+ /** Все сгенерированные имена (для проверки коллизий) */
36
+ generatedNames = new Set();
37
+ /**
38
+ * Регистрирует имена из исходного кода для проверки коллизий
39
+ *
40
+ * @param names - Массив имён переменных/функций из исходного файла
41
+ */
42
+ registerSourceNames(names) {
43
+ for (const name of names) {
44
+ this.sourceNames.add(name);
45
+ }
46
+ }
47
+ /**
48
+ * Проверяет, занято ли имя (в исходнике или уже сгенерировано)
49
+ */
50
+ isNameTaken(name) {
51
+ return this.sourceNames.has(name) || this.generatedNames.has(name);
52
+ }
53
+ /**
54
+ * Создаёт уникальное имя с заданным префиксом
55
+ *
56
+ * Гарантирует что имя не конфликтует с:
57
+ * - Именами из исходного кода
58
+ * - Ранее сгенерированными именами
59
+ *
60
+ * @param prefix - Префикс имени (без __)
61
+ * @returns Уникальное имя вида __prefix0, __prefix1, ...
62
+ *
63
+ * @example
64
+ * bindings.create("arrow") // "__arrow0"
65
+ * bindings.create("obj") // "__obj0"
66
+ */
67
+ create(prefix) {
68
+ let count = this.counters.get(prefix) ?? 0;
69
+ let name;
70
+ // Ищем свободное имя
71
+ do {
72
+ name = `__${prefix}${count}`;
73
+ count++;
74
+ } while (this.isNameTaken(name));
75
+ this.counters.set(prefix, count);
76
+ this.generatedNames.add(name);
77
+ return name;
78
+ }
79
+ /**
80
+ * Создаёт уникальное имя для временной переменной
81
+ *
82
+ * @returns Уникальное имя вида __tmp0, __tmp1, ...
83
+ */
84
+ temp() {
85
+ return this.create("tmp");
86
+ }
87
+ /**
88
+ * Создаёт уникальное имя для shadowed переменной
89
+ *
90
+ * Используется когда let/const во вложенном блоке перекрывает
91
+ * переменную из внешнего scope.
92
+ *
93
+ * @param original - Оригинальное имя переменной
94
+ * @returns Уникальное имя вида original__0, original__1, ...
95
+ *
96
+ * @example
97
+ * bindings.shadow("a") // "a__0"
98
+ * bindings.shadow("a") // "a__1"
99
+ * bindings.shadow("b") // "b__0"
100
+ */
101
+ shadow(original) {
102
+ const key = `shadow:${original}`;
103
+ let count = this.counters.get(key) ?? 0;
104
+ let name;
105
+ // Ищем свободное имя
106
+ do {
107
+ name = `${original}__${count}`;
108
+ count++;
109
+ } while (this.isNameTaken(name));
110
+ this.counters.set(key, count);
111
+ this.generatedNames.add(name);
112
+ return name;
113
+ }
114
+ /**
115
+ * Создаёт уникальное имя для env переменной функции
116
+ *
117
+ * @param funcName - Имя функции
118
+ * @returns Имя env вида funcName_env
119
+ */
120
+ envName(funcName) {
121
+ return `${funcName}_env`;
122
+ }
123
+ /**
124
+ * Создаёт уникальное имя для descriptor функции
125
+ *
126
+ * @param funcName - Имя функции
127
+ * @returns Имя descriptor вида funcName_desc
128
+ */
129
+ descName(funcName) {
130
+ return `${funcName}_desc`;
131
+ }
132
+ /**
133
+ * Создаёт уникальное имя для hoisted вложенной функции (module mode)
134
+ *
135
+ * @param originalName - Оригинальное имя функции
136
+ * @returns Уникальное имя вида __hoisted_originalName_N
137
+ */
138
+ hoistedName(originalName) {
139
+ const key = `hoisted:${originalName}`;
140
+ let count = this.counters.get(key) ?? 0;
141
+ let name;
142
+ do {
143
+ name = `__hoisted_${originalName}_${count}`;
144
+ count++;
145
+ } while (this.isNameTaken(name));
146
+ this.counters.set(key, count);
147
+ this.generatedNames.add(name);
148
+ return name;
149
+ }
150
+ /**
151
+ * Сбрасывает все счётчики и имена (для тестирования)
152
+ */
153
+ reset() {
154
+ this.counters.clear();
155
+ this.sourceNames.clear();
156
+ this.generatedNames.clear();
157
+ }
158
+ /**
159
+ * Получает текущее значение счётчика (для отладки)
160
+ */
161
+ getCount(prefix) {
162
+ return this.counters.get(prefix) ?? 0;
163
+ }
164
+ }
165
+ /**
166
+ * Глобальный экземпляр для использования в pipeline
167
+ * Создаётся заново для каждой компиляции
168
+ */
169
+ let globalBindings = null;
170
+ /**
171
+ * Получает текущий BindingManager
172
+ * @throws Если менеджер не инициализирован
173
+ */
174
+ export function getBindings() {
175
+ if (!globalBindings) {
176
+ throw new Error("BindingManager not initialized. Call initBindings() first.");
177
+ }
178
+ return globalBindings;
179
+ }
180
+ /**
181
+ * Инициализирует новый BindingManager для компиляции
182
+ * @returns Созданный менеджер
183
+ */
184
+ export function initBindings() {
185
+ globalBindings = new BindingManager();
186
+ return globalBindings;
187
+ }
188
+ /**
189
+ * Создаёт изолированный BindingManager (для тестов)
190
+ */
191
+ export function createBindings() {
192
+ return new BindingManager();
193
+ }
194
+ //# sourceMappingURL=binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/lowering/binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,cAAc;IACzB,oCAAoC;IAC5B,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;IAElD,sDAAsD;IAC9C,WAAW,GAAgB,IAAI,GAAG,EAAE,CAAC;IAE7C,wDAAwD;IAChD,cAAc,GAAgB,IAAI,GAAG,EAAE,CAAC;IAEhD;;;;OAIG;IACH,mBAAmB,CAAC,KAAuB;QACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,MAAc;QACnB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,IAAY,CAAC;QAEjB,qBAAqB;QACrB,GAAG,CAAC;YACF,IAAI,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,CAAC;YAC7B,KAAK,EAAE,CAAC;QACV,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QAEjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,QAAgB;QACrB,MAAM,GAAG,GAAG,UAAU,QAAQ,EAAE,CAAC;QACjC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,IAAY,CAAC;QAEjB,qBAAqB;QACrB,GAAG,CAAC;YACF,IAAI,GAAG,GAAG,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC/B,KAAK,EAAE,CAAC;QACV,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QAEjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,QAAgB;QACtB,OAAO,GAAG,QAAQ,MAAM,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,QAAgB;QACvB,OAAO,GAAG,QAAQ,OAAO,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,YAAoB;QAC9B,MAAM,GAAG,GAAG,WAAW,YAAY,EAAE,CAAC;QACtC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,IAAY,CAAC;QACjB,GAAG,CAAC;YACF,IAAI,GAAG,aAAa,YAAY,IAAI,KAAK,EAAE,CAAC;YAC5C,KAAK,EAAE,CAAC;QACV,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;CACF;AAED;;;GAGG;AACH,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IACtC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,cAAc,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Expression Visitors - обработка expressions TypeScript AST
3
+ *
4
+ * Содержит:
5
+ * - visitExpression (dispatch)
6
+ * - visitIdentifier
7
+ * - visitTemplateExpression
8
+ * - visitBinaryExpression
9
+ * - visitPrefixUnaryExpression, visitPostfixUnaryExpression
10
+ * - visitCallExpression
11
+ * - visitObjectLiteral, visitArrayLiteral
12
+ * - visitArrowFunction, visitFunctionExpression
13
+ * - visitNewExpression
14
+ *
15
+ * @module lowering/expressions
16
+ */
17
+ import * as ts from "typescript";
18
+ import { type IRExpression } from "../ir/index.ts";
19
+ import type { VisitorContext } from "./visitor.ts";
20
+ /**
21
+ * Обрабатывает expression
22
+ * @param objectName - имя объекта если это инициализатор переменной
23
+ */
24
+ export declare function visitExpression(node: ts.Expression, ctx: VisitorContext, objectName?: string): IRExpression;
25
+ /**
26
+ * Обрабатывает identifier
27
+ */
28
+ export declare function visitIdentifier(node: ts.Identifier, ctx: VisitorContext): IRExpression;
29
+ /**
30
+ * Обрабатывает template expression
31
+ */
32
+ export declare function visitTemplateExpression(node: ts.TemplateExpression, ctx: VisitorContext): IRExpression;
33
+ /**
34
+ * Обрабатывает binary expression
35
+ */
36
+ export declare function visitBinaryExpression(node: ts.BinaryExpression, ctx: VisitorContext): IRExpression;
37
+ /**
38
+ * Обрабатывает prefix unary expression
39
+ */
40
+ export declare function visitPrefixUnaryExpression(node: ts.PrefixUnaryExpression, ctx: VisitorContext): IRExpression;
41
+ /**
42
+ * Обрабатывает postfix unary expression
43
+ */
44
+ export declare function visitPostfixUnaryExpression(node: ts.PostfixUnaryExpression, ctx: VisitorContext): IRExpression;
45
+ /**
46
+ * Обрабатывает call expression
47
+ */
48
+ export declare function visitCallExpression(node: ts.CallExpression, ctx: VisitorContext): IRExpression;
49
+ /**
50
+ * Обрабатывает object literal
51
+ *
52
+ * Spread-свойства преобразуются в вызовы ObjectUnion.
53
+ * Если объект содержит методы:
54
+ * 1. Создаём временную переменную __objN
55
+ * 2. Генерируем функции, env, desc для каждого метода
56
+ * 3. Присваиваем obj в дескрипторе после создания объекта
57
+ * 4. Возвращаем __objN
58
+ */
59
+ export declare function visitObjectLiteral(node: ts.ObjectLiteralExpression, ctx: VisitorContext, objectName?: string): IRExpression;
60
+ /**
61
+ * Обрабатывает array literal.
62
+ * Spread-элементы преобразуются в вызов ArrayUnion([...], spreadExpr, [...]).
63
+ */
64
+ export declare function visitArrayLiteral(node: ts.ArrayLiteralExpression, ctx: VisitorContext): IRExpression;
65
+ /**
66
+ * Обрабатывает arrow function
67
+ *
68
+ * Использует buildFunction для генерации env/desc паттерна
69
+ * Возвращает: __env.__arrowN
70
+ */
71
+ export declare function visitArrowFunction(node: ts.ArrowFunction, ctx: VisitorContext): IRExpression;
72
+ /**
73
+ * Обрабатывает function expression
74
+ */
75
+ export declare function visitFunctionExpression(node: ts.FunctionExpression, ctx: VisitorContext): IRExpression;
76
+ /**
77
+ * Обрабатывает new expression
78
+ */
79
+ export declare function visitNewExpression(node: ts.NewExpression, ctx: VisitorContext): IRExpression;
80
+ /**
81
+ * Строит ссылку на переменную импортированного модуля (__module_X) через __env цепочку.
82
+ *
83
+ * Если какой-либо именованный импорт из модуля используется во вложенной функции
84
+ * (isCaptured), переменная `__module_X` записывается в __env на уровне модуля.
85
+ * Доступ к ней из вложенных функций осуществляется через __env.__parent цепочку,
86
+ * аналогично обычным captured-переменным.
87
+ *
88
+ * @param moduleVar - Имя переменной модуля (например "__module___utils")
89
+ * @param isCapturedImport - Является ли этот импорт captured (используется во вложенной функции)
90
+ * @param ctx - Текущий VisitorContext
91
+ * @returns IR выражение: прямой IR.id(moduleVar) или __env[.__parent...].moduleVar
92
+ */
93
+ export declare function importModuleVarAccess(moduleVar: string, isCapturedImport: boolean, ctx: VisitorContext): IRExpression;
94
+ /**
95
+ * Строит ссылку на helper-функцию через цепочку __env.__parent.
96
+ *
97
+ * Хелперы (__ImportMeta_*, __AbsoluteUrl) зарегистрированы в top-level __env
98
+ * (moduleScope). Если текущий код — внутри вложенной функции, нужно
99
+ * пройти цепочку __parent до module-level __env.
100
+ *
101
+ * @param helperName - Имя хелпера (например "__ImportMeta_dirUrl")
102
+ * @param ctx - Текущий VisitorContext
103
+ * @returns IR выражение вида __env.__ImportMeta_dirUrl или __env.__parent.__ImportMeta_dirUrl
104
+ */
105
+ export declare function helperEnvAccess(helperName: string, ctx: VisitorContext): IRExpression;
106
+ //# sourceMappingURL=expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/lowering/expressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAGL,KAAK,YAAY,EAIlB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA0HnD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,EAAE,CAAC,UAAU,EACnB,GAAG,EAAE,cAAc,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,YAAY,CAoPd;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,GAAG,YAAY,CA4DtF;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,EAAE,CAAC,kBAAkB,EAC3B,GAAG,EAAE,cAAc,GAClB,YAAY,CA4Bd;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,EAAE,CAAC,gBAAgB,EACzB,GAAG,EAAE,cAAc,GAClB,YAAY,CAoId;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,EAAE,CAAC,qBAAqB,EAC9B,GAAG,EAAE,cAAc,GAClB,YAAY,CA4Bd;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,EAAE,CAAC,sBAAsB,EAC/B,GAAG,EAAE,cAAc,GAClB,YAAY,CAwBd;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,cAAc,GAAG,YAAY,CAwO9F;AAmCD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAChC,GAAG,EAAE,cAAc,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,YAAY,CA8Md;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,EAAE,CAAC,sBAAsB,EAC/B,GAAG,EAAE,cAAc,GAClB,YAAY,CAoCd;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE,cAAc,GAAG,YAAY,CAmF5F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,EAAE,CAAC,kBAAkB,EAC3B,GAAG,EAAE,cAAc,GAClB,YAAY,CA0Dd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE,cAAc,GAAG,YAAY,CAO5F;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,OAAO,EACzB,GAAG,EAAE,cAAc,GAClB,YAAY,CAwBd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,YAAY,CAgBrF"}