@fairfox/polly 0.5.1 → 0.5.2

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.
@@ -2815,10 +2815,8 @@ class StructurizrDSLGenerator {
2815
2815
  const fromId = this.toId(rel.from);
2816
2816
  const toId = this.toId(rel.to);
2817
2817
  const description = this.escape(rel.description);
2818
- parts.push(` ${fromId} -> ${toId} "${description}" {`);
2819
- if (rel.technology) {
2820
- parts.push(` technology "${this.escape(rel.technology)}"`);
2821
- }
2818
+ const technology = rel.technology ? ` "${this.escape(rel.technology)}"` : "";
2819
+ parts.push(` ${fromId} -> ${toId} "${description}"${technology} {`);
2822
2820
  if (rel.tags && rel.tags.length > 0) {
2823
2821
  parts.push(` tags "${rel.tags.join('" "')}"`);
2824
2822
  }
@@ -2831,10 +2829,8 @@ class StructurizrDSLGenerator {
2831
2829
  const fromId = this.toId(rel.from);
2832
2830
  const toId = this.toId(rel.to);
2833
2831
  const description = this.escape(rel.description);
2834
- parts.push(` ${fromId} -> ${toId} "${description}" {`);
2835
- if (rel.technology) {
2836
- parts.push(` technology "${this.escape(rel.technology)}"`);
2837
- }
2832
+ const technology = rel.technology ? ` "${this.escape(rel.technology)}"` : "";
2833
+ parts.push(` ${fromId} -> ${toId} "${description}"${technology} {`);
2838
2834
  parts.push(` tags "Auto-detected"`);
2839
2835
  parts.push(` }`);
2840
2836
  }
@@ -4003,4 +3999,4 @@ Stack trace:`, COLORS.gray));
4003
3999
  process.exit(1);
4004
4000
  });
4005
4001
 
4006
- //# debugId=5BFF854178F00CEB64756E2164756E21
4002
+ //# debugId=701BDB9A33D6395464756E2164756E21
@@ -13,10 +13,10 @@
13
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
- "// 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",
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 const technology = rel.technology ? ` \"${this.escape(rel.technology)}\"` : \"\";\n\n parts.push(` ${fromId} -> ${toId} \"${description}\"${technology} {`);\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 const technology = rel.technology ? ` \"${this.escape(rel.technology)}\"` : \"\";\n\n parts.push(` ${fromId} -> ${toId} \"${description}\"${technology} {`);\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": ";;;;;;;;;;;;;;;;;;;;;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",
19
+ "mappings": "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",
20
+ "debugId": "701BDB9A33D6395464756E2164756E21",
21
21
  "names": []
22
22
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fairfox/polly",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Multi-execution-context framework with reactive state and cross-context messaging for Chrome extensions, PWAs, and worker-based applications",