typesql-cli 0.20.0 → 0.21.1

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 (122) hide show
  1. package/cli.js +6 -5
  2. package/cli.js.map +1 -1
  3. package/code-generator2.d.ts.map +1 -1
  4. package/code-generator2.js +136 -102
  5. package/code-generator2.js.map +1 -1
  6. package/codegen/code-generator.d.ts +13 -0
  7. package/codegen/code-generator.d.ts.map +1 -0
  8. package/codegen/code-generator.js +107 -0
  9. package/codegen/code-generator.js.map +1 -0
  10. package/codegen/code-generator2.d.ts +10 -0
  11. package/codegen/code-generator2.d.ts.map +1 -0
  12. package/codegen/code-generator2.js +917 -0
  13. package/codegen/code-generator2.js.map +1 -0
  14. package/codegen/codegen-util.d.ts +1 -0
  15. package/codegen/codegen-util.d.ts.map +1 -0
  16. package/codegen/codegen-util.js +2 -0
  17. package/codegen/codegen-util.js.map +1 -0
  18. package/codegen/generic/codegen-util.d.ts +8 -0
  19. package/codegen/generic/codegen-util.d.ts.map +1 -0
  20. package/codegen/generic/codegen-util.js +89 -0
  21. package/codegen/generic/codegen-util.js.map +1 -0
  22. package/codegen/mysql2.d.ts +14 -0
  23. package/codegen/mysql2.d.ts.map +1 -0
  24. package/codegen/mysql2.js +608 -0
  25. package/codegen/mysql2.js.map +1 -0
  26. package/codegen/pg.d.ts +7 -0
  27. package/codegen/pg.d.ts.map +1 -0
  28. package/codegen/pg.js +707 -0
  29. package/codegen/pg.js.map +1 -0
  30. package/codegen/postgres-pg.d.ts +10 -0
  31. package/codegen/postgres-pg.d.ts.map +1 -0
  32. package/codegen/postgres-pg.js +917 -0
  33. package/codegen/postgres-pg.js.map +1 -0
  34. package/codegen/shared/codegen-util.d.ts +72 -0
  35. package/codegen/shared/codegen-util.d.ts.map +1 -0
  36. package/codegen/shared/codegen-util.js +487 -0
  37. package/codegen/shared/codegen-util.js.map +1 -0
  38. package/codegen/sqlite-code-generator.d.ts +15 -0
  39. package/codegen/sqlite-code-generator.d.ts.map +1 -0
  40. package/codegen/sqlite-code-generator.js +1049 -0
  41. package/codegen/sqlite-code-generator.js.map +1 -0
  42. package/codegen/sqlite.d.ts +11 -0
  43. package/codegen/sqlite.d.ts.map +1 -0
  44. package/codegen/sqlite.js +814 -0
  45. package/codegen/sqlite.js.map +1 -0
  46. package/describe-query.d.ts.map +1 -1
  47. package/describe-query.js +45 -32
  48. package/describe-query.js.map +1 -1
  49. package/dialects/postgres.d.ts +4 -1
  50. package/dialects/postgres.d.ts.map +1 -1
  51. package/dialects/postgres.js +4 -2
  52. package/dialects/postgres.js.map +1 -1
  53. package/drivers/sqlite.d.ts +4 -1
  54. package/drivers/sqlite.d.ts.map +1 -1
  55. package/drivers/sqlite.js +4 -1
  56. package/drivers/sqlite.js.map +1 -1
  57. package/drivers/types.d.ts +3 -1
  58. package/drivers/types.d.ts.map +1 -1
  59. package/generic/codegen-util.d.ts +8 -0
  60. package/generic/codegen-util.d.ts.map +1 -0
  61. package/generic/codegen-util.js +89 -0
  62. package/generic/codegen-util.js.map +1 -0
  63. package/mysql-mapping.d.ts +4 -1
  64. package/mysql-mapping.d.ts.map +1 -1
  65. package/mysql-mapping.js +5 -3
  66. package/mysql-mapping.js.map +1 -1
  67. package/mysql-query-analyzer/infer-column-nullability.js +1 -1
  68. package/mysql-query-analyzer/infer-column-nullability.js.map +1 -1
  69. package/mysql-query-analyzer/parse.d.ts.map +1 -1
  70. package/mysql-query-analyzer/parse.js +3 -2
  71. package/mysql-query-analyzer/parse.js.map +1 -1
  72. package/mysql-query-analyzer/select-columns.d.ts.map +1 -1
  73. package/mysql-query-analyzer/select-columns.js +1 -1
  74. package/mysql-query-analyzer/select-columns.js.map +1 -1
  75. package/mysql-query-analyzer/types.d.ts +3 -0
  76. package/mysql-query-analyzer/types.d.ts.map +1 -1
  77. package/package.json +12 -11
  78. package/postgres-pg.d.ts +10 -0
  79. package/postgres-pg.d.ts.map +1 -0
  80. package/postgres-pg.js +917 -0
  81. package/postgres-pg.js.map +1 -0
  82. package/postgres-query-analyzer/describe.d.ts +1 -1
  83. package/postgres-query-analyzer/describe.d.ts.map +1 -1
  84. package/postgres-query-analyzer/describe.js +86 -53
  85. package/postgres-query-analyzer/describe.js.map +1 -1
  86. package/postgres-query-analyzer/traverse.d.ts +1 -0
  87. package/postgres-query-analyzer/traverse.d.ts.map +1 -1
  88. package/postgres-query-analyzer/traverse.js +43 -21
  89. package/postgres-query-analyzer/traverse.js.map +1 -1
  90. package/postgres-query-analyzer/types.d.ts +1 -0
  91. package/postgres-query-analyzer/types.d.ts.map +1 -1
  92. package/postgres-query-analyzer/util.d.ts +9 -0
  93. package/postgres-query-analyzer/util.d.ts.map +1 -0
  94. package/postgres-query-analyzer/util.js +58 -0
  95. package/postgres-query-analyzer/util.js.map +1 -0
  96. package/rescript.d.ts +1 -0
  97. package/rescript.d.ts.map +1 -0
  98. package/rescript.js +2 -0
  99. package/rescript.js.map +1 -0
  100. package/sqlite-query-analyzer/parser.js +6 -3
  101. package/sqlite-query-analyzer/parser.js.map +1 -1
  102. package/sqlite-query-analyzer/replace-list-params.d.ts.map +1 -1
  103. package/sqlite-query-analyzer/replace-list-params.js.map +1 -1
  104. package/sqlite-query-analyzer/sqlite-code-generator.d.ts +15 -0
  105. package/sqlite-query-analyzer/sqlite-code-generator.d.ts.map +1 -0
  106. package/sqlite-query-analyzer/sqlite-code-generator.js +1049 -0
  107. package/sqlite-query-analyzer/sqlite-code-generator.js.map +1 -0
  108. package/sqlite-query-analyzer/sqlite-describe-nested-query.d.ts +1 -0
  109. package/sqlite-query-analyzer/sqlite-describe-nested-query.d.ts.map +1 -1
  110. package/sqlite-query-analyzer/sqlite-describe-nested-query.js.map +1 -1
  111. package/sqlite-query-analyzer/traverse.d.ts.map +1 -1
  112. package/sqlite-query-analyzer/traverse.js +6 -3
  113. package/sqlite-query-analyzer/traverse.js.map +1 -1
  114. package/sqlite.d.ts +43 -0
  115. package/sqlite.d.ts.map +1 -0
  116. package/sqlite.js +755 -0
  117. package/sqlite.js.map +1 -0
  118. package/ts-nested-descriptor.d.ts.map +1 -1
  119. package/ts-nested-descriptor.js +1 -1
  120. package/ts-nested-descriptor.js.map +1 -1
  121. package/types.d.ts +8 -1
  122. package/types.d.ts.map +1 -1
@@ -0,0 +1,608 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.generateTsCodeForMySQL = generateTsCodeForMySQL;
16
+ exports.getOperator = getOperator;
17
+ exports.writeTypeBlock = writeTypeBlock;
18
+ exports.generateTsDescriptor = generateTsDescriptor;
19
+ exports.removeDuplicatedParameters = removeDuplicatedParameters;
20
+ exports.hasStringColumn = hasStringColumn;
21
+ exports.hasDateColumn = hasDateColumn;
22
+ exports.replaceOrderByParam = replaceOrderByParam;
23
+ exports.generateTsFileFromContent = generateTsFileFromContent;
24
+ const Either_1 = require("fp-ts/lib/Either");
25
+ const mysql_mapping_1 = require("../mysql-mapping");
26
+ const describe_query_1 = require("../describe-query");
27
+ const code_block_writer_1 = __importDefault(require("code-block-writer"));
28
+ const ts_nested_descriptor_1 = require("../ts-nested-descriptor");
29
+ const ts_dynamic_query_descriptor_1 = require("../ts-dynamic-query-descriptor");
30
+ const node_os_1 = require("node:os");
31
+ const codegen_util_1 = require("./shared/codegen-util");
32
+ function generateTsCodeForMySQL(tsDescriptor, fileName, crud = false) {
33
+ var _a;
34
+ const writer = new code_block_writer_1.default();
35
+ const camelCaseName = (0, codegen_util_1.convertToCamelCaseName)(fileName);
36
+ const capitalizedName = (0, codegen_util_1.capitalize)(camelCaseName);
37
+ const dataTypeName = `${capitalizedName}Data`;
38
+ const paramsTypeName = `${capitalizedName}Params`;
39
+ const resultTypeName = `${capitalizedName}Result`;
40
+ const dynamicParamsTypeName = `${capitalizedName}DynamicParams`;
41
+ const selectColumnsTypeName = `${capitalizedName}Select`;
42
+ const whereTypeName = `${capitalizedName}Where`;
43
+ const orderByTypeName = `${capitalizedName}OrderBy`;
44
+ const generateOrderBy = tsDescriptor.orderByColumns != null && tsDescriptor.orderByColumns.length > 0;
45
+ // Import declarations
46
+ writer.writeLine(`import type { Connection } from 'mysql2/promise';`);
47
+ if (tsDescriptor.dynamicQuery != null) {
48
+ writer.writeLine(`import { EOL } from 'os';`);
49
+ }
50
+ writer.blankLine();
51
+ if (tsDescriptor.data) {
52
+ //update
53
+ writeTypeBlock(writer, tsDescriptor.data, dataTypeName, crud);
54
+ }
55
+ const orderByField = generateOrderBy ? `orderBy: [${orderByTypeName}, ...${orderByTypeName}[]]` : undefined;
56
+ const paramsTypes = tsDescriptor.dynamicQuery == null ? tsDescriptor.parameters : (0, ts_dynamic_query_descriptor_1.mapToDynamicParams)(tsDescriptor.parameters);
57
+ if (tsDescriptor.dynamicQuery != null) {
58
+ writer.write(`export type ${dynamicParamsTypeName} = `).block(() => {
59
+ writer.writeLine(`select?: ${selectColumnsTypeName};`);
60
+ if (paramsTypes.length > 0) {
61
+ writer.writeLine(`params?: ${paramsTypeName};`);
62
+ }
63
+ writer.writeLine(`where?: ${whereTypeName}[];`);
64
+ if (orderByField) {
65
+ writer.writeLine(`${orderByField};`);
66
+ }
67
+ });
68
+ writer.blankLine();
69
+ }
70
+ writeTypeBlock(writer, paramsTypes, paramsTypeName, false, tsDescriptor.dynamicQuery ? undefined : orderByField);
71
+ const resultTypes = tsDescriptor.dynamicQuery == null ? tsDescriptor.columns : (0, ts_dynamic_query_descriptor_1.mapToDynamicResultColumns)(tsDescriptor.columns);
72
+ writeTypeBlock(writer, resultTypes, resultTypeName, false);
73
+ if (tsDescriptor.dynamicQuery) {
74
+ const selectFields = (0, ts_dynamic_query_descriptor_1.mapToDynamicSelectColumns)(tsDescriptor.columns);
75
+ writeTypeBlock(writer, selectFields, selectColumnsTypeName, false);
76
+ writer.write('const selectFragments = ').inlineBlock(() => {
77
+ var _a;
78
+ (_a = tsDescriptor.dynamicQuery) === null || _a === void 0 ? void 0 : _a.select.forEach((fragment, index) => {
79
+ const field = tsDescriptor.columns[index].name;
80
+ writer.writeLine(`${field}: \`${fragment.fragmentWitoutAlias}\`,`);
81
+ });
82
+ });
83
+ writer.write(' as const;');
84
+ if (orderByField != null) {
85
+ writer.blankLine();
86
+ writer.write('const orderByFragments = ').inlineBlock(() => {
87
+ for (const col of tsDescriptor.orderByColumns || []) {
88
+ writer.writeLine(`'${col}': \`${col}\`,`);
89
+ }
90
+ });
91
+ writer.write(' as const;');
92
+ }
93
+ writer.blankLine();
94
+ writer.writeLine(`const NumericOperatorList = ['=', '<>', '>', '<', '>=', '<='] as const;`);
95
+ writer.writeLine('type NumericOperator = typeof NumericOperatorList[number];');
96
+ if (hasStringColumn(tsDescriptor.columns)) {
97
+ writer.writeLine(`type StringOperator = '=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE';`);
98
+ }
99
+ writer.writeLine(`type SetOperator = 'IN' | 'NOT IN';`);
100
+ writer.writeLine(`type BetweenOperator = 'BETWEEN';`);
101
+ writer.blankLine();
102
+ writer.write(`export type ${whereTypeName} =`).indent(() => {
103
+ for (const col of tsDescriptor.columns) {
104
+ writer.writeLine(`| ['${col.name}', ${getOperator(col.tsType)}, ${col.tsType} | null]`);
105
+ writer.writeLine(`| ['${col.name}', SetOperator, ${col.tsType}[]]`);
106
+ writer.writeLine(`| ['${col.name}', BetweenOperator, ${col.tsType} | null, ${col.tsType} | null]`);
107
+ }
108
+ });
109
+ writer.blankLine();
110
+ }
111
+ let functionReturnType = resultTypeName;
112
+ functionReturnType += tsDescriptor.multipleRowsResult ? '[]' : tsDescriptor.queryType === 'Select' ? ' | null' : '';
113
+ let functionArguments = 'connection: Connection';
114
+ functionArguments += tsDescriptor.data && tsDescriptor.data.length > 0 ? `, data: ${dataTypeName}` : '';
115
+ if (tsDescriptor.dynamicQuery == null) {
116
+ functionArguments += tsDescriptor.parameters.length > 0 || generateOrderBy ? `, params: ${paramsTypeName}` : '';
117
+ }
118
+ else {
119
+ functionArguments += `, ${orderByField ? 'params' : 'params?'}: ${dynamicParamsTypeName}`;
120
+ }
121
+ const allParameters = tsDescriptor.data
122
+ ? tsDescriptor.data.map((field, index) => {
123
+ //:nameIsSet, :name, :valueIsSet, :value....
124
+ if (crud && index % 2 === 0) {
125
+ const nextField = tsDescriptor.data[index + 1];
126
+ return `data.${nextField.name} !== undefined`;
127
+ }
128
+ return `data.${field.name}`;
129
+ })
130
+ : [];
131
+ allParameters.push(...tsDescriptor.parameterNames.map((paramName) => generateParam(paramName)));
132
+ const queryParams = allParameters.length > 0 ? `, [${allParameters.join(', ')}]` : '';
133
+ const escapedBackstick = scapeBackStick(tsDescriptor.sql);
134
+ const processedSql = replaceOrderByParam(escapedBackstick);
135
+ const sqlSplit = processedSql.split('\n');
136
+ writer.write(`export async function ${camelCaseName}(${functionArguments}): Promise<${functionReturnType}>`).block(() => {
137
+ if (tsDescriptor.dynamicQuery == null) {
138
+ writer.writeLine('const sql = `');
139
+ sqlSplit.forEach((sqlLine) => {
140
+ writer.indent().write(sqlLine);
141
+ writer.newLine();
142
+ });
143
+ writer.indent().write('`');
144
+ writer.blankLine();
145
+ }
146
+ else {
147
+ writer.writeLine('const where = whereConditionsToObject(params?.where);');
148
+ if (orderByField != null) {
149
+ writer.writeLine('const orderBy = orderByToObject(params.orderBy);');
150
+ }
151
+ writer.writeLine('const paramsValues: any = [];');
152
+ if (tsDescriptor.dynamicQuery.with) {
153
+ writer.writeLine(`let withClause = '';`);
154
+ tsDescriptor.dynamicQuery.with.forEach((withFragment) => {
155
+ generateDynamicQueryFrom(writer, 'withClause', withFragment, tsDescriptor.columns);
156
+ });
157
+ }
158
+ writer.writeLine(`let sql = 'SELECT';`);
159
+ tsDescriptor.dynamicQuery.select.forEach((fragment) => {
160
+ writer
161
+ .write(`if (params?.select == null || ${fragment.dependOnFields.map((fieldIndex) => `params.select.${tsDescriptor.columns[fieldIndex].name}`).join('&&')})`)
162
+ .block(() => {
163
+ writer.write(`sql = appendSelect(sql, \`${fragment.fragment}\`);`);
164
+ });
165
+ });
166
+ tsDescriptor.dynamicQuery.from.forEach((fragment) => {
167
+ generateDynamicQueryFrom(writer, 'sql', fragment, tsDescriptor.columns, tsDescriptor.orderByColumns != null);
168
+ });
169
+ writer.writeLine('sql += EOL + `WHERE 1 = 1`;');
170
+ tsDescriptor.dynamicQuery.where.forEach((fragment) => {
171
+ const ifParamConditions = fragment.dependOnParams.map((param) => `params?.params?.${param} != null`);
172
+ const paramValues = fragment.parameters.map((param) => `params.params.${param}`);
173
+ if (ifParamConditions.length > 0) {
174
+ writer.write(`if (${ifParamConditions.join(' || ')})`).block(() => {
175
+ writer.writeLine(`sql += EOL + \`${fragment.fragment}\`;`);
176
+ paramValues.forEach((paramValues) => {
177
+ writer.writeLine(`paramsValues.push(${paramValues});`);
178
+ });
179
+ });
180
+ }
181
+ else {
182
+ writer.writeLine(`sql += EOL + '${fragment.fragment}';`);
183
+ }
184
+ });
185
+ if (tsDescriptor.dynamicQuery.with) {
186
+ writer.write(`if (withClause != '') `).block(() => {
187
+ writer.writeLine(`sql = 'WITH ' + withClause + EOL + sql;`);
188
+ });
189
+ }
190
+ writer.write('params?.where?.forEach(condition => ').inlineBlock(() => {
191
+ writer.writeLine('const where = whereCondition(condition);');
192
+ writer.write('if (where?.hasValue)').block(() => {
193
+ writer.writeLine(`sql += EOL + 'AND ' + where.sql;`);
194
+ writer.write('paramsValues.push(...where.values);');
195
+ });
196
+ });
197
+ writer.write(');');
198
+ if (tsDescriptor.orderByColumns) {
199
+ writer.writeLine('sql += EOL + `ORDER BY ${buildOrderBy(params.orderBy)}`;');
200
+ }
201
+ }
202
+ const singleRowSelect = tsDescriptor.queryType === 'Select' && tsDescriptor.multipleRowsResult === false;
203
+ if (tsDescriptor.queryType === 'Select') {
204
+ if (tsDescriptor.dynamicQuery == null) {
205
+ writer.writeLine(`return connection.query({sql, rowsAsArray: true}${queryParams})`);
206
+ writer.indent().write('.then(res => res[0] as any[])');
207
+ writer.newLine().indent().write(`.then(res => res.map(data => mapArrayTo${resultTypeName}(data)))`);
208
+ }
209
+ else {
210
+ writer.writeLine('return connection.query({ sql, rowsAsArray: true }, paramsValues)');
211
+ writer.indent().write('.then(res => res[0] as any[])');
212
+ writer.newLine().indent().write(`.then(res => res.map(data => mapArrayTo${resultTypeName}(data, params?.select)))`);
213
+ }
214
+ }
215
+ else {
216
+ writer.writeLine(`return connection.query(sql${queryParams})`);
217
+ writer.indent().write(`.then(res => res[0] as ${resultTypeName})`);
218
+ }
219
+ if (tsDescriptor.queryType === 'Select' && tsDescriptor.multipleRowsResult === false) {
220
+ writer.newLine().indent().write('.then(res => res[0]);');
221
+ }
222
+ else {
223
+ writer.write(';');
224
+ }
225
+ });
226
+ if (tsDescriptor.queryType === 'Select') {
227
+ writer.blankLine();
228
+ if (tsDescriptor.dynamicQuery == null) {
229
+ writer.write(`function mapArrayTo${resultTypeName}(data: any)`).block(() => {
230
+ writer.write(`const result: ${resultTypeName} =`).block(() => {
231
+ tsDescriptor.columns.forEach((tsField, index) => {
232
+ writer.writeLine(`${tsField.name}: data[${index}]${commaSeparator(tsDescriptor.columns.length, index)}`);
233
+ });
234
+ });
235
+ writer.write('return result;');
236
+ });
237
+ }
238
+ else {
239
+ writer.write(`function mapArrayTo${resultTypeName}(data: any, select?: ${selectColumnsTypeName})`).block(() => {
240
+ writer.writeLine(`const result = {} as ${resultTypeName};`);
241
+ writer.writeLine('let rowIndex = 0;');
242
+ tsDescriptor.columns.forEach((tsField) => {
243
+ writer.write(`if (select == null || select.${tsField.name})`).block(() => {
244
+ writer.writeLine(`result.${tsField.name} = data[rowIndex++];`);
245
+ });
246
+ });
247
+ writer.write('return result;');
248
+ });
249
+ writer.blankLine();
250
+ writer.write('function appendSelect(sql: string, selectField: string)').block(() => {
251
+ writer.write(`if (sql == 'SELECT')`).block(() => {
252
+ writer.writeLine('return sql + EOL + selectField;');
253
+ });
254
+ writer.write('else').block(() => {
255
+ writer.writeLine(`return sql + ', ' + EOL + selectField;`);
256
+ });
257
+ });
258
+ writer.blankLine();
259
+ writer.write(`function whereConditionsToObject(whereConditions?: ${whereTypeName}[])`).block(() => {
260
+ writer.writeLine('const obj = {} as any;');
261
+ writer.write('whereConditions?.forEach(condition => ').inlineBlock(() => {
262
+ writer.writeLine('const where = whereCondition(condition);');
263
+ writer.write('if (where?.hasValue) ').block(() => {
264
+ writer.writeLine('obj[condition[0]] = true;');
265
+ });
266
+ });
267
+ writer.write(');');
268
+ writer.writeLine('return obj;');
269
+ });
270
+ if (orderByField != null) {
271
+ writer.blankLine();
272
+ writer.write(`function orderByToObject(${orderByField})`).block(() => {
273
+ writer.writeLine('const obj = {} as any;');
274
+ writer.write('orderBy?.forEach(order => ').inlineBlock(() => {
275
+ writer.writeLine('obj[order.column] = true;');
276
+ });
277
+ writer.write(');');
278
+ writer.writeLine('return obj;');
279
+ });
280
+ }
281
+ writer.blankLine();
282
+ writer.write('type WhereConditionResult = ').block(() => {
283
+ writer.writeLine('sql: string;');
284
+ writer.writeLine('hasValue: boolean;');
285
+ writer.writeLine('values: any[];');
286
+ });
287
+ writer.blankLine();
288
+ writer.write(`function whereCondition(condition: ${whereTypeName}): WhereConditionResult | undefined `).block(() => {
289
+ writer.blankLine();
290
+ writer.writeLine('const selectFragment = selectFragments[condition[0]];');
291
+ writer.writeLine('const operator = condition[1];');
292
+ writer.blankLine();
293
+ if (hasStringColumn(tsDescriptor.columns)) {
294
+ writer.write(`if (operator == 'LIKE') `).block(() => {
295
+ writer.write('return ').block(() => {
296
+ writer.writeLine("sql: `${selectFragment} LIKE concat('%', ?, '%')`,");
297
+ writer.writeLine('hasValue: condition[2] != null,');
298
+ writer.writeLine('values: [condition[2]]');
299
+ });
300
+ });
301
+ }
302
+ writer.write(`if (operator == 'BETWEEN') `).block(() => {
303
+ writer.write('return ').block(() => {
304
+ writer.writeLine('sql: `${selectFragment} BETWEEN ? AND ?`,');
305
+ writer.writeLine('hasValue: condition[2] != null && condition[3] != null,');
306
+ writer.writeLine('values: [condition[2], condition[3]]');
307
+ });
308
+ });
309
+ writer.write(`if (operator == 'IN' || operator == 'NOT IN') `).block(() => {
310
+ writer.write('return ').block(() => {
311
+ writer.writeLine('sql: `${selectFragment} ${operator} (?)`,');
312
+ writer.writeLine('hasValue: condition[2] != null && condition[2].length > 0,');
313
+ writer.writeLine('values: [condition[2]]');
314
+ });
315
+ });
316
+ writer.write('if (NumericOperatorList.includes(operator)) ').block(() => {
317
+ writer.write('return ').block(() => {
318
+ writer.writeLine('sql: `${selectFragment} ${operator} ?`,');
319
+ writer.writeLine('hasValue: condition[2] != null,');
320
+ writer.writeLine('values: [condition[2]]');
321
+ });
322
+ });
323
+ });
324
+ }
325
+ }
326
+ if (generateOrderBy) {
327
+ const orderByColumnsType = (_a = tsDescriptor.orderByColumns) === null || _a === void 0 ? void 0 : _a.map((col) => `'${col}'`).join(' | ');
328
+ writer.blankLine();
329
+ writer.write(`export type ${orderByTypeName} = `).block(() => {
330
+ if (tsDescriptor.dynamicQuery == null) {
331
+ writer.writeLine(`column: ${orderByColumnsType};`);
332
+ }
333
+ else {
334
+ writer.writeLine('column: keyof typeof orderByFragments;');
335
+ }
336
+ writer.writeLine(`direction: 'asc' | 'desc';`);
337
+ });
338
+ writer.blankLine();
339
+ writer.write(`function buildOrderBy(orderBy: ${orderByTypeName}[]): string`).block(() => {
340
+ if (tsDescriptor.dynamicQuery == null) {
341
+ writer.writeLine(`return orderBy.map(order => \`\\\`\${order.column}\\\` \${order.direction == 'desc' ? 'desc' : 'asc' }\`).join(', ');`);
342
+ }
343
+ else {
344
+ writer.writeLine(`return orderBy.map(order => \`\${orderByFragments[order.column]} \${order.direction == 'desc' ? 'desc' : 'asc'}\`).join(', ');`);
345
+ }
346
+ });
347
+ }
348
+ if (tsDescriptor.nestedDescriptor) {
349
+ const relations = tsDescriptor.nestedDescriptor.relations;
350
+ relations.forEach((relation) => {
351
+ const relationType = (0, codegen_util_1.generateRelationType)(capitalizedName, relation.name);
352
+ writer.blankLine();
353
+ writer.write(`export type ${relationType} = `).block(() => {
354
+ const uniqueNameFields = (0, codegen_util_1.renameInvalidNames)(relation.fields.map((f) => f.name));
355
+ relation.fields.forEach((field, index) => {
356
+ if (field.type === 'field') {
357
+ writer.writeLine(`${uniqueNameFields[index]}: ${field.tsType};`);
358
+ }
359
+ if (field.type === 'relation') {
360
+ const nestedRelationType = (0, codegen_util_1.generateRelationType)(capitalizedName, field.tsType);
361
+ const nullableOperator = field.notNull ? '' : '?';
362
+ writer.writeLine(`${field.name}${nullableOperator}: ${nestedRelationType};`);
363
+ }
364
+ });
365
+ });
366
+ });
367
+ relations.forEach((relation, index) => {
368
+ const relationType = (0, codegen_util_1.generateRelationType)(capitalizedName, relation.name);
369
+ if (index === 0) {
370
+ //first
371
+ writer.blankLine();
372
+ writer.write(`export async function ${camelCaseName}Nested(${functionArguments}): Promise<${relationType}[]>`).block(() => {
373
+ const params = tsDescriptor.parameters.length > 0 ? ', params' : '';
374
+ writer.writeLine(`const selectResult = await ${camelCaseName}(connection${params});`);
375
+ writer.write('if (selectResult.length == 0)').block(() => {
376
+ writer.writeLine('return [];');
377
+ });
378
+ writer.writeLine(`return collect${relationType}(selectResult);`);
379
+ });
380
+ }
381
+ const collectFunctionName = `collect${relationType}`;
382
+ const mapFunctionName = `mapTo${relationType}`;
383
+ writer.blankLine();
384
+ writer.write(`function ${collectFunctionName}(selectResult: ${resultTypeName}[]): ${relationType}[]`).block(() => {
385
+ const groupKey = tsDescriptor.columns[relation.groupKeyIndex].name;
386
+ writer.writeLine(`const grouped = groupBy(selectResult.filter(r => r.${groupKey} != null), r => r.${groupKey});`);
387
+ writer.writeLine(`return [...grouped.values()].map(r => ${mapFunctionName}(r))`);
388
+ });
389
+ writer.blankLine();
390
+ writer.write(`function ${mapFunctionName}(selectResult: ${resultTypeName}[]): ${relationType}`).block(() => {
391
+ writer.writeLine('const firstRow = selectResult[0];');
392
+ writer.write(`const result: ${relationType} = `).block(() => {
393
+ const uniqueNameFields = (0, codegen_util_1.renameInvalidNames)(relation.fields.map((f) => f.name));
394
+ relation.fields.forEach((field, index) => {
395
+ const separator = commaSeparator(relation.fields.length, index);
396
+ if (field.type === 'field') {
397
+ const fieldName = tsDescriptor.columns[field.index].name;
398
+ writer.writeLine(`${uniqueNameFields[index]}: firstRow.${fieldName}!${separator}`);
399
+ }
400
+ if (field.type === 'relation') {
401
+ const nestedRelationType = (0, codegen_util_1.generateRelationType)(capitalizedName, field.name);
402
+ const cardinality = field.list ? '' : '[0]';
403
+ writer.writeLine(`${field.name}: collect${nestedRelationType}(selectResult)${cardinality}${separator}`);
404
+ }
405
+ });
406
+ });
407
+ writer.writeLine('return result;');
408
+ });
409
+ });
410
+ writer.blankLine();
411
+ writer.write('const groupBy = <T, Q>(array: T[], predicate: (value: T, index: number, array: T[]) => Q) =>').block(() => {
412
+ writer
413
+ .write('return array.reduce((map, value, index, array) => ')
414
+ .inlineBlock(() => {
415
+ writer.writeLine('const key = predicate(value, index, array);');
416
+ writer.writeLine('map.get(key)?.push(value) ?? map.set(key, [value]);');
417
+ writer.writeLine('return map;');
418
+ })
419
+ .write(', new Map<Q, T[]>());');
420
+ });
421
+ }
422
+ return writer.toString();
423
+ }
424
+ function generateDynamicQueryFrom(writer, sqlVar, fragment, columns, includeOrderBy = false) {
425
+ var _a;
426
+ const selectConditions = fragment.dependOnFields.map((fieldIndex) => `params.select.${columns[fieldIndex].name}`);
427
+ if (selectConditions.length > 0) {
428
+ selectConditions.unshift('params?.select == null');
429
+ }
430
+ const paramConditions = fragment.dependOnParams.map((param) => `params.params?.${param} != null`);
431
+ const whereConditions = fragment.dependOnFields.map((fieldIndex) => `where.${columns[fieldIndex].name} != null`);
432
+ const orderByConditions = includeOrderBy ? ((_a = fragment.dependOnOrderBy) === null || _a === void 0 ? void 0 : _a.map((orderBy) => `orderBy['${orderBy}'] != null`)) || [] : [];
433
+ const allConditions = [...selectConditions, ...paramConditions, ...whereConditions, ...orderByConditions];
434
+ const paramValues = fragment.parameters.map((param) => `params?.params?.${param}`);
435
+ if (allConditions.length > 0) {
436
+ writer.write(`if (${allConditions.join(`${node_os_1.EOL} || `)})`).block(() => {
437
+ writer.write(`${sqlVar} += EOL + \`${fragment.fragment}\`;`);
438
+ for (const paramValue of paramValues) {
439
+ writer.writeLine(`paramsValues.push(${paramValue});`);
440
+ }
441
+ });
442
+ }
443
+ else {
444
+ writer.writeLine(`${sqlVar} += EOL + \`${fragment.fragment}\`;`);
445
+ for (const paramValue of paramValues) {
446
+ writer.writeLine(`paramsValues.push(${paramValue});`);
447
+ }
448
+ }
449
+ }
450
+ function getOperator(type) {
451
+ if (type === 'number' || type === 'Date') {
452
+ return 'NumericOperator';
453
+ }
454
+ return 'StringOperator';
455
+ }
456
+ function generateParam(param) {
457
+ if (param.isList) {
458
+ return `params.${param.name}.length == 0? null : params.${param.name}`;
459
+ }
460
+ return `params.${param.name}`;
461
+ }
462
+ function writeTypeBlock(writer, fields, typeName, updateCrud, extraField) {
463
+ const writeBlockCond = fields.length > 0 || extraField != null;
464
+ if (writeBlockCond) {
465
+ writer.write(`export type ${typeName} =`).block(() => {
466
+ fields.forEach((tsField, index) => {
467
+ // :nameSet, :name, valueSet, :value...
468
+ if (updateCrud && index % 2 !== 0) {
469
+ //only odd fields (:name, :value)
470
+ writer.writeLine(`${tsFieldToStr(tsField, true)};`);
471
+ }
472
+ else if (!updateCrud) {
473
+ writer.writeLine(`${tsFieldToStr(tsField, false)};`);
474
+ }
475
+ });
476
+ if (extraField) {
477
+ writer.write(`${extraField};`);
478
+ }
479
+ });
480
+ writer.blankLine();
481
+ }
482
+ }
483
+ function tsFieldToStr(tsField, isCrudUpdate) {
484
+ if (isCrudUpdate) {
485
+ //all fields are optionals
486
+ return `${tsField.name}?: ${tsField.tsType}${tsField.notNull === false ? ' | null' : ''}`;
487
+ }
488
+ return tsField.name + (tsField.notNull ? ': ' : '?: ') + tsField.tsType;
489
+ }
490
+ function generateTsDescriptor(queryInfo) {
491
+ var _a;
492
+ const escapedColumnsNames = (0, codegen_util_1.renameInvalidNames)(queryInfo.columns.map((col) => col.name));
493
+ const columns = queryInfo.columns.map((col, columnIndex) => {
494
+ const tsDesc = {
495
+ name: escapedColumnsNames[columnIndex],
496
+ tsType: mapColumnType(col.type),
497
+ notNull: col.notNull ? col.notNull : false
498
+ };
499
+ return tsDesc;
500
+ });
501
+ const parameterNames = queryInfo.parameters.map((p) => {
502
+ const paramInfo = {
503
+ name: p.name,
504
+ isList: !!p.columnType.endsWith('[]')
505
+ };
506
+ return paramInfo;
507
+ });
508
+ const uniqueParams = removeDuplicatedParameters(queryInfo.parameters);
509
+ const escapedParametersNames = (0, codegen_util_1.renameInvalidNames)(uniqueParams.map((col) => col.name));
510
+ const parameters = uniqueParams.map((col, paramIndex) => {
511
+ const arraySymbol = col.list ? '[]' : '';
512
+ const tsDesc = {
513
+ name: escapedParametersNames[paramIndex],
514
+ tsType: mapColumnType(col.columnType) + arraySymbol,
515
+ notNull: col.notNull ? col.notNull : false,
516
+ toDriver: col.name,
517
+ isArray: false
518
+ };
519
+ return tsDesc;
520
+ });
521
+ const escapedDataNames = queryInfo.data ? (0, codegen_util_1.renameInvalidNames)(queryInfo.data.map((col) => col.name)) : [];
522
+ const data = (_a = queryInfo.data) === null || _a === void 0 ? void 0 : _a.map((col, dataIndex) => {
523
+ const tsDesc = {
524
+ name: escapedDataNames[dataIndex],
525
+ tsType: mapColumnType(col.columnType),
526
+ notNull: col.notNull ? col.notNull : false,
527
+ toDriver: col.name,
528
+ isArray: false
529
+ };
530
+ return tsDesc;
531
+ });
532
+ const result = {
533
+ sql: queryInfo.sql,
534
+ queryType: queryInfo.queryType,
535
+ multipleRowsResult: queryInfo.multipleRowsResult,
536
+ columns,
537
+ orderByColumns: queryInfo.orderByColumns,
538
+ parameterNames,
539
+ parameters,
540
+ data
541
+ };
542
+ if (queryInfo.nestedResultInfo) {
543
+ const nestedDescriptor = (0, ts_nested_descriptor_1.createNestedTsDescriptor)(queryInfo.columns, queryInfo.nestedResultInfo);
544
+ result.nestedDescriptor = nestedDescriptor;
545
+ }
546
+ if (queryInfo.dynamicSqlQuery) {
547
+ const dynamicQueryDescriptor = queryInfo.dynamicSqlQuery;
548
+ result.dynamicQuery = dynamicQueryDescriptor;
549
+ }
550
+ if (queryInfo.returning) {
551
+ result.returning = queryInfo.returning;
552
+ }
553
+ return result;
554
+ }
555
+ function removeDuplicatedParameters(parameters) {
556
+ const columnsCount = new Map();
557
+ parameters.forEach((param) => {
558
+ const dupParam = columnsCount.get(param.name);
559
+ if (dupParam != null) {
560
+ //duplicated - two parameter null and notNull, resturn the null param (notNull == false)
561
+ if (param.notNull === false) {
562
+ columnsCount.set(param.name, param);
563
+ }
564
+ // return param;
565
+ }
566
+ else {
567
+ columnsCount.set(param.name, param);
568
+ }
569
+ });
570
+ return [...columnsCount.values()];
571
+ }
572
+ function scapeBackStick(sql) {
573
+ const pattern = /`/g;
574
+ return sql.replace(pattern, '\\`');
575
+ }
576
+ function mapColumnType(columnType) {
577
+ if (columnType === 'any')
578
+ return 'any';
579
+ const types = [].concat(columnType);
580
+ const mappedTypes = types.map((type) => mysql_mapping_1.mapper.convertToTsType(type));
581
+ return mappedTypes.join(' | '); // number | string
582
+ }
583
+ function hasStringColumn(columns) {
584
+ return columns.some((c) => c.tsType === 'string');
585
+ }
586
+ function hasDateColumn(columns) {
587
+ return columns.some((c) => c.tsType === 'Date');
588
+ }
589
+ function replaceOrderByParam(sql) {
590
+ const patern = /(.*order\s+by\s*)(\?)(.\n$)*/i;
591
+ const newSql = sql.replace(patern, '$1${buildOrderBy(params.orderBy)}$3');
592
+ return newSql;
593
+ }
594
+ function generateTsFileFromContent(client_1, queryName_1, sqlContent_1) {
595
+ return __awaiter(this, arguments, void 0, function* (client, queryName, sqlContent, crud = false) {
596
+ const queryInfoResult = yield (0, describe_query_1.parseSql)(client, sqlContent);
597
+ if ((0, Either_1.isLeft)(queryInfoResult)) {
598
+ return queryInfoResult;
599
+ }
600
+ const tsDescriptor = generateTsDescriptor(queryInfoResult.right);
601
+ const tsContent = generateTsCodeForMySQL(tsDescriptor, queryName, crud);
602
+ return (0, Either_1.right)(tsContent);
603
+ });
604
+ }
605
+ function commaSeparator(length, index) {
606
+ return length > 1 && index !== length - 1 ? ',' : '';
607
+ }
608
+ //# sourceMappingURL=mysql2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql2.js","sourceRoot":"","sources":["../../../src/codegen/mysql2.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAWA,wDAoZC;AAiCD,kCAKC;AASD,wCAyBC;AAUD,oDAkEC;AAED,gEAeC;AAiBD,0CAEC;AAED,sCAEC;AAED,kDAIC;AAQD,8DAcC;AAtnBD,6CAA8D;AAC9D,oDAA0D;AAC1D,sDAA6C;AAC7C,0EAAgD;AAChD,kEAAmE;AACnE,gFAA0H;AAE1H,qCAA8B;AAC9B,wDAA8I;AAE9I,SAAgB,sBAAsB,CAAC,YAA0B,EAAE,QAAgB,EAAE,IAAI,GAAG,KAAK;;IAChG,MAAM,MAAM,GAAG,IAAI,2BAAe,EAAE,CAAC;IAErC,MAAM,aAAa,GAAG,IAAA,qCAAsB,EAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,IAAA,yBAAU,EAAC,aAAa,CAAC,CAAC;IAElD,MAAM,YAAY,GAAG,GAAG,eAAe,MAAM,CAAC;IAC9C,MAAM,cAAc,GAAG,GAAG,eAAe,QAAQ,CAAC;IAClD,MAAM,cAAc,GAAG,GAAG,eAAe,QAAQ,CAAC;IAClD,MAAM,qBAAqB,GAAG,GAAG,eAAe,eAAe,CAAC;IAChE,MAAM,qBAAqB,GAAG,GAAG,eAAe,QAAQ,CAAC;IACzD,MAAM,aAAa,GAAG,GAAG,eAAe,OAAO,CAAC;IAChD,MAAM,eAAe,GAAG,GAAG,eAAe,SAAS,CAAC;IACpD,MAAM,eAAe,GAAG,YAAY,CAAC,cAAc,IAAI,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtG,sBAAsB;IACtB,MAAM,CAAC,SAAS,CAAC,mDAAmD,CAAC,CAAC;IACtE,IAAI,YAAY,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,CAAC,SAAS,EAAE,CAAC;IAEnB,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;QACvB,QAAQ;QACR,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,aAAa,eAAe,QAAQ,eAAe,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5G,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAA,gDAAkB,EAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAE9H,IAAI,YAAY,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,eAAe,qBAAqB,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAClE,MAAM,CAAC,SAAS,CAAC,YAAY,qBAAqB,GAAG,CAAC,CAAC;YACvD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,SAAS,CAAC,YAAY,cAAc,GAAG,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,CAAC,SAAS,CAAC,WAAW,aAAa,KAAK,CAAC,CAAC;YAChD,IAAI,YAAY,EAAE,CAAC;gBAClB,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC;YACtC,CAAC;QACF,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAED,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACjH,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,uDAAyB,EAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/H,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC3D,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,IAAA,uDAAyB,EAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrE,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;;YACzD,MAAA,YAAY,CAAC,YAAY,0CAAE,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;gBAC/C,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,OAAO,QAAQ,CAAC,mBAAmB,KAAK,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3B,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;gBAC1D,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;oBACrD,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC;gBAC3C,CAAC;YACF,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,SAAS,CAAC,yEAAyE,CAAC,CAAC;QAC5F,MAAM,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAC;QAC/E,IAAI,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,eAAe,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;YAC1D,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,IAAI,MAAM,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC;gBACxF,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,IAAI,mBAAmB,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;gBACpE,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,IAAI,uBAAuB,GAAG,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC;YACpG,CAAC;QACF,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,kBAAkB,GAAG,cAAc,CAAC;IACxC,kBAAkB,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpH,IAAI,iBAAiB,GAAG,wBAAwB,CAAC;IACjD,iBAAiB,IAAI,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxG,IAAI,YAAY,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;QACvC,iBAAiB,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,aAAa,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjH,CAAC;SAAM,CAAC;QACP,iBAAiB,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,qBAAqB,EAAE,CAAC;IAC3F,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI;QACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,4CAA4C;YAC5C,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,YAAY,CAAC,IAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChD,OAAO,QAAQ,SAAS,CAAC,IAAI,gBAAgB,CAAC;YAC/C,CAAC;YACD,OAAO,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC,CAAC;QACF,CAAC,CAAC,EAAE,CAAC;IACN,aAAa,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEhG,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,MAAM,gBAAgB,GAAG,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,CAAC,KAAK,CAAC,yBAAyB,aAAa,IAAI,iBAAiB,cAAc,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACvH,IAAI,YAAY,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAClC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5B,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/B,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM,CAAC,SAAS,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;YAC1E,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,CAAC,SAAS,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;YAClD,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;gBACzC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;oBACvD,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACpF,CAAC,CAAC,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YACxC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACrD,MAAM;qBACJ,KAAK,CACL,iCAAiC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,iBAAiB,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpJ;qBACA,KAAK,CAAC,GAAG,EAAE;oBACX,MAAM,CAAC,KAAK,CAAC,6BAA6B,QAAQ,CAAC,QAAQ,MAAM,CAAC,CAAC;gBACpE,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACnD,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC;YAC9G,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;YAChD,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACpD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,KAAK,UAAU,CAAC,CAAC;gBACrG,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;gBACjF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,MAAM,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBACjE,MAAM,CAAC,SAAS,CAAC,kBAAkB,QAAQ,CAAC,QAAQ,KAAK,CAAC,CAAC;wBAC3D,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;4BACnC,MAAM,CAAC,SAAS,CAAC,qBAAqB,WAAW,IAAI,CAAC,CAAC;wBACxD,CAAC,CAAC,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,SAAS,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC;gBAC1D,CAAC;YACF,CAAC,CAAC,CAAC;YACH,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACjD,MAAM,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;gBACrE,MAAM,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;gBAC7D,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC/C,MAAM,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;oBACrD,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;gBACjC,MAAM,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC;YAC9E,CAAC;QACF,CAAC;QAED,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,KAAK,QAAQ,IAAI,YAAY,CAAC,kBAAkB,KAAK,KAAK,CAAC;QACzG,IAAI,YAAY,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzC,IAAI,YAAY,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;gBACvC,MAAM,CAAC,SAAS,CAAC,mDAAmD,WAAW,GAAG,CAAC,CAAC;gBACpF,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBACvD,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,0CAA0C,cAAc,UAAU,CAAC,CAAC;YACrG,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,SAAS,CAAC,mEAAmE,CAAC,CAAC;gBACtF,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBACvD,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,0CAA0C,cAAc,0BAA0B,CAAC,CAAC;YACrH,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,SAAS,CAAC,8BAA8B,WAAW,GAAG,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,0BAA0B,cAAc,GAAG,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,YAAY,CAAC,SAAS,KAAK,QAAQ,IAAI,YAAY,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;YACtF,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACF,CAAC,CAAC,CAAC;IACH,IAAI,YAAY,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,IAAI,YAAY,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,sBAAsB,cAAc,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC1E,MAAM,CAAC,KAAK,CAAC,iBAAiB,cAAc,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC5D,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;wBAC/C,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,UAAU,KAAK,IAAI,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC1G,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,KAAK,CAAC,sBAAsB,cAAc,wBAAwB,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC7G,MAAM,CAAC,SAAS,CAAC,wBAAwB,cAAc,GAAG,CAAC,CAAC;gBAC5D,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;gBACtC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBACxC,MAAM,CAAC,KAAK,CAAC,gCAAgC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBACxE,MAAM,CAAC,SAAS,CAAC,UAAU,OAAO,CAAC,IAAI,sBAAsB,CAAC,CAAC;oBAChE,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAClF,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC/C,MAAM,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC/B,MAAM,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,sDAAsD,aAAa,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACjG,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;oBACvE,MAAM,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;oBAC7D,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAChD,MAAM,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;oBAC/C,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,CAAC,4BAA4B,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACpE,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;oBAC3C,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;wBAC3D,MAAM,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;oBAC/C,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACnB,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACvD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;gBACjC,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;gBACvC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,sCAAsC,aAAa,sCAAsC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAClH,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;gBAC1E,MAAM,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;gBACnD,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3C,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBACnD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;4BAClC,MAAM,CAAC,SAAS,CAAC,oDAAoD,CAAC,CAAC;4BACvE,MAAM,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;4BACpD,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;wBAC5C,CAAC,CAAC,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACJ,CAAC;gBACD,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACtD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAClC,MAAM,CAAC,SAAS,CAAC,2CAA2C,CAAC,CAAC;wBAC9D,MAAM,CAAC,SAAS,CAAC,yDAAyD,CAAC,CAAC;wBAC5E,MAAM,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;oBAC1D,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACzE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAClC,MAAM,CAAC,SAAS,CAAC,2CAA2C,CAAC,CAAC;wBAC9D,MAAM,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAC;wBAC/E,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;oBAC5C,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACvE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAClC,MAAM,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;wBAC5D,MAAM,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;wBACpD,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;oBAC5C,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,kBAAkB,GAAG,MAAA,YAAY,CAAC,cAAc,0CAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7F,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,eAAe,eAAe,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5D,IAAI,YAAY,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;gBACvC,MAAM,CAAC,SAAS,CAAC,WAAW,kBAAkB,GAAG,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,kCAAkC,eAAe,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACvF,IAAI,YAAY,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;gBACvC,MAAM,CAAC,SAAS,CACf,uHAAuH,CACvH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,SAAS,CACf,gIAAgI,CAChI,CAAC;YACH,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,CAAC,gBAAgB,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAC1D,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9B,MAAM,YAAY,GAAG,IAAA,mCAAoB,EAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1E,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,eAAe,YAAY,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACzD,MAAM,gBAAgB,GAAG,IAAA,iCAAkB,EAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChF,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBACxC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC5B,MAAM,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBAClE,CAAC;oBACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC/B,MAAM,kBAAkB,GAAG,IAAA,mCAAoB,EAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC/E,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;wBAClD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,gBAAgB,KAAK,kBAAkB,GAAG,CAAC,CAAC;oBAC9E,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACrC,MAAM,YAAY,GAAG,IAAA,mCAAoB,EAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1E,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACjB,OAAO;gBACP,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,CAAC,yBAAyB,aAAa,UAAU,iBAAiB,cAAc,YAAY,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACzH,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,MAAM,CAAC,SAAS,CAAC,8BAA8B,aAAa,cAAc,MAAM,IAAI,CAAC,CAAC;oBACtF,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBACxD,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;oBAChC,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,SAAS,CAAC,iBAAiB,YAAY,iBAAiB,CAAC,CAAC;gBAClE,CAAC,CAAC,CAAC;YACJ,CAAC;YACD,MAAM,mBAAmB,GAAG,UAAU,YAAY,EAAE,CAAC;YACrD,MAAM,eAAe,GAAG,QAAQ,YAAY,EAAE,CAAC;YAC/C,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,YAAY,mBAAmB,kBAAkB,cAAc,QAAQ,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAChH,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;gBACnE,MAAM,CAAC,SAAS,CAAC,sDAAsD,QAAQ,qBAAqB,QAAQ,IAAI,CAAC,CAAC;gBAClH,MAAM,CAAC,SAAS,CAAC,yCAAyC,eAAe,MAAM,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,YAAY,eAAe,kBAAkB,cAAc,QAAQ,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC1G,MAAM,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;gBACtD,MAAM,CAAC,KAAK,CAAC,iBAAiB,YAAY,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC3D,MAAM,gBAAgB,GAAG,IAAA,iCAAkB,EAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAChF,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBACxC,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;wBAChE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;4BACzD,MAAM,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC;wBACpF,CAAC;wBACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BAC/B,MAAM,kBAAkB,GAAG,IAAA,mCAAoB,EAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;4BAC7E,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;4BAC5C,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,YAAY,kBAAkB,iBAAiB,WAAW,GAAG,SAAS,EAAE,CAAC,CAAC;wBACzG,CAAC;oBACF,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,8FAA8F,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACvH,MAAM;iBACJ,KAAK,CAAC,oDAAoD,CAAC;iBAC3D,WAAW,CAAC,GAAG,EAAE;gBACjB,MAAM,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;gBAChE,MAAM,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAC;gBACxE,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACjC,CAAC,CAAC;iBACD,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,wBAAwB,CAChC,MAAuB,EACvB,MAAc,EACd,QAA4B,EAC5B,OAA4B,EAC5B,cAAc,GAAG,KAAK;;IAEtB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,iBAAiB,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClH,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,gBAAgB,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,eAAe,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,KAAK,UAAU,CAAC,CAAC;IAClG,MAAM,eAAe,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC;IACjH,MAAM,iBAAiB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA,MAAA,QAAQ,CAAC,eAAe,0CAAE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,OAAO,YAAY,CAAC,KAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClI,MAAM,aAAa,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,eAAe,EAAE,GAAG,eAAe,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAC1G,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IACnF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,aAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACtE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,eAAe,QAAQ,CAAC,QAAQ,KAAK,CAAC,CAAC;YAC7D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACtC,MAAM,CAAC,SAAS,CAAC,qBAAqB,UAAU,IAAI,CAAC,CAAC;YACvD,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACP,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,eAAe,QAAQ,CAAC,QAAQ,KAAK,CAAC,CAAC;QACjE,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,qBAAqB,UAAU,IAAI,CAAC,CAAC;QACvD,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACvC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1C,OAAO,iBAAiB,CAAC;IAC1B,CAAC;IACD,OAAO,gBAAgB,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,KAAgB;IACtC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,UAAU,KAAK,CAAC,IAAI,+BAA+B,KAAK,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IACD,OAAO,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAgB,cAAc,CAC7B,MAAuB,EACvB,MAA2B,EAC3B,QAAgB,EAChB,UAAmB,EACnB,UAAmB;IAEnB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC;IAC/D,IAAI,cAAc,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACpD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBACjC,uCAAuC;gBACvC,IAAI,UAAU,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnC,iCAAiC;oBACjC,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,CAAC,UAAU,EAAE,CAAC;oBACxB,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtD,CAAC;YACF,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,EAAE,CAAC;gBAChB,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;YAChC,CAAC;QACF,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,OAA0B,EAAE,YAAqB;IACtE,IAAI,YAAY,EAAE,CAAC;QAClB,0BAA0B;QAC1B,OAAO,GAAG,OAAO,CAAC,IAAI,MAAM,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3F,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AACzE,CAAC;AAED,SAAgB,oBAAoB,CAAC,SAAoB;;IACxD,MAAM,mBAAmB,GAAG,IAAA,iCAAkB,EAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAsB;YACjC,IAAI,EAAE,mBAAmB,CAAC,WAAW,CAAC;YACtC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,IAAiB,CAAC;YAC5C,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;SAC1C,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrD,MAAM,SAAS,GAAc;YAC5B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;SACrC,CAAC;QACF,OAAO,SAAS,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,0BAA0B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACtE,MAAM,sBAAsB,GAAG,IAAA,iCAAkB,EAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;QACvD,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzC,MAAM,MAAM,GAA0B;YACrC,IAAI,EAAE,sBAAsB,CAAC,UAAU,CAAC;YACxC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,UAAuB,CAAC,GAAG,WAAW;YAChE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC1C,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB,OAAO,EAAE,KAAK;SACd,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,iCAAkB,EAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzG,MAAM,IAAI,GAAG,MAAA,SAAS,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;QACnD,MAAM,MAAM,GAA0B;YACrC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;YACjC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,UAAuB,CAAC;YAClD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC1C,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB,OAAO,EAAE,KAAK;SACd,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAiB;QAC5B,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;QAChD,OAAO;QACP,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,cAAc;QACd,UAAU;QACV,IAAI;KACJ,CAAC;IACF,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAChC,MAAM,gBAAgB,GAAG,IAAA,+CAAwB,EAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACjG,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC5C,CAAC;IACD,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;QAC/B,MAAM,sBAAsB,GAAG,SAAS,CAAC,eAAe,CAAC;QACzD,MAAM,CAAC,YAAY,GAAG,sBAAsB,CAAC;IAC9C,CAAC;IACD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACzB,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAgB,0BAA0B,CAAC,UAA0B;IACpE,MAAM,YAAY,GAA8B,IAAI,GAAG,EAAE,CAAC;IAC1D,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACtB,wFAAwF;YACxF,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC7B,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;YACD,gBAAgB;QACjB,CAAC;aAAM,CAAC;YACP,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,CAAC;AAGD,SAAS,cAAc,CAAC,GAAW;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC;IACrB,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAID,SAAS,aAAa,CAAC,UAA2C;IACjE,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,KAAK,GAAI,EAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB;AACnD,CAAC;AAED,SAAgB,eAAe,CAAC,OAA4B;IAC3D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,aAAa,CAAC,OAA4B;IACzD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAW;IAC9C,MAAM,MAAM,GAAG,+BAA+B,CAAC;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,qCAAqC,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC;AACf,CAAC;AAQD,SAAsB,yBAAyB;yDAC9C,MAAoB,EACpB,SAAiB,EACjB,UAAkB,EAClB,IAAI,GAAG,KAAK;QAEZ,MAAM,eAAe,GAAG,MAAM,IAAA,yBAAQ,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE3D,IAAI,IAAA,eAAM,EAAC,eAAe,CAAC,EAAE,CAAC;YAC7B,OAAO,eAAe,CAAC;QACxB,CAAC;QACD,MAAM,YAAY,GAAG,oBAAoB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,sBAAsB,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACxE,OAAO,IAAA,cAAK,EAAC,SAAS,CAAC,CAAC;IACzB,CAAC;CAAA;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,KAAa;IACpD,OAAO,MAAM,GAAG,CAAC,IAAI,KAAK,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC"}