circle-ir 3.21.0 → 3.22.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.
@@ -0,0 +1,615 @@
1
+ /**
2
+ * Go Language Plugin
3
+ *
4
+ * Provides Go-specific AST handling, taint patterns, and framework detection.
5
+ */
6
+ import { BaseLanguagePlugin } from './base.js';
7
+ /**
8
+ * Go language plugin implementation.
9
+ */
10
+ export class GoPlugin extends BaseLanguagePlugin {
11
+ id = 'go';
12
+ name = 'Go';
13
+ extensions = ['.go'];
14
+ wasmPath = 'tree-sitter-go.wasm';
15
+ nodeTypes = {
16
+ // Type declarations
17
+ classDeclaration: ['type_declaration'],
18
+ interfaceDeclaration: ['type_declaration'],
19
+ enumDeclaration: [], // Go has no enums (uses iota constants)
20
+ functionDeclaration: ['function_declaration'],
21
+ methodDeclaration: ['method_declaration'],
22
+ // Expressions
23
+ methodCall: ['call_expression'],
24
+ functionCall: ['call_expression'],
25
+ assignment: ['short_var_declaration', 'assignment_statement', 'var_declaration'],
26
+ variableDeclaration: ['short_var_declaration', 'var_declaration'],
27
+ // Parameters and arguments
28
+ parameter: ['parameter_declaration'],
29
+ argument: ['argument_list'],
30
+ // Annotations/decorators
31
+ annotation: [], // Go has no annotations
32
+ decorator: [], // Go has no decorators
33
+ // Imports
34
+ importStatement: ['import_declaration'],
35
+ // Control flow
36
+ ifStatement: ['if_statement'],
37
+ forStatement: ['for_statement'],
38
+ whileStatement: [], // Go uses for with condition
39
+ tryStatement: [], // Go uses defer/recover
40
+ returnStatement: ['return_statement'],
41
+ };
42
+ /**
43
+ * Detect Go web frameworks from imports.
44
+ */
45
+ detectFramework(context) {
46
+ const indicators = [];
47
+ let framework;
48
+ let confidence = 0;
49
+ for (const imp of context.imports) {
50
+ const path = imp.from_package || imp.imported_name;
51
+ // Gin
52
+ if (path.includes('gin-gonic/gin')) {
53
+ framework = 'gin';
54
+ confidence = Math.max(confidence, 0.95);
55
+ indicators.push(`import: ${path}`);
56
+ }
57
+ // Echo
58
+ if (path.includes('labstack/echo')) {
59
+ framework = 'echo';
60
+ confidence = Math.max(confidence, 0.95);
61
+ indicators.push(`import: ${path}`);
62
+ }
63
+ // Fiber
64
+ if (path.includes('gofiber/fiber')) {
65
+ framework = 'fiber';
66
+ confidence = Math.max(confidence, 0.95);
67
+ indicators.push(`import: ${path}`);
68
+ }
69
+ // Chi
70
+ if (path.includes('go-chi/chi')) {
71
+ framework = 'chi';
72
+ confidence = Math.max(confidence, 0.9);
73
+ indicators.push(`import: ${path}`);
74
+ }
75
+ // GORM
76
+ if (path.includes('gorm.io/gorm')) {
77
+ indicators.push(`import: ${path}`);
78
+ }
79
+ // net/http (stdlib)
80
+ if (path === 'net/http') {
81
+ framework = framework || 'net/http';
82
+ confidence = Math.max(confidence, 0.8);
83
+ indicators.push(`import: ${path}`);
84
+ }
85
+ }
86
+ if (framework) {
87
+ return { name: framework, confidence, indicators };
88
+ }
89
+ return undefined;
90
+ }
91
+ /**
92
+ * Go taint source patterns.
93
+ */
94
+ getBuiltinSources() {
95
+ return [
96
+ // net/http request methods
97
+ {
98
+ method: 'FormValue',
99
+ class: 'Request',
100
+ type: 'http_param',
101
+ severity: 'high',
102
+ confidence: 0.95,
103
+ returnTainted: true,
104
+ },
105
+ {
106
+ method: 'PostFormValue',
107
+ class: 'Request',
108
+ type: 'http_param',
109
+ severity: 'high',
110
+ confidence: 0.95,
111
+ returnTainted: true,
112
+ },
113
+ {
114
+ method: 'Query',
115
+ class: 'URL',
116
+ type: 'http_param',
117
+ severity: 'high',
118
+ confidence: 0.95,
119
+ returnTainted: true,
120
+ },
121
+ {
122
+ method: 'Get',
123
+ class: 'Header',
124
+ type: 'http_header',
125
+ severity: 'high',
126
+ confidence: 0.9,
127
+ returnTainted: true,
128
+ },
129
+ {
130
+ method: 'Cookie',
131
+ class: 'Request',
132
+ type: 'http_cookie',
133
+ severity: 'high',
134
+ confidence: 0.9,
135
+ returnTainted: true,
136
+ },
137
+ // Gin framework
138
+ {
139
+ method: 'Query',
140
+ class: 'Context',
141
+ type: 'http_param',
142
+ severity: 'high',
143
+ confidence: 0.95,
144
+ returnTainted: true,
145
+ },
146
+ {
147
+ method: 'Param',
148
+ class: 'Context',
149
+ type: 'http_path',
150
+ severity: 'high',
151
+ confidence: 0.95,
152
+ returnTainted: true,
153
+ },
154
+ {
155
+ method: 'PostForm',
156
+ class: 'Context',
157
+ type: 'http_param',
158
+ severity: 'high',
159
+ confidence: 0.95,
160
+ returnTainted: true,
161
+ },
162
+ {
163
+ method: 'GetRawData',
164
+ class: 'Context',
165
+ type: 'http_body',
166
+ severity: 'high',
167
+ confidence: 0.95,
168
+ returnTainted: true,
169
+ },
170
+ // Standard library I/O
171
+ {
172
+ method: 'Getenv',
173
+ class: 'os',
174
+ type: 'env_var',
175
+ severity: 'medium',
176
+ confidence: 0.85,
177
+ returnTainted: true,
178
+ },
179
+ {
180
+ method: 'ReadAll',
181
+ class: 'io',
182
+ type: 'io_input',
183
+ severity: 'medium',
184
+ confidence: 0.8,
185
+ returnTainted: true,
186
+ },
187
+ {
188
+ method: 'ReadFile',
189
+ class: 'os',
190
+ type: 'file_input',
191
+ severity: 'medium',
192
+ confidence: 0.8,
193
+ returnTainted: true,
194
+ },
195
+ {
196
+ method: 'Text',
197
+ class: 'Scanner',
198
+ type: 'io_input',
199
+ severity: 'medium',
200
+ confidence: 0.8,
201
+ returnTainted: true,
202
+ },
203
+ ];
204
+ }
205
+ /**
206
+ * Go taint sink patterns.
207
+ */
208
+ getBuiltinSinks() {
209
+ return [
210
+ // SQL Injection
211
+ {
212
+ method: 'Query',
213
+ class: 'DB',
214
+ type: 'sql_injection',
215
+ cwe: 'CWE-89',
216
+ severity: 'critical',
217
+ argPositions: [0],
218
+ },
219
+ {
220
+ method: 'QueryRow',
221
+ class: 'DB',
222
+ type: 'sql_injection',
223
+ cwe: 'CWE-89',
224
+ severity: 'critical',
225
+ argPositions: [0],
226
+ },
227
+ {
228
+ method: 'Exec',
229
+ class: 'DB',
230
+ type: 'sql_injection',
231
+ cwe: 'CWE-89',
232
+ severity: 'critical',
233
+ argPositions: [0],
234
+ },
235
+ {
236
+ method: 'Query',
237
+ class: 'Tx',
238
+ type: 'sql_injection',
239
+ cwe: 'CWE-89',
240
+ severity: 'critical',
241
+ argPositions: [0],
242
+ },
243
+ // Command Injection
244
+ {
245
+ method: 'Command',
246
+ class: 'exec',
247
+ type: 'command_injection',
248
+ cwe: 'CWE-78',
249
+ severity: 'critical',
250
+ argPositions: [0],
251
+ },
252
+ {
253
+ method: 'CommandContext',
254
+ class: 'exec',
255
+ type: 'command_injection',
256
+ cwe: 'CWE-78',
257
+ severity: 'critical',
258
+ argPositions: [1],
259
+ },
260
+ // Path Traversal
261
+ {
262
+ method: 'Open',
263
+ class: 'os',
264
+ type: 'path_traversal',
265
+ cwe: 'CWE-22',
266
+ severity: 'high',
267
+ argPositions: [0],
268
+ },
269
+ {
270
+ method: 'ReadFile',
271
+ class: 'os',
272
+ type: 'path_traversal',
273
+ cwe: 'CWE-22',
274
+ severity: 'high',
275
+ argPositions: [0],
276
+ },
277
+ {
278
+ method: 'WriteFile',
279
+ class: 'os',
280
+ type: 'path_traversal',
281
+ cwe: 'CWE-22',
282
+ severity: 'high',
283
+ argPositions: [0],
284
+ },
285
+ // XSS (writing to http.ResponseWriter without escaping)
286
+ {
287
+ method: 'Fprintf',
288
+ class: 'fmt',
289
+ type: 'xss',
290
+ cwe: 'CWE-79',
291
+ severity: 'high',
292
+ argPositions: [1],
293
+ },
294
+ {
295
+ method: 'Write',
296
+ class: 'ResponseWriter',
297
+ type: 'xss',
298
+ cwe: 'CWE-79',
299
+ severity: 'high',
300
+ argPositions: [0],
301
+ },
302
+ // SSRF
303
+ {
304
+ method: 'Get',
305
+ class: 'http',
306
+ type: 'ssrf',
307
+ cwe: 'CWE-918',
308
+ severity: 'high',
309
+ argPositions: [0],
310
+ },
311
+ {
312
+ method: 'Post',
313
+ class: 'http',
314
+ type: 'ssrf',
315
+ cwe: 'CWE-918',
316
+ severity: 'high',
317
+ argPositions: [0, 2],
318
+ },
319
+ // Deserialization
320
+ {
321
+ method: 'Unmarshal',
322
+ class: 'json',
323
+ type: 'deserialization',
324
+ cwe: 'CWE-502',
325
+ severity: 'medium',
326
+ argPositions: [0],
327
+ },
328
+ {
329
+ method: 'Decode',
330
+ class: 'Decoder',
331
+ type: 'deserialization',
332
+ cwe: 'CWE-502',
333
+ severity: 'medium',
334
+ argPositions: [0],
335
+ },
336
+ ];
337
+ }
338
+ /**
339
+ * Get receiver type from a Go call expression.
340
+ */
341
+ getReceiverType(node, _context) {
342
+ if (node.type !== 'call_expression')
343
+ return undefined;
344
+ const func = node.childForFieldName('function');
345
+ if (!func)
346
+ return undefined;
347
+ // selector_expression: obj.Method() or pkg.Function()
348
+ if (func.type === 'selector_expression') {
349
+ const operand = func.childForFieldName('operand');
350
+ if (operand) {
351
+ return operand.text;
352
+ }
353
+ }
354
+ return undefined;
355
+ }
356
+ /**
357
+ * Check if node is a Go string literal.
358
+ */
359
+ isStringLiteral(node) {
360
+ return node.type === 'interpreted_string_literal' ||
361
+ node.type === 'raw_string_literal';
362
+ }
363
+ /**
364
+ * Get string value from Go string literal.
365
+ */
366
+ getStringValue(node) {
367
+ if (!this.isStringLiteral(node))
368
+ return undefined;
369
+ const text = node.text;
370
+ // Handle raw strings `...`
371
+ if (text.startsWith('`') && text.endsWith('`')) {
372
+ return text.slice(1, -1);
373
+ }
374
+ // Handle interpreted strings "..."
375
+ if (text.startsWith('"') && text.endsWith('"')) {
376
+ return text.slice(1, -1);
377
+ }
378
+ return text;
379
+ }
380
+ /**
381
+ * Extract type information from Go source.
382
+ */
383
+ extractTypes(context) {
384
+ const types = [];
385
+ const root = context.tree.rootNode;
386
+ // Find type_declaration nodes (type Foo struct {...} or type Bar interface {...})
387
+ const typeDecls = this.findNodes(root, 'type_declaration');
388
+ for (const decl of typeDecls) {
389
+ // type_declaration contains type_spec children
390
+ for (let i = 0; i < decl.childCount; i++) {
391
+ const spec = decl.child(i);
392
+ if (!spec || spec.type !== 'type_spec')
393
+ continue;
394
+ const nameNode = spec.childForFieldName('name');
395
+ const typeNode = spec.childForFieldName('type');
396
+ if (!nameNode || !typeNode)
397
+ continue;
398
+ const name = nameNode.text;
399
+ const isInterface = typeNode.type === 'interface_type';
400
+ const isStruct = typeNode.type === 'struct_type';
401
+ if (isStruct || isInterface) {
402
+ const fields = [];
403
+ const methods = [];
404
+ if (isStruct) {
405
+ // Extract struct fields
406
+ const fieldList = typeNode.childForFieldName('fields') ??
407
+ this.findChildByType(typeNode, 'field_declaration_list');
408
+ if (fieldList) {
409
+ for (let j = 0; j < fieldList.childCount; j++) {
410
+ const field = fieldList.child(j);
411
+ if (!field || field.type !== 'field_declaration')
412
+ continue;
413
+ const fieldName = field.childForFieldName('name');
414
+ const fieldType = field.childForFieldName('type');
415
+ if (fieldName) {
416
+ fields.push({
417
+ name: fieldName.text,
418
+ type: fieldType?.text || null,
419
+ modifiers: [],
420
+ annotations: [],
421
+ });
422
+ }
423
+ }
424
+ }
425
+ }
426
+ // Find methods declared for this type (method_declaration with matching receiver)
427
+ const methodDecls = this.findNodes(root, 'method_declaration');
428
+ for (const md of methodDecls) {
429
+ const receiver = md.childForFieldName('receiver');
430
+ if (!receiver)
431
+ continue;
432
+ const receiverText = receiver.text;
433
+ // Match (t *TypeName) or (t TypeName)
434
+ if (receiverText.includes(name)) {
435
+ const methodName = md.childForFieldName('name');
436
+ const params = md.childForFieldName('parameters');
437
+ const result = md.childForFieldName('result');
438
+ if (methodName) {
439
+ methods.push({
440
+ name: methodName.text,
441
+ return_type: result?.text || null,
442
+ parameters: params ? this.extractGoParams(params) : [],
443
+ annotations: [],
444
+ modifiers: [],
445
+ start_line: md.startPosition.row + 1,
446
+ end_line: md.endPosition.row + 1,
447
+ });
448
+ }
449
+ }
450
+ }
451
+ types.push({
452
+ name,
453
+ kind: isInterface ? 'interface' : 'class',
454
+ package: context.package || null,
455
+ extends: null,
456
+ implements: [],
457
+ annotations: [],
458
+ methods,
459
+ fields,
460
+ start_line: decl.startPosition.row + 1,
461
+ end_line: decl.endPosition.row + 1,
462
+ });
463
+ }
464
+ }
465
+ }
466
+ return types;
467
+ }
468
+ /**
469
+ * Extract call information from Go source.
470
+ */
471
+ extractCalls(context) {
472
+ const calls = [];
473
+ const root = context.tree.rootNode;
474
+ const callExprs = this.findNodes(root, 'call_expression');
475
+ for (const call of callExprs) {
476
+ const func = call.childForFieldName('function');
477
+ if (!func)
478
+ continue;
479
+ let methodName;
480
+ let receiver = null;
481
+ if (func.type === 'selector_expression') {
482
+ // pkg.Function() or obj.Method()
483
+ const operand = func.childForFieldName('operand');
484
+ const field = func.childForFieldName('field');
485
+ receiver = operand?.text || null;
486
+ methodName = field?.text || func.text;
487
+ }
488
+ else {
489
+ // Plain function call: funcName()
490
+ methodName = func.text;
491
+ }
492
+ const args = call.childForFieldName('arguments');
493
+ const argInfos = [];
494
+ let argPos = 0;
495
+ if (args) {
496
+ for (let i = 0; i < args.childCount; i++) {
497
+ const arg = args.child(i);
498
+ if (arg && arg.type !== '(' && arg.type !== ')' && arg.type !== ',') {
499
+ argInfos.push({
500
+ position: argPos++,
501
+ expression: arg.text,
502
+ variable: arg.type === 'identifier' ? arg.text : null,
503
+ literal: (arg.type === 'interpreted_string_literal' || arg.type === 'int_literal') ? arg.text : null,
504
+ });
505
+ }
506
+ }
507
+ }
508
+ calls.push({
509
+ method_name: methodName,
510
+ receiver,
511
+ arguments: argInfos,
512
+ location: {
513
+ line: call.startPosition.row + 1,
514
+ column: call.startPosition.column,
515
+ },
516
+ });
517
+ }
518
+ return calls;
519
+ }
520
+ /**
521
+ * Extract import information from Go source.
522
+ */
523
+ extractImports(context) {
524
+ const imports = [];
525
+ const root = context.tree.rootNode;
526
+ const importDecls = this.findNodes(root, 'import_declaration');
527
+ for (const decl of importDecls) {
528
+ // Single import: import "fmt"
529
+ const singleSpec = this.findChildByType(decl, 'import_spec');
530
+ if (singleSpec) {
531
+ const parsed = this.parseImportSpec(singleSpec);
532
+ if (parsed)
533
+ imports.push(parsed);
534
+ continue;
535
+ }
536
+ // Grouped imports: import ( "fmt"; "net/http" )
537
+ const specList = this.findChildByType(decl, 'import_spec_list');
538
+ if (specList) {
539
+ for (let i = 0; i < specList.childCount; i++) {
540
+ const spec = specList.child(i);
541
+ if (!spec || spec.type !== 'import_spec')
542
+ continue;
543
+ const parsed = this.parseImportSpec(spec);
544
+ if (parsed)
545
+ imports.push(parsed);
546
+ }
547
+ }
548
+ }
549
+ return imports;
550
+ }
551
+ /**
552
+ * Extract package name from Go source.
553
+ */
554
+ extractPackage(context) {
555
+ const root = context.tree.rootNode;
556
+ const pkgClause = this.findChildByType(root, 'package_clause');
557
+ if (!pkgClause)
558
+ return undefined;
559
+ // package_clause has a child with the package name
560
+ for (let i = 0; i < pkgClause.childCount; i++) {
561
+ const child = pkgClause.child(i);
562
+ if (child && child.type === 'package_identifier') {
563
+ return child.text;
564
+ }
565
+ }
566
+ return undefined;
567
+ }
568
+ // ── Private helpers ─────────────────────────────────────────────────────
569
+ parseImportSpec(spec) {
570
+ // import_spec: optional alias + path (interpreted_string_literal)
571
+ let alias = null;
572
+ let path;
573
+ for (let i = 0; i < spec.childCount; i++) {
574
+ const child = spec.child(i);
575
+ if (!child)
576
+ continue;
577
+ if (child.type === 'package_identifier' || child.type === 'blank_identifier' || child.type === 'dot') {
578
+ alias = child.text;
579
+ }
580
+ if (child.type === 'interpreted_string_literal') {
581
+ path = child.text.slice(1, -1); // Remove quotes
582
+ }
583
+ }
584
+ if (!path)
585
+ return null;
586
+ // Extract short name from path (e.g., "net/http" → "http")
587
+ const shortName = alias || path.split('/').pop() || path;
588
+ return {
589
+ imported_name: shortName,
590
+ from_package: path,
591
+ alias,
592
+ is_wildcard: alias === '.',
593
+ line_number: spec.startPosition.row + 1,
594
+ };
595
+ }
596
+ extractGoParams(params) {
597
+ const result = [];
598
+ for (let i = 0; i < params.childCount; i++) {
599
+ const param = params.child(i);
600
+ if (!param || param.type !== 'parameter_declaration')
601
+ continue;
602
+ const nameNode = param.childForFieldName('name');
603
+ const typeNode = param.childForFieldName('type');
604
+ if (nameNode) {
605
+ result.push({
606
+ name: nameNode.text,
607
+ type: typeNode?.text || null,
608
+ annotations: [],
609
+ });
610
+ }
611
+ }
612
+ return result;
613
+ }
614
+ }
615
+ //# sourceMappingURL=go.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/languages/plugins/go.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export { PythonPlugin } from './python.js';
9
9
  export { RustPlugin } from './rust.js';
10
10
  export { BashPlugin } from './bash.js';
11
11
  export { HtmlPlugin } from './html.js';
12
+ export { GoPlugin } from './go.js';
12
13
  /**
13
14
  * Register all built-in language plugins with the global registry.
14
15
  * Call this during analyzer initialization.
@@ -9,6 +9,7 @@ export { PythonPlugin } from './python.js';
9
9
  export { RustPlugin } from './rust.js';
10
10
  export { BashPlugin } from './bash.js';
11
11
  export { HtmlPlugin } from './html.js';
12
+ export { GoPlugin } from './go.js';
12
13
  import { registerLanguage } from '../registry.js';
13
14
  import { JavaPlugin } from './java.js';
14
15
  import { JavaScriptPlugin } from './javascript.js';
@@ -16,6 +17,7 @@ import { PythonPlugin } from './python.js';
16
17
  import { RustPlugin } from './rust.js';
17
18
  import { BashPlugin } from './bash.js';
18
19
  import { HtmlPlugin } from './html.js';
20
+ import { GoPlugin } from './go.js';
19
21
  /**
20
22
  * Register all built-in language plugins with the global registry.
21
23
  * Call this during analyzer initialization.
@@ -27,5 +29,6 @@ export function registerBuiltinPlugins() {
27
29
  registerLanguage(new RustPlugin());
28
30
  registerLanguage(new BashPlugin());
29
31
  registerLanguage(new HtmlPlugin());
32
+ registerLanguage(new GoPlugin());
30
33
  }
31
34
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACnC,gBAAgB,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;IACzC,gBAAgB,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IACrC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACnC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACnC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACnC,gBAAgB,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;IACzC,gBAAgB,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IACrC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACnC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACnC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACnC,gBAAgB,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;AACnC,CAAC"}