@mastra/mcp 0.13.2-alpha.0 → 0.13.3-alpha.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.
- package/CHANGELOG.md +23 -0
- package/dist/index.cjs +12 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/server/types.d.ts +13 -5
- package/dist/server/types.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/elicitationActions.ts","../src/client/promptActions.ts","../src/client/resourceActions.ts","../src/client/client.ts","../src/client/configuration.ts","../../../node_modules/.pnpm/hono@4.9.7/node_modules/hono/dist/utils/stream.js","../../../node_modules/.pnpm/hono@4.9.7/node_modules/hono/dist/helper/streaming/utils.js","../../../node_modules/.pnpm/hono@4.9.7/node_modules/hono/dist/utils/html.js","../../../node_modules/.pnpm/hono@4.9.7/node_modules/hono/dist/helper/streaming/sse.js","../../../node_modules/.pnpm/hono-mcp-server-sse-transport@0.0.7_@modelcontextprotocol+sdk@1.17.5_hono@4.9.7/node_modules/hono-mcp-server-sse-transport/build/sse.js","../src/server/promptActions.ts","../src/server/resourceActions.ts","../src/server/server.ts"],"names":["ErrorCode","MastraBase","DEFAULT_REQUEST_TIMEOUT_MSEC","Client","z","StdioClientTransport","getDefaultEnvironment","StreamableHTTPClientTransport","SSEClientTransport","asyncExitHook","gracefulExit","ListResourcesResultSchema","ReadResourceResultSchema","ListResourceTemplatesResultSchema","ListPromptsResultSchema","GetPromptResultSchema","PromptListChangedNotificationSchema","ResourceUpdatedNotificationSchema","ResourceListChangedNotificationSchema","ElicitRequestSchema","isZodType","$RefParser","convertJsonSchemaToZod","convertJsonSchemaToZodV3","error","MastraError","ErrorDomain","ErrorCategory","tools","createTool","CallToolResultSchema","equal","existingInstance","uuidv5","stream","JSONRPCMessageSchema","MCPServerBase","Server","ListToolsRequestSchema","CallToolRequestSchema","request","SetLevelRequestSchema","ListResourcesRequestSchema","ReadResourceRequestSchema","ListResourceTemplatesRequestSchema","SubscribeRequestSchema","UnsubscribeRequestSchema","ListPromptsRequestSchema","PromptSchema","GetPromptRequestSchema","RuntimeContext","makeCoreTool","run","StdioServerTransport","randomUUID","StreamableHTTPServerTransport","SSEServerTransport"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { IMastraLogger } from '@mastra/core/logger';\nimport type { ElicitRequest, ElicitResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { InternalMastraMCPClient } from './client';\n\ninterface ElicitationClientActionsConfig {\n client: InternalMastraMCPClient;\n logger: IMastraLogger;\n}\n\nexport class ElicitationClientActions {\n private readonly client: InternalMastraMCPClient;\n private readonly logger: IMastraLogger;\n\n constructor({ client, logger }: ElicitationClientActionsConfig) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Set a handler for elicitation requests.\n * @param handler The callback function to handle the elicitation request.\n */\n public onRequest(handler: (request: ElicitRequest['params']) => Promise<ElicitResult>): void {\n this.client.setElicitationRequestHandler(handler);\n }\n}\n","import type { IMastraLogger } from '@mastra/core/logger';\nimport { ErrorCode } from '@modelcontextprotocol/sdk/types.js';\nimport type { GetPromptResult, Prompt } from '@modelcontextprotocol/sdk/types.js';\nimport type { InternalMastraMCPClient } from './client';\n\ninterface PromptClientActionsConfig {\n client: InternalMastraMCPClient;\n logger: IMastraLogger;\n}\n\n/**\n * Client-side prompt actions for listing, getting, and subscribing to prompt changes.\n */\nexport class PromptClientActions {\n private readonly client: InternalMastraMCPClient;\n private readonly logger: IMastraLogger;\n\n constructor({ client, logger }: PromptClientActionsConfig) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Get all prompts from the connected MCP server.\n * @returns A list of prompts with their versions.\n */\n public async list(): Promise<Prompt[]> {\n try {\n const response = await this.client.listPrompts();\n if (response && response.prompts && Array.isArray(response.prompts)) {\n return response.prompts.map(prompt => ({ ...prompt, version: prompt.version || '' }));\n } else {\n this.logger.warn(`Prompts response from server ${this.client.name} did not have expected structure.`, {\n response,\n });\n return [];\n }\n } catch (e: any) {\n // MCP Server might not support prompts, so we return an empty array\n if (e.code === ErrorCode.MethodNotFound) {\n return [];\n }\n this.logger.error(`Error getting prompts from server ${this.client.name}`, {\n error: e instanceof Error ? e.message : String(e),\n });\n throw new Error(\n `Failed to fetch prompts from server ${this.client.name}: ${e instanceof Error ? e.stack || e.message : String(e)}`,\n );\n }\n }\n\n /**\n * Get a specific prompt.\n * @param name The name of the prompt to get.\n * @param args Optional arguments for the prompt.\n * @param version Optional version of the prompt to get.\n * @returns The prompt content.\n */\n public async get({\n name,\n args,\n version,\n }: {\n name: string;\n args?: Record<string, any>;\n version?: string;\n }): Promise<GetPromptResult> {\n return this.client.getPrompt({ name, args, version });\n }\n\n /**\n * Set a notification handler for when the list of available prompts changes.\n * @param handler The callback function to handle the notification.\n */\n public async onListChanged(handler: () => void): Promise<void> {\n this.client.setPromptListChangedNotificationHandler(handler);\n }\n}\n","import type { IMastraLogger } from '@mastra/core/logger';\nimport { ErrorCode } from '@modelcontextprotocol/sdk/types.js';\nimport type { Resource, ResourceTemplate } from '@modelcontextprotocol/sdk/types.js';\nimport type { InternalMastraMCPClient } from './client';\n\ninterface ResourceClientActionsConfig {\n client: InternalMastraMCPClient;\n logger: IMastraLogger;\n}\n\nexport class ResourceClientActions {\n private readonly client: InternalMastraMCPClient;\n private readonly logger: IMastraLogger;\n\n constructor({ client, logger }: ResourceClientActionsConfig) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Get all resources from the connected MCP server.\n * @returns A list of resources.\n */\n public async list(): Promise<Resource[]> {\n try {\n const response = await this.client.listResources();\n if (response && response.resources && Array.isArray(response.resources)) {\n return response.resources;\n } else {\n this.logger.warn(`Resources response from server ${this.client.name} did not have expected structure.`, {\n response,\n });\n return [];\n }\n } catch (e: any) {\n // MCP Server might not support resources, so we return an empty array\n if (e.code === ErrorCode.MethodNotFound) {\n return [];\n }\n this.logger.error(`Error getting resources from server ${this.client.name}`, {\n error: e instanceof Error ? e.message : String(e),\n });\n throw new Error(\n `Failed to fetch resources from server ${this.client.name}: ${e instanceof Error ? e.stack || e.message : String(e)}`,\n );\n }\n }\n\n /**\n * Get all resource templates from the connected MCP server.\n * @returns A list of resource templates.\n */\n public async templates(): Promise<ResourceTemplate[]> {\n try {\n const response = await this.client.listResourceTemplates();\n if (response && response.resourceTemplates && Array.isArray(response.resourceTemplates)) {\n return response.resourceTemplates;\n } else {\n this.logger.warn(\n `Resource templates response from server ${this.client.name} did not have expected structure.`,\n { response },\n );\n return [];\n }\n } catch (e: any) {\n // MCP Server might not support resources, so we return an empty array\n if (e.code === ErrorCode.MethodNotFound) {\n return [];\n }\n this.logger.error(`Error getting resource templates from server ${this.client.name}`, {\n error: e instanceof Error ? e.message : String(e),\n });\n throw new Error(\n `Failed to fetch resource templates from server ${this.client.name}: ${e instanceof Error ? e.stack || e.message : String(e)}`,\n );\n }\n }\n\n /**\n * Read a specific resource.\n * @param uri The URI of the resource to read.\n * @returns The resource content.\n */\n public async read(uri: string) {\n return this.client.readResource(uri);\n }\n\n /**\n * Subscribe to a specific resource.\n * @param uri The URI of the resource to subscribe to.\n */\n public async subscribe(uri: string) {\n return this.client.subscribeResource(uri);\n }\n\n /**\n * Unsubscribe from a specific resource.\n * @param uri The URI of the resource to unsubscribe from.\n */\n public async unsubscribe(uri: string) {\n return this.client.unsubscribeResource(uri);\n }\n\n /**\n * Set a notification handler for when a specific resource is updated.\n * @param handler The callback function to handle the notification.\n */\n public async onUpdated(handler: (params: { uri: string }) => void): Promise<void> {\n this.client.setResourceUpdatedNotificationHandler(handler);\n }\n\n /**\n * Set a notification handler for when the list of available resources changes.\n * @param handler The callback function to handle the notification.\n */\n public async onListChanged(handler: () => void): Promise<void> {\n this.client.setResourceListChangedNotificationHandler(handler);\n }\n}\n","import $RefParser from '@apidevtools/json-schema-ref-parser';\nimport { MastraBase } from '@mastra/core/base';\nimport type { RuntimeContext } from '@mastra/core/di';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createTool } from '@mastra/core/tools';\nimport { isZodType } from '@mastra/core/utils';\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';\nimport type { SSEClientTransportOptions } from '@modelcontextprotocol/sdk/client/sse.js';\nimport { getDefaultEnvironment, StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport type { StreamableHTTPClientTransportOptions } from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport { DEFAULT_REQUEST_TIMEOUT_MSEC } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport type {\n ClientCapabilities,\n ElicitRequest,\n ElicitResult,\n GetPromptResult,\n ListPromptsResult,\n LoggingLevel,\n} from '@modelcontextprotocol/sdk/types.js';\nimport {\n CallToolResultSchema,\n ListResourcesResultSchema,\n ReadResourceResultSchema,\n ResourceListChangedNotificationSchema,\n ResourceUpdatedNotificationSchema,\n ListResourceTemplatesResultSchema,\n ListPromptsResultSchema,\n GetPromptResultSchema,\n PromptListChangedNotificationSchema,\n ElicitRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { asyncExitHook, gracefulExit } from 'exit-hook';\nimport { z } from 'zod';\nimport { convertJsonSchemaToZod } from 'zod-from-json-schema';\nimport { convertJsonSchemaToZod as convertJsonSchemaToZodV3 } from 'zod-from-json-schema-v3';\nimport type { JSONSchema } from 'zod-from-json-schema-v3';\nimport { ElicitationClientActions } from './elicitationActions';\nimport { PromptClientActions } from './promptActions';\nimport { ResourceClientActions } from './resourceActions';\n\n// Re-export MCP SDK LoggingLevel for convenience\nexport type { LoggingLevel } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface LogMessage {\n level: LoggingLevel;\n message: string;\n timestamp: Date;\n serverName: string;\n details?: Record<string, any>;\n runtimeContext?: RuntimeContext | null;\n}\n\nexport type LogHandler = (logMessage: LogMessage) => void;\n\n// Elicitation handler type\nexport type ElicitationHandler = (request: ElicitRequest['params']) => Promise<ElicitResult>;\n\n// Base options common to all server definitions\ntype BaseServerOptions = {\n logger?: LogHandler;\n timeout?: number;\n capabilities?: ClientCapabilities;\n enableServerLogs?: boolean;\n};\n\ntype StdioServerDefinition = BaseServerOptions & {\n command: string; // 'command' is required for Stdio\n args?: string[];\n env?: Record<string, string>;\n\n url?: never; // Exclude 'url' for Stdio\n requestInit?: never; // Exclude HTTP options for Stdio\n eventSourceInit?: never; // Exclude HTTP options for Stdio\n authProvider?: never; // Exclude HTTP options for Stdio\n reconnectionOptions?: never; // Exclude Streamable HTTP specific options\n sessionId?: never; // Exclude Streamable HTTP specific options\n};\n\n// HTTP Server Definition (Streamable HTTP or SSE fallback)\ntype HttpServerDefinition = BaseServerOptions & {\n url: URL; // 'url' is required for HTTP\n\n command?: never; // Exclude 'command' for HTTP\n args?: never; // Exclude Stdio options for HTTP\n env?: never; // Exclude Stdio options for HTTP\n\n // Include relevant options from SDK HTTP transport types\n requestInit?: StreamableHTTPClientTransportOptions['requestInit'];\n eventSourceInit?: SSEClientTransportOptions['eventSourceInit'];\n authProvider?: StreamableHTTPClientTransportOptions['authProvider'];\n reconnectionOptions?: StreamableHTTPClientTransportOptions['reconnectionOptions'];\n sessionId?: StreamableHTTPClientTransportOptions['sessionId'];\n};\n\nexport type MastraMCPServerDefinition = StdioServerDefinition | HttpServerDefinition;\n\n/**\n * Convert an MCP LoggingLevel to a logger method name that exists in our logger\n */\nfunction convertLogLevelToLoggerMethod(level: LoggingLevel): 'debug' | 'info' | 'warn' | 'error' {\n switch (level) {\n case 'debug':\n return 'debug';\n case 'info':\n case 'notice':\n return 'info';\n case 'warning':\n return 'warn';\n case 'error':\n case 'critical':\n case 'alert':\n case 'emergency':\n return 'error';\n default:\n // For any other levels, default to info\n return 'info';\n }\n}\n\nexport type InternalMastraMCPClientOptions = {\n name: string;\n server: MastraMCPServerDefinition;\n capabilities?: ClientCapabilities;\n version?: string;\n timeout?: number;\n};\n\nexport class InternalMastraMCPClient extends MastraBase {\n name: string;\n private client: Client;\n private readonly timeout: number;\n private logHandler?: LogHandler;\n private enableServerLogs?: boolean;\n private serverConfig: MastraMCPServerDefinition;\n private transport?: Transport;\n private currentOperationContext: RuntimeContext | null = null;\n public readonly resources: ResourceClientActions;\n public readonly prompts: PromptClientActions;\n public readonly elicitation: ElicitationClientActions;\n constructor({\n name,\n version = '1.0.0',\n server,\n capabilities = {},\n timeout = DEFAULT_REQUEST_TIMEOUT_MSEC,\n }: InternalMastraMCPClientOptions) {\n super({ name: 'MastraMCPClient' });\n this.name = name;\n this.timeout = timeout;\n this.logHandler = server.logger;\n this.enableServerLogs = server.enableServerLogs ?? true;\n this.serverConfig = server;\n\n const clientCapabilities = { ...capabilities, elicitation: {} };\n\n this.client = new Client(\n {\n name,\n version,\n },\n {\n capabilities: clientCapabilities,\n },\n );\n\n // Set up log message capturing\n this.setupLogging();\n\n this.resources = new ResourceClientActions({ client: this, logger: this.logger });\n this.prompts = new PromptClientActions({ client: this, logger: this.logger });\n this.elicitation = new ElicitationClientActions({ client: this, logger: this.logger });\n }\n\n /**\n * Log a message at the specified level\n * @param level Log level\n * @param message Log message\n * @param details Optional additional details\n */\n private log(level: LoggingLevel, message: string, details?: Record<string, any>): void {\n // Convert MCP logging level to our logger method\n const loggerMethod = convertLogLevelToLoggerMethod(level);\n\n const msg = `[${this.name}] ${message}`;\n\n // Log to internal logger\n this.logger[loggerMethod](msg, details);\n\n // Send to registered handler if available\n if (this.logHandler) {\n this.logHandler({\n level,\n message: msg,\n timestamp: new Date(),\n serverName: this.name,\n details,\n runtimeContext: this.currentOperationContext,\n });\n }\n }\n\n private setupLogging(): void {\n if (this.enableServerLogs) {\n this.client.setNotificationHandler(\n z.object({\n method: z.literal('notifications/message'),\n params: z\n .object({\n level: z.string(),\n })\n .passthrough(),\n }),\n notification => {\n const { level, ...params } = notification.params;\n this.log(level as LoggingLevel, '[MCP SERVER LOG]', params);\n },\n );\n }\n }\n\n private async connectStdio(command: string) {\n this.log('debug', `Using Stdio transport for command: ${command}`);\n try {\n this.transport = new StdioClientTransport({\n command,\n args: this.serverConfig.args,\n env: { ...getDefaultEnvironment(), ...(this.serverConfig.env || {}) },\n });\n await this.client.connect(this.transport, { timeout: this.serverConfig.timeout ?? this.timeout });\n this.log('debug', `Successfully connected to MCP server via Stdio`);\n } catch (e) {\n this.log('error', e instanceof Error ? e.stack || e.message : JSON.stringify(e));\n throw e;\n }\n }\n\n private async connectHttp(url: URL) {\n const { requestInit, eventSourceInit, authProvider } = this.serverConfig;\n\n this.log('debug', `Attempting to connect to URL: ${url}`);\n\n // Assume /sse means sse.\n let shouldTrySSE = url.pathname.endsWith(`/sse`);\n\n if (!shouldTrySSE) {\n try {\n // Try Streamable HTTP transport first\n this.log('debug', 'Trying Streamable HTTP transport...');\n const streamableTransport = new StreamableHTTPClientTransport(url, {\n requestInit,\n reconnectionOptions: this.serverConfig.reconnectionOptions,\n authProvider: authProvider,\n });\n await this.client.connect(streamableTransport, {\n timeout:\n // this is hardcoded to 3s because the long default timeout would be extremely slow for sse backwards compat (60s)\n 3000,\n });\n this.transport = streamableTransport;\n this.log('debug', 'Successfully connected using Streamable HTTP transport.');\n } catch (error) {\n this.log('debug', `Streamable HTTP transport failed: ${error}`);\n shouldTrySSE = true;\n }\n }\n\n if (shouldTrySSE) {\n this.log('debug', 'Falling back to deprecated HTTP+SSE transport...');\n try {\n // Fallback to SSE transport\n const sseTransport = new SSEClientTransport(url, { requestInit, eventSourceInit, authProvider });\n await this.client.connect(sseTransport, { timeout: this.serverConfig.timeout ?? this.timeout });\n this.transport = sseTransport;\n this.log('debug', 'Successfully connected using deprecated HTTP+SSE transport.');\n } catch (sseError) {\n this.log(\n 'error',\n `Failed to connect with SSE transport after failing to connect to Streamable HTTP transport first. SSE error: ${sseError}`,\n );\n throw new Error('Could not connect to server with any available HTTP transport');\n }\n }\n }\n\n private isConnected: Promise<boolean> | null = null;\n\n async connect() {\n // If a connection attempt is in progress, wait for it.\n if (await this.isConnected) {\n return true;\n }\n\n // Start new connection attempt.\n this.isConnected = new Promise<boolean>(async (resolve, reject) => {\n try {\n const { command, url } = this.serverConfig;\n\n if (command) {\n await this.connectStdio(command);\n } else if (url) {\n await this.connectHttp(url);\n } else {\n throw new Error('Server configuration must include either a command or a url.');\n }\n\n resolve(true);\n\n // Set up disconnect handler to reset state.\n const originalOnClose = this.client.onclose;\n this.client.onclose = () => {\n this.log('debug', `MCP server connection closed`);\n this.isConnected = null;\n if (typeof originalOnClose === 'function') {\n originalOnClose();\n }\n };\n } catch (e) {\n this.isConnected = null;\n reject(e);\n }\n });\n\n asyncExitHook(\n async () => {\n this.log('debug', `Disconnecting MCP server during exit`);\n await this.disconnect();\n },\n { wait: 5000 },\n );\n\n process.on('SIGTERM', () => gracefulExit());\n this.log('debug', `Successfully connected to MCP server`);\n return this.isConnected;\n }\n\n /**\n * Get the current session ID if using the Streamable HTTP transport.\n * Returns undefined if not connected or not using Streamable HTTP.\n */\n get sessionId(): string | undefined {\n if (this.transport instanceof StreamableHTTPClientTransport) {\n return this.transport.sessionId;\n }\n return undefined;\n }\n\n async disconnect() {\n if (!this.transport) {\n this.log('debug', 'Disconnect called but no transport was connected.');\n return;\n }\n this.log('debug', `Disconnecting from MCP server`);\n try {\n await this.transport.close();\n this.log('debug', 'Successfully disconnected from MCP server');\n } catch (e) {\n this.log('error', 'Error during MCP server disconnect', {\n error: e instanceof Error ? e.stack : JSON.stringify(e, null, 2),\n });\n throw e;\n } finally {\n this.transport = undefined;\n this.isConnected = Promise.resolve(false);\n }\n }\n\n async listResources() {\n this.log('debug', `Requesting resources from MCP server`);\n return await this.client.request({ method: 'resources/list' }, ListResourcesResultSchema, {\n timeout: this.timeout,\n });\n }\n\n async readResource(uri: string) {\n this.log('debug', `Reading resource from MCP server: ${uri}`);\n return await this.client.request({ method: 'resources/read', params: { uri } }, ReadResourceResultSchema, {\n timeout: this.timeout,\n });\n }\n\n async subscribeResource(uri: string) {\n this.log('debug', `Subscribing to resource on MCP server: ${uri}`);\n return await this.client.request({ method: 'resources/subscribe', params: { uri } }, z.object({}), {\n timeout: this.timeout,\n });\n }\n\n async unsubscribeResource(uri: string) {\n this.log('debug', `Unsubscribing from resource on MCP server: ${uri}`);\n return await this.client.request({ method: 'resources/unsubscribe', params: { uri } }, z.object({}), {\n timeout: this.timeout,\n });\n }\n\n async listResourceTemplates() {\n this.log('debug', `Requesting resource templates from MCP server`);\n return await this.client.request({ method: 'resources/templates/list' }, ListResourceTemplatesResultSchema, {\n timeout: this.timeout,\n });\n }\n\n /**\n * Fetch the list of available prompts from the MCP server.\n */\n async listPrompts(): Promise<ListPromptsResult> {\n this.log('debug', `Requesting prompts from MCP server`);\n return await this.client.request({ method: 'prompts/list' }, ListPromptsResultSchema, {\n timeout: this.timeout,\n });\n }\n\n /**\n * Get a prompt and its dynamic messages from the server.\n * @param name The prompt name\n * @param args Arguments for the prompt\n * @param version (optional) The prompt version to retrieve\n */\n async getPrompt({\n name,\n args,\n version,\n }: {\n name: string;\n args?: Record<string, any>;\n version?: string;\n }): Promise<GetPromptResult> {\n this.log('debug', `Requesting prompt from MCP server: ${name}`);\n return await this.client.request(\n { method: 'prompts/get', params: { name, arguments: args, version } },\n GetPromptResultSchema,\n { timeout: this.timeout },\n );\n }\n\n /**\n * Register a handler to be called when the prompt list changes on the server.\n * Use this to refresh cached prompt lists in the client/UI if needed.\n */\n setPromptListChangedNotificationHandler(handler: () => void): void {\n this.log('debug', 'Setting prompt list changed notification handler');\n this.client.setNotificationHandler(PromptListChangedNotificationSchema, () => {\n handler();\n });\n }\n\n setResourceUpdatedNotificationHandler(\n handler: (params: z.infer<typeof ResourceUpdatedNotificationSchema>['params']) => void,\n ): void {\n this.log('debug', 'Setting resource updated notification handler');\n this.client.setNotificationHandler(ResourceUpdatedNotificationSchema, notification => {\n handler(notification.params);\n });\n }\n\n setResourceListChangedNotificationHandler(handler: () => void): void {\n this.log('debug', 'Setting resource list changed notification handler');\n this.client.setNotificationHandler(ResourceListChangedNotificationSchema, () => {\n handler();\n });\n }\n\n setElicitationRequestHandler(handler: ElicitationHandler): void {\n this.log('debug', 'Setting elicitation request handler');\n this.client.setRequestHandler(ElicitRequestSchema, async request => {\n this.log('debug', `Received elicitation request: ${request.params.message}`);\n return handler(request.params);\n });\n }\n\n private async convertInputSchema(\n inputSchema: Awaited<ReturnType<Client['listTools']>>['tools'][0]['inputSchema'] | JSONSchema,\n ): Promise<z.ZodType> {\n if (isZodType(inputSchema)) {\n return inputSchema;\n }\n\n try {\n await $RefParser.dereference(inputSchema);\n const jsonSchemaToConvert = ('jsonSchema' in inputSchema ? inputSchema.jsonSchema : inputSchema) as JSONSchema;\n if ('toJSONSchema' in z) {\n //@ts-expect-error - zod type issue\n return convertJsonSchemaToZod(jsonSchemaToConvert);\n } else {\n return convertJsonSchemaToZodV3(jsonSchemaToConvert);\n }\n } catch (error: unknown) {\n let errorDetails: string | undefined;\n if (error instanceof Error) {\n errorDetails = error.stack;\n } else {\n // Attempt to stringify, fallback to String()\n try {\n errorDetails = JSON.stringify(error);\n } catch {\n errorDetails = String(error);\n }\n }\n this.log('error', 'Failed to convert JSON schema to Zod schema using zodFromJsonSchema', {\n error: errorDetails,\n originalJsonSchema: inputSchema,\n });\n\n throw new MastraError({\n id: 'MCP_TOOL_INPUT_SCHEMA_CONVERSION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: { error: errorDetails ?? 'Unknown error' },\n });\n }\n }\n\n private async convertOutputSchema(\n outputSchema: Awaited<ReturnType<Client['listTools']>>['tools'][0]['outputSchema'] | JSONSchema,\n ): Promise<z.ZodType | undefined> {\n if (!outputSchema) return;\n if (isZodType(outputSchema)) {\n return outputSchema;\n }\n\n try {\n await $RefParser.dereference(outputSchema);\n const jsonSchemaToConvert = ('jsonSchema' in outputSchema ? outputSchema.jsonSchema : outputSchema) as JSONSchema;\n if ('toJSONSchema' in z) {\n //@ts-expect-error - zod type issue\n return convertJsonSchemaToZod(jsonSchemaToConvert);\n } else {\n return convertJsonSchemaToZodV3(jsonSchemaToConvert);\n }\n } catch (error: unknown) {\n let errorDetails: string | undefined;\n if (error instanceof Error) {\n errorDetails = error.stack;\n } else {\n // Attempt to stringify, fallback to String()\n try {\n errorDetails = JSON.stringify(error);\n } catch {\n errorDetails = String(error);\n }\n }\n this.log('error', 'Failed to convert JSON schema to Zod schema using zodFromJsonSchema', {\n error: errorDetails,\n originalJsonSchema: outputSchema,\n });\n\n throw new MastraError({\n id: 'MCP_TOOL_OUTPUT_SCHEMA_CONVERSION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: { error: errorDetails ?? 'Unknown error' },\n });\n }\n }\n\n async tools() {\n this.log('debug', `Requesting tools from MCP server`);\n const { tools } = await this.client.listTools({ timeout: this.timeout });\n const toolsRes: Record<string, any> = {};\n for (const tool of tools) {\n this.log('debug', `Processing tool: ${tool.name}`);\n try {\n const mastraTool = createTool({\n id: `${this.name}_${tool.name}`,\n description: tool.description || '',\n inputSchema: await this.convertInputSchema(tool.inputSchema),\n outputSchema: await this.convertOutputSchema(tool.outputSchema),\n execute: async ({ context, runtimeContext }: { context: any; runtimeContext?: RuntimeContext | null }) => {\n const previousContext = this.currentOperationContext;\n this.currentOperationContext = runtimeContext || null; // Set current context\n try {\n this.log('debug', `Executing tool: ${tool.name}`, { toolArgs: context });\n const res = await this.client.callTool(\n {\n name: tool.name,\n arguments: context,\n },\n CallToolResultSchema,\n {\n timeout: this.timeout,\n },\n );\n\n this.log('debug', `Tool executed successfully: ${tool.name}`);\n return res;\n } catch (e) {\n this.log('error', `Error calling tool: ${tool.name}`, {\n error: e instanceof Error ? e.stack : JSON.stringify(e, null, 2),\n toolArgs: context,\n });\n throw e;\n } finally {\n this.currentOperationContext = previousContext; // Restore previous context\n }\n },\n });\n\n if (tool.name) {\n toolsRes[tool.name] = mastraTool;\n }\n } catch (toolCreationError: unknown) {\n // Catch errors during tool creation itself (e.g., if createTool has issues)\n this.log('error', `Failed to create Mastra tool wrapper for MCP tool: ${tool.name}`, {\n error: toolCreationError instanceof Error ? toolCreationError.stack : String(toolCreationError),\n mcpToolDefinition: tool,\n });\n }\n }\n\n return toolsRes;\n }\n}\n\n/**\n * @deprecated MastraMCPClient is deprecated and will be removed in a future release. Please use MCPClient instead.\n */\n\nexport class MastraMCPClient extends InternalMastraMCPClient {\n constructor(args: InternalMastraMCPClientOptions) {\n super(args);\n this.logger.warn(\n '[DEPRECATION] MastraMCPClient is deprecated and will be removed in a future release. Please use MCPClient instead.',\n );\n }\n}\n","import { MastraBase } from '@mastra/core/base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { DEFAULT_REQUEST_TIMEOUT_MSEC } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type {\n ElicitRequest,\n ElicitResult,\n Prompt,\n Resource,\n ResourceTemplate,\n} from '@modelcontextprotocol/sdk/types.js';\nimport equal from 'fast-deep-equal';\nimport { v5 as uuidv5 } from 'uuid';\nimport { InternalMastraMCPClient } from './client';\nimport type { MastraMCPServerDefinition } from './client';\n\nconst mcpClientInstances = new Map<string, InstanceType<typeof MCPClient>>();\n\nexport interface MCPClientOptions {\n id?: string;\n servers: Record<string, MastraMCPServerDefinition>;\n timeout?: number; // Optional global timeout\n}\n\nexport class MCPClient extends MastraBase {\n private serverConfigs: Record<string, MastraMCPServerDefinition> = {};\n private id: string;\n private defaultTimeout: number;\n private mcpClientsById = new Map<string, InternalMastraMCPClient>();\n private disconnectPromise: Promise<void> | null = null;\n\n constructor(args: MCPClientOptions) {\n super({ name: 'MCPClient' });\n this.defaultTimeout = args.timeout ?? DEFAULT_REQUEST_TIMEOUT_MSEC;\n this.serverConfigs = args.servers;\n this.id = args.id ?? this.makeId();\n\n if (args.id) {\n this.id = args.id;\n const cached = mcpClientInstances.get(this.id);\n\n if (cached && !equal(cached.serverConfigs, args.servers)) {\n const existingInstance = mcpClientInstances.get(this.id);\n if (existingInstance) {\n void existingInstance.disconnect();\n mcpClientInstances.delete(this.id);\n }\n }\n } else {\n this.id = this.makeId();\n }\n\n // to prevent memory leaks return the same MCP server instance when configured the same way multiple times\n const existingInstance = mcpClientInstances.get(this.id);\n if (existingInstance) {\n if (!args.id) {\n throw new Error(`MCPClient was initialized multiple times with the same configuration options.\n\nThis error is intended to prevent memory leaks.\n\nTo fix this you have three different options:\n1. If you need multiple MCPClient class instances with identical server configurations, set an id when configuring: new MCPClient({ id: \"my-unique-id\" })\n2. Call \"await client.disconnect()\" after you're done using the client and before you recreate another instance with the same options. If the identical MCPClient instance is already closed at the time of re-creating it, you will not see this error.\n3. If you only need one instance of MCPClient in your app, refactor your code so it's only created one time (ex. move it out of a loop into a higher scope code block)\n`);\n }\n return existingInstance;\n }\n\n mcpClientInstances.set(this.id, this);\n this.addToInstanceCache();\n return this;\n }\n public get elicitation() {\n this.addToInstanceCache();\n return {\n onRequest: async (serverName: string, handler: (request: ElicitRequest['params']) => Promise<ElicitResult>) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.elicitation.onRequest(handler);\n } catch (err) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_ON_REQUEST_ELICITATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n err,\n );\n }\n },\n };\n }\n\n public get resources() {\n this.addToInstanceCache();\n return {\n list: async (): Promise<Record<string, Resource[]>> => {\n const allResources: Record<string, Resource[]> = {};\n for (const serverName of Object.keys(this.serverConfigs)) {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n allResources[serverName] = await internalClient.resources.list();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_CLIENT_LIST_RESOURCES_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to list resources from server:', { error: mastraError.toString() });\n }\n }\n return allResources;\n },\n templates: async (): Promise<Record<string, ResourceTemplate[]>> => {\n const allTemplates: Record<string, ResourceTemplate[]> = {};\n for (const serverName of Object.keys(this.serverConfigs)) {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n allTemplates[serverName] = await internalClient.resources.templates();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_CLIENT_LIST_RESOURCE_TEMPLATES_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to list resource templates from server:', { error: mastraError.toString() });\n }\n }\n return allTemplates;\n },\n read: async (serverName: string, uri: string) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.read(uri);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_READ_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n uri,\n },\n },\n error,\n );\n }\n },\n subscribe: async (serverName: string, uri: string) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.subscribe(uri);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_SUBSCRIBE_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n uri,\n },\n },\n error,\n );\n }\n },\n unsubscribe: async (serverName: string, uri: string) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.unsubscribe(uri);\n } catch (err) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_UNSUBSCRIBE_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n uri,\n },\n },\n err,\n );\n }\n },\n onUpdated: async (serverName: string, handler: (params: { uri: string }) => void) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.onUpdated(handler);\n } catch (err) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_ON_UPDATED_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n err,\n );\n }\n },\n onListChanged: async (serverName: string, handler: () => void) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.onListChanged(handler);\n } catch (err) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_ON_LIST_CHANGED_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n err,\n );\n }\n },\n };\n }\n\n public get prompts() {\n this.addToInstanceCache();\n return {\n list: async (): Promise<Record<string, Prompt[]>> => {\n const allPrompts: Record<string, Prompt[]> = {};\n for (const serverName of Object.keys(this.serverConfigs)) {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n allPrompts[serverName] = await internalClient.prompts.list();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_CLIENT_LIST_PROMPTS_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to list prompts from server:', { error: mastraError.toString() });\n }\n }\n return allPrompts;\n },\n get: async ({\n serverName,\n name,\n args,\n version,\n }: {\n serverName: string;\n name: string;\n args?: Record<string, any>;\n version?: string;\n }) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.prompts.get({ name, args, version });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_GET_PROMPT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n name,\n },\n },\n error,\n );\n }\n },\n onListChanged: async (serverName: string, handler: () => void) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.prompts.onListChanged(handler);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_ON_LIST_CHANGED_PROMPT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n error,\n );\n }\n },\n };\n }\n\n private addToInstanceCache() {\n if (!mcpClientInstances.has(this.id)) {\n mcpClientInstances.set(this.id, this);\n }\n }\n\n private makeId() {\n const text = JSON.stringify(this.serverConfigs).normalize('NFKC');\n const idNamespace = uuidv5(`MCPClient`, uuidv5.DNS);\n\n return uuidv5(text, idNamespace);\n }\n\n public async disconnect() {\n // Helps to prevent race condition\n // If there is already a disconnect ongoing, return the existing promise.\n if (this.disconnectPromise) {\n return this.disconnectPromise;\n }\n\n this.disconnectPromise = (async () => {\n try {\n mcpClientInstances.delete(this.id);\n\n // Disconnect all clients in the cache\n await Promise.all(Array.from(this.mcpClientsById.values()).map(client => client.disconnect()));\n this.mcpClientsById.clear();\n } finally {\n this.disconnectPromise = null;\n }\n })();\n\n return this.disconnectPromise;\n }\n\n public async getTools() {\n this.addToInstanceCache();\n const connectedTools: Record<string, any> = {}; // <- any because we don't have proper tool schemas\n\n try {\n await this.eachClientTools(async ({ serverName, tools }) => {\n for (const [toolName, toolConfig] of Object.entries(tools)) {\n connectedTools[`${serverName}_${toolName}`] = toolConfig; // namespace tool to prevent tool name conflicts between servers\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_GET_TOOLS_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n\n return connectedTools;\n }\n\n public async getToolsets() {\n this.addToInstanceCache();\n const connectedToolsets: Record<string, Record<string, any>> = {}; // <- any because we don't have proper tool schemas\n\n try {\n await this.eachClientTools(async ({ serverName, tools }) => {\n if (tools) {\n connectedToolsets[serverName] = tools;\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_GET_TOOLSETS_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n\n return connectedToolsets;\n }\n\n /**\n * @deprecated all resource actions have been moved to the this.resources object. Use this.resources.list() instead.\n */\n public async getResources() {\n return this.resources.list();\n }\n\n /**\n * Get the current session IDs for all connected MCP clients using the Streamable HTTP transport.\n * Returns an object mapping server names to their session IDs.\n */\n get sessionIds(): Record<string, string> {\n const sessionIds: Record<string, string> = {};\n for (const [serverName, client] of this.mcpClientsById.entries()) {\n if (client.sessionId) {\n sessionIds[serverName] = client.sessionId;\n }\n }\n return sessionIds;\n }\n\n private async getConnectedClient(name: string, config: MastraMCPServerDefinition): Promise<InternalMastraMCPClient> {\n if (this.disconnectPromise) {\n await this.disconnectPromise;\n }\n\n const exists = this.mcpClientsById.has(name);\n const existingClient = this.mcpClientsById.get(name);\n\n this.logger.debug(`getConnectedClient ${name} exists: ${exists}`);\n\n if (exists) {\n // This is just to satisfy Typescript since technically you could have this.mcpClientsById.set('someKey', undefined);\n // Should never reach this point basically we always create a new MastraMCPClient instance when we add to the Map.\n if (!existingClient) {\n throw new Error(`Client ${name} exists but is undefined`);\n }\n await existingClient.connect();\n return existingClient;\n }\n\n this.logger.debug(`Connecting to ${name} MCP server`);\n\n // Create client with server configuration including log handler\n const mcpClient = new InternalMastraMCPClient({\n name,\n server: config,\n timeout: config.timeout ?? this.defaultTimeout,\n });\n\n mcpClient.__setLogger(this.logger);\n\n this.mcpClientsById.set(name, mcpClient);\n\n try {\n await mcpClient.connect();\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_CLIENT_CONNECT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to connect to MCP server ${name}: ${e instanceof Error ? e.stack || e.message : String(e)}`,\n details: {\n name,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('MCPClient errored connecting to MCP server:', { error: mastraError.toString() });\n this.mcpClientsById.delete(name);\n throw mastraError;\n }\n this.logger.debug(`Connected to ${name} MCP server`);\n return mcpClient;\n }\n\n private async getConnectedClientForServer(serverName: string): Promise<InternalMastraMCPClient> {\n const serverConfig = this.serverConfigs[serverName];\n if (!serverConfig) {\n throw new Error(`Server configuration not found for name: ${serverName}`);\n }\n return this.getConnectedClient(serverName, serverConfig);\n }\n\n private async eachClientTools(\n cb: (args: {\n serverName: string;\n tools: Record<string, any>; // <- any because we don't have proper tool schemas\n client: InstanceType<typeof InternalMastraMCPClient>;\n }) => Promise<void>,\n ) {\n await Promise.all(\n Object.entries(this.serverConfigs).map(async ([serverName, serverConfig]) => {\n const client = await this.getConnectedClient(serverName, serverConfig);\n const tools = await client.tools();\n await cb({ serverName, tools, client });\n }),\n );\n }\n}\n\n/**\n * @deprecated MCPConfigurationOptions is deprecated and will be removed in a future release. Use MCPClientOptions instead.\n */\nexport interface MCPConfigurationOptions {\n id?: string;\n servers: Record<string, MastraMCPServerDefinition>;\n timeout?: number; // Optional global timeout\n}\n\n/**\n * @deprecated MCPConfiguration is deprecated and will be removed in a future release. Use MCPClient instead.\n */\nexport class MCPConfiguration extends MCPClient {\n constructor(args: MCPClientOptions) {\n super(args);\n this.logger.warn(\n `MCPConfiguration has been renamed to MCPClient and MCPConfiguration is deprecated. The API is identical but the MCPConfiguration export will be removed in the future. Update your imports now to prevent future errors.`,\n );\n }\n}\n","// src/utils/stream.ts\nvar StreamingApi = class {\n writer;\n encoder;\n writable;\n abortSubscribers = [];\n responseReadable;\n aborted = false;\n closed = false;\n constructor(writable, _readable) {\n this.writable = writable;\n this.writer = writable.getWriter();\n this.encoder = new TextEncoder();\n const reader = _readable.getReader();\n this.abortSubscribers.push(async () => {\n await reader.cancel();\n });\n this.responseReadable = new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read();\n done ? controller.close() : controller.enqueue(value);\n },\n cancel: () => {\n this.abort();\n }\n });\n }\n async write(input) {\n try {\n if (typeof input === \"string\") {\n input = this.encoder.encode(input);\n }\n await this.writer.write(input);\n } catch {\n }\n return this;\n }\n async writeln(input) {\n await this.write(input + \"\\n\");\n return this;\n }\n sleep(ms) {\n return new Promise((res) => setTimeout(res, ms));\n }\n async close() {\n try {\n await this.writer.close();\n } catch {\n }\n this.closed = true;\n }\n async pipe(body) {\n this.writer.releaseLock();\n await body.pipeTo(this.writable, { preventClose: true });\n this.writer = this.writable.getWriter();\n }\n onAbort(listener) {\n this.abortSubscribers.push(listener);\n }\n abort() {\n if (!this.aborted) {\n this.aborted = true;\n this.abortSubscribers.forEach((subscriber) => subscriber());\n }\n }\n};\nexport {\n StreamingApi\n};\n","// src/helper/streaming/utils.ts\nvar isOldBunVersion = () => {\n const version = typeof Bun !== \"undefined\" ? Bun.version : void 0;\n if (version === void 0) {\n return false;\n }\n const result = version.startsWith(\"1.1\") || version.startsWith(\"1.0\") || version.startsWith(\"0.\");\n isOldBunVersion = () => result;\n return result;\n};\nexport {\n isOldBunVersion\n};\n","// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \""\";\n break;\n case 39:\n escape = \"'\";\n break;\n case 38:\n escape = \"&\";\n break;\n case 60:\n escape = \"<\";\n break;\n case 62:\n escape = \">\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n","// src/helper/streaming/sse.ts\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"../../utils/html.js\";\nimport { StreamingApi } from \"../../utils/stream.js\";\nimport { isOldBunVersion } from \"./utils.js\";\nvar SSEStreamingApi = class extends StreamingApi {\n constructor(writable, readable) {\n super(writable, readable);\n }\n async writeSSE(message) {\n const data = await resolveCallback(message.data, HtmlEscapedCallbackPhase.Stringify, false, {});\n const dataLines = data.split(\"\\n\").map((line) => {\n return `data: ${line}`;\n }).join(\"\\n\");\n const sseData = [\n message.event && `event: ${message.event}`,\n dataLines,\n message.id && `id: ${message.id}`,\n message.retry && `retry: ${message.retry}`\n ].filter(Boolean).join(\"\\n\") + \"\\n\\n\";\n await this.write(sseData);\n }\n};\nvar run = async (stream, cb, onError) => {\n try {\n await cb(stream);\n } catch (e) {\n if (e instanceof Error && onError) {\n await onError(e, stream);\n await stream.writeSSE({\n event: \"error\",\n data: e.message\n });\n } else {\n console.error(e);\n }\n } finally {\n stream.close();\n }\n};\nvar contextStash = /* @__PURE__ */ new WeakMap();\nvar streamSSE = (c, cb, onError) => {\n const { readable, writable } = new TransformStream();\n const stream = new SSEStreamingApi(writable, readable);\n if (isOldBunVersion()) {\n c.req.raw.signal.addEventListener(\"abort\", () => {\n if (!stream.closed) {\n stream.abort();\n }\n });\n }\n contextStash.set(stream.responseReadable, c);\n c.header(\"Transfer-Encoding\", \"chunked\");\n c.header(\"Content-Type\", \"text/event-stream\");\n c.header(\"Cache-Control\", \"no-cache\");\n c.header(\"Connection\", \"keep-alive\");\n run(stream, cb, onError);\n return c.newResponse(stream.responseReadable);\n};\nexport {\n SSEStreamingApi,\n streamSSE\n};\n","import { JSONRPCMessageSchema, } from '@modelcontextprotocol/sdk/types.js';\nconst MAXIMUM_MESSAGE_SIZE = 4 * 1024 * 1024; // 4MB\nexport class SSETransport {\n messageUrl;\n stream;\n _sessionId;\n onclose;\n onerror;\n onmessage;\n /**\n * Creates a new SSETransport, which will direct the MPC client to POST messages to messageUrl\n */\n constructor(messageUrl, stream) {\n this.messageUrl = messageUrl;\n this.stream = stream;\n this._sessionId = crypto.randomUUID();\n this.stream.onAbort(() => {\n void this.close();\n });\n }\n get sessionId() {\n return this._sessionId;\n }\n // start() is automatically called after MCP Server connects to the transport\n async start() {\n if (this.stream == null) {\n throw new Error('Stream not initialized');\n }\n if (this.stream.closed) {\n throw new Error('SSE transport already closed!');\n }\n await this.stream.writeSSE({\n event: 'ping',\n data: '',\n });\n await this.stream.writeSSE({\n event: 'endpoint',\n data: `${this.messageUrl}?sessionId=${this.sessionId}`,\n });\n }\n async handlePostMessage(context) {\n if (this.stream?.closed == null) {\n return context.text('SSE connection not established', 500);\n }\n try {\n const contentType = context.req.header('content-type') || '';\n if (!contentType.includes('application/json')) {\n throw new Error(`Unsupported content-type: ${contentType}`);\n }\n // Check if the request body is too large\n const contentLength = Number.parseInt(context.req.header('content-length') || '0', 10);\n if (contentLength > MAXIMUM_MESSAGE_SIZE) {\n throw new Error(`Request body too large: ${contentLength} bytes`);\n }\n // Clone the request before reading the body to avoid stream issues\n const body = (await context.req.json());\n await this.handleMessage(body);\n return context.text('Accepted', 202);\n }\n catch (error) {\n this.onerror?.(error);\n return context.text('Error', 400);\n }\n }\n /**\n * Handle a client message, regardless of how it arrived. This can be used to inform the server of messages that arrive via a means different than HTTP POST.\n */\n async handleMessage(message) {\n let parsedMessage;\n try {\n parsedMessage = JSONRPCMessageSchema.parse(message);\n }\n catch (error) {\n this.onerror?.(error);\n throw error;\n }\n this.onmessage?.(parsedMessage);\n }\n async close() {\n if (this.stream?.closed) {\n this.stream.abort();\n }\n }\n async send(message) {\n if (this.stream?.closed) {\n throw new Error('Not connected');\n }\n await this.stream.writeSSE({\n event: 'message',\n data: JSON.stringify(message),\n });\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Server } from '@modelcontextprotocol/sdk/server/index.js';\n\ninterface ServerPromptActionsDependencies {\n getLogger: () => IMastraLogger;\n getSdkServer: () => Server;\n clearDefinedPrompts: () => void;\n}\n\nexport class ServerPromptActions {\n private readonly getLogger: () => IMastraLogger;\n private readonly getSdkServer: () => Server;\n private readonly clearDefinedPrompts: () => void;\n\n constructor(dependencies: ServerPromptActionsDependencies) {\n this.getLogger = dependencies.getLogger;\n this.getSdkServer = dependencies.getSdkServer;\n this.clearDefinedPrompts = dependencies.clearDefinedPrompts;\n }\n\n /**\n * Notifies the server that the overall list of available prompts has changed.\n * This will clear the internal cache of defined prompts and send a list_changed notification to clients.\n */\n public async notifyListChanged(): Promise<void> {\n this.getLogger().info('Prompt list change externally notified. Clearing definedPrompts and sending notification.');\n this.clearDefinedPrompts();\n try {\n await this.getSdkServer().sendPromptListChanged();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_PROMPT_LIST_CHANGED_NOTIFICATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to send prompt list changed notification',\n },\n error,\n );\n this.getLogger().error('Failed to send prompt list changed notification:', {\n error: mastraError.toString(),\n });\n this.getLogger().trackException(mastraError);\n throw mastraError;\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Server } from '@modelcontextprotocol/sdk/server/index.js';\n\ninterface ServerResourceActionsDependencies {\n getSubscriptions: () => Set<string>;\n getLogger: () => IMastraLogger;\n getSdkServer: () => Server;\n clearDefinedResources: () => void;\n clearDefinedResourceTemplates: () => void;\n}\n\nexport class ServerResourceActions {\n private readonly getSubscriptions: () => Set<string>;\n private readonly getLogger: () => IMastraLogger;\n private readonly getSdkServer: () => Server;\n private readonly clearDefinedResources: () => void;\n private readonly clearDefinedResourceTemplates: () => void;\n\n constructor(dependencies: ServerResourceActionsDependencies) {\n this.getSubscriptions = dependencies.getSubscriptions;\n this.getLogger = dependencies.getLogger;\n this.getSdkServer = dependencies.getSdkServer;\n this.clearDefinedResources = dependencies.clearDefinedResources;\n this.clearDefinedResourceTemplates = dependencies.clearDefinedResourceTemplates;\n }\n\n /**\n * Checks if any resources have been updated.\n * If the resource is subscribed to by clients, an update notification will be sent.\n */\n public async notifyUpdated({ uri }: { uri: string }): Promise<void> {\n if (this.getSubscriptions().has(uri)) {\n this.getLogger().info(`Sending notifications/resources/updated for externally notified resource: ${uri}`);\n try {\n await this.getSdkServer().sendResourceUpdated({ uri });\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_RESOURCE_UPDATED_NOTIFICATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to send resource updated notification',\n details: {\n uri,\n },\n },\n error,\n );\n this.getLogger().trackException(mastraError);\n this.getLogger().error('Failed to send resource updated notification:', {\n error: mastraError.toString(),\n });\n throw mastraError;\n }\n } else {\n this.getLogger().debug(`Resource ${uri} was updated, but no active subscriptions for it.`);\n }\n }\n\n /**\n * Notifies the server that the overall list of available resources has changed.\n * This will clear the internal cache of defined resources and send a list_changed notification to clients.\n */\n public async notifyListChanged(): Promise<void> {\n this.getLogger().info(\n 'Resource list change externally notified. Clearing definedResources and sending notification.',\n );\n this.clearDefinedResources(); // Clear cached resources\n this.clearDefinedResourceTemplates(); // Clear cached resource templates\n try {\n await this.getSdkServer().sendResourceListChanged();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_RESOURCE_LIST_CHANGED_NOTIFICATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to send resource list changed notification',\n },\n error,\n );\n this.getLogger().trackException(mastraError);\n this.getLogger().error('Failed to send resource list changed notification:', {\n error: mastraError.toString(),\n });\n throw mastraError;\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport type * as http from 'node:http';\nimport type { ToolsInput, Agent } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { MCPServerBase } from '@mastra/core/mcp';\nimport type {\n MCPServerConfig,\n ServerInfo,\n ServerDetailInfo,\n ConvertedTool,\n MCPServerHonoSSEOptions,\n MCPServerSSEOptions,\n MCPToolType,\n} from '@mastra/core/mcp';\nimport { RuntimeContext } from '@mastra/core/runtime-context';\nimport { createTool } from '@mastra/core/tools';\nimport type { InternalCoreTool } from '@mastra/core/tools';\nimport { makeCoreTool } from '@mastra/core/utils';\nimport type { Workflow } from '@mastra/core/workflows';\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { StreamableHTTPServerTransportOptions } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n ListResourceTemplatesRequestSchema,\n SubscribeRequestSchema,\n UnsubscribeRequestSchema,\n ListPromptsRequestSchema,\n GetPromptRequestSchema,\n SetLevelRequestSchema,\n PromptSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport type {\n ResourceContents,\n Resource,\n ResourceTemplate,\n ServerCapabilities,\n Prompt,\n CallToolResult,\n ElicitResult,\n ElicitRequest,\n LoggingLevel,\n} from '@modelcontextprotocol/sdk/types.js';\nimport type { SSEStreamingApi } from 'hono/streaming';\nimport { streamSSE } from 'hono/streaming';\nimport { SSETransport } from 'hono-mcp-server-sse-transport';\nimport { z } from 'zod';\nimport { ServerPromptActions } from './promptActions';\nimport { ServerResourceActions } from './resourceActions';\nimport type { MCPServerPrompts, MCPServerResources, ElicitationActions, MCPTool } from './types';\nexport class MCPServer extends MCPServerBase {\n private server: Server;\n private stdioTransport?: StdioServerTransport;\n private sseTransport?: SSEServerTransport;\n private sseHonoTransports: Map<string, SSETransport>;\n private streamableHTTPTransports: Map<string, StreamableHTTPServerTransport> = new Map();\n // Track server instances for each HTTP session\n private httpServerInstances: Map<string, Server> = new Map();\n\n private definedResources?: Resource[];\n private definedResourceTemplates?: ResourceTemplate[];\n private resourceOptions?: MCPServerResources;\n private definedPrompts?: Prompt[];\n private promptOptions?: MCPServerPrompts;\n private subscriptions: Set<string> = new Set();\n private currentLoggingLevel: LoggingLevel | undefined;\n public readonly resources: ServerResourceActions;\n public readonly prompts: ServerPromptActions;\n public readonly elicitation: ElicitationActions;\n\n /**\n * Get the current stdio transport.\n */\n public getStdioTransport(): StdioServerTransport | undefined {\n return this.stdioTransport;\n }\n\n /**\n * Get the current SSE transport.\n */\n public getSseTransport(): SSEServerTransport | undefined {\n return this.sseTransport;\n }\n\n /**\n * Get the current SSE Hono transport.\n */\n public getSseHonoTransport(sessionId: string): SSETransport | undefined {\n return this.sseHonoTransports.get(sessionId);\n }\n\n /**\n * Get the current server instance.\n */\n public getServer(): Server {\n return this.server;\n }\n\n /**\n * Construct a new MCPServer instance.\n * @param opts - Configuration options for the server, including registry metadata.\n */\n constructor(opts: MCPServerConfig & { resources?: MCPServerResources; prompts?: MCPServerPrompts }) {\n super(opts);\n this.resourceOptions = opts.resources;\n this.promptOptions = opts.prompts;\n\n const capabilities: ServerCapabilities = {\n tools: {},\n logging: { enabled: true },\n elicitation: {},\n };\n\n if (opts.resources) {\n capabilities.resources = { subscribe: true, listChanged: true };\n }\n\n if (opts.prompts) {\n capabilities.prompts = { listChanged: true };\n }\n\n this.server = new Server({ name: this.name, version: this.version }, { capabilities });\n\n this.logger.info(\n `Initialized MCPServer '${this.name}' v${this.version} (ID: ${this.id}) with tools: ${Object.keys(this.convertedTools).join(', ')} and resources. Capabilities: ${JSON.stringify(capabilities)}`,\n );\n\n this.sseHonoTransports = new Map();\n\n // Register all handlers on the main server instance\n this.registerHandlersOnServer(this.server);\n\n this.resources = new ServerResourceActions({\n getSubscriptions: () => this.subscriptions,\n getLogger: () => this.logger,\n getSdkServer: () => this.server,\n clearDefinedResources: () => {\n this.definedResources = undefined;\n },\n clearDefinedResourceTemplates: () => {\n this.definedResourceTemplates = undefined;\n },\n });\n\n this.prompts = new ServerPromptActions({\n getLogger: () => this.logger,\n getSdkServer: () => this.server,\n clearDefinedPrompts: () => {\n this.definedPrompts = undefined;\n },\n });\n\n this.elicitation = {\n sendRequest: async request => {\n return this.handleElicitationRequest(request);\n },\n };\n }\n\n /**\n * Handle an elicitation request by sending it to the connected client.\n * This method sends an elicitation/create request to the client and waits for the response.\n *\n * @param request - The elicitation request containing message and schema\n * @param serverInstance - Optional server instance to use; defaults to main server for backward compatibility\n * @returns Promise that resolves to the client's response\n */\n private async handleElicitationRequest(\n request: ElicitRequest['params'],\n serverInstance?: Server,\n ): Promise<ElicitResult> {\n this.logger.debug(`Sending elicitation request: ${request.message}`);\n\n const server = serverInstance || this.server;\n const response = await server.elicitInput(request);\n\n this.logger.debug(`Received elicitation response: ${JSON.stringify(response)}`);\n\n return response;\n }\n\n /**\n * Creates a new Server instance configured with all handlers for HTTP sessions.\n * Each HTTP client connection gets its own Server instance to avoid routing conflicts.\n */\n private createServerInstance(): Server {\n const capabilities: ServerCapabilities = {\n tools: {},\n logging: { enabled: true },\n elicitation: {},\n };\n\n if (this.resourceOptions) {\n capabilities.resources = { subscribe: true, listChanged: true };\n }\n\n if (this.promptOptions) {\n capabilities.prompts = { listChanged: true };\n }\n\n const serverInstance = new Server({ name: this.name, version: this.version }, { capabilities });\n\n // Register all handlers on the new server instance\n this.registerHandlersOnServer(serverInstance);\n\n return serverInstance;\n }\n\n /**\n * Registers all MCP handlers on a given server instance.\n * This allows us to create multiple server instances with identical functionality.\n */\n private registerHandlersOnServer(serverInstance: Server) {\n // List tools handler\n serverInstance.setRequestHandler(ListToolsRequestSchema, async () => {\n this.logger.debug('Handling ListTools request');\n return {\n tools: Object.values(this.convertedTools).map(tool => {\n const toolSpec: any = {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.parameters.jsonSchema,\n };\n if (tool.outputSchema) {\n toolSpec.outputSchema = tool.outputSchema.jsonSchema;\n }\n return toolSpec;\n }),\n };\n });\n\n // Call tool handler\n serverInstance.setRequestHandler(CallToolRequestSchema, async (request, extra) => {\n const startTime = Date.now();\n try {\n const tool = this.convertedTools[request.params.name] as MCPTool;\n if (!tool) {\n this.logger.warn(`CallTool: Unknown tool '${request.params.name}' requested.`);\n return {\n content: [{ type: 'text', text: `Unknown tool: ${request.params.name}` }],\n isError: true,\n };\n }\n\n const validation = tool.parameters.validate?.(request.params.arguments ?? {});\n if (validation && !validation.success) {\n this.logger.warn(`CallTool: Invalid tool arguments for '${request.params.name}'`, {\n errors: validation.error,\n });\n\n // Format validation errors for agent understanding\n let errorMessages = 'Validation failed';\n if ('errors' in validation.error && Array.isArray(validation.error.errors)) {\n errorMessages = validation.error.errors\n .map((e: any) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n } else if (validation.error instanceof Error) {\n errorMessages = validation.error.message;\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `Tool validation failed. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(request.params.arguments, null, 2)}`,\n },\n ],\n isError: true, // Set to true so the LLM sees the error and can self-correct\n };\n }\n if (!tool.execute) {\n this.logger.warn(`CallTool: Tool '${request.params.name}' does not have an execute function.`);\n return {\n content: [{ type: 'text', text: `Tool '${request.params.name}' does not have an execute function.` }],\n isError: true,\n };\n }\n\n // Create session-aware elicitation for this tool execution\n const sessionElicitation = {\n sendRequest: async (request: ElicitRequest['params']) => {\n return this.handleElicitationRequest(request, serverInstance);\n },\n };\n\n const result = await tool.execute(validation?.value ?? request.params.arguments ?? {}, {\n messages: [],\n toolCallId: '',\n elicitation: sessionElicitation,\n extra,\n });\n\n this.logger.debug(`CallTool: Tool '${request.params.name}' executed successfully with result:`, result);\n const duration = Date.now() - startTime;\n this.logger.info(`Tool '${request.params.name}' executed successfully in ${duration}ms.`);\n\n const response: CallToolResult = { isError: false, content: [] };\n\n if (tool.outputSchema) {\n // Handle both cases: tools that return { structuredContent: ... } and tools that return the plain object\n let structuredContent;\n if (result && typeof result === 'object' && 'structuredContent' in result) {\n // Tool returned { structuredContent: ... } format (MCP-aware tool)\n structuredContent = result.structuredContent;\n } else {\n // Tool returned plain object, wrap it automatically for backward compatibility\n structuredContent = result;\n }\n\n const outputValidation = tool.outputSchema.validate?.(structuredContent ?? {});\n if (outputValidation && !outputValidation.success) {\n this.logger.warn(`CallTool: Invalid structured content for '${request.params.name}'`, {\n errors: outputValidation.error,\n });\n throw new Error(\n `Invalid structured content for tool ${request.params.name}: ${JSON.stringify(outputValidation.error)}`,\n );\n }\n response.structuredContent = structuredContent;\n }\n\n if (response.structuredContent) {\n response.content = [{ type: 'text', text: JSON.stringify(response.structuredContent) }];\n } else {\n response.content = [\n {\n type: 'text',\n text: typeof result === 'string' ? result : JSON.stringify(result),\n },\n ];\n }\n\n return response;\n } catch (error) {\n const duration = Date.now() - startTime;\n if (error instanceof z.ZodError) {\n this.logger.warn('Invalid tool arguments', {\n tool: request.params.name,\n errors: error.errors,\n duration: `${duration}ms`,\n });\n return {\n content: [\n {\n type: 'text',\n text: `Invalid arguments: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n this.logger.error(`Tool execution failed: ${request.params.name}`, { error });\n return {\n content: [{ type: 'text', text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n };\n }\n });\n\n // Set logging level handler\n serverInstance.setRequestHandler(SetLevelRequestSchema, async request => {\n this.currentLoggingLevel = request.params.level;\n this.logger.debug(`Logging level set to: ${request.params.level}`);\n return {};\n });\n\n // Register resource handlers if resources are configured\n if (this.resourceOptions) {\n this.registerResourceHandlersOnServer(serverInstance);\n }\n\n // Register prompt handlers if prompts are configured\n if (this.promptOptions) {\n this.registerPromptHandlersOnServer(serverInstance);\n }\n }\n\n /**\n * Registers resource-related handlers on a server instance.\n */\n private registerResourceHandlersOnServer(serverInstance: Server) {\n const capturedResourceOptions = this.resourceOptions;\n if (!capturedResourceOptions) return;\n\n // List resources handler\n if (capturedResourceOptions.listResources) {\n serverInstance.setRequestHandler(ListResourcesRequestSchema, async () => {\n this.logger.debug('Handling ListResources request');\n if (this.definedResources) {\n return { resources: this.definedResources };\n } else {\n try {\n const resources = await capturedResourceOptions.listResources!();\n this.definedResources = resources;\n this.logger.debug(`Fetched and cached ${this.definedResources.length} resources.`);\n return { resources: this.definedResources };\n } catch (error) {\n this.logger.error('Error fetching resources via listResources():', { error });\n throw error;\n }\n }\n });\n }\n\n // Read resource handler\n if (capturedResourceOptions.getResourceContent) {\n serverInstance.setRequestHandler(ReadResourceRequestSchema, async request => {\n const startTime = Date.now();\n const uri = request.params.uri;\n this.logger.debug(`Handling ReadResource request for URI: ${uri}`);\n\n if (!this.definedResources) {\n const resources = await this.resourceOptions?.listResources?.();\n if (!resources) throw new Error('Failed to load resources');\n this.definedResources = resources;\n }\n\n const resource = this.definedResources?.find(r => r.uri === uri);\n\n if (!resource) {\n this.logger.warn(`ReadResource: Unknown resource URI '${uri}' requested.`);\n throw new Error(`Resource not found: ${uri}`);\n }\n\n try {\n const resourcesOrResourceContent = await capturedResourceOptions.getResourceContent({ uri });\n const resourcesContent = Array.isArray(resourcesOrResourceContent)\n ? resourcesOrResourceContent\n : [resourcesOrResourceContent];\n const contents: ResourceContents[] = resourcesContent.map(resourceContent => {\n const contentItem: ResourceContents = {\n uri: resource.uri,\n mimeType: resource.mimeType,\n };\n if ('text' in resourceContent) {\n contentItem.text = resourceContent.text;\n }\n\n if ('blob' in resourceContent) {\n contentItem.blob = resourceContent.blob;\n }\n\n return contentItem;\n });\n const duration = Date.now() - startTime;\n this.logger.info(`Resource '${uri}' read successfully in ${duration}ms.`);\n return {\n contents,\n };\n } catch (error) {\n const duration = Date.now() - startTime;\n this.logger.error(`Failed to get content for resource URI '${uri}' in ${duration}ms`, { error });\n throw error;\n }\n });\n }\n\n // Resource templates handler\n if (capturedResourceOptions.resourceTemplates) {\n serverInstance.setRequestHandler(ListResourceTemplatesRequestSchema, async () => {\n this.logger.debug('Handling ListResourceTemplates request');\n if (this.definedResourceTemplates) {\n return { resourceTemplates: this.definedResourceTemplates };\n } else {\n try {\n const templates = await capturedResourceOptions.resourceTemplates!();\n this.definedResourceTemplates = templates;\n this.logger.debug(`Fetched and cached ${this.definedResourceTemplates.length} resource templates.`);\n return { resourceTemplates: this.definedResourceTemplates };\n } catch (error) {\n this.logger.error('Error fetching resource templates via resourceTemplates():', { error });\n throw error;\n }\n }\n });\n }\n\n // Subscribe/unsubscribe handlers\n serverInstance.setRequestHandler(SubscribeRequestSchema, async (request: { params: { uri: string } }) => {\n const uri = request.params.uri;\n this.logger.info(`Received resources/subscribe request for URI: ${uri}`);\n this.subscriptions.add(uri);\n return {};\n });\n\n serverInstance.setRequestHandler(UnsubscribeRequestSchema, async (request: { params: { uri: string } }) => {\n const uri = request.params.uri;\n this.logger.info(`Received resources/unsubscribe request for URI: ${uri}`);\n this.subscriptions.delete(uri);\n return {};\n });\n }\n\n /**\n * Registers prompt-related handlers on a server instance.\n */\n private registerPromptHandlersOnServer(serverInstance: Server) {\n const capturedPromptOptions = this.promptOptions;\n if (!capturedPromptOptions) return;\n\n // List prompts handler\n if (capturedPromptOptions.listPrompts) {\n serverInstance.setRequestHandler(ListPromptsRequestSchema, async () => {\n this.logger.debug('Handling ListPrompts request');\n if (this.definedPrompts) {\n return {\n prompts: this.definedPrompts?.map(p => ({ ...p, version: p.version ?? undefined })),\n };\n } else {\n try {\n const prompts = await capturedPromptOptions.listPrompts();\n for (const prompt of prompts) {\n PromptSchema.parse(prompt);\n }\n this.definedPrompts = prompts;\n this.logger.debug(`Fetched and cached ${this.definedPrompts.length} prompts.`);\n return {\n prompts: this.definedPrompts?.map(p => ({ ...p, version: p.version ?? undefined })),\n };\n } catch (error) {\n this.logger.error('Error fetching prompts via listPrompts():', {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n }\n });\n }\n\n // Get prompt handler\n if (capturedPromptOptions.getPromptMessages) {\n serverInstance.setRequestHandler(\n GetPromptRequestSchema,\n async (request: { params: { name: string; version?: string; arguments?: any } }) => {\n const startTime = Date.now();\n const { name, version, arguments: args } = request.params;\n if (!this.definedPrompts) {\n const prompts = await this.promptOptions?.listPrompts?.();\n if (!prompts) throw new Error('Failed to load prompts');\n this.definedPrompts = prompts;\n }\n // Select prompt by name and version (if provided)\n let prompt;\n if (version) {\n prompt = this.definedPrompts?.find(p => p.name === name && p.version === version);\n } else {\n // Select the first matching name if no version is provided.\n prompt = this.definedPrompts?.find(p => p.name === name);\n }\n if (!prompt) throw new Error(`Prompt \"${name}\"${version ? ` (version ${version})` : ''} not found`);\n // Validate required arguments\n if (prompt.arguments) {\n for (const arg of prompt.arguments) {\n if (arg.required && (args?.[arg.name] === undefined || args?.[arg.name] === null)) {\n throw new Error(`Missing required argument: ${arg.name}`);\n }\n }\n }\n try {\n let messages: any[] = [];\n if (capturedPromptOptions.getPromptMessages) {\n messages = await capturedPromptOptions.getPromptMessages({ name, version, args });\n }\n const duration = Date.now() - startTime;\n this.logger.info(\n `Prompt '${name}'${version ? ` (version ${version})` : ''} retrieved successfully in ${duration}ms.`,\n );\n return { prompt, messages };\n } catch (error) {\n const duration = Date.now() - startTime;\n this.logger.error(`Failed to get content for prompt '${name}' in ${duration}ms`, { error });\n throw error;\n }\n },\n );\n }\n }\n\n private convertAgentsToTools(\n agentsConfig?: Record<string, Agent>,\n definedConvertedTools?: Record<string, ConvertedTool>,\n ): Record<string, ConvertedTool> {\n const agentTools: Record<string, ConvertedTool> = {};\n if (!agentsConfig) {\n return agentTools;\n }\n\n for (const agentKey in agentsConfig) {\n const agent = agentsConfig[agentKey];\n if (!agent || !('generate' in agent)) {\n this.logger.warn(`Agent instance for '${agentKey}' is invalid or missing a generate function. Skipping.`);\n continue;\n }\n\n const agentDescription = agent.getDescription();\n\n if (!agentDescription) {\n throw new Error(\n `Agent '${agent.name}' (key: '${agentKey}') must have a non-empty description to be used in an MCPServer.`,\n );\n }\n\n const agentToolName = `ask_${agentKey}`;\n if (definedConvertedTools?.[agentToolName] || agentTools[agentToolName]) {\n this.logger.warn(\n `Tool with name '${agentToolName}' already exists. Agent '${agentKey}' will not be added as a duplicate tool.`,\n );\n continue;\n }\n\n const agentToolDefinition = createTool({\n id: agentToolName,\n description: `Ask agent '${agent.name}' a question. Agent description: ${agentDescription}`,\n inputSchema: z.object({\n message: z.string().describe('The question or input for the agent.'),\n }),\n execute: async ({ context, runtimeContext, tracingContext }) => {\n this.logger.debug(\n `Executing agent tool '${agentToolName}' for agent '${agent.name}' with message: \"${context.message}\"`,\n );\n try {\n const response = await agent.generate(context.message, { runtimeContext, tracingContext });\n return response;\n } catch (error) {\n this.logger.error(`Error executing agent tool '${agentToolName}' for agent '${agent.name}':`, error);\n throw error;\n }\n },\n });\n\n const options = {\n name: agentToolName,\n logger: this.logger,\n mastra: this.mastra,\n runtimeContext: new RuntimeContext(),\n tracingContext: {},\n description: agentToolDefinition.description,\n };\n const coreTool = makeCoreTool(agentToolDefinition, options) as InternalCoreTool;\n\n agentTools[agentToolName] = {\n name: agentToolName,\n description: coreTool.description,\n parameters: coreTool.parameters,\n execute: coreTool.execute!,\n toolType: 'agent',\n };\n this.logger.info(`Registered agent '${agent.name}' (key: '${agentKey}') as tool: '${agentToolName}'`);\n }\n return agentTools;\n }\n\n private convertWorkflowsToTools(\n workflowsConfig?: Record<string, Workflow>,\n definedConvertedTools?: Record<string, ConvertedTool>,\n ): Record<string, ConvertedTool> {\n const workflowTools: Record<string, ConvertedTool> = {};\n if (!workflowsConfig) {\n return workflowTools;\n }\n\n for (const workflowKey in workflowsConfig) {\n const workflow = workflowsConfig[workflowKey];\n if (!workflow || typeof workflow.createRun !== 'function') {\n this.logger.warn(\n `Workflow instance for '${workflowKey}' is invalid or missing a createRun function. Skipping.`,\n );\n continue;\n }\n\n const workflowDescription = workflow.description;\n if (!workflowDescription) {\n throw new Error(\n `Workflow '${workflow.id}' (key: '${workflowKey}') must have a non-empty description to be used in an MCPServer.`,\n );\n }\n\n const workflowToolName = `run_${workflowKey}`;\n if (definedConvertedTools?.[workflowToolName] || workflowTools[workflowToolName]) {\n this.logger.warn(\n `Tool with name '${workflowToolName}' already exists. Workflow '${workflowKey}' will not be added as a duplicate tool.`,\n );\n continue;\n }\n\n const workflowToolDefinition = createTool({\n id: workflowToolName,\n description: `Run workflow '${workflowKey}'. Workflow description: ${workflowDescription}`,\n inputSchema: workflow.inputSchema,\n execute: async ({ context, runtimeContext, tracingContext }) => {\n this.logger.debug(\n `Executing workflow tool '${workflowToolName}' for workflow '${workflow.id}' with input:`,\n context,\n );\n try {\n const run = await workflow.createRunAsync({ runId: runtimeContext?.get('runId') });\n\n const response = await run.start({ inputData: context, runtimeContext, tracingContext });\n\n return response;\n } catch (error) {\n this.logger.error(\n `Error executing workflow tool '${workflowToolName}' for workflow '${workflow.id}':`,\n error,\n );\n throw error;\n }\n },\n });\n\n const options = {\n name: workflowToolName,\n logger: this.logger,\n mastra: this.mastra,\n runtimeContext: new RuntimeContext(),\n tracingContext: {},\n description: workflowToolDefinition.description,\n };\n\n const coreTool = makeCoreTool(workflowToolDefinition, options) as InternalCoreTool;\n\n workflowTools[workflowToolName] = {\n name: workflowToolName,\n description: coreTool.description,\n parameters: coreTool.parameters,\n outputSchema: coreTool.outputSchema,\n execute: coreTool.execute!,\n toolType: 'workflow',\n };\n this.logger.info(`Registered workflow '${workflow.id}' (key: '${workflowKey}') as tool: '${workflowToolName}'`);\n }\n return workflowTools;\n }\n\n /**\n * Convert and validate all provided tools, logging registration status.\n * Also converts agents and workflows into tools.\n * @param tools Tool definitions\n * @param agentsConfig Agent definitions to be converted to tools, expected from MCPServerConfig\n * @param workflowsConfig Workflow definitions to be converted to tools, expected from MCPServerConfig\n * @returns Converted tools registry\n */\n convertTools(\n tools: ToolsInput,\n agentsConfig?: Record<string, Agent>,\n workflowsConfig?: Record<string, Workflow>,\n ): Record<string, ConvertedTool> {\n const definedConvertedTools: Record<string, ConvertedTool> = {};\n\n for (const toolName of Object.keys(tools)) {\n const toolInstance = tools[toolName];\n if (!toolInstance) {\n this.logger.warn(`Tool instance for '${toolName}' is undefined. Skipping.`);\n continue;\n }\n\n if (typeof toolInstance.execute !== 'function') {\n this.logger.warn(`Tool '${toolName}' does not have a valid execute function. Skipping.`);\n continue;\n }\n\n const options = {\n name: toolName,\n runtimeContext: new RuntimeContext(),\n tracingContext: {},\n mastra: this.mastra,\n logger: this.logger,\n description: toolInstance?.description,\n };\n\n const coreTool = makeCoreTool(toolInstance, options) as InternalCoreTool;\n\n definedConvertedTools[toolName] = {\n name: toolName,\n description: coreTool.description,\n parameters: coreTool.parameters,\n outputSchema: coreTool.outputSchema,\n execute: coreTool.execute!,\n };\n this.logger.info(`Registered explicit tool: '${toolName}'`);\n }\n this.logger.info(`Total defined tools registered: ${Object.keys(definedConvertedTools).length}`);\n\n let agentDerivedTools: Record<string, ConvertedTool> = {};\n let workflowDerivedTools: Record<string, ConvertedTool> = {};\n try {\n agentDerivedTools = this.convertAgentsToTools(agentsConfig, definedConvertedTools);\n workflowDerivedTools = this.convertWorkflowsToTools(workflowsConfig, definedConvertedTools);\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_AGENT_OR_WORKFLOW_TOOL_CONVERSION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to convert tools:', {\n error: mastraError.toString(),\n });\n throw mastraError;\n }\n\n const allConvertedTools = { ...definedConvertedTools, ...agentDerivedTools, ...workflowDerivedTools };\n\n const finalToolCount = Object.keys(allConvertedTools).length;\n const definedCount = Object.keys(definedConvertedTools).length;\n const fromAgentsCount = Object.keys(agentDerivedTools).length;\n const fromWorkflowsCount = Object.keys(workflowDerivedTools).length;\n this.logger.info(\n `${finalToolCount} total tools registered (${definedCount} defined + ${fromAgentsCount} agents + ${fromWorkflowsCount} workflows)`,\n );\n\n return allConvertedTools;\n }\n\n /**\n * Start the MCP server using stdio transport (for Windsurf integration).\n */\n public async startStdio(): Promise<void> {\n this.stdioTransport = new StdioServerTransport();\n try {\n await this.server.connect(this.stdioTransport);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_STDIO_CONNECTION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to connect MCP server using stdio transport:', {\n error: mastraError.toString(),\n });\n throw mastraError;\n }\n this.logger.info('Started MCP Server (stdio)');\n }\n\n /**\n * Handles MCP-over-SSE protocol for user-provided HTTP servers.\n * Call this from your HTTP server for both the SSE and message endpoints.\n *\n * @param url Parsed URL of the incoming request\n * @param ssePath Path for establishing the SSE connection (e.g. '/sse')\n * @param messagePath Path for POSTing client messages (e.g. '/message')\n * @param req Incoming HTTP request\n * @param res HTTP response (must support .write/.end)\n */\n public async startSSE({ url, ssePath, messagePath, req, res }: MCPServerSSEOptions): Promise<void> {\n try {\n if (url.pathname === ssePath) {\n await this.connectSSE({\n messagePath,\n res,\n });\n } else if (url.pathname === messagePath) {\n this.logger.debug('Received message');\n if (!this.sseTransport) {\n res.writeHead(503);\n res.end('SSE connection not established');\n return;\n }\n await this.sseTransport.handlePostMessage(req, res);\n } else {\n this.logger.debug('Unknown path:', { path: url.pathname });\n res.writeHead(404);\n res.end();\n }\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_SSE_START_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n url: url.toString(),\n ssePath,\n messagePath,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to start MCP Server (SSE):', { error: mastraError.toString() });\n throw mastraError;\n }\n }\n\n /**\n * Handles MCP-over-SSE protocol for user-provided HTTP servers.\n * Call this from your HTTP server for both the SSE and message endpoints.\n *\n * @param url Parsed URL of the incoming request\n * @param ssePath Path for establishing the SSE connection (e.g. '/sse')\n * @param messagePath Path for POSTing client messages (e.g. '/message')\n * @param context Incoming Hono context\n */\n public async startHonoSSE({ url, ssePath, messagePath, context }: MCPServerHonoSSEOptions) {\n try {\n if (url.pathname === ssePath) {\n return streamSSE(context, async stream => {\n await this.connectHonoSSE({\n messagePath,\n stream,\n });\n });\n } else if (url.pathname === messagePath) {\n this.logger.debug('Received message');\n const sessionId = context.req.query('sessionId');\n this.logger.debug('Received message for sessionId', { sessionId });\n if (!sessionId) {\n return context.text('No sessionId provided', 400);\n }\n if (!this.sseHonoTransports.has(sessionId)) {\n return context.text(`No transport found for sessionId ${sessionId}`, 400);\n }\n const message = await this.sseHonoTransports.get(sessionId)?.handlePostMessage(context);\n if (!message) {\n return context.text('Transport not found', 400);\n }\n return message;\n } else {\n this.logger.debug('Unknown path:', { path: url.pathname });\n return context.text('Unknown path', 404);\n }\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_HONO_SSE_START_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n url: url.toString(),\n ssePath,\n messagePath,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to start MCP Server (Hono SSE):', { error: mastraError.toString() });\n throw mastraError;\n }\n }\n\n /**\n * Handles MCP-over-StreamableHTTP protocol for user-provided HTTP servers.\n * Call this from your HTTP server for the streamable HTTP endpoint.\n *\n * @param url Parsed URL of the incoming request\n * @param httpPath Path for establishing the streamable HTTP connection (e.g. '/mcp')\n * @param req Incoming HTTP request\n * @param res HTTP response (must support .write/.end)\n * @param options Optional options to pass to the transport (e.g. sessionIdGenerator)\n */\n public async startHTTP({\n url,\n httpPath,\n req,\n res,\n options = { sessionIdGenerator: () => randomUUID() },\n }: {\n url: URL;\n httpPath: string;\n req: http.IncomingMessage;\n res: http.ServerResponse<http.IncomingMessage>;\n options?: StreamableHTTPServerTransportOptions;\n }) {\n this.logger.debug(`startHTTP: Received ${req.method} request to ${url.pathname}`);\n\n if (url.pathname !== httpPath) {\n this.logger.debug(`startHTTP: Pathname ${url.pathname} does not match httpPath ${httpPath}. Returning 404.`);\n res.writeHead(404);\n res.end();\n return;\n }\n\n const sessionId = req.headers['mcp-session-id'] as string | undefined;\n let transport: StreamableHTTPServerTransport | undefined;\n\n this.logger.debug(\n `startHTTP: Session ID from headers: ${sessionId}. Active transports: ${Array.from(this.streamableHTTPTransports.keys()).join(', ')}`,\n );\n\n try {\n if (sessionId && this.streamableHTTPTransports.has(sessionId)) {\n // Found existing session\n transport = this.streamableHTTPTransports.get(sessionId)!;\n this.logger.debug(`startHTTP: Using existing Streamable HTTP transport for session ID: ${sessionId}`);\n\n if (req.method === 'GET') {\n this.logger.debug(\n `startHTTP: Handling GET request for existing session ${sessionId}. Calling transport.handleRequest.`,\n );\n }\n\n // Handle the request using the existing transport\n // Need to parse body for POST requests before passing to handleRequest\n const body =\n req.method === 'POST'\n ? await new Promise((resolve, reject) => {\n let data = '';\n req.on('data', chunk => (data += chunk));\n req.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n req.on('error', reject);\n })\n : undefined;\n\n await transport.handleRequest(req, res, body);\n } else {\n // No session ID or session ID not found\n this.logger.debug(`startHTTP: No existing Streamable HTTP session ID found. ${req.method}`);\n\n // Only allow new sessions via POST initialize request\n if (req.method === 'POST') {\n const body = await new Promise((resolve, reject) => {\n let data = '';\n req.on('data', chunk => (data += chunk));\n req.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n req.on('error', reject);\n });\n\n // Import isInitializeRequest from the correct path\n const { isInitializeRequest } = await import('@modelcontextprotocol/sdk/types.js');\n\n if (isInitializeRequest(body)) {\n this.logger.debug('startHTTP: Received Streamable HTTP initialize request, creating new transport.');\n\n // Create a new transport for the new session\n transport = new StreamableHTTPServerTransport({\n ...options,\n sessionIdGenerator: () => randomUUID(),\n onsessioninitialized: id => {\n this.streamableHTTPTransports.set(id, transport!);\n },\n });\n\n // Set up onclose handler to clean up transport when closed\n transport.onclose = () => {\n const closedSessionId = transport?.sessionId;\n if (closedSessionId && this.streamableHTTPTransports.has(closedSessionId)) {\n this.logger.debug(\n `startHTTP: Streamable HTTP transport closed for session ${closedSessionId}, removing from map.`,\n );\n this.streamableHTTPTransports.delete(closedSessionId);\n // Also clean up the server instance for this session\n if (this.httpServerInstances.has(closedSessionId)) {\n this.httpServerInstances.delete(closedSessionId);\n this.logger.debug(`startHTTP: Cleaned up server instance for closed session ${closedSessionId}`);\n }\n }\n };\n\n // Create a new server instance for this HTTP session\n const sessionServerInstance = this.createServerInstance();\n\n // Connect the new server instance to the new transport\n await sessionServerInstance.connect(transport);\n\n // Store both the transport and server instance when the session is initialized\n if (transport.sessionId) {\n this.streamableHTTPTransports.set(transport.sessionId, transport);\n this.httpServerInstances.set(transport.sessionId, sessionServerInstance);\n this.logger.debug(\n `startHTTP: Streamable HTTP session initialized and stored with ID: ${transport.sessionId}`,\n );\n } else {\n this.logger.warn('startHTTP: Streamable HTTP transport initialized without a session ID.');\n }\n\n // Handle the initialize request\n return await transport.handleRequest(req, res, body);\n } else {\n // POST request but not initialize, and no session ID\n this.logger.warn('startHTTP: Received non-initialize POST request without a session ID.');\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: {\n code: -32000,\n message: 'Bad Request: No valid session ID provided for non-initialize request',\n },\n id: (body as any)?.id ?? null, // Include original request ID if available\n }),\n );\n }\n } else {\n // Non-POST request (GET/DELETE) without a session ID\n this.logger.warn(`startHTTP: Received ${req.method} request without a session ID.`);\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: {\n code: -32000,\n message: `Bad Request: ${req.method} request requires a valid session ID`,\n },\n id: null,\n }),\n );\n }\n }\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_HTTP_CONNECTION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n text: 'Failed to connect MCP server using HTTP transport',\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('startHTTP: Error handling Streamable HTTP request:', { error: mastraError });\n // If headers haven't been sent, send an error response\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: {\n code: -32603,\n message: 'Internal server error',\n },\n id: null, // Cannot determine original request ID in catch\n }),\n );\n }\n }\n }\n\n public async connectSSE({\n messagePath,\n res,\n }: {\n messagePath: string;\n res: http.ServerResponse<http.IncomingMessage>;\n }) {\n try {\n this.logger.debug('Received SSE connection');\n this.sseTransport = new SSEServerTransport(messagePath, res);\n await this.server.connect(this.sseTransport);\n\n this.server.onclose = async () => {\n this.sseTransport = undefined;\n await this.server.close();\n };\n\n res.on('close', () => {\n this.sseTransport = undefined;\n });\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_SSE_CONNECT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n messagePath,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to connect to MCP Server (SSE):', { error: mastraError });\n throw mastraError;\n }\n }\n\n public async connectHonoSSE({ messagePath, stream }: { messagePath: string; stream: SSEStreamingApi }) {\n this.logger.debug('Received SSE connection');\n const sseTransport = new SSETransport(messagePath, stream);\n const sessionId = sseTransport.sessionId;\n this.logger.debug('SSE Transport created with sessionId:', { sessionId });\n this.sseHonoTransports.set(sessionId, sseTransport);\n\n stream.onAbort(() => {\n this.logger.debug('SSE Transport aborted with sessionId:', { sessionId });\n this.sseHonoTransports.delete(sessionId);\n });\n try {\n await this.server.connect(sseTransport);\n this.server.onclose = async () => {\n this.logger.debug('SSE Transport closed with sessionId:', { sessionId });\n this.sseHonoTransports.delete(sessionId);\n await this.server.close();\n };\n\n while (true) {\n // This will keep the connection alive\n // You can also await for a promise that never resolves\n await stream.sleep(60_000);\n const sessionIds = Array.from(this.sseHonoTransports.keys() || []);\n this.logger.debug('Active Hono SSE sessions:', { sessionIds });\n await stream.write(':keep-alive\\n\\n');\n }\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_HONO_SSE_CONNECT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n messagePath,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to connect to MCP Server (Hono SSE):', { error: mastraError });\n throw mastraError;\n }\n }\n\n /**\n * Close the MCP server and all its connections\n */\n async close() {\n try {\n if (this.stdioTransport) {\n await this.stdioTransport.close?.();\n this.stdioTransport = undefined;\n }\n if (this.sseTransport) {\n await this.sseTransport.close?.();\n this.sseTransport = undefined;\n }\n if (this.sseHonoTransports) {\n for (const transport of this.sseHonoTransports.values()) {\n await transport.close?.();\n }\n this.sseHonoTransports.clear();\n }\n // Close all active Streamable HTTP transports and their server instances\n if (this.streamableHTTPTransports) {\n for (const transport of this.streamableHTTPTransports.values()) {\n await transport.close?.();\n }\n this.streamableHTTPTransports.clear();\n }\n // Close all HTTP server instances\n if (this.httpServerInstances) {\n for (const serverInstance of this.httpServerInstances.values()) {\n await serverInstance.close?.();\n }\n this.httpServerInstances.clear();\n }\n await this.server.close();\n this.logger.info('MCP server closed.');\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_CLOSE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Error closing MCP server:', { error: mastraError });\n throw mastraError;\n }\n }\n\n /**\n * Gets the basic information about the server, conforming to the Server schema.\n * @returns ServerInfo object.\n */\n public getServerInfo(): ServerInfo {\n return {\n id: this.id,\n name: this.name,\n description: this.description,\n repository: this.repository,\n version_detail: {\n version: this.version,\n release_date: this.releaseDate,\n is_latest: this.isLatest,\n },\n };\n }\n\n /**\n * Gets detailed information about the server, conforming to the ServerDetail schema.\n * @returns ServerDetailInfo object.\n */\n public getServerDetail(): ServerDetailInfo {\n return {\n ...this.getServerInfo(),\n package_canonical: this.packageCanonical,\n packages: this.packages,\n remotes: this.remotes,\n };\n }\n\n /**\n * Gets a list of tools provided by this MCP server, including their schemas.\n * This leverages the same tool information used by the internal ListTools MCP request.\n * @returns An object containing an array of tool information.\n */\n public getToolListInfo(): {\n tools: Array<{ name: string; description?: string; inputSchema: any; outputSchema?: any; toolType?: MCPToolType }>;\n } {\n this.logger.debug(`Getting tool list information for MCPServer '${this.name}'`);\n return {\n tools: Object.entries(this.convertedTools).map(([toolId, tool]) => ({\n id: toolId,\n name: tool.name,\n description: tool.description,\n inputSchema: tool.parameters?.jsonSchema || tool.parameters,\n outputSchema: tool.outputSchema?.jsonSchema || tool.outputSchema,\n toolType: tool.toolType,\n })),\n };\n }\n\n /**\n * Gets information for a specific tool provided by this MCP server.\n * @param toolId The ID/name of the tool to retrieve.\n * @returns Tool information (name, description, inputSchema) or undefined if not found.\n */\n public getToolInfo(\n toolId: string,\n ): { name: string; description?: string; inputSchema: any; outputSchema?: any; toolType?: MCPToolType } | undefined {\n const tool = this.convertedTools[toolId];\n if (!tool) {\n this.logger.debug(`Tool '${toolId}' not found on MCPServer '${this.name}'`);\n return undefined;\n }\n this.logger.debug(`Getting info for tool '${toolId}' on MCPServer '${this.name}'`);\n return {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.parameters?.jsonSchema || tool.parameters,\n outputSchema: tool.outputSchema?.jsonSchema || tool.outputSchema,\n toolType: tool.toolType,\n };\n }\n\n /**\n * Executes a specific tool provided by this MCP server.\n * @param toolId The ID/name of the tool to execute.\n * @param args The arguments to pass to the tool's execute function.\n * @param executionContext Optional context for the tool execution.\n * @returns A promise that resolves to the result of the tool execution.\n * @throws Error if the tool is not found, validation fails, or execution fails.\n */\n public async executeTool(\n toolId: string,\n args: any,\n executionContext?: { messages?: any[]; toolCallId?: string },\n ): Promise<any> {\n const tool = this.convertedTools[toolId];\n let validatedArgs = args;\n try {\n if (!tool) {\n this.logger.warn(`ExecuteTool: Unknown tool '${toolId}' requested on MCPServer '${this.name}'.`);\n throw new Error(`Unknown tool: ${toolId}`);\n }\n\n this.logger.debug(`ExecuteTool: Invoking '${toolId}' with arguments:`, args);\n\n if (tool.parameters instanceof z.ZodType && typeof tool.parameters.safeParse === 'function') {\n const validation = tool.parameters.safeParse(args ?? {});\n if (!validation.success) {\n const errorMessages = validation.error.errors\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n this.logger.warn(`ExecuteTool: Invalid tool arguments for '${toolId}': ${errorMessages}`, {\n errors: validation.error.format(),\n });\n // Return validation error as a result instead of throwing\n return {\n error: true,\n message: `Tool validation failed. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(args, null, 2)}`,\n validationErrors: validation.error.format(),\n };\n }\n validatedArgs = validation.data;\n } else {\n this.logger.debug(\n `ExecuteTool: Tool '${toolId}' parameters is not a Zod schema with safeParse or is undefined. Skipping validation.`,\n );\n }\n\n if (!tool.execute) {\n this.logger.error(`ExecuteTool: Tool '${toolId}' does not have an execute function.`);\n throw new Error(`Tool '${toolId}' cannot be executed.`);\n }\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_TOOL_EXECUTE_PREPARATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n toolId,\n args,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n throw mastraError;\n }\n\n try {\n const finalExecutionContext = {\n messages: executionContext?.messages || [],\n toolCallId: executionContext?.toolCallId || randomUUID(),\n };\n const result = await tool.execute(validatedArgs, finalExecutionContext);\n this.logger.info(`ExecuteTool: Tool '${toolId}' executed successfully.`);\n return result;\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_TOOL_EXECUTE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n toolId,\n validatedArgs: validatedArgs,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(`ExecuteTool: Tool execution failed for '${toolId}':`, { error });\n throw mastraError;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client/elicitationActions.ts","../src/client/promptActions.ts","../src/client/resourceActions.ts","../src/client/client.ts","../src/client/configuration.ts","../../../node_modules/.pnpm/hono@4.9.7/node_modules/hono/dist/utils/stream.js","../../../node_modules/.pnpm/hono@4.9.7/node_modules/hono/dist/helper/streaming/utils.js","../../../node_modules/.pnpm/hono@4.9.7/node_modules/hono/dist/utils/html.js","../../../node_modules/.pnpm/hono@4.9.7/node_modules/hono/dist/helper/streaming/sse.js","../../../node_modules/.pnpm/hono-mcp-server-sse-transport@0.0.7_@modelcontextprotocol+sdk@1.17.5_hono@4.9.7/node_modules/hono-mcp-server-sse-transport/build/sse.js","../src/server/promptActions.ts","../src/server/resourceActions.ts","../src/server/server.ts"],"names":["ErrorCode","MastraBase","DEFAULT_REQUEST_TIMEOUT_MSEC","Client","z","StdioClientTransport","getDefaultEnvironment","StreamableHTTPClientTransport","SSEClientTransport","asyncExitHook","gracefulExit","ListResourcesResultSchema","ReadResourceResultSchema","ListResourceTemplatesResultSchema","ListPromptsResultSchema","GetPromptResultSchema","PromptListChangedNotificationSchema","ResourceUpdatedNotificationSchema","ResourceListChangedNotificationSchema","ElicitRequestSchema","isZodType","$RefParser","convertJsonSchemaToZod","convertJsonSchemaToZodV3","error","MastraError","ErrorDomain","ErrorCategory","tools","createTool","CallToolResultSchema","equal","existingInstance","uuidv5","stream","JSONRPCMessageSchema","MCPServerBase","Server","ListToolsRequestSchema","CallToolRequestSchema","request","SetLevelRequestSchema","ListResourcesRequestSchema","ReadResourceRequestSchema","ListResourceTemplatesRequestSchema","SubscribeRequestSchema","UnsubscribeRequestSchema","ListPromptsRequestSchema","PromptSchema","GetPromptRequestSchema","RuntimeContext","makeCoreTool","run","StdioServerTransport","randomUUID","StreamableHTTPServerTransport","SSEServerTransport"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASO,IAAM,2BAAN,MAA+B;AAAA,EACnB,MAAA;AAAA,EACA,MAAA;AAAA,EAEjB,WAAA,CAAY,EAAE,MAAA,EAAQ,MAAA,EAAO,EAAmC;AAC9D,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,UAAU,OAAA,EAA4E;AAC3F,IAAA,IAAA,CAAK,MAAA,CAAO,6BAA6B,OAAO,CAAA;AAAA,EAClD;AACF,CAAA;ACZO,IAAM,sBAAN,MAA0B;AAAA,EACd,MAAA;AAAA,EACA,MAAA;AAAA,EAEjB,WAAA,CAAY,EAAE,MAAA,EAAQ,MAAA,EAAO,EAA8B;AACzD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,IAAA,GAA0B;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,WAAA,EAAY;AAC/C,MAAA,IAAI,YAAY,QAAA,CAAS,OAAA,IAAW,MAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AACnE,QAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,MAAW,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,MAAA,CAAO,OAAA,IAAW,EAAA,EAAG,CAAE,CAAA;AAAA,MACtF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,6BAAA,EAAgC,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,iCAAA,CAAA,EAAqC;AAAA,UACpG;AAAA,SACD,CAAA;AACD,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF,SAAS,CAAA,EAAQ;AAEf,MAAA,IAAI,CAAA,CAAE,IAAA,KAASA,kBAAA,CAAU,cAAA,EAAgB;AACvC,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,kCAAA,EAAqC,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI;AAAA,QACzE,OAAO,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC;AAAA,OACjD,CAAA;AACD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,OACnH;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,GAAA,CAAI;AAAA,IACf,IAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF,EAI6B;AAC3B,IAAA,OAAO,KAAK,MAAA,CAAO,SAAA,CAAU,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,cAAc,OAAA,EAAoC;AAC7D,IAAA,IAAA,CAAK,MAAA,CAAO,wCAAwC,OAAO,CAAA;AAAA,EAC7D;AACF,CAAA;ACnEO,IAAM,wBAAN,MAA4B;AAAA,EAChB,MAAA;AAAA,EACA,MAAA;AAAA,EAEjB,WAAA,CAAY,EAAE,MAAA,EAAQ,MAAA,EAAO,EAAgC;AAC3D,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,IAAA,GAA4B;AACvC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,aAAA,EAAc;AACjD,MAAA,IAAI,YAAY,QAAA,CAAS,SAAA,IAAa,MAAM,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AACvE,QAAA,OAAO,QAAA,CAAS,SAAA;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,+BAAA,EAAkC,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,iCAAA,CAAA,EAAqC;AAAA,UACtG;AAAA,SACD,CAAA;AACD,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF,SAAS,CAAA,EAAQ;AAEf,MAAA,IAAI,CAAA,CAAE,IAAA,KAASA,kBAAAA,CAAU,cAAA,EAAgB;AACvC,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI;AAAA,QAC3E,OAAO,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC;AAAA,OACjD,CAAA;AACD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,sCAAA,EAAyC,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,OACrH;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,SAAA,GAAyC;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,qBAAA,EAAsB;AACzD,MAAA,IAAI,YAAY,QAAA,CAAS,iBAAA,IAAqB,MAAM,OAAA,CAAQ,QAAA,CAAS,iBAAiB,CAAA,EAAG;AACvF,QAAA,OAAO,QAAA,CAAS,iBAAA;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,UACV,CAAA,wCAAA,EAA2C,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,iCAAA,CAAA;AAAA,UAC3D,EAAE,QAAA;AAAS,SACb;AACA,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF,SAAS,CAAA,EAAQ;AAEf,MAAA,IAAI,CAAA,CAAE,IAAA,KAASA,kBAAAA,CAAU,cAAA,EAAgB;AACvC,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,6CAAA,EAAgD,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI;AAAA,QACpF,OAAO,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC;AAAA,OACjD,CAAA;AACD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,+CAAA,EAAkD,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,OAC9H;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,KAAK,GAAA,EAAa;AAC7B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,GAAG,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,UAAU,GAAA,EAAa;AAClC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,iBAAA,CAAkB,GAAG,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,YAAY,GAAA,EAAa;AACpC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,GAAG,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,UAAU,OAAA,EAA2D;AAChF,IAAA,IAAA,CAAK,MAAA,CAAO,sCAAsC,OAAO,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,cAAc,OAAA,EAAoC;AAC7D,IAAA,IAAA,CAAK,MAAA,CAAO,0CAA0C,OAAO,CAAA;AAAA,EAC/D;AACF,CAAA;;;ACfA,SAAS,8BAA8B,KAAA,EAA0D;AAC/F,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,MAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,OAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT;AAEE,MAAA,OAAO,MAAA;AAAA;AAEb;AAUO,IAAM,uBAAA,GAAN,cAAsCC,eAAA,CAAW;AAAA,EACtD,IAAA;AAAA,EACQ,MAAA;AAAA,EACS,OAAA;AAAA,EACT,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,uBAAA,GAAiD,IAAA;AAAA,EACzC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EAChB,WAAA,CAAY;AAAA,IACV,IAAA;AAAA,IACA,OAAA,GAAU,OAAA;AAAA,IACV,MAAA;AAAA,IACA,eAAe,EAAC;AAAA,IAChB,OAAA,GAAUC;AAAA,GACZ,EAAmC;AACjC,IAAA,KAAA,CAAM,EAAE,IAAA,EAAM,iBAAA,EAAmB,CAAA;AACjC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,MAAA;AACzB,IAAA,IAAA,CAAK,gBAAA,GAAmB,OAAO,gBAAA,IAAoB,IAAA;AACnD,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA;AAEpB,IAAA,MAAM,qBAAqB,EAAE,GAAG,YAAA,EAAc,WAAA,EAAa,EAAC,EAAE;AAE9D,IAAA,IAAA,CAAK,SAAS,IAAIC,iBAAA;AAAA,MAChB;AAAA,QACE,IAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA;AAAA,QACE,YAAA,EAAc;AAAA;AAChB,KACF;AAGA,IAAA,IAAA,CAAK,YAAA,EAAa;AAElB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,qBAAA,CAAsB,EAAE,QAAQ,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAChF,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,mBAAA,CAAoB,EAAE,QAAQ,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAC5E,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,wBAAA,CAAyB,EAAE,QAAQ,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,GAAA,CAAI,KAAA,EAAqB,OAAA,EAAiB,OAAA,EAAqC;AAErF,IAAA,MAAM,YAAA,GAAe,8BAA8B,KAAK,CAAA;AAExD,IAAA,MAAM,GAAA,GAAM,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,KAAK,OAAO,CAAA,CAAA;AAGrC,IAAA,IAAA,CAAK,MAAA,CAAO,YAAY,CAAA,CAAE,GAAA,EAAK,OAAO,CAAA;AAGtC,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,UAAA,CAAW;AAAA,QACd,KAAA;AAAA,QACA,OAAA,EAAS,GAAA;AAAA,QACT,SAAA,sBAAe,IAAA,EAAK;AAAA,QACpB,YAAY,IAAA,CAAK,IAAA;AAAA,QACjB,OAAA;AAAA,QACA,gBAAgB,IAAA,CAAK;AAAA,OACtB,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,YAAA,GAAqB;AAC3B,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,IAAA,CAAK,MAAA,CAAO,sBAAA;AAAA,QACVC,MAAE,MAAA,CAAO;AAAA,UACP,MAAA,EAAQA,KAAA,CAAE,OAAA,CAAQ,uBAAuB,CAAA;AAAA,UACzC,MAAA,EAAQA,MACL,MAAA,CAAO;AAAA,YACN,KAAA,EAAOA,MAAE,MAAA;AAAO,WACjB,EACA,WAAA;AAAY,SAChB,CAAA;AAAA,QACD,CAAA,YAAA,KAAgB;AACd,UAAA,MAAM,EAAE,KAAA,EAAO,GAAG,MAAA,KAAW,YAAA,CAAa,MAAA;AAC1C,UAAA,IAAA,CAAK,GAAA,CAAI,KAAA,EAAuB,kBAAA,EAAoB,MAAM,CAAA;AAAA,QAC5D;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,aAAa,OAAA,EAAiB;AAC1C,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,mCAAA,EAAsC,OAAO,CAAA,CAAE,CAAA;AACjE,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,SAAA,GAAY,IAAIC,+BAAA,CAAqB;AAAA,QACxC,OAAA;AAAA,QACA,IAAA,EAAM,KAAK,YAAA,CAAa,IAAA;AAAA,QACxB,GAAA,EAAK,EAAE,GAAGC,gCAAA,EAAsB,EAAG,GAAI,IAAA,CAAK,YAAA,CAAa,GAAA,IAAO,EAAC;AAAG,OACrE,CAAA;AACD,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,SAAA,EAAW,EAAE,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,OAAA,IAAW,IAAA,CAAK,OAAA,EAAS,CAAA;AAChG,MAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,8CAAA,CAAgD,CAAA;AAAA,IACpE,SAAS,CAAA,EAAG;AACV,MAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAC/E,MAAA,MAAM,CAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,YAAY,GAAA,EAAU;AAClC,IAAA,MAAM,EAAE,WAAA,EAAa,eAAA,EAAiB,YAAA,KAAiB,IAAA,CAAK,YAAA;AAE5D,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAE,CAAA;AAGxD,IAAA,IAAI,YAAA,GAAe,GAAA,CAAI,QAAA,CAAS,QAAA,CAAS,CAAA,IAAA,CAAM,CAAA;AAE/C,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,IAAI;AAEF,QAAA,IAAA,CAAK,GAAA,CAAI,SAAS,qCAAqC,CAAA;AACvD,QAAA,MAAM,mBAAA,GAAsB,IAAIC,iDAAA,CAA8B,GAAA,EAAK;AAAA,UACjE,WAAA;AAAA,UACA,mBAAA,EAAqB,KAAK,YAAA,CAAa,mBAAA;AAAA,UACvC;AAAA,SACD,CAAA;AACD,QAAA,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,mBAAA,EAAqB;AAAA,UAC7C,OAAA;AAAA;AAAA,YAEE;AAAA;AAAA,SACH,CAAA;AACD,QAAA,IAAA,CAAK,SAAA,GAAY,mBAAA;AACjB,QAAA,IAAA,CAAK,GAAA,CAAI,SAAS,yDAAyD,CAAA;AAAA,MAC7E,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,kCAAA,EAAqC,KAAK,CAAA,CAAE,CAAA;AAC9D,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAA,CAAK,GAAA,CAAI,SAAS,kDAAkD,CAAA;AACpE,MAAA,IAAI;AAEF,QAAA,MAAM,YAAA,GAAe,IAAIC,2BAAA,CAAmB,GAAA,EAAK,EAAE,WAAA,EAAa,eAAA,EAAiB,cAAc,CAAA;AAC/F,QAAA,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,YAAA,EAAc,EAAE,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,OAAA,IAAW,IAAA,CAAK,OAAA,EAAS,CAAA;AAC9F,QAAA,IAAA,CAAK,SAAA,GAAY,YAAA;AACjB,QAAA,IAAA,CAAK,GAAA,CAAI,SAAS,6DAA6D,CAAA;AAAA,MACjF,SAAS,QAAA,EAAU;AACjB,QAAA,IAAA,CAAK,GAAA;AAAA,UACH,OAAA;AAAA,UACA,gHAAgH,QAAQ,CAAA;AAAA,SAC1H;AACA,QAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,WAAA,GAAuC,IAAA;AAAA,EAE/C,MAAM,OAAA,GAAU;AAEd,IAAA,IAAI,MAAM,KAAK,WAAA,EAAa;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,OAAA,CAAiB,OAAO,SAAS,MAAA,KAAW;AACjE,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,OAAA,EAAS,GAAA,EAAI,GAAI,IAAA,CAAK,YAAA;AAE9B,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,IAAA,CAAK,aAAa,OAAO,CAAA;AAAA,QACjC,WAAW,GAAA,EAAK;AACd,UAAA,MAAM,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,QAC5B,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,QAChF;AAEA,QAAA,OAAA,CAAQ,IAAI,CAAA;AAGZ,QAAA,MAAM,eAAA,GAAkB,KAAK,MAAA,CAAO,OAAA;AACpC,QAAA,IAAA,CAAK,MAAA,CAAO,UAAU,MAAM;AAC1B,UAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,4BAAA,CAA8B,CAAA;AAChD,UAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,UAAA,IAAI,OAAO,oBAAoB,UAAA,EAAY;AACzC,YAAA,eAAA,EAAgB;AAAA,UAClB;AAAA,QACF,CAAA;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,QAAA,MAAA,CAAO,CAAC,CAAA;AAAA,MACV;AAAA,IACF,CAAC,CAAA;AAED,IAAAC,sBAAA;AAAA,MACE,YAAY;AACV,QAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,oCAAA,CAAsC,CAAA;AACxD,QAAA,MAAM,KAAK,UAAA,EAAW;AAAA,MACxB,CAAA;AAAA,MACA,EAAE,MAAM,GAAA;AAAK,KACf;AAEA,IAAA,OAAA,CAAQ,EAAA,CAAG,SAAA,EAAW,MAAMC,qBAAA,EAAc,CAAA;AAC1C,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,oCAAA,CAAsC,CAAA;AACxD,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,SAAA,GAAgC;AAClC,IAAA,IAAI,IAAA,CAAK,qBAAqBH,iDAAA,EAA+B;AAC3D,MAAA,OAAO,KAAK,SAAA,CAAU,SAAA;AAAA,IACxB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,GAAa;AACjB,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,IAAA,CAAK,GAAA,CAAI,SAAS,mDAAmD,CAAA;AACrE,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,6BAAA,CAA+B,CAAA;AACjD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,UAAU,KAAA,EAAM;AAC3B,MAAA,IAAA,CAAK,GAAA,CAAI,SAAS,2CAA2C,CAAA;AAAA,IAC/D,SAAS,CAAA,EAAG;AACV,MAAA,IAAA,CAAK,GAAA,CAAI,SAAS,oCAAA,EAAsC;AAAA,QACtD,KAAA,EAAO,aAAa,KAAA,GAAQ,CAAA,CAAE,QAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,EAAM,CAAC;AAAA,OAChE,CAAA;AACD,MAAA,MAAM,CAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,MAAA;AACjB,MAAA,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,GAAgB;AACpB,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,oCAAA,CAAsC,CAAA;AACxD,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,MAAA,EAAQ,gBAAA,IAAoBI,kCAAA,EAA2B;AAAA,MACxF,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,GAAA,EAAa;AAC9B,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,kCAAA,EAAqC,GAAG,CAAA,CAAE,CAAA;AAC5D,IAAA,OAAO,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,MAAA,EAAQ,gBAAA,EAAkB,MAAA,EAAQ,EAAE,GAAA,EAAI,EAAE,EAAGC,iCAAA,EAA0B;AAAA,MACxG,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,kBAAkB,GAAA,EAAa;AACnC,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,uCAAA,EAA0C,GAAG,CAAA,CAAE,CAAA;AACjE,IAAA,OAAO,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,QAAQ,qBAAA,EAAuB,MAAA,EAAQ,EAAE,GAAA,IAAM,EAAGR,KAAA,CAAE,MAAA,CAAO,EAAE,CAAA,EAAG;AAAA,MACjG,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,oBAAoB,GAAA,EAAa;AACrC,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,2CAAA,EAA8C,GAAG,CAAA,CAAE,CAAA;AACrE,IAAA,OAAO,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,QAAQ,uBAAA,EAAyB,MAAA,EAAQ,EAAE,GAAA,IAAM,EAAGA,KAAA,CAAE,MAAA,CAAO,EAAE,CAAA,EAAG;AAAA,MACnG,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,qBAAA,GAAwB;AAC5B,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,6CAAA,CAA+C,CAAA;AACjE,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,MAAA,EAAQ,0BAAA,IAA8BS,0CAAA,EAAmC;AAAA,MAC1G,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAA0C;AAC9C,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,kCAAA,CAAoC,CAAA;AACtD,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,MAAA,EAAQ,cAAA,IAAkBC,gCAAA,EAAyB;AAAA,MACpF,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAAA,CAAU;AAAA,IACd,IAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF,EAI6B;AAC3B,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,mCAAA,EAAsC,IAAI,CAAA,CAAE,CAAA;AAC9D,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO,OAAA;AAAA,MACvB,EAAE,QAAQ,aAAA,EAAe,MAAA,EAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,OAAA,EAAQ,EAAE;AAAA,MACpEC,8BAAA;AAAA,MACA,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA;AAAQ,KAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,wCAAwC,OAAA,EAA2B;AACjE,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,kDAAkD,CAAA;AACpE,IAAA,IAAA,CAAK,MAAA,CAAO,sBAAA,CAAuBC,4CAAA,EAAqC,MAAM;AAC5E,MAAA,OAAA,EAAQ;AAAA,IACV,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,sCACE,OAAA,EACM;AACN,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,+CAA+C,CAAA;AACjE,IAAA,IAAA,CAAK,MAAA,CAAO,sBAAA,CAAuBC,0CAAA,EAAmC,CAAA,YAAA,KAAgB;AACpF,MAAA,OAAA,CAAQ,aAAa,MAAM,CAAA;AAAA,IAC7B,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,0CAA0C,OAAA,EAA2B;AACnE,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,oDAAoD,CAAA;AACtE,IAAA,IAAA,CAAK,MAAA,CAAO,sBAAA,CAAuBC,8CAAA,EAAuC,MAAM;AAC9E,MAAA,OAAA,EAAQ;AAAA,IACV,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,6BAA6B,OAAA,EAAmC;AAC9D,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,qCAAqC,CAAA;AACvD,IAAA,IAAA,CAAK,MAAA,CAAO,iBAAA,CAAkBC,4BAAA,EAAqB,OAAM,OAAA,KAAW;AAClE,MAAA,IAAA,CAAK,IAAI,OAAA,EAAS,CAAA,8BAAA,EAAiC,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAC3E,MAAA,OAAO,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAAA,IAC/B,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,mBACZ,WAAA,EACoB;AACpB,IAAA,IAAIC,eAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAMC,2BAAA,CAAW,YAAY,WAAW,CAAA;AACxC,MAAA,MAAM,mBAAA,GAAuB,YAAA,IAAgB,WAAA,GAAc,WAAA,CAAY,UAAA,GAAa,WAAA;AACpF,MAAA,IAAI,kBAAkBjB,KAAA,EAAG;AAEvB,QAAA,OAAOkB,yCAAuB,mBAAmB,CAAA;AAAA,MACnD,CAAA,MAAO;AACL,QAAA,OAAOC,2CAAyB,mBAAmB,CAAA;AAAA,MACrD;AAAA,IACF,SAASC,OAAA,EAAgB;AACvB,MAAA,IAAI,YAAA;AACJ,MAAA,IAAIA,mBAAiB,KAAA,EAAO;AAC1B,QAAA,YAAA,GAAeA,OAAA,CAAM,KAAA;AAAA,MACvB,CAAA,MAAO;AAEL,QAAA,IAAI;AACF,UAAA,YAAA,GAAe,IAAA,CAAK,UAAUA,OAAK,CAAA;AAAA,QACrC,CAAA,CAAA,MAAQ;AACN,UAAA,YAAA,GAAe,OAAOA,OAAK,CAAA;AAAA,QAC7B;AAAA,MACF;AACA,MAAA,IAAA,CAAK,GAAA,CAAI,SAAS,qEAAA,EAAuE;AAAA,QACvF,KAAA,EAAO,YAAA;AAAA,QACP,kBAAA,EAAoB;AAAA,OACrB,CAAA;AAED,MAAA,MAAM,IAAIC,iBAAA,CAAY;AAAA,QACpB,EAAA,EAAI,yCAAA;AAAA,QACJ,QAAQC,iBAAA,CAAY,GAAA;AAAA,QACpB,UAAUC,mBAAA,CAAc,IAAA;AAAA,QACxB,OAAA,EAAS,EAAE,KAAA,EAAO,YAAA,IAAgB,eAAA;AAAgB,OACnD,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAc,oBACZ,YAAA,EACgC;AAChC,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,IAAIP,eAAA,CAAU,YAAY,CAAA,EAAG;AAC3B,MAAA,OAAO,YAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAMC,2BAAA,CAAW,YAAY,YAAY,CAAA;AACzC,MAAA,MAAM,mBAAA,GAAuB,YAAA,IAAgB,YAAA,GAAe,YAAA,CAAa,UAAA,GAAa,YAAA;AACtF,MAAA,IAAI,kBAAkBjB,KAAA,EAAG;AAEvB,QAAA,OAAOkB,yCAAuB,mBAAmB,CAAA;AAAA,MACnD,CAAA,MAAO;AACL,QAAA,OAAOC,2CAAyB,mBAAmB,CAAA;AAAA,MACrD;AAAA,IACF,SAASC,OAAA,EAAgB;AACvB,MAAA,IAAI,YAAA;AACJ,MAAA,IAAIA,mBAAiB,KAAA,EAAO;AAC1B,QAAA,YAAA,GAAeA,OAAA,CAAM,KAAA;AAAA,MACvB,CAAA,MAAO;AAEL,QAAA,IAAI;AACF,UAAA,YAAA,GAAe,IAAA,CAAK,UAAUA,OAAK,CAAA;AAAA,QACrC,CAAA,CAAA,MAAQ;AACN,UAAA,YAAA,GAAe,OAAOA,OAAK,CAAA;AAAA,QAC7B;AAAA,MACF;AACA,MAAA,IAAA,CAAK,GAAA,CAAI,SAAS,qEAAA,EAAuE;AAAA,QACvF,KAAA,EAAO,YAAA;AAAA,QACP,kBAAA,EAAoB;AAAA,OACrB,CAAA;AAED,MAAA,MAAM,IAAIC,iBAAA,CAAY;AAAA,QACpB,EAAA,EAAI,0CAAA;AAAA,QACJ,QAAQC,iBAAA,CAAY,GAAA;AAAA,QACpB,UAAUC,mBAAA,CAAc,IAAA;AAAA,QACxB,OAAA,EAAS,EAAE,KAAA,EAAO,YAAA,IAAgB,eAAA;AAAgB,OACnD,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,GAAQ;AACZ,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,gCAAA,CAAkC,CAAA;AACpD,IAAA,MAAM,SAAEC,OAAA,EAAM,GAAI,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,CAAA;AACvE,IAAA,MAAM,WAAgC,EAAC;AACvC,IAAA,KAAA,MAAW,QAAQA,OAAA,EAAO;AACxB,MAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,iBAAA,EAAoB,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACjD,MAAA,IAAI;AACF,QAAA,MAAM,aAAaC,gBAAA,CAAW;AAAA,UAC5B,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA,CAAA;AAAA,UAC7B,WAAA,EAAa,KAAK,WAAA,IAAe,EAAA;AAAA,UACjC,WAAA,EAAa,MAAM,IAAA,CAAK,kBAAA,CAAmB,KAAK,WAAW,CAAA;AAAA,UAC3D,YAAA,EAAc,MAAM,IAAA,CAAK,mBAAA,CAAoB,KAAK,YAAY,CAAA;AAAA,UAC9D,OAAA,EAAS,OAAO,EAAE,OAAA,EAAS,gBAAe,KAAgE;AACxG,YAAA,MAAM,kBAAkB,IAAA,CAAK,uBAAA;AAC7B,YAAA,IAAA,CAAK,0BAA0B,cAAA,IAAkB,IAAA;AACjD,YAAA,IAAI;AACF,cAAA,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,gBAAA,EAAmB,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,EAAE,QAAA,EAAU,OAAA,EAAS,CAAA;AACvE,cAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,QAAA;AAAA,gBAC5B;AAAA,kBACE,MAAM,IAAA,CAAK,IAAA;AAAA,kBACX,SAAA,EAAW;AAAA,iBACb;AAAA,gBACAC,6BAAA;AAAA,gBACA;AAAA,kBACE,SAAS,IAAA,CAAK;AAAA;AAChB,eACF;AAEA,cAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,4BAAA,EAA+B,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAC5D,cAAA,OAAO,GAAA;AAAA,YACT,SAAS,CAAA,EAAG;AACV,cAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,oBAAA,EAAuB,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI;AAAA,gBACpD,KAAA,EAAO,aAAa,KAAA,GAAQ,CAAA,CAAE,QAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA;AAAA,gBAC/D,QAAA,EAAU;AAAA,eACX,CAAA;AACD,cAAA,MAAM,CAAA;AAAA,YACR,CAAA,SAAE;AACA,cAAA,IAAA,CAAK,uBAAA,GAA0B,eAAA;AAAA,YACjC;AAAA,UACF;AAAA,SACD,CAAA;AAED,QAAA,IAAI,KAAK,IAAA,EAAM;AACb,UAAA,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,GAAI,UAAA;AAAA,QACxB;AAAA,MACF,SAAS,iBAAA,EAA4B;AAEnC,QAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,mDAAA,EAAsD,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI;AAAA,UACnF,OAAO,iBAAA,YAA6B,KAAA,GAAQ,iBAAA,CAAkB,KAAA,GAAQ,OAAO,iBAAiB,CAAA;AAAA,UAC9F,iBAAA,EAAmB;AAAA,SACpB,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;AAMO,IAAM,eAAA,GAAN,cAA8B,uBAAA,CAAwB;AAAA,EAC3D,YAAY,IAAA,EAAsC;AAChD,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,MACV;AAAA,KACF;AAAA,EACF;AACF;ACpmBA,IAAM,kBAAA,uBAAyB,GAAA,EAA4C;AAQpE,IAAM,SAAA,GAAN,cAAwB7B,eAAAA,CAAW;AAAA,EAChC,gBAA2D,EAAC;AAAA,EAC5D,EAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA,uBAAqB,GAAA,EAAqC;AAAA,EAC1D,iBAAA,GAA0C,IAAA;AAAA,EAElD,YAAY,IAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,EAAE,IAAA,EAAM,WAAA,EAAa,CAAA;AAC3B,IAAA,IAAA,CAAK,cAAA,GAAiB,KAAK,OAAA,IAAWC,wCAAAA;AACtC,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,OAAA;AAC1B,IAAA,IAAA,CAAK,EAAA,GAAK,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,MAAA,EAAO;AAEjC,IAAA,IAAI,KAAK,EAAA,EAAI;AACX,MAAA,IAAA,CAAK,KAAK,IAAA,CAAK,EAAA;AACf,MAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AAE7C,MAAA,IAAI,UAAU,CAAC6B,sBAAA,CAAM,OAAO,aAAA,EAAe,IAAA,CAAK,OAAO,CAAA,EAAG;AACxD,QAAA,MAAMC,iBAAAA,GAAmB,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACvD,QAAA,IAAIA,iBAAAA,EAAkB;AACpB,UAAA,KAAKA,kBAAiB,UAAA,EAAW;AACjC,UAAA,kBAAA,CAAmB,MAAA,CAAO,KAAK,EAAE,CAAA;AAAA,QACnC;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,EAAA,GAAK,KAAK,MAAA,EAAO;AAAA,IACxB;AAGA,IAAA,MAAM,gBAAA,GAAmB,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACvD,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAQvB,CAAA;AAAA,MACK;AACA,MAAA,OAAO,gBAAA;AAAA,IACT;AAEA,IAAA,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AACpC,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,IAAW,WAAA,GAAc;AACvB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,OAAO,UAAA,EAAoB,OAAA,KAAyE;AAC7G,QAAA,IAAI;AACF,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,UAAA,OAAO,cAAA,CAAe,WAAA,CAAY,SAAA,CAAU,OAAO,CAAA;AAAA,QACrD,SAAS,GAAA,EAAK;AACZ,UAAA,MAAM,IAAIP,iBAAAA;AAAA,YACR;AAAA,cACE,EAAA,EAAI,0CAAA;AAAA,cACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,cACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,cACxB,OAAA,EAAS;AAAA,gBACP;AAAA;AACF,aACF;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,KACF;AAAA,EACF;AAAA,EAEA,IAAW,SAAA,GAAY;AACrB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,OAAO;AAAA,MACL,MAAM,YAAiD;AACrD,QAAA,MAAM,eAA2C,EAAC;AAClD,QAAA,KAAA,MAAW,UAAA,IAAc,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA,EAAG;AACxD,UAAA,IAAI;AACF,YAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,YAAA,YAAA,CAAa,UAAU,CAAA,GAAI,MAAM,cAAA,CAAe,UAAU,IAAA,EAAK;AAAA,UACjE,SAASH,OAAA,EAAO;AACd,YAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,cACtB;AAAA,gBACE,EAAA,EAAI,kCAAA;AAAA,gBACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,gBACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,gBACxB,OAAA,EAAS;AAAA,kBACP;AAAA;AACF,eACF;AAAA,cACAH;AAAA,aACF;AACA,YAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,YAAA,IAAA,CAAK,MAAA,CAAO,MAAM,uCAAA,EAAyC,EAAE,OAAO,WAAA,CAAY,QAAA,IAAY,CAAA;AAAA,UAC9F;AAAA,QACF;AACA,QAAA,OAAO,YAAA;AAAA,MACT,CAAA;AAAA,MACA,WAAW,YAAyD;AAClE,QAAA,MAAM,eAAmD,EAAC;AAC1D,QAAA,KAAA,MAAW,UAAA,IAAc,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA,EAAG;AACxD,UAAA,IAAI;AACF,YAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,YAAA,YAAA,CAAa,UAAU,CAAA,GAAI,MAAM,cAAA,CAAe,UAAU,SAAA,EAAU;AAAA,UACtE,SAASA,OAAA,EAAO;AACd,YAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,cACtB;AAAA,gBACE,EAAA,EAAI,2CAAA;AAAA,gBACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,gBACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,gBACxB,OAAA,EAAS;AAAA,kBACP;AAAA;AACF,eACF;AAAA,cACAH;AAAA,aACF;AACA,YAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,YAAA,IAAA,CAAK,MAAA,CAAO,MAAM,gDAAA,EAAkD,EAAE,OAAO,WAAA,CAAY,QAAA,IAAY,CAAA;AAAA,UACvG;AAAA,QACF;AACA,QAAA,OAAO,YAAA;AAAA,MACT,CAAA;AAAA,MACA,IAAA,EAAM,OAAO,UAAA,EAAoB,GAAA,KAAgB;AAC/C,QAAA,IAAI;AACF,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,UAAA,OAAO,cAAA,CAAe,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,QAC1C,SAASA,OAAA,EAAO;AACd,UAAA,MAAM,IAAIC,iBAAAA;AAAA,YACR;AAAA,cACE,EAAA,EAAI,iCAAA;AAAA,cACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,cACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,cACxB,OAAA,EAAS;AAAA,gBACP,UAAA;AAAA,gBACA;AAAA;AACF,aACF;AAAA,YACAH;AAAA,WACF;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,SAAA,EAAW,OAAO,UAAA,EAAoB,GAAA,KAAgB;AACpD,QAAA,IAAI;AACF,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,UAAA,OAAO,cAAA,CAAe,SAAA,CAAU,SAAA,CAAU,GAAG,CAAA;AAAA,QAC/C,SAASA,OAAA,EAAO;AACd,UAAA,MAAM,IAAIC,iBAAAA;AAAA,YACR;AAAA,cACE,EAAA,EAAI,sCAAA;AAAA,cACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,cACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,cACxB,OAAA,EAAS;AAAA,gBACP,UAAA;AAAA,gBACA;AAAA;AACF,aACF;AAAA,YACAH;AAAA,WACF;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,WAAA,EAAa,OAAO,UAAA,EAAoB,GAAA,KAAgB;AACtD,QAAA,IAAI;AACF,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,UAAA,OAAO,cAAA,CAAe,SAAA,CAAU,WAAA,CAAY,GAAG,CAAA;AAAA,QACjD,SAAS,GAAA,EAAK;AACZ,UAAA,MAAM,IAAIC,iBAAAA;AAAA,YACR;AAAA,cACE,EAAA,EAAI,wCAAA;AAAA,cACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,cACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,cACxB,OAAA,EAAS;AAAA,gBACP,UAAA;AAAA,gBACA;AAAA;AACF,aACF;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,SAAA,EAAW,OAAO,UAAA,EAAoB,OAAA,KAA+C;AACnF,QAAA,IAAI;AACF,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,UAAA,OAAO,cAAA,CAAe,SAAA,CAAU,SAAA,CAAU,OAAO,CAAA;AAAA,QACnD,SAAS,GAAA,EAAK;AACZ,UAAA,MAAM,IAAIF,iBAAAA;AAAA,YACR;AAAA,cACE,EAAA,EAAI,uCAAA;AAAA,cACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,cACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,cACxB,OAAA,EAAS;AAAA,gBACP;AAAA;AACF,aACF;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAe,OAAO,UAAA,EAAoB,OAAA,KAAwB;AAChE,QAAA,IAAI;AACF,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,UAAA,OAAO,cAAA,CAAe,SAAA,CAAU,aAAA,CAAc,OAAO,CAAA;AAAA,QACvD,SAAS,GAAA,EAAK;AACZ,UAAA,MAAM,IAAIF,iBAAAA;AAAA,YACR;AAAA,cACE,EAAA,EAAI,4CAAA;AAAA,cACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,cACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,cACxB,OAAA,EAAS;AAAA,gBACP;AAAA;AACF,aACF;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,KACF;AAAA,EACF;AAAA,EAEA,IAAW,OAAA,GAAU;AACnB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,OAAO;AAAA,MACL,MAAM,YAA+C;AACnD,QAAA,MAAM,aAAuC,EAAC;AAC9C,QAAA,KAAA,MAAW,UAAA,IAAc,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA,EAAG;AACxD,UAAA,IAAI;AACF,YAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,YAAA,UAAA,CAAW,UAAU,CAAA,GAAI,MAAM,cAAA,CAAe,QAAQ,IAAA,EAAK;AAAA,UAC7D,SAASH,OAAA,EAAO;AACd,YAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,cACtB;AAAA,gBACE,EAAA,EAAI,gCAAA;AAAA,gBACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,gBACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,gBACxB,OAAA,EAAS;AAAA,kBACP;AAAA;AACF,eACF;AAAA,cACAH;AAAA,aACF;AACA,YAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,YAAA,IAAA,CAAK,MAAA,CAAO,MAAM,qCAAA,EAAuC,EAAE,OAAO,WAAA,CAAY,QAAA,IAAY,CAAA;AAAA,UAC5F;AAAA,QACF;AACA,QAAA,OAAO,UAAA;AAAA,MACT,CAAA;AAAA,MACA,KAAK,OAAO;AAAA,QACV,UAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACF,KAKM;AACJ,QAAA,IAAI;AACF,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,UAAA,OAAO,eAAe,OAAA,CAAQ,GAAA,CAAI,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,CAAA;AAAA,QAC3D,SAASA,OAAA,EAAO;AACd,UAAA,MAAM,IAAIC,iBAAAA;AAAA,YACR;AAAA,cACE,EAAA,EAAI,8BAAA;AAAA,cACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,cACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,cACxB,OAAA,EAAS;AAAA,gBACP,UAAA;AAAA,gBACA;AAAA;AACF,aACF;AAAA,YACAH;AAAA,WACF;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAe,OAAO,UAAA,EAAoB,OAAA,KAAwB;AAChE,QAAA,IAAI;AACF,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA;AACxE,UAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,aAAA,CAAc,OAAO,CAAA;AAAA,QACrD,SAASA,OAAA,EAAO;AACd,UAAA,MAAM,IAAIC,iBAAAA;AAAA,YACR;AAAA,cACE,EAAA,EAAI,0CAAA;AAAA,cACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,cACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,cACxB,OAAA,EAAS;AAAA,gBACP;AAAA;AACF,aACF;AAAA,YACAH;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,kBAAA,GAAqB;AAC3B,IAAA,IAAI,CAAC,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACpC,MAAA,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,IACtC;AAAA,EACF;AAAA,EAEQ,MAAA,GAAS;AACf,IAAA,MAAM,OAAO,IAAA,CAAK,SAAA,CAAU,KAAK,aAAa,CAAA,CAAE,UAAU,MAAM,CAAA;AAChE,IAAA,MAAM,WAAA,GAAcS,OAAA,CAAO,CAAA,SAAA,CAAA,EAAaA,OAAA,CAAO,GAAG,CAAA;AAElD,IAAA,OAAOA,OAAA,CAAO,MAAM,WAAW,CAAA;AAAA,EACjC;AAAA,EAEA,MAAa,UAAA,GAAa;AAGxB,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,MAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,IACd;AAEA,IAAA,IAAA,CAAK,qBAAqB,YAAY;AACpC,MAAA,IAAI;AACF,QAAA,kBAAA,CAAmB,MAAA,CAAO,KAAK,EAAE,CAAA;AAGjC,QAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,KAAK,cAAA,CAAe,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAA,MAAA,KAAU,MAAA,CAAO,UAAA,EAAY,CAAC,CAAA;AAC7F,QAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAAA,MAC5B,CAAA,SAAE;AACA,QAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,MAC3B;AAAA,IACF,CAAA,GAAG;AAEH,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,EACd;AAAA,EAEA,MAAa,QAAA,GAAW;AACtB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,MAAM,iBAAsC,EAAC;AAE7C,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,eAAA,CAAgB,OAAO,EAAE,UAAA,EAAY,OAAM,KAAM;AAC1D,QAAA,KAAA,MAAW,CAAC,QAAA,EAAU,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1D,UAAA,cAAA,CAAe,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA,GAAI,UAAA;AAAA,QAChD;AAAA,MACF,CAAC,CAAA;AAAA,IACH,SAAST,OAAA,EAAO;AACd,MAAA,MAAM,IAAIC,iBAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,6BAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc;AAAA,SAC1B;AAAA,QACAH;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,MAAa,WAAA,GAAc;AACzB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,MAAM,oBAAyD,EAAC;AAEhE,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,eAAA,CAAgB,OAAO,EAAE,UAAA,EAAY,OAAM,KAAM;AAC1D,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,iBAAA,CAAkB,UAAU,CAAA,GAAI,KAAA;AAAA,QAClC;AAAA,MACF,CAAC,CAAA;AAAA,IACH,SAASA,OAAA,EAAO;AACd,MAAA,MAAM,IAAIC,iBAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,gCAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc;AAAA,SAC1B;AAAA,QACAH;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,iBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,YAAA,GAAe;AAC1B,IAAA,OAAO,IAAA,CAAK,UAAU,IAAA,EAAK;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAA,GAAqC;AACvC,IAAA,MAAM,aAAqC,EAAC;AAC5C,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,IAAA,CAAK,cAAA,CAAe,SAAQ,EAAG;AAChE,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,UAAA,CAAW,UAAU,IAAI,MAAA,CAAO,SAAA;AAAA,MAClC;AAAA,IACF;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEA,MAAc,kBAAA,CAAmB,IAAA,EAAc,MAAA,EAAqE;AAClH,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,MAAA,MAAM,IAAA,CAAK,iBAAA;AAAA,IACb;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC3C,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAEnD,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAI,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,CAAA;AAEhE,IAAA,IAAI,MAAA,EAAQ;AAGV,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAI,CAAA,wBAAA,CAA0B,CAAA;AAAA,MAC1D;AACA,MAAA,MAAM,eAAe,OAAA,EAAQ;AAC7B,MAAA,OAAO,cAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,cAAA,EAAiB,IAAI,CAAA,WAAA,CAAa,CAAA;AAGpD,IAAA,MAAM,SAAA,GAAY,IAAI,uBAAA,CAAwB;AAAA,MAC5C,IAAA;AAAA,MACA,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,MAAA,CAAO,OAAA,IAAW,IAAA,CAAK;AAAA,KACjC,CAAA;AAED,IAAA,SAAA,CAAU,WAAA,CAAY,KAAK,MAAM,CAAA;AAEjC,IAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,EAAM,SAAS,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,OAAA,EAAQ;AAAA,IAC1B,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,2BAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,CAAA,gCAAA,EAAmC,IAAI,CAAA,EAAA,EAAK,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAAA,UACvG,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,6CAAA,EAA+C,EAAE,OAAO,WAAA,CAAY,QAAA,IAAY,CAAA;AAClG,MAAA,IAAA,CAAK,cAAA,CAAe,OAAO,IAAI,CAAA;AAC/B,MAAA,MAAM,WAAA;AAAA,IACR;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,aAAA,EAAgB,IAAI,CAAA,WAAA,CAAa,CAAA;AACnD,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,MAAc,4BAA4B,UAAA,EAAsD;AAC9F,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA;AAClD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,UAAU,CAAA,CAAE,CAAA;AAAA,IAC1E;AACA,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,UAAA,EAAY,YAAY,CAAA;AAAA,EACzD;AAAA,EAEA,MAAc,gBACZ,EAAA,EAKA;AACA,IAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,MACZ,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,aAAa,CAAA,CAAE,IAAI,OAAO,CAAC,UAAA,EAAY,YAAY,CAAA,KAAM;AAC3E,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,kBAAA,CAAmB,YAAY,YAAY,CAAA;AACrE,QAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,KAAA,EAAM;AACjC,QAAA,MAAM,EAAA,CAAG,EAAE,UAAA,EAAY,KAAA,EAAO,QAAQ,CAAA;AAAA,MACxC,CAAC;AAAA,KACH;AAAA,EACF;AACF;AAcO,IAAM,gBAAA,GAAN,cAA+B,SAAA,CAAU;AAAA,EAC9C,YAAY,IAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,MACV,CAAA,wNAAA;AAAA,KACF;AAAA,EACF;AACF;;;AC5gBA,IAAI,eAAe,MAAM;AAAA,EACvB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAmB,EAAC;AAAA,EACpB,gBAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,MAAA,GAAS,KAAA;AAAA,EACT,WAAA,CAAY,UAAU,SAAA,EAAW;AAC/B,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,SAAS,SAAA,EAAU;AACjC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,WAAA,EAAY;AAC/B,IAAA,MAAM,MAAA,GAAS,UAAU,SAAA,EAAU;AACnC,IAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,YAAY;AACrC,MAAA,MAAM,OAAO,MAAA,EAAO;AAAA,IACtB,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,cAAA,CAAe;AAAA,MACzC,MAAM,KAAK,UAAA,EAAY;AACrB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAA,GAAO,UAAA,CAAW,KAAA,EAAM,GAAI,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MACtD,CAAA;AAAA,MACA,QAAQ,MAAM;AACZ,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACb;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EACA,MAAM,MAAM,KAAA,EAAO;AACjB,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AAAA,MACnC;AACA,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAAA,IAC/B,CAAA,CAAA,MAAQ;AAAA,IACR;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,MAAM,QAAQ,KAAA,EAAO;AACnB,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,IAAI,CAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,MAAM,EAAA,EAAI;AACR,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,QAAQ,UAAA,CAAW,GAAA,EAAK,EAAE,CAAC,CAAA;AAAA,EACjD;AAAA,EACA,MAAM,KAAA,GAAQ;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,IAC1B,CAAA,CAAA,MAAQ;AAAA,IACR;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAChB;AAAA,EACA,MAAM,KAAK,IAAA,EAAM;AACf,IAAA,IAAA,CAAK,OAAO,WAAA,EAAY;AACxB,IAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAK,UAAU,EAAE,YAAA,EAAc,MAAM,CAAA;AACvD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,SAAA,EAAU;AAAA,EACxC;AAAA,EACA,QAAQ,QAAA,EAAU;AAChB,IAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,QAAQ,CAAA;AAAA,EACrC;AAAA,EACA,KAAA,GAAQ;AACN,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,CAAC,UAAA,KAAe,YAAY,CAAA;AAAA,IAC5D;AAAA,EACF;AACF,CAAA;;;AChEA,IAAI,kBAAkB,MAAM;AAC1B,EAAA,MAAM,OAAA,GAAU,OAAO,GAAA,KAAQ,WAAA,GAAc,IAAI,OAAA,GAAU,MAAA;AAC3D,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA;AAChG,EAAA,eAAA,GAAkB,MAAM,MAAA;AACxB,EAAA,OAAO,MAAA;AACT,CAAA;;;ACRA,IAAI,wBAAA,GAA2B;AAAA,EAC7B,SAAA,EAAW,CAGb,CAAA;AAiFA,IAAI,kBAAkB,OAAO,GAAA,EAAK,KAAA,EAAO,iBAAA,EAAmB,SAAS,MAAA,KAAW;AAC9E,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,EAAE,eAAe,MAAA,CAAA,EAAS;AACvD,IAAA,IAAI,EAAE,eAAe,OAAA,CAAA,EAAU;AAC7B,MAAA,GAAA,GAAM,IAAI,QAAA,EAAS;AAAA,IACrB;AACA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,GAAA,GAAM,MAAM,GAAA;AAAA,IACd;AAAA,EACF;AACA,EAAA,MAAM,YAAY,GAAA,CAAI,SAAA;AACtB,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAA,CAAO,CAAC,CAAA,IAAK,GAAA;AAAA,EACf,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,CAAC,GAAG,CAAA;AAAA,EACf;AACA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,OAAO,MAAA,EAAQ,OAAA,EAAS,CAAC,CAAC,CAAA,CAAE,IAAA;AAAA,IAC9E,CAAC,QAAQ,OAAA,CAAQ,GAAA;AAAA,MACf,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,eAAA,CAAgB,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,MAAM,CAAC;AAAA,KACxF,CAAE,IAAA,CAAK,MAAM,MAAA,CAAO,CAAC,CAAC;AAAA,GACxB;AACA,EAEO;AACL,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;;;AC9GA,IAAI,eAAA,GAAkB,cAAc,YAAA,CAAa;AAAA,EAC/C,WAAA,CAAY,UAAU,QAAA,EAAU;AAC9B,IAAA,KAAA,CAAM,UAAU,QAAQ,CAAA;AAAA,EAC1B;AAAA,EACA,MAAM,SAAS,OAAA,EAAS;AACtB,IAAA,MAAM,IAAA,GAAO,MAAM,eAAA,CAAgB,OAAA,CAAQ,MAAM,wBAAA,CAAyB,SAAA,EAAW,KAAA,EAAO,EAAE,CAAA;AAC9F,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AAC/C,MAAA,OAAO,SAAS,IAAI,CAAA,CAAA;AAAA,IACtB,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACZ,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,OAAA,CAAQ,KAAA,IAAS,CAAA,OAAA,EAAU,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,MACxC,SAAA;AAAA,MACA,OAAA,CAAQ,EAAA,IAAM,CAAA,IAAA,EAAO,OAAA,CAAQ,EAAE,CAAA,CAAA;AAAA,MAC/B,OAAA,CAAQ,KAAA,IAAS,CAAA,OAAA,EAAU,OAAA,CAAQ,KAAK,CAAA;AAAA,MACxC,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAC/B,IAAA,MAAM,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC1B;AACF,CAAA;AACA,IAAI,GAAA,GAAM,OAAOO,OAAAA,EAAQ,EAAA,EAAI,OAAA,KAAY;AACvC,EAAA,IAAI;AACF,IAAA,MAAM,GAAGA,OAAM,CAAA;AAAA,EACjB,SAAS,CAAA,EAAG;AACV,IAMO;AACL,MAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,IACjB;AAAA,EACF,CAAA,SAAE;AACA,IAAAA,QAAO,KAAA,EAAM;AAAA,EACf;AACF,CAAA;AACA,IAAI,YAAA,uBAAmC,OAAA,EAAQ;AAC/C,IAAI,SAAA,GAAY,CAAC,CAAA,EAAG,EAAA,EAAI,OAAA,KAAY;AAClC,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,IAAI,eAAA,EAAgB;AACnD,EAAA,MAAMA,OAAAA,GAAS,IAAI,eAAA,CAAgB,QAAA,EAAU,QAAQ,CAAA;AACrD,EAAA,IAAI,iBAAgB,EAAG;AACrB,IAAA,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,gBAAA,CAAiB,SAAS,MAAM;AAC/C,MAAA,IAAI,CAACA,QAAO,MAAA,EAAQ;AAClB,QAAAA,QAAO,KAAA,EAAM;AAAA,MACf;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACA,EAAA,YAAA,CAAa,GAAA,CAAIA,OAAAA,CAAO,gBAAA,EAAkB,CAAC,CAAA;AAC3C,EAAA,CAAA,CAAE,MAAA,CAAO,qBAAqB,SAAS,CAAA;AACvC,EAAA,CAAA,CAAE,MAAA,CAAO,gBAAgB,mBAAmB,CAAA;AAC5C,EAAA,CAAA,CAAE,MAAA,CAAO,iBAAiB,UAAU,CAAA;AACpC,EAAA,CAAA,CAAE,MAAA,CAAO,cAAc,YAAY,CAAA;AACnC,EAAA,GAAA,CAAIA,OAAAA,EAAQ,EAAW,CAAA;AACvB,EAAA,OAAO,CAAA,CAAE,WAAA,CAAYA,OAAAA,CAAO,gBAAgB,CAAA;AAC9C,CAAA;ACxDA,IAAM,oBAAA,GAAuB,IAAI,IAAA,GAAO,IAAA;AACjC,IAAM,eAAN,MAAmB;AAAA,EACtB,UAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA;AAAA;AAAA;AAAA,EAIA,WAAA,CAAY,YAAYA,OAAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAA,CAAK,UAAA,GAAa,OAAO,UAAA,EAAW;AACpC,IAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,MAAM;AACtB,MAAA,KAAK,KAAK,KAAA,EAAM;AAAA,IACpB,CAAC,CAAA;AAAA,EACL;AAAA,EACA,IAAI,SAAA,GAAY;AACZ,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EAChB;AAAA;AAAA,EAEA,MAAM,KAAA,GAAQ;AACV,IAAA,IAAI,IAAA,CAAK,UAAU,IAAA,EAAM;AACrB,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC5C;AACA,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACpB,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,IAAA,CAAK,OAAO,QAAA,CAAS;AAAA,MACvB,KAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACT,CAAA;AACD,IAAA,MAAM,IAAA,CAAK,OAAO,QAAA,CAAS;AAAA,MACvB,KAAA,EAAO,UAAA;AAAA,MACP,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA,WAAA,EAAc,KAAK,SAAS,CAAA;AAAA,KACvD,CAAA;AAAA,EACL;AAAA,EACA,MAAM,kBAAkB,OAAA,EAAS;AAC7B,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,MAAA,IAAU,IAAA,EAAM;AAC7B,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,gCAAA,EAAkC,GAAG,CAAA;AAAA,IAC7D;AACA,IAAA,IAAI;AACA,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,cAAc,CAAA,IAAK,EAAA;AAC1D,MAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC3C,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,WAAW,CAAA,CAAE,CAAA;AAAA,MAC9D;AAEA,MAAA,MAAM,aAAA,GAAgB,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAI,MAAA,CAAO,gBAAgB,CAAA,IAAK,GAAA,EAAK,EAAE,CAAA;AACrF,MAAA,IAAI,gBAAgB,oBAAA,EAAsB;AACtC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,aAAa,CAAA,MAAA,CAAQ,CAAA;AAAA,MACpE;AAEA,MAAA,MAAM,IAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAK;AACrC,MAAA,MAAM,IAAA,CAAK,cAAc,IAAI,CAAA;AAC7B,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,UAAA,EAAY,GAAG,CAAA;AAAA,IACvC,SACO,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AAAA,IACpC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,cAAc,OAAA,EAAS;AACzB,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI;AACA,MAAA,aAAA,GAAgBC,6BAAA,CAAqB,MAAM,OAAO,CAAA;AAAA,IACtD,SACO,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,MAAA,MAAM,KAAA;AAAA,IACV;AACA,IAAA,IAAA,CAAK,YAAY,aAAa,CAAA;AAAA,EAClC;AAAA,EACA,MAAM,KAAA,GAAQ;AACV,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACrB,MAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,IACtB;AAAA,EACJ;AAAA,EACA,MAAM,KAAK,OAAA,EAAS;AAChB,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACrB,MAAA,MAAM,IAAI,MAAM,eAAe,CAAA;AAAA,IACnC;AACA,IAAA,MAAM,IAAA,CAAK,OAAO,QAAA,CAAS;AAAA,MACvB,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAAA,EACL;AACJ,CAAA;AClFO,IAAM,sBAAN,MAA0B;AAAA,EACd,SAAA;AAAA,EACA,YAAA;AAAA,EACA,mBAAA;AAAA,EAEjB,YAAY,YAAA,EAA+C;AACzD,IAAA,IAAA,CAAK,YAAY,YAAA,CAAa,SAAA;AAC9B,IAAA,IAAA,CAAK,eAAe,YAAA,CAAa,YAAA;AACjC,IAAA,IAAA,CAAK,sBAAsB,YAAA,CAAa,mBAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,iBAAA,GAAmC;AAC9C,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,IAAA,CAAK,2FAA2F,CAAA;AACjH,IAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,YAAA,EAAa,CAAE,qBAAA,EAAsB;AAAA,IAClD,SAASX,OAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,oDAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM;AAAA,SACR;AAAA,QACAH;AAAA,OACF;AACA,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,kDAAA,EAAoD;AAAA,QACzE,KAAA,EAAO,YAAY,QAAA;AAAS,OAC7B,CAAA;AACD,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,cAAA,CAAe,WAAW,CAAA;AAC3C,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AACF,CAAA;ACnCO,IAAM,wBAAN,MAA4B;AAAA,EAChB,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,6BAAA;AAAA,EAEjB,YAAY,YAAA,EAAiD;AAC3D,IAAA,IAAA,CAAK,mBAAmB,YAAA,CAAa,gBAAA;AACrC,IAAA,IAAA,CAAK,YAAY,YAAA,CAAa,SAAA;AAC9B,IAAA,IAAA,CAAK,eAAe,YAAA,CAAa,YAAA;AACjC,IAAA,IAAA,CAAK,wBAAwB,YAAA,CAAa,qBAAA;AAC1C,IAAA,IAAA,CAAK,gCAAgC,YAAA,CAAa,6BAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,aAAA,CAAc,EAAE,GAAA,EAAI,EAAmC;AAClE,IAAA,IAAI,IAAA,CAAK,gBAAA,EAAiB,CAAE,GAAA,CAAI,GAAG,CAAA,EAAG;AACpC,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,IAAA,CAAK,CAAA,0EAAA,EAA6E,GAAG,CAAA,CAAE,CAAA;AACxG,MAAA,IAAI;AACF,QAAA,MAAM,KAAK,YAAA,EAAa,CAAE,mBAAA,CAAoB,EAAE,KAAK,CAAA;AAAA,MACvD,SAASA,OAAA,EAAO;AACd,QAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,UACtB;AAAA,YACE,EAAA,EAAI,iDAAA;AAAA,YACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,YACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,YACxB,IAAA,EAAM,8CAAA;AAAA,YACN,OAAA,EAAS;AAAA,cACP;AAAA;AACF,WACF;AAAA,UACAH;AAAA,SACF;AACA,QAAA,IAAA,CAAK,SAAA,EAAU,CAAE,cAAA,CAAe,WAAW,CAAA;AAC3C,QAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,+CAAA,EAAiD;AAAA,UACtE,KAAA,EAAO,YAAY,QAAA;AAAS,SAC7B,CAAA;AACD,QAAA,MAAM,WAAA;AAAA,MACR;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,CAAA,SAAA,EAAY,GAAG,CAAA,iDAAA,CAAmD,CAAA;AAAA,IAC3F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,iBAAA,GAAmC;AAC9C,IAAA,IAAA,CAAK,WAAU,CAAE,IAAA;AAAA,MACf;AAAA,KACF;AACA,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,6BAAA,EAA8B;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,YAAA,EAAa,CAAE,uBAAA,EAAwB;AAAA,IACpD,SAASA,OAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,sDAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM;AAAA,SACR;AAAA,QACAH;AAAA,OACF;AACA,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,cAAA,CAAe,WAAW,CAAA;AAC3C,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,oDAAA,EAAsD;AAAA,QAC3E,KAAA,EAAO,YAAY,QAAA;AAAS,OAC7B,CAAA;AACD,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AACF,CAAA;;;AClCO,IAAM,SAAA,GAAN,cAAwBY,iBAAA,CAAc;AAAA,EACnC,MAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,wBAAA,uBAA2E,GAAA,EAAI;AAAA;AAAA,EAE/E,mBAAA,uBAA+C,GAAA,EAAI;AAAA,EAEnD,gBAAA;AAAA,EACA,wBAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA,uBAAiC,GAAA,EAAI;AAAA,EACrC,mBAAA;AAAA,EACQ,SAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA;AAAA;AAAA;AAAA,EAKT,iBAAA,GAAsD;AAC3D,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,eAAA,GAAkD;AACvD,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,oBAAoB,SAAA,EAA6C;AACtE,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,SAAS,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,GAAoB;AACzB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,IAAA,EAAwF;AAClG,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,SAAA;AAC5B,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,OAAA;AAE1B,IAAA,MAAM,YAAA,GAAmC;AAAA,MACvC,OAAO,EAAC;AAAA,MACR,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,MACzB,aAAa;AAAC,KAChB;AAEA,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,YAAA,CAAa,SAAA,GAAY,EAAE,SAAA,EAAW,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,IAChE;AAEA,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,YAAA,CAAa,OAAA,GAAU,EAAE,WAAA,EAAa,IAAA,EAAK;AAAA,IAC7C;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAIC,eAAA,CAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ,EAAG,EAAE,cAAc,CAAA;AAErF,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,MACV,CAAA,uBAAA,EAA0B,KAAK,IAAI,CAAA,GAAA,EAAM,KAAK,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,EAAE,CAAA,cAAA,EAAiB,MAAA,CAAO,KAAK,IAAA,CAAK,cAAc,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,8BAAA,EAAiC,IAAA,CAAK,SAAA,CAAU,YAAY,CAAC,CAAA;AAAA,KAChM;AAEA,IAAA,IAAA,CAAK,iBAAA,uBAAwB,GAAA,EAAI;AAGjC,IAAA,IAAA,CAAK,wBAAA,CAAyB,KAAK,MAAM,CAAA;AAEzC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,qBAAA,CAAsB;AAAA,MACzC,gBAAA,EAAkB,MAAM,IAAA,CAAK,aAAA;AAAA,MAC7B,SAAA,EAAW,MAAM,IAAA,CAAK,MAAA;AAAA,MACtB,YAAA,EAAc,MAAM,IAAA,CAAK,MAAA;AAAA,MACzB,uBAAuB,MAAM;AAC3B,QAAA,IAAA,CAAK,gBAAA,GAAmB,MAAA;AAAA,MAC1B,CAAA;AAAA,MACA,+BAA+B,MAAM;AACnC,QAAA,IAAA,CAAK,wBAAA,GAA2B,MAAA;AAAA,MAClC;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,mBAAA,CAAoB;AAAA,MACrC,SAAA,EAAW,MAAM,IAAA,CAAK,MAAA;AAAA,MACtB,YAAA,EAAc,MAAM,IAAA,CAAK,MAAA;AAAA,MACzB,qBAAqB,MAAM;AACzB,QAAA,IAAA,CAAK,cAAA,GAAiB,MAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,WAAA,GAAc;AAAA,MACjB,WAAA,EAAa,OAAM,OAAA,KAAW;AAC5B,QAAA,OAAO,IAAA,CAAK,yBAAyB,OAAO,CAAA;AAAA,MAC9C;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAc,wBAAA,CACZ,OAAA,EACA,cAAA,EACuB;AACvB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAEnE,IAAA,MAAM,MAAA,GAAS,kBAAkB,IAAA,CAAK,MAAA;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AAEjD,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,+BAAA,EAAkC,KAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAE,CAAA;AAE9E,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,oBAAA,GAA+B;AACrC,IAAA,MAAM,YAAA,GAAmC;AAAA,MACvC,OAAO,EAAC;AAAA,MACR,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,MACzB,aAAa;AAAC,KAChB;AAEA,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,YAAA,CAAa,SAAA,GAAY,EAAE,SAAA,EAAW,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,IAChE;AAEA,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,YAAA,CAAa,OAAA,GAAU,EAAE,WAAA,EAAa,IAAA,EAAK;AAAA,IAC7C;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAIA,eAAA,CAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ,EAAG,EAAE,cAAc,CAAA;AAG9F,IAAA,IAAA,CAAK,yBAAyB,cAAc,CAAA;AAE5C,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,yBAAyB,cAAA,EAAwB;AAEvD,IAAA,cAAA,CAAe,iBAAA,CAAkBC,iCAAwB,YAAY;AACnE,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,4BAA4B,CAAA;AAC9C,MAAA,OAAO;AAAA,QACL,OAAO,MAAA,CAAO,MAAA,CAAO,KAAK,cAAc,CAAA,CAAE,IAAI,CAAA,IAAA,KAAQ;AACpD,UAAA,MAAM,QAAA,GAAgB;AAAA,YACpB,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,WAAA,EAAa,KAAK,UAAA,CAAW;AAAA,WAC/B;AACA,UAAA,IAAI,KAAK,YAAA,EAAc;AACrB,YAAA,QAAA,CAAS,YAAA,GAAe,KAAK,YAAA,CAAa,UAAA;AAAA,UAC5C;AACA,UAAA,OAAO,QAAA;AAAA,QACT,CAAC;AAAA,OACH;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,cAAA,CAAe,iBAAA,CAAkBC,8BAAA,EAAuB,OAAO,OAAA,EAAS,KAAA,KAAU;AAChF,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,OAAO,IAAI,CAAA;AACpD,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,wBAAA,EAA2B,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,YAAA,CAAc,CAAA;AAC7E,UAAA,OAAO;AAAA,YACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,cAAA,EAAiB,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,CAAA;AAAA,YACxE,OAAA,EAAS;AAAA,WACX;AAAA,QACF;AAEA,QAAA,MAAM,UAAA,GAAa,KAAK,UAAA,CAAW,QAAA,GAAW,QAAQ,MAAA,CAAO,SAAA,IAAa,EAAE,CAAA;AAC5E,QAAA,IAAI,UAAA,IAAc,CAAC,UAAA,CAAW,OAAA,EAAS;AACrC,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,sCAAA,EAAyC,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,CAAA,CAAA,EAAK;AAAA,YAChF,QAAQ,UAAA,CAAW;AAAA,WACpB,CAAA;AAGD,UAAA,IAAI,aAAA,GAAgB,mBAAA;AACpB,UAAA,IAAI,QAAA,IAAY,WAAW,KAAA,IAAS,KAAA,CAAM,QAAQ,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA,EAAG;AAC1E,YAAA,aAAA,GAAgB,WAAW,KAAA,CAAM,MAAA,CAC9B,IAAI,CAAC,CAAA,KAAW,KAAK,CAAA,CAAE,IAAA,EAAM,KAAK,GAAG,CAAA,IAAK,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAChE,KAAK,IAAI,CAAA;AAAA,UACd,CAAA,MAAA,IAAW,UAAA,CAAW,KAAA,YAAiB,KAAA,EAAO;AAC5C,YAAA,aAAA,GAAgB,WAAW,KAAA,CAAM,OAAA;AAAA,UACnC;AAEA,UAAA,OAAO;AAAA,YACL,OAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAM,MAAA;AAAA,gBACN,IAAA,EAAM,CAAA;AAAA,EAA2E,aAAa;;AAAA,oBAAA,EAA2B,KAAK,SAAA,CAAU,OAAA,CAAQ,OAAO,SAAA,EAAW,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA;AAC5K,aACF;AAAA,YACA,OAAA,EAAS;AAAA;AAAA,WACX;AAAA,QACF;AACA,QAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,gBAAA,EAAmB,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,oCAAA,CAAsC,CAAA;AAC7F,UAAA,OAAO;AAAA,YACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,MAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,oCAAA,CAAA,EAAwC,CAAA;AAAA,YACpG,OAAA,EAAS;AAAA,WACX;AAAA,QACF;AAGA,QAAA,MAAM,kBAAA,GAAqB;AAAA,UACzB,WAAA,EAAa,OAAOC,QAAAA,KAAqC;AACvD,YAAA,OAAO,IAAA,CAAK,wBAAA,CAAyBA,QAAAA,EAAS,cAAc,CAAA;AAAA,UAC9D;AAAA,SACF;AAEA,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,SAAS,OAAA,CAAQ,MAAA,CAAO,SAAA,IAAa,EAAC,EAAG;AAAA,UACrF,UAAU,EAAC;AAAA,UACX,UAAA,EAAY,EAAA;AAAA,UACZ,WAAA,EAAa,kBAAA;AAAA,UACb;AAAA,SACD,CAAA;AAED,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,gBAAA,EAAmB,QAAQ,MAAA,CAAO,IAAI,wCAAwC,MAAM,CAAA;AACtG,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,MAAA,EAAS,OAAA,CAAQ,OAAO,IAAI,CAAA,2BAAA,EAA8B,QAAQ,CAAA,GAAA,CAAK,CAAA;AAExF,QAAA,MAAM,WAA2B,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,EAAC,EAAE;AAE/D,QAAA,IAAI,KAAK,YAAA,EAAc;AAErB,UAAA,IAAI,iBAAA;AACJ,UAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,uBAAuB,MAAA,EAAQ;AAEzE,YAAA,iBAAA,GAAoB,MAAA,CAAO,iBAAA;AAAA,UAC7B,CAAA,MAAO;AAEL,YAAA,iBAAA,GAAoB,MAAA;AAAA,UACtB;AAEA,UAAA,MAAM,mBAAmB,IAAA,CAAK,YAAA,CAAa,QAAA,GAAW,iBAAA,IAAqB,EAAE,CAAA;AAC7E,UAAA,IAAI,gBAAA,IAAoB,CAAC,gBAAA,CAAiB,OAAA,EAAS;AACjD,YAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,0CAAA,EAA6C,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,CAAA,CAAA,EAAK;AAAA,cACpF,QAAQ,gBAAA,CAAiB;AAAA,aAC1B,CAAA;AACD,YAAA,MAAM,IAAI,KAAA;AAAA,cACR,CAAA,oCAAA,EAAuC,QAAQ,MAAA,CAAO,IAAI,KAAK,IAAA,CAAK,SAAA,CAAU,gBAAA,CAAiB,KAAK,CAAC,CAAA;AAAA,aACvG;AAAA,UACF;AACA,UAAA,QAAA,CAAS,iBAAA,GAAoB,iBAAA;AAAA,QAC/B;AAEA,QAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,UAAA,QAAA,CAAS,OAAA,GAAU,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,iBAAiB,CAAA,EAAG,CAAA;AAAA,QACxF,CAAA,MAAO;AACL,UAAA,QAAA,CAAS,OAAA,GAAU;AAAA,YACjB;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,MAAM,OAAO,MAAA,KAAW,WAAW,MAAA,GAAS,IAAA,CAAK,UAAU,MAAM;AAAA;AACnE,WACF;AAAA,QACF;AAEA,QAAA,OAAO,QAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,QAAA,IAAI,KAAA,YAAiBpC,MAAE,QAAA,EAAU;AAC/B,UAAA,IAAA,CAAK,MAAA,CAAO,KAAK,wBAAA,EAA0B;AAAA,YACzC,IAAA,EAAM,QAAQ,MAAA,CAAO,IAAA;AAAA,YACrB,QAAQ,KAAA,CAAM,MAAA;AAAA,YACd,QAAA,EAAU,GAAG,QAAQ,CAAA,EAAA;AAAA,WACtB,CAAA;AACD,UAAA,OAAO;AAAA,YACL,OAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAM,MAAA;AAAA,gBACN,MAAM,CAAA,mBAAA,EAAsB,KAAA,CAAM,OAAO,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,CAAA,CAAE,IAAA,CAAK,KAAK,GAAG,CAAC,KAAK,CAAA,CAAE,OAAO,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AACnG,aACF;AAAA,YACA,OAAA,EAAS;AAAA,WACX;AAAA,QACF;AACA,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,uBAAA,EAA0B,OAAA,CAAQ,OAAO,IAAI,CAAA,CAAA,EAAI,EAAE,KAAA,EAAO,CAAA;AAC5E,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,CAAA,OAAA,EAAU,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,IAAI,CAAA;AAAA,UACpG,OAAA,EAAS;AAAA,SACX;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,cAAA,CAAe,iBAAA,CAAkBqC,8BAAA,EAAuB,OAAM,OAAA,KAAW;AACvE,MAAA,IAAA,CAAK,mBAAA,GAAsB,QAAQ,MAAA,CAAO,KAAA;AAC1C,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,sBAAA,EAAyB,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AACjE,MAAA,OAAO,EAAC;AAAA,IACV,CAAC,CAAA;AAGD,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,iCAAiC,cAAc,CAAA;AAAA,IACtD;AAGA,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,IAAA,CAAK,+BAA+B,cAAc,CAAA;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,iCAAiC,cAAA,EAAwB;AAC/D,IAAA,MAAM,0BAA0B,IAAA,CAAK,eAAA;AACrC,IAAA,IAAI,CAAC,uBAAA,EAAyB;AAG9B,IAAA,IAAI,wBAAwB,aAAA,EAAe;AACzC,MAAA,cAAA,CAAe,iBAAA,CAAkBC,mCAAA,EAA4B,OAAO,QAAA,EAAU,KAAA,KAAU;AACtF,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,gCAAgC,CAAA;AAClD,QAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,UAAA,OAAO,EAAE,SAAA,EAAW,IAAA,CAAK,gBAAA,EAAiB;AAAA,QAC5C,CAAA,MAAO;AACL,UAAA,IAAI;AACF,YAAA,MAAM,YAAY,MAAM,uBAAA,CAAwB,aAAA,CAAe,EAAE,OAAO,CAAA;AACxE,YAAA,IAAA,CAAK,gBAAA,GAAmB,SAAA;AACxB,YAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA,WAAA,CAAa,CAAA;AACjF,YAAA,OAAO,EAAE,SAAA,EAAW,IAAA,CAAK,gBAAA,EAAiB;AAAA,UAC5C,SAAS,KAAA,EAAO;AACd,YAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,+CAAA,EAAiD,EAAE,OAAO,CAAA;AAC5E,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,wBAAwB,kBAAA,EAAoB;AAC9C,MAAA,cAAA,CAAe,iBAAA,CAAkBC,kCAAA,EAA2B,OAAO,OAAA,EAAS,KAAA,KAAU;AACpF,QAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,QAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,CAAO,GAAA;AAC3B,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,uCAAA,EAA0C,GAAG,CAAA,CAAE,CAAA;AAEjE,QAAA,IAAI,CAAC,KAAK,gBAAA,EAAkB;AAC1B,UAAA,MAAM,YAAY,MAAM,IAAA,CAAK,iBAAiB,aAAA,GAAgB,EAAE,OAAO,CAAA;AACvE,UAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAC1D,UAAA,IAAA,CAAK,gBAAA,GAAmB,SAAA;AAAA,QAC1B;AAEA,QAAA,MAAM,WAAW,IAAA,CAAK,gBAAA,EAAkB,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,QAAQ,GAAG,CAAA;AAE/D,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,oCAAA,EAAuC,GAAG,CAAA,YAAA,CAAc,CAAA;AACzE,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAAE,CAAA;AAAA,QAC9C;AAEA,QAAA,IAAI;AACF,UAAA,MAAM,6BAA6B,MAAM,uBAAA,CAAwB,mBAAmB,EAAE,GAAA,EAAK,OAAO,CAAA;AAClG,UAAA,MAAM,mBAAmB,KAAA,CAAM,OAAA,CAAQ,0BAA0B,CAAA,GAC7D,0BAAA,GACA,CAAC,0BAA0B,CAAA;AAC/B,UAAA,MAAM,QAAA,GAA+B,gBAAA,CAAiB,GAAA,CAAI,CAAA,eAAA,KAAmB;AAC3E,YAAA,MAAM,WAAA,GAAgC;AAAA,cACpC,KAAK,QAAA,CAAS,GAAA;AAAA,cACd,UAAU,QAAA,CAAS;AAAA,aACrB;AACA,YAAA,IAAI,UAAU,eAAA,EAAiB;AAC7B,cAAA,WAAA,CAAY,OAAO,eAAA,CAAgB,IAAA;AAAA,YACrC;AAEA,YAAA,IAAI,UAAU,eAAA,EAAiB;AAC7B,cAAA,WAAA,CAAY,OAAO,eAAA,CAAgB,IAAA;AAAA,YACrC;AAEA,YAAA,OAAO,WAAA;AAAA,UACT,CAAC,CAAA;AACD,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,UAAA,EAAa,GAAG,CAAA,uBAAA,EAA0B,QAAQ,CAAA,GAAA,CAAK,CAAA;AACxE,UAAA,OAAO;AAAA,YACL;AAAA,WACF;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,UAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,wCAAA,EAA2C,GAAG,QAAQ,QAAQ,CAAA,EAAA,CAAA,EAAM,EAAE,KAAA,EAAO,CAAA;AAC/F,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,wBAAwB,iBAAA,EAAmB;AAC7C,MAAA,cAAA,CAAe,iBAAA,CAAkBC,2CAAA,EAAoC,OAAO,QAAA,EAAU,KAAA,KAAU;AAC9F,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,wCAAwC,CAAA;AAC1D,QAAA,IAAI,KAAK,wBAAA,EAA0B;AACjC,UAAA,OAAO,EAAE,iBAAA,EAAmB,IAAA,CAAK,wBAAA,EAAyB;AAAA,QAC5D,CAAA,MAAO;AACL,UAAA,IAAI;AACF,YAAA,MAAM,YAAY,MAAM,uBAAA,CAAwB,iBAAA,CAAmB,EAAE,OAAO,CAAA;AAC5E,YAAA,IAAA,CAAK,wBAAA,GAA2B,SAAA;AAChC,YAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,wBAAA,CAAyB,MAAM,CAAA,oBAAA,CAAsB,CAAA;AAClG,YAAA,OAAO,EAAE,iBAAA,EAAmB,IAAA,CAAK,wBAAA,EAAyB;AAAA,UAC5D,SAAS,KAAA,EAAO;AACd,YAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,4DAAA,EAA8D,EAAE,OAAO,CAAA;AACzF,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,cAAA,CAAe,iBAAA,CAAkBC,+BAAA,EAAwB,OAAO,OAAA,KAAyC;AACvG,MAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,CAAO,GAAA;AAC3B,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,8CAAA,EAAiD,GAAG,CAAA,CAAE,CAAA;AACvE,MAAA,IAAA,CAAK,aAAA,CAAc,IAAI,GAAG,CAAA;AAC1B,MAAA,OAAO,EAAC;AAAA,IACV,CAAC,CAAA;AAED,IAAA,cAAA,CAAe,iBAAA,CAAkBC,iCAAA,EAA0B,OAAO,OAAA,KAAyC;AACzG,MAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,CAAO,GAAA;AAC3B,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,gDAAA,EAAmD,GAAG,CAAA,CAAE,CAAA;AACzE,MAAA,IAAA,CAAK,aAAA,CAAc,OAAO,GAAG,CAAA;AAC7B,MAAA,OAAO,EAAC;AAAA,IACV,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,+BAA+B,cAAA,EAAwB;AAC7D,IAAA,MAAM,wBAAwB,IAAA,CAAK,aAAA;AACnC,IAAA,IAAI,CAAC,qBAAA,EAAuB;AAG5B,IAAA,IAAI,sBAAsB,WAAA,EAAa;AACrC,MAAA,cAAA,CAAe,iBAAA,CAAkBC,iCAAA,EAA0B,OAAO,QAAA,EAAU,KAAA,KAAU;AACpF,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,8BAA8B,CAAA;AAChD,QAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,UAAA,OAAO;AAAA,YACL,OAAA,EAAS,IAAA,CAAK,cAAA,EAAgB,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,GAAG,CAAA,EAAG,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,MAAA,EAAU,CAAE;AAAA,WACpF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAI;AACF,YAAA,MAAM,UAAU,MAAM,qBAAA,CAAsB,WAAA,CAAY,EAAE,OAAO,CAAA;AACjE,YAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,cAAAC,qBAAA,CAAa,MAAM,MAAM,CAAA;AAAA,YAC3B;AACA,YAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AACtB,YAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA,SAAA,CAAW,CAAA;AAC7E,YAAA,OAAO;AAAA,cACL,OAAA,EAAS,IAAA,CAAK,cAAA,EAAgB,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,GAAG,CAAA,EAAG,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,MAAA,EAAU,CAAE;AAAA,aACpF;AAAA,UACF,SAAS,KAAA,EAAO;AACd,YAAA,IAAA,CAAK,MAAA,CAAO,MAAM,2CAAA,EAA6C;AAAA,cAC7D,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,aAC7D,CAAA;AACD,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,sBAAsB,iBAAA,EAAmB;AAC3C,MAAA,cAAA,CAAe,iBAAA;AAAA,QACbC,+BAAA;AAAA,QACA,OAAO,SAA0E,KAAA,KAAU;AACzF,UAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,UAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,IAAA,KAAS,OAAA,CAAQ,MAAA;AACnD,UAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,YAAA,MAAM,UAAU,MAAM,IAAA,CAAK,eAAe,WAAA,GAAc,EAAE,OAAO,CAAA;AACjE,YAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,wBAAwB,CAAA;AACtD,YAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AAAA,UACxB;AAEA,UAAA,IAAI,MAAA;AACJ,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,MAAA,GAAS,IAAA,CAAK,gBAAgB,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,IAAA,IAAQ,CAAA,CAAE,OAAA,KAAY,OAAO,CAAA;AAAA,UAClF,CAAA,MAAO;AAEL,YAAA,MAAA,GAAS,KAAK,cAAA,EAAgB,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,IAAI,CAAA;AAAA,UACzD;AACA,UAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,EAAI,OAAA,GAAU,CAAA,UAAA,EAAa,OAAO,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,UAAA,CAAY,CAAA;AAElG,UAAA,IAAI,OAAO,SAAA,EAAW;AACpB,YAAA,KAAA,MAAW,GAAA,IAAO,OAAO,SAAA,EAAW;AAClC,cAAA,IAAI,GAAA,CAAI,QAAA,KAAa,IAAA,GAAO,GAAA,CAAI,IAAI,CAAA,KAAM,MAAA,IAAa,IAAA,GAAO,GAAA,CAAI,IAAI,CAAA,KAAM,IAAA,CAAA,EAAO;AACjF,gBAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AAAA,cAC1D;AAAA,YACF;AAAA,UACF;AACA,UAAA,IAAI;AACF,YAAA,IAAI,WAAkB,EAAC;AACvB,YAAA,IAAI,sBAAsB,iBAAA,EAAmB;AAC3C,cAAA,QAAA,GAAW,MAAM,sBAAsB,iBAAA,CAAkB,EAAE,MAAM,OAAA,EAAS,IAAA,EAAM,OAAO,CAAA;AAAA,YACzF;AACA,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,YAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,cACV,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,EAAI,OAAA,GAAU,aAAa,OAAO,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,2BAAA,EAA8B,QAAQ,CAAA,GAAA;AAAA,aACjG;AACA,YAAA,OAAO,EAAE,QAAQ,QAAA,EAAS;AAAA,UAC5B,SAAS,KAAA,EAAO;AACd,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,YAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,kCAAA,EAAqC,IAAI,QAAQ,QAAQ,CAAA,EAAA,CAAA,EAAM,EAAE,KAAA,EAAO,CAAA;AAC1F,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,oBAAA,CACN,cACA,qBAAA,EAC+B;AAC/B,IAAA,MAAM,aAA4C,EAAC;AACnD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,UAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,YAAY,YAAA,EAAc;AACnC,MAAA,MAAM,KAAA,GAAQ,aAAa,QAAQ,CAAA;AACnC,MAAA,IAAI,CAAC,KAAA,IAAS,EAAE,UAAA,IAAc,KAAA,CAAA,EAAQ;AACpC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,oBAAA,EAAuB,QAAQ,CAAA,sDAAA,CAAwD,CAAA;AACxG,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,gBAAA,GAAmB,MAAM,cAAA,EAAe;AAE9C,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,OAAA,EAAU,KAAA,CAAM,IAAI,CAAA,SAAA,EAAY,QAAQ,CAAA,gEAAA;AAAA,SAC1C;AAAA,MACF;AAEA,MAAA,MAAM,aAAA,GAAgB,OAAO,QAAQ,CAAA,CAAA;AACrC,MAAA,IAAI,qBAAA,GAAwB,aAAa,CAAA,IAAK,UAAA,CAAW,aAAa,CAAA,EAAG;AACvE,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,UACV,CAAA,gBAAA,EAAmB,aAAa,CAAA,yBAAA,EAA4B,QAAQ,CAAA,wCAAA;AAAA,SACtE;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,sBAAsBpB,gBAAAA,CAAW;AAAA,QACrC,EAAA,EAAI,aAAA;AAAA,QACJ,WAAA,EAAa,CAAA,WAAA,EAAc,KAAA,CAAM,IAAI,oCAAoC,gBAAgB,CAAA,CAAA;AAAA,QACzF,WAAA,EAAazB,MAAE,MAAA,CAAO;AAAA,UACpB,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,sCAAsC;AAAA,SACpE,CAAA;AAAA,QACD,SAAS,OAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,gBAAe,KAAM;AAC9D,UAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,YACV,yBAAyB,aAAa,CAAA,aAAA,EAAgB,MAAM,IAAI,CAAA,iBAAA,EAAoB,QAAQ,OAAO,CAAA,CAAA;AAAA,WACrG;AACA,UAAA,IAAI;AACF,YAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAA,CAAS,QAAQ,OAAA,EAAS,EAAE,cAAA,EAAgB,cAAA,EAAgB,CAAA;AACzF,YAAA,OAAO,QAAA;AAAA,UACT,SAAS,KAAA,EAAO;AACd,YAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,4BAAA,EAA+B,aAAa,gBAAgB,KAAA,CAAM,IAAI,MAAM,KAAK,CAAA;AACnG,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,OACD,CAAA;AAED,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,IAAA,EAAM,aAAA;AAAA,QACN,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,cAAA,EAAgB,IAAI8C,6BAAA,EAAe;AAAA,QACnC,gBAAgB,EAAC;AAAA,QACjB,aAAa,mBAAA,CAAoB;AAAA,OACnC;AACA,MAAA,MAAM,QAAA,GAAWC,kBAAA,CAAa,mBAAA,EAAqB,OAAO,CAAA;AAE1D,MAAA,UAAA,CAAW,aAAa,CAAA,GAAI;AAAA,QAC1B,IAAA,EAAM,aAAA;AAAA,QACN,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,SAAS,QAAA,CAAS,OAAA;AAAA,QAClB,QAAA,EAAU;AAAA,OACZ;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,kBAAA,EAAqB,KAAA,CAAM,IAAI,CAAA,SAAA,EAAY,QAAQ,CAAA,aAAA,EAAgB,aAAa,CAAA,CAAA,CAAG,CAAA;AAAA,IACtG;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEQ,uBAAA,CACN,iBACA,qBAAA,EAC+B;AAC/B,IAAA,MAAM,gBAA+C,EAAC;AACtD,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,OAAO,aAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,eAAe,eAAA,EAAiB;AACzC,MAAA,MAAM,QAAA,GAAW,gBAAgB,WAAW,CAAA;AAC5C,MAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,CAAS,cAAc,UAAA,EAAY;AACzD,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,UACV,0BAA0B,WAAW,CAAA,uDAAA;AAAA,SACvC;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,sBAAsB,QAAA,CAAS,WAAA;AACrC,MAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,UAAA,EAAa,QAAA,CAAS,EAAE,CAAA,SAAA,EAAY,WAAW,CAAA,gEAAA;AAAA,SACjD;AAAA,MACF;AAEA,MAAA,MAAM,gBAAA,GAAmB,OAAO,WAAW,CAAA,CAAA;AAC3C,MAAA,IAAI,qBAAA,GAAwB,gBAAgB,CAAA,IAAK,aAAA,CAAc,gBAAgB,CAAA,EAAG;AAChF,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,UACV,CAAA,gBAAA,EAAmB,gBAAgB,CAAA,4BAAA,EAA+B,WAAW,CAAA,wCAAA;AAAA,SAC/E;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,yBAAyBtB,gBAAAA,CAAW;AAAA,QACxC,EAAA,EAAI,gBAAA;AAAA,QACJ,WAAA,EAAa,CAAA,cAAA,EAAiB,WAAW,CAAA,yBAAA,EAA4B,mBAAmB,CAAA,CAAA;AAAA,QACxF,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,SAAS,OAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,gBAAe,KAAM;AAC9D,UAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,YACV,CAAA,yBAAA,EAA4B,gBAAgB,CAAA,gBAAA,EAAmB,QAAA,CAAS,EAAE,CAAA,aAAA,CAAA;AAAA,YAC1E;AAAA,WACF;AACA,UAAA,IAAI;AACF,YAAA,MAAMuB,IAAAA,GAAM,MAAM,QAAA,CAAS,cAAA,CAAe,EAAE,OAAO,cAAA,EAAgB,GAAA,CAAI,OAAO,CAAA,EAAG,CAAA;AAEjF,YAAA,MAAM,QAAA,GAAW,MAAMA,IAAAA,CAAI,KAAA,CAAM,EAAE,SAAA,EAAW,OAAA,EAAS,cAAA,EAAgB,cAAA,EAAgB,CAAA;AAEvF,YAAA,OAAO,QAAA;AAAA,UACT,SAAS,KAAA,EAAO;AACd,YAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,cACV,CAAA,+BAAA,EAAkC,gBAAgB,CAAA,gBAAA,EAAmB,QAAA,CAAS,EAAE,CAAA,EAAA,CAAA;AAAA,cAChF;AAAA,aACF;AACA,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,OACD,CAAA;AAED,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,IAAA,EAAM,gBAAA;AAAA,QACN,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,cAAA,EAAgB,IAAIF,6BAAA,EAAe;AAAA,QACnC,gBAAgB,EAAC;AAAA,QACjB,aAAa,sBAAA,CAAuB;AAAA,OACtC;AAEA,MAAA,MAAM,QAAA,GAAWC,kBAAA,CAAa,sBAAA,EAAwB,OAAO,CAAA;AAE7D,MAAA,aAAA,CAAc,gBAAgB,CAAA,GAAI;AAAA,QAChC,IAAA,EAAM,gBAAA;AAAA,QACN,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,cAAc,QAAA,CAAS,YAAA;AAAA,QACvB,SAAS,QAAA,CAAS,OAAA;AAAA,QAClB,QAAA,EAAU;AAAA,OACZ;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,qBAAA,EAAwB,QAAA,CAAS,EAAE,CAAA,SAAA,EAAY,WAAW,CAAA,aAAA,EAAgB,gBAAgB,CAAA,CAAA,CAAG,CAAA;AAAA,IAChH;AACA,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAA,CACE,KAAA,EACA,YAAA,EACA,eAAA,EAC+B;AAC/B,IAAA,MAAM,wBAAuD,EAAC;AAE9D,IAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AACzC,MAAA,MAAM,YAAA,GAAe,MAAM,QAAQ,CAAA;AACnC,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,mBAAA,EAAsB,QAAQ,CAAA,yBAAA,CAA2B,CAAA;AAC1E,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,YAAA,CAAa,OAAA,KAAY,UAAA,EAAY;AAC9C,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,MAAA,EAAS,QAAQ,CAAA,mDAAA,CAAqD,CAAA;AACvF,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,IAAA,EAAM,QAAA;AAAA,QACN,cAAA,EAAgB,IAAID,6BAAA,EAAe;AAAA,QACnC,gBAAgB,EAAC;AAAA,QACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,aAAa,YAAA,EAAc;AAAA,OAC7B;AAEA,MAAA,MAAM,QAAA,GAAWC,kBAAA,CAAa,YAAA,EAAc,OAAO,CAAA;AAEnD,MAAA,qBAAA,CAAsB,QAAQ,CAAA,GAAI;AAAA,QAChC,IAAA,EAAM,QAAA;AAAA,QACN,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,cAAc,QAAA,CAAS,YAAA;AAAA,QACvB,SAAS,QAAA,CAAS;AAAA,OACpB;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IAC5D;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,gCAAA,EAAmC,MAAA,CAAO,KAAK,qBAAqB,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA;AAE/F,IAAA,IAAI,oBAAmD,EAAC;AACxD,IAAA,IAAI,uBAAsD,EAAC;AAC3D,IAAA,IAAI;AACF,MAAA,iBAAA,GAAoB,IAAA,CAAK,oBAAA,CAAqB,YAAA,EAAc,qBAAqB,CAAA;AACjF,MAAA,oBAAA,GAAuB,IAAA,CAAK,uBAAA,CAAwB,eAAA,EAAiB,qBAAqB,CAAA;AAAA,IAC5F,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,cAAc,IAAI1B,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,qDAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc;AAAA,SAC1B;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,0BAAA,EAA4B;AAAA,QAC5C,KAAA,EAAO,YAAY,QAAA;AAAS,OAC7B,CAAA;AACD,MAAA,MAAM,WAAA;AAAA,IACR;AAEA,IAAA,MAAM,oBAAoB,EAAE,GAAG,uBAAuB,GAAG,iBAAA,EAAmB,GAAG,oBAAA,EAAqB;AAEpG,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAA,CAAE,MAAA;AACtD,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA;AACxD,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAA,CAAE,MAAA;AACvD,IAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,IAAA,CAAK,oBAAoB,CAAA,CAAE,MAAA;AAC7D,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,MACV,GAAG,cAAc,CAAA,yBAAA,EAA4B,YAAY,CAAA,WAAA,EAAc,eAAe,aAAa,kBAAkB,CAAA,WAAA;AAAA,KACvH;AAEA,IAAA,OAAO,iBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,UAAA,GAA4B;AACvC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI0B,6BAAA,EAAqB;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA;AAAA,IAC/C,SAAS7B,OAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,oCAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc;AAAA,SAC1B;AAAA,QACAH;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,qDAAA,EAAuD;AAAA,QACvE,KAAA,EAAO,YAAY,QAAA;AAAS,OAC7B,CAAA;AACD,MAAA,MAAM,WAAA;AAAA,IACR;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,4BAA4B,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,SAAS,EAAE,GAAA,EAAK,SAAS,WAAA,EAAa,GAAA,EAAK,KAAI,EAAuC;AACjG,IAAA,IAAI;AACF,MAAA,IAAI,GAAA,CAAI,aAAa,OAAA,EAAS;AAC5B,QAAA,MAAM,KAAK,UAAA,CAAW;AAAA,UACpB,WAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,GAAA,CAAI,QAAA,KAAa,WAAA,EAAa;AACvC,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,kBAAkB,CAAA;AACpC,QAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,UAAA,GAAA,CAAI,UAAU,GAAG,CAAA;AACjB,UAAA,GAAA,CAAI,IAAI,gCAAgC,CAAA;AACxC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,IAAA,CAAK,YAAA,CAAa,iBAAA,CAAkB,GAAA,EAAK,GAAG,CAAA;AAAA,MACpD,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,eAAA,EAAiB,EAAE,IAAA,EAAM,GAAA,CAAI,UAAU,CAAA;AACzD,QAAA,GAAA,CAAI,UAAU,GAAG,CAAA;AACjB,QAAA,GAAA,CAAI,GAAA,EAAI;AAAA,MACV;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,6BAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,IAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,GAAA,EAAK,IAAI,QAAA,EAAS;AAAA,YAClB,OAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,mCAAA,EAAqC,EAAE,OAAO,WAAA,CAAY,QAAA,IAAY,CAAA;AACxF,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,YAAA,CAAa,EAAE,KAAK,OAAA,EAAS,WAAA,EAAa,SAAQ,EAA4B;AACzF,IAAA,IAAI;AACF,MAAA,IAAI,GAAA,CAAI,aAAa,OAAA,EAAS;AAC5B,QAAA,OAAO,SAAA,CAAU,OAAA,EAAS,OAAMO,OAAAA,KAAU;AACxC,UAAA,MAAM,KAAK,cAAA,CAAe;AAAA,YACxB,WAAA;AAAA,YACA,MAAA,EAAAA;AAAA,WACD,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,GAAA,CAAI,QAAA,KAAa,WAAA,EAAa;AACvC,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,kBAAkB,CAAA;AACpC,QAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,WAAW,CAAA;AAC/C,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,gCAAA,EAAkC,EAAE,WAAW,CAAA;AACjE,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,uBAAA,EAAyB,GAAG,CAAA;AAAA,QAClD;AACA,QAAA,IAAI,CAAC,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,SAAS,CAAA,EAAG;AAC1C,UAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAA,iCAAA,EAAoC,SAAS,IAAI,GAAG,CAAA;AAAA,QAC1E;AACA,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,iBAAA,CAAkB,IAAI,SAAS,CAAA,EAAG,kBAAkB,OAAO,CAAA;AACtF,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,qBAAA,EAAuB,GAAG,CAAA;AAAA,QAChD;AACA,QAAA,OAAO,OAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,eAAA,EAAiB,EAAE,IAAA,EAAM,GAAA,CAAI,UAAU,CAAA;AACzD,QAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,cAAA,EAAgB,GAAG,CAAA;AAAA,MACzC;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,cAAc,IAAIT,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,kCAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,IAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,GAAA,EAAK,IAAI,QAAA,EAAS;AAAA,YAClB,OAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,wCAAA,EAA0C,EAAE,OAAO,WAAA,CAAY,QAAA,IAAY,CAAA;AAC7F,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,SAAA,CAAU;AAAA,IACrB,GAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,OAAA,GAAU,EAAE,kBAAA,EAAoB,MAAM2B,qBAAW;AAAE,GACrD,EAMG;AACD,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,oBAAA,EAAuB,GAAA,CAAI,MAAM,CAAA,YAAA,EAAe,GAAA,CAAI,QAAQ,CAAA,CAAE,CAAA;AAEhF,IAAA,IAAI,GAAA,CAAI,aAAa,QAAA,EAAU;AAC7B,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,oBAAA,EAAuB,IAAI,QAAQ,CAAA,yBAAA,EAA4B,QAAQ,CAAA,gBAAA,CAAkB,CAAA;AAC3G,MAAA,GAAA,CAAI,UAAU,GAAG,CAAA;AACjB,MAAA,GAAA,CAAI,GAAA,EAAI;AACR,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,gBAAgB,CAAA;AAC9C,IAAA,IAAI,SAAA;AAEJ,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,oCAAA,EAAuC,SAAS,CAAA,qBAAA,EAAwB,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,wBAAA,CAAyB,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACrI;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,SAAA,IAAa,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,SAAS,CAAA,EAAG;AAE7D,QAAA,SAAA,GAAY,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,SAAS,CAAA;AACvD,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,oEAAA,EAAuE,SAAS,CAAA,CAAE,CAAA;AAEpG,QAAA,IAAI,GAAA,CAAI,WAAW,KAAA,EAAO;AACxB,UAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,YACV,wDAAwD,SAAS,CAAA,kCAAA;AAAA,WACnE;AAAA,QACF;AAIA,QAAA,MAAM,IAAA,GACJ,IAAI,MAAA,KAAW,MAAA,GACX,MAAM,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACrC,UAAA,IAAI,IAAA,GAAO,EAAA;AACX,UAAA,GAAA,CAAI,EAAA,CAAG,MAAA,EAAQ,CAAA,KAAA,KAAU,IAAA,IAAQ,KAAM,CAAA;AACvC,UAAA,GAAA,CAAI,EAAA,CAAG,OAAO,MAAM;AAClB,YAAA,IAAI;AACF,cAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,YAC1B,SAAS,CAAA,EAAG;AACV,cAAA,MAAA,CAAO,CAAC,CAAA;AAAA,YACV;AAAA,UACF,CAAC,CAAA;AACD,UAAA,GAAA,CAAI,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,QACxB,CAAC,CAAA,GACD,MAAA;AAEN,QAAA,MAAM,SAAA,CAAU,aAAA,CAAc,GAAA,EAAK,GAAA,EAAK,IAAI,CAAA;AAAA,MAC9C,CAAA,MAAO;AAEL,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,yDAAA,EAA4D,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAG1F,QAAA,IAAI,GAAA,CAAI,WAAW,MAAA,EAAQ;AACzB,UAAA,MAAM,OAAO,MAAM,IAAI,OAAA,CAAQ,CAAC,SAAS,MAAA,KAAW;AAClD,YAAA,IAAI,IAAA,GAAO,EAAA;AACX,YAAA,GAAA,CAAI,EAAA,CAAG,MAAA,EAAQ,CAAA,KAAA,KAAU,IAAA,IAAQ,KAAM,CAAA;AACvC,YAAA,GAAA,CAAI,EAAA,CAAG,OAAO,MAAM;AAClB,cAAA,IAAI;AACF,gBAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,cAC1B,SAAS,CAAA,EAAG;AACV,gBAAA,MAAA,CAAO,CAAC,CAAA;AAAA,cACV;AAAA,YACF,CAAC,CAAA;AACD,YAAA,GAAA,CAAI,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,UACxB,CAAC,CAAA;AAGD,UAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAM,OAAO,oCAAoC,CAAA;AAEjF,UAAA,IAAI,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAC7B,YAAA,IAAA,CAAK,MAAA,CAAO,MAAM,iFAAiF,CAAA;AAGnG,YAAA,SAAA,GAAY,IAAIC,+CAAA,CAA8B;AAAA,cAC5C,GAAG,OAAA;AAAA,cACH,kBAAA,EAAoB,MAAMD,mBAAA,EAAW;AAAA,cACrC,sBAAsB,CAAA,EAAA,KAAM;AAC1B,gBAAA,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,EAAA,EAAI,SAAU,CAAA;AAAA,cAClD;AAAA,aACD,CAAA;AAGD,YAAA,SAAA,CAAU,UAAU,MAAM;AACxB,cAAA,MAAM,kBAAkB,SAAA,EAAW,SAAA;AACnC,cAAA,IAAI,eAAA,IAAmB,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,eAAe,CAAA,EAAG;AACzE,gBAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,kBACV,2DAA2D,eAAe,CAAA,oBAAA;AAAA,iBAC5E;AACA,gBAAA,IAAA,CAAK,wBAAA,CAAyB,OAAO,eAAe,CAAA;AAEpD,gBAAA,IAAI,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,eAAe,CAAA,EAAG;AACjD,kBAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,eAAe,CAAA;AAC/C,kBAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,yDAAA,EAA4D,eAAe,CAAA,CAAE,CAAA;AAAA,gBACjG;AAAA,cACF;AAAA,YACF,CAAA;AAGA,YAAA,MAAM,qBAAA,GAAwB,KAAK,oBAAA,EAAqB;AAGxD,YAAA,MAAM,qBAAA,CAAsB,QAAQ,SAAS,CAAA;AAG7C,YAAA,IAAI,UAAU,SAAA,EAAW;AACvB,cAAA,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,SAAA,CAAU,SAAA,EAAW,SAAS,CAAA;AAChE,cAAA,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,SAAA,CAAU,SAAA,EAAW,qBAAqB,CAAA;AACvE,cAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,gBACV,CAAA,mEAAA,EAAsE,UAAU,SAAS,CAAA;AAAA,eAC3F;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAA,CAAK,MAAA,CAAO,KAAK,wEAAwE,CAAA;AAAA,YAC3F;AAGA,YAAA,OAAO,MAAM,SAAA,CAAU,aAAA,CAAc,GAAA,EAAK,KAAK,IAAI,CAAA;AAAA,UACrD,CAAA,MAAO;AAEL,YAAA,IAAA,CAAK,MAAA,CAAO,KAAK,uEAAuE,CAAA;AACxF,YAAA,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,EAAE,cAAA,EAAgB,oBAAoB,CAAA;AACzD,YAAA,GAAA,CAAI,GAAA;AAAA,cACF,KAAK,SAAA,CAAU;AAAA,gBACb,OAAA,EAAS,KAAA;AAAA,gBACT,KAAA,EAAO;AAAA,kBACL,IAAA,EAAM,KAAA;AAAA,kBACN,OAAA,EAAS;AAAA,iBACX;AAAA,gBACA,EAAA,EAAK,MAAc,EAAA,IAAM;AAAA;AAAA,eAC1B;AAAA,aACH;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AAEL,UAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,oBAAA,EAAuB,GAAA,CAAI,MAAM,CAAA,8BAAA,CAAgC,CAAA;AAClF,UAAA,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,EAAE,cAAA,EAAgB,oBAAoB,CAAA;AACzD,UAAA,GAAA,CAAI,GAAA;AAAA,YACF,KAAK,SAAA,CAAU;AAAA,cACb,OAAA,EAAS,KAAA;AAAA,cACT,KAAA,EAAO;AAAA,gBACL,IAAA,EAAM,KAAA;AAAA,gBACN,OAAA,EAAS,CAAA,aAAA,EAAgB,GAAA,CAAI,MAAM,CAAA,oCAAA;AAAA,eACrC;AAAA,cACA,EAAA,EAAI;AAAA,aACL;AAAA,WACH;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS9B,OAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,mCAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,IAAA;AAAA,UACxB,IAAA,EAAM;AAAA,SACR;AAAA,QACAH;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,oDAAA,EAAsD,EAAE,KAAA,EAAO,aAAa,CAAA;AAE9F,MAAA,IAAI,CAAC,IAAI,WAAA,EAAa;AACpB,QAAA,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,EAAE,cAAA,EAAgB,oBAAoB,CAAA;AACzD,QAAA,GAAA,CAAI,GAAA;AAAA,UACF,KAAK,SAAA,CAAU;AAAA,YACb,OAAA,EAAS,KAAA;AAAA,YACT,KAAA,EAAO;AAAA,cACL,IAAA,EAAM,MAAA;AAAA,cACN,OAAA,EAAS;AAAA,aACX;AAAA,YACA,EAAA,EAAI;AAAA;AAAA,WACL;AAAA,SACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,UAAA,CAAW;AAAA,IACtB,WAAA;AAAA,IACA;AAAA,GACF,EAGG;AACD,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,yBAAyB,CAAA;AAC3C,MAAA,IAAA,CAAK,YAAA,GAAe,IAAIgC,yBAAA,CAAmB,WAAA,EAAa,GAAG,CAAA;AAC3D,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA;AAE3C,MAAA,IAAA,CAAK,MAAA,CAAO,UAAU,YAAY;AAChC,QAAA,IAAA,CAAK,YAAA,GAAe,MAAA;AACpB,QAAA,MAAM,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,MAC1B,CAAA;AAEA,MAAA,GAAA,CAAI,EAAA,CAAG,SAAS,MAAM;AACpB,QAAA,IAAA,CAAK,YAAA,GAAe,MAAA;AAAA,MACtB,CAAC,CAAA;AAAA,IACH,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,cAAc,IAAI/B,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,+BAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,IAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,wCAAA,EAA0C,EAAE,KAAA,EAAO,aAAa,CAAA;AAClF,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAa,cAAA,CAAe,EAAE,WAAA,EAAa,MAAA,EAAAO,SAAO,EAAqD;AACrG,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,yBAAyB,CAAA;AAC3C,IAAA,MAAM,YAAA,GAAe,IAAI,YAAA,CAAa,WAAA,EAAaA,OAAM,CAAA;AACzD,IAAA,MAAM,YAAY,YAAA,CAAa,SAAA;AAC/B,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,uCAAA,EAAyC,EAAE,WAAW,CAAA;AACxE,IAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,SAAA,EAAW,YAAY,CAAA;AAElD,IAAAA,OAAAA,CAAO,QAAQ,MAAM;AACnB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,uCAAA,EAAyC,EAAE,WAAW,CAAA;AACxE,MAAA,IAAA,CAAK,iBAAA,CAAkB,OAAO,SAAS,CAAA;AAAA,IACzC,CAAC,CAAA;AACD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,UAAU,YAAY;AAChC,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,sCAAA,EAAwC,EAAE,WAAW,CAAA;AACvE,QAAA,IAAA,CAAK,iBAAA,CAAkB,OAAO,SAAS,CAAA;AACvC,QAAA,MAAM,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,MAC1B,CAAA;AAEA,MAAA,OAAO,IAAA,EAAM;AAGX,QAAA,MAAMA,OAAAA,CAAO,MAAM,GAAM,CAAA;AACzB,QAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,IAAA,CAAK,kBAAkB,IAAA,EAAK,IAAK,EAAE,CAAA;AACjE,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,2BAAA,EAA6B,EAAE,YAAY,CAAA;AAC7D,QAAA,MAAMA,OAAAA,CAAO,MAAM,iBAAiB,CAAA;AAAA,MACtC;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,cAAc,IAAIT,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,oCAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,IAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,6CAAA,EAA+C,EAAE,KAAA,EAAO,aAAa,CAAA;AACvF,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,GAAQ;AACZ,IAAA,IAAI;AACF,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,MAAM,IAAA,CAAK,eAAe,KAAA,IAAQ;AAClC,QAAA,IAAA,CAAK,cAAA,GAAiB,MAAA;AAAA,MACxB;AACA,MAAA,IAAI,KAAK,YAAA,EAAc;AACrB,QAAA,MAAM,IAAA,CAAK,aAAa,KAAA,IAAQ;AAChC,QAAA,IAAA,CAAK,YAAA,GAAe,MAAA;AAAA,MACtB;AACA,MAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,QAAA,KAAA,MAAW,SAAA,IAAa,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAO,EAAG;AACvD,UAAA,MAAM,UAAU,KAAA,IAAQ;AAAA,QAC1B;AACA,QAAA,IAAA,CAAK,kBAAkB,KAAA,EAAM;AAAA,MAC/B;AAEA,MAAA,IAAI,KAAK,wBAAA,EAA0B;AACjC,QAAA,KAAA,MAAW,SAAA,IAAa,IAAA,CAAK,wBAAA,CAAyB,MAAA,EAAO,EAAG;AAC9D,UAAA,MAAM,UAAU,KAAA,IAAQ;AAAA,QAC1B;AACA,QAAA,IAAA,CAAK,yBAAyB,KAAA,EAAM;AAAA,MACtC;AAEA,MAAA,IAAI,KAAK,mBAAA,EAAqB;AAC5B,QAAA,KAAA,MAAW,cAAA,IAAkB,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAO,EAAG;AAC9D,UAAA,MAAM,eAAe,KAAA,IAAQ;AAAA,QAC/B;AACA,QAAA,IAAA,CAAK,oBAAoB,KAAA,EAAM;AAAA,MACjC;AACA,MAAA,MAAM,IAAA,CAAK,OAAO,KAAA,EAAM;AACxB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,oBAAoB,CAAA;AAAA,IACvC,SAASH,OAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,yBAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc;AAAA,SAC1B;AAAA,QACAH;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,2BAAA,EAA6B,EAAE,KAAA,EAAO,aAAa,CAAA;AACrE,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,aAAA,GAA4B;AACjC,IAAA,OAAO;AAAA,MACL,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,cAAA,EAAgB;AAAA,QACd,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,cAAc,IAAA,CAAK,WAAA;AAAA,QACnB,WAAW,IAAA,CAAK;AAAA;AAClB,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,eAAA,GAAoC;AACzC,IAAA,OAAO;AAAA,MACL,GAAG,KAAK,aAAA,EAAc;AAAA,MACtB,mBAAmB,IAAA,CAAK,gBAAA;AAAA,MACxB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAA,GAEL;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,6CAAA,EAAgD,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAC9E,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,IAAI,CAAA,MAAO;AAAA,QAClE,EAAA,EAAI,MAAA;AAAA,QACJ,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,WAAA,EAAa,IAAA,CAAK,UAAA,EAAY,UAAA,IAAc,IAAA,CAAK,UAAA;AAAA,QACjD,YAAA,EAAc,IAAA,CAAK,YAAA,EAAc,UAAA,IAAc,IAAA,CAAK,YAAA;AAAA,QACpD,UAAU,IAAA,CAAK;AAAA,OACjB,CAAE;AAAA,KACJ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YACL,MAAA,EACkH;AAClH,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AACvC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,MAAA,EAAS,MAAM,CAAA,0BAAA,EAA6B,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAC1E,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,uBAAA,EAA0B,MAAM,CAAA,gBAAA,EAAmB,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AACjF,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,WAAA,EAAa,IAAA,CAAK,UAAA,EAAY,UAAA,IAAc,IAAA,CAAK,UAAA;AAAA,MACjD,YAAA,EAAc,IAAA,CAAK,YAAA,EAAc,UAAA,IAAc,IAAA,CAAK,YAAA;AAAA,MACpD,UAAU,IAAA,CAAK;AAAA,KACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAa,WAAA,CACX,MAAA,EACA,IAAA,EACA,gBAAA,EACc;AACd,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AACvC,IAAA,IAAI,aAAA,GAAgB,IAAA;AACpB,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,2BAAA,EAA8B,MAAM,CAAA,0BAAA,EAA6B,IAAA,CAAK,IAAI,CAAA,EAAA,CAAI,CAAA;AAC/F,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAE,CAAA;AAAA,MAC3C;AAEA,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,uBAAA,EAA0B,MAAM,qBAAqB,IAAI,CAAA;AAE3E,MAAA,IAAI,IAAA,CAAK,sBAAsBpB,KAAAA,CAAE,OAAA,IAAW,OAAO,IAAA,CAAK,UAAA,CAAW,cAAc,UAAA,EAAY;AAC3F,QAAA,MAAM,aAAa,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,IAAA,IAAQ,EAAE,CAAA;AACvD,QAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,UAAA,MAAM,aAAA,GAAgB,WAAW,KAAA,CAAM,MAAA,CACpC,IAAI,CAAC,CAAA,KAAkB,KAAK,CAAA,CAAE,IAAA,EAAM,KAAK,GAAG,CAAA,IAAK,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CACvE,KAAK,IAAI,CAAA;AACZ,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,yCAAA,EAA4C,MAAM,CAAA,GAAA,EAAM,aAAa,CAAA,CAAA,EAAI;AAAA,YACxF,MAAA,EAAQ,UAAA,CAAW,KAAA,CAAM,MAAA;AAAO,WACjC,CAAA;AAED,UAAA,OAAO;AAAA,YACL,KAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAS,CAAA;AAAA,EAA2E,aAAa;;AAAA,oBAAA,EAA2B,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAAA,YACzJ,gBAAA,EAAkB,UAAA,CAAW,KAAA,CAAM,MAAA;AAAO,WAC5C;AAAA,QACF;AACA,QAAA,aAAA,GAAgB,UAAA,CAAW,IAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,UACV,sBAAsB,MAAM,CAAA,qFAAA;AAAA,SAC9B;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,MAAM,CAAA,oCAAA,CAAsC,CAAA;AACpF,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,MAAM,CAAA,qBAAA,CAAuB,CAAA;AAAA,MACxD;AAAA,IACF,SAASoB,OAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,4CAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,IAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,MAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACAH;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,MAAM,WAAA;AAAA,IACR;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,qBAAA,GAAwB;AAAA,QAC5B,QAAA,EAAU,gBAAA,EAAkB,QAAA,IAAY,EAAC;AAAA,QACzC,UAAA,EAAY,gBAAA,EAAkB,UAAA,IAAc8B,mBAAA;AAAW,OACzD;AACA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,eAAe,qBAAqB,CAAA;AACtE,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,mBAAA,EAAsB,MAAM,CAAA,wBAAA,CAA0B,CAAA;AACvE,MAAA,OAAO,MAAA;AAAA,IACT,SAAS9B,OAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIC,iBAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,gCAAA;AAAA,UACJ,QAAQC,iBAAAA,CAAY,GAAA;AAAA,UACpB,UAAUC,mBAAAA,CAAc,IAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,MAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACAH;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,wCAAA,EAA2C,MAAM,CAAA,EAAA,CAAA,EAAM,SAAEA,SAAO,CAAA;AAClF,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AACF","file":"index.cjs","sourcesContent":["import type { IMastraLogger } from '@mastra/core/logger';\nimport type { ElicitRequest, ElicitResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { InternalMastraMCPClient } from './client';\n\ninterface ElicitationClientActionsConfig {\n client: InternalMastraMCPClient;\n logger: IMastraLogger;\n}\n\nexport class ElicitationClientActions {\n private readonly client: InternalMastraMCPClient;\n private readonly logger: IMastraLogger;\n\n constructor({ client, logger }: ElicitationClientActionsConfig) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Set a handler for elicitation requests.\n * @param handler The callback function to handle the elicitation request.\n */\n public onRequest(handler: (request: ElicitRequest['params']) => Promise<ElicitResult>): void {\n this.client.setElicitationRequestHandler(handler);\n }\n}\n","import type { IMastraLogger } from '@mastra/core/logger';\nimport { ErrorCode } from '@modelcontextprotocol/sdk/types.js';\nimport type { GetPromptResult, Prompt } from '@modelcontextprotocol/sdk/types.js';\nimport type { InternalMastraMCPClient } from './client';\n\ninterface PromptClientActionsConfig {\n client: InternalMastraMCPClient;\n logger: IMastraLogger;\n}\n\n/**\n * Client-side prompt actions for listing, getting, and subscribing to prompt changes.\n */\nexport class PromptClientActions {\n private readonly client: InternalMastraMCPClient;\n private readonly logger: IMastraLogger;\n\n constructor({ client, logger }: PromptClientActionsConfig) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Get all prompts from the connected MCP server.\n * @returns A list of prompts with their versions.\n */\n public async list(): Promise<Prompt[]> {\n try {\n const response = await this.client.listPrompts();\n if (response && response.prompts && Array.isArray(response.prompts)) {\n return response.prompts.map(prompt => ({ ...prompt, version: prompt.version || '' }));\n } else {\n this.logger.warn(`Prompts response from server ${this.client.name} did not have expected structure.`, {\n response,\n });\n return [];\n }\n } catch (e: any) {\n // MCP Server might not support prompts, so we return an empty array\n if (e.code === ErrorCode.MethodNotFound) {\n return [];\n }\n this.logger.error(`Error getting prompts from server ${this.client.name}`, {\n error: e instanceof Error ? e.message : String(e),\n });\n throw new Error(\n `Failed to fetch prompts from server ${this.client.name}: ${e instanceof Error ? e.stack || e.message : String(e)}`,\n );\n }\n }\n\n /**\n * Get a specific prompt.\n * @param name The name of the prompt to get.\n * @param args Optional arguments for the prompt.\n * @param version Optional version of the prompt to get.\n * @returns The prompt content.\n */\n public async get({\n name,\n args,\n version,\n }: {\n name: string;\n args?: Record<string, any>;\n version?: string;\n }): Promise<GetPromptResult> {\n return this.client.getPrompt({ name, args, version });\n }\n\n /**\n * Set a notification handler for when the list of available prompts changes.\n * @param handler The callback function to handle the notification.\n */\n public async onListChanged(handler: () => void): Promise<void> {\n this.client.setPromptListChangedNotificationHandler(handler);\n }\n}\n","import type { IMastraLogger } from '@mastra/core/logger';\nimport { ErrorCode } from '@modelcontextprotocol/sdk/types.js';\nimport type { Resource, ResourceTemplate } from '@modelcontextprotocol/sdk/types.js';\nimport type { InternalMastraMCPClient } from './client';\n\ninterface ResourceClientActionsConfig {\n client: InternalMastraMCPClient;\n logger: IMastraLogger;\n}\n\nexport class ResourceClientActions {\n private readonly client: InternalMastraMCPClient;\n private readonly logger: IMastraLogger;\n\n constructor({ client, logger }: ResourceClientActionsConfig) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Get all resources from the connected MCP server.\n * @returns A list of resources.\n */\n public async list(): Promise<Resource[]> {\n try {\n const response = await this.client.listResources();\n if (response && response.resources && Array.isArray(response.resources)) {\n return response.resources;\n } else {\n this.logger.warn(`Resources response from server ${this.client.name} did not have expected structure.`, {\n response,\n });\n return [];\n }\n } catch (e: any) {\n // MCP Server might not support resources, so we return an empty array\n if (e.code === ErrorCode.MethodNotFound) {\n return [];\n }\n this.logger.error(`Error getting resources from server ${this.client.name}`, {\n error: e instanceof Error ? e.message : String(e),\n });\n throw new Error(\n `Failed to fetch resources from server ${this.client.name}: ${e instanceof Error ? e.stack || e.message : String(e)}`,\n );\n }\n }\n\n /**\n * Get all resource templates from the connected MCP server.\n * @returns A list of resource templates.\n */\n public async templates(): Promise<ResourceTemplate[]> {\n try {\n const response = await this.client.listResourceTemplates();\n if (response && response.resourceTemplates && Array.isArray(response.resourceTemplates)) {\n return response.resourceTemplates;\n } else {\n this.logger.warn(\n `Resource templates response from server ${this.client.name} did not have expected structure.`,\n { response },\n );\n return [];\n }\n } catch (e: any) {\n // MCP Server might not support resources, so we return an empty array\n if (e.code === ErrorCode.MethodNotFound) {\n return [];\n }\n this.logger.error(`Error getting resource templates from server ${this.client.name}`, {\n error: e instanceof Error ? e.message : String(e),\n });\n throw new Error(\n `Failed to fetch resource templates from server ${this.client.name}: ${e instanceof Error ? e.stack || e.message : String(e)}`,\n );\n }\n }\n\n /**\n * Read a specific resource.\n * @param uri The URI of the resource to read.\n * @returns The resource content.\n */\n public async read(uri: string) {\n return this.client.readResource(uri);\n }\n\n /**\n * Subscribe to a specific resource.\n * @param uri The URI of the resource to subscribe to.\n */\n public async subscribe(uri: string) {\n return this.client.subscribeResource(uri);\n }\n\n /**\n * Unsubscribe from a specific resource.\n * @param uri The URI of the resource to unsubscribe from.\n */\n public async unsubscribe(uri: string) {\n return this.client.unsubscribeResource(uri);\n }\n\n /**\n * Set a notification handler for when a specific resource is updated.\n * @param handler The callback function to handle the notification.\n */\n public async onUpdated(handler: (params: { uri: string }) => void): Promise<void> {\n this.client.setResourceUpdatedNotificationHandler(handler);\n }\n\n /**\n * Set a notification handler for when the list of available resources changes.\n * @param handler The callback function to handle the notification.\n */\n public async onListChanged(handler: () => void): Promise<void> {\n this.client.setResourceListChangedNotificationHandler(handler);\n }\n}\n","import $RefParser from '@apidevtools/json-schema-ref-parser';\nimport { MastraBase } from '@mastra/core/base';\nimport type { RuntimeContext } from '@mastra/core/di';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createTool } from '@mastra/core/tools';\nimport { isZodType } from '@mastra/core/utils';\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';\nimport type { SSEClientTransportOptions } from '@modelcontextprotocol/sdk/client/sse.js';\nimport { getDefaultEnvironment, StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport type { StreamableHTTPClientTransportOptions } from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport { DEFAULT_REQUEST_TIMEOUT_MSEC } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport type {\n ClientCapabilities,\n ElicitRequest,\n ElicitResult,\n GetPromptResult,\n ListPromptsResult,\n LoggingLevel,\n} from '@modelcontextprotocol/sdk/types.js';\nimport {\n CallToolResultSchema,\n ListResourcesResultSchema,\n ReadResourceResultSchema,\n ResourceListChangedNotificationSchema,\n ResourceUpdatedNotificationSchema,\n ListResourceTemplatesResultSchema,\n ListPromptsResultSchema,\n GetPromptResultSchema,\n PromptListChangedNotificationSchema,\n ElicitRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { asyncExitHook, gracefulExit } from 'exit-hook';\nimport { z } from 'zod';\nimport { convertJsonSchemaToZod } from 'zod-from-json-schema';\nimport { convertJsonSchemaToZod as convertJsonSchemaToZodV3 } from 'zod-from-json-schema-v3';\nimport type { JSONSchema } from 'zod-from-json-schema-v3';\nimport { ElicitationClientActions } from './elicitationActions';\nimport { PromptClientActions } from './promptActions';\nimport { ResourceClientActions } from './resourceActions';\n\n// Re-export MCP SDK LoggingLevel for convenience\nexport type { LoggingLevel } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface LogMessage {\n level: LoggingLevel;\n message: string;\n timestamp: Date;\n serverName: string;\n details?: Record<string, any>;\n runtimeContext?: RuntimeContext | null;\n}\n\nexport type LogHandler = (logMessage: LogMessage) => void;\n\n// Elicitation handler type\nexport type ElicitationHandler = (request: ElicitRequest['params']) => Promise<ElicitResult>;\n\n// Base options common to all server definitions\ntype BaseServerOptions = {\n logger?: LogHandler;\n timeout?: number;\n capabilities?: ClientCapabilities;\n enableServerLogs?: boolean;\n};\n\ntype StdioServerDefinition = BaseServerOptions & {\n command: string; // 'command' is required for Stdio\n args?: string[];\n env?: Record<string, string>;\n\n url?: never; // Exclude 'url' for Stdio\n requestInit?: never; // Exclude HTTP options for Stdio\n eventSourceInit?: never; // Exclude HTTP options for Stdio\n authProvider?: never; // Exclude HTTP options for Stdio\n reconnectionOptions?: never; // Exclude Streamable HTTP specific options\n sessionId?: never; // Exclude Streamable HTTP specific options\n};\n\n// HTTP Server Definition (Streamable HTTP or SSE fallback)\ntype HttpServerDefinition = BaseServerOptions & {\n url: URL; // 'url' is required for HTTP\n\n command?: never; // Exclude 'command' for HTTP\n args?: never; // Exclude Stdio options for HTTP\n env?: never; // Exclude Stdio options for HTTP\n\n // Include relevant options from SDK HTTP transport types\n requestInit?: StreamableHTTPClientTransportOptions['requestInit'];\n eventSourceInit?: SSEClientTransportOptions['eventSourceInit'];\n authProvider?: StreamableHTTPClientTransportOptions['authProvider'];\n reconnectionOptions?: StreamableHTTPClientTransportOptions['reconnectionOptions'];\n sessionId?: StreamableHTTPClientTransportOptions['sessionId'];\n};\n\nexport type MastraMCPServerDefinition = StdioServerDefinition | HttpServerDefinition;\n\n/**\n * Convert an MCP LoggingLevel to a logger method name that exists in our logger\n */\nfunction convertLogLevelToLoggerMethod(level: LoggingLevel): 'debug' | 'info' | 'warn' | 'error' {\n switch (level) {\n case 'debug':\n return 'debug';\n case 'info':\n case 'notice':\n return 'info';\n case 'warning':\n return 'warn';\n case 'error':\n case 'critical':\n case 'alert':\n case 'emergency':\n return 'error';\n default:\n // For any other levels, default to info\n return 'info';\n }\n}\n\nexport type InternalMastraMCPClientOptions = {\n name: string;\n server: MastraMCPServerDefinition;\n capabilities?: ClientCapabilities;\n version?: string;\n timeout?: number;\n};\n\nexport class InternalMastraMCPClient extends MastraBase {\n name: string;\n private client: Client;\n private readonly timeout: number;\n private logHandler?: LogHandler;\n private enableServerLogs?: boolean;\n private serverConfig: MastraMCPServerDefinition;\n private transport?: Transport;\n private currentOperationContext: RuntimeContext | null = null;\n public readonly resources: ResourceClientActions;\n public readonly prompts: PromptClientActions;\n public readonly elicitation: ElicitationClientActions;\n constructor({\n name,\n version = '1.0.0',\n server,\n capabilities = {},\n timeout = DEFAULT_REQUEST_TIMEOUT_MSEC,\n }: InternalMastraMCPClientOptions) {\n super({ name: 'MastraMCPClient' });\n this.name = name;\n this.timeout = timeout;\n this.logHandler = server.logger;\n this.enableServerLogs = server.enableServerLogs ?? true;\n this.serverConfig = server;\n\n const clientCapabilities = { ...capabilities, elicitation: {} };\n\n this.client = new Client(\n {\n name,\n version,\n },\n {\n capabilities: clientCapabilities,\n },\n );\n\n // Set up log message capturing\n this.setupLogging();\n\n this.resources = new ResourceClientActions({ client: this, logger: this.logger });\n this.prompts = new PromptClientActions({ client: this, logger: this.logger });\n this.elicitation = new ElicitationClientActions({ client: this, logger: this.logger });\n }\n\n /**\n * Log a message at the specified level\n * @param level Log level\n * @param message Log message\n * @param details Optional additional details\n */\n private log(level: LoggingLevel, message: string, details?: Record<string, any>): void {\n // Convert MCP logging level to our logger method\n const loggerMethod = convertLogLevelToLoggerMethod(level);\n\n const msg = `[${this.name}] ${message}`;\n\n // Log to internal logger\n this.logger[loggerMethod](msg, details);\n\n // Send to registered handler if available\n if (this.logHandler) {\n this.logHandler({\n level,\n message: msg,\n timestamp: new Date(),\n serverName: this.name,\n details,\n runtimeContext: this.currentOperationContext,\n });\n }\n }\n\n private setupLogging(): void {\n if (this.enableServerLogs) {\n this.client.setNotificationHandler(\n z.object({\n method: z.literal('notifications/message'),\n params: z\n .object({\n level: z.string(),\n })\n .passthrough(),\n }),\n notification => {\n const { level, ...params } = notification.params;\n this.log(level as LoggingLevel, '[MCP SERVER LOG]', params);\n },\n );\n }\n }\n\n private async connectStdio(command: string) {\n this.log('debug', `Using Stdio transport for command: ${command}`);\n try {\n this.transport = new StdioClientTransport({\n command,\n args: this.serverConfig.args,\n env: { ...getDefaultEnvironment(), ...(this.serverConfig.env || {}) },\n });\n await this.client.connect(this.transport, { timeout: this.serverConfig.timeout ?? this.timeout });\n this.log('debug', `Successfully connected to MCP server via Stdio`);\n } catch (e) {\n this.log('error', e instanceof Error ? e.stack || e.message : JSON.stringify(e));\n throw e;\n }\n }\n\n private async connectHttp(url: URL) {\n const { requestInit, eventSourceInit, authProvider } = this.serverConfig;\n\n this.log('debug', `Attempting to connect to URL: ${url}`);\n\n // Assume /sse means sse.\n let shouldTrySSE = url.pathname.endsWith(`/sse`);\n\n if (!shouldTrySSE) {\n try {\n // Try Streamable HTTP transport first\n this.log('debug', 'Trying Streamable HTTP transport...');\n const streamableTransport = new StreamableHTTPClientTransport(url, {\n requestInit,\n reconnectionOptions: this.serverConfig.reconnectionOptions,\n authProvider: authProvider,\n });\n await this.client.connect(streamableTransport, {\n timeout:\n // this is hardcoded to 3s because the long default timeout would be extremely slow for sse backwards compat (60s)\n 3000,\n });\n this.transport = streamableTransport;\n this.log('debug', 'Successfully connected using Streamable HTTP transport.');\n } catch (error) {\n this.log('debug', `Streamable HTTP transport failed: ${error}`);\n shouldTrySSE = true;\n }\n }\n\n if (shouldTrySSE) {\n this.log('debug', 'Falling back to deprecated HTTP+SSE transport...');\n try {\n // Fallback to SSE transport\n const sseTransport = new SSEClientTransport(url, { requestInit, eventSourceInit, authProvider });\n await this.client.connect(sseTransport, { timeout: this.serverConfig.timeout ?? this.timeout });\n this.transport = sseTransport;\n this.log('debug', 'Successfully connected using deprecated HTTP+SSE transport.');\n } catch (sseError) {\n this.log(\n 'error',\n `Failed to connect with SSE transport after failing to connect to Streamable HTTP transport first. SSE error: ${sseError}`,\n );\n throw new Error('Could not connect to server with any available HTTP transport');\n }\n }\n }\n\n private isConnected: Promise<boolean> | null = null;\n\n async connect() {\n // If a connection attempt is in progress, wait for it.\n if (await this.isConnected) {\n return true;\n }\n\n // Start new connection attempt.\n this.isConnected = new Promise<boolean>(async (resolve, reject) => {\n try {\n const { command, url } = this.serverConfig;\n\n if (command) {\n await this.connectStdio(command);\n } else if (url) {\n await this.connectHttp(url);\n } else {\n throw new Error('Server configuration must include either a command or a url.');\n }\n\n resolve(true);\n\n // Set up disconnect handler to reset state.\n const originalOnClose = this.client.onclose;\n this.client.onclose = () => {\n this.log('debug', `MCP server connection closed`);\n this.isConnected = null;\n if (typeof originalOnClose === 'function') {\n originalOnClose();\n }\n };\n } catch (e) {\n this.isConnected = null;\n reject(e);\n }\n });\n\n asyncExitHook(\n async () => {\n this.log('debug', `Disconnecting MCP server during exit`);\n await this.disconnect();\n },\n { wait: 5000 },\n );\n\n process.on('SIGTERM', () => gracefulExit());\n this.log('debug', `Successfully connected to MCP server`);\n return this.isConnected;\n }\n\n /**\n * Get the current session ID if using the Streamable HTTP transport.\n * Returns undefined if not connected or not using Streamable HTTP.\n */\n get sessionId(): string | undefined {\n if (this.transport instanceof StreamableHTTPClientTransport) {\n return this.transport.sessionId;\n }\n return undefined;\n }\n\n async disconnect() {\n if (!this.transport) {\n this.log('debug', 'Disconnect called but no transport was connected.');\n return;\n }\n this.log('debug', `Disconnecting from MCP server`);\n try {\n await this.transport.close();\n this.log('debug', 'Successfully disconnected from MCP server');\n } catch (e) {\n this.log('error', 'Error during MCP server disconnect', {\n error: e instanceof Error ? e.stack : JSON.stringify(e, null, 2),\n });\n throw e;\n } finally {\n this.transport = undefined;\n this.isConnected = Promise.resolve(false);\n }\n }\n\n async listResources() {\n this.log('debug', `Requesting resources from MCP server`);\n return await this.client.request({ method: 'resources/list' }, ListResourcesResultSchema, {\n timeout: this.timeout,\n });\n }\n\n async readResource(uri: string) {\n this.log('debug', `Reading resource from MCP server: ${uri}`);\n return await this.client.request({ method: 'resources/read', params: { uri } }, ReadResourceResultSchema, {\n timeout: this.timeout,\n });\n }\n\n async subscribeResource(uri: string) {\n this.log('debug', `Subscribing to resource on MCP server: ${uri}`);\n return await this.client.request({ method: 'resources/subscribe', params: { uri } }, z.object({}), {\n timeout: this.timeout,\n });\n }\n\n async unsubscribeResource(uri: string) {\n this.log('debug', `Unsubscribing from resource on MCP server: ${uri}`);\n return await this.client.request({ method: 'resources/unsubscribe', params: { uri } }, z.object({}), {\n timeout: this.timeout,\n });\n }\n\n async listResourceTemplates() {\n this.log('debug', `Requesting resource templates from MCP server`);\n return await this.client.request({ method: 'resources/templates/list' }, ListResourceTemplatesResultSchema, {\n timeout: this.timeout,\n });\n }\n\n /**\n * Fetch the list of available prompts from the MCP server.\n */\n async listPrompts(): Promise<ListPromptsResult> {\n this.log('debug', `Requesting prompts from MCP server`);\n return await this.client.request({ method: 'prompts/list' }, ListPromptsResultSchema, {\n timeout: this.timeout,\n });\n }\n\n /**\n * Get a prompt and its dynamic messages from the server.\n * @param name The prompt name\n * @param args Arguments for the prompt\n * @param version (optional) The prompt version to retrieve\n */\n async getPrompt({\n name,\n args,\n version,\n }: {\n name: string;\n args?: Record<string, any>;\n version?: string;\n }): Promise<GetPromptResult> {\n this.log('debug', `Requesting prompt from MCP server: ${name}`);\n return await this.client.request(\n { method: 'prompts/get', params: { name, arguments: args, version } },\n GetPromptResultSchema,\n { timeout: this.timeout },\n );\n }\n\n /**\n * Register a handler to be called when the prompt list changes on the server.\n * Use this to refresh cached prompt lists in the client/UI if needed.\n */\n setPromptListChangedNotificationHandler(handler: () => void): void {\n this.log('debug', 'Setting prompt list changed notification handler');\n this.client.setNotificationHandler(PromptListChangedNotificationSchema, () => {\n handler();\n });\n }\n\n setResourceUpdatedNotificationHandler(\n handler: (params: z.infer<typeof ResourceUpdatedNotificationSchema>['params']) => void,\n ): void {\n this.log('debug', 'Setting resource updated notification handler');\n this.client.setNotificationHandler(ResourceUpdatedNotificationSchema, notification => {\n handler(notification.params);\n });\n }\n\n setResourceListChangedNotificationHandler(handler: () => void): void {\n this.log('debug', 'Setting resource list changed notification handler');\n this.client.setNotificationHandler(ResourceListChangedNotificationSchema, () => {\n handler();\n });\n }\n\n setElicitationRequestHandler(handler: ElicitationHandler): void {\n this.log('debug', 'Setting elicitation request handler');\n this.client.setRequestHandler(ElicitRequestSchema, async request => {\n this.log('debug', `Received elicitation request: ${request.params.message}`);\n return handler(request.params);\n });\n }\n\n private async convertInputSchema(\n inputSchema: Awaited<ReturnType<Client['listTools']>>['tools'][0]['inputSchema'] | JSONSchema,\n ): Promise<z.ZodType> {\n if (isZodType(inputSchema)) {\n return inputSchema;\n }\n\n try {\n await $RefParser.dereference(inputSchema);\n const jsonSchemaToConvert = ('jsonSchema' in inputSchema ? inputSchema.jsonSchema : inputSchema) as JSONSchema;\n if ('toJSONSchema' in z) {\n //@ts-expect-error - zod type issue\n return convertJsonSchemaToZod(jsonSchemaToConvert);\n } else {\n return convertJsonSchemaToZodV3(jsonSchemaToConvert);\n }\n } catch (error: unknown) {\n let errorDetails: string | undefined;\n if (error instanceof Error) {\n errorDetails = error.stack;\n } else {\n // Attempt to stringify, fallback to String()\n try {\n errorDetails = JSON.stringify(error);\n } catch {\n errorDetails = String(error);\n }\n }\n this.log('error', 'Failed to convert JSON schema to Zod schema using zodFromJsonSchema', {\n error: errorDetails,\n originalJsonSchema: inputSchema,\n });\n\n throw new MastraError({\n id: 'MCP_TOOL_INPUT_SCHEMA_CONVERSION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: { error: errorDetails ?? 'Unknown error' },\n });\n }\n }\n\n private async convertOutputSchema(\n outputSchema: Awaited<ReturnType<Client['listTools']>>['tools'][0]['outputSchema'] | JSONSchema,\n ): Promise<z.ZodType | undefined> {\n if (!outputSchema) return;\n if (isZodType(outputSchema)) {\n return outputSchema;\n }\n\n try {\n await $RefParser.dereference(outputSchema);\n const jsonSchemaToConvert = ('jsonSchema' in outputSchema ? outputSchema.jsonSchema : outputSchema) as JSONSchema;\n if ('toJSONSchema' in z) {\n //@ts-expect-error - zod type issue\n return convertJsonSchemaToZod(jsonSchemaToConvert);\n } else {\n return convertJsonSchemaToZodV3(jsonSchemaToConvert);\n }\n } catch (error: unknown) {\n let errorDetails: string | undefined;\n if (error instanceof Error) {\n errorDetails = error.stack;\n } else {\n // Attempt to stringify, fallback to String()\n try {\n errorDetails = JSON.stringify(error);\n } catch {\n errorDetails = String(error);\n }\n }\n this.log('error', 'Failed to convert JSON schema to Zod schema using zodFromJsonSchema', {\n error: errorDetails,\n originalJsonSchema: outputSchema,\n });\n\n throw new MastraError({\n id: 'MCP_TOOL_OUTPUT_SCHEMA_CONVERSION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: { error: errorDetails ?? 'Unknown error' },\n });\n }\n }\n\n async tools() {\n this.log('debug', `Requesting tools from MCP server`);\n const { tools } = await this.client.listTools({ timeout: this.timeout });\n const toolsRes: Record<string, any> = {};\n for (const tool of tools) {\n this.log('debug', `Processing tool: ${tool.name}`);\n try {\n const mastraTool = createTool({\n id: `${this.name}_${tool.name}`,\n description: tool.description || '',\n inputSchema: await this.convertInputSchema(tool.inputSchema),\n outputSchema: await this.convertOutputSchema(tool.outputSchema),\n execute: async ({ context, runtimeContext }: { context: any; runtimeContext?: RuntimeContext | null }) => {\n const previousContext = this.currentOperationContext;\n this.currentOperationContext = runtimeContext || null; // Set current context\n try {\n this.log('debug', `Executing tool: ${tool.name}`, { toolArgs: context });\n const res = await this.client.callTool(\n {\n name: tool.name,\n arguments: context,\n },\n CallToolResultSchema,\n {\n timeout: this.timeout,\n },\n );\n\n this.log('debug', `Tool executed successfully: ${tool.name}`);\n return res;\n } catch (e) {\n this.log('error', `Error calling tool: ${tool.name}`, {\n error: e instanceof Error ? e.stack : JSON.stringify(e, null, 2),\n toolArgs: context,\n });\n throw e;\n } finally {\n this.currentOperationContext = previousContext; // Restore previous context\n }\n },\n });\n\n if (tool.name) {\n toolsRes[tool.name] = mastraTool;\n }\n } catch (toolCreationError: unknown) {\n // Catch errors during tool creation itself (e.g., if createTool has issues)\n this.log('error', `Failed to create Mastra tool wrapper for MCP tool: ${tool.name}`, {\n error: toolCreationError instanceof Error ? toolCreationError.stack : String(toolCreationError),\n mcpToolDefinition: tool,\n });\n }\n }\n\n return toolsRes;\n }\n}\n\n/**\n * @deprecated MastraMCPClient is deprecated and will be removed in a future release. Please use MCPClient instead.\n */\n\nexport class MastraMCPClient extends InternalMastraMCPClient {\n constructor(args: InternalMastraMCPClientOptions) {\n super(args);\n this.logger.warn(\n '[DEPRECATION] MastraMCPClient is deprecated and will be removed in a future release. Please use MCPClient instead.',\n );\n }\n}\n","import { MastraBase } from '@mastra/core/base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { DEFAULT_REQUEST_TIMEOUT_MSEC } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type {\n ElicitRequest,\n ElicitResult,\n Prompt,\n Resource,\n ResourceTemplate,\n} from '@modelcontextprotocol/sdk/types.js';\nimport equal from 'fast-deep-equal';\nimport { v5 as uuidv5 } from 'uuid';\nimport { InternalMastraMCPClient } from './client';\nimport type { MastraMCPServerDefinition } from './client';\n\nconst mcpClientInstances = new Map<string, InstanceType<typeof MCPClient>>();\n\nexport interface MCPClientOptions {\n id?: string;\n servers: Record<string, MastraMCPServerDefinition>;\n timeout?: number; // Optional global timeout\n}\n\nexport class MCPClient extends MastraBase {\n private serverConfigs: Record<string, MastraMCPServerDefinition> = {};\n private id: string;\n private defaultTimeout: number;\n private mcpClientsById = new Map<string, InternalMastraMCPClient>();\n private disconnectPromise: Promise<void> | null = null;\n\n constructor(args: MCPClientOptions) {\n super({ name: 'MCPClient' });\n this.defaultTimeout = args.timeout ?? DEFAULT_REQUEST_TIMEOUT_MSEC;\n this.serverConfigs = args.servers;\n this.id = args.id ?? this.makeId();\n\n if (args.id) {\n this.id = args.id;\n const cached = mcpClientInstances.get(this.id);\n\n if (cached && !equal(cached.serverConfigs, args.servers)) {\n const existingInstance = mcpClientInstances.get(this.id);\n if (existingInstance) {\n void existingInstance.disconnect();\n mcpClientInstances.delete(this.id);\n }\n }\n } else {\n this.id = this.makeId();\n }\n\n // to prevent memory leaks return the same MCP server instance when configured the same way multiple times\n const existingInstance = mcpClientInstances.get(this.id);\n if (existingInstance) {\n if (!args.id) {\n throw new Error(`MCPClient was initialized multiple times with the same configuration options.\n\nThis error is intended to prevent memory leaks.\n\nTo fix this you have three different options:\n1. If you need multiple MCPClient class instances with identical server configurations, set an id when configuring: new MCPClient({ id: \"my-unique-id\" })\n2. Call \"await client.disconnect()\" after you're done using the client and before you recreate another instance with the same options. If the identical MCPClient instance is already closed at the time of re-creating it, you will not see this error.\n3. If you only need one instance of MCPClient in your app, refactor your code so it's only created one time (ex. move it out of a loop into a higher scope code block)\n`);\n }\n return existingInstance;\n }\n\n mcpClientInstances.set(this.id, this);\n this.addToInstanceCache();\n return this;\n }\n public get elicitation() {\n this.addToInstanceCache();\n return {\n onRequest: async (serverName: string, handler: (request: ElicitRequest['params']) => Promise<ElicitResult>) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.elicitation.onRequest(handler);\n } catch (err) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_ON_REQUEST_ELICITATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n err,\n );\n }\n },\n };\n }\n\n public get resources() {\n this.addToInstanceCache();\n return {\n list: async (): Promise<Record<string, Resource[]>> => {\n const allResources: Record<string, Resource[]> = {};\n for (const serverName of Object.keys(this.serverConfigs)) {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n allResources[serverName] = await internalClient.resources.list();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_CLIENT_LIST_RESOURCES_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to list resources from server:', { error: mastraError.toString() });\n }\n }\n return allResources;\n },\n templates: async (): Promise<Record<string, ResourceTemplate[]>> => {\n const allTemplates: Record<string, ResourceTemplate[]> = {};\n for (const serverName of Object.keys(this.serverConfigs)) {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n allTemplates[serverName] = await internalClient.resources.templates();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_CLIENT_LIST_RESOURCE_TEMPLATES_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to list resource templates from server:', { error: mastraError.toString() });\n }\n }\n return allTemplates;\n },\n read: async (serverName: string, uri: string) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.read(uri);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_READ_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n uri,\n },\n },\n error,\n );\n }\n },\n subscribe: async (serverName: string, uri: string) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.subscribe(uri);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_SUBSCRIBE_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n uri,\n },\n },\n error,\n );\n }\n },\n unsubscribe: async (serverName: string, uri: string) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.unsubscribe(uri);\n } catch (err) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_UNSUBSCRIBE_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n uri,\n },\n },\n err,\n );\n }\n },\n onUpdated: async (serverName: string, handler: (params: { uri: string }) => void) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.onUpdated(handler);\n } catch (err) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_ON_UPDATED_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n err,\n );\n }\n },\n onListChanged: async (serverName: string, handler: () => void) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.resources.onListChanged(handler);\n } catch (err) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_ON_LIST_CHANGED_RESOURCE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n err,\n );\n }\n },\n };\n }\n\n public get prompts() {\n this.addToInstanceCache();\n return {\n list: async (): Promise<Record<string, Prompt[]>> => {\n const allPrompts: Record<string, Prompt[]> = {};\n for (const serverName of Object.keys(this.serverConfigs)) {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n allPrompts[serverName] = await internalClient.prompts.list();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_CLIENT_LIST_PROMPTS_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to list prompts from server:', { error: mastraError.toString() });\n }\n }\n return allPrompts;\n },\n get: async ({\n serverName,\n name,\n args,\n version,\n }: {\n serverName: string;\n name: string;\n args?: Record<string, any>;\n version?: string;\n }) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.prompts.get({ name, args, version });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_GET_PROMPT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n name,\n },\n },\n error,\n );\n }\n },\n onListChanged: async (serverName: string, handler: () => void) => {\n try {\n const internalClient = await this.getConnectedClientForServer(serverName);\n return internalClient.prompts.onListChanged(handler);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_ON_LIST_CHANGED_PROMPT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n serverName,\n },\n },\n error,\n );\n }\n },\n };\n }\n\n private addToInstanceCache() {\n if (!mcpClientInstances.has(this.id)) {\n mcpClientInstances.set(this.id, this);\n }\n }\n\n private makeId() {\n const text = JSON.stringify(this.serverConfigs).normalize('NFKC');\n const idNamespace = uuidv5(`MCPClient`, uuidv5.DNS);\n\n return uuidv5(text, idNamespace);\n }\n\n public async disconnect() {\n // Helps to prevent race condition\n // If there is already a disconnect ongoing, return the existing promise.\n if (this.disconnectPromise) {\n return this.disconnectPromise;\n }\n\n this.disconnectPromise = (async () => {\n try {\n mcpClientInstances.delete(this.id);\n\n // Disconnect all clients in the cache\n await Promise.all(Array.from(this.mcpClientsById.values()).map(client => client.disconnect()));\n this.mcpClientsById.clear();\n } finally {\n this.disconnectPromise = null;\n }\n })();\n\n return this.disconnectPromise;\n }\n\n public async getTools() {\n this.addToInstanceCache();\n const connectedTools: Record<string, any> = {}; // <- any because we don't have proper tool schemas\n\n try {\n await this.eachClientTools(async ({ serverName, tools }) => {\n for (const [toolName, toolConfig] of Object.entries(tools)) {\n connectedTools[`${serverName}_${toolName}`] = toolConfig; // namespace tool to prevent tool name conflicts between servers\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_GET_TOOLS_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n\n return connectedTools;\n }\n\n public async getToolsets() {\n this.addToInstanceCache();\n const connectedToolsets: Record<string, Record<string, any>> = {}; // <- any because we don't have proper tool schemas\n\n try {\n await this.eachClientTools(async ({ serverName, tools }) => {\n if (tools) {\n connectedToolsets[serverName] = tools;\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MCP_CLIENT_GET_TOOLSETS_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n\n return connectedToolsets;\n }\n\n /**\n * @deprecated all resource actions have been moved to the this.resources object. Use this.resources.list() instead.\n */\n public async getResources() {\n return this.resources.list();\n }\n\n /**\n * Get the current session IDs for all connected MCP clients using the Streamable HTTP transport.\n * Returns an object mapping server names to their session IDs.\n */\n get sessionIds(): Record<string, string> {\n const sessionIds: Record<string, string> = {};\n for (const [serverName, client] of this.mcpClientsById.entries()) {\n if (client.sessionId) {\n sessionIds[serverName] = client.sessionId;\n }\n }\n return sessionIds;\n }\n\n private async getConnectedClient(name: string, config: MastraMCPServerDefinition): Promise<InternalMastraMCPClient> {\n if (this.disconnectPromise) {\n await this.disconnectPromise;\n }\n\n const exists = this.mcpClientsById.has(name);\n const existingClient = this.mcpClientsById.get(name);\n\n this.logger.debug(`getConnectedClient ${name} exists: ${exists}`);\n\n if (exists) {\n // This is just to satisfy Typescript since technically you could have this.mcpClientsById.set('someKey', undefined);\n // Should never reach this point basically we always create a new MastraMCPClient instance when we add to the Map.\n if (!existingClient) {\n throw new Error(`Client ${name} exists but is undefined`);\n }\n await existingClient.connect();\n return existingClient;\n }\n\n this.logger.debug(`Connecting to ${name} MCP server`);\n\n // Create client with server configuration including log handler\n const mcpClient = new InternalMastraMCPClient({\n name,\n server: config,\n timeout: config.timeout ?? this.defaultTimeout,\n });\n\n mcpClient.__setLogger(this.logger);\n\n this.mcpClientsById.set(name, mcpClient);\n\n try {\n await mcpClient.connect();\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_CLIENT_CONNECT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to connect to MCP server ${name}: ${e instanceof Error ? e.stack || e.message : String(e)}`,\n details: {\n name,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('MCPClient errored connecting to MCP server:', { error: mastraError.toString() });\n this.mcpClientsById.delete(name);\n throw mastraError;\n }\n this.logger.debug(`Connected to ${name} MCP server`);\n return mcpClient;\n }\n\n private async getConnectedClientForServer(serverName: string): Promise<InternalMastraMCPClient> {\n const serverConfig = this.serverConfigs[serverName];\n if (!serverConfig) {\n throw new Error(`Server configuration not found for name: ${serverName}`);\n }\n return this.getConnectedClient(serverName, serverConfig);\n }\n\n private async eachClientTools(\n cb: (args: {\n serverName: string;\n tools: Record<string, any>; // <- any because we don't have proper tool schemas\n client: InstanceType<typeof InternalMastraMCPClient>;\n }) => Promise<void>,\n ) {\n await Promise.all(\n Object.entries(this.serverConfigs).map(async ([serverName, serverConfig]) => {\n const client = await this.getConnectedClient(serverName, serverConfig);\n const tools = await client.tools();\n await cb({ serverName, tools, client });\n }),\n );\n }\n}\n\n/**\n * @deprecated MCPConfigurationOptions is deprecated and will be removed in a future release. Use MCPClientOptions instead.\n */\nexport interface MCPConfigurationOptions {\n id?: string;\n servers: Record<string, MastraMCPServerDefinition>;\n timeout?: number; // Optional global timeout\n}\n\n/**\n * @deprecated MCPConfiguration is deprecated and will be removed in a future release. Use MCPClient instead.\n */\nexport class MCPConfiguration extends MCPClient {\n constructor(args: MCPClientOptions) {\n super(args);\n this.logger.warn(\n `MCPConfiguration has been renamed to MCPClient and MCPConfiguration is deprecated. The API is identical but the MCPConfiguration export will be removed in the future. Update your imports now to prevent future errors.`,\n );\n }\n}\n","// src/utils/stream.ts\nvar StreamingApi = class {\n writer;\n encoder;\n writable;\n abortSubscribers = [];\n responseReadable;\n aborted = false;\n closed = false;\n constructor(writable, _readable) {\n this.writable = writable;\n this.writer = writable.getWriter();\n this.encoder = new TextEncoder();\n const reader = _readable.getReader();\n this.abortSubscribers.push(async () => {\n await reader.cancel();\n });\n this.responseReadable = new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read();\n done ? controller.close() : controller.enqueue(value);\n },\n cancel: () => {\n this.abort();\n }\n });\n }\n async write(input) {\n try {\n if (typeof input === \"string\") {\n input = this.encoder.encode(input);\n }\n await this.writer.write(input);\n } catch {\n }\n return this;\n }\n async writeln(input) {\n await this.write(input + \"\\n\");\n return this;\n }\n sleep(ms) {\n return new Promise((res) => setTimeout(res, ms));\n }\n async close() {\n try {\n await this.writer.close();\n } catch {\n }\n this.closed = true;\n }\n async pipe(body) {\n this.writer.releaseLock();\n await body.pipeTo(this.writable, { preventClose: true });\n this.writer = this.writable.getWriter();\n }\n onAbort(listener) {\n this.abortSubscribers.push(listener);\n }\n abort() {\n if (!this.aborted) {\n this.aborted = true;\n this.abortSubscribers.forEach((subscriber) => subscriber());\n }\n }\n};\nexport {\n StreamingApi\n};\n","// src/helper/streaming/utils.ts\nvar isOldBunVersion = () => {\n const version = typeof Bun !== \"undefined\" ? Bun.version : void 0;\n if (version === void 0) {\n return false;\n }\n const result = version.startsWith(\"1.1\") || version.startsWith(\"1.0\") || version.startsWith(\"0.\");\n isOldBunVersion = () => result;\n return result;\n};\nexport {\n isOldBunVersion\n};\n","// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \""\";\n break;\n case 39:\n escape = \"'\";\n break;\n case 38:\n escape = \"&\";\n break;\n case 60:\n escape = \"<\";\n break;\n case 62:\n escape = \">\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n","// src/helper/streaming/sse.ts\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"../../utils/html.js\";\nimport { StreamingApi } from \"../../utils/stream.js\";\nimport { isOldBunVersion } from \"./utils.js\";\nvar SSEStreamingApi = class extends StreamingApi {\n constructor(writable, readable) {\n super(writable, readable);\n }\n async writeSSE(message) {\n const data = await resolveCallback(message.data, HtmlEscapedCallbackPhase.Stringify, false, {});\n const dataLines = data.split(\"\\n\").map((line) => {\n return `data: ${line}`;\n }).join(\"\\n\");\n const sseData = [\n message.event && `event: ${message.event}`,\n dataLines,\n message.id && `id: ${message.id}`,\n message.retry && `retry: ${message.retry}`\n ].filter(Boolean).join(\"\\n\") + \"\\n\\n\";\n await this.write(sseData);\n }\n};\nvar run = async (stream, cb, onError) => {\n try {\n await cb(stream);\n } catch (e) {\n if (e instanceof Error && onError) {\n await onError(e, stream);\n await stream.writeSSE({\n event: \"error\",\n data: e.message\n });\n } else {\n console.error(e);\n }\n } finally {\n stream.close();\n }\n};\nvar contextStash = /* @__PURE__ */ new WeakMap();\nvar streamSSE = (c, cb, onError) => {\n const { readable, writable } = new TransformStream();\n const stream = new SSEStreamingApi(writable, readable);\n if (isOldBunVersion()) {\n c.req.raw.signal.addEventListener(\"abort\", () => {\n if (!stream.closed) {\n stream.abort();\n }\n });\n }\n contextStash.set(stream.responseReadable, c);\n c.header(\"Transfer-Encoding\", \"chunked\");\n c.header(\"Content-Type\", \"text/event-stream\");\n c.header(\"Cache-Control\", \"no-cache\");\n c.header(\"Connection\", \"keep-alive\");\n run(stream, cb, onError);\n return c.newResponse(stream.responseReadable);\n};\nexport {\n SSEStreamingApi,\n streamSSE\n};\n","import { JSONRPCMessageSchema, } from '@modelcontextprotocol/sdk/types.js';\nconst MAXIMUM_MESSAGE_SIZE = 4 * 1024 * 1024; // 4MB\nexport class SSETransport {\n messageUrl;\n stream;\n _sessionId;\n onclose;\n onerror;\n onmessage;\n /**\n * Creates a new SSETransport, which will direct the MPC client to POST messages to messageUrl\n */\n constructor(messageUrl, stream) {\n this.messageUrl = messageUrl;\n this.stream = stream;\n this._sessionId = crypto.randomUUID();\n this.stream.onAbort(() => {\n void this.close();\n });\n }\n get sessionId() {\n return this._sessionId;\n }\n // start() is automatically called after MCP Server connects to the transport\n async start() {\n if (this.stream == null) {\n throw new Error('Stream not initialized');\n }\n if (this.stream.closed) {\n throw new Error('SSE transport already closed!');\n }\n await this.stream.writeSSE({\n event: 'ping',\n data: '',\n });\n await this.stream.writeSSE({\n event: 'endpoint',\n data: `${this.messageUrl}?sessionId=${this.sessionId}`,\n });\n }\n async handlePostMessage(context) {\n if (this.stream?.closed == null) {\n return context.text('SSE connection not established', 500);\n }\n try {\n const contentType = context.req.header('content-type') || '';\n if (!contentType.includes('application/json')) {\n throw new Error(`Unsupported content-type: ${contentType}`);\n }\n // Check if the request body is too large\n const contentLength = Number.parseInt(context.req.header('content-length') || '0', 10);\n if (contentLength > MAXIMUM_MESSAGE_SIZE) {\n throw new Error(`Request body too large: ${contentLength} bytes`);\n }\n // Clone the request before reading the body to avoid stream issues\n const body = (await context.req.json());\n await this.handleMessage(body);\n return context.text('Accepted', 202);\n }\n catch (error) {\n this.onerror?.(error);\n return context.text('Error', 400);\n }\n }\n /**\n * Handle a client message, regardless of how it arrived. This can be used to inform the server of messages that arrive via a means different than HTTP POST.\n */\n async handleMessage(message) {\n let parsedMessage;\n try {\n parsedMessage = JSONRPCMessageSchema.parse(message);\n }\n catch (error) {\n this.onerror?.(error);\n throw error;\n }\n this.onmessage?.(parsedMessage);\n }\n async close() {\n if (this.stream?.closed) {\n this.stream.abort();\n }\n }\n async send(message) {\n if (this.stream?.closed) {\n throw new Error('Not connected');\n }\n await this.stream.writeSSE({\n event: 'message',\n data: JSON.stringify(message),\n });\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Server } from '@modelcontextprotocol/sdk/server/index.js';\n\ninterface ServerPromptActionsDependencies {\n getLogger: () => IMastraLogger;\n getSdkServer: () => Server;\n clearDefinedPrompts: () => void;\n}\n\nexport class ServerPromptActions {\n private readonly getLogger: () => IMastraLogger;\n private readonly getSdkServer: () => Server;\n private readonly clearDefinedPrompts: () => void;\n\n constructor(dependencies: ServerPromptActionsDependencies) {\n this.getLogger = dependencies.getLogger;\n this.getSdkServer = dependencies.getSdkServer;\n this.clearDefinedPrompts = dependencies.clearDefinedPrompts;\n }\n\n /**\n * Notifies the server that the overall list of available prompts has changed.\n * This will clear the internal cache of defined prompts and send a list_changed notification to clients.\n */\n public async notifyListChanged(): Promise<void> {\n this.getLogger().info('Prompt list change externally notified. Clearing definedPrompts and sending notification.');\n this.clearDefinedPrompts();\n try {\n await this.getSdkServer().sendPromptListChanged();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_PROMPT_LIST_CHANGED_NOTIFICATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to send prompt list changed notification',\n },\n error,\n );\n this.getLogger().error('Failed to send prompt list changed notification:', {\n error: mastraError.toString(),\n });\n this.getLogger().trackException(mastraError);\n throw mastraError;\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Server } from '@modelcontextprotocol/sdk/server/index.js';\n\ninterface ServerResourceActionsDependencies {\n getSubscriptions: () => Set<string>;\n getLogger: () => IMastraLogger;\n getSdkServer: () => Server;\n clearDefinedResources: () => void;\n clearDefinedResourceTemplates: () => void;\n}\n\nexport class ServerResourceActions {\n private readonly getSubscriptions: () => Set<string>;\n private readonly getLogger: () => IMastraLogger;\n private readonly getSdkServer: () => Server;\n private readonly clearDefinedResources: () => void;\n private readonly clearDefinedResourceTemplates: () => void;\n\n constructor(dependencies: ServerResourceActionsDependencies) {\n this.getSubscriptions = dependencies.getSubscriptions;\n this.getLogger = dependencies.getLogger;\n this.getSdkServer = dependencies.getSdkServer;\n this.clearDefinedResources = dependencies.clearDefinedResources;\n this.clearDefinedResourceTemplates = dependencies.clearDefinedResourceTemplates;\n }\n\n /**\n * Checks if any resources have been updated.\n * If the resource is subscribed to by clients, an update notification will be sent.\n */\n public async notifyUpdated({ uri }: { uri: string }): Promise<void> {\n if (this.getSubscriptions().has(uri)) {\n this.getLogger().info(`Sending notifications/resources/updated for externally notified resource: ${uri}`);\n try {\n await this.getSdkServer().sendResourceUpdated({ uri });\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_RESOURCE_UPDATED_NOTIFICATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to send resource updated notification',\n details: {\n uri,\n },\n },\n error,\n );\n this.getLogger().trackException(mastraError);\n this.getLogger().error('Failed to send resource updated notification:', {\n error: mastraError.toString(),\n });\n throw mastraError;\n }\n } else {\n this.getLogger().debug(`Resource ${uri} was updated, but no active subscriptions for it.`);\n }\n }\n\n /**\n * Notifies the server that the overall list of available resources has changed.\n * This will clear the internal cache of defined resources and send a list_changed notification to clients.\n */\n public async notifyListChanged(): Promise<void> {\n this.getLogger().info(\n 'Resource list change externally notified. Clearing definedResources and sending notification.',\n );\n this.clearDefinedResources(); // Clear cached resources\n this.clearDefinedResourceTemplates(); // Clear cached resource templates\n try {\n await this.getSdkServer().sendResourceListChanged();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_RESOURCE_LIST_CHANGED_NOTIFICATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to send resource list changed notification',\n },\n error,\n );\n this.getLogger().trackException(mastraError);\n this.getLogger().error('Failed to send resource list changed notification:', {\n error: mastraError.toString(),\n });\n throw mastraError;\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport type * as http from 'node:http';\nimport type { ToolsInput, Agent } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { MCPServerBase } from '@mastra/core/mcp';\nimport type {\n MCPServerConfig,\n ServerInfo,\n ServerDetailInfo,\n ConvertedTool,\n MCPServerHonoSSEOptions,\n MCPServerSSEOptions,\n MCPToolType,\n} from '@mastra/core/mcp';\nimport { RuntimeContext } from '@mastra/core/runtime-context';\nimport { createTool } from '@mastra/core/tools';\nimport type { InternalCoreTool } from '@mastra/core/tools';\nimport { makeCoreTool } from '@mastra/core/utils';\nimport type { Workflow } from '@mastra/core/workflows';\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { StreamableHTTPServerTransportOptions } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n ListResourceTemplatesRequestSchema,\n SubscribeRequestSchema,\n UnsubscribeRequestSchema,\n ListPromptsRequestSchema,\n GetPromptRequestSchema,\n SetLevelRequestSchema,\n PromptSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport type {\n ResourceContents,\n Resource,\n ResourceTemplate,\n ServerCapabilities,\n Prompt,\n CallToolResult,\n ElicitResult,\n ElicitRequest,\n LoggingLevel,\n} from '@modelcontextprotocol/sdk/types.js';\nimport type { SSEStreamingApi } from 'hono/streaming';\nimport { streamSSE } from 'hono/streaming';\nimport { SSETransport } from 'hono-mcp-server-sse-transport';\nimport { z } from 'zod';\nimport { ServerPromptActions } from './promptActions';\nimport { ServerResourceActions } from './resourceActions';\nimport type { MCPServerPrompts, MCPServerResources, ElicitationActions, MCPTool } from './types';\nexport class MCPServer extends MCPServerBase {\n private server: Server;\n private stdioTransport?: StdioServerTransport;\n private sseTransport?: SSEServerTransport;\n private sseHonoTransports: Map<string, SSETransport>;\n private streamableHTTPTransports: Map<string, StreamableHTTPServerTransport> = new Map();\n // Track server instances for each HTTP session\n private httpServerInstances: Map<string, Server> = new Map();\n\n private definedResources?: Resource[];\n private definedResourceTemplates?: ResourceTemplate[];\n private resourceOptions?: MCPServerResources;\n private definedPrompts?: Prompt[];\n private promptOptions?: MCPServerPrompts;\n private subscriptions: Set<string> = new Set();\n private currentLoggingLevel: LoggingLevel | undefined;\n public readonly resources: ServerResourceActions;\n public readonly prompts: ServerPromptActions;\n public readonly elicitation: ElicitationActions;\n\n /**\n * Get the current stdio transport.\n */\n public getStdioTransport(): StdioServerTransport | undefined {\n return this.stdioTransport;\n }\n\n /**\n * Get the current SSE transport.\n */\n public getSseTransport(): SSEServerTransport | undefined {\n return this.sseTransport;\n }\n\n /**\n * Get the current SSE Hono transport.\n */\n public getSseHonoTransport(sessionId: string): SSETransport | undefined {\n return this.sseHonoTransports.get(sessionId);\n }\n\n /**\n * Get the current server instance.\n */\n public getServer(): Server {\n return this.server;\n }\n\n /**\n * Construct a new MCPServer instance.\n * @param opts - Configuration options for the server, including registry metadata.\n */\n constructor(opts: MCPServerConfig & { resources?: MCPServerResources; prompts?: MCPServerPrompts }) {\n super(opts);\n this.resourceOptions = opts.resources;\n this.promptOptions = opts.prompts;\n\n const capabilities: ServerCapabilities = {\n tools: {},\n logging: { enabled: true },\n elicitation: {},\n };\n\n if (opts.resources) {\n capabilities.resources = { subscribe: true, listChanged: true };\n }\n\n if (opts.prompts) {\n capabilities.prompts = { listChanged: true };\n }\n\n this.server = new Server({ name: this.name, version: this.version }, { capabilities });\n\n this.logger.info(\n `Initialized MCPServer '${this.name}' v${this.version} (ID: ${this.id}) with tools: ${Object.keys(this.convertedTools).join(', ')} and resources. Capabilities: ${JSON.stringify(capabilities)}`,\n );\n\n this.sseHonoTransports = new Map();\n\n // Register all handlers on the main server instance\n this.registerHandlersOnServer(this.server);\n\n this.resources = new ServerResourceActions({\n getSubscriptions: () => this.subscriptions,\n getLogger: () => this.logger,\n getSdkServer: () => this.server,\n clearDefinedResources: () => {\n this.definedResources = undefined;\n },\n clearDefinedResourceTemplates: () => {\n this.definedResourceTemplates = undefined;\n },\n });\n\n this.prompts = new ServerPromptActions({\n getLogger: () => this.logger,\n getSdkServer: () => this.server,\n clearDefinedPrompts: () => {\n this.definedPrompts = undefined;\n },\n });\n\n this.elicitation = {\n sendRequest: async request => {\n return this.handleElicitationRequest(request);\n },\n };\n }\n\n /**\n * Handle an elicitation request by sending it to the connected client.\n * This method sends an elicitation/create request to the client and waits for the response.\n *\n * @param request - The elicitation request containing message and schema\n * @param serverInstance - Optional server instance to use; defaults to main server for backward compatibility\n * @returns Promise that resolves to the client's response\n */\n private async handleElicitationRequest(\n request: ElicitRequest['params'],\n serverInstance?: Server,\n ): Promise<ElicitResult> {\n this.logger.debug(`Sending elicitation request: ${request.message}`);\n\n const server = serverInstance || this.server;\n const response = await server.elicitInput(request);\n\n this.logger.debug(`Received elicitation response: ${JSON.stringify(response)}`);\n\n return response;\n }\n\n /**\n * Creates a new Server instance configured with all handlers for HTTP sessions.\n * Each HTTP client connection gets its own Server instance to avoid routing conflicts.\n */\n private createServerInstance(): Server {\n const capabilities: ServerCapabilities = {\n tools: {},\n logging: { enabled: true },\n elicitation: {},\n };\n\n if (this.resourceOptions) {\n capabilities.resources = { subscribe: true, listChanged: true };\n }\n\n if (this.promptOptions) {\n capabilities.prompts = { listChanged: true };\n }\n\n const serverInstance = new Server({ name: this.name, version: this.version }, { capabilities });\n\n // Register all handlers on the new server instance\n this.registerHandlersOnServer(serverInstance);\n\n return serverInstance;\n }\n\n /**\n * Registers all MCP handlers on a given server instance.\n * This allows us to create multiple server instances with identical functionality.\n */\n private registerHandlersOnServer(serverInstance: Server) {\n // List tools handler\n serverInstance.setRequestHandler(ListToolsRequestSchema, async () => {\n this.logger.debug('Handling ListTools request');\n return {\n tools: Object.values(this.convertedTools).map(tool => {\n const toolSpec: any = {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.parameters.jsonSchema,\n };\n if (tool.outputSchema) {\n toolSpec.outputSchema = tool.outputSchema.jsonSchema;\n }\n return toolSpec;\n }),\n };\n });\n\n // Call tool handler\n serverInstance.setRequestHandler(CallToolRequestSchema, async (request, extra) => {\n const startTime = Date.now();\n try {\n const tool = this.convertedTools[request.params.name] as MCPTool;\n if (!tool) {\n this.logger.warn(`CallTool: Unknown tool '${request.params.name}' requested.`);\n return {\n content: [{ type: 'text', text: `Unknown tool: ${request.params.name}` }],\n isError: true,\n };\n }\n\n const validation = tool.parameters.validate?.(request.params.arguments ?? {});\n if (validation && !validation.success) {\n this.logger.warn(`CallTool: Invalid tool arguments for '${request.params.name}'`, {\n errors: validation.error,\n });\n\n // Format validation errors for agent understanding\n let errorMessages = 'Validation failed';\n if ('errors' in validation.error && Array.isArray(validation.error.errors)) {\n errorMessages = validation.error.errors\n .map((e: any) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n } else if (validation.error instanceof Error) {\n errorMessages = validation.error.message;\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `Tool validation failed. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(request.params.arguments, null, 2)}`,\n },\n ],\n isError: true, // Set to true so the LLM sees the error and can self-correct\n };\n }\n if (!tool.execute) {\n this.logger.warn(`CallTool: Tool '${request.params.name}' does not have an execute function.`);\n return {\n content: [{ type: 'text', text: `Tool '${request.params.name}' does not have an execute function.` }],\n isError: true,\n };\n }\n\n // Create session-aware elicitation for this tool execution\n const sessionElicitation = {\n sendRequest: async (request: ElicitRequest['params']) => {\n return this.handleElicitationRequest(request, serverInstance);\n },\n };\n\n const result = await tool.execute(validation?.value ?? request.params.arguments ?? {}, {\n messages: [],\n toolCallId: '',\n elicitation: sessionElicitation,\n extra,\n });\n\n this.logger.debug(`CallTool: Tool '${request.params.name}' executed successfully with result:`, result);\n const duration = Date.now() - startTime;\n this.logger.info(`Tool '${request.params.name}' executed successfully in ${duration}ms.`);\n\n const response: CallToolResult = { isError: false, content: [] };\n\n if (tool.outputSchema) {\n // Handle both cases: tools that return { structuredContent: ... } and tools that return the plain object\n let structuredContent;\n if (result && typeof result === 'object' && 'structuredContent' in result) {\n // Tool returned { structuredContent: ... } format (MCP-aware tool)\n structuredContent = result.structuredContent;\n } else {\n // Tool returned plain object, wrap it automatically for backward compatibility\n structuredContent = result;\n }\n\n const outputValidation = tool.outputSchema.validate?.(structuredContent ?? {});\n if (outputValidation && !outputValidation.success) {\n this.logger.warn(`CallTool: Invalid structured content for '${request.params.name}'`, {\n errors: outputValidation.error,\n });\n throw new Error(\n `Invalid structured content for tool ${request.params.name}: ${JSON.stringify(outputValidation.error)}`,\n );\n }\n response.structuredContent = structuredContent;\n }\n\n if (response.structuredContent) {\n response.content = [{ type: 'text', text: JSON.stringify(response.structuredContent) }];\n } else {\n response.content = [\n {\n type: 'text',\n text: typeof result === 'string' ? result : JSON.stringify(result),\n },\n ];\n }\n\n return response;\n } catch (error) {\n const duration = Date.now() - startTime;\n if (error instanceof z.ZodError) {\n this.logger.warn('Invalid tool arguments', {\n tool: request.params.name,\n errors: error.errors,\n duration: `${duration}ms`,\n });\n return {\n content: [\n {\n type: 'text',\n text: `Invalid arguments: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n this.logger.error(`Tool execution failed: ${request.params.name}`, { error });\n return {\n content: [{ type: 'text', text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n };\n }\n });\n\n // Set logging level handler\n serverInstance.setRequestHandler(SetLevelRequestSchema, async request => {\n this.currentLoggingLevel = request.params.level;\n this.logger.debug(`Logging level set to: ${request.params.level}`);\n return {};\n });\n\n // Register resource handlers if resources are configured\n if (this.resourceOptions) {\n this.registerResourceHandlersOnServer(serverInstance);\n }\n\n // Register prompt handlers if prompts are configured\n if (this.promptOptions) {\n this.registerPromptHandlersOnServer(serverInstance);\n }\n }\n\n /**\n * Registers resource-related handlers on a server instance.\n */\n private registerResourceHandlersOnServer(serverInstance: Server) {\n const capturedResourceOptions = this.resourceOptions;\n if (!capturedResourceOptions) return;\n\n // List resources handler\n if (capturedResourceOptions.listResources) {\n serverInstance.setRequestHandler(ListResourcesRequestSchema, async (_request, extra) => {\n this.logger.debug('Handling ListResources request');\n if (this.definedResources) {\n return { resources: this.definedResources };\n } else {\n try {\n const resources = await capturedResourceOptions.listResources!({ extra });\n this.definedResources = resources;\n this.logger.debug(`Fetched and cached ${this.definedResources.length} resources.`);\n return { resources: this.definedResources };\n } catch (error) {\n this.logger.error('Error fetching resources via listResources():', { error });\n throw error;\n }\n }\n });\n }\n\n // Read resource handler\n if (capturedResourceOptions.getResourceContent) {\n serverInstance.setRequestHandler(ReadResourceRequestSchema, async (request, extra) => {\n const startTime = Date.now();\n const uri = request.params.uri;\n this.logger.debug(`Handling ReadResource request for URI: ${uri}`);\n\n if (!this.definedResources) {\n const resources = await this.resourceOptions?.listResources?.({ extra });\n if (!resources) throw new Error('Failed to load resources');\n this.definedResources = resources;\n }\n\n const resource = this.definedResources?.find(r => r.uri === uri);\n\n if (!resource) {\n this.logger.warn(`ReadResource: Unknown resource URI '${uri}' requested.`);\n throw new Error(`Resource not found: ${uri}`);\n }\n\n try {\n const resourcesOrResourceContent = await capturedResourceOptions.getResourceContent({ uri, extra });\n const resourcesContent = Array.isArray(resourcesOrResourceContent)\n ? resourcesOrResourceContent\n : [resourcesOrResourceContent];\n const contents: ResourceContents[] = resourcesContent.map(resourceContent => {\n const contentItem: ResourceContents = {\n uri: resource.uri,\n mimeType: resource.mimeType,\n };\n if ('text' in resourceContent) {\n contentItem.text = resourceContent.text;\n }\n\n if ('blob' in resourceContent) {\n contentItem.blob = resourceContent.blob;\n }\n\n return contentItem;\n });\n const duration = Date.now() - startTime;\n this.logger.info(`Resource '${uri}' read successfully in ${duration}ms.`);\n return {\n contents,\n };\n } catch (error) {\n const duration = Date.now() - startTime;\n this.logger.error(`Failed to get content for resource URI '${uri}' in ${duration}ms`, { error });\n throw error;\n }\n });\n }\n\n // Resource templates handler\n if (capturedResourceOptions.resourceTemplates) {\n serverInstance.setRequestHandler(ListResourceTemplatesRequestSchema, async (_request, extra) => {\n this.logger.debug('Handling ListResourceTemplates request');\n if (this.definedResourceTemplates) {\n return { resourceTemplates: this.definedResourceTemplates };\n } else {\n try {\n const templates = await capturedResourceOptions.resourceTemplates!({ extra });\n this.definedResourceTemplates = templates;\n this.logger.debug(`Fetched and cached ${this.definedResourceTemplates.length} resource templates.`);\n return { resourceTemplates: this.definedResourceTemplates };\n } catch (error) {\n this.logger.error('Error fetching resource templates via resourceTemplates():', { error });\n throw error;\n }\n }\n });\n }\n\n // Subscribe/unsubscribe handlers\n serverInstance.setRequestHandler(SubscribeRequestSchema, async (request: { params: { uri: string } }) => {\n const uri = request.params.uri;\n this.logger.info(`Received resources/subscribe request for URI: ${uri}`);\n this.subscriptions.add(uri);\n return {};\n });\n\n serverInstance.setRequestHandler(UnsubscribeRequestSchema, async (request: { params: { uri: string } }) => {\n const uri = request.params.uri;\n this.logger.info(`Received resources/unsubscribe request for URI: ${uri}`);\n this.subscriptions.delete(uri);\n return {};\n });\n }\n\n /**\n * Registers prompt-related handlers on a server instance.\n */\n private registerPromptHandlersOnServer(serverInstance: Server) {\n const capturedPromptOptions = this.promptOptions;\n if (!capturedPromptOptions) return;\n\n // List prompts handler\n if (capturedPromptOptions.listPrompts) {\n serverInstance.setRequestHandler(ListPromptsRequestSchema, async (_request, extra) => {\n this.logger.debug('Handling ListPrompts request');\n if (this.definedPrompts) {\n return {\n prompts: this.definedPrompts?.map(p => ({ ...p, version: p.version ?? undefined })),\n };\n } else {\n try {\n const prompts = await capturedPromptOptions.listPrompts({ extra });\n for (const prompt of prompts) {\n PromptSchema.parse(prompt);\n }\n this.definedPrompts = prompts;\n this.logger.debug(`Fetched and cached ${this.definedPrompts.length} prompts.`);\n return {\n prompts: this.definedPrompts?.map(p => ({ ...p, version: p.version ?? undefined })),\n };\n } catch (error) {\n this.logger.error('Error fetching prompts via listPrompts():', {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n }\n });\n }\n\n // Get prompt handler\n if (capturedPromptOptions.getPromptMessages) {\n serverInstance.setRequestHandler(\n GetPromptRequestSchema,\n async (request: { params: { name: string; version?: string; arguments?: any } }, extra) => {\n const startTime = Date.now();\n const { name, version, arguments: args } = request.params;\n if (!this.definedPrompts) {\n const prompts = await this.promptOptions?.listPrompts?.({ extra });\n if (!prompts) throw new Error('Failed to load prompts');\n this.definedPrompts = prompts;\n }\n // Select prompt by name and version (if provided)\n let prompt;\n if (version) {\n prompt = this.definedPrompts?.find(p => p.name === name && p.version === version);\n } else {\n // Select the first matching name if no version is provided.\n prompt = this.definedPrompts?.find(p => p.name === name);\n }\n if (!prompt) throw new Error(`Prompt \"${name}\"${version ? ` (version ${version})` : ''} not found`);\n // Validate required arguments\n if (prompt.arguments) {\n for (const arg of prompt.arguments) {\n if (arg.required && (args?.[arg.name] === undefined || args?.[arg.name] === null)) {\n throw new Error(`Missing required argument: ${arg.name}`);\n }\n }\n }\n try {\n let messages: any[] = [];\n if (capturedPromptOptions.getPromptMessages) {\n messages = await capturedPromptOptions.getPromptMessages({ name, version, args, extra });\n }\n const duration = Date.now() - startTime;\n this.logger.info(\n `Prompt '${name}'${version ? ` (version ${version})` : ''} retrieved successfully in ${duration}ms.`,\n );\n return { prompt, messages };\n } catch (error) {\n const duration = Date.now() - startTime;\n this.logger.error(`Failed to get content for prompt '${name}' in ${duration}ms`, { error });\n throw error;\n }\n },\n );\n }\n }\n\n private convertAgentsToTools(\n agentsConfig?: Record<string, Agent>,\n definedConvertedTools?: Record<string, ConvertedTool>,\n ): Record<string, ConvertedTool> {\n const agentTools: Record<string, ConvertedTool> = {};\n if (!agentsConfig) {\n return agentTools;\n }\n\n for (const agentKey in agentsConfig) {\n const agent = agentsConfig[agentKey];\n if (!agent || !('generate' in agent)) {\n this.logger.warn(`Agent instance for '${agentKey}' is invalid or missing a generate function. Skipping.`);\n continue;\n }\n\n const agentDescription = agent.getDescription();\n\n if (!agentDescription) {\n throw new Error(\n `Agent '${agent.name}' (key: '${agentKey}') must have a non-empty description to be used in an MCPServer.`,\n );\n }\n\n const agentToolName = `ask_${agentKey}`;\n if (definedConvertedTools?.[agentToolName] || agentTools[agentToolName]) {\n this.logger.warn(\n `Tool with name '${agentToolName}' already exists. Agent '${agentKey}' will not be added as a duplicate tool.`,\n );\n continue;\n }\n\n const agentToolDefinition = createTool({\n id: agentToolName,\n description: `Ask agent '${agent.name}' a question. Agent description: ${agentDescription}`,\n inputSchema: z.object({\n message: z.string().describe('The question or input for the agent.'),\n }),\n execute: async ({ context, runtimeContext, tracingContext }) => {\n this.logger.debug(\n `Executing agent tool '${agentToolName}' for agent '${agent.name}' with message: \"${context.message}\"`,\n );\n try {\n const response = await agent.generate(context.message, { runtimeContext, tracingContext });\n return response;\n } catch (error) {\n this.logger.error(`Error executing agent tool '${agentToolName}' for agent '${agent.name}':`, error);\n throw error;\n }\n },\n });\n\n const options = {\n name: agentToolName,\n logger: this.logger,\n mastra: this.mastra,\n runtimeContext: new RuntimeContext(),\n tracingContext: {},\n description: agentToolDefinition.description,\n };\n const coreTool = makeCoreTool(agentToolDefinition, options) as InternalCoreTool;\n\n agentTools[agentToolName] = {\n name: agentToolName,\n description: coreTool.description,\n parameters: coreTool.parameters,\n execute: coreTool.execute!,\n toolType: 'agent',\n };\n this.logger.info(`Registered agent '${agent.name}' (key: '${agentKey}') as tool: '${agentToolName}'`);\n }\n return agentTools;\n }\n\n private convertWorkflowsToTools(\n workflowsConfig?: Record<string, Workflow>,\n definedConvertedTools?: Record<string, ConvertedTool>,\n ): Record<string, ConvertedTool> {\n const workflowTools: Record<string, ConvertedTool> = {};\n if (!workflowsConfig) {\n return workflowTools;\n }\n\n for (const workflowKey in workflowsConfig) {\n const workflow = workflowsConfig[workflowKey];\n if (!workflow || typeof workflow.createRun !== 'function') {\n this.logger.warn(\n `Workflow instance for '${workflowKey}' is invalid or missing a createRun function. Skipping.`,\n );\n continue;\n }\n\n const workflowDescription = workflow.description;\n if (!workflowDescription) {\n throw new Error(\n `Workflow '${workflow.id}' (key: '${workflowKey}') must have a non-empty description to be used in an MCPServer.`,\n );\n }\n\n const workflowToolName = `run_${workflowKey}`;\n if (definedConvertedTools?.[workflowToolName] || workflowTools[workflowToolName]) {\n this.logger.warn(\n `Tool with name '${workflowToolName}' already exists. Workflow '${workflowKey}' will not be added as a duplicate tool.`,\n );\n continue;\n }\n\n const workflowToolDefinition = createTool({\n id: workflowToolName,\n description: `Run workflow '${workflowKey}'. Workflow description: ${workflowDescription}`,\n inputSchema: workflow.inputSchema,\n execute: async ({ context, runtimeContext, tracingContext }) => {\n this.logger.debug(\n `Executing workflow tool '${workflowToolName}' for workflow '${workflow.id}' with input:`,\n context,\n );\n try {\n const run = await workflow.createRunAsync({ runId: runtimeContext?.get('runId') });\n\n const response = await run.start({ inputData: context, runtimeContext, tracingContext });\n\n return response;\n } catch (error) {\n this.logger.error(\n `Error executing workflow tool '${workflowToolName}' for workflow '${workflow.id}':`,\n error,\n );\n throw error;\n }\n },\n });\n\n const options = {\n name: workflowToolName,\n logger: this.logger,\n mastra: this.mastra,\n runtimeContext: new RuntimeContext(),\n tracingContext: {},\n description: workflowToolDefinition.description,\n };\n\n const coreTool = makeCoreTool(workflowToolDefinition, options) as InternalCoreTool;\n\n workflowTools[workflowToolName] = {\n name: workflowToolName,\n description: coreTool.description,\n parameters: coreTool.parameters,\n outputSchema: coreTool.outputSchema,\n execute: coreTool.execute!,\n toolType: 'workflow',\n };\n this.logger.info(`Registered workflow '${workflow.id}' (key: '${workflowKey}') as tool: '${workflowToolName}'`);\n }\n return workflowTools;\n }\n\n /**\n * Convert and validate all provided tools, logging registration status.\n * Also converts agents and workflows into tools.\n * @param tools Tool definitions\n * @param agentsConfig Agent definitions to be converted to tools, expected from MCPServerConfig\n * @param workflowsConfig Workflow definitions to be converted to tools, expected from MCPServerConfig\n * @returns Converted tools registry\n */\n convertTools(\n tools: ToolsInput,\n agentsConfig?: Record<string, Agent>,\n workflowsConfig?: Record<string, Workflow>,\n ): Record<string, ConvertedTool> {\n const definedConvertedTools: Record<string, ConvertedTool> = {};\n\n for (const toolName of Object.keys(tools)) {\n const toolInstance = tools[toolName];\n if (!toolInstance) {\n this.logger.warn(`Tool instance for '${toolName}' is undefined. Skipping.`);\n continue;\n }\n\n if (typeof toolInstance.execute !== 'function') {\n this.logger.warn(`Tool '${toolName}' does not have a valid execute function. Skipping.`);\n continue;\n }\n\n const options = {\n name: toolName,\n runtimeContext: new RuntimeContext(),\n tracingContext: {},\n mastra: this.mastra,\n logger: this.logger,\n description: toolInstance?.description,\n };\n\n const coreTool = makeCoreTool(toolInstance, options) as InternalCoreTool;\n\n definedConvertedTools[toolName] = {\n name: toolName,\n description: coreTool.description,\n parameters: coreTool.parameters,\n outputSchema: coreTool.outputSchema,\n execute: coreTool.execute!,\n };\n this.logger.info(`Registered explicit tool: '${toolName}'`);\n }\n this.logger.info(`Total defined tools registered: ${Object.keys(definedConvertedTools).length}`);\n\n let agentDerivedTools: Record<string, ConvertedTool> = {};\n let workflowDerivedTools: Record<string, ConvertedTool> = {};\n try {\n agentDerivedTools = this.convertAgentsToTools(agentsConfig, definedConvertedTools);\n workflowDerivedTools = this.convertWorkflowsToTools(workflowsConfig, definedConvertedTools);\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_AGENT_OR_WORKFLOW_TOOL_CONVERSION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to convert tools:', {\n error: mastraError.toString(),\n });\n throw mastraError;\n }\n\n const allConvertedTools = { ...definedConvertedTools, ...agentDerivedTools, ...workflowDerivedTools };\n\n const finalToolCount = Object.keys(allConvertedTools).length;\n const definedCount = Object.keys(definedConvertedTools).length;\n const fromAgentsCount = Object.keys(agentDerivedTools).length;\n const fromWorkflowsCount = Object.keys(workflowDerivedTools).length;\n this.logger.info(\n `${finalToolCount} total tools registered (${definedCount} defined + ${fromAgentsCount} agents + ${fromWorkflowsCount} workflows)`,\n );\n\n return allConvertedTools;\n }\n\n /**\n * Start the MCP server using stdio transport (for Windsurf integration).\n */\n public async startStdio(): Promise<void> {\n this.stdioTransport = new StdioServerTransport();\n try {\n await this.server.connect(this.stdioTransport);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_STDIO_CONNECTION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to connect MCP server using stdio transport:', {\n error: mastraError.toString(),\n });\n throw mastraError;\n }\n this.logger.info('Started MCP Server (stdio)');\n }\n\n /**\n * Handles MCP-over-SSE protocol for user-provided HTTP servers.\n * Call this from your HTTP server for both the SSE and message endpoints.\n *\n * @param url Parsed URL of the incoming request\n * @param ssePath Path for establishing the SSE connection (e.g. '/sse')\n * @param messagePath Path for POSTing client messages (e.g. '/message')\n * @param req Incoming HTTP request\n * @param res HTTP response (must support .write/.end)\n */\n public async startSSE({ url, ssePath, messagePath, req, res }: MCPServerSSEOptions): Promise<void> {\n try {\n if (url.pathname === ssePath) {\n await this.connectSSE({\n messagePath,\n res,\n });\n } else if (url.pathname === messagePath) {\n this.logger.debug('Received message');\n if (!this.sseTransport) {\n res.writeHead(503);\n res.end('SSE connection not established');\n return;\n }\n await this.sseTransport.handlePostMessage(req, res);\n } else {\n this.logger.debug('Unknown path:', { path: url.pathname });\n res.writeHead(404);\n res.end();\n }\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_SSE_START_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n url: url.toString(),\n ssePath,\n messagePath,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to start MCP Server (SSE):', { error: mastraError.toString() });\n throw mastraError;\n }\n }\n\n /**\n * Handles MCP-over-SSE protocol for user-provided HTTP servers.\n * Call this from your HTTP server for both the SSE and message endpoints.\n *\n * @param url Parsed URL of the incoming request\n * @param ssePath Path for establishing the SSE connection (e.g. '/sse')\n * @param messagePath Path for POSTing client messages (e.g. '/message')\n * @param context Incoming Hono context\n */\n public async startHonoSSE({ url, ssePath, messagePath, context }: MCPServerHonoSSEOptions) {\n try {\n if (url.pathname === ssePath) {\n return streamSSE(context, async stream => {\n await this.connectHonoSSE({\n messagePath,\n stream,\n });\n });\n } else if (url.pathname === messagePath) {\n this.logger.debug('Received message');\n const sessionId = context.req.query('sessionId');\n this.logger.debug('Received message for sessionId', { sessionId });\n if (!sessionId) {\n return context.text('No sessionId provided', 400);\n }\n if (!this.sseHonoTransports.has(sessionId)) {\n return context.text(`No transport found for sessionId ${sessionId}`, 400);\n }\n const message = await this.sseHonoTransports.get(sessionId)?.handlePostMessage(context);\n if (!message) {\n return context.text('Transport not found', 400);\n }\n return message;\n } else {\n this.logger.debug('Unknown path:', { path: url.pathname });\n return context.text('Unknown path', 404);\n }\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_HONO_SSE_START_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n url: url.toString(),\n ssePath,\n messagePath,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to start MCP Server (Hono SSE):', { error: mastraError.toString() });\n throw mastraError;\n }\n }\n\n /**\n * Handles MCP-over-StreamableHTTP protocol for user-provided HTTP servers.\n * Call this from your HTTP server for the streamable HTTP endpoint.\n *\n * @param url Parsed URL of the incoming request\n * @param httpPath Path for establishing the streamable HTTP connection (e.g. '/mcp')\n * @param req Incoming HTTP request\n * @param res HTTP response (must support .write/.end)\n * @param options Optional options to pass to the transport (e.g. sessionIdGenerator)\n */\n public async startHTTP({\n url,\n httpPath,\n req,\n res,\n options = { sessionIdGenerator: () => randomUUID() },\n }: {\n url: URL;\n httpPath: string;\n req: http.IncomingMessage;\n res: http.ServerResponse<http.IncomingMessage>;\n options?: StreamableHTTPServerTransportOptions;\n }) {\n this.logger.debug(`startHTTP: Received ${req.method} request to ${url.pathname}`);\n\n if (url.pathname !== httpPath) {\n this.logger.debug(`startHTTP: Pathname ${url.pathname} does not match httpPath ${httpPath}. Returning 404.`);\n res.writeHead(404);\n res.end();\n return;\n }\n\n const sessionId = req.headers['mcp-session-id'] as string | undefined;\n let transport: StreamableHTTPServerTransport | undefined;\n\n this.logger.debug(\n `startHTTP: Session ID from headers: ${sessionId}. Active transports: ${Array.from(this.streamableHTTPTransports.keys()).join(', ')}`,\n );\n\n try {\n if (sessionId && this.streamableHTTPTransports.has(sessionId)) {\n // Found existing session\n transport = this.streamableHTTPTransports.get(sessionId)!;\n this.logger.debug(`startHTTP: Using existing Streamable HTTP transport for session ID: ${sessionId}`);\n\n if (req.method === 'GET') {\n this.logger.debug(\n `startHTTP: Handling GET request for existing session ${sessionId}. Calling transport.handleRequest.`,\n );\n }\n\n // Handle the request using the existing transport\n // Need to parse body for POST requests before passing to handleRequest\n const body =\n req.method === 'POST'\n ? await new Promise((resolve, reject) => {\n let data = '';\n req.on('data', chunk => (data += chunk));\n req.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n req.on('error', reject);\n })\n : undefined;\n\n await transport.handleRequest(req, res, body);\n } else {\n // No session ID or session ID not found\n this.logger.debug(`startHTTP: No existing Streamable HTTP session ID found. ${req.method}`);\n\n // Only allow new sessions via POST initialize request\n if (req.method === 'POST') {\n const body = await new Promise((resolve, reject) => {\n let data = '';\n req.on('data', chunk => (data += chunk));\n req.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n req.on('error', reject);\n });\n\n // Import isInitializeRequest from the correct path\n const { isInitializeRequest } = await import('@modelcontextprotocol/sdk/types.js');\n\n if (isInitializeRequest(body)) {\n this.logger.debug('startHTTP: Received Streamable HTTP initialize request, creating new transport.');\n\n // Create a new transport for the new session\n transport = new StreamableHTTPServerTransport({\n ...options,\n sessionIdGenerator: () => randomUUID(),\n onsessioninitialized: id => {\n this.streamableHTTPTransports.set(id, transport!);\n },\n });\n\n // Set up onclose handler to clean up transport when closed\n transport.onclose = () => {\n const closedSessionId = transport?.sessionId;\n if (closedSessionId && this.streamableHTTPTransports.has(closedSessionId)) {\n this.logger.debug(\n `startHTTP: Streamable HTTP transport closed for session ${closedSessionId}, removing from map.`,\n );\n this.streamableHTTPTransports.delete(closedSessionId);\n // Also clean up the server instance for this session\n if (this.httpServerInstances.has(closedSessionId)) {\n this.httpServerInstances.delete(closedSessionId);\n this.logger.debug(`startHTTP: Cleaned up server instance for closed session ${closedSessionId}`);\n }\n }\n };\n\n // Create a new server instance for this HTTP session\n const sessionServerInstance = this.createServerInstance();\n\n // Connect the new server instance to the new transport\n await sessionServerInstance.connect(transport);\n\n // Store both the transport and server instance when the session is initialized\n if (transport.sessionId) {\n this.streamableHTTPTransports.set(transport.sessionId, transport);\n this.httpServerInstances.set(transport.sessionId, sessionServerInstance);\n this.logger.debug(\n `startHTTP: Streamable HTTP session initialized and stored with ID: ${transport.sessionId}`,\n );\n } else {\n this.logger.warn('startHTTP: Streamable HTTP transport initialized without a session ID.');\n }\n\n // Handle the initialize request\n return await transport.handleRequest(req, res, body);\n } else {\n // POST request but not initialize, and no session ID\n this.logger.warn('startHTTP: Received non-initialize POST request without a session ID.');\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: {\n code: -32000,\n message: 'Bad Request: No valid session ID provided for non-initialize request',\n },\n id: (body as any)?.id ?? null, // Include original request ID if available\n }),\n );\n }\n } else {\n // Non-POST request (GET/DELETE) without a session ID\n this.logger.warn(`startHTTP: Received ${req.method} request without a session ID.`);\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: {\n code: -32000,\n message: `Bad Request: ${req.method} request requires a valid session ID`,\n },\n id: null,\n }),\n );\n }\n }\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_HTTP_CONNECTION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n text: 'Failed to connect MCP server using HTTP transport',\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('startHTTP: Error handling Streamable HTTP request:', { error: mastraError });\n // If headers haven't been sent, send an error response\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: {\n code: -32603,\n message: 'Internal server error',\n },\n id: null, // Cannot determine original request ID in catch\n }),\n );\n }\n }\n }\n\n public async connectSSE({\n messagePath,\n res,\n }: {\n messagePath: string;\n res: http.ServerResponse<http.IncomingMessage>;\n }) {\n try {\n this.logger.debug('Received SSE connection');\n this.sseTransport = new SSEServerTransport(messagePath, res);\n await this.server.connect(this.sseTransport);\n\n this.server.onclose = async () => {\n this.sseTransport = undefined;\n await this.server.close();\n };\n\n res.on('close', () => {\n this.sseTransport = undefined;\n });\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_SSE_CONNECT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n messagePath,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to connect to MCP Server (SSE):', { error: mastraError });\n throw mastraError;\n }\n }\n\n public async connectHonoSSE({ messagePath, stream }: { messagePath: string; stream: SSEStreamingApi }) {\n this.logger.debug('Received SSE connection');\n const sseTransport = new SSETransport(messagePath, stream);\n const sessionId = sseTransport.sessionId;\n this.logger.debug('SSE Transport created with sessionId:', { sessionId });\n this.sseHonoTransports.set(sessionId, sseTransport);\n\n stream.onAbort(() => {\n this.logger.debug('SSE Transport aborted with sessionId:', { sessionId });\n this.sseHonoTransports.delete(sessionId);\n });\n try {\n await this.server.connect(sseTransport);\n this.server.onclose = async () => {\n this.logger.debug('SSE Transport closed with sessionId:', { sessionId });\n this.sseHonoTransports.delete(sessionId);\n await this.server.close();\n };\n\n while (true) {\n // This will keep the connection alive\n // You can also await for a promise that never resolves\n await stream.sleep(60_000);\n const sessionIds = Array.from(this.sseHonoTransports.keys() || []);\n this.logger.debug('Active Hono SSE sessions:', { sessionIds });\n await stream.write(':keep-alive\\n\\n');\n }\n } catch (e) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_HONO_SSE_CONNECT_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n messagePath,\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Failed to connect to MCP Server (Hono SSE):', { error: mastraError });\n throw mastraError;\n }\n }\n\n /**\n * Close the MCP server and all its connections\n */\n async close() {\n try {\n if (this.stdioTransport) {\n await this.stdioTransport.close?.();\n this.stdioTransport = undefined;\n }\n if (this.sseTransport) {\n await this.sseTransport.close?.();\n this.sseTransport = undefined;\n }\n if (this.sseHonoTransports) {\n for (const transport of this.sseHonoTransports.values()) {\n await transport.close?.();\n }\n this.sseHonoTransports.clear();\n }\n // Close all active Streamable HTTP transports and their server instances\n if (this.streamableHTTPTransports) {\n for (const transport of this.streamableHTTPTransports.values()) {\n await transport.close?.();\n }\n this.streamableHTTPTransports.clear();\n }\n // Close all HTTP server instances\n if (this.httpServerInstances) {\n for (const serverInstance of this.httpServerInstances.values()) {\n await serverInstance.close?.();\n }\n this.httpServerInstances.clear();\n }\n await this.server.close();\n this.logger.info('MCP server closed.');\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_CLOSE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error('Error closing MCP server:', { error: mastraError });\n throw mastraError;\n }\n }\n\n /**\n * Gets the basic information about the server, conforming to the Server schema.\n * @returns ServerInfo object.\n */\n public getServerInfo(): ServerInfo {\n return {\n id: this.id,\n name: this.name,\n description: this.description,\n repository: this.repository,\n version_detail: {\n version: this.version,\n release_date: this.releaseDate,\n is_latest: this.isLatest,\n },\n };\n }\n\n /**\n * Gets detailed information about the server, conforming to the ServerDetail schema.\n * @returns ServerDetailInfo object.\n */\n public getServerDetail(): ServerDetailInfo {\n return {\n ...this.getServerInfo(),\n package_canonical: this.packageCanonical,\n packages: this.packages,\n remotes: this.remotes,\n };\n }\n\n /**\n * Gets a list of tools provided by this MCP server, including their schemas.\n * This leverages the same tool information used by the internal ListTools MCP request.\n * @returns An object containing an array of tool information.\n */\n public getToolListInfo(): {\n tools: Array<{ name: string; description?: string; inputSchema: any; outputSchema?: any; toolType?: MCPToolType }>;\n } {\n this.logger.debug(`Getting tool list information for MCPServer '${this.name}'`);\n return {\n tools: Object.entries(this.convertedTools).map(([toolId, tool]) => ({\n id: toolId,\n name: tool.name,\n description: tool.description,\n inputSchema: tool.parameters?.jsonSchema || tool.parameters,\n outputSchema: tool.outputSchema?.jsonSchema || tool.outputSchema,\n toolType: tool.toolType,\n })),\n };\n }\n\n /**\n * Gets information for a specific tool provided by this MCP server.\n * @param toolId The ID/name of the tool to retrieve.\n * @returns Tool information (name, description, inputSchema) or undefined if not found.\n */\n public getToolInfo(\n toolId: string,\n ): { name: string; description?: string; inputSchema: any; outputSchema?: any; toolType?: MCPToolType } | undefined {\n const tool = this.convertedTools[toolId];\n if (!tool) {\n this.logger.debug(`Tool '${toolId}' not found on MCPServer '${this.name}'`);\n return undefined;\n }\n this.logger.debug(`Getting info for tool '${toolId}' on MCPServer '${this.name}'`);\n return {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.parameters?.jsonSchema || tool.parameters,\n outputSchema: tool.outputSchema?.jsonSchema || tool.outputSchema,\n toolType: tool.toolType,\n };\n }\n\n /**\n * Executes a specific tool provided by this MCP server.\n * @param toolId The ID/name of the tool to execute.\n * @param args The arguments to pass to the tool's execute function.\n * @param executionContext Optional context for the tool execution.\n * @returns A promise that resolves to the result of the tool execution.\n * @throws Error if the tool is not found, validation fails, or execution fails.\n */\n public async executeTool(\n toolId: string,\n args: any,\n executionContext?: { messages?: any[]; toolCallId?: string },\n ): Promise<any> {\n const tool = this.convertedTools[toolId];\n let validatedArgs = args;\n try {\n if (!tool) {\n this.logger.warn(`ExecuteTool: Unknown tool '${toolId}' requested on MCPServer '${this.name}'.`);\n throw new Error(`Unknown tool: ${toolId}`);\n }\n\n this.logger.debug(`ExecuteTool: Invoking '${toolId}' with arguments:`, args);\n\n if (tool.parameters instanceof z.ZodType && typeof tool.parameters.safeParse === 'function') {\n const validation = tool.parameters.safeParse(args ?? {});\n if (!validation.success) {\n const errorMessages = validation.error.errors\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n this.logger.warn(`ExecuteTool: Invalid tool arguments for '${toolId}': ${errorMessages}`, {\n errors: validation.error.format(),\n });\n // Return validation error as a result instead of throwing\n return {\n error: true,\n message: `Tool validation failed. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(args, null, 2)}`,\n validationErrors: validation.error.format(),\n };\n }\n validatedArgs = validation.data;\n } else {\n this.logger.debug(\n `ExecuteTool: Tool '${toolId}' parameters is not a Zod schema with safeParse or is undefined. Skipping validation.`,\n );\n }\n\n if (!tool.execute) {\n this.logger.error(`ExecuteTool: Tool '${toolId}' does not have an execute function.`);\n throw new Error(`Tool '${toolId}' cannot be executed.`);\n }\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_TOOL_EXECUTE_PREPARATION_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n toolId,\n args,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n throw mastraError;\n }\n\n try {\n const finalExecutionContext = {\n messages: executionContext?.messages || [],\n toolCallId: executionContext?.toolCallId || randomUUID(),\n };\n const result = await tool.execute(validatedArgs, finalExecutionContext);\n this.logger.info(`ExecuteTool: Tool '${toolId}' executed successfully.`);\n return result;\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MCP_SERVER_TOOL_EXECUTE_FAILED',\n domain: ErrorDomain.MCP,\n category: ErrorCategory.USER,\n details: {\n toolId,\n validatedArgs: validatedArgs,\n },\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(`ExecuteTool: Tool execution failed for '${toolId}':`, { error });\n throw mastraError;\n }\n }\n}\n"]}
|