@elizaos/plugin-commands 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/registry.ts", "../src/parser.ts", "../src/actions/commands-list.ts", "../src/actions/help.ts", "../src/actions/models.ts", "../src/actions/status.ts", "../src/actions/stop.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Plugin Commands - Chat command system for Eliza agents\n *\n * Provides a command system with:\n * - /help, /status, /commands for information\n * - /stop, /reset, /compact for session control\n * - /think, /verbose, /model for options\n * - /allowlist, /approve for management\n * - /tts for media\n * - /bash for tools (elevated)\n */\n\nimport {\n type IAgentRuntime,\n type Plugin,\n type Provider,\n type ProviderResult,\n logger,\n} from \"@elizaos/core\";\n\nimport {\n detectCommand,\n hasCommand,\n normalizeCommandBody,\n parseCommand,\n} from \"./parser\";\nimport {\n findCommandByAlias,\n findCommandByKey,\n getCommands,\n getCommandsByCategory,\n getEnabledCommands,\n registerCommand,\n registerCommands,\n resetCommands,\n startsWithCommand,\n unregisterCommand,\n} from \"./registry\";\nimport type {\n CommandContext,\n CommandDefinition,\n CommandDetectionResult,\n CommandResult,\n ParsedCommand,\n ResolvedCommand,\n} from \"./types\";\n\n// Import actions\nimport { commandsListAction } from \"./actions/commands-list\";\nimport { helpAction } from \"./actions/help\";\nimport { modelsAction } from \"./actions/models\";\nimport { statusAction } from \"./actions/status\";\nimport { stopAction } from \"./actions/stop\";\n\n// Re-export everything\nexport * from \"./types\";\nexport * from \"./registry\";\nexport * from \"./parser\";\n\n/**\n * Provider that exposes available commands\n */\nexport const commandRegistryProvider: Provider = {\n name: \"COMMAND_REGISTRY\",\n description: \"Available chat commands and their descriptions\",\n dynamic: true,\n\n async get(runtime, message, _state): Promise<ProviderResult> {\n const commands = getEnabledCommands();\n\n // Format command list for LLM context\n const commandList = commands.map((cmd) => {\n const auth = cmd.requiresAuth ? \" (requires auth)\" : \"\";\n return `- ${cmd.textAliases[0]}: ${cmd.description}${auth}`;\n });\n\n return {\n text: `Available commands:\\n${commandList.join(\"\\n\")}`,\n values: {\n commandCount: commands.length,\n hasElevatedCommands: commands.some((c) => c.requiresElevated),\n },\n data: { commands },\n };\n },\n};\n\n/**\n * Format command result for display\n */\nexport function formatCommandResult(result: CommandResult): string {\n if (result.error) {\n return `❌ Error: ${result.error}`;\n }\n return result.reply ?? \"✓ Command executed\";\n}\n\n/**\n * Check if a sender is authorized\n */\nexport function isAuthorized(\n context: CommandContext,\n command: CommandDefinition,\n): boolean {\n if (!command.requiresAuth) {\n return true;\n }\n return context.isAuthorized;\n}\n\n/**\n * Check if a sender has elevated permissions\n */\nexport function isElevated(\n context: CommandContext,\n command: CommandDefinition,\n): boolean {\n if (!command.requiresElevated) {\n return true;\n }\n return context.isElevated;\n}\n\n/**\n * Plugin Commands\n *\n * Provides chat commands as Eliza actions. Commands are detected\n * by their text aliases (e.g., /help, /status) and executed as actions.\n */\nexport const commandsPlugin: Plugin = {\n name: \"commands\",\n description: \"Chat command system with /help, /status, /reset, etc.\",\n\n providers: [commandRegistryProvider],\n\n actions: [\n helpAction,\n statusAction,\n stopAction,\n modelsAction,\n commandsListAction,\n ],\n\n config: {\n COMMANDS_ENABLED: \"true\",\n COMMANDS_CONFIG_ENABLED: \"false\",\n COMMANDS_DEBUG_ENABLED: \"false\",\n COMMANDS_BASH_ENABLED: \"false\",\n COMMANDS_RESTART_ENABLED: \"true\",\n },\n\n tests: [\n {\n name: \"command-detection\",\n tests: [\n {\n name: \"Detect command prefix\",\n fn: async (_runtime: IAgentRuntime) => {\n if (!hasCommand(\"/help\")) {\n throw new Error(\"Should detect /help command\");\n }\n if (!hasCommand(\"/status test\")) {\n throw new Error(\"Should detect /status with args\");\n }\n if (hasCommand(\"hello world\")) {\n throw new Error(\"Should not detect plain text as command\");\n }\n logger.success(\"Command prefix detection works correctly\");\n },\n },\n {\n name: \"Parse command with args\",\n fn: async (_runtime: IAgentRuntime) => {\n const detection = detectCommand(\"/think:high\");\n if (!detection.isCommand) {\n throw new Error(\"Should detect think command\");\n }\n if (detection.command?.key !== \"think\") {\n throw new Error(\n `Expected key 'think', got '${detection.command?.key}'`,\n );\n }\n if (detection.command?.args[0] !== \"high\") {\n throw new Error(\n `Expected arg 'high', got '${detection.command?.args[0]}'`,\n );\n }\n logger.success(\"Command argument parsing works correctly\");\n },\n },\n {\n name: \"Normalize command body\",\n fn: async (_runtime: IAgentRuntime) => {\n const normalized1 = normalizeCommandBody(\"/status: test\");\n if (normalized1 !== \"/status test\") {\n throw new Error(`Expected '/status test', got '${normalized1}'`);\n }\n\n const normalized2 = normalizeCommandBody(\"@bot /help\", \"bot\");\n if (normalized2 !== \"/help\") {\n throw new Error(`Expected '/help', got '${normalized2}'`);\n }\n\n logger.success(\"Command normalization works correctly\");\n },\n },\n {\n name: \"Find command by alias\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByAlias(\"/h\");\n if (!cmd) {\n throw new Error(\"Should find help command by /h alias\");\n }\n if (cmd.key !== \"help\") {\n throw new Error(`Expected key 'help', got '${cmd.key}'`);\n }\n logger.success(\"Command alias lookup works correctly\");\n },\n },\n {\n name: \"Find command by key\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByKey(\"status\");\n if (!cmd) {\n throw new Error(\"Should find status command by key\");\n }\n if (cmd.key !== \"status\") {\n throw new Error(`Expected key 'status', got '${cmd.key}'`);\n }\n logger.success(\"Command key lookup works correctly\");\n },\n },\n ],\n },\n {\n name: \"command-registry\",\n tests: [\n {\n name: \"Get enabled commands\",\n fn: async (_runtime: IAgentRuntime) => {\n const commands = getEnabledCommands();\n if (commands.length === 0) {\n throw new Error(\"Should have enabled commands\");\n }\n // Check some expected commands exist\n const hasHelp = commands.some((c) => c.key === \"help\");\n const hasStatus = commands.some((c) => c.key === \"status\");\n if (!hasHelp || !hasStatus) {\n throw new Error(\"Should have help and status commands\");\n }\n logger.success(\"Command registry works correctly\");\n },\n },\n {\n name: \"Register custom command\",\n fn: async (_runtime: IAgentRuntime) => {\n const customCmd: CommandDefinition = {\n key: \"test-custom\",\n description: \"Test custom command\",\n textAliases: [\"/test-custom\", \"/tc\"],\n scope: \"text\",\n };\n\n registerCommand(customCmd);\n const found = findCommandByKey(\"test-custom\");\n if (!found) {\n throw new Error(\"Should find registered custom command\");\n }\n\n unregisterCommand(\"test-custom\");\n const notFound = findCommandByKey(\"test-custom\");\n if (notFound) {\n throw new Error(\"Should not find unregistered command\");\n }\n\n logger.success(\"Custom command registration works correctly\");\n },\n },\n {\n name: \"Get commands by category\",\n fn: async (_runtime: IAgentRuntime) => {\n const statusCommands = getCommandsByCategory(\"status\");\n if (statusCommands.length === 0) {\n throw new Error(\"Should have status category commands\");\n }\n const allStatus = statusCommands.every(\n (c) => c.category === \"status\",\n );\n if (!allStatus) {\n throw new Error(\n \"All returned commands should be in status category\",\n );\n }\n logger.success(\"Command categorization works correctly\");\n },\n },\n ],\n },\n ],\n\n async init(config, runtime) {\n logger.log(\"[plugin-commands] Initializing command system\");\n\n // Configure command enablement from config\n const configEnabled = config.COMMANDS_CONFIG_ENABLED === \"true\";\n const debugEnabled = config.COMMANDS_DEBUG_ENABLED === \"true\";\n const bashEnabled = config.COMMANDS_BASH_ENABLED === \"true\";\n\n // Update command enabled states\n const configCmd = findCommandByKey(\"config\");\n if (configCmd) {\n configCmd.enabled = configEnabled;\n }\n\n const debugCmd = findCommandByKey(\"debug\");\n if (debugCmd) {\n debugCmd.enabled = debugEnabled;\n }\n\n const bashCmd = findCommandByKey(\"bash\");\n if (bashCmd) {\n bashCmd.enabled = bashEnabled;\n }\n\n const enabledCount = getEnabledCommands().length;\n logger.log(`[plugin-commands] ${enabledCount} commands enabled`);\n },\n};\n\nexport default commandsPlugin;\n",
6
+ "/**\n * Command registry - defines all available chat commands\n */\n\nimport type { CommandDefinition } from \"./types\";\n\n// Default command definitions\nconst DEFAULT_COMMANDS: CommandDefinition[] = [\n // Status commands\n {\n key: \"help\",\n nativeName: \"help\",\n description: \"Show available commands\",\n textAliases: [\"/help\", \"/h\", \"/?\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"commands\",\n nativeName: \"commands\",\n description: \"List all commands\",\n textAliases: [\"/commands\", \"/cmds\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"status\",\n nativeName: \"status\",\n description: \"Show current session status\",\n textAliases: [\"/status\", \"/s\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"context\",\n nativeName: \"context\",\n description: \"Show current context information\",\n textAliases: [\"/context\", \"/ctx\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: true,\n args: [{ name: \"mode\", description: \"Output mode (list, detail, json)\" }],\n },\n {\n key: \"whoami\",\n nativeName: \"whoami\",\n description: \"Show your identity information\",\n textAliases: [\"/whoami\", \"/who\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n\n // Session commands\n {\n key: \"stop\",\n nativeName: \"stop\",\n description: \"Stop current operation\",\n textAliases: [\"/stop\", \"/abort\", \"/cancel\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"restart\",\n nativeName: \"restart\",\n description: \"Restart the session\",\n textAliases: [\"/restart\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"reset\",\n nativeName: \"reset\",\n description: \"Reset session state\",\n textAliases: [\"/reset\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"new\",\n nativeName: \"new\",\n description: \"Start a new conversation\",\n textAliases: [\"/new\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"compact\",\n nativeName: \"compact\",\n description: \"Compact conversation history\",\n textAliases: [\"/compact\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: true,\n args: [\n { name: \"instructions\", description: \"Optional compaction instructions\" },\n ],\n },\n\n // Options commands\n {\n key: \"think\",\n nativeName: \"think\",\n description: \"Set thinking level\",\n textAliases: [\"/think\", \"/thinking\", \"/t\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [\n { name: \"level\", description: \"off, minimal, low, medium, high, xhigh\" },\n ],\n },\n {\n key: \"verbose\",\n nativeName: \"verbose\",\n description: \"Set verbose output level\",\n textAliases: [\"/verbose\", \"/v\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, full\" }],\n },\n {\n key: \"reasoning\",\n nativeName: \"reasoning\",\n description: \"Set reasoning visibility\",\n textAliases: [\"/reasoning\", \"/reason\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, stream\" }],\n },\n {\n key: \"elevated\",\n nativeName: \"elevated\",\n description: \"Set elevated permission mode\",\n textAliases: [\"/elevated\", \"/elev\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, ask, full\" }],\n requiresAuth: true,\n },\n {\n key: \"model\",\n nativeName: \"model\",\n description: \"Set or show current model\",\n textAliases: [\"/model\", \"/m\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"model\", description: \"provider/model or alias\" }],\n },\n {\n key: \"models\",\n nativeName: \"models\",\n description: \"List available models\",\n textAliases: [\"/models\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"usage\",\n nativeName: \"usage\",\n description: \"Show token usage\",\n textAliases: [\"/usage\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"queue\",\n nativeName: \"queue\",\n description: \"Set queue mode\",\n textAliases: [\"/queue\", \"/q\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [\n {\n name: \"mode\",\n description: \"steer, followup, collect, interrupt, or options\",\n },\n ],\n },\n\n // Management commands\n {\n key: \"allowlist\",\n nativeName: \"allowlist\",\n description: \"Manage sender allowlist\",\n textAliases: [\"/allowlist\", \"/allow\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"action\", description: \"list, add, remove\" },\n { name: \"value\", description: \"sender to add/remove\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"approve\",\n nativeName: \"approve\",\n description: \"Approve or deny a pending action\",\n textAliases: [\"/approve\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"id\", description: \"Approval ID\", required: true },\n { name: \"action\", description: \"allow-once, allow-always, deny\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"subagents\",\n nativeName: \"subagents\",\n description: \"Manage subagents\",\n textAliases: [\"/subagents\", \"/sub\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [{ name: \"action\", description: \"list, stop, log, info, send\" }],\n requiresAuth: true,\n },\n {\n key: \"config\",\n nativeName: \"config\",\n description: \"View or set configuration\",\n textAliases: [\"/config\", \"/cfg\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"key\", description: \"Configuration key\" },\n { name: \"value\", description: \"Value to set\" },\n ],\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n {\n key: \"debug\",\n nativeName: \"debug\",\n description: \"Debug information\",\n textAliases: [\"/debug\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n\n // Media commands\n {\n key: \"tts\",\n nativeName: \"tts\",\n description: \"Text-to-speech settings\",\n textAliases: [\"/tts\", \"/voice\"],\n scope: \"both\",\n category: \"media\",\n acceptsArgs: true,\n args: [\n {\n name: \"action\",\n description: \"on, off, status, provider, limit, audio\",\n },\n ],\n },\n\n // Tools commands\n {\n key: \"bash\",\n nativeName: \"bash\",\n description: \"Execute shell command\",\n textAliases: [\"/bash\", \"/sh\", \"/!\"],\n scope: \"text\",\n category: \"tools\",\n acceptsArgs: true,\n args: [\n {\n name: \"command\",\n description: \"Shell command to execute\",\n captureRemaining: true,\n },\n ],\n requiresAuth: true,\n requiresElevated: true,\n },\n];\n\n// Command storage\nlet commands: CommandDefinition[] = [...DEFAULT_COMMANDS];\nlet aliasMap: Map<string, CommandDefinition> | null = null;\n\n/**\n * Get all registered commands\n */\nexport function getCommands(): CommandDefinition[] {\n return [...commands];\n}\n\n/**\n * Get enabled commands\n */\nexport function getEnabledCommands(): CommandDefinition[] {\n return commands.filter((cmd) => cmd.enabled !== false);\n}\n\n/**\n * Get commands by category\n */\nexport function getCommandsByCategory(category: string): CommandDefinition[] {\n return commands.filter(\n (cmd) => cmd.category === category && cmd.enabled !== false,\n );\n}\n\n/**\n * Register a custom command\n */\nexport function registerCommand(command: CommandDefinition): void {\n // Remove existing command with same key\n commands = commands.filter((c) => c.key !== command.key);\n commands.push(command);\n aliasMap = null; // Invalidate cache\n}\n\n/**\n * Register multiple commands\n */\nexport function registerCommands(newCommands: CommandDefinition[]): void {\n for (const command of newCommands) {\n registerCommand(command);\n }\n}\n\n/**\n * Unregister a command\n */\nexport function unregisterCommand(key: string): void {\n commands = commands.filter((c) => c.key !== key);\n aliasMap = null;\n}\n\n/**\n * Reset to default commands\n */\nexport function resetCommands(): void {\n commands = [...DEFAULT_COMMANDS];\n aliasMap = null;\n}\n\n/**\n * Build and cache alias map\n */\nfunction getAliasMap(): Map<string, CommandDefinition> {\n if (aliasMap) return aliasMap;\n\n aliasMap = new Map();\n for (const command of commands) {\n if (command.enabled === false) continue;\n\n for (const alias of command.textAliases) {\n const normalized = alias.toLowerCase().trim();\n if (!aliasMap.has(normalized)) {\n aliasMap.set(normalized, command);\n }\n }\n }\n return aliasMap;\n}\n\n/**\n * Find command by alias\n */\nexport function findCommandByAlias(\n alias: string,\n): CommandDefinition | undefined {\n const map = getAliasMap();\n return map.get(alias.toLowerCase().trim());\n}\n\n/**\n * Find command by key\n */\nexport function findCommandByKey(key: string): CommandDefinition | undefined {\n return commands.find((c) => c.key === key);\n}\n\n/**\n * Check if text starts with any command alias\n */\nexport function startsWithCommand(text: string): CommandDefinition | undefined {\n const map = getAliasMap();\n const normalized = text.toLowerCase().trim();\n\n // Check exact match first\n for (const [alias, command] of map) {\n if (normalized === alias) {\n return command;\n }\n if (\n normalized.startsWith(alias + \" \") ||\n normalized.startsWith(alias + \":\")\n ) {\n return command;\n }\n }\n\n return undefined;\n}\n",
7
+ "/**\n * Command parser - detects and parses commands from message text\n */\n\nimport type {\n CommandDefinition,\n CommandDetectionResult,\n ParsedCommand,\n} from \"./types\";\nimport { findCommandByAlias, startsWithCommand } from \"./registry\";\n\nconst escapeRegExp = (value: string) =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Check if text contains a command\n */\nexport function hasCommand(text: string): boolean {\n if (!text) return false;\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"/\") && !trimmed.startsWith(\"!\")) return false;\n return Boolean(startsWithCommand(trimmed));\n}\n\n/**\n * Detect command in text\n */\nexport function detectCommand(text: string): CommandDetectionResult {\n if (!text) {\n return { isCommand: false };\n }\n\n const trimmed = text.trim();\n\n // Quick check for command prefix\n if (!trimmed.startsWith(\"/\") && !trimmed.startsWith(\"!\")) {\n return { isCommand: false };\n }\n\n const command = startsWithCommand(trimmed);\n if (!command) {\n return { isCommand: false };\n }\n\n const parsed = parseCommand(trimmed, command);\n if (!parsed) {\n return { isCommand: false };\n }\n\n return { isCommand: true, command: parsed };\n}\n\n/**\n * Parse a command from text\n */\nexport function parseCommand(\n text: string,\n definition: CommandDefinition,\n): ParsedCommand | null {\n const trimmed = text.trim();\n\n // Find the matching alias\n let matchedAlias: string | null = null;\n for (const alias of definition.textAliases) {\n const normalized = alias.toLowerCase();\n if (trimmed.toLowerCase() === normalized) {\n matchedAlias = alias;\n break;\n }\n if (\n trimmed.toLowerCase().startsWith(normalized + \" \") ||\n trimmed.toLowerCase().startsWith(normalized + \":\")\n ) {\n matchedAlias = alias;\n break;\n }\n }\n\n if (!matchedAlias) {\n return null;\n }\n\n // Extract arguments\n let rawArgs = trimmed.slice(matchedAlias.length).trim();\n\n // Handle colon separator (e.g., /think:high)\n if (rawArgs.startsWith(\":\")) {\n rawArgs = rawArgs.slice(1).trim();\n }\n\n // Parse arguments\n const args = parseArgs(rawArgs, definition);\n\n return {\n key: definition.key,\n canonical: definition.textAliases[0] ?? `/${definition.key}`,\n args,\n rawArgs: rawArgs || undefined,\n };\n}\n\n/**\n * Parse arguments based on command definition\n */\nfunction parseArgs(rawArgs: string, definition: CommandDefinition): string[] {\n if (!rawArgs || !definition.acceptsArgs) {\n return [];\n }\n\n const parsing = definition.argsParsing ?? \"positional\";\n\n if (parsing === \"none\") {\n // Return entire string as single argument\n return rawArgs ? [rawArgs] : [];\n }\n\n // Positional parsing\n const args: string[] = [];\n const argDefs = definition.args ?? [];\n\n // Split by whitespace, respecting quotes\n const tokens = tokenize(rawArgs);\n\n for (let i = 0; i < tokens.length; i++) {\n const argDef = argDefs[i];\n\n // If this arg captures remaining, join all remaining tokens\n if (argDef?.captureRemaining) {\n args.push(tokens.slice(i).join(\" \"));\n break;\n }\n\n args.push(tokens[i]);\n }\n\n return args;\n}\n\n/**\n * Tokenize argument string, respecting quotes\n */\nfunction tokenize(input: string): string[] {\n const tokens: string[] = [];\n let current = \"\";\n let inQuote = false;\n let quoteChar = \"\";\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n\n if (inQuote) {\n if (char === quoteChar) {\n inQuote = false;\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n } else {\n current += char;\n }\n } else if (char === '\"' || char === \"'\") {\n inQuote = true;\n quoteChar = char;\n } else if (/\\s/.test(char)) {\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n } else {\n current += char;\n }\n }\n\n if (current) {\n tokens.push(current);\n }\n\n return tokens;\n}\n\n/**\n * Normalize command body (handle bot mentions, colon syntax, etc.)\n */\nexport function normalizeCommandBody(\n text: string,\n botMention?: string,\n): string {\n let normalized = text.trim();\n\n // Remove bot mention prefix (e.g., \"@bot /status\" -> \"/status\")\n if (botMention) {\n const mentionPattern = new RegExp(`^@${escapeRegExp(botMention)}\\\\s*`, \"i\");\n normalized = normalized.replace(mentionPattern, \"\");\n }\n\n // Handle colon in command (e.g., \"/command: args\" -> \"/command args\")\n normalized = normalized.replace(/^(\\/\\w+):\\s*/, \"$1 \");\n\n return normalized.trim();\n}\n\n/**\n * Check if text is a command-only message (no other content)\n */\nexport function isCommandOnly(text: string): boolean {\n const detection = detectCommand(text);\n if (!detection.isCommand || !detection.command) {\n return false;\n }\n\n // If there's no rawArgs, it's command-only\n if (!detection.command.rawArgs) {\n return true;\n }\n\n // Check if rawArgs is just whitespace\n return detection.command.rawArgs.trim().length === 0;\n}\n\n/**\n * Get command and remaining text\n */\nexport function extractCommand(\n text: string,\n): { command: ParsedCommand; remainingText: string } | null {\n const detection = detectCommand(text);\n if (!detection.isCommand || !detection.command) {\n return null;\n }\n\n const { command } = detection;\n\n // For commands that don't accept args, remaining text is everything after the command\n if (!command.rawArgs) {\n return { command, remainingText: \"\" };\n }\n\n return { command, remainingText: command.rawArgs };\n}\n",
8
+ "/**\n * Commands list action\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { getEnabledCommands } from \"../registry\";\nimport { detectCommand } from \"../parser\";\n\nexport const commandsListAction: Action = {\n name: \"COMMANDS_LIST\",\n description: \"List all available commands with their aliases\",\n similes: [\"/commands\", \"/cmds\", \"list all commands\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"commands\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const commands = getEnabledCommands();\n const lines: string[] = [`**Commands (${commands.length}):**\\n`];\n\n for (const cmd of commands) {\n const aliases = cmd.textAliases.join(\", \");\n const authNote = cmd.requiresAuth ? \" [auth]\" : \"\";\n const elevatedNote = cmd.requiresElevated ? \" [elevated]\" : \"\";\n lines.push(`• **${cmd.key}**: ${aliases}${authNote}${elevatedNote}`);\n }\n\n const replyText = lines.join(\"\\n\");\n await callback?.({ text: replyText });\n\n return {\n success: true,\n text: replyText,\n data: { commandCount: commands.length },\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/commands\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Commands (15):**\\n\\n• **help**: /help, /h, /?\\n• **status**: /status, /s...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
9
+ "/**\n * Help command action\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { getCommandsByCategory, getEnabledCommands } from \"../registry\";\nimport { detectCommand } from \"../parser\";\n\n/**\n * Format command list for help display\n */\nfunction formatCommandList(\n commands: ReturnType<typeof getEnabledCommands>,\n): string {\n const lines: string[] = [\"**Available Commands:**\\n\"];\n\n const categories = [\n { key: \"status\", name: \"Status\" },\n { key: \"session\", name: \"Session\" },\n { key: \"options\", name: \"Options\" },\n { key: \"management\", name: \"Management\" },\n { key: \"media\", name: \"Media\" },\n { key: \"tools\", name: \"Tools\" },\n ];\n\n for (const cat of categories) {\n const catCommands = commands.filter((c) => c.category === cat.key);\n if (catCommands.length === 0) continue;\n\n lines.push(`\\n**${cat.name}:**`);\n for (const cmd of catCommands) {\n const aliases = cmd.textAliases.slice(0, 2).join(\", \");\n lines.push(`• ${aliases} - ${cmd.description}`);\n }\n }\n\n // Add uncategorized commands\n const uncategorized = commands.filter((c) => !c.category);\n if (uncategorized.length > 0) {\n lines.push(\"\\n**Other:**\");\n for (const cmd of uncategorized) {\n const aliases = cmd.textAliases.slice(0, 2).join(\", \");\n lines.push(`• ${aliases} - ${cmd.description}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nexport const helpAction: Action = {\n name: \"HELP_COMMAND\",\n description: \"Show available commands and their descriptions\",\n similes: [\"/help\", \"/h\", \"/?\", \"help\", \"show help\", \"list commands\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"help\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const commands = getEnabledCommands();\n const helpText = formatCommandList(commands);\n\n await callback?.({ text: helpText });\n\n return {\n success: true,\n text: helpText,\n data: { commandCount: commands.length },\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/help\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Available Commands:**\\n\\n**Status:**\\n• /help - Show available commands...\",\n },\n },\n ],\n [\n { user: \"user\", content: { text: \"/?\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Available Commands:**\\n\\n**Status:**\\n• /help - Show available commands...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
10
+ "/**\n * Models command action\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { detectCommand } from \"../parser\";\n\nexport const modelsAction: Action = {\n name: \"MODELS_COMMAND\",\n description: \"List available AI models and providers\",\n similes: [\"/models\", \"list models\", \"show models\", \"available models\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"models\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const lines: string[] = [\"**Available Models:**\\n\"];\n\n // Get models from runtime settings or default list\n const providers = [\n {\n name: \"Anthropic\",\n models: [\n \"claude-3-opus\",\n \"claude-3-sonnet\",\n \"claude-3-haiku\",\n \"claude-3.5-sonnet\",\n ],\n },\n {\n name: \"OpenAI\",\n models: [\n \"gpt-4o\",\n \"gpt-4o-mini\",\n \"gpt-4-turbo\",\n \"gpt-4\",\n \"gpt-3.5-turbo\",\n ],\n },\n {\n name: \"Google\",\n models: [\"gemini-pro\", \"gemini-pro-vision\", \"gemini-ultra\"],\n },\n ];\n\n for (const provider of providers) {\n lines.push(`\\n**${provider.name}:**`);\n for (const model of provider.models) {\n lines.push(`• ${provider.name.toLowerCase()}/${model}`);\n }\n }\n\n lines.push(\"\\n\\n_Use /model <provider/model> to switch models._\");\n\n const replyText = lines.join(\"\\n\");\n await callback?.({ text: replyText });\n\n return {\n success: true,\n text: replyText,\n data: { providers },\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/models\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Available Models:**\\n\\n**Anthropic:**\\n• anthropic/claude-3-opus\\n• anthropic/claude-3-sonnet...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
11
+ "/**\n * Status command action\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { detectCommand } from \"../parser\";\n\ninterface DirectiveModelState {\n provider?: string;\n model?: string;\n}\n\ninterface DirectiveSessionState {\n thinking: string | boolean;\n verbose: boolean | string;\n reasoning: boolean | string;\n elevated: boolean | string;\n model?: DirectiveModelState;\n}\n\ninterface DirectiveParserService {\n getSessionState?: (roomId: string) => DirectiveSessionState | undefined;\n}\n\n/**\n * Build status report\n */\nasync function buildStatusReport(\n runtime: IAgentRuntime,\n roomId: string,\n): Promise<string> {\n const lines: string[] = [\"**Session Status:**\\n\"];\n\n // Agent info\n lines.push(`**Agent:** ${runtime.agentId}`);\n lines.push(`**Room:** ${roomId}`);\n\n // Try to get directive state from plugin-directives if available\n try {\n const directiveService =\n runtime.getService<DirectiveParserService>(\"directive-parser\");\n if (directiveService) {\n const state = directiveService.getSessionState?.(roomId);\n if (state) {\n lines.push(`\\n**Directives:**`);\n lines.push(`• Thinking: ${state.thinking}`);\n lines.push(`• Verbose: ${state.verbose}`);\n lines.push(`• Reasoning: ${state.reasoning}`);\n lines.push(`• Elevated: ${state.elevated}`);\n if (state.model?.provider || state.model?.model) {\n const modelStr = state.model.provider\n ? `${state.model.provider}/${state.model.model}`\n : state.model.model;\n lines.push(`• Model: ${modelStr}`);\n }\n }\n }\n } catch {\n // Directive plugin not available\n }\n\n return lines.join(\"\\n\");\n}\n\nexport const statusAction: Action = {\n name: \"STATUS_COMMAND\",\n description: \"Show current session status, model, and settings\",\n similes: [\"/status\", \"/s\", \"status\", \"show status\", \"what's my status\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"status\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const statusText = await buildStatusReport(runtime, message.roomId);\n\n await callback?.({ text: statusText });\n\n return {\n success: true,\n text: statusText,\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/status\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Session Status:**\\n\\n**Agent:** agent-123\\n**Room:** room-456\\n\\n**Directives:**\\n• Thinking: low...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
12
+ "/**\n * Stop command action\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { detectCommand } from \"../parser\";\n\nexport const stopAction: Action = {\n name: \"STOP_COMMAND\",\n description: \"Stop current operation or abort running tasks\",\n similes: [\"/stop\", \"/abort\", \"/cancel\", \"stop\", \"abort\", \"cancel\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n const detection = detectCommand(text);\n return (\n detection.isCommand &&\n [\"stop\", \"abort\", \"cancel\"].includes(detection.command?.key ?? \"\")\n );\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n // Emit abort event\n try {\n await runtime.emitEvent?.(\"ABORT_REQUESTED\", {\n roomId: message.roomId,\n userId: message.userId,\n requestedAt: Date.now(),\n });\n } catch {\n // Event emission may not be available\n }\n\n const replyText = \"✓ Stop requested. Current operations will be cancelled.\";\n await callback?.({ text: replyText });\n\n return {\n success: true,\n text: replyText,\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/stop\" } },\n {\n user: \"assistant\",\n content: {\n text: \"✓ Stop requested. Current operations will be cancelled.\",\n },\n },\n ],\n [\n { user: \"user\", content: { text: \"/abort\" } },\n {\n user: \"assistant\",\n content: {\n text: \"✓ Stop requested. Current operations will be cancelled.\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n"
13
+ ],
14
+ "mappings": ";AAYA;AAAA;AAAA;;;ACLA,IAAM,mBAAwC;AAAA,EAE5C;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,SAAS,MAAM,IAAI;AAAA,IACjC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,aAAa,OAAO;AAAA,IAClC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,WAAW,IAAI;AAAA,IAC7B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,YAAY,MAAM;AAAA,IAChC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM,CAAC,EAAE,MAAM,QAAQ,aAAa,mCAAmC,CAAC;AAAA,EAC1E;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,WAAW,MAAM;AAAA,IAC/B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EAGA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,SAAS,UAAU,SAAS;AAAA,IAC1C,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,UAAU;AAAA,IACxB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,QAAQ;AAAA,IACtB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,MAAM;AAAA,IACpB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,UAAU;AAAA,IACxB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,gBAAgB,aAAa,mCAAmC;AAAA,IAC1E;AAAA,EACF;AAAA,EAGA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,UAAU,aAAa,IAAI;AAAA,IACzC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,SAAS,aAAa,yCAAyC;AAAA,IACzE;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,YAAY,IAAI;AAAA,IAC9B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM,CAAC,EAAE,MAAM,SAAS,aAAa,gBAAgB,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,cAAc,SAAS;AAAA,IACrC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM,CAAC,EAAE,MAAM,SAAS,aAAa,kBAAkB,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,aAAa,OAAO;AAAA,IAClC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM,CAAC,EAAE,MAAM,SAAS,aAAa,qBAAqB,CAAC;AAAA,IAC3D,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,UAAU,IAAI;AAAA,IAC5B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM,CAAC,EAAE,MAAM,SAAS,aAAa,0BAA0B,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,SAAS;AAAA,IACvB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,QAAQ;AAAA,IACtB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,UAAU,IAAI;AAAA,IAC5B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EAGA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,cAAc,QAAQ;AAAA,IACpC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,MACnD,EAAE,MAAM,SAAS,aAAa,uBAAuB;AAAA,IACvD;AAAA,IACA,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,UAAU;AAAA,IACxB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,MAAM,aAAa,eAAe,UAAU,KAAK;AAAA,MACzD,EAAE,MAAM,UAAU,aAAa,iCAAiC;AAAA,IAClE;AAAA,IACA,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,cAAc,MAAM;AAAA,IAClC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM,CAAC,EAAE,MAAM,UAAU,aAAa,8BAA8B,CAAC;AAAA,IACrE,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,WAAW,MAAM;AAAA,IAC/B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,OAAO,aAAa,oBAAoB;AAAA,MAChD,EAAE,MAAM,SAAS,aAAa,eAAe;AAAA,IAC/C;AAAA,IACA,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,QAAQ;AAAA,IACtB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EAGA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,QAAQ,QAAQ;AAAA,IAC9B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EAGA;AAAA,IACE,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAC,SAAS,OAAO,IAAI;AAAA,IAClC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,IACA,cAAc;AAAA,IACd,kBAAkB;AAAA,EACpB;AACF;AAGA,IAAI,WAAgC,CAAC,GAAG,gBAAgB;AACxD,IAAI,WAAkD;AAK/C,SAAS,WAAW,GAAwB;AAAA,EACjD,OAAO,CAAC,GAAG,QAAQ;AAAA;AAMd,SAAS,kBAAkB,GAAwB;AAAA,EACxD,OAAO,SAAS,OAAO,CAAC,QAAQ,IAAI,YAAY,KAAK;AAAA;AAMhD,SAAS,qBAAqB,CAAC,UAAuC;AAAA,EAC3E,OAAO,SAAS,OACd,CAAC,QAAQ,IAAI,aAAa,YAAY,IAAI,YAAY,KACxD;AAAA;AAMK,SAAS,eAAe,CAAC,SAAkC;AAAA,EAEhE,WAAW,SAAS,OAAO,CAAC,MAAM,EAAE,QAAQ,QAAQ,GAAG;AAAA,EACvD,SAAS,KAAK,OAAO;AAAA,EACrB,WAAW;AAAA;AAMN,SAAS,gBAAgB,CAAC,aAAwC;AAAA,EACvE,WAAW,WAAW,aAAa;AAAA,IACjC,gBAAgB,OAAO;AAAA,EACzB;AAAA;AAMK,SAAS,iBAAiB,CAAC,KAAmB;AAAA,EACnD,WAAW,SAAS,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG;AAAA,EAC/C,WAAW;AAAA;AAMN,SAAS,aAAa,GAAS;AAAA,EACpC,WAAW,CAAC,GAAG,gBAAgB;AAAA,EAC/B,WAAW;AAAA;AAMb,SAAS,WAAW,GAAmC;AAAA,EACrD,IAAI;AAAA,IAAU,OAAO;AAAA,EAErB,WAAW,IAAI;AAAA,EACf,WAAW,WAAW,UAAU;AAAA,IAC9B,IAAI,QAAQ,YAAY;AAAA,MAAO;AAAA,IAE/B,WAAW,SAAS,QAAQ,aAAa;AAAA,MACvC,MAAM,aAAa,MAAM,YAAY,EAAE,KAAK;AAAA,MAC5C,IAAI,CAAC,SAAS,IAAI,UAAU,GAAG;AAAA,QAC7B,SAAS,IAAI,YAAY,OAAO;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAMF,SAAS,kBAAkB,CAChC,OAC+B;AAAA,EAC/B,MAAM,MAAM,YAAY;AAAA,EACxB,OAAO,IAAI,IAAI,MAAM,YAAY,EAAE,KAAK,CAAC;AAAA;AAMpC,SAAS,gBAAgB,CAAC,KAA4C;AAAA,EAC3E,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG;AAAA;AAMpC,SAAS,iBAAiB,CAAC,MAA6C;AAAA,EAC7E,MAAM,MAAM,YAAY;AAAA,EACxB,MAAM,aAAa,KAAK,YAAY,EAAE,KAAK;AAAA,EAG3C,YAAY,OAAO,YAAY,KAAK;AAAA,IAClC,IAAI,eAAe,OAAO;AAAA,MACxB,OAAO;AAAA,IACT;AAAA,IACA,IACE,WAAW,WAAW,QAAQ,GAAG,KACjC,WAAW,WAAW,QAAQ,GAAG,GACjC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA;AAAA;;;ACzZF,IAAM,eAAe,CAAC,UACpB,MAAM,QAAQ,uBAAuB,MAAM;AAKtC,SAAS,UAAU,CAAC,MAAuB;AAAA,EAChD,IAAI,CAAC;AAAA,IAAM,OAAO;AAAA,EAClB,MAAM,UAAU,KAAK,KAAK;AAAA,EAC1B,IAAI,CAAC,QAAQ,WAAW,GAAG,KAAK,CAAC,QAAQ,WAAW,GAAG;AAAA,IAAG,OAAO;AAAA,EACjE,OAAO,QAAQ,kBAAkB,OAAO,CAAC;AAAA;AAMpC,SAAS,aAAa,CAAC,MAAsC;AAAA,EAClE,IAAI,CAAC,MAAM;AAAA,IACT,OAAO,EAAE,WAAW,MAAM;AAAA,EAC5B;AAAA,EAEA,MAAM,UAAU,KAAK,KAAK;AAAA,EAG1B,IAAI,CAAC,QAAQ,WAAW,GAAG,KAAK,CAAC,QAAQ,WAAW,GAAG,GAAG;AAAA,IACxD,OAAO,EAAE,WAAW,MAAM;AAAA,EAC5B;AAAA,EAEA,MAAM,UAAU,kBAAkB,OAAO;AAAA,EACzC,IAAI,CAAC,SAAS;AAAA,IACZ,OAAO,EAAE,WAAW,MAAM;AAAA,EAC5B;AAAA,EAEA,MAAM,SAAS,aAAa,SAAS,OAAO;AAAA,EAC5C,IAAI,CAAC,QAAQ;AAAA,IACX,OAAO,EAAE,WAAW,MAAM;AAAA,EAC5B;AAAA,EAEA,OAAO,EAAE,WAAW,MAAM,SAAS,OAAO;AAAA;AAMrC,SAAS,YAAY,CAC1B,MACA,YACsB;AAAA,EACtB,MAAM,UAAU,KAAK,KAAK;AAAA,EAG1B,IAAI,eAA8B;AAAA,EAClC,WAAW,SAAS,WAAW,aAAa;AAAA,IAC1C,MAAM,aAAa,MAAM,YAAY;AAAA,IACrC,IAAI,QAAQ,YAAY,MAAM,YAAY;AAAA,MACxC,eAAe;AAAA,MACf;AAAA,IACF;AAAA,IACA,IACE,QAAQ,YAAY,EAAE,WAAW,aAAa,GAAG,KACjD,QAAQ,YAAY,EAAE,WAAW,aAAa,GAAG,GACjD;AAAA,MACA,eAAe;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,cAAc;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EAGA,IAAI,UAAU,QAAQ,MAAM,aAAa,MAAM,EAAE,KAAK;AAAA,EAGtD,IAAI,QAAQ,WAAW,GAAG,GAAG;AAAA,IAC3B,UAAU,QAAQ,MAAM,CAAC,EAAE,KAAK;AAAA,EAClC;AAAA,EAGA,MAAM,OAAO,UAAU,SAAS,UAAU;AAAA,EAE1C,OAAO;AAAA,IACL,KAAK,WAAW;AAAA,IAChB,WAAW,WAAW,YAAY,MAAM,IAAI,WAAW;AAAA,IACvD;AAAA,IACA,SAAS,WAAW;AAAA,EACtB;AAAA;AAMF,SAAS,SAAS,CAAC,SAAiB,YAAyC;AAAA,EAC3E,IAAI,CAAC,WAAW,CAAC,WAAW,aAAa;AAAA,IACvC,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,UAAU,WAAW,eAAe;AAAA,EAE1C,IAAI,YAAY,QAAQ;AAAA,IAEtB,OAAO,UAAU,CAAC,OAAO,IAAI,CAAC;AAAA,EAChC;AAAA,EAGA,MAAM,OAAiB,CAAC;AAAA,EACxB,MAAM,UAAU,WAAW,QAAQ,CAAC;AAAA,EAGpC,MAAM,SAAS,SAAS,OAAO;AAAA,EAE/B,SAAS,IAAI,EAAG,IAAI,OAAO,QAAQ,KAAK;AAAA,IACtC,MAAM,SAAS,QAAQ;AAAA,IAGvB,IAAI,QAAQ,kBAAkB;AAAA,MAC5B,KAAK,KAAK,OAAO,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,KAAK,KAAK,OAAO,EAAE;AAAA,EACrB;AAAA,EAEA,OAAO;AAAA;AAMT,SAAS,QAAQ,CAAC,OAAyB;AAAA,EACzC,MAAM,SAAmB,CAAC;AAAA,EAC1B,IAAI,UAAU;AAAA,EACd,IAAI,UAAU;AAAA,EACd,IAAI,YAAY;AAAA,EAEhB,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,IACrC,MAAM,OAAO,MAAM;AAAA,IAEnB,IAAI,SAAS;AAAA,MACX,IAAI,SAAS,WAAW;AAAA,QACtB,UAAU;AAAA,QACV,IAAI,SAAS;AAAA,UACX,OAAO,KAAK,OAAO;AAAA,UACnB,UAAU;AAAA,QACZ;AAAA,MACF,EAAO;AAAA,QACL,WAAW;AAAA;AAAA,IAEf,EAAO,SAAI,SAAS,OAAO,SAAS,KAAK;AAAA,MACvC,UAAU;AAAA,MACV,YAAY;AAAA,IACd,EAAO,SAAI,KAAK,KAAK,IAAI,GAAG;AAAA,MAC1B,IAAI,SAAS;AAAA,QACX,OAAO,KAAK,OAAO;AAAA,QACnB,UAAU;AAAA,MACZ;AAAA,IACF,EAAO;AAAA,MACL,WAAW;AAAA;AAAA,EAEf;AAAA,EAEA,IAAI,SAAS;AAAA,IACX,OAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,OAAO;AAAA;AAMF,SAAS,oBAAoB,CAClC,MACA,YACQ;AAAA,EACR,IAAI,aAAa,KAAK,KAAK;AAAA,EAG3B,IAAI,YAAY;AAAA,IACd,MAAM,iBAAiB,IAAI,OAAO,KAAK,aAAa,UAAU,SAAS,GAAG;AAAA,IAC1E,aAAa,WAAW,QAAQ,gBAAgB,EAAE;AAAA,EACpD;AAAA,EAGA,aAAa,WAAW,QAAQ,gBAAgB,KAAK;AAAA,EAErD,OAAO,WAAW,KAAK;AAAA;AAMlB,SAAS,aAAa,CAAC,MAAuB;AAAA,EACnD,MAAM,YAAY,cAAc,IAAI;AAAA,EACpC,IAAI,CAAC,UAAU,aAAa,CAAC,UAAU,SAAS;AAAA,IAC9C,OAAO;AAAA,EACT;AAAA,EAGA,IAAI,CAAC,UAAU,QAAQ,SAAS;AAAA,IAC9B,OAAO;AAAA,EACT;AAAA,EAGA,OAAO,UAAU,QAAQ,QAAQ,KAAK,EAAE,WAAW;AAAA;AAM9C,SAAS,cAAc,CAC5B,MAC0D;AAAA,EAC1D,MAAM,YAAY,cAAc,IAAI;AAAA,EACpC,IAAI,CAAC,UAAU,aAAa,CAAC,UAAU,SAAS;AAAA,IAC9C,OAAO;AAAA,EACT;AAAA,EAEA,QAAQ,YAAY;AAAA,EAGpB,IAAI,CAAC,QAAQ,SAAS;AAAA,IACpB,OAAO,EAAE,SAAS,eAAe,GAAG;AAAA,EACtC;AAAA,EAEA,OAAO,EAAE,SAAS,eAAe,QAAQ,QAAQ;AAAA;;;AChO5C,IAAM,qBAA6B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,aAAa,SAAS,mBAAmB;AAAA,OAE7C,SAAQ,CAAC,SAAwB,SAAmC;AAAA,IACxE,MAAM,OAAO,QAAQ,SAAS,QAAQ;AAAA,IACtC,MAAM,YAAY,cAAc,IAAI;AAAA,IACpC,OAAO,UAAU,aAAa,UAAU,SAAS,QAAQ;AAAA;AAAA,OAGrD,QAAO,CACX,SACA,SACA,OACA,SACA,UACA;AAAA,IACA,MAAM,YAAW,mBAAmB;AAAA,IACpC,MAAM,QAAkB,CAAC,eAAe,UAAS;AAAA,CAAc;AAAA,IAE/D,WAAW,OAAO,WAAU;AAAA,MAC1B,MAAM,UAAU,IAAI,YAAY,KAAK,IAAI;AAAA,MACzC,MAAM,WAAW,IAAI,eAAe,YAAY;AAAA,MAChD,MAAM,eAAe,IAAI,mBAAmB,gBAAgB;AAAA,MAC5D,MAAM,KAAK,OAAM,IAAI,UAAU,UAAU,WAAW,cAAc;AAAA,IACpE;AAAA,IAEA,MAAM,YAAY,MAAM,KAAK;AAAA,CAAI;AAAA,IACjC,MAAM,WAAW,EAAE,MAAM,UAAU,CAAC;AAAA,IAEpC,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM,EAAE,cAAc,UAAS,OAAO;AAAA,IACxC;AAAA;AAAA,EAGF,UAAU;AAAA,IACR;AAAA,MACE,EAAE,MAAM,QAAQ,SAAS,EAAE,MAAM,YAAY,EAAE;AAAA,MAC/C;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA;AAAA;AAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC9CA,SAAS,iBAAiB,CACxB,WACQ;AAAA,EACR,MAAM,QAAkB,CAAC;AAAA,CAA2B;AAAA,EAEpD,MAAM,aAAa;AAAA,IACjB,EAAE,KAAK,UAAU,MAAM,SAAS;AAAA,IAChC,EAAE,KAAK,WAAW,MAAM,UAAU;AAAA,IAClC,EAAE,KAAK,WAAW,MAAM,UAAU;AAAA,IAClC,EAAE,KAAK,cAAc,MAAM,aAAa;AAAA,IACxC,EAAE,KAAK,SAAS,MAAM,QAAQ;AAAA,IAC9B,EAAE,KAAK,SAAS,MAAM,QAAQ;AAAA,EAChC;AAAA,EAEA,WAAW,OAAO,YAAY;AAAA,IAC5B,MAAM,cAAc,UAAS,OAAO,CAAC,MAAM,EAAE,aAAa,IAAI,GAAG;AAAA,IACjE,IAAI,YAAY,WAAW;AAAA,MAAG;AAAA,IAE9B,MAAM,KAAK;AAAA,IAAO,IAAI,SAAS;AAAA,IAC/B,WAAW,OAAO,aAAa;AAAA,MAC7B,MAAM,UAAU,IAAI,YAAY,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI;AAAA,MACrD,MAAM,KAAK,KAAI,aAAa,IAAI,aAAa;AAAA,IAC/C;AAAA,EACF;AAAA,EAGA,MAAM,gBAAgB,UAAS,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ;AAAA,EACxD,IAAI,cAAc,SAAS,GAAG;AAAA,IAC5B,MAAM,KAAK;AAAA,WAAc;AAAA,IACzB,WAAW,OAAO,eAAe;AAAA,MAC/B,MAAM,UAAU,IAAI,YAAY,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI;AAAA,MACrD,MAAM,KAAK,KAAI,aAAa,IAAI,aAAa;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAGjB,IAAM,aAAqB;AAAA,EAChC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,SAAS,MAAM,MAAM,QAAQ,aAAa,eAAe;AAAA,OAE7D,SAAQ,CAAC,SAAwB,SAAmC;AAAA,IACxE,MAAM,OAAO,QAAQ,SAAS,QAAQ;AAAA,IACtC,MAAM,YAAY,cAAc,IAAI;AAAA,IACpC,OAAO,UAAU,aAAa,UAAU,SAAS,QAAQ;AAAA;AAAA,OAGrD,QAAO,CACX,SACA,SACA,OACA,SACA,UACA;AAAA,IACA,MAAM,YAAW,mBAAmB;AAAA,IACpC,MAAM,WAAW,kBAAkB,SAAQ;AAAA,IAE3C,MAAM,WAAW,EAAE,MAAM,SAAS,CAAC;AAAA,IAEnC,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM,EAAE,cAAc,UAAS,OAAO;AAAA,IACxC;AAAA;AAAA,EAGF,UAAU;AAAA,IACR;AAAA,MACE,EAAE,MAAM,QAAQ,SAAS,EAAE,MAAM,QAAQ,EAAE;AAAA,MAC3C;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA;AAAA;AAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,EAAE,MAAM,QAAQ,SAAS,EAAE,MAAM,KAAK,EAAE;AAAA,MACxC;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA;AAAA;AAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC5FO,IAAM,eAAuB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,WAAW,eAAe,eAAe,kBAAkB;AAAA,OAE/D,SAAQ,CAAC,SAAwB,SAAmC;AAAA,IACxE,MAAM,OAAO,QAAQ,SAAS,QAAQ;AAAA,IACtC,MAAM,YAAY,cAAc,IAAI;AAAA,IACpC,OAAO,UAAU,aAAa,UAAU,SAAS,QAAQ;AAAA;AAAA,OAGrD,QAAO,CACX,SACA,SACA,OACA,SACA,UACA;AAAA,IACA,MAAM,QAAkB,CAAC;AAAA,CAAyB;AAAA,IAGlD,MAAM,YAAY;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,QAAQ,CAAC,cAAc,qBAAqB,cAAc;AAAA,MAC5D;AAAA,IACF;AAAA,IAEA,WAAW,YAAY,WAAW;AAAA,MAChC,MAAM,KAAK;AAAA,IAAO,SAAS,SAAS;AAAA,MACpC,WAAW,SAAS,SAAS,QAAQ;AAAA,QACnC,MAAM,KAAK,KAAI,SAAS,KAAK,YAAY,KAAK,OAAO;AAAA,MACvD;AAAA,IACF;AAAA,IAEA,MAAM,KAAK;AAAA;AAAA,gDAAqD;AAAA,IAEhE,MAAM,YAAY,MAAM,KAAK;AAAA,CAAI;AAAA,IACjC,MAAM,WAAW,EAAE,MAAM,UAAU,CAAC;AAAA,IAEpC,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM,EAAE,UAAU;AAAA,IACpB;AAAA;AAAA,EAGF,UAAU;AAAA,IACR;AAAA,MACE,EAAE,MAAM,QAAQ,SAAS,EAAE,MAAM,UAAU,EAAE;AAAA,MAC7C;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACzDA,eAAe,iBAAiB,CAC9B,SACA,QACiB;AAAA,EACjB,MAAM,QAAkB,CAAC;AAAA,CAAuB;AAAA,EAGhD,MAAM,KAAK,cAAc,QAAQ,SAAS;AAAA,EAC1C,MAAM,KAAK,aAAa,QAAQ;AAAA,EAGhC,IAAI;AAAA,IACF,MAAM,mBACJ,QAAQ,WAAmC,kBAAkB;AAAA,IAC/D,IAAI,kBAAkB;AAAA,MACpB,MAAM,QAAQ,iBAAiB,kBAAkB,MAAM;AAAA,MACvD,IAAI,OAAO;AAAA,QACT,MAAM,KAAK;AAAA,gBAAmB;AAAA,QAC9B,MAAM,KAAK,eAAc,MAAM,UAAU;AAAA,QACzC,MAAM,KAAK,cAAa,MAAM,SAAS;AAAA,QACvC,MAAM,KAAK,gBAAe,MAAM,WAAW;AAAA,QAC3C,MAAM,KAAK,eAAc,MAAM,UAAU;AAAA,QACzC,IAAI,MAAM,OAAO,YAAY,MAAM,OAAO,OAAO;AAAA,UAC/C,MAAM,WAAW,MAAM,MAAM,WACzB,GAAG,MAAM,MAAM,YAAY,MAAM,MAAM,UACvC,MAAM,MAAM;AAAA,UAChB,MAAM,KAAK,YAAW,UAAU;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM;AAAA,EAIR,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAGjB,IAAM,eAAuB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,WAAW,MAAM,UAAU,eAAe,kBAAkB;AAAA,OAEhE,SAAQ,CAAC,SAAwB,SAAmC;AAAA,IACxE,MAAM,OAAO,QAAQ,SAAS,QAAQ;AAAA,IACtC,MAAM,YAAY,cAAc,IAAI;AAAA,IACpC,OAAO,UAAU,aAAa,UAAU,SAAS,QAAQ;AAAA;AAAA,OAGrD,QAAO,CACX,SACA,SACA,OACA,SACA,UACA;AAAA,IACA,MAAM,aAAa,MAAM,kBAAkB,SAAS,QAAQ,MAAM;AAAA,IAElE,MAAM,WAAW,EAAE,MAAM,WAAW,CAAC;AAAA,IAErC,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA;AAAA,EAGF,UAAU;AAAA,IACR;AAAA,MACE,EAAE,MAAM,QAAQ,SAAS,EAAE,MAAM,UAAU,EAAE;AAAA,MAC7C;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AChGO,IAAM,aAAqB;AAAA,EAChC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,SAAS,UAAU,WAAW,QAAQ,SAAS,QAAQ;AAAA,OAE3D,SAAQ,CAAC,SAAwB,SAAmC;AAAA,IACxE,MAAM,OAAO,QAAQ,SAAS,QAAQ;AAAA,IACtC,MAAM,YAAY,cAAc,IAAI;AAAA,IACpC,OACE,UAAU,aACV,CAAC,QAAQ,SAAS,QAAQ,EAAE,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA;AAAA,OAI/D,QAAO,CACX,SACA,SACA,OACA,SACA,UACA;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,QAAQ,YAAY,mBAAmB;AAAA,QAC3C,QAAQ,QAAQ;AAAA,QAChB,QAAQ,QAAQ;AAAA,QAChB,aAAa,KAAK,IAAI;AAAA,MACxB,CAAC;AAAA,MACD,MAAM;AAAA,IAIR,MAAM,YAAY;AAAA,IAClB,MAAM,WAAW,EAAE,MAAM,UAAU,CAAC;AAAA,IAEpC,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA;AAAA,EAGF,UAAU;AAAA,IACR;AAAA,MACE,EAAE,MAAM,QAAQ,SAAS,EAAE,MAAM,QAAQ,EAAE;AAAA,MAC3C;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,EAAE,MAAM,QAAQ,SAAS,EAAE,MAAM,SAAS,EAAE;AAAA,MAC5C;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;APXO,IAAM,0BAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,OAEH,IAAG,CAAC,SAAS,SAAS,QAAiC;AAAA,IAC3D,MAAM,YAAW,mBAAmB;AAAA,IAGpC,MAAM,cAAc,UAAS,IAAI,CAAC,QAAQ;AAAA,MACxC,MAAM,OAAO,IAAI,eAAe,qBAAqB;AAAA,MACrD,OAAO,KAAK,IAAI,YAAY,OAAO,IAAI,cAAc;AAAA,KACtD;AAAA,IAED,OAAO;AAAA,MACL,MAAM;AAAA,EAAwB,YAAY,KAAK;AAAA,CAAI;AAAA,MACnD,QAAQ;AAAA,QACN,cAAc,UAAS;AAAA,QACvB,qBAAqB,UAAS,KAAK,CAAC,MAAM,EAAE,gBAAgB;AAAA,MAC9D;AAAA,MACA,MAAM,EAAE,oBAAS;AAAA,IACnB;AAAA;AAEJ;AAKO,SAAS,mBAAmB,CAAC,QAA+B;AAAA,EACjE,IAAI,OAAO,OAAO;AAAA,IAChB,OAAO,YAAW,OAAO;AAAA,EAC3B;AAAA,EACA,OAAO,OAAO,SAAS;AAAA;AAMlB,SAAS,YAAY,CAC1B,SACA,SACS;AAAA,EACT,IAAI,CAAC,QAAQ,cAAc;AAAA,IACzB,OAAO;AAAA,EACT;AAAA,EACA,OAAO,QAAQ;AAAA;AAMV,SAAS,UAAU,CACxB,SACA,SACS;AAAA,EACT,IAAI,CAAC,QAAQ,kBAAkB;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EACA,OAAO,QAAQ;AAAA;AASV,IAAM,iBAAyB;AAAA,EACpC,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,WAAW,CAAC,uBAAuB;AAAA,EAEnC,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,uBAAuB;AAAA,IACvB,0BAA0B;AAAA,EAC5B;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,aAA4B;AAAA,YACrC,IAAI,CAAC,WAAW,OAAO,GAAG;AAAA,cACxB,MAAM,IAAI,MAAM,6BAA6B;AAAA,YAC/C;AAAA,YACA,IAAI,CAAC,WAAW,cAAc,GAAG;AAAA,cAC/B,MAAM,IAAI,MAAM,iCAAiC;AAAA,YACnD;AAAA,YACA,IAAI,WAAW,aAAa,GAAG;AAAA,cAC7B,MAAM,IAAI,MAAM,yCAAyC;AAAA,YAC3D;AAAA,YACA,OAAO,QAAQ,0CAA0C;AAAA;AAAA,QAE7D;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,aAA4B;AAAA,YACrC,MAAM,YAAY,cAAc,aAAa;AAAA,YAC7C,IAAI,CAAC,UAAU,WAAW;AAAA,cACxB,MAAM,IAAI,MAAM,6BAA6B;AAAA,YAC/C;AAAA,YACA,IAAI,UAAU,SAAS,QAAQ,SAAS;AAAA,cACtC,MAAM,IAAI,MACR,8BAA8B,UAAU,SAAS,MACnD;AAAA,YACF;AAAA,YACA,IAAI,UAAU,SAAS,KAAK,OAAO,QAAQ;AAAA,cACzC,MAAM,IAAI,MACR,6BAA6B,UAAU,SAAS,KAAK,KACvD;AAAA,YACF;AAAA,YACA,OAAO,QAAQ,0CAA0C;AAAA;AAAA,QAE7D;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,aAA4B;AAAA,YACrC,MAAM,cAAc,qBAAqB,eAAe;AAAA,YACxD,IAAI,gBAAgB,gBAAgB;AAAA,cAClC,MAAM,IAAI,MAAM,iCAAiC,cAAc;AAAA,YACjE;AAAA,YAEA,MAAM,cAAc,qBAAqB,cAAc,KAAK;AAAA,YAC5D,IAAI,gBAAgB,SAAS;AAAA,cAC3B,MAAM,IAAI,MAAM,0BAA0B,cAAc;AAAA,YAC1D;AAAA,YAEA,OAAO,QAAQ,uCAAuC;AAAA;AAAA,QAE1D;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,aAA4B;AAAA,YACrC,MAAM,MAAM,mBAAmB,IAAI;AAAA,YACnC,IAAI,CAAC,KAAK;AAAA,cACR,MAAM,IAAI,MAAM,sCAAsC;AAAA,YACxD;AAAA,YACA,IAAI,IAAI,QAAQ,QAAQ;AAAA,cACtB,MAAM,IAAI,MAAM,6BAA6B,IAAI,MAAM;AAAA,YACzD;AAAA,YACA,OAAO,QAAQ,sCAAsC;AAAA;AAAA,QAEzD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,aAA4B;AAAA,YACrC,MAAM,MAAM,iBAAiB,QAAQ;AAAA,YACrC,IAAI,CAAC,KAAK;AAAA,cACR,MAAM,IAAI,MAAM,mCAAmC;AAAA,YACrD;AAAA,YACA,IAAI,IAAI,QAAQ,UAAU;AAAA,cACxB,MAAM,IAAI,MAAM,+BAA+B,IAAI,MAAM;AAAA,YAC3D;AAAA,YACA,OAAO,QAAQ,oCAAoC;AAAA;AAAA,QAEvD;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,aAA4B;AAAA,YACrC,MAAM,YAAW,mBAAmB;AAAA,YACpC,IAAI,UAAS,WAAW,GAAG;AAAA,cACzB,MAAM,IAAI,MAAM,8BAA8B;AAAA,YAChD;AAAA,YAEA,MAAM,UAAU,UAAS,KAAK,CAAC,MAAM,EAAE,QAAQ,MAAM;AAAA,YACrD,MAAM,YAAY,UAAS,KAAK,CAAC,MAAM,EAAE,QAAQ,QAAQ;AAAA,YACzD,IAAI,CAAC,WAAW,CAAC,WAAW;AAAA,cAC1B,MAAM,IAAI,MAAM,sCAAsC;AAAA,YACxD;AAAA,YACA,OAAO,QAAQ,kCAAkC;AAAA;AAAA,QAErD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,aAA4B;AAAA,YACrC,MAAM,YAA+B;AAAA,cACnC,KAAK;AAAA,cACL,aAAa;AAAA,cACb,aAAa,CAAC,gBAAgB,KAAK;AAAA,cACnC,OAAO;AAAA,YACT;AAAA,YAEA,gBAAgB,SAAS;AAAA,YACzB,MAAM,QAAQ,iBAAiB,aAAa;AAAA,YAC5C,IAAI,CAAC,OAAO;AAAA,cACV,MAAM,IAAI,MAAM,uCAAuC;AAAA,YACzD;AAAA,YAEA,kBAAkB,aAAa;AAAA,YAC/B,MAAM,WAAW,iBAAiB,aAAa;AAAA,YAC/C,IAAI,UAAU;AAAA,cACZ,MAAM,IAAI,MAAM,sCAAsC;AAAA,YACxD;AAAA,YAEA,OAAO,QAAQ,6CAA6C;AAAA;AAAA,QAEhE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,aAA4B;AAAA,YACrC,MAAM,iBAAiB,sBAAsB,QAAQ;AAAA,YACrD,IAAI,eAAe,WAAW,GAAG;AAAA,cAC/B,MAAM,IAAI,MAAM,sCAAsC;AAAA,YACxD;AAAA,YACA,MAAM,YAAY,eAAe,MAC/B,CAAC,MAAM,EAAE,aAAa,QACxB;AAAA,YACA,IAAI,CAAC,WAAW;AAAA,cACd,MAAM,IAAI,MACR,oDACF;AAAA,YACF;AAAA,YACA,OAAO,QAAQ,wCAAwC;AAAA;AAAA,QAE3D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,OAEM,KAAI,CAAC,QAAQ,SAAS;AAAA,IAC1B,OAAO,IAAI,+CAA+C;AAAA,IAG1D,MAAM,gBAAgB,OAAO,4BAA4B;AAAA,IACzD,MAAM,eAAe,OAAO,2BAA2B;AAAA,IACvD,MAAM,cAAc,OAAO,0BAA0B;AAAA,IAGrD,MAAM,YAAY,iBAAiB,QAAQ;AAAA,IAC3C,IAAI,WAAW;AAAA,MACb,UAAU,UAAU;AAAA,IACtB;AAAA,IAEA,MAAM,WAAW,iBAAiB,OAAO;AAAA,IACzC,IAAI,UAAU;AAAA,MACZ,SAAS,UAAU;AAAA,IACrB;AAAA,IAEA,MAAM,UAAU,iBAAiB,MAAM;AAAA,IACvC,IAAI,SAAS;AAAA,MACX,QAAQ,UAAU;AAAA,IACpB;AAAA,IAEA,MAAM,eAAe,mBAAmB,EAAE;AAAA,IAC1C,OAAO,IAAI,qBAAqB,+BAA+B;AAAA;AAEnE;AAEA,IAAe;",
15
+ "debugId": "4D1F6605A437A12664756E2164756E21",
16
+ "names": []
17
+ }