couchloop-eq-mcp 1.0.4 → 1.0.5

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 (282) hide show
  1. package/README.md +24 -11
  2. package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
  3. package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
  4. package/dist/developer/analyzers/bloat-detector.js +483 -0
  5. package/dist/developer/analyzers/bloat-detector.js.map +1 -0
  6. package/dist/developer/backup/auto-backup.d.ts +96 -0
  7. package/dist/developer/backup/auto-backup.d.ts.map +1 -0
  8. package/dist/developer/backup/auto-backup.js +346 -0
  9. package/dist/developer/backup/auto-backup.js.map +1 -0
  10. package/dist/developer/blockers/package-blocker.d.ts +33 -0
  11. package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
  12. package/dist/developer/blockers/package-blocker.js +224 -0
  13. package/dist/developer/blockers/package-blocker.js.map +1 -0
  14. package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
  15. package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
  16. package/dist/developer/evaluators/ai-error-preventer.js +270 -0
  17. package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
  18. package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
  19. package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
  20. package/dist/developer/evaluators/build-context-detector.js +258 -0
  21. package/dist/developer/evaluators/build-context-detector.js.map +1 -0
  22. package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
  23. package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
  24. package/dist/developer/evaluators/package-evaluator.js +278 -0
  25. package/dist/developer/evaluators/package-evaluator.js.map +1 -0
  26. package/dist/developer/guards/file-guardian.d.ts +79 -0
  27. package/dist/developer/guards/file-guardian.d.ts.map +1 -0
  28. package/dist/developer/guards/file-guardian.js +309 -0
  29. package/dist/developer/guards/file-guardian.js.map +1 -0
  30. package/dist/developer/managers/context-manager.d.ts +61 -0
  31. package/dist/developer/managers/context-manager.d.ts.map +1 -0
  32. package/dist/developer/managers/context-manager.js +302 -0
  33. package/dist/developer/managers/context-manager.js.map +1 -0
  34. package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
  35. package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
  36. package/dist/developer/metrics/complexity-calculator.js +259 -0
  37. package/dist/developer/metrics/complexity-calculator.js.map +1 -0
  38. package/dist/developer/reports/review-summary.d.ts +49 -0
  39. package/dist/developer/reports/review-summary.d.ts.map +1 -0
  40. package/dist/developer/reports/review-summary.js +249 -0
  41. package/dist/developer/reports/review-summary.js.map +1 -0
  42. package/dist/developer/scanners/review-assistant.d.ts +41 -0
  43. package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
  44. package/dist/developer/scanners/review-assistant.js +374 -0
  45. package/dist/developer/scanners/review-assistant.js.map +1 -0
  46. package/dist/developer/scanners/secret-scanner.d.ts +66 -0
  47. package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
  48. package/dist/developer/scanners/secret-scanner.js +287 -0
  49. package/dist/developer/scanners/secret-scanner.js.map +1 -0
  50. package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
  51. package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
  52. package/dist/developer/scanners/sql-injection-detector.js +174 -0
  53. package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
  54. package/dist/developer/scanners/xss-detector.d.ts +60 -0
  55. package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
  56. package/dist/developer/scanners/xss-detector.js +229 -0
  57. package/dist/developer/scanners/xss-detector.js.map +1 -0
  58. package/dist/developer/types/ai-errors.d.ts +34 -0
  59. package/dist/developer/types/ai-errors.d.ts.map +1 -0
  60. package/dist/developer/types/ai-errors.js +271 -0
  61. package/dist/developer/types/ai-errors.js.map +1 -0
  62. package/dist/developer/types/package.d.ts +32 -0
  63. package/dist/developer/types/package.d.ts.map +1 -0
  64. package/dist/developer/types/package.js +5 -0
  65. package/dist/developer/types/package.js.map +1 -0
  66. package/dist/developer/updaters/dependency-updater.d.ts +102 -0
  67. package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
  68. package/dist/developer/updaters/dependency-updater.js +472 -0
  69. package/dist/developer/updaters/dependency-updater.js.map +1 -0
  70. package/dist/developer/validators/cargo.d.ts +14 -0
  71. package/dist/developer/validators/cargo.d.ts.map +1 -0
  72. package/dist/developer/validators/cargo.js +132 -0
  73. package/dist/developer/validators/cargo.js.map +1 -0
  74. package/dist/developer/validators/gem.d.ts +14 -0
  75. package/dist/developer/validators/gem.d.ts.map +1 -0
  76. package/dist/developer/validators/gem.js +85 -0
  77. package/dist/developer/validators/gem.js.map +1 -0
  78. package/dist/developer/validators/go.d.ts +14 -0
  79. package/dist/developer/validators/go.d.ts.map +1 -0
  80. package/dist/developer/validators/go.js +138 -0
  81. package/dist/developer/validators/go.js.map +1 -0
  82. package/dist/developer/validators/maven.d.ts +14 -0
  83. package/dist/developer/validators/maven.d.ts.map +1 -0
  84. package/dist/developer/validators/maven.js +99 -0
  85. package/dist/developer/validators/maven.js.map +1 -0
  86. package/dist/developer/validators/npm.d.ts +14 -0
  87. package/dist/developer/validators/npm.d.ts.map +1 -0
  88. package/dist/developer/validators/npm.js +96 -0
  89. package/dist/developer/validators/npm.js.map +1 -0
  90. package/dist/developer/validators/nuget.d.ts +15 -0
  91. package/dist/developer/validators/nuget.d.ts.map +1 -0
  92. package/dist/developer/validators/nuget.js +107 -0
  93. package/dist/developer/validators/nuget.js.map +1 -0
  94. package/dist/developer/validators/pypi.d.ts +14 -0
  95. package/dist/developer/validators/pypi.d.ts.map +1 -0
  96. package/dist/developer/validators/pypi.js +118 -0
  97. package/dist/developer/validators/pypi.js.map +1 -0
  98. package/dist/developer/validators/registry-manager.d.ts +37 -0
  99. package/dist/developer/validators/registry-manager.d.ts.map +1 -0
  100. package/dist/developer/validators/registry-manager.js +89 -0
  101. package/dist/developer/validators/registry-manager.js.map +1 -0
  102. package/dist/developer/validators/version-checker.d.ts +145 -0
  103. package/dist/developer/validators/version-checker.d.ts.map +1 -0
  104. package/dist/developer/validators/version-checker.js +529 -0
  105. package/dist/developer/validators/version-checker.js.map +1 -0
  106. package/dist/server/index.js.map +1 -1
  107. package/dist/server/middleware/auth.d.ts +7 -9
  108. package/dist/server/middleware/auth.d.ts.map +1 -1
  109. package/dist/server/middleware/auth.js.map +1 -1
  110. package/dist/tools/check-versions.d.ts +100 -0
  111. package/dist/tools/check-versions.d.ts.map +1 -0
  112. package/dist/tools/check-versions.js +328 -0
  113. package/dist/tools/check-versions.js.map +1 -0
  114. package/dist/tools/detect-code-smell.d.ts +9 -0
  115. package/dist/tools/detect-code-smell.d.ts.map +1 -0
  116. package/dist/tools/detect-code-smell.js +231 -0
  117. package/dist/tools/detect-code-smell.js.map +1 -0
  118. package/dist/tools/index.d.ts +471 -0
  119. package/dist/tools/index.d.ts.map +1 -1
  120. package/dist/tools/index.js +178 -0
  121. package/dist/tools/index.js.map +1 -1
  122. package/dist/tools/journey.js +1 -1
  123. package/dist/tools/journey.js.map +1 -1
  124. package/dist/tools/pre-review-code.d.ts +71 -0
  125. package/dist/tools/pre-review-code.d.ts.map +1 -0
  126. package/dist/tools/pre-review-code.js +159 -0
  127. package/dist/tools/pre-review-code.js.map +1 -0
  128. package/dist/tools/preserve-context.d.ts +27 -0
  129. package/dist/tools/preserve-context.d.ts.map +1 -0
  130. package/dist/tools/preserve-context.js +98 -0
  131. package/dist/tools/preserve-context.js.map +1 -0
  132. package/dist/tools/protect-files.d.ts +224 -0
  133. package/dist/tools/protect-files.d.ts.map +1 -0
  134. package/dist/tools/protect-files.js +286 -0
  135. package/dist/tools/protect-files.js.map +1 -0
  136. package/dist/tools/scan-security.d.ts +38 -0
  137. package/dist/tools/scan-security.d.ts.map +1 -0
  138. package/dist/tools/scan-security.js +237 -0
  139. package/dist/tools/scan-security.js.map +1 -0
  140. package/dist/tools/validate_packages.d.ts +8 -0
  141. package/dist/tools/validate_packages.d.ts.map +1 -0
  142. package/dist/tools/validate_packages.js +159 -0
  143. package/dist/tools/validate_packages.js.map +1 -0
  144. package/dist/types/auth.d.ts.map +1 -1
  145. package/dist/types/auth.js +1 -2
  146. package/dist/types/auth.js.map +1 -1
  147. package/dist/types/context.d.ts +46 -0
  148. package/dist/types/context.d.ts.map +1 -0
  149. package/dist/types/context.js +17 -0
  150. package/dist/types/context.js.map +1 -0
  151. package/dist/types/file-protection.d.ts +50 -0
  152. package/dist/types/file-protection.d.ts.map +1 -0
  153. package/dist/types/file-protection.js +9 -0
  154. package/dist/types/file-protection.js.map +1 -0
  155. package/dist/utils/errorHandler.d.ts.map +1 -1
  156. package/dist/utils/errorHandler.js +2 -1
  157. package/dist/utils/errorHandler.js.map +1 -1
  158. package/package.json +23 -2
  159. package/dist/db/migrate.d.ts +0 -4
  160. package/dist/db/migrate.d.ts.map +0 -1
  161. package/dist/db/migrate.js +0 -34
  162. package/dist/db/migrate.js.map +0 -1
  163. package/dist/db/migrations/schema.d.ts +0 -1074
  164. package/dist/db/migrations/schema.d.ts.map +0 -1
  165. package/dist/db/migrations/schema.js +0 -160
  166. package/dist/db/migrations/schema.js.map +0 -1
  167. package/dist/db/schema.d.ts +0 -1576
  168. package/dist/db/schema.d.ts.map +0 -1
  169. package/dist/db/schema.js +0 -204
  170. package/dist/db/schema.js.map +0 -1
  171. package/dist/db/seed.d.ts +0 -4
  172. package/dist/db/seed.d.ts.map +0 -1
  173. package/dist/db/seed.js +0 -57
  174. package/dist/db/seed.js.map +0 -1
  175. package/dist/db/seedOAuth.d.ts +0 -4
  176. package/dist/db/seedOAuth.d.ts.map +0 -1
  177. package/dist/db/seedOAuth.js +0 -76
  178. package/dist/db/seedOAuth.js.map +0 -1
  179. package/dist/governance/config.d.ts +0 -66
  180. package/dist/governance/config.d.ts.map +0 -1
  181. package/dist/governance/config.js +0 -238
  182. package/dist/governance/config.js.map +0 -1
  183. package/dist/governance/detectors/hallucination.d.ts +0 -61
  184. package/dist/governance/detectors/hallucination.d.ts.map +0 -1
  185. package/dist/governance/detectors/hallucination.js +0 -338
  186. package/dist/governance/detectors/hallucination.js.map +0 -1
  187. package/dist/governance/detectors/inconsistency.d.ts +0 -99
  188. package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
  189. package/dist/governance/detectors/inconsistency.js +0 -548
  190. package/dist/governance/detectors/inconsistency.js.map +0 -1
  191. package/dist/governance/detectors/toneDrift.d.ts +0 -63
  192. package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
  193. package/dist/governance/detectors/toneDrift.js +0 -421
  194. package/dist/governance/detectors/toneDrift.js.map +0 -1
  195. package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
  196. package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
  197. package/dist/governance/detectors/unsafeReasoning.js +0 -473
  198. package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
  199. package/dist/governance/evaluationEngine.d.ts +0 -112
  200. package/dist/governance/evaluationEngine.d.ts.map +0 -1
  201. package/dist/governance/evaluationEngine.js +0 -265
  202. package/dist/governance/evaluationEngine.js.map +0 -1
  203. package/dist/governance/intervention.d.ts +0 -81
  204. package/dist/governance/intervention.d.ts.map +0 -1
  205. package/dist/governance/intervention.js +0 -405
  206. package/dist/governance/intervention.js.map +0 -1
  207. package/dist/server/oauth/anomalyDetection.d.ts +0 -146
  208. package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
  209. package/dist/server/oauth/anomalyDetection.js +0 -405
  210. package/dist/server/oauth/anomalyDetection.js.map +0 -1
  211. package/dist/server/oauth/authServer.d.ts +0 -61
  212. package/dist/server/oauth/authServer.d.ts.map +0 -1
  213. package/dist/server/oauth/authServer.js +0 -283
  214. package/dist/server/oauth/authServer.js.map +0 -1
  215. package/dist/server/oauth/dpop.d.ts +0 -135
  216. package/dist/server/oauth/dpop.d.ts.map +0 -1
  217. package/dist/server/oauth/dpop.js +0 -338
  218. package/dist/server/oauth/dpop.js.map +0 -1
  219. package/dist/server/oauth/gdpr/consent.d.ts +0 -173
  220. package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
  221. package/dist/server/oauth/gdpr/consent.js +0 -388
  222. package/dist/server/oauth/gdpr/consent.js.map +0 -1
  223. package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
  224. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
  225. package/dist/server/oauth/gdpr/dataPortability.js +0 -486
  226. package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
  227. package/dist/server/oauth/gdpr/index.d.ts +0 -103
  228. package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
  229. package/dist/server/oauth/gdpr/index.js +0 -273
  230. package/dist/server/oauth/gdpr/index.js.map +0 -1
  231. package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
  232. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
  233. package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
  234. package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
  235. package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
  236. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
  237. package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
  238. package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
  239. package/dist/server/oauth/pkce.d.ts +0 -61
  240. package/dist/server/oauth/pkce.d.ts.map +0 -1
  241. package/dist/server/oauth/pkce.js +0 -157
  242. package/dist/server/oauth/pkce.js.map +0 -1
  243. package/dist/server/oauth/providers/base.d.ts +0 -147
  244. package/dist/server/oauth/providers/base.d.ts.map +0 -1
  245. package/dist/server/oauth/providers/base.js +0 -312
  246. package/dist/server/oauth/providers/base.js.map +0 -1
  247. package/dist/server/oauth/providers/github.d.ts +0 -55
  248. package/dist/server/oauth/providers/github.d.ts.map +0 -1
  249. package/dist/server/oauth/providers/github.js +0 -225
  250. package/dist/server/oauth/providers/github.js.map +0 -1
  251. package/dist/server/oauth/providers/google.d.ts +0 -49
  252. package/dist/server/oauth/providers/google.d.ts.map +0 -1
  253. package/dist/server/oauth/providers/google.js +0 -153
  254. package/dist/server/oauth/providers/google.js.map +0 -1
  255. package/dist/server/oauth/providers/index.d.ts +0 -9
  256. package/dist/server/oauth/providers/index.d.ts.map +0 -1
  257. package/dist/server/oauth/providers/index.js +0 -24
  258. package/dist/server/oauth/providers/index.js.map +0 -1
  259. package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
  260. package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
  261. package/dist/server/oauth/refreshTokenRotation.js +0 -344
  262. package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
  263. package/dist/server/oauth/security.d.ts +0 -101
  264. package/dist/server/oauth/security.d.ts.map +0 -1
  265. package/dist/server/oauth/security.js +0 -268
  266. package/dist/server/oauth/security.js.map +0 -1
  267. package/dist/server/oauth/tokenEncryption.d.ts +0 -80
  268. package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
  269. package/dist/server/oauth/tokenEncryption.js +0 -218
  270. package/dist/server/oauth/tokenEncryption.js.map +0 -1
  271. package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
  272. package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
  273. package/dist/tools/sendMessage-complex-backup.js +0 -545
  274. package/dist/tools/sendMessage-complex-backup.js.map +0 -1
  275. package/dist/tools/sendMessage-revised.d.ts +0 -11
  276. package/dist/tools/sendMessage-revised.d.ts.map +0 -1
  277. package/dist/tools/sendMessage-revised.js +0 -429
  278. package/dist/tools/sendMessage-revised.js.map +0 -1
  279. package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
  280. package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
  281. package/dist/tools/sendMessage-truly-simple.js +0 -299
  282. package/dist/tools/sendMessage-truly-simple.js.map +0 -1
package/README.md CHANGED
@@ -24,17 +24,32 @@ CouchLoop EQ is an MCP (Model Context Protocol) server that provides behavioral
24
24
  - **Crisis Detection**: Integration with therapeutic AI for emotional support
25
25
  - **Memory Context**: Preserves important insights and checkpoints
26
26
 
27
- ## Installation
27
+ ## Quick Start
28
28
 
29
- ```bash
30
- npm install -g couchloop-eq-mcp
29
+ ### Option 1: Connect to Demo Server (Easiest)
30
+
31
+ For Claude Desktop (v0.7.0+), add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
32
+
33
+ ```json
34
+ {
35
+ "mcpServers": {
36
+ "couchloop-eq": {
37
+ "url": "https://couchloop-mcp-production.up.railway.app/mcp",
38
+ "transport": "sse"
39
+ }
40
+ }
41
+ }
31
42
  ```
32
43
 
33
- ## Setup
44
+ Restart Claude and try: **"Start a daily reflection session"**
34
45
 
35
- ### For Claude Desktop
46
+ ### Option 2: Run Locally (v1.0.4)
36
47
 
37
- Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json`):
48
+ ```bash
49
+ npm install -g couchloop-eq-mcp
50
+ ```
51
+
52
+ Add to Claude Desktop configuration:
38
53
 
39
54
  ```json
40
55
  {
@@ -42,13 +57,15 @@ Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/
42
57
  "couchloop-eq": {
43
58
  "command": "couchloop-eq-mcp",
44
59
  "env": {
45
- "COUCHLOOP_API_KEY": "your-api-key"
60
+ "COUCHLOOP_SERVER": "https://couchloopchat.com"
46
61
  }
47
62
  }
48
63
  }
49
64
  }
50
65
  ```
51
66
 
67
+ **New in v1.0.4**: Sessions automatically persist locally to `~/.couchloop-mcp/identity.json` - no signup required!
68
+
52
69
  ### For ChatGPT (Developer Mode)
53
70
 
54
71
  ChatGPT supports MCP servers through Developer Mode. See [CHATGPT_SETUP.md](CHATGPT_SETUP.md) for detailed setup instructions.
@@ -102,10 +119,6 @@ Save an insight:
102
119
  "Save this insight: I notice I'm more energized in the mornings"
103
120
  ```
104
121
 
105
- ## Get Started
106
-
107
- Sign up for API access at [couchloop.com](https://couchloop.com)
108
-
109
122
  ## Support
110
123
 
111
124
  - Issues: [github.com/wisenbergg/couchloop-mcp/issues](https://github.com/wisenbergg/couchloop-mcp/issues)
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Code Bloat Detector - Identifies verbose and over-engineered patterns
3
+ * Detects patterns that create technical debt and suggests simplifications
4
+ */
5
+ import { ComplexityMetrics } from '../metrics/complexity-calculator.js';
6
+ export interface CodeSmellWarning {
7
+ type: string;
8
+ severity: 'low' | 'medium' | 'high';
9
+ line?: number;
10
+ pattern: string;
11
+ suggestion: string;
12
+ example?: {
13
+ bad: string;
14
+ good: string;
15
+ };
16
+ }
17
+ export interface BloatDetectionResult {
18
+ issues: CodeSmellWarning[];
19
+ metrics: ComplexityMetrics;
20
+ summary: {
21
+ totalIssues: number;
22
+ criticalIssues: number;
23
+ warningCount: number;
24
+ score: number;
25
+ recommendation: string;
26
+ };
27
+ refactoringPriority: string[];
28
+ }
29
+ export declare class BloatDetector {
30
+ private complexityCalculator;
31
+ constructor(threshold?: number);
32
+ /**
33
+ * Analyze code for bloat patterns
34
+ */
35
+ analyze(code: string, language: 'javascript' | 'typescript' | 'python'): BloatDetectionResult;
36
+ /**
37
+ * Detect excessive nesting (>3 levels)
38
+ */
39
+ private detectExcessiveNesting;
40
+ /**
41
+ * Detect unnecessary try-catch blocks
42
+ */
43
+ private detectUnnecessaryTryCatch;
44
+ /**
45
+ * Detect over-abstraction (single-use abstractions)
46
+ */
47
+ private detectOverAbstraction;
48
+ /**
49
+ * Detect duplicated code patterns
50
+ */
51
+ private detectDuplicatePatterns;
52
+ /**
53
+ * Detect verbose conditionals that could be simplified
54
+ */
55
+ private detectVerboseConditionals;
56
+ /**
57
+ * Detect functions longer than 50 lines
58
+ */
59
+ private detectLongFunctions;
60
+ /**
61
+ * Detect chained conditionals that could use switch
62
+ */
63
+ private detectChainedConditionals;
64
+ /**
65
+ * Detect redundant null/undefined checks
66
+ */
67
+ private detectRedundantNullChecks;
68
+ /**
69
+ * Detect overly complex logic that should be extracted
70
+ */
71
+ private detectComplexLogic;
72
+ /**
73
+ * Extract function blocks with metadata
74
+ */
75
+ private extractFunctionBlocks;
76
+ /**
77
+ * Normalize line for duplicate detection
78
+ */
79
+ private normalizeLine;
80
+ /**
81
+ * Generate recommendation based on issues and metrics
82
+ */
83
+ private generateRecommendation;
84
+ /**
85
+ * Prioritize refactoring tasks by impact
86
+ */
87
+ private prioritizeRefactoring;
88
+ }
89
+ //# sourceMappingURL=bloat-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bloat-detector.d.ts","sourceRoot":"","sources":["../../../src/developer/analyzers/bloat-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAwB,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE9F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,oBAAoB,CAAuB;gBACvC,SAAS,GAAE,MAAW;IAMlC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,oBAAoB;IAsC7F;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgD9B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAgEjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgC7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA+B/B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA0DjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAkDjC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqCjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgC7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CA0B9B"}
@@ -0,0 +1,483 @@
1
+ /**
2
+ * Code Bloat Detector - Identifies verbose and over-engineered patterns
3
+ * Detects patterns that create technical debt and suggests simplifications
4
+ */
5
+ import { ComplexityCalculator } from '../metrics/complexity-calculator.js';
6
+ export class BloatDetector {
7
+ complexityCalculator;
8
+ constructor(threshold = 50) {
9
+ this.complexityCalculator = new ComplexityCalculator();
10
+ // Threshold reserved for future use
11
+ void threshold;
12
+ }
13
+ /**
14
+ * Analyze code for bloat patterns
15
+ */
16
+ analyze(code, language) {
17
+ const issues = [];
18
+ const metrics = this.complexityCalculator.calculateMetrics(code, language);
19
+ // Detect specific patterns
20
+ this.detectExcessiveNesting(code, language, issues);
21
+ this.detectUnnecessaryTryCatch(code, language, issues);
22
+ this.detectOverAbstraction(code, language, issues);
23
+ this.detectDuplicatePatterns(code, language, issues);
24
+ this.detectVerboseConditionals(code, language, issues);
25
+ this.detectLongFunctions(code, language, issues);
26
+ this.detectChainedConditionals(code, language, issues);
27
+ this.detectRedundantNullChecks(code, language, issues);
28
+ this.detectComplexLogic(code, language, issues);
29
+ // Sort by severity
30
+ issues.sort((a, b) => {
31
+ const severityOrder = { high: 0, medium: 1, low: 2 };
32
+ return severityOrder[a.severity] - severityOrder[b.severity];
33
+ });
34
+ const criticalIssues = issues.filter(i => i.severity === 'high').length;
35
+ const warningCount = issues.filter(i => i.severity !== 'high').length;
36
+ return {
37
+ issues,
38
+ metrics,
39
+ summary: {
40
+ totalIssues: issues.length,
41
+ criticalIssues,
42
+ warningCount,
43
+ score: metrics.score,
44
+ recommendation: this.generateRecommendation(issues, metrics)
45
+ },
46
+ refactoringPriority: this.prioritizeRefactoring(issues, metrics)
47
+ };
48
+ }
49
+ /**
50
+ * Detect excessive nesting (>3 levels)
51
+ */
52
+ detectExcessiveNesting(code, _language, issues) {
53
+ const lines = code.split('\n');
54
+ let maxNesting = 0;
55
+ let nestingStack = [];
56
+ for (let i = 0; i < lines.length; i++) {
57
+ const line = lines[i];
58
+ if (!line)
59
+ continue;
60
+ const openBraces = (line.match(/\{/g) || []).length;
61
+ const closeBraces = (line.match(/\}/g) || []).length;
62
+ for (let j = 0; j < openBraces; j++) {
63
+ nestingStack.push({ level: nestingStack.length + 1, lineNumber: i + 1 });
64
+ }
65
+ for (let j = 0; j < closeBraces; j++) {
66
+ nestingStack.pop();
67
+ }
68
+ const currentNesting = nestingStack.length;
69
+ if (currentNesting > 3 && currentNesting > maxNesting) {
70
+ maxNesting = currentNesting;
71
+ issues.push({
72
+ type: 'excessive_nesting',
73
+ severity: currentNesting > 5 ? 'high' : 'medium',
74
+ line: i + 1,
75
+ pattern: line.trim().substring(0, 50),
76
+ suggestion: `Reduce nesting depth from ${currentNesting} to 3 or less. Extract nested logic into separate functions.`,
77
+ example: {
78
+ bad: `if (user) {
79
+ if (user.email) {
80
+ if (user.email.includes('@')) {
81
+ if (user.verified) {
82
+ return true;
83
+ }
84
+ }
85
+ }
86
+ }`,
87
+ good: `const isValidUser = (user) =>
88
+ user?.email?.includes('@') && user?.verified;
89
+ return isValidUser(user) ? true : false;`
90
+ }
91
+ });
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Detect unnecessary try-catch blocks
97
+ */
98
+ detectUnnecessaryTryCatch(code, _language, issues) {
99
+ // Pattern: try block with no operations that can fail
100
+ const tryBlockRegex = /try\s*\{([^}]+)\}\s*catch\s*\(/gm;
101
+ let match;
102
+ while ((match = tryBlockRegex.exec(code)) !== null) {
103
+ const blockContent = match[1];
104
+ const lineNumber = code.substring(0, match.index).split('\n').length;
105
+ // Check if try block only contains safe operations
106
+ const hasDangerousOps = /(\.\w+\(|fetch|async|await|JSON\.parse|throw)/i.test(blockContent || '');
107
+ if (!hasDangerousOps) {
108
+ issues.push({
109
+ type: 'unnecessary_try_catch',
110
+ severity: 'low',
111
+ line: lineNumber,
112
+ pattern: `try { ... } catch (e) { ... }`,
113
+ suggestion: 'This try-catch wraps safe operations. Remove unnecessary error handling.',
114
+ example: {
115
+ bad: `try {
116
+ if (x) {
117
+ console.log('safe');
118
+ }
119
+ } catch (e) {
120
+ return false;
121
+ }`,
122
+ good: `if (x) {
123
+ console.log('safe');
124
+ }`
125
+ }
126
+ });
127
+ }
128
+ // Also detect swallowing errors with no logging/handling
129
+ const catchContent = code.substring(match.index + match[0].length);
130
+ const catchEndIndex = catchContent.indexOf('\n');
131
+ const catchLine = catchContent.substring(0, catchEndIndex);
132
+ if (/catch\s*\([^)]*\)\s*\{\s*(?:return|;|})/i.test(catchLine)) {
133
+ issues.push({
134
+ type: 'swallowed_errors',
135
+ severity: 'high',
136
+ line: lineNumber,
137
+ pattern: `catch (e) { return/; }`,
138
+ suggestion: 'Error is silently swallowed. Add logging or meaningful error handling.',
139
+ example: {
140
+ bad: `try {
141
+ return risky();
142
+ } catch (e) {
143
+ return false;
144
+ }`,
145
+ good: `try {
146
+ return risky();
147
+ } catch (e) {
148
+ logger.error('Operation failed:', e);
149
+ throw new Error('Failed to complete operation');
150
+ }`
151
+ }
152
+ });
153
+ }
154
+ }
155
+ }
156
+ /**
157
+ * Detect over-abstraction (single-use abstractions)
158
+ */
159
+ detectOverAbstraction(code, _language, issues) {
160
+ // Pattern: functions/classes used only once
161
+ const functionMatches = code.matchAll(/(?:function|const)\s+(\w+)\s*(?:\(|=)/g);
162
+ const functionNames = new Map();
163
+ for (const match of functionMatches) {
164
+ const name = match[1];
165
+ if (!name)
166
+ continue;
167
+ functionNames.set(name, (functionNames.get(name) || 0) + 1);
168
+ }
169
+ // Find functions that are defined but only called once (or not at all)
170
+ for (const [name, _count] of functionNames.entries()) {
171
+ const callPattern = new RegExp(`\\b${name}\\s*\\(`, 'g');
172
+ const calls = code.match(callPattern);
173
+ const callCount = calls ? calls.length - 1 : 0; // -1 for the definition
174
+ if (callCount === 1) {
175
+ const defIndex = code.indexOf(`${name}\s*(`);
176
+ const lineNumber = code.substring(0, defIndex).split('\n').length;
177
+ issues.push({
178
+ type: 'over_abstraction',
179
+ severity: 'low',
180
+ line: lineNumber,
181
+ pattern: `Function "${name}" defined but used only once`,
182
+ suggestion: `Inline function "${name}" where it's called. Single-use abstractions add complexity without benefit.`
183
+ });
184
+ }
185
+ }
186
+ }
187
+ /**
188
+ * Detect duplicated code patterns
189
+ */
190
+ detectDuplicatePatterns(code, _language, issues) {
191
+ const lines = code.split('\n').filter(l => l.trim() && !l.trim().startsWith('//'));
192
+ // Look for repeated line patterns (3+ occurrences)
193
+ const linePatterns = new Map();
194
+ for (let i = 0; i < lines.length; i++) {
195
+ const line = lines[i];
196
+ if (!line)
197
+ continue;
198
+ const normalized = this.normalizeLine(line);
199
+ if (normalized.length > 20) { // Only check substantial lines
200
+ if (!linePatterns.has(normalized)) {
201
+ linePatterns.set(normalized, []);
202
+ }
203
+ linePatterns.get(normalized).push(i + 1);
204
+ }
205
+ }
206
+ for (const [pattern, occurrences] of linePatterns.entries()) {
207
+ if (occurrences.length >= 3) {
208
+ issues.push({
209
+ type: 'code_duplication',
210
+ severity: occurrences.length >= 5 ? 'high' : 'medium',
211
+ line: occurrences[0],
212
+ pattern: pattern.substring(0, 60),
213
+ suggestion: `This pattern appears ${occurrences.length} times (lines ${occurrences.join(', ')}). Extract to a utility function.`
214
+ });
215
+ }
216
+ }
217
+ }
218
+ /**
219
+ * Detect verbose conditionals that could be simplified
220
+ */
221
+ detectVerboseConditionals(code, _language, issues) {
222
+ const lines = code.split('\n');
223
+ for (let i = 0; i < lines.length; i++) {
224
+ const line = lines[i];
225
+ if (!line)
226
+ continue;
227
+ // Pattern: if (x === true) or if (x === false)
228
+ if (/if\s*\(\s*\w+\s*===\s*(true|false)\s*\)/.test(line)) {
229
+ issues.push({
230
+ type: 'verbose_boolean_check',
231
+ severity: 'low',
232
+ line: i + 1,
233
+ pattern: line.trim().substring(0, 50),
234
+ suggestion: 'Simplify boolean comparisons. Use "if (x)" instead of "if (x === true)".',
235
+ example: {
236
+ bad: 'if (isActive === true) { ... }',
237
+ good: 'if (isActive) { ... }'
238
+ }
239
+ });
240
+ }
241
+ // Pattern: if (x !== null && x !== undefined)
242
+ if (/if\s*\(\s*\w+\s*!==\s*null\s*&&\s*\w+\s*!==\s*undefined\s*\)/.test(line)) {
243
+ issues.push({
244
+ type: 'verbose_null_check',
245
+ severity: 'low',
246
+ line: i + 1,
247
+ pattern: line.trim().substring(0, 60),
248
+ suggestion: 'Use optional chaining or nullish coalescing. Replace with "if (x ?? false)".',
249
+ example: {
250
+ bad: 'if (user !== null && user !== undefined) { ... }',
251
+ good: 'if (user) { ... }'
252
+ }
253
+ });
254
+ }
255
+ // Pattern: if (condition) { return true; } else { return false; }
256
+ if (/if\s*\([^)]+\)\s*\{\s*return\s+(true|false)\s*;\s*\}\s*else\s*\{\s*return\s+(true|false)/i.test(line)) {
257
+ issues.push({
258
+ type: 'unnecessary_conditional_return',
259
+ severity: 'low',
260
+ line: i + 1,
261
+ pattern: 'if (...) { return true; } else { return false; }',
262
+ suggestion: 'Return the condition directly instead of conditional return statements.',
263
+ example: {
264
+ bad: `if (isValid(data)) {
265
+ return true;
266
+ } else {
267
+ return false;
268
+ }`,
269
+ good: 'return isValid(data);'
270
+ }
271
+ });
272
+ }
273
+ }
274
+ }
275
+ /**
276
+ * Detect functions longer than 50 lines
277
+ */
278
+ detectLongFunctions(code, _language, issues) {
279
+ const functions = this.extractFunctionBlocks(code, _language);
280
+ for (const func of functions) {
281
+ if (func.length > 50) {
282
+ issues.push({
283
+ type: 'function_too_long',
284
+ severity: func.length > 100 ? 'high' : 'medium',
285
+ line: func.startLine,
286
+ pattern: `Function "${func.name}" is ${func.length} lines long`,
287
+ suggestion: `Break down "${func.name}" into smaller, focused functions. Ideal length is 20-30 lines.`
288
+ });
289
+ }
290
+ }
291
+ }
292
+ /**
293
+ * Detect chained conditionals that could use switch
294
+ */
295
+ detectChainedConditionals(code, _language, issues) {
296
+ // Pattern: if (x === 'a') ... else if (x === 'b') ... else if (x === 'c') ...
297
+ const chainRegex = /(if|else\s+if)\s*\(\s*\w+\s*===\s*['"][^'"]+['"]\s*\)/g;
298
+ let lastMatch = null;
299
+ let chainCount = 0;
300
+ let chainStart = 0;
301
+ for (const match of code.matchAll(chainRegex)) {
302
+ if (lastMatch && match.index - lastMatch.index < 100) {
303
+ chainCount++;
304
+ if (chainCount === 2) {
305
+ chainStart = lastMatch.index;
306
+ }
307
+ }
308
+ else {
309
+ chainCount = 0;
310
+ }
311
+ if (chainCount >= 3) {
312
+ const lineNumber = code.substring(0, chainStart).split('\n').length;
313
+ issues.push({
314
+ type: 'chain_of_conditionals',
315
+ severity: 'medium',
316
+ line: lineNumber,
317
+ pattern: `Multiple if/else if with equality checks`,
318
+ suggestion: 'Consider using a switch statement or object map for multiple equality comparisons.',
319
+ example: {
320
+ bad: `if (status === 'pending') {
321
+ handlePending();
322
+ } else if (status === 'active') {
323
+ handleActive();
324
+ } else if (status === 'completed') {
325
+ handleCompleted();
326
+ }`,
327
+ good: `const handlers = {
328
+ pending: handlePending,
329
+ active: handleActive,
330
+ completed: handleCompleted
331
+ };
332
+ handlers[status]?.();`
333
+ }
334
+ });
335
+ chainCount = 0;
336
+ }
337
+ lastMatch = match;
338
+ }
339
+ }
340
+ /**
341
+ * Detect redundant null/undefined checks
342
+ */
343
+ detectRedundantNullChecks(code, _language, issues) {
344
+ // Pattern: multiple checks for same variable
345
+ const lines = code.split('\n');
346
+ for (let i = 0; i < lines.length - 1; i++) {
347
+ const line = lines[i];
348
+ const nextLine = lines[i + 1];
349
+ if (!line || !nextLine)
350
+ continue;
351
+ // Pattern: if (x) { ... if (x) { ... } }
352
+ const xMatches = line.match(/if\s*\(\s*(\w+)\s*\)/);
353
+ if (xMatches && xMatches[1]) {
354
+ const varName = xMatches[1];
355
+ if (nextLine.includes(`if`) && nextLine.includes(varName)) {
356
+ issues.push({
357
+ type: 'redundant_null_check',
358
+ severity: 'low',
359
+ line: i + 2,
360
+ pattern: `Redundant check for ${varName}`,
361
+ suggestion: `Variable "${varName}" is already checked. Combine conditions instead.`,
362
+ example: {
363
+ bad: `if (user) {
364
+ if (user.email) {
365
+ // ...
366
+ }
367
+ }`,
368
+ good: `if (user?.email) {
369
+ // ...
370
+ }`
371
+ }
372
+ });
373
+ }
374
+ }
375
+ }
376
+ }
377
+ /**
378
+ * Detect overly complex logic that should be extracted
379
+ */
380
+ detectComplexLogic(code, _language, issues) {
381
+ // Pattern: assignments with complex expressions
382
+ const complexRegex = /\w+\s*=\s*[^;]*(\?|&&|\|\|)[^;]*(\?|&&|\|\|)[^;]*(\?|&&|\|\|)[^;]*;/g;
383
+ let match;
384
+ while ((match = complexRegex.exec(code)) !== null) {
385
+ const lineNumber = code.substring(0, match.index).split('\n').length;
386
+ issues.push({
387
+ type: 'complex_assignment',
388
+ severity: 'medium',
389
+ line: lineNumber,
390
+ pattern: match[0].substring(0, 60),
391
+ suggestion: 'Complex expression assignment. Break into multiple statements for clarity.',
392
+ example: {
393
+ bad: 'const result = x > 5 && y < 10 ? a ? b : c : d ? e : f;',
394
+ good: `const isXInRange = x > 5 && y < 10;
395
+ const result = isXInRange ? (a ? b : c) : (d ? e : f);`
396
+ }
397
+ });
398
+ }
399
+ }
400
+ /**
401
+ * Extract function blocks with metadata
402
+ */
403
+ extractFunctionBlocks(code, _language) {
404
+ const functions = [];
405
+ const lines = code.split('\n');
406
+ for (let i = 0; i < lines.length; i++) {
407
+ const line = lines[i];
408
+ if (!line)
409
+ continue;
410
+ // JavaScript/TypeScript function
411
+ if (/(?:function\s+(\w+)|const\s+(\w+)\s*=\s*(?:async\s*)?\(|(?:async\s+)?(\w+)\s*\()/.test(line)) {
412
+ const nameMatch = line.match(/(?:function\s+(\w+)|const\s+(\w+)|(?:async\s+)?(\w+)\s*\()/);
413
+ const name = nameMatch?.[1] || nameMatch?.[2] || nameMatch?.[3] || 'anonymous';
414
+ // Count lines until matching closing brace
415
+ let braceCount = 1;
416
+ let length = 1;
417
+ for (let j = i + 1; j < lines.length && braceCount > 0; j++) {
418
+ const jLine = lines[j];
419
+ if (!jLine)
420
+ continue;
421
+ braceCount += (jLine.match(/\{/g) || []).length;
422
+ braceCount -= (jLine.match(/\}/g) || []).length;
423
+ length++;
424
+ }
425
+ functions.push({ name, startLine: i + 1, length });
426
+ }
427
+ }
428
+ return functions;
429
+ }
430
+ /**
431
+ * Normalize line for duplicate detection
432
+ */
433
+ normalizeLine(line) {
434
+ return line
435
+ .trim()
436
+ .replace(/\s+/g, ' ')
437
+ .replace(/[0-9]+/g, 'N')
438
+ .replace(/['"][^'"]*['"]/g, 'S');
439
+ }
440
+ /**
441
+ * Generate recommendation based on issues and metrics
442
+ */
443
+ generateRecommendation(issues, metrics) {
444
+ const criticalCount = issues.filter(i => i.severity === 'high').length;
445
+ if (criticalCount >= 5) {
446
+ return 'Critical: Major refactoring needed. Multiple serious code smells detected.';
447
+ }
448
+ if (metrics.score > 75) {
449
+ return 'High complexity. Recommend extracting functions and reducing nesting depth.';
450
+ }
451
+ if (metrics.score > 50) {
452
+ return 'Moderate complexity. Consider breaking down long functions and simplifying conditionals.';
453
+ }
454
+ if (issues.length > 0) {
455
+ return 'Minor issues found. Address low-severity items to improve code quality.';
456
+ }
457
+ return 'Code quality is good. Continue monitoring for emerging complexity.';
458
+ }
459
+ /**
460
+ * Prioritize refactoring tasks by impact
461
+ */
462
+ prioritizeRefactoring(issues, metrics) {
463
+ const priority = [];
464
+ if (metrics.cyclomaticComplexity > 15) {
465
+ priority.push('Reduce cyclomatic complexity - extract conditional logic');
466
+ }
467
+ if (metrics.nestingDepth > 5) {
468
+ priority.push('Reduce nesting depth - use early returns and extract nested blocks');
469
+ }
470
+ if (metrics.maxFunctionLength > 100) {
471
+ priority.push('Break down oversized functions into smaller, focused units');
472
+ }
473
+ const highSeverityIssues = issues.filter(i => i.severity === 'high');
474
+ if (highSeverityIssues.length > 0) {
475
+ priority.push(`Fix ${highSeverityIssues.length} critical issues: ${highSeverityIssues.map(i => i.type).join(', ')}`);
476
+ }
477
+ if (priority.length === 0) {
478
+ priority.push('Code is well-structured - maintain current quality standards');
479
+ }
480
+ return priority;
481
+ }
482
+ }
483
+ //# sourceMappingURL=bloat-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bloat-detector.js","sourceRoot":"","sources":["../../../src/developer/analyzers/bloat-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAqB,MAAM,qCAAqC,CAAC;AA2B9F,MAAM,OAAO,aAAa;IAChB,oBAAoB,CAAuB;IACnD,YAAY,YAAoB,EAAE;QAChC,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvD,oCAAoC;QACpC,KAAK,SAAS,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAY,EAAE,QAAgD;QACpE,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE3E,2BAA2B;QAC3B,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEhD,mBAAmB;QACnB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnB,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACrD,OAAO,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QACxE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QAEtE,OAAO;YACL,MAAM;YACN,OAAO;YACP,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM,CAAC,MAAM;gBAC1B,cAAc;gBACd,YAAY;gBACZ,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,cAAc,EAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC;aAC7D;YACD,mBAAmB,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;SACjE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAA0B;QACxF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,YAAY,GAA4C,EAAE,CAAC;QAE/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACpD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAErD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,YAAY,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;YAED,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC;YAC3C,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,UAAU,EAAE,CAAC;gBACtD,UAAU,GAAG,cAAc,CAAC;gBAE5B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,mBAAmB;oBACzB,QAAQ,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;oBAChD,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;oBACrC,UAAU,EAAE,6BAA6B,cAAc,8DAA8D;oBACrH,OAAO,EAAE;wBACP,GAAG,EAAE;;;;;;;;EAQf;wBACU,IAAI,EAAE;;yCAEuB;qBAC9B;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAA0B;QAC3F,sDAAsD;QACtD,MAAM,aAAa,GAAG,kCAAkC,CAAC;QACzD,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAErE,mDAAmD;YACnD,MAAM,eAAe,GAAG,gDAAgD,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;YAElG,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,uBAAuB;oBAC7B,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,+BAA+B;oBACxC,UAAU,EAAE,0EAA0E;oBACtF,OAAO,EAAE;wBACP,GAAG,EAAE;;;;;;EAMf;wBACU,IAAI,EAAE;;EAEhB;qBACS;iBACF,CAAC,CAAC;YACL,CAAC;YAED,yDAAyD;YACzD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YAE3D,IAAI,0CAA0C,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/D,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,wBAAwB;oBACjC,UAAU,EAAE,wEAAwE;oBACpF,OAAO,EAAE;wBACP,GAAG,EAAE;;;;EAIf;wBACU,IAAI,EAAE;;;;;EAKhB;qBACS;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAA0B;QACvF,4CAA4C;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEhD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,uEAAuE;QACvE,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,GAAG,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;YAExE,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;gBAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAElE,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,aAAa,IAAI,8BAA8B;oBACxD,UAAU,EAAE,oBAAoB,IAAI,8EAA8E;iBACnH,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAA0B;QACzF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnF,mDAAmD;QACnD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,+BAA+B;gBAC3D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAClC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,YAAY,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5D,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;oBACrD,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;oBACpB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;oBACjC,UAAU,EAAE,wBAAwB,WAAW,CAAC,MAAM,iBAAiB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC;iBACjI,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAA0B;QAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,+CAA+C;YAC/C,IAAI,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,uBAAuB;oBAC7B,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;oBACrC,UAAU,EAAE,0EAA0E;oBACtF,OAAO,EAAE;wBACP,GAAG,EAAE,gCAAgC;wBACrC,IAAI,EAAE,uBAAuB;qBAC9B;iBACF,CAAC,CAAC;YACL,CAAC;YAED,8CAA8C;YAC9C,IAAI,8DAA8D,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9E,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,oBAAoB;oBAC1B,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;oBACrC,UAAU,EAAE,8EAA8E;oBAC1F,OAAO,EAAE;wBACP,GAAG,EAAE,kDAAkD;wBACvD,IAAI,EAAE,mBAAmB;qBAC1B;iBACF,CAAC,CAAC;YACL,CAAC;YAED,kEAAkE;YAClE,IAAI,2FAA2F,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3G,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,gCAAgC;oBACtC,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,OAAO,EAAE,kDAAkD;oBAC3D,UAAU,EAAE,yEAAyE;oBACrF,OAAO,EAAE;wBACP,GAAG,EAAE;;;;EAIf;wBACU,IAAI,EAAE,uBAAuB;qBAC9B;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAA0B;QACrF,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAE9D,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,mBAAmB;oBACzB,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS;oBACpB,OAAO,EAAE,aAAa,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,MAAM,aAAa;oBAC/D,UAAU,EAAE,eAAe,IAAI,CAAC,IAAI,iEAAiE;iBACtG,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAA0B;QAC3F,8EAA8E;QAC9E,MAAM,UAAU,GAAG,wDAAwD,CAAC;QAC5E,IAAI,SAAS,GAA2B,IAAI,CAAC;QAC7C,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9C,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;gBACrD,UAAU,EAAE,CAAC;gBACb,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBACrB,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC;gBAC/B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,CAAC,CAAC;YACjB,CAAC;YAED,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAEpE,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,uBAAuB;oBAC7B,QAAQ,EAAE,QAAQ;oBAClB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,0CAA0C;oBACnD,UAAU,EAAE,oFAAoF;oBAChG,OAAO,EAAE;wBACP,GAAG,EAAE;;;;;;EAMf;wBACU,IAAI,EAAE;;;;;sBAKI;qBACX;iBACF,CAAC,CAAC;gBAEH,UAAU,GAAG,CAAC,CAAC;YACjB,CAAC;YAED,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAA0B;QAC3F,6CAA6C;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9B,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAEjC,yCAAyC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACpD,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,sBAAsB;wBAC5B,QAAQ,EAAE,KAAK;wBACf,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,OAAO,EAAE,uBAAuB,OAAO,EAAE;wBACzC,UAAU,EAAE,aAAa,OAAO,mDAAmD;wBACnF,OAAO,EAAE;4BACP,GAAG,EAAE;;;;EAIjB;4BACY,IAAI,EAAE;;EAElB;yBACW;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAA0B;QACpF,gDAAgD;QAChD,MAAM,YAAY,GAAG,sEAAsE,CAAC;QAC5F,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAErE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;gBAClC,UAAU,EAAE,4EAA4E;gBACxF,OAAO,EAAE;oBACP,GAAG,EAAE,yDAAyD;oBAC9D,IAAI,EAAE;uDACuC;iBAC9C;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,IAAY,EAAE,SAAiB;QAC3D,MAAM,SAAS,GAA+D,EAAE,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,iCAAiC;YACjC,IAAI,kFAAkF,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;gBAC3F,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;gBAE/E,2CAA2C;gBAC3C,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,IAAI,MAAM,GAAG,CAAC,CAAC;gBAEf,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,KAAK;wBAAE,SAAS;oBACrB,UAAU,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;oBAChD,UAAU,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;oBAChD,MAAM,EAAE,CAAC;gBACX,CAAC;gBAED,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAY;QAChC,OAAO,IAAI;aACR,IAAI,EAAE;aACN,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;aACvB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,MAA0B,EAAE,OAA0B;QACnF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QAEvE,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,4EAA4E,CAAC;QACtF,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;YACvB,OAAO,6EAA6E,CAAC;QACvF,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;YACvB,OAAO,0FAA0F,CAAC;QACpG,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,yEAAyE,CAAC;QACnF,CAAC;QAED,OAAO,oEAAoE,CAAC;IAC9E,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,MAA0B,EAAE,OAA0B;QAClF,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,OAAO,CAAC,oBAAoB,GAAG,EAAE,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,OAAO,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;QACrE,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC,MAAM,qBAAqB,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}