mindcache 2.0.0-alpha.1 → 2.2.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/dist/cloud/index.d.mts +2 -2
- package/dist/cloud/index.d.ts +2 -2
- package/dist/cloud/index.js +510 -61
- package/dist/cloud/index.js.map +1 -1
- package/dist/cloud/index.mjs +510 -61
- package/dist/cloud/index.mjs.map +1 -1
- package/dist/{index-CFJtj3DL.d.mts → index-XM7bmK7C.d.mts} +105 -13
- package/dist/{index-CFJtj3DL.d.ts → index-XM7bmK7C.d.ts} +105 -13
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +510 -61
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +510 -61
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cloud/CloudAdapter.ts","../src/core/types.ts","../src/core/MindCache.ts","../src/cloud/index.ts"],"names":["CloudAdapter","baseUrl","z"],"mappings":"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","file":"index.js","sourcesContent":["import type { MindCache } from '../core/MindCache';\nimport type { KeyAttributes } from '../core/types';\nimport type {\n CloudConfig,\n Operation,\n IncomingMessage,\n ConnectionState,\n CloudAdapterEvents\n} from './types';\n\nconst DEFAULT_BASE_URL = 'wss://api.mindcache.io';\nconst RECONNECT_DELAY = 1000;\nconst MAX_RECONNECT_DELAY = 30000;\n\n/**\n * CloudAdapter connects a MindCache instance to the cloud service\n * for real-time sync and persistence.\n *\n * Auth modes:\n * 1. Token (recommended): Pass a short-lived token from /api/ws-token\n * 2. API Key (server-to-server): Pass apiKey for direct connections\n */\nexport class CloudAdapter {\n private ws: WebSocket | null = null;\n private queue: Operation[] = [];\n private mindcache: MindCache | null = null;\n private unsubscribe: (() => void) | null = null;\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private _state: ConnectionState = 'disconnected';\n private listeners: Partial<{ [K in keyof CloudAdapterEvents]: CloudAdapterEvents[K][] }> = {};\n private token: string | null = null;\n\n constructor(private config: CloudConfig) {\n this.config.baseUrl = config.baseUrl || DEFAULT_BASE_URL;\n }\n\n /**\n * Set auth token (short-lived, from /api/ws-token)\n * Call this before connect() or use setTokenProvider for auto-refresh\n */\n setToken(token: string): void {\n this.token = token;\n }\n\n /**\n * Set a function that returns a fresh token\n * Used for automatic token refresh on reconnect\n */\n setTokenProvider(provider: () => Promise<string>): void {\n this.config.tokenProvider = provider;\n }\n\n /**\n * Get current connection state\n */\n get state(): ConnectionState {\n return this._state;\n }\n\n /**\n * Attach to a MindCache instance and start syncing\n */\n attach(mc: MindCache): void {\n if (this.mindcache) {\n this.detach();\n }\n\n this.mindcache = mc;\n\n // Subscribe to local changes → push to cloud\n const listener = () => {\n // Skip if this change came from remote\n if (mc.isRemoteUpdate()) {\n console.log('☁️ CloudAdapter: Skipping remote update');\n return;\n }\n\n console.log('☁️ CloudAdapter: Local change detected, syncing...');\n // Get the current state and queue changes\n // In a real implementation, we'd track individual changes\n // For now, we'll sync the entire state on change\n this.syncLocalChanges();\n };\n\n mc.subscribeToAll(listener);\n this.unsubscribe = () => mc.unsubscribeFromAll(listener);\n console.log('☁️ CloudAdapter: Attached to MindCache instance');\n }\n\n /**\n * Detach from the MindCache instance\n */\n detach(): void {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n this.mindcache = null;\n }\n\n /**\n * Connect to the cloud service\n */\n async connect(): Promise<void> {\n if (this._state === 'connecting' || this._state === 'connected') {\n return;\n }\n\n this._state = 'connecting';\n\n try {\n // Get token if we have a provider and no current token\n if (this.config.tokenProvider && !this.token) {\n this.token = await this.config.tokenProvider();\n }\n\n // Build URL with token if available\n let url = `${this.config.baseUrl}/sync/${this.config.instanceId}`;\n if (this.token) {\n url += `?token=${encodeURIComponent(this.token)}`;\n // Token is single-use, clear it after connecting\n this.token = null;\n }\n\n this.ws = new WebSocket(url);\n this.setupWebSocket();\n } catch (error) {\n this._state = 'error';\n this.emit('error', error as Error);\n this.scheduleReconnect();\n }\n }\n\n /**\n * Disconnect from the cloud service\n */\n disconnect(): void {\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n\n this._state = 'disconnected';\n this.emit('disconnected');\n }\n\n /**\n * Push an operation to the cloud\n */\n push(op: Operation): void {\n if (this.ws?.readyState === WebSocket.OPEN) {\n this.ws.send(JSON.stringify(op));\n } else {\n // Queue for when we reconnect\n this.queue.push(op);\n }\n }\n\n /**\n * Add event listener\n */\n on<K extends keyof CloudAdapterEvents>(event: K, listener: CloudAdapterEvents[K]): void {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n this.listeners[event]!.push(listener);\n }\n\n /**\n * Remove event listener\n */\n off<K extends keyof CloudAdapterEvents>(event: K, listener: CloudAdapterEvents[K]): void {\n if (this.listeners[event]) {\n this.listeners[event] = this.listeners[event]!.filter(l => l !== listener) as any;\n }\n }\n\n private emit<K extends keyof CloudAdapterEvents>(event: K, ...args: Parameters<CloudAdapterEvents[K]>): void {\n if (this.listeners[event]) {\n this.listeners[event]!.forEach(listener => (listener as any)(...args));\n }\n }\n\n private setupWebSocket(): void {\n if (!this.ws) {\n return;\n }\n\n this.ws.onopen = () => {\n // If using API key (server-to-server), send auth message\n // If using token, auth was already verified by Worker\n if (this.config.apiKey) {\n this.ws!.send(JSON.stringify({\n type: 'auth',\n apiKey: this.config.apiKey\n }));\n }\n // If using token auth, Worker already authenticated us\n // and will send sync message directly\n };\n\n this.ws.onmessage = (event) => {\n try {\n const msg = JSON.parse(event.data) as IncomingMessage;\n this.handleMessage(msg);\n } catch (error) {\n console.error('MindCache Cloud: Failed to parse message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this._state = 'disconnected';\n this.emit('disconnected');\n this.scheduleReconnect();\n };\n\n this.ws.onerror = (error) => {\n this._state = 'error';\n this.emit('error', new Error('WebSocket error'));\n console.error('MindCache Cloud: WebSocket error:', error);\n };\n }\n\n private handleMessage(msg: IncomingMessage): void {\n switch (msg.type) {\n case 'auth_success':\n this._state = 'connected';\n this.reconnectAttempts = 0;\n this.emit('connected');\n this.flushQueue();\n break;\n\n case 'auth_error':\n this._state = 'error';\n this.emit('error', new Error(msg.error));\n this.disconnect();\n break;\n\n case 'sync':\n // Initial sync - load all data\n if (this.mindcache && msg.data) {\n Object.entries(msg.data).forEach(([key, entry]) => {\n const { value, attributes } = entry as { value: unknown; attributes: KeyAttributes };\n this.mindcache!._setFromRemote(key, value, attributes);\n });\n this.emit('synced');\n }\n break;\n\n case 'set':\n // Remote update (legacy)\n if (this.mindcache) {\n this.mindcache._setFromRemote(msg.key, msg.value, msg.attributes as KeyAttributes);\n }\n break;\n\n case 'key_updated':\n // Server broadcast of key update\n if (this.mindcache) {\n this.mindcache._setFromRemote(msg.key, msg.value, msg.attributes);\n }\n break;\n\n case 'delete':\n // Remote delete (legacy)\n if (this.mindcache) {\n this.mindcache._deleteFromRemote(msg.key);\n }\n break;\n\n case 'key_deleted':\n // Server broadcast of key deletion\n if (this.mindcache) {\n this.mindcache._deleteFromRemote(msg.key);\n }\n break;\n\n case 'clear':\n if (this.mindcache) {\n this.mindcache._clearFromRemote();\n }\n break;\n\n case 'cleared':\n // Server broadcast of clear\n if (this.mindcache) {\n this.mindcache._clearFromRemote();\n }\n break;\n\n case 'error':\n this.emit('error', new Error(msg.error));\n break;\n }\n }\n\n private flushQueue(): void {\n while (this.queue.length > 0 && this.ws?.readyState === WebSocket.OPEN) {\n const op = this.queue.shift()!;\n this.ws.send(JSON.stringify(op));\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimeout) {\n return;\n }\n\n const delay = Math.min(\n RECONNECT_DELAY * Math.pow(2, this.reconnectAttempts),\n MAX_RECONNECT_DELAY\n );\n\n this.reconnectTimeout = setTimeout(async () => {\n this.reconnectTimeout = null;\n this.reconnectAttempts++;\n\n // Get fresh token before reconnecting (if using token auth)\n if (this.config.tokenProvider) {\n try {\n this.token = await this.config.tokenProvider();\n } catch (error) {\n console.error('MindCache Cloud: Failed to get token for reconnect:', error);\n this.emit('error', error as Error);\n return;\n }\n }\n\n this.connect();\n }, delay);\n }\n\n private syncLocalChanges(): void {\n if (!this.mindcache) {\n return;\n }\n\n // Get all current entries and sync them\n const entries = this.mindcache.serialize();\n\n console.log('☁️ CloudAdapter: Syncing local changes:', Object.keys(entries));\n\n Object.entries(entries).forEach(([key, entry]) => {\n console.log('☁️ CloudAdapter: Pushing key:', key, '=', entry.value);\n this.push({\n type: 'set',\n key,\n value: entry.value,\n attributes: entry.attributes,\n timestamp: Date.now()\n });\n });\n }\n}\n\n","/**\n * Attributes that can be set on a MindCache key\n */\nexport interface KeyAttributes {\n /** If true, the key cannot be modified by AI tools */\n readonly: boolean;\n /** If true, the key is included in system prompts */\n visible: boolean;\n /** If true, the key is a system key that cannot be deleted */\n hardcoded: boolean;\n /** If true, the value will be processed through template injection */\n template: boolean;\n /** The type of value stored */\n type: 'text' | 'image' | 'file' | 'json';\n /** MIME type for files/images */\n contentType?: string;\n /** Tags for categorizing keys */\n tags?: string[];\n}\n\n/**\n * A single entry in the MindCache store\n */\nexport interface STMEntry {\n value: unknown;\n attributes: KeyAttributes;\n}\n\n/**\n * The full MindCache state (key-value pairs with attributes)\n */\nexport type STM = {\n [key: string]: STMEntry;\n};\n\n/**\n * A function that is called when a key changes\n */\nexport type Listener = () => void;\n\n/**\n * Default attributes for new keys\n */\nexport const DEFAULT_KEY_ATTRIBUTES: KeyAttributes = {\n readonly: false,\n visible: true,\n hardcoded: false,\n template: false,\n type: 'text',\n tags: []\n};\n\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { z } from 'zod';\nimport type { KeyAttributes, STM, STMEntry, Listener } from './types';\nimport { DEFAULT_KEY_ATTRIBUTES } from './types';\n\n// Browser environment type declarations\ninterface FileReaderType {\n onload: ((this: FileReaderType, ev: any) => any) | null;\n onerror: ((this: FileReaderType, ev: any) => any) | null;\n result: string | ArrayBuffer | null;\n readAsDataURL(file: Blob): void;\n}\n\ndeclare const FileReader: {\n prototype: FileReaderType;\n new(): FileReaderType;\n} | undefined;\n\n/**\n * Cloud configuration options for MindCache constructor\n */\nexport interface MindCacheCloudOptions {\n /** Instance ID to connect to */\n instanceId: string;\n /** Project ID (optional, defaults to 'default') */\n projectId?: string;\n /** API endpoint to fetch WS token (recommended for browser) */\n tokenEndpoint?: string;\n /** Direct API key (server-side only, never expose in browser!) */\n apiKey?: string;\n /** WebSocket base URL (defaults to production) */\n baseUrl?: string;\n}\n\n/**\n * Constructor options for MindCache\n */\nexport interface MindCacheOptions {\n /** Cloud sync configuration. If omitted, runs in local-only mode. */\n cloud?: MindCacheCloudOptions;\n}\n\n// Connection state type\ntype ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'error';\n\n// CloudAdapter interface to avoid circular imports\ninterface ICloudAdapter {\n attach(mc: MindCache): void;\n detach(): void;\n connect(): Promise<void>;\n disconnect(): void;\n setTokenProvider(provider: () => Promise<string>): void;\n on(event: string, listener: (...args: any[]) => void): void;\n state: ConnectionState;\n}\n\nexport class MindCache {\n private stm: STM = {};\n private listeners: { [key: string]: Listener[] } = {};\n private globalListeners: Listener[] = [];\n\n // Internal flag to prevent sync loops when receiving remote updates\n private _isRemoteUpdate = false;\n\n // Cloud sync state\n private _cloudAdapter: ICloudAdapter | null = null;\n private _connectionState: ConnectionState = 'disconnected';\n private _isLoaded = true; // Default true for local mode\n private _cloudConfig: MindCacheCloudOptions | null = null;\n\n constructor(options?: MindCacheOptions) {\n if (options?.cloud) {\n this._cloudConfig = options.cloud;\n this._isLoaded = false; // Wait for sync\n this._connectionState = 'disconnected';\n // Initialize cloud connection asynchronously\n this._initCloud();\n }\n }\n\n private async _initCloud(): Promise<void> {\n if (!this._cloudConfig) {\n return;\n }\n\n try {\n // Dynamic import to avoid circular dependency\n const { CloudAdapter } = await import('../cloud/CloudAdapter');\n\n // Convert HTTP URL to WebSocket URL, default to production\n const configUrl = this._cloudConfig.baseUrl || 'https://api.mindcache.io';\n const baseUrl = configUrl\n .replace('https://', 'wss://')\n .replace('http://', 'ws://');\n\n const adapter = new CloudAdapter({\n instanceId: this._cloudConfig.instanceId,\n projectId: this._cloudConfig.projectId || 'default',\n baseUrl,\n apiKey: this._cloudConfig.apiKey\n });\n\n // Set up token provider if tokenEndpoint is provided\n if (this._cloudConfig.tokenEndpoint) {\n const tokenEndpoint = this._cloudConfig.tokenEndpoint;\n const instanceId = this._cloudConfig.instanceId;\n\n // Resolve relative URL to absolute (needed for reconnect in some contexts)\n const resolveUrl = (endpoint: string): string => {\n if (endpoint.startsWith('http://') || endpoint.startsWith('https://')) {\n return endpoint;\n }\n // In browser, use window.location.origin\n if (typeof window !== 'undefined' && window.location?.origin) {\n return `${window.location.origin}${endpoint.startsWith('/') ? '' : '/'}${endpoint}`;\n }\n // Fallback: return as-is and hope fetch handles it\n return endpoint;\n };\n\n adapter.setTokenProvider(async () => {\n const baseUrl = resolveUrl(tokenEndpoint);\n const url = baseUrl.includes('?')\n ? `${baseUrl}&instanceId=${instanceId}`\n : `${baseUrl}?instanceId=${instanceId}`;\n\n const response = await fetch(url);\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: 'Failed to get token' }));\n throw new Error(error.error || 'Failed to get token');\n }\n\n const data = await response.json();\n return data.token;\n });\n }\n\n // Set up event handlers\n adapter.on('connected', () => {\n this._connectionState = 'connected';\n this.notifyGlobalListeners();\n });\n\n adapter.on('disconnected', () => {\n this._connectionState = 'disconnected';\n this.notifyGlobalListeners();\n });\n\n adapter.on('error', () => {\n this._connectionState = 'error';\n this.notifyGlobalListeners();\n });\n\n adapter.on('synced', () => {\n this._isLoaded = true;\n this.notifyGlobalListeners();\n });\n\n // Attach and connect\n adapter.attach(this);\n this._cloudAdapter = adapter;\n this._connectionState = 'connecting';\n\n adapter.connect();\n } catch (error) {\n console.error('MindCache: Failed to initialize cloud connection:', error);\n this._connectionState = 'error';\n this._isLoaded = true; // Allow usage even if cloud fails\n }\n }\n\n /**\n * Get the current cloud connection state\n */\n get connectionState(): ConnectionState {\n return this._connectionState;\n }\n\n /**\n * Check if data is loaded (true for local, true after sync for cloud)\n */\n get isLoaded(): boolean {\n return this._isLoaded;\n }\n\n /**\n * Check if this instance is connected to cloud\n */\n get isCloud(): boolean {\n return this._cloudConfig !== null;\n }\n\n /**\n * Disconnect from cloud (if connected)\n */\n disconnect(): void {\n if (this._cloudAdapter) {\n this._cloudAdapter.disconnect();\n this._cloudAdapter.detach();\n this._cloudAdapter = null;\n this._connectionState = 'disconnected';\n }\n }\n\n // Helper method to encode file to base64\n private encodeFileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof FileReader !== 'undefined') {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n const base64Data = result.split(',')[1];\n resolve(base64Data);\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n } else {\n reject(new Error('FileReader not available in Node.js environment. Use set_base64() method instead.'));\n }\n });\n }\n\n // Helper method to create data URL from base64 and content type\n private createDataUrl(base64Data: string, contentType: string): string {\n return `data:${contentType};base64,${base64Data}`;\n }\n\n // Helper method to validate content type for different STM types\n private validateContentType(type: KeyAttributes['type'], contentType?: string): boolean {\n if (type === 'text' || type === 'json') {\n return true;\n }\n if (!contentType) {\n return false;\n }\n if (type === 'image') {\n return contentType.startsWith('image/');\n }\n if (type === 'file') {\n return true;\n }\n return false;\n }\n\n /** @deprecated Use get_value instead */\n get(key: string): any {\n return this.get_value(key);\n }\n\n // Get a value from the STM with template processing if enabled\n get_value(key: string, _processingStack?: Set<string>): any {\n if (key === '$date') {\n const today = new Date();\n return today.toISOString().split('T')[0];\n }\n if (key === '$time') {\n const now = new Date();\n return now.toTimeString().split(' ')[0];\n }\n\n const entry = this.stm[key];\n if (!entry) {\n return undefined;\n }\n\n if (entry.attributes.template) {\n const processingStack = _processingStack || new Set<string>();\n if (processingStack.has(key)) {\n return entry.value;\n }\n processingStack.add(key);\n const result = this.injectSTM(entry.value as string, processingStack);\n processingStack.delete(key);\n return result;\n }\n\n return entry.value;\n }\n\n // Get attributes for a key\n get_attributes(key: string): KeyAttributes | undefined {\n if (key === '$date' || key === '$time') {\n return {\n readonly: true,\n visible: true,\n hardcoded: true,\n template: false,\n type: 'text',\n tags: []\n };\n }\n\n const entry = this.stm[key];\n return entry ? entry.attributes : undefined;\n }\n\n // Set a value in the STM with default attributes\n set_value(key: string, value: any, attributes?: Partial<KeyAttributes>): void {\n if (key === '$date' || key === '$time') {\n return;\n }\n\n const existingEntry = this.stm[key];\n const baseAttributes = existingEntry ? existingEntry.attributes : { ...DEFAULT_KEY_ATTRIBUTES };\n\n const finalAttributes = attributes ? { ...baseAttributes, ...attributes } : baseAttributes;\n\n if (finalAttributes.hardcoded) {\n finalAttributes.readonly = true;\n finalAttributes.template = false;\n }\n\n this.stm[key] = {\n value,\n attributes: finalAttributes\n };\n\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener());\n }\n this.notifyGlobalListeners();\n }\n\n // Internal method for setting values from remote (cloud sync)\n // This doesn't trigger the global listener to prevent sync loops\n _setFromRemote(key: string, value: any, attributes: KeyAttributes): void {\n if (key === '$date' || key === '$time') {\n return;\n }\n\n this._isRemoteUpdate = true;\n\n this.stm[key] = {\n value,\n attributes\n };\n\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener());\n }\n\n // Still notify global listeners for UI updates, but adapter should check _isRemoteUpdate\n this.notifyGlobalListeners();\n\n this._isRemoteUpdate = false;\n }\n\n // Check if current update is from remote\n isRemoteUpdate(): boolean {\n return this._isRemoteUpdate;\n }\n\n // Internal method for deleting from remote (cloud sync)\n _deleteFromRemote(key: string): void {\n if (key === '$date' || key === '$time') {\n return;\n }\n\n this._isRemoteUpdate = true;\n\n if (key in this.stm) {\n delete this.stm[key];\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener());\n }\n this.notifyGlobalListeners();\n }\n\n this._isRemoteUpdate = false;\n }\n\n // Internal method for clearing from remote (cloud sync)\n _clearFromRemote(): void {\n this._isRemoteUpdate = true;\n this.stm = {};\n this.notifyGlobalListeners();\n this._isRemoteUpdate = false;\n }\n\n // Set attributes for an existing key\n set_attributes(key: string, attributes: Partial<KeyAttributes>): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n if (!entry) {\n return false;\n }\n\n const { hardcoded: _hardcoded, ...allowedAttributes } = attributes;\n entry.attributes = { ...entry.attributes, ...allowedAttributes };\n\n if (entry.attributes.hardcoded) {\n entry.attributes.readonly = true;\n entry.attributes.template = false;\n }\n\n this.notifyGlobalListeners();\n return true;\n }\n\n set(key: string, value: any): void {\n this.set_value(key, value);\n }\n\n async set_file(key: string, file: File, attributes?: Partial<KeyAttributes>): Promise<void> {\n const base64Data = await this.encodeFileToBase64(file);\n const contentType = file.type;\n\n const fileAttributes: Partial<KeyAttributes> = {\n type: contentType.startsWith('image/') ? 'image' : 'file',\n contentType,\n ...attributes\n };\n\n this.set_value(key, base64Data, fileAttributes);\n }\n\n set_base64(key: string, base64Data: string, contentType: string, type: 'image' | 'file' = 'file', attributes?: Partial<KeyAttributes>): void {\n if (!this.validateContentType(type, contentType)) {\n throw new Error(`Invalid content type ${contentType} for type ${type}`);\n }\n\n const fileAttributes: Partial<KeyAttributes> = {\n type,\n contentType,\n ...attributes\n };\n\n this.set_value(key, base64Data, fileAttributes);\n }\n\n add_image(key: string, base64Data: string, contentType: string = 'image/jpeg', attributes?: Partial<KeyAttributes>): void {\n if (!contentType.startsWith('image/')) {\n throw new Error(`Invalid image content type: ${contentType}. Must start with 'image/'`);\n }\n\n this.set_base64(key, base64Data, contentType, 'image', attributes);\n this.set_attributes(key, {\n type: 'image',\n contentType: contentType\n });\n }\n\n get_data_url(key: string): string | undefined {\n const entry = this.stm[key];\n if (!entry || (entry.attributes.type !== 'image' && entry.attributes.type !== 'file')) {\n return undefined;\n }\n\n if (!entry.attributes.contentType) {\n return undefined;\n }\n\n return this.createDataUrl(entry.value as string, entry.attributes.contentType);\n }\n\n get_base64(key: string): string | undefined {\n const entry = this.stm[key];\n if (!entry || (entry.attributes.type !== 'image' && entry.attributes.type !== 'file')) {\n return undefined;\n }\n\n return entry.value as string;\n }\n\n has(key: string): boolean {\n if (key === '$date' || key === '$time') {\n return true;\n }\n return key in this.stm;\n }\n\n delete(key: string): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n if (!(key in this.stm)) {\n return false;\n }\n const deleted = delete this.stm[key];\n if (deleted) {\n this.notifyGlobalListeners();\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener());\n }\n }\n return deleted;\n }\n\n clear(): void {\n this.stm = {};\n this.notifyGlobalListeners();\n }\n\n keys(): string[] {\n return [...Object.keys(this.stm), '$date', '$time'];\n }\n\n values(): any[] {\n const now = new Date();\n const stmValues = Object.values(this.stm).map(entry => entry.value);\n return [\n ...stmValues,\n now.toISOString().split('T')[0],\n now.toTimeString().split(' ')[0]\n ];\n }\n\n entries(): [string, any][] {\n const now = new Date();\n const stmEntries = Object.entries(this.stm).map(([key, entry]) =>\n [key, entry.value] as [string, any]\n );\n return [\n ...stmEntries,\n ['$date', now.toISOString().split('T')[0]],\n ['$time', now.toTimeString().split(' ')[0]]\n ];\n }\n\n size(): number {\n return Object.keys(this.stm).length + 2;\n }\n\n getAll(): Record<string, any> {\n const now = new Date();\n const result: Record<string, any> = {};\n\n Object.entries(this.stm).forEach(([key, entry]) => {\n result[key] = entry.value;\n });\n\n result['$date'] = now.toISOString().split('T')[0];\n result['$time'] = now.toTimeString().split(' ')[0];\n\n return result;\n }\n\n update(newValues: Record<string, any>): void {\n Object.entries(newValues).forEach(([key, value]) => {\n if (key !== '$date' && key !== '$time') {\n this.stm[key] = {\n value,\n attributes: { ...DEFAULT_KEY_ATTRIBUTES }\n };\n\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener());\n }\n }\n });\n this.notifyGlobalListeners();\n }\n\n subscribe(key: string, listener: Listener): void {\n if (!this.listeners[key]) {\n this.listeners[key] = [];\n }\n this.listeners[key].push(listener);\n }\n\n unsubscribe(key: string, listener: Listener): void {\n if (this.listeners[key]) {\n this.listeners[key] = this.listeners[key].filter(l => l !== listener);\n }\n }\n\n subscribeToAll(listener: Listener): void {\n this.globalListeners.push(listener);\n }\n\n unsubscribeFromAll(listener: Listener): void {\n this.globalListeners = this.globalListeners.filter(l => l !== listener);\n }\n\n private notifyGlobalListeners(): void {\n this.globalListeners.forEach(listener => listener());\n }\n\n injectSTM(template: string, _processingStack?: Set<string>): string {\n if (template === null || template === undefined) {\n return String(template);\n }\n\n const templateStr = String(template);\n const keys = templateStr.match(/\\{\\{([$\\w]+)\\}\\}/g);\n\n if (!keys) {\n return templateStr;\n }\n\n const cleanKeys = keys.map(key => key.replace(/[{}]/g, ''));\n\n const inputValues: Record<string, string> = cleanKeys.reduce((acc, key) => {\n if (key === '$date' || key === '$time') {\n return {\n ...acc,\n [key]: this.get_value(key, _processingStack)\n };\n }\n\n const attributes = this.get_attributes(key);\n if (_processingStack || (attributes && attributes.visible)) {\n if (attributes && (attributes.type === 'image' || attributes.type === 'file')) {\n return acc;\n }\n\n return {\n ...acc,\n [key]: this.get_value(key, _processingStack)\n };\n }\n\n return acc;\n }, {});\n\n return templateStr.replace(/\\{\\{([$\\w]+)\\}\\}/g, (match, key) => {\n if (inputValues[key] !== undefined) {\n return inputValues[key];\n }\n\n const attributes = this.get_attributes(key);\n if (attributes && (attributes.type === 'image' || attributes.type === 'file')) {\n return match;\n }\n\n return '';\n });\n }\n\n getSTM(): string {\n const now = new Date();\n const entries: Array<[string, any]> = [];\n\n Object.entries(this.stm).forEach(([key, entry]) => {\n if (entry.attributes.visible) {\n entries.push([key, this.get_value(key)]);\n }\n });\n\n entries.push(['$date', now.toISOString().split('T')[0]]);\n entries.push(['$time', now.toTimeString().split(' ')[0]]);\n\n return entries\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ');\n }\n\n getSTMObject(): Record<string, any> {\n return this.getAll();\n }\n\n getSTMForAPI(): Array<{key: string, value: any, type: string, contentType?: string}> {\n const now = new Date();\n const apiData: Array<{key: string, value: any, type: string, contentType?: string}> = [];\n\n Object.entries(this.stm).forEach(([key, entry]) => {\n if (entry.attributes.visible) {\n const processedValue = entry.attributes.template ? this.get_value(key) : entry.value;\n\n apiData.push({\n key,\n value: processedValue,\n type: entry.attributes.type,\n contentType: entry.attributes.contentType\n });\n }\n });\n\n apiData.push({\n key: '$date',\n value: now.toISOString().split('T')[0],\n type: 'text'\n });\n\n apiData.push({\n key: '$time',\n value: now.toTimeString().split(' ')[0],\n type: 'text'\n });\n\n return apiData;\n }\n\n getVisibleImages(): Array<{ type: 'file'; mediaType: string; url: string; filename?: string }> {\n const imageParts: Array<{ type: 'file'; mediaType: string; url: string; filename?: string }> = [];\n\n Object.entries(this.stm).forEach(([key, entry]) => {\n if (entry.attributes.visible && entry.attributes.type === 'image' && entry.attributes.contentType) {\n const dataUrl = this.createDataUrl(entry.value as string, entry.attributes.contentType);\n imageParts.push({\n type: 'file' as const,\n mediaType: entry.attributes.contentType,\n url: dataUrl,\n filename: key\n });\n }\n });\n\n return imageParts;\n }\n\n toJSON(): string {\n return JSON.stringify(this.serialize());\n }\n\n fromJSON(jsonString: string): void {\n try {\n const data = JSON.parse(jsonString);\n this.deserialize(data);\n } catch (error) {\n console.error('MindCache: Failed to deserialize JSON:', error);\n }\n }\n\n serialize(): Record<string, STMEntry> {\n const result: Record<string, STMEntry> = {};\n\n Object.entries(this.stm).forEach(([key, entry]) => {\n if (!entry.attributes.hardcoded) {\n result[key] = {\n value: entry.value,\n attributes: { ...entry.attributes }\n };\n }\n });\n\n return result;\n }\n\n deserialize(data: Record<string, STMEntry>): void {\n if (typeof data === 'object' && data !== null) {\n this.clear();\n\n Object.entries(data).forEach(([key, entry]) => {\n if (entry && typeof entry === 'object' && 'value' in entry && 'attributes' in entry) {\n this.stm[key] = {\n value: entry.value,\n attributes: {\n ...entry.attributes,\n tags: entry.attributes.tags || []\n }\n };\n }\n });\n\n this.notifyGlobalListeners();\n }\n }\n\n get_system_prompt(): string {\n const now = new Date();\n const promptLines: string[] = [];\n\n Object.entries(this.stm).forEach(([key, entry]) => {\n if (entry.attributes.visible) {\n if (entry.attributes.type === 'image') {\n promptLines.push(`image ${key} available`);\n return;\n }\n if (entry.attributes.type === 'file') {\n if (entry.attributes.readonly) {\n promptLines.push(`${key}: [${entry.attributes.type.toUpperCase()}] - ${entry.attributes.contentType || 'unknown format'}`);\n } else {\n const sanitizedKey = key.replace(/[^a-zA-Z0-9_-]/g, '_');\n promptLines.push(`${key}: [${entry.attributes.type.toUpperCase()}] - ${entry.attributes.contentType || 'unknown format'}. You can update this ${entry.attributes.type} using the write_${sanitizedKey} tool.`);\n }\n return;\n }\n\n const value = this.get_value(key);\n const formattedValue = typeof value === 'object' && value !== null\n ? JSON.stringify(value)\n : String(value);\n\n if (entry.attributes.readonly) {\n promptLines.push(`${key}: ${formattedValue}`);\n } else {\n const sanitizedKey = key.replace(/[^a-zA-Z0-9_-]/g, '_');\n const toolInstruction =\n `You can rewrite \"${key}\" by using the write_${sanitizedKey} tool. ` +\n 'This tool DOES NOT append — start your response with the old value ' +\n `(${formattedValue})`;\n promptLines.push(`${key}: ${formattedValue}. ${toolInstruction}`);\n }\n }\n });\n\n promptLines.push(`$date: ${now.toISOString().split('T')[0]}`);\n promptLines.push(`$time: ${now.toTimeString().split(' ')[0]}`);\n\n return promptLines.join('\\n');\n }\n\n private findKeyFromToolName(toolName: string): string | undefined {\n if (!toolName.startsWith('write_')) {\n return undefined;\n }\n\n const sanitizedKey = toolName.replace('write_', '');\n const allKeys = Object.keys(this.stm);\n return allKeys.find(k =>\n k.replace(/[^a-zA-Z0-9_-]/g, '_') === sanitizedKey\n );\n }\n\n get_aisdk_tools(): Record<string, any> {\n const tools: Record<string, any> = {};\n\n const writableKeys = Object.entries(this.stm)\n .filter(([, entry]) => !entry.attributes.readonly)\n .map(([key]) => key);\n\n writableKeys.forEach(key => {\n const sanitizedKey = key.replace(/[^a-zA-Z0-9_-]/g, '_');\n const toolName = `write_${sanitizedKey}`;\n\n const entry = this.stm[key];\n const keyType = entry?.attributes.type || 'text';\n\n let inputSchema;\n let description = `Write a value to the STM key: ${key}`;\n\n if (keyType === 'image' || keyType === 'file') {\n description += ' (expects base64 encoded data)';\n inputSchema = z.object({\n value: z.string().describe(`Base64 encoded data for ${key}`),\n contentType: z.string().optional().describe(`MIME type for the ${keyType}`)\n });\n } else if (keyType === 'json') {\n description += ' (expects JSON string)';\n inputSchema = z.object({\n value: z.string().describe(`JSON string value for ${key}`)\n });\n } else {\n inputSchema = z.object({\n value: z.string().describe(`The text value to write to ${key}`)\n });\n }\n\n tools[toolName] = {\n description,\n inputSchema,\n execute: async (input: { value: any; contentType?: string }) => {\n if (keyType === 'image' || keyType === 'file') {\n if (input.contentType) {\n this.set_base64(key, input.value, input.contentType, keyType);\n } else {\n const existingContentType = entry?.attributes.contentType;\n if (existingContentType) {\n this.set_base64(key, input.value, existingContentType, keyType);\n } else {\n throw new Error(`Content type required for ${keyType} data`);\n }\n }\n } else {\n this.set_value(key, input.value);\n }\n\n let resultMessage: string;\n if (keyType === 'image') {\n resultMessage = `Successfully saved image to ${key}`;\n } else if (keyType === 'file') {\n resultMessage = `Successfully saved file to ${key}`;\n } else if (keyType === 'json') {\n resultMessage = `Successfully saved JSON data to ${key}`;\n } else {\n resultMessage = `Successfully wrote \"${input.value}\" to ${key}`;\n }\n\n return {\n result: resultMessage,\n key: key,\n value: input.value,\n type: keyType,\n contentType: input.contentType,\n sanitizedKey: sanitizedKey\n };\n }\n };\n });\n\n if (writableKeys.length === 0) {\n return {};\n }\n\n return tools;\n }\n\n executeToolCall(\n toolName: string,\n value: any\n ): { result: string; key: string; value: any } | null {\n const originalKey = this.findKeyFromToolName(toolName);\n if (!originalKey) {\n return null;\n }\n\n const entry = this.stm[originalKey];\n if (entry && entry.attributes.readonly) {\n return null;\n }\n\n this.set_value(originalKey, value);\n return {\n result: `Successfully wrote \"${value}\" to ${originalKey}`,\n key: originalKey,\n value: value\n };\n }\n\n addTag(key: string, tag: string): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n if (!entry) {\n return false;\n }\n\n if (!entry.attributes.tags) {\n entry.attributes.tags = [];\n }\n\n if (!entry.attributes.tags.includes(tag)) {\n entry.attributes.tags.push(tag);\n this.notifyGlobalListeners();\n return true;\n }\n\n return false;\n }\n\n removeTag(key: string, tag: string): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n if (!entry || !entry.attributes.tags) {\n return false;\n }\n\n const tagIndex = entry.attributes.tags.indexOf(tag);\n if (tagIndex > -1) {\n entry.attributes.tags.splice(tagIndex, 1);\n this.notifyGlobalListeners();\n return true;\n }\n\n return false;\n }\n\n getTags(key: string): string[] {\n if (key === '$date' || key === '$time') {\n return [];\n }\n\n const entry = this.stm[key];\n return entry?.attributes.tags || [];\n }\n\n getAllTags(): string[] {\n const allTags = new Set<string>();\n\n Object.values(this.stm).forEach(entry => {\n if (entry.attributes.tags) {\n entry.attributes.tags.forEach(tag => allTags.add(tag));\n }\n });\n\n return Array.from(allTags);\n }\n\n hasTag(key: string, tag: string): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n return entry?.attributes.tags?.includes(tag) || false;\n }\n\n getTagged(tag: string): string {\n const entries: Array<[string, any]> = [];\n\n Object.entries(this.stm).forEach(([key, entry]) => {\n if (entry.attributes.tags?.includes(tag)) {\n entries.push([key, this.get_value(key)]);\n }\n });\n\n return entries\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ');\n }\n\n toMarkdown(): string {\n const now = new Date();\n const lines: string[] = [];\n const appendixEntries: Array<{\n key: string;\n type: string;\n contentType: string;\n base64: string;\n label: string;\n }> = [];\n let appendixCounter = 0;\n\n lines.push('# MindCache STM Export');\n lines.push('');\n lines.push(`Export Date: ${now.toISOString().split('T')[0]}`);\n lines.push('');\n lines.push('---');\n lines.push('');\n lines.push('## STM Entries');\n lines.push('');\n\n Object.entries(this.stm).forEach(([key, entry]) => {\n if (entry.attributes.hardcoded) {\n return;\n }\n\n lines.push(`### ${key}`);\n const entryType = (entry.attributes.type && (entry.attributes.type as any) !== 'undefined') ? entry.attributes.type : 'text';\n lines.push(`- **Type**: \\`${entryType}\\``);\n lines.push(`- **Readonly**: \\`${entry.attributes.readonly}\\``);\n lines.push(`- **Visible**: \\`${entry.attributes.visible}\\``);\n lines.push(`- **Template**: \\`${entry.attributes.template}\\``);\n\n if (entry.attributes.tags && entry.attributes.tags.length > 0) {\n lines.push(`- **Tags**: \\`${entry.attributes.tags.join('`, `')}\\``);\n }\n\n if (entry.attributes.contentType) {\n lines.push(`- **Content Type**: \\`${entry.attributes.contentType}\\``);\n }\n\n if (entryType === 'image' || entryType === 'file') {\n const label = String.fromCharCode(65 + appendixCounter);\n appendixCounter++;\n lines.push(`- **Value**: [See Appendix ${label}]`);\n\n appendixEntries.push({\n key,\n type: entryType,\n contentType: entry.attributes.contentType || 'application/octet-stream',\n base64: entry.value as string,\n label\n });\n } else if (entryType === 'json') {\n lines.push('- **Value**:');\n lines.push('```json');\n try {\n const jsonValue = typeof entry.value === 'string' ? entry.value : JSON.stringify(entry.value, null, 2);\n lines.push(jsonValue);\n } catch {\n lines.push(String(entry.value));\n }\n lines.push('```');\n } else {\n const valueStr = String(entry.value);\n lines.push('- **Value**:');\n lines.push('```');\n lines.push(valueStr);\n lines.push('```');\n }\n\n lines.push('');\n lines.push('---');\n lines.push('');\n });\n\n if (appendixEntries.length > 0) {\n lines.push('## Appendix: Binary Data');\n lines.push('');\n\n appendixEntries.forEach(({ key, contentType, base64, label }) => {\n lines.push(`### Appendix ${label}: ${key}`);\n lines.push(`**Type**: ${contentType}`);\n lines.push('');\n lines.push('```');\n lines.push(base64);\n lines.push('```');\n lines.push('');\n lines.push('---');\n lines.push('');\n });\n }\n\n lines.push('*End of MindCache Export*');\n\n return lines.join('\\n');\n }\n\n fromMarkdown(markdown: string): void {\n const lines = markdown.split('\\n');\n let currentSection: 'header' | 'entries' | 'appendix' = 'header';\n let currentKey: string | null = null;\n let currentEntry: Partial<STMEntry> | null = null;\n let inCodeBlock = false;\n let codeBlockContent: string[] = [];\n let codeBlockType: 'value' | 'json' | 'base64' | 'default' | null = null;\n const appendixData: Record<string, { contentType: string; base64: string }> = {};\n let currentAppendixKey: string | null = null;\n const pendingEntries: Record<string, Partial<STMEntry> & { appendixLabel?: string }> = {};\n\n this.clear();\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n if (trimmed === '## STM Entries') {\n currentSection = 'entries';\n continue;\n }\n if (trimmed === '## Appendix: Binary Data') {\n currentSection = 'appendix';\n continue;\n }\n\n if (trimmed === '```' || trimmed === '```json') {\n if (!inCodeBlock) {\n inCodeBlock = true;\n codeBlockContent = [];\n codeBlockType = currentSection === 'appendix' ? 'base64' : (trimmed === '```json' ? 'json' : 'value');\n } else {\n inCodeBlock = false;\n const content = codeBlockContent.join('\\n');\n\n if (currentSection === 'appendix' && currentAppendixKey) {\n appendixData[currentAppendixKey].base64 = content;\n } else if (currentEntry && codeBlockType === 'json') {\n currentEntry.value = content;\n } else if (currentEntry && codeBlockType === 'value') {\n currentEntry.value = content;\n }\n\n codeBlockContent = [];\n codeBlockType = null;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeBlockContent.push(line);\n continue;\n }\n\n if (currentSection === 'entries') {\n if (trimmed.startsWith('### ')) {\n if (currentKey && currentEntry && currentEntry.attributes) {\n pendingEntries[currentKey] = currentEntry as STMEntry & { appendixLabel?: string };\n }\n\n currentKey = trimmed.substring(4);\n currentEntry = {\n value: undefined,\n attributes: {\n readonly: false,\n visible: true,\n hardcoded: false,\n template: false,\n type: 'text',\n tags: []\n }\n };\n } else if (trimmed.startsWith('- **Type**: `')) {\n const type = trimmed.match(/`([^`]+)`/)?.[1] as KeyAttributes['type'];\n if (currentEntry && type && (type as any) !== 'undefined') {\n currentEntry.attributes!.type = type;\n }\n } else if (trimmed.startsWith('- **Readonly**: `')) {\n const value = trimmed.match(/`([^`]+)`/)?.[1] === 'true';\n if (currentEntry) {\n currentEntry.attributes!.readonly = value;\n }\n } else if (trimmed.startsWith('- **Visible**: `')) {\n const value = trimmed.match(/`([^`]+)`/)?.[1] === 'true';\n if (currentEntry) {\n currentEntry.attributes!.visible = value;\n }\n } else if (trimmed.startsWith('- **Template**: `')) {\n const value = trimmed.match(/`([^`]+)`/)?.[1] === 'true';\n if (currentEntry) {\n currentEntry.attributes!.template = value;\n }\n } else if (trimmed.startsWith('- **Tags**: `')) {\n const tagsStr = trimmed.substring(13, trimmed.length - 1);\n if (currentEntry) {\n currentEntry.attributes!.tags = tagsStr.split('`, `');\n }\n } else if (trimmed.startsWith('- **Content Type**: `')) {\n const contentType = trimmed.match(/`([^`]+)`/)?.[1];\n if (currentEntry && contentType) {\n currentEntry.attributes!.contentType = contentType;\n }\n } else if (trimmed.startsWith('- **Value**: `')) {\n const value = trimmed.substring(14, trimmed.length - 1);\n if (currentEntry) {\n currentEntry.value = value;\n }\n } else if (trimmed.startsWith('- **Value**: [See Appendix ')) {\n const labelMatch = trimmed.match(/Appendix ([A-Z])\\]/);\n if (currentEntry && labelMatch && currentKey) {\n (currentEntry as any).appendixLabel = labelMatch[1];\n currentEntry.value = '';\n }\n }\n }\n\n if (currentSection === 'appendix') {\n if (trimmed.startsWith('### Appendix ')) {\n const match = trimmed.match(/### Appendix ([A-Z]): (.+)/);\n if (match) {\n const label = match[1];\n const key = match[2];\n currentAppendixKey = `${label}:${key}`;\n appendixData[currentAppendixKey] = { contentType: '', base64: '' };\n }\n } else if (trimmed.startsWith('**Type**: ')) {\n const contentType = trimmed.substring(10);\n if (currentAppendixKey) {\n appendixData[currentAppendixKey].contentType = contentType;\n }\n }\n }\n }\n\n if (currentKey && currentEntry && currentEntry.attributes) {\n pendingEntries[currentKey] = currentEntry as STMEntry & { appendixLabel?: string };\n }\n\n Object.entries(pendingEntries).forEach(([key, entry]) => {\n const appendixLabel = (entry as any).appendixLabel;\n if (appendixLabel) {\n const appendixKey = `${appendixLabel}:${key}`;\n const appendixInfo = appendixData[appendixKey];\n if (appendixInfo && appendixInfo.base64) {\n entry.value = appendixInfo.base64;\n if (!entry.attributes!.contentType && appendixInfo.contentType) {\n entry.attributes!.contentType = appendixInfo.contentType;\n }\n }\n }\n\n if (entry.value !== undefined && entry.attributes) {\n this.stm[key] = {\n value: entry.value,\n attributes: entry.attributes as KeyAttributes\n };\n }\n });\n\n this.notifyGlobalListeners();\n }\n}\n\n// Create and export a single instance of MindCache\nexport const mindcache = new MindCache();\n\n","import { MindCache } from '../core/MindCache';\nimport { CloudAdapter } from './CloudAdapter';\nimport type { CloudConfig } from './types';\n\nexport { CloudAdapter } from './CloudAdapter';\nexport type {\n CloudConfig,\n ConnectionState,\n CloudAdapterEvents,\n Operation,\n SetOperation,\n DeleteOperation,\n ClearOperation\n} from './types';\n\n/**\n * Connect a MindCache instance to the cloud for real-time sync.\n *\n * @example\n * ```typescript\n * import { MindCache } from 'mindcache';\n * import { connectCloud } from 'mindcache/cloud';\n *\n * const mc = new MindCache();\n * const adapter = connectCloud(mc, {\n * projectId: 'my-project',\n * instanceId: 'main',\n * apiKey: 'mc_live_xxxxx'\n * });\n *\n * // Now mc is synced with the cloud!\n * mc.set_value('name', 'Alice');\n * ```\n */\nexport function connectCloud(mc: MindCache, config: CloudConfig): CloudAdapter {\n const adapter = new CloudAdapter(config);\n adapter.attach(mc);\n adapter.connect();\n return adapter;\n}\n\n/**\n * Create a new MindCache instance that's already connected to the cloud.\n *\n * @example\n * ```typescript\n * import { createCloudMindCache } from 'mindcache/cloud';\n *\n * const mc = createCloudMindCache({\n * projectId: 'my-project',\n * instanceId: 'main',\n * apiKey: 'mc_live_xxxxx'\n * });\n *\n * // Ready to use with cloud sync!\n * mc.set_value('name', 'Alice');\n * ```\n */\nexport function createCloudMindCache(config: CloudConfig): MindCache & { adapter: CloudAdapter } {\n const mc = new MindCache();\n const adapter = connectCloud(mc, config);\n\n // Attach adapter to the instance for access\n return Object.assign(mc, { adapter });\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cloud/CloudAdapter.ts","../src/core/types.ts","../src/core/MindCache.ts","../src/cloud/index.ts"],"names":["CloudAdapter","systemTags","z"],"mappings":";;;;;;;;;;;;;;;AAAA,IAAA,oBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,YAAA,EAAA,MAAAA;AAAA,CAAA,CAAA;AAAA,IAUM,gBAAA,CAAA,CACA,iBACA,mBAAA,CAAA,CAUOA;AAtBb,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2BAAA,GAAA;AAUA,IAAM,gBAAA,GAAmB,wBAAA;AACzB,IAAM,eAAA,GAAkB,GAAA;AACxB,IAAM,mBAAA,GAAsB,GAAA;AAUrB,IAAMA,uBAAN,MAAmB;AAAA,MAWxB,YAAoB,MAAA,EAAqB;AAArB,QAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAClB,QAAA,IAAA,CAAK,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,gBAAA;AAAA,MAC1C;AAAA,MAZQ,EAAA,GAAuB,IAAA;AAAA,MACvB,QAAqB,EAAC;AAAA,MACtB,SAAA,GAA8B,IAAA;AAAA,MAC9B,WAAA,GAAmC,IAAA;AAAA,MACnC,iBAAA,GAAoB,CAAA;AAAA,MACpB,gBAAA,GAAyD,IAAA;AAAA,MACzD,MAAA,GAA0B,cAAA;AAAA,MAC1B,YAAmF,EAAC;AAAA,MACpF,KAAA,GAAuB,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU/B,SAAS,KAAA,EAAqB;AAC5B,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,MACf;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,iBAAiB,QAAA,EAAuC;AACtD,QAAA,IAAA,CAAK,OAAO,aAAA,GAAgB,QAAA;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,KAAA,GAAyB;AAC3B,QAAA,OAAO,IAAA,CAAK,MAAA;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO,EAAA,EAAqB;AAC1B,QAAA,IAAI,KAAK,SAAA,EAAW;AAClB,UAAA,IAAA,CAAK,MAAA,EAAO;AAAA,QACd;AAEA,QAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AAGjB,QAAA,MAAM,WAAW,MAAM;AAErB,UAAA,IAAI,EAAA,CAAG,gBAAe,EAAG;AACvB,YAAA,OAAA,CAAQ,IAAI,mDAAyC,CAAA;AACrD,YAAA;AAAA,UACF;AAEA,UAAA,OAAA,CAAQ,IAAI,8DAAoD,CAAA;AAIhE,UAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,QACxB,CAAA;AAEA,QAAA,EAAA,CAAG,eAAe,QAAQ,CAAA;AAC1B,QAAA,IAAA,CAAK,WAAA,GAAc,MAAM,EAAA,CAAG,kBAAA,CAAmB,QAAQ,CAAA;AACvD,QAAA,OAAA,CAAQ,IAAI,2DAAiD,CAAA;AAAA,MAC/D;AAAA;AAAA;AAAA;AAAA,MAKA,MAAA,GAAe;AACb,QAAA,IAAI,KAAK,WAAA,EAAa;AACpB,UAAA,IAAA,CAAK,WAAA,EAAY;AACjB,UAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,QACrB;AACA,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,MACnB;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,OAAA,GAAyB;AAC7B,QAAA,IAAI,IAAA,CAAK,MAAA,KAAW,YAAA,IAAgB,IAAA,CAAK,WAAW,WAAA,EAAa;AAC/D,UAAA;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,MAAA,GAAS,YAAA;AAEd,QAAA,IAAI;AAEF,UAAA,IAAI,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB,CAAC,KAAK,KAAA,EAAO;AAC5C,YAAA,IAAA,CAAK,KAAA,GAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,aAAA,EAAc;AAAA,UAC/C;AAGA,UAAA,IAAI,GAAA,GAAM,GAAG,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,OAAO,UAAU,CAAA,CAAA;AAC/D,UAAA,IAAI,KAAK,KAAA,EAAO;AACd,YAAA,GAAA,IAAO,CAAA,OAAA,EAAU,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AAE/C,YAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,UACf;AAEA,UAAA,IAAA,CAAK,EAAA,GAAK,IAAI,SAAA,CAAU,GAAG,CAAA;AAC3B,UAAA,IAAA,CAAK,cAAA,EAAe;AAAA,QACtB,SAAS,KAAA,EAAO;AACd,UAAA,IAAA,CAAK,MAAA,GAAS,OAAA;AACd,UAAA,IAAA,CAAK,IAAA,CAAK,SAAS,KAAc,CAAA;AACjC,UAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,QACzB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,UAAA,GAAmB;AACjB,QAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,UAAA,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAClC,UAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,QAC1B;AAEA,QAAA,IAAI,KAAK,EAAA,EAAI;AACX,UAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AACd,UAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AAAA,QACZ;AAEA,QAAA,IAAA,CAAK,MAAA,GAAS,cAAA;AACd,QAAA,IAAA,CAAK,KAAK,cAAc,CAAA;AAAA,MAC1B;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,EAAA,EAAqB;AACxB,QAAA,IAAI,IAAA,CAAK,EAAA,EAAI,UAAA,KAAe,SAAA,CAAU,IAAA,EAAM;AAC1C,UAAA,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,EAAE,CAAC,CAAA;AAAA,QACjC,CAAA,MAAO;AAEL,UAAA,IAAA,CAAK,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,QACpB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,EAAA,CAAuC,OAAU,QAAA,EAAuC;AACtF,QAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AAC1B,UAAA,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,EAAC;AAAA,QAC3B;AACA,QAAA,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,CAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA,MAKA,GAAA,CAAwC,OAAU,QAAA,EAAuC;AACvF,QAAA,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AACzB,UAAA,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,CAAG,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,QAAQ,CAAA;AAAA,QAC3E;AAAA,MACF;AAAA,MAEQ,IAAA,CAAyC,UAAa,IAAA,EAA+C;AAC3G,QAAA,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AACzB,UAAA,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,CAAG,OAAA,CAAQ,cAAa,QAAA,CAAiB,GAAG,IAAI,CAAC,CAAA;AAAA,QACvE;AAAA,MACF;AAAA,MAEQ,cAAA,GAAuB;AAC7B,QAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,UAAA;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,EAAA,CAAG,SAAS,MAAM;AAGrB,UAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,YAAA,IAAA,CAAK,EAAA,CAAI,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU;AAAA,cAC3B,IAAA,EAAM,MAAA;AAAA,cACN,MAAA,EAAQ,KAAK,MAAA,CAAO;AAAA,aACrB,CAAC,CAAA;AAAA,UACJ;AAAA,QAGF,CAAA;AAEA,QAAA,IAAA,CAAK,EAAA,CAAG,SAAA,GAAY,CAAC,KAAA,KAAU;AAC7B,UAAA,IAAI;AACF,YAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AACjC,YAAA,IAAA,CAAK,cAAc,GAAG,CAAA;AAAA,UACxB,SAAS,KAAA,EAAO;AACd,YAAA,OAAA,CAAQ,KAAA,CAAM,6CAA6C,KAAK,CAAA;AAAA,UAClE;AAAA,QACF,CAAA;AAEA,QAAA,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM;AACtB,UAAA,IAAA,CAAK,MAAA,GAAS,cAAA;AACd,UAAA,IAAA,CAAK,KAAK,cAAc,CAAA;AACxB,UAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,QACzB,CAAA;AAEA,QAAA,IAAA,CAAK,EAAA,CAAG,OAAA,GAAU,CAAC,KAAA,KAAU;AAC3B,UAAA,IAAA,CAAK,MAAA,GAAS,OAAA;AACd,UAAA,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,IAAI,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAC/C,UAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,QAC1D,CAAA;AAAA,MACF;AAAA,MAEQ,cAAc,GAAA,EAA4B;AAChD,QAAA,QAAQ,IAAI,IAAA;AAAM,UAChB,KAAK,cAAA;AACH,YAAA,IAAA,CAAK,MAAA,GAAS,WAAA;AACd,YAAA,IAAA,CAAK,iBAAA,GAAoB,CAAA;AACzB,YAAA,IAAA,CAAK,KAAK,WAAW,CAAA;AACrB,YAAA,IAAA,CAAK,UAAA,EAAW;AAChB,YAAA;AAAA,UAEF,KAAK,YAAA;AACH,YAAA,IAAA,CAAK,MAAA,GAAS,OAAA;AACd,YAAA,IAAA,CAAK,KAAK,OAAA,EAAS,IAAI,KAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA;AACvC,YAAA,IAAA,CAAK,UAAA,EAAW;AAChB,YAAA;AAAA,UAEF,KAAK,MAAA;AAEH,YAAA,IAAI,IAAA,CAAK,SAAA,IAAa,GAAA,CAAI,IAAA,EAAM;AAC9B,cAAA,MAAA,CAAO,OAAA,CAAQ,IAAI,IAAI,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACjD,gBAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAW,GAAI,KAAA;AAC9B,gBAAA,IAAA,CAAK,SAAA,CAAW,cAAA,CAAe,GAAA,EAAK,KAAA,EAAO,UAAU,CAAA;AAAA,cACvD,CAAC,CAAA;AACD,cAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,YACpB;AACA,YAAA;AAAA,UAEF,KAAK,KAAA;AAEH,YAAA,IAAI,KAAK,SAAA,EAAW;AAClB,cAAA,IAAA,CAAK,UAAU,cAAA,CAAe,GAAA,CAAI,KAAK,GAAA,CAAI,KAAA,EAAO,IAAI,UAA2B,CAAA;AAAA,YACnF;AACA,YAAA;AAAA,UAEF,KAAK,aAAA;AAEH,YAAA,IAAI,KAAK,SAAA,EAAW;AAClB,cAAA,IAAA,CAAK,UAAU,cAAA,CAAe,GAAA,CAAI,KAAK,GAAA,CAAI,KAAA,EAAO,IAAI,UAAU,CAAA;AAAA,YAClE;AACA,YAAA;AAAA,UAEF,KAAK,QAAA;AAEH,YAAA,IAAI,KAAK,SAAA,EAAW;AAClB,cAAA,IAAA,CAAK,SAAA,CAAU,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA;AAAA,YAC1C;AACA,YAAA;AAAA,UAEF,KAAK,aAAA;AAEH,YAAA,IAAI,KAAK,SAAA,EAAW;AAClB,cAAA,IAAA,CAAK,SAAA,CAAU,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA;AAAA,YAC1C;AACA,YAAA;AAAA,UAEF,KAAK,OAAA;AACH,YAAA,IAAI,KAAK,SAAA,EAAW;AAClB,cAAA,IAAA,CAAK,UAAU,gBAAA,EAAiB;AAAA,YAClC;AACA,YAAA;AAAA,UAEF,KAAK,SAAA;AAEH,YAAA,IAAI,KAAK,SAAA,EAAW;AAClB,cAAA,IAAA,CAAK,UAAU,gBAAA,EAAiB;AAAA,YAClC;AACA,YAAA;AAAA,UAEF,KAAK,OAAA;AACH,YAAA,IAAA,CAAK,KAAK,OAAA,EAAS,IAAI,KAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA;AACvC,YAAA;AAAA;AACJ,MACF;AAAA,MAEQ,UAAA,GAAmB;AACzB,QAAA,OAAO,IAAA,CAAK,MAAM,MAAA,GAAS,CAAA,IAAK,KAAK,EAAA,EAAI,UAAA,KAAe,UAAU,IAAA,EAAM;AACtE,UAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,KAAA,EAAM;AAC5B,UAAA,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,EAAE,CAAC,CAAA;AAAA,QACjC;AAAA,MACF;AAAA,MAEQ,iBAAA,GAA0B;AAChC,QAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,UACjB,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,iBAAiB,CAAA;AAAA,UACpD;AAAA,SACF;AAEA,QAAA,IAAA,CAAK,gBAAA,GAAmB,WAAW,YAAY;AAC7C,UAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,UAAA,IAAA,CAAK,iBAAA,EAAA;AAGL,UAAA,IAAI,IAAA,CAAK,OAAO,aAAA,EAAe;AAC7B,YAAA,IAAI;AACF,cAAA,IAAA,CAAK,KAAA,GAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,aAAA,EAAc;AAAA,YAC/C,SAAS,KAAA,EAAO;AACd,cAAA,OAAA,CAAQ,KAAA,CAAM,uDAAuD,KAAK,CAAA;AAC1E,cAAA,IAAA,CAAK,IAAA,CAAK,SAAS,KAAc,CAAA;AACjC,cAAA;AAAA,YACF;AAAA,UACF;AAEA,UAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,QACf,GAAG,KAAK,CAAA;AAAA,MACV;AAAA,MAEQ,gBAAA,GAAyB;AAC/B,QAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,SAAA,EAAU;AAEzC,QAAA,OAAA,CAAQ,GAAA,CAAI,mDAAA,EAA2C,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAE3E,QAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAChD,UAAA,OAAA,CAAQ,GAAA,CAAI,yCAAA,EAAiC,GAAA,EAAK,GAAA,EAAK,MAAM,KAAK,CAAA;AAClE,UAAA,IAAA,CAAK,IAAA,CAAK;AAAA,YACR,IAAA,EAAM,KAAA;AAAA,YACN,GAAA;AAAA,YACA,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,YAAY,KAAA,CAAM,UAAA;AAAA,YAClB,SAAA,EAAW,KAAK,GAAA;AAAI,WACrB,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7RO,IAAM,sBAAA,GAAwC;AAAA,EACnD,IAAA,EAAM,MAAA;AAAA,EACN,aAAa,EAAC;AAAA,EACd,UAAA,EAAY,CAAC,QAAQ,CAAA;AAAA;AAAA,EACrB,MAAA,EAAQ,CAAA;AAAA;AAAA,EAER,QAAA,EAAU,KAAA;AAAA,EACV,OAAA,EAAS,IAAA;AAAA,EACT,SAAA,EAAW,KAAA;AAAA,EACX,QAAA,EAAU,KAAA;AAAA,EACV,MAAM;AACR;;;AC3BO,IAAM,YAAN,MAAgB;AAAA,EACb,MAAW,EAAC;AAAA,EACZ,YAA2C,EAAC;AAAA,EAC5C,kBAAoC,EAAC;AAAA;AAAA,EAGrC,eAAA,GAAkB,KAAA;AAAA;AAAA,EAGlB,aAAA,GAAsC,IAAA;AAAA,EACtC,gBAAA,GAAoC,cAAA;AAAA,EACpC,SAAA,GAAY,IAAA;AAAA;AAAA,EACZ,YAAA,GAA6C,IAAA;AAAA;AAAA,EAG7C,YAAA,GAA4B,MAAA;AAAA,EAEpC,YAAY,OAAA,EAA4B;AACtC,IAAA,IAAI,SAAS,WAAA,EAAa;AACxB,MAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,WAAA;AAAA,IAC9B;AACA,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,KAAA;AAC5B,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,MAAA,IAAA,CAAK,gBAAA,GAAmB,cAAA;AAExB,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAA,GAA2B;AAC7B,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,eAAA,GAA2B;AAC7B,IAAA,OAAO,KAAK,YAAA,KAAiB,QAAA;AAAA,EAC/B;AAAA,EAEA,MAAc,UAAA,GAA4B;AACxC,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,EAAE,YAAA,EAAAA,aAAAA,EAAa,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,iBAAA,EAAA,EAAA,oBAAA,CAAA,CAAA;AAG/B,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,OAAA,IAAW,0BAAA;AAC/C,MAAA,MAAM,OAAA,GAAU,UACb,OAAA,CAAQ,UAAA,EAAY,QAAQ,CAAA,CAC5B,OAAA,CAAQ,WAAW,OAAO,CAAA;AAE7B,MAAA,MAAM,OAAA,GAAU,IAAIA,aAAAA,CAAa;AAAA,QAC/B,UAAA,EAAY,KAAK,YAAA,CAAa,UAAA;AAAA,QAC9B,SAAA,EAAW,IAAA,CAAK,YAAA,CAAa,SAAA,IAAa,SAAA;AAAA,QAC1C,OAAA;AAAA,QACA,MAAA,EAAQ,KAAK,YAAA,CAAa;AAAA,OAC3B,CAAA;AAGD,MAAA,IAAI,IAAA,CAAK,aAAa,aAAA,EAAe;AACnC,QAAA,MAAM,aAAA,GAAgB,KAAK,YAAA,CAAa,aAAA;AACxC,QAAA,MAAM,UAAA,GAAa,KAAK,YAAA,CAAa,UAAA;AAGrC,QAAA,IAAI,eAAA;AACJ,QAAA,IAAI,cAAc,UAAA,CAAW,SAAS,KAAK,aAAA,CAAc,UAAA,CAAW,UAAU,CAAA,EAAG;AAC/E,UAAA,eAAA,GAAkB,aAAA;AAAA,QACpB,WAAW,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,UAAU,MAAA,EAAQ;AACnE,UAAA,eAAA,GAAkB,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG,aAAA,CAAc,UAAA,CAAW,GAAG,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,EAAG,aAAa,CAAA,CAAA;AAAA,QACxG,CAAA,MAAO;AAEL,UAAA,OAAA,CAAQ,KAAK,yFAAyF,CAAA;AACtG,UAAA,eAAA,GAAkB,aAAA;AAAA,QACpB;AAEA,QAAA,OAAA,CAAQ,iBAAiB,YAAY;AACnC,UAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,QAAA,CAAS,GAAG,CAAA,GACpC,CAAA,EAAG,eAAe,CAAA,YAAA,EAAe,UAAU,CAAA,CAAA,GAC3C,CAAA,EAAG,eAAe,eAAe,UAAU,CAAA,CAAA;AAE/C,UAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,UAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,YAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK,CAAE,MAAM,OAAO,EAAE,KAAA,EAAO,qBAAA,EAAsB,CAAE,CAAA;AAClF,YAAA,MAAM,IAAI,KAAA,CAAM,KAAA,CAAM,KAAA,IAAS,qBAAqB,CAAA;AAAA,UACtD;AAEA,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,UAAA,OAAO,IAAA,CAAK,KAAA;AAAA,QACd,CAAC,CAAA;AAAA,MACH;AAGA,MAAA,OAAA,CAAQ,EAAA,CAAG,aAAa,MAAM;AAC5B,QAAA,IAAA,CAAK,gBAAA,GAAmB,WAAA;AACxB,QAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,MAC7B,CAAC,CAAA;AAED,MAAA,OAAA,CAAQ,EAAA,CAAG,gBAAgB,MAAM;AAC/B,QAAA,IAAA,CAAK,gBAAA,GAAmB,cAAA;AACxB,QAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,MAC7B,CAAC,CAAA;AAED,MAAA,OAAA,CAAQ,EAAA,CAAG,SAAS,MAAM;AACxB,QAAA,IAAA,CAAK,gBAAA,GAAmB,OAAA;AACxB,QAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,MAC7B,CAAC,CAAA;AAED,MAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,MAAM;AACzB,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,QAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,MAC7B,CAAC,CAAA;AAGD,MAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AACnB,MAAA,IAAA,CAAK,aAAA,GAAgB,OAAA;AACrB,MAAA,IAAA,CAAK,gBAAA,GAAmB,YAAA;AAExB,MAAA,OAAA,CAAQ,OAAA,EAAQ;AAAA,IAClB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,qDAAqD,KAAK,CAAA;AACxE,MAAA,IAAA,CAAK,gBAAA,GAAmB,OAAA;AACxB,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,eAAA,GAAmC;AACrC,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAA,GAAoB;AACtB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,KAAK,YAAA,KAAiB,IAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAmB;AACjB,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,IAAA,CAAK,cAAc,UAAA,EAAW;AAC9B,MAAA,IAAA,CAAK,cAAc,MAAA,EAAO;AAC1B,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,MAAA,IAAA,CAAK,gBAAA,GAAmB,cAAA;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA,EAGQ,mBAAmB,IAAA,EAA6B;AACtD,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAI,OAAO,eAAe,WAAA,EAAa;AACrC,QAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,QAAA,MAAA,CAAO,SAAS,MAAM;AACpB,UAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,UAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACtC,UAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,QACpB,CAAA;AACA,QAAA,MAAA,CAAO,OAAA,GAAU,MAAA;AACjB,QAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,MAC3B,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,mFAAmF,CAAC,CAAA;AAAA,MACvG;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA,EAGQ,aAAA,CAAc,YAAoB,WAAA,EAA6B;AACrE,IAAA,OAAO,CAAA,KAAA,EAAQ,WAAW,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA;AAAA,EACjD;AAAA;AAAA,EAGQ,mBAAA,CAAoB,MAA6B,WAAA,EAA+B;AACtF,IAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,MAAA,EAAQ;AACtC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,OAAO,WAAA,CAAY,WAAW,QAAQ,CAAA;AAAA,IACxC;AACA,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,GAAA,EAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA,EAC3B;AAAA;AAAA,EAGA,SAAA,CAAU,KAAa,gBAAA,EAAqC;AAC1D,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,KAAA,uBAAY,IAAA,EAAK;AACvB,MAAA,OAAO,MAAM,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,MAAA,OAAO,IAAI,YAAA,EAAa,CAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,CAAM,WAAW,QAAA,EAAU;AAC7B,MAAA,MAAM,eAAA,GAAkB,gBAAA,oBAAoB,IAAI,GAAA,EAAY;AAC5D,MAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA,EAAG;AAC5B,QAAA,OAAO,KAAA,CAAM,KAAA;AAAA,MACf;AACA,MAAA,eAAA,CAAgB,IAAI,GAAG,CAAA;AACvB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,OAAiB,eAAe,CAAA;AACpE,MAAA,eAAA,CAAgB,OAAO,GAAG,CAAA;AAC1B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AAAA;AAAA,EAGA,eAAe,GAAA,EAAwC;AACrD,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,aAAa,EAAC;AAAA,QACd,UAAA,EAAY,CAAC,QAAA,EAAU,UAAA,EAAY,WAAW,CAAA;AAAA,QAC9C,MAAA,EAAQ,MAAA;AAAA;AAAA;AAAA,QAER,QAAA,EAAU,IAAA;AAAA,QACV,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,IAAA;AAAA,QACX,QAAA,EAAU,KAAA;AAAA,QACV,MAAM;AAAC,OACT;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,OAAO,KAAA,GAAQ,MAAM,UAAA,GAAa,MAAA;AAAA,EACpC;AAAA;AAAA,EAGA,SAAA,CAAU,GAAA,EAAa,KAAA,EAAY,UAAA,EAA2C;AAC5E,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAElC,IAAA,MAAM,YAAA,GAAe,eAAe,UAAA,CAAW,SAAA,IAAa,eAAe,UAAA,CAAW,UAAA,EAAY,SAAS,WAAW,CAAA;AAGtH,IAAA,MAAM,iBAAgC,aAAA,GAClC;AAAA,MACA,GAAG,aAAA,CAAc,UAAA;AAAA,MACjB,aAAa,CAAC,GAAI,cAAc,UAAA,CAAW,WAAA,IAAe,EAAG,CAAA;AAAA,MAC7D,YAAY,CAAC,GAAI,cAAc,UAAA,CAAW,UAAA,IAAc,EAAG,CAAA;AAAA,MAC3D,MAAM,CAAC,GAAI,cAAc,UAAA,CAAW,IAAA,IAAQ,EAAG,CAAA;AAAA,MAC/C,MAAA,EAAQ,aAAA,CAAc,UAAA,CAAW,MAAA,IAAU;AAAA,KAC7C,GACE;AAAA,MACA,GAAG,sBAAA;AAAA,MACH,aAAa,EAAC;AAAA;AAAA,MACd,UAAA,EAAY,CAAC,QAAQ,CAAA;AAAA;AAAA,MACrB,MAAM,EAAC;AAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAEF,IAAA,MAAM,kBAAkB,UAAA,GAAa,EAAE,GAAG,cAAA,EAAgB,GAAG,YAAW,GAAI,cAAA;AAG5E,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAIC,cAAa,CAAC,GAAI,eAAA,CAAgB,UAAA,IAAc,EAAG,CAAA;AAEvD,MAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,QAAA,IAAI,WAAW,QAAA,IAAY,CAACA,WAAAA,CAAW,QAAA,CAAS,UAAU,CAAA,EAAG;AAC3D,UAAAA,WAAAA,CAAW,KAAK,UAAU,CAAA;AAAA,QAC5B,CAAA,MAAA,IAAW,CAAC,UAAA,CAAW,QAAA,IAAY,CAAC,YAAA,EAAc;AAEhD,UAAAA,WAAAA,GAAaA,WAAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,MAAM,UAAU,CAAA;AAAA,QACtD;AAAA,MACF;AACA,MAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,QAAA,IAAI,WAAW,OAAA,IAAW,CAACA,WAAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,EAAG;AACxD,UAAAA,WAAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,QAC1B,CAAA,MAAA,IAAW,CAAC,UAAA,CAAW,OAAA,EAAS;AAC9B,UAAAA,WAAAA,GAAaA,WAAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,MAAM,QAAQ,CAAA;AAAA,QACpD;AAAA,MACF;AACA,MAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,QAAA,IAAI,WAAW,SAAA,IAAa,CAACA,WAAAA,CAAW,QAAA,CAAS,WAAW,CAAA,EAAG;AAC7D,UAAAA,WAAAA,CAAW,KAAK,WAAW,CAAA;AAAA,QAC7B,CAAA,MAAA,IAAW,CAAC,UAAA,CAAW,SAAA,IAAa,CAAC,YAAA,EAAc;AAEjD,UAAAA,WAAAA,GAAaA,WAAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,MAAM,WAAW,CAAA;AAAA,QACvD;AAEA,QAAA,IAAI,YAAA,IAAgB,CAACA,WAAAA,CAAW,QAAA,CAAS,WAAW,CAAA,EAAG;AACrD,UAAAA,WAAAA,CAAW,KAAK,WAAW,CAAA;AAAA,QAC7B;AAAA,MACF,WAAW,YAAA,EAAc;AAEvB,QAAA,IAAI,CAACA,WAAAA,CAAW,QAAA,CAAS,WAAW,CAAA,EAAG;AACrC,UAAAA,WAAAA,CAAW,KAAK,WAAW,CAAA;AAAA,QAC7B;AAAA,MACF;AACA,MAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,QAAA,IAAI,UAAA,CAAW,YAAY,CAAC,YAAA,IAAgB,CAACA,WAAAA,CAAW,QAAA,CAAS,UAAU,CAAA,EAAG;AAC5E,UAAAA,WAAAA,CAAW,KAAK,UAAU,CAAA;AAAA,QAC5B,CAAA,MAAA,IAAW,CAAC,UAAA,CAAW,QAAA,IAAY,YAAA,EAAc;AAE/C,UAAAA,WAAAA,GAAaA,WAAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,MAAM,UAAU,CAAA;AAAA,QACtD;AAAA,MACF;AACA,MAAA,eAAA,CAAgB,UAAA,GAAaA,WAAAA;AAAA,IAC/B,WAAW,YAAA,EAAc;AAEvB,MAAA,IAAIA,cAAa,CAAC,GAAI,eAAA,CAAgB,UAAA,IAAc,EAAG,CAAA;AACvD,MAAA,IAAI,CAACA,WAAAA,CAAW,QAAA,CAAS,WAAW,CAAA,EAAG;AACrC,QAAAA,WAAAA,CAAW,KAAK,WAAW,CAAA;AAAA,MAC7B;AACA,MAAA,IAAI,CAACA,WAAAA,CAAW,QAAA,CAAS,UAAU,CAAA,EAAG;AACpC,QAAAA,WAAAA,CAAW,KAAK,UAAU,CAAA;AAAA,MAC5B;AACA,MAAAA,WAAAA,GAAaA,WAAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,MAAM,UAAU,CAAA;AACpD,MAAA,eAAA,CAAgB,UAAA,GAAaA,WAAAA;AAAA,IAC/B;AAGA,IAAA,IAAI,UAAA,GAAa,eAAA,CAAgB,UAAA,IAAc,EAAC;AAEhD,IAAA,IAAI,YAAA,IAAgB,CAAC,UAAA,CAAW,QAAA,CAAS,WAAW,CAAA,EAAG;AACrD,MAAA,UAAA,GAAa,CAAC,GAAG,UAAA,EAAY,WAAW,CAAA;AAAA,IAC1C;AACA,IAAA,IAAI,UAAA,CAAW,QAAA,CAAS,WAAW,CAAA,EAAG;AACpC,MAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,UAAU,CAAA,EAAG;AACpC,QAAA,UAAA,GAAa,CAAC,GAAG,UAAA,EAAY,UAAU,CAAA;AAAA,MACzC;AACA,MAAA,UAAA,GAAa,UAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,UAAU,CAAA;AACpD,MAAA,eAAA,CAAgB,UAAA,GAAa,UAAA;AAAA,IAC/B;AAGA,IAAA,eAAA,CAAgB,QAAA,GAAW,UAAA,CAAW,QAAA,CAAS,UAAU,CAAA;AACzD,IAAA,eAAA,CAAgB,OAAA,GAAU,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA;AAEtD,IAAA,eAAA,CAAgB,SAAA,GAAY,YAAA,IAAgB,UAAA,CAAW,QAAA,CAAS,WAAW,CAAA;AAC3E,IAAA,eAAA,CAAgB,QAAA,GAAW,UAAA,CAAW,QAAA,CAAS,UAAU,CAAA;AAIzD,IAAA,IAAI,UAAA,IAAc,MAAA,IAAU,UAAA,IAAc,UAAA,CAAW,IAAA,EAAM;AACzD,MAAA,eAAA,CAAgB,WAAA,GAAc,CAAC,GAAG,UAAA,CAAW,IAAI,CAAA;AAAA,IACnD;AAEA,IAAA,eAAA,CAAgB,OAAO,CAAC,GAAI,eAAA,CAAgB,WAAA,IAAe,EAAG,CAAA;AAE9D,IAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI;AAAA,MACd,KAAA;AAAA,MACA,UAAA,EAAY;AAAA,KACd;AAEA,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,UAAU,GAAG,CAAA,CAAE,QAAQ,CAAA,QAAA,KAAY,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,IACzD;AACA,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,EAC7B;AAAA;AAAA;AAAA,EAIA,cAAA,CAAe,GAAA,EAAa,KAAA,EAAY,UAAA,EAAiC;AACvE,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAGvB,IAAA,MAAM,UAAA,GAA0B,UAAA,CAAW,UAAA,IAAc,EAAC;AAC1D,IAAA,IAAI,CAAC,WAAW,UAAA,EAAY;AAC1B,MAAA,IAAI,UAAA,CAAW,YAAY,KAAA,EAAO;AAChC,QAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,MAC1B;AACA,MAAA,IAAI,WAAW,QAAA,EAAU;AACvB,QAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA,MAC5B;AACA,MAAA,IAAI,WAAW,SAAA,EAAW;AACxB,QAAA,UAAA,CAAW,KAAK,WAAW,CAAA;AAAA,MAC7B;AACA,MAAA,IAAI,WAAW,QAAA,EAAU;AACvB,QAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA,MAC5B;AAAA,IACF;AACA,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,WAAA,IAAe,UAAA,CAAW,QAAQ,EAAC;AAElE,IAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI;AAAA,MACd,KAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACV,GAAG,UAAA;AAAA,QACH,WAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA,EAAQ,WAAW,MAAA,IAAU,CAAA;AAAA,QAC7B,IAAA,EAAM,WAAA;AAAA,QACN,QAAA,EAAU,UAAA,CAAW,QAAA,CAAS,UAAU,CAAA;AAAA,QACxC,OAAA,EAAS,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA;AAAA,QACrC,SAAA,EAAW,UAAA,CAAW,QAAA,CAAS,WAAW,CAAA;AAAA,QAC1C,QAAA,EAAU,UAAA,CAAW,QAAA,CAAS,UAAU;AAAA;AAC1C,KACF;AAEA,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,UAAU,GAAG,CAAA,CAAE,QAAQ,CAAA,QAAA,KAAY,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,IACzD;AAGA,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAE3B,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AAAA,EACzB;AAAA;AAAA,EAGA,cAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA,EAGA,kBAAkB,GAAA,EAAmB;AACnC,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAEvB,IAAA,IAAI,GAAA,IAAO,KAAK,GAAA,EAAK;AACnB,MAAA,OAAO,IAAA,CAAK,IAAI,GAAG,CAAA;AACnB,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACvB,QAAA,IAAA,CAAK,UAAU,GAAG,CAAA,CAAE,QAAQ,CAAA,QAAA,KAAY,QAAA,CAAS,MAAS,CAAC,CAAA;AAAA,MAC7D;AACA,MAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,IAC7B;AAEA,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AAAA,EACzB;AAAA;AAAA,EAGA,gBAAA,GAAyB;AACvB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,IAAA,IAAA,CAAK,MAAM,EAAC;AACZ,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AAAA,EACzB;AAAA;AAAA,EAGA,cAAA,CAAe,KAAa,UAAA,EAA6C;AACvE,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,UAAA,CAAW,SAAA,IAAa,MAAM,UAAA,CAAW,UAAA,EAAY,SAAS,WAAW,CAAA;AAGpG,IAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAY,YAAY,WAAA,EAAa,GAAG,mBAAkB,GAAI,UAAA;AAGjF,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,cAAc,iBAAA,EAAmB;AACnC,QAAA,OAAQ,iBAAA,CAA0B,QAAA;AAAA,MACpC;AACA,MAAA,IAAI,cAAc,iBAAA,EAAmB;AACnC,QAAA,OAAQ,iBAAA,CAA0B,QAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,aAAa,EAAE,GAAG,KAAA,CAAM,UAAA,EAAY,GAAG,iBAAA,EAAkB;AAG/D,IAAA,IAAI,UAAA,IAAc,UAAA,IAAc,SAAA,IAAa,UAAA,IAAc,cAAc,UAAA,EAAY;AACnF,MAAA,IAAI,gBAA6B,EAAC;AAClC,MAAA,IAAI,KAAA,CAAM,WAAW,QAAA,EAAU;AAC7B,QAAA,aAAA,CAAc,KAAK,UAAU,CAAA;AAAA,MAC/B;AACA,MAAA,IAAI,KAAA,CAAM,WAAW,OAAA,EAAS;AAC5B,QAAA,aAAA,CAAc,KAAK,QAAQ,CAAA;AAAA,MAC7B;AACA,MAAA,IAAI,KAAA,CAAM,WAAW,QAAA,EAAU;AAC7B,QAAA,aAAA,CAAc,KAAK,UAAU,CAAA;AAAA,MAC/B;AAEA,MAAA,IAAI,YAAA,IAAgB,KAAA,CAAM,UAAA,CAAW,SAAA,EAAW;AAC9C,QAAA,aAAA,CAAc,KAAK,WAAW,CAAA;AAAA,MAChC;AAGA,MAAA,IAAI,aAAA,CAAc,QAAA,CAAS,WAAW,CAAA,EAAG;AACvC,QAAA,IAAI,CAAC,aAAA,CAAc,QAAA,CAAS,UAAU,CAAA,EAAG;AACvC,UAAA,aAAA,CAAc,KAAK,UAAU,CAAA;AAAA,QAC/B;AACA,QAAA,aAAA,GAAgB,aAAA,CAAc,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,UAAU,CAAA;AAC1D,QAAA,KAAA,CAAM,WAAW,QAAA,GAAW,IAAA;AAC5B,QAAA,KAAA,CAAM,WAAW,QAAA,GAAW,KAAA;AAAA,MAC9B;AAEA,MAAA,KAAA,CAAM,WAAW,UAAA,GAAa,aAAA;AAAA,IAChC,WAAW,YAAA,EAAc;AAEvB,MAAA,IAAI,aAAa,CAAC,GAAI,MAAM,UAAA,CAAW,UAAA,IAAc,EAAG,CAAA;AACxD,MAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,WAAW,CAAA,EAAG;AACrC,QAAA,UAAA,CAAW,KAAK,WAAW,CAAA;AAAA,MAC7B;AACA,MAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,UAAU,CAAA,EAAG;AACpC,QAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA,MAC5B;AACA,MAAA,UAAA,GAAa,UAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,UAAU,CAAA;AACpD,MAAA,KAAA,CAAM,WAAW,UAAA,GAAa,UAAA;AAAA,IAChC;AAGA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,KAAA,CAAM,WAAW,SAAA,GAAY,IAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,UAAA,EAAY,QAAA,CAAS,WAAW,CAAA,EAAG;AACvD,QAAA,KAAA,CAAM,UAAA,CAAW,aAAa,CAAC,GAAI,MAAM,UAAA,CAAW,UAAA,IAAc,EAAC,EAAI,WAAW,CAAA;AAAA,MACpF;AACA,MAAA,KAAA,CAAM,WAAW,QAAA,GAAW,IAAA;AAC5B,MAAA,KAAA,CAAM,WAAW,QAAA,GAAW,KAAA;AAAA,IAC9B;AAGA,IAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,MAAA,KAAA,CAAM,UAAA,CAAW,OAAO,CAAC,GAAI,MAAM,UAAA,CAAW,WAAA,IAAe,EAAG,CAAA;AAAA,IAClE;AAEA,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,GAAA,CAAI,KAAa,KAAA,EAAkB;AACjC,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,QAAA,CAAS,GAAA,EAAa,IAAA,EAAY,UAAA,EAAoD;AAC1F,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,kBAAA,CAAmB,IAAI,CAAA;AACrD,IAAA,MAAM,cAAc,IAAA,CAAK,IAAA;AAEzB,IAAA,MAAM,cAAA,GAAyC;AAAA,MAC7C,IAAA,EAAM,WAAA,CAAY,UAAA,CAAW,QAAQ,IAAI,OAAA,GAAU,MAAA;AAAA,MACnD,WAAA;AAAA,MACA,GAAG;AAAA,KACL;AAEA,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,cAAc,CAAA;AAAA,EAChD;AAAA,EAEA,WAAW,GAAA,EAAa,UAAA,EAAoB,WAAA,EAAqB,IAAA,GAAyB,QAAQ,UAAA,EAA2C;AAC3I,IAAA,IAAI,CAAC,IAAA,CAAK,mBAAA,CAAoB,IAAA,EAAM,WAAW,CAAA,EAAG;AAChD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,WAAW,CAAA,UAAA,EAAa,IAAI,CAAA,CAAE,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,cAAA,GAAyC;AAAA,MAC7C,IAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG;AAAA,KACL;AAEA,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,cAAc,CAAA;AAAA,EAChD;AAAA,EAEA,SAAA,CAAU,GAAA,EAAa,UAAA,EAAoB,WAAA,GAAsB,cAAc,UAAA,EAA2C;AACxH,IAAA,IAAI,CAAC,WAAA,CAAY,UAAA,CAAW,QAAQ,CAAA,EAAG;AACrC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,WAAW,CAAA,0BAAA,CAA4B,CAAA;AAAA,IACxF;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,EAAK,UAAA,EAAY,WAAA,EAAa,SAAS,UAAU,CAAA;AACjE,IAAA,IAAA,CAAK,eAAe,GAAA,EAAK;AAAA,MACvB,IAAA,EAAM,OAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,aAAa,GAAA,EAAiC;AAC5C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,SAAU,KAAA,CAAM,UAAA,CAAW,SAAS,OAAA,IAAW,KAAA,CAAM,UAAA,CAAW,IAAA,KAAS,MAAA,EAAS;AACrF,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,WAAA,EAAa;AACjC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAK,aAAA,CAAc,KAAA,CAAM,KAAA,EAAiB,KAAA,CAAM,WAAW,WAAW,CAAA;AAAA,EAC/E;AAAA,EAEA,WAAW,GAAA,EAAiC;AAC1C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,SAAU,KAAA,CAAM,UAAA,CAAW,SAAS,OAAA,IAAW,KAAA,CAAM,UAAA,CAAW,IAAA,KAAS,MAAA,EAAS;AACrF,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AAAA,EAEA,IAAI,GAAA,EAAsB;AACxB,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,OAAO,IAAA,CAAK,GAAA;AAAA,EACrB;AAAA,EAEA,OAAO,GAAA,EAAsB;AAC3B,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,EAAE,GAAA,IAAO,IAAA,CAAK,GAAA,CAAA,EAAM;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AACnC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACvB,QAAA,IAAA,CAAK,UAAU,GAAG,CAAA,CAAE,QAAQ,CAAA,QAAA,KAAY,QAAA,CAAS,MAAS,CAAC,CAAA;AAAA,MAC7D;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,MAAM,EAAC;AACZ,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,GAA0B;AAChC,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAG,EAC3B,IAAA,CAAK,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,EAAG,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AACxC,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,MAAA,IAAU,CAAA;AAC5C,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,MAAA,IAAU,CAAA;AAC5C,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,OAAO,OAAA,GAAU,OAAA;AAAA,MACnB;AACA,MAAA,OAAO,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,IAChC,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAA;AAAA,EACvB;AAAA,EAEA,IAAA,GAAiB;AACf,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,aAAA,EAAc,EAAG,SAAS,OAAO,CAAA;AAAA,EACnD;AAAA,EAEA,MAAA,GAAgB;AACd,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,MAAM,SAAA,GAAY,WAAW,GAAA,CAAI,CAAA,GAAA,KAAO,KAAK,GAAA,CAAI,GAAG,EAAE,KAAK,CAAA;AAC3D,IAAA,OAAO;AAAA,MACL,GAAG,SAAA;AAAA,MACH,IAAI,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,MAC9B,IAAI,YAAA,EAAa,CAAE,KAAA,CAAM,GAAG,EAAE,CAAC;AAAA,KACjC;AAAA,EACF;AAAA,EAEA,OAAA,GAA2B;AACzB,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,MAAM,aAAa,UAAA,CAAW,GAAA;AAAA,MAAI,SAChC,CAAC,GAAA,EAAK,KAAK,GAAA,CAAI,GAAG,EAAE,KAAK;AAAA,KAC3B;AACA,IAAA,OAAO;AAAA,MACL,GAAG,UAAA;AAAA,MACH,CAAC,SAAS,GAAA,CAAI,WAAA,GAAc,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,MACzC,CAAC,SAAS,GAAA,CAAI,YAAA,GAAe,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC;AAAA,KAC5C;AAAA,EACF;AAAA,EAEA,IAAA,GAAe;AACb,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,GAAG,EAAE,MAAA,GAAS,CAAA;AAAA,EACxC;AAAA,EAEA,MAAA,GAA8B;AAC5B,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,SAA8B,EAAC;AAErC,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,UAAA,CAAW,QAAQ,CAAA,GAAA,KAAO;AACxB,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,CAAE,KAAA;AAAA,IAC9B,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,OAAO,IAAI,GAAA,CAAI,WAAA,GAAc,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAChD,IAAA,MAAA,CAAO,OAAO,IAAI,GAAA,CAAI,YAAA,GAAe,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAEjD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,EAAsC;AAC3C,IAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAClD,MAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,QAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI;AAAA,UACd,KAAA;AAAA,UACA,UAAA,EAAY,EAAE,GAAG,sBAAA;AAAuB,SAC1C;AAEA,QAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACvB,UAAA,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,QAAA,KAAY,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,QACxE;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,EAC7B;AAAA,EAEA,SAAA,CAAU,KAAa,QAAA,EAA0B;AAC/C,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,GAAI,EAAC;AAAA,IACzB;AACA,IAAA,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,CAAE,IAAA,CAAK,QAAQ,CAAA;AAAA,EACnC;AAAA,EAEA,WAAA,CAAY,KAAa,QAAA,EAA0B;AACjD,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,QAAQ,CAAA;AAAA,IACtE;AAAA,EACF;AAAA,EAEA,eAAe,QAAA,EAAgC;AAC7C,IAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,QAAQ,CAAA;AAAA,EACpC;AAAA,EAEA,mBAAmB,QAAA,EAAgC;AACjD,IAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,CAAA,CAAA,KAAK,MAAM,QAAQ,CAAA;AAAA,EACxE;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,CAAA,QAAA,KAAY,QAAA,EAAU,CAAA;AAAA,EACrD;AAAA,EAEA,SAAA,CAAU,UAAkB,gBAAA,EAAwC;AAClE,IAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,EAAW;AAC/C,MAAA,OAAO,OAAO,QAAQ,CAAA;AAAA,IACxB;AAEA,IAAA,MAAM,WAAA,GAAc,OAAO,QAAQ,CAAA;AACnC,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,KAAA,CAAM,mBAAmB,CAAA;AAElD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,GAAA,KAAO,IAAI,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAA;AAE1D,IAAA,MAAM,WAAA,GAAsC,SAAA,CAAU,MAAA,CAAO,CAAC,KAAK,GAAA,KAAQ;AACzE,MAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,QAAA,OAAO;AAAA,UACL,GAAG,GAAA;AAAA,UACH,CAAC,GAAG,GAAG,IAAA,CAAK,SAAA,CAAU,KAAK,gBAAgB;AAAA,SAC7C;AAAA,MACF;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA;AAC1C,MAAA,IAAI,gBAAA,IAAqB,UAAA,IAAc,UAAA,CAAW,OAAA,EAAU;AAC1D,QAAA,IAAI,eAAe,UAAA,CAAW,IAAA,KAAS,OAAA,IAAW,UAAA,CAAW,SAAS,MAAA,CAAA,EAAS;AAC7E,UAAA,OAAO,GAAA;AAAA,QACT;AAEA,QAAA,OAAO;AAAA,UACL,GAAG,GAAA;AAAA,UACH,CAAC,GAAG,GAAG,IAAA,CAAK,SAAA,CAAU,KAAK,gBAAgB;AAAA,SAC7C;AAAA,MACF;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,OAAO,WAAA,CAAY,OAAA,CAAQ,mBAAA,EAAqB,CAAC,OAAO,GAAA,KAAQ;AAC9D,MAAA,IAAI,WAAA,CAAY,GAAG,CAAA,KAAM,MAAA,EAAW;AAClC,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA;AAC1C,MAAA,IAAI,eAAe,UAAA,CAAW,IAAA,KAAS,OAAA,IAAW,UAAA,CAAW,SAAS,MAAA,CAAA,EAAS;AAC7E,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,OAAO,EAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,UAAgC,EAAC;AAEvC,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,UAAA,CAAW,QAAQ,CAAA,GAAA,KAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,IAAI,KAAA,CAAM,WAAW,OAAA,EAAS;AAC5B,QAAA,OAAA,CAAQ,KAAK,CAAC,GAAA,EAAK,KAAK,SAAA,CAAU,GAAG,CAAC,CAAC,CAAA;AAAA,MACzC;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,OAAA,EAAS,GAAA,CAAI,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AACvD,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,OAAA,EAAS,GAAA,CAAI,YAAA,EAAa,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAExD,IAAA,OAAO,OAAA,CACJ,GAAA,CAAI,CAAC,CAAC,KAAK,KAAK,CAAA,KAAM,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA,CACxC,KAAK,IAAI,CAAA;AAAA,EACd;AAAA,EAEA,YAAA,GAAoC;AAClC,IAAA,OAAO,KAAK,MAAA,EAAO;AAAA,EACrB;AAAA,EAEA,YAAA,GAAqF;AACnF,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,UAAgF,EAAC;AAEvF,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,UAAA,CAAW,QAAQ,CAAA,GAAA,KAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,IAAI,KAAA,CAAM,WAAW,OAAA,EAAS;AAC5B,QAAA,MAAM,cAAA,GAAiB,MAAM,UAAA,CAAW,QAAA,GAAW,KAAK,SAAA,CAAU,GAAG,IAAI,KAAA,CAAM,KAAA;AAE/E,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,GAAA;AAAA,UACA,KAAA,EAAO,cAAA;AAAA,UACP,IAAA,EAAM,MAAM,UAAA,CAAW,IAAA;AAAA,UACvB,WAAA,EAAa,MAAM,UAAA,CAAW;AAAA,SAC/B,CAAA;AAAA,MACH;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,GAAA,EAAK,OAAA;AAAA,MACL,OAAO,GAAA,CAAI,WAAA,GAAc,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,MACrC,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,GAAA,EAAK,OAAA;AAAA,MACL,OAAO,GAAA,CAAI,YAAA,GAAe,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,MACtC,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,gBAAA,GAA+F;AAC7F,IAAA,MAAM,aAAyF,EAAC;AAEhG,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,UAAA,CAAW,QAAQ,CAAA,GAAA,KAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,IAAI,KAAA,CAAM,WAAW,OAAA,IAAW,KAAA,CAAM,WAAW,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,UAAA,CAAW,WAAA,EAAa;AACjG,QAAA,MAAM,UAAU,IAAA,CAAK,aAAA,CAAc,MAAM,KAAA,EAAiB,KAAA,CAAM,WAAW,WAAW,CAAA;AACtF,QAAA,UAAA,CAAW,IAAA,CAAK;AAAA,UACd,IAAA,EAAM,MAAA;AAAA,UACN,SAAA,EAAW,MAAM,UAAA,CAAW,WAAA;AAAA,UAC5B,GAAA,EAAK,OAAA;AAAA,UACL,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,SAAA,EAAW,CAAA;AAAA,EACxC;AAAA,EAEA,SAAS,UAAA,EAA0B;AACjC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AAClC,MAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,IACvB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,KAAK,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,SAAA,GAAsC;AACpC,IAAA,MAAM,SAAmC,EAAC;AAE1C,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,UAAA,CAAW,QAAQ,CAAA,GAAA,KAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,SAAA,EAAW;AAC/B,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,UACZ,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,UAAA,EAAY,EAAE,GAAG,KAAA,CAAM,UAAA;AAAW,SACpC;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,YAAY,IAAA,EAAsC;AAChD,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,MAAA,IAAA,CAAK,KAAA,EAAM;AAEX,MAAA,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC7C,QAAA,IAAI,SAAS,OAAO,KAAA,KAAU,YAAY,OAAA,IAAW,KAAA,IAAS,gBAAgB,KAAA,EAAO;AACnF,UAAA,MAAM,QAAQ,KAAA,CAAM,UAAA;AAGpB,UAAA,IAAI,MAAM,SAAA,KAAc,IAAA,IAAQ,MAAM,UAAA,EAAY,QAAA,CAAS,WAAW,CAAA,EAAG;AACvE,YAAA;AAAA,UACF;AAGA,UAAA,IAAI,UAAA,GAA0B,KAAA,CAAM,UAAA,IAAc,EAAC;AACnD,UAAA,IAAI,CAAC,MAAM,UAAA,EAAY;AACrB,YAAA,UAAA,GAAa,EAAC;AACd,YAAA,IAAI,KAAA,CAAM,YAAY,KAAA,EAAO;AAC3B,cAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,YAC1B;AACA,YAAA,IAAI,MAAM,QAAA,EAAU;AAClB,cAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA,YAC5B;AACA,YAAA,IAAI,MAAM,SAAA,EAAW;AACnB,cAAA,UAAA,CAAW,KAAK,WAAW,CAAA;AAAA,YAC7B;AACA,YAAA,IAAI,MAAM,QAAA,EAAU;AAClB,cAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA,YAC5B;AAAA,UACF;AAGA,UAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,QAAQ,EAAC;AAExD,UAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI;AAAA,YACd,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,UAAA,EAAY;AAAA,cACV,GAAG,KAAA;AAAA,cACH,WAAA;AAAA,cACA,UAAA;AAAA,cACA,MAAA,EAAQ,MAAM,MAAA,IAAU,CAAA;AAAA;AAAA,cAExB,IAAA,EAAM,WAAA;AAAA,cACN,QAAA,EAAU,UAAA,CAAW,QAAA,CAAS,UAAU,CAAA;AAAA,cACxC,OAAA,EAAS,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA;AAAA,cACrC,SAAA,EAAW,UAAA,CAAW,QAAA,CAAS,WAAW,CAAA;AAAA,cAC1C,QAAA,EAAU,UAAA,CAAW,QAAA,CAAS,UAAU;AAAA;AAC1C,WACF;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,iBAAA,GAA4B;AAC1B,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,cAAwB,EAAC;AAE/B,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,UAAA,CAAW,QAAQ,CAAA,GAAA,KAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,IAAI,KAAA,CAAM,WAAW,OAAA,EAAS;AAC5B,QAAA,IAAI,KAAA,CAAM,UAAA,CAAW,IAAA,KAAS,OAAA,EAAS;AACrC,UAAA,WAAA,CAAY,IAAA,CAAK,CAAA,MAAA,EAAS,GAAG,CAAA,UAAA,CAAY,CAAA;AACzC,UAAA;AAAA,QACF;AACA,QAAA,IAAI,KAAA,CAAM,UAAA,CAAW,IAAA,KAAS,MAAA,EAAQ;AACpC,UAAA,IAAI,KAAA,CAAM,WAAW,QAAA,EAAU;AAC7B,YAAA,WAAA,CAAY,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,MAAM,UAAA,CAAW,IAAA,CAAK,WAAA,EAAa,CAAA,IAAA,EAAO,KAAA,CAAM,UAAA,CAAW,WAAA,IAAe,gBAAgB,CAAA,CAAE,CAAA;AAAA,UAC3H,CAAA,MAAO;AACL,YAAA,MAAM,YAAA,GAAe,GAAA,CAAI,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAA;AACvD,YAAA,WAAA,CAAY,IAAA,CAAK,GAAG,GAAG,CAAA,GAAA,EAAM,MAAM,UAAA,CAAW,IAAA,CAAK,aAAa,CAAA,IAAA,EAAO,MAAM,UAAA,CAAW,WAAA,IAAe,gBAAgB,CAAA,sBAAA,EAAyB,KAAA,CAAM,WAAW,IAAI,CAAA,iBAAA,EAAoB,YAAY,CAAA,MAAA,CAAQ,CAAA;AAAA,UAC/M;AACA,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA;AAChC,QAAA,MAAM,cAAA,GAAiB,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,GAC1D,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GACpB,MAAA,CAAO,KAAK,CAAA;AAEhB,QAAA,IAAI,KAAA,CAAM,WAAW,QAAA,EAAU;AAC7B,UAAA,WAAA,CAAY,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,cAAc,CAAA,CAAE,CAAA;AAAA,QAC9C,CAAA,MAAO;AACL,UAAA,MAAM,YAAA,GAAe,GAAA,CAAI,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAA;AACvD,UAAA,MAAM,kBACJ,CAAA,iBAAA,EAAoB,GAAG,CAAA,qBAAA,EAAwB,YAAY,mFAEvD,cAAc,CAAA,CAAA,CAAA;AACpB,UAAA,WAAA,CAAY,KAAK,CAAA,EAAG,GAAG,KAAK,cAAc,CAAA,EAAA,EAAK,eAAe,CAAA,CAAE,CAAA;AAAA,QAClE;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,WAAA,CAAY,IAAA,CAAK,CAAA,OAAA,EAAU,GAAA,CAAI,WAAA,EAAY,CAAE,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,CAAA;AAC5D,IAAA,WAAA,CAAY,IAAA,CAAK,CAAA,OAAA,EAAU,GAAA,CAAI,YAAA,EAAa,CAAE,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,CAAA;AAE7D,IAAA,OAAO,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEQ,oBAAoB,QAAA,EAAsC;AAChE,IAAA,IAAI,CAAC,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,EAAG;AAClC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAClD,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,OAAO,UAAA,CAAW,IAAA;AAAA,MAAK,CAAA,CAAA,KACrB,CAAA,CAAE,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAA,KAAM;AAAA,KACxC;AAAA,EACF;AAAA,EAEA,eAAA,GAAuC;AACrC,IAAA,MAAM,QAA6B,EAAC;AAEpC,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,MAAA,CAAO,CAAA,GAAA,KAAO;AAC5C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,OAAO,CAAC,MAAM,UAAA,CAAW,QAAA;AAAA,IAC3B,CAAC,CAAA;AAED,IAAA,YAAA,CAAa,QAAQ,CAAA,GAAA,KAAO;AAC1B,MAAA,MAAM,YAAA,GAAe,GAAA,CAAI,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAA;AACvD,MAAA,MAAM,QAAA,GAAW,SAAS,YAAY,CAAA,CAAA;AAEtC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,MAAM,OAAA,GAAU,KAAA,EAAO,UAAA,CAAW,IAAA,IAAQ,MAAA;AAE1C,MAAA,IAAI,WAAA;AACJ,MAAA,IAAI,WAAA,GAAc,iCAAiC,GAAG,CAAA,CAAA;AAEtD,MAAA,IAAI,OAAA,KAAY,OAAA,IAAW,OAAA,KAAY,MAAA,EAAQ;AAC7C,QAAA,WAAA,IAAe,gCAAA;AACf,QAAA,WAAA,GAAcC,MAAE,MAAA,CAAO;AAAA,UACrB,OAAOA,KAAA,CAAE,MAAA,GAAS,QAAA,CAAS,CAAA,wBAAA,EAA2B,GAAG,CAAA,CAAE,CAAA;AAAA,UAC3D,WAAA,EAAaA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,CAAS,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAE;AAAA,SAC3E,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,YAAY,MAAA,EAAQ;AAC7B,QAAA,WAAA,IAAe,wBAAA;AACf,QAAA,WAAA,GAAcA,MAAE,MAAA,CAAO;AAAA,UACrB,OAAOA,KAAA,CAAE,MAAA,GAAS,QAAA,CAAS,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAE;AAAA,SAC1D,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,WAAA,GAAcA,MAAE,MAAA,CAAO;AAAA,UACrB,OAAOA,KAAA,CAAE,MAAA,GAAS,QAAA,CAAS,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE;AAAA,SAC/D,CAAA;AAAA,MACH;AAEA,MAAA,KAAA,CAAM,QAAQ,CAAA,GAAI;AAAA,QAChB,WAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA,EAAS,OAAO,KAAA,KAAgD;AAC9D,UAAA,IAAI,OAAA,KAAY,OAAA,IAAW,OAAA,KAAY,MAAA,EAAQ;AAC7C,YAAA,IAAI,MAAM,WAAA,EAAa;AACrB,cAAA,IAAA,CAAK,WAAW,GAAA,EAAK,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,aAAa,OAAO,CAAA;AAAA,YAC9D,CAAA,MAAO;AACL,cAAA,MAAM,mBAAA,GAAsB,OAAO,UAAA,CAAW,WAAA;AAC9C,cAAA,IAAI,mBAAA,EAAqB;AACvB,gBAAA,IAAA,CAAK,UAAA,CAAW,GAAA,EAAK,KAAA,CAAM,KAAA,EAAO,qBAAqB,OAAO,CAAA;AAAA,cAChE,CAAA,MAAO;AACL,gBAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,OAAO,CAAA,KAAA,CAAO,CAAA;AAAA,cAC7D;AAAA,YACF;AAAA,UACF,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,KAAA,CAAM,KAAK,CAAA;AAAA,UACjC;AAEA,UAAA,IAAI,aAAA;AACJ,UAAA,IAAI,YAAY,OAAA,EAAS;AACvB,YAAA,aAAA,GAAgB,+BAA+B,GAAG,CAAA,CAAA;AAAA,UACpD,CAAA,MAAA,IAAW,YAAY,MAAA,EAAQ;AAC7B,YAAA,aAAA,GAAgB,8BAA8B,GAAG,CAAA,CAAA;AAAA,UACnD,CAAA,MAAA,IAAW,YAAY,MAAA,EAAQ;AAC7B,YAAA,aAAA,GAAgB,mCAAmC,GAAG,CAAA,CAAA;AAAA,UACxD,CAAA,MAAO;AACL,YAAA,aAAA,GAAgB,CAAA,oBAAA,EAAuB,KAAA,CAAM,KAAK,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA;AAAA,UAC/D;AAEA,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,aAAA;AAAA,YACR,GAAA;AAAA,YACA,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,IAAA,EAAM,OAAA;AAAA,YACN,aAAa,KAAA,CAAM,WAAA;AAAA,YACnB;AAAA,WACF;AAAA,QACF;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,eAAA,CACE,UACA,KAAA,EACoD;AACpD,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AACrD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA;AAClC,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,UAAA,CAAW,QAAA,EAAU;AACtC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,SAAA,CAAU,aAAa,KAAK,CAAA;AACjC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,CAAA,oBAAA,EAAuB,KAAK,CAAA,KAAA,EAAQ,WAAW,CAAA,CAAA;AAAA,MACvD,GAAA,EAAK,WAAA;AAAA,MACL;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAA,CAAO,KAAa,GAAA,EAAsB;AACxC,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,WAAA,EAAa;AACjC,MAAA,KAAA,CAAM,UAAA,CAAW,cAAc,EAAC;AAAA,IAClC;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA,EAAG;AAC/C,MAAA,KAAA,CAAM,UAAA,CAAW,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA;AAErC,MAAA,KAAA,CAAM,WAAW,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,WAAW,WAAW,CAAA;AACxD,MAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,CAAU,KAAa,GAAA,EAAsB;AAC3C,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,WAAW,WAAA,EAAa;AAC3C,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,UAAA,CAAW,WAAA,CAAY,QAAQ,GAAG,CAAA;AACzD,IAAA,IAAI,WAAW,EAAA,EAAI;AACjB,MAAA,KAAA,CAAM,UAAA,CAAW,WAAA,CAAY,MAAA,CAAO,QAAA,EAAU,CAAC,CAAA;AAE/C,MAAA,KAAA,CAAM,WAAW,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,WAAW,WAAW,CAAA;AACxD,MAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,GAAA,EAAuB;AAC7B,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,OAAO,KAAA,EAAO,UAAA,CAAW,WAAA,IAAe,EAAC;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAuB;AACrB,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAEhC,IAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,QAAQ,CAAA,KAAA,KAAS;AACvC,MAAA,IAAI,KAAA,CAAM,WAAW,WAAA,EAAa;AAChC,QAAA,KAAA,CAAM,WAAW,WAAA,CAAY,OAAA,CAAQ,SAAO,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MAC9D;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,CAAO,KAAa,GAAA,EAAsB;AACxC,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,OAAO,KAAA,EAAO,UAAA,CAAW,WAAA,EAAa,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,GAAA,EAAqB;AAC7B,IAAA,MAAM,UAAgC,EAAC;AAEvC,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,UAAA,CAAW,QAAQ,CAAA,GAAA,KAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,IAAI,KAAA,CAAM,UAAA,CAAW,WAAA,EAAa,QAAA,CAAS,GAAG,CAAA,EAAG;AAC/C,QAAA,OAAA,CAAQ,KAAK,CAAC,GAAA,EAAK,KAAK,SAAA,CAAU,GAAG,CAAC,CAAC,CAAA;AAAA,MACzC;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,OAAA,CACJ,GAAA,CAAI,CAAC,CAAC,KAAK,KAAK,CAAA,KAAM,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA,CACxC,KAAK,IAAI,CAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,GAAA,EAAuB;AAClC,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,OAAO,UAAA,CAAW,OAAO,CAAA,GAAA,KAAO;AAC9B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,OAAO,KAAA,CAAM,UAAA,CAAW,WAAA,EAAa,QAAA,CAAS,GAAG,CAAA;AAAA,IACnD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAA,CAAa,KAAa,GAAA,EAAyB;AACjD,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,OAAA,CAAQ,KAAK,sDAAsD,CAAA;AACnE,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,UAAA,EAAY;AAChC,MAAA,KAAA,CAAM,UAAA,CAAW,aAAa,EAAC;AAAA,IACjC;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9C,MAAA,KAAA,CAAM,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAEpC,MAAA,IAAA,CAAK,yBAAyB,KAAK,CAAA;AACnC,MAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,CAAgB,KAAa,GAAA,EAAyB;AACpD,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,OAAA,CAAQ,KAAK,yDAAyD,CAAA;AACtE,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,WAAW,UAAA,EAAY;AAC1C,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,WAAA,GAAc,MAAM,UAAA,CAAW,SAAA,IAAa,MAAM,UAAA,CAAW,UAAA,CAAW,SAAS,WAAW,CAAA;AAClG,IAAA,IAAI,GAAA,KAAQ,eAAe,WAAA,EAAa;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,UAAA,CAAW,UAAA,CAAW,QAAQ,GAAG,CAAA;AACxD,IAAA,IAAI,WAAW,EAAA,EAAI;AACjB,MAAA,KAAA,CAAM,UAAA,CAAW,UAAA,CAAW,MAAA,CAAO,QAAA,EAAU,CAAC,CAAA;AAE9C,MAAA,IAAA,CAAK,yBAAyB,KAAK,CAAA;AAEnC,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,UAAA,CAAW,QAAA,CAAS,WAAW,CAAA,EAAG;AACtD,UAAA,KAAA,CAAM,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA;AAAA,QAC9C;AACA,QAAA,KAAA,CAAM,WAAW,SAAA,GAAY,IAAA;AAC7B,QAAA,KAAA,CAAM,WAAW,QAAA,GAAW,IAAA;AAC5B,QAAA,KAAA,CAAM,WAAW,QAAA,GAAW,KAAA;AAAA,MAC9B;AACA,MAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,GAAA,EAA0B;AACtC,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,OAAA,CAAQ,KAAK,uDAAuD,CAAA;AACpE,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,OAAO,KAAA,EAAO,UAAA,CAAW,UAAA,IAAc,EAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,CAAa,KAAa,GAAA,EAAyB;AACjD,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,OAAA,CAAQ,KAAK,sDAAsD,CAAA;AACnE,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,OAAO,KAAA,EAAO,UAAA,CAAW,UAAA,EAAY,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,CAAc,KAAa,IAAA,EAA4B;AACrD,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,OAAA,CAAQ,KAAK,uDAAuD,CAAA;AACpE,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAA,EAAS;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,CAAM,UAAA,CAAW,UAAA,GAAa,CAAC,GAAG,IAAI,CAAA;AAEtC,IAAA,IAAA,CAAK,yBAAyB,KAAK,CAAA;AACnC,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,GAAA,EAA0B;AAC3C,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,OAAA,CAAQ,KAAK,4DAA4D,CAAA;AACzE,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,OAAO,UAAA,CAAW,OAAO,CAAA,GAAA,KAAO;AAC9B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,OAAO,KAAA,CAAM,UAAA,CAAW,UAAA,EAAY,QAAA,CAAS,GAAG,CAAA;AAAA,IAClD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,yBAAyB,KAAA,EAAuB;AACtD,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,CAAW,UAAA,IAAc,EAAC;AAC7C,IAAA,KAAA,CAAM,UAAA,CAAW,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA;AACpD,IAAA,KAAA,CAAM,UAAA,CAAW,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACjD,IAAA,KAAA,CAAM,UAAA,CAAW,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AACtD,IAAA,KAAA,CAAM,UAAA,CAAW,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA;AAAA,EACtD;AAAA,EAEA,UAAA,GAAqB;AACnB,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,MAAM,kBAMD,EAAC;AACN,IAAA,IAAI,eAAA,GAAkB,CAAA;AAEtB,IAAA,KAAA,CAAM,KAAK,wBAAwB,CAAA;AACnC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,GAAA,CAAI,WAAA,EAAY,CAAE,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,CAAA;AAC5D,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,gBAAgB,CAAA;AAC3B,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,IAAA,MAAM,UAAA,GAAa,KAAK,aAAA,EAAc;AACtC,IAAA,UAAA,CAAW,QAAQ,CAAA,GAAA,KAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,IAAI,KAAA,CAAM,WAAW,SAAA,EAAW;AAC9B,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,GAAG,CAAA,CAAE,CAAA;AACvB,MAAA,MAAM,SAAA,GAAa,KAAA,CAAM,UAAA,CAAW,IAAA,IAAS,KAAA,CAAM,WAAW,IAAA,KAAiB,WAAA,GAAe,KAAA,CAAM,UAAA,CAAW,IAAA,GAAO,MAAA;AACtH,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,cAAA,EAAiB,SAAS,CAAA,EAAA,CAAI,CAAA;AACzC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,KAAA,CAAM,UAAA,CAAW,QAAQ,CAAA,EAAA,CAAI,CAAA;AAC7D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,iBAAA,EAAoB,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA,EAAA,CAAI,CAAA;AAC3D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,KAAA,CAAM,UAAA,CAAW,QAAQ,CAAA,EAAA,CAAI,CAAA;AAC7D,MAAA,KAAA,CAAM,KAAK,CAAA,iBAAA,EAAoB,KAAA,CAAM,UAAA,CAAW,MAAA,IAAU,CAAC,CAAA,EAAA,CAAI,CAAA;AAE/D,MAAA,IAAI,MAAM,UAAA,CAAW,IAAA,IAAQ,MAAM,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA,EAAG;AAC7D,QAAA,KAAA,CAAM,IAAA,CAAK,iBAAiB,KAAA,CAAM,UAAA,CAAW,KAAK,IAAA,CAAK,MAAM,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,MACpE;AAEA,MAAA,IAAI,KAAA,CAAM,WAAW,WAAA,EAAa;AAChC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,sBAAA,EAAyB,KAAA,CAAM,UAAA,CAAW,WAAW,CAAA,EAAA,CAAI,CAAA;AAAA,MACtE;AAEA,MAAA,IAAI,SAAA,KAAc,OAAA,IAAW,SAAA,KAAc,MAAA,EAAQ;AACjD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,YAAA,CAAa,EAAA,GAAK,eAAe,CAAA;AACtD,QAAA,eAAA,EAAA;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,2BAAA,EAA8B,KAAK,CAAA,CAAA,CAAG,CAAA;AAEjD,QAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,UACnB,GAAA;AAAA,UACA,IAAA,EAAM,SAAA;AAAA,UACN,WAAA,EAAa,KAAA,CAAM,UAAA,CAAW,WAAA,IAAe,0BAAA;AAAA,UAC7C,QAAQ,KAAA,CAAM,KAAA;AAAA,UACd;AAAA,SACD,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,cAAc,MAAA,EAAQ;AAC/B,QAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,QAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,SAAA,GAAY,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AACrG,UAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,QACtB,CAAA,CAAA,MAAQ;AACN,UAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,QAChC;AACA,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACnC,QAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,QAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,MAClB;AAEA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf,CAAC,CAAA;AAED,IAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,MAAA,KAAA,CAAM,KAAK,0BAA0B,CAAA;AACrC,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,MAAA,eAAA,CAAgB,QAAQ,CAAC,EAAE,KAAK,WAAA,EAAa,MAAA,EAAQ,OAAM,KAAM;AAC/D,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,KAAK,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAC1C,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,WAAW,CAAA,CAAE,CAAA;AACrC,QAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,QAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,QAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,QAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,MACf,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,KAAA,CAAM,KAAK,2BAA2B,CAAA;AAEtC,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,aAAa,QAAA,EAAwB;AACnC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACjC,IAAA,IAAI,cAAA,GAAoD,QAAA;AACxD,IAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,IAAA,IAAI,YAAA,GAAyC,IAAA;AAC7C,IAAA,IAAI,WAAA,GAAc,KAAA;AAClB,IAAA,IAAI,mBAA6B,EAAC;AAClC,IAAA,IAAI,aAAA,GAAgE,IAAA;AACpE,IAAA,MAAM,eAAwE,EAAC;AAC/E,IAAA,IAAI,kBAAA,GAAoC,IAAA;AACxC,IAAA,MAAM,iBAAiF,EAAC;AAExF,IAAA,IAAA,CAAK,KAAA,EAAM;AAEX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAE1B,MAAA,IAAI,YAAY,gBAAA,EAAkB;AAChC,QAAA,cAAA,GAAiB,SAAA;AACjB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,YAAY,0BAAA,EAA4B;AAC1C,QAAA,cAAA,GAAiB,UAAA;AACjB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,KAAY,KAAA,IAAS,OAAA,KAAY,SAAA,EAAW;AAC9C,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,WAAA,GAAc,IAAA;AACd,UAAA,gBAAA,GAAmB,EAAC;AACpB,UAAA,aAAA,GAAgB,cAAA,KAAmB,UAAA,GAAa,QAAA,GAAY,OAAA,KAAY,YAAY,MAAA,GAAS,OAAA;AAAA,QAC/F,CAAA,MAAO;AACL,UAAA,WAAA,GAAc,KAAA;AACd,UAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AAE1C,UAAA,IAAI,cAAA,KAAmB,cAAc,kBAAA,EAAoB;AACvD,YAAA,YAAA,CAAa,kBAAkB,EAAE,MAAA,GAAS,OAAA;AAAA,UAC5C,CAAA,MAAA,IAAW,YAAA,IAAgB,aAAA,KAAkB,MAAA,EAAQ;AACnD,YAAA,YAAA,CAAa,KAAA,GAAQ,OAAA;AAAA,UACvB,CAAA,MAAA,IAAW,YAAA,IAAgB,aAAA,KAAkB,OAAA,EAAS;AACpD,YAAA,YAAA,CAAa,KAAA,GAAQ,OAAA;AAAA,UACvB;AAEA,UAAA,gBAAA,GAAmB,EAAC;AACpB,UAAA,aAAA,GAAgB,IAAA;AAAA,QAClB;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,gBAAA,CAAiB,KAAK,IAAI,CAAA;AAC1B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,mBAAmB,SAAA,EAAW;AAChC,QAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA,EAAG;AAC9B,UAAA,IAAI,UAAA,IAAc,YAAA,IAAgB,YAAA,CAAa,UAAA,EAAY;AACzD,YAAA,cAAA,CAAe,UAAU,CAAA,GAAI,YAAA;AAAA,UAC/B;AAEA,UAAA,UAAA,GAAa,OAAA,CAAQ,UAAU,CAAC,CAAA;AAChC,UAAA,YAAA,GAAe;AAAA,YACb,KAAA,EAAO,MAAA;AAAA,YACP,UAAA,EAAY;AAAA,cACV,GAAG,sBAAA;AAAA,cACH,aAAa,EAAC;AAAA,cACd,UAAA,EAAY,CAAC,QAAQ,CAAA;AAAA,cACrB,MAAM;AAAC;AACT,WACF;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,eAAe,CAAA,EAAG;AAC9C,UAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,IAAI,CAAC,CAAA;AAC3C,UAAA,IAAI,YAAA,IAAgB,IAAA,IAAS,IAAA,KAAiB,WAAA,EAAa;AACzD,YAAA,YAAA,CAAa,WAAY,IAAA,GAAO,IAAA;AAAA,UAClC;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA,EAAG;AAClD,UAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,GAAI,CAAC,CAAA,KAAM,MAAA;AAClD,UAAA,IAAI,YAAA,EAAc;AAChB,YAAA,YAAA,CAAa,WAAY,QAAA,GAAW,KAAA;AAAA,UACtC;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA,EAAG;AACjD,UAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,GAAI,CAAC,CAAA,KAAM,MAAA;AAClD,UAAA,IAAI,YAAA,EAAc;AAChB,YAAA,YAAA,CAAa,WAAY,OAAA,GAAU,KAAA;AAAA,UACrC;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA,EAAG;AAClD,UAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,GAAI,CAAC,CAAA,KAAM,MAAA;AAClD,UAAA,IAAI,YAAA,EAAc;AAChB,YAAA,YAAA,CAAa,WAAY,QAAA,GAAW,KAAA;AAAA,UACtC;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA,EAAG;AACjD,UAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,WAAW,IAAI,CAAC,CAAA;AAChD,UAAA,IAAI,gBAAgB,SAAA,EAAW;AAC7B,YAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,EAAW,EAAE,CAAA;AACrC,YAAA,IAAI,CAAC,KAAA,CAAM,MAAM,CAAA,EAAG;AAClB,cAAA,YAAA,CAAa,WAAY,MAAA,GAAS,MAAA;AAAA,YACpC;AAAA,UACF;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,eAAe,CAAA,EAAG;AAC9C,UAAA,MAAM,UAAU,OAAA,CAAQ,SAAA,CAAU,EAAA,EAAI,OAAA,CAAQ,SAAS,CAAC,CAAA;AACxD,UAAA,IAAI,YAAA,EAAc;AAChB,YAAA,YAAA,CAAa,UAAA,CAAY,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA;AAAA,UACtD;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,uBAAuB,CAAA,EAAG;AACtD,UAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,WAAW,IAAI,CAAC,CAAA;AAClD,UAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,YAAA,YAAA,CAAa,WAAY,WAAA,GAAc,WAAA;AAAA,UACzC;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,gBAAgB,CAAA,EAAG;AAC/C,UAAA,MAAM,QAAQ,OAAA,CAAQ,SAAA,CAAU,EAAA,EAAI,OAAA,CAAQ,SAAS,CAAC,CAAA;AACtD,UAAA,IAAI,YAAA,EAAc;AAChB,YAAA,YAAA,CAAa,KAAA,GAAQ,KAAA;AAAA,UACvB;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,6BAA6B,CAAA,EAAG;AAC5D,UAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,oBAAoB,CAAA;AACrD,UAAA,IAAI,YAAA,IAAgB,cAAc,UAAA,EAAY;AAC5C,YAAC,YAAA,CAAqB,aAAA,GAAgB,UAAA,CAAW,CAAC,CAAA;AAClD,YAAA,YAAA,CAAa,KAAA,GAAQ,EAAA;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,mBAAmB,UAAA,EAAY;AACjC,QAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,eAAe,CAAA,EAAG;AACvC,UAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,4BAA4B,CAAA;AACxD,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,YAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,YAAA,kBAAA,GAAqB,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AACpC,YAAA,YAAA,CAAa,kBAAkB,CAAA,GAAI,EAAE,WAAA,EAAa,EAAA,EAAI,QAAQ,EAAA,EAAG;AAAA,UACnE;AAAA,QACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,YAAY,CAAA,EAAG;AAC3C,UAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,SAAA,CAAU,EAAE,CAAA;AACxC,UAAA,IAAI,kBAAA,EAAoB;AACtB,YAAA,YAAA,CAAa,kBAAkB,EAAE,WAAA,GAAc,WAAA;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,IAAc,YAAA,IAAgB,YAAA,CAAa,UAAA,EAAY;AACzD,MAAA,cAAA,CAAe,UAAU,CAAA,GAAI,YAAA;AAAA,IAC/B;AAEA,IAAA,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACvD,MAAA,MAAM,gBAAiB,KAAA,CAAc,aAAA;AACrC,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAM,WAAA,GAAc,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AAC3C,QAAA,MAAM,YAAA,GAAe,aAAa,WAAW,CAAA;AAC7C,QAAA,IAAI,YAAA,IAAgB,aAAa,MAAA,EAAQ;AACvC,UAAA,KAAA,CAAM,QAAQ,YAAA,CAAa,MAAA;AAC3B,UAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAY,WAAA,IAAe,aAAa,WAAA,EAAa;AAC9D,YAAA,KAAA,CAAM,UAAA,CAAY,cAAc,YAAA,CAAa,WAAA;AAAA,UAC/C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,UAAA,EAAY;AACjD,QAAA,MAAM,QAAQ,KAAA,CAAM,UAAA;AAGpB,QAAA,IACE,KAAA,CAAM,IAAA,IACN,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,KACnB,CAAC,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,WAAA,CAAY,MAAA,KAAW,CAAA,CAAA,EACpD;AACA,UAAA,KAAA,CAAM,WAAA,GAAc,CAAC,GAAG,KAAA,CAAM,IAAI,CAAA;AAAA,QACpC;AAGA,QAAA,IAAI,CAAC,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,UAAA,CAAW,WAAW,CAAA,EAAG;AACtD,UAAA,MAAM,aAA0B,EAAC;AACjC,UAAA,IAAI,KAAA,CAAM,YAAY,KAAA,EAAO;AAC3B,YAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,UAC1B;AACA,UAAA,IAAI,MAAM,QAAA,EAAU;AAClB,YAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA,UAC5B;AACA,UAAA,IAAI,MAAM,SAAA,EAAW;AACnB,YAAA,UAAA,CAAW,KAAK,WAAW,CAAA;AAAA,UAC7B;AACA,UAAA,IAAI,MAAM,QAAA,EAAU;AAClB,YAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA,UAC5B;AACA,UAAA,KAAA,CAAM,UAAA,GAAa,UAAA;AAAA,QACrB;AAGA,QAAA,IAAI,CAAC,MAAM,WAAA,EAAa;AACtB,UAAA,KAAA,CAAM,cAAc,EAAC;AAAA,QACvB;AACA,QAAA,IAAI,CAAC,MAAM,IAAA,EAAM;AACf,UAAA,KAAA,CAAM,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,WAAW,CAAA;AAAA,QACpC;AAEA,QAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI;AAAA,UACd,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,UAAA,EAAY;AAAA,SACd;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,EAC7B;AACF;AAGO,IAAM,SAAA,GAAY,IAAI,SAAA;;;ACzwD7B,iBAAA,EAAA;AAGA,iBAAA,EAAA","file":"index.js","sourcesContent":["import type { MindCache } from '../core/MindCache';\nimport type { KeyAttributes } from '../core/types';\nimport type {\n CloudConfig,\n Operation,\n IncomingMessage,\n ConnectionState,\n CloudAdapterEvents\n} from './types';\n\nconst DEFAULT_BASE_URL = 'wss://api.mindcache.io';\nconst RECONNECT_DELAY = 1000;\nconst MAX_RECONNECT_DELAY = 30000;\n\n/**\n * CloudAdapter connects a MindCache instance to the cloud service\n * for real-time sync and persistence.\n *\n * Auth modes:\n * 1. Token (recommended): Pass a short-lived token from /api/ws-token\n * 2. API Key (server-to-server): Pass apiKey for direct connections\n */\nexport class CloudAdapter {\n private ws: WebSocket | null = null;\n private queue: Operation[] = [];\n private mindcache: MindCache | null = null;\n private unsubscribe: (() => void) | null = null;\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private _state: ConnectionState = 'disconnected';\n private listeners: Partial<{ [K in keyof CloudAdapterEvents]: CloudAdapterEvents[K][] }> = {};\n private token: string | null = null;\n\n constructor(private config: CloudConfig) {\n this.config.baseUrl = config.baseUrl || DEFAULT_BASE_URL;\n }\n\n /**\n * Set auth token (short-lived, from /api/ws-token)\n * Call this before connect() or use setTokenProvider for auto-refresh\n */\n setToken(token: string): void {\n this.token = token;\n }\n\n /**\n * Set a function that returns a fresh token\n * Used for automatic token refresh on reconnect\n */\n setTokenProvider(provider: () => Promise<string>): void {\n this.config.tokenProvider = provider;\n }\n\n /**\n * Get current connection state\n */\n get state(): ConnectionState {\n return this._state;\n }\n\n /**\n * Attach to a MindCache instance and start syncing\n */\n attach(mc: MindCache): void {\n if (this.mindcache) {\n this.detach();\n }\n\n this.mindcache = mc;\n\n // Subscribe to local changes → push to cloud\n const listener = () => {\n // Skip if this change came from remote\n if (mc.isRemoteUpdate()) {\n console.log('☁️ CloudAdapter: Skipping remote update');\n return;\n }\n\n console.log('☁️ CloudAdapter: Local change detected, syncing...');\n // Get the current state and queue changes\n // In a real implementation, we'd track individual changes\n // For now, we'll sync the entire state on change\n this.syncLocalChanges();\n };\n\n mc.subscribeToAll(listener);\n this.unsubscribe = () => mc.unsubscribeFromAll(listener);\n console.log('☁️ CloudAdapter: Attached to MindCache instance');\n }\n\n /**\n * Detach from the MindCache instance\n */\n detach(): void {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n this.mindcache = null;\n }\n\n /**\n * Connect to the cloud service\n */\n async connect(): Promise<void> {\n if (this._state === 'connecting' || this._state === 'connected') {\n return;\n }\n\n this._state = 'connecting';\n\n try {\n // Get token if we have a provider and no current token\n if (this.config.tokenProvider && !this.token) {\n this.token = await this.config.tokenProvider();\n }\n\n // Build URL with token if available\n let url = `${this.config.baseUrl}/sync/${this.config.instanceId}`;\n if (this.token) {\n url += `?token=${encodeURIComponent(this.token)}`;\n // Token is single-use, clear it after connecting\n this.token = null;\n }\n\n this.ws = new WebSocket(url);\n this.setupWebSocket();\n } catch (error) {\n this._state = 'error';\n this.emit('error', error as Error);\n this.scheduleReconnect();\n }\n }\n\n /**\n * Disconnect from the cloud service\n */\n disconnect(): void {\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n\n this._state = 'disconnected';\n this.emit('disconnected');\n }\n\n /**\n * Push an operation to the cloud\n */\n push(op: Operation): void {\n if (this.ws?.readyState === WebSocket.OPEN) {\n this.ws.send(JSON.stringify(op));\n } else {\n // Queue for when we reconnect\n this.queue.push(op);\n }\n }\n\n /**\n * Add event listener\n */\n on<K extends keyof CloudAdapterEvents>(event: K, listener: CloudAdapterEvents[K]): void {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n this.listeners[event]!.push(listener);\n }\n\n /**\n * Remove event listener\n */\n off<K extends keyof CloudAdapterEvents>(event: K, listener: CloudAdapterEvents[K]): void {\n if (this.listeners[event]) {\n this.listeners[event] = this.listeners[event]!.filter(l => l !== listener) as any;\n }\n }\n\n private emit<K extends keyof CloudAdapterEvents>(event: K, ...args: Parameters<CloudAdapterEvents[K]>): void {\n if (this.listeners[event]) {\n this.listeners[event]!.forEach(listener => (listener as any)(...args));\n }\n }\n\n private setupWebSocket(): void {\n if (!this.ws) {\n return;\n }\n\n this.ws.onopen = () => {\n // If using API key (server-to-server), send auth message\n // If using token, auth was already verified by Worker\n if (this.config.apiKey) {\n this.ws!.send(JSON.stringify({\n type: 'auth',\n apiKey: this.config.apiKey\n }));\n }\n // If using token auth, Worker already authenticated us\n // and will send sync message directly\n };\n\n this.ws.onmessage = (event) => {\n try {\n const msg = JSON.parse(event.data) as IncomingMessage;\n this.handleMessage(msg);\n } catch (error) {\n console.error('MindCache Cloud: Failed to parse message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this._state = 'disconnected';\n this.emit('disconnected');\n this.scheduleReconnect();\n };\n\n this.ws.onerror = (error) => {\n this._state = 'error';\n this.emit('error', new Error('WebSocket error'));\n console.error('MindCache Cloud: WebSocket error:', error);\n };\n }\n\n private handleMessage(msg: IncomingMessage): void {\n switch (msg.type) {\n case 'auth_success':\n this._state = 'connected';\n this.reconnectAttempts = 0;\n this.emit('connected');\n this.flushQueue();\n break;\n\n case 'auth_error':\n this._state = 'error';\n this.emit('error', new Error(msg.error));\n this.disconnect();\n break;\n\n case 'sync':\n // Initial sync - load all data\n if (this.mindcache && msg.data) {\n Object.entries(msg.data).forEach(([key, entry]) => {\n const { value, attributes } = entry as { value: unknown; attributes: KeyAttributes };\n this.mindcache!._setFromRemote(key, value, attributes);\n });\n this.emit('synced');\n }\n break;\n\n case 'set':\n // Remote update (legacy)\n if (this.mindcache) {\n this.mindcache._setFromRemote(msg.key, msg.value, msg.attributes as KeyAttributes);\n }\n break;\n\n case 'key_updated':\n // Server broadcast of key update\n if (this.mindcache) {\n this.mindcache._setFromRemote(msg.key, msg.value, msg.attributes);\n }\n break;\n\n case 'delete':\n // Remote delete (legacy)\n if (this.mindcache) {\n this.mindcache._deleteFromRemote(msg.key);\n }\n break;\n\n case 'key_deleted':\n // Server broadcast of key deletion\n if (this.mindcache) {\n this.mindcache._deleteFromRemote(msg.key);\n }\n break;\n\n case 'clear':\n if (this.mindcache) {\n this.mindcache._clearFromRemote();\n }\n break;\n\n case 'cleared':\n // Server broadcast of clear\n if (this.mindcache) {\n this.mindcache._clearFromRemote();\n }\n break;\n\n case 'error':\n this.emit('error', new Error(msg.error));\n break;\n }\n }\n\n private flushQueue(): void {\n while (this.queue.length > 0 && this.ws?.readyState === WebSocket.OPEN) {\n const op = this.queue.shift()!;\n this.ws.send(JSON.stringify(op));\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimeout) {\n return;\n }\n\n const delay = Math.min(\n RECONNECT_DELAY * Math.pow(2, this.reconnectAttempts),\n MAX_RECONNECT_DELAY\n );\n\n this.reconnectTimeout = setTimeout(async () => {\n this.reconnectTimeout = null;\n this.reconnectAttempts++;\n\n // Get fresh token before reconnecting (if using token auth)\n if (this.config.tokenProvider) {\n try {\n this.token = await this.config.tokenProvider();\n } catch (error) {\n console.error('MindCache Cloud: Failed to get token for reconnect:', error);\n this.emit('error', error as Error);\n return;\n }\n }\n\n this.connect();\n }, delay);\n }\n\n private syncLocalChanges(): void {\n if (!this.mindcache) {\n return;\n }\n\n // Get all current entries and sync them\n const entries = this.mindcache.serialize();\n\n console.log('☁️ CloudAdapter: Syncing local changes:', Object.keys(entries));\n\n Object.entries(entries).forEach(([key, entry]) => {\n console.log('☁️ CloudAdapter: Pushing key:', key, '=', entry.value);\n this.push({\n type: 'set',\n key,\n value: entry.value,\n attributes: entry.attributes,\n timestamp: Date.now()\n });\n });\n }\n}\n\n","/**\n * Access level for MindCache operations\n * - 'user': Can only manage content tags (default)\n * - 'system': Can manage both content tags and system tags\n */\nexport type AccessLevel = 'user' | 'system';\n\n/**\n * Known system tags that control key behavior\n * - 'prompt': Include in system prompt (replaces visible)\n * - 'readonly': Cannot be modified by AI tools (replaces readonly)\n * - 'protected': Cannot be deleted (replaces hardcoded)\n * - 'template': Process value through template injection\n */\nexport type SystemTag = 'prompt' | 'readonly' | 'protected' | 'template';\n\n/**\n * Attributes that can be set on a MindCache key\n */\nexport interface KeyAttributes {\n /** The type of value stored */\n type: 'text' | 'image' | 'file' | 'json';\n /** MIME type for files/images */\n contentType?: string;\n /** User-defined tags for organizing keys */\n contentTags: string[];\n /** System tags that control key behavior (requires system access) */\n systemTags: SystemTag[];\n /** Z-index for ordering keys (lower values appear first) */\n zIndex: number;\n\n // Legacy attributes - kept for backward compatibility, derived from systemTags\n /** @deprecated Use systemTags.includes('readonly') instead */\n readonly: boolean;\n /** @deprecated Use systemTags.includes('prompt') instead */\n visible: boolean;\n /** @deprecated Use systemTags.includes('protected') instead */\n hardcoded: boolean;\n /** @deprecated Use systemTags.includes('template') instead */\n template: boolean;\n /** @deprecated Use contentTags instead */\n tags?: string[];\n}\n\n/**\n * A single entry in the MindCache store\n */\nexport interface STMEntry {\n value: unknown;\n attributes: KeyAttributes;\n}\n\n/**\n * The full MindCache state (key-value pairs with attributes)\n */\nexport type STM = {\n [key: string]: STMEntry;\n};\n\n/**\n * Listener callback for key-specific subscriptions\n * Receives the new value when the key changes\n */\nexport type Listener = (value: unknown) => void;\n\n/**\n * Global listener callback for all changes\n * Called when any key changes (no parameters - use getAll() to get current state)\n */\nexport type GlobalListener = () => void;\n\n/**\n * Default attributes for new keys\n */\nexport const DEFAULT_KEY_ATTRIBUTES: KeyAttributes = {\n type: 'text',\n contentTags: [],\n systemTags: ['prompt'], // visible by default\n zIndex: 0,\n // Legacy - derived from systemTags\n readonly: false,\n visible: true,\n hardcoded: false,\n template: false,\n tags: []\n};\n\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { z } from 'zod';\nimport type { KeyAttributes, STM, STMEntry, Listener, GlobalListener, AccessLevel, SystemTag } from './types';\nimport { DEFAULT_KEY_ATTRIBUTES } from './types';\n\n// Browser environment type declarations\ninterface FileReaderType {\n onload: ((this: FileReaderType, ev: any) => any) | null;\n onerror: ((this: FileReaderType, ev: any) => any) | null;\n result: string | ArrayBuffer | null;\n readAsDataURL(file: Blob): void;\n}\n\ndeclare const FileReader: {\n prototype: FileReaderType;\n new(): FileReaderType;\n} | undefined;\n\n/**\n * Cloud configuration options for MindCache constructor\n */\nexport interface MindCacheCloudOptions {\n /** Instance ID to connect to */\n instanceId: string;\n /** Project ID (optional, defaults to 'default') */\n projectId?: string;\n /** API endpoint to fetch WS token (recommended for browser) */\n tokenEndpoint?: string;\n /** Direct API key (server-side only, never expose in browser!) */\n apiKey?: string;\n /** WebSocket base URL (defaults to production) */\n baseUrl?: string;\n}\n\n/**\n * Constructor options for MindCache\n */\nexport interface MindCacheOptions {\n /** Cloud sync configuration. If omitted, runs in local-only mode. */\n cloud?: MindCacheCloudOptions;\n /** Access level for tag operations. 'system' allows managing system tags. */\n accessLevel?: AccessLevel;\n}\n\n// Connection state type\ntype ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'error';\n\n// CloudAdapter interface to avoid circular imports\ninterface ICloudAdapter {\n attach(mc: MindCache): void;\n detach(): void;\n connect(): Promise<void>;\n disconnect(): void;\n setTokenProvider(provider: () => Promise<string>): void;\n on(event: string, listener: (...args: any[]) => void): void;\n state: ConnectionState;\n}\n\nexport class MindCache {\n private stm: STM = {};\n private listeners: { [key: string]: Listener[] } = {};\n private globalListeners: GlobalListener[] = [];\n\n // Internal flag to prevent sync loops when receiving remote updates\n private _isRemoteUpdate = false;\n\n // Cloud sync state\n private _cloudAdapter: ICloudAdapter | null = null;\n private _connectionState: ConnectionState = 'disconnected';\n private _isLoaded = true; // Default true for local mode\n private _cloudConfig: MindCacheCloudOptions | null = null;\n\n // Access level for system operations\n private _accessLevel: AccessLevel = 'user';\n\n constructor(options?: MindCacheOptions) {\n if (options?.accessLevel) {\n this._accessLevel = options.accessLevel;\n }\n if (options?.cloud) {\n this._cloudConfig = options.cloud;\n this._isLoaded = false; // Wait for sync\n this._connectionState = 'disconnected';\n // Initialize cloud connection asynchronously\n this._initCloud();\n }\n }\n\n /**\n * Get the current access level\n */\n get accessLevel(): AccessLevel {\n return this._accessLevel;\n }\n\n /**\n * Check if this instance has system-level access\n */\n get hasSystemAccess(): boolean {\n return this._accessLevel === 'system';\n }\n\n private async _initCloud(): Promise<void> {\n if (!this._cloudConfig) {\n return;\n }\n\n try {\n // Dynamic import to avoid circular dependency\n const { CloudAdapter } = await import('../cloud/CloudAdapter');\n\n // Convert HTTP URL to WebSocket URL, default to production\n const configUrl = this._cloudConfig.baseUrl || 'https://api.mindcache.io';\n const baseUrl = configUrl\n .replace('https://', 'wss://')\n .replace('http://', 'ws://');\n\n const adapter = new CloudAdapter({\n instanceId: this._cloudConfig.instanceId,\n projectId: this._cloudConfig.projectId || 'default',\n baseUrl,\n apiKey: this._cloudConfig.apiKey\n });\n\n // Set up token provider if tokenEndpoint is provided\n if (this._cloudConfig.tokenEndpoint) {\n const tokenEndpoint = this._cloudConfig.tokenEndpoint;\n const instanceId = this._cloudConfig.instanceId;\n\n // Capture origin at setup time (when window is available) for use during reconnects\n let resolvedBaseUrl: string;\n if (tokenEndpoint.startsWith('http://') || tokenEndpoint.startsWith('https://')) {\n resolvedBaseUrl = tokenEndpoint;\n } else if (typeof window !== 'undefined' && window.location?.origin) {\n resolvedBaseUrl = `${window.location.origin}${tokenEndpoint.startsWith('/') ? '' : '/'}${tokenEndpoint}`;\n } else {\n // This shouldn't happen in normal browser usage, but fail gracefully\n console.warn('MindCache: Cannot resolve tokenEndpoint to absolute URL - window.location not available');\n resolvedBaseUrl = tokenEndpoint;\n }\n\n adapter.setTokenProvider(async () => {\n const url = resolvedBaseUrl.includes('?')\n ? `${resolvedBaseUrl}&instanceId=${instanceId}`\n : `${resolvedBaseUrl}?instanceId=${instanceId}`;\n\n const response = await fetch(url);\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: 'Failed to get token' }));\n throw new Error(error.error || 'Failed to get token');\n }\n\n const data = await response.json();\n return data.token;\n });\n }\n\n // Set up event handlers\n adapter.on('connected', () => {\n this._connectionState = 'connected';\n this.notifyGlobalListeners();\n });\n\n adapter.on('disconnected', () => {\n this._connectionState = 'disconnected';\n this.notifyGlobalListeners();\n });\n\n adapter.on('error', () => {\n this._connectionState = 'error';\n this.notifyGlobalListeners();\n });\n\n adapter.on('synced', () => {\n this._isLoaded = true;\n this.notifyGlobalListeners();\n });\n\n // Attach and connect\n adapter.attach(this);\n this._cloudAdapter = adapter;\n this._connectionState = 'connecting';\n\n adapter.connect();\n } catch (error) {\n console.error('MindCache: Failed to initialize cloud connection:', error);\n this._connectionState = 'error';\n this._isLoaded = true; // Allow usage even if cloud fails\n }\n }\n\n /**\n * Get the current cloud connection state\n */\n get connectionState(): ConnectionState {\n return this._connectionState;\n }\n\n /**\n * Check if data is loaded (true for local, true after sync for cloud)\n */\n get isLoaded(): boolean {\n return this._isLoaded;\n }\n\n /**\n * Check if this instance is connected to cloud\n */\n get isCloud(): boolean {\n return this._cloudConfig !== null;\n }\n\n /**\n * Disconnect from cloud (if connected)\n */\n disconnect(): void {\n if (this._cloudAdapter) {\n this._cloudAdapter.disconnect();\n this._cloudAdapter.detach();\n this._cloudAdapter = null;\n this._connectionState = 'disconnected';\n }\n }\n\n // Helper method to encode file to base64\n private encodeFileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof FileReader !== 'undefined') {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n const base64Data = result.split(',')[1];\n resolve(base64Data);\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n } else {\n reject(new Error('FileReader not available in Node.js environment. Use set_base64() method instead.'));\n }\n });\n }\n\n // Helper method to create data URL from base64 and content type\n private createDataUrl(base64Data: string, contentType: string): string {\n return `data:${contentType};base64,${base64Data}`;\n }\n\n // Helper method to validate content type for different STM types\n private validateContentType(type: KeyAttributes['type'], contentType?: string): boolean {\n if (type === 'text' || type === 'json') {\n return true;\n }\n if (!contentType) {\n return false;\n }\n if (type === 'image') {\n return contentType.startsWith('image/');\n }\n if (type === 'file') {\n return true;\n }\n return false;\n }\n\n /** @deprecated Use get_value instead */\n get(key: string): any {\n return this.get_value(key);\n }\n\n // Get a value from the STM with template processing if enabled\n get_value(key: string, _processingStack?: Set<string>): any {\n if (key === '$date') {\n const today = new Date();\n return today.toISOString().split('T')[0];\n }\n if (key === '$time') {\n const now = new Date();\n return now.toTimeString().split(' ')[0];\n }\n\n const entry = this.stm[key];\n if (!entry) {\n return undefined;\n }\n\n if (entry.attributes.template) {\n const processingStack = _processingStack || new Set<string>();\n if (processingStack.has(key)) {\n return entry.value;\n }\n processingStack.add(key);\n const result = this.injectSTM(entry.value as string, processingStack);\n processingStack.delete(key);\n return result;\n }\n\n return entry.value;\n }\n\n // Get attributes for a key\n get_attributes(key: string): KeyAttributes | undefined {\n if (key === '$date' || key === '$time') {\n return {\n type: 'text',\n contentTags: [],\n systemTags: ['prompt', 'readonly', 'protected'],\n zIndex: 999999, // System keys appear last\n // Legacy attributes\n readonly: true,\n visible: true,\n hardcoded: true,\n template: false,\n tags: []\n };\n }\n\n const entry = this.stm[key];\n return entry ? entry.attributes : undefined;\n }\n\n // Set a value in the STM with default attributes\n set_value(key: string, value: any, attributes?: Partial<KeyAttributes>): void {\n if (key === '$date' || key === '$time') {\n return;\n }\n\n const existingEntry = this.stm[key];\n // Preserve hardcoded status - if entry is hardcoded, it must remain hardcoded\n const wasHardcoded = existingEntry?.attributes.hardcoded || existingEntry?.attributes.systemTags?.includes('protected');\n\n // Deep copy arrays to avoid shared references\n const baseAttributes: KeyAttributes = existingEntry\n ? {\n ...existingEntry.attributes,\n contentTags: [...(existingEntry.attributes.contentTags || [])],\n systemTags: [...(existingEntry.attributes.systemTags || [])] as SystemTag[],\n tags: [...(existingEntry.attributes.tags || [])],\n zIndex: existingEntry.attributes.zIndex ?? 0\n }\n : {\n ...DEFAULT_KEY_ATTRIBUTES,\n contentTags: [], // Fresh array\n systemTags: ['prompt'] as SystemTag[], // Fresh array with default\n tags: [], // Fresh array\n zIndex: 0\n };\n\n const finalAttributes = attributes ? { ...baseAttributes, ...attributes } : baseAttributes;\n\n // If legacy boolean attributes were explicitly provided, sync them TO systemTags first\n if (attributes) {\n let systemTags = [...(finalAttributes.systemTags || [])] as SystemTag[];\n\n if ('readonly' in attributes) {\n if (attributes.readonly && !systemTags.includes('readonly')) {\n systemTags.push('readonly');\n } else if (!attributes.readonly && !wasHardcoded) {\n // Can't remove readonly if hardcoded\n systemTags = systemTags.filter(t => t !== 'readonly') as SystemTag[];\n }\n }\n if ('visible' in attributes) {\n if (attributes.visible && !systemTags.includes('prompt')) {\n systemTags.push('prompt');\n } else if (!attributes.visible) {\n systemTags = systemTags.filter(t => t !== 'prompt') as SystemTag[];\n }\n }\n if ('hardcoded' in attributes) {\n if (attributes.hardcoded && !systemTags.includes('protected')) {\n systemTags.push('protected');\n } else if (!attributes.hardcoded && !wasHardcoded) {\n // Can't remove protected if entry was already hardcoded\n systemTags = systemTags.filter(t => t !== 'protected') as SystemTag[];\n }\n // If wasHardcoded, always keep protected\n if (wasHardcoded && !systemTags.includes('protected')) {\n systemTags.push('protected');\n }\n } else if (wasHardcoded) {\n // If no hardcoded attribute provided but entry was hardcoded, preserve it\n if (!systemTags.includes('protected')) {\n systemTags.push('protected');\n }\n }\n if ('template' in attributes) {\n if (attributes.template && !wasHardcoded && !systemTags.includes('template')) {\n systemTags.push('template');\n } else if (!attributes.template || wasHardcoded) {\n // Can't set template if hardcoded\n systemTags = systemTags.filter(t => t !== 'template') as SystemTag[];\n }\n }\n finalAttributes.systemTags = systemTags;\n } else if (wasHardcoded) {\n // If no attributes provided but entry was hardcoded, preserve protected tag\n let systemTags = [...(finalAttributes.systemTags || [])] as SystemTag[];\n if (!systemTags.includes('protected')) {\n systemTags.push('protected');\n }\n if (!systemTags.includes('readonly')) {\n systemTags.push('readonly');\n }\n systemTags = systemTags.filter(t => t !== 'template');\n finalAttributes.systemTags = systemTags;\n }\n\n // Enforce: protected (hardcoded) implies readonly and NOT template\n let systemTags = finalAttributes.systemTags || [];\n // Always preserve hardcoded status if entry was hardcoded\n if (wasHardcoded && !systemTags.includes('protected')) {\n systemTags = [...systemTags, 'protected'] as SystemTag[];\n }\n if (systemTags.includes('protected')) {\n if (!systemTags.includes('readonly')) {\n systemTags = [...systemTags, 'readonly'] as SystemTag[];\n }\n systemTags = systemTags.filter(t => t !== 'template') as SystemTag[];\n finalAttributes.systemTags = systemTags;\n }\n\n // Sync legacy attributes FROM systemTags (canonical source)\n finalAttributes.readonly = systemTags.includes('readonly');\n finalAttributes.visible = systemTags.includes('prompt');\n // Always preserve hardcoded status if entry was hardcoded\n finalAttributes.hardcoded = wasHardcoded || systemTags.includes('protected');\n finalAttributes.template = systemTags.includes('template');\n\n // Sync tags <-> contentTags bidirectionally\n // If tags was explicitly provided, use it as source for contentTags\n if (attributes && 'tags' in attributes && attributes.tags) {\n finalAttributes.contentTags = [...attributes.tags];\n }\n // Always sync tags FROM contentTags (canonical source)\n finalAttributes.tags = [...(finalAttributes.contentTags || [])];\n\n this.stm[key] = {\n value,\n attributes: finalAttributes\n };\n\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener(value));\n }\n this.notifyGlobalListeners();\n }\n\n // Internal method for setting values from remote (cloud sync)\n // This doesn't trigger the global listener to prevent sync loops\n _setFromRemote(key: string, value: any, attributes: KeyAttributes): void {\n if (key === '$date' || key === '$time') {\n return;\n }\n\n this._isRemoteUpdate = true;\n\n // Ensure new tag arrays exist and sync legacy attributes\n const systemTags: SystemTag[] = attributes.systemTags || [];\n if (!attributes.systemTags) {\n if (attributes.visible !== false) {\n systemTags.push('prompt');\n }\n if (attributes.readonly) {\n systemTags.push('readonly');\n }\n if (attributes.hardcoded) {\n systemTags.push('protected');\n }\n if (attributes.template) {\n systemTags.push('template');\n }\n }\n const contentTags = attributes.contentTags || attributes.tags || [];\n\n this.stm[key] = {\n value,\n attributes: {\n ...attributes,\n contentTags,\n systemTags,\n zIndex: attributes.zIndex ?? 0,\n tags: contentTags,\n readonly: systemTags.includes('readonly'),\n visible: systemTags.includes('prompt'),\n hardcoded: systemTags.includes('protected'),\n template: systemTags.includes('template')\n }\n };\n\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener(value));\n }\n\n // Still notify global listeners for UI updates, but adapter should check _isRemoteUpdate\n this.notifyGlobalListeners();\n\n this._isRemoteUpdate = false;\n }\n\n // Check if current update is from remote\n isRemoteUpdate(): boolean {\n return this._isRemoteUpdate;\n }\n\n // Internal method for deleting from remote (cloud sync)\n _deleteFromRemote(key: string): void {\n if (key === '$date' || key === '$time') {\n return;\n }\n\n this._isRemoteUpdate = true;\n\n if (key in this.stm) {\n delete this.stm[key];\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener(undefined)); // Pass undefined for deleted keys\n }\n this.notifyGlobalListeners();\n }\n\n this._isRemoteUpdate = false;\n }\n\n // Internal method for clearing from remote (cloud sync)\n _clearFromRemote(): void {\n this._isRemoteUpdate = true;\n this.stm = {};\n this.notifyGlobalListeners();\n this._isRemoteUpdate = false;\n }\n\n // Set attributes for an existing key\n set_attributes(key: string, attributes: Partial<KeyAttributes>): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n if (!entry) {\n return false;\n }\n\n // Preserve hardcoded status - if entry is hardcoded, it must remain hardcoded\n const wasHardcoded = entry.attributes.hardcoded || entry.attributes.systemTags?.includes('protected');\n\n // Don't allow direct modification of hardcoded or systemTags without system access\n const { hardcoded: _hardcoded, systemTags: _systemTags, ...allowedAttributes } = attributes;\n\n // If entry is hardcoded (protected), don't allow changing readonly to false or template to true\n if (wasHardcoded) {\n if ('readonly' in allowedAttributes) {\n delete (allowedAttributes as any).readonly; // Can't change readonly on hardcoded\n }\n if ('template' in allowedAttributes) {\n delete (allowedAttributes as any).template; // Can't change template on hardcoded\n }\n }\n\n entry.attributes = { ...entry.attributes, ...allowedAttributes };\n\n // Sync legacy boolean to systemTags if legacy props are set\n if ('readonly' in attributes || 'visible' in attributes || 'template' in attributes) {\n let newSystemTags: SystemTag[] = [];\n if (entry.attributes.readonly) {\n newSystemTags.push('readonly');\n }\n if (entry.attributes.visible) {\n newSystemTags.push('prompt');\n }\n if (entry.attributes.template) {\n newSystemTags.push('template');\n }\n // Always preserve hardcoded status if it was hardcoded\n if (wasHardcoded || entry.attributes.hardcoded) {\n newSystemTags.push('protected');\n }\n\n // Enforce: protected implies readonly and NOT template\n if (newSystemTags.includes('protected')) {\n if (!newSystemTags.includes('readonly')) {\n newSystemTags.push('readonly');\n }\n newSystemTags = newSystemTags.filter(t => t !== 'template');\n entry.attributes.readonly = true;\n entry.attributes.template = false;\n }\n\n entry.attributes.systemTags = newSystemTags;\n } else if (wasHardcoded) {\n // If no legacy props were set but entry was hardcoded, ensure protected tag is preserved\n let systemTags = [...(entry.attributes.systemTags || [])];\n if (!systemTags.includes('protected')) {\n systemTags.push('protected');\n }\n if (!systemTags.includes('readonly')) {\n systemTags.push('readonly');\n }\n systemTags = systemTags.filter(t => t !== 'template');\n entry.attributes.systemTags = systemTags;\n }\n\n // Always ensure hardcoded status is preserved and synced\n if (wasHardcoded) {\n entry.attributes.hardcoded = true;\n if (!entry.attributes.systemTags?.includes('protected')) {\n entry.attributes.systemTags = [...(entry.attributes.systemTags || []), 'protected'] as SystemTag[];\n }\n entry.attributes.readonly = true;\n entry.attributes.template = false;\n }\n\n // Sync contentTags to legacy tags\n if ('contentTags' in attributes) {\n entry.attributes.tags = [...(entry.attributes.contentTags || [])];\n }\n\n this.notifyGlobalListeners();\n return true;\n }\n\n set(key: string, value: any): void {\n this.set_value(key, value);\n }\n\n async set_file(key: string, file: File, attributes?: Partial<KeyAttributes>): Promise<void> {\n const base64Data = await this.encodeFileToBase64(file);\n const contentType = file.type;\n\n const fileAttributes: Partial<KeyAttributes> = {\n type: contentType.startsWith('image/') ? 'image' : 'file',\n contentType,\n ...attributes\n };\n\n this.set_value(key, base64Data, fileAttributes);\n }\n\n set_base64(key: string, base64Data: string, contentType: string, type: 'image' | 'file' = 'file', attributes?: Partial<KeyAttributes>): void {\n if (!this.validateContentType(type, contentType)) {\n throw new Error(`Invalid content type ${contentType} for type ${type}`);\n }\n\n const fileAttributes: Partial<KeyAttributes> = {\n type,\n contentType,\n ...attributes\n };\n\n this.set_value(key, base64Data, fileAttributes);\n }\n\n add_image(key: string, base64Data: string, contentType: string = 'image/jpeg', attributes?: Partial<KeyAttributes>): void {\n if (!contentType.startsWith('image/')) {\n throw new Error(`Invalid image content type: ${contentType}. Must start with 'image/'`);\n }\n\n this.set_base64(key, base64Data, contentType, 'image', attributes);\n this.set_attributes(key, {\n type: 'image',\n contentType: contentType\n });\n }\n\n get_data_url(key: string): string | undefined {\n const entry = this.stm[key];\n if (!entry || (entry.attributes.type !== 'image' && entry.attributes.type !== 'file')) {\n return undefined;\n }\n\n if (!entry.attributes.contentType) {\n return undefined;\n }\n\n return this.createDataUrl(entry.value as string, entry.attributes.contentType);\n }\n\n get_base64(key: string): string | undefined {\n const entry = this.stm[key];\n if (!entry || (entry.attributes.type !== 'image' && entry.attributes.type !== 'file')) {\n return undefined;\n }\n\n return entry.value as string;\n }\n\n has(key: string): boolean {\n if (key === '$date' || key === '$time') {\n return true;\n }\n return key in this.stm;\n }\n\n delete(key: string): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n if (!(key in this.stm)) {\n return false;\n }\n const deleted = delete this.stm[key];\n if (deleted) {\n this.notifyGlobalListeners();\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener(undefined)); // Pass undefined for deleted keys\n }\n }\n return deleted;\n }\n\n clear(): void {\n this.stm = {};\n this.notifyGlobalListeners();\n }\n\n /**\n * Get keys sorted by zIndex (ascending), then by key name\n */\n private getSortedKeys(): string[] {\n return Object.entries(this.stm)\n .sort(([keyA, entryA], [keyB, entryB]) => {\n const zIndexA = entryA.attributes.zIndex ?? 0;\n const zIndexB = entryB.attributes.zIndex ?? 0;\n if (zIndexA !== zIndexB) {\n return zIndexA - zIndexB;\n }\n return keyA.localeCompare(keyB);\n })\n .map(([key]) => key);\n }\n\n keys(): string[] {\n return [...this.getSortedKeys(), '$date', '$time'];\n }\n\n values(): any[] {\n const now = new Date();\n const sortedKeys = this.getSortedKeys();\n const stmValues = sortedKeys.map(key => this.stm[key].value);\n return [\n ...stmValues,\n now.toISOString().split('T')[0],\n now.toTimeString().split(' ')[0]\n ];\n }\n\n entries(): [string, any][] {\n const now = new Date();\n const sortedKeys = this.getSortedKeys();\n const stmEntries = sortedKeys.map(key =>\n [key, this.stm[key].value] as [string, any]\n );\n return [\n ...stmEntries,\n ['$date', now.toISOString().split('T')[0]],\n ['$time', now.toTimeString().split(' ')[0]]\n ];\n }\n\n size(): number {\n return Object.keys(this.stm).length + 2;\n }\n\n getAll(): Record<string, any> {\n const now = new Date();\n const result: Record<string, any> = {};\n\n const sortedKeys = this.getSortedKeys();\n sortedKeys.forEach(key => {\n result[key] = this.stm[key].value;\n });\n\n result['$date'] = now.toISOString().split('T')[0];\n result['$time'] = now.toTimeString().split(' ')[0];\n\n return result;\n }\n\n update(newValues: Record<string, any>): void {\n Object.entries(newValues).forEach(([key, value]) => {\n if (key !== '$date' && key !== '$time') {\n this.stm[key] = {\n value,\n attributes: { ...DEFAULT_KEY_ATTRIBUTES }\n };\n\n if (this.listeners[key]) {\n this.listeners[key].forEach(listener => listener(this.stm[key]?.value));\n }\n }\n });\n this.notifyGlobalListeners();\n }\n\n subscribe(key: string, listener: Listener): void {\n if (!this.listeners[key]) {\n this.listeners[key] = [];\n }\n this.listeners[key].push(listener);\n }\n\n unsubscribe(key: string, listener: Listener): void {\n if (this.listeners[key]) {\n this.listeners[key] = this.listeners[key].filter(l => l !== listener);\n }\n }\n\n subscribeToAll(listener: GlobalListener): void {\n this.globalListeners.push(listener);\n }\n\n unsubscribeFromAll(listener: GlobalListener): void {\n this.globalListeners = this.globalListeners.filter(l => l !== listener);\n }\n\n private notifyGlobalListeners(): void {\n this.globalListeners.forEach(listener => listener());\n }\n\n injectSTM(template: string, _processingStack?: Set<string>): string {\n if (template === null || template === undefined) {\n return String(template);\n }\n\n const templateStr = String(template);\n const keys = templateStr.match(/\\{\\{([$\\w]+)\\}\\}/g);\n\n if (!keys) {\n return templateStr;\n }\n\n const cleanKeys = keys.map(key => key.replace(/[{}]/g, ''));\n\n const inputValues: Record<string, string> = cleanKeys.reduce((acc, key) => {\n if (key === '$date' || key === '$time') {\n return {\n ...acc,\n [key]: this.get_value(key, _processingStack)\n };\n }\n\n const attributes = this.get_attributes(key);\n if (_processingStack || (attributes && attributes.visible)) {\n if (attributes && (attributes.type === 'image' || attributes.type === 'file')) {\n return acc;\n }\n\n return {\n ...acc,\n [key]: this.get_value(key, _processingStack)\n };\n }\n\n return acc;\n }, {});\n\n return templateStr.replace(/\\{\\{([$\\w]+)\\}\\}/g, (match, key) => {\n if (inputValues[key] !== undefined) {\n return inputValues[key];\n }\n\n const attributes = this.get_attributes(key);\n if (attributes && (attributes.type === 'image' || attributes.type === 'file')) {\n return match;\n }\n\n return '';\n });\n }\n\n getSTM(): string {\n const now = new Date();\n const entries: Array<[string, any]> = [];\n\n const sortedKeys = this.getSortedKeys();\n sortedKeys.forEach(key => {\n const entry = this.stm[key];\n if (entry.attributes.visible) {\n entries.push([key, this.get_value(key)]);\n }\n });\n\n entries.push(['$date', now.toISOString().split('T')[0]]);\n entries.push(['$time', now.toTimeString().split(' ')[0]]);\n\n return entries\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ');\n }\n\n getSTMObject(): Record<string, any> {\n return this.getAll();\n }\n\n getSTMForAPI(): Array<{key: string, value: any, type: string, contentType?: string}> {\n const now = new Date();\n const apiData: Array<{key: string, value: any, type: string, contentType?: string}> = [];\n\n const sortedKeys = this.getSortedKeys();\n sortedKeys.forEach(key => {\n const entry = this.stm[key];\n if (entry.attributes.visible) {\n const processedValue = entry.attributes.template ? this.get_value(key) : entry.value;\n\n apiData.push({\n key,\n value: processedValue,\n type: entry.attributes.type,\n contentType: entry.attributes.contentType\n });\n }\n });\n\n apiData.push({\n key: '$date',\n value: now.toISOString().split('T')[0],\n type: 'text'\n });\n\n apiData.push({\n key: '$time',\n value: now.toTimeString().split(' ')[0],\n type: 'text'\n });\n\n return apiData;\n }\n\n getVisibleImages(): Array<{ type: 'file'; mediaType: string; url: string; filename?: string }> {\n const imageParts: Array<{ type: 'file'; mediaType: string; url: string; filename?: string }> = [];\n\n const sortedKeys = this.getSortedKeys();\n sortedKeys.forEach(key => {\n const entry = this.stm[key];\n if (entry.attributes.visible && entry.attributes.type === 'image' && entry.attributes.contentType) {\n const dataUrl = this.createDataUrl(entry.value as string, entry.attributes.contentType);\n imageParts.push({\n type: 'file' as const,\n mediaType: entry.attributes.contentType,\n url: dataUrl,\n filename: key\n });\n }\n });\n\n return imageParts;\n }\n\n toJSON(): string {\n return JSON.stringify(this.serialize());\n }\n\n fromJSON(jsonString: string): void {\n try {\n const data = JSON.parse(jsonString);\n this.deserialize(data);\n } catch (error) {\n console.error('MindCache: Failed to deserialize JSON:', error);\n }\n }\n\n serialize(): Record<string, STMEntry> {\n const result: Record<string, STMEntry> = {};\n\n const sortedKeys = this.getSortedKeys();\n sortedKeys.forEach(key => {\n const entry = this.stm[key];\n if (!entry.attributes.hardcoded) {\n result[key] = {\n value: entry.value,\n attributes: { ...entry.attributes }\n };\n }\n });\n\n return result;\n }\n\n deserialize(data: Record<string, STMEntry>): void {\n if (typeof data === 'object' && data !== null) {\n this.clear();\n\n Object.entries(data).forEach(([key, entry]) => {\n if (entry && typeof entry === 'object' && 'value' in entry && 'attributes' in entry) {\n const attrs = entry.attributes;\n\n // Skip hardcoded keys during deserialization\n if (attrs.hardcoded === true || attrs.systemTags?.includes('protected')) {\n return;\n }\n\n // Migrate from legacy format: derive systemTags from boolean flags if missing\n let systemTags: SystemTag[] = attrs.systemTags || [];\n if (!attrs.systemTags) {\n systemTags = [];\n if (attrs.visible !== false) {\n systemTags.push('prompt');\n } // visible true by default\n if (attrs.readonly) {\n systemTags.push('readonly');\n }\n if (attrs.hardcoded) {\n systemTags.push('protected');\n }\n if (attrs.template) {\n systemTags.push('template');\n }\n }\n\n // Migrate contentTags from legacy tags if missing\n const contentTags = attrs.contentTags || attrs.tags || [];\n\n this.stm[key] = {\n value: entry.value,\n attributes: {\n ...attrs,\n contentTags,\n systemTags,\n zIndex: attrs.zIndex ?? 0,\n // Sync legacy attributes\n tags: contentTags,\n readonly: systemTags.includes('readonly'),\n visible: systemTags.includes('prompt'),\n hardcoded: systemTags.includes('protected'),\n template: systemTags.includes('template')\n }\n };\n }\n });\n\n this.notifyGlobalListeners();\n }\n }\n\n get_system_prompt(): string {\n const now = new Date();\n const promptLines: string[] = [];\n\n const sortedKeys = this.getSortedKeys();\n sortedKeys.forEach(key => {\n const entry = this.stm[key];\n if (entry.attributes.visible) {\n if (entry.attributes.type === 'image') {\n promptLines.push(`image ${key} available`);\n return;\n }\n if (entry.attributes.type === 'file') {\n if (entry.attributes.readonly) {\n promptLines.push(`${key}: [${entry.attributes.type.toUpperCase()}] - ${entry.attributes.contentType || 'unknown format'}`);\n } else {\n const sanitizedKey = key.replace(/[^a-zA-Z0-9_-]/g, '_');\n promptLines.push(`${key}: [${entry.attributes.type.toUpperCase()}] - ${entry.attributes.contentType || 'unknown format'}. You can update this ${entry.attributes.type} using the write_${sanitizedKey} tool.`);\n }\n return;\n }\n\n const value = this.get_value(key);\n const formattedValue = typeof value === 'object' && value !== null\n ? JSON.stringify(value)\n : String(value);\n\n if (entry.attributes.readonly) {\n promptLines.push(`${key}: ${formattedValue}`);\n } else {\n const sanitizedKey = key.replace(/[^a-zA-Z0-9_-]/g, '_');\n const toolInstruction =\n `You can rewrite \"${key}\" by using the write_${sanitizedKey} tool. ` +\n 'This tool DOES NOT append — start your response with the old value ' +\n `(${formattedValue})`;\n promptLines.push(`${key}: ${formattedValue}. ${toolInstruction}`);\n }\n }\n });\n\n promptLines.push(`$date: ${now.toISOString().split('T')[0]}`);\n promptLines.push(`$time: ${now.toTimeString().split(' ')[0]}`);\n\n return promptLines.join('\\n');\n }\n\n private findKeyFromToolName(toolName: string): string | undefined {\n if (!toolName.startsWith('write_')) {\n return undefined;\n }\n\n const sanitizedKey = toolName.replace('write_', '');\n const sortedKeys = this.getSortedKeys();\n return sortedKeys.find(k =>\n k.replace(/[^a-zA-Z0-9_-]/g, '_') === sanitizedKey\n );\n }\n\n get_aisdk_tools(): Record<string, any> {\n const tools: Record<string, any> = {};\n\n const sortedKeys = this.getSortedKeys();\n const writableKeys = sortedKeys.filter(key => {\n const entry = this.stm[key];\n return !entry.attributes.readonly;\n });\n\n writableKeys.forEach(key => {\n const sanitizedKey = key.replace(/[^a-zA-Z0-9_-]/g, '_');\n const toolName = `write_${sanitizedKey}`;\n\n const entry = this.stm[key];\n const keyType = entry?.attributes.type || 'text';\n\n let inputSchema;\n let description = `Write a value to the STM key: ${key}`;\n\n if (keyType === 'image' || keyType === 'file') {\n description += ' (expects base64 encoded data)';\n inputSchema = z.object({\n value: z.string().describe(`Base64 encoded data for ${key}`),\n contentType: z.string().optional().describe(`MIME type for the ${keyType}`)\n });\n } else if (keyType === 'json') {\n description += ' (expects JSON string)';\n inputSchema = z.object({\n value: z.string().describe(`JSON string value for ${key}`)\n });\n } else {\n inputSchema = z.object({\n value: z.string().describe(`The text value to write to ${key}`)\n });\n }\n\n tools[toolName] = {\n description,\n inputSchema,\n execute: async (input: { value: any; contentType?: string }) => {\n if (keyType === 'image' || keyType === 'file') {\n if (input.contentType) {\n this.set_base64(key, input.value, input.contentType, keyType);\n } else {\n const existingContentType = entry?.attributes.contentType;\n if (existingContentType) {\n this.set_base64(key, input.value, existingContentType, keyType);\n } else {\n throw new Error(`Content type required for ${keyType} data`);\n }\n }\n } else {\n this.set_value(key, input.value);\n }\n\n let resultMessage: string;\n if (keyType === 'image') {\n resultMessage = `Successfully saved image to ${key}`;\n } else if (keyType === 'file') {\n resultMessage = `Successfully saved file to ${key}`;\n } else if (keyType === 'json') {\n resultMessage = `Successfully saved JSON data to ${key}`;\n } else {\n resultMessage = `Successfully wrote \"${input.value}\" to ${key}`;\n }\n\n return {\n result: resultMessage,\n key: key,\n value: input.value,\n type: keyType,\n contentType: input.contentType,\n sanitizedKey: sanitizedKey\n };\n }\n };\n });\n\n if (writableKeys.length === 0) {\n return {};\n }\n\n return tools;\n }\n\n executeToolCall(\n toolName: string,\n value: any\n ): { result: string; key: string; value: any } | null {\n const originalKey = this.findKeyFromToolName(toolName);\n if (!originalKey) {\n return null;\n }\n\n const entry = this.stm[originalKey];\n if (entry && entry.attributes.readonly) {\n return null;\n }\n\n this.set_value(originalKey, value);\n return {\n result: `Successfully wrote \"${value}\" to ${originalKey}`,\n key: originalKey,\n value: value\n };\n }\n\n // ============================================\n // Content Tag Methods (available to all access levels)\n // ============================================\n\n /**\n * Add a content tag to a key (user-level organization)\n */\n addTag(key: string, tag: string): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n if (!entry) {\n return false;\n }\n\n if (!entry.attributes.contentTags) {\n entry.attributes.contentTags = [];\n }\n\n if (!entry.attributes.contentTags.includes(tag)) {\n entry.attributes.contentTags.push(tag);\n // Sync legacy tags array\n entry.attributes.tags = [...entry.attributes.contentTags];\n this.notifyGlobalListeners();\n return true;\n }\n\n return false;\n }\n\n /**\n * Remove a content tag from a key\n */\n removeTag(key: string, tag: string): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n if (!entry || !entry.attributes.contentTags) {\n return false;\n }\n\n const tagIndex = entry.attributes.contentTags.indexOf(tag);\n if (tagIndex > -1) {\n entry.attributes.contentTags.splice(tagIndex, 1);\n // Sync legacy tags array\n entry.attributes.tags = [...entry.attributes.contentTags];\n this.notifyGlobalListeners();\n return true;\n }\n\n return false;\n }\n\n /**\n * Get all content tags for a key\n */\n getTags(key: string): string[] {\n if (key === '$date' || key === '$time') {\n return [];\n }\n\n const entry = this.stm[key];\n return entry?.attributes.contentTags || [];\n }\n\n /**\n * Get all unique content tags across all keys\n */\n getAllTags(): string[] {\n const allTags = new Set<string>();\n\n Object.values(this.stm).forEach(entry => {\n if (entry.attributes.contentTags) {\n entry.attributes.contentTags.forEach(tag => allTags.add(tag));\n }\n });\n\n return Array.from(allTags);\n }\n\n /**\n * Check if a key has a specific content tag\n */\n hasTag(key: string, tag: string): boolean {\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n return entry?.attributes.contentTags?.includes(tag) || false;\n }\n\n /**\n * Get all keys with a specific content tag as formatted string\n */\n getTagged(tag: string): string {\n const entries: Array<[string, any]> = [];\n\n const sortedKeys = this.getSortedKeys();\n sortedKeys.forEach(key => {\n const entry = this.stm[key];\n if (entry.attributes.contentTags?.includes(tag)) {\n entries.push([key, this.get_value(key)]);\n }\n });\n\n return entries\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ');\n }\n\n /**\n * Get all keys with a specific content tag\n */\n getKeysByTag(tag: string): string[] {\n const sortedKeys = this.getSortedKeys();\n return sortedKeys.filter(key => {\n const entry = this.stm[key];\n return entry.attributes.contentTags?.includes(tag);\n });\n }\n\n // ============================================\n // System Tag Methods (requires system access level)\n // ============================================\n\n /**\n * Add a system tag to a key (requires system access)\n * System tags: 'prompt', 'readonly', 'protected', 'template'\n */\n systemAddTag(key: string, tag: SystemTag): boolean {\n if (!this.hasSystemAccess) {\n console.warn('MindCache: systemAddTag requires system access level');\n return false;\n }\n\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n if (!entry) {\n return false;\n }\n\n if (!entry.attributes.systemTags) {\n entry.attributes.systemTags = [];\n }\n\n if (!entry.attributes.systemTags.includes(tag)) {\n entry.attributes.systemTags.push(tag);\n // Sync legacy boolean attributes\n this.syncLegacyFromSystemTags(entry);\n this.notifyGlobalListeners();\n return true;\n }\n\n return false;\n }\n\n /**\n * Remove a system tag from a key (requires system access)\n */\n systemRemoveTag(key: string, tag: SystemTag): boolean {\n if (!this.hasSystemAccess) {\n console.warn('MindCache: systemRemoveTag requires system access level');\n return false;\n }\n\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n if (!entry || !entry.attributes.systemTags) {\n return false;\n }\n\n // Prevent removing 'protected' tag from hardcoded keys\n const isHardcoded = entry.attributes.hardcoded || entry.attributes.systemTags.includes('protected');\n if (tag === 'protected' && isHardcoded) {\n return false; // Cannot remove protected tag from hardcoded keys\n }\n\n const tagIndex = entry.attributes.systemTags.indexOf(tag);\n if (tagIndex > -1) {\n entry.attributes.systemTags.splice(tagIndex, 1);\n // Sync legacy boolean attributes\n this.syncLegacyFromSystemTags(entry);\n // Ensure hardcoded status is preserved\n if (isHardcoded) {\n if (!entry.attributes.systemTags.includes('protected')) {\n entry.attributes.systemTags.push('protected');\n }\n entry.attributes.hardcoded = true;\n entry.attributes.readonly = true;\n entry.attributes.template = false;\n }\n this.notifyGlobalListeners();\n return true;\n }\n\n return false;\n }\n\n /**\n * Get all system tags for a key (requires system access)\n */\n systemGetTags(key: string): SystemTag[] {\n if (!this.hasSystemAccess) {\n console.warn('MindCache: systemGetTags requires system access level');\n return [];\n }\n\n if (key === '$date' || key === '$time') {\n return [];\n }\n\n const entry = this.stm[key];\n return entry?.attributes.systemTags || [];\n }\n\n /**\n * Check if a key has a specific system tag (requires system access)\n */\n systemHasTag(key: string, tag: SystemTag): boolean {\n if (!this.hasSystemAccess) {\n console.warn('MindCache: systemHasTag requires system access level');\n return false;\n }\n\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n return entry?.attributes.systemTags?.includes(tag) || false;\n }\n\n /**\n * Set all system tags for a key at once (requires system access)\n */\n systemSetTags(key: string, tags: SystemTag[]): boolean {\n if (!this.hasSystemAccess) {\n console.warn('MindCache: systemSetTags requires system access level');\n return false;\n }\n\n if (key === '$date' || key === '$time') {\n return false;\n }\n\n const entry = this.stm[key];\n if (!entry) {\n return false;\n }\n\n entry.attributes.systemTags = [...tags];\n // Sync legacy boolean attributes\n this.syncLegacyFromSystemTags(entry);\n this.notifyGlobalListeners();\n return true;\n }\n\n /**\n * Get all keys with a specific system tag (requires system access)\n */\n systemGetKeysByTag(tag: SystemTag): string[] {\n if (!this.hasSystemAccess) {\n console.warn('MindCache: systemGetKeysByTag requires system access level');\n return [];\n }\n\n const sortedKeys = this.getSortedKeys();\n return sortedKeys.filter(key => {\n const entry = this.stm[key];\n return entry.attributes.systemTags?.includes(tag);\n });\n }\n\n /**\n * Helper to sync legacy boolean attributes from system tags\n */\n private syncLegacyFromSystemTags(entry: STMEntry): void {\n const tags = entry.attributes.systemTags || [];\n entry.attributes.readonly = tags.includes('readonly');\n entry.attributes.visible = tags.includes('prompt');\n entry.attributes.hardcoded = tags.includes('protected');\n entry.attributes.template = tags.includes('template');\n }\n\n toMarkdown(): string {\n const now = new Date();\n const lines: string[] = [];\n const appendixEntries: Array<{\n key: string;\n type: string;\n contentType: string;\n base64: string;\n label: string;\n }> = [];\n let appendixCounter = 0;\n\n lines.push('# MindCache STM Export');\n lines.push('');\n lines.push(`Export Date: ${now.toISOString().split('T')[0]}`);\n lines.push('');\n lines.push('---');\n lines.push('');\n lines.push('## STM Entries');\n lines.push('');\n\n const sortedKeys = this.getSortedKeys();\n sortedKeys.forEach(key => {\n const entry = this.stm[key];\n if (entry.attributes.hardcoded) {\n return;\n }\n\n lines.push(`### ${key}`);\n const entryType = (entry.attributes.type && (entry.attributes.type as any) !== 'undefined') ? entry.attributes.type : 'text';\n lines.push(`- **Type**: \\`${entryType}\\``);\n lines.push(`- **Readonly**: \\`${entry.attributes.readonly}\\``);\n lines.push(`- **Visible**: \\`${entry.attributes.visible}\\``);\n lines.push(`- **Template**: \\`${entry.attributes.template}\\``);\n lines.push(`- **Z-Index**: \\`${entry.attributes.zIndex ?? 0}\\``);\n\n if (entry.attributes.tags && entry.attributes.tags.length > 0) {\n lines.push(`- **Tags**: \\`${entry.attributes.tags.join('`, `')}\\``);\n }\n\n if (entry.attributes.contentType) {\n lines.push(`- **Content Type**: \\`${entry.attributes.contentType}\\``);\n }\n\n if (entryType === 'image' || entryType === 'file') {\n const label = String.fromCharCode(65 + appendixCounter);\n appendixCounter++;\n lines.push(`- **Value**: [See Appendix ${label}]`);\n\n appendixEntries.push({\n key,\n type: entryType,\n contentType: entry.attributes.contentType || 'application/octet-stream',\n base64: entry.value as string,\n label\n });\n } else if (entryType === 'json') {\n lines.push('- **Value**:');\n lines.push('```json');\n try {\n const jsonValue = typeof entry.value === 'string' ? entry.value : JSON.stringify(entry.value, null, 2);\n lines.push(jsonValue);\n } catch {\n lines.push(String(entry.value));\n }\n lines.push('```');\n } else {\n const valueStr = String(entry.value);\n lines.push('- **Value**:');\n lines.push('```');\n lines.push(valueStr);\n lines.push('```');\n }\n\n lines.push('');\n lines.push('---');\n lines.push('');\n });\n\n if (appendixEntries.length > 0) {\n lines.push('## Appendix: Binary Data');\n lines.push('');\n\n appendixEntries.forEach(({ key, contentType, base64, label }) => {\n lines.push(`### Appendix ${label}: ${key}`);\n lines.push(`**Type**: ${contentType}`);\n lines.push('');\n lines.push('```');\n lines.push(base64);\n lines.push('```');\n lines.push('');\n lines.push('---');\n lines.push('');\n });\n }\n\n lines.push('*End of MindCache Export*');\n\n return lines.join('\\n');\n }\n\n fromMarkdown(markdown: string): void {\n const lines = markdown.split('\\n');\n let currentSection: 'header' | 'entries' | 'appendix' = 'header';\n let currentKey: string | null = null;\n let currentEntry: Partial<STMEntry> | null = null;\n let inCodeBlock = false;\n let codeBlockContent: string[] = [];\n let codeBlockType: 'value' | 'json' | 'base64' | 'default' | null = null;\n const appendixData: Record<string, { contentType: string; base64: string }> = {};\n let currentAppendixKey: string | null = null;\n const pendingEntries: Record<string, Partial<STMEntry> & { appendixLabel?: string }> = {};\n\n this.clear();\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n if (trimmed === '## STM Entries') {\n currentSection = 'entries';\n continue;\n }\n if (trimmed === '## Appendix: Binary Data') {\n currentSection = 'appendix';\n continue;\n }\n\n if (trimmed === '```' || trimmed === '```json') {\n if (!inCodeBlock) {\n inCodeBlock = true;\n codeBlockContent = [];\n codeBlockType = currentSection === 'appendix' ? 'base64' : (trimmed === '```json' ? 'json' : 'value');\n } else {\n inCodeBlock = false;\n const content = codeBlockContent.join('\\n');\n\n if (currentSection === 'appendix' && currentAppendixKey) {\n appendixData[currentAppendixKey].base64 = content;\n } else if (currentEntry && codeBlockType === 'json') {\n currentEntry.value = content;\n } else if (currentEntry && codeBlockType === 'value') {\n currentEntry.value = content;\n }\n\n codeBlockContent = [];\n codeBlockType = null;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeBlockContent.push(line);\n continue;\n }\n\n if (currentSection === 'entries') {\n if (trimmed.startsWith('### ')) {\n if (currentKey && currentEntry && currentEntry.attributes) {\n pendingEntries[currentKey] = currentEntry as STMEntry & { appendixLabel?: string };\n }\n\n currentKey = trimmed.substring(4);\n currentEntry = {\n value: undefined,\n attributes: {\n ...DEFAULT_KEY_ATTRIBUTES,\n contentTags: [],\n systemTags: ['prompt'] as SystemTag[],\n tags: []\n }\n };\n } else if (trimmed.startsWith('- **Type**: `')) {\n const type = trimmed.match(/`([^`]+)`/)?.[1] as KeyAttributes['type'];\n if (currentEntry && type && (type as any) !== 'undefined') {\n currentEntry.attributes!.type = type;\n }\n } else if (trimmed.startsWith('- **Readonly**: `')) {\n const value = trimmed.match(/`([^`]+)`/)?.[1] === 'true';\n if (currentEntry) {\n currentEntry.attributes!.readonly = value;\n }\n } else if (trimmed.startsWith('- **Visible**: `')) {\n const value = trimmed.match(/`([^`]+)`/)?.[1] === 'true';\n if (currentEntry) {\n currentEntry.attributes!.visible = value;\n }\n } else if (trimmed.startsWith('- **Template**: `')) {\n const value = trimmed.match(/`([^`]+)`/)?.[1] === 'true';\n if (currentEntry) {\n currentEntry.attributes!.template = value;\n }\n } else if (trimmed.startsWith('- **Z-Index**: `')) {\n const zIndexStr = trimmed.match(/`([^`]+)`/)?.[1];\n if (currentEntry && zIndexStr) {\n const zIndex = parseInt(zIndexStr, 10);\n if (!isNaN(zIndex)) {\n currentEntry.attributes!.zIndex = zIndex;\n }\n }\n } else if (trimmed.startsWith('- **Tags**: `')) {\n const tagsStr = trimmed.substring(13, trimmed.length - 1);\n if (currentEntry) {\n currentEntry.attributes!.tags = tagsStr.split('`, `');\n }\n } else if (trimmed.startsWith('- **Content Type**: `')) {\n const contentType = trimmed.match(/`([^`]+)`/)?.[1];\n if (currentEntry && contentType) {\n currentEntry.attributes!.contentType = contentType;\n }\n } else if (trimmed.startsWith('- **Value**: `')) {\n const value = trimmed.substring(14, trimmed.length - 1);\n if (currentEntry) {\n currentEntry.value = value;\n }\n } else if (trimmed.startsWith('- **Value**: [See Appendix ')) {\n const labelMatch = trimmed.match(/Appendix ([A-Z])\\]/);\n if (currentEntry && labelMatch && currentKey) {\n (currentEntry as any).appendixLabel = labelMatch[1];\n currentEntry.value = '';\n }\n }\n }\n\n if (currentSection === 'appendix') {\n if (trimmed.startsWith('### Appendix ')) {\n const match = trimmed.match(/### Appendix ([A-Z]): (.+)/);\n if (match) {\n const label = match[1];\n const key = match[2];\n currentAppendixKey = `${label}:${key}`;\n appendixData[currentAppendixKey] = { contentType: '', base64: '' };\n }\n } else if (trimmed.startsWith('**Type**: ')) {\n const contentType = trimmed.substring(10);\n if (currentAppendixKey) {\n appendixData[currentAppendixKey].contentType = contentType;\n }\n }\n }\n }\n\n if (currentKey && currentEntry && currentEntry.attributes) {\n pendingEntries[currentKey] = currentEntry as STMEntry & { appendixLabel?: string };\n }\n\n Object.entries(pendingEntries).forEach(([key, entry]) => {\n const appendixLabel = (entry as any).appendixLabel;\n if (appendixLabel) {\n const appendixKey = `${appendixLabel}:${key}`;\n const appendixInfo = appendixData[appendixKey];\n if (appendixInfo && appendixInfo.base64) {\n entry.value = appendixInfo.base64;\n if (!entry.attributes!.contentType && appendixInfo.contentType) {\n entry.attributes!.contentType = appendixInfo.contentType;\n }\n }\n }\n\n if (entry.value !== undefined && entry.attributes) {\n const attrs = entry.attributes;\n\n // Sync tags to contentTags if tags was parsed from markdown\n if (\n attrs.tags &&\n attrs.tags.length > 0 &&\n (!attrs.contentTags || attrs.contentTags.length === 0)\n ) {\n attrs.contentTags = [...attrs.tags];\n }\n\n // Derive systemTags from legacy booleans if not present\n if (!attrs.systemTags || attrs.systemTags.length === 0) {\n const systemTags: SystemTag[] = [];\n if (attrs.visible !== false) {\n systemTags.push('prompt');\n }\n if (attrs.readonly) {\n systemTags.push('readonly');\n }\n if (attrs.hardcoded) {\n systemTags.push('protected');\n }\n if (attrs.template) {\n systemTags.push('template');\n }\n attrs.systemTags = systemTags;\n }\n\n // Ensure all required fields exist\n if (!attrs.contentTags) {\n attrs.contentTags = [];\n }\n if (!attrs.tags) {\n attrs.tags = [...attrs.contentTags];\n }\n\n this.stm[key] = {\n value: entry.value,\n attributes: attrs as KeyAttributes\n };\n }\n });\n\n this.notifyGlobalListeners();\n }\n}\n\n// Create and export a single instance of MindCache\nexport const mindcache = new MindCache();\n\n","import { MindCache } from '../core/MindCache';\nimport { CloudAdapter } from './CloudAdapter';\nimport type { CloudConfig } from './types';\n\nexport { CloudAdapter } from './CloudAdapter';\nexport type {\n CloudConfig,\n ConnectionState,\n CloudAdapterEvents,\n Operation,\n SetOperation,\n DeleteOperation,\n ClearOperation\n} from './types';\n\n/**\n * Connect a MindCache instance to the cloud for real-time sync.\n *\n * @example\n * ```typescript\n * import { MindCache } from 'mindcache';\n * import { connectCloud } from 'mindcache/cloud';\n *\n * const mc = new MindCache();\n * const adapter = connectCloud(mc, {\n * projectId: 'my-project',\n * instanceId: 'main',\n * apiKey: 'mc_live_xxxxx'\n * });\n *\n * // Now mc is synced with the cloud!\n * mc.set_value('name', 'Alice');\n * ```\n */\nexport function connectCloud(mc: MindCache, config: CloudConfig): CloudAdapter {\n const adapter = new CloudAdapter(config);\n adapter.attach(mc);\n adapter.connect();\n return adapter;\n}\n\n/**\n * Create a new MindCache instance that's already connected to the cloud.\n *\n * @example\n * ```typescript\n * import { createCloudMindCache } from 'mindcache/cloud';\n *\n * const mc = createCloudMindCache({\n * projectId: 'my-project',\n * instanceId: 'main',\n * apiKey: 'mc_live_xxxxx'\n * });\n *\n * // Ready to use with cloud sync!\n * mc.set_value('name', 'Alice');\n * ```\n */\nexport function createCloudMindCache(config: CloudConfig): MindCache & { adapter: CloudAdapter } {\n const mc = new MindCache();\n const adapter = connectCloud(mc, config);\n\n // Attach adapter to the instance for access\n return Object.assign(mc, { adapter });\n}\n\n"]}
|