@fairfox/polly 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
"// Message flow analysis - trace messages between contexts\n\nimport { Project, Node } from \"ts-morph\"\nimport type { MessageFlow, MessageStep } from \"../types/architecture\"\nimport type { MessageHandler } from \"../types/core\"\n\nexport class FlowAnalyzer {\n private project: Project\n private handlers: MessageHandler[]\n\n constructor(tsConfigPath: string, handlers: MessageHandler[]) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n this.handlers = handlers\n }\n\n /**\n * Analyze message flows between contexts\n */\n analyzeFlows(): MessageFlow[] {\n const flows: MessageFlow[] = []\n\n // Group handlers by message type\n const handlersByType = new Map<string, MessageHandler[]>()\n for (const handler of this.handlers) {\n if (!handlersByType.has(handler.messageType)) {\n handlersByType.set(handler.messageType, [])\n }\n handlersByType.get(handler.messageType)!.push(handler)\n }\n\n // For each message type, trace the flow\n for (const [messageType, handlers] of handlersByType) {\n // Find senders\n const senders = this.findMessageSenders(messageType)\n\n // For each sender, create a flow\n for (const sender of senders) {\n const recipients = handlers.map((h) => h.node)\n\n // Build sequence of steps\n const sequence = this.buildSequence(messageType, sender, handlers)\n\n // Extract flow metadata\n const flowMetadata = this.extractFlowMetadata(sender.file, sender.line)\n\n flows.push({\n messageType,\n from: sender.context,\n to: recipients,\n trigger: flowMetadata.trigger,\n flowName: flowMetadata.flowName,\n description: flowMetadata.description,\n sequence,\n })\n }\n }\n\n return flows\n }\n\n /**\n * Find all places where a message is sent\n * Supports: .send(), .emit(), postMessage(), ws.send(), broadcast(), etc.\n */\n private findMessageSenders(messageType: string): Array<{\n context: string\n file: string\n line: number\n }> {\n const senders: Array<{ context: string; file: string; line: number }> = []\n\n for (const sourceFile of this.project.getSourceFiles()) {\n const filePath = sourceFile.getFilePath()\n const context = this.inferContext(filePath)\n\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Pattern 1: .send() or .emit() calls (ws.send, socket.emit, bus.send, etc.)\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"send\" || methodName === \"emit\" || methodName === \"postMessage\" || methodName === \"broadcast\") {\n const args = node.getArguments()\n if (args.length > 0) {\n const firstArg = args[0]\n\n let msgType: string | undefined\n\n // Check if first argument is a string literal: send(\"MESSAGE\")\n if (Node.isStringLiteral(firstArg)) {\n msgType = firstArg.getLiteralValue()\n }\n // Check if first argument is an object literal: send({ type: \"MESSAGE\" })\n else if (Node.isObjectLiteralExpression(firstArg)) {\n const typeProperty = firstArg.getProperty(\"type\")\n if (typeProperty && Node.isPropertyAssignment(typeProperty)) {\n const initializer = typeProperty.getInitializer()\n if (initializer && Node.isStringLiteral(initializer)) {\n msgType = initializer.getLiteralValue()\n }\n }\n }\n\n if (msgType === messageType) {\n senders.push({\n context,\n file: filePath,\n line: node.getStartLineNumber(),\n })\n }\n }\n }\n }\n\n // Pattern 2: Standalone postMessage() calls (Web Workers, Window.postMessage)\n if (Node.isIdentifier(expression)) {\n if (expression.getText() === \"postMessage\") {\n const args = node.getArguments()\n if (args.length > 0) {\n const firstArg = args[0]\n let msgType: string | undefined\n\n if (Node.isStringLiteral(firstArg)) {\n msgType = firstArg.getLiteralValue()\n } else if (Node.isObjectLiteralExpression(firstArg)) {\n const typeProperty = firstArg.getProperty(\"type\")\n if (typeProperty && Node.isPropertyAssignment(typeProperty)) {\n const initializer = typeProperty.getInitializer()\n if (initializer && Node.isStringLiteral(initializer)) {\n msgType = initializer.getLiteralValue()\n }\n }\n }\n\n if (msgType === messageType) {\n senders.push({\n context,\n file: filePath,\n line: node.getStartLineNumber(),\n })\n }\n }\n }\n }\n }\n })\n }\n\n return senders\n }\n\n /**\n * Build sequence of steps for a message flow\n */\n private buildSequence(\n messageType: string,\n sender: { context: string; file: string; line: number },\n handlers: MessageHandler[]\n ): MessageStep[] {\n const steps: MessageStep[] = []\n let stepNumber = 1\n\n // Step 1: Send message\n steps.push({\n step: stepNumber++,\n action: `${sender.context}.send(${messageType})`,\n context: sender.context,\n location: {\n file: sender.file,\n line: sender.line,\n },\n })\n\n // Step 2+: Handle in each recipient context\n for (const handler of handlers) {\n steps.push({\n step: stepNumber++,\n action: `${handler.node}.handle(${messageType})`,\n context: handler.node,\n location: handler.location,\n })\n\n // Add substeps for any messages sent by this handler\n const subsends = this.findMessagesInHandler(handler)\n for (const subsend of subsends) {\n steps.push({\n step: stepNumber++,\n action: `${handler.node}.send(${subsend.messageType})`,\n context: handler.node,\n location: subsend.location,\n })\n }\n }\n\n return steps\n }\n\n /**\n * Find messages sent within a handler\n */\n private findMessagesInHandler(handler: MessageHandler): Array<{\n messageType: string\n location: { file: string; line: number }\n }> {\n const sends: Array<{ messageType: string; location: { file: string; line: number } }> = []\n\n const sourceFile = this.project.getSourceFile(handler.location.file)\n if (!sourceFile) return sends\n\n // Find the handler function at the given line\n const targetLine = handler.location.line\n\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const line = node.getStartLineNumber()\n\n // Rough heuristic: if it's near the handler line, it's probably in the handler\n if (Math.abs(line - targetLine) < 20) {\n const expression = node.getExpression()\n\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"send\" || methodName === \"emit\") {\n const args = node.getArguments()\n if (args.length > 0) {\n const firstArg = args[0]\n let messageType: string | undefined\n\n // Check if first argument is a string literal: send(\"MESSAGE\")\n if (Node.isStringLiteral(firstArg)) {\n messageType = firstArg.getLiteralValue()\n }\n // Check if first argument is an object literal: send({ type: \"MESSAGE\" })\n else if (Node.isObjectLiteralExpression(firstArg)) {\n const typeProperty = firstArg.getProperty(\"type\")\n if (typeProperty && Node.isPropertyAssignment(typeProperty)) {\n const initializer = typeProperty.getInitializer()\n if (initializer && Node.isStringLiteral(initializer)) {\n messageType = initializer.getLiteralValue()\n }\n }\n }\n\n if (messageType) {\n sends.push({\n messageType,\n location: {\n file: handler.location.file,\n line,\n },\n })\n }\n }\n }\n }\n }\n }\n })\n\n return sends\n }\n\n /**\n * Extract flow metadata from JSDoc annotations\n */\n private extractFlowMetadata(\n filePath: string,\n lineNumber: number\n ): {\n trigger?: string\n flowName?: string\n description?: string\n } {\n const sourceFile = this.project.getSourceFile(filePath)\n if (!sourceFile) return {}\n\n // Find the node at this line\n let targetNode: any = null\n\n sourceFile.forEachDescendant((node) => {\n if (node.getStartLineNumber() === lineNumber) {\n targetNode = node\n }\n })\n\n if (!targetNode) return {}\n\n // Look for JSDoc comments\n const jsDocs = targetNode.getJsDocs?.() || []\n if (jsDocs.length === 0) return {}\n\n const comment = jsDocs[0].getText()\n\n // Extract @flow annotation\n const flowMatch = comment.match(/@flow\\s+([^\\s]+)/)\n const flowName = flowMatch ? flowMatch[1] : undefined\n\n // Extract @trigger annotation\n const triggerMatch = comment.match(/@trigger\\s+(.+?)(?:\\n|$)/)\n const trigger = triggerMatch ? triggerMatch[1].trim() : undefined\n\n // Extract @description\n const descMatch = comment.match(/@description\\s+(.+?)(?:\\n|$)/s)\n const description = descMatch ? descMatch[1].trim() : undefined\n\n return { trigger, flowName, description }\n }\n\n /**\n * Infer context from file path\n */\n private inferContext(filePath: string): string {\n const path = filePath.toLowerCase()\n\n // Chrome extension contexts\n if (path.includes(\"/background/\") || path.includes(\"\\\\background\\\\\")) {\n return \"background\"\n }\n if (path.includes(\"/content/\") || path.includes(\"\\\\content\\\\\")) {\n return \"content\"\n }\n if (path.includes(\"/popup/\") || path.includes(\"\\\\popup\\\\\")) {\n return \"popup\"\n }\n if (path.includes(\"/devtools/\") || path.includes(\"\\\\devtools\\\\\")) {\n return \"devtools\"\n }\n if (path.includes(\"/options/\") || path.includes(\"\\\\options\\\\\")) {\n return \"options\"\n }\n if (path.includes(\"/offscreen/\") || path.includes(\"\\\\offscreen\\\\\")) {\n return \"offscreen\"\n }\n\n // WebSocket/server app contexts\n if (path.includes(\"/server/\") || path.includes(\"\\\\server\\\\\") || path.includes(\"/server.\")) {\n return \"server\"\n }\n if (path.includes(\"/client/\") || path.includes(\"\\\\client\\\\\") || path.includes(\"/client.\")) {\n return \"client\"\n }\n\n // PWA/Worker contexts\n if (path.includes(\"/worker/\") || path.includes(\"\\\\worker\\\\\") || path.includes(\"service-worker\")) {\n return \"worker\"\n }\n\n return \"unknown\"\n }\n}\n",
|
|
11
11
|
"// External integration detection - find external APIs, services, etc.\n\nimport { Project, Node } from \"ts-morph\"\nimport type { ExternalIntegration, ExternalAPICall } from \"../types/architecture\"\n\nexport class IntegrationAnalyzer {\n private project: Project\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n }\n\n /**\n * Analyze external integrations in the codebase\n */\n analyzeIntegrations(): ExternalIntegration[] {\n const integrations = new Map<string, ExternalIntegration>()\n\n // Find all fetch() calls\n const fetchCalls = this.findFetchCalls()\n for (const call of fetchCalls) {\n this.addOrMergeIntegration(integrations, this.createAPIIntegration(call))\n }\n\n // Find WebSocket connections\n const websockets = this.findWebSockets()\n for (const ws of websockets) {\n this.addOrMergeIntegration(integrations, this.createWebSocketIntegration(ws))\n }\n\n // Find external script imports\n const externalScripts = this.findExternalScripts()\n for (const script of externalScripts) {\n this.addOrMergeIntegration(integrations, script)\n }\n\n return Array.from(integrations.values())\n }\n\n /**\n * Find all fetch() API calls\n */\n private findFetchCalls(): Array<{\n url: string\n method: string\n file: string\n line: number\n description?: string\n }> {\n const calls: Array<{\n url: string\n method: string\n file: string\n line: number\n description?: string\n }> = []\n\n for (const sourceFile of this.project.getSourceFiles()) {\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Check for fetch() calls\n if (Node.isIdentifier(expression) && expression.getText() === \"fetch\") {\n const args = node.getArguments()\n if (args.length > 0) {\n // Extract URL\n const urlArg = args[0]\n let url: string | null = null\n\n if (Node.isStringLiteral(urlArg)) {\n url = urlArg.getLiteralValue()\n } else if (Node.isTemplateExpression(urlArg)) {\n // Try to extract base URL from template\n url = this.extractBaseURL(urlArg.getText())\n }\n\n if (url) {\n // Extract method\n let method = \"GET\" // Default\n if (args.length > 1 && Node.isObjectLiteralExpression(args[1])) {\n const options = args[1]\n const methodProp = options.getProperty(\"method\")\n if (\n methodProp &&\n Node.isPropertyAssignment(methodProp)\n ) {\n const initializer = methodProp.getInitializer()\n if (initializer && Node.isStringLiteral(initializer)) {\n method = initializer.getLiteralValue().toUpperCase()\n }\n }\n }\n\n // Extract description from JSDoc\n const description = this.extractJSDocDescription(node)\n\n calls.push({\n url,\n method,\n file: sourceFile.getFilePath(),\n line: node.getStartLineNumber(),\n description,\n })\n }\n }\n }\n }\n })\n }\n\n return calls\n }\n\n /**\n * Find WebSocket connections\n */\n private findWebSockets(): Array<{\n url: string\n file: string\n line: number\n description?: string\n }> {\n const websockets: Array<{\n url: string\n file: string\n line: number\n description?: string\n }> = []\n\n for (const sourceFile of this.project.getSourceFiles()) {\n sourceFile.forEachDescendant((node) => {\n if (Node.isNewExpression(node)) {\n const expression = node.getExpression()\n\n // Check for new WebSocket()\n if (Node.isIdentifier(expression) && expression.getText() === \"WebSocket\") {\n const args = node.getArguments()\n if (args.length > 0 && Node.isStringLiteral(args[0])) {\n const url = args[0].getLiteralValue()\n const description = this.extractJSDocDescription(node)\n\n websockets.push({\n url,\n file: sourceFile.getFilePath(),\n line: node.getStartLineNumber(),\n description,\n })\n }\n }\n }\n })\n }\n\n return websockets\n }\n\n /**\n * Find external script dependencies (from imports)\n */\n private findExternalScripts(): ExternalIntegration[] {\n const scripts: ExternalIntegration[] = []\n const seen = new Set<string>()\n\n for (const sourceFile of this.project.getSourceFiles()) {\n for (const importDecl of sourceFile.getImportDeclarations()) {\n const moduleSpecifier = importDecl.getModuleSpecifierValue()\n\n // Only consider external packages (not relative imports)\n if (!moduleSpecifier.startsWith(\".\") && !moduleSpecifier.startsWith(\"/\")) {\n // Extract package name (handle scoped packages)\n const packageName = moduleSpecifier.startsWith(\"@\")\n ? moduleSpecifier.split(\"/\").slice(0, 2).join(\"/\")\n : moduleSpecifier.split(\"/\")[0]\n\n if (!seen.has(packageName)) {\n seen.add(packageName)\n\n scripts.push({\n type: \"external-script\",\n name: packageName,\n technology: \"npm package\",\n usedIn: [sourceFile.getFilePath()],\n description: `External dependency: ${packageName}`,\n })\n }\n }\n }\n }\n\n return scripts\n }\n\n /**\n * Create API integration from fetch call\n */\n private createAPIIntegration(call: {\n url: string\n method: string\n file: string\n line: number\n description?: string\n }): ExternalIntegration {\n // Extract base URL\n const baseURL = this.extractBaseURL(call.url)\n\n // Infer name from URL\n const name = this.inferAPIName(baseURL)\n\n return {\n type: \"api\",\n name,\n technology: \"REST API\",\n url: baseURL,\n usedIn: [call.file],\n description: call.description || `External API: ${name}`,\n calls: [\n {\n method: call.method,\n endpoint: call.url,\n location: {\n file: call.file,\n line: call.line,\n },\n description: call.description,\n },\n ],\n }\n }\n\n /**\n * Create WebSocket integration\n */\n private createWebSocketIntegration(ws: {\n url: string\n file: string\n line: number\n description?: string\n }): ExternalIntegration {\n const name = this.inferAPIName(ws.url)\n\n return {\n type: \"websocket\",\n name,\n technology: \"WebSocket\",\n url: ws.url,\n usedIn: [ws.file],\n description: ws.description || `WebSocket connection: ${name}`,\n }\n }\n\n /**\n * Extract base URL from full URL or template\n */\n private extractBaseURL(url: string): string {\n // Remove template parts\n url = url.replace(/\\$\\{[^}]+\\}/g, \"\")\n url = url.replace(/`/g, \"\")\n\n try {\n const parsed = new URL(url)\n return `${parsed.protocol}//${parsed.host}`\n } catch {\n // If parsing fails, try to extract domain\n const match = url.match(/https?:\\/\\/([^/]+)/)\n return match ? match[0] : url\n }\n }\n\n /**\n * Infer API name from URL\n */\n private inferAPIName(url: string): string {\n try {\n const parsed = new URL(url)\n const hostname = parsed.hostname\n\n // Remove www. prefix\n const cleanHost = hostname.replace(/^www\\./, \"\")\n\n // Take first part of domain\n const parts = cleanHost.split(\".\")\n if (parts.length > 0) {\n // Capitalize first letter\n return parts[0].charAt(0).toUpperCase() + parts[0].slice(1) + \" API\"\n }\n } catch {\n // Fallback\n }\n\n return \"External API\"\n }\n\n /**\n * Add or merge integration into map\n */\n private addOrMergeIntegration(\n map: Map<string, ExternalIntegration>,\n integration: ExternalIntegration\n ): void {\n const key = `${integration.type}:${integration.name}`\n\n if (map.has(key)) {\n const existing = map.get(key)!\n\n // Merge usedIn\n existing.usedIn = [...new Set([...existing.usedIn, ...integration.usedIn])]\n\n // Merge calls\n if (integration.calls && existing.calls) {\n existing.calls.push(...integration.calls)\n } else if (integration.calls) {\n existing.calls = integration.calls\n }\n } else {\n map.set(key, integration)\n }\n }\n\n /**\n * Extract JSDoc description from node\n */\n private extractJSDocDescription(node: any): string | undefined {\n const jsDocs = node.getJsDocs?.() || []\n if (jsDocs.length === 0) return undefined\n\n const comment = jsDocs[0].getDescription().trim()\n return comment || undefined\n }\n}\n",
|
|
12
12
|
"// Handler extraction from TypeScript code\n// Extracts message handlers and their state mutations\n\nimport { Project, type SourceFile, SyntaxKind, Node } from \"ts-morph\"\nimport type { MessageHandler, StateAssignment, VerificationCondition } from \"../types\"\nimport { RelationshipExtractor } from \"./relationships\"\n\nexport interface HandlerAnalysis {\n handlers: MessageHandler[]\n messageTypes: Set<string>\n}\n\nexport class HandlerExtractor {\n private project: Project\n private typeGuardCache: WeakMap<SourceFile, Map<string, string>>\n private relationshipExtractor: RelationshipExtractor\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n this.typeGuardCache = new WeakMap()\n this.relationshipExtractor = new RelationshipExtractor()\n }\n\n /**\n * Extract all message handlers from the codebase\n */\n extractHandlers(): HandlerAnalysis {\n const handlers: MessageHandler[] = []\n const messageTypes = new Set<string>()\n\n // Find all source files\n const sourceFiles = this.project.getSourceFiles()\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Loaded ${sourceFiles.length} source files`)\n if (sourceFiles.length <= 20) {\n // Only log file names if there aren't too many\n for (const sf of sourceFiles) {\n console.log(`[DEBUG] - ${sf.getFilePath()}`)\n }\n }\n }\n\n for (const sourceFile of sourceFiles) {\n const fileHandlers = this.extractFromFile(sourceFile)\n handlers.push(...fileHandlers)\n\n for (const handler of fileHandlers) {\n messageTypes.add(handler.messageType)\n }\n }\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Total handlers extracted: ${handlers.length}`)\n }\n\n return {\n handlers,\n messageTypes,\n }\n }\n\n /**\n * Extract handlers from a single source file\n */\n private extractFromFile(sourceFile: SourceFile): MessageHandler[] {\n const handlers: MessageHandler[] = []\n const filePath = sourceFile.getFilePath()\n\n // Determine context from file path\n const context = this.inferContext(filePath)\n\n // Find all handler patterns\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Pattern 1: .on() calls (bus.on, ws.on, socket.on, etc.)\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"on\" || methodName === \"addEventListener\") {\n const handler = this.extractHandler(node, context, filePath)\n if (handler) {\n handlers.push(handler)\n }\n }\n }\n }\n\n // Pattern 2: Switch/case message routers\n if (Node.isSwitchStatement(node)) {\n const switchHandlers = this.extractSwitchCaseHandlers(node, context, filePath)\n handlers.push(...switchHandlers)\n }\n\n // Pattern 3: Handler map patterns (const handlers = { 'EVENT': fn })\n if (Node.isVariableDeclaration(node)) {\n const mapHandlers = this.extractHandlerMapPattern(node, context, filePath)\n handlers.push(...mapHandlers)\n }\n\n // Pattern 4: Type guard if/else-if chains\n // Only process root if statements, not else-if statements (they're handled by the chain walker)\n if (Node.isIfStatement(node)) {\n const parent = node.getParent()\n const isElseIf = parent && Node.isIfStatement(parent)\n\n if (!isElseIf) {\n const typeGuardHandlers = this.extractTypeGuardHandlers(node, context, filePath)\n handlers.push(...typeGuardHandlers)\n }\n }\n })\n\n return handlers\n }\n\n /**\n * Extract handler details from a .on() call expression\n */\n private extractHandler(\n callExpr: any,\n context: string,\n filePath: string\n ): MessageHandler | null {\n const args = callExpr.getArguments()\n\n if (args.length < 2) {\n return null\n }\n\n // First argument should be the message type (string literal)\n const messageTypeArg = args[0]\n let messageType: string | null = null\n\n if (Node.isStringLiteral(messageTypeArg)) {\n messageType = messageTypeArg.getLiteralValue()\n } else if (Node.isTemplateExpression(messageTypeArg)) {\n // Handle template literals if needed\n messageType = messageTypeArg.getText().replace(/[`'\"]/g, \"\")\n }\n\n if (!messageType) {\n return null\n }\n\n // Second argument is the handler function\n const handlerArg = args[1]\n const assignments: StateAssignment[] = []\n const preconditions: VerificationCondition[] = []\n const postconditions: VerificationCondition[] = []\n\n // Parse the handler function for state assignments and verification conditions\n if (Node.isArrowFunction(handlerArg) || Node.isFunctionExpression(handlerArg)) {\n this.extractAssignments(handlerArg, assignments)\n this.extractVerificationConditions(handlerArg, preconditions, postconditions)\n }\n\n const line = callExpr.getStartLineNumber()\n\n // Extract relationships from handler code\n const sourceFile = callExpr.getSourceFile()\n const handlerName = `${messageType}_handler`\n let relationships = undefined\n\n if (Node.isArrowFunction(handlerArg) || Node.isFunctionExpression(handlerArg)) {\n const detectedRelationships = this.relationshipExtractor.extractFromHandler(\n handlerArg,\n sourceFile,\n handlerName\n )\n if (detectedRelationships.length > 0) {\n relationships = detectedRelationships\n }\n }\n\n return {\n messageType,\n node: context, // Renamed from 'context' to 'node' for generalization\n assignments,\n preconditions,\n postconditions,\n location: {\n file: filePath,\n line,\n },\n relationships,\n }\n }\n\n /**\n * Extract state assignments from a handler function\n */\n private extractAssignments(funcNode: any, assignments: StateAssignment[]): void {\n funcNode.forEachDescendant((node: any) => {\n // Look for assignment expressions: state.field = value\n if (Node.isBinaryExpression(node)) {\n const operator = node.getOperatorToken().getText()\n\n if (operator === \"=\") {\n const left = node.getLeft()\n const right = node.getRight()\n\n // Check if left side is a state property access\n if (Node.isPropertyAccessExpression(left)) {\n const fieldPath = this.getPropertyPath(left)\n\n // Check if this is a state access\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6) // Remove \"state.\" prefix\n const value = this.extractValue(right)\n\n if (value !== undefined) {\n assignments.push({\n field,\n value,\n })\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract verification conditions (requires/ensures) from a handler function\n */\n private extractVerificationConditions(\n funcNode: any,\n preconditions: VerificationCondition[],\n postconditions: VerificationCondition[]\n ): void {\n const body = funcNode.getBody()\n\n // Get all statements in the function body\n const statements = Node.isBlock(body) ? body.getStatements() : [body]\n\n statements.forEach((statement: any, index: number) => {\n // Look for expression statements that are function calls\n if (Node.isExpressionStatement(statement)) {\n const expr = statement.getExpression()\n\n if (Node.isCallExpression(expr)) {\n const callee = expr.getExpression()\n\n if (Node.isIdentifier(callee)) {\n const functionName = callee.getText()\n\n if (functionName === \"requires\") {\n // Extract precondition\n const condition = this.extractCondition(expr)\n if (condition) {\n preconditions.push(condition)\n }\n } else if (functionName === \"ensures\") {\n // Extract postcondition\n const condition = this.extractCondition(expr)\n if (condition) {\n postconditions.push(condition)\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract condition from a requires() or ensures() call\n */\n private extractCondition(callExpr: any): VerificationCondition | null {\n const args = callExpr.getArguments()\n\n if (args.length === 0) {\n return null\n }\n\n // First argument is the condition expression\n const conditionArg = args[0]\n const expression = conditionArg.getText()\n\n // Second argument (optional) is the message\n let message: string | undefined\n if (args.length >= 2 && Node.isStringLiteral(args[1])) {\n message = args[1].getLiteralValue()\n }\n\n const line = callExpr.getStartLineNumber()\n const column = callExpr.getStartLinePos()\n\n return {\n expression,\n message,\n location: {\n line,\n column,\n },\n }\n }\n\n /**\n * Get the full property access path (e.g., \"state.user.loggedIn\")\n */\n private getPropertyPath(node: any): string {\n const parts: string[] = []\n\n let current = node\n while (Node.isPropertyAccessExpression(current)) {\n parts.unshift(current.getName())\n current = current.getExpression()\n }\n\n // Add the base identifier\n if (Node.isIdentifier(current)) {\n parts.unshift(current.getText())\n }\n\n return parts.join(\".\")\n }\n\n /**\n * Extract a literal value from an expression\n */\n private extractValue(node: any): string | boolean | number | null | undefined {\n if (Node.isStringLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (Node.isNumericLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (node.getKind() === SyntaxKind.TrueKeyword) {\n return true\n }\n\n if (node.getKind() === SyntaxKind.FalseKeyword) {\n return false\n }\n\n if (node.getKind() === SyntaxKind.NullKeyword) {\n return null\n }\n\n // For complex expressions, return undefined (can't extract)\n return undefined\n }\n\n /**\n * Extract handlers from switch/case message router patterns\n * Detects: switch(message.type) { case 'EVENT': handler(); }\n */\n private extractSwitchCaseHandlers(\n switchNode: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n // Check if switching on message.type or similar\n const expression = switchNode.getExpression()\n const expressionText = expression.getText()\n\n // Look for patterns like: message.type, data.type, msg.type, event.type\n if (!/\\.(type|kind|event|action)/.test(expressionText)) {\n return handlers\n }\n\n // Extract handlers from each case clause\n const caseClauses = switchNode.getClauses()\n for (const clause of caseClauses) {\n if (Node.isCaseClause(clause)) {\n const caseExpr = clause.getExpression()\n\n // Extract message type from case expression\n let messageType: string | null = null\n if (Node.isStringLiteral(caseExpr)) {\n messageType = caseExpr.getLiteralValue()\n }\n\n if (messageType) {\n const line = clause.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed switch statements\n }\n\n return handlers\n }\n\n /**\n * Extract handlers from handler map patterns\n * Detects: const handlers = { 'EVENT': handlerFn, ... }\n */\n private extractHandlerMapPattern(\n varDecl: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n const initializer = varDecl.getInitializer()\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n return handlers\n }\n\n // Check if variable name suggests it's a handler map\n const varName = varDecl.getName().toLowerCase()\n if (!/(handler|listener|callback|event)s?/.test(varName)) {\n return handlers\n }\n\n // Extract handlers from object properties\n const properties = initializer.getProperties()\n for (const prop of properties) {\n if (Node.isPropertyAssignment(prop)) {\n const nameNode = prop.getNameNode()\n let messageType: string | null = null\n\n if (Node.isStringLiteral(nameNode)) {\n messageType = nameNode.getLiteralValue()\n } else if (Node.isIdentifier(nameNode)) {\n messageType = nameNode.getText()\n }\n\n if (messageType) {\n const line = prop.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed object literals\n }\n\n return handlers\n }\n\n /**\n * Extract handlers from type guard if/else-if patterns\n * Detects: if (isQueryMessage(msg)) { handleQuery(msg); }\n */\n private extractTypeGuardHandlers(\n ifNode: Node,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n // Get the source file to find type predicates\n const sourceFile = ifNode.getSourceFile()\n\n // Use cached type guards or compute if not cached\n let typeGuards = this.typeGuardCache.get(sourceFile)\n if (!typeGuards) {\n typeGuards = this.findTypePredicateFunctions(sourceFile)\n this.typeGuardCache.set(sourceFile, typeGuards)\n }\n\n // DEBUG: Log local type guards found\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] File: ${sourceFile.getBaseName()}`)\n console.log(`[DEBUG] Local type guards found: ${typeGuards.size}`)\n if (typeGuards.size > 0) {\n for (const [name, type] of typeGuards.entries()) {\n console.log(`[DEBUG] - ${name} → ${type}`)\n }\n }\n }\n\n // Don't return early - we still want to try imported type guards\n // even if no local type guards exist\n\n // Process the if statement and all else-if chains\n let currentIf: Node = ifNode\n\n while (currentIf) {\n const handler = this.extractHandlerFromIfClause(currentIf, typeGuards, context, filePath)\n if (handler) {\n handlers.push(handler)\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Found handler: ${handler.messageType} at line ${handler.location.line}`)\n }\n }\n\n // Check for else-if\n const elseStatement = currentIf.getElseStatement()\n if (elseStatement && Node.isIfStatement(elseStatement)) {\n currentIf = elseStatement\n } else {\n break\n }\n }\n } catch (error) {\n // DEBUG: Log errors\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Error in extractTypeGuardHandlers: ${error}`)\n }\n }\n\n return handlers\n }\n\n /**\n * Extract handler from a single if clause\n */\n private extractHandlerFromIfClause(\n ifNode: Node,\n typeGuards: Map<string, string>,\n context: string,\n filePath: string\n ): MessageHandler | null {\n try {\n // Get condition expression\n const condition = ifNode.getExpression()\n\n // Check if condition is a call expression (function call)\n if (!Node.isCallExpression(condition)) {\n return null\n }\n\n // Get the function being called\n const funcExpr = condition.getExpression()\n let funcName: string | undefined\n\n if (Node.isIdentifier(funcExpr)) {\n funcName = funcExpr.getText()\n }\n\n if (process.env.POLLY_DEBUG && funcName) {\n console.log(`[DEBUG] Processing if condition with function: ${funcName}`)\n }\n\n // Try to find message type from local type guards first\n let messageType: string | undefined = undefined\n\n if (funcName && typeGuards.has(funcName)) {\n // Found in local file\n messageType = typeGuards.get(funcName)!\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Found in local type guards: ${funcName} → ${messageType}`)\n }\n } else if (Node.isIdentifier(funcExpr)) {\n // Not found locally - try to resolve from imports\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Not found locally, trying import resolution for: ${funcName}`)\n }\n\n messageType = this.resolveImportedTypeGuard(funcExpr)\n }\n\n if (!messageType) {\n if (process.env.POLLY_DEBUG && funcName) {\n console.log(`[DEBUG] Could not resolve message type for: ${funcName}`)\n }\n return null\n }\n\n // Found a type guard call! Use the message type\n const line = ifNode.getStartLineNumber()\n\n // Extract relationships from the if block\n const sourceFile = ifNode.getSourceFile()\n const handlerName = `${messageType}_handler`\n let relationships = undefined\n\n const thenStatement = ifNode.getThenStatement()\n if (thenStatement) {\n const detectedRelationships = this.relationshipExtractor.extractFromHandler(\n thenStatement,\n sourceFile,\n handlerName\n )\n if (detectedRelationships.length > 0) {\n relationships = detectedRelationships\n }\n }\n\n return {\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n relationships,\n }\n } catch (error) {\n return null\n }\n }\n\n /**\n * Find all type predicate functions in a source file\n * Returns a map of function name → message type\n * Uses AST-based detection for consistency with imported type guard resolution\n */\n private findTypePredicateFunctions(sourceFile: SourceFile): Map<string, string> {\n const typeGuards = new Map<string, string>()\n\n sourceFile.forEachDescendant((node) => {\n if (Node.isFunctionDeclaration(node) || Node.isFunctionExpression(node) || Node.isArrowFunction(node)) {\n // Check the return type NODE (AST structure) for type predicate\n const returnTypeNode = node.getReturnTypeNode()\n\n if (returnTypeNode && Node.isTypePredicate(returnTypeNode)) {\n // Extract function name\n let functionName: string | undefined\n if (Node.isFunctionDeclaration(node)) {\n functionName = node.getName()\n } else if (Node.isFunctionExpression(node)) {\n const parent = node.getParent()\n if (Node.isVariableDeclaration(parent)) {\n functionName = parent.getName()\n }\n } else if (Node.isArrowFunction(node)) {\n const parent = node.getParent()\n if (Node.isVariableDeclaration(parent)) {\n functionName = parent.getName()\n }\n }\n\n if (functionName) {\n // Extract the type from the type predicate node\n const typeNode = returnTypeNode.getTypeNode()\n let messageType: string | null = null\n\n if (typeNode) {\n const typeName = typeNode.getText() // e.g., \"QueryMessage\"\n messageType = this.extractMessageTypeFromTypeName(typeName)\n }\n\n // Fallback: Analyze function body for msg.type === 'value'\n if (!messageType) {\n const body = node.getBody()\n if (body) {\n const bodyText = body.getText()\n const typeValueMatch = bodyText.match(/\\.type\\s*===?\\s*['\"](\\w+)['\"]/)\n if (typeValueMatch) {\n messageType = typeValueMatch[1]\n }\n }\n }\n\n if (messageType) {\n typeGuards.set(functionName, messageType)\n }\n }\n }\n }\n })\n\n return typeGuards\n }\n\n /**\n * Resolve type guard from imported function\n * Uses ts-morph symbol resolution to find definition across files\n * Checks AST structure, not resolved types (which can lose type predicate info)\n */\n private resolveImportedTypeGuard(identifier: any): string | null {\n try {\n const funcName = identifier.getText()\n\n // Get the definition nodes (where the function is defined)\n const definitions = identifier.getDefinitionNodes()\n\n if (definitions.length === 0) {\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] No definitions found for imported function: ${funcName}`)\n }\n return null\n }\n\n for (const def of definitions) {\n // Check if it's a function with type predicate return type\n if (Node.isFunctionDeclaration(def) ||\n Node.isFunctionExpression(def) ||\n Node.isArrowFunction(def)) {\n\n // Check the return type NODE (AST structure), not the resolved TYPE\n // This is critical: ts-morph returns \"boolean\" for type predicates when checking .getReturnType()\n // but the AST node structure preserves the actual type predicate\n const returnTypeNode = def.getReturnTypeNode()\n\n if (process.env.POLLY_DEBUG) {\n const returnType = def.getReturnType().getText()\n console.log(`[DEBUG] Function ${funcName} return type (resolved): ${returnType}`)\n console.log(`[DEBUG] Has return type node: ${!!returnTypeNode}`)\n console.log(`[DEBUG] Is type predicate node: ${returnTypeNode && Node.isTypePredicate(returnTypeNode)}`)\n }\n\n // Check if the return type node is a type predicate\n if (returnTypeNode && Node.isTypePredicate(returnTypeNode)) {\n // Extract the type from the type predicate node\n const typeNode = returnTypeNode.getTypeNode()\n\n if (typeNode) {\n const typeName = typeNode.getText() // e.g., \"QueryMessage\"\n const messageType = this.extractMessageTypeFromTypeName(typeName)\n\n if (messageType) {\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Resolved ${funcName} → ${messageType} (from AST type predicate)`)\n }\n return messageType\n }\n }\n }\n\n // Fallback: Analyze function body for msg.type === 'value'\n const body = def.getBody()\n if (body) {\n const bodyText = body.getText()\n const typeValueMatch = bodyText.match(/\\.type\\s*===?\\s*['\"](\\w+)['\"]/)\n if (typeValueMatch) {\n const messageType = typeValueMatch[1]\n\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Resolved ${funcName} → ${messageType} (from body)`)\n }\n\n return messageType\n }\n }\n }\n }\n } catch (error) {\n // DEBUG: Log errors\n if (process.env.POLLY_DEBUG) {\n console.log(`[DEBUG] Error resolving imported type guard: ${error}`)\n }\n }\n\n return null\n }\n\n /**\n * Extract message type from TypeScript type name\n * Examples:\n * QueryMessage → query\n * CommandMessage → command\n * SubscribeMessage → subscribe\n */\n private extractMessageTypeFromTypeName(typeName: string): string {\n // Remove common suffixes and convert to lowercase\n const messageType = typeName\n .replace(/Message$/, '')\n .replace(/Event$/, '')\n .replace(/Request$/, '')\n .replace(/Command$/, '')\n .replace(/Query$/, '')\n .toLowerCase()\n\n return messageType\n }\n\n /**\n * Infer the context (background, content, popup, etc.) from file path\n */\n private inferContext(filePath: string): string {\n const path = filePath.toLowerCase()\n\n // Chrome extension contexts\n if (path.includes(\"/background/\") || path.includes(\"\\\\background\\\\\")) {\n return \"background\"\n }\n if (path.includes(\"/content/\") || path.includes(\"\\\\content\\\\\")) {\n return \"content\"\n }\n if (path.includes(\"/popup/\") || path.includes(\"\\\\popup\\\\\")) {\n return \"popup\"\n }\n if (path.includes(\"/devtools/\") || path.includes(\"\\\\devtools\\\\\")) {\n return \"devtools\"\n }\n if (path.includes(\"/options/\") || path.includes(\"\\\\options\\\\\")) {\n return \"options\"\n }\n if (path.includes(\"/offscreen/\") || path.includes(\"\\\\offscreen\\\\\")) {\n return \"offscreen\"\n }\n\n // WebSocket/server app contexts\n if (path.includes(\"/server/\") || path.includes(\"\\\\server\\\\\") || path.includes(\"/server.\")) {\n return \"server\"\n }\n if (path.includes(\"/client/\") || path.includes(\"\\\\client\\\\\") || path.includes(\"/client.\")) {\n return \"client\"\n }\n\n // PWA/Worker contexts\n if (path.includes(\"/worker/\") || path.includes(\"\\\\worker\\\\\") || path.includes(\"service-worker\")) {\n return \"worker\"\n }\n\n return \"unknown\"\n }\n}\n\nexport function extractHandlers(tsConfigPath: string): HandlerAnalysis {\n const extractor = new HandlerExtractor(tsConfigPath)\n return extractor.extractHandlers()\n}\n",
|
|
13
|
-
"// Component relationship extraction from TypeScript code\n// Detects function calls, imports, and dependencies between components\n\nimport { Node, type SourceFile, SyntaxKind, type CallExpression } from \"ts-morph\";\n\n/**\n * Represents a relationship between components detected from code analysis\n */\nexport interface DetectedRelationship {\n\t/** Source component (handler, service, etc.) */\n\tfrom: string;\n\t/** Target component being called/used */\n\tto: string;\n\t/** Description of the relationship */\n\tdescription: string;\n\t/** Technology/method used (e.g., \"Function Call\", \"Import\", \"SQL\", \"HTTP\") */\n\ttechnology?: string;\n\t/** Confidence level of this detection */\n\tconfidence: \"high\" | \"medium\" | \"low\";\n\t/** Evidence supporting this detection */\n\tevidence: string[];\n}\n\n/**\n * Extracts component relationships from handler code\n */\nexport class RelationshipExtractor {\n\t/**\n\t * Extract relationships from a function/handler body\n\t */\n\textractFromHandler(\n\t\thandlerNode: Node,\n\t\tsourceFile: SourceFile,\n\t\thandlerName: string\n\t): DetectedRelationship[] {\n\t\tconst relationships: DetectedRelationship[] = [];\n\t\tconst visited = new Set<string>(); // Prevent infinite recursion\n\n\t\tthis.extractFromNode(handlerNode, sourceFile, handlerName, relationships, visited);\n\n\t\treturn this.deduplicateRelationships(relationships);\n\t}\n\n\t/**\n\t * Recursively extract relationships from a node and follow function calls\n\t */\n\tprivate extractFromNode(\n\t\tnode: Node,\n\t\tsourceFile: SourceFile,\n\t\thandlerName: string,\n\t\trelationships: DetectedRelationship[],\n\t\tvisited: Set<string>\n\t): void {\n\t\t// Pattern 1: Function calls within the handler\n\t\tnode.forEachDescendant((descendant) => {\n\t\t\tif (Node.isCallExpression(descendant)) {\n\t\t\t\tconst expr = descendant.getExpression();\n\n\t\t\t\t// Check if this is a local function call that we should follow\n\t\t\t\tif (Node.isIdentifier(expr)) {\n\t\t\t\t\tconst functionName = expr.getText();\n\n\t\t\t\t\t// Try to find the function definition in the same file\n\t\t\t\t\tconst functionDecl = sourceFile.getFunction(functionName);\n\n\t\t\t\t\tif (functionDecl && !visited.has(functionName)) {\n\t\t\t\t\t\t// Mark as visited to prevent infinite recursion\n\t\t\t\t\t\tvisited.add(functionName);\n\n\t\t\t\t\t\t// Recursively extract relationships from the called function\n\t\t\t\t\t\tconst body = functionDecl.getBody();\n\t\t\t\t\t\tif (body) {\n\t\t\t\t\t\t\tthis.extractFromNode(body, sourceFile, handlerName, relationships, visited);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Don't add this as a relationship itself - we're following the call\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check if this call expression has a property access expression\n\t\t\t\t// (e.g., userService.listUsers())\n\t\t\t\tif (Node.isPropertyAccessExpression(expr)) {\n\t\t\t\t\tconst rel = this.extractFromPropertyAccess(expr, handlerName);\n\t\t\t\t\tif (rel) {\n\t\t\t\t\t\trelationships.push(rel);\n\t\t\t\t\t\treturn; // Don't process further for this call expression\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Not a local function or property access - try to extract as a relationship\n\t\t\t\tconst rel = this.extractFromFunctionCall(descendant, handlerName, sourceFile);\n\t\t\t\tif (rel) {\n\t\t\t\t\trelationships.push(rel);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Pattern 3: Database queries (await db.query, await db.execute)\n\t\t\tif (Node.isAwaitExpression(descendant)) {\n\t\t\t\tconst rel = this.extractFromDatabaseCall(descendant, handlerName);\n\t\t\t\tif (rel) {\n\t\t\t\t\trelationships.push(rel);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Pattern 4: Fetch/HTTP calls\n\t\t\tif (\n\t\t\t\tNode.isCallExpression(descendant) &&\n\t\t\t\tdescendant.getExpression().getText() === \"fetch\"\n\t\t\t) {\n\t\t\t\tconst rel = this.extractFromFetchCall(descendant, handlerName);\n\t\t\t\tif (rel) {\n\t\t\t\t\trelationships.push(rel);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Extract relationship from a function call\n\t */\n\tprivate extractFromFunctionCall(\n\t\tcallExpr: CallExpression,\n\t\thandlerName: string,\n\t\tsourceFile: SourceFile\n\t): DetectedRelationship | null {\n\t\tconst expr = callExpr.getExpression();\n\t\tconst exprText = expr.getText();\n\n\t\t// Skip common utility functions and built-ins\n\t\tconst skipList = [\n\t\t\t\"console.\",\n\t\t\t\"JSON.\",\n\t\t\t\"Math.\",\n\t\t\t\"Object.\",\n\t\t\t\"Array.\",\n\t\t\t\"String.\",\n\t\t\t\"Number.\",\n\t\t\t\"Date.\",\n\t\t\t\"Promise.\",\n\t\t\t\"setTimeout\",\n\t\t\t\"setInterval\",\n\t\t\t\"clearTimeout\",\n\t\t\t\"clearInterval\",\n\t\t];\n\n\t\tif (skipList.some((skip) => exprText.startsWith(skip))) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Extract function name\n\t\tlet functionName = exprText;\n\t\tlet targetComponent: string | null = null;\n\n\t\t// Handle property access (e.g., db.getConnection() -> db_client)\n\t\tif (Node.isPropertyAccessExpression(expr)) {\n\t\t\tconst objectExpr = expr.getExpression();\n\t\t\tconst objectName = objectExpr.getText();\n\t\t\tconst methodName = expr.getName();\n\n\t\t\t// Map common patterns to component names\n\t\t\ttargetComponent = this.inferComponentFromCall(objectName, methodName);\n\n\t\t\tif (!targetComponent) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfunctionName = methodName;\n\t\t} else {\n\t\t\t// Direct function call - try to resolve from imports\n\t\t\ttargetComponent = this.resolveComponentFromImport(\n\t\t\t\texprText,\n\t\t\t\tsourceFile\n\t\t\t);\n\n\t\t\tif (!targetComponent) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tfrom: this.toComponentId(handlerName),\n\t\t\tto: targetComponent,\n\t\t\tdescription: `Calls ${functionName}()`,\n\t\t\ttechnology: \"Function Call\",\n\t\t\tconfidence: \"high\",\n\t\t\tevidence: [`Function call: ${exprText}`],\n\t\t};\n\t}\n\n\t/**\n\t * Extract relationship from property access chain\n\t */\n\tprivate extractFromPropertyAccess(\n\t\tpropAccess: Node,\n\t\thandlerName: string\n\t): DetectedRelationship | null {\n\t\tif (!Node.isPropertyAccessExpression(propAccess)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst fullChain = propAccess.getText();\n\t\tconst objectExpr = propAccess.getExpression();\n\t\tconst objectName = objectExpr.getText();\n\t\tconst methodName = propAccess.getName();\n\n\t\t// Map object name to component name\n\t\tconst targetComponent = this.inferComponentFromCall(objectName, methodName);\n\n\t\tif (!targetComponent) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfrom: this.toComponentId(handlerName),\n\t\t\tto: targetComponent,\n\t\t\tdescription: `Calls ${methodName}()`,\n\t\t\ttechnology: \"Function Call\",\n\t\t\tconfidence: \"high\",\n\t\t\tevidence: [`Property access: ${fullChain}`],\n\t\t};\n\t}\n\n\t/**\n\t * Extract relationship from database call\n\t */\n\tprivate extractFromDatabaseCall(\n\t\tawaitExpr: Node,\n\t\thandlerName: string\n\t): DetectedRelationship | null {\n\t\tif (!Node.isAwaitExpression(awaitExpr)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst innerExpr = awaitExpr.getExpression();\n\t\tif (!Node.isCallExpression(innerExpr)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst callExpr = innerExpr.getExpression().getText();\n\n\t\t// Detect database patterns\n\t\tif (\n\t\t\tcallExpr.includes(\"db.query\") ||\n\t\t\tcallExpr.includes(\"db.execute\") ||\n\t\t\tcallExpr.includes(\"db.select\") ||\n\t\t\tcallExpr.includes(\"db.insert\") ||\n\t\t\tcallExpr.includes(\"db.update\") ||\n\t\t\tcallExpr.includes(\"db.delete\")\n\t\t) {\n\t\t\tconst operation = this.inferDatabaseOperation(callExpr);\n\n\t\t\treturn {\n\t\t\t\tfrom: this.toComponentId(handlerName),\n\t\t\t\tto: \"database\",\n\t\t\t\tdescription: operation,\n\t\t\t\ttechnology: \"SQL\",\n\t\t\t\tconfidence: \"high\",\n\t\t\t\tevidence: [`Database call: ${callExpr}`],\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Extract relationship from fetch/HTTP call\n\t */\n\tprivate extractFromFetchCall(\n\t\tcallExpr: CallExpression,\n\t\thandlerName: string\n\t): DetectedRelationship | null {\n\t\tconst args = callExpr.getArguments();\n\t\tif (args.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst urlArg = args[0].getText();\n\n\t\t// Try to extract API name from URL\n\t\tlet apiName = \"external_api\";\n\t\tif (urlArg.includes(\"openai\")) {\n\t\t\tapiName = \"openai_api\";\n\t\t} else if (urlArg.includes(\"anthropic\")) {\n\t\t\tapiName = \"anthropic_api\";\n\t\t}\n\n\t\treturn {\n\t\t\tfrom: this.toComponentId(handlerName),\n\t\t\tto: apiName,\n\t\t\tdescription: \"Calls external API\",\n\t\t\ttechnology: \"HTTP/REST\",\n\t\t\tconfidence: \"high\",\n\t\t\tevidence: [`fetch() call to: ${urlArg}`],\n\t\t};\n\t}\n\n\t/**\n\t * Infer component name from object.method pattern\n\t */\n\tprivate inferComponentFromCall(\n\t\tobjectName: string,\n\t\tmethodName: string\n\t): string | null {\n\t\tconst mappings: Record<string, string> = {\n\t\t\tdb: \"db_client\",\n\t\t\tdatabase: \"database\",\n\t\t\trepos: \"repositories\",\n\t\t\trepository: \"repositories\",\n\t\t\tcache: \"cache\",\n\t\t\tstorage: \"storage\",\n\t\t\tai: \"ai_service\",\n\t\t\tauth: \"auth_service\",\n\t\t\tauthservice: \"auth_service\",\n\t\t\tuser: \"user_service\",\n\t\t\tuserservice: \"user_service\",\n\t\t\tlogger: \"logger\",\n\t\t\tqueue: \"queue_service\",\n\t\t};\n\n\t\tconst normalized = objectName.toLowerCase();\n\t\treturn mappings[normalized] || null;\n\t}\n\n\t/**\n\t * Resolve component from import statement\n\t */\n\tprivate resolveComponentFromImport(\n\t\tfunctionName: string,\n\t\tsourceFile: SourceFile\n\t): string | null {\n\t\t// Look through imports to find where this function comes from\n\t\tfor (const importDecl of sourceFile.getImportDeclarations()) {\n\t\t\tconst namedImports = importDecl.getNamedImports();\n\n\t\t\tfor (const namedImport of namedImports) {\n\t\t\t\tif (namedImport.getName() === functionName) {\n\t\t\t\t\tconst modulePath = importDecl.getModuleSpecifierValue();\n\n\t\t\t\t\t// Infer component from module path\n\t\t\t\t\tif (modulePath.includes(\"/db/\") || modulePath.includes(\"/database/\")) {\n\t\t\t\t\t\treturn \"db_client\";\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tmodulePath.includes(\"/repos\") ||\n\t\t\t\t\t\tmodulePath.includes(\"/repositories\")\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn \"repositories\";\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tmodulePath.includes(\"/service\") ||\n\t\t\t\t\t\tmodulePath.includes(\"/services\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Extract service name from path\n\t\t\t\t\t\tconst match = modulePath.match(/\\/([^/]+)\\.ts$/);\n\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\treturn this.toComponentId(match[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Infer database operation type\n\t */\n\tprivate inferDatabaseOperation(callExpr: string): string {\n\t\tif (callExpr.includes(\"query\") || callExpr.includes(\"select\")) {\n\t\t\treturn \"Reads from database\";\n\t\t}\n\t\tif (\n\t\t\tcallExpr.includes(\"execute\") ||\n\t\t\tcallExpr.includes(\"insert\") ||\n\t\t\tcallExpr.includes(\"update\") ||\n\t\t\tcallExpr.includes(\"delete\")\n\t\t) {\n\t\t\treturn \"Writes to database\";\n\t\t}\n\t\treturn \"Accesses database\";\n\t}\n\n\t/**\n\t * Convert name to component ID format\n\t */\n\tprivate toComponentId(name: string): string {\n\t\treturn name\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9]+/g, \"_\")\n\t\t\t.replace(/^_|_$/g, \"\");\n\t}\n\n\t/**\n\t * Remove duplicate relationships\n\t */\n\tprivate deduplicateRelationships(\n\t\trelationships: DetectedRelationship[]\n\t): DetectedRelationship[] {\n\t\tconst seen = new Set<string>();\n\t\tconst unique: DetectedRelationship[] = [];\n\n\t\tfor (const rel of relationships) {\n\t\t\tconst key = `${rel.from}->${rel.to}`;\n\t\t\tif (!seen.has(key)) {\n\t\t\t\tseen.add(key);\n\t\t\t\tunique.push(rel);\n\t\t\t}\n\t\t}\n\n\t\treturn unique;\n\t}\n}\n",
|
|
13
|
+
"// Component relationship extraction from TypeScript code\n// Detects function calls, imports, and dependencies between components\n\nimport { Node, type SourceFile, SyntaxKind, type CallExpression } from \"ts-morph\";\n\n/**\n * Represents a relationship between components detected from code analysis\n */\nexport interface DetectedRelationship {\n\t/** Source component (handler, service, etc.) */\n\tfrom: string;\n\t/** Target component being called/used */\n\tto: string;\n\t/** Description of the relationship */\n\tdescription: string;\n\t/** Technology/method used (e.g., \"Function Call\", \"Import\", \"SQL\", \"HTTP\") */\n\ttechnology?: string;\n\t/** Confidence level of this detection */\n\tconfidence: \"high\" | \"medium\" | \"low\";\n\t/** Evidence supporting this detection */\n\tevidence: string[];\n}\n\n/**\n * Extracts component relationships from handler code\n */\nexport class RelationshipExtractor {\n\t/**\n\t * Extract relationships from a function/handler body\n\t */\n\textractFromHandler(\n\t\thandlerNode: Node,\n\t\tsourceFile: SourceFile,\n\t\thandlerName: string\n\t): DetectedRelationship[] {\n\t\tconst relationships: DetectedRelationship[] = [];\n\t\tconst visited = new Set<string>(); // Prevent infinite recursion\n\n\t\tthis.extractFromNode(handlerNode, sourceFile, handlerName, relationships, visited);\n\n\t\treturn this.deduplicateRelationships(relationships);\n\t}\n\n\t/**\n\t * Recursively extract relationships from a node and follow function calls\n\t */\n\tprivate extractFromNode(\n\t\tnode: Node,\n\t\tsourceFile: SourceFile,\n\t\thandlerName: string,\n\t\trelationships: DetectedRelationship[],\n\t\tvisited: Set<string>\n\t): void {\n\t\t// Pattern 1: Function calls within the handler\n\t\tnode.forEachDescendant((descendant) => {\n\t\t\tif (Node.isCallExpression(descendant)) {\n\t\t\t\tconst expr = descendant.getExpression();\n\n\t\t\t\t// Check if this is a local or imported function call that we should follow\n\t\t\t\tif (Node.isIdentifier(expr)) {\n\t\t\t\t\tconst functionName = expr.getText();\n\n\t\t\t\t\t// Try to find the function definition in the same file first\n\t\t\t\t\tlet functionDecl = sourceFile.getFunction(functionName);\n\t\t\t\t\tlet targetSourceFile = sourceFile;\n\n\t\t\t\t\t// If not in same file, try to resolve from imports (cross-file analysis)\n\t\t\t\t\tif (!functionDecl) {\n\t\t\t\t\t\tconst resolved = this.resolveImportedFunction(functionName, sourceFile);\n\t\t\t\t\t\tif (resolved) {\n\t\t\t\t\t\t\tfunctionDecl = resolved.functionDecl;\n\t\t\t\t\t\t\ttargetSourceFile = resolved.sourceFile;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (functionDecl && !visited.has(functionName)) {\n\t\t\t\t\t\t// Mark as visited to prevent infinite recursion\n\t\t\t\t\t\tvisited.add(functionName);\n\n\t\t\t\t\t\t// Recursively extract relationships from the called function\n\t\t\t\t\t\tconst body = functionDecl.getBody();\n\t\t\t\t\t\tif (body) {\n\t\t\t\t\t\t\tthis.extractFromNode(body, targetSourceFile, handlerName, relationships, visited);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Don't add this as a relationship itself - we're following the call\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If we couldn't resolve the function, check if it looks like a service call\n\t\t\t\t\t// This catches patterns like getDatabase(), createRepositories()\n\t\t\t\t\tif (!functionDecl) {\n\t\t\t\t\t\tconst componentFromName = this.inferComponentFromFunctionName(functionName);\n\t\t\t\t\t\tif (componentFromName) {\n\t\t\t\t\t\t\trelationships.push({\n\t\t\t\t\t\t\t\tfrom: this.toComponentId(handlerName),\n\t\t\t\t\t\t\t\tto: componentFromName,\n\t\t\t\t\t\t\t\tdescription: `Calls ${functionName}()`,\n\t\t\t\t\t\t\t\ttechnology: \"Function Call\",\n\t\t\t\t\t\t\t\tconfidence: \"medium\",\n\t\t\t\t\t\t\t\tevidence: [`Function call: ${functionName}`],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check if this call expression has a property access expression\n\t\t\t\t// (e.g., userService.listUsers())\n\t\t\t\tif (Node.isPropertyAccessExpression(expr)) {\n\t\t\t\t\tconst rel = this.extractFromPropertyAccess(expr, handlerName);\n\t\t\t\t\tif (rel) {\n\t\t\t\t\t\trelationships.push(rel);\n\t\t\t\t\t\treturn; // Don't process further for this call expression\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Not a local function or property access - try to extract as a relationship\n\t\t\t\tconst rel = this.extractFromFunctionCall(descendant, handlerName, sourceFile);\n\t\t\t\tif (rel) {\n\t\t\t\t\trelationships.push(rel);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Pattern 3: Database queries (await db.query, await db.execute)\n\t\t\tif (Node.isAwaitExpression(descendant)) {\n\t\t\t\tconst rel = this.extractFromDatabaseCall(descendant, handlerName);\n\t\t\t\tif (rel) {\n\t\t\t\t\trelationships.push(rel);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Pattern 4: Fetch/HTTP calls\n\t\t\tif (\n\t\t\t\tNode.isCallExpression(descendant) &&\n\t\t\t\tdescendant.getExpression().getText() === \"fetch\"\n\t\t\t) {\n\t\t\t\tconst rel = this.extractFromFetchCall(descendant, handlerName);\n\t\t\t\tif (rel) {\n\t\t\t\t\trelationships.push(rel);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Extract relationship from a function call\n\t */\n\tprivate extractFromFunctionCall(\n\t\tcallExpr: CallExpression,\n\t\thandlerName: string,\n\t\tsourceFile: SourceFile\n\t): DetectedRelationship | null {\n\t\tconst expr = callExpr.getExpression();\n\t\tconst exprText = expr.getText();\n\n\t\t// Skip common utility functions and built-ins\n\t\tconst skipList = [\n\t\t\t\"console.\",\n\t\t\t\"JSON.\",\n\t\t\t\"Math.\",\n\t\t\t\"Object.\",\n\t\t\t\"Array.\",\n\t\t\t\"String.\",\n\t\t\t\"Number.\",\n\t\t\t\"Date.\",\n\t\t\t\"Promise.\",\n\t\t\t\"setTimeout\",\n\t\t\t\"setInterval\",\n\t\t\t\"clearTimeout\",\n\t\t\t\"clearInterval\",\n\t\t];\n\n\t\tif (skipList.some((skip) => exprText.startsWith(skip))) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Extract function name\n\t\tlet functionName = exprText;\n\t\tlet targetComponent: string | null = null;\n\n\t\t// Handle property access (e.g., db.getConnection() -> db_client)\n\t\tif (Node.isPropertyAccessExpression(expr)) {\n\t\t\tconst objectExpr = expr.getExpression();\n\t\t\tconst objectName = objectExpr.getText();\n\t\t\tconst methodName = expr.getName();\n\n\t\t\t// Map common patterns to component names\n\t\t\ttargetComponent = this.inferComponentFromCall(objectName, methodName);\n\n\t\t\tif (!targetComponent) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfunctionName = methodName;\n\t\t} else {\n\t\t\t// Direct function call - try to resolve from imports\n\t\t\ttargetComponent = this.resolveComponentFromImport(\n\t\t\t\texprText,\n\t\t\t\tsourceFile\n\t\t\t);\n\n\t\t\tif (!targetComponent) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tfrom: this.toComponentId(handlerName),\n\t\t\tto: targetComponent,\n\t\t\tdescription: `Calls ${functionName}()`,\n\t\t\ttechnology: \"Function Call\",\n\t\t\tconfidence: \"high\",\n\t\t\tevidence: [`Function call: ${exprText}`],\n\t\t};\n\t}\n\n\t/**\n\t * Extract relationship from property access chain\n\t * Handles both simple (obj.method) and nested (obj.prop.method) patterns\n\t */\n\tprivate extractFromPropertyAccess(\n\t\tpropAccess: Node,\n\t\thandlerName: string\n\t): DetectedRelationship | null {\n\t\tif (!Node.isPropertyAccessExpression(propAccess)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst fullChain = propAccess.getText();\n\t\tconst methodName = propAccess.getName();\n\n\t\t// Extract the root object from potentially nested property access\n\t\t// e.g., repositories.users.create -> repositories\n\t\tlet rootObject = propAccess.getExpression();\n\t\twhile (Node.isPropertyAccessExpression(rootObject)) {\n\t\t\trootObject = rootObject.getExpression();\n\t\t}\n\n\t\tconst objectName = rootObject.getText();\n\n\t\t// Map object name to component name\n\t\tconst targetComponent = this.inferComponentFromCall(objectName, methodName);\n\n\t\tif (!targetComponent) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfrom: this.toComponentId(handlerName),\n\t\t\tto: targetComponent,\n\t\t\tdescription: `Calls ${methodName}()`,\n\t\t\ttechnology: \"Function Call\",\n\t\t\tconfidence: \"high\",\n\t\t\tevidence: [`Property access: ${fullChain}`],\n\t\t};\n\t}\n\n\t/**\n\t * Extract relationship from database call\n\t */\n\tprivate extractFromDatabaseCall(\n\t\tawaitExpr: Node,\n\t\thandlerName: string\n\t): DetectedRelationship | null {\n\t\tif (!Node.isAwaitExpression(awaitExpr)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst innerExpr = awaitExpr.getExpression();\n\t\tif (!Node.isCallExpression(innerExpr)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst callExpr = innerExpr.getExpression().getText();\n\n\t\t// Detect database patterns\n\t\tif (\n\t\t\tcallExpr.includes(\"db.query\") ||\n\t\t\tcallExpr.includes(\"db.execute\") ||\n\t\t\tcallExpr.includes(\"db.select\") ||\n\t\t\tcallExpr.includes(\"db.insert\") ||\n\t\t\tcallExpr.includes(\"db.update\") ||\n\t\t\tcallExpr.includes(\"db.delete\")\n\t\t) {\n\t\t\tconst operation = this.inferDatabaseOperation(callExpr);\n\n\t\t\treturn {\n\t\t\t\tfrom: this.toComponentId(handlerName),\n\t\t\t\tto: \"database\",\n\t\t\t\tdescription: operation,\n\t\t\t\ttechnology: \"SQL\",\n\t\t\t\tconfidence: \"high\",\n\t\t\t\tevidence: [`Database call: ${callExpr}`],\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Extract relationship from fetch/HTTP call\n\t */\n\tprivate extractFromFetchCall(\n\t\tcallExpr: CallExpression,\n\t\thandlerName: string\n\t): DetectedRelationship | null {\n\t\tconst args = callExpr.getArguments();\n\t\tif (args.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst urlArg = args[0].getText();\n\n\t\t// Try to extract API name from URL\n\t\tlet apiName = \"external_api\";\n\t\tif (urlArg.includes(\"openai\")) {\n\t\t\tapiName = \"openai_api\";\n\t\t} else if (urlArg.includes(\"anthropic\")) {\n\t\t\tapiName = \"anthropic_api\";\n\t\t}\n\n\t\treturn {\n\t\t\tfrom: this.toComponentId(handlerName),\n\t\t\tto: apiName,\n\t\t\tdescription: \"Calls external API\",\n\t\t\ttechnology: \"HTTP/REST\",\n\t\t\tconfidence: \"high\",\n\t\t\tevidence: [`fetch() call to: ${urlArg}`],\n\t\t};\n\t}\n\n\t/**\n\t * Infer component name from object.method pattern\n\t */\n\tprivate inferComponentFromCall(\n\t\tobjectName: string,\n\t\tmethodName: string\n\t): string | null {\n\t\tconst mappings: Record<string, string> = {\n\t\t\tdb: \"db_client\",\n\t\t\tdatabase: \"database\",\n\t\t\trepos: \"repositories\",\n\t\t\trepository: \"repositories\",\n\t\t\trepositories: \"repositories\",\n\t\t\tcache: \"cache\",\n\t\t\tstorage: \"storage\",\n\t\t\tai: \"ai_service\",\n\t\t\tauth: \"auth_service\",\n\t\t\tauthservice: \"auth_service\",\n\t\t\tuser: \"user_service\",\n\t\t\tuserservice: \"user_service\",\n\t\t\tlogger: \"logger\",\n\t\t\tqueue: \"queue_service\",\n\t\t};\n\n\t\tconst normalized = objectName.toLowerCase();\n\t\treturn mappings[normalized] || null;\n\t}\n\n\t/**\n\t * Infer component name from function name patterns\n\t * Detects patterns like getDatabase(), createRepositories(), etc.\n\t */\n\tprivate inferComponentFromFunctionName(functionName: string): string | null {\n\t\tconst normalized = functionName.toLowerCase();\n\n\t\t// Pattern 1: getXxx() or createXxx()\n\t\tif (normalized.startsWith(\"get\") || normalized.startsWith(\"create\")) {\n\t\t\tconst suffix = functionName.substring(normalized.startsWith(\"get\") ? 3 : 6);\n\t\t\tconst suffixLower = suffix.toLowerCase();\n\n\t\t\t// Database patterns\n\t\t\tif (\n\t\t\t\tsuffixLower.includes(\"database\") ||\n\t\t\t\tsuffixLower === \"db\" ||\n\t\t\t\tsuffixLower.includes(\"dbconnection\") ||\n\t\t\t\tsuffixLower.includes(\"connection\")\n\t\t\t) {\n\t\t\t\treturn \"db_client\";\n\t\t\t}\n\n\t\t\t// Repository patterns\n\t\t\tif (\n\t\t\t\tsuffixLower.includes(\"repositories\") ||\n\t\t\t\tsuffixLower.includes(\"repos\") ||\n\t\t\t\tsuffixLower.includes(\"repository\")\n\t\t\t) {\n\t\t\t\treturn \"repositories\";\n\t\t\t}\n\n\t\t\t// Service patterns\n\t\t\tif (suffixLower.includes(\"service\")) {\n\t\t\t\t// Extract service type (e.g., createAuthService -> auth_service)\n\t\t\t\tconst serviceMatch = suffix.match(/^(.+?)Service/i);\n\t\t\t\tif (serviceMatch) {\n\t\t\t\t\treturn this.toComponentId(`${serviceMatch[1]}_service`);\n\t\t\t\t}\n\t\t\t\treturn \"service\";\n\t\t\t}\n\n\t\t\t// Cache patterns\n\t\t\tif (suffixLower.includes(\"cache\")) {\n\t\t\t\treturn \"cache\";\n\t\t\t}\n\n\t\t\t// Storage patterns\n\t\t\tif (suffixLower.includes(\"storage\")) {\n\t\t\t\treturn \"storage\";\n\t\t\t}\n\n\t\t\t// AI/LLM patterns\n\t\t\tif (suffixLower.includes(\"ai\") || suffixLower.includes(\"llm\")) {\n\t\t\t\treturn \"ai_service\";\n\t\t\t}\n\n\t\t\t// Logger patterns\n\t\t\tif (suffixLower.includes(\"logger\")) {\n\t\t\t\treturn \"logger\";\n\t\t\t}\n\t\t}\n\n\t\t// Pattern 2: initXxx() or setupXxx()\n\t\tif (normalized.startsWith(\"init\") || normalized.startsWith(\"setup\")) {\n\t\t\t// These often initialize services, treat similarly to get/create\n\t\t\tconst suffix = functionName.substring(normalized.startsWith(\"init\") ? 4 : 5);\n\t\t\tconst suffixLower = suffix.toLowerCase();\n\n\t\t\tif (suffixLower.includes(\"database\") || suffixLower === \"db\") {\n\t\t\t\treturn \"db_client\";\n\t\t\t}\n\t\t\tif (suffixLower.includes(\"cache\")) {\n\t\t\t\treturn \"cache\";\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Resolve component from import statement\n\t */\n\tprivate resolveComponentFromImport(\n\t\tfunctionName: string,\n\t\tsourceFile: SourceFile\n\t): string | null {\n\t\t// Look through imports to find where this function comes from\n\t\tfor (const importDecl of sourceFile.getImportDeclarations()) {\n\t\t\tconst namedImports = importDecl.getNamedImports();\n\n\t\t\tfor (const namedImport of namedImports) {\n\t\t\t\tif (namedImport.getName() === functionName) {\n\t\t\t\t\tconst modulePath = importDecl.getModuleSpecifierValue();\n\n\t\t\t\t\t// Infer component from module path\n\t\t\t\t\tif (modulePath.includes(\"/db/\") || modulePath.includes(\"/database/\")) {\n\t\t\t\t\t\treturn \"db_client\";\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tmodulePath.includes(\"/repos\") ||\n\t\t\t\t\t\tmodulePath.includes(\"/repositories\")\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn \"repositories\";\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tmodulePath.includes(\"/service\") ||\n\t\t\t\t\t\tmodulePath.includes(\"/services\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Extract service name from path\n\t\t\t\t\t\tconst match = modulePath.match(/\\/([^/]+)\\.ts$/);\n\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\treturn this.toComponentId(match[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Resolve imported function to its declaration in another file\n\t * This enables cross-file relationship detection for architectures where\n\t * handlers are separated from routing logic\n\t */\n\tprivate resolveImportedFunction(\n\t\tfunctionName: string,\n\t\tsourceFile: SourceFile\n\t): { functionDecl: any; sourceFile: SourceFile } | null {\n\t\ttry {\n\t\t\t// Look through imports to find where this function comes from\n\t\t\tfor (const importDecl of sourceFile.getImportDeclarations()) {\n\t\t\t\tconst namedImports = importDecl.getNamedImports();\n\n\t\t\t\tfor (const namedImport of namedImports) {\n\t\t\t\t\tif (namedImport.getName() === functionName) {\n\t\t\t\t\t\t// Resolve the import to the actual source file\n\t\t\t\t\t\tconst moduleSpecifier = importDecl.getModuleSpecifierSourceFile();\n\t\t\t\t\t\tif (!moduleSpecifier) continue;\n\n\t\t\t\t\t\t// Find the function in the imported file\n\t\t\t\t\t\tconst functionDecl = moduleSpecifier.getFunction(functionName);\n\t\t\t\t\t\tif (functionDecl) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tfunctionDecl,\n\t\t\t\t\t\t\t\tsourceFile: moduleSpecifier,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Also check for exported arrow functions or const declarations\n\t\t\t\t\t\tconst variableDecl = moduleSpecifier\n\t\t\t\t\t\t\t.getVariableDeclaration(functionName);\n\t\t\t\t\t\tif (variableDecl) {\n\t\t\t\t\t\t\tconst initializer = variableDecl.getInitializer();\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tinitializer &&\n\t\t\t\t\t\t\t\t(Node.isArrowFunction(initializer) ||\n\t\t\t\t\t\t\t\t\tNode.isFunctionExpression(initializer))\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tfunctionDecl: initializer,\n\t\t\t\t\t\t\t\t\tsourceFile: moduleSpecifier,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Silently fail on resolution errors (e.g., missing files, parse errors)\n\t\t\t// This ensures the extractor is resilient to incomplete projects\n\t\t\treturn null;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Infer database operation type\n\t */\n\tprivate inferDatabaseOperation(callExpr: string): string {\n\t\tif (callExpr.includes(\"query\") || callExpr.includes(\"select\")) {\n\t\t\treturn \"Reads from database\";\n\t\t}\n\t\tif (\n\t\t\tcallExpr.includes(\"execute\") ||\n\t\t\tcallExpr.includes(\"insert\") ||\n\t\t\tcallExpr.includes(\"update\") ||\n\t\t\tcallExpr.includes(\"delete\")\n\t\t) {\n\t\t\treturn \"Writes to database\";\n\t\t}\n\t\treturn \"Accesses database\";\n\t}\n\n\t/**\n\t * Convert name to component ID format\n\t */\n\tprivate toComponentId(name: string): string {\n\t\treturn name\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9]+/g, \"_\")\n\t\t\t.replace(/^_|_$/g, \"\");\n\t}\n\n\t/**\n\t * Remove duplicate relationships\n\t */\n\tprivate deduplicateRelationships(\n\t\trelationships: DetectedRelationship[]\n\t): DetectedRelationship[] {\n\t\tconst seen = new Set<string>();\n\t\tconst unique: DetectedRelationship[] = [];\n\n\t\tfor (const rel of relationships) {\n\t\t\tconst key = `${rel.from}->${rel.to}`;\n\t\t\tif (!seen.has(key)) {\n\t\t\t\tseen.add(key);\n\t\t\t\tunique.push(rel);\n\t\t\t}\n\t\t}\n\n\t\treturn unique;\n\t}\n}\n",
|
|
14
14
|
"// ADR (Architecture Decision Record) extractor\n// Parses ADRs from markdown files following Michael Nygard's format\n\nimport * as fs from \"node:fs\"\nimport * as path from \"node:path\"\nimport type { ADR, ADRStatus, ADRLink, ADRCollection } from \"../types/adr\"\n\nexport class ADRExtractor {\n private projectRoot: string\n\n constructor(projectRoot: string) {\n this.projectRoot = projectRoot\n }\n\n /**\n * Extract ADRs from docs/adr directory\n */\n extract(): ADRCollection {\n const adrDir = this.findADRDirectory()\n\n if (!adrDir || !fs.existsSync(adrDir)) {\n return {\n adrs: [],\n directory: adrDir || path.join(this.projectRoot, \"docs\", \"adr\"),\n }\n }\n\n const files = fs\n .readdirSync(adrDir)\n .filter((file) => file.endsWith(\".md\"))\n .map((file) => path.join(adrDir, file))\n\n const adrs: ADR[] = []\n\n for (const file of files) {\n try {\n const adr = this.parseADR(file)\n if (adr) {\n adrs.push(adr)\n }\n } catch (error) {\n console.warn(`Failed to parse ADR: ${file}`, error)\n }\n }\n\n // Sort by ID\n adrs.sort((a, b) => a.id.localeCompare(b.id))\n\n return {\n adrs,\n directory: adrDir,\n }\n }\n\n /**\n * Find ADR directory\n */\n private findADRDirectory(): string | null {\n const candidates = [\n path.join(this.projectRoot, \"docs\", \"adr\"),\n path.join(this.projectRoot, \"docs\", \"architecture\", \"decisions\"),\n path.join(this.projectRoot, \"adr\"),\n path.join(this.projectRoot, \"architecture\", \"decisions\"),\n ]\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) {\n return candidate\n }\n }\n\n return null\n }\n\n /**\n * Parse ADR from markdown file\n */\n private parseADR(filePath: string): ADR | null {\n const content = fs.readFileSync(filePath, \"utf-8\")\n const fileName = path.basename(filePath, \".md\")\n\n // Extract ID from filename (e.g., \"0001-use-preact.md\" → \"0001\")\n const idMatch = fileName.match(/^(\\d+)/)\n const id = idMatch ? idMatch[1] : fileName\n\n // Extract title from first heading\n const titleMatch = content.match(/^#\\s+(.+)$/m)\n const title = titleMatch ? titleMatch[1].trim() : fileName\n\n // Extract status\n const status = this.extractStatus(content)\n\n // Extract date\n const date = this.extractDate(content)\n\n // Extract sections\n const context = this.extractSection(content, \"Context\")\n const decision = this.extractSection(content, \"Decision\")\n const consequences = this.extractSection(content, \"Consequences\")\n\n // Extract alternatives (if present)\n const alternativesSection = this.extractSection(content, \"Alternatives\")\n const alternatives = alternativesSection\n ? alternativesSection\n .split(\"\\n\")\n .filter((line) => line.trim().startsWith(\"-\"))\n .map((line) => line.replace(/^-\\s*/, \"\").trim())\n : undefined\n\n // Extract links\n const links = this.extractLinks(content)\n\n if (!context || !decision || !consequences) {\n // Not a valid ADR format\n return null\n }\n\n return {\n id,\n title,\n status,\n date,\n context,\n decision,\n consequences,\n alternatives,\n links,\n source: filePath,\n }\n }\n\n /**\n * Extract status from content\n */\n private extractStatus(content: string): ADRStatus {\n const statusMatch = content.match(/Status:\\s*(\\w+)/i)\n if (!statusMatch) return \"accepted\"\n\n const status = statusMatch[1].toLowerCase()\n if ([\"proposed\", \"accepted\", \"deprecated\", \"superseded\"].includes(status)) {\n return status as ADRStatus\n }\n\n return \"accepted\"\n }\n\n /**\n * Extract date from content\n */\n private extractDate(content: string): string {\n // Try to find date in various formats\n const dateMatch =\n content.match(/Date:\\s*(\\d{4}-\\d{2}-\\d{2})/i) ||\n content.match(/(\\d{4}-\\d{2}-\\d{2})/i)\n\n return dateMatch ? dateMatch[1] : new Date().toISOString().split(\"T\")[0]\n }\n\n /**\n * Extract section content\n */\n private extractSection(content: string, sectionName: string): string {\n // Match section heading and capture content until next heading or end\n const regex = new RegExp(\n `##\\\\s+${sectionName}\\\\s*\\\\n([\\\\s\\\\S]*?)(?=\\\\n##|$)`,\n \"i\"\n )\n const match = content.match(regex)\n\n return match ? match[1].trim() : \"\"\n }\n\n /**\n * Extract links to other ADRs\n */\n private extractLinks(content: string): ADRLink[] {\n const links: ADRLink[] = []\n\n // Look for supersedes/superseded-by links\n const supersedesMatch = content.match(/Supersedes:\\s*ADR-(\\d+)/gi)\n if (supersedesMatch) {\n for (const match of supersedesMatch) {\n const idMatch = match.match(/ADR-(\\d+)/)\n if (idMatch) {\n links.push({\n type: \"supersedes\",\n adrId: idMatch[1],\n })\n }\n }\n }\n\n const supersededByMatch = content.match(/Superseded by:\\s*ADR-(\\d+)/gi)\n if (supersededByMatch) {\n for (const match of supersededByMatch) {\n const idMatch = match.match(/ADR-(\\d+)/)\n if (idMatch) {\n links.push({\n type: \"superseded-by\",\n adrId: idMatch[1],\n })\n }\n }\n }\n\n return links\n }\n}\n\n/**\n * Extract ADRs from project\n */\nexport function extractADRs(projectRoot: string): ADRCollection {\n const extractor = new ADRExtractor(projectRoot)\n return extractor.extract()\n}\n",
|
|
15
15
|
"// Strict types for Structurizr DSL generation\n\n/**\n * Shape options for elements in Structurizr diagrams\n */\nexport type ElementShape =\n\t| \"Box\"\n\t| \"RoundedBox\"\n\t| \"Circle\"\n\t| \"Ellipse\"\n\t| \"Hexagon\"\n\t| \"Cylinder\"\n\t| \"Component\"\n\t| \"Person\"\n\t| \"Robot\"\n\t| \"Folder\"\n\t| \"WebBrowser\"\n\t| \"MobileDevicePortrait\"\n\t| \"MobileDeviceLandscape\"\n\t| \"Pipe\";\n\n/**\n * Routing options for relationships\n */\nexport type RelationshipRouting = \"Direct\" | \"Orthogonal\" | \"Curved\";\n\n/**\n * Line style for relationships\n */\nexport type LineStyle = \"Solid\" | \"Dashed\" | \"Dotted\";\n\n/**\n * Style configuration for an element tag\n */\nexport interface ElementStyle {\n\t/** Shape of the element */\n\tshape?: ElementShape;\n\t/** Icon URL */\n\ticon?: string;\n\t/** Width in pixels */\n\twidth?: number;\n\t/** Height in pixels */\n\theight?: number;\n\t/** Background color (hex) */\n\tbackground?: string;\n\t/** Text color (hex) */\n\tcolor?: string;\n\t/** Font size in pixels */\n\tfontSize?: number;\n\t/** Border style */\n\tborder?: LineStyle;\n\t/** Opacity (0-100) */\n\topacity?: number;\n\t/** Metadata display */\n\tmetadata?: boolean;\n\t/** Description display */\n\tdescription?: boolean;\n}\n\n/**\n * Style configuration for a relationship tag\n */\nexport interface RelationshipStyle {\n\t/** Line thickness in pixels */\n\tthickness?: number;\n\t/** Line color (hex) */\n\tcolor?: string;\n\t/** Line style */\n\tstyle?: LineStyle;\n\t/** Routing algorithm */\n\trouting?: RelationshipRouting;\n\t/** Font size for labels */\n\tfontSize?: number;\n\t/** Width for lines */\n\twidth?: number;\n\t/** Position of label (0-100) */\n\tposition?: number;\n\t/** Opacity (0-100) */\n\topacity?: number;\n}\n\n/**\n * Complete styling configuration\n */\nexport interface StructurizrStyles {\n\t/** Element styles keyed by tag */\n\telements?: Record<string, ElementStyle>;\n\t/** Relationship styles keyed by tag */\n\trelationships?: Record<string, RelationshipStyle>;\n\t/** Theme URL */\n\ttheme?: string;\n}\n\n/**\n * Component relationship in the architecture\n */\nexport interface ComponentRelationship {\n\t/** Source component ID */\n\tfrom: string;\n\t/** Destination component ID */\n\tto: string;\n\t/** Description of the relationship */\n\tdescription: string;\n\t/** Technology used (e.g., \"HTTP\", \"SQL\", \"Function Call\") */\n\ttechnology?: string;\n\t/** Tags for the relationship */\n\ttags?: string[];\n}\n\n/**\n * Component properties (metadata)\n */\nexport interface ComponentProperties {\n\t/** Source file path and line numbers */\n\tSource?: string;\n\t/** Technology stack */\n\tTechnology?: string;\n\t/** Detection pattern used */\n\tPattern?: string;\n\t/** Message type handled */\n\t\"Message Type\"?: string;\n\t/** Additional custom properties */\n\t[key: string]: string | undefined;\n}\n\n/**\n * Group of related components\n */\nexport interface ComponentGroup {\n\t/** Group name */\n\tname: string;\n\t/** Component IDs in this group */\n\tcomponents: string[];\n}\n\n/**\n * Step in a dynamic diagram sequence\n */\nexport interface DynamicDiagramStep {\n\t/** Step number */\n\torder: number;\n\t/** Source element ID */\n\tfrom: string;\n\t/** Destination element ID */\n\tto: string;\n\t/** Description of the interaction */\n\tdescription: string;\n\t/** Technology used */\n\ttechnology?: string;\n}\n\n/**\n * Dynamic diagram (sequence/flow diagram)\n */\nexport interface DynamicDiagram {\n\t/** Unique key for the diagram */\n\tkey: string;\n\t/** Container scope */\n\tscope: string;\n\t/** Diagram title */\n\ttitle: string;\n\t/** Diagram description */\n\tdescription?: string;\n\t/** Sequence of steps */\n\tsteps: DynamicDiagramStep[];\n}\n\n/**\n * Architectural perspective\n */\nexport interface Perspective {\n\t/** Perspective name (e.g., \"Security\", \"Performance\") */\n\tname: string;\n\t/** Description/reasoning */\n\tdescription: string;\n}\n\n/**\n * Container instance in a deployment node\n */\nexport interface ContainerInstance {\n\t/** Container context name (e.g., \"server\", \"client\", \"background\") */\n\tcontainer: string;\n\t/** Number of instances */\n\tinstances?: number;\n}\n\n/**\n * Deployment node in infrastructure\n */\nexport interface DeploymentNode {\n\t/** Node name */\n\tname: string;\n\t/** Description */\n\tdescription?: string;\n\t/** Technology */\n\ttechnology?: string;\n\t/** Tags (use \"environment:Production\" to specify environment) */\n\ttags?: string[];\n\t/** Properties */\n\tproperties?: Record<string, string>;\n\t/** Container instances deployed to this node */\n\tcontainerInstances?: ContainerInstance[];\n\t/** Child deployment nodes (nested infrastructure) */\n\tchildren?: DeploymentNode[];\n}\n\n/**\n * Enhanced options for Structurizr DSL generation\n */\nexport interface StructurizrDSLOptions {\n\t/** Include dynamic diagrams for message flows */\n\tincludeDynamicDiagrams?: boolean;\n\n\t/** Include component diagrams for contexts */\n\tincludeComponentDiagrams?: boolean;\n\n\t/** Which contexts to generate component diagrams for */\n\tcomponentDiagramContexts?: string[];\n\n\t/** Styling configuration */\n\tstyles?: StructurizrStyles;\n\n\t/** Whether to include default styles */\n\tincludeDefaultStyles?: boolean;\n\n\t/** Component relationships to include */\n\trelationships?: ComponentRelationship[];\n\n\t/** Component properties to include */\n\tproperties?: Record<string, ComponentProperties>;\n\n\t/** Component groups */\n\tgroups?: ComponentGroup[];\n\n\t/** Dynamic diagrams to generate */\n\tdynamicDiagrams?: DynamicDiagram[];\n\n\t/** Architectural perspectives */\n\tperspectives?: Record<string, Perspective[]>;\n\n\t/** Deployment nodes */\n\tdeploymentNodes?: DeploymentNode[];\n}\n\n/**\n * Default style palette\n */\nexport const DEFAULT_COLORS = {\n\t// Message handler types\n\tmessageHandler: \"#1168bd\",\n\tqueryHandler: \"#51cf66\",\n\tcommandHandler: \"#ff922b\",\n\tauthHandler: \"#ff6b6b\",\n\tsubscribeHandler: \"#845ef7\",\n\n\t// Architectural layers\n\tservice: \"#95a5a6\",\n\trepository: \"#74b9ff\",\n\tdatabase: \"#0984e3\",\n\texternalSystem: \"#e17055\",\n\n\t// Infrastructure\n\tcontainer: \"#6c5ce7\",\n\tdeployment: \"#00b894\",\n\n\t// Text\n\ttextLight: \"#ffffff\",\n\ttextDark: \"#2d3436\",\n\n\t// Relationships\n\trelationship: \"#707070\",\n} as const;\n\n/**\n * Default element styles based on common tags\n */\nexport const DEFAULT_ELEMENT_STYLES: Record<string, ElementStyle> = {\n\t\"Message Handler\": {\n\t\tshape: \"Hexagon\",\n\t\tbackground: DEFAULT_COLORS.messageHandler,\n\t\tcolor: DEFAULT_COLORS.textLight,\n\t\tfontSize: 14,\n\t},\n\tQuery: {\n\t\tbackground: DEFAULT_COLORS.queryHandler,\n\t\tcolor: DEFAULT_COLORS.textDark,\n\t},\n\tCommand: {\n\t\tbackground: DEFAULT_COLORS.commandHandler,\n\t\tcolor: DEFAULT_COLORS.textDark,\n\t},\n\tAuthentication: {\n\t\tbackground: DEFAULT_COLORS.authHandler,\n\t\tcolor: DEFAULT_COLORS.textLight,\n\t},\n\tSubscribe: {\n\t\tbackground: DEFAULT_COLORS.subscribeHandler,\n\t\tcolor: DEFAULT_COLORS.textLight,\n\t},\n\tService: {\n\t\tshape: \"RoundedBox\",\n\t\tbackground: DEFAULT_COLORS.service,\n\t\tcolor: DEFAULT_COLORS.textLight,\n\t},\n\tRepository: {\n\t\tshape: \"Cylinder\",\n\t\tbackground: DEFAULT_COLORS.repository,\n\t\tcolor: DEFAULT_COLORS.textDark,\n\t},\n\tDatabase: {\n\t\tshape: \"Cylinder\",\n\t\tbackground: DEFAULT_COLORS.database,\n\t\tcolor: DEFAULT_COLORS.textLight,\n\t},\n\t\"External System\": {\n\t\tbackground: DEFAULT_COLORS.externalSystem,\n\t\tcolor: DEFAULT_COLORS.textLight,\n\t},\n\tContainer: {\n\t\tbackground: DEFAULT_COLORS.container,\n\t\tcolor: DEFAULT_COLORS.textLight,\n\t},\n};\n\n/**\n * Default relationship styles\n */\nexport const DEFAULT_RELATIONSHIP_STYLES: Record<string, RelationshipStyle> = {\n\tRelationship: {\n\t\trouting: \"Orthogonal\",\n\t\tthickness: 2,\n\t\tcolor: DEFAULT_COLORS.relationship,\n\t\tfontSize: 12,\n\t},\n\tSync: {\n\t\tstyle: \"Solid\",\n\t\tthickness: 2,\n\t},\n\tAsync: {\n\t\tstyle: \"Dashed\",\n\t\tthickness: 2,\n\t},\n\tDatabase: {\n\t\tstyle: \"Solid\",\n\t\tthickness: 3,\n\t\tcolor: DEFAULT_COLORS.database,\n\t},\n};\n\n/**\n * Default theme URL\n */\nexport const DEFAULT_THEME =\n\t\"https://static.structurizr.com/themes/default/theme.json\";\n",
|
|
16
16
|
"// Structurizr DSL generator\n\nimport type { ArchitectureAnalysis } from \"../../analysis/src\";\nimport type {\n\tStructurizrDSLOptions as EnhancedDSLOptions,\n\tElementStyle,\n\tRelationshipStyle,\n\tComponentProperties,\n\tComponentRelationship,\n\tComponentGroup,\n\tDynamicDiagram,\n\tDeploymentNode,\n\tContainerInstance,\n} from \"../types/structurizr\";\nimport {\n\tDEFAULT_ELEMENT_STYLES,\n\tDEFAULT_RELATIONSHIP_STYLES,\n\tDEFAULT_THEME,\n} from \"../types/structurizr\";\n\n// Re-export the enhanced type\nexport type { EnhancedDSLOptions as StructurizrDSLOptions };\nexport type StructurizrDSLOptions = EnhancedDSLOptions;\n\nexport class StructurizrDSLGenerator {\n private analysis: ArchitectureAnalysis;\n private options: StructurizrDSLOptions;\n\n constructor(analysis: ArchitectureAnalysis, options: StructurizrDSLOptions = {}) {\n this.analysis = analysis;\n this.options = {\n includeDynamicDiagrams: true,\n includeComponentDiagrams: true,\n componentDiagramContexts: [\"background\"],\n includeDefaultStyles: true,\n relationships: [],\n properties: {},\n groups: [],\n dynamicDiagrams: [],\n perspectives: {},\n deploymentNodes: [],\n ...options,\n styles: {\n theme: options.styles?.theme || DEFAULT_THEME,\n elements: {\n ...DEFAULT_ELEMENT_STYLES,\n ...options.styles?.elements,\n },\n relationships: {\n ...DEFAULT_RELATIONSHIP_STYLES,\n ...options.styles?.relationships,\n },\n },\n };\n }\n\n /**\n * Generate complete Structurizr DSL\n */\n generate(): string {\n const parts: string[] = [];\n\n parts.push(this.generateWorkspaceHeader());\n parts.push(this.generateModel());\n parts.push(this.generateViews());\n parts.push(this.generateWorkspaceFooter());\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate workspace header\n */\n private generateWorkspaceHeader(): string {\n const { name, description } = this.analysis.system;\n\n const parts = [`workspace \"${this.escape(name)}\" \"${this.escape(description || \"\")}\" {`];\n parts.push(\"\");\n parts.push(\" !identifiers hierarchical\");\n\n // Add ADRs if present\n if (this.analysis.adrs && this.analysis.adrs.adrs.length > 0) {\n parts.push(\" !adrs \" + this.analysis.adrs.directory);\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate workspace footer\n */\n private generateWorkspaceFooter(): string {\n return \"}\";\n }\n\n /**\n * Generate model section\n */\n private generateModel(): string {\n const parts: string[] = [];\n\n parts.push(\" model {\");\n parts.push(this.generatePeople());\n parts.push(this.generateExternalSystems());\n parts.push(this.generateMainSystem());\n\n // Add deployment environments if configured\n if (this.options.deploymentNodes && this.options.deploymentNodes.length > 0) {\n parts.push(this.generateDeploymentEnvironments());\n }\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate people/actors\n */\n private generatePeople(): string {\n return ` user = person \"User\" \"Extension user\"`;\n }\n\n /**\n * Generate external systems\n */\n private generateExternalSystems(): string {\n const parts: string[] = [];\n\n for (const integration of this.analysis.integrations) {\n if (integration.type === \"api\" || integration.type === \"websocket\") {\n const tech =\n integration.technology || (integration.type === \"websocket\" ? \"WebSocket\" : \"REST API\");\n let desc = integration.description || \"\";\n\n // Generate better description from API calls if available\n if (!desc && integration.calls && integration.calls.length > 0) {\n const endpoints = integration.calls\n .slice(0, 3)\n .map((c) => c.endpoint)\n .join(\", \");\n const methods = [...new Set(integration.calls.map((c) => c.method))].join(\", \");\n desc = `External API with endpoints: ${endpoints}. Methods: ${methods}`;\n }\n\n parts.push(\n ` ${this.toId(integration.name)} = softwareSystem \"${this.escape(integration.name)}\" \"${this.escape(desc)}\" {`\n );\n parts.push(\n ` tags \"External System\" \"${integration.type === \"websocket\" ? \"WebSocket\" : \"REST API\"}\"`\n );\n parts.push(` }`);\n }\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate main system (the extension)\n */\n private generateMainSystem(): string {\n const parts: string[] = [];\n\n parts.push(` extension = softwareSystem \"${this.escape(this.analysis.system.name)}\" {`);\n\n // Generate containers (contexts)\n for (const [contextType, contextInfo] of Object.entries(this.analysis.contexts)) {\n parts.push(this.generateContainer(contextType, contextInfo));\n }\n\n // Generate relationships between containers\n parts.push(this.generateContainerRelationships());\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate container (context)\n */\n private generateContainer(contextType: string, contextInfo: any): string {\n const parts: string[] = [];\n\n const technology = this.getContextTechnology(contextType);\n const description = contextInfo.description || `${this.capitalize(contextType)} context`;\n\n parts.push(\n ` ${contextType} = container \"${this.capitalize(contextType)}\" \"${this.escape(description)}\" \"${technology}\" {`\n );\n\n // Generate components if enabled\n if (\n this.options.includeComponentDiagrams &&\n this.options.componentDiagramContexts?.includes(contextType)\n ) {\n parts.push(this.generateComponents(contextType, contextInfo));\n parts.push(\"\");\n parts.push(this.generateComponentRelationships(contextType, contextInfo));\n }\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate components within a container\n */\n private generateComponents(contextType: string, contextInfo: any): string {\n const parts: string[] = [];\n\n // Build component definitions\n const componentDefs: Array<{\n id: string;\n name: string;\n description: string;\n tags: string[];\n properties: ComponentProperties;\n messageType: string;\n }> = [];\n\n // Generate components from handlers\n const handlersByType = new Map<string, any[]>();\n for (const handler of contextInfo.handlers) {\n if (!handlersByType.has(handler.messageType)) {\n handlersByType.set(handler.messageType, []);\n }\n handlersByType.get(handler.messageType)!.push(handler);\n }\n\n for (const [messageType, handlers] of handlersByType) {\n const componentName = this.toComponentName(messageType);\n const description = this.generateComponentDescription(messageType, handlers[0]);\n const tags = this.getComponentTags(messageType, handlers[0]);\n const properties = this.getComponentProperties(messageType, handlers[0], contextType);\n\n componentDefs.push({\n id: this.toId(componentName),\n name: componentName,\n description,\n tags,\n properties,\n messageType,\n });\n }\n\n // Apply grouping if configured, otherwise use automatic grouping\n if (this.options.groups && this.options.groups.length > 0) {\n // User-provided groups\n parts.push(...this.generateGroupedComponents(componentDefs, this.options.groups));\n } else {\n // Automatic grouping based on message type patterns\n const autoGroups = this.generateAutomaticGroups(componentDefs);\n if (autoGroups.length > 0) {\n parts.push(...this.generateGroupedComponents(componentDefs, autoGroups));\n } else {\n // No groups detected, render components directly\n for (const comp of componentDefs) {\n parts.push(this.generateComponentDefinition(comp, \" \"));\n }\n }\n }\n\n // Collect and generate service components from detected relationships\n const serviceComponents = new Set<string>();\n for (const handler of contextInfo.handlers) {\n if (handler.relationships) {\n for (const rel of handler.relationships) {\n // Add the target component if it's not already a handler\n const targetId = this.toId(rel.to);\n const isHandler = componentDefs.some((c) => c.id === targetId);\n if (!isHandler) {\n serviceComponents.add(rel.to);\n }\n }\n }\n }\n\n // Generate service component definitions\n for (const serviceId of serviceComponents) {\n const serviceName = serviceId\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\n parts.push(\n ` ${this.toId(serviceId)} = component \"${serviceName}\" \"Business logic service\" {`\n );\n parts.push(` tags \"Service\" \"Auto-detected\"`);\n parts.push(` }`);\n }\n\n // Generate components from UI components\n if (contextInfo.components) {\n for (const comp of contextInfo.components) {\n parts.push(\n ` ${this.toId(comp.name)} = component \"${comp.name}\" \"${this.escape(comp.description || \"UI component\")}\" {`\n );\n parts.push(` tags \"UI Component\"`);\n parts.push(` }`);\n }\n }\n\n // Add Chrome API components if used\n if (contextInfo.chromeAPIs && contextInfo.chromeAPIs.length > 0) {\n for (const api of contextInfo.chromeAPIs) {\n const apiId = this.toId(`chrome_${api}`);\n parts.push(\n ` ${apiId} = component \"Chrome ${this.capitalize(api)} API\" \"Browser API for ${api}\" {`\n );\n parts.push(` tags \"Chrome API\" \"External\"`);\n parts.push(` }`);\n }\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate better component descriptions based on message type\n */\n private generateComponentDescription(messageType: string, handler: any): string {\n const type = messageType.toLowerCase();\n\n // Authentication related\n if (type.includes(\"login\")) {\n return \"Authenticates users and establishes sessions\";\n }\n if (type.includes(\"logout\")) {\n return \"Terminates user sessions and clears credentials\";\n }\n\n // CRUD operations\n if (type.includes(\"add\") || type.includes(\"create\")) {\n const entity = type.replace(/_(add|create)/, \"\").replace(/_/g, \" \");\n return `Creates new ${entity} items and persists to storage`;\n }\n if (type.includes(\"remove\") || type.includes(\"delete\")) {\n const entity = type.replace(/_(remove|delete)/, \"\").replace(/_/g, \" \");\n return `Removes ${entity} items from storage`;\n }\n if (type.includes(\"update\") || type.includes(\"toggle\")) {\n const entity = type.replace(/_(update|toggle)/, \"\").replace(/_/g, \" \");\n return `Updates ${entity} item state and syncs with storage`;\n }\n if (type.includes(\"clear\")) {\n const entity = type.replace(/_clear.*/, \"\").replace(/_/g, \" \");\n return `Clears all ${entity} items matching criteria`;\n }\n\n // Query operations\n if (type.includes(\"get\") || type.includes(\"fetch\") || type.includes(\"load\")) {\n const entity = type.replace(/_(get|fetch|load)/, \"\").replace(/_/g, \" \");\n return `Retrieves ${entity} data from storage`;\n }\n\n // Default\n return `Processes ${messageType} messages and coordinates business logic`;\n }\n\n /**\n * Determine appropriate tags for a component\n */\n private getComponentTags(messageType: string, handler: any): string[] {\n const tags: string[] = [\"Message Handler\"];\n const type = messageType.toLowerCase();\n\n // Add functional tags\n if (type.includes(\"login\") || type.includes(\"logout\") || type.includes(\"auth\")) {\n tags.push(\"Authentication\");\n } else if (\n type.includes(\"add\") ||\n type.includes(\"create\") ||\n type.includes(\"update\") ||\n type.includes(\"delete\") ||\n type.includes(\"remove\") ||\n type.includes(\"toggle\")\n ) {\n tags.push(\"CRUD\");\n } else if (type.includes(\"get\") || type.includes(\"fetch\") || type.includes(\"load\")) {\n tags.push(\"Query\");\n }\n\n // Add domain tags\n if (type.includes(\"user\")) {\n tags.push(\"User Management\");\n }\n if (type.includes(\"todo\")) {\n tags.push(\"Todo Management\");\n }\n if (type.includes(\"state\")) {\n tags.push(\"State Management\");\n }\n\n return tags;\n }\n\n /**\n * Get component properties for traceability\n */\n private getComponentProperties(\n messageType: string,\n handler: any,\n contextType: string\n ): ComponentProperties {\n const properties: ComponentProperties = {};\n\n // Add source file and line number\n if (handler.location) {\n const relativePath = handler.location.file.replace(this.analysis.projectRoot + \"/\", \"\");\n properties[\"Source\"] = `${relativePath}:${handler.location.line}`;\n }\n\n // Add technology stack\n const technologies: string[] = [\"TypeScript\"];\n\n // Detect framework/library from file path or context\n if (handler.location?.file.includes(\"ws\") || contextType === \"server\") {\n technologies.push(\"WebSocket\");\n }\n if (handler.location?.file.includes(\"socket.io\")) {\n technologies.push(\"Socket.IO\");\n }\n if (handler.location?.file.includes(\"elysia\")) {\n technologies.push(\"Elysia\");\n }\n\n properties[\"Technology\"] = technologies.join(\", \");\n\n // Add pattern/type\n const type = messageType.toLowerCase();\n let pattern = \"Message Handler\";\n\n if (type.includes(\"query\") || type.includes(\"get\") || type.includes(\"fetch\") || type.includes(\"load\")) {\n pattern = \"Query Handler\";\n properties[\"Message Type\"] = \"Query\";\n } else if (\n type.includes(\"command\") ||\n type.includes(\"add\") ||\n type.includes(\"create\") ||\n type.includes(\"update\") ||\n type.includes(\"delete\") ||\n type.includes(\"remove\")\n ) {\n pattern = \"Command Handler\";\n properties[\"Message Type\"] = \"Command\";\n } else if (type.includes(\"auth\") || type.includes(\"login\") || type.includes(\"logout\")) {\n pattern = \"Authentication Handler\";\n properties[\"Message Type\"] = \"Authentication\";\n } else if (type.includes(\"subscribe\") || type.includes(\"watch\") || type.includes(\"listen\")) {\n pattern = \"Subscription Handler\";\n properties[\"Message Type\"] = \"Subscription\";\n }\n\n properties[\"Pattern\"] = pattern;\n\n // Merge with user-provided properties\n if (this.options.properties && this.options.properties[messageType]) {\n Object.assign(properties, this.options.properties[messageType]);\n }\n\n return properties;\n }\n\n /**\n * Generate relationships between components within a container\n */\n private generateComponentRelationships(contextType: string, contextInfo: any): string {\n const parts: string[] = [];\n\n // Build a map of handler components\n const handlersByType = new Map<string, any[]>();\n for (const handler of contextInfo.handlers) {\n if (!handlersByType.has(handler.messageType)) {\n handlersByType.set(handler.messageType, []);\n }\n handlersByType.get(handler.messageType)!.push(handler);\n }\n\n // Add relationships to Chrome APIs\n if (contextInfo.chromeAPIs && contextInfo.chromeAPIs.length > 0) {\n for (const api of contextInfo.chromeAPIs) {\n const apiId = this.toId(`chrome_${api}`);\n\n // Find handlers that use this API\n for (const [messageType, handlers] of handlersByType) {\n const componentId = this.toId(this.toComponentName(messageType));\n\n // Infer relationship based on API\n let description = `Uses ${api}`;\n if (api === \"storage\") {\n if (\n messageType.toLowerCase().includes(\"get\") ||\n messageType.toLowerCase().includes(\"load\")\n ) {\n description = \"Reads from storage\";\n } else {\n description = \"Writes to storage\";\n }\n } else if (api === \"tabs\") {\n description = \"Manages browser tabs\";\n } else if (api === \"runtime\") {\n description = \"Sends messages\";\n }\n\n parts.push(` ${componentId} -> ${apiId} \"${description}\"`);\n }\n }\n }\n\n // Add user-provided explicit relationships\n if (this.options.relationships && this.options.relationships.length > 0) {\n for (const rel of this.options.relationships) {\n const fromId = this.toId(rel.from);\n const toId = this.toId(rel.to);\n const description = this.escape(rel.description);\n\n parts.push(` ${fromId} -> ${toId} \"${description}\" {`);\n\n if (rel.technology) {\n parts.push(` technology \"${this.escape(rel.technology)}\"`);\n }\n\n if (rel.tags && rel.tags.length > 0) {\n parts.push(` tags \"${rel.tags.join('\" \"')}\"`);\n }\n\n parts.push(` }`);\n }\n }\n\n // Add automatically detected relationships from handler code\n for (const handler of contextInfo.handlers) {\n if (handler.relationships && handler.relationships.length > 0) {\n for (const rel of handler.relationships) {\n const fromId = this.toId(rel.from);\n const toId = this.toId(rel.to);\n const description = this.escape(rel.description);\n\n parts.push(` ${fromId} -> ${toId} \"${description}\" {`);\n\n if (rel.technology) {\n parts.push(` technology \"${this.escape(rel.technology)}\"`);\n }\n\n parts.push(` tags \"Auto-detected\"`);\n parts.push(` }`);\n }\n }\n }\n\n // Add state management relationships (handlers that modify state)\n const stateHandlers: string[] = [];\n const queryHandlers: string[] = [];\n\n for (const [messageType, handlers] of handlersByType) {\n const type = messageType.toLowerCase();\n const componentId = this.toId(this.toComponentName(messageType));\n\n if (\n type.includes(\"add\") ||\n type.includes(\"create\") ||\n type.includes(\"update\") ||\n type.includes(\"delete\") ||\n type.includes(\"remove\") ||\n type.includes(\"toggle\") ||\n type.includes(\"clear\") ||\n type.includes(\"login\") ||\n type.includes(\"logout\")\n ) {\n stateHandlers.push(componentId);\n } else if (type.includes(\"get\") || type.includes(\"fetch\") || type.includes(\"load\")) {\n queryHandlers.push(componentId);\n }\n }\n\n // Create implicit state manager if we have state operations\n if (stateHandlers.length > 0 && queryHandlers.length > 0) {\n // Query handlers depend on state set by mutation handlers\n for (const queryHandler of queryHandlers) {\n for (const stateHandler of stateHandlers) {\n if (queryHandler !== stateHandler) {\n parts.push(` ${stateHandler} -> ${queryHandler} \"Updates state\" {`);\n parts.push(` tags \"Implicit\"`);\n parts.push(` }`);\n }\n }\n }\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate relationships between containers\n */\n private generateContainerRelationships(): string {\n const parts: string[] = [];\n\n // Add user relationships\n const uiContexts = [\"popup\", \"options\", \"devtools\"];\n for (const contextType of Object.keys(this.analysis.contexts)) {\n if (uiContexts.includes(contextType)) {\n parts.push(` user -> extension.${contextType} \"Uses\"`);\n }\n }\n\n // Add message flow relationships\n for (const flow of this.analysis.messageFlows) {\n const tech = `Sends ${flow.messageType}`;\n for (const to of flow.to) {\n parts.push(` extension.${flow.from} -> extension.${to} \"${tech}\"`);\n }\n }\n\n // Add external API relationships\n for (const integration of this.analysis.integrations) {\n if (integration.type === \"api\" || integration.type === \"websocket\") {\n // Find which contexts use this integration\n for (const [contextType, contextInfo] of Object.entries(this.analysis.contexts)) {\n const usesIntegration = contextInfo.externalAPIs.some((api: any) =>\n integration.calls?.some((call) => call.endpoint === api.endpoint)\n );\n\n if (usesIntegration) {\n const method = integration.type === \"websocket\" ? \"Connects to\" : \"Calls\";\n parts.push(\n ` extension.${contextType} -> ${this.toId(integration.name)} \"${method}\"`\n );\n }\n }\n }\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate views section\n */\n private generateViews(): string {\n const parts: string[] = [];\n\n parts.push(\" views {\");\n parts.push(this.generateSystemContextView());\n parts.push(this.generateContainerView());\n\n if (this.options.includeComponentDiagrams) {\n for (const contextType of this.options.componentDiagramContexts || []) {\n if (this.analysis.contexts[contextType]) {\n parts.push(this.generateComponentView(contextType));\n }\n }\n }\n\n if (this.options.includeDynamicDiagrams) {\n parts.push(this.generateDynamicViews());\n }\n\n // Add deployment views if configured\n if (this.options.deploymentNodes && this.options.deploymentNodes.length > 0) {\n parts.push(this.generateDeploymentViews());\n }\n\n parts.push(this.generateStyles());\n parts.push(\" }\");\n\n // Add documentation section if ADRs exist\n if (this.analysis.adrs && this.analysis.adrs.adrs.length > 0) {\n parts.push(\"\");\n parts.push(this.generateDocumentation());\n }\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate documentation section for ADRs\n */\n private generateDocumentation(): string {\n if (!this.analysis.adrs || this.analysis.adrs.adrs.length === 0) {\n return \"\";\n }\n\n const parts: string[] = [];\n parts.push(\" documentation {\");\n\n for (const adr of this.analysis.adrs.adrs) {\n parts.push(` decision \"${adr.id}\" {`);\n parts.push(` title \"${this.escape(adr.title)}\"`);\n parts.push(` status \"${adr.status}\"`);\n parts.push(` date \"${adr.date}\"`);\n parts.push(` content \"${this.escape(adr.context)}\"`);\n parts.push(\" }\");\n }\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate system context view\n */\n private generateSystemContextView(): string {\n return ` systemContext extension \"SystemContext\" {\n include *\n autoLayout lr\n }`;\n }\n\n /**\n * Generate container view\n */\n private generateContainerView(): string {\n return ` container extension \"Containers\" {\n include *\n autoLayout lr\n }`;\n }\n\n /**\n * Generate component view\n */\n private generateComponentView(contextType: string): string {\n return ` component extension.${contextType} \"Components_${this.capitalize(contextType)}\" {\n include *\n autoLayout tb\n }`;\n }\n\n /**\n * Generate dynamic views for message flows\n */\n private generateDynamicViews(): string {\n const parts: string[] = [];\n\n // Generate user-provided dynamic diagrams first\n if (this.options.dynamicDiagrams && this.options.dynamicDiagrams.length > 0) {\n for (const diagram of this.options.dynamicDiagrams) {\n parts.push(this.generateUserDynamicDiagram(diagram));\n }\n }\n\n // Auto-generate diagrams from handler relationships (Priority 5)\n const autoDiagrams = this.generateAutomaticDynamicDiagrams();\n if (autoDiagrams.length > 0) {\n parts.push(...autoDiagrams);\n }\n\n // Group flows by domain/feature for inter-context flow diagrams\n const flowsByDomain = new Map<string, any[]>();\n\n for (const flow of this.analysis.messageFlows) {\n // Extract domain from message type (e.g., USER_LOGIN -> user, TODO_ADD -> todo)\n const messageType = flow.messageType.toLowerCase();\n let domain = \"general\";\n\n if (\n messageType.includes(\"user\") ||\n messageType.includes(\"login\") ||\n messageType.includes(\"logout\") ||\n messageType.includes(\"auth\")\n ) {\n domain = \"authentication\";\n } else if (messageType.includes(\"todo\")) {\n domain = \"todo\";\n } else if (messageType.includes(\"state\")) {\n domain = \"state\";\n }\n\n if (!flowsByDomain.has(domain)) {\n flowsByDomain.set(domain, []);\n }\n flowsByDomain.get(domain)!.push(flow);\n }\n\n // Generate a dynamic view for each domain\n let count = 0;\n for (const [domain, flows] of flowsByDomain) {\n if (count >= 5) break; // Limit to avoid too many diagrams\n\n const viewName = this.capitalize(domain) + \" Flow\";\n parts.push(this.generateDynamicView(viewName, flows, domain));\n count++;\n }\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Automatically generate dynamic diagrams from handler relationships\n */\n private generateAutomaticDynamicDiagrams(): string[] {\n const diagrams: string[] = [];\n const processedHandlers = new Set<string>();\n\n // Collect all handlers with relationships from all contexts\n type HandlerWithContext = {\n handler: any;\n contextType: string;\n contextName: string;\n };\n\n const handlersWithRelationships: HandlerWithContext[] = [];\n\n for (const [contextType, contextInfo] of Object.entries(this.analysis.contexts)) {\n for (const handler of contextInfo.handlers) {\n if (handler.relationships && handler.relationships.length > 0) {\n handlersWithRelationships.push({\n handler,\n contextType,\n contextName: this.toId(contextType),\n });\n }\n }\n }\n\n // Group handlers by category for focused diagrams\n const handlerGroups = new Map<string, HandlerWithContext[]>();\n\n for (const hwc of handlersWithRelationships) {\n const messageType = hwc.handler.messageType.toLowerCase();\n let category = \"general\";\n\n // Category 1: Authentication\n if (\n messageType.includes(\"auth\") ||\n messageType.includes(\"login\") ||\n messageType.includes(\"logout\") ||\n messageType.includes(\"verify\") ||\n messageType.includes(\"register\")\n ) {\n category = \"authentication\";\n }\n // Category 2: CRUD operations by entity\n else if (messageType.includes(\"user\")) {\n category = \"user\";\n } else if (messageType.includes(\"todo\")) {\n category = \"todo\";\n }\n // Category 3: Query vs Command\n else if (\n messageType.includes(\"query\") ||\n messageType.includes(\"get\") ||\n messageType.includes(\"fetch\") ||\n messageType.includes(\"list\")\n ) {\n category = \"query\";\n } else if (\n messageType.includes(\"command\") ||\n messageType.includes(\"create\") ||\n messageType.includes(\"update\") ||\n messageType.includes(\"delete\") ||\n messageType.includes(\"add\") ||\n messageType.includes(\"remove\")\n ) {\n category = \"command\";\n }\n\n if (!handlerGroups.has(category)) {\n handlerGroups.set(category, []);\n }\n handlerGroups.get(category)!.push(hwc);\n }\n\n // Generate a diagram for each category (limit to avoid clutter)\n let diagramCount = 0;\n const maxDiagrams = 5;\n\n // If we have multiple small categories, combine into a single overview diagram\n const totalHandlers = handlersWithRelationships.length;\n const categoriesWithHandlers = handlerGroups.size;\n\n if (totalHandlers <= 5 && categoriesWithHandlers <= 3) {\n // Generate a single \"Message Processing Flow\" diagram with all handlers\n const allHandlers = Array.from(handlerGroups.values()).flat();\n const diagram = this.generateHandlerFlowDiagram(\"general\", allHandlers);\n if (diagram) {\n diagrams.push(diagram);\n }\n } else {\n // Generate separate diagrams per category\n for (const [category, handlers] of handlerGroups) {\n if (diagramCount >= maxDiagrams) break;\n if (handlers.length === 0) continue;\n\n // Generate diagram if we have at least 1 handler with relationships\n const diagram = this.generateHandlerFlowDiagram(category, handlers);\n if (diagram) {\n diagrams.push(diagram);\n diagramCount++;\n }\n }\n }\n\n return diagrams;\n }\n\n /**\n * Generate a single dynamic diagram for a handler category\n */\n private generateHandlerFlowDiagram(\n category: string,\n handlers: Array<{ handler: any; contextType: string; contextName: string }>\n ): string | null {\n const parts: string[] = [];\n\n // Create title and description\n const title = this.getCategoryTitle(category);\n const description = this.getCategoryDescription(category);\n\n // Use container scope (most common for component flows)\n const scope = handlers[0]?.contextName\n ? `extension.${handlers[0].contextName}`\n : \"extension\";\n\n parts.push(\n ` dynamic ${scope} \"${title}\" \"${description}\" {`\n );\n\n let stepCount = 0;\n\n // For each handler, show its flow through services\n for (const { handler, contextName } of handlers) {\n const handlerComponentId = this.toId(`${handler.messageType}_handler`);\n\n // Show flow for each relationship\n for (const rel of handler.relationships) {\n const toComponent = this.toId(rel.to);\n\n // Add flow step\n parts.push(` ${handlerComponentId} -> ${toComponent} \"${rel.description}\"`);\n stepCount++;\n }\n }\n\n // Only generate diagram if there are actual flows\n if (stepCount === 0) {\n return null;\n }\n\n parts.push(\" autoLayout lr\");\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Get display title for category\n */\n private getCategoryTitle(category: string): string {\n const titles: Record<string, string> = {\n authentication: \"Authentication Flow\",\n user: \"User Management Flow\",\n todo: \"Todo Management Flow\",\n query: \"Query Processing Flow\",\n command: \"Command Processing Flow\",\n general: \"Message Processing Flow\",\n };\n return titles[category] || `${this.capitalize(category)} Flow`;\n }\n\n /**\n * Get description for category\n */\n private getCategoryDescription(category: string): string {\n const descriptions: Record<string, string> = {\n authentication: \"Shows authentication request processing and service interactions\",\n user: \"Shows user management operations and service dependencies\",\n todo: \"Shows todo item operations and service dependencies\",\n query: \"Shows read operations flow through query handlers and services\",\n command: \"Shows write operations flow through command handlers and services\",\n general: \"Shows message processing flow through handlers and services\",\n };\n return descriptions[category] || \"Shows message flow through system components\";\n }\n\n /**\n * Generate a user-provided dynamic diagram\n */\n private generateUserDynamicDiagram(diagram: DynamicDiagram): string {\n const parts: string[] = [];\n\n parts.push(` dynamic ${diagram.scope || \"extension\"} \"${this.escape(diagram.title)}\" \"${this.escape(diagram.description || \"\")}\" {`);\n\n for (const step of diagram.steps) {\n const from = step.from;\n const to = step.to;\n const description = this.escape(step.description);\n\n parts.push(` ${from} -> ${to} \"${description}\"`);\n }\n\n parts.push(\" autoLayout lr\");\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate single dynamic view\n */\n private generateDynamicView(flowName: string, flows: any[], domain: string): string {\n const parts: string[] = [];\n\n // Create a user-centric description\n const description = this.getDynamicViewDescription(domain);\n parts.push(` dynamic extension \"${flowName}\" \"${description}\" {`);\n\n // Add user interaction if this is a UI flow\n const uiContexts = [\"popup\", \"options\", \"devtools\"];\n const hasUIFlow = flows.some((f) => uiContexts.includes(f.from));\n\n if (hasUIFlow) {\n // Start with user interaction\n const firstFlow = flows.find((f) => uiContexts.includes(f.from));\n if (firstFlow) {\n const action = this.getUserAction(domain);\n parts.push(` user -> extension.${firstFlow.from} \"${action}\"`);\n }\n }\n\n // Generate message flows\n for (const flow of flows) {\n const messageDesc = this.getMessageDescription(flow.messageType);\n\n for (const to of flow.to) {\n parts.push(` extension.${flow.from} -> extension.${to} \"${messageDesc}\"`);\n }\n }\n\n parts.push(\" autoLayout lr\");\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Get description for dynamic view based on domain\n */\n private getDynamicViewDescription(domain: string): string {\n const descriptions: Record<string, string> = {\n authentication: \"User authentication and session management\",\n todo: \"Todo item creation, updates, and retrieval\",\n state: \"Application state synchronization\",\n general: \"Message flow through the system\",\n };\n return descriptions[domain] || descriptions.general;\n }\n\n /**\n * Get user action description for domain\n */\n private getUserAction(domain: string): string {\n const actions: Record<string, string> = {\n authentication: \"Initiates login\",\n todo: \"Manages todo items\",\n state: \"Requests state\",\n general: \"Interacts\",\n };\n return actions[domain] || actions.general;\n }\n\n /**\n * Get message description based on type\n */\n private getMessageDescription(messageType: string): string {\n const type = messageType.toLowerCase();\n\n if (type.includes(\"login\")) return \"Authenticate user\";\n if (type.includes(\"logout\")) return \"End session\";\n if (type.includes(\"add\") || type.includes(\"create\")) return \"Create item\";\n if (type.includes(\"remove\") || type.includes(\"delete\")) return \"Delete item\";\n if (type.includes(\"update\") || type.includes(\"toggle\")) return \"Update item\";\n if (type.includes(\"get\") || type.includes(\"fetch\")) return \"Retrieve data\";\n if (type.includes(\"clear\")) return \"Clear items\";\n\n return messageType;\n }\n\n /**\n * Generate deployment environments (for model section)\n */\n private generateDeploymentEnvironments(): string {\n const parts: string[] = [];\n\n // Group deployment nodes by environment\n const nodesByEnvironment = new Map<string, DeploymentNode[]>();\n\n for (const node of this.options.deploymentNodes || []) {\n const env = node.tags?.find((tag) => tag.toLowerCase().includes(\"environment:\"))\n ?.split(\":\")[1] || \"Production\";\n\n if (!nodesByEnvironment.has(env)) {\n nodesByEnvironment.set(env, []);\n }\n nodesByEnvironment.get(env)!.push(node);\n }\n\n // Generate deployment environment for each environment\n for (const [envName, nodes] of nodesByEnvironment) {\n parts.push(` deploymentEnvironment \"${envName}\" {`);\n\n for (const node of nodes) {\n parts.push(this.generateDeploymentNode(node, \" \"));\n }\n\n parts.push(\" }\");\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate a single deployment node\n */\n private generateDeploymentNode(node: DeploymentNode, indent: string): string {\n const parts: string[] = [];\n\n const description = node.description ? ` \"${this.escape(node.description)}\"` : \"\";\n const technology = node.technology ? ` \"${this.escape(node.technology)}\"` : \"\";\n\n parts.push(`${indent}deploymentNode \"${this.escape(node.name)}\"${description}${technology} {`);\n\n // Add tags if present\n if (node.tags && node.tags.length > 0) {\n const filteredTags = node.tags.filter((tag) => !tag.toLowerCase().includes(\"environment:\"));\n if (filteredTags.length > 0) {\n parts.push(`${indent} tags \"${filteredTags.join('\" \"')}\"`);\n }\n }\n\n // Add properties if present\n if (node.properties && Object.keys(node.properties).length > 0) {\n parts.push(`${indent} properties {`);\n for (const [key, value] of Object.entries(node.properties)) {\n parts.push(`${indent} \"${this.escape(key)}\" \"${this.escape(value)}\"`);\n }\n parts.push(`${indent} }`);\n }\n\n // Add child deployment nodes (nested infrastructure)\n if (node.children && node.children.length > 0) {\n for (const child of node.children) {\n parts.push(this.generateDeploymentNode(child, indent + \" \"));\n }\n }\n\n // Add container instances if specified\n if (node.containerInstances && node.containerInstances.length > 0) {\n for (const containerInstance of node.containerInstances) {\n const instancesStr = containerInstance.instances && containerInstance.instances > 1\n ? ` ${containerInstance.instances}`\n : \"\";\n parts.push(`${indent} containerInstance extension.${containerInstance.container}${instancesStr}`);\n }\n } else if (!node.children || node.children.length === 0) {\n // If no container instances specified and no children, deploy all containers as fallback\n const contexts = Object.keys(this.analysis.contexts);\n if (contexts.length > 0) {\n for (const contextType of contexts) {\n parts.push(`${indent} containerInstance extension.${contextType}`);\n }\n }\n }\n\n parts.push(`${indent}}`);\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate deployment views\n */\n private generateDeploymentViews(): string {\n const parts: string[] = [];\n\n // Group deployment nodes by environment\n const nodesByEnvironment = new Map<string, DeploymentNode[]>();\n\n for (const node of this.options.deploymentNodes || []) {\n const env = node.tags?.find((tag) => tag.toLowerCase().includes(\"environment:\"))\n ?.split(\":\")[1] || \"Production\";\n\n if (!nodesByEnvironment.has(env)) {\n nodesByEnvironment.set(env, []);\n }\n nodesByEnvironment.get(env)!.push(node);\n }\n\n // Generate deployment view for each environment\n for (const [envName] of nodesByEnvironment) {\n const description = `${envName} environment deployment architecture`;\n\n parts.push(` deployment extension \"${envName}\" \"${description}\" {`);\n parts.push(\" include *\");\n parts.push(\" autoLayout lr\");\n parts.push(\" }\");\n }\n\n return parts.join(\"\\n\\n\");\n }\n\n /**\n * Generate styles\n */\n /**\n * Generate styles section with element and relationship styles\n */\n private generateStyles(): string {\n const parts: string[] = [];\n\n parts.push(\" styles {\");\n\n // Generate element styles\n if (this.options.includeDefaultStyles && this.options.styles?.elements) {\n for (const [tag, style] of Object.entries(this.options.styles.elements)) {\n parts.push(this.generateElementStyle(tag, style));\n }\n }\n\n // Generate relationship styles\n if (this.options.includeDefaultStyles && this.options.styles?.relationships) {\n for (const [tag, style] of Object.entries(this.options.styles.relationships)) {\n parts.push(this.generateRelationshipStyle(tag, style));\n }\n }\n\n // Add theme if specified\n if (this.options.styles?.theme) {\n parts.push(` theme ${this.options.styles.theme}`);\n }\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate style block for an element tag\n */\n private generateElementStyle(tag: string, style: ElementStyle): string {\n const parts: string[] = [];\n\n parts.push(` element \"${tag}\" {`);\n\n if (style.shape) {\n parts.push(` shape ${style.shape}`);\n }\n if (style.icon) {\n parts.push(` icon ${style.icon}`);\n }\n if (style.width) {\n parts.push(` width ${style.width}`);\n }\n if (style.height) {\n parts.push(` height ${style.height}`);\n }\n if (style.background) {\n parts.push(` background ${style.background}`);\n }\n if (style.color) {\n parts.push(` color ${style.color}`);\n }\n if (style.fontSize) {\n parts.push(` fontSize ${style.fontSize}`);\n }\n if (style.border) {\n parts.push(` border ${style.border}`);\n }\n if (style.opacity !== undefined) {\n parts.push(` opacity ${style.opacity}`);\n }\n if (style.metadata !== undefined) {\n parts.push(` metadata ${style.metadata}`);\n }\n if (style.description !== undefined) {\n parts.push(` description ${style.description}`);\n }\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Generate style block for a relationship tag\n */\n private generateRelationshipStyle(tag: string, style: RelationshipStyle): string {\n const parts: string[] = [];\n\n parts.push(` relationship \"${tag}\" {`);\n\n if (style.thickness) {\n parts.push(` thickness ${style.thickness}`);\n }\n if (style.color) {\n parts.push(` color ${style.color}`);\n }\n if (style.style) {\n parts.push(` style ${style.style}`);\n }\n if (style.routing) {\n parts.push(` routing ${style.routing}`);\n }\n if (style.fontSize) {\n parts.push(` fontSize ${style.fontSize}`);\n }\n if (style.width) {\n parts.push(` width ${style.width}`);\n }\n if (style.position) {\n parts.push(` position ${style.position}`);\n }\n if (style.opacity !== undefined) {\n parts.push(` opacity ${style.opacity}`);\n }\n\n parts.push(\" }\");\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Get technology label for context\n */\n private getContextTechnology(contextType: string): string {\n const technologies: Record<string, string> = {\n background: \"Service Worker / Background Script\",\n content: \"Content Script\",\n popup: \"Browser Action Popup\",\n devtools: \"DevTools Panel\",\n options: \"Options Page\",\n offscreen: \"Offscreen Document\",\n };\n\n return technologies[contextType] || \"Extension Context\";\n }\n\n /**\n * Convert message type to component name\n */\n private toComponentName(messageType: string): string {\n return (\n messageType\n .split(\"_\")\n .map((part) => this.capitalize(part.toLowerCase()))\n .join(\" \") + \" Handler\"\n );\n }\n\n /**\n * Convert name to identifier\n */\n private toId(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_|_$/g, \"\");\n }\n\n /**\n * Convert flow name to view name\n */\n private toViewName(flowName: string): string {\n return flowName\n .split(/[_-]/)\n .map((part) => this.capitalize(part))\n .join(\" \");\n }\n\n /**\n * Capitalize first letter\n */\n private capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n /**\n * Escape string for DSL\n */\n /**\n * Generate a single component definition\n */\n private generateComponentDefinition(\n comp: {\n id: string;\n name: string;\n description: string;\n tags: string[];\n properties: ComponentProperties;\n },\n indent: string\n ): string {\n const parts: string[] = [];\n\n parts.push(`${indent}${comp.id} = component \"${comp.name}\" \"${this.escape(comp.description)}\" {`);\n\n if (comp.tags.length > 0) {\n parts.push(`${indent} tags \"${comp.tags.join('\" \"')}\"`);\n }\n\n if (comp.properties && Object.keys(comp.properties).length > 0) {\n parts.push(`${indent} properties {`);\n for (const [key, value] of Object.entries(comp.properties)) {\n if (value) {\n parts.push(`${indent} \"${key}\" \"${this.escape(value)}\"`);\n }\n }\n parts.push(`${indent} }`);\n }\n\n // Add perspectives if configured for this component\n if (this.options.perspectives && this.options.perspectives[comp.id]) {\n const perspectives = this.options.perspectives[comp.id];\n parts.push(`${indent} perspectives {`);\n for (const perspective of perspectives) {\n parts.push(`${indent} \"${this.escape(perspective.name)}\" \"${this.escape(perspective.description)}\"`);\n }\n parts.push(`${indent} }`);\n }\n\n parts.push(`${indent}}`);\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Automatically generate groups based on message type patterns\n */\n private generateAutomaticGroups(\n componentDefs: Array<{\n id: string;\n name: string;\n description: string;\n tags: string[];\n properties: ComponentProperties;\n messageType: string;\n }>\n ): ComponentGroup[] {\n const groups: ComponentGroup[] = [];\n const assigned = new Set<string>();\n\n // Group 1: Authentication handlers\n const authHandlers = componentDefs.filter((comp) => {\n const type = comp.messageType.toLowerCase();\n return (\n type.includes(\"login\") ||\n type.includes(\"logout\") ||\n type.includes(\"auth\") ||\n type.includes(\"verify\") ||\n type.includes(\"register\") ||\n type.includes(\"signup\")\n );\n });\n\n if (authHandlers.length > 0) {\n groups.push({\n name: \"Authentication\",\n components: authHandlers.map((c) => c.id),\n });\n authHandlers.forEach((h) => assigned.add(h.id));\n }\n\n // Group 2: Subscription handlers\n const subscriptionHandlers = componentDefs.filter((comp) => {\n const type = comp.messageType.toLowerCase();\n return type.includes(\"subscribe\") || type.includes(\"unsubscribe\");\n });\n\n if (subscriptionHandlers.length > 0) {\n groups.push({\n name: \"Subscriptions\",\n components: subscriptionHandlers.map((c) => c.id),\n });\n subscriptionHandlers.forEach((h) => assigned.add(h.id));\n }\n\n // Group 3: Entity-based grouping\n // Extract entities from message types (e.g., \"user_add\", \"todo_remove\" → \"user\", \"todo\")\n const entityGroups = new Map<string, string[]>();\n\n for (const comp of componentDefs) {\n if (assigned.has(comp.id)) continue;\n\n const type = comp.messageType.toLowerCase();\n\n // Skip WebSocket lifecycle handlers\n if (type === \"connection\" || type === \"message\" || type === \"close\" || type === \"error\") {\n continue;\n }\n\n // Extract entity name (first part before underscore or action verb)\n let entity: string | null = null;\n\n // Pattern 1: entity_action (e.g., \"user_add\", \"todo_remove\")\n const underscoreMatch = type.match(/^([a-z]+)_(add|create|update|delete|remove|get|fetch|load|list|query)/);\n if (underscoreMatch) {\n entity = underscoreMatch[1];\n }\n\n // Pattern 2: actionEntity (e.g., \"addUser\", \"removeTask\")\n if (!entity) {\n const camelMatch = type.match(/(add|create|update|delete|remove|get|fetch|load|list|query)([a-z]+)/i);\n if (camelMatch) {\n entity = camelMatch[2].toLowerCase();\n }\n }\n\n // Pattern 3: plain entity name (e.g., \"user\", \"todo\")\n if (!entity && type.match(/^[a-z]+$/)) {\n entity = type;\n }\n\n if (entity) {\n if (!entityGroups.has(entity)) {\n entityGroups.set(entity, []);\n }\n entityGroups.get(entity)!.push(comp.id);\n assigned.add(comp.id);\n }\n }\n\n // Add entity groups (capitalize entity name for group title)\n for (const [entity, componentIds] of entityGroups) {\n if (componentIds.length >= 2) {\n // Only create group if there are at least 2 components\n const entityName = entity.charAt(0).toUpperCase() + entity.slice(1);\n groups.push({\n name: `${entityName} Management`,\n components: componentIds,\n });\n } else {\n // Remove from assigned if not enough for a group\n componentIds.forEach((id) => assigned.delete(id));\n }\n }\n\n // Group 4: Query/Command pattern for remaining handlers\n const queryHandlers = componentDefs.filter((comp) => {\n if (assigned.has(comp.id)) return false;\n const type = comp.messageType.toLowerCase();\n return (\n type.includes(\"query\") ||\n type.includes(\"get\") ||\n type.includes(\"fetch\") ||\n type.includes(\"load\") ||\n type.includes(\"list\") ||\n type.includes(\"read\")\n );\n });\n\n const commandHandlers = componentDefs.filter((comp) => {\n if (assigned.has(comp.id)) return false;\n const type = comp.messageType.toLowerCase();\n return (\n type.includes(\"command\") ||\n type.includes(\"add\") ||\n type.includes(\"create\") ||\n type.includes(\"update\") ||\n type.includes(\"delete\") ||\n type.includes(\"remove\") ||\n type.includes(\"set\") ||\n type.includes(\"clear\")\n );\n });\n\n if (queryHandlers.length >= 2) {\n groups.push({\n name: \"Query Handlers\",\n components: queryHandlers.map((c) => c.id),\n });\n queryHandlers.forEach((h) => assigned.add(h.id));\n }\n\n if (commandHandlers.length >= 2) {\n groups.push({\n name: \"Command Handlers\",\n components: commandHandlers.map((c) => c.id),\n });\n commandHandlers.forEach((h) => assigned.add(h.id));\n }\n\n // Only return groups if we successfully grouped most components\n const groupedCount = assigned.size;\n const totalCount = componentDefs.length;\n\n // Return groups if at least 50% are grouped OR we have at least 2 groups\n if (groupedCount >= totalCount * 0.5 || groups.length >= 2) {\n return groups;\n }\n\n // Not enough components grouped, return empty to skip grouping\n return [];\n }\n\n /**\n * Generate components organized into groups\n */\n private generateGroupedComponents(\n componentDefs: Array<{\n id: string;\n name: string;\n description: string;\n tags: string[];\n properties: ComponentProperties;\n messageType: string;\n }>,\n groups: ComponentGroup[]\n ): string[] {\n const parts: string[] = [];\n const assignedComponents = new Set<string>();\n\n for (const group of groups) {\n const groupComponents = componentDefs.filter((comp) =>\n group.components.includes(comp.id)\n );\n\n if (groupComponents.length === 0) continue;\n\n parts.push(` group \"${this.escape(group.name)}\" {`);\n\n for (const comp of groupComponents) {\n parts.push(this.generateComponentDefinition(comp, \" \"));\n assignedComponents.add(comp.id);\n }\n\n parts.push(` }`);\n parts.push(\"\");\n }\n\n // Add ungrouped components\n const ungroupedComponents = componentDefs.filter(\n (comp) => !assignedComponents.has(comp.id)\n );\n\n for (const comp of ungroupedComponents) {\n parts.push(this.generateComponentDefinition(comp, \" \"));\n }\n\n return parts;\n }\n\n private escape(str: string): string {\n return str.replace(/\"/g, '\\\\\"');\n }\n}\n\n/**\n * Generate Structurizr DSL from architecture analysis\n */\nexport function generateStructurizrDSL(\n analysis: ArchitectureAnalysis,\n options?: StructurizrDSLOptions\n): string {\n const generator = new StructurizrDSLGenerator(analysis, options);\n return generator.generate();\n}\n",
|
|
17
17
|
"// Export static site using Structurizr CLI\n// Uses Docker to run Structurizr CLI for generating a static HTML site\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\nexport interface ExportOptions {\n /** DSL file path */\n dslPath: string;\n\n /** Output directory for static site */\n outputDir: string;\n\n /** Timeout in milliseconds */\n timeout?: number;\n\n /** Callback for progress updates */\n onProgress?: (message: string) => void;\n}\n\nexport interface ExportResult {\n success: boolean;\n siteDir: string;\n error?: string;\n}\n\nexport class DiagramExporter {\n private static readonly DOCKER_IMAGE = \"structurizr/cli:latest\";\n private static readonly DEFAULT_TIMEOUT = 120000; // 2 minutes\n\n /**\n * Export static site using Structurizr CLI via Docker\n */\n async export(options: ExportOptions): Promise<ExportResult> {\n const { dslPath, outputDir, timeout = DiagramExporter.DEFAULT_TIMEOUT } = options;\n\n // Validate DSL file exists\n if (!fs.existsSync(dslPath)) {\n return {\n success: false,\n siteDir: \"\",\n error: `DSL file not found: ${dslPath}`,\n };\n }\n\n // Ensure output directory exists\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n // Check if Docker is available\n const dockerAvailable = await this.isDockerAvailable();\n if (!dockerAvailable) {\n return {\n success: false,\n siteDir: \"\",\n error: \"Docker is not available. Please install Docker to export the site.\",\n };\n }\n\n // Pull image if needed\n options.onProgress?.(\"Checking Structurizr CLI image...\");\n const hasImage = await this.hasImage();\n if (!hasImage) {\n options.onProgress?.(\"Pulling Structurizr CLI image (this may take a moment)...\");\n await this.pullImage((line) => options.onProgress?.(line));\n }\n\n // Export static site\n options.onProgress?.(\"Generating static site...\");\n\n try {\n await this.exportStaticSite(dslPath, outputDir, timeout);\n options.onProgress?.(\"✓ Static site generated successfully\");\n\n return {\n success: true,\n siteDir: outputDir,\n };\n } catch (error) {\n return {\n success: false,\n siteDir: \"\",\n error: `Failed to export static site: ${error}`,\n };\n }\n }\n\n /**\n * Export static HTML site using Structurizr CLI\n */\n private async exportStaticSite(\n dslPath: string,\n outputDir: string,\n timeout: number\n ): Promise<void> {\n const dslDir = path.dirname(dslPath);\n const dslFileName = path.basename(dslPath);\n\n // Docker volume mounts\n const workspaceMount = `${dslDir}:/usr/local/structurizr`;\n const outputMount = `${outputDir}:/output`;\n\n // Structurizr CLI command for static site export\n const args = [\n \"run\",\n \"--rm\",\n \"-v\",\n workspaceMount,\n \"-v\",\n outputMount,\n DiagramExporter.DOCKER_IMAGE,\n \"export\",\n \"-workspace\",\n `/usr/local/structurizr/${dslFileName}`,\n \"-format\",\n \"static\",\n \"-output\",\n \"/output\",\n ];\n\n await this.runDocker(args, timeout);\n }\n\n /**\n * Check if Docker is available\n */\n async isDockerAvailable(): Promise<boolean> {\n try {\n await this.runCommand(\"docker\", [\"--version\"], 5000);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if Structurizr CLI image is available\n */\n async hasImage(): Promise<boolean> {\n try {\n const output = await this.runCommand(\n \"docker\",\n [\"images\", \"-q\", DiagramExporter.DOCKER_IMAGE],\n 5000\n );\n return output.trim().length > 0;\n } catch {\n return false;\n }\n }\n\n /**\n * Pull Structurizr CLI image\n */\n async pullImage(onProgress?: (line: string) => void): Promise<void> {\n return new Promise((resolve, reject) => {\n const proc = spawn(\"docker\", [\"pull\", DiagramExporter.DOCKER_IMAGE]);\n\n proc.stdout.on(\"data\", (data) => {\n onProgress?.(data.toString().trim());\n });\n\n proc.stderr.on(\"data\", (data) => {\n onProgress?.(data.toString().trim());\n });\n\n proc.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Failed to pull image, exit code: ${code}`));\n }\n });\n\n proc.on(\"error\", (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Run Docker command\n */\n private async runDocker(args: string[], timeout: number): Promise<string> {\n return this.runCommand(\"docker\", args, timeout);\n }\n\n /**\n * Run shell command\n */\n private async runCommand(command: string, args: string[], timeout: number): Promise<string> {\n return new Promise((resolve, reject) => {\n const proc = spawn(command, args);\n let stdout = \"\";\n let stderr = \"\";\n\n const timer = setTimeout(() => {\n proc.kill();\n reject(new Error(`Command timed out after ${timeout}ms`));\n }, timeout);\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n proc.on(\"close\", (code) => {\n clearTimeout(timer);\n if (code === 0) {\n resolve(stdout);\n } else {\n reject(new Error(`Command failed with exit code ${code}: ${stderr}`));\n }\n });\n\n proc.on(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n });\n }\n}\n\n/**\n * Export diagrams\n */\nexport async function exportDiagrams(options: ExportOptions): Promise<ExportResult> {\n const exporter = new DiagramExporter();\n return exporter.export(options);\n}\n"
|
|
18
18
|
],
|
|
19
|
-
"mappings": "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",
|
|
20
|
-
"debugId": "
|
|
19
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAAA;AAOO,MAAM,gBAAgB;AAAA,EACpB;AAAA,EAER,WAAW,CAAC,aAAqB;AAAA,IAChC,KAAK,cAAc;AAAA;AAAA,EAMpB,MAAM,GAAkB;AAAA,IAEvB,MAAM,eAAoB,WAAK,KAAK,aAAa,eAAe;AAAA,IAChE,IAAO,eAAW,YAAY,GAAG;AAAA,MAChC,OAAO,KAAK,sBAAsB,YAAY;AAAA,IAC/C;AAAA,IAGA,MAAM,kBAAuB,WAC5B,KAAK,aACL,UACA,eACD;AAAA,IACA,IAAO,eAAW,eAAe,GAAG;AAAA,MACnC,OAAO,KAAK,UAAU,eAAe;AAAA,IACtC;AAAA,IAGA,MAAM,kBAAuB,WAAK,KAAK,aAAa,cAAc;AAAA,IAClE,IAAO,eAAW,eAAe,GAAG;AAAA,MACnC,MAAM,cAAc,KAAK,MAAS,iBAAa,iBAAiB,OAAO,CAAC;AAAA,MAExE,IACC,YAAY,cAAc,YAC1B,YAAY,iBAAiB,UAC5B;AAAA,QACD,OAAO,KAAK,eAAe,WAAW;AAAA,MACvC;AAAA,MAGA,MAAM,OAAO;AAAA,WACT,YAAY;AAAA,WACZ,YAAY;AAAA,MAChB;AAAA,MAEA,IACC,MAAM,MACN,OAAO,gBACP,MAAM,UACN,MAAM,WACN,MAAM,WACN,MAAM,QACN,MAAM,KACL;AAAA,QACD,OAAO,KAAK,mBAAmB,WAAW;AAAA,MAC3C;AAAA,MAIA,MAAM,eAAe,KAAK,mBAAmB,WAAW;AAAA,MACxD,IAAI,OAAO,KAAK,aAAa,WAAW,EAAE,SAAS,GAAG;AAAA,QACrD,OAAO;AAAA,MACR;AAAA,IACD,EAAO;AAAA,MAEN,MAAM,eAAe,KAAK,mBAAmB,CAAC,CAAC;AAAA,MAC/C,IAAI,OAAO,KAAK,aAAa,WAAW,EAAE,SAAS,GAAG;AAAA,QACrD,OAAO;AAAA,MACR;AAAA;AAAA,IAID,OAAO,KAAK,qBAAqB;AAAA;AAAA,EAM1B,qBAAqB,CAAC,cAAqC;AAAA,IAClE,MAAM,WAAW,KAAK,MAAS,iBAAa,cAAc,OAAO,CAAC;AAAA,IAClE,MAAM,cAAsC,CAAC;AAAA,IAG7C,MAAM,aAAa,SAAS;AAAA,IAC5B,IAAI,YAAY;AAAA,MACf,MAAM,OACL,WAAW,kBAAkB,WAAW,UAAU,MAAM,WAAW;AAAA,MACpE,IAAI,MAAM;AAAA,QACT,YAAY,aAAa,KAAK,eAAe,IAAI;AAAA,MAClD;AAAA,IACD;AAAA,IAGA,MAAM,iBAAiB,SAAS;AAAA,IAChC,IAAI,kBAAkB,eAAe,SAAS,GAAG;AAAA,MAChD,MAAM,cAAc,eAAe,GAAG,KAAK;AAAA,MAC3C,IAAI,aAAa;AAAA,QAChB,YAAY,UAAU,KAAK,eAAe,WAAW;AAAA,MACtD;AAAA,IACD;AAAA,IAGA,MAAM,QACL,SAAS,QAAQ,iBAAiB,SAAS,gBAAgB;AAAA,IAC5D,IAAI,OAAO;AAAA,MACV,MAAM,SAAS,KAAK,iBAAsB,WAAK,KAAK,aAAa,KAAK,CAAC;AAAA,MACvE,IAAI;AAAA,QAAQ,YAAY,QAAQ;AAAA,IACjC;AAAA,IAGA,MAAM,UAAU,SAAS,YAAY,QAAQ,SAAS;AAAA,IACtD,IAAI,SAAS;AAAA,MACZ,MAAM,SAAS,KAAK,iBACd,WAAK,KAAK,aAAa,OAAO,CACpC;AAAA,MACA,IAAI;AAAA,QAAQ,YAAY,UAAU;AAAA,IACnC;AAAA,IAEA,OAAO;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,UAAU;AAAA,QACT,MAAM,SAAS;AAAA,QACf,SAAS,SAAS;AAAA,QAClB,aAAa,SAAS;AAAA,MACvB;AAAA,IACD;AAAA;AAAA,EAMO,SAAS,CAAC,cAAqC;AAAA,IACtD,MAAM,WAAW,KAAK,MAAS,iBAAa,cAAc,OAAO,CAAC;AAAA,IAClE,MAAM,cAAsC,CAAC;AAAA,IAG7C,MAAM,eAAe;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IAEA,WAAW,aAAa,cAAc;AAAA,MACrC,MAAM,WAAgB,WAAK,KAAK,aAAa,SAAS;AAAA,MACtD,IAAO,eAAW,QAAQ,GAAG;AAAA,QAC5B,YAAY,SAAS;AAAA,QACrB;AAAA,MACD;AAAA,IACD;AAAA,IAGA,MAAM,mBAAmB;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IAEA,WAAW,aAAa,kBAAkB;AAAA,MACzC,MAAM,WAAgB,WAAK,KAAK,aAAa,SAAS;AAAA,MACtD,IAAO,eAAW,QAAQ,GAAG;AAAA,QAC5B,YAAY,SAAS;AAAA,QACrB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,OAAO;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,gBAAgB;AAAA,QACf,QAAQ;AAAA,QACR,QAAQ;AAAA,MACT;AAAA,MACA,UAAU;AAAA,QACT,MAAM,SAAS,QAAQ,SAAS;AAAA,QAChC,SAAS;AAAA,QACT,aAAa,SAAS;AAAA,MACvB;AAAA,IACD;AAAA;AAAA,EAMO,cAAc,CAAC,aAAiC;AAAA,IACvD,MAAM,cAAsC,CAAC;AAAA,IAG7C,MAAM,iBAAiB;AAAA,MACtB,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,EAAE,OAAO,OAAO;AAAA,IAEhB,WAAW,aAAa,gBAAgB;AAAA,MACvC,MAAM,WAAgB,WAAK,KAAK,aAAa,SAAU;AAAA,MACvD,IACI,eAAW,QAAQ,KACnB,eAAW,SAAS,QAAQ,SAAS,KAAK,CAAC,GAC7C;AAAA,QACD,YAAY,OAAU,eAAW,QAAQ,IACtC,WACA,SAAS,QAAQ,SAAS,KAAK;AAAA,QAClC;AAAA,MACD;AAAA,IACD;AAAA,IAGA,MAAM,qBAAqB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IAEA,WAAW,aAAa,oBAAoB;AAAA,MAC3C,MAAM,WAAgB,WAAK,KAAK,aAAa,SAAS;AAAA,MACtD,IAAO,eAAW,QAAQ,GAAG;AAAA,QAC5B,YAAY,WAAW;AAAA,QACvB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,OAAO;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,gBAAgB;AAAA,QACf,MAAM;AAAA,QACN,UAAU;AAAA,MACX;AAAA,MACA,UAAU;AAAA,QACT,MAAM,YAAY;AAAA,QAClB,SAAS,YAAY;AAAA,QACrB,aAAa,YAAY;AAAA,MAC1B;AAAA,IACD;AAAA;AAAA,EAMO,kBAAkB,CAAC,aAAiC;AAAA,IAC3D,MAAM,cAAsC,CAAC;AAAA,IAC7C,MAAM,iBAAyC,CAAC;AAAA,IAGhD,MAAM,mBAAmB;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IAEA,MAAM,gBAAgB,KAAK,sBAAsB,gBAAgB;AAAA,IACjE,IAAI,cAAc,SAAS,GAAG;AAAA,MAC7B,MAAM,OAAO,cAAc;AAAA,MAC3B,YAAY,SAAS,KAAK;AAAA,MAG1B,IAAI,KAAK,cAAc;AAAA,QACtB,eAAe,SAAS;AAAA,MACzB,EAAO,SAAI,KAAK,SAAS;AAAA,QACxB,eAAe,SAAS;AAAA,MACzB,EAAO;AAAA,QACN,eAAe,SAAS;AAAA;AAAA,IAE1B;AAAA,IAGA,MAAM,mBAAmB;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IAEA,WAAW,aAAa,kBAAkB;AAAA,MACzC,MAAM,WAAgB,WAAK,KAAK,aAAa,SAAS;AAAA,MACtD,IAAO,eAAW,QAAQ,GAAG;AAAA,QAC5B,YAAY,SAAS;AAAA,QACrB,eAAe,SAAS;AAAA,QACxB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,OAAO;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,gBAAgB,OAAO,KAAK,cAAc,EAAE,SAAS,IAAI,iBAAiB;AAAA,QACzE,QAAQ;AAAA,QACR,QAAQ;AAAA,MACT;AAAA,MACA,UAAU;AAAA,QACT,MAAM,YAAY;AAAA,QAClB,SAAS,YAAY;AAAA,QACrB,aAAa,YAAY;AAAA,MAC1B;AAAA,IACD;AAAA;AAAA,EAOO,qBAAqB,CAAC,YAM3B;AAAA,IACF,MAAM,SAMD,CAAC;AAAA,IAEN,WAAW,aAAa,YAAY;AAAA,MACnC,MAAM,WAAgB,WAAK,KAAK,aAAa,SAAS;AAAA,MACtD,IAAI,CAAI,eAAW,QAAQ;AAAA,QAAG;AAAA,MAE9B,IAAI;AAAA,QACH,MAAM,UAAa,iBAAa,UAAU,OAAO;AAAA,QACjD,IAAI,QAAQ;AAAA,QACZ,IAAI,eAAe;AAAA,QACnB,IAAI,UAAU;AAAA,QACd,IAAI,YAA2B;AAAA,QAG/B,MAAM,WAAW;AAAA,UAEhB,cAAc;AAAA,UACd,SAAS;AAAA,UAGT,UAAU;AAAA,UACV,UAAU;AAAA,UAGV,UAAU;AAAA,UAGV,QAAQ;AAAA,UACR,cAAc;AAAA,UAGd,SAAS;AAAA,UACT,WAAW;AAAA,UAGX,YAAY;AAAA,UAGZ,WAAW;AAAA,QACZ;AAAA,QAGA,IAAI,SAAS,aAAa,KAAK,OAAO,GAAG;AAAA,UACxC,SAAS;AAAA,UACT,eAAe;AAAA,UACf,UAAU;AAAA,UACV,YAAY;AAAA,QACb,EAAO,SAAI,SAAS,QAAQ,KAAK,OAAO,GAAG;AAAA,UAC1C,SAAS;AAAA,UACT,UAAU;AAAA,UACV,YAAY;AAAA,QACb;AAAA,QAEA,IAAI,SAAS,SAAS,KAAK,OAAO,KAAK,SAAS,SAAS,KAAK,OAAO,GAAG;AAAA,UACvE,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY,aAAa;AAAA,QAC1B;AAAA,QAEA,IAAI,SAAS,SAAS,KAAK,OAAO,GAAG;AAAA,UACpC,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY,aAAa;AAAA,QAC1B;AAAA,QAEA,IAAI,SAAS,OAAO,KAAK,OAAO,KAAK,SAAS,aAAa,KAAK,OAAO,GAAG;AAAA,UACzE,SAAS;AAAA,UACT,UAAU;AAAA,UACV,YAAY,aAAa;AAAA,QAC1B;AAAA,QAEA,IAAI,SAAS,aAAa,KAAK,OAAO,KAAK,SAAS,UAAU,KAAK,OAAO,GAAG;AAAA,UAC5E,SAAS;AAAA,UACT,eAAe;AAAA,QAChB;AAAA,QAEA,IAAI,SAAS,QAAQ,KAAK,OAAO,GAAG;AAAA,UACnC,SAAS;AAAA,UACT,UAAU;AAAA,UACV,YAAY,aAAa;AAAA,QAC1B;AAAA,QAEA,IAAI,SAAS,UAAU,KAAK,OAAO,GAAG;AAAA,UACrC,SAAS;AAAA,UACT,eAAe;AAAA,QAChB;AAAA,QAEA,IAAI,SAAS,WAAW,KAAK,OAAO,KAAK,CAAC,SAAS;AAAA,UAClD,SAAS;AAAA,UACT,UAAU;AAAA,QACX;AAAA,QAEA,IAAI,SAAS,UAAU,KAAK,OAAO,KAAK,CAAC,cAAc;AAAA,UACtD,SAAS;AAAA,UACT,eAAe;AAAA,QAChB;AAAA,QAGA,IAAI,gBAAgB,KAAK,OAAO,GAAG;AAAA,UAClC,SAAS;AAAA,QACV;AAAA,QAEA,IAAI,mBAAmB,KAAK,OAAO,GAAG;AAAA,UACrC,SAAS;AAAA,QACV;AAAA,QAGA,IAAI,UAAU,SAAS,QAAQ,GAAG;AAAA,UACjC,SAAS;AAAA,QACV;AAAA,QAEA,IAAI,cAAc,kBAAkB,cAAc,gBAAgB;AAAA,UACjE,SAAS;AAAA,QACV;AAAA,QAGA,IAAI,QAAQ,GAAG;AAAA,UACd,OAAO,KAAK,EAAE,MAAM,UAAU,OAAO,cAAc,SAAS,UAAU,CAAC;AAAA,QACxE;AAAA,QACC,OAAO,OAAO;AAAA,QAEf;AAAA;AAAA,IAEF;AAAA,IAGA,OAAO,OAAO,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAA;AAAA,EAOvC,oBAAoB,GAAkB;AAAA,IAC7C,MAAM,cAAsC,CAAC;AAAA,IAG7C,MAAM,eAAoB,WAAK,KAAK,aAAa,eAAe;AAAA,IAChE,IAAO,eAAW,YAAY,GAAG;AAAA,MAChC,IAAI;AAAA,QACH,MAAM,WAAW,KAAK,MAAS,iBAAa,cAAc,OAAO,CAAC;AAAA,QAGlE,IAAI,SAAS,SAAS,MAAM,QAAQ,SAAS,KAAK,GAAG;AAAA,UACpD,SAAS,MAAM,QAAQ,CAAC,MAAc,QAAgB;AAAA,YACrD,MAAM,WAAgB,WAAK,KAAK,aAAa,IAAI;AAAA,YACjD,IAAO,eAAW,QAAQ,GAAG;AAAA,cAC5B,YAAY,SAAS,MAAM,OAAO;AAAA,YACnC;AAAA,WACA;AAAA,QACF;AAAA,QACC,OAAO,OAAO;AAAA,QACf,QAAQ,KAAK,kCAAkC,OAAO;AAAA;AAAA,IAExD;AAAA,IAGA,IAAI,OAAO,KAAK,WAAW,EAAE,WAAW,GAAG;AAAA,MAC1C,MAAM,gBAAgB;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MAEA,WAAW,aAAa,eAAe;AAAA,QACtC,MAAM,WAAgB,WAAK,KAAK,aAAa,SAAS;AAAA,QACtD,IAAO,eAAW,QAAQ,GAAG;AAAA,UAC5B,YAAY,OAAO;AAAA,UACnB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IAGA,MAAM,kBAAuB,WAAK,KAAK,aAAa,cAAc;AAAA,IAClE,IAAI,WAAsC,EAAE,MAAM,kBAAkB;AAAA,IAEpE,IAAO,eAAW,eAAe,GAAG;AAAA,MACnC,IAAI;AAAA,QACH,MAAM,cAAc,KAAK,MACrB,iBAAa,iBAAiB,OAAO,CACzC;AAAA,QACA,WAAW;AAAA,UACV,MAAM,YAAY;AAAA,UAClB,SAAS,YAAY;AAAA,UACrB,aAAa,YAAY;AAAA,QAC1B;AAAA,QACC,OAAO,OAAO;AAAA,QACf,QAAQ,KAAK,iCAAiC,OAAO;AAAA;AAAA,IAEvD;AAAA,IAEA,OAAO;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACD;AAAA;AAAA,EAMO,cAAc,CAAC,cAA8B;AAAA,IACpD,MAAM,aAAa;AAAA,MACb,WAAK,KAAK,aAAa,YAAY;AAAA,MACnC,WAAK,KAAK,aAAa,aAAa,QAAQ,SAAS,KAAK,CAAC;AAAA,MAC3D,WAAK,KAAK,aAAa,OAAO,YAAY;AAAA,MAC1C,WAAK,KAAK,aAAa,OAAO,aAAa,QAAQ,SAAS,KAAK,CAAC;AAAA,MAClE,WAAK,KAAK,aAAa,OAAO,aAAa,QAAQ,SAAS,MAAM,CAAC;AAAA,IACzE;AAAA,IAEA,WAAW,aAAa,YAAY;AAAA,MACnC,IAAO,eAAW,SAAS,GAAG;AAAA,QAC7B,OAAO;AAAA,MACR;AAAA,IACD;AAAA,IAEA,OAAY,WAAK,KAAK,aAAa,YAAY;AAAA;AAAA,EAMxC,gBAAgB,CAAC,UAAiC;AAAA,IACzD,IAAI,CAAI,eAAW,QAAQ,GAAG;AAAA,MAC7B,OAAO;AAAA,IACR;AAAA,IAGA,MAAM,OAAU,iBAAa,UAAU,OAAO;AAAA,IAC9C,MAAM,cAAc,KAAK,MAAM,mCAAmC;AAAA,IAElE,IAAI,eAAe,YAAY,IAAI;AAAA,MAClC,MAAM,aAAa,YAAY;AAAA,MAC/B,MAAM,WAAgB,cAAa,cAAQ,QAAQ,GAAG,UAAU;AAAA,MAEhE,IAAO,eAAW,QAAQ;AAAA,QAAG,OAAO;AAAA,MACpC,IAAO,eAAW,SAAS,QAAQ,SAAS,KAAK,CAAC,GAAG;AAAA,QACpD,OAAO,SAAS,QAAQ,SAAS,KAAK;AAAA,MACvC;AAAA,MACA,IAAO,eAAW,SAAS,QAAQ,SAAS,MAAM,CAAC,GAAG;AAAA,QACrD,OAAO,SAAS,QAAQ,SAAS,MAAM;AAAA,MACxC;AAAA,IACD;AAAA,IAGA,MAAM,WAAgB,eAAS,UAAU,OAAO;AAAA,IAChD,MAAM,MAAW,cAAQ,QAAQ;AAAA,IAEjC,MAAM,aAAa;AAAA,MACb,WAAK,KAAK,GAAG,aAAa;AAAA,MAC1B,WAAK,KAAK,GAAG,cAAc;AAAA,MAC3B,WAAK,KAAK,GAAG,aAAa;AAAA,MAC1B,WAAK,KAAK,UAAU;AAAA,MACpB,WAAK,KAAK,WAAW;AAAA,IAC3B;AAAA,IAEA,WAAW,aAAa,YAAY;AAAA,MACnC,IAAO,eAAW,SAAS,GAAG;AAAA,QAC7B,OAAO;AAAA,MACR;AAAA,IACD;AAAA,IAEA,OAAO;AAAA;AAET;AAKO,SAAS,mBAAmB,CAAC,aAAoC;AAAA,EACvE,MAAM,WAAW,IAAI,gBAAgB,WAAW;AAAA,EAChD,OAAO,SAAS,OAAO;AAAA;AAAA;;;ACtmBxB;AACA;;;ACFA;AACA;;;ACDA;AACA;AAAA;AAMO,MAAM,eAAe;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EAER,WAAW,CAAC,aAAqB,WAAW,OAAO;AAAA,IACjD,KAAK,UAAU;AAAA,IACf,KAAK,eAAoB,UAAK,aAAa,eAAe;AAAA,IAE1D,IAAI,CAAI,cAAW,KAAK,YAAY,GAAG;AAAA,MACrC,IAAI,UAAU;AAAA,QACZ,KAAK,eAAe;AAAA,QACpB;AAAA,MACF;AAAA,MACA,MAAM,IAAI,MAAM,8BAA8B,KAAK,cAAc;AAAA,IACnE;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAa,gBAAa,KAAK,cAAc,OAAO;AAAA,MAC1D,KAAK,eAAe,KAAK,MAAM,OAAO;AAAA,MACtC,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,MAAM,kCAAkC,OAAO;AAAA;AAAA;AAAA,EAO7D,WAAW,GAAY;AAAA,IACrB,OAAO,KAAK,iBAAiB;AAAA;AAAA,EAM/B,KAAK,GAAiB;AAAA,IACpB,IAAI,CAAC,KAAK,cAAc;AAAA,MACtB,MAAM,IAAI,MAAM,2FAA2F;AAAA,IAC7G;AAAA,IAEA,MAAM,WAAW,KAAK;AAAA,IAEtB,OAAO;AAAA,MACL,MAAM,SAAS,QAAQ;AAAA,MACvB,SAAS,SAAS,WAAW;AAAA,MAC7B,aAAa,SAAS;AAAA,MACtB,iBAAiB,SAAS,oBAAoB;AAAA,MAC9C,YAAY,KAAK,gBAAgB;AAAA,MACjC,gBAAgB,KAAK,oBAAoB;AAAA,MACzC,OAAO,KAAK,WAAW;AAAA,MACvB,SAAS,KAAK,aAAa;AAAA,MAC3B,UAAU,KAAK,cAAc;AAAA,MAC7B,aAAa,SAAS,eAAe,CAAC;AAAA,MACtC,iBAAiB,SAAS,oBAAoB,CAAC;AAAA,IACjD;AAAA;AAAA,EAMF,qBAAqB,GAA2B;AAAA,IAC9C,IAAI,CAAC,KAAK,cAAc;AAAA,MACtB,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,cAAsC,CAAC;AAAA,IAG7C,MAAM,aAAa,KAAK,gBAAgB;AAAA,IACxC,IAAI,YAAY;AAAA,MAEd,MAAM,YAAY,WAAW,MAAM;AAAA,MACnC,IAAI,WAAW;AAAA,QACb,YAAY,aAAa,KAAK,eAAe,SAAS;AAAA,MACxD;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiB,KAAK,oBAAoB;AAAA,IAChD,IAAI,kBAAkB,eAAe,SAAS,GAAG;AAAA,MAC/C,MAAM,cAAc,eAAe,GAAG,GAAG;AAAA,MACzC,IAAI,aAAa;AAAA,QACf,YAAY,UAAU,KAAK,eAAe,WAAW;AAAA,MACvD;AAAA,IACF;AAAA,IAGA,MAAM,QAAQ,KAAK,WAAW;AAAA,IAC9B,IAAI,OAAO;AAAA,MAET,MAAM,WAAgB,UAAK,KAAK,SAAS,MAAM,IAAI;AAAA,MACnD,MAAM,SAAS,KAAK,iBAAiB,QAAQ;AAAA,MAC7C,IAAI,QAAQ;AAAA,QACV,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,UAAU,KAAK,aAAa;AAAA,IAClC,IAAI,SAAS;AAAA,MACX,MAAM,WAAgB,UAAK,KAAK,SAAS,QAAQ,IAAI;AAAA,MACrD,MAAM,SAAS,KAAK,iBAAiB,QAAQ;AAAA,MAC7C,IAAI,QAAQ;AAAA,QACV,YAAY,UAAU;AAAA,MACxB;AAAA,IACF;AAAA,IAGA,MAAM,WAAW,KAAK,cAAc;AAAA,IACpC,IAAI,UAAU;AAAA,MACZ,MAAM,WAAgB,UAAK,KAAK,SAAS,SAAS,IAAI;AAAA,MACtD,MAAM,SAAS,KAAK,iBAAiB,QAAQ;AAAA,MAC7C,IAAI,QAAQ;AAAA,QACV,YAAY,WAAW;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,eAAe,GAA+B;AAAA,IACpD,IAAI,CAAC,KAAK;AAAA,MAAc;AAAA,IAExB,MAAM,KAAK,KAAK,aAAa;AAAA,IAC7B,IAAI,CAAC;AAAA,MAAI;AAAA,IAGT,IAAI,GAAG,gBAAgB;AAAA,MACrB,OAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,CAAC,GAAG,cAAc;AAAA,MAC3B;AAAA,IACF;AAAA,IAGA,IAAI,GAAG,SAAS;AAAA,MACd,OAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,GAAG;AAAA,MACZ;AAAA,IACF;AAAA,IAGA,IAAI,GAAG,MAAM;AAAA,MACX,OAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,CAAC,GAAG,IAAI;AAAA,MACjB;AAAA,IACF;AAAA,IAEA;AAAA;AAAA,EAMM,mBAAmB,GAAmC;AAAA,IAC5D,IAAI,CAAC,KAAK;AAAA,MAAc;AAAA,IAExB,MAAM,KAAK,KAAK,aAAa;AAAA,IAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,QAAQ,EAAE;AAAA,MAAG;AAAA,IAE/B,OAAO,GAAG,IAAI,CAAC,YAAY;AAAA,MACzB,SAAS,OAAO,WAAW,CAAC;AAAA,MAC5B,IAAI,OAAO,MAAM,CAAC;AAAA,MAClB,KAAK,OAAO;AAAA,IACd,EAAE;AAAA;AAAA,EAMI,UAAU,GAA0B;AAAA,IAC1C,IAAI,CAAC,KAAK;AAAA,MAAc;AAAA,IAExB,MAAM,SAAS,KAAK,aAAa,UAAU,KAAK,aAAa;AAAA,IAC7D,IAAI,CAAC;AAAA,MAAQ;AAAA,IAEb,IAAI,OAAO,eAAe;AAAA,MACxB,OAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IAEA;AAAA;AAAA,EAMM,YAAY,GAA4B;AAAA,IAC9C,IAAI,CAAC,KAAK;AAAA,MAAc;AAAA,IAExB,MAAM,UAAU,KAAK,aAAa,cAAc,KAAK,aAAa;AAAA,IAClE,IAAI,CAAC;AAAA,MAAS;AAAA,IAEd,IAAI,OAAO,YAAY,UAAU;AAAA,MAC/B,OAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,WAAW,QAAQ;AAAA,IACrB;AAAA;AAAA,EAMM,aAAa,GAA6B;AAAA,IAChD,IAAI,CAAC,KAAK;AAAA,MAAc;AAAA,IAExB,MAAM,WAAW,KAAK,aAAa;AAAA,IACnC,IAAI,CAAC;AAAA,MAAU;AAAA,IAEf,OAAO;AAAA,MACL,MAAM;AAAA,IACR;AAAA;AAAA,EAOM,cAAc,CAAC,cAA8B;AAAA,IACnD,MAAM,aAAa;AAAA,MAEZ,UAAK,KAAK,SAAS,YAAY;AAAA,MAE/B,UAAK,KAAK,SAAS,aAAa,QAAQ,SAAS,KAAK,CAAC;AAAA,MAEvD,UAAK,KAAK,SAAS,OAAO,YAAY;AAAA,MACtC,UAAK,KAAK,SAAS,OAAO,aAAa,QAAQ,SAAS,KAAK,CAAC;AAAA,MAE9D,UAAK,KAAK,SAAS,OAAO,aAAa,QAAQ,SAAS,MAAM,CAAC;AAAA,IACtE;AAAA,IAEA,WAAW,aAAa,YAAY;AAAA,MAClC,IAAO,cAAW,SAAS,GAAG;AAAA,QAC5B,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAGA,OAAY,UAAK,KAAK,SAAS,YAAY;AAAA;AAAA,EAMrC,gBAAgB,CAAC,UAAiC;AAAA,IACxD,IAAI,CAAI,cAAW,QAAQ,GAAG;AAAA,MAC5B,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,OAAU,gBAAa,UAAU,OAAO;AAAA,IAC9C,MAAM,cAAc,KAAK,MAAM,mCAAmC;AAAA,IAElE,IAAI,eAAe,YAAY,IAAI;AAAA,MACjC,MAAM,aAAa,YAAY;AAAA,MAC/B,MAAM,WAAgB,aAAa,aAAQ,QAAQ,GAAG,UAAU;AAAA,MAGhE,IAAO,cAAW,QAAQ;AAAA,QAAG,OAAO;AAAA,MACpC,IAAO,cAAW,SAAS,QAAQ,SAAS,KAAK,CAAC,GAAG;AAAA,QACnD,OAAO,SAAS,QAAQ,SAAS,KAAK;AAAA,MACxC;AAAA,MACA,IAAO,cAAW,SAAS,QAAQ,SAAS,MAAM,CAAC,GAAG;AAAA,QACpD,OAAO,SAAS,QAAQ,SAAS,MAAM;AAAA,MACzC;AAAA,IACF;AAAA,IAGA,MAAM,WAAgB,cAAS,UAAU,OAAO;AAAA,IAChD,MAAM,MAAW,aAAQ,QAAQ;AAAA,IAEjC,MAAM,aAAa;AAAA,MACZ,UAAK,KAAK,GAAG,aAAa;AAAA,MAC1B,UAAK,KAAK,GAAG,cAAc;AAAA,MAC3B,UAAK,KAAK,GAAG,aAAa;AAAA,MAC1B,UAAK,KAAK,UAAU;AAAA,MACpB,UAAK,KAAK,WAAW;AAAA,MACrB,UAAK,KAAK,UAAU;AAAA,IAC3B;AAAA,IAEA,WAAW,aAAa,YAAY;AAAA,MAClC,IAAO,cAAW,SAAS,GAAG;AAAA,QAC5B,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAEX;;;ACpTA;AAAA;AAIO,MAAM,gBAAgB;AAAA,EACnB;AAAA,EAER,WAAW,CAAC,cAAsB;AAAA,IAChC,KAAK,UAAU,IAAI,QAAQ;AAAA,MACzB,kBAAkB;AAAA,IACpB,CAAC;AAAA;AAAA,EAMH,cAAc,CACZ,aACA,YACA,UACa;AAAA,IACb,MAAM,aAAa,KAAK,QAAQ,cAAc,UAAU;AAAA,IAExD,IAAI,CAAC,YAAY;AAAA,MACf,MAAM,IAAI,MAAM,+BAA+B,YAAY;AAAA,IAC7D;AAAA,IAGA,MAAM,aAAa,KAAK,kBAAkB,UAAU;AAAA,IAGpD,MAAM,eAAe,KAAK,oBAAoB,UAAU;AAAA,IAGxD,MAAM,cAAc,KAAK,mBAAmB,UAAU;AAAA,IAGtD,MAAM,aAAa,KAAK,YAAY,WAAW,IAC3C,KAAK,kBAAkB,UAAU,IACjC;AAAA,IAGJ,MAAM,kBAAkB,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,WAAW;AAAA,IAErE,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,cAAc,CAAC;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAMM,iBAAiB,CAAC,YAA2B;AAAA,IACnD,MAAM,OAAO,IAAI;AAAA,IAEjB,WAAW,kBAAkB,CAAC,SAAc;AAAA,MAC1C,IAAI,KAAK,2BAA2B,IAAI,GAAG;AAAA,QACzC,MAAM,OAAO,KAAK,QAAQ;AAAA,QAG1B,IAAI,KAAK,WAAW,SAAS,GAAG;AAAA,UAE9B,MAAM,QAAQ,KAAK,MAAM,gCAAgC;AAAA,UACzD,IAAI,OAAO;AAAA,YACT,KAAK,IAAI,MAAM,EAAE;AAAA,UACnB;AAAA,QACF;AAAA,QAGA,IAAI,KAAK,WAAW,UAAU,GAAG;AAAA,UAC/B,MAAM,QAAQ,KAAK,MAAM,iCAAiC;AAAA,UAC1D,IAAI,OAAO;AAAA,YACT,KAAK,IAAI,MAAM,EAAE;AAAA,UACnB;AAAA,QACF;AAAA,QAKA,IAAI,KAAK,SAAS,eAAe,GAAG;AAAA,UAClC,MAAM,QAAQ,KAAK,MAAM,yBAAyB;AAAA,UAClD,IAAI,OAAO;AAAA,YACT,KAAK,IAAI,MAAM,EAAE;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,KACD;AAAA,IAED,OAAO,MAAM,KAAK,IAAI,EAAE,KAAK;AAAA;AAAA,EAMvB,mBAAmB,CAAC,YAA2B;AAAA,IACrD,MAAM,OAAiB,CAAC;AAAA,IAExB,WAAW,cAAc,WAAW,sBAAsB,GAAG;AAAA,MAC3D,MAAM,kBAAkB,WAAW,wBAAwB;AAAA,MAC3D,KAAK,KAAK,eAAe;AAAA,IAC3B;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,kBAAkB,CAAC,YAAqC;AAAA,IAE9D,MAAM,iBAAiB,WAAW,cAAc,EAAE;AAAA,IAClD,IAAI,CAAC;AAAA,MAAgB;AAAA,IAErB,MAAM,kBAAkB,eAAe,wBAAwB;AAAA,IAC/D,IAAI,gBAAgB,WAAW;AAAA,MAAG;AAAA,IAElC,MAAM,UAAU,gBAAgB,GAAG,QAAQ;AAAA,IAG3C,MAAM,YAAY,QAAQ,MAAM,+BAA+B;AAAA,IAC/D,IAAI,WAAW;AAAA,MACb,OAAO,UAAU,GAAG,KAAK;AAAA,IAC3B;AAAA,IAGA,MAAM,QAAQ,QACX,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,MAAc,EAAE,QAAQ,WAAW,EAAE,EAAE,KAAK,CAAC,EAClD,OAAO,CAAC,MAAc,KAAK,CAAC,EAAE,WAAW,GAAG,CAAC;AAAA,IAEhD,OAAO,MAAM,MAAM;AAAA;AAAA,EAMb,iBAAiB,CAAC,YAAkC;AAAA,IAC1D,MAAM,aAA8B,CAAC;AAAA,IAErC,WAAW,kBAAkB,CAAC,SAAc;AAAA,MAE1C,IAAI,KAAK,sBAAsB,IAAI,GAAG;AAAA,QACpC,MAAM,OAAO,KAAK,QAAQ;AAAA,QAC1B,IAAI,QAAQ,KAAK,mBAAmB,MAAM,IAAI,GAAG;AAAA,UAC/C,WAAW,KAAK;AAAA,YACd;AAAA,YACA,MAAM;AAAA,YACN,UAAU,WAAW,YAAY;AAAA,YACjC,MAAM,KAAK,mBAAmB;AAAA,YAC9B,OAAO,KAAK,aAAa,IAAI;AAAA,YAC7B,aAAa,KAAK,wBAAwB,IAAI;AAAA,UAChD,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MAGA,IAAI,KAAK,sBAAsB,IAAI,GAAG;AAAA,QACpC,MAAM,OAAO,KAAK,QAAQ;AAAA,QAC1B,MAAM,cAAc,KAAK,eAAe;AAAA,QAExC,IACE,QACA,gBACC,KAAK,gBAAgB,WAAW,KAAK,KAAK,qBAAqB,WAAW,IAC3E;AAAA,UACA,IAAI,KAAK,mBAAmB,MAAM,WAAW,GAAG;AAAA,YAC9C,WAAW,KAAK;AAAA,cACd;AAAA,cACA,MAAM;AAAA,cACN,UAAU,WAAW,YAAY;AAAA,cACjC,MAAM,KAAK,mBAAmB;AAAA,cAC9B,OAAO,KAAK,aAAa,WAAW;AAAA,cACpC,aAAa,KAAK,wBAAwB,IAAI;AAAA,YAChD,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MAGA,IAAI,KAAK,mBAAmB,IAAI,GAAG;AAAA,QACjC,MAAM,OAAO,KAAK,QAAQ;AAAA,QAC1B,IAAI,QAAQ,KAAK,wBAAwB,IAAI,GAAG;AAAA,UAC9C,WAAW,KAAK;AAAA,YACd;AAAA,YACA,MAAM;AAAA,YACN,UAAU,WAAW,YAAY;AAAA,YACjC,MAAM,KAAK,mBAAmB;AAAA,YAC9B,OAAO,KAAK,sBAAsB,IAAI;AAAA,YACtC,aAAa,KAAK,wBAAwB,IAAI;AAAA,UAChD,CAAC;AAAA,QACH;AAAA,MACF;AAAA,KACD;AAAA,IAED,OAAO;AAAA;AAAA,EAMD,kBAAkB,CAAC,MAAc,MAAoB;AAAA,IAE3D,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,MAAG,OAAO;AAAA,IAGjC,MAAM,OAAO,KAAK,QAAQ;AAAA,IAC1B,IAAI,CAAC;AAAA,MAAM,OAAO;AAAA,IAElB,IAAI,SAAS;AAAA,IAEb,IAAI,KAAK,QAAQ,IAAI,GAAG;AAAA,MACtB,KAAK,kBAAkB,CAAC,UAAe;AAAA,QACrC,IAAI,KAAK,aAAa,KAAK,KAAK,KAAK,wBAAwB,KAAK,GAAG;AAAA,UACnE,SAAS;AAAA,QACX;AAAA,OACD;AAAA,IACH,EAAO;AAAA,MAEL,IAAI,KAAK,aAAa,IAAI,KAAK,KAAK,wBAAwB,IAAI,GAAG;AAAA,QACjE,SAAS;AAAA,MACX;AAAA;AAAA,IAGF,OAAO;AAAA;AAAA,EAMD,uBAAuB,CAAC,MAAoB;AAAA,IAClD,MAAM,gBAAgB,KAAK,WAAW;AAAA,IACtC,IAAI,CAAC;AAAA,MAAe,OAAO;AAAA,IAE3B,MAAM,cAAc,cAAc,QAAQ;AAAA,IAC1C,OAAO,0BAA0B,KAAK,WAAW;AAAA;AAAA,EAM3C,YAAY,CAAC,MAAqB;AAAA,IACxC,MAAM,SAAS,KAAK,cAAc;AAAA,IAClC,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAEjC,MAAM,aAAa,OAAO;AAAA,IAC1B,MAAM,OAAO,WAAW,QAAQ;AAAA,IAEhC,MAAM,QAAkB,CAAC;AAAA,IACzB,WAAW,QAAQ,KAAK,cAAc,GAAG;AAAA,MACvC,MAAM,KAAK,KAAK,QAAQ,CAAC;AAAA,IAC3B;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,qBAAqB,CAAC,MAAqB;AAAA,IACjD,MAAM,gBAAgB,KAAK,WAAW;AAAA,IACtC,IAAI,CAAC;AAAA,MAAe,OAAO,CAAC;AAAA,IAE5B,MAAM,WAAW,cAAc,QAAQ,EAAE,iBAAiB;AAAA,IAC1D,IAAI,SAAS,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAEnC,MAAM,YAAY,SAAS;AAAA,IAC3B,MAAM,QAAkB,CAAC;AAAA,IAEzB,WAAW,QAAQ,UAAU,cAAc,GAAG;AAAA,MAC5C,MAAM,KAAK,KAAK,QAAQ,CAAC;AAAA,IAC3B;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,uBAAuB,CAAC,MAA+B;AAAA,IAC7D,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,IAAI,OAAO,WAAW;AAAA,MAAG;AAAA,IAEzB,MAAM,cAAc,OAAO,GAAG,eAAe,EAAE,KAAK;AAAA,IACpD,OAAO,eAAe;AAAA;AAAA,EAMhB,WAAW,CAAC,aAA8B;AAAA,IAChD,OAAO,CAAC,SAAS,WAAW,UAAU,EAAE,SAAS,WAAW;AAAA;AAEhE;;;AC3SA,oBAAS,kBAAS;AAAA;AAIX,MAAM,aAAa;AAAA,EAChB;AAAA,EACA;AAAA,EAER,WAAW,CAAC,cAAsB,UAA4B;AAAA,IAC5D,KAAK,UAAU,IAAI,SAAQ;AAAA,MACzB,kBAAkB;AAAA,IACpB,CAAC;AAAA,IACD,KAAK,WAAW;AAAA;AAAA,EAMlB,YAAY,GAAkB;AAAA,IAC5B,MAAM,QAAuB,CAAC;AAAA,IAG9B,MAAM,iBAAiB,IAAI;AAAA,IAC3B,WAAW,WAAW,KAAK,UAAU;AAAA,MACnC,IAAI,CAAC,eAAe,IAAI,QAAQ,WAAW,GAAG;AAAA,QAC5C,eAAe,IAAI,QAAQ,aAAa,CAAC,CAAC;AAAA,MAC5C;AAAA,MACA,eAAe,IAAI,QAAQ,WAAW,EAAG,KAAK,OAAO;AAAA,IACvD;AAAA,IAGA,YAAY,aAAa,aAAa,gBAAgB;AAAA,MAEpD,MAAM,UAAU,KAAK,mBAAmB,WAAW;AAAA,MAGnD,WAAW,UAAU,SAAS;AAAA,QAC5B,MAAM,aAAa,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,QAG7C,MAAM,WAAW,KAAK,cAAc,aAAa,QAAQ,QAAQ;AAAA,QAGjE,MAAM,eAAe,KAAK,oBAAoB,OAAO,MAAM,OAAO,IAAI;AAAA,QAEtE,MAAM,KAAK;AAAA,UACT;AAAA,UACA,MAAM,OAAO;AAAA,UACb,IAAI;AAAA,UACJ,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,UACvB,aAAa,aAAa;AAAA,UAC1B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAOD,kBAAkB,CAAC,aAIxB;AAAA,IACD,MAAM,UAAkE,CAAC;AAAA,IAEzE,WAAW,cAAc,KAAK,QAAQ,eAAe,GAAG;AAAA,MACtD,MAAM,WAAW,WAAW,YAAY;AAAA,MACxC,MAAM,UAAU,KAAK,aAAa,QAAQ;AAAA,MAE1C,WAAW,kBAAkB,CAAC,SAAS;AAAA,QACrC,IAAI,MAAK,iBAAiB,IAAI,GAAG;AAAA,UAC/B,MAAM,aAAa,KAAK,cAAc;AAAA,UAGtC,IAAI,MAAK,2BAA2B,UAAU,GAAG;AAAA,YAC/C,MAAM,aAAa,WAAW,QAAQ;AAAA,YAEtC,IAAI,eAAe,UAAU,eAAe,UAAU,eAAe,iBAAiB,eAAe,aAAa;AAAA,cAChH,MAAM,OAAO,KAAK,aAAa;AAAA,cAC/B,IAAI,KAAK,SAAS,GAAG;AAAA,gBACnB,MAAM,WAAW,KAAK;AAAA,gBAEtB,IAAI;AAAA,gBAGJ,IAAI,MAAK,gBAAgB,QAAQ,GAAG;AAAA,kBAClC,UAAU,SAAS,gBAAgB;AAAA,gBACrC,EAEK,SAAI,MAAK,0BAA0B,QAAQ,GAAG;AAAA,kBACjD,MAAM,eAAe,SAAS,YAAY,MAAM;AAAA,kBAChD,IAAI,gBAAgB,MAAK,qBAAqB,YAAY,GAAG;AAAA,oBAC3D,MAAM,cAAc,aAAa,eAAe;AAAA,oBAChD,IAAI,eAAe,MAAK,gBAAgB,WAAW,GAAG;AAAA,sBACpD,UAAU,YAAY,gBAAgB;AAAA,oBACxC;AAAA,kBACF;AAAA,gBACF;AAAA,gBAEA,IAAI,YAAY,aAAa;AAAA,kBAC3B,QAAQ,KAAK;AAAA,oBACX;AAAA,oBACA,MAAM;AAAA,oBACN,MAAM,KAAK,mBAAmB;AAAA,kBAChC,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UAGA,IAAI,MAAK,aAAa,UAAU,GAAG;AAAA,YACjC,IAAI,WAAW,QAAQ,MAAM,eAAe;AAAA,cAC1C,MAAM,OAAO,KAAK,aAAa;AAAA,cAC/B,IAAI,KAAK,SAAS,GAAG;AAAA,gBACnB,MAAM,WAAW,KAAK;AAAA,gBACtB,IAAI;AAAA,gBAEJ,IAAI,MAAK,gBAAgB,QAAQ,GAAG;AAAA,kBAClC,UAAU,SAAS,gBAAgB;AAAA,gBACrC,EAAO,SAAI,MAAK,0BAA0B,QAAQ,GAAG;AAAA,kBACnD,MAAM,eAAe,SAAS,YAAY,MAAM;AAAA,kBAChD,IAAI,gBAAgB,MAAK,qBAAqB,YAAY,GAAG;AAAA,oBAC3D,MAAM,cAAc,aAAa,eAAe;AAAA,oBAChD,IAAI,eAAe,MAAK,gBAAgB,WAAW,GAAG;AAAA,sBACpD,UAAU,YAAY,gBAAgB;AAAA,oBACxC;AAAA,kBACF;AAAA,gBACF;AAAA,gBAEA,IAAI,YAAY,aAAa;AAAA,kBAC3B,QAAQ,KAAK;AAAA,oBACX;AAAA,oBACA,MAAM;AAAA,oBACN,MAAM,KAAK,mBAAmB;AAAA,kBAChC,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,OACD;AAAA,IACH;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,aAAa,CACnB,aACA,QACA,UACe;AAAA,IACf,MAAM,QAAuB,CAAC;AAAA,IAC9B,IAAI,aAAa;AAAA,IAGjB,MAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,QAAQ,GAAG,OAAO,gBAAgB;AAAA,MAClC,SAAS,OAAO;AAAA,MAChB,UAAU;AAAA,QACR,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,MACf;AAAA,IACF,CAAC;AAAA,IAGD,WAAW,WAAW,UAAU;AAAA,MAC9B,MAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,QAAQ,GAAG,QAAQ,eAAe;AAAA,QAClC,SAAS,QAAQ;AAAA,QACjB,UAAU,QAAQ;AAAA,MACpB,CAAC;AAAA,MAGD,MAAM,WAAW,KAAK,sBAAsB,OAAO;AAAA,MACnD,WAAW,WAAW,UAAU;AAAA,QAC9B,MAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,QAAQ,GAAG,QAAQ,aAAa,QAAQ;AAAA,UACxC,SAAS,QAAQ;AAAA,UACjB,UAAU,QAAQ;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,qBAAqB,CAAC,SAG3B;AAAA,IACD,MAAM,QAAkF,CAAC;AAAA,IAEzF,MAAM,aAAa,KAAK,QAAQ,cAAc,QAAQ,SAAS,IAAI;AAAA,IACnE,IAAI,CAAC;AAAA,MAAY,OAAO;AAAA,IAGxB,MAAM,aAAa,QAAQ,SAAS;AAAA,IAEpC,WAAW,kBAAkB,CAAC,SAAS;AAAA,MACrC,IAAI,MAAK,iBAAiB,IAAI,GAAG;AAAA,QAC/B,MAAM,OAAO,KAAK,mBAAmB;AAAA,QAGrC,IAAI,KAAK,IAAI,OAAO,UAAU,IAAI,IAAI;AAAA,UACpC,MAAM,aAAa,KAAK,cAAc;AAAA,UAEtC,IAAI,MAAK,2BAA2B,UAAU,GAAG;AAAA,YAC/C,MAAM,aAAa,WAAW,QAAQ;AAAA,YAEtC,IAAI,eAAe,UAAU,eAAe,QAAQ;AAAA,cAClD,MAAM,OAAO,KAAK,aAAa;AAAA,cAC/B,IAAI,KAAK,SAAS,GAAG;AAAA,gBACnB,MAAM,WAAW,KAAK;AAAA,gBACtB,IAAI;AAAA,gBAGJ,IAAI,MAAK,gBAAgB,QAAQ,GAAG;AAAA,kBAClC,cAAc,SAAS,gBAAgB;AAAA,gBACzC,EAEK,SAAI,MAAK,0BAA0B,QAAQ,GAAG;AAAA,kBACjD,MAAM,eAAe,SAAS,YAAY,MAAM;AAAA,kBAChD,IAAI,gBAAgB,MAAK,qBAAqB,YAAY,GAAG;AAAA,oBAC3D,MAAM,cAAc,aAAa,eAAe;AAAA,oBAChD,IAAI,eAAe,MAAK,gBAAgB,WAAW,GAAG;AAAA,sBACpD,cAAc,YAAY,gBAAgB;AAAA,oBAC5C;AAAA,kBACF;AAAA,gBACF;AAAA,gBAEA,IAAI,aAAa;AAAA,kBACf,MAAM,KAAK;AAAA,oBACT;AAAA,oBACA,UAAU;AAAA,sBACR,MAAM,QAAQ,SAAS;AAAA,sBACvB;AAAA,oBACF;AAAA,kBACF,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,KACD;AAAA,IAED,OAAO;AAAA;AAAA,EAMD,mBAAmB,CACzB,UACA,YAKA;AAAA,IACA,MAAM,aAAa,KAAK,QAAQ,cAAc,QAAQ;AAAA,IACtD,IAAI,CAAC;AAAA,MAAY,OAAO,CAAC;AAAA,IAGzB,IAAI,aAAkB;AAAA,IAEtB,WAAW,kBAAkB,CAAC,SAAS;AAAA,MACrC,IAAI,KAAK,mBAAmB,MAAM,YAAY;AAAA,QAC5C,aAAa;AAAA,MACf;AAAA,KACD;AAAA,IAED,IAAI,CAAC;AAAA,MAAY,OAAO,CAAC;AAAA,IAGzB,MAAM,SAAS,WAAW,YAAY,KAAK,CAAC;AAAA,IAC5C,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAEjC,MAAM,UAAU,OAAO,GAAG,QAAQ;AAAA,IAGlC,MAAM,YAAY,QAAQ,MAAM,kBAAkB;AAAA,IAClD,MAAM,WAAW,YAAY,UAAU,KAAK;AAAA,IAG5C,MAAM,eAAe,QAAQ,MAAM,0BAA0B;AAAA,IAC7D,MAAM,UAAU,eAAe,aAAa,GAAG,KAAK,IAAI;AAAA,IAGxD,MAAM,YAAY,QAAQ,MAAM,+BAA+B;AAAA,IAC/D,MAAM,cAAc,YAAY,UAAU,GAAG,KAAK,IAAI;AAAA,IAEtD,OAAO,EAAE,SAAS,UAAU,YAAY;AAAA;AAAA,EAMlC,YAAY,CAAC,UAA0B;AAAA,IAC7C,MAAM,QAAO,SAAS,YAAY;AAAA,IAGlC,IAAI,MAAK,SAAS,cAAc,KAAK,MAAK,SAAS,gBAAgB,GAAG;AAAA,MACpE,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,WAAW,KAAK,MAAK,SAAS,aAAa,GAAG;AAAA,MAC9D,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,SAAS,KAAK,MAAK,SAAS,WAAW,GAAG;AAAA,MAC1D,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,YAAY,KAAK,MAAK,SAAS,cAAc,GAAG;AAAA,MAChE,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,WAAW,KAAK,MAAK,SAAS,aAAa,GAAG;AAAA,MAC9D,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,aAAa,KAAK,MAAK,SAAS,eAAe,GAAG;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,MAAK,SAAS,UAAU,KAAK,MAAK,SAAS,YAAY,KAAK,MAAK,SAAS,UAAU,GAAG;AAAA,MACzF,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,UAAU,KAAK,MAAK,SAAS,YAAY,KAAK,MAAK,SAAS,UAAU,GAAG;AAAA,MACzF,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,MAAK,SAAS,UAAU,KAAK,MAAK,SAAS,YAAY,KAAK,MAAK,SAAS,gBAAgB,GAAG;AAAA,MAC/F,OAAO;AAAA,IACT;AAAA,IAEA,OAAO;AAAA;AAEX;;;AChWA,oBAAS,kBAAS;AAAA;AAGX,MAAM,oBAAoB;AAAA,EACvB;AAAA,EAER,WAAW,CAAC,cAAsB;AAAA,IAChC,KAAK,UAAU,IAAI,SAAQ;AAAA,MACzB,kBAAkB;AAAA,IACpB,CAAC;AAAA;AAAA,EAMH,mBAAmB,GAA0B;AAAA,IAC3C,MAAM,eAAe,IAAI;AAAA,IAGzB,MAAM,aAAa,KAAK,eAAe;AAAA,IACvC,WAAW,QAAQ,YAAY;AAAA,MAC7B,KAAK,sBAAsB,cAAc,KAAK,qBAAqB,IAAI,CAAC;AAAA,IAC1E;AAAA,IAGA,MAAM,aAAa,KAAK,eAAe;AAAA,IACvC,WAAW,MAAM,YAAY;AAAA,MAC3B,KAAK,sBAAsB,cAAc,KAAK,2BAA2B,EAAE,CAAC;AAAA,IAC9E;AAAA,IAGA,MAAM,kBAAkB,KAAK,oBAAoB;AAAA,IACjD,WAAW,UAAU,iBAAiB;AAAA,MACpC,KAAK,sBAAsB,cAAc,MAAM;AAAA,IACjD;AAAA,IAEA,OAAO,MAAM,KAAK,aAAa,OAAO,CAAC;AAAA;AAAA,EAMjC,cAAc,GAMnB;AAAA,IACD,MAAM,QAMD,CAAC;AAAA,IAEN,WAAW,cAAc,KAAK,QAAQ,eAAe,GAAG;AAAA,MACtD,WAAW,kBAAkB,CAAC,SAAS;AAAA,QACrC,IAAI,MAAK,iBAAiB,IAAI,GAAG;AAAA,UAC/B,MAAM,aAAa,KAAK,cAAc;AAAA,UAGtC,IAAI,MAAK,aAAa,UAAU,KAAK,WAAW,QAAQ,MAAM,SAAS;AAAA,YACrE,MAAM,OAAO,KAAK,aAAa;AAAA,YAC/B,IAAI,KAAK,SAAS,GAAG;AAAA,cAEnB,MAAM,SAAS,KAAK;AAAA,cACpB,IAAI,MAAqB;AAAA,cAEzB,IAAI,MAAK,gBAAgB,MAAM,GAAG;AAAA,gBAChC,MAAM,OAAO,gBAAgB;AAAA,cAC/B,EAAO,SAAI,MAAK,qBAAqB,MAAM,GAAG;AAAA,gBAE5C,MAAM,KAAK,eAAe,OAAO,QAAQ,CAAC;AAAA,cAC5C;AAAA,cAEA,IAAI,KAAK;AAAA,gBAEP,IAAI,SAAS;AAAA,gBACb,IAAI,KAAK,SAAS,KAAK,MAAK,0BAA0B,KAAK,EAAE,GAAG;AAAA,kBAC9D,MAAM,UAAU,KAAK;AAAA,kBACrB,MAAM,aAAa,QAAQ,YAAY,QAAQ;AAAA,kBAC/C,IACE,cACA,MAAK,qBAAqB,UAAU,GACpC;AAAA,oBACA,MAAM,cAAc,WAAW,eAAe;AAAA,oBAC9C,IAAI,eAAe,MAAK,gBAAgB,WAAW,GAAG;AAAA,sBACpD,SAAS,YAAY,gBAAgB,EAAE,YAAY;AAAA,oBACrD;AAAA,kBACF;AAAA,gBACF;AAAA,gBAGA,MAAM,cAAc,KAAK,wBAAwB,IAAI;AAAA,gBAErD,MAAM,KAAK;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA,MAAM,WAAW,YAAY;AAAA,kBAC7B,MAAM,KAAK,mBAAmB;AAAA,kBAC9B;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,OACD;AAAA,IACH;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,cAAc,GAKnB;AAAA,IACD,MAAM,aAKD,CAAC;AAAA,IAEN,WAAW,cAAc,KAAK,QAAQ,eAAe,GAAG;AAAA,MACtD,WAAW,kBAAkB,CAAC,SAAS;AAAA,QACrC,IAAI,MAAK,gBAAgB,IAAI,GAAG;AAAA,UAC9B,MAAM,aAAa,KAAK,cAAc;AAAA,UAGtC,IAAI,MAAK,aAAa,UAAU,KAAK,WAAW,QAAQ,MAAM,aAAa;AAAA,YACzE,MAAM,OAAO,KAAK,aAAa;AAAA,YAC/B,IAAI,KAAK,SAAS,KAAK,MAAK,gBAAgB,KAAK,EAAE,GAAG;AAAA,cACpD,MAAM,MAAM,KAAK,GAAG,gBAAgB;AAAA,cACpC,MAAM,cAAc,KAAK,wBAAwB,IAAI;AAAA,cAErD,WAAW,KAAK;AAAA,gBACd;AAAA,gBACA,MAAM,WAAW,YAAY;AAAA,gBAC7B,MAAM,KAAK,mBAAmB;AAAA,gBAC9B;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,OACD;AAAA,IACH;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,mBAAmB,GAA0B;AAAA,IACnD,MAAM,UAAiC,CAAC;AAAA,IACxC,MAAM,OAAO,IAAI;AAAA,IAEjB,WAAW,cAAc,KAAK,QAAQ,eAAe,GAAG;AAAA,MACtD,WAAW,cAAc,WAAW,sBAAsB,GAAG;AAAA,QAC3D,MAAM,kBAAkB,WAAW,wBAAwB;AAAA,QAG3D,IAAI,CAAC,gBAAgB,WAAW,GAAG,KAAK,CAAC,gBAAgB,WAAW,GAAG,GAAG;AAAA,UAExE,MAAM,cAAc,gBAAgB,WAAW,GAAG,IAC9C,gBAAgB,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,IAC/C,gBAAgB,MAAM,GAAG,EAAE;AAAA,UAE/B,IAAI,CAAC,KAAK,IAAI,WAAW,GAAG;AAAA,YAC1B,KAAK,IAAI,WAAW;AAAA,YAEpB,QAAQ,KAAK;AAAA,cACX,MAAM;AAAA,cACN,MAAM;AAAA,cACN,YAAY;AAAA,cACZ,QAAQ,CAAC,WAAW,YAAY,CAAC;AAAA,cACjC,aAAa,wBAAwB;AAAA,YACvC,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,oBAAoB,CAAC,MAML;AAAA,IAEtB,MAAM,UAAU,KAAK,eAAe,KAAK,GAAG;AAAA,IAG5C,MAAM,OAAO,KAAK,aAAa,OAAO;AAAA,IAEtC,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,QAAQ,CAAC,KAAK,IAAI;AAAA,MAClB,aAAa,KAAK,eAAe,iBAAiB;AAAA,MAClD,OAAO;AAAA,QACL;AAAA,UACE,QAAQ,KAAK;AAAA,UACb,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,YACR,MAAM,KAAK;AAAA,YACX,MAAM,KAAK;AAAA,UACb;AAAA,UACA,aAAa,KAAK;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAMM,0BAA0B,CAAC,IAKX;AAAA,IACtB,MAAM,OAAO,KAAK,aAAa,GAAG,GAAG;AAAA,IAErC,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,YAAY;AAAA,MACZ,KAAK,GAAG;AAAA,MACR,QAAQ,CAAC,GAAG,IAAI;AAAA,MAChB,aAAa,GAAG,eAAe,yBAAyB;AAAA,IAC1D;AAAA;AAAA,EAMM,cAAc,CAAC,KAAqB;AAAA,IAE1C,MAAM,IAAI,QAAQ,gBAAgB,EAAE;AAAA,IACpC,MAAM,IAAI,QAAQ,MAAM,EAAE;AAAA,IAE1B,IAAI;AAAA,MACF,MAAM,SAAS,IAAI,IAAI,GAAG;AAAA,MAC1B,OAAO,GAAG,OAAO,aAAa,OAAO;AAAA,MACrC,MAAM;AAAA,MAEN,MAAM,QAAQ,IAAI,MAAM,oBAAoB;AAAA,MAC5C,OAAO,QAAQ,MAAM,KAAK;AAAA;AAAA;AAAA,EAOtB,YAAY,CAAC,KAAqB;AAAA,IACxC,IAAI;AAAA,MACF,MAAM,SAAS,IAAI,IAAI,GAAG;AAAA,MAC1B,MAAM,WAAW,OAAO;AAAA,MAGxB,MAAM,YAAY,SAAS,QAAQ,UAAU,EAAE;AAAA,MAG/C,MAAM,QAAQ,UAAU,MAAM,GAAG;AAAA,MACjC,IAAI,MAAM,SAAS,GAAG;AAAA,QAEpB,OAAO,MAAM,GAAG,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI;AAAA,MAChE;AAAA,MACA,MAAM;AAAA,IAIR,OAAO;AAAA;AAAA,EAMD,qBAAqB,CAC3B,KACA,aACM;AAAA,IACN,MAAM,MAAM,GAAG,YAAY,QAAQ,YAAY;AAAA,IAE/C,IAAI,IAAI,IAAI,GAAG,GAAG;AAAA,MAChB,MAAM,WAAW,IAAI,IAAI,GAAG;AAAA,MAG5B,SAAS,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,SAAS,QAAQ,GAAG,YAAY,MAAM,CAAC,CAAC;AAAA,MAG1E,IAAI,YAAY,SAAS,SAAS,OAAO;AAAA,QACvC,SAAS,MAAM,KAAK,GAAG,YAAY,KAAK;AAAA,MAC1C,EAAO,SAAI,YAAY,OAAO;AAAA,QAC5B,SAAS,QAAQ,YAAY;AAAA,MAC/B;AAAA,IACF,EAAO;AAAA,MACL,IAAI,IAAI,KAAK,WAAW;AAAA;AAAA;AAAA,EAOpB,uBAAuB,CAAC,MAA+B;AAAA,IAC7D,MAAM,SAAS,KAAK,YAAY,KAAK,CAAC;AAAA,IACtC,IAAI,OAAO,WAAW;AAAA,MAAG;AAAA,IAEzB,MAAM,UAAU,OAAO,GAAG,eAAe,EAAE,KAAK;AAAA,IAChD,OAAO,WAAW;AAAA;AAEtB;;;ACxUA,oBAAS,wBAA0B,qBAAY;;;ACA/C,iBAAS;AAAA;AAuBF,MAAM,sBAAsB;AAAA,EAIlC,kBAAkB,CACjB,aACA,YACA,aACyB;AAAA,IACzB,MAAM,gBAAwC,CAAC;AAAA,IAC/C,MAAM,UAAU,IAAI;AAAA,IAEpB,KAAK,gBAAgB,aAAa,YAAY,aAAa,eAAe,OAAO;AAAA,IAEjF,OAAO,KAAK,yBAAyB,aAAa;AAAA;AAAA,EAM3C,eAAe,CACtB,MACA,YACA,aACA,eACA,SACO;AAAA,IAEP,KAAK,kBAAkB,CAAC,eAAe;AAAA,MACtC,IAAI,MAAK,iBAAiB,UAAU,GAAG;AAAA,QACtC,MAAM,OAAO,WAAW,cAAc;AAAA,QAGtC,IAAI,MAAK,aAAa,IAAI,GAAG;AAAA,UAC5B,MAAM,eAAe,KAAK,QAAQ;AAAA,UAGlC,IAAI,eAAe,WAAW,YAAY,YAAY;AAAA,UACtD,IAAI,mBAAmB;AAAA,UAGvB,IAAI,CAAC,cAAc;AAAA,YAClB,MAAM,WAAW,KAAK,wBAAwB,cAAc,UAAU;AAAA,YACtE,IAAI,UAAU;AAAA,cACb,eAAe,SAAS;AAAA,cACxB,mBAAmB,SAAS;AAAA,YAC7B;AAAA,UACD;AAAA,UAEA,IAAI,gBAAgB,CAAC,QAAQ,IAAI,YAAY,GAAG;AAAA,YAE/C,QAAQ,IAAI,YAAY;AAAA,YAGxB,MAAM,OAAO,aAAa,QAAQ;AAAA,YAClC,IAAI,MAAM;AAAA,cACT,KAAK,gBAAgB,MAAM,kBAAkB,aAAa,eAAe,OAAO;AAAA,YACjF;AAAA,YAGA;AAAA,UACD;AAAA,UAIA,IAAI,CAAC,cAAc;AAAA,YAClB,MAAM,oBAAoB,KAAK,+BAA+B,YAAY;AAAA,YAC1E,IAAI,mBAAmB;AAAA,cACtB,cAAc,KAAK;AAAA,gBAClB,MAAM,KAAK,cAAc,WAAW;AAAA,gBACpC,IAAI;AAAA,gBACJ,aAAa,SAAS;AAAA,gBACtB,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,UAAU,CAAC,kBAAkB,cAAc;AAAA,cAC5C,CAAC;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,QAIA,IAAI,MAAK,2BAA2B,IAAI,GAAG;AAAA,UAC1C,MAAM,OAAM,KAAK,0BAA0B,MAAM,WAAW;AAAA,UAC5D,IAAI,MAAK;AAAA,YACR,cAAc,KAAK,IAAG;AAAA,YACtB;AAAA,UACD;AAAA,QACD;AAAA,QAGA,MAAM,MAAM,KAAK,wBAAwB,YAAY,aAAa,UAAU;AAAA,QAC5E,IAAI,KAAK;AAAA,UACR,cAAc,KAAK,GAAG;AAAA,QACvB;AAAA,MACD;AAAA,MAGA,IAAI,MAAK,kBAAkB,UAAU,GAAG;AAAA,QACvC,MAAM,MAAM,KAAK,wBAAwB,YAAY,WAAW;AAAA,QAChE,IAAI,KAAK;AAAA,UACR,cAAc,KAAK,GAAG;AAAA,QACvB;AAAA,MACD;AAAA,MAGA,IACC,MAAK,iBAAiB,UAAU,KAChC,WAAW,cAAc,EAAE,QAAQ,MAAM,SACxC;AAAA,QACD,MAAM,MAAM,KAAK,qBAAqB,YAAY,WAAW;AAAA,QAC7D,IAAI,KAAK;AAAA,UACR,cAAc,KAAK,GAAG;AAAA,QACvB;AAAA,MACD;AAAA,KACA;AAAA;AAAA,EAMM,uBAAuB,CAC9B,UACA,aACA,YAC8B;AAAA,IAC9B,MAAM,OAAO,SAAS,cAAc;AAAA,IACpC,MAAM,WAAW,KAAK,QAAQ;AAAA,IAG9B,MAAM,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IAEA,IAAI,SAAS,KAAK,CAAC,SAAS,SAAS,WAAW,IAAI,CAAC,GAAG;AAAA,MACvD,OAAO;AAAA,IACR;AAAA,IAGA,IAAI,eAAe;AAAA,IACnB,IAAI,kBAAiC;AAAA,IAGrC,IAAI,MAAK,2BAA2B,IAAI,GAAG;AAAA,MAC1C,MAAM,aAAa,KAAK,cAAc;AAAA,MACtC,MAAM,aAAa,WAAW,QAAQ;AAAA,MACtC,MAAM,aAAa,KAAK,QAAQ;AAAA,MAGhC,kBAAkB,KAAK,uBAAuB,YAAY,UAAU;AAAA,MAEpE,IAAI,CAAC,iBAAiB;AAAA,QACrB,OAAO;AAAA,MACR;AAAA,MAEA,eAAe;AAAA,IAChB,EAAO;AAAA,MAEN,kBAAkB,KAAK,2BACtB,UACA,UACD;AAAA,MAEA,IAAI,CAAC,iBAAiB;AAAA,QACrB,OAAO;AAAA,MACR;AAAA;AAAA,IAGD,OAAO;AAAA,MACN,MAAM,KAAK,cAAc,WAAW;AAAA,MACpC,IAAI;AAAA,MACJ,aAAa,SAAS;AAAA,MACtB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU,CAAC,kBAAkB,UAAU;AAAA,IACxC;AAAA;AAAA,EAOO,yBAAyB,CAChC,YACA,aAC8B;AAAA,IAC9B,IAAI,CAAC,MAAK,2BAA2B,UAAU,GAAG;AAAA,MACjD,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,YAAY,WAAW,QAAQ;AAAA,IACrC,MAAM,aAAa,WAAW,QAAQ;AAAA,IAItC,IAAI,aAAa,WAAW,cAAc;AAAA,IAC1C,OAAO,MAAK,2BAA2B,UAAU,GAAG;AAAA,MACnD,aAAa,WAAW,cAAc;AAAA,IACvC;AAAA,IAEA,MAAM,aAAa,WAAW,QAAQ;AAAA,IAGtC,MAAM,kBAAkB,KAAK,uBAAuB,YAAY,UAAU;AAAA,IAE1E,IAAI,CAAC,iBAAiB;AAAA,MACrB,OAAO;AAAA,IACR;AAAA,IAEA,OAAO;AAAA,MACN,MAAM,KAAK,cAAc,WAAW;AAAA,MACpC,IAAI;AAAA,MACJ,aAAa,SAAS;AAAA,MACtB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU,CAAC,oBAAoB,WAAW;AAAA,IAC3C;AAAA;AAAA,EAMO,uBAAuB,CAC9B,WACA,aAC8B;AAAA,IAC9B,IAAI,CAAC,MAAK,kBAAkB,SAAS,GAAG;AAAA,MACvC,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,YAAY,UAAU,cAAc;AAAA,IAC1C,IAAI,CAAC,MAAK,iBAAiB,SAAS,GAAG;AAAA,MACtC,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,UAAU,cAAc,EAAE,QAAQ;AAAA,IAGnD,IACC,SAAS,SAAS,UAAU,KAC5B,SAAS,SAAS,YAAY,KAC9B,SAAS,SAAS,WAAW,KAC7B,SAAS,SAAS,WAAW,KAC7B,SAAS,SAAS,WAAW,KAC7B,SAAS,SAAS,WAAW,GAC5B;AAAA,MACD,MAAM,YAAY,KAAK,uBAAuB,QAAQ;AAAA,MAEtD,OAAO;AAAA,QACN,MAAM,KAAK,cAAc,WAAW;AAAA,QACpC,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,UAAU,CAAC,kBAAkB,UAAU;AAAA,MACxC;AAAA,IACD;AAAA,IAEA,OAAO;AAAA;AAAA,EAMA,oBAAoB,CAC3B,UACA,aAC8B;AAAA,IAC9B,MAAM,OAAO,SAAS,aAAa;AAAA,IACnC,IAAI,KAAK,WAAW,GAAG;AAAA,MACtB,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,SAAS,KAAK,GAAG,QAAQ;AAAA,IAG/B,IAAI,UAAU;AAAA,IACd,IAAI,OAAO,SAAS,QAAQ,GAAG;AAAA,MAC9B,UAAU;AAAA,IACX,EAAO,SAAI,OAAO,SAAS,WAAW,GAAG;AAAA,MACxC,UAAU;AAAA,IACX;AAAA,IAEA,OAAO;AAAA,MACN,MAAM,KAAK,cAAc,WAAW;AAAA,MACpC,IAAI;AAAA,MACJ,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU,CAAC,oBAAoB,QAAQ;AAAA,IACxC;AAAA;AAAA,EAMO,sBAAsB,CAC7B,YACA,YACgB;AAAA,IAChB,MAAM,WAAmC;AAAA,MACxC,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,OAAO;AAAA,MACP,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,aAAa,WAAW,YAAY;AAAA,IAC1C,OAAO,SAAS,eAAe;AAAA;AAAA,EAOxB,8BAA8B,CAAC,cAAqC;AAAA,IAC3E,MAAM,aAAa,aAAa,YAAY;AAAA,IAG5C,IAAI,WAAW,WAAW,KAAK,KAAK,WAAW,WAAW,QAAQ,GAAG;AAAA,MACpE,MAAM,SAAS,aAAa,UAAU,WAAW,WAAW,KAAK,IAAI,IAAI,CAAC;AAAA,MAC1E,MAAM,cAAc,OAAO,YAAY;AAAA,MAGvC,IACC,YAAY,SAAS,UAAU,KAC/B,gBAAgB,QAChB,YAAY,SAAS,cAAc,KACnC,YAAY,SAAS,YAAY,GAChC;AAAA,QACD,OAAO;AAAA,MACR;AAAA,MAGA,IACC,YAAY,SAAS,cAAc,KACnC,YAAY,SAAS,OAAO,KAC5B,YAAY,SAAS,YAAY,GAChC;AAAA,QACD,OAAO;AAAA,MACR;AAAA,MAGA,IAAI,YAAY,SAAS,SAAS,GAAG;AAAA,QAEpC,MAAM,eAAe,OAAO,MAAM,gBAAgB;AAAA,QAClD,IAAI,cAAc;AAAA,UACjB,OAAO,KAAK,cAAc,GAAG,aAAa,YAAY;AAAA,QACvD;AAAA,QACA,OAAO;AAAA,MACR;AAAA,MAGA,IAAI,YAAY,SAAS,OAAO,GAAG;AAAA,QAClC,OAAO;AAAA,MACR;AAAA,MAGA,IAAI,YAAY,SAAS,SAAS,GAAG;AAAA,QACpC,OAAO;AAAA,MACR;AAAA,MAGA,IAAI,YAAY,SAAS,IAAI,KAAK,YAAY,SAAS,KAAK,GAAG;AAAA,QAC9D,OAAO;AAAA,MACR;AAAA,MAGA,IAAI,YAAY,SAAS,QAAQ,GAAG;AAAA,QACnC,OAAO;AAAA,MACR;AAAA,IACD;AAAA,IAGA,IAAI,WAAW,WAAW,MAAM,KAAK,WAAW,WAAW,OAAO,GAAG;AAAA,MAEpE,MAAM,SAAS,aAAa,UAAU,WAAW,WAAW,MAAM,IAAI,IAAI,CAAC;AAAA,MAC3E,MAAM,cAAc,OAAO,YAAY;AAAA,MAEvC,IAAI,YAAY,SAAS,UAAU,KAAK,gBAAgB,MAAM;AAAA,QAC7D,OAAO;AAAA,MACR;AAAA,MACA,IAAI,YAAY,SAAS,OAAO,GAAG;AAAA,QAClC,OAAO;AAAA,MACR;AAAA,IACD;AAAA,IAEA,OAAO;AAAA;AAAA,EAMA,0BAA0B,CACjC,cACA,YACgB;AAAA,IAEhB,WAAW,cAAc,WAAW,sBAAsB,GAAG;AAAA,MAC5D,MAAM,eAAe,WAAW,gBAAgB;AAAA,MAEhD,WAAW,eAAe,cAAc;AAAA,QACvC,IAAI,YAAY,QAAQ,MAAM,cAAc;AAAA,UAC3C,MAAM,aAAa,WAAW,wBAAwB;AAAA,UAGtD,IAAI,WAAW,SAAS,MAAM,KAAK,WAAW,SAAS,YAAY,GAAG;AAAA,YACrE,OAAO;AAAA,UACR;AAAA,UACA,IACC,WAAW,SAAS,QAAQ,KAC5B,WAAW,SAAS,eAAe,GAClC;AAAA,YACD,OAAO;AAAA,UACR;AAAA,UACA,IACC,WAAW,SAAS,UAAU,KAC9B,WAAW,SAAS,WAAW,GAC9B;AAAA,YAED,MAAM,QAAQ,WAAW,MAAM,gBAAgB;AAAA,YAC/C,IAAI,OAAO;AAAA,cACV,OAAO,KAAK,cAAc,MAAM,EAAE;AAAA,YACnC;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IAEA,OAAO;AAAA;AAAA,EAQA,uBAAuB,CAC9B,cACA,YACuD;AAAA,IACvD,IAAI;AAAA,MAEH,WAAW,cAAc,WAAW,sBAAsB,GAAG;AAAA,QAC5D,MAAM,eAAe,WAAW,gBAAgB;AAAA,QAEhD,WAAW,eAAe,cAAc;AAAA,UACvC,IAAI,YAAY,QAAQ,MAAM,cAAc;AAAA,YAE3C,MAAM,kBAAkB,WAAW,6BAA6B;AAAA,YAChE,IAAI,CAAC;AAAA,cAAiB;AAAA,YAGtB,MAAM,eAAe,gBAAgB,YAAY,YAAY;AAAA,YAC7D,IAAI,cAAc;AAAA,cACjB,OAAO;AAAA,gBACN;AAAA,gBACA,YAAY;AAAA,cACb;AAAA,YACD;AAAA,YAGA,MAAM,eAAe,gBACnB,uBAAuB,YAAY;AAAA,YACrC,IAAI,cAAc;AAAA,cACjB,MAAM,cAAc,aAAa,eAAe;AAAA,cAChD,IACC,gBACC,MAAK,gBAAgB,WAAW,KAChC,MAAK,qBAAqB,WAAW,IACrC;AAAA,gBACD,OAAO;AAAA,kBACN,cAAc;AAAA,kBACd,YAAY;AAAA,gBACb;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,MACC,OAAO,OAAO;AAAA,MAGf,OAAO;AAAA;AAAA,IAGR,OAAO;AAAA;AAAA,EAMA,sBAAsB,CAAC,UAA0B;AAAA,IACxD,IAAI,SAAS,SAAS,OAAO,KAAK,SAAS,SAAS,QAAQ,GAAG;AAAA,MAC9D,OAAO;AAAA,IACR;AAAA,IACA,IACC,SAAS,SAAS,SAAS,KAC3B,SAAS,SAAS,QAAQ,KAC1B,SAAS,SAAS,QAAQ,KAC1B,SAAS,SAAS,QAAQ,GACzB;AAAA,MACD,OAAO;AAAA,IACR;AAAA,IACA,OAAO;AAAA;AAAA,EAMA,aAAa,CAAC,MAAsB;AAAA,IAC3C,OAAO,KACL,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,UAAU,EAAE;AAAA;AAAA,EAMf,wBAAwB,CAC/B,eACyB;AAAA,IACzB,MAAM,OAAO,IAAI;AAAA,IACjB,MAAM,SAAiC,CAAC;AAAA,IAExC,WAAW,OAAO,eAAe;AAAA,MAChC,MAAM,MAAM,GAAG,IAAI,SAAS,IAAI;AAAA,MAChC,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAAA,QACnB,KAAK,IAAI,GAAG;AAAA,QACZ,OAAO,KAAK,GAAG;AAAA,MAChB;AAAA,IACD;AAAA,IAEA,OAAO;AAAA;AAET;;;AD7jBO,MAAM,iBAAiB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EAER,WAAW,CAAC,cAAsB;AAAA,IAChC,KAAK,UAAU,IAAI,SAAQ;AAAA,MACzB,kBAAkB;AAAA,IACpB,CAAC;AAAA,IACD,KAAK,iBAAiB,IAAI;AAAA,IAC1B,KAAK,wBAAwB,IAAI;AAAA;AAAA,EAMnC,eAAe,GAAoB;AAAA,IACjC,MAAM,WAA6B,CAAC;AAAA,IACpC,MAAM,eAAe,IAAI;AAAA,IAGzB,MAAM,cAAc,KAAK,QAAQ,eAAe;AAAA,IAEhD,IAAI,QAAQ,IAAI,aAAa;AAAA,MAC3B,QAAQ,IAAI,kBAAkB,YAAY,qBAAqB;AAAA,MAC/D,IAAI,YAAY,UAAU,IAAI;AAAA,QAE5B,WAAW,MAAM,aAAa;AAAA,UAC5B,QAAQ,IAAI,eAAe,GAAG,YAAY,GAAG;AAAA,QAC/C;AAAA,MACF;AAAA,IACF;AAAA,IAEA,WAAW,cAAc,aAAa;AAAA,MACpC,MAAM,eAAe,KAAK,gBAAgB,UAAU;AAAA,MACpD,SAAS,KAAK,GAAG,YAAY;AAAA,MAE7B,WAAW,WAAW,cAAc;AAAA,QAClC,aAAa,IAAI,QAAQ,WAAW;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,IAAI,QAAQ,IAAI,aAAa;AAAA,MAC3B,QAAQ,IAAI,qCAAqC,SAAS,QAAQ;AAAA,IACpE;AAAA,IAEA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAMM,eAAe,CAAC,YAA0C;AAAA,IAChE,MAAM,WAA6B,CAAC;AAAA,IACpC,MAAM,WAAW,WAAW,YAAY;AAAA,IAGxC,MAAM,UAAU,KAAK,aAAa,QAAQ;AAAA,IAG1C,WAAW,kBAAkB,CAAC,SAAS;AAAA,MACrC,IAAI,MAAK,iBAAiB,IAAI,GAAG;AAAA,QAC/B,MAAM,aAAa,KAAK,cAAc;AAAA,QAGtC,IAAI,MAAK,2BAA2B,UAAU,GAAG;AAAA,UAC/C,MAAM,aAAa,WAAW,QAAQ;AAAA,UAEtC,IAAI,eAAe,QAAQ,eAAe,oBAAoB;AAAA,YAC5D,MAAM,UAAU,KAAK,eAAe,MAAM,SAAS,QAAQ;AAAA,YAC3D,IAAI,SAAS;AAAA,cACX,SAAS,KAAK,OAAO;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAGA,IAAI,MAAK,kBAAkB,IAAI,GAAG;AAAA,QAChC,MAAM,iBAAiB,KAAK,0BAA0B,MAAM,SAAS,QAAQ;AAAA,QAC7E,SAAS,KAAK,GAAG,cAAc;AAAA,MACjC;AAAA,MAGA,IAAI,MAAK,sBAAsB,IAAI,GAAG;AAAA,QACpC,MAAM,cAAc,KAAK,yBAAyB,MAAM,SAAS,QAAQ;AAAA,QACzE,SAAS,KAAK,GAAG,WAAW;AAAA,MAC9B;AAAA,MAIA,IAAI,MAAK,cAAc,IAAI,GAAG;AAAA,QAC5B,MAAM,SAAS,KAAK,UAAU;AAAA,QAC9B,MAAM,WAAW,UAAU,MAAK,cAAc,MAAM;AAAA,QAEpD,IAAI,CAAC,UAAU;AAAA,UACb,MAAM,oBAAoB,KAAK,yBAAyB,MAAM,SAAS,QAAQ;AAAA,UAC/E,SAAS,KAAK,GAAG,iBAAiB;AAAA,QACpC;AAAA,MACF;AAAA,KACD;AAAA,IAED,OAAO;AAAA;AAAA,EAMD,cAAc,CACpB,UACA,SACA,UACuB;AAAA,IACvB,MAAM,OAAO,SAAS,aAAa;AAAA,IAEnC,IAAI,KAAK,SAAS,GAAG;AAAA,MACnB,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,iBAAiB,KAAK;AAAA,IAC5B,IAAI,cAA6B;AAAA,IAEjC,IAAI,MAAK,gBAAgB,cAAc,GAAG;AAAA,MACxC,cAAc,eAAe,gBAAgB;AAAA,IAC/C,EAAO,SAAI,MAAK,qBAAqB,cAAc,GAAG;AAAA,MAEpD,cAAc,eAAe,QAAQ,EAAE,QAAQ,UAAU,EAAE;AAAA,IAC7D;AAAA,IAEA,IAAI,CAAC,aAAa;AAAA,MAChB,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,aAAa,KAAK;AAAA,IACxB,MAAM,cAAiC,CAAC;AAAA,IACxC,MAAM,gBAAyC,CAAC;AAAA,IAChD,MAAM,iBAA0C,CAAC;AAAA,IAGjD,IAAI,MAAK,gBAAgB,UAAU,KAAK,MAAK,qBAAqB,UAAU,GAAG;AAAA,MAC7E,KAAK,mBAAmB,YAAY,WAAW;AAAA,MAC/C,KAAK,8BAA8B,YAAY,eAAe,cAAc;AAAA,IAC9E;AAAA,IAEA,MAAM,OAAO,SAAS,mBAAmB;AAAA,IAGzC,MAAM,aAAa,SAAS,cAAc;AAAA,IAC1C,MAAM,cAAc,GAAG;AAAA,IACvB,IAAI,gBAAgB;AAAA,IAEpB,IAAI,MAAK,gBAAgB,UAAU,KAAK,MAAK,qBAAqB,UAAU,GAAG;AAAA,MAC7E,MAAM,wBAAwB,KAAK,sBAAsB,mBACvD,YACA,YACA,WACF;AAAA,MACA,IAAI,sBAAsB,SAAS,GAAG;AAAA,QACpC,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,QACN;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAMM,kBAAkB,CAAC,UAAe,aAAsC;AAAA,IAC9E,SAAS,kBAAkB,CAAC,SAAc;AAAA,MAExC,IAAI,MAAK,mBAAmB,IAAI,GAAG;AAAA,QACjC,MAAM,WAAW,KAAK,iBAAiB,EAAE,QAAQ;AAAA,QAEjD,IAAI,aAAa,KAAK;AAAA,UACpB,MAAM,OAAO,KAAK,QAAQ;AAAA,UAC1B,MAAM,QAAQ,KAAK,SAAS;AAAA,UAG5B,IAAI,MAAK,2BAA2B,IAAI,GAAG;AAAA,YACzC,MAAM,YAAY,KAAK,gBAAgB,IAAI;AAAA,YAG3C,IAAI,UAAU,WAAW,QAAQ,GAAG;AAAA,cAClC,MAAM,QAAQ,UAAU,UAAU,CAAC;AAAA,cACnC,MAAM,QAAQ,KAAK,aAAa,KAAK;AAAA,cAErC,IAAI,UAAU,WAAW;AAAA,gBACvB,YAAY,KAAK;AAAA,kBACf;AAAA,kBACA;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,KACD;AAAA;AAAA,EAMK,6BAA6B,CACnC,UACA,eACA,gBACM;AAAA,IACN,MAAM,OAAO,SAAS,QAAQ;AAAA,IAG9B,MAAM,aAAa,MAAK,QAAQ,IAAI,IAAI,KAAK,cAAc,IAAI,CAAC,IAAI;AAAA,IAEpE,WAAW,QAAQ,CAAC,WAAgB,UAAkB;AAAA,MAEpD,IAAI,MAAK,sBAAsB,SAAS,GAAG;AAAA,QACzC,MAAM,OAAO,UAAU,cAAc;AAAA,QAErC,IAAI,MAAK,iBAAiB,IAAI,GAAG;AAAA,UAC/B,MAAM,SAAS,KAAK,cAAc;AAAA,UAElC,IAAI,MAAK,aAAa,MAAM,GAAG;AAAA,YAC7B,MAAM,eAAe,OAAO,QAAQ;AAAA,YAEpC,IAAI,iBAAiB,YAAY;AAAA,cAE/B,MAAM,YAAY,KAAK,iBAAiB,IAAI;AAAA,cAC5C,IAAI,WAAW;AAAA,gBACb,cAAc,KAAK,SAAS;AAAA,cAC9B;AAAA,YACF,EAAO,SAAI,iBAAiB,WAAW;AAAA,cAErC,MAAM,YAAY,KAAK,iBAAiB,IAAI;AAAA,cAC5C,IAAI,WAAW;AAAA,gBACb,eAAe,KAAK,SAAS;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,KACD;AAAA;AAAA,EAMK,gBAAgB,CAAC,UAA6C;AAAA,IACpE,MAAM,OAAO,SAAS,aAAa;AAAA,IAEnC,IAAI,KAAK,WAAW,GAAG;AAAA,MACrB,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,eAAe,KAAK;AAAA,IAC1B,MAAM,aAAa,aAAa,QAAQ;AAAA,IAGxC,IAAI;AAAA,IACJ,IAAI,KAAK,UAAU,KAAK,MAAK,gBAAgB,KAAK,EAAE,GAAG;AAAA,MACrD,UAAU,KAAK,GAAG,gBAAgB;AAAA,IACpC;AAAA,IAEA,MAAM,OAAO,SAAS,mBAAmB;AAAA,IACzC,MAAM,SAAS,SAAS,gBAAgB;AAAA,IAExC,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,UAAU;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAMM,eAAe,CAAC,MAAmB;AAAA,IACzC,MAAM,QAAkB,CAAC;AAAA,IAEzB,IAAI,UAAU;AAAA,IACd,OAAO,MAAK,2BAA2B,OAAO,GAAG;AAAA,MAC/C,MAAM,QAAQ,QAAQ,QAAQ,CAAC;AAAA,MAC/B,UAAU,QAAQ,cAAc;AAAA,IAClC;AAAA,IAGA,IAAI,MAAK,aAAa,OAAO,GAAG;AAAA,MAC9B,MAAM,QAAQ,QAAQ,QAAQ,CAAC;AAAA,IACjC;AAAA,IAEA,OAAO,MAAM,KAAK,GAAG;AAAA;AAAA,EAMf,YAAY,CAAC,MAAyD;AAAA,IAC5E,IAAI,MAAK,gBAAgB,IAAI,GAAG;AAAA,MAC9B,OAAO,KAAK,gBAAgB;AAAA,IAC9B;AAAA,IAEA,IAAI,MAAK,iBAAiB,IAAI,GAAG;AAAA,MAC/B,OAAO,KAAK,gBAAgB;AAAA,IAC9B;AAAA,IAEA,IAAI,KAAK,QAAQ,MAAM,YAAW,aAAa;AAAA,MAC7C,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,KAAK,QAAQ,MAAM,YAAW,cAAc;AAAA,MAC9C,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,KAAK,QAAQ,MAAM,YAAW,aAAa;AAAA,MAC7C,OAAO;AAAA,IACT;AAAA,IAGA;AAAA;AAAA,EAOM,yBAAyB,CAC/B,YACA,SACA,UACkB;AAAA,IAClB,MAAM,WAA6B,CAAC;AAAA,IAEpC,IAAI;AAAA,MAEF,MAAM,aAAa,WAAW,cAAc;AAAA,MAC5C,MAAM,iBAAiB,WAAW,QAAQ;AAAA,MAG1C,IAAI,CAAC,6BAA6B,KAAK,cAAc,GAAG;AAAA,QACtD,OAAO;AAAA,MACT;AAAA,MAGA,MAAM,cAAc,WAAW,WAAW;AAAA,MAC1C,WAAW,UAAU,aAAa;AAAA,QAChC,IAAI,MAAK,aAAa,MAAM,GAAG;AAAA,UAC7B,MAAM,WAAW,OAAO,cAAc;AAAA,UAGtC,IAAI,cAA6B;AAAA,UACjC,IAAI,MAAK,gBAAgB,QAAQ,GAAG;AAAA,YAClC,cAAc,SAAS,gBAAgB;AAAA,UACzC;AAAA,UAEA,IAAI,aAAa;AAAA,YACf,MAAM,OAAO,OAAO,mBAAmB;AAAA,YAEvC,SAAS,KAAK;AAAA,cACZ;AAAA,cACA,MAAM;AAAA,cACN,aAAa,CAAC;AAAA,cACd,eAAe,CAAC;AAAA,cAChB,gBAAgB,CAAC;AAAA,cACjB,UAAU,EAAE,MAAM,UAAU,KAAK;AAAA,YACnC,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,OAAO;AAAA,IAIhB,OAAO;AAAA;AAAA,EAOD,wBAAwB,CAC9B,SACA,SACA,UACkB;AAAA,IAClB,MAAM,WAA6B,CAAC;AAAA,IAEpC,IAAI;AAAA,MACF,MAAM,cAAc,QAAQ,eAAe;AAAA,MAC3C,IAAI,CAAC,eAAe,CAAC,MAAK,0BAA0B,WAAW,GAAG;AAAA,QAChE,OAAO;AAAA,MACT;AAAA,MAGA,MAAM,UAAU,QAAQ,QAAQ,EAAE,YAAY;AAAA,MAC9C,IAAI,CAAC,sCAAsC,KAAK,OAAO,GAAG;AAAA,QACxD,OAAO;AAAA,MACT;AAAA,MAGA,MAAM,aAAa,YAAY,cAAc;AAAA,MAC7C,WAAW,QAAQ,YAAY;AAAA,QAC7B,IAAI,MAAK,qBAAqB,IAAI,GAAG;AAAA,UACnC,MAAM,WAAW,KAAK,YAAY;AAAA,UAClC,IAAI,cAA6B;AAAA,UAEjC,IAAI,MAAK,gBAAgB,QAAQ,GAAG;AAAA,YAClC,cAAc,SAAS,gBAAgB;AAAA,UACzC,EAAO,SAAI,MAAK,aAAa,QAAQ,GAAG;AAAA,YACtC,cAAc,SAAS,QAAQ;AAAA,UACjC;AAAA,UAEA,IAAI,aAAa;AAAA,YACf,MAAM,OAAO,KAAK,mBAAmB;AAAA,YAErC,SAAS,KAAK;AAAA,cACZ;AAAA,cACA,MAAM;AAAA,cACN,aAAa,CAAC;AAAA,cACd,eAAe,CAAC;AAAA,cAChB,gBAAgB,CAAC;AAAA,cACjB,UAAU,EAAE,MAAM,UAAU,KAAK;AAAA,YACnC,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,OAAO;AAAA,IAIhB,OAAO;AAAA;AAAA,EAOD,wBAAwB,CAC9B,QACA,SACA,UACkB;AAAA,IAClB,MAAM,WAA6B,CAAC;AAAA,IAEpC,IAAI;AAAA,MAEF,MAAM,aAAa,OAAO,cAAc;AAAA,MAGxC,IAAI,aAAa,KAAK,eAAe,IAAI,UAAU;AAAA,MACnD,IAAI,CAAC,YAAY;AAAA,QACf,aAAa,KAAK,2BAA2B,UAAU;AAAA,QACvD,KAAK,eAAe,IAAI,YAAY,UAAU;AAAA,MAChD;AAAA,MAGA,IAAI,QAAQ,IAAI,aAAa;AAAA,QAC3B,QAAQ,IAAI,iBAAiB,WAAW,YAAY,GAAG;AAAA,QACvD,QAAQ,IAAI,oCAAoC,WAAW,MAAM;AAAA,QACjE,IAAI,WAAW,OAAO,GAAG;AAAA,UACvB,YAAY,MAAM,SAAS,WAAW,QAAQ,GAAG;AAAA,YAC/C,QAAQ,IAAI,eAAe,UAAS,MAAM;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAAA,MAMA,IAAI,YAAkB;AAAA,MAEtB,OAAO,WAAW;AAAA,QAChB,MAAM,UAAU,KAAK,2BAA2B,WAAW,YAAY,SAAS,QAAQ;AAAA,QACxF,IAAI,SAAS;AAAA,UACX,SAAS,KAAK,OAAO;AAAA,UAErB,IAAI,QAAQ,IAAI,aAAa;AAAA,YAC3B,QAAQ,IAAI,0BAA0B,QAAQ,uBAAuB,QAAQ,SAAS,MAAM;AAAA,UAC9F;AAAA,QACF;AAAA,QAGA,MAAM,gBAAgB,UAAU,iBAAiB;AAAA,QACjD,IAAI,iBAAiB,MAAK,cAAc,aAAa,GAAG;AAAA,UACtD,YAAY;AAAA,QACd,EAAO;AAAA,UACL;AAAA;AAAA,MAEJ;AAAA,MACA,OAAO,OAAO;AAAA,MAEd,IAAI,QAAQ,IAAI,aAAa;AAAA,QAC3B,QAAQ,IAAI,8CAA8C,OAAO;AAAA,MACnE;AAAA;AAAA,IAGF,OAAO;AAAA;AAAA,EAMD,0BAA0B,CAChC,QACA,YACA,SACA,UACuB;AAAA,IACvB,IAAI;AAAA,MAEF,MAAM,YAAY,OAAO,cAAc;AAAA,MAGvC,IAAI,CAAC,MAAK,iBAAiB,SAAS,GAAG;AAAA,QACrC,OAAO;AAAA,MACT;AAAA,MAGA,MAAM,WAAW,UAAU,cAAc;AAAA,MACzC,IAAI;AAAA,MAEJ,IAAI,MAAK,aAAa,QAAQ,GAAG;AAAA,QAC/B,WAAW,SAAS,QAAQ;AAAA,MAC9B;AAAA,MAEA,IAAI,QAAQ,IAAI,eAAe,UAAU;AAAA,QACvC,QAAQ,IAAI,kDAAkD,UAAU;AAAA,MAC1E;AAAA,MAGA,IAAI,cAAkC;AAAA,MAEtC,IAAI,YAAY,WAAW,IAAI,QAAQ,GAAG;AAAA,QAExC,cAAc,WAAW,IAAI,QAAQ;AAAA,QAErC,IAAI,QAAQ,IAAI,aAAa;AAAA,UAC3B,QAAQ,IAAI,uCAAuC,cAAa,aAAa;AAAA,QAC/E;AAAA,MACF,EAAO,SAAI,MAAK,aAAa,QAAQ,GAAG;AAAA,QAEtC,IAAI,QAAQ,IAAI,aAAa;AAAA,UAC3B,QAAQ,IAAI,4DAA4D,UAAU;AAAA,QACpF;AAAA,QAEA,cAAc,KAAK,yBAAyB,QAAQ;AAAA,MACtD;AAAA,MAEA,IAAI,CAAC,aAAa;AAAA,QAChB,IAAI,QAAQ,IAAI,eAAe,UAAU;AAAA,UACvC,QAAQ,IAAI,+CAA+C,UAAU;AAAA,QACvE;AAAA,QACA,OAAO;AAAA,MACT;AAAA,MAGA,MAAM,OAAO,OAAO,mBAAmB;AAAA,MAGvC,MAAM,aAAa,OAAO,cAAc;AAAA,MACxC,MAAM,cAAc,GAAG;AAAA,MACvB,IAAI,gBAAgB;AAAA,MAEpB,MAAM,gBAAgB,OAAO,iBAAiB;AAAA,MAC9C,IAAI,eAAe;AAAA,QACjB,MAAM,wBAAwB,KAAK,sBAAsB,mBACvD,eACA,YACA,WACF;AAAA,QACA,IAAI,sBAAsB,SAAS,GAAG;AAAA,UACpC,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,MAEA,OAAO;AAAA,QACL;AAAA,QACA,MAAM;AAAA,QACN,aAAa,CAAC;AAAA,QACd,eAAe,CAAC;AAAA,QAChB,gBAAgB,CAAC;AAAA,QACjB,UAAU,EAAE,MAAM,UAAU,KAAK;AAAA,QACjC;AAAA,MACF;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO;AAAA;AAAA;AAAA,EASH,0BAA0B,CAAC,YAA6C;AAAA,IAC9E,MAAM,aAAa,IAAI;AAAA,IAEvB,WAAW,kBAAkB,CAAC,SAAS;AAAA,MACrC,IAAI,MAAK,sBAAsB,IAAI,KAAK,MAAK,qBAAqB,IAAI,KAAK,MAAK,gBAAgB,IAAI,GAAG;AAAA,QAErG,MAAM,iBAAiB,KAAK,kBAAkB;AAAA,QAE9C,IAAI,kBAAkB,MAAK,gBAAgB,cAAc,GAAG;AAAA,UAE1D,IAAI;AAAA,UACJ,IAAI,MAAK,sBAAsB,IAAI,GAAG;AAAA,YACpC,eAAe,KAAK,QAAQ;AAAA,UAC9B,EAAO,SAAI,MAAK,qBAAqB,IAAI,GAAG;AAAA,YAC1C,MAAM,SAAS,KAAK,UAAU;AAAA,YAC9B,IAAI,MAAK,sBAAsB,MAAM,GAAG;AAAA,cACtC,eAAe,OAAO,QAAQ;AAAA,YAChC;AAAA,UACF,EAAO,SAAI,MAAK,gBAAgB,IAAI,GAAG;AAAA,YACrC,MAAM,SAAS,KAAK,UAAU;AAAA,YAC9B,IAAI,MAAK,sBAAsB,MAAM,GAAG;AAAA,cACtC,eAAe,OAAO,QAAQ;AAAA,YAChC;AAAA,UACF;AAAA,UAEA,IAAI,cAAc;AAAA,YAEhB,MAAM,WAAW,eAAe,YAAY;AAAA,YAC5C,IAAI,cAA6B;AAAA,YAEjC,IAAI,UAAU;AAAA,cACZ,MAAM,WAAW,SAAS,QAAQ;AAAA,cAClC,cAAc,KAAK,+BAA+B,QAAQ;AAAA,YAC5D;AAAA,YAGA,IAAI,CAAC,aAAa;AAAA,cAChB,MAAM,OAAO,KAAK,QAAQ;AAAA,cAC1B,IAAI,MAAM;AAAA,gBACR,MAAM,WAAW,KAAK,QAAQ;AAAA,gBAC9B,MAAM,iBAAiB,SAAS,MAAM,+BAA+B;AAAA,gBACrE,IAAI,gBAAgB;AAAA,kBAClB,cAAc,eAAe;AAAA,gBAC/B;AAAA,cACF;AAAA,YACF;AAAA,YAEA,IAAI,aAAa;AAAA,cACf,WAAW,IAAI,cAAc,WAAW;AAAA,YAC1C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,KACD;AAAA,IAED,OAAO;AAAA;AAAA,EAQD,wBAAwB,CAAC,YAAgC;AAAA,IAC/D,IAAI;AAAA,MACF,MAAM,WAAW,WAAW,QAAQ;AAAA,MAGpC,MAAM,cAAc,WAAW,mBAAmB;AAAA,MAElD,IAAI,YAAY,WAAW,GAAG;AAAA,QAC5B,IAAI,QAAQ,IAAI,aAAa;AAAA,UAC3B,QAAQ,IAAI,uDAAuD,UAAU;AAAA,QAC/E;AAAA,QACA,OAAO;AAAA,MACT;AAAA,MAEA,WAAW,OAAO,aAAa;AAAA,QAE7B,IAAI,MAAK,sBAAsB,GAAG,KAC9B,MAAK,qBAAqB,GAAG,KAC7B,MAAK,gBAAgB,GAAG,GAAG;AAAA,UAK7B,MAAM,iBAAiB,IAAI,kBAAkB;AAAA,UAE7C,IAAI,QAAQ,IAAI,aAAa;AAAA,YAC3B,MAAM,aAAa,IAAI,cAAc,EAAE,QAAQ;AAAA,YAC/C,QAAQ,IAAI,oBAAoB,oCAAoC,YAAY;AAAA,YAChF,QAAQ,IAAI,iCAAiC,CAAC,CAAC,gBAAgB;AAAA,YAC/D,QAAQ,IAAI,mCAAmC,kBAAkB,MAAK,gBAAgB,cAAc,GAAG;AAAA,UACzG;AAAA,UAGA,IAAI,kBAAkB,MAAK,gBAAgB,cAAc,GAAG;AAAA,YAE1D,MAAM,WAAW,eAAe,YAAY;AAAA,YAE5C,IAAI,UAAU;AAAA,cACZ,MAAM,WAAW,SAAS,QAAQ;AAAA,cAClC,MAAM,cAAc,KAAK,+BAA+B,QAAQ;AAAA,cAEhE,IAAI,aAAa;AAAA,gBACf,IAAI,QAAQ,IAAI,aAAa;AAAA,kBAC3B,QAAQ,IAAI,oBAAoB,cAAa,uCAAuC;AAAA,gBACtF;AAAA,gBACA,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UAGA,MAAM,OAAO,IAAI,QAAQ;AAAA,UACzB,IAAI,MAAM;AAAA,YACR,MAAM,WAAW,KAAK,QAAQ;AAAA,YAC9B,MAAM,iBAAiB,SAAS,MAAM,+BAA+B;AAAA,YACrE,IAAI,gBAAgB;AAAA,cAClB,MAAM,cAAc,eAAe;AAAA,cAEnC,IAAI,QAAQ,IAAI,aAAa;AAAA,gBAC3B,QAAQ,IAAI,oBAAoB,cAAa,yBAAyB;AAAA,cACxE;AAAA,cAEA,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,OAAO;AAAA,MAEd,IAAI,QAAQ,IAAI,aAAa;AAAA,QAC3B,QAAQ,IAAI,gDAAgD,OAAO;AAAA,MACrE;AAAA;AAAA,IAGF,OAAO;AAAA;AAAA,EAUD,8BAA8B,CAAC,UAA0B;AAAA,IAE/D,MAAM,cAAc,SACjB,QAAQ,YAAY,EAAE,EACtB,QAAQ,UAAU,EAAE,EACpB,QAAQ,YAAY,EAAE,EACtB,QAAQ,YAAY,EAAE,EACtB,QAAQ,UAAU,EAAE,EACpB,YAAY;AAAA,IAEf,OAAO;AAAA;AAAA,EAMD,YAAY,CAAC,UAA0B;AAAA,IAC7C,MAAM,QAAO,SAAS,YAAY;AAAA,IAGlC,IAAI,MAAK,SAAS,cAAc,KAAK,MAAK,SAAS,gBAAgB,GAAG;AAAA,MACpE,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,WAAW,KAAK,MAAK,SAAS,aAAa,GAAG;AAAA,MAC9D,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,SAAS,KAAK,MAAK,SAAS,WAAW,GAAG;AAAA,MAC1D,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,YAAY,KAAK,MAAK,SAAS,cAAc,GAAG;AAAA,MAChE,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,WAAW,KAAK,MAAK,SAAS,aAAa,GAAG;AAAA,MAC9D,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,aAAa,KAAK,MAAK,SAAS,eAAe,GAAG;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,MAAK,SAAS,UAAU,KAAK,MAAK,SAAS,YAAY,KAAK,MAAK,SAAS,UAAU,GAAG;AAAA,MACzF,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAK,SAAS,UAAU,KAAK,MAAK,SAAS,YAAY,KAAK,MAAK,SAAS,UAAU,GAAG;AAAA,MACzF,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,MAAK,SAAS,UAAU,KAAK,MAAK,SAAS,YAAY,KAAK,MAAK,SAAS,gBAAgB,GAAG;AAAA,MAC/F,OAAO;AAAA,IACT;AAAA,IAEA,OAAO;AAAA;AAEX;;;AEvzBA;AACA;AAAA;AAGO,MAAM,aAAa;AAAA,EAChB;AAAA,EAER,WAAW,CAAC,aAAqB;AAAA,IAC/B,KAAK,cAAc;AAAA;AAAA,EAMrB,OAAO,GAAkB;AAAA,IACvB,MAAM,SAAS,KAAK,iBAAiB;AAAA,IAErC,IAAI,CAAC,UAAU,CAAI,eAAW,MAAM,GAAG;AAAA,MACrC,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,WAAW,UAAe,WAAK,KAAK,aAAa,QAAQ,KAAK;AAAA,MAChE;AAAA,IACF;AAAA,IAEA,MAAM,QACH,gBAAY,MAAM,EAClB,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,CAAC,EACrC,IAAI,CAAC,SAAc,WAAK,QAAQ,IAAI,CAAC;AAAA,IAExC,MAAM,OAAc,CAAC;AAAA,IAErB,WAAW,QAAQ,OAAO;AAAA,MACxB,IAAI;AAAA,QACF,MAAM,MAAM,KAAK,SAAS,IAAI;AAAA,QAC9B,IAAI,KAAK;AAAA,UACP,KAAK,KAAK,GAAG;AAAA,QACf;AAAA,QACA,OAAO,OAAO;AAAA,QACd,QAAQ,KAAK,wBAAwB,QAAQ,KAAK;AAAA;AAAA,IAEtD;AAAA,IAGA,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC;AAAA,IAE5C,OAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,IACb;AAAA;AAAA,EAMM,gBAAgB,GAAkB;AAAA,IACxC,MAAM,aAAa;AAAA,MACZ,WAAK,KAAK,aAAa,QAAQ,KAAK;AAAA,MACpC,WAAK,KAAK,aAAa,QAAQ,gBAAgB,WAAW;AAAA,MAC1D,WAAK,KAAK,aAAa,KAAK;AAAA,MAC5B,WAAK,KAAK,aAAa,gBAAgB,WAAW;AAAA,IACzD;AAAA,IAEA,WAAW,aAAa,YAAY;AAAA,MAClC,IAAO,eAAW,SAAS,GAAG;AAAA,QAC5B,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,QAAQ,CAAC,UAA8B;AAAA,IAC7C,MAAM,UAAa,iBAAa,UAAU,OAAO;AAAA,IACjD,MAAM,WAAgB,eAAS,UAAU,KAAK;AAAA,IAG9C,MAAM,UAAU,SAAS,MAAM,QAAQ;AAAA,IACvC,MAAM,KAAK,UAAU,QAAQ,KAAK;AAAA,IAGlC,MAAM,aAAa,QAAQ,MAAM,aAAa;AAAA,IAC9C,MAAM,QAAQ,aAAa,WAAW,GAAG,KAAK,IAAI;AAAA,IAGlD,MAAM,SAAS,KAAK,cAAc,OAAO;AAAA,IAGzC,MAAM,OAAO,KAAK,YAAY,OAAO;AAAA,IAGrC,MAAM,UAAU,KAAK,eAAe,SAAS,SAAS;AAAA,IACtD,MAAM,WAAW,KAAK,eAAe,SAAS,UAAU;AAAA,IACxD,MAAM,eAAe,KAAK,eAAe,SAAS,cAAc;AAAA,IAGhE,MAAM,sBAAsB,KAAK,eAAe,SAAS,cAAc;AAAA,IACvE,MAAM,eAAe,sBACjB,oBACG,MAAM;AAAA,CAAI,EACV,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE,WAAW,GAAG,CAAC,EAC5C,IAAI,CAAC,SAAS,KAAK,QAAQ,SAAS,EAAE,EAAE,KAAK,CAAC,IACjD;AAAA,IAGJ,MAAM,QAAQ,KAAK,aAAa,OAAO;AAAA,IAEvC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,cAAc;AAAA,MAE1C,OAAO;AAAA,IACT;AAAA,IAEA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA;AAAA,EAMM,aAAa,CAAC,SAA4B;AAAA,IAChD,MAAM,cAAc,QAAQ,MAAM,kBAAkB;AAAA,IACpD,IAAI,CAAC;AAAA,MAAa,OAAO;AAAA,IAEzB,MAAM,SAAS,YAAY,GAAG,YAAY;AAAA,IAC1C,IAAI,CAAC,YAAY,YAAY,cAAc,YAAY,EAAE,SAAS,MAAM,GAAG;AAAA,MACzE,OAAO;AAAA,IACT;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,WAAW,CAAC,SAAyB;AAAA,IAE3C,MAAM,YACJ,QAAQ,MAAM,8BAA8B,KAC5C,QAAQ,MAAM,sBAAsB;AAAA,IAEtC,OAAO,YAAY,UAAU,KAAK,IAAI,KAAK,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AAAA;AAAA,EAMhE,cAAc,CAAC,SAAiB,aAA6B;AAAA,IAEnE,MAAM,QAAQ,IAAI,OAChB,SAAS,6CACT,GACF;AAAA,IACA,MAAM,QAAQ,QAAQ,MAAM,KAAK;AAAA,IAEjC,OAAO,QAAQ,MAAM,GAAG,KAAK,IAAI;AAAA;AAAA,EAM3B,YAAY,CAAC,SAA4B;AAAA,IAC/C,MAAM,QAAmB,CAAC;AAAA,IAG1B,MAAM,kBAAkB,QAAQ,MAAM,2BAA2B;AAAA,IACjE,IAAI,iBAAiB;AAAA,MACnB,WAAW,SAAS,iBAAiB;AAAA,QACnC,MAAM,UAAU,MAAM,MAAM,WAAW;AAAA,QACvC,IAAI,SAAS;AAAA,UACX,MAAM,KAAK;AAAA,YACT,MAAM;AAAA,YACN,OAAO,QAAQ;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,oBAAoB,QAAQ,MAAM,8BAA8B;AAAA,IACtE,IAAI,mBAAmB;AAAA,MACrB,WAAW,SAAS,mBAAmB;AAAA,QACrC,MAAM,UAAU,MAAM,MAAM,WAAW;AAAA,QACvC,IAAI,SAAS;AAAA,UACX,MAAM,KAAK;AAAA,YACT,MAAM;AAAA,YACN,OAAO,QAAQ;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAEX;AAKO,SAAS,WAAW,CAAC,aAAoC;AAAA,EAC9D,MAAM,YAAY,IAAI,aAAa,WAAW;AAAA,EAC9C,OAAO,UAAU,QAAQ;AAAA;;;APpLpB,MAAM,qBAAqB;AAAA,EACzB;AAAA,EAER,WAAW,CAAC,SAAsC;AAAA,IACjD,KAAK,UAAU;AAAA;AAAA,OAMV,QAAO,GAAkC;AAAA,IAC9C,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI,cAAsC,CAAC;AAAA,IAC3C,IAAI;AAAA,IAGJ,MAAM,iBAAiB,IAAI,eAAe,KAAK,QAAQ,aAAa,IAAI;AAAA,IAExE,IAAI,eAAe,YAAY,KAAK,CAAC,KAAK,QAAQ,oBAAoB;AAAA,MAErE,WAAW,eAAe,MAAM;AAAA,MAChC,cAAc,eAAe,sBAAsB;AAAA,MAEnD,aAAa;AAAA,QACZ,MAAM,SAAS;AAAA,QACf,SAAS,SAAS;AAAA,QAClB,aAAa,SAAS;AAAA,MACvB;AAAA,IACD,EAAO;AAAA,MAEN,QAAQ,8CAAwB;AAAA,MAChC,gBAAgB,qBAAoB,KAAK,QAAQ,WAAW;AAAA,MAC5D,cAAc,cAAc;AAAA,MAE5B,aAAa;AAAA,QACZ,MAAM,cAAc,UAAU,QAAQ;AAAA,QACtC,SAAS,cAAc,UAAU,WAAW;AAAA,QAC5C,aAAa,cAAc,UAAU;AAAA,MACtC;AAAA;AAAA,IAID,MAAM,mBAAmB,IAAI,iBAAiB,KAAK,QAAQ,YAAY;AAAA,IACvE,QAAQ,aAAa,iBAAiB,gBAAgB;AAAA,IAGtD,MAAM,kBAAkB,IAAI,gBAAgB,KAAK,QAAQ,YAAY;AAAA,IACrE,MAAM,WAAwC,CAAC;AAAA,IAE/C,YAAY,aAAa,eAAe,OAAO,QAAQ,WAAW,GAAG;AAAA,MACpE,IAAI;AAAA,QACH,MAAM,cAAc,gBAAgB,eACnC,aACA,YACA,QACD;AAAA,QACA,SAAS,eAAe;AAAA,QACvB,OAAO,OAAO;AAAA,QACf,QAAQ,KAAK,6BAA6B,gBAAgB,OAAO;AAAA;AAAA,IAEnE;AAAA,IAGA,MAAM,eAAe,IAAI,aAAa,KAAK,QAAQ,cAAc,QAAQ;AAAA,IACzE,MAAM,eAAe,aAAa,aAAa;AAAA,IAG/C,MAAM,sBAAsB,IAAI,oBAC/B,KAAK,QAAQ,YACd;AAAA,IACA,MAAM,eAAe,oBAAoB,oBAAoB;AAAA,IAG7D,KAAK,8BAA8B,UAAU,YAAY;AAAA,IAGzD,MAAM,OAAO,YAAY,KAAK,QAAQ,WAAW;AAAA,IAGjD,MAAM,aAAa,KAAK,sBAAsB;AAAA,IAE9C,OAAO;AAAA,MACN,aAAa,KAAK,QAAQ;AAAA,MAC1B,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,KAAK,KAAK,SAAS,IAAI,OAAO;AAAA,MACpC;AAAA,IACD;AAAA;AAAA,EAMO,6BAA6B,CACpC,UACA,cACO;AAAA,IACP,WAAW,eAAe,cAAc;AAAA,MACvC,IAAI,YAAY,OAAO;AAAA,QACtB,WAAW,QAAQ,YAAY,OAAO;AAAA,UAErC,YAAY,aAAa,gBAAgB,OAAO,QAAQ,QAAQ,GAAG;AAAA,YAClE,IAAI,KAAK,SAAS,KAAK,SAAS,IAAI,cAAc,GAAG;AAAA,cACpD,YAAY,aAAa,KAAK,IAAI;AAAA,cAClC;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA;AAAA,EAMO,qBAAqB,GAAuC;AAAA,IACnE,MAAM,kBAAuB,WAAK,KAAK,QAAQ,aAAa,cAAc;AAAA,IAE1E,IAAI,CAAI,eAAW,eAAe,GAAG;AAAA,MACpC;AAAA,IACD;AAAA,IAEA,IAAI;AAAA,MACH,MAAM,UAAa,iBAAa,iBAAiB,OAAO;AAAA,MACxD,MAAM,cAAc,KAAK,MAAM,OAAO;AAAA,MAEtC,IAAI,YAAY,YAAY;AAAA,QAC3B,IAAI,OAAO,YAAY,eAAe,UAAU;AAAA,UAC/C,OAAO;AAAA,YACN,KAAK,YAAY;AAAA,YACjB,MAAM;AAAA,UACP;AAAA,QACD;AAAA,QAEA,OAAO;AAAA,UACN,KAAK,YAAY,WAAW,OAAO,YAAY;AAAA,UAC/C,MAAM,YAAY,WAAW,QAAQ;AAAA,QACtC;AAAA,MACD;AAAA,MACC,OAAO,OAAO;AAAA,MACf,QAAQ,KAAK,iCAAiC,OAAO;AAAA;AAAA,IAGtD;AAAA;AAEF;AAKA,eAAsB,mBAAmB,CACxC,SACgC;AAAA,EAChC,MAAM,WAAW,IAAI,qBAAqB,OAAO;AAAA,EACjD,OAAO,SAAS,QAAQ;AAAA;;;AQuDlB,IAAM,iBAAiB;AAAA,EAE7B,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,kBAAkB;AAAA,EAGlB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,gBAAgB;AAAA,EAGhB,WAAW;AAAA,EACX,YAAY;AAAA,EAGZ,WAAW;AAAA,EACX,UAAU;AAAA,EAGV,cAAc;AACf;AAKO,IAAM,yBAAuD;AAAA,EACnE,mBAAmB;AAAA,IAClB,OAAO;AAAA,IACP,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,IACtB,UAAU;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACN,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,EACvB;AAAA,EACA,SAAS;AAAA,IACR,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,EACvB;AAAA,EACA,gBAAgB;AAAA,IACf,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,EACvB;AAAA,EACA,WAAW;AAAA,IACV,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,EACvB;AAAA,EACA,SAAS;AAAA,IACR,OAAO;AAAA,IACP,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,EACvB;AAAA,EACA,YAAY;AAAA,IACX,OAAO;AAAA,IACP,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,EACvB;AAAA,EACA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,EACvB;AAAA,EACA,mBAAmB;AAAA,IAClB,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,EACvB;AAAA,EACA,WAAW;AAAA,IACV,YAAY,eAAe;AAAA,IAC3B,OAAO,eAAe;AAAA,EACvB;AACD;AAKO,IAAM,8BAAiE;AAAA,EAC7E,cAAc;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO,eAAe;AAAA,IACtB,UAAU;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACL,OAAO;AAAA,IACP,WAAW;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO,eAAe;AAAA,EACvB;AACD;AAKO,IAAM,gBACZ;;;AC1UM,MAAM,wBAAwB;AAAA,EAC3B;AAAA,EACA;AAAA,EAER,WAAW,CAAC,UAAgC,UAAiC,CAAC,GAAG;AAAA,IAC/E,KAAK,WAAW;AAAA,IAChB,KAAK,UAAU;AAAA,MACb,wBAAwB;AAAA,MACxB,0BAA0B;AAAA,MAC1B,0BAA0B,CAAC,YAAY;AAAA,MACvC,sBAAsB;AAAA,MACtB,eAAe,CAAC;AAAA,MAChB,YAAY,CAAC;AAAA,MACb,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,MAClB,cAAc,CAAC;AAAA,MACf,iBAAiB,CAAC;AAAA,SACf;AAAA,MACH,QAAQ;AAAA,QACN,OAAO,QAAQ,QAAQ,SAAS;AAAA,QAChC,UAAU;AAAA,aACL;AAAA,aACA,QAAQ,QAAQ;AAAA,QACrB;AAAA,QACA,eAAe;AAAA,aACV;AAAA,aACA,QAAQ,QAAQ;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAMF,QAAQ,GAAW;AAAA,IACjB,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,KAAK,KAAK,wBAAwB,CAAC;AAAA,IACzC,MAAM,KAAK,KAAK,cAAc,CAAC;AAAA,IAC/B,MAAM,KAAK,KAAK,cAAc,CAAC;AAAA,IAC/B,MAAM,KAAK,KAAK,wBAAwB,CAAC;AAAA,IAEzC,OAAO,MAAM,KAAK;AAAA;AAAA,CAAM;AAAA;AAAA,EAMlB,uBAAuB,GAAW;AAAA,IACxC,QAAQ,MAAM,gBAAgB,KAAK,SAAS;AAAA,IAE5C,MAAM,QAAQ,CAAC,cAAc,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,eAAe,EAAE,MAAM;AAAA,IACvF,MAAM,KAAK,EAAE;AAAA,IACb,MAAM,KAAK,6BAA6B;AAAA,IAGxC,IAAI,KAAK,SAAS,QAAQ,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG;AAAA,MAC5D,MAAM,KAAK,aAAa,KAAK,SAAS,KAAK,SAAS;AAAA,IACtD;AAAA,IAEA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,uBAAuB,GAAW;AAAA,IACxC,OAAO;AAAA;AAAA,EAMD,aAAa,GAAW;AAAA,IAC9B,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,KAAK,WAAW;AAAA,IACtB,MAAM,KAAK,KAAK,eAAe,CAAC;AAAA,IAChC,MAAM,KAAK,KAAK,wBAAwB,CAAC;AAAA,IACzC,MAAM,KAAK,KAAK,mBAAmB,CAAC;AAAA,IAGpC,IAAI,KAAK,QAAQ,mBAAmB,KAAK,QAAQ,gBAAgB,SAAS,GAAG;AAAA,MAC3E,MAAM,KAAK,KAAK,+BAA+B,CAAC;AAAA,IAClD;AAAA,IAEA,MAAM,KAAK,KAAK;AAAA,IAEhB,OAAO,MAAM,KAAK;AAAA;AAAA,CAAM;AAAA;AAAA,EAMlB,cAAc,GAAW;AAAA,IAC/B,OAAO;AAAA;AAAA,EAMD,uBAAuB,GAAW;AAAA,IACxC,MAAM,QAAkB,CAAC;AAAA,IAEzB,WAAW,eAAe,KAAK,SAAS,cAAc;AAAA,MACpD,IAAI,YAAY,SAAS,SAAS,YAAY,SAAS,aAAa;AAAA,QAClE,MAAM,OACJ,YAAY,eAAe,YAAY,SAAS,cAAc,cAAc;AAAA,QAC9E,IAAI,OAAO,YAAY,eAAe;AAAA,QAGtC,IAAI,CAAC,QAAQ,YAAY,SAAS,YAAY,MAAM,SAAS,GAAG;AAAA,UAC9D,MAAM,YAAY,YAAY,MAC3B,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,MAAM,EAAE,QAAQ,EACrB,KAAK,IAAI;AAAA,UACZ,MAAM,UAAU,CAAC,GAAG,IAAI,IAAI,YAAY,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,UAC9E,OAAO,gCAAgC,uBAAuB;AAAA,QAChE;AAAA,QAEA,MAAM,KACJ,OAAO,KAAK,KAAK,YAAY,IAAI,uBAAuB,KAAK,OAAO,YAAY,IAAI,OAAO,KAAK,OAAO,IAAI,MAC7G;AAAA,QACA,MAAM,KACJ,iCAAiC,YAAY,SAAS,cAAc,cAAc,aACpF;AAAA,QACA,MAAM,KAAK,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,IAEA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,kBAAkB,GAAW;AAAA,IACnC,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,KAAK,mCAAmC,KAAK,OAAO,KAAK,SAAS,OAAO,IAAI,MAAM;AAAA,IAGzF,YAAY,aAAa,gBAAgB,OAAO,QAAQ,KAAK,SAAS,QAAQ,GAAG;AAAA,MAC/E,MAAM,KAAK,KAAK,kBAAkB,aAAa,WAAW,CAAC;AAAA,IAC7D;AAAA,IAGA,MAAM,KAAK,KAAK,+BAA+B,CAAC;AAAA,IAEhD,MAAM,KAAK,OAAO;AAAA,IAElB,OAAO,MAAM,KAAK;AAAA;AAAA,CAAM;AAAA;AAAA,EAMlB,iBAAiB,CAAC,aAAqB,aAA0B;AAAA,IACvE,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,aAAa,KAAK,qBAAqB,WAAW;AAAA,IACxD,MAAM,cAAc,YAAY,eAAe,GAAG,KAAK,WAAW,WAAW;AAAA,IAE7E,MAAM,KACJ,SAAS,4BAA4B,KAAK,WAAW,WAAW,OAAO,KAAK,OAAO,WAAW,OAAO,eACvG;AAAA,IAGA,IACE,KAAK,QAAQ,4BACb,KAAK,QAAQ,0BAA0B,SAAS,WAAW,GAC3D;AAAA,MACA,MAAM,KAAK,KAAK,mBAAmB,aAAa,WAAW,CAAC;AAAA,MAC5D,MAAM,KAAK,EAAE;AAAA,MACb,MAAM,KAAK,KAAK,+BAA+B,aAAa,WAAW,CAAC;AAAA,IAC1E;AAAA,IAEA,MAAM,KAAK,SAAS;AAAA,IAEpB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,kBAAkB,CAAC,aAAqB,aAA0B;AAAA,IACxE,MAAM,QAAkB,CAAC;AAAA,IAGzB,MAAM,gBAOD,CAAC;AAAA,IAGN,MAAM,iBAAiB,IAAI;AAAA,IAC3B,WAAW,WAAW,YAAY,UAAU;AAAA,MAC1C,IAAI,CAAC,eAAe,IAAI,QAAQ,WAAW,GAAG;AAAA,QAC5C,eAAe,IAAI,QAAQ,aAAa,CAAC,CAAC;AAAA,MAC5C;AAAA,MACA,eAAe,IAAI,QAAQ,WAAW,EAAG,KAAK,OAAO;AAAA,IACvD;AAAA,IAEA,YAAY,aAAa,aAAa,gBAAgB;AAAA,MACpD,MAAM,gBAAgB,KAAK,gBAAgB,WAAW;AAAA,MACtD,MAAM,cAAc,KAAK,6BAA6B,aAAa,SAAS,EAAE;AAAA,MAC9E,MAAM,OAAO,KAAK,iBAAiB,aAAa,SAAS,EAAE;AAAA,MAC3D,MAAM,aAAa,KAAK,uBAAuB,aAAa,SAAS,IAAI,WAAW;AAAA,MAEpF,cAAc,KAAK;AAAA,QACjB,IAAI,KAAK,KAAK,aAAa;AAAA,QAC3B,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAGA,IAAI,KAAK,QAAQ,UAAU,KAAK,QAAQ,OAAO,SAAS,GAAG;AAAA,MAEzD,MAAM,KAAK,GAAG,KAAK,0BAA0B,eAAe,KAAK,QAAQ,MAAM,CAAC;AAAA,IAClF,EAAO;AAAA,MAEL,MAAM,aAAa,KAAK,wBAAwB,aAAa;AAAA,MAC7D,IAAI,WAAW,SAAS,GAAG;AAAA,QACzB,MAAM,KAAK,GAAG,KAAK,0BAA0B,eAAe,UAAU,CAAC;AAAA,MACzE,EAAO;AAAA,QAEL,WAAW,QAAQ,eAAe;AAAA,UAChC,MAAM,KAAK,KAAK,4BAA4B,MAAM,UAAU,CAAC;AAAA,QAC/D;AAAA;AAAA;AAAA,IAKJ,MAAM,oBAAoB,IAAI;AAAA,IAC9B,WAAW,WAAW,YAAY,UAAU;AAAA,MAC1C,IAAI,QAAQ,eAAe;AAAA,QACzB,WAAW,OAAO,QAAQ,eAAe;AAAA,UAEvC,MAAM,WAAW,KAAK,KAAK,IAAI,EAAE;AAAA,UACjC,MAAM,YAAY,cAAc,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ;AAAA,UAC7D,IAAI,CAAC,WAAW;AAAA,YACd,kBAAkB,IAAI,IAAI,EAAE;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAGA,WAAW,aAAa,mBAAmB;AAAA,MACzC,MAAM,cAAc,UACjB,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG;AAAA,MAEX,MAAM,KACJ,WAAW,KAAK,KAAK,SAAS,kBAAkB,yCAClD;AAAA,MACA,MAAM,KAAK,0CAA0C;AAAA,MACrD,MAAM,KAAK,WAAW;AAAA,IACxB;AAAA,IAGA,IAAI,YAAY,YAAY;AAAA,MAC1B,WAAW,QAAQ,YAAY,YAAY;AAAA,QACzC,MAAM,KACJ,WAAW,KAAK,KAAK,KAAK,IAAI,kBAAkB,KAAK,UAAU,KAAK,OAAO,KAAK,eAAe,cAAc,MAC/G;AAAA,QACA,MAAM,KAAK,+BAA+B;AAAA,QAC1C,MAAM,KAAK,WAAW;AAAA,MACxB;AAAA,IACF;AAAA,IAGA,IAAI,YAAY,cAAc,YAAY,WAAW,SAAS,GAAG;AAAA,MAC/D,WAAW,OAAO,YAAY,YAAY;AAAA,QACxC,MAAM,QAAQ,KAAK,KAAK,UAAU,KAAK;AAAA,QACvC,MAAM,KACJ,WAAW,6BAA6B,KAAK,WAAW,GAAG,2BAA2B,QACxF;AAAA,QACA,MAAM,KAAK,wCAAwC;AAAA,QACnD,MAAM,KAAK,WAAW;AAAA,MACxB;AAAA,IACF;AAAA,IAEA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,4BAA4B,CAAC,aAAqB,SAAsB;AAAA,IAC9E,MAAM,OAAO,YAAY,YAAY;AAAA,IAGrC,IAAI,KAAK,SAAS,OAAO,GAAG;AAAA,MAC1B,OAAO;AAAA,IACT;AAAA,IACA,IAAI,KAAK,SAAS,QAAQ,GAAG;AAAA,MAC3B,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,QAAQ,GAAG;AAAA,MACnD,MAAM,SAAS,KAAK,QAAQ,iBAAiB,EAAE,EAAE,QAAQ,MAAM,GAAG;AAAA,MAClE,OAAO,eAAe;AAAA,IACxB;AAAA,IACA,IAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,QAAQ,GAAG;AAAA,MACtD,MAAM,SAAS,KAAK,QAAQ,oBAAoB,EAAE,EAAE,QAAQ,MAAM,GAAG;AAAA,MACrE,OAAO,WAAW;AAAA,IACpB;AAAA,IACA,IAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,QAAQ,GAAG;AAAA,MACtD,MAAM,SAAS,KAAK,QAAQ,oBAAoB,EAAE,EAAE,QAAQ,MAAM,GAAG;AAAA,MACrE,OAAO,WAAW;AAAA,IACpB;AAAA,IACA,IAAI,KAAK,SAAS,OAAO,GAAG;AAAA,MAC1B,MAAM,SAAS,KAAK,QAAQ,YAAY,EAAE,EAAE,QAAQ,MAAM,GAAG;AAAA,MAC7D,OAAO,cAAc;AAAA,IACvB;AAAA,IAGA,IAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,GAAG;AAAA,MAC3E,MAAM,SAAS,KAAK,QAAQ,qBAAqB,EAAE,EAAE,QAAQ,MAAM,GAAG;AAAA,MACtE,OAAO,aAAa;AAAA,IACtB;AAAA,IAGA,OAAO,aAAa;AAAA;AAAA,EAMd,gBAAgB,CAAC,aAAqB,SAAwB;AAAA,IACpE,MAAM,OAAiB,CAAC,iBAAiB;AAAA,IACzC,MAAM,OAAO,YAAY,YAAY;AAAA,IAGrC,IAAI,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,MAAM,GAAG;AAAA,MAC9E,KAAK,KAAK,gBAAgB;AAAA,IAC5B,EAAO,SACL,KAAK,SAAS,KAAK,KACnB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,GACtB;AAAA,MACA,KAAK,KAAK,MAAM;AAAA,IAClB,EAAO,SAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,GAAG;AAAA,MAClF,KAAK,KAAK,OAAO;AAAA,IACnB;AAAA,IAGA,IAAI,KAAK,SAAS,MAAM,GAAG;AAAA,MACzB,KAAK,KAAK,iBAAiB;AAAA,IAC7B;AAAA,IACA,IAAI,KAAK,SAAS,MAAM,GAAG;AAAA,MACzB,KAAK,KAAK,iBAAiB;AAAA,IAC7B;AAAA,IACA,IAAI,KAAK,SAAS,OAAO,GAAG;AAAA,MAC1B,KAAK,KAAK,kBAAkB;AAAA,IAC9B;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,sBAAsB,CAC5B,aACA,SACA,aACqB;AAAA,IACrB,MAAM,aAAkC,CAAC;AAAA,IAGzC,IAAI,QAAQ,UAAU;AAAA,MACpB,MAAM,eAAe,QAAQ,SAAS,KAAK,QAAQ,KAAK,SAAS,cAAc,KAAK,EAAE;AAAA,MACtF,WAAW,YAAY,GAAG,gBAAgB,QAAQ,SAAS;AAAA,IAC7D;AAAA,IAGA,MAAM,eAAyB,CAAC,YAAY;AAAA,IAG5C,IAAI,QAAQ,UAAU,KAAK,SAAS,IAAI,KAAK,gBAAgB,UAAU;AAAA,MACrE,aAAa,KAAK,WAAW;AAAA,IAC/B;AAAA,IACA,IAAI,QAAQ,UAAU,KAAK,SAAS,WAAW,GAAG;AAAA,MAChD,aAAa,KAAK,WAAW;AAAA,IAC/B;AAAA,IACA,IAAI,QAAQ,UAAU,KAAK,SAAS,QAAQ,GAAG;AAAA,MAC7C,aAAa,KAAK,QAAQ;AAAA,IAC5B;AAAA,IAEA,WAAW,gBAAgB,aAAa,KAAK,IAAI;AAAA,IAGjD,MAAM,OAAO,YAAY,YAAY;AAAA,IACrC,IAAI,UAAU;AAAA,IAEd,IAAI,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,GAAG;AAAA,MACrG,UAAU;AAAA,MACV,WAAW,kBAAkB;AAAA,IAC/B,EAAO,SACL,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,KAAK,KACnB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,GACtB;AAAA,MACA,UAAU;AAAA,MACV,WAAW,kBAAkB;AAAA,IAC/B,EAAO,SAAI,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,QAAQ,GAAG;AAAA,MACrF,UAAU;AAAA,MACV,WAAW,kBAAkB;AAAA,IAC/B,EAAO,SAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,QAAQ,GAAG;AAAA,MAC1F,UAAU;AAAA,MACV,WAAW,kBAAkB;AAAA,IAC/B;AAAA,IAEA,WAAW,aAAa;AAAA,IAGxB,IAAI,KAAK,QAAQ,cAAc,KAAK,QAAQ,WAAW,cAAc;AAAA,MACnE,OAAO,OAAO,YAAY,KAAK,QAAQ,WAAW,YAAY;AAAA,IAChE;AAAA,IAEA,OAAO;AAAA;AAAA,EAMD,8BAA8B,CAAC,aAAqB,aAA0B;AAAA,IACpF,MAAM,QAAkB,CAAC;AAAA,IAGzB,MAAM,iBAAiB,IAAI;AAAA,IAC3B,WAAW,WAAW,YAAY,UAAU;AAAA,MAC1C,IAAI,CAAC,eAAe,IAAI,QAAQ,WAAW,GAAG;AAAA,QAC5C,eAAe,IAAI,QAAQ,aAAa,CAAC,CAAC;AAAA,MAC5C;AAAA,MACA,eAAe,IAAI,QAAQ,WAAW,EAAG,KAAK,OAAO;AAAA,IACvD;AAAA,IAGA,IAAI,YAAY,cAAc,YAAY,WAAW,SAAS,GAAG;AAAA,MAC/D,WAAW,OAAO,YAAY,YAAY;AAAA,QACxC,MAAM,QAAQ,KAAK,KAAK,UAAU,KAAK;AAAA,QAGvC,YAAY,aAAa,aAAa,gBAAgB;AAAA,UACpD,MAAM,cAAc,KAAK,KAAK,KAAK,gBAAgB,WAAW,CAAC;AAAA,UAG/D,IAAI,cAAc,QAAQ;AAAA,UAC1B,IAAI,QAAQ,WAAW;AAAA,YACrB,IACE,YAAY,YAAY,EAAE,SAAS,KAAK,KACxC,YAAY,YAAY,EAAE,SAAS,MAAM,GACzC;AAAA,cACA,cAAc;AAAA,YAChB,EAAO;AAAA,cACL,cAAc;AAAA;AAAA,UAElB,EAAO,SAAI,QAAQ,QAAQ;AAAA,YACzB,cAAc;AAAA,UAChB,EAAO,SAAI,QAAQ,WAAW;AAAA,YAC5B,cAAc;AAAA,UAChB;AAAA,UAEA,MAAM,KAAK,WAAW,kBAAkB,UAAU,cAAc;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AAAA,IAGA,IAAI,KAAK,QAAQ,iBAAiB,KAAK,QAAQ,cAAc,SAAS,GAAG;AAAA,MACvE,WAAW,OAAO,KAAK,QAAQ,eAAe;AAAA,QAC5C,MAAM,SAAS,KAAK,KAAK,IAAI,IAAI;AAAA,QACjC,MAAM,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,QAC7B,MAAM,cAAc,KAAK,OAAO,IAAI,WAAW;AAAA,QAE/C,MAAM,KAAK,WAAW,aAAa,SAAS,gBAAgB;AAAA,QAE5D,IAAI,IAAI,YAAY;AAAA,UAClB,MAAM,KAAK,yBAAyB,KAAK,OAAO,IAAI,UAAU,IAAI;AAAA,QACpE;AAAA,QAEA,IAAI,IAAI,QAAQ,IAAI,KAAK,SAAS,GAAG;AAAA,UACnC,MAAM,KAAK,mBAAmB,IAAI,KAAK,KAAK,KAAK,IAAI;AAAA,QACvD;AAAA,QAEA,MAAM,KAAK,WAAW;AAAA,MACxB;AAAA,IACF;AAAA,IAGA,WAAW,WAAW,YAAY,UAAU;AAAA,MAC1C,IAAI,QAAQ,iBAAiB,QAAQ,cAAc,SAAS,GAAG;AAAA,QAC7D,WAAW,OAAO,QAAQ,eAAe;AAAA,UACvC,MAAM,SAAS,KAAK,KAAK,IAAI,IAAI;AAAA,UACjC,MAAM,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,UAC7B,MAAM,cAAc,KAAK,OAAO,IAAI,WAAW;AAAA,UAE/C,MAAM,KAAK,WAAW,aAAa,SAAS,gBAAgB;AAAA,UAE5D,IAAI,IAAI,YAAY;AAAA,YAClB,MAAM,KAAK,yBAAyB,KAAK,OAAO,IAAI,UAAU,IAAI;AAAA,UACpE;AAAA,UAEA,MAAM,KAAK,gCAAgC;AAAA,UAC3C,MAAM,KAAK,WAAW;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,IAGA,MAAM,gBAA0B,CAAC;AAAA,IACjC,MAAM,gBAA0B,CAAC;AAAA,IAEjC,YAAY,aAAa,aAAa,gBAAgB;AAAA,MACpD,MAAM,OAAO,YAAY,YAAY;AAAA,MACrC,MAAM,cAAc,KAAK,KAAK,KAAK,gBAAgB,WAAW,CAAC;AAAA,MAE/D,IACE,KAAK,SAAS,KAAK,KACnB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,OAAO,KACrB,KAAK,SAAS,OAAO,KACrB,KAAK,SAAS,QAAQ,GACtB;AAAA,QACA,cAAc,KAAK,WAAW;AAAA,MAChC,EAAO,SAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,GAAG;AAAA,QAClF,cAAc,KAAK,WAAW;AAAA,MAChC;AAAA,IACF;AAAA,IAGA,IAAI,cAAc,SAAS,KAAK,cAAc,SAAS,GAAG;AAAA,MAExD,WAAW,gBAAgB,eAAe;AAAA,QACxC,WAAW,gBAAgB,eAAe;AAAA,UACxC,IAAI,iBAAiB,cAAc;AAAA,YACjC,MAAM,KAAK,WAAW,mBAAmB,gCAAgC;AAAA,YACzE,MAAM,KAAK,2BAA2B;AAAA,YACtC,MAAM,KAAK,WAAW;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,8BAA8B,GAAW;AAAA,IAC/C,MAAM,QAAkB,CAAC;AAAA,IAGzB,MAAM,aAAa,CAAC,SAAS,WAAW,UAAU;AAAA,IAClD,WAAW,eAAe,OAAO,KAAK,KAAK,SAAS,QAAQ,GAAG;AAAA,MAC7D,IAAI,WAAW,SAAS,WAAW,GAAG;AAAA,QACpC,MAAM,KAAK,2BAA2B,oBAAoB;AAAA,MAC5D;AAAA,IACF;AAAA,IAGA,WAAW,QAAQ,KAAK,SAAS,cAAc;AAAA,MAC7C,MAAM,OAAO,SAAS,KAAK;AAAA,MAC3B,WAAW,MAAM,KAAK,IAAI;AAAA,QACxB,MAAM,KAAK,mBAAmB,KAAK,qBAAqB,OAAO,OAAO;AAAA,MACxE;AAAA,IACF;AAAA,IAGA,WAAW,eAAe,KAAK,SAAS,cAAc;AAAA,MACpD,IAAI,YAAY,SAAS,SAAS,YAAY,SAAS,aAAa;AAAA,QAElE,YAAY,aAAa,gBAAgB,OAAO,QAAQ,KAAK,SAAS,QAAQ,GAAG;AAAA,UAC/E,MAAM,kBAAkB,YAAY,aAAa,KAAK,CAAC,QACrD,YAAY,OAAO,KAAK,CAAC,SAAS,KAAK,aAAa,IAAI,QAAQ,CAClE;AAAA,UAEA,IAAI,iBAAiB;AAAA,YACnB,MAAM,SAAS,YAAY,SAAS,cAAc,gBAAgB;AAAA,YAClE,MAAM,KACJ,mBAAmB,kBAAkB,KAAK,KAAK,YAAY,IAAI,MAAM,SACvE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,aAAa,GAAW;AAAA,IAC9B,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,KAAK,WAAW;AAAA,IACtB,MAAM,KAAK,KAAK,0BAA0B,CAAC;AAAA,IAC3C,MAAM,KAAK,KAAK,sBAAsB,CAAC;AAAA,IAEvC,IAAI,KAAK,QAAQ,0BAA0B;AAAA,MACzC,WAAW,eAAe,KAAK,QAAQ,4BAA4B,CAAC,GAAG;AAAA,QACrE,IAAI,KAAK,SAAS,SAAS,cAAc;AAAA,UACvC,MAAM,KAAK,KAAK,sBAAsB,WAAW,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,QAAQ,wBAAwB;AAAA,MACvC,MAAM,KAAK,KAAK,qBAAqB,CAAC;AAAA,IACxC;AAAA,IAGA,IAAI,KAAK,QAAQ,mBAAmB,KAAK,QAAQ,gBAAgB,SAAS,GAAG;AAAA,MAC3E,MAAM,KAAK,KAAK,wBAAwB,CAAC;AAAA,IAC3C;AAAA,IAEA,MAAM,KAAK,KAAK,eAAe,CAAC;AAAA,IAChC,MAAM,KAAK,KAAK;AAAA,IAGhB,IAAI,KAAK,SAAS,QAAQ,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG;AAAA,MAC5D,MAAM,KAAK,EAAE;AAAA,MACb,MAAM,KAAK,KAAK,sBAAsB,CAAC;AAAA,IACzC;AAAA,IAEA,OAAO,MAAM,KAAK;AAAA;AAAA,CAAM;AAAA;AAAA,EAMlB,qBAAqB,GAAW;AAAA,IACtC,IAAI,CAAC,KAAK,SAAS,QAAQ,KAAK,SAAS,KAAK,KAAK,WAAW,GAAG;AAAA,MAC/D,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,QAAkB,CAAC;AAAA,IACzB,MAAM,KAAK,mBAAmB;AAAA,IAE9B,WAAW,OAAO,KAAK,SAAS,KAAK,MAAM;AAAA,MACzC,MAAM,KAAK,iBAAiB,IAAI,OAAO;AAAA,MACvC,MAAM,KAAK,gBAAgB,KAAK,OAAO,IAAI,KAAK,IAAI;AAAA,MACpD,MAAM,KAAK,iBAAiB,IAAI,SAAS;AAAA,MACzC,MAAM,KAAK,eAAe,IAAI,OAAO;AAAA,MACrC,MAAM,KAAK,kBAAkB,KAAK,OAAO,IAAI,OAAO,IAAI;AAAA,MACxD,MAAM,KAAK,OAAO;AAAA,IACpB;AAAA,IAEA,MAAM,KAAK,KAAK;AAAA,IAEhB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,yBAAyB,GAAW;AAAA,IAC1C,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,qBAAqB,GAAW;AAAA,IACtC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,qBAAqB,CAAC,aAA6B;AAAA,IACzD,OAAO,2BAA2B,2BAA2B,KAAK,WAAW,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EASlF,oBAAoB,GAAW;AAAA,IACrC,MAAM,QAAkB,CAAC;AAAA,IAGzB,IAAI,KAAK,QAAQ,mBAAmB,KAAK,QAAQ,gBAAgB,SAAS,GAAG;AAAA,MAC3E,WAAW,WAAW,KAAK,QAAQ,iBAAiB;AAAA,QAClD,MAAM,KAAK,KAAK,2BAA2B,OAAO,CAAC;AAAA,MACrD;AAAA,IACF;AAAA,IAGA,MAAM,eAAe,KAAK,iCAAiC;AAAA,IAC3D,IAAI,aAAa,SAAS,GAAG;AAAA,MAC3B,MAAM,KAAK,GAAG,YAAY;AAAA,IAC5B;AAAA,IAGA,MAAM,gBAAgB,IAAI;AAAA,IAE1B,WAAW,QAAQ,KAAK,SAAS,cAAc;AAAA,MAE7C,MAAM,cAAc,KAAK,YAAY,YAAY;AAAA,MACjD,IAAI,SAAS;AAAA,MAEb,IACE,YAAY,SAAS,MAAM,KAC3B,YAAY,SAAS,OAAO,KAC5B,YAAY,SAAS,QAAQ,KAC7B,YAAY,SAAS,MAAM,GAC3B;AAAA,QACA,SAAS;AAAA,MACX,EAAO,SAAI,YAAY,SAAS,MAAM,GAAG;AAAA,QACvC,SAAS;AAAA,MACX,EAAO,SAAI,YAAY,SAAS,OAAO,GAAG;AAAA,QACxC,SAAS;AAAA,MACX;AAAA,MAEA,IAAI,CAAC,cAAc,IAAI,MAAM,GAAG;AAAA,QAC9B,cAAc,IAAI,QAAQ,CAAC,CAAC;AAAA,MAC9B;AAAA,MACA,cAAc,IAAI,MAAM,EAAG,KAAK,IAAI;AAAA,IACtC;AAAA,IAGA,IAAI,QAAQ;AAAA,IACZ,YAAY,QAAQ,UAAU,eAAe;AAAA,MAC3C,IAAI,SAAS;AAAA,QAAG;AAAA,MAEhB,MAAM,WAAW,KAAK,WAAW,MAAM,IAAI;AAAA,MAC3C,MAAM,KAAK,KAAK,oBAAoB,UAAU,OAAO,MAAM,CAAC;AAAA,MAC5D;AAAA,IACF;AAAA,IAEA,OAAO,MAAM,KAAK;AAAA;AAAA,CAAM;AAAA;AAAA,EAMlB,gCAAgC,GAAa;AAAA,IACnD,MAAM,WAAqB,CAAC;AAAA,IAC5B,MAAM,oBAAoB,IAAI;AAAA,IAS9B,MAAM,4BAAkD,CAAC;AAAA,IAEzD,YAAY,aAAa,gBAAgB,OAAO,QAAQ,KAAK,SAAS,QAAQ,GAAG;AAAA,MAC/E,WAAW,WAAW,YAAY,UAAU;AAAA,QAC1C,IAAI,QAAQ,iBAAiB,QAAQ,cAAc,SAAS,GAAG;AAAA,UAC7D,0BAA0B,KAAK;AAAA,YAC7B;AAAA,YACA;AAAA,YACA,aAAa,KAAK,KAAK,WAAW;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAGA,MAAM,gBAAgB,IAAI;AAAA,IAE1B,WAAW,OAAO,2BAA2B;AAAA,MAC3C,MAAM,cAAc,IAAI,QAAQ,YAAY,YAAY;AAAA,MACxD,IAAI,WAAW;AAAA,MAGf,IACE,YAAY,SAAS,MAAM,KAC3B,YAAY,SAAS,OAAO,KAC5B,YAAY,SAAS,QAAQ,KAC7B,YAAY,SAAS,QAAQ,KAC7B,YAAY,SAAS,UAAU,GAC/B;AAAA,QACA,WAAW;AAAA,MACb,EAEK,SAAI,YAAY,SAAS,MAAM,GAAG;AAAA,QACrC,WAAW;AAAA,MACb,EAAO,SAAI,YAAY,SAAS,MAAM,GAAG;AAAA,QACvC,WAAW;AAAA,MACb,EAEK,SACH,YAAY,SAAS,OAAO,KAC5B,YAAY,SAAS,KAAK,KAC1B,YAAY,SAAS,OAAO,KAC5B,YAAY,SAAS,MAAM,GAC3B;AAAA,QACA,WAAW;AAAA,MACb,EAAO,SACL,YAAY,SAAS,SAAS,KAC9B,YAAY,SAAS,QAAQ,KAC7B,YAAY,SAAS,QAAQ,KAC7B,YAAY,SAAS,QAAQ,KAC7B,YAAY,SAAS,KAAK,KAC1B,YAAY,SAAS,QAAQ,GAC7B;AAAA,QACA,WAAW;AAAA,MACb;AAAA,MAEA,IAAI,CAAC,cAAc,IAAI,QAAQ,GAAG;AAAA,QAChC,cAAc,IAAI,UAAU,CAAC,CAAC;AAAA,MAChC;AAAA,MACA,cAAc,IAAI,QAAQ,EAAG,KAAK,GAAG;AAAA,IACvC;AAAA,IAGA,IAAI,eAAe;AAAA,IACnB,MAAM,cAAc;AAAA,IAGpB,MAAM,gBAAgB,0BAA0B;AAAA,IAChD,MAAM,yBAAyB,cAAc;AAAA,IAE7C,IAAI,iBAAiB,KAAK,0BAA0B,GAAG;AAAA,MAErD,MAAM,cAAc,MAAM,KAAK,cAAc,OAAO,CAAC,EAAE,KAAK;AAAA,MAC5D,MAAM,UAAU,KAAK,2BAA2B,WAAW,WAAW;AAAA,MACtE,IAAI,SAAS;AAAA,QACX,SAAS,KAAK,OAAO;AAAA,MACvB;AAAA,IACF,EAAO;AAAA,MAEL,YAAY,UAAU,aAAa,eAAe;AAAA,QAChD,IAAI,gBAAgB;AAAA,UAAa;AAAA,QACjC,IAAI,SAAS,WAAW;AAAA,UAAG;AAAA,QAG3B,MAAM,UAAU,KAAK,2BAA2B,UAAU,QAAQ;AAAA,QAClE,IAAI,SAAS;AAAA,UACX,SAAS,KAAK,OAAO;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA;AAAA,IAGF,OAAO;AAAA;AAAA,EAMD,0BAA0B,CAChC,UACA,UACe;AAAA,IACf,MAAM,QAAkB,CAAC;AAAA,IAGzB,MAAM,QAAQ,KAAK,iBAAiB,QAAQ;AAAA,IAC5C,MAAM,cAAc,KAAK,uBAAuB,QAAQ;AAAA,IAGxD,MAAM,QAAQ,SAAS,IAAI,cACvB,aAAa,SAAS,GAAG,gBACzB;AAAA,IAEJ,MAAM,KACJ,eAAe,UAAU,WAAW,gBACtC;AAAA,IAEA,IAAI,YAAY;AAAA,IAGhB,aAAa,SAAS,iBAAiB,UAAU;AAAA,MAC/C,MAAM,qBAAqB,KAAK,KAAK,GAAG,QAAQ,qBAAqB;AAAA,MAGrE,WAAW,OAAO,QAAQ,eAAe;AAAA,QACvC,MAAM,cAAc,KAAK,KAAK,IAAI,EAAE;AAAA,QAGpC,MAAM,KAAK,SAAS,yBAAyB,gBAAgB,IAAI,cAAc;AAAA,QAC/E;AAAA,MACF;AAAA,IACF;AAAA,IAGA,IAAI,cAAc,GAAG;AAAA,MACnB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,KAAK,qBAAqB;AAAA,IAChC,MAAM,KAAK,OAAO;AAAA,IAElB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,gBAAgB,CAAC,UAA0B;AAAA,IACjD,MAAM,SAAiC;AAAA,MACrC,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,OAAO,OAAO,aAAa,GAAG,KAAK,WAAW,QAAQ;AAAA;AAAA,EAMhD,sBAAsB,CAAC,UAA0B;AAAA,IACvD,MAAM,eAAuC;AAAA,MAC3C,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,OAAO,aAAa,aAAa;AAAA;AAAA,EAM3B,0BAA0B,CAAC,SAAiC;AAAA,IAClE,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,KAAK,eAAe,QAAQ,SAAS,gBAAgB,KAAK,OAAO,QAAQ,KAAK,OAAO,KAAK,OAAO,QAAQ,eAAe,EAAE,MAAM;AAAA,IAEtI,WAAW,QAAQ,QAAQ,OAAO;AAAA,MAChC,MAAM,OAAO,KAAK;AAAA,MAClB,MAAM,KAAK,KAAK;AAAA,MAChB,MAAM,cAAc,KAAK,OAAO,KAAK,WAAW;AAAA,MAEhD,MAAM,KAAK,SAAS,WAAW,OAAO,cAAc;AAAA,IACtD;AAAA,IAEA,MAAM,KAAK,qBAAqB;AAAA,IAChC,MAAM,KAAK,OAAO;AAAA,IAElB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,mBAAmB,CAAC,UAAkB,OAAc,QAAwB;AAAA,IAClF,MAAM,QAAkB,CAAC;AAAA,IAGzB,MAAM,cAAc,KAAK,0BAA0B,MAAM;AAAA,IACzD,MAAM,KAAK,0BAA0B,cAAc,gBAAgB;AAAA,IAGnE,MAAM,aAAa,CAAC,SAAS,WAAW,UAAU;AAAA,IAClD,MAAM,YAAY,MAAM,KAAK,CAAC,MAAM,WAAW,SAAS,EAAE,IAAI,CAAC;AAAA,IAE/D,IAAI,WAAW;AAAA,MAEb,MAAM,YAAY,MAAM,KAAK,CAAC,MAAM,WAAW,SAAS,EAAE,IAAI,CAAC;AAAA,MAC/D,IAAI,WAAW;AAAA,QACb,MAAM,SAAS,KAAK,cAAc,MAAM;AAAA,QACxC,MAAM,KAAK,2BAA2B,UAAU,SAAS,SAAS;AAAA,MACpE;AAAA,IACF;AAAA,IAGA,WAAW,QAAQ,OAAO;AAAA,MACxB,MAAM,cAAc,KAAK,sBAAsB,KAAK,WAAW;AAAA,MAE/D,WAAW,MAAM,KAAK,IAAI;AAAA,QACxB,MAAM,KAAK,mBAAmB,KAAK,qBAAqB,OAAO,cAAc;AAAA,MAC/E;AAAA,IACF;AAAA,IAEA,MAAM,KAAK,qBAAqB;AAAA,IAChC,MAAM,KAAK,OAAO;AAAA,IAElB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,yBAAyB,CAAC,QAAwB;AAAA,IACxD,MAAM,eAAuC;AAAA,MAC3C,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,OAAO,aAAa,WAAW,aAAa;AAAA;AAAA,EAMtC,aAAa,CAAC,QAAwB;AAAA,IAC5C,MAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,OAAO,QAAQ,WAAW,QAAQ;AAAA;AAAA,EAM5B,qBAAqB,CAAC,aAA6B;AAAA,IACzD,MAAM,OAAO,YAAY,YAAY;AAAA,IAErC,IAAI,KAAK,SAAS,OAAO;AAAA,MAAG,OAAO;AAAA,IACnC,IAAI,KAAK,SAAS,QAAQ;AAAA,MAAG,OAAO;AAAA,IACpC,IAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,QAAQ;AAAA,MAAG,OAAO;AAAA,IAC5D,IAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,QAAQ;AAAA,MAAG,OAAO;AAAA,IAC/D,IAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,QAAQ;AAAA,MAAG,OAAO;AAAA,IAC/D,IAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,OAAO;AAAA,MAAG,OAAO;AAAA,IAC3D,IAAI,KAAK,SAAS,OAAO;AAAA,MAAG,OAAO;AAAA,IAEnC,OAAO;AAAA;AAAA,EAMD,8BAA8B,GAAW;AAAA,IAC/C,MAAM,QAAkB,CAAC;AAAA,IAGzB,MAAM,qBAAqB,IAAI;AAAA,IAE/B,WAAW,QAAQ,KAAK,QAAQ,mBAAmB,CAAC,GAAG;AAAA,MACrD,MAAM,MAAM,KAAK,MAAM,KAAK,CAAC,QAAQ,IAAI,YAAY,EAAE,SAAS,cAAc,CAAC,GAC3E,MAAM,GAAG,EAAE,MAAM;AAAA,MAErB,IAAI,CAAC,mBAAmB,IAAI,GAAG,GAAG;AAAA,QAChC,mBAAmB,IAAI,KAAK,CAAC,CAAC;AAAA,MAChC;AAAA,MACA,mBAAmB,IAAI,GAAG,EAAG,KAAK,IAAI;AAAA,IACxC;AAAA,IAGA,YAAY,SAAS,UAAU,oBAAoB;AAAA,MACjD,MAAM,KAAK,8BAA8B,YAAY;AAAA,MAErD,WAAW,QAAQ,OAAO;AAAA,QACxB,MAAM,KAAK,KAAK,uBAAuB,MAAM,QAAQ,CAAC;AAAA,MACxD;AAAA,MAEA,MAAM,KAAK,OAAO;AAAA,IACpB;AAAA,IAEA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,sBAAsB,CAAC,MAAsB,QAAwB;AAAA,IAC3E,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,cAAc,KAAK,cAAc,KAAK,KAAK,OAAO,KAAK,WAAW,OAAO;AAAA,IAC/E,MAAM,aAAa,KAAK,aAAa,KAAK,KAAK,OAAO,KAAK,UAAU,OAAO;AAAA,IAE5E,MAAM,KAAK,GAAG,yBAAyB,KAAK,OAAO,KAAK,IAAI,KAAK,cAAc,cAAc;AAAA,IAG7F,IAAI,KAAK,QAAQ,KAAK,KAAK,SAAS,GAAG;AAAA,MACrC,MAAM,eAAe,KAAK,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,SAAS,cAAc,CAAC;AAAA,MAC1F,IAAI,aAAa,SAAS,GAAG;AAAA,QAC3B,MAAM,KAAK,GAAG,iBAAiB,aAAa,KAAK,KAAK,IAAI;AAAA,MAC5D;AAAA,IACF;AAAA,IAGA,IAAI,KAAK,cAAc,OAAO,KAAK,KAAK,UAAU,EAAE,SAAS,GAAG;AAAA,MAC9D,MAAM,KAAK,GAAG,sBAAsB;AAAA,MACpC,YAAY,KAAK,UAAU,OAAO,QAAQ,KAAK,UAAU,GAAG;AAAA,QAC1D,MAAM,KAAK,GAAG,cAAc,KAAK,OAAO,GAAG,OAAO,KAAK,OAAO,KAAK,IAAI;AAAA,MACzE;AAAA,MACA,MAAM,KAAK,GAAG,WAAW;AAAA,IAC3B;AAAA,IAGA,IAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAAA,MAC7C,WAAW,SAAS,KAAK,UAAU;AAAA,QACjC,MAAM,KAAK,KAAK,uBAAuB,OAAO,SAAS,IAAI,CAAC;AAAA,MAC9D;AAAA,IACF;AAAA,IAGA,IAAI,KAAK,sBAAsB,KAAK,mBAAmB,SAAS,GAAG;AAAA,MACjE,WAAW,qBAAqB,KAAK,oBAAoB;AAAA,QACvD,MAAM,eAAe,kBAAkB,aAAa,kBAAkB,YAAY,IAC9E,IAAI,kBAAkB,cACtB;AAAA,QACJ,MAAM,KAAK,GAAG,uCAAuC,kBAAkB,YAAY,cAAc;AAAA,MACnG;AAAA,IACF,EAAO,SAAI,CAAC,KAAK,YAAY,KAAK,SAAS,WAAW,GAAG;AAAA,MAEvD,MAAM,WAAW,OAAO,KAAK,KAAK,SAAS,QAAQ;AAAA,MACnD,IAAI,SAAS,SAAS,GAAG;AAAA,QACvB,WAAW,eAAe,UAAU;AAAA,UAClC,MAAM,KAAK,GAAG,uCAAuC,aAAa;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,KAAK,GAAG,SAAS;AAAA,IAEvB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,uBAAuB,GAAW;AAAA,IACxC,MAAM,QAAkB,CAAC;AAAA,IAGzB,MAAM,qBAAqB,IAAI;AAAA,IAE/B,WAAW,QAAQ,KAAK,QAAQ,mBAAmB,CAAC,GAAG;AAAA,MACrD,MAAM,MAAM,KAAK,MAAM,KAAK,CAAC,QAAQ,IAAI,YAAY,EAAE,SAAS,cAAc,CAAC,GAC3E,MAAM,GAAG,EAAE,MAAM;AAAA,MAErB,IAAI,CAAC,mBAAmB,IAAI,GAAG,GAAG;AAAA,QAChC,mBAAmB,IAAI,KAAK,CAAC,CAAC;AAAA,MAChC;AAAA,MACA,mBAAmB,IAAI,GAAG,EAAG,KAAK,IAAI;AAAA,IACxC;AAAA,IAGA,YAAY,YAAY,oBAAoB;AAAA,MAC1C,MAAM,cAAc,GAAG;AAAA,MAEvB,MAAM,KAAK,6BAA6B,aAAa,gBAAgB;AAAA,MACrE,MAAM,KAAK,iBAAiB;AAAA,MAC5B,MAAM,KAAK,qBAAqB;AAAA,MAChC,MAAM,KAAK,OAAO;AAAA,IACpB;AAAA,IAEA,OAAO,MAAM,KAAK;AAAA;AAAA,CAAM;AAAA;AAAA,EASlB,cAAc,GAAW;AAAA,IAC/B,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,KAAK,cAAc;AAAA,IAGzB,IAAI,KAAK,QAAQ,wBAAwB,KAAK,QAAQ,QAAQ,UAAU;AAAA,MACtE,YAAY,KAAK,UAAU,OAAO,QAAQ,KAAK,QAAQ,OAAO,QAAQ,GAAG;AAAA,QACvE,MAAM,KAAK,KAAK,qBAAqB,KAAK,KAAK,CAAC;AAAA,MAClD;AAAA,IACF;AAAA,IAGA,IAAI,KAAK,QAAQ,wBAAwB,KAAK,QAAQ,QAAQ,eAAe;AAAA,MAC3E,YAAY,KAAK,UAAU,OAAO,QAAQ,KAAK,QAAQ,OAAO,aAAa,GAAG;AAAA,QAC5E,MAAM,KAAK,KAAK,0BAA0B,KAAK,KAAK,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,IAGA,IAAI,KAAK,QAAQ,QAAQ,OAAO;AAAA,MAC9B,MAAM,KAAK,eAAe,KAAK,QAAQ,OAAO,OAAO;AAAA,IACvD;AAAA,IAEA,MAAM,KAAK,OAAO;AAAA,IAElB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,oBAAoB,CAAC,KAAa,OAA6B;AAAA,IACrE,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,KAAK,kBAAkB,QAAQ;AAAA,IAErC,IAAI,MAAM,OAAO;AAAA,MACf,MAAM,KAAK,iBAAiB,MAAM,OAAO;AAAA,IAC3C;AAAA,IACA,IAAI,MAAM,MAAM;AAAA,MACd,MAAM,KAAK,gBAAgB,MAAM,MAAM;AAAA,IACzC;AAAA,IACA,IAAI,MAAM,OAAO;AAAA,MACf,MAAM,KAAK,iBAAiB,MAAM,OAAO;AAAA,IAC3C;AAAA,IACA,IAAI,MAAM,QAAQ;AAAA,MAChB,MAAM,KAAK,kBAAkB,MAAM,QAAQ;AAAA,IAC7C;AAAA,IACA,IAAI,MAAM,YAAY;AAAA,MACpB,MAAM,KAAK,sBAAsB,MAAM,YAAY;AAAA,IACrD;AAAA,IACA,IAAI,MAAM,OAAO;AAAA,MACf,MAAM,KAAK,iBAAiB,MAAM,OAAO;AAAA,IAC3C;AAAA,IACA,IAAI,MAAM,UAAU;AAAA,MAClB,MAAM,KAAK,oBAAoB,MAAM,UAAU;AAAA,IACjD;AAAA,IACA,IAAI,MAAM,QAAQ;AAAA,MAChB,MAAM,KAAK,kBAAkB,MAAM,QAAQ;AAAA,IAC7C;AAAA,IACA,IAAI,MAAM,YAAY,WAAW;AAAA,MAC/B,MAAM,KAAK,mBAAmB,MAAM,SAAS;AAAA,IAC/C;AAAA,IACA,IAAI,MAAM,aAAa,WAAW;AAAA,MAChC,MAAM,KAAK,oBAAoB,MAAM,UAAU;AAAA,IACjD;AAAA,IACA,IAAI,MAAM,gBAAgB,WAAW;AAAA,MACnC,MAAM,KAAK,uBAAuB,MAAM,aAAa;AAAA,IACvD;AAAA,IAEA,MAAM,KAAK,SAAS;AAAA,IAEpB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,yBAAyB,CAAC,KAAa,OAAkC;AAAA,IAC/E,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,KAAK,uBAAuB,QAAQ;AAAA,IAE1C,IAAI,MAAM,WAAW;AAAA,MACnB,MAAM,KAAK,qBAAqB,MAAM,WAAW;AAAA,IACnD;AAAA,IACA,IAAI,MAAM,OAAO;AAAA,MACf,MAAM,KAAK,iBAAiB,MAAM,OAAO;AAAA,IAC3C;AAAA,IACA,IAAI,MAAM,OAAO;AAAA,MACf,MAAM,KAAK,iBAAiB,MAAM,OAAO;AAAA,IAC3C;AAAA,IACA,IAAI,MAAM,SAAS;AAAA,MACjB,MAAM,KAAK,mBAAmB,MAAM,SAAS;AAAA,IAC/C;AAAA,IACA,IAAI,MAAM,UAAU;AAAA,MAClB,MAAM,KAAK,oBAAoB,MAAM,UAAU;AAAA,IACjD;AAAA,IACA,IAAI,MAAM,OAAO;AAAA,MACf,MAAM,KAAK,iBAAiB,MAAM,OAAO;AAAA,IAC3C;AAAA,IACA,IAAI,MAAM,UAAU;AAAA,MAClB,MAAM,KAAK,oBAAoB,MAAM,UAAU;AAAA,IACjD;AAAA,IACA,IAAI,MAAM,YAAY,WAAW;AAAA,MAC/B,MAAM,KAAK,mBAAmB,MAAM,SAAS;AAAA,IAC/C;AAAA,IAEA,MAAM,KAAK,SAAS;AAAA,IAEpB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,oBAAoB,CAAC,aAA6B;AAAA,IACxD,MAAM,eAAuC;AAAA,MAC3C,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IAEA,OAAO,aAAa,gBAAgB;AAAA;AAAA,EAM9B,eAAe,CAAC,aAA6B;AAAA,IACnD,OACE,YACG,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,WAAW,KAAK,YAAY,CAAC,CAAC,EACjD,KAAK,GAAG,IAAI;AAAA;AAAA,EAOX,IAAI,CAAC,MAAsB;AAAA,IACjC,OAAO,KACJ,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,UAAU,EAAE;AAAA;AAAA,EAMjB,UAAU,CAAC,UAA0B;AAAA,IAC3C,OAAO,SACJ,MAAM,MAAM,EACZ,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,EACnC,KAAK,GAAG;AAAA;AAAA,EAML,UAAU,CAAC,KAAqB;AAAA,IACtC,OAAO,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAAA;AAAA,EAS1C,2BAA2B,CACjC,MAOA,QACQ;AAAA,IACR,MAAM,QAAkB,CAAC;AAAA,IAEzB,MAAM,KAAK,GAAG,SAAS,KAAK,mBAAmB,KAAK,UAAU,KAAK,OAAO,KAAK,WAAW,MAAM;AAAA,IAEhG,IAAI,KAAK,KAAK,SAAS,GAAG;AAAA,MACxB,MAAM,KAAK,GAAG,iBAAiB,KAAK,KAAK,KAAK,KAAK,IAAI;AAAA,IACzD;AAAA,IAEA,IAAI,KAAK,cAAc,OAAO,KAAK,KAAK,UAAU,EAAE,SAAS,GAAG;AAAA,MAC9D,MAAM,KAAK,GAAG,sBAAsB;AAAA,MACpC,YAAY,KAAK,UAAU,OAAO,QAAQ,KAAK,UAAU,GAAG;AAAA,QAC1D,IAAI,OAAO;AAAA,UACT,MAAM,KAAK,GAAG,cAAc,SAAS,KAAK,OAAO,KAAK,IAAI;AAAA,QAC5D;AAAA,MACF;AAAA,MACA,MAAM,KAAK,GAAG,WAAW;AAAA,IAC3B;AAAA,IAGA,IAAI,KAAK,QAAQ,gBAAgB,KAAK,QAAQ,aAAa,KAAK,KAAK;AAAA,MACnE,MAAM,eAAe,KAAK,QAAQ,aAAa,KAAK;AAAA,MACpD,MAAM,KAAK,GAAG,wBAAwB;AAAA,MACtC,WAAW,eAAe,cAAc;AAAA,QACtC,MAAM,KAAK,GAAG,cAAc,KAAK,OAAO,YAAY,IAAI,OAAO,KAAK,OAAO,YAAY,WAAW,IAAI;AAAA,MACxG;AAAA,MACA,MAAM,KAAK,GAAG,WAAW;AAAA,IAC3B;AAAA,IAEA,MAAM,KAAK,GAAG,SAAS;AAAA,IAEvB,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,EAMhB,uBAAuB,CAC7B,eAQkB;AAAA,IAClB,MAAM,SAA2B,CAAC;AAAA,IAClC,MAAM,WAAW,IAAI;AAAA,IAGrB,MAAM,eAAe,cAAc,OAAO,CAAC,SAAS;AAAA,MAClD,MAAM,OAAO,KAAK,YAAY,YAAY;AAAA,MAC1C,OACE,KAAK,SAAS,OAAO,KACrB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,UAAU,KACxB,KAAK,SAAS,QAAQ;AAAA,KAEzB;AAAA,IAED,IAAI,aAAa,SAAS,GAAG;AAAA,MAC3B,OAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,YAAY,aAAa,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,MAC1C,CAAC;AAAA,MACD,aAAa,QAAQ,CAAC,MAAM,SAAS,IAAI,EAAE,EAAE,CAAC;AAAA,IAChD;AAAA,IAGA,MAAM,uBAAuB,cAAc,OAAO,CAAC,SAAS;AAAA,MAC1D,MAAM,OAAO,KAAK,YAAY,YAAY;AAAA,MAC1C,OAAO,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,aAAa;AAAA,KACjE;AAAA,IAED,IAAI,qBAAqB,SAAS,GAAG;AAAA,MACnC,OAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,YAAY,qBAAqB,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,MAClD,CAAC;AAAA,MACD,qBAAqB,QAAQ,CAAC,MAAM,SAAS,IAAI,EAAE,EAAE,CAAC;AAAA,IACxD;AAAA,IAIA,MAAM,eAAe,IAAI;AAAA,IAEzB,WAAW,QAAQ,eAAe;AAAA,MAChC,IAAI,SAAS,IAAI,KAAK,EAAE;AAAA,QAAG;AAAA,MAE3B,MAAM,OAAO,KAAK,YAAY,YAAY;AAAA,MAG1C,IAAI,SAAS,gBAAgB,SAAS,aAAa,SAAS,WAAW,SAAS,SAAS;AAAA,QACvF;AAAA,MACF;AAAA,MAGA,IAAI,SAAwB;AAAA,MAG5B,MAAM,kBAAkB,KAAK,MAAM,uEAAuE;AAAA,MAC1G,IAAI,iBAAiB;AAAA,QACnB,SAAS,gBAAgB;AAAA,MAC3B;AAAA,MAGA,IAAI,CAAC,QAAQ;AAAA,QACX,MAAM,aAAa,KAAK,MAAM,sEAAsE;AAAA,QACpG,IAAI,YAAY;AAAA,UACd,SAAS,WAAW,GAAG,YAAY;AAAA,QACrC;AAAA,MACF;AAAA,MAGA,IAAI,CAAC,UAAU,KAAK,MAAM,UAAU,GAAG;AAAA,QACrC,SAAS;AAAA,MACX;AAAA,MAEA,IAAI,QAAQ;AAAA,QACV,IAAI,CAAC,aAAa,IAAI,MAAM,GAAG;AAAA,UAC7B,aAAa,IAAI,QAAQ,CAAC,CAAC;AAAA,QAC7B;AAAA,QACA,aAAa,IAAI,MAAM,EAAG,KAAK,KAAK,EAAE;AAAA,QACtC,SAAS,IAAI,KAAK,EAAE;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,YAAY,QAAQ,iBAAiB,cAAc;AAAA,MACjD,IAAI,aAAa,UAAU,GAAG;AAAA,QAE5B,MAAM,aAAa,OAAO,OAAO,CAAC,EAAE,YAAY,IAAI,OAAO,MAAM,CAAC;AAAA,QAClE,OAAO,KAAK;AAAA,UACV,MAAM,GAAG;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AAAA,MACH,EAAO;AAAA,QAEL,aAAa,QAAQ,CAAC,OAAO,SAAS,OAAO,EAAE,CAAC;AAAA;AAAA,IAEpD;AAAA,IAGA,MAAM,gBAAgB,cAAc,OAAO,CAAC,SAAS;AAAA,MACnD,IAAI,SAAS,IAAI,KAAK,EAAE;AAAA,QAAG,OAAO;AAAA,MAClC,MAAM,OAAO,KAAK,YAAY,YAAY;AAAA,MAC1C,OACE,KAAK,SAAS,OAAO,KACrB,KAAK,SAAS,KAAK,KACnB,KAAK,SAAS,OAAO,KACrB,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,MAAM;AAAA,KAEvB;AAAA,IAED,MAAM,kBAAkB,cAAc,OAAO,CAAC,SAAS;AAAA,MACrD,IAAI,SAAS,IAAI,KAAK,EAAE;AAAA,QAAG,OAAO;AAAA,MAClC,MAAM,OAAO,KAAK,YAAY,YAAY;AAAA,MAC1C,OACE,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,KAAK,KACnB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,KAAK,KACnB,KAAK,SAAS,OAAO;AAAA,KAExB;AAAA,IAED,IAAI,cAAc,UAAU,GAAG;AAAA,MAC7B,OAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,YAAY,cAAc,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,MAC3C,CAAC;AAAA,MACD,cAAc,QAAQ,CAAC,MAAM,SAAS,IAAI,EAAE,EAAE,CAAC;AAAA,IACjD;AAAA,IAEA,IAAI,gBAAgB,UAAU,GAAG;AAAA,MAC/B,OAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,YAAY,gBAAgB,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,MAC7C,CAAC;AAAA,MACD,gBAAgB,QAAQ,CAAC,MAAM,SAAS,IAAI,EAAE,EAAE,CAAC;AAAA,IACnD;AAAA,IAGA,MAAM,eAAe,SAAS;AAAA,IAC9B,MAAM,aAAa,cAAc;AAAA,IAGjC,IAAI,gBAAgB,aAAa,OAAO,OAAO,UAAU,GAAG;AAAA,MAC1D,OAAO;AAAA,IACT;AAAA,IAGA,OAAO,CAAC;AAAA;AAAA,EAMF,yBAAyB,CAC/B,eAQA,QACU;AAAA,IACV,MAAM,QAAkB,CAAC;AAAA,IACzB,MAAM,qBAAqB,IAAI;AAAA,IAE/B,WAAW,SAAS,QAAQ;AAAA,MAC1B,MAAM,kBAAkB,cAAc,OAAO,CAAC,SAC5C,MAAM,WAAW,SAAS,KAAK,EAAE,CACnC;AAAA,MAEA,IAAI,gBAAgB,WAAW;AAAA,QAAG;AAAA,MAElC,MAAM,KAAK,kBAAkB,KAAK,OAAO,MAAM,IAAI,MAAM;AAAA,MAEzD,WAAW,QAAQ,iBAAiB;AAAA,QAClC,MAAM,KAAK,KAAK,4BAA4B,MAAM,YAAY,CAAC;AAAA,QAC/D,mBAAmB,IAAI,KAAK,EAAE;AAAA,MAChC;AAAA,MAEA,MAAM,KAAK,WAAW;AAAA,MACtB,MAAM,KAAK,EAAE;AAAA,IACf;AAAA,IAGA,MAAM,sBAAsB,cAAc,OACxC,CAAC,SAAS,CAAC,mBAAmB,IAAI,KAAK,EAAE,CAC3C;AAAA,IAEA,WAAW,QAAQ,qBAAqB;AAAA,MACtC,MAAM,KAAK,KAAK,4BAA4B,MAAM,UAAU,CAAC;AAAA,IAC/D;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,MAAM,CAAC,KAAqB;AAAA,IAClC,OAAO,IAAI,QAAQ,MAAM,MAAK;AAAA;AAElC;AAKO,SAAS,sBAAsB,CACpC,UACA,SACQ;AAAA,EACR,MAAM,YAAY,IAAI,wBAAwB,UAAU,OAAO;AAAA,EAC/D,OAAO,UAAU,SAAS;AAAA;;;ACxnD5B;AACA;AACA;AAAA;AAsBO,MAAM,gBAAgB;AAAA,SACH,eAAe;AAAA,SACf,kBAAkB;AAAA,OAKpC,OAAM,CAAC,SAA+C;AAAA,IAC1D,QAAQ,SAAS,WAAW,UAAU,gBAAgB,oBAAoB;AAAA,IAG1E,IAAI,CAAI,eAAW,OAAO,GAAG;AAAA,MAC3B,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO,uBAAuB;AAAA,MAChC;AAAA,IACF;AAAA,IAGA,IAAI,CAAI,eAAW,SAAS,GAAG;AAAA,MAC1B,cAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC7C;AAAA,IAGA,MAAM,kBAAkB,MAAM,KAAK,kBAAkB;AAAA,IACrD,IAAI,CAAC,iBAAiB;AAAA,MACpB,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAGA,QAAQ,aAAa,mCAAmC;AAAA,IACxD,MAAM,WAAW,MAAM,KAAK,SAAS;AAAA,IACrC,IAAI,CAAC,UAAU;AAAA,MACb,QAAQ,aAAa,2DAA2D;AAAA,MAChF,MAAM,KAAK,UAAU,CAAC,SAAS,QAAQ,aAAa,IAAI,CAAC;AAAA,IAC3D;AAAA,IAGA,QAAQ,aAAa,2BAA2B;AAAA,IAEhD,IAAI;AAAA,MACF,MAAM,KAAK,iBAAiB,SAAS,WAAW,OAAO;AAAA,MACvD,QAAQ,aAAa,sCAAqC;AAAA,MAE1D,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO,iCAAiC;AAAA,MAC1C;AAAA;AAAA;AAAA,OAOU,iBAAgB,CAC5B,SACA,WACA,SACe;AAAA,IACf,MAAM,SAAc,cAAQ,OAAO;AAAA,IACnC,MAAM,cAAmB,eAAS,OAAO;AAAA,IAGzC,MAAM,iBAAiB,GAAG;AAAA,IAC1B,MAAM,cAAc,GAAG;AAAA,IAGvB,MAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA,0BAA0B;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IAEA,MAAM,KAAK,UAAU,MAAM,OAAO;AAAA;AAAA,OAM9B,kBAAiB,GAAqB;AAAA,IAC1C,IAAI;AAAA,MACF,MAAM,KAAK,WAAW,UAAU,CAAC,WAAW,GAAG,IAAI;AAAA,MACnD,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAOL,SAAQ,GAAqB;AAAA,IACjC,IAAI;AAAA,MACF,MAAM,SAAS,MAAM,KAAK,WACxB,UACA,CAAC,UAAU,MAAM,gBAAgB,YAAY,GAC7C,IACF;AAAA,MACA,OAAO,OAAO,KAAK,EAAE,SAAS;AAAA,MAC9B,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAOL,UAAS,CAAC,YAAoD;AAAA,IAClE,OAAO,IAAI,QAAQ,CAAC,UAAS,WAAW;AAAA,MACtC,MAAM,OAAO,MAAM,UAAU,CAAC,QAAQ,gBAAgB,YAAY,CAAC;AAAA,MAEnE,KAAK,OAAO,GAAG,QAAQ,CAAC,SAAS;AAAA,QAC/B,aAAa,KAAK,SAAS,EAAE,KAAK,CAAC;AAAA,OACpC;AAAA,MAED,KAAK,OAAO,GAAG,QAAQ,CAAC,SAAS;AAAA,QAC/B,aAAa,KAAK,SAAS,EAAE,KAAK,CAAC;AAAA,OACpC;AAAA,MAED,KAAK,GAAG,SAAS,CAAC,SAAS;AAAA,QACzB,IAAI,SAAS,GAAG;AAAA,UACd,SAAQ;AAAA,QACV,EAAO;AAAA,UACL,OAAO,IAAI,MAAM,oCAAoC,MAAM,CAAC;AAAA;AAAA,OAE/D;AAAA,MAED,KAAK,GAAG,SAAS,CAAC,UAAU;AAAA,QAC1B,OAAO,KAAK;AAAA,OACb;AAAA,KACF;AAAA;AAAA,OAMW,UAAS,CAAC,MAAgB,SAAkC;AAAA,IACxE,OAAO,KAAK,WAAW,UAAU,MAAM,OAAO;AAAA;AAAA,OAMlC,WAAU,CAAC,SAAiB,MAAgB,SAAkC;AAAA,IAC1F,OAAO,IAAI,QAAQ,CAAC,UAAS,WAAW;AAAA,MACtC,MAAM,OAAO,MAAM,SAAS,IAAI;AAAA,MAChC,IAAI,SAAS;AAAA,MACb,IAAI,SAAS;AAAA,MAEb,MAAM,QAAQ,WAAW,MAAM;AAAA,QAC7B,KAAK,KAAK;AAAA,QACV,OAAO,IAAI,MAAM,2BAA2B,WAAW,CAAC;AAAA,SACvD,OAAO;AAAA,MAEV,KAAK,OAAO,GAAG,QAAQ,CAAC,SAAS;AAAA,QAC/B,UAAU,KAAK,SAAS;AAAA,OACzB;AAAA,MAED,KAAK,OAAO,GAAG,QAAQ,CAAC,SAAS;AAAA,QAC/B,UAAU,KAAK,SAAS;AAAA,OACzB;AAAA,MAED,KAAK,GAAG,SAAS,CAAC,SAAS;AAAA,QACzB,aAAa,KAAK;AAAA,QAClB,IAAI,SAAS,GAAG;AAAA,UACd,SAAQ,MAAM;AAAA,QAChB,EAAO;AAAA,UACL,OAAO,IAAI,MAAM,iCAAiC,SAAS,QAAQ,CAAC;AAAA;AAAA,OAEvE;AAAA,MAED,KAAK,GAAG,SAAS,CAAC,UAAU;AAAA,QAC1B,aAAa,KAAK;AAAA,QAClB,OAAO,KAAK;AAAA,OACb;AAAA,KACF;AAAA;AAEL;AAKA,eAAsB,cAAc,CAAC,SAA+C;AAAA,EAClF,MAAM,WAAW,IAAI;AAAA,EACrB,OAAO,SAAS,OAAO,OAAO;AAAA;;;AXhOhC,IAAM,SAAS;AAAA,EACb,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AACR;AAEA,SAAS,KAAK,CAAC,MAAc,WAA2B;AAAA,EACtD,OAAO,GAAG,YAAY,OAAO,OAAO;AAAA;AAGtC,eAAe,IAAI,GAAG;AAAA,EACpB,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAAA,EACjC,MAAM,UAAU,KAAK;AAAA,EAErB,QAAQ;AAAA,SACD;AAAA,SACA;AAAA,MACH,MAAM,gBAAgB;AAAA,MACtB;AAAA,SAEG;AAAA,SACA;AAAA,MACH,MAAM,cAAc,KAAK,MAAM,CAAC,CAAC;AAAA,MACjC;AAAA,SAEG;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACH,MAAM,aAAa,KAAK,MAAM,CAAC,CAAC;AAAA,MAChC;AAAA,SAEG;AAAA,SACA;AAAA,MACH,SAAS;AAAA,MACT;AAAA;AAAA,MAGA,MAAM,gBAAgB;AAAA;AAAA;AAI5B,eAAe,eAAe,GAAG;AAAA,EAC/B,QAAQ,IAAI,MAAM;AAAA;AAAA,GAAmC,OAAO,IAAI,CAAC;AAAA,EAEjE,IAAI;AAAA,IAEF,MAAM,eAAe,aAAa;AAAA,IAClC,IAAI,CAAC,cAAc;AAAA,MACjB,QAAQ,MAAM,MAAM,kCAAiC,OAAO,GAAG,CAAC;AAAA,MAChE,QAAQ,MAAM,4CAA4C;AAAA,MAC1D,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IAEA,QAAQ,IAAI,MAAM,aAAa,gBAAgB,OAAO,IAAI,CAAC;AAAA,IAG3D,MAAM,cAAc,gBAAgB;AAAA,IACpC,IAAI,CAAC,aAAa;AAAA,MAChB,QAAQ,MAAM,MAAM,iCAAgC,OAAO,GAAG,CAAC;AAAA,MAC/D,QAAQ,MAAM,yFAAyF;AAAA,MACvG,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IAEA,QAAQ,IAAI,MAAM,eAAe,eAAe,OAAO,IAAI,CAAC;AAAA,IAG5D,MAAM,cAAiB,eAAgB,WAAK,aAAa,eAAe,CAAC;AAAA,IACzE,IAAI,aAAa;AAAA,MACf,QAAQ,IAAI,MAAM,6BAA6B,OAAO,IAAI,CAAC;AAAA,IAC7D,EAAO;AAAA,MACL,QAAQ,IAAI,MAAM,gDAAgD,OAAO,IAAI,CAAC;AAAA;AAAA,IAIhF,MAAM,WAAW,MAAM,oBAAoB;AAAA,MACzC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IAED,QAAQ,IACN,MAAM;AAAA,UAAY,OAAO,KAAK,SAAS,QAAQ,EAAE,qBAAqB,OAAO,KAAK,CACpF;AAAA,IACA,QAAQ,IAAI,MAAM,WAAU,SAAS,aAAa,0BAA0B,OAAO,KAAK,CAAC;AAAA,IACzF,QAAQ,IAAI,MAAM,WAAU,SAAS,aAAa,yBAAyB,OAAO,KAAK,CAAC;AAAA,IAGxF,QAAQ,IAAI,MAAM;AAAA;AAAA,GAA+B,OAAO,IAAI,CAAC;AAAA,IAE7D,QAAQ,IAAI,MAAM,eAAe,OAAO,IAAI,CAAC;AAAA,IAC7C,YAAY,aAAa,gBAAgB,OAAO,QAAQ,SAAS,QAAQ,GAAG;AAAA,MAC1E,QAAQ,IAAI,MAAM,SAAQ,eAAe,OAAO,IAAI,CAAC;AAAA,MACrD,QAAQ,IAAI,MAAM,WAAW,YAAY,SAAS,qBAAqB,OAAO,IAAI,CAAC;AAAA,MACnF,QAAQ,IAAI,MAAM,WAAW,YAAY,WAAW,wBAAwB,OAAO,IAAI,CAAC;AAAA,MACxF,IAAI,YAAY,YAAY;AAAA,QAC1B,QAAQ,IAAI,MAAM,WAAW,YAAY,WAAW,uBAAuB,OAAO,IAAI,CAAC;AAAA,MACzF;AAAA,IACF;AAAA,IAEA,IAAI,SAAS,aAAa,SAAS,GAAG;AAAA,MACpC,QAAQ,IAAI,MAAM;AAAA,2BAA8B,OAAO,IAAI,CAAC;AAAA,MAC5D,WAAW,eAAe,SAAS,cAAc;AAAA,QAC/C,QAAQ,IAAI,MAAM,SAAQ,YAAY,SAAS,YAAY,SAAS,OAAO,IAAI,CAAC;AAAA,MAClF;AAAA,IACF;AAAA,IAGA,QAAQ,IAAI,MAAM;AAAA;AAAA,GAAuC,OAAO,IAAI,CAAC;AAAA,IAGrE,MAAM,eAAe,OAAO,KAAK,SAAS,QAAQ;AAAA,IAElD,MAAM,MAAM,uBAAuB,UAAU;AAAA,MAC3C,wBAAwB;AAAA,MACxB,0BAA0B;AAAA,MAC1B,0BAA0B,aAAa,SAAS,IAAI,eAAe,CAAC,YAAY;AAAA,IAClF,CAAC;AAAA,IAGD,MAAM,YAAiB,WAAK,QAAQ,IAAI,GAAG,MAAM;AAAA,IACjD,IAAI,CAAI,eAAW,SAAS,GAAG;AAAA,MAC1B,cAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC7C;AAAA,IAEA,MAAM,UAAe,WAAK,WAAW,kBAAkB;AAAA,IACpD,kBAAc,SAAS,KAAK,OAAO;AAAA,IAEtC,QAAQ,IAAI,MAAM;AAAA,GAA4C,OAAO,KAAK,CAAC;AAAA,IAC3E,QAAQ,IAAI,YAAY,MAAM,SAAS,OAAO,IAAI,GAAG;AAAA,IACrD,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI,MAAM,4BAAiB,OAAO,IAAI,CAAC;AAAA,IAC/C,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI,wBAAwB;AAAA,IACpC,QAAQ,IAAI,8BAA8B;AAAA,IAC1C,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI,wBAAwB;AAAA,IACpC,QAAQ,IAAI,6BAA6B;AAAA,IACzC,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI,MAAM,8CAAmC,OAAO,IAAI,CAAC;AAAA,IACjE,QAAQ,IAAI,MAAM,0CAA0C,OAAO,IAAI,CAAC;AAAA,IACxE,QAAQ,IAAI,MAAM,WAAW,uCAAuC,OAAO,IAAI,CAAC;AAAA,IAChF,QAAQ,IAAI,MAAM,yBAAyB,OAAO,IAAI,CAAC;AAAA,IACvD,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI,MAAM,6CAAkC,OAAO,IAAI,CAAC;AAAA,IAChE,QAAQ,IAAI,MAAM,4CAA4C,OAAO,IAAI,CAAC;AAAA,IAC1E,QAAQ,IAAI,MAAM,oDAAoD,OAAO,IAAI,CAAC;AAAA,IAClF,QAAQ,IACN,MAAM,sEAAsE,OAAO,IAAI,CACzF;AAAA,IACA,QAAQ,IACN,MAAM,4EAA4E,OAAO,IAAI,CAC/F;AAAA,IACA,QAAQ,IAAI,MAAM,8DAA8D,OAAO,IAAI,CAAC;AAAA,IAC5F,QAAQ,IAAI;AAAA,IACZ,OAAO,OAAO;AAAA,IACd,QAAQ,MAAM,MAAM;AAAA,uBAAyB,OAAO,GAAG,CAAC;AAAA,IACxD,QAAQ,MAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;AAAA,IAC5E,IAAI,iBAAiB,SAAS,MAAM,OAAO;AAAA,MACzC,QAAQ,MAAM,MAAM;AAAA,eAAkB,OAAO,IAAI,CAAC;AAAA,MAClD,QAAQ,MAAM,MAAM,MAAM,OAAO,OAAO,IAAI,CAAC;AAAA,IAC/C;AAAA,IACA,QAAQ,KAAK,CAAC;AAAA;AAAA;AAIlB,eAAe,aAAa,CAAC,MAAgB;AAAA,EAC3C,QAAQ,IAAI,MAAM;AAAA;AAAA,GAAmC,OAAO,IAAI,CAAC;AAAA,EAEjE,IAAI;AAAA,IAEF,MAAM,UAAe,WAAK,QAAQ,IAAI,GAAG,QAAQ,kBAAkB;AAAA,IACnE,IAAI,CAAI,eAAW,OAAO,GAAG;AAAA,MAC3B,QAAQ,MAAM,MAAM,wBAAuB,OAAO,GAAG,CAAC;AAAA,MACtD,QAAQ,MAAM,oCAAoC;AAAA,MAClD,QAAQ,MAAM,kDAAkD;AAAA,MAChE,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IAEA,MAAM,YAAiB,WAAK,QAAQ,IAAI,GAAG,QAAQ,MAAM;AAAA,IAEzD,QAAQ,IAAI,MAAM,WAAW,WAAW,OAAO,IAAI,CAAC;AAAA,IACpD,QAAQ,IAAI,MAAM,cAAc,aAAa,OAAO,IAAI,CAAC;AAAA,IACzD,QAAQ,IAAI;AAAA,IAGZ,MAAM,SAAS,MAAM,eAAe;AAAA,MAClC;AAAA,MACA;AAAA,MACA,YAAY,CAAC,YAAY;AAAA,QACvB,QAAQ,IAAI,MAAM,MAAM,WAAW,OAAO,IAAI,CAAC;AAAA;AAAA,IAEnD,CAAC;AAAA,IAED,IAAI,CAAC,OAAO,SAAS;AAAA,MACnB,QAAQ,MAAM,MAAM;AAAA,mBAAqB,OAAO,GAAG,CAAC;AAAA,MACpD,QAAQ,MAAM,MAAM,OAAO,OAAO;AAAA,MAClC,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IAGA,QAAQ,IAAI,MAAM;AAAA;AAAA,GAA+B,OAAO,KAAK,CAAC;AAAA,IAC9D,QAAQ,IAAI,MAAM,0BAAe,OAAO,IAAI,CAAC;AAAA,IAC7C,QAAQ,IAAI,MAAM,WAAW;AAAA,IAC7B,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI,MAAM,4BAAiB,OAAO,IAAI,CAAC;AAAA,IAC/C,QAAQ,IAAI,MAAM,oCAAmC,OAAO,IAAI,CAAC;AAAA,IACjE,QAAQ,IAAI,MAAM,sCAAqC,OAAO,IAAI,CAAC;AAAA,IACnE,QAAQ,IAAI;AAAA,IACZ,OAAO,OAAO;AAAA,IACd,QAAQ,MAAM,MAAM;AAAA,mBAAqB,OAAO,GAAG,CAAC;AAAA,IACpD,QAAQ,MAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;AAAA,IAC5E,IAAI,iBAAiB,SAAS,MAAM,OAAO;AAAA,MACzC,QAAQ,MAAM,MAAM;AAAA,eAAkB,OAAO,IAAI,CAAC;AAAA,MAClD,QAAQ,MAAM,MAAM,MAAM,OAAO,OAAO,IAAI,CAAC;AAAA,IAC/C;AAAA,IACA,QAAQ,KAAK,CAAC;AAAA;AAAA;AAIlB,eAAe,YAAY,CAAC,MAAgB;AAAA,EAC1C,QAAQ,IAAI,MAAM;AAAA;AAAA,GAAwC,OAAO,IAAI,CAAC;AAAA,EAEtE,IAAI;AAAA,IACF,MAAM,UAAe,WAAK,QAAQ,IAAI,GAAG,QAAQ,MAAM;AAAA,IACvD,MAAM,YAAiB,WAAK,SAAS,YAAY;AAAA,IAEjD,IAAI,CAAI,eAAW,SAAS,GAAG;AAAA,MAC7B,QAAQ,MAAM,MAAM,2BAA0B,OAAO,GAAG,CAAC;AAAA,MACzD,QAAQ,MAAM,mCAAmC;AAAA,MACjD,QAAQ,MAAM,4DAA4D;AAAA,MAC1E,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IAGA,MAAM,UAAU,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,SAAS,CAAC;AAAA,IAC5D,MAAM,OAAO,UAAU,SAAS,QAAQ,QAAQ,WAAW,EAAE,CAAC,IAAI;AAAA,IAElE,QAAQ,IAAI,MAAM,YAAY,WAAW,OAAO,IAAI,CAAC;AAAA,IACrD,QAAQ,IAAI,MAAM,YAAY,QAAQ,OAAO,IAAI,CAAC;AAAA,IAClD,QAAQ,IAAI;AAAA,IAGZ,MAAM,YAAa,WAAmB;AAAA,IACtC,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AAAA,IAEA,MAAM,SAAS,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA,KAAK,CAAC,KAAc;AAAA,QAClB,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAAA,QAC3B,IAAI,WAAgB,WAAK,SAAS,IAAI,aAAa,MAAM,eAAe,IAAI,QAAQ;AAAA,QAEpF,IAAO,eAAW,QAAQ,KAAQ,aAAS,QAAQ,EAAE,OAAO,GAAG;AAAA,UAC7D,MAAM,OAAO,UAAU,KAAK,QAAQ;AAAA,UACpC,OAAO,IAAI,SAAS,IAAI;AAAA,QAC1B;AAAA,QAEA,OAAO,IAAI,SAAS,aAAa,EAAE,QAAQ,IAAI,CAAC;AAAA;AAAA,IAEpD,CAAC;AAAA,IAED,QAAQ,IAAI,MAAM;AAAA;AAAA,GAAwB,OAAO,KAAK,CAAC;AAAA,IACvD,QAAQ,IAAI,MAAM,MAAM,oBAAoB,QAAQ,OAAO,IAAI,GAAG;AAAA,IAClE,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI,MAAM,mCAAmC,OAAO,IAAI,CAAC;AAAA,IACjE,QAAQ,IAAI;AAAA,IAGZ,IAAI,QAAQ,aAAa,UAAU;AAAA,MACjC,MAAM,UAAU,MAAM,CAAC,QAAQ,oBAAoB,MAAM,CAAC;AAAA,IAC5D,EAAO,SAAI,QAAQ,aAAa,SAAS;AAAA,MACvC,MAAM,UAAU,MAAM,CAAC,YAAY,oBAAoB,MAAM,CAAC;AAAA,IAChE,EAAO,SAAI,QAAQ,aAAa,SAAS;AAAA,MACvC,MAAM,UAAU,MAAM,CAAC,OAAO,MAAM,SAAS,oBAAoB,MAAM,CAAC;AAAA,IAC1E;AAAA,IAGA,MAAM,IAAI,QAAQ,MAAM,EAAE;AAAA,IAC1B,OAAO,OAAO;AAAA,IACd,QAAQ,MAAM,MAAM;AAAA,4BAA8B,OAAO,GAAG,CAAC;AAAA,IAC7D,QAAQ,MAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;AAAA,IAC5E,QAAQ,KAAK,CAAC;AAAA;AAAA;AAIlB,SAAS,QAAQ,GAAG;AAAA,EAClB,QAAQ,IAAI;AAAA,EACZ,MAAM,iBAAiB,OAAO,IAAI;AAAA;AAAA,EAElC,MAAM,aAAa,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9B,MAAM,aAAa,OAAO,IAAI;AAAA;AAAA,IAE5B,MAAM,iBAAiB,OAAO,KAAK;AAAA,IACnC,MAAM,4BAA4B,OAAO,KAAK;AAAA;AAAA;AAAA,IAG9C,MAAM,0BAA0B,OAAO,KAAK;AAAA;AAAA;AAAA,IAG5C,MAAM,yBAAyB,OAAO,KAAK;AAAA,IAC3C,MAAM,qCAAqC,OAAO,KAAK;AAAA;AAAA;AAAA,IAGvD,MAAM,wBAAwB,OAAO,KAAK;AAAA;AAAA;AAAA,EAG5C,MAAM,oBAAoB,OAAO,IAAI;AAAA;AAAA,WAE5B,MAAM,iBAAiB,OAAO,KAAK;AAAA,sBACxB,MAAM,yBAAyB,OAAO,IAAI;AAAA;AAAA;AAAA,EAG9D,MAAM,wBAAwB,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOzC,MAAM,eAAe,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,CAKjC;AAAA;AAGD,SAAS,YAAY,GAAkB;AAAA,EACrC,MAAM,YAAY;AAAA,IACX,WAAK,QAAQ,IAAI,GAAG,eAAe;AAAA,IACnC,WAAK,QAAQ,IAAI,GAAG,MAAM,eAAe;AAAA,EAChD;AAAA,EAEA,WAAW,OAAO,WAAW;AAAA,IAC3B,IAAO,eAAW,GAAG,GAAG;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,eAAe,GAAkB;AAAA,EACxC,MAAM,YAAY,CAAC,QAAQ,IAAI,GAAQ,WAAK,QAAQ,IAAI,GAAG,IAAI,CAAC;AAAA,EAEhE,WAAW,OAAO,WAAW;AAAA,IAE3B,IACK,eAAgB,WAAK,KAAK,eAAe,CAAC,KAC1C,eAAgB,WAAK,KAAK,cAAc,CAAC,KACzC,eAAgB,WAAK,KAAK,eAAe,CAAC,GAC7C;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,KAAK,EAAE,MAAM,CAAC,UAAU;AAAA,EACtB,QAAQ,MAAM,MAAM;AAAA,iBAAmB,OAAO,GAAG,CAAC;AAAA,EAClD,QAAQ,MAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;AAAA,EAC5E,IAAI,iBAAiB,SAAS,MAAM,OAAO;AAAA,IACzC,QAAQ,MAAM,MAAM;AAAA,eAAkB,OAAO,IAAI,CAAC;AAAA,IAClD,QAAQ,MAAM,MAAM,MAAM,OAAO,OAAO,IAAI,CAAC;AAAA,EAC/C;AAAA,EACA,QAAQ,KAAK,CAAC;AAAA,CACf;",
|
|
20
|
+
"debugId": "5BFF854178F00CEB64756E2164756E21",
|
|
21
21
|
"names": []
|
|
22
22
|
}
|