mcp-adr-analysis-server 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +608 -0
  3. package/dist/src/index.d.ts +10 -0
  4. package/dist/src/index.d.ts.map +1 -0
  5. package/dist/src/index.js +1722 -0
  6. package/dist/src/index.js.map +1 -0
  7. package/dist/src/prompts/adr-suggestion-prompts.d.ts +24 -0
  8. package/dist/src/prompts/adr-suggestion-prompts.d.ts.map +1 -0
  9. package/dist/src/prompts/adr-suggestion-prompts.js +383 -0
  10. package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -0
  11. package/dist/src/prompts/analysis-prompts.d.ts +24 -0
  12. package/dist/src/prompts/analysis-prompts.d.ts.map +1 -0
  13. package/dist/src/prompts/analysis-prompts.js +489 -0
  14. package/dist/src/prompts/analysis-prompts.js.map +1 -0
  15. package/dist/src/prompts/deployment-analysis-prompts.d.ts +54 -0
  16. package/dist/src/prompts/deployment-analysis-prompts.d.ts.map +1 -0
  17. package/dist/src/prompts/deployment-analysis-prompts.js +712 -0
  18. package/dist/src/prompts/deployment-analysis-prompts.js.map +1 -0
  19. package/dist/src/prompts/environment-analysis-prompts.d.ts +34 -0
  20. package/dist/src/prompts/environment-analysis-prompts.d.ts.map +1 -0
  21. package/dist/src/prompts/environment-analysis-prompts.js +724 -0
  22. package/dist/src/prompts/environment-analysis-prompts.js.map +1 -0
  23. package/dist/src/prompts/index.d.ts +43 -0
  24. package/dist/src/prompts/index.d.ts.map +1 -0
  25. package/dist/src/prompts/index.js +384 -0
  26. package/dist/src/prompts/index.js.map +1 -0
  27. package/dist/src/prompts/research-integration-prompts.d.ts +43 -0
  28. package/dist/src/prompts/research-integration-prompts.d.ts.map +1 -0
  29. package/dist/src/prompts/research-integration-prompts.js +398 -0
  30. package/dist/src/prompts/research-integration-prompts.js.map +1 -0
  31. package/dist/src/prompts/research-question-prompts.d.ts +75 -0
  32. package/dist/src/prompts/research-question-prompts.d.ts.map +1 -0
  33. package/dist/src/prompts/research-question-prompts.js +695 -0
  34. package/dist/src/prompts/research-question-prompts.js.map +1 -0
  35. package/dist/src/prompts/rule-generation-prompts.d.ts +63 -0
  36. package/dist/src/prompts/rule-generation-prompts.d.ts.map +1 -0
  37. package/dist/src/prompts/rule-generation-prompts.js +630 -0
  38. package/dist/src/prompts/rule-generation-prompts.js.map +1 -0
  39. package/dist/src/prompts/security-prompts.d.ts +23 -0
  40. package/dist/src/prompts/security-prompts.d.ts.map +1 -0
  41. package/dist/src/prompts/security-prompts.js +287 -0
  42. package/dist/src/prompts/security-prompts.js.map +1 -0
  43. package/dist/src/resources/index.d.ts +24 -0
  44. package/dist/src/resources/index.d.ts.map +1 -0
  45. package/dist/src/resources/index.js +458 -0
  46. package/dist/src/resources/index.js.map +1 -0
  47. package/dist/src/tools/adr-suggestion-tool.d.ts +40 -0
  48. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -0
  49. package/dist/src/tools/adr-suggestion-tool.js +338 -0
  50. package/dist/src/tools/adr-suggestion-tool.js.map +1 -0
  51. package/dist/src/tools/content-masking-tool.d.ts +52 -0
  52. package/dist/src/tools/content-masking-tool.d.ts.map +1 -0
  53. package/dist/src/tools/content-masking-tool.js +206 -0
  54. package/dist/src/tools/content-masking-tool.js.map +1 -0
  55. package/dist/src/tools/deployment-analysis-tool.d.ts +39 -0
  56. package/dist/src/tools/deployment-analysis-tool.d.ts.map +1 -0
  57. package/dist/src/tools/deployment-analysis-tool.js +310 -0
  58. package/dist/src/tools/deployment-analysis-tool.js.map +1 -0
  59. package/dist/src/tools/environment-analysis-tool.d.ts +16 -0
  60. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -0
  61. package/dist/src/tools/environment-analysis-tool.js +298 -0
  62. package/dist/src/tools/environment-analysis-tool.js.map +1 -0
  63. package/dist/src/tools/research-integration-tool.d.ts +44 -0
  64. package/dist/src/tools/research-integration-tool.d.ts.map +1 -0
  65. package/dist/src/tools/research-integration-tool.js +429 -0
  66. package/dist/src/tools/research-integration-tool.js.map +1 -0
  67. package/dist/src/tools/research-question-tool.d.ts +55 -0
  68. package/dist/src/tools/research-question-tool.d.ts.map +1 -0
  69. package/dist/src/tools/research-question-tool.js +333 -0
  70. package/dist/src/tools/research-question-tool.js.map +1 -0
  71. package/dist/src/tools/rule-generation-tool.d.ts +49 -0
  72. package/dist/src/tools/rule-generation-tool.d.ts.map +1 -0
  73. package/dist/src/tools/rule-generation-tool.js +432 -0
  74. package/dist/src/tools/rule-generation-tool.js.map +1 -0
  75. package/dist/src/types/index.d.ts +531 -0
  76. package/dist/src/types/index.d.ts.map +1 -0
  77. package/dist/src/types/index.js +129 -0
  78. package/dist/src/types/index.js.map +1 -0
  79. package/dist/src/utils/adr-suggestions.d.ts +104 -0
  80. package/dist/src/utils/adr-suggestions.d.ts.map +1 -0
  81. package/dist/src/utils/adr-suggestions.js +228 -0
  82. package/dist/src/utils/adr-suggestions.js.map +1 -0
  83. package/dist/src/utils/cache.d.ts +51 -0
  84. package/dist/src/utils/cache.d.ts.map +1 -0
  85. package/dist/src/utils/cache.js +243 -0
  86. package/dist/src/utils/cache.js.map +1 -0
  87. package/dist/src/utils/config.d.ts +65 -0
  88. package/dist/src/utils/config.d.ts.map +1 -0
  89. package/dist/src/utils/config.js +118 -0
  90. package/dist/src/utils/config.js.map +1 -0
  91. package/dist/src/utils/content-masking.d.ts +79 -0
  92. package/dist/src/utils/content-masking.d.ts.map +1 -0
  93. package/dist/src/utils/content-masking.js +203 -0
  94. package/dist/src/utils/content-masking.js.map +1 -0
  95. package/dist/src/utils/deployment-analysis.d.ts +67 -0
  96. package/dist/src/utils/deployment-analysis.d.ts.map +1 -0
  97. package/dist/src/utils/deployment-analysis.js +263 -0
  98. package/dist/src/utils/deployment-analysis.js.map +1 -0
  99. package/dist/src/utils/environment-analysis.d.ts +76 -0
  100. package/dist/src/utils/environment-analysis.d.ts.map +1 -0
  101. package/dist/src/utils/environment-analysis.js +329 -0
  102. package/dist/src/utils/environment-analysis.js.map +1 -0
  103. package/dist/src/utils/file-system.d.ts +63 -0
  104. package/dist/src/utils/file-system.d.ts.map +1 -0
  105. package/dist/src/utils/file-system.js +189 -0
  106. package/dist/src/utils/file-system.js.map +1 -0
  107. package/dist/src/utils/output-masking.d.ts +45 -0
  108. package/dist/src/utils/output-masking.d.ts.map +1 -0
  109. package/dist/src/utils/output-masking.js +200 -0
  110. package/dist/src/utils/output-masking.js.map +1 -0
  111. package/dist/src/utils/research-documentation.d.ts +58 -0
  112. package/dist/src/utils/research-documentation.d.ts.map +1 -0
  113. package/dist/src/utils/research-documentation.js +438 -0
  114. package/dist/src/utils/research-documentation.js.map +1 -0
  115. package/dist/src/utils/research-integration.d.ts +89 -0
  116. package/dist/src/utils/research-integration.d.ts.map +1 -0
  117. package/dist/src/utils/research-integration.js +432 -0
  118. package/dist/src/utils/research-integration.js.map +1 -0
  119. package/dist/src/utils/research-questions.d.ts +97 -0
  120. package/dist/src/utils/research-questions.d.ts.map +1 -0
  121. package/dist/src/utils/research-questions.js +319 -0
  122. package/dist/src/utils/research-questions.js.map +1 -0
  123. package/dist/src/utils/rule-format.d.ts +76 -0
  124. package/dist/src/utils/rule-format.d.ts.map +1 -0
  125. package/dist/src/utils/rule-format.js +257 -0
  126. package/dist/src/utils/rule-format.js.map +1 -0
  127. package/dist/src/utils/rule-generation.d.ts +86 -0
  128. package/dist/src/utils/rule-generation.d.ts.map +1 -0
  129. package/dist/src/utils/rule-generation.js +330 -0
  130. package/dist/src/utils/rule-generation.js.map +1 -0
  131. package/package.json +71 -0
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Security-focused prompts for content masking and secret detection
3
+ * Following prompt-driven development approach
4
+ */
5
+ /**
6
+ * AI prompt for detecting sensitive information patterns in content
7
+ */
8
+ export function generateSensitiveContentDetectionPrompt(content, contentType = 'general', userDefinedPatterns) {
9
+ return `
10
+ # Sensitive Information Detection Request
11
+
12
+ Please analyze the following content and identify any sensitive information that should be masked or redacted.
13
+
14
+ ## Content Type
15
+ ${contentType}
16
+
17
+ ## Content to Analyze
18
+ \`\`\`
19
+ ${content.slice(0, 5000)}${content.length > 5000 ? '\n... (content truncated for analysis)' : ''}
20
+ \`\`\`
21
+
22
+ ${userDefinedPatterns
23
+ ? `## User-Defined Sensitive Patterns
24
+ ${userDefinedPatterns.map(pattern => `- ${pattern}`).join('\n')}
25
+ `
26
+ : ''}
27
+
28
+ ## Detection Requirements
29
+
30
+ Please identify ALL instances of sensitive information including:
31
+
32
+ ### 🔑 **API Keys & Tokens**
33
+ - API keys (AWS, Google, GitHub, Stripe, etc.)
34
+ - Access tokens, bearer tokens, JWT tokens
35
+ - OAuth client secrets and refresh tokens
36
+ - Service account keys and credentials
37
+ - Database connection tokens
38
+
39
+ ### 🔐 **Credentials & Authentication**
40
+ - Passwords, passphrases, PINs
41
+ - Private keys (RSA, SSH, SSL/TLS certificates)
42
+ - Database usernames and passwords
43
+ - SMTP credentials
44
+ - FTP/SFTP credentials
45
+
46
+ ### 🌐 **Connection Strings & URLs**
47
+ - Database connection strings with credentials
48
+ - Redis/MongoDB connection URLs with auth
49
+ - SMTP server configurations with passwords
50
+ - Internal URLs with embedded credentials
51
+ - Cloud service endpoints with keys
52
+
53
+ ### 📧 **Personal & Sensitive Data**
54
+ - Email addresses (unless clearly public)
55
+ - Phone numbers
56
+ - IP addresses (internal/private ranges)
57
+ - Social Security Numbers, credit card numbers
58
+ - Personal names in sensitive contexts
59
+
60
+ ### 🏢 **Business Sensitive Information**
61
+ - Internal server names and hostnames
62
+ - Internal network configurations
63
+ - Proprietary algorithms or business logic
64
+ - Customer data or identifiers
65
+ - Financial information
66
+
67
+ ## Analysis Output Format
68
+
69
+ Please provide your analysis in the following JSON format:
70
+
71
+ \`\`\`json
72
+ {
73
+ "hasSensitiveContent": true/false,
74
+ "detectedItems": [
75
+ {
76
+ "type": "api_key|password|private_key|connection_string|email|phone|ip_address|other",
77
+ "category": "authentication|network|personal|business|crypto",
78
+ "content": "the actual sensitive content found",
79
+ "startPosition": 123,
80
+ "endPosition": 156,
81
+ "confidence": 0.0-1.0,
82
+ "reasoning": "why this is considered sensitive",
83
+ "severity": "low|medium|high|critical",
84
+ "suggestedMask": "how to mask this content"
85
+ }
86
+ ],
87
+ "recommendations": [
88
+ "specific recommendations for handling this content"
89
+ ],
90
+ "overallRisk": "low|medium|high|critical",
91
+ "summary": "brief summary of findings"
92
+ }
93
+ \`\`\`
94
+
95
+ ## Detection Guidelines
96
+
97
+ 1. **Be Conservative**: When in doubt, flag as potentially sensitive
98
+ 2. **Context Matters**: Consider the context and content type
99
+ 3. **Confidence Scoring**: Rate your confidence in each detection
100
+ 4. **Severity Assessment**: Evaluate the risk level of exposure
101
+ 5. **Practical Masking**: Suggest appropriate masking strategies
102
+
103
+ ## Masking Strategies
104
+
105
+ - **Full Redaction**: \`[REDACTED]\` for highly sensitive content
106
+ - **Partial Masking**: \`sk-...****\` for API keys (show prefix only)
107
+ - **Type Indication**: \`[API_KEY_REDACTED]\` for specific types
108
+ - **Placeholder**: \`<YOUR_API_KEY>\` for documentation examples
109
+ - **Environment Variable**: \`\${API_KEY}\` for configuration templates
110
+
111
+ Please analyze thoroughly and provide detailed, actionable results.
112
+ `;
113
+ }
114
+ /**
115
+ * AI prompt for intelligent content masking decisions
116
+ */
117
+ export function generateContentMaskingPrompt(content, detectedSensitiveItems, maskingStrategy = 'full') {
118
+ return `
119
+ # Content Masking Request
120
+
121
+ Please apply intelligent masking to the following content based on detected sensitive information.
122
+
123
+ ## Original Content
124
+ \`\`\`
125
+ ${content}
126
+ \`\`\`
127
+
128
+ ## Detected Sensitive Items
129
+ ${detectedSensitiveItems
130
+ .map((item, index) => `
131
+ ### Item ${index + 1}
132
+ - **Type**: ${item.type}
133
+ - **Content**: ${item.content}
134
+ - **Position**: ${item.startPosition}-${item.endPosition}
135
+ - **Severity**: ${item.severity}
136
+ `)
137
+ .join('')}
138
+
139
+ ## Masking Strategy
140
+ ${maskingStrategy}
141
+
142
+ ## Masking Requirements
143
+
144
+ Please apply appropriate masking based on the strategy:
145
+
146
+ ### **Full Masking**
147
+ - Replace entire sensitive content with \`[REDACTED]\`
148
+ - Maintain original content structure and readability
149
+ - Preserve context for understanding
150
+
151
+ ### **Partial Masking**
152
+ - Show safe prefix/suffix, mask middle portion
153
+ - API keys: \`sk-...****\` or \`ghp_...****\`
154
+ - Emails: \`user...@domain.com\`
155
+ - IPs: \`192.168.*.***\`
156
+
157
+ ### **Placeholder Masking**
158
+ - Replace with descriptive placeholders
159
+ - \`<YOUR_API_KEY>\`, \`<DATABASE_PASSWORD>\`
160
+ - Maintain documentation value
161
+
162
+ ### **Environment Variable Masking**
163
+ - Replace with environment variable references
164
+ - \`\${API_KEY}\`, \`\${DATABASE_URL}\`
165
+ - Suitable for configuration files
166
+
167
+ ## Output Format
168
+
169
+ Please provide the masked content in the following JSON format:
170
+
171
+ \`\`\`json
172
+ {
173
+ "maskedContent": "the content with sensitive information masked",
174
+ "maskingApplied": [
175
+ {
176
+ "originalContent": "sensitive content that was masked",
177
+ "maskedWith": "what it was replaced with",
178
+ "position": "start-end position",
179
+ "reason": "why this masking approach was chosen"
180
+ }
181
+ ],
182
+ "preservedStructure": true/false,
183
+ "readabilityScore": 0.0-1.0,
184
+ "securityScore": 0.0-1.0,
185
+ "recommendations": [
186
+ "additional security recommendations"
187
+ ]
188
+ }
189
+ \`\`\`
190
+
191
+ ## Masking Guidelines
192
+
193
+ 1. **Preserve Functionality**: Don't break code syntax or structure
194
+ 2. **Maintain Context**: Keep enough context for understanding
195
+ 3. **Consistent Approach**: Use consistent masking patterns
196
+ 4. **Documentation Friendly**: Ensure masked content is still useful
197
+ 5. **Security First**: Prioritize security over convenience
198
+
199
+ Please apply intelligent masking that balances security with usability.
200
+ `;
201
+ }
202
+ /**
203
+ * AI prompt for user-defined sensitive pattern configuration
204
+ */
205
+ export function generateCustomPatternConfigurationPrompt(projectContext, existingPatterns) {
206
+ return `
207
+ # Custom Sensitive Pattern Configuration
208
+
209
+ Please help configure custom sensitive information patterns for this specific project.
210
+
211
+ ## Project Context
212
+ \`\`\`
213
+ ${projectContext}
214
+ \`\`\`
215
+
216
+ ${existingPatterns
217
+ ? `## Existing Patterns
218
+ ${existingPatterns.map(pattern => `- ${pattern}`).join('\n')}
219
+ `
220
+ : ''}
221
+
222
+ ## Configuration Requirements
223
+
224
+ Based on the project context, please suggest custom sensitive patterns that should be detected and masked.
225
+
226
+ Consider:
227
+
228
+ ### **Project-Specific Patterns**
229
+ - Custom API endpoints or service URLs
230
+ - Internal service names or identifiers
231
+ - Project-specific configuration keys
232
+ - Custom authentication schemes
233
+ - Business-specific data formats
234
+
235
+ ### **Technology-Specific Patterns**
236
+ - Framework-specific configuration patterns
237
+ - Database-specific connection formats
238
+ - Cloud provider specific identifiers
239
+ - Container orchestration secrets
240
+ - CI/CD specific variables
241
+
242
+ ### **Domain-Specific Patterns**
243
+ - Industry-specific identifiers
244
+ - Regulatory compliance requirements
245
+ - Customer-specific data formats
246
+ - Partner integration credentials
247
+ - Third-party service configurations
248
+
249
+ ## Output Format
250
+
251
+ Please provide custom pattern configuration in JSON format:
252
+
253
+ \`\`\`json
254
+ {
255
+ "customPatterns": [
256
+ {
257
+ "name": "pattern name",
258
+ "description": "what this pattern detects",
259
+ "regex": "regular expression pattern",
260
+ "category": "api_key|credential|identifier|url|other",
261
+ "severity": "low|medium|high|critical",
262
+ "examples": ["example matches"],
263
+ "falsePositives": ["potential false positives to watch for"],
264
+ "maskingStrategy": "full|partial|placeholder|environment"
265
+ }
266
+ ],
267
+ "recommendations": [
268
+ "additional security recommendations for this project"
269
+ ],
270
+ "integrationNotes": [
271
+ "notes on integrating these patterns with existing detection"
272
+ ]
273
+ }
274
+ \`\`\`
275
+
276
+ ## Pattern Guidelines
277
+
278
+ 1. **Specific but Flexible**: Patterns should be specific to avoid false positives but flexible enough to catch variations
279
+ 2. **Performance Conscious**: Avoid overly complex regex that could impact performance
280
+ 3. **Maintainable**: Patterns should be easy to understand and modify
281
+ 4. **Context Aware**: Consider the specific technology stack and domain
282
+ 5. **Severity Appropriate**: Assign appropriate severity levels based on risk
283
+
284
+ Please provide thoughtful, project-specific pattern recommendations.
285
+ `;
286
+ }
287
+ //# sourceMappingURL=security-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-prompts.js","sourceRoot":"","sources":["../../../src/prompts/security-prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,UAAU,uCAAuC,CACrD,OAAe,EACf,cAA+E,SAAS,EACxF,mBAA8B;IAE9B,OAAO;;;;;;EAMP,WAAW;;;;EAIX,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE;;;EAI9F,mBAAmB;QACjB,CAAC,CAAC;EACJ,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAC9D;QACG,CAAC,CAAC,EACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFC,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAAe,EACf,sBAME,EACF,kBAAsE,MAAM;IAE5E,OAAO;;;;;;;EAOP,OAAO;;;;EAIP,sBAAsB;SACrB,GAAG,CACF,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;WACV,KAAK,GAAG,CAAC;cACN,IAAI,CAAC,IAAI;iBACN,IAAI,CAAC,OAAO;kBACX,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW;kBACtC,IAAI,CAAC,QAAQ;CAC9B,CACE;SACA,IAAI,CAAC,EAAE,CAAC;;;EAGT,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DhB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wCAAwC,CACtD,cAAsB,EACtB,gBAA2B;IAE3B,OAAO;;;;;;;EAOP,cAAc;;;EAId,gBAAgB;QACd,CAAC,CAAC;EACJ,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAC3D;QACG,CAAC,CAAC,EACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEC,CAAC;AACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * MCP Resource implementations using prompt-driven approach
3
+ * Generates structured data resources for architectural analysis
4
+ */
5
+ export interface ResourceGenerationResult {
6
+ data: any;
7
+ contentType: string;
8
+ lastModified: string;
9
+ cacheKey: string;
10
+ ttl: number;
11
+ }
12
+ /**
13
+ * Generate architectural knowledge graph resource
14
+ */
15
+ export declare function generateArchitecturalKnowledgeGraph(projectPath: string): Promise<ResourceGenerationResult>;
16
+ /**
17
+ * Generate analysis report resource
18
+ */
19
+ export declare function generateAnalysisReport(projectPath: string, focusAreas?: string[]): Promise<ResourceGenerationResult>;
20
+ /**
21
+ * Generate ADR list resource
22
+ */
23
+ export declare function generateAdrList(adrDirectory?: string): Promise<ResourceGenerationResult>;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,GAAG,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,wBAAsB,mCAAmC,CACvD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,wBAAwB,CAAC,CA4JnC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,wBAAwB,CAAC,CA2JnC;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,YAAY,GAAE,MAAoB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CA4JnC"}