@triedotdev/mcp 1.0.106 → 1.0.108
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/scan.ts","../src/utils/streaming.ts","../src/cli/dashboard/index.ts","../src/cli/dashboard/App.tsx","../src/cli/dashboard/state.tsx","../src/utils/output-manager.ts","../src/cli/dashboard/components/Header.tsx","../src/cli/dashboard/components/Footer.tsx","../src/cli/dashboard/components/Notification.tsx","../src/cli/dashboard/components/ConfigDialog.tsx","../src/cli/dashboard/views/OverviewView.tsx","../src/cli/dashboard/views/AgentView.tsx","../src/cli/dashboard/theme.ts","../src/cli/dashboard/views/GoalsView.tsx","../src/cli/dashboard/views/HypothesesView.tsx","../src/cli/dashboard/views/MemoryTreeView.tsx","../src/cli/dashboard/views/RawLogView.tsx","../src/cli/dashboard/views/ChatView.tsx"],"sourcesContent":["/**\n * Scan tool - simplified for decision ledger only\n * Note: Skills/scouts have been removed. Trie now focuses on:\n * - Learning from incidents (trie tell)\n * - Predicting risks (trie gotcha)\n * - Decision ledger (context graph)\n */\n\nexport interface ScanInput {\n files?: string[];\n directory?: string;\n forceAgents?: string[];\n cache?: boolean;\n parallel?: boolean;\n streaming?: boolean;\n format?: 'text' | 'json';\n output?: string;\n [key: string]: any;\n}\n\nexport class TrieScanTool {\n async execute(_input: ScanInput): Promise<any> {\n // Skills/scouts have been removed\n // Trie now focuses on decision ledger and learning from incidents\n console.error('ℹ️ Trie scan has been refocused on decision ledger');\n console.error(' Use: trie tell - to report incidents');\n console.error(' Use: trie gotcha - to predict risks');\n console.error(' Use: trie learn - to learn from history');\n \n return {\n content: [{\n type: 'text',\n text: 'Scan functionality has been refocused on decision ledger.\\n\\nUse:\\n- trie tell - to report incidents\\n- trie gotcha - to predict risks\\n- trie learn - to learn from history'\n }]\n };\n }\n}\n\n// Export for backward compatibility\nexport async function handleScanTool(input: ScanInput): Promise<any> {\n const tool = new TrieScanTool();\n return tool.execute(input);\n}\n","import type { Issue } from '../types/index.js';\nimport { isInteractiveMode } from './progress.js';\nimport type { \n BannerContent, \n SnippetContent, \n CostContent, \n ReadinessContent, \n SemanticContent, \n AttackSurfaceContent \n} from './output-manager.js';\n\n// Internal flag to suppress console output (used in emit error handler)\nconst shouldSuppressConsole = () => isInteractiveMode();\n\n// Rich content event types\nexport type RichContentType = \n | 'snippet' // Code snippet for issue\n | 'cost_report' // Moneybags cost estimate\n | 'readiness_report' // Production readiness\n | 'semantic_report' // Data flow analysis\n | 'attack_surface' // Endpoint analysis\n | 'skill_banner' // ASCII art + quote\n | 'raw_log'; // Raw console log capture\n\nexport interface StreamUpdate {\n type: 'progress' | 'agent_start' | 'agent_complete' | 'issue_found' | 'scan_complete' | 'error' | 'watch_status' | 'watch_change' | 'memory' | 'signal_extracted' | RichContentType;\n timestamp: number;\n data: any;\n}\n\n// Re-export rich content types for convenience\nexport type { BannerContent, SnippetContent, CostContent, ReadinessContent, SemanticContent, AttackSurfaceContent };\n\nexport interface ScanProgress {\n totalFiles: number;\n processedFiles: number;\n currentFile?: string;\n activeAgents: string[];\n completedAgents: string[];\n totalIssues: number;\n issuesBySeverity: {\n critical: number;\n serious: number;\n moderate: number;\n low: number;\n };\n}\n\n/**\n * Streaming scan results for real-time feedback\n */\nexport class StreamingManager {\n private listeners: Set<(update: StreamUpdate) => void> = new Set();\n private progress: ScanProgress = {\n totalFiles: 0,\n processedFiles: 0,\n activeAgents: [],\n completedAgents: [],\n totalIssues: 0,\n issuesBySeverity: { critical: 0, serious: 0, moderate: 0, low: 0 }\n };\n\n /**\n * Subscribe to scan updates\n */\n subscribe(callback: (update: StreamUpdate) => void): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n /**\n * Emit an update to all listeners\n */\n private emit(type: StreamUpdate['type'], data: any): void {\n const update: StreamUpdate = {\n type,\n timestamp: Date.now(),\n data\n };\n\n this.listeners.forEach(listener => {\n try {\n listener(update);\n } catch (error) {\n if (!shouldSuppressConsole()) {\n console.warn('Stream listener error:', error);\n }\n }\n });\n }\n\n /**\n * Initialize scan with file count\n */\n startScan(totalFiles: number): void {\n this.progress = {\n totalFiles,\n processedFiles: 0,\n activeAgents: [],\n completedAgents: [],\n totalIssues: 0,\n issuesBySeverity: { critical: 0, serious: 0, moderate: 0, low: 0 }\n };\n\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Update current file being processed\n */\n updateCurrentFile(file: string): void {\n this.progress.currentFile = file;\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Mark file as processed\n */\n completeFile(): void {\n this.progress.processedFiles++;\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Start agent execution\n */\n startAgent(agentName: string): void {\n if (!this.progress.activeAgents.includes(agentName)) {\n this.progress.activeAgents.push(agentName);\n }\n this.emit('agent_start', { agent: agentName });\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Complete agent execution\n */\n completeAgent(agentName: string, issues: Issue[]): void {\n // Move from active to completed\n this.progress.activeAgents = this.progress.activeAgents.filter(a => a !== agentName);\n if (!this.progress.completedAgents.includes(agentName)) {\n this.progress.completedAgents.push(agentName);\n }\n\n // Update issue counts\n for (const issue of issues) {\n this.progress.issuesBySeverity[issue.severity]++;\n this.progress.totalIssues++;\n }\n\n this.emit('agent_complete', {\n agent: agentName,\n issueCount: issues.length,\n issues: issues.slice(0, 5) // Only send first 5 for streaming\n });\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Report new issue found\n */\n reportIssue(issue: Issue): void {\n this.progress.issuesBySeverity[issue.severity]++;\n this.progress.totalIssues++;\n this.emit('issue_found', issue);\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Complete the entire scan\n */\n completeScan(totalIssues: Issue[]): void {\n this.emit('scan_complete', {\n totalFiles: this.progress.totalFiles,\n totalIssues: totalIssues.length,\n issues: totalIssues, // Include all issues for the dashboard\n issuesBySeverity: this.progress.issuesBySeverity,\n completedAgents: this.progress.completedAgents\n });\n }\n\n /**\n * Report error\n */\n reportError(error: Error, context?: string): void {\n this.emit('error', {\n message: error.message,\n context,\n stack: error.stack\n });\n }\n\n /**\n * Get current progress\n */\n getProgress(): ScanProgress {\n return { ...this.progress };\n }\n\n /**\n * Reset state\n */\n reset(): void {\n this.progress = {\n totalFiles: 0,\n processedFiles: 0,\n activeAgents: [],\n completedAgents: [],\n totalIssues: 0,\n issuesBySeverity: { critical: 0, serious: 0, moderate: 0, low: 0 }\n };\n }\n\n /**\n * Report watch status (directories, debounce, last change)\n */\n reportWatchStatus(status: { watching: boolean; directories?: number; debounceMs?: number; lastChange?: string; recentChanges?: Array<{ file: string; time: string }> }): void {\n this.emit('watch_status', status);\n }\n\n /**\n * Report a specific file change when watching\n */\n reportWatchChange(file: string): void {\n this.emit('watch_change', { file });\n }\n\n /**\n * Report memory operations (saving context, learning patterns)\n */\n reportMemory(action: 'saving' | 'saved' | 'learning', details?: string): void {\n this.emit('memory', { action, details });\n }\n\n /**\n * Report signal extraction from watch mode\n */\n reportSignalExtraction(signals: { decisions: number; facts: number; blockers: number; questions: number }): void {\n this.emit('signal_extracted', signals);\n }\n\n // ============================================\n // Rich Content Events (for TUI panes)\n // ============================================\n\n /**\n * Report a code snippet for display\n */\n reportSnippet(snippet: SnippetContent): void {\n this.emit('snippet', snippet);\n }\n\n /**\n * Report cost estimate from Moneybags\n */\n reportCost(cost: CostContent): void {\n this.emit('cost_report', cost);\n }\n\n /**\n * Report production readiness score\n */\n reportReadiness(readiness: ReadinessContent): void {\n this.emit('readiness_report', readiness);\n }\n\n /**\n * Report semantic analysis results\n */\n reportSemantic(semantic: SemanticContent): void {\n this.emit('semantic_report', semantic);\n }\n\n /**\n * Report attack surface analysis\n */\n reportAttackSurface(attack: AttackSurfaceContent): void {\n this.emit('attack_surface', attack);\n }\n\n /**\n * Report skill banner (ASCII art + quote)\n */\n reportBanner(banner: BannerContent): void {\n this.emit('skill_banner', banner);\n }\n\n /**\n * Report raw log entry\n */\n reportRawLog(level: 'info' | 'warn' | 'error' | 'debug', message: string): void {\n this.emit('raw_log', { level, message, time: new Date().toLocaleTimeString('en-US', { hour12: false }) });\n }\n}\n\n/**\n * Format streaming updates for console output\n * Returns null if interactive mode is enabled (dashboard handles display)\n */\nexport function formatConsoleUpdate(update: StreamUpdate): string | null {\n // In interactive mode, the dashboard handles all display\n if (isInteractiveMode()) {\n return null;\n }\n\n switch (update.type) {\n case 'agent_start':\n // Suppress agent start messages - they're redundant with progress updates\n return null;\n\n case 'agent_complete':\n const label = update.data.issueCount > 0 ? '[WARN]' : '[OK]';\n const severityBreakdown: string[] = [];\n if (update.data.issues && Array.isArray(update.data.issues)) {\n const bySeverity = { critical: 0, serious: 0, moderate: 0, low: 0 };\n for (const issue of update.data.issues) {\n if (issue.severity && Object.prototype.hasOwnProperty.call(bySeverity, issue.severity)) {\n bySeverity[issue.severity as keyof typeof bySeverity]++;\n }\n }\n if (bySeverity.critical > 0) severityBreakdown.push(`${bySeverity.critical} critical`);\n if (bySeverity.serious > 0) severityBreakdown.push(`${bySeverity.serious} serious`);\n if (bySeverity.moderate > 0) severityBreakdown.push(`${bySeverity.moderate} moderate`);\n if (bySeverity.low > 0) severityBreakdown.push(`${bySeverity.low} low`);\n }\n const breakdown = severityBreakdown.length > 0 ? ` (${severityBreakdown.join(', ')})` : '';\n return `${label} ${update.data.agent}: ${update.data.issueCount} issues${breakdown}`;\n\n case 'progress':\n // Only show progress updates every 10% or when significant changes occur\n const { processedFiles, totalFiles, currentFile, activeAgents } = update.data;\n const progress = totalFiles > 0 ? Math.round((processedFiles / totalFiles) * 100) : 0;\n \n // Suppress frequent progress updates - only show at milestones\n if (totalFiles > 10 && progress % 10 !== 0 && processedFiles !== totalFiles) {\n return null;\n }\n \n const active = activeAgents.length > 0 ? ` (${activeAgents.join(', ')})` : '';\n const current = currentFile && totalFiles <= 10 ? ` - ${currentFile.split('/').pop()}` : '';\n return `Progress: ${progress}% (${processedFiles}/${totalFiles})${active}${current}`;\n\n case 'scan_complete':\n const { totalIssues, totalFiles: filesScanned, issuesBySeverity } = update.data;\n const severitySummary: string[] = [];\n if (issuesBySeverity) {\n if (issuesBySeverity.critical > 0) severitySummary.push(`${issuesBySeverity.critical} critical`);\n if (issuesBySeverity.serious > 0) severitySummary.push(`${issuesBySeverity.serious} serious`);\n if (issuesBySeverity.moderate > 0) severitySummary.push(`${issuesBySeverity.moderate} moderate`);\n if (issuesBySeverity.low > 0) severitySummary.push(`${issuesBySeverity.low} low`);\n }\n const summary = severitySummary.length > 0 ? ` [${severitySummary.join(', ')}]` : '';\n return `[COMPLETE] Scan finished: ${totalIssues} issues across ${filesScanned} files${summary}`;\n\n case 'error':\n return `[ERROR] ${update.data.message}`;\n\n default:\n return null;\n }\n}\n\n/**\n * Simple progress bar for terminal\n */\nexport function createProgressBar(current: number, total: number, width: number = 40): string {\n if (total === 0) return '█'.repeat(width);\n\n const progress = current / total;\n const filled = Math.round(width * progress);\n const empty = width - filled;\n\n return '█'.repeat(filled) + '░'.repeat(empty);\n}","import { render, type Instance } from 'ink';\nimport React from 'react';\nimport { App } from './App.js';\nimport type { StreamUpdate } from '../../utils/streaming.js';\n\nexport class InteractiveDashboard {\n private app: Instance | null = null;\n private updateHandler: ((update: StreamUpdate) => void) | null = null;\n private getConfigFn: (() => any) | null = null;\n\n async start(): Promise<void> {\n this.app = render(\n React.createElement(App, {\n onReady: (handler, getConfig) => {\n this.updateHandler = handler;\n this.getConfigFn = getConfig;\n },\n }),\n { exitOnCtrlC: false }\n );\n }\n\n stop(): void {\n if (this.app) {\n this.app.unmount();\n this.app = null;\n }\n }\n\n handleStreamUpdate(update: StreamUpdate): void {\n this.updateHandler?.(update);\n }\n\n getAgentConfig(): {\n agentSmith: { aiEnhancement: boolean; minSeverity: string; enabledCategories: Record<string, boolean>; memoryRetentionDays: number };\n performance: { parallel: boolean; cache: boolean; maxConcurrency: number; timeoutMs: number; workers: boolean; streaming: boolean };\n riskThresholds: { critical: number; high: number; medium: number };\n } {\n if (this.getConfigFn) return this.getConfigFn();\n return {\n agentSmith: { aiEnhancement: true, minSeverity: 'low', enabledCategories: { security: true, codeSmells: true, asyncBugs: true, reactPatterns: true, uxPatterns: true, backendPatterns: true }, memoryRetentionDays: 30 },\n performance: { parallel: true, cache: true, maxConcurrency: 4, timeoutMs: 120000, workers: true, streaming: true },\n riskThresholds: { critical: 70, high: 40, medium: 20 },\n };\n }\n}\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { Box, useInput, useApp } from 'ink';\nimport { DashboardProvider, useDashboard } from './state.js';\nimport type { DashboardView } from './types.js';\nimport type { StreamUpdate } from '../../utils/streaming.js';\nimport type { NudgeContent } from '../../utils/output-manager.js';\nimport { getOutputManager } from '../../utils/output-manager.js';\nimport { getWorkingDirectory, getTrieDirectory } from '../../utils/workspace.js';\nimport { getGuardian } from '../../guardian/guardian-agent.js';\nimport { getGuardianState } from '../../guardian/guardian-state.js';\nimport { existsSync } from 'fs';\nimport { readFile, writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\n\nimport { Header } from './components/Header.js';\nimport { Footer } from './components/Footer.js';\nimport { Notification } from './components/Notification.js';\nimport { ConfigDialog } from './components/ConfigDialog.js';\nimport { OverviewView } from './views/OverviewView.js';\nimport { AgentView } from './views/AgentView.js';\nimport { GoalsView } from './views/GoalsView.js';\nimport { HypothesesView } from './views/HypothesesView.js';\nimport { MemoryTreeView } from './views/MemoryTreeView.js';\nimport { RawLogView } from './views/RawLogView.js';\nimport { ChatView } from './views/ChatView.js';\n\nconst MAIN_VIEWS: DashboardView[] = ['overview', 'memory', 'goals', 'hypotheses', 'agent', 'chat'];\n\nfunction DashboardApp({ onReady }: {\n onReady: (handler: (update: StreamUpdate) => void, getConfig: () => any) => void;\n}): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { exit } = useApp();\n const [showConfig, setShowConfig] = useState(false);\n const dispatchRef = useRef(dispatch);\n dispatchRef.current = dispatch;\n const stateRef = useRef(state);\n stateRef.current = state;\n\n const configPath = join(getTrieDirectory(getWorkingDirectory(undefined, true)), 'agent.json');\n\n const loadConfig = useCallback(async () => {\n if (!existsSync(configPath)) return;\n try {\n const raw = await readFile(configPath, 'utf-8');\n const parsed = JSON.parse(raw);\n dispatchRef.current({ type: 'SET_AGENT_CONFIG', config: parsed });\n } catch { /* ignore */ }\n }, [configPath]);\n\n const persistConfig = useCallback(async () => {\n try {\n await mkdir(getTrieDirectory(getWorkingDirectory(undefined, true)), { recursive: true });\n await writeFile(configPath, JSON.stringify(stateRef.current.agentConfig, null, 2), 'utf-8');\n } catch { /* ignore */ }\n }, [configPath]);\n\n const processInsights = useCallback(async (issues: import('../../types/index.js').Issue[]) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const trieAgent = getGuardian(workDir);\n\n if (!stateRef.current.agentInitialized) {\n await trieAgent.initialize();\n dispatchRef.current({ type: 'SET_AGENT_INITIALIZED', initialized: true });\n const persisted = trieAgent.getActiveInsights();\n if (persisted.length > 0) {\n dispatchRef.current({ type: 'ADD_INSIGHTS', insights: persisted });\n }\n }\n\n const filesChanged = stateRef.current.watch.recentChanges.map(c => c.file);\n const newInsights = await trieAgent.processIssues(issues, { filesChanged, isWatchMode: stateRef.current.watch.watching });\n\n if (newInsights.length > 0) {\n dispatchRef.current({ type: 'ADD_INSIGHTS', insights: newInsights });\n }\n\n try {\n const agencyStatus = await trieAgent.getAgencyStatus();\n dispatchRef.current({ type: 'SET_AGENCY_STATUS', status: agencyStatus });\n } catch { /* optional */ }\n } catch (error) {\n dispatchRef.current({ type: 'ADD_ACTIVITY', message: `Trie Agent error: ${error instanceof Error ? error.message : 'unknown'}` });\n }\n }, []);\n\n const refreshGoals = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const goals = agentState.getAllGoals();\n dispatchRef.current({\n type: 'SET_GOALS',\n goals: goals.map(g => {\n const base = { id: g.id, description: g.description, type: g.type, target: g.target, currentValue: g.currentValue, status: g.status, autoGenerated: g.autoGenerated, updatedAt: g.updatedAt };\n return g.category ? { ...base, category: g.category } : base;\n }),\n });\n } catch { /* ignore */ }\n }, []);\n\n const refreshHypotheses = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const hypotheses = agentState.getAllHypotheses();\n dispatchRef.current({\n type: 'SET_HYPOTHESES',\n hypotheses: hypotheses.map(h => {\n const base = { id: h.id, statement: h.statement, confidence: h.confidence, status: h.status, evidenceCount: h.evidence.length, updatedAt: h.updatedAt };\n return h.category ? { ...base, category: h.category } : base;\n }),\n });\n } catch { /* ignore */ }\n }, []);\n\n useEffect(() => {\n void loadConfig();\n void refreshGoals();\n void refreshHypotheses();\n\n const outputManager = getOutputManager();\n outputManager.setMode('tui');\n outputManager.registerTUICallbacks({\n onActivity: (message: string) => {\n dispatchRef.current({ type: 'ADD_ACTIVITY', message });\n },\n onLog: (level: string, message: string) => {\n const time = new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });\n dispatchRef.current({ type: 'STREAM_UPDATE', update: { type: 'raw_log', data: { time, level, message }, timestamp: Date.now() } });\n },\n onNudge: (nudge: NudgeContent) => {\n const action: import('./types.js').DashboardAction = { type: 'SHOW_NOTIFICATION', message: nudge.message, severity: nudge.severity };\n if (nudge.file !== undefined) (action as any).file = nudge.file;\n if (nudge.autoHideMs !== undefined) (action as any).autoHideMs = nudge.autoHideMs;\n dispatchRef.current(action);\n },\n });\n\n const handleUpdate = (update: StreamUpdate) => {\n dispatchRef.current({ type: 'STREAM_UPDATE', update });\n if (update.type === 'scan_complete' && update.data.issues) {\n void processInsights(update.data.issues);\n }\n };\n\n const getConfig = () => {\n const c = stateRef.current.agentConfig;\n return {\n agentSmith: { ...c.agentSmith, enabledCategories: { ...c.agentSmith.enabledCategories } },\n performance: { ...c.performance },\n riskThresholds: { ...c.riskThresholds },\n };\n };\n\n onReady(handleUpdate, getConfig);\n\n return () => {\n outputManager.clearTUICallbacks();\n outputManager.setMode('console');\n };\n }, [loadConfig, onReady, processInsights, refreshGoals, refreshHypotheses]);\n\n useEffect(() => {\n const interval = setInterval(() => {\n dispatchRef.current({ type: 'AUTO_DISMISS_NOTIFICATIONS' });\n }, 5000);\n return () => clearInterval(interval);\n }, []);\n\n useInput((input, key) => {\n if (showConfig) return;\n if (state.view === 'goals' && state.goalsPanel.inputMode === 'add') return;\n if (state.view === 'hypotheses' && state.hypothesesPanel.inputMode === 'add') return;\n\n // Chat view captures all text input; only allow tab and q/esc at the global level\n if (state.view === 'chat') {\n if (key.tab) {\n const currentIndex = MAIN_VIEWS.indexOf(state.view);\n const nextIndex = (currentIndex + 1) % MAIN_VIEWS.length;\n dispatch({ type: 'SET_VIEW', view: MAIN_VIEWS[nextIndex] || 'overview' });\n }\n return;\n }\n\n if (input === 'q' || key.escape) {\n exit();\n process.exit(0);\n }\n\n if (key.tab) {\n const currentIndex = MAIN_VIEWS.indexOf(state.view);\n const nextIndex = currentIndex >= 0 ? (currentIndex + 1) % MAIN_VIEWS.length : 0;\n dispatch({ type: 'SET_VIEW', view: MAIN_VIEWS[nextIndex] || 'overview' });\n return;\n }\n\n if (input === 's') { setShowConfig(true); return; }\n if (input === 'l') { dispatch({ type: 'SET_VIEW', view: 'rawlog' }); return; }\n if (input === 'g') { dispatch({ type: 'SET_VIEW', view: 'agent' }); return; }\n if (input === 'o') { dispatch({ type: 'SET_VIEW', view: 'goals' }); void refreshGoals(); return; }\n if (input === 'y') { dispatch({ type: 'SET_VIEW', view: 'hypotheses' }); void refreshHypotheses(); return; }\n if (input === 't') { dispatch({ type: 'SET_VIEW', view: 'memory' }); return; }\n if (input === 'c') { dispatch({ type: 'SET_VIEW', view: 'chat' }); return; }\n\n if (state.view === 'agent' || state.view === 'memory') return;\n\n if (input === 'b') dispatch({ type: 'GO_BACK' });\n if (input === 'n') dispatch({ type: 'NEXT_PAGE' });\n if (input === 'p') dispatch({ type: 'PREV_PAGE' });\n });\n\n let viewComponent: React.ReactElement;\n switch (state.view) {\n case 'overview': viewComponent = <OverviewView />; break;\n case 'agent': viewComponent = <AgentView />; break;\n case 'goals': viewComponent = <GoalsView />; break;\n case 'hypotheses': viewComponent = <HypothesesView />; break;\n case 'memory': viewComponent = <MemoryTreeView />; break;\n case 'rawlog': viewComponent = <RawLogView />; break;\n case 'chat': viewComponent = <ChatView />; break;\n default: viewComponent = <OverviewView />;\n }\n\n return (\n <Box flexDirection=\"column\" height={process.stdout.rows || 40}>\n <Header />\n <Notification />\n <Box flexGrow={1} flexDirection=\"column\" overflow=\"hidden\">\n {showConfig ? (\n <ConfigDialog onClose={() => { setShowConfig(false); void persistConfig(); }} />\n ) : (\n viewComponent\n )}\n </Box>\n <Footer />\n </Box>\n );\n}\n\nexport interface AppProps {\n onReady: (\n handler: (update: StreamUpdate) => void,\n getConfig: () => any,\n ) => void;\n}\n\nexport function App({ onReady }: AppProps): React.ReactElement {\n return (\n <DashboardProvider>\n <DashboardApp onReady={onReady} />\n </DashboardProvider>\n );\n}\n","import React, { createContext, useContext, useReducer, type Dispatch } from 'react';\nimport type {\n DashboardState,\n DashboardAction,\n AgentConfig,\n} from './types.js';\nimport type { StreamUpdate } from '../../utils/streaming.js';\n\nfunction addActivity(state: DashboardState, message: string): DashboardState {\n const time = new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });\n const activityLog = [{ time, message }, ...state.activityLog].slice(0, 50);\n return { ...state, activityLog };\n}\n\nfunction getVisibleInsights(state: DashboardState) {\n return state.agentInsights.filter(i => !i.dismissed);\n}\n\nfunction getMemoryTreeNodes(state: DashboardState): Array<{ id: string; level: number }> {\n const nodes: Array<{ id: string; level: number }> = [];\n const { expandedNodes, snapshot, globalPatterns } = state.memoryTree;\n\n if (!snapshot) return nodes;\n\n const fileNodes = snapshot.nodes.filter(n => n.type === 'file');\n const changeNodes = snapshot.nodes.filter(n => n.type === 'change');\n const patternNodes = snapshot.nodes.filter(n => n.type === 'pattern');\n const incidentNodes = snapshot.nodes.filter(n => n.type === 'incident');\n const decisionNodes = snapshot.nodes.filter(n => n.type === 'decision');\n\n nodes.push({ id: 'files', level: 0 });\n if (expandedNodes.has('files')) {\n fileNodes.slice(0, 15).forEach(n => nodes.push({ id: `file-${n.id}`, level: 1 }));\n }\n\n nodes.push({ id: 'changes', level: 0 });\n if (expandedNodes.has('changes')) {\n changeNodes.slice(0, 10).forEach(n => nodes.push({ id: `change-${n.id}`, level: 1 }));\n }\n\n nodes.push({ id: 'patterns', level: 0 });\n if (expandedNodes.has('patterns')) {\n patternNodes.slice(0, 10).forEach(n => nodes.push({ id: `pattern-${n.id}`, level: 1 }));\n }\n\n nodes.push({ id: 'incidents', level: 0 });\n if (expandedNodes.has('incidents')) {\n incidentNodes.slice(0, 10).forEach(n => nodes.push({ id: `incident-${n.id}`, level: 1 }));\n }\n\n nodes.push({ id: 'decisions', level: 0 });\n if (expandedNodes.has('decisions')) {\n decisionNodes.slice(0, 10).forEach(n => nodes.push({ id: `decision-${n.id}`, level: 1 }));\n }\n\n nodes.push({ id: 'cross-project', level: 0 });\n if (expandedNodes.has('cross-project')) {\n globalPatterns.slice(0, 5).forEach(p => nodes.push({ id: `global-${p.id}`, level: 1 }));\n }\n\n return nodes;\n}\n\nfunction handleStreamUpdate(state: DashboardState, update: StreamUpdate): DashboardState {\n let s = { ...state, lastUpdate: Date.now() };\n\n switch (update.type) {\n case 'progress': {\n const oldProgress = s.progress;\n if ((oldProgress.totalFiles === 0 && update.data.totalFiles > 0) ||\n (oldProgress.processedFiles > 0 && update.data.processedFiles === 0)) {\n s.scanStartTime = Date.now();\n s.scanComplete = false;\n s = { ...s };\n delete s.scanEndTime;\n }\n s.progress = update.data;\n if (update.data.issuesBySeverity?.critical > 0) {\n s.alerts = { hasCritical: true, lastCriticalAt: update.timestamp };\n }\n if (update.data.currentFile && update.data.processedFiles % 10 === 0 &&\n update.data.processedFiles !== oldProgress.processedFiles) {\n s = addActivity(s, `Scanned ${update.data.processedFiles}/${update.data.totalFiles} files`);\n }\n break;\n }\n case 'agent_start':\n s = addActivity(s, `[*] Scout started: ${update.data.agent}`);\n break;\n case 'agent_complete':\n s = addActivity(s, `[+] Scout complete: ${update.data.agent} (${update.data.issueCount} issues)`);\n break;\n case 'issue_found':\n s.issues = [...s.issues, update.data];\n if (update.data.severity === 'critical' || update.data.severity === 'serious') {\n const icon = update.data.severity === 'critical' ? '[!]' : '[x]';\n const fileName = update.data.file?.split('/').pop() || 'unknown';\n s = addActivity(s, `${icon} ${update.data.severity.toUpperCase()}: ${update.data.message?.slice(0, 40) || fileName}`);\n if (update.data.severity === 'critical') {\n s.alerts = { hasCritical: true, lastCriticalAt: update.timestamp };\n }\n }\n break;\n case 'scan_complete':\n s.scanComplete = true;\n s.scanEndTime = update.timestamp;\n s.progress = { ...s.progress, processedFiles: s.progress.totalFiles };\n if (update.data.issues && Array.isArray(update.data.issues)) {\n s.issues = update.data.issues;\n }\n s = addActivity(s, `=== Scan complete - ${s.progress.totalIssues} issues ===`);\n break;\n case 'watch_status':\n s.watch = {\n watching: update.data.watching ?? s.watch.watching,\n directories: update.data.directories ?? s.watch.directories,\n debounceMs: update.data.debounceMs ?? s.watch.debounceMs,\n lastChange: update.data.lastChange ?? s.watch.lastChange,\n recentChanges: update.data.recentChanges ?? s.watch.recentChanges,\n };\n if (update.data.watching !== undefined) {\n s = addActivity(s, update.data.watching\n ? `[*] Watch mode: ACTIVE (${update.data.directories ?? 0} dirs)`\n : '[*] Watch mode: OFF');\n }\n break;\n case 'watch_change': {\n const entry = { file: update.data.file, time: new Date(update.timestamp).toLocaleTimeString('en-US', { hour12: false }) };\n s.watch = {\n ...s.watch,\n recentChanges: [entry, ...s.watch.recentChanges].slice(0, 5),\n lastChange: entry.time,\n };\n s = addActivity(s, `Change detected: ${update.data.file}`);\n break;\n }\n case 'signal_extracted': {\n const se = { ...s.signalExtraction };\n if (update.data.decisions) se.decisionsExtracted += update.data.decisions;\n if (update.data.facts) se.factsExtracted += update.data.facts;\n if (update.data.blockers) se.blockersExtracted += update.data.blockers;\n if (update.data.questions) se.questionsExtracted += update.data.questions;\n s.signalExtraction = se;\n const total = (update.data.decisions || 0) + (update.data.facts || 0) +\n (update.data.blockers || 0) + (update.data.questions || 0);\n if (total > 0) {\n s = addActivity(s, `[+] Extracted ${total} signals (${update.data.decisions}d, ${update.data.facts}f, ${update.data.blockers}b)`);\n }\n break;\n }\n case 'memory':\n if (update.data.action === 'saving') s = addActivity(s, '[~] Saving to memory...');\n else if (update.data.action === 'saved') s = addActivity(s, `[+] Memory updated: ${update.data.details || 'context saved'}`);\n else if (update.data.action === 'learning') s = addActivity(s, `[~] Learning: ${update.data.details || 'analyzing patterns'}`);\n break;\n case 'raw_log':\n s.rawLog = [{\n time: update.data.time || new Date(update.timestamp).toLocaleTimeString('en-US', { hour12: false }),\n level: update.data.level,\n message: update.data.message,\n }, ...s.rawLog].slice(0, 500);\n break;\n }\n\n return s;\n}\n\nfunction applyAgentConfigPatch(current: AgentConfig, patch: Partial<AgentConfig>): AgentConfig {\n const config = { ...current };\n if (patch.agentSmith) {\n config.agentSmith = {\n ...config.agentSmith,\n ...patch.agentSmith,\n enabledCategories: {\n ...config.agentSmith.enabledCategories,\n ...(patch.agentSmith.enabledCategories || {}),\n },\n };\n }\n if (patch.performance) config.performance = { ...config.performance, ...patch.performance };\n if (patch.riskThresholds) config.riskThresholds = { ...config.riskThresholds, ...patch.riskThresholds };\n return config;\n}\n\nexport function dashboardReducer(state: DashboardState, action: DashboardAction): DashboardState {\n switch (action.type) {\n case 'STREAM_UPDATE':\n return handleStreamUpdate(state, action.update);\n\n case 'SET_VIEW':\n return { ...state, previousView: state.view, view: action.view };\n\n case 'GO_BACK':\n return { ...state, view: state.previousView || 'overview', previousView: null };\n\n case 'ADD_ACTIVITY':\n return addActivity(state, action.message);\n\n case 'SHOW_NOTIFICATION': {\n const now = Date.now();\n const historyEntry: DashboardState['notificationHistory'][0] = {\n message: action.message,\n severity: action.severity,\n timestamp: now,\n dismissed: false,\n };\n if (action.file !== undefined) historyEntry.file = action.file;\n\n const notification: DashboardState['notification'] = {\n active: true,\n message: action.message,\n severity: action.severity,\n timestamp: now,\n };\n if (action.file !== undefined) notification.file = action.file;\n if (action.autoHideMs !== undefined) notification.autoHideAt = now + action.autoHideMs;\n\n let s: DashboardState = {\n ...state,\n notification,\n notificationHistory: [historyEntry, ...state.notificationHistory].slice(0, 50),\n };\n const prefix = action.severity === 'critical' ? '[!]' : action.severity === 'warning' ? '[!]' : '[>]';\n s = addActivity(s, `${prefix} ${action.message}`);\n return s;\n }\n\n case 'DISMISS_NOTIFICATION': {\n if (!state.notification) return state;\n const history = state.notificationHistory.map(h =>\n h.timestamp === state.notification?.timestamp ? { ...h, dismissed: true } : h\n );\n return { ...state, notification: null, notificationHistory: history };\n }\n\n case 'SET_INSIGHTS':\n return { ...state, agentInsights: action.insights };\n\n case 'ADD_INSIGHTS': {\n const existing = state.agentInsights;\n const newOnes = action.insights.filter(ni =>\n !existing.some(ei => ei.message === ni.message && !ei.dismissed)\n );\n const merged = [...newOnes, ...existing].slice(0, 50);\n let s = { ...state, agentInsights: merged };\n if (newOnes.length > 0) {\n s = addActivity(s, `Trie Agent: ${newOnes.length} new insight${newOnes.length > 1 ? 's' : ''}`);\n }\n return s;\n }\n\n case 'SET_AGENT_INITIALIZED':\n return { ...state, agentInitialized: action.initialized };\n\n case 'SET_AGENCY_STATUS':\n return { ...state, agencyStatus: action.status };\n\n case 'SELECT_INSIGHT':\n return { ...state, selectedInsight: action.index };\n\n case 'TOGGLE_INSIGHT':\n return {\n ...state,\n expandedInsight: state.expandedInsight === action.index ? null : action.index,\n };\n\n case 'DISMISS_INSIGHT': {\n const visible = getVisibleInsights(state);\n const insight = visible[action.index];\n if (!insight) return state;\n const insights = state.agentInsights.map(i =>\n i.id === insight.id ? { ...i, dismissed: true } : i\n );\n const remaining = insights.filter(i => !i.dismissed);\n return {\n ...state,\n agentInsights: insights,\n selectedInsight: Math.min(state.selectedInsight, Math.max(0, remaining.length - 1)),\n expandedInsight: state.expandedInsight === action.index ? null : state.expandedInsight,\n };\n }\n\n case 'IGNORE_INSIGHT': {\n const visible = getVisibleInsights(state);\n const insight = visible[action.index];\n if (!insight) return state;\n const insights = state.agentInsights.map(i =>\n i.id === insight.id ? { ...i, dismissed: true } : i\n );\n const remaining = insights.filter(i => !i.dismissed);\n let s = { ...state, agentInsights: insights };\n s.selectedInsight = Math.min(s.selectedInsight, Math.max(0, remaining.length - 1));\n s.expandedInsight = s.expandedInsight === action.index ? null : s.expandedInsight;\n s = addActivity(s, `Ignored: ${insight.message.slice(0, 40)}...`);\n return s;\n }\n\n case 'CLEAR_DISMISSED_INSIGHTS': {\n const dismissedCount = state.agentInsights.filter(i => i.dismissed).length;\n if (dismissedCount === 0) return addActivity(state, 'No dismissed insights to clear');\n const filtered = state.agentInsights.filter(i => !i.dismissed);\n let s: DashboardState = {\n ...state,\n agentInsights: filtered,\n notificationHistory: [] as DashboardState['notificationHistory'],\n expandedInsight: null,\n scrollPositions: { ...state.scrollPositions, agent: 0 },\n };\n s.selectedInsight = Math.min(s.selectedInsight, Math.max(0, filtered.length - 1));\n s = addActivity(s, `Cleared ${dismissedCount} dismissed insight${dismissedCount !== 1 ? 's' : ''}`);\n return s;\n }\n\n case 'SET_GOALS':\n return { ...state, goalsPanel: { ...state.goalsPanel, goals: action.goals } };\n\n case 'SET_GOALS_INPUT_MODE':\n return { ...state, goalsPanel: { ...state.goalsPanel, inputMode: action.mode, inputBuffer: action.mode === 'add' ? '' : state.goalsPanel.inputBuffer } };\n\n case 'SET_GOALS_INPUT_BUFFER':\n return { ...state, goalsPanel: { ...state.goalsPanel, inputBuffer: action.buffer } };\n\n case 'SELECT_GOAL':\n return { ...state, goalsPanel: { ...state.goalsPanel, selectedIndex: action.index } };\n\n case 'SET_HYPOTHESES':\n return { ...state, hypothesesPanel: { ...state.hypothesesPanel, hypotheses: action.hypotheses } };\n\n case 'SET_HYPOTHESES_INPUT_MODE':\n return { ...state, hypothesesPanel: { ...state.hypothesesPanel, inputMode: action.mode, inputBuffer: action.mode === 'add' ? '' : state.hypothesesPanel.inputBuffer } };\n\n case 'SET_HYPOTHESES_INPUT_BUFFER':\n return { ...state, hypothesesPanel: { ...state.hypothesesPanel, inputBuffer: action.buffer } };\n\n case 'SELECT_HYPOTHESIS':\n return { ...state, hypothesesPanel: { ...state.hypothesesPanel, selectedIndex: action.index } };\n\n case 'SET_MEMORY_TREE':\n return {\n ...state,\n memoryTree: { ...state.memoryTree, loaded: true, snapshot: action.snapshot, globalPatterns: action.patterns },\n };\n\n case 'SELECT_MEMORY_NODE':\n return { ...state, memoryTree: { ...state.memoryTree, selectedNode: action.nodeId } };\n\n case 'TOGGLE_MEMORY_NODE': {\n const expandable = ['files', 'changes', 'patterns', 'incidents', 'decisions', 'cross-project'];\n if (!expandable.includes(action.nodeId)) return state;\n const expanded = new Set(state.memoryTree.expandedNodes);\n if (expanded.has(action.nodeId)) expanded.delete(action.nodeId);\n else expanded.add(action.nodeId);\n return { ...state, memoryTree: { ...state.memoryTree, expandedNodes: expanded } };\n }\n\n case 'SET_AGENT_BRAIN':\n return {\n ...state,\n agentBrain: {\n ...state.agentBrain,\n loaded: true,\n decisions: action.decisions,\n patterns: action.patterns,\n ledgerHash: action.ledgerHash,\n },\n };\n\n case 'SET_CHAT_INPUT':\n return { ...state, chatState: { ...state.chatState, inputBuffer: action.buffer } };\n\n case 'ADD_CHAT_MESSAGE':\n return {\n ...state,\n chatState: {\n ...state.chatState,\n messages: [...state.chatState.messages, { role: action.role, content: action.content, timestamp: Date.now() }].slice(-20),\n },\n };\n\n case 'SET_CHAT_LOADING':\n return { ...state, chatState: { ...state.chatState, loading: action.loading } };\n\n case 'SET_AGENT_CONFIG':\n return { ...state, agentConfig: applyAgentConfigPatch(state.agentConfig, action.config) };\n\n case 'NAVIGATE_UP': {\n if (state.view === 'agent') {\n const visible = getVisibleInsights(state);\n if (visible.length === 0) return state;\n const idx = Math.max(0, state.selectedInsight - 1);\n const scroll = Math.min(state.scrollPositions.agent, idx);\n return { ...state, selectedInsight: idx, scrollPositions: { ...state.scrollPositions, agent: scroll } };\n }\n if (state.view === 'memory') {\n const nodes = getMemoryTreeNodes(state);\n const cur = nodes.findIndex(n => n.id === state.memoryTree.selectedNode);\n if (cur > 0) {\n return { ...state, memoryTree: { ...state.memoryTree, selectedNode: nodes[cur - 1]?.id || 'severity' } };\n }\n return state;\n }\n return state;\n }\n\n case 'NAVIGATE_DOWN': {\n if (state.view === 'agent') {\n const visible = getVisibleInsights(state);\n if (visible.length === 0) return state;\n const maxIdx = Math.max(0, visible.length - 1);\n const idx = Math.min(maxIdx, state.selectedInsight + 1);\n const visibleItems = Math.floor(20 / 4);\n let scroll = state.scrollPositions.agent;\n if (idx >= scroll + visibleItems) scroll = idx - visibleItems + 1;\n return { ...state, selectedInsight: idx, scrollPositions: { ...state.scrollPositions, agent: scroll } };\n }\n if (state.view === 'memory') {\n const nodes = getMemoryTreeNodes(state);\n const cur = nodes.findIndex(n => n.id === state.memoryTree.selectedNode);\n if (cur < nodes.length - 1) {\n return { ...state, memoryTree: { ...state.memoryTree, selectedNode: nodes[cur + 1]?.id || 'severity' } };\n }\n return state;\n }\n return state;\n }\n\n case 'NEXT_PAGE':\n return { ...state, activityPage: Math.min(Math.max(1, Math.ceil(state.activityLog.length / 6)) - 1, state.activityPage + 1) };\n\n case 'PREV_PAGE':\n return { ...state, activityPage: Math.max(0, state.activityPage - 1) };\n\n case 'SET_RAW_LOG_PAGE':\n return { ...state, rawLogPage: action.page };\n\n case 'AUTO_DISMISS_NOTIFICATIONS': {\n const now = Date.now();\n let changed = false;\n const history = state.notificationHistory.map(n => {\n if (!n.dismissed && n.severity !== 'critical') {\n const age = now - n.timestamp;\n const autoHideMs = n.severity === 'info' ? 30000 : 60000;\n if (age > autoHideMs) { changed = true; return { ...n, dismissed: true }; }\n }\n return n;\n });\n if (!changed) return state;\n return { ...state, notificationHistory: history };\n }\n\n default:\n return state;\n }\n}\n\nexport function createInitialState(): DashboardState {\n return {\n issues: [],\n progress: {\n totalFiles: 0,\n processedFiles: 0,\n activeAgents: [],\n completedAgents: [],\n totalIssues: 0,\n issuesBySeverity: { critical: 0, serious: 0, moderate: 0, low: 0 },\n },\n filter: { severity: 'all', agent: 'all', search: '' },\n view: 'overview',\n previousView: null,\n lastUpdate: Date.now(),\n scanComplete: true,\n startTime: Date.now(),\n scanStartTime: Date.now(),\n activityLog: [],\n activityPage: 0,\n quietMode: false,\n signalExtraction: {\n enabled: !!process.env['ANTHROPIC_API_KEY'],\n decisionsExtracted: 0,\n factsExtracted: 0,\n blockersExtracted: 0,\n questionsExtracted: 0,\n },\n alerts: { hasCritical: false },\n watch: { watching: false, directories: 0, recentChanges: [] },\n rawLog: [],\n rawLogPage: 0,\n scrollPositions: { overview: 0, rawlog: 0, agent: 0, goals: 0, hypotheses: 0, memory: 0, chat: 0 },\n notification: null,\n notificationHistory: [],\n agentInsights: [],\n agentInitialized: false,\n agencyStatus: null,\n selectedInsight: 0,\n expandedInsight: null,\n agentConfig: {\n agentSmith: {\n aiEnhancement: true,\n minSeverity: 'low',\n enabledCategories: { security: true, codeSmells: true, asyncBugs: true, reactPatterns: true, uxPatterns: true, backendPatterns: true },\n memoryRetentionDays: 30,\n },\n performance: { parallel: true, cache: true, maxConcurrency: 4, timeoutMs: 120000, workers: true, streaming: true },\n riskThresholds: { critical: 70, high: 40, medium: 20 },\n },\n goalsPanel: { goals: [], selectedIndex: 0, selectedAchievedIndex: 0, inputMode: 'browse', inputBuffer: '', lastRefresh: 0 },\n hypothesesPanel: { hypotheses: [], selectedIndex: 0, selectedCompletedIndex: 0, inputMode: 'browse', inputBuffer: '', lastRefresh: 0 },\n memoryTree: { loaded: false, snapshot: null, globalPatterns: [], expandedNodes: new Set(['files']), selectedNode: 'files', scrollPosition: 0, lastRefresh: 0 },\n agentBrain: { loaded: false, decisions: [], patterns: [], ledgerHash: null, selectedIndex: 0, expandedIndex: null },\n chatState: { messages: [], inputBuffer: '', loading: false },\n };\n}\n\ninterface DashboardContextValue {\n state: DashboardState;\n dispatch: Dispatch<DashboardAction>;\n}\n\nconst DashboardContext = createContext<DashboardContextValue | null>(null);\n\nexport function DashboardProvider({ children, initialState }: { children: React.ReactNode; initialState?: DashboardState }) {\n const [state, dispatch] = useReducer(dashboardReducer, initialState || createInitialState());\n const value = React.useMemo(() => ({ state, dispatch }), [state, dispatch]);\n return <DashboardContext.Provider value={value}>{children}</DashboardContext.Provider>;\n}\n\nexport function useDashboard(): DashboardContextValue {\n const ctx = useContext(DashboardContext);\n if (!ctx) throw new Error('useDashboard must be used within DashboardProvider');\n return ctx;\n}\n\nexport function useDispatch(): Dispatch<DashboardAction> {\n return useDashboard().dispatch;\n}\n\nexport { getVisibleInsights, getMemoryTreeNodes };\n","/**\n * OutputManager - Unified output abstraction for all UI modes\n * \n * Routes content to the appropriate renderer based on current mode:\n * - TUI: Routes to InteractiveDashboard\n * - Console: Routes to console.error with ANSI colors\n * - MCP: Accumulates for markdown response\n * - JSON: Accumulates for JSON response\n * - Silent: Discards output\n * \n * This solves the problem of skills suppressing content in interactive mode\n * by redirecting it to the dashboard instead.\n */\n\nimport type { Issue } from '../types/index.js';\nimport type { StreamingManager } from './streaming.js';\nimport { isInteractiveMode } from './progress.js';\nimport pc from 'picocolors';\n\n// Output content types\nexport type OutputContentType = \n | 'banner' // ASCII art banner from skills\n | 'progress' // Progress update\n | 'issue' // Issue found\n | 'snippet' // Code snippet with context\n | 'cost' // Cost estimate from Moneybags\n | 'readiness' // Production readiness score\n | 'semantic' // Semantic analysis (data flow, race conditions)\n | 'attack' // Attack surface analysis\n | 'activity' // Activity log message\n | 'report' // Full markdown report section\n | 'log' // Raw log message\n | 'nudge'; // Proactive guardian notification\n\n// Nudge content for proactive notifications\nexport interface NudgeContent {\n message: string;\n severity: 'critical' | 'warning' | 'info';\n file?: string;\n autoHideMs?: number; // Auto-dismiss after this many milliseconds\n}\n\nexport interface BannerContent {\n skill: string;\n art: string;\n quote?: string;\n version?: string;\n}\n\nexport interface SnippetContent {\n file: string;\n lines: string[];\n highlightLine?: number;\n startLine: number;\n}\n\nexport interface CostContent {\n fixNowCost: number;\n productionCost: number;\n savings: number;\n perIssue?: Array<{ issue: string; cost: number }>;\n}\n\nexport interface ReadinessContent {\n score: number;\n requirementsMet: number;\n total: number;\n status: 'ready' | 'caution' | 'not-ready';\n requirements?: Array<{ name: string; met: boolean }>;\n}\n\nexport interface SemanticContent {\n dataFlowIssues: number;\n raceConditions: number;\n authIssues: number;\n details?: Array<{ type: string; description: string; file: string; line?: number }>;\n}\n\nexport interface AttackSurfaceContent {\n totalEndpoints: number;\n unprotected: number;\n riskScore: number;\n endpoints?: Array<{ path: string; method: string; auth: boolean; sensitive: boolean }>;\n}\n\nexport interface OutputContent {\n type: OutputContentType;\n content: any;\n timestamp?: number;\n metadata?: {\n severity?: 'critical' | 'serious' | 'moderate' | 'low';\n agent?: string;\n file?: string;\n };\n}\n\nexport type OutputMode = 'tui' | 'console' | 'mcp' | 'json' | 'silent';\n\n/**\n * Central output manager - singleton\n */\nclass OutputManagerImpl {\n private mode: OutputMode = 'console';\n private streamingManager?: StreamingManager;\n private markdownBuffer: string[] = [];\n private jsonBuffer: OutputContent[] = [];\n private rawLogBuffer: Array<{ time: string; level: string; message: string }> = [];\n \n // Callbacks for TUI integration (explicitly allow undefined for exactOptionalPropertyTypes)\n private onBanner: ((content: BannerContent) => void) | undefined = undefined;\n private onSnippet: ((content: SnippetContent) => void) | undefined = undefined;\n private onCost: ((content: CostContent) => void) | undefined = undefined;\n private onReadiness: ((content: ReadinessContent) => void) | undefined = undefined;\n private onSemantic: ((content: SemanticContent) => void) | undefined = undefined;\n private onAttack: ((content: AttackSurfaceContent) => void) | undefined = undefined;\n private onActivity: ((message: string) => void) | undefined = undefined;\n private onLog: ((level: string, message: string) => void) | undefined = undefined;\n private onNudge: ((content: NudgeContent) => void) | undefined = undefined;\n\n /**\n * Set the output mode\n */\n setMode(mode: OutputMode): void {\n this.mode = mode;\n }\n\n /**\n * Get current output mode\n */\n getMode(): OutputMode {\n return this.mode;\n }\n\n /**\n * Set streaming manager for TUI updates\n */\n setStreamingManager(manager: StreamingManager): void {\n this.streamingManager = manager;\n }\n\n /**\n * Register TUI callbacks for rich content\n */\n registerTUICallbacks(callbacks: {\n onBanner?: (content: BannerContent) => void;\n onSnippet?: (content: SnippetContent) => void;\n onCost?: (content: CostContent) => void;\n onReadiness?: (content: ReadinessContent) => void;\n onSemantic?: (content: SemanticContent) => void;\n onAttack?: (content: AttackSurfaceContent) => void;\n onActivity?: (message: string) => void;\n onLog?: (level: string, message: string) => void;\n onNudge?: (content: NudgeContent) => void;\n }): void {\n this.onBanner = callbacks.onBanner;\n this.onSnippet = callbacks.onSnippet;\n this.onCost = callbacks.onCost;\n this.onReadiness = callbacks.onReadiness;\n this.onSemantic = callbacks.onSemantic;\n this.onAttack = callbacks.onAttack;\n this.onActivity = callbacks.onActivity;\n this.onLog = callbacks.onLog;\n this.onNudge = callbacks.onNudge;\n }\n\n /**\n * Clear TUI callbacks (when dashboard stops)\n */\n clearTUICallbacks(): void {\n this.onBanner = undefined;\n this.onSnippet = undefined;\n this.onCost = undefined;\n this.onReadiness = undefined;\n this.onSemantic = undefined;\n this.onAttack = undefined;\n this.onActivity = undefined;\n this.onLog = undefined;\n this.onNudge = undefined;\n }\n\n /**\n * Emit content - routes to appropriate handler based on mode\n */\n emit(content: OutputContent): void {\n content.timestamp = content.timestamp ?? Date.now();\n \n switch (this.mode) {\n case 'tui':\n this.routeToTUI(content);\n break;\n case 'console':\n this.routeToConsole(content);\n break;\n case 'mcp':\n this.routeToMarkdown(content);\n break;\n case 'json':\n this.routeToJson(content);\n break;\n case 'silent':\n // Discard\n break;\n }\n \n // Always capture in raw log buffer\n this.captureRawLog(content);\n }\n\n /**\n * Route content to TUI (dashboard callbacks)\n */\n private routeToTUI(content: OutputContent): void {\n switch (content.type) {\n case 'banner':\n this.onBanner?.(content.content as BannerContent);\n break;\n case 'snippet':\n this.onSnippet?.(content.content as SnippetContent);\n break;\n case 'cost':\n this.onCost?.(content.content as CostContent);\n break;\n case 'readiness':\n this.onReadiness?.(content.content as ReadinessContent);\n break;\n case 'semantic':\n this.onSemantic?.(content.content as SemanticContent);\n break;\n case 'attack':\n this.onAttack?.(content.content as AttackSurfaceContent);\n break;\n case 'activity':\n this.onActivity?.(content.content as string);\n break;\n case 'log':\n const level = content.metadata?.severity ?? 'info';\n this.onLog?.(level, content.content as string);\n break;\n case 'issue':\n // Issues go through streaming manager\n this.streamingManager?.reportIssue(content.content as Issue);\n break;\n case 'progress':\n // Progress goes through streaming manager\n break;\n case 'report':\n // Reports are captured but not directly displayed\n break;\n case 'nudge':\n // Proactive notifications go to dashboard\n this.onNudge?.(content.content as NudgeContent);\n break;\n }\n }\n\n /**\n * Route content to console (ANSI formatted)\n */\n private routeToConsole(content: OutputContent): void {\n switch (content.type) {\n case 'banner':\n const banner = content.content as BannerContent;\n console.error('\\n' + '='.repeat(60));\n console.error(banner.art);\n if (banner.version) {\n console.error(` ${banner.skill} v${banner.version}`);\n }\n console.error('');\n if (banner.quote) {\n console.error(` \"${banner.quote}\"`);\n }\n console.error('='.repeat(60) + '\\n');\n break;\n \n case 'snippet':\n const snippet = content.content as SnippetContent;\n console.error(`\\n${pc.dim('File:')} ${snippet.file}`);\n for (let i = 0; i < snippet.lines.length; i++) {\n const lineNum = snippet.startLine + i;\n const isHighlight = lineNum === snippet.highlightLine;\n const prefix = isHighlight ? pc.red('→') : ' ';\n const lineNumStr = pc.dim(lineNum.toString().padStart(4));\n const line = isHighlight ? pc.yellow(snippet.lines[i]) : snippet.lines[i];\n console.error(`${prefix} ${lineNumStr} | ${line}`);\n }\n console.error('');\n break;\n \n case 'cost':\n const cost = content.content as CostContent;\n console.error('\\n' + pc.cyan('[$] Cost Estimate:'));\n console.error(` Fix now: ${pc.green(this.formatCurrency(cost.fixNowCost))}`);\n console.error(` If production: ${pc.red(this.formatCurrency(cost.productionCost))}`);\n console.error(` Savings: ${pc.yellow(this.formatCurrency(cost.savings))}`);\n console.error('');\n break;\n \n case 'readiness':\n const readiness = content.content as ReadinessContent;\n const statusColor = readiness.status === 'ready' ? pc.green : \n readiness.status === 'caution' ? pc.yellow : pc.red;\n console.error('\\n' + pc.cyan('[%] Production Readiness:'));\n console.error(` Score: ${statusColor(readiness.score + '/100')}`);\n console.error(` Requirements: ${readiness.requirementsMet}/${readiness.total}`);\n console.error(` Status: ${statusColor(readiness.status.toUpperCase())}`);\n console.error('');\n break;\n \n case 'semantic':\n const semantic = content.content as SemanticContent;\n console.error('\\n' + pc.cyan('[?] Semantic Analysis:'));\n if (semantic.dataFlowIssues > 0) {\n console.error(` ${pc.red('[!]')} ${semantic.dataFlowIssues} data flow vulnerabilities`);\n }\n if (semantic.raceConditions > 0) {\n console.error(` ${pc.yellow('[~]')} ${semantic.raceConditions} race conditions`);\n }\n if (semantic.authIssues > 0) {\n console.error(` ${pc.red('[!]')} ${semantic.authIssues} authentication issues`);\n }\n console.error('');\n break;\n \n case 'attack':\n const attack = content.content as AttackSurfaceContent;\n console.error('\\n' + pc.cyan('[>] Attack Surface:'));\n console.error(` Endpoints: ${attack.totalEndpoints}`);\n if (attack.unprotected > 0) {\n console.error(` ${pc.red('Unprotected:')} ${attack.unprotected}`);\n }\n console.error(` Risk Score: ${attack.riskScore}/100`);\n console.error('');\n break;\n \n case 'activity':\n console.error(pc.dim(`[${this.formatTime()}]`) + ` ${content.content}`);\n break;\n \n case 'log':\n // For log content, severity can be any string (info, warn, error, debug)\n const logLevel = String(content.metadata?.severity ?? 'info');\n const levelColor = logLevel === 'error' || logLevel === 'critical' ? pc.red :\n logLevel === 'warn' || logLevel === 'serious' ? pc.yellow :\n logLevel === 'info' || logLevel === 'moderate' ? pc.blue : pc.dim;\n console.error(levelColor(`[${logLevel.toUpperCase()}]`) + ` ${content.content}`);\n break;\n \n case 'issue':\n const issue = content.content as Issue;\n const sevColor = issue.severity === 'critical' ? pc.red :\n issue.severity === 'serious' ? pc.yellow :\n issue.severity === 'moderate' ? pc.blue : pc.dim;\n console.error(`${sevColor(`[${issue.severity.toUpperCase()}]`)} ${issue.issue}`);\n console.error(` ${pc.dim('File:')} ${issue.file}:${issue.line ?? '?'}`);\n break;\n \n case 'report':\n // Reports are printed as-is (already formatted)\n console.error(content.content);\n break;\n \n case 'nudge':\n // Proactive notifications in console mode\n const nudge = content.content as NudgeContent;\n const nudgeColor = nudge.severity === 'critical' ? pc.red :\n nudge.severity === 'warning' ? pc.yellow : pc.cyan;\n const nudgeIcon = nudge.severity === 'critical' ? '[!!!]' :\n nudge.severity === 'warning' ? '[!]' : '[>]';\n console.error('');\n console.error(nudgeColor('━'.repeat(60)));\n console.error(nudgeColor(`${nudgeIcon} TRIE AGENT SAYS:`));\n console.error(nudgeColor('━'.repeat(60)));\n console.error('');\n console.error(` ${pc.bold(nudge.message)}`);\n if (nudge.file) {\n console.error(` ${pc.dim('File:')} ${nudge.file}`);\n }\n console.error('');\n console.error(nudgeColor('━'.repeat(60)));\n console.error('');\n break;\n }\n }\n\n /**\n * Route content to markdown buffer\n */\n private routeToMarkdown(content: OutputContent): void {\n switch (content.type) {\n case 'banner':\n const banner = content.content as BannerContent;\n this.markdownBuffer.push(`## ${banner.skill}\\n`);\n if (banner.quote) {\n this.markdownBuffer.push(`> ${banner.quote}\\n`);\n }\n break;\n \n case 'snippet':\n const snippet = content.content as SnippetContent;\n this.markdownBuffer.push(`\\n**File:** \\`${snippet.file}\\`\\n`);\n this.markdownBuffer.push('```\\n');\n for (let i = 0; i < snippet.lines.length; i++) {\n const lineNum = snippet.startLine + i;\n const prefix = lineNum === snippet.highlightLine ? '→' : ' ';\n this.markdownBuffer.push(`${prefix} ${lineNum.toString().padStart(4)} | ${snippet.lines[i]}\\n`);\n }\n this.markdownBuffer.push('```\\n');\n break;\n \n case 'cost':\n const cost = content.content as CostContent;\n this.markdownBuffer.push(`\\n### Cost Estimate\\n`);\n this.markdownBuffer.push(`- Fix now: ${this.formatCurrency(cost.fixNowCost)}\\n`);\n this.markdownBuffer.push(`- If production: ${this.formatCurrency(cost.productionCost)}\\n`);\n this.markdownBuffer.push(`- Savings: ${this.formatCurrency(cost.savings)}\\n`);\n break;\n \n case 'readiness':\n const readiness = content.content as ReadinessContent;\n this.markdownBuffer.push(`\\n### Production Readiness\\n`);\n this.markdownBuffer.push(`- Score: ${readiness.score}/100\\n`);\n this.markdownBuffer.push(`- Requirements: ${readiness.requirementsMet}/${readiness.total}\\n`);\n this.markdownBuffer.push(`- Status: **${readiness.status.toUpperCase()}**\\n`);\n break;\n \n case 'semantic':\n const semantic = content.content as SemanticContent;\n this.markdownBuffer.push(`\\n### Semantic Analysis\\n`);\n if (semantic.dataFlowIssues > 0) {\n this.markdownBuffer.push(`- [CRITICAL] ${semantic.dataFlowIssues} data flow vulnerabilities\\n`);\n }\n if (semantic.raceConditions > 0) {\n this.markdownBuffer.push(`- [WARN] ${semantic.raceConditions} race conditions\\n`);\n }\n if (semantic.authIssues > 0) {\n this.markdownBuffer.push(`- [CRITICAL] ${semantic.authIssues} authentication issues\\n`);\n }\n break;\n \n case 'attack':\n const attack = content.content as AttackSurfaceContent;\n this.markdownBuffer.push(`\\n### Attack Surface\\n`);\n this.markdownBuffer.push(`- Endpoints: ${attack.totalEndpoints}\\n`);\n this.markdownBuffer.push(`- Unprotected: ${attack.unprotected}\\n`);\n this.markdownBuffer.push(`- Risk Score: ${attack.riskScore}/100\\n`);\n break;\n \n case 'report':\n this.markdownBuffer.push(content.content);\n break;\n \n default:\n // Other types are captured in JSON buffer\n this.jsonBuffer.push(content);\n }\n }\n\n /**\n * Route content to JSON buffer\n */\n private routeToJson(content: OutputContent): void {\n this.jsonBuffer.push(content);\n }\n\n /**\n * Capture content in raw log buffer\n */\n private captureRawLog(content: OutputContent): void {\n const time = this.formatTime(content.timestamp);\n const level = content.metadata?.severity ?? content.type;\n let message = '';\n \n switch (content.type) {\n case 'banner':\n message = `[BANNER] ${(content.content as BannerContent).skill}`;\n break;\n case 'activity':\n case 'log':\n message = content.content as string;\n break;\n case 'issue':\n const issue = content.content as Issue;\n message = `[${issue.severity.toUpperCase()}] ${issue.issue}`;\n break;\n default:\n message = `[${content.type.toUpperCase()}] Content received`;\n }\n \n this.rawLogBuffer.push({ time, level, message });\n \n // Keep buffer size reasonable\n if (this.rawLogBuffer.length > 500) {\n this.rawLogBuffer = this.rawLogBuffer.slice(-500);\n }\n }\n\n /**\n * Get raw log buffer for display\n */\n getRawLog(): Array<{ time: string; level: string; message: string }> {\n return [...this.rawLogBuffer];\n }\n\n /**\n * Get accumulated markdown output\n */\n getMarkdown(): string {\n return this.markdownBuffer.join('\\n');\n }\n\n /**\n * Get accumulated JSON output\n */\n getJson(): OutputContent[] {\n return [...this.jsonBuffer];\n }\n\n /**\n * Clear buffers\n */\n clearBuffers(): void {\n this.markdownBuffer = [];\n this.jsonBuffer = [];\n }\n\n // ============================================\n // Convenience methods for common output types\n // ============================================\n\n /**\n * Display a skill banner\n */\n banner(skill: string, art: string, options?: { quote?: string; version?: string }): void {\n this.emit({\n type: 'banner',\n content: { skill, art, quote: options?.quote, version: options?.version } as BannerContent,\n metadata: { agent: skill }\n });\n }\n\n /**\n * Display a code snippet\n */\n snippet(file: string, lines: string[], startLine: number, highlightLine?: number): void {\n this.emit({\n type: 'snippet',\n content: { file, lines, startLine, highlightLine } as SnippetContent,\n metadata: { file }\n });\n }\n\n /**\n * Display cost estimate\n */\n cost(fixNowCost: number, productionCost: number, savings: number, perIssue?: Array<{ issue: string; cost: number }>): void {\n this.emit({\n type: 'cost',\n content: { fixNowCost, productionCost, savings, perIssue } as CostContent\n });\n }\n\n /**\n * Display production readiness\n */\n readiness(\n score: number, \n requirementsMet: number, \n total: number, \n status: 'ready' | 'caution' | 'not-ready',\n requirements?: Array<{ name: string; met: boolean }>\n ): void {\n const content: ReadinessContent = { score, requirementsMet, total, status };\n if (requirements) {\n content.requirements = requirements;\n }\n this.emit({\n type: 'readiness',\n content\n });\n }\n\n /**\n * Display semantic analysis results\n */\n semantic(dataFlowIssues: number, raceConditions: number, authIssues: number): void {\n this.emit({\n type: 'semantic',\n content: { dataFlowIssues, raceConditions, authIssues } as SemanticContent\n });\n }\n\n /**\n * Display attack surface analysis\n */\n attack(totalEndpoints: number, unprotected: number, riskScore: number): void {\n this.emit({\n type: 'attack',\n content: { totalEndpoints, unprotected, riskScore } as AttackSurfaceContent\n });\n }\n\n /**\n * Log an activity message\n */\n activity(message: string): void {\n this.emit({\n type: 'activity',\n content: message\n });\n }\n\n /**\n * Log a message at specified level\n */\n log(level: 'info' | 'warn' | 'error' | 'debug', message: string): void {\n this.emit({\n type: 'log',\n content: message,\n metadata: { severity: level as any }\n });\n }\n\n /**\n * Log info message\n */\n info(message: string): void {\n this.log('info', message);\n }\n\n /**\n * Log warning message\n */\n warn(message: string): void {\n this.log('warn', message);\n }\n\n /**\n * Log error message\n */\n error(message: string): void {\n this.log('error', message);\n }\n\n /**\n * Log debug message\n */\n debug(message: string): void {\n this.log('debug', message);\n }\n\n /**\n * Report an issue\n */\n issue(issue: Issue): void {\n this.emit({\n type: 'issue',\n content: issue,\n metadata: { severity: issue.severity, agent: issue.agent, file: issue.file }\n });\n }\n\n /**\n * Add a report section\n */\n report(content: string): void {\n this.emit({\n type: 'report',\n content\n });\n }\n\n /**\n * Send a proactive notification/nudge to the user\n * This creates a prominent popup in TUI mode or a boxed message in console mode\n */\n nudge(message: string, severity: 'critical' | 'warning' | 'info' = 'warning', file?: string, autoHideMs?: number): void {\n const metadata: { severity?: 'critical' | 'serious' | 'moderate' | 'low'; agent?: string; file?: string } = {};\n // Map nudge severity to issue severity\n if (severity === 'critical') metadata.severity = 'critical';\n else if (severity === 'warning') metadata.severity = 'moderate';\n else metadata.severity = 'low';\n if (file !== undefined) metadata.file = file;\n this.emit({\n type: 'nudge',\n content: { message, severity, file, autoHideMs } as NudgeContent,\n metadata,\n });\n }\n\n // ============================================\n // Helpers\n // ============================================\n\n private formatCurrency(amount: number): string {\n if (amount >= 1000000) return `$${(amount / 1000000).toFixed(2)}M`;\n if (amount >= 1000) return `$${(amount / 1000).toFixed(1)}k`;\n return `$${amount}`;\n }\n\n private formatTime(timestamp?: number): string {\n const date = timestamp ? new Date(timestamp) : new Date();\n return date.toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });\n }\n}\n\n// Singleton instance\nlet instance: OutputManagerImpl | null = null;\n\n/**\n * Get the OutputManager instance\n */\nexport function getOutputManager(): OutputManagerImpl {\n if (!instance) {\n instance = new OutputManagerImpl();\n \n // Auto-detect mode based on interactive mode flag\n if (isInteractiveMode()) {\n instance.setMode('tui');\n }\n }\n return instance;\n}\n\n/**\n * Convenience function - shorthand for getOutputManager()\n */\nexport function output(): OutputManagerImpl {\n return getOutputManager();\n}\n\n/**\n * Reset the OutputManager (for testing)\n */\nexport function resetOutputManager(): void {\n instance = null;\n}\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { useDashboard } from '../state.js';\n\nconst WATCH_FRAMES = ['◐', '◓', '◑', '◒'];\n\nexport function Header(): React.ReactElement {\n const { state } = useDashboard();\n const { signalExtraction, watch, alerts } = state;\n const totalExtracted = signalExtraction.decisionsExtracted + signalExtraction.factsExtracted +\n signalExtraction.blockersExtracted + signalExtraction.questionsExtracted;\n\n const [frame, setFrame] = useState(0);\n\n useEffect(() => {\n if (!watch.watching) return;\n const id = setInterval(() => setFrame(f => (f + 1) % WATCH_FRAMES.length), 150);\n return () => clearInterval(id);\n }, [watch.watching]);\n\n let statusLabel: React.ReactElement;\n if (watch.watching) {\n const spinner = WATCH_FRAMES[frame] || '◐';\n statusLabel = totalExtracted > 0\n ? <Text><Text color=\"green\">{spinner}</Text> <Text color=\"green\" bold>Learning</Text> <Text dimColor>{totalExtracted} signals</Text></Text>\n : <Text><Text color=\"green\">{spinner}</Text> <Text bold>Watching</Text></Text>;\n } else {\n statusLabel = <Text><Text dimColor>○</Text> <Text dimColor>Idle</Text></Text>;\n }\n\n return (\n <Box paddingX={1} justifyContent=\"space-between\">\n <Text color=\"green\" bold>trie</Text>\n <Box gap={2}>\n {statusLabel}\n {alerts.hasCritical && <Text color=\"red\" bold>● Alert</Text>}\n </Box>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useDashboard } from '../state.js';\nimport type { DashboardView } from '../types.js';\n\nconst VIEW_LABELS: Record<DashboardView, string> = {\n overview: 'Overview',\n rawlog: 'Log',\n agent: 'Agent',\n goals: 'Goals',\n hypotheses: 'Hypotheses',\n memory: 'Memory',\n chat: 'Chat',\n};\n\nconst TAB_VIEWS: DashboardView[] = ['overview', 'memory', 'goals', 'hypotheses', 'agent', 'chat'];\n\nexport function Footer(): React.ReactElement {\n const { state } = useDashboard();\n const { view } = state;\n\n let contextHints: string;\n if (view === 'goals' && state.goalsPanel.inputMode === 'add') {\n contextHints = 'enter save · esc cancel';\n } else if (view === 'hypotheses' && state.hypothesesPanel.inputMode === 'add') {\n contextHints = 'enter save · esc cancel';\n } else if (view === 'goals') {\n contextHints = 'j/k nav · a add · enter complete · d delete';\n } else if (view === 'hypotheses') {\n contextHints = 'j/k nav · a add · v validate · x invalidate';\n } else if (view === 'agent') {\n contextHints = 'j/k nav · enter expand · d dismiss';\n } else if (view === 'memory') {\n contextHints = 'j/k nav · enter expand';\n } else if (view === 'chat') {\n contextHints = 'type to ask · enter send · esc clear';\n } else if (view === 'rawlog') {\n contextHints = 'n/p pages · b back';\n } else {\n contextHints = 'n/p pages · s settings';\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Box justifyContent=\"space-between\">\n <Box gap={1}>\n {TAB_VIEWS.map(v => (\n v === view\n ? <Text key={v} color=\"green\" bold>{VIEW_LABELS[v]}</Text>\n : <Text key={v}>{VIEW_LABELS[v]}</Text>\n ))}\n </Box>\n <Text dimColor>q quit</Text>\n </Box>\n <Text dimColor>{contextHints}</Text>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useDashboard } from '../state.js';\n\nexport function Notification(): React.ReactElement | null {\n const { state } = useDashboard();\n const { notification } = state;\n\n if (!notification || !notification.active) return null;\n\n if (notification.autoHideAt && Date.now() > notification.autoHideAt) return null;\n\n const bgColor = notification.severity === 'critical' ? 'red'\n : notification.severity === 'warning' ? 'yellow'\n : 'blue';\n\n const icon = notification.severity === 'critical' ? '[!]'\n : notification.severity === 'warning' ? '[!]'\n : '[>]';\n\n return (\n <Box paddingX={1}>\n <Text backgroundColor={bgColor} color=\"white\" bold>\n {` ${icon} ${notification.message} `}\n </Text>\n {notification.file && <Text dimColor> ({notification.file})</Text>}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\nimport type { AgentConfig } from '../types.js';\nimport { isAIAvailable, setAPIKey, getKeyFromKeychain } from '../../../ai/client.js';\n\ntype ConfigSection = 'main' | 'agentSmith' | 'performance' | 'riskThresholds' | 'apiKeys';\n\ninterface ConfigItem {\n label: string;\n key: string;\n value: string;\n section: ConfigSection;\n}\n\nfunction maskKey(key: string | null): string {\n if (!key || key.length < 12) return 'Not set';\n return key.slice(0, 7) + '...' + key.slice(-4);\n}\n\nexport function ConfigDialog({ onClose }: { onClose: () => void }): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const [section, setSection] = useState<ConfigSection>('main');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [editing, setEditing] = useState(false);\n const [editBuffer, setEditBuffer] = useState('');\n const [editIsText, setEditIsText] = useState(false);\n\n const config = state.agentConfig;\n\n const currentKeyDisplay = isAIAvailable()\n ? maskKey(getKeyFromKeychain() || process.env.ANTHROPIC_API_KEY || null)\n : 'Not set';\n const keyActive = isAIAvailable();\n\n const mainMenu: ConfigItem[] = [\n { label: 'API Keys', key: 'apiKeys', value: keyActive ? 'Active' : 'Not set', section: 'main' },\n { label: 'Performance Settings', key: 'performance', value: `${config.performance.maxConcurrency} concurrent`, section: 'main' },\n { label: 'Risk Thresholds', key: 'riskThresholds', value: `critical: ${config.riskThresholds.critical}%`, section: 'main' },\n ];\n\n const apiKeysItems: ConfigItem[] = [\n { label: 'Anthropic', key: 'anthropic', value: currentKeyDisplay, section: 'apiKeys' },\n ];\n\n const performanceItems: ConfigItem[] = [\n { label: 'Max Concurrency', key: 'maxConcurrency', value: String(config.performance.maxConcurrency), section: 'performance' },\n { label: 'Timeout (ms)', key: 'timeoutMs', value: String(config.performance.timeoutMs), section: 'performance' },\n { label: 'Parallel', key: 'parallel', value: config.performance.parallel ? 'on' : 'off', section: 'performance' },\n { label: 'Cache', key: 'cache', value: config.performance.cache ? 'on' : 'off', section: 'performance' },\n { label: 'Workers', key: 'workers', value: config.performance.workers ? 'on' : 'off', section: 'performance' },\n ];\n\n const riskItems: ConfigItem[] = [\n { label: 'Critical Threshold', key: 'critical', value: String(config.riskThresholds.critical), section: 'riskThresholds' },\n { label: 'High Threshold', key: 'high', value: String(config.riskThresholds.high), section: 'riskThresholds' },\n { label: 'Medium Threshold', key: 'medium', value: String(config.riskThresholds.medium), section: 'riskThresholds' },\n ];\n\n const items = section === 'main' ? mainMenu\n : section === 'apiKeys' ? apiKeysItems\n : section === 'performance' ? performanceItems\n : section === 'riskThresholds' ? riskItems\n : mainMenu;\n\n useInput((_input, key) => {\n if (editing) {\n if (key.escape) { setEditing(false); setEditBuffer(''); setEditIsText(false); }\n else if (key.return) {\n const item = items[selectedIndex];\n if (item) {\n if (editIsText) {\n if (item.key === 'anthropic' && editBuffer.length > 10) {\n setAPIKey(editBuffer);\n dispatch({ type: 'ADD_ACTIVITY', message: 'API key saved' });\n }\n } else {\n const val = parseInt(editBuffer, 10);\n if (!isNaN(val)) {\n const patch: Partial<AgentConfig> = {};\n if (section === 'performance') {\n if (item.key === 'maxConcurrency' || item.key === 'timeoutMs') {\n patch.performance = { ...config.performance, [item.key]: val };\n }\n } else if (section === 'riskThresholds') {\n patch.riskThresholds = { ...config.riskThresholds, [item.key]: val };\n }\n if (Object.keys(patch).length > 0) {\n dispatch({ type: 'SET_AGENT_CONFIG', config: patch });\n dispatch({ type: 'ADD_ACTIVITY', message: `Config: ${item.label} set to ${val}` });\n }\n }\n }\n }\n setEditing(false);\n setEditBuffer('');\n setEditIsText(false);\n } else if (key.backspace || key.delete) {\n setEditBuffer(editBuffer.slice(0, -1));\n } else if (_input) {\n if (editIsText) {\n setEditBuffer(editBuffer + _input);\n } else if (/\\d/.test(_input)) {\n setEditBuffer(editBuffer + _input);\n }\n }\n return;\n }\n\n if (key.escape || _input === 'b') {\n if (section === 'main') onClose();\n else { setSection('main'); setSelectedIndex(0); }\n } else if (key.upArrow || _input === 'k') {\n setSelectedIndex(Math.max(0, selectedIndex - 1));\n } else if (key.downArrow || _input === 'j') {\n setSelectedIndex(Math.min(items.length - 1, selectedIndex + 1));\n } else if (key.return) {\n if (section === 'main') {\n const item = items[selectedIndex];\n if (item) {\n setSection(item.key as ConfigSection);\n setSelectedIndex(0);\n }\n } else if (section === 'apiKeys') {\n setEditing(true);\n setEditBuffer('');\n setEditIsText(true);\n } else {\n const item = items[selectedIndex];\n if (item) {\n if (['parallel', 'cache', 'workers'].includes(item.key)) {\n const patch: Partial<AgentConfig> = {\n performance: { ...config.performance, [item.key]: !config.performance[item.key as keyof typeof config.performance] },\n };\n dispatch({ type: 'SET_AGENT_CONFIG', config: patch });\n } else {\n setEditing(true);\n setEditBuffer(item.value);\n }\n }\n }\n }\n });\n\n const sectionTitle = section === 'main' ? 'TRIE CONFIGURATION'\n : section === 'apiKeys' ? 'API KEYS'\n : section === 'performance' ? 'PERFORMANCE SETTINGS'\n : section === 'riskThresholds' ? 'RISK THRESHOLDS'\n : 'CONFIGURATION';\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"gray\" paddingX={1} paddingY={0}>\n <Text bold>{sectionTitle}</Text>\n <Text> </Text>\n\n {section === 'apiKeys' && !editing && (\n <Box flexDirection=\"column\">\n <Text>\n {' '}<Text bold>Anthropic:</Text> <Text>{currentKeyDisplay}</Text>\n {' '}{keyActive ? <Text color=\"green\">● Active</Text> : <Text dimColor>○ Not set</Text>}\n </Text>\n <Text> </Text>\n <Text dimColor> enter to update esc back</Text>\n </Box>\n )}\n\n {section === 'apiKeys' && editing && (\n <Box flexDirection=\"column\">\n <Box borderStyle=\"round\" borderColor=\"green\" paddingX={1}>\n <Text>\n {editBuffer || <Text dimColor>sk-ant-...</Text>}\n <Text bold color=\"green\">|</Text>\n </Text>\n </Box>\n <Text dimColor> enter save ({process.platform === 'darwin' ? 'keychain' : 'config'}) esc cancel</Text>\n </Box>\n )}\n\n {section !== 'apiKeys' && items.map((item, idx) => {\n const isSelected = selectedIndex === idx;\n return (\n <Text key={item.key}>\n {isSelected ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n <Text bold={isSelected}>{item.label}: </Text>\n {editing && isSelected\n ? <Text>{editBuffer}<Text bold color=\"green\">|</Text></Text>\n : <Text dimColor>{item.value}</Text>}\n </Text>\n );\n })}\n\n {section !== 'apiKeys' && (\n <>\n <Text> </Text>\n <Text dimColor>{section === 'main' ? 'enter select · esc close' : 'enter edit · esc/b back'}</Text>\n </>\n )}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useDashboard } from '../state.js';\n\nexport function OverviewView(): React.ReactElement {\n const { state } = useDashboard();\n const { progress, signalExtraction, watch, issues, activityLog, activityPage } = state;\n const { totalIssues, processedFiles } = progress;\n\n const endTime = state.scanComplete && state.scanEndTime ? state.scanEndTime : Date.now();\n const elapsed = ((endTime - state.scanStartTime) / 1000).toFixed(1);\n\n const criticalIssues = issues.filter(i => i.severity === 'critical').slice(0, 3);\n const activityRows = 8;\n const startIdx = activityPage * activityRows;\n const pageActivities = activityLog.slice(startIdx, startIdx + activityRows);\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text dimColor>●</Text> Scanned <Text bold>{processedFiles}</Text> files <Text dimColor>{elapsed}s</Text></Text>\n\n {watch.watching && signalExtraction.enabled && (\n <Box flexDirection=\"column\">\n <Text><Text color=\"green\">●</Text> Signal extraction <Text dimColor>enabled</Text></Text>\n {(signalExtraction.decisionsExtracted > 0 || signalExtraction.factsExtracted > 0 || signalExtraction.blockersExtracted > 0) && (\n <Text>\n {' '}<Text color=\"green\">○</Text>{' '}\n <Text bold>{signalExtraction.decisionsExtracted}</Text><Text dimColor> decisions</Text>\n <Text dimColor> · </Text>\n <Text bold>{signalExtraction.factsExtracted}</Text><Text dimColor> facts</Text>\n <Text dimColor> · </Text>\n <Text bold>{signalExtraction.blockersExtracted}</Text><Text dimColor> blockers</Text>\n </Text>\n )}\n </Box>\n )}\n\n {criticalIssues.length > 0 && (\n <Box flexDirection=\"column\">\n <Text> </Text>\n {criticalIssues.map((issue, i) => {\n const filename = issue.file.split('/').pop() || issue.file;\n const lineNum = issue.line ? `:${issue.line}` : '';\n const desc = issue.issue.slice(0, 50) + (issue.issue.length > 50 ? '...' : '');\n return (\n <Text key={i}>\n <Text color=\"red\">●</Text> <Text color=\"red\">{desc}</Text>\n <Text dimColor> {filename}{lineNum}</Text>\n </Text>\n );\n })}\n </Box>\n )}\n\n {totalIssues === 0 && criticalIssues.length === 0 && (\n <Text><Text color=\"green\">●</Text> No issues found</Text>\n )}\n\n <Text> </Text>\n <Box flexDirection=\"column\">\n <Text bold>Activity</Text>\n {pageActivities.map((entry, i) => (\n <Text key={i}> <Text dimColor>●</Text> {entry.message} <Text dimColor>{entry.time}</Text></Text>\n ))}\n {pageActivities.length === 0 && <Text dimColor> No activity yet.</Text>}\n </Box>\n </Box>\n );\n}\n","import React, { useEffect, useCallback } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard, getVisibleInsights } from '../state.js';\nimport { formatTimeAgo } from '../theme.js';\nimport { isAIAvailable } from '../../../ai/client.js';\nimport { getWorkingDirectory } from '../../../utils/workspace.js';\nimport { TieredStorage } from '../../../storage/tiered-storage.js';\nimport { ContextGraph } from '../../../context/graph.js';\nimport type { PatternNodeData, Node } from '../../../context/types.js';\n\nfunction timeAgo(iso: string): string {\n const ms = Date.now() - new Date(iso).getTime();\n const mins = Math.floor(ms / 60000);\n if (mins < 60) return `${mins}m ago`;\n const hrs = Math.floor(mins / 60);\n if (hrs < 24) return `${hrs}h ago`;\n return `${Math.floor(hrs / 24)}d ago`;\n}\n\nexport function AgentView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { agentInsights, agentBrain, selectedInsight, expandedInsight } = state;\n\n const visibleInsights = getVisibleInsights(state);\n const alerts = visibleInsights.filter(i => i.type === 'warning');\n const { decisions, patterns, loaded } = agentBrain;\n\n const loadBrain = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const storage = new TieredStorage(workDir);\n const graph = new ContextGraph(workDir);\n\n const [decs, snap] = await Promise.all([\n storage.queryDecisions({ limit: 20 }),\n graph.getSnapshot(),\n ]);\n\n const patternData = snap.nodes\n .filter((n): n is Node & { type: 'pattern'; data: PatternNodeData } => n.type === 'pattern')\n .map(n => n.data);\n\n dispatch({ type: 'SET_AGENT_BRAIN', decisions: decs, patterns: patternData, ledgerHash: null });\n } catch {\n dispatch({ type: 'ADD_ACTIVITY', message: 'Agent brain load error' });\n }\n }, [dispatch]);\n\n useEffect(() => {\n if (!loaded) { void loadBrain(); }\n }, [loaded, loadBrain]);\n\n useInput((input, key) => {\n if (key.upArrow || input === 'k') {\n dispatch({ type: 'NAVIGATE_UP' });\n } else if (key.downArrow || input === 'j') {\n dispatch({ type: 'NAVIGATE_DOWN' });\n } else if (key.return) {\n dispatch({ type: 'TOGGLE_INSIGHT', index: selectedInsight });\n } else if (input === 'd') {\n dispatch({ type: 'DISMISS_INSIGHT', index: selectedInsight });\n }\n });\n\n const alertCount = alerts.length;\n const decCount = decisions.length;\n const patCount = patterns.length;\n\n if (alertCount === 0 && decCount === 0 && patCount === 0 && !loaded) {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text bold>Trie</Text>\n <Text dimColor> Loading...</Text>\n </Box>\n );\n }\n\n if (alertCount === 0 && decCount === 0 && patCount === 0) {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>Trie</Text> <Text dimColor>Proactive code guardian</Text></Text>\n <Text> </Text>\n <Text> <Text color=\"green\">●</Text> Alerts you about gotchas before you push</Text>\n <Text> <Text color=\"green\">●</Text> Records decisions with traceable hashes</Text>\n <Text> <Text color=\"green\">●</Text> Learns patterns from your feedback (trie ok / trie bad)</Text>\n <Text> <Text color=\"green\">●</Text> Gets smarter over time</Text>\n <Text> </Text>\n <Text dimColor> Start watching to get proactive alerts,</Text>\n <Text dimColor> or run trie tell / trie ok / trie bad to teach it.</Text>\n <Text> </Text>\n {isAIAvailable()\n ? <Text><Text color=\"green\">●</Text> <Text dimColor>AI-enhanced analysis enabled</Text></Text>\n : <Text><Text dimColor>○</Text> Set <Text bold>ANTHROPIC_API_KEY</Text> <Text dimColor>for AI insights</Text></Text>}\n </Box>\n );\n }\n\n const confidentPatterns = patterns.filter(p => p.confidence > 0.7).length;\n const learningPatterns = patterns.filter(p => p.confidence <= 0.7).length;\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text>\n <Text bold>Trie</Text>\n {' '}<Text dimColor>{alertCount} alert{alertCount !== 1 ? 's' : ''} {decCount} decision{decCount !== 1 ? 's' : ''} {patCount} pattern{patCount !== 1 ? 's' : ''}</Text>\n </Text>\n <Text> </Text>\n\n {alertCount > 0 && (\n <Box flexDirection=\"column\">\n <Text bold> Alerts</Text>\n {alerts.map((insight, idx) => {\n const isSelected = idx === selectedInsight;\n const isExpanded = idx === expandedInsight;\n const ago = formatTimeAgo(insight.timestamp);\n const msg = insight.message.slice(0, 60) + (insight.message.length > 60 ? '...' : '');\n const riskColor = insight.priority >= 8 ? 'red' : insight.priority >= 5 ? 'yellow' : undefined;\n return (\n <Box key={insight.id} flexDirection=\"column\">\n <Text>\n {isSelected ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n {riskColor ? <Text color={riskColor}>●</Text> : <Text dimColor>○</Text>}{' '}\n {isSelected ? <Text bold>{msg}</Text> : <Text>{msg}</Text>}\n {' '}<Text dimColor>{insight.category} · {ago}</Text>\n </Text>\n {(isExpanded || isSelected) && insight.suggestedAction && (\n <Text> <Text dimColor>→</Text> <Text bold>{insight.suggestedAction}</Text></Text>\n )}\n </Box>\n );\n })}\n <Text> </Text>\n </Box>\n )}\n\n {decCount > 0 && (\n <Box flexDirection=\"column\">\n <Text bold> Decisions</Text>\n {decisions.slice(0, 10).map(dec => {\n const ago = timeAgo(dec.when);\n const hash = dec.hash ? dec.hash.slice(0, 6) : '';\n const active = dec.status === 'active';\n return (\n <Text key={dec.id}>\n {' '}{active ? <Text color=\"green\">●</Text> : <Text dimColor>○</Text>}{' '}\n <Text>{dec.decision.slice(0, 45)}{dec.decision.length > 45 ? '...' : ''}</Text>\n {' '}<Text dimColor>{ago}</Text>\n {hash && <Text dimColor> {hash}</Text>}\n </Text>\n );\n })}\n <Text> </Text>\n </Box>\n )}\n\n {patCount > 0 && (\n <Box flexDirection=\"column\">\n <Text bold> Patterns</Text>\n {confidentPatterns > 0 && <Text dimColor> {confidentPatterns} confident {learningPatterns} learning</Text>}\n {patterns.slice(0, 8).map((pat, idx) => {\n const conf = Math.round(pat.confidence * 100);\n const confColor = conf > 70 ? 'green' : conf > 40 ? 'yellow' : undefined;\n const desc = pat.description.slice(0, 45) + (pat.description.length > 45 ? '...' : '');\n return (\n <Text key={idx}>\n {' '}{pat.isAntiPattern ? <Text color=\"red\">●</Text> : <Text dimColor>○</Text>}{' '}\n <Text>{desc}</Text>\n {' '}{confColor ? <Text color={confColor}>{conf}%</Text> : <Text dimColor>{conf}%</Text>}\n {pat.isAntiPattern && <Text color=\"red\"> anti-pattern</Text>}\n </Text>\n );\n })}\n </Box>\n )}\n\n <Text> </Text>\n <Box gap={2}>\n {isAIAvailable() ? <Text><Text color=\"green\">●</Text> <Text dimColor>AI</Text></Text> : <Text><Text dimColor>○ AI off</Text></Text>}\n {agentInsights.filter(i => i.type === 'celebration').length > 0 && (\n <Text><Text color=\"green\">●</Text> <Text dimColor>{agentInsights.filter(i => i.type === 'celebration').length} wins</Text></Text>\n )}\n </Box>\n </Box>\n );\n}\n","import pc from 'picocolors';\n\nexport const colors = {\n border: (s: string) => pc.dim(s),\n header: (s: string) => pc.bold(pc.white(s)),\n brand: (s: string) => pc.bold(pc.green(s)),\n dim: (s: string) => pc.dim(s),\n\n critical: (s: string) => pc.bold(pc.red(s)),\n serious: (s: string) => pc.yellow(s),\n moderate: (s: string) => pc.blue(s),\n low: (s: string) => pc.dim(s),\n\n success: (s: string) => pc.green(s),\n running: (s: string) => pc.yellow(s),\n waiting: (s: string) => pc.dim(s),\n alert: (s: string) => pc.bold(pc.red(s)),\n\n selected: (s: string) => pc.bold(pc.green(s)),\n highlight: (s: string) => pc.bold(pc.white(s)),\n\n yellow: (s: string) => pc.yellow(s),\n} as const;\n\nexport const box = {\n topLeft: '┌',\n topRight: '┐',\n bottomLeft: '└',\n bottomRight: '┘',\n horizontal: '─',\n vertical: '│',\n leftT: '├',\n rightT: '┤',\n topT: '┬',\n bottomT: '┴',\n cross: '┼',\n} as const;\n\nexport function formatTimeAgo(timestamp: number): string {\n const seconds = Math.floor((Date.now() - timestamp) / 1000);\n if (seconds < 10) return 'just now';\n if (seconds < 60) return `${seconds}s ago`;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n return `${hours}h ago`;\n}\n\nexport function severityColor(severity: string): (s: string) => string {\n switch (severity) {\n case 'critical': return colors.critical;\n case 'serious': return colors.serious;\n case 'moderate': return colors.moderate;\n case 'low': return colors.low;\n default: return colors.dim;\n }\n}\n\nexport function severityIcon(severity: string): string {\n switch (severity) {\n case 'critical': return '●';\n case 'serious': return '●';\n case 'moderate': return '○';\n case 'low': return '○';\n default: return '○';\n }\n}\n\nexport function insightIcon(type: string): { icon: string; color: (s: string) => string } {\n switch (type) {\n case 'warning': return { icon: '●', color: colors.critical };\n case 'observation': return { icon: '○', color: colors.serious };\n case 'suggestion': return { icon: '○', color: colors.highlight };\n case 'celebration': return { icon: '●', color: colors.success };\n case 'question': return { icon: '○', color: colors.moderate };\n default: return { icon: '○', color: colors.dim };\n }\n}\n\nexport function progressBar(current: number, total: number, width: number = 10): string {\n if (total <= 0) return colors.dim('░'.repeat(width));\n const progress = Math.min(1, current / total);\n const filled = Math.round(width * progress);\n const empty = width - filled;\n return colors.success('█'.repeat(filled)) + colors.dim('░'.repeat(empty));\n}\n\n// eslint-disable-next-line no-control-regex\nexport function stripEmojis(s: string): string {\n return s.replace(/[\\u{1F300}-\\u{1F9FF}\\u{2600}-\\u{26FF}\\u{2700}-\\u{27BF}\\u{FE00}-\\u{FE0F}\\u{200D}\\u{20E3}\\u{FE0F}\\u{E0020}-\\u{E007F}]/gu, '').trim();\n}\n","import React, { useCallback } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\nimport { progressBar } from '../theme.js';\nimport { getWorkingDirectory } from '../../../utils/workspace.js';\nimport { getGuardianState, type Goal } from '../../../guardian/guardian-state.js';\n\nfunction calculateGoalProgress(goal: { startValue?: number; currentValue: number; target: number }): number {\n if (goal.target <= 0) return 0;\n const startValue = goal.startValue ?? goal.currentValue;\n if (startValue > goal.target) {\n const totalReduction = startValue - goal.target;\n const actualReduction = startValue - goal.currentValue;\n return Math.round((actualReduction / totalReduction) * 100);\n }\n return Math.round((goal.currentValue / goal.target) * 100);\n}\n\nexport function GoalsView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { goalsPanel } = state;\n const activeGoals = goalsPanel.goals.filter(g => g.status === 'active');\n const achievedGoals = goalsPanel.goals.filter(g => g.status === 'achieved');\n const otherGoals = goalsPanel.goals.filter(g => g.status !== 'active' && g.status !== 'achieved');\n\n const refreshGoals = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const goals = agentState.getAllGoals();\n dispatch({\n type: 'SET_GOALS',\n goals: goals.map(g => {\n const base = { id: g.id, description: g.description, type: g.type, target: g.target, currentValue: g.currentValue, status: g.status, autoGenerated: g.autoGenerated, updatedAt: g.updatedAt };\n return g.category ? { ...base, category: g.category } : base;\n }),\n });\n } catch { /* ignore */ }\n }, [dispatch]);\n\n const addGoal = useCallback(async (description: string) => {\n if (!description.trim()) return;\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const goal: Goal = {\n id: `goal-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n description: description.trim(),\n type: 'reduction',\n metric: 'semantic',\n target: 0,\n currentValue: 0,\n startValue: 0,\n status: 'active',\n autoGenerated: false,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n deadline: new Date(Date.now() + 14 * 86400000).toISOString(),\n };\n await agentState.addGoal(goal);\n dispatch({ type: 'ADD_ACTIVITY', message: `Goal added: ${description.slice(0, 40)}` });\n await refreshGoals();\n } catch { /* ignore */ }\n }, [dispatch, refreshGoals]);\n\n const completeGoal = useCallback(async (goalId: string) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const goals = agentState.getAllGoals();\n const goal = goals.find(g => g.id === goalId);\n if (goal) {\n await agentState.updateGoal(goalId, { status: 'achieved', currentValue: goal.target, achievedAt: new Date().toISOString() });\n dispatch({ type: 'ADD_ACTIVITY', message: `Goal achieved: ${goal.description.slice(0, 30)}` });\n await refreshGoals();\n }\n } catch { /* ignore */ }\n }, [dispatch, refreshGoals]);\n\n const deleteGoal = useCallback(async (goalId: string) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n await agentState.updateGoal(goalId, { status: 'rejected' });\n dispatch({ type: 'ADD_ACTIVITY', message: 'Goal removed' });\n await refreshGoals();\n } catch { /* ignore */ }\n }, [dispatch, refreshGoals]);\n\n const reactivateGoal = useCallback(async (goalId: string) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n await agentState.updateGoal(goalId, { status: 'active', achievedAt: undefined });\n dispatch({ type: 'ADD_ACTIVITY', message: 'Goal reactivated' });\n await refreshGoals();\n } catch { /* ignore */ }\n }, [dispatch, refreshGoals]);\n\n useInput((_input, key) => {\n if (goalsPanel.inputMode === 'add') {\n if (key.escape) {\n dispatch({ type: 'SET_GOALS_INPUT_MODE', mode: 'browse' });\n } else if (key.return) {\n void addGoal(goalsPanel.inputBuffer);\n dispatch({ type: 'SET_GOALS_INPUT_MODE', mode: 'browse' });\n } else if (key.backspace || key.delete) {\n dispatch({ type: 'SET_GOALS_INPUT_BUFFER', buffer: goalsPanel.inputBuffer.slice(0, -1) });\n } else if (_input && _input.length === 1 && !key.ctrl && !key.meta) {\n dispatch({ type: 'SET_GOALS_INPUT_BUFFER', buffer: goalsPanel.inputBuffer + _input });\n }\n return;\n }\n\n if (_input === 'a') dispatch({ type: 'SET_GOALS_INPUT_MODE', mode: 'add' });\n else if (key.upArrow || _input === 'k') dispatch({ type: 'SELECT_GOAL', index: Math.max(0, goalsPanel.selectedIndex - 1) });\n else if (key.downArrow || _input === 'j') dispatch({ type: 'SELECT_GOAL', index: Math.min(activeGoals.length - 1, goalsPanel.selectedIndex + 1) });\n else if (key.return) {\n const selected = activeGoals[goalsPanel.selectedIndex];\n if (selected) void completeGoal(selected.id);\n } else if (_input === 'd') {\n const selected = activeGoals[goalsPanel.selectedIndex];\n if (selected) void deleteGoal(selected.id);\n } else if (_input === 'x') {\n const completed = goalsPanel.goals.filter(g => g.status === 'achieved' || g.status === 'failed');\n if (completed[0]) void deleteGoal(completed[0].id);\n } else if (_input === 'u') {\n const recent = goalsPanel.goals.filter(g => g.status === 'achieved').sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());\n if (recent[0]) void reactivateGoal(recent[0].id);\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>Goals</Text> <Text dimColor>Track progress, achieve targets</Text></Text>\n <Text> </Text>\n\n {goalsPanel.inputMode === 'add' ? (\n <Box flexDirection=\"column\">\n <Box borderStyle=\"round\" borderColor=\"green\" paddingX={1}>\n <Text>{goalsPanel.inputBuffer}<Text bold color=\"green\">|</Text></Text>\n </Box>\n <Text dimColor> enter save · esc cancel</Text>\n </Box>\n ) : (\n <>\n {goalsPanel.goals.length === 0 ? (\n <Box flexDirection=\"column\">\n <Text dimColor> No goals yet.</Text>\n <Text dimColor> Press a to add your first goal.</Text>\n </Box>\n ) : (\n <Box flexDirection=\"column\">\n {activeGoals.length > 0 && (\n <Box flexDirection=\"column\">\n {activeGoals.map((goal, idx) => {\n const isSelected = goalsPanel.selectedIndex === idx;\n const progress = calculateGoalProgress(goal);\n const bar = progressBar(progress, 100, 8);\n const source = goal.autoGenerated ? 'auto' : 'manual';\n return (\n <Text key={goal.id}>\n {isSelected ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n <Text color=\"green\">○</Text> {goal.description.slice(0, 45)}\n <Text dimColor> {source} {bar} {progress}%</Text>\n </Text>\n );\n })}\n <Text> </Text>\n </Box>\n )}\n\n {achievedGoals.length > 0 && (\n <Box flexDirection=\"column\">\n <Text dimColor> Achieved</Text>\n {achievedGoals.slice(0, 5).map(g => (\n <Text key={g.id}> <Text color=\"green\">●</Text> {g.description.slice(0, 50)}</Text>\n ))}\n {achievedGoals.length > 5 && <Text dimColor> +{achievedGoals.length - 5} more</Text>}\n <Text> </Text>\n </Box>\n )}\n\n {otherGoals.length > 0 && (\n <Box flexDirection=\"column\">\n <Text dimColor> Other</Text>\n {otherGoals.slice(0, 2).map(g => (\n <Text key={g.id}> <Text dimColor>○</Text> {g.description.slice(0, 50)}<Text dimColor> {g.status}</Text></Text>\n ))}\n </Box>\n )}\n </Box>\n )}\n </>\n )}\n </Box>\n );\n}\n","import React, { useCallback } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\nimport { getWorkingDirectory } from '../../../utils/workspace.js';\nimport { getGuardianState, type Hypothesis } from '../../../guardian/guardian-state.js';\n\nexport function HypothesesView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { hypothesesPanel } = state;\n const testing = hypothesesPanel.hypotheses.filter(h => h.status === 'testing');\n const validated = hypothesesPanel.hypotheses.filter(h => h.status === 'validated');\n const invalidated = hypothesesPanel.hypotheses.filter(h => h.status === 'invalidated');\n\n const refreshHypotheses = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const hypotheses = agentState.getAllHypotheses();\n dispatch({\n type: 'SET_HYPOTHESES',\n hypotheses: hypotheses.map(h => {\n const base = { id: h.id, statement: h.statement, confidence: h.confidence, status: h.status, evidenceCount: h.evidence.length, updatedAt: h.updatedAt };\n return h.category ? { ...base, category: h.category } : base;\n }),\n });\n } catch { /* ignore */ }\n }, [dispatch]);\n\n const addHypothesis = useCallback(async (statement: string) => {\n if (!statement.trim()) return;\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const hypothesis: Hypothesis = {\n id: `hypo-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n statement: statement.trim(),\n confidence: 0.5,\n status: 'testing',\n evidence: [],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n testCriteria: 'Collect evidence from scans',\n };\n await agentState.addHypothesis(hypothesis);\n dispatch({ type: 'ADD_ACTIVITY', message: `Hypothesis added: ${statement.slice(0, 40)}` });\n await refreshHypotheses();\n } catch { /* ignore */ }\n }, [dispatch, refreshHypotheses]);\n\n const updateHypothesis = useCallback(async (hypoId: string, action: 'validate' | 'invalidate' | 'delete') => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n if (action === 'validate') await agentState.updateHypothesis(hypoId, { status: 'validated', confidence: 0.9 });\n else if (action === 'invalidate') await agentState.updateHypothesis(hypoId, { status: 'invalidated', confidence: 0.1 });\n else await agentState.updateHypothesis(hypoId, { status: 'retired' });\n dispatch({ type: 'ADD_ACTIVITY', message: `Hypothesis ${action === 'validate' ? 'validated' : action === 'invalidate' ? 'invalidated' : 'removed'}` });\n await refreshHypotheses();\n } catch { /* ignore */ }\n }, [dispatch, refreshHypotheses]);\n\n const reactivateHypothesis = useCallback(async (hypoId: string) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n await agentState.updateHypothesis(hypoId, { status: 'testing', confidence: 0.5, validatedAt: undefined });\n dispatch({ type: 'ADD_ACTIVITY', message: 'Hypothesis reactivated' });\n await refreshHypotheses();\n } catch { /* ignore */ }\n }, [dispatch, refreshHypotheses]);\n\n useInput((_input, key) => {\n if (hypothesesPanel.inputMode === 'add') {\n if (key.escape) {\n dispatch({ type: 'SET_HYPOTHESES_INPUT_MODE', mode: 'browse' });\n } else if (key.return) {\n void addHypothesis(hypothesesPanel.inputBuffer);\n dispatch({ type: 'SET_HYPOTHESES_INPUT_MODE', mode: 'browse' });\n } else if (key.backspace || key.delete) {\n dispatch({ type: 'SET_HYPOTHESES_INPUT_BUFFER', buffer: hypothesesPanel.inputBuffer.slice(0, -1) });\n } else if (_input && _input.length === 1 && !key.ctrl && !key.meta) {\n dispatch({ type: 'SET_HYPOTHESES_INPUT_BUFFER', buffer: hypothesesPanel.inputBuffer + _input });\n }\n return;\n }\n\n if (_input === 'a') dispatch({ type: 'SET_HYPOTHESES_INPUT_MODE', mode: 'add' });\n else if (key.upArrow || _input === 'k') dispatch({ type: 'SELECT_HYPOTHESIS', index: Math.max(0, hypothesesPanel.selectedIndex - 1) });\n else if (key.downArrow || _input === 'j') dispatch({ type: 'SELECT_HYPOTHESIS', index: Math.min(testing.length - 1, hypothesesPanel.selectedIndex + 1) });\n else if (_input === 'v') {\n const selected = testing[hypothesesPanel.selectedIndex];\n if (selected) void updateHypothesis(selected.id, 'validate');\n } else if (_input === 'x') {\n const selected = testing[hypothesesPanel.selectedIndex];\n if (selected) void updateHypothesis(selected.id, 'invalidate');\n } else if (_input === 'd') {\n const selected = testing[hypothesesPanel.selectedIndex];\n if (selected) void updateHypothesis(selected.id, 'delete');\n } else if (_input === 'r') {\n const completed = hypothesesPanel.hypotheses.filter(h => h.status === 'validated' || h.status === 'invalidated');\n if (completed[0]) void updateHypothesis(completed[0].id, 'delete');\n } else if (_input === 'u') {\n const recent = hypothesesPanel.hypotheses.filter(h => h.status === 'validated' || h.status === 'invalidated')\n .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());\n if (recent[0]) void reactivateHypothesis(recent[0].id);\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>Hypotheses</Text> <Text dimColor>Test theories about your codebase</Text></Text>\n <Text> </Text>\n\n {hypothesesPanel.inputMode === 'add' ? (\n <Box flexDirection=\"column\">\n <Box borderStyle=\"round\" borderColor=\"green\" paddingX={1}>\n <Text>{hypothesesPanel.inputBuffer}<Text bold color=\"green\">|</Text></Text>\n </Box>\n <Text dimColor> enter save · esc cancel</Text>\n </Box>\n ) : (\n <>\n {hypothesesPanel.hypotheses.length === 0 ? (\n <Box flexDirection=\"column\">\n <Text dimColor> No hypotheses yet.</Text>\n <Text dimColor> Press a to add your first hypothesis.</Text>\n </Box>\n ) : (\n <Box flexDirection=\"column\">\n {testing.length > 0 && (\n <Box flexDirection=\"column\">\n {testing.map((hypo, idx) => {\n const isSelected = hypothesesPanel.selectedIndex === idx;\n const conf = Math.round(hypo.confidence * 100);\n return (\n <Box key={hypo.id} flexDirection=\"column\">\n <Text>\n {isSelected ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n <Text color=\"yellow\">○</Text> {hypo.statement.slice(0, 50)}\n <Text dimColor> {conf}% · {hypo.evidenceCount} evidence</Text>\n </Text>\n </Box>\n );\n })}\n <Text> </Text>\n </Box>\n )}\n\n {validated.length > 0 && (\n <Box flexDirection=\"column\">\n <Text dimColor> Validated</Text>\n {validated.slice(0, 3).map(h => (\n <Text key={h.id}> <Text color=\"green\">●</Text> {h.statement.slice(0, 50)}</Text>\n ))}\n {validated.length > 3 && <Text dimColor> +{validated.length - 3} more</Text>}\n <Text> </Text>\n </Box>\n )}\n\n {invalidated.length > 0 && (\n <Box flexDirection=\"column\">\n <Text dimColor> Invalidated</Text>\n {invalidated.slice(0, 2).map(h => (\n <Text key={h.id}> <Text color=\"red\">●</Text> <Text dimColor>{h.statement.slice(0, 50)}</Text></Text>\n ))}\n {invalidated.length > 2 && <Text dimColor> +{invalidated.length - 2} more</Text>}\n </Box>\n )}\n </Box>\n )}\n </>\n )}\n </Box>\n );\n}\n","import React, { useEffect, useCallback } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\nimport { getWorkingDirectory } from '../../../utils/workspace.js';\nimport { ContextGraph } from '../../../context/graph.js';\nimport { findCrossProjectPatterns } from '../../../memory/global-memory.js';\nimport type { FileNodeData, ChangeNodeData, PatternNodeData, IncidentNodeData, DecisionNodeData, Node } from '../../../context/types.js';\n\nconst RISK_ORDER: Record<string, number> = { critical: 0, high: 1, medium: 2, low: 3, unknown: 4 };\n\nfunction riskColor(risk: string): string | undefined {\n switch (risk) {\n case 'critical': return 'red';\n case 'high': return 'yellow';\n case 'medium': return 'blue';\n default: return undefined;\n }\n}\n\nfunction timeAgo(iso: string): string {\n const ms = Date.now() - new Date(iso).getTime();\n const mins = Math.floor(ms / 60000);\n if (mins < 60) return `${mins}m`;\n const hrs = Math.floor(mins / 60);\n if (hrs < 24) return `${hrs}h`;\n return `${Math.floor(hrs / 24)}d`;\n}\n\nexport function MemoryTreeView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { memoryTree } = state;\n const { snapshot, globalPatterns, expandedNodes, selectedNode, loaded } = memoryTree;\n\n const loadData = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const graph = new ContextGraph(workDir);\n const [snap, patterns] = await Promise.all([\n graph.getSnapshot(),\n findCrossProjectPatterns(2),\n ]);\n dispatch({ type: 'SET_MEMORY_TREE', snapshot: snap, patterns });\n } catch {\n dispatch({ type: 'ADD_ACTIVITY', message: 'Context graph load error' });\n }\n }, [dispatch]);\n\n useEffect(() => {\n if (!loaded) { void loadData(); }\n }, [loaded, loadData]);\n\n useInput((_input, key) => {\n if (key.upArrow || _input === 'k') dispatch({ type: 'NAVIGATE_UP' });\n else if (key.downArrow || _input === 'j') dispatch({ type: 'NAVIGATE_DOWN' });\n else if (key.return) dispatch({ type: 'TOGGLE_MEMORY_NODE', nodeId: selectedNode });\n });\n\n const sel = (nodeId: string) => selectedNode === nodeId;\n\n if (!loaded) {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text bold>Context</Text>\n <Text dimColor> Loading context graph...</Text>\n </Box>\n );\n }\n\n const nodeCount = snapshot?.nodes.length ?? 0;\n const edgeCount = snapshot?.edges.length ?? 0;\n\n if (nodeCount === 0 && globalPatterns.length === 0) {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text bold>Context</Text>\n <Text> </Text>\n <Text dimColor> No context data yet.</Text>\n <Text dimColor> Run trie watch or trie tell to populate the graph.</Text>\n </Box>\n );\n }\n\n const fileNodes = (snapshot?.nodes.filter(n => n.type === 'file') ?? []) as Array<Node & { data: FileNodeData }>;\n const changeNodes = (snapshot?.nodes.filter(n => n.type === 'change') ?? []) as Array<Node & { data: ChangeNodeData }>;\n const patternNodes = (snapshot?.nodes.filter(n => n.type === 'pattern') ?? []) as Array<Node & { data: PatternNodeData }>;\n const incidentNodes = (snapshot?.nodes.filter(n => n.type === 'incident') ?? []) as Array<Node & { data: IncidentNodeData }>;\n const decisionNodes = (snapshot?.nodes.filter(n => n.type === 'decision') ?? []) as Array<Node & { data: DecisionNodeData }>;\n\n const sortedFiles = [...fileNodes].sort((a, b) =>\n (RISK_ORDER[a.data.riskLevel] ?? 4) - (RISK_ORDER[b.data.riskLevel] ?? 4)\n );\n const sortedChanges = [...changeNodes].sort((a, b) =>\n new Date(b.data.timestamp).getTime() - new Date(a.data.timestamp).getTime()\n );\n\n function renderSectionHeader(id: string, label: string, count: number) {\n const expanded = expandedNodes.has(id);\n return (\n <Text>\n {sel(id) ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n {expanded ? <Text color=\"green\">●</Text> : <Text dimColor>○</Text>}{' '}\n {sel(id) ? <Text bold color=\"green\">{label} ({count})</Text> : <Text bold>{label} ({count})</Text>}\n </Text>\n );\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>Context</Text> <Text dimColor>{nodeCount} nodes {edgeCount} edges</Text></Text>\n <Text> </Text>\n\n {renderSectionHeader('files', 'Files', fileNodes.length)}\n {expandedNodes.has('files') && sortedFiles.slice(0, 15).map(n => {\n const nodeId = `file-${n.id}`;\n const path = n.data.path.split('/').slice(-2).join('/');\n const risk = n.data.riskLevel;\n const color = riskColor(risk);\n return (\n <Text key={n.id}>\n {sel(nodeId) ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n {' '}\n {color ? <Text color={color}>●</Text> : <Text dimColor>○</Text>}{' '}\n {sel(nodeId) ? <Text bold color=\"green\">{path}</Text> : <Text>{path}</Text>}\n {' '}{color ? <Text color={color}>{risk}</Text> : <Text dimColor>{risk}</Text>}\n {' '}<Text dimColor>{n.data.changeCount} changes</Text>\n {n.data.incidentCount > 0 && <Text dimColor> {n.data.incidentCount} incidents</Text>}\n </Text>\n );\n })}\n\n {renderSectionHeader('changes', 'Changes', changeNodes.length)}\n {expandedNodes.has('changes') && sortedChanges.slice(0, 10).map(n => {\n const nodeId = `change-${n.id}`;\n const msg = n.data.message.slice(0, 45) + (n.data.message.length > 45 ? '...' : '');\n const outcome = n.data.outcome;\n const outcomeColor = outcome === 'incident' ? 'red' : outcome === 'success' ? 'green' : undefined;\n return (\n <Text key={n.id}>\n {sel(nodeId) ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n {' '}\n {outcomeColor ? <Text color={outcomeColor}>●</Text> : <Text dimColor>○</Text>}{' '}\n {sel(nodeId) ? <Text bold color=\"green\">{msg}</Text> : <Text>{msg}</Text>}\n {' '}<Text dimColor>{timeAgo(n.data.timestamp)}</Text>\n </Text>\n );\n })}\n\n {renderSectionHeader('patterns', 'Patterns', patternNodes.length)}\n {expandedNodes.has('patterns') && patternNodes.slice(0, 10).map(n => {\n const nodeId = `pattern-${n.id}`;\n const conf = Math.round(n.data.confidence * 100);\n const confColor = conf > 70 ? 'green' : conf > 40 ? 'yellow' : undefined;\n const desc = n.data.description.slice(0, 45) + (n.data.description.length > 45 ? '...' : '');\n return (\n <Text key={n.id}>\n {sel(nodeId) ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n {' '}\n {n.data.isAntiPattern ? <Text color=\"red\">●</Text> : <Text dimColor>○</Text>}{' '}\n {sel(nodeId) ? <Text bold color=\"green\">{desc}</Text> : <Text>{desc}</Text>}\n {' '}{confColor ? <Text color={confColor}>{conf}%</Text> : <Text dimColor>{conf}%</Text>}\n {n.data.isAntiPattern && <Text color=\"red\"> anti-pattern</Text>}\n </Text>\n );\n })}\n\n {renderSectionHeader('incidents', 'Incidents', incidentNodes.length)}\n {expandedNodes.has('incidents') && incidentNodes.slice(0, 10).map(n => {\n const nodeId = `incident-${n.id}`;\n const sevColor = n.data.severity === 'critical' ? 'red' : n.data.severity === 'major' ? 'yellow' : undefined;\n const desc = n.data.description.slice(0, 45) + (n.data.description.length > 45 ? '...' : '');\n return (\n <Text key={n.id}>\n {sel(nodeId) ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n {' '}\n {sevColor ? <Text color={sevColor}>●</Text> : <Text dimColor>○</Text>}{' '}\n {sel(nodeId) ? <Text bold color=\"green\">{desc}</Text> : <Text>{desc}</Text>}\n {' '}{n.data.resolved ? <Text color=\"green\">resolved</Text> : <Text dimColor>open</Text>}\n </Text>\n );\n })}\n\n {renderSectionHeader('decisions', 'Decisions', decisionNodes.length)}\n {expandedNodes.has('decisions') && decisionNodes.slice(0, 10).map(n => {\n const nodeId = `decision-${n.id}`;\n const dec = n.data.decision.slice(0, 45) + (n.data.decision.length > 45 ? '...' : '');\n const outcomeColor = n.data.outcome === 'good' ? 'green' : n.data.outcome === 'bad' ? 'red' : undefined;\n return (\n <Text key={n.id}>\n {sel(nodeId) ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n {' '}\n {outcomeColor ? <Text color={outcomeColor}>●</Text> : <Text dimColor>○</Text>}{' '}\n {sel(nodeId) ? <Text bold color=\"green\">{dec}</Text> : <Text>{dec}</Text>}\n {' '}{outcomeColor ? <Text color={outcomeColor}>{n.data.outcome}</Text> : <Text dimColor>{n.data.outcome}</Text>}\n </Text>\n );\n })}\n\n {renderSectionHeader('cross-project', 'Cross-Project', globalPatterns.length)}\n {expandedNodes.has('cross-project') && globalPatterns.slice(0, 5).map(pattern => {\n const patternId = `global-${pattern.id}`;\n const desc = pattern.pattern.slice(0, 40) + (pattern.pattern.length > 40 ? '...' : '');\n return (\n <Text key={pattern.id}>\n {sel(patternId) ? <Text bold color=\"green\">{'>'} </Text> : <Text> </Text>}\n {' '}<Text dimColor>{desc} · {pattern.projects.length} projects</Text>\n </Text>\n );\n })}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\n\nexport function RawLogView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { rawLog, rawLogPage } = state;\n\n const pageSize = Math.max(10, (process.stdout.rows || 40) - 15);\n const totalPages = Math.max(1, Math.ceil(rawLog.length / pageSize));\n\n useInput((input, _key) => {\n if (input === 'n') {\n dispatch({ type: 'SET_RAW_LOG_PAGE', page: Math.min(totalPages - 1, rawLogPage + 1) });\n } else if (input === 'p') {\n dispatch({ type: 'SET_RAW_LOG_PAGE', page: Math.max(0, rawLogPage - 1) });\n }\n });\n\n const startIdx = rawLogPage * pageSize;\n const logs = rawLog.slice(startIdx, startIdx + pageSize);\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text>\n <Text bold>Log</Text>{' '}\n <Text dimColor>Page {rawLogPage + 1}/{totalPages}</Text>{' '}\n <Text bold>{rawLog.length}</Text><Text dimColor> entries</Text>\n </Text>\n <Text> </Text>\n\n {rawLog.length === 0 ? (\n <Text dimColor> No log entries yet.</Text>\n ) : (\n <Box flexDirection=\"column\">\n {logs.map((entry, i) => {\n const dot = entry.level === 'error' ? <Text color=\"red\">●</Text>\n : entry.level === 'warn' ? <Text color=\"yellow\">●</Text>\n : entry.level === 'info' ? <Text color=\"green\">●</Text>\n : <Text dimColor>○</Text>;\n return (\n <Text key={i}>\n {' '}{dot}{' '}\n {entry.message.slice(0, 70)}\n {' '}<Text dimColor>{entry.time}</Text>\n </Text>\n );\n })}\n </Box>\n )}\n </Box>\n );\n}\n","import React, { useCallback } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\nimport { isAIAvailable, runAIAnalysis } from '../../../ai/client.js';\nimport { getWorkingDirectory } from '../../../utils/workspace.js';\nimport { TieredStorage } from '../../../storage/tiered-storage.js';\nimport { ContextGraph } from '../../../context/graph.js';\n\nexport function ChatView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { chatState } = state;\n const { messages, inputBuffer, loading } = chatState;\n\n const sendMessage = useCallback(async (question: string) => {\n dispatch({ type: 'ADD_CHAT_MESSAGE', role: 'user', content: question });\n dispatch({ type: 'SET_CHAT_INPUT', buffer: '' });\n dispatch({ type: 'SET_CHAT_LOADING', loading: true });\n\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const storage = new TieredStorage(workDir);\n const graph = new ContextGraph(workDir);\n\n const [decisions, blockers, snap] = await Promise.all([\n storage.queryDecisions({ limit: 10 }),\n storage.queryBlockers({ limit: 5 }),\n graph.getSnapshot(),\n ]);\n\n const contextParts: string[] = [];\n\n if (decisions.length > 0) {\n contextParts.push('Recent decisions:\\n' + decisions.map(d =>\n `- ${d.decision} (${d.when}${d.hash ? `, hash: ${d.hash.slice(0, 8)}` : ''})`\n ).join('\\n'));\n }\n\n if (blockers.length > 0) {\n contextParts.push('Active blockers:\\n' + blockers.map(b =>\n `- ${b.blocker} [${b.impact}]`\n ).join('\\n'));\n }\n\n const fileNodes = snap.nodes.filter(n => n.type === 'file');\n const riskFiles = fileNodes\n .filter(n => n.data && 'riskLevel' in n.data && (n.data.riskLevel === 'critical' || n.data.riskLevel === 'high'))\n .slice(0, 10);\n if (riskFiles.length > 0) {\n contextParts.push('High-risk files:\\n' + riskFiles.map(n =>\n `- ${(n.data as { path: string; riskLevel: string }).path} (${(n.data as { riskLevel: string }).riskLevel})`\n ).join('\\n'));\n }\n\n const patternNodes = snap.nodes.filter(n => n.type === 'pattern').slice(0, 5);\n if (patternNodes.length > 0) {\n contextParts.push('Learned patterns:\\n' + patternNodes.map(n =>\n `- ${(n.data as { description: string; confidence: number }).description} (${Math.round((n.data as { confidence: number }).confidence * 100)}% confidence)`\n ).join('\\n'));\n }\n\n const contextBlock = contextParts.length > 0\n ? contextParts.join('\\n\\n')\n : 'No context data available yet.';\n\n const result = await runAIAnalysis({\n systemPrompt: `You are Trie, a code guardian assistant embedded in a TUI. Answer concisely based on the project context below. Reference specific decisions, patterns, and files when relevant.\\n\\nProject context:\\n${contextBlock}`,\n userPrompt: question,\n maxTokens: 1024,\n temperature: 0.4,\n });\n\n if (result.success) {\n dispatch({ type: 'ADD_CHAT_MESSAGE', role: 'assistant', content: result.content });\n } else {\n dispatch({ type: 'ADD_CHAT_MESSAGE', role: 'assistant', content: result.error || 'Failed to get a response.' });\n }\n } catch (err) {\n dispatch({ type: 'ADD_CHAT_MESSAGE', role: 'assistant', content: `Error: ${err instanceof Error ? err.message : 'unknown'}` });\n } finally {\n dispatch({ type: 'SET_CHAT_LOADING', loading: false });\n }\n }, [dispatch]);\n\n useInput((input, key) => {\n if (loading) return;\n\n if (key.return && inputBuffer.trim().length > 0) {\n void sendMessage(inputBuffer.trim());\n } else if (key.escape) {\n dispatch({ type: 'SET_CHAT_INPUT', buffer: '' });\n } else if (key.backspace || key.delete) {\n dispatch({ type: 'SET_CHAT_INPUT', buffer: inputBuffer.slice(0, -1) });\n } else if (input && !key.ctrl && !key.meta) {\n dispatch({ type: 'SET_CHAT_INPUT', buffer: inputBuffer + input });\n }\n });\n\n if (!isAIAvailable()) {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>Chat</Text> <Text dimColor>Ask Trie anything</Text></Text>\n <Text> </Text>\n <Text dimColor> AI is not available.</Text>\n <Text> <Text dimColor>Press</Text> <Text bold>s</Text> <Text dimColor>to open settings and add your Anthropic API key,</Text></Text>\n <Text> <Text dimColor>or set</Text> <Text bold>ANTHROPIC_API_KEY</Text> <Text dimColor>in your environment.</Text></Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>Chat</Text> <Text dimColor>Ask Trie anything</Text></Text>\n <Text> </Text>\n\n {messages.length === 0 && !loading && (\n <Box flexDirection=\"column\">\n <Text dimColor> Ask about your codebase, decisions, patterns, or risks.</Text>\n <Text dimColor> Trie uses your context graph and decision ledger to answer.</Text>\n <Text> </Text>\n </Box>\n )}\n\n {messages.map((msg, idx) => (\n <Box key={idx} flexDirection=\"column\" marginBottom={1}>\n {msg.role === 'user' ? (\n <Text> <Text bold color=\"green\">You:</Text> {msg.content}</Text>\n ) : (\n <Box flexDirection=\"column\">\n <Text> <Text bold>Trie:</Text> {msg.content.slice(0, 500)}{msg.content.length > 500 ? '...' : ''}</Text>\n </Box>\n )}\n </Box>\n ))}\n\n {loading && <Text> <Text dimColor>Thinking...</Text></Text>}\n\n <Box flexGrow={1} />\n\n <Box borderStyle=\"round\" borderColor=\"green\" paddingX={1}>\n <Text>\n {inputBuffer || <Text dimColor>Ask a question...</Text>}\n <Text bold color=\"green\">|</Text>\n </Text>\n </Box>\n <Text dimColor> enter send esc clear</Text>\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAoBO,IAAM,eAAN,MAAmB;AAAA,EACxB,MAAM,QAAQ,QAAiC;AAG7C,YAAQ,MAAM,+DAAqD;AACnE,YAAQ,MAAM,yCAAyC;AACvD,YAAQ,MAAM,wCAAwC;AACtD,YAAQ,MAAM,4CAA4C;AAE1D,WAAO;AAAA,MACL,SAAS,CAAC;AAAA,QACR,MAAM;AAAA,QACN,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACxBA,IAAM,wBAAwB,MAAM,kBAAkB;AAuC/C,IAAM,mBAAN,MAAuB;AAAA,EACpB,YAAiD,oBAAI,IAAI;AAAA,EACzD,WAAyB;AAAA,IAC/B,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,cAAc,CAAC;AAAA,IACf,iBAAiB,CAAC;AAAA,IAClB,aAAa;AAAA,IACb,kBAAkB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,EAAE;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,UAAsD;AAC9D,SAAK,UAAU,IAAI,QAAQ;AAC3B,WAAO,MAAM,KAAK,UAAU,OAAO,QAAQ;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKQ,KAAK,MAA4B,MAAiB;AACxD,UAAM,SAAuB;AAAA,MAC3B;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB;AAAA,IACF;AAEA,SAAK,UAAU,QAAQ,cAAY;AACjC,UAAI;AACF,iBAAS,MAAM;AAAA,MACjB,SAAS,OAAO;AACd,YAAI,CAAC,sBAAsB,GAAG;AAC5B,kBAAQ,KAAK,0BAA0B,KAAK;AAAA,QAC9C;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,YAA0B;AAClC,SAAK,WAAW;AAAA,MACd;AAAA,MACA,gBAAgB;AAAA,MAChB,cAAc,CAAC;AAAA,MACf,iBAAiB,CAAC;AAAA,MAClB,aAAa;AAAA,MACb,kBAAkB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,EAAE;AAAA,IACnE;AAEA,SAAK,KAAK,YAAY,EAAE,GAAG,KAAK,SAAS,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,MAAoB;AACpC,SAAK,SAAS,cAAc;AAC5B,SAAK,KAAK,YAAY,EAAE,GAAG,KAAK,SAAS,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,eAAqB;AACnB,SAAK,SAAS;AACd,SAAK,KAAK,YAAY,EAAE,GAAG,KAAK,SAAS,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,WAAyB;AAClC,QAAI,CAAC,KAAK,SAAS,aAAa,SAAS,SAAS,GAAG;AACnD,WAAK,SAAS,aAAa,KAAK,SAAS;AAAA,IAC3C;AACA,SAAK,KAAK,eAAe,EAAE,OAAO,UAAU,CAAC;AAC7C,SAAK,KAAK,YAAY,EAAE,GAAG,KAAK,SAAS,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,WAAmB,QAAuB;AAEtD,SAAK,SAAS,eAAe,KAAK,SAAS,aAAa,OAAO,OAAK,MAAM,SAAS;AACnF,QAAI,CAAC,KAAK,SAAS,gBAAgB,SAAS,SAAS,GAAG;AACtD,WAAK,SAAS,gBAAgB,KAAK,SAAS;AAAA,IAC9C;AAGA,eAAW,SAAS,QAAQ;AAC1B,WAAK,SAAS,iBAAiB,MAAM,QAAQ;AAC7C,WAAK,SAAS;AAAA,IAChB;AAEA,SAAK,KAAK,kBAAkB;AAAA,MAC1B,OAAO;AAAA,MACP,YAAY,OAAO;AAAA,MACnB,QAAQ,OAAO,MAAM,GAAG,CAAC;AAAA;AAAA,IAC3B,CAAC;AACD,SAAK,KAAK,YAAY,EAAE,GAAG,KAAK,SAAS,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,OAAoB;AAC9B,SAAK,SAAS,iBAAiB,MAAM,QAAQ;AAC7C,SAAK,SAAS;AACd,SAAK,KAAK,eAAe,KAAK;AAC9B,SAAK,KAAK,YAAY,EAAE,GAAG,KAAK,SAAS,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,aAA4B;AACvC,SAAK,KAAK,iBAAiB;AAAA,MACzB,YAAY,KAAK,SAAS;AAAA,MAC1B,aAAa,YAAY;AAAA,MACzB,QAAQ;AAAA;AAAA,MACR,kBAAkB,KAAK,SAAS;AAAA,MAChC,iBAAiB,KAAK,SAAS;AAAA,IACjC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,OAAc,SAAwB;AAChD,SAAK,KAAK,SAAS;AAAA,MACjB,SAAS,MAAM;AAAA,MACf;AAAA,MACA,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,cAA4B;AAC1B,WAAO,EAAE,GAAG,KAAK,SAAS;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,WAAW;AAAA,MACd,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc,CAAC;AAAA,MACf,iBAAiB,CAAC;AAAA,MAClB,aAAa;AAAA,MACb,kBAAkB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,EAAE;AAAA,IACnE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,QAA4J;AAC5K,SAAK,KAAK,gBAAgB,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,MAAoB;AACpC,SAAK,KAAK,gBAAgB,EAAE,KAAK,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,QAAyC,SAAwB;AAC5E,SAAK,KAAK,UAAU,EAAE,QAAQ,QAAQ,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,SAA0F;AAC/G,SAAK,KAAK,oBAAoB,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,SAA+B;AAC3C,SAAK,KAAK,WAAW,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,MAAyB;AAClC,SAAK,KAAK,eAAe,IAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,WAAmC;AACjD,SAAK,KAAK,oBAAoB,SAAS;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,UAAiC;AAC9C,SAAK,KAAK,mBAAmB,QAAQ;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,QAAoC;AACtD,SAAK,KAAK,kBAAkB,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,QAA6B;AACxC,SAAK,KAAK,gBAAgB,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,OAA4C,SAAuB;AAC9E,SAAK,KAAK,WAAW,EAAE,OAAO,SAAS,OAAM,oBAAI,KAAK,GAAE,mBAAmB,SAAS,EAAE,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,EAC1G;AACF;;;ACrSA,SAAS,cAA6B;AACtC,OAAOA,aAAW;;;ACDlB,SAAgB,YAAAC,WAAU,aAAAC,YAAW,eAAAC,cAAa,cAAc;AAChE,SAAS,OAAAC,OAAK,YAAAC,WAAU,cAAc;;;ACDtC,OAAO,SAAS,eAAe,YAAY,kBAAiC;AA2gBnE;AAngBT,SAAS,YAAY,OAAuB,SAAiC;AAC3E,QAAM,QAAO,oBAAI,KAAK,GAAE,mBAAmB,SAAS,EAAE,QAAQ,OAAO,MAAM,WAAW,QAAQ,WAAW,QAAQ,UAAU,CAAC;AAC5H,QAAM,cAAc,CAAC,EAAE,MAAM,QAAQ,GAAG,GAAG,MAAM,WAAW,EAAE,MAAM,GAAG,EAAE;AACzE,SAAO,EAAE,GAAG,OAAO,YAAY;AACjC;AAEA,SAAS,mBAAmB,OAAuB;AACjD,SAAO,MAAM,cAAc,OAAO,OAAK,CAAC,EAAE,SAAS;AACrD;AAEA,SAAS,mBAAmB,OAA6D;AACvF,QAAM,QAA8C,CAAC;AACrD,QAAM,EAAE,eAAe,UAAU,eAAe,IAAI,MAAM;AAE1D,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,YAAY,SAAS,MAAM,OAAO,OAAK,EAAE,SAAS,MAAM;AAC9D,QAAM,cAAc,SAAS,MAAM,OAAO,OAAK,EAAE,SAAS,QAAQ;AAClE,QAAM,eAAe,SAAS,MAAM,OAAO,OAAK,EAAE,SAAS,SAAS;AACpE,QAAM,gBAAgB,SAAS,MAAM,OAAO,OAAK,EAAE,SAAS,UAAU;AACtE,QAAM,gBAAgB,SAAS,MAAM,OAAO,OAAK,EAAE,SAAS,UAAU;AAEtE,QAAM,KAAK,EAAE,IAAI,SAAS,OAAO,EAAE,CAAC;AACpC,MAAI,cAAc,IAAI,OAAO,GAAG;AAC9B,cAAU,MAAM,GAAG,EAAE,EAAE,QAAQ,OAAK,MAAM,KAAK,EAAE,IAAI,QAAQ,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,EAClF;AAEA,QAAM,KAAK,EAAE,IAAI,WAAW,OAAO,EAAE,CAAC;AACtC,MAAI,cAAc,IAAI,SAAS,GAAG;AAChC,gBAAY,MAAM,GAAG,EAAE,EAAE,QAAQ,OAAK,MAAM,KAAK,EAAE,IAAI,UAAU,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,EACtF;AAEA,QAAM,KAAK,EAAE,IAAI,YAAY,OAAO,EAAE,CAAC;AACvC,MAAI,cAAc,IAAI,UAAU,GAAG;AACjC,iBAAa,MAAM,GAAG,EAAE,EAAE,QAAQ,OAAK,MAAM,KAAK,EAAE,IAAI,WAAW,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,EACxF;AAEA,QAAM,KAAK,EAAE,IAAI,aAAa,OAAO,EAAE,CAAC;AACxC,MAAI,cAAc,IAAI,WAAW,GAAG;AAClC,kBAAc,MAAM,GAAG,EAAE,EAAE,QAAQ,OAAK,MAAM,KAAK,EAAE,IAAI,YAAY,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,EAC1F;AAEA,QAAM,KAAK,EAAE,IAAI,aAAa,OAAO,EAAE,CAAC;AACxC,MAAI,cAAc,IAAI,WAAW,GAAG;AAClC,kBAAc,MAAM,GAAG,EAAE,EAAE,QAAQ,OAAK,MAAM,KAAK,EAAE,IAAI,YAAY,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,EAC1F;AAEA,QAAM,KAAK,EAAE,IAAI,iBAAiB,OAAO,EAAE,CAAC;AAC5C,MAAI,cAAc,IAAI,eAAe,GAAG;AACtC,mBAAe,MAAM,GAAG,CAAC,EAAE,QAAQ,OAAK,MAAM,KAAK,EAAE,IAAI,UAAU,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,EACxF;AAEA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAuB,QAAsC;AACvF,MAAI,IAAI,EAAE,GAAG,OAAO,YAAY,KAAK,IAAI,EAAE;AAE3C,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,YAAY;AACf,YAAM,cAAc,EAAE;AACtB,UAAK,YAAY,eAAe,KAAK,OAAO,KAAK,aAAa,KACzD,YAAY,iBAAiB,KAAK,OAAO,KAAK,mBAAmB,GAAI;AACxE,UAAE,gBAAgB,KAAK,IAAI;AAC3B,UAAE,eAAe;AACjB,YAAI,EAAE,GAAG,EAAE;AACX,eAAO,EAAE;AAAA,MACX;AACA,QAAE,WAAW,OAAO;AACpB,UAAI,OAAO,KAAK,kBAAkB,WAAW,GAAG;AAC9C,UAAE,SAAS,EAAE,aAAa,MAAM,gBAAgB,OAAO,UAAU;AAAA,MACnE;AACA,UAAI,OAAO,KAAK,eAAe,OAAO,KAAK,iBAAiB,OAAO,KAC/D,OAAO,KAAK,mBAAmB,YAAY,gBAAgB;AAC7D,YAAI,YAAY,GAAG,WAAW,OAAO,KAAK,cAAc,IAAI,OAAO,KAAK,UAAU,QAAQ;AAAA,MAC5F;AACA;AAAA,IACF;AAAA,IACA,KAAK;AACH,UAAI,YAAY,GAAG,sBAAsB,OAAO,KAAK,KAAK,EAAE;AAC5D;AAAA,IACF,KAAK;AACH,UAAI,YAAY,GAAG,uBAAuB,OAAO,KAAK,KAAK,KAAK,OAAO,KAAK,UAAU,UAAU;AAChG;AAAA,IACF,KAAK;AACH,QAAE,SAAS,CAAC,GAAG,EAAE,QAAQ,OAAO,IAAI;AACpC,UAAI,OAAO,KAAK,aAAa,cAAc,OAAO,KAAK,aAAa,WAAW;AAC7E,cAAM,OAAO,OAAO,KAAK,aAAa,aAAa,QAAQ;AAC3D,cAAM,WAAW,OAAO,KAAK,MAAM,MAAM,GAAG,EAAE,IAAI,KAAK;AACvD,YAAI,YAAY,GAAG,GAAG,IAAI,IAAI,OAAO,KAAK,SAAS,YAAY,CAAC,KAAK,OAAO,KAAK,SAAS,MAAM,GAAG,EAAE,KAAK,QAAQ,EAAE;AACpH,YAAI,OAAO,KAAK,aAAa,YAAY;AACvC,YAAE,SAAS,EAAE,aAAa,MAAM,gBAAgB,OAAO,UAAU;AAAA,QACnE;AAAA,MACF;AACA;AAAA,IACF,KAAK;AACH,QAAE,eAAe;AACjB,QAAE,cAAc,OAAO;AACvB,QAAE,WAAW,EAAE,GAAG,EAAE,UAAU,gBAAgB,EAAE,SAAS,WAAW;AACpE,UAAI,OAAO,KAAK,UAAU,MAAM,QAAQ,OAAO,KAAK,MAAM,GAAG;AAC3D,UAAE,SAAS,OAAO,KAAK;AAAA,MACzB;AACA,UAAI,YAAY,GAAG,uBAAuB,EAAE,SAAS,WAAW,aAAa;AAC7E;AAAA,IACF,KAAK;AACH,QAAE,QAAQ;AAAA,QACR,UAAU,OAAO,KAAK,YAAY,EAAE,MAAM;AAAA,QAC1C,aAAa,OAAO,KAAK,eAAe,EAAE,MAAM;AAAA,QAChD,YAAY,OAAO,KAAK,cAAc,EAAE,MAAM;AAAA,QAC9C,YAAY,OAAO,KAAK,cAAc,EAAE,MAAM;AAAA,QAC9C,eAAe,OAAO,KAAK,iBAAiB,EAAE,MAAM;AAAA,MACtD;AACA,UAAI,OAAO,KAAK,aAAa,QAAW;AACtC,YAAI,YAAY,GAAG,OAAO,KAAK,WAC3B,2BAA2B,OAAO,KAAK,eAAe,CAAC,WACvD,qBAAqB;AAAA,MAC3B;AACA;AAAA,IACF,KAAK,gBAAgB;AACnB,YAAM,QAAQ,EAAE,MAAM,OAAO,KAAK,MAAM,MAAM,IAAI,KAAK,OAAO,SAAS,EAAE,mBAAmB,SAAS,EAAE,QAAQ,MAAM,CAAC,EAAE;AACxH,QAAE,QAAQ;AAAA,QACR,GAAG,EAAE;AAAA,QACL,eAAe,CAAC,OAAO,GAAG,EAAE,MAAM,aAAa,EAAE,MAAM,GAAG,CAAC;AAAA,QAC3D,YAAY,MAAM;AAAA,MACpB;AACA,UAAI,YAAY,GAAG,oBAAoB,OAAO,KAAK,IAAI,EAAE;AACzD;AAAA,IACF;AAAA,IACA,KAAK,oBAAoB;AACvB,YAAM,KAAK,EAAE,GAAG,EAAE,iBAAiB;AACnC,UAAI,OAAO,KAAK,UAAW,IAAG,sBAAsB,OAAO,KAAK;AAChE,UAAI,OAAO,KAAK,MAAO,IAAG,kBAAkB,OAAO,KAAK;AACxD,UAAI,OAAO,KAAK,SAAU,IAAG,qBAAqB,OAAO,KAAK;AAC9D,UAAI,OAAO,KAAK,UAAW,IAAG,sBAAsB,OAAO,KAAK;AAChE,QAAE,mBAAmB;AACrB,YAAM,SAAS,OAAO,KAAK,aAAa,MAAM,OAAO,KAAK,SAAS,MACpD,OAAO,KAAK,YAAY,MAAM,OAAO,KAAK,aAAa;AACtE,UAAI,QAAQ,GAAG;AACb,YAAI,YAAY,GAAG,iBAAiB,KAAK,aAAa,OAAO,KAAK,SAAS,MAAM,OAAO,KAAK,KAAK,MAAM,OAAO,KAAK,QAAQ,IAAI;AAAA,MAClI;AACA;AAAA,IACF;AAAA,IACA,KAAK;AACH,UAAI,OAAO,KAAK,WAAW,SAAU,KAAI,YAAY,GAAG,yBAAyB;AAAA,eACxE,OAAO,KAAK,WAAW,QAAS,KAAI,YAAY,GAAG,uBAAuB,OAAO,KAAK,WAAW,eAAe,EAAE;AAAA,eAClH,OAAO,KAAK,WAAW,WAAY,KAAI,YAAY,GAAG,iBAAiB,OAAO,KAAK,WAAW,oBAAoB,EAAE;AAC7H;AAAA,IACF,KAAK;AACH,QAAE,SAAS,CAAC;AAAA,QACV,MAAM,OAAO,KAAK,QAAQ,IAAI,KAAK,OAAO,SAAS,EAAE,mBAAmB,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,QAClG,OAAO,OAAO,KAAK;AAAA,QACnB,SAAS,OAAO,KAAK;AAAA,MACvB,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG;AAC5B;AAAA,EACJ;AAEA,SAAO;AACT;AAEA,SAAS,sBAAsB,SAAsB,OAA0C;AAC7F,QAAM,SAAS,EAAE,GAAG,QAAQ;AAC5B,MAAI,MAAM,YAAY;AACpB,WAAO,aAAa;AAAA,MAClB,GAAG,OAAO;AAAA,MACV,GAAG,MAAM;AAAA,MACT,mBAAmB;AAAA,QACjB,GAAG,OAAO,WAAW;AAAA,QACrB,GAAI,MAAM,WAAW,qBAAqB,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACA,MAAI,MAAM,YAAa,QAAO,cAAc,EAAE,GAAG,OAAO,aAAa,GAAG,MAAM,YAAY;AAC1F,MAAI,MAAM,eAAgB,QAAO,iBAAiB,EAAE,GAAG,OAAO,gBAAgB,GAAG,MAAM,eAAe;AACtG,SAAO;AACT;AAEO,SAAS,iBAAiB,OAAuB,QAAyC;AAC/F,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO,mBAAmB,OAAO,OAAO,MAAM;AAAA,IAEhD,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,cAAc,MAAM,MAAM,MAAM,OAAO,KAAK;AAAA,IAEjE,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,MAAM,MAAM,gBAAgB,YAAY,cAAc,KAAK;AAAA,IAEhF,KAAK;AACH,aAAO,YAAY,OAAO,OAAO,OAAO;AAAA,IAE1C,KAAK,qBAAqB;AACxB,YAAM,MAAM,KAAK,IAAI;AACrB,YAAM,eAAyD;AAAA,QAC7D,SAAS,OAAO;AAAA,QAChB,UAAU,OAAO;AAAA,QACjB,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AACA,UAAI,OAAO,SAAS,OAAW,cAAa,OAAO,OAAO;AAE1D,YAAM,eAA+C;AAAA,QACnD,QAAQ;AAAA,QACR,SAAS,OAAO;AAAA,QAChB,UAAU,OAAO;AAAA,QACjB,WAAW;AAAA,MACb;AACA,UAAI,OAAO,SAAS,OAAW,cAAa,OAAO,OAAO;AAC1D,UAAI,OAAO,eAAe,OAAW,cAAa,aAAa,MAAM,OAAO;AAE5E,UAAI,IAAoB;AAAA,QACtB,GAAG;AAAA,QACH;AAAA,QACA,qBAAqB,CAAC,cAAc,GAAG,MAAM,mBAAmB,EAAE,MAAM,GAAG,EAAE;AAAA,MAC/E;AACA,YAAM,SAAS,OAAO,aAAa,aAAa,QAAQ,OAAO,aAAa,YAAY,QAAQ;AAChG,UAAI,YAAY,GAAG,GAAG,MAAM,IAAI,OAAO,OAAO,EAAE;AAChD,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,wBAAwB;AAC3B,UAAI,CAAC,MAAM,aAAc,QAAO;AAChC,YAAM,UAAU,MAAM,oBAAoB;AAAA,QAAI,OAC5C,EAAE,cAAc,MAAM,cAAc,YAAY,EAAE,GAAG,GAAG,WAAW,KAAK,IAAI;AAAA,MAC9E;AACA,aAAO,EAAE,GAAG,OAAO,cAAc,MAAM,qBAAqB,QAAQ;AAAA,IACtE;AAAA,IAEA,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,eAAe,OAAO,SAAS;AAAA,IAEpD,KAAK,gBAAgB;AACnB,YAAM,WAAW,MAAM;AACvB,YAAM,UAAU,OAAO,SAAS;AAAA,QAAO,QACrC,CAAC,SAAS,KAAK,QAAM,GAAG,YAAY,GAAG,WAAW,CAAC,GAAG,SAAS;AAAA,MACjE;AACA,YAAM,SAAS,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,MAAM,GAAG,EAAE;AACpD,UAAI,IAAI,EAAE,GAAG,OAAO,eAAe,OAAO;AAC1C,UAAI,QAAQ,SAAS,GAAG;AACtB,YAAI,YAAY,GAAG,eAAe,QAAQ,MAAM,eAAe,QAAQ,SAAS,IAAI,MAAM,EAAE,EAAE;AAAA,MAChG;AACA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,kBAAkB,OAAO,YAAY;AAAA,IAE1D,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,cAAc,OAAO,OAAO;AAAA,IAEjD,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,iBAAiB,OAAO,MAAM;AAAA,IAEnD,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,iBAAiB,MAAM,oBAAoB,OAAO,QAAQ,OAAO,OAAO;AAAA,MAC1E;AAAA,IAEF,KAAK,mBAAmB;AACtB,YAAM,UAAU,mBAAmB,KAAK;AACxC,YAAM,UAAU,QAAQ,OAAO,KAAK;AACpC,UAAI,CAAC,QAAS,QAAO;AACrB,YAAM,WAAW,MAAM,cAAc;AAAA,QAAI,OACvC,EAAE,OAAO,QAAQ,KAAK,EAAE,GAAG,GAAG,WAAW,KAAK,IAAI;AAAA,MACpD;AACA,YAAM,YAAY,SAAS,OAAO,OAAK,CAAC,EAAE,SAAS;AACnD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,eAAe;AAAA,QACf,iBAAiB,KAAK,IAAI,MAAM,iBAAiB,KAAK,IAAI,GAAG,UAAU,SAAS,CAAC,CAAC;AAAA,QAClF,iBAAiB,MAAM,oBAAoB,OAAO,QAAQ,OAAO,MAAM;AAAA,MACzE;AAAA,IACF;AAAA,IAEA,KAAK,kBAAkB;AACrB,YAAM,UAAU,mBAAmB,KAAK;AACxC,YAAM,UAAU,QAAQ,OAAO,KAAK;AACpC,UAAI,CAAC,QAAS,QAAO;AACrB,YAAM,WAAW,MAAM,cAAc;AAAA,QAAI,OACvC,EAAE,OAAO,QAAQ,KAAK,EAAE,GAAG,GAAG,WAAW,KAAK,IAAI;AAAA,MACpD;AACA,YAAM,YAAY,SAAS,OAAO,OAAK,CAAC,EAAE,SAAS;AACnD,UAAI,IAAI,EAAE,GAAG,OAAO,eAAe,SAAS;AAC5C,QAAE,kBAAkB,KAAK,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,UAAU,SAAS,CAAC,CAAC;AACjF,QAAE,kBAAkB,EAAE,oBAAoB,OAAO,QAAQ,OAAO,EAAE;AAClE,UAAI,YAAY,GAAG,YAAY,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC,KAAK;AAChE,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,4BAA4B;AAC/B,YAAM,iBAAiB,MAAM,cAAc,OAAO,OAAK,EAAE,SAAS,EAAE;AACpE,UAAI,mBAAmB,EAAG,QAAO,YAAY,OAAO,gCAAgC;AACpF,YAAM,WAAW,MAAM,cAAc,OAAO,OAAK,CAAC,EAAE,SAAS;AAC7D,UAAI,IAAoB;AAAA,QACtB,GAAG;AAAA,QACH,eAAe;AAAA,QACf,qBAAqB,CAAC;AAAA,QACtB,iBAAiB;AAAA,QACjB,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,OAAO,EAAE;AAAA,MACxD;AACA,QAAE,kBAAkB,KAAK,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,SAAS,SAAS,CAAC,CAAC;AAChF,UAAI,YAAY,GAAG,WAAW,cAAc,qBAAqB,mBAAmB,IAAI,MAAM,EAAE,EAAE;AAClG,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,YAAY,EAAE,GAAG,MAAM,YAAY,OAAO,OAAO,MAAM,EAAE;AAAA,IAE9E,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,YAAY,EAAE,GAAG,MAAM,YAAY,WAAW,OAAO,MAAM,aAAa,OAAO,SAAS,QAAQ,KAAK,MAAM,WAAW,YAAY,EAAE;AAAA,IAEzJ,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,YAAY,EAAE,GAAG,MAAM,YAAY,aAAa,OAAO,OAAO,EAAE;AAAA,IAErF,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,YAAY,EAAE,GAAG,MAAM,YAAY,eAAe,OAAO,MAAM,EAAE;AAAA,IAEtF,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,YAAY,OAAO,WAAW,EAAE;AAAA,IAElG,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,WAAW,OAAO,MAAM,aAAa,OAAO,SAAS,QAAQ,KAAK,MAAM,gBAAgB,YAAY,EAAE;AAAA,IAExK,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,aAAa,OAAO,OAAO,EAAE;AAAA,IAE/F,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,eAAe,OAAO,MAAM,EAAE;AAAA,IAEhG,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,YAAY,EAAE,GAAG,MAAM,YAAY,QAAQ,MAAM,UAAU,OAAO,UAAU,gBAAgB,OAAO,SAAS;AAAA,MAC9G;AAAA,IAEF,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,YAAY,EAAE,GAAG,MAAM,YAAY,cAAc,OAAO,OAAO,EAAE;AAAA,IAEtF,KAAK,sBAAsB;AACzB,YAAM,aAAa,CAAC,SAAS,WAAW,YAAY,aAAa,aAAa,eAAe;AAC7F,UAAI,CAAC,WAAW,SAAS,OAAO,MAAM,EAAG,QAAO;AAChD,YAAM,WAAW,IAAI,IAAI,MAAM,WAAW,aAAa;AACvD,UAAI,SAAS,IAAI,OAAO,MAAM,EAAG,UAAS,OAAO,OAAO,MAAM;AAAA,UACzD,UAAS,IAAI,OAAO,MAAM;AAC/B,aAAO,EAAE,GAAG,OAAO,YAAY,EAAE,GAAG,MAAM,YAAY,eAAe,SAAS,EAAE;AAAA,IAClF;AAAA,IAEA,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,YAAY;AAAA,UACV,GAAG,MAAM;AAAA,UACT,QAAQ;AAAA,UACR,WAAW,OAAO;AAAA,UAClB,UAAU,OAAO;AAAA,UACjB,YAAY,OAAO;AAAA,QACrB;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,WAAW,EAAE,GAAG,MAAM,WAAW,aAAa,OAAO,OAAO,EAAE;AAAA,IAEnF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAW;AAAA,UACT,GAAG,MAAM;AAAA,UACT,UAAU,CAAC,GAAG,MAAM,UAAU,UAAU,EAAE,MAAM,OAAO,MAAM,SAAS,OAAO,SAAS,WAAW,KAAK,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG;AAAA,QAC1H;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,WAAW,EAAE,GAAG,MAAM,WAAW,SAAS,OAAO,QAAQ,EAAE;AAAA,IAEhF,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,aAAa,sBAAsB,MAAM,aAAa,OAAO,MAAM,EAAE;AAAA,IAE1F,KAAK,eAAe;AAClB,UAAI,MAAM,SAAS,SAAS;AAC1B,cAAM,UAAU,mBAAmB,KAAK;AACxC,YAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,cAAM,MAAM,KAAK,IAAI,GAAG,MAAM,kBAAkB,CAAC;AACjD,cAAM,SAAS,KAAK,IAAI,MAAM,gBAAgB,OAAO,GAAG;AACxD,eAAO,EAAE,GAAG,OAAO,iBAAiB,KAAK,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,OAAO,OAAO,EAAE;AAAA,MACxG;AACA,UAAI,MAAM,SAAS,UAAU;AAC3B,cAAM,QAAQ,mBAAmB,KAAK;AACtC,cAAM,MAAM,MAAM,UAAU,OAAK,EAAE,OAAO,MAAM,WAAW,YAAY;AACvE,YAAI,MAAM,GAAG;AACX,iBAAO,EAAE,GAAG,OAAO,YAAY,EAAE,GAAG,MAAM,YAAY,cAAc,MAAM,MAAM,CAAC,GAAG,MAAM,WAAW,EAAE;AAAA,QACzG;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,iBAAiB;AACpB,UAAI,MAAM,SAAS,SAAS;AAC1B,cAAM,UAAU,mBAAmB,KAAK;AACxC,YAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,cAAM,SAAS,KAAK,IAAI,GAAG,QAAQ,SAAS,CAAC;AAC7C,cAAM,MAAM,KAAK,IAAI,QAAQ,MAAM,kBAAkB,CAAC;AACtD,cAAM,eAAe,KAAK,MAAM,KAAK,CAAC;AACtC,YAAI,SAAS,MAAM,gBAAgB;AACnC,YAAI,OAAO,SAAS,aAAc,UAAS,MAAM,eAAe;AAChE,eAAO,EAAE,GAAG,OAAO,iBAAiB,KAAK,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,OAAO,OAAO,EAAE;AAAA,MACxG;AACA,UAAI,MAAM,SAAS,UAAU;AAC3B,cAAM,QAAQ,mBAAmB,KAAK;AACtC,cAAM,MAAM,MAAM,UAAU,OAAK,EAAE,OAAO,MAAM,WAAW,YAAY;AACvE,YAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,iBAAO,EAAE,GAAG,OAAO,YAAY,EAAE,GAAG,MAAM,YAAY,cAAc,MAAM,MAAM,CAAC,GAAG,MAAM,WAAW,EAAE;AAAA,QACzG;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,cAAc,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,YAAY,SAAS,CAAC,CAAC,IAAI,GAAG,MAAM,eAAe,CAAC,EAAE;AAAA,IAE9H,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,cAAc,KAAK,IAAI,GAAG,MAAM,eAAe,CAAC,EAAE;AAAA,IAEvE,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,YAAY,OAAO,KAAK;AAAA,IAE7C,KAAK,8BAA8B;AACjC,YAAM,MAAM,KAAK,IAAI;AACrB,UAAI,UAAU;AACd,YAAM,UAAU,MAAM,oBAAoB,IAAI,OAAK;AACjD,YAAI,CAAC,EAAE,aAAa,EAAE,aAAa,YAAY;AAC7C,gBAAM,MAAM,MAAM,EAAE;AACpB,gBAAM,aAAa,EAAE,aAAa,SAAS,MAAQ;AACnD,cAAI,MAAM,YAAY;AAAE,sBAAU;AAAM,mBAAO,EAAE,GAAG,GAAG,WAAW,KAAK;AAAA,UAAG;AAAA,QAC5E;AACA,eAAO;AAAA,MACT,CAAC;AACD,UAAI,CAAC,QAAS,QAAO;AACrB,aAAO,EAAE,GAAG,OAAO,qBAAqB,QAAQ;AAAA,IAClD;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,qBAAqC;AACnD,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc,CAAC;AAAA,MACf,iBAAiB,CAAC;AAAA,MAClB,aAAa;AAAA,MACb,kBAAkB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,EAAE;AAAA,IACnE;AAAA,IACA,QAAQ,EAAE,UAAU,OAAO,OAAO,OAAO,QAAQ,GAAG;AAAA,IACpD,MAAM;AAAA,IACN,cAAc;AAAA,IACd,YAAY,KAAK,IAAI;AAAA,IACrB,cAAc;AAAA,IACd,WAAW,KAAK,IAAI;AAAA,IACpB,eAAe,KAAK,IAAI;AAAA,IACxB,aAAa,CAAC;AAAA,IACd,cAAc;AAAA,IACd,WAAW;AAAA,IACX,kBAAkB;AAAA,MAChB,SAAS,CAAC,CAAC,QAAQ,IAAI,mBAAmB;AAAA,MAC1C,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,IACtB;AAAA,IACA,QAAQ,EAAE,aAAa,MAAM;AAAA,IAC7B,OAAO,EAAE,UAAU,OAAO,aAAa,GAAG,eAAe,CAAC,EAAE;AAAA,IAC5D,QAAQ,CAAC;AAAA,IACT,YAAY;AAAA,IACZ,iBAAiB,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,EAAE;AAAA,IACjG,cAAc;AAAA,IACd,qBAAqB,CAAC;AAAA,IACtB,eAAe,CAAC;AAAA,IAChB,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,aAAa;AAAA,MACX,YAAY;AAAA,QACV,eAAe;AAAA,QACf,aAAa;AAAA,QACb,mBAAmB,EAAE,UAAU,MAAM,YAAY,MAAM,WAAW,MAAM,eAAe,MAAM,YAAY,MAAM,iBAAiB,KAAK;AAAA,QACrI,qBAAqB;AAAA,MACvB;AAAA,MACA,aAAa,EAAE,UAAU,MAAM,OAAO,MAAM,gBAAgB,GAAG,WAAW,MAAQ,SAAS,MAAM,WAAW,KAAK;AAAA,MACjH,gBAAgB,EAAE,UAAU,IAAI,MAAM,IAAI,QAAQ,GAAG;AAAA,IACvD;AAAA,IACA,YAAY,EAAE,OAAO,CAAC,GAAG,eAAe,GAAG,uBAAuB,GAAG,WAAW,UAAU,aAAa,IAAI,aAAa,EAAE;AAAA,IAC1H,iBAAiB,EAAE,YAAY,CAAC,GAAG,eAAe,GAAG,wBAAwB,GAAG,WAAW,UAAU,aAAa,IAAI,aAAa,EAAE;AAAA,IACrI,YAAY,EAAE,QAAQ,OAAO,UAAU,MAAM,gBAAgB,CAAC,GAAG,eAAe,oBAAI,IAAI,CAAC,OAAO,CAAC,GAAG,cAAc,SAAS,gBAAgB,GAAG,aAAa,EAAE;AAAA,IAC7J,YAAY,EAAE,QAAQ,OAAO,WAAW,CAAC,GAAG,UAAU,CAAC,GAAG,YAAY,MAAM,eAAe,GAAG,eAAe,KAAK;AAAA,IAClH,WAAW,EAAE,UAAU,CAAC,GAAG,aAAa,IAAI,SAAS,MAAM;AAAA,EAC7D;AACF;AAOA,IAAM,mBAAmB,cAA4C,IAAI;AAElE,SAAS,kBAAkB,EAAE,UAAU,aAAa,GAAiE;AAC1H,QAAM,CAAC,OAAO,QAAQ,IAAI,WAAW,kBAAkB,gBAAgB,mBAAmB,CAAC;AAC3F,QAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,OAAO,SAAS,IAAI,CAAC,OAAO,QAAQ,CAAC;AAC1E,SAAO,oBAAC,iBAAiB,UAAjB,EAA0B,OAAe,UAAS;AAC5D;AAEO,SAAS,eAAsC;AACpD,QAAM,MAAM,WAAW,gBAAgB;AACvC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,oDAAoD;AAC9E,SAAO;AACT;;;ACjgBA,OAAO,QAAQ;AAoFf,IAAM,oBAAN,MAAwB;AAAA,EACd,OAAmB;AAAA,EACnB;AAAA,EACA,iBAA2B,CAAC;AAAA,EAC5B,aAA8B,CAAC;AAAA,EAC/B,eAAwE,CAAC;AAAA;AAAA,EAGzE,WAA2D;AAAA,EAC3D,YAA6D;AAAA,EAC7D,SAAuD;AAAA,EACvD,cAAiE;AAAA,EACjE,aAA+D;AAAA,EAC/D,WAAkE;AAAA,EAClE,aAAsD;AAAA,EACtD,QAAgE;AAAA,EAChE,UAAyD;AAAA;AAAA;AAAA;AAAA,EAKjE,QAAQ,MAAwB;AAC9B,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,SAAiC;AACnD,SAAK,mBAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,WAUZ;AACP,SAAK,WAAW,UAAU;AAC1B,SAAK,YAAY,UAAU;AAC3B,SAAK,SAAS,UAAU;AACxB,SAAK,cAAc,UAAU;AAC7B,SAAK,aAAa,UAAU;AAC5B,SAAK,WAAW,UAAU;AAC1B,SAAK,aAAa,UAAU;AAC5B,SAAK,QAAQ,UAAU;AACvB,SAAK,UAAU,UAAU;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,oBAA0B;AACxB,SAAK,WAAW;AAChB,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,QAAQ;AACb,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,SAA8B;AACjC,YAAQ,YAAY,QAAQ,aAAa,KAAK,IAAI;AAElD,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,aAAK,WAAW,OAAO;AACvB;AAAA,MACF,KAAK;AACH,aAAK,eAAe,OAAO;AAC3B;AAAA,MACF,KAAK;AACH,aAAK,gBAAgB,OAAO;AAC5B;AAAA,MACF,KAAK;AACH,aAAK,YAAY,OAAO;AACxB;AAAA,MACF,KAAK;AAEH;AAAA,IACJ;AAGA,SAAK,cAAc,OAAO;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,SAA8B;AAC/C,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AACH,aAAK,WAAW,QAAQ,OAAwB;AAChD;AAAA,MACF,KAAK;AACH,aAAK,YAAY,QAAQ,OAAyB;AAClD;AAAA,MACF,KAAK;AACH,aAAK,SAAS,QAAQ,OAAsB;AAC5C;AAAA,MACF,KAAK;AACH,aAAK,cAAc,QAAQ,OAA2B;AACtD;AAAA,MACF,KAAK;AACH,aAAK,aAAa,QAAQ,OAA0B;AACpD;AAAA,MACF,KAAK;AACH,aAAK,WAAW,QAAQ,OAA+B;AACvD;AAAA,MACF,KAAK;AACH,aAAK,aAAa,QAAQ,OAAiB;AAC3C;AAAA,MACF,KAAK;AACH,cAAM,QAAQ,QAAQ,UAAU,YAAY;AAC5C,aAAK,QAAQ,OAAO,QAAQ,OAAiB;AAC7C;AAAA,MACF,KAAK;AAEH,aAAK,kBAAkB,YAAY,QAAQ,OAAgB;AAC3D;AAAA,MACF,KAAK;AAEH;AAAA,MACF,KAAK;AAEH;AAAA,MACF,KAAK;AAEH,aAAK,UAAU,QAAQ,OAAuB;AAC9C;AAAA,IACJ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,SAA8B;AACnD,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AACH,cAAM,SAAS,QAAQ;AACvB,gBAAQ,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;AACnC,gBAAQ,MAAM,OAAO,GAAG;AACxB,YAAI,OAAO,SAAS;AAClB,kBAAQ,MAAM,WAAW,OAAO,KAAK,KAAK,OAAO,OAAO,EAAE;AAAA,QAC5D;AACA,gBAAQ,MAAM,EAAE;AAChB,YAAI,OAAO,OAAO;AAChB,kBAAQ,MAAM,OAAO,OAAO,KAAK,GAAG;AAAA,QACtC;AACA,gBAAQ,MAAM,IAAI,OAAO,EAAE,IAAI,IAAI;AACnC;AAAA,MAEF,KAAK;AACH,cAAM,UAAU,QAAQ;AACxB,gBAAQ,MAAM;AAAA,EAAK,GAAG,IAAI,OAAO,CAAC,IAAI,QAAQ,IAAI,EAAE;AACpD,iBAAS,IAAI,GAAG,IAAI,QAAQ,MAAM,QAAQ,KAAK;AAC7C,gBAAM,UAAU,QAAQ,YAAY;AACpC,gBAAM,cAAc,YAAY,QAAQ;AACxC,gBAAM,SAAS,cAAc,GAAG,IAAI,QAAG,IAAI;AAC3C,gBAAM,aAAa,GAAG,IAAI,QAAQ,SAAS,EAAE,SAAS,CAAC,CAAC;AACxD,gBAAM,OAAO,cAAc,GAAG,OAAO,QAAQ,MAAM,CAAC,CAAC,IAAI,QAAQ,MAAM,CAAC;AACxE,kBAAQ,MAAM,GAAG,MAAM,IAAI,UAAU,MAAM,IAAI,EAAE;AAAA,QACnD;AACA,gBAAQ,MAAM,EAAE;AAChB;AAAA,MAEF,KAAK;AACH,cAAM,OAAO,QAAQ;AACrB,gBAAQ,MAAM,OAAO,GAAG,KAAK,oBAAoB,CAAC;AAClD,gBAAQ,MAAM,eAAe,GAAG,MAAM,KAAK,eAAe,KAAK,UAAU,CAAC,CAAC,EAAE;AAC7E,gBAAQ,MAAM,qBAAqB,GAAG,IAAI,KAAK,eAAe,KAAK,cAAc,CAAC,CAAC,EAAE;AACrF,gBAAQ,MAAM,eAAe,GAAG,OAAO,KAAK,eAAe,KAAK,OAAO,CAAC,CAAC,EAAE;AAC3E,gBAAQ,MAAM,EAAE;AAChB;AAAA,MAEF,KAAK;AACH,cAAM,YAAY,QAAQ;AAC1B,cAAM,cAAc,UAAU,WAAW,UAAU,GAAG,QACnC,UAAU,WAAW,YAAY,GAAG,SAAS,GAAG;AACnE,gBAAQ,MAAM,OAAO,GAAG,KAAK,2BAA2B,CAAC;AACzD,gBAAQ,MAAM,aAAa,YAAY,UAAU,QAAQ,MAAM,CAAC,EAAE;AAClE,gBAAQ,MAAM,oBAAoB,UAAU,eAAe,IAAI,UAAU,KAAK,EAAE;AAChF,gBAAQ,MAAM,cAAc,YAAY,UAAU,OAAO,YAAY,CAAC,CAAC,EAAE;AACzE,gBAAQ,MAAM,EAAE;AAChB;AAAA,MAEF,KAAK;AACH,cAAM,WAAW,QAAQ;AACzB,gBAAQ,MAAM,OAAO,GAAG,KAAK,wBAAwB,CAAC;AACtD,YAAI,SAAS,iBAAiB,GAAG;AAC/B,kBAAQ,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,SAAS,cAAc,4BAA4B;AAAA,QAC1F;AACA,YAAI,SAAS,iBAAiB,GAAG;AAC/B,kBAAQ,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,IAAI,SAAS,cAAc,kBAAkB;AAAA,QACnF;AACA,YAAI,SAAS,aAAa,GAAG;AAC3B,kBAAQ,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,SAAS,UAAU,wBAAwB;AAAA,QAClF;AACA,gBAAQ,MAAM,EAAE;AAChB;AAAA,MAEF,KAAK;AACH,cAAM,SAAS,QAAQ;AACvB,gBAAQ,MAAM,OAAO,GAAG,KAAK,qBAAqB,CAAC;AACnD,gBAAQ,MAAM,iBAAiB,OAAO,cAAc,EAAE;AACtD,YAAI,OAAO,cAAc,GAAG;AAC1B,kBAAQ,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,OAAO,WAAW,EAAE;AAAA,QACpE;AACA,gBAAQ,MAAM,kBAAkB,OAAO,SAAS,MAAM;AACtD,gBAAQ,MAAM,EAAE;AAChB;AAAA,MAEF,KAAK;AACH,gBAAQ,MAAM,GAAG,IAAI,IAAI,KAAK,WAAW,CAAC,GAAG,IAAI,IAAI,QAAQ,OAAO,EAAE;AACtE;AAAA,MAEF,KAAK;AAEH,cAAM,WAAW,OAAO,QAAQ,UAAU,YAAY,MAAM;AAC5D,cAAM,aAAa,aAAa,WAAW,aAAa,aAAa,GAAG,MACtD,aAAa,UAAU,aAAa,YAAY,GAAG,SACnD,aAAa,UAAU,aAAa,aAAa,GAAG,OAAO,GAAG;AAChF,gBAAQ,MAAM,WAAW,IAAI,SAAS,YAAY,CAAC,GAAG,IAAI,IAAI,QAAQ,OAAO,EAAE;AAC/E;AAAA,MAEF,KAAK;AACH,cAAM,QAAQ,QAAQ;AACtB,cAAM,WAAW,MAAM,aAAa,aAAa,GAAG,MACpC,MAAM,aAAa,YAAY,GAAG,SAClC,MAAM,aAAa,aAAa,GAAG,OAAO,GAAG;AAC7D,gBAAQ,MAAM,GAAG,SAAS,IAAI,MAAM,SAAS,YAAY,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,EAAE;AAC/E,gBAAQ,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,MAAM,IAAI,IAAI,MAAM,QAAQ,GAAG,EAAE;AACxE;AAAA,MAEF,KAAK;AAEH,gBAAQ,MAAM,QAAQ,OAAO;AAC7B;AAAA,MAEF,KAAK;AAEH,cAAM,QAAQ,QAAQ;AACtB,cAAM,aAAa,MAAM,aAAa,aAAa,GAAG,MACpC,MAAM,aAAa,YAAY,GAAG,SAAS,GAAG;AAChE,cAAM,YAAY,MAAM,aAAa,aAAa,UACjC,MAAM,aAAa,YAAY,QAAQ;AACxD,gBAAQ,MAAM,EAAE;AAChB,gBAAQ,MAAM,WAAW,SAAI,OAAO,EAAE,CAAC,CAAC;AACxC,gBAAQ,MAAM,WAAW,GAAG,SAAS,oBAAoB,CAAC;AAC1D,gBAAQ,MAAM,WAAW,SAAI,OAAO,EAAE,CAAC,CAAC;AACxC,gBAAQ,MAAM,EAAE;AAChB,gBAAQ,MAAM,MAAM,GAAG,KAAK,MAAM,OAAO,CAAC,EAAE;AAC5C,YAAI,MAAM,MAAM;AACd,kBAAQ,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,MAAM,IAAI,EAAE;AAAA,QACrD;AACA,gBAAQ,MAAM,EAAE;AAChB,gBAAQ,MAAM,WAAW,SAAI,OAAO,EAAE,CAAC,CAAC;AACxC,gBAAQ,MAAM,EAAE;AAChB;AAAA,IACJ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,SAA8B;AACpD,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AACH,cAAM,SAAS,QAAQ;AACvB,aAAK,eAAe,KAAK,MAAM,OAAO,KAAK;AAAA,CAAI;AAC/C,YAAI,OAAO,OAAO;AAChB,eAAK,eAAe,KAAK,KAAK,OAAO,KAAK;AAAA,CAAI;AAAA,QAChD;AACA;AAAA,MAEF,KAAK;AACH,cAAM,UAAU,QAAQ;AACxB,aAAK,eAAe,KAAK;AAAA,cAAiB,QAAQ,IAAI;AAAA,CAAM;AAC5D,aAAK,eAAe,KAAK,OAAO;AAChC,iBAAS,IAAI,GAAG,IAAI,QAAQ,MAAM,QAAQ,KAAK;AAC7C,gBAAM,UAAU,QAAQ,YAAY;AACpC,gBAAM,SAAS,YAAY,QAAQ,gBAAgB,WAAM;AACzD,eAAK,eAAe,KAAK,GAAG,MAAM,IAAI,QAAQ,SAAS,EAAE,SAAS,CAAC,CAAC,MAAM,QAAQ,MAAM,CAAC,CAAC;AAAA,CAAI;AAAA,QAChG;AACA,aAAK,eAAe,KAAK,OAAO;AAChC;AAAA,MAEF,KAAK;AACH,cAAM,OAAO,QAAQ;AACrB,aAAK,eAAe,KAAK;AAAA;AAAA,CAAuB;AAChD,aAAK,eAAe,KAAK,cAAc,KAAK,eAAe,KAAK,UAAU,CAAC;AAAA,CAAI;AAC/E,aAAK,eAAe,KAAK,oBAAoB,KAAK,eAAe,KAAK,cAAc,CAAC;AAAA,CAAI;AACzF,aAAK,eAAe,KAAK,cAAc,KAAK,eAAe,KAAK,OAAO,CAAC;AAAA,CAAI;AAC5E;AAAA,MAEF,KAAK;AACH,cAAM,YAAY,QAAQ;AAC1B,aAAK,eAAe,KAAK;AAAA;AAAA,CAA8B;AACvD,aAAK,eAAe,KAAK,YAAY,UAAU,KAAK;AAAA,CAAQ;AAC5D,aAAK,eAAe,KAAK,mBAAmB,UAAU,eAAe,IAAI,UAAU,KAAK;AAAA,CAAI;AAC5F,aAAK,eAAe,KAAK,eAAe,UAAU,OAAO,YAAY,CAAC;AAAA,CAAM;AAC5E;AAAA,MAEF,KAAK;AACH,cAAM,WAAW,QAAQ;AACzB,aAAK,eAAe,KAAK;AAAA;AAAA,CAA2B;AACpD,YAAI,SAAS,iBAAiB,GAAG;AAC/B,eAAK,eAAe,KAAK,gBAAgB,SAAS,cAAc;AAAA,CAA8B;AAAA,QAChG;AACA,YAAI,SAAS,iBAAiB,GAAG;AAC/B,eAAK,eAAe,KAAK,YAAY,SAAS,cAAc;AAAA,CAAoB;AAAA,QAClF;AACA,YAAI,SAAS,aAAa,GAAG;AAC3B,eAAK,eAAe,KAAK,gBAAgB,SAAS,UAAU;AAAA,CAA0B;AAAA,QACxF;AACA;AAAA,MAEF,KAAK;AACH,cAAM,SAAS,QAAQ;AACvB,aAAK,eAAe,KAAK;AAAA;AAAA,CAAwB;AACjD,aAAK,eAAe,KAAK,gBAAgB,OAAO,cAAc;AAAA,CAAI;AAClE,aAAK,eAAe,KAAK,kBAAkB,OAAO,WAAW;AAAA,CAAI;AACjE,aAAK,eAAe,KAAK,iBAAiB,OAAO,SAAS;AAAA,CAAQ;AAClE;AAAA,MAEF,KAAK;AACH,aAAK,eAAe,KAAK,QAAQ,OAAO;AACxC;AAAA,MAEF;AAEE,aAAK,WAAW,KAAK,OAAO;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,SAA8B;AAChD,SAAK,WAAW,KAAK,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,SAA8B;AAClD,UAAM,OAAO,KAAK,WAAW,QAAQ,SAAS;AAC9C,UAAM,QAAQ,QAAQ,UAAU,YAAY,QAAQ;AACpD,QAAI,UAAU;AAEd,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AACH,kBAAU,YAAa,QAAQ,QAA0B,KAAK;AAC9D;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,kBAAU,QAAQ;AAClB;AAAA,MACF,KAAK;AACH,cAAM,QAAQ,QAAQ;AACtB,kBAAU,IAAI,MAAM,SAAS,YAAY,CAAC,KAAK,MAAM,KAAK;AAC1D;AAAA,MACF;AACE,kBAAU,IAAI,QAAQ,KAAK,YAAY,CAAC;AAAA,IAC5C;AAEA,SAAK,aAAa,KAAK,EAAE,MAAM,OAAO,QAAQ,CAAC;AAG/C,QAAI,KAAK,aAAa,SAAS,KAAK;AAClC,WAAK,eAAe,KAAK,aAAa,MAAM,IAAI;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAqE;AACnE,WAAO,CAAC,GAAG,KAAK,YAAY;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,cAAsB;AACpB,WAAO,KAAK,eAAe,KAAK,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,UAA2B;AACzB,WAAO,CAAC,GAAG,KAAK,UAAU;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,eAAqB;AACnB,SAAK,iBAAiB,CAAC;AACvB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,OAAe,KAAa,SAAsD;AACvF,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS,EAAE,OAAO,KAAK,OAAO,SAAS,OAAO,SAAS,SAAS,QAAQ;AAAA,MACxE,UAAU,EAAE,OAAO,MAAM;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,MAAc,OAAiB,WAAmB,eAA8B;AACtF,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS,EAAE,MAAM,OAAO,WAAW,cAAc;AAAA,MACjD,UAAU,EAAE,KAAK;AAAA,IACnB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,YAAoB,gBAAwB,SAAiB,UAAyD;AACzH,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS,EAAE,YAAY,gBAAgB,SAAS,SAAS;AAAA,IAC3D,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,UACE,OACA,iBACA,OACA,QACA,cACM;AACN,UAAM,UAA4B,EAAE,OAAO,iBAAiB,OAAO,OAAO;AAC1E,QAAI,cAAc;AAChB,cAAQ,eAAe;AAAA,IACzB;AACA,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,gBAAwB,gBAAwB,YAA0B;AACjF,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS,EAAE,gBAAgB,gBAAgB,WAAW;AAAA,IACxD,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAwB,aAAqB,WAAyB;AAC3E,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS,EAAE,gBAAgB,aAAa,UAAU;AAAA,IACpD,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,SAAuB;AAC9B,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAA4C,SAAuB;AACrE,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,EAAE,UAAU,MAAa;AAAA,IACrC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,SAAuB;AAC1B,SAAK,IAAI,QAAQ,OAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,SAAuB;AAC1B,SAAK,IAAI,QAAQ,OAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAuB;AAC3B,SAAK,IAAI,SAAS,OAAO;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAuB;AAC3B,SAAK,IAAI,SAAS,OAAO;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAoB;AACxB,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,EAAE,UAAU,MAAM,UAAU,OAAO,MAAM,OAAO,MAAM,MAAM,KAAK;AAAA,IAC7E,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAuB;AAC5B,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAiB,WAA4C,WAAW,MAAe,YAA2B;AACtH,UAAM,WAAsG,CAAC;AAE7G,QAAI,aAAa,WAAY,UAAS,WAAW;AAAA,aACxC,aAAa,UAAW,UAAS,WAAW;AAAA,QAChD,UAAS,WAAW;AACzB,QAAI,SAAS,OAAW,UAAS,OAAO;AACxC,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS,EAAE,SAAS,UAAU,MAAM,WAAW;AAAA,MAC/C;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,QAAwB;AAC7C,QAAI,UAAU,IAAS,QAAO,KAAK,SAAS,KAAS,QAAQ,CAAC,CAAC;AAC/D,QAAI,UAAU,IAAM,QAAO,KAAK,SAAS,KAAM,QAAQ,CAAC,CAAC;AACzD,WAAO,IAAI,MAAM;AAAA,EACnB;AAAA,EAEQ,WAAW,WAA4B;AAC7C,UAAM,OAAO,YAAY,IAAI,KAAK,SAAS,IAAI,oBAAI,KAAK;AACxD,WAAO,KAAK,mBAAmB,SAAS,EAAE,QAAQ,OAAO,MAAM,WAAW,QAAQ,WAAW,QAAQ,UAAU,CAAC;AAAA,EAClH;AACF;AAGA,IAAI,WAAqC;AAKlC,SAAS,mBAAsC;AACpD,MAAI,CAAC,UAAU;AACb,eAAW,IAAI,kBAAkB;AAGjC,QAAI,kBAAkB,GAAG;AACvB,eAAS,QAAQ,KAAK;AAAA,IACxB;AAAA,EACF;AACA,SAAO;AACT;;;AFvsBA,SAAS,kBAAkB;AAC3B,SAAS,UAAU,WAAW,aAAa;AAC3C,SAAS,YAAY;;;AGZrB,SAAgB,UAAU,iBAAiB;AAC3C,SAAS,KAAK,YAAY;AAuBZ,gBAAAC,MAA+E,YAA/E;AApBd,IAAM,eAAe,CAAC,UAAK,UAAK,UAAK,QAAG;AAEjC,SAAS,SAA6B;AAC3C,QAAM,EAAE,MAAM,IAAI,aAAa;AAC/B,QAAM,EAAE,kBAAkB,OAAO,OAAO,IAAI;AAC5C,QAAM,iBAAiB,iBAAiB,qBAAqB,iBAAiB,iBACvD,iBAAiB,oBAAoB,iBAAiB;AAE7E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,CAAC;AAEpC,YAAU,MAAM;AACd,QAAI,CAAC,MAAM,SAAU;AACrB,UAAM,KAAK,YAAY,MAAM,SAAS,QAAM,IAAI,KAAK,aAAa,MAAM,GAAG,GAAG;AAC9E,WAAO,MAAM,cAAc,EAAE;AAAA,EAC/B,GAAG,CAAC,MAAM,QAAQ,CAAC;AAEnB,MAAI;AACJ,MAAI,MAAM,UAAU;AAClB,UAAM,UAAU,aAAa,KAAK,KAAK;AACvC,kBAAc,iBAAiB,IAC3B,qBAAC,QAAK;AAAA,sBAAAA,KAAC,QAAK,OAAM,SAAS,mBAAQ;AAAA,MAAO;AAAA,MAAC,gBAAAA,KAAC,QAAK,OAAM,SAAQ,MAAI,MAAC,sBAAQ;AAAA,MAAO;AAAA,MAAE,qBAAC,QAAK,UAAQ,MAAE;AAAA;AAAA,QAAe;AAAA,SAAQ;AAAA,OAAO,IACnI,qBAAC,QAAK;AAAA,sBAAAA,KAAC,QAAK,OAAM,SAAS,mBAAQ;AAAA,MAAO;AAAA,MAAC,gBAAAA,KAAC,QAAK,MAAI,MAAC,sBAAQ;AAAA,OAAO;AAAA,EAC3E,OAAO;AACL,kBAAc,qBAAC,QAAK;AAAA,sBAAAA,KAAC,QAAK,UAAQ,MAAC,oBAAC;AAAA,MAAO;AAAA,MAAC,gBAAAA,KAAC,QAAK,UAAQ,MAAC,kBAAI;AAAA,OAAO;AAAA,EACxE;AAEA,SACE,qBAAC,OAAI,UAAU,GAAG,gBAAe,iBAC/B;AAAA,oBAAAA,KAAC,QAAK,OAAM,SAAQ,MAAI,MAAC,kBAAI;AAAA,IAC7B,qBAAC,OAAI,KAAK,GACP;AAAA;AAAA,MACA,OAAO,eAAe,gBAAAA,KAAC,QAAK,OAAM,OAAM,MAAI,MAAC,0BAAO;AAAA,OACvD;AAAA,KACF;AAEJ;;;ACtCA,SAAS,OAAAC,MAAK,QAAAC,aAAY;AA2CpB,SAIU,OAAAC,MAJV,QAAAC,aAAA;AAvCN,IAAM,cAA6C;AAAA,EACjD,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AACR;AAEA,IAAM,YAA6B,CAAC,YAAY,UAAU,SAAS,cAAc,SAAS,MAAM;AAEzF,SAAS,SAA6B;AAC3C,QAAM,EAAE,MAAM,IAAI,aAAa;AAC/B,QAAM,EAAE,KAAK,IAAI;AAEjB,MAAI;AACJ,MAAI,SAAS,WAAW,MAAM,WAAW,cAAc,OAAO;AAC5D,mBAAe;AAAA,EACjB,WAAW,SAAS,gBAAgB,MAAM,gBAAgB,cAAc,OAAO;AAC7E,mBAAe;AAAA,EACjB,WAAW,SAAS,SAAS;AAC3B,mBAAe;AAAA,EACjB,WAAW,SAAS,cAAc;AAChC,mBAAe;AAAA,EACjB,WAAW,SAAS,SAAS;AAC3B,mBAAe;AAAA,EACjB,WAAW,SAAS,UAAU;AAC5B,mBAAe;AAAA,EACjB,WAAW,SAAS,QAAQ;AAC1B,mBAAe;AAAA,EACjB,WAAW,SAAS,UAAU;AAC5B,mBAAe;AAAA,EACjB,OAAO;AACL,mBAAe;AAAA,EACjB;AAEA,SACE,gBAAAA,MAACC,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,oBAAAD,MAACC,MAAA,EAAI,gBAAe,iBAClB;AAAA,sBAAAF,KAACE,MAAA,EAAI,KAAK,GACP,oBAAU,IAAI,OACb,MAAM,OACF,gBAAAF,KAACG,OAAA,EAAa,OAAM,SAAQ,MAAI,MAAE,sBAAY,CAAC,KAApC,CAAsC,IACjD,gBAAAH,KAACG,OAAA,EAAc,sBAAY,CAAC,KAAjB,CAAmB,CACnC,GACH;AAAA,MACA,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,oBAAM;AAAA,OACvB;AAAA,IACA,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAE,wBAAa;AAAA,KAC/B;AAEJ;;;ACxDA,SAAS,OAAAC,MAAK,QAAAC,aAAY;AAqBpB,gBAAAC,MAGsB,QAAAC,aAHtB;AAlBC,SAAS,eAA0C;AACxD,QAAM,EAAE,MAAM,IAAI,aAAa;AAC/B,QAAM,EAAE,aAAa,IAAI;AAEzB,MAAI,CAAC,gBAAgB,CAAC,aAAa,OAAQ,QAAO;AAElD,MAAI,aAAa,cAAc,KAAK,IAAI,IAAI,aAAa,WAAY,QAAO;AAE5E,QAAM,UAAU,aAAa,aAAa,aAAa,QACnD,aAAa,aAAa,YAAY,WACtC;AAEJ,QAAM,OAAO,aAAa,aAAa,aAAa,QAChD,aAAa,aAAa,YAAY,QACtC;AAEJ,SACE,gBAAAA,MAACC,MAAA,EAAI,UAAU,GACb;AAAA,oBAAAF,KAACG,OAAA,EAAK,iBAAiB,SAAS,OAAM,SAAQ,MAAI,MAC/C,cAAI,IAAI,IAAI,aAAa,OAAO,KACnC;AAAA,IACC,aAAa,QAAQ,gBAAAF,MAACE,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,MAAG,aAAa;AAAA,MAAK;AAAA,OAAC;AAAA,KAC7D;AAEJ;;;AC5BA,SAAgB,YAAAC,iBAAgB;AAChC,SAAS,OAAAC,MAAK,QAAAC,OAAM,gBAAgB;AAuJ9B,SAwCE,UAxCF,OAAAC,MAKI,QAAAC,aALJ;AAzIN,SAAS,QAAQ,KAA4B;AAC3C,MAAI,CAAC,OAAO,IAAI,SAAS,GAAI,QAAO;AACpC,SAAO,IAAI,MAAM,GAAG,CAAC,IAAI,QAAQ,IAAI,MAAM,EAAE;AAC/C;AAEO,SAAS,aAAa,EAAE,QAAQ,GAAgD;AACrF,QAAM,EAAE,OAAO,SAAS,IAAI,aAAa;AACzC,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAwB,MAAM;AAC5D,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,CAAC;AACpD,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,KAAK;AAC5C,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,EAAE;AAC/C,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAElD,QAAM,SAAS,MAAM;AAErB,QAAM,oBAAoB,cAAc,IACpC,QAAQ,mBAAmB,KAAK,QAAQ,IAAI,qBAAqB,IAAI,IACrE;AACJ,QAAM,YAAY,cAAc;AAEhC,QAAM,WAAyB;AAAA,IAC7B,EAAE,OAAO,YAAY,KAAK,WAAW,OAAO,YAAY,WAAW,WAAW,SAAS,OAAO;AAAA,IAC9F,EAAE,OAAO,wBAAwB,KAAK,eAAe,OAAO,GAAG,OAAO,YAAY,cAAc,eAAe,SAAS,OAAO;AAAA,IAC/H,EAAE,OAAO,mBAAmB,KAAK,kBAAkB,OAAO,aAAa,OAAO,eAAe,QAAQ,KAAK,SAAS,OAAO;AAAA,EAC5H;AAEA,QAAM,eAA6B;AAAA,IACjC,EAAE,OAAO,aAAa,KAAK,aAAa,OAAO,mBAAmB,SAAS,UAAU;AAAA,EACvF;AAEA,QAAM,mBAAiC;AAAA,IACrC,EAAE,OAAO,mBAAmB,KAAK,kBAAkB,OAAO,OAAO,OAAO,YAAY,cAAc,GAAG,SAAS,cAAc;AAAA,IAC5H,EAAE,OAAO,gBAAgB,KAAK,aAAa,OAAO,OAAO,OAAO,YAAY,SAAS,GAAG,SAAS,cAAc;AAAA,IAC/G,EAAE,OAAO,YAAY,KAAK,YAAY,OAAO,OAAO,YAAY,WAAW,OAAO,OAAO,SAAS,cAAc;AAAA,IAChH,EAAE,OAAO,SAAS,KAAK,SAAS,OAAO,OAAO,YAAY,QAAQ,OAAO,OAAO,SAAS,cAAc;AAAA,IACvG,EAAE,OAAO,WAAW,KAAK,WAAW,OAAO,OAAO,YAAY,UAAU,OAAO,OAAO,SAAS,cAAc;AAAA,EAC/G;AAEA,QAAM,YAA0B;AAAA,IAC9B,EAAE,OAAO,sBAAsB,KAAK,YAAY,OAAO,OAAO,OAAO,eAAe,QAAQ,GAAG,SAAS,iBAAiB;AAAA,IACzH,EAAE,OAAO,kBAAkB,KAAK,QAAQ,OAAO,OAAO,OAAO,eAAe,IAAI,GAAG,SAAS,iBAAiB;AAAA,IAC7G,EAAE,OAAO,oBAAoB,KAAK,UAAU,OAAO,OAAO,OAAO,eAAe,MAAM,GAAG,SAAS,iBAAiB;AAAA,EACrH;AAEA,QAAM,QAAQ,YAAY,SAAS,WAC/B,YAAY,YAAY,eACxB,YAAY,gBAAgB,mBAC5B,YAAY,mBAAmB,YAC/B;AAEJ,WAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,SAAS;AACX,UAAI,IAAI,QAAQ;AAAE,mBAAW,KAAK;AAAG,sBAAc,EAAE;AAAG,sBAAc,KAAK;AAAA,MAAG,WACrE,IAAI,QAAQ;AACnB,cAAM,OAAO,MAAM,aAAa;AAChC,YAAI,MAAM;AACR,cAAI,YAAY;AACd,gBAAI,KAAK,QAAQ,eAAe,WAAW,SAAS,IAAI;AACtD,wBAAU,UAAU;AACpB,uBAAS,EAAE,MAAM,gBAAgB,SAAS,gBAAgB,CAAC;AAAA,YAC7D;AAAA,UACF,OAAO;AACL,kBAAM,MAAM,SAAS,YAAY,EAAE;AACnC,gBAAI,CAAC,MAAM,GAAG,GAAG;AACf,oBAAM,QAA8B,CAAC;AACrC,kBAAI,YAAY,eAAe;AAC7B,oBAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,aAAa;AAC7D,wBAAM,cAAc,EAAE,GAAG,OAAO,aAAa,CAAC,KAAK,GAAG,GAAG,IAAI;AAAA,gBAC/D;AAAA,cACF,WAAW,YAAY,kBAAkB;AACvC,sBAAM,iBAAiB,EAAE,GAAG,OAAO,gBAAgB,CAAC,KAAK,GAAG,GAAG,IAAI;AAAA,cACrE;AACA,kBAAI,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AACjC,yBAAS,EAAE,MAAM,oBAAoB,QAAQ,MAAM,CAAC;AACpD,yBAAS,EAAE,MAAM,gBAAgB,SAAS,WAAW,KAAK,KAAK,WAAW,GAAG,GAAG,CAAC;AAAA,cACnF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,mBAAW,KAAK;AAChB,sBAAc,EAAE;AAChB,sBAAc,KAAK;AAAA,MACrB,WAAW,IAAI,aAAa,IAAI,QAAQ;AACtC,sBAAc,WAAW,MAAM,GAAG,EAAE,CAAC;AAAA,MACvC,WAAW,QAAQ;AACjB,YAAI,YAAY;AACd,wBAAc,aAAa,MAAM;AAAA,QACnC,WAAW,KAAK,KAAK,MAAM,GAAG;AAC5B,wBAAc,aAAa,MAAM;AAAA,QACnC;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAI,IAAI,UAAU,WAAW,KAAK;AAChC,UAAI,YAAY,OAAQ,SAAQ;AAAA,WAC3B;AAAE,mBAAW,MAAM;AAAG,yBAAiB,CAAC;AAAA,MAAG;AAAA,IAClD,WAAW,IAAI,WAAW,WAAW,KAAK;AACxC,uBAAiB,KAAK,IAAI,GAAG,gBAAgB,CAAC,CAAC;AAAA,IACjD,WAAW,IAAI,aAAa,WAAW,KAAK;AAC1C,uBAAiB,KAAK,IAAI,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC;AAAA,IAChE,WAAW,IAAI,QAAQ;AACrB,UAAI,YAAY,QAAQ;AACtB,cAAM,OAAO,MAAM,aAAa;AAChC,YAAI,MAAM;AACR,qBAAW,KAAK,GAAoB;AACpC,2BAAiB,CAAC;AAAA,QACpB;AAAA,MACF,WAAW,YAAY,WAAW;AAChC,mBAAW,IAAI;AACf,sBAAc,EAAE;AAChB,sBAAc,IAAI;AAAA,MACpB,OAAO;AACL,cAAM,OAAO,MAAM,aAAa;AAChC,YAAI,MAAM;AACR,cAAI,CAAC,YAAY,SAAS,SAAS,EAAE,SAAS,KAAK,GAAG,GAAG;AACvD,kBAAM,QAA8B;AAAA,cAClC,aAAa,EAAE,GAAG,OAAO,aAAa,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,YAAY,KAAK,GAAsC,EAAE;AAAA,YACrH;AACA,qBAAS,EAAE,MAAM,oBAAoB,QAAQ,MAAM,CAAC;AAAA,UACtD,OAAO;AACL,uBAAW,IAAI;AACf,0BAAc,KAAK,KAAK;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,eAAe,YAAY,SAAS,uBACtC,YAAY,YAAY,aACxB,YAAY,gBAAgB,yBAC5B,YAAY,mBAAmB,oBAC/B;AAEJ,SACE,gBAAAD,MAACE,MAAA,EAAI,eAAc,UAAS,aAAY,SAAQ,aAAY,QAAO,UAAU,GAAG,UAAU,GACxF;AAAA,oBAAAH,KAACI,OAAA,EAAK,MAAI,MAAE,wBAAa;AAAA,IACzB,gBAAAJ,KAACI,OAAA,EAAK,eAAC;AAAA,IAEN,YAAY,aAAa,CAAC,WACzB,gBAAAH,MAACE,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAF,MAACG,OAAA,EACE;AAAA;AAAA,QAAK,gBAAAJ,KAACI,OAAA,EAAK,MAAI,MAAC,wBAAU;AAAA,QAAO;AAAA,QAAC,gBAAAJ,KAACI,OAAA,EAAM,6BAAkB;AAAA,QAC3D;AAAA,QAAM,YAAY,gBAAAJ,KAACI,OAAA,EAAK,OAAM,SAAQ,2BAAQ,IAAU,gBAAAJ,KAACI,OAAA,EAAK,UAAQ,MAAC,4BAAS;AAAA,SACnF;AAAA,MACA,gBAAAJ,KAACI,OAAA,EAAK,eAAC;AAAA,MACP,gBAAAJ,KAACI,OAAA,EAAK,UAAQ,MAAC,yCAA2B;AAAA,OAC5C;AAAA,IAGD,YAAY,aAAa,WACxB,gBAAAH,MAACE,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAH,KAACG,MAAA,EAAI,aAAY,SAAQ,aAAY,SAAQ,UAAU,GACrD,0BAAAF,MAACG,OAAA,EACE;AAAA,sBAAc,gBAAAJ,KAACI,OAAA,EAAK,UAAQ,MAAC,wBAAU;AAAA,QACxC,gBAAAJ,KAACI,OAAA,EAAK,MAAI,MAAC,OAAM,SAAQ,eAAC;AAAA,SAC5B,GACF;AAAA,MACA,gBAAAH,MAACG,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAe,QAAQ,aAAa,WAAW,aAAa;AAAA,QAAS;AAAA,SAAa;AAAA,OACnG;AAAA,IAGD,YAAY,aAAa,MAAM,IAAI,CAAC,MAAM,QAAQ;AACjD,YAAM,aAAa,kBAAkB;AACrC,aACE,gBAAAH,MAACG,OAAA,EACE;AAAA,qBAAa,gBAAAH,MAACG,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,UAAI;AAAA,WAAC,IAAU,gBAAAJ,KAACI,OAAA,EAAK,gBAAE;AAAA,QAC/D,gBAAAH,MAACG,OAAA,EAAK,MAAM,YAAa;AAAA,eAAK;AAAA,UAAM;AAAA,WAAE;AAAA,QACrC,WAAW,aACR,gBAAAH,MAACG,OAAA,EAAM;AAAA;AAAA,UAAW,gBAAAJ,KAACI,OAAA,EAAK,MAAI,MAAC,OAAM,SAAQ,eAAC;AAAA,WAAO,IACnD,gBAAAJ,KAACI,OAAA,EAAK,UAAQ,MAAE,eAAK,OAAM;AAAA,WALtB,KAAK,GAMhB;AAAA,IAEJ,CAAC;AAAA,IAEA,YAAY,aACX,gBAAAH,MAAA,YACE;AAAA,sBAAAD,KAACI,OAAA,EAAK,eAAC;AAAA,MACP,gBAAAJ,KAACI,OAAA,EAAK,UAAQ,MAAE,sBAAY,SAAS,gCAA6B,8BAA0B;AAAA,OAC9F;AAAA,KAEJ;AAEJ;;;ACtMA,SAAS,OAAAC,MAAK,QAAAC,aAAY;AAkBd,gBAAAC,MAA0E,QAAAC,aAA1E;AAfL,SAAS,eAAmC;AACjD,QAAM,EAAE,MAAM,IAAI,aAAa;AAC/B,QAAM,EAAE,UAAU,kBAAkB,OAAO,QAAQ,aAAa,aAAa,IAAI;AACjF,QAAM,EAAE,aAAa,eAAe,IAAI;AAExC,QAAM,UAAU,MAAM,gBAAgB,MAAM,cAAc,MAAM,cAAc,KAAK,IAAI;AACvF,QAAM,YAAY,UAAU,MAAM,iBAAiB,KAAM,QAAQ,CAAC;AAElE,QAAM,iBAAiB,OAAO,OAAO,OAAK,EAAE,aAAa,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/E,QAAM,eAAe;AACrB,QAAM,WAAW,eAAe;AAChC,QAAM,iBAAiB,YAAY,MAAM,UAAU,WAAW,YAAY;AAE1E,SACE,gBAAAA,MAACC,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,oBAAAD,MAACE,OAAA,EAAK;AAAA,sBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,MAAO;AAAA,MAAS,gBAAAH,KAACG,OAAA,EAAK,MAAI,MAAE,0BAAe;AAAA,MAAO;AAAA,MAAQ,gBAAAF,MAACE,OAAA,EAAK,UAAQ,MAAE;AAAA;AAAA,QAAQ;AAAA,SAAC;AAAA,OAAO;AAAA,IAE/G,MAAM,YAAY,iBAAiB,WAClC,gBAAAF,MAACC,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAD,MAACE,OAAA,EAAK;AAAA,wBAAAH,KAACG,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,QAAO;AAAA,QAAmB,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,qBAAO;AAAA,SAAO;AAAA,OAChF,iBAAiB,qBAAqB,KAAK,iBAAiB,iBAAiB,KAAK,iBAAiB,oBAAoB,MACvH,gBAAAF,MAACE,OAAA,EACE;AAAA;AAAA,QAAK,gBAAAH,KAACG,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,QAAQ;AAAA,QACnC,gBAAAH,KAACG,OAAA,EAAK,MAAI,MAAE,2BAAiB,oBAAmB;AAAA,QAAO,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,wBAAU;AAAA,QAChF,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,oBAAG;AAAA,QAClB,gBAAAH,KAACG,OAAA,EAAK,MAAI,MAAE,2BAAiB,gBAAe;AAAA,QAAO,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,oBAAM;AAAA,QACxE,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,oBAAG;AAAA,QAClB,gBAAAH,KAACG,OAAA,EAAK,MAAI,MAAE,2BAAiB,mBAAkB;AAAA,QAAO,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,uBAAS;AAAA,SAChF;AAAA,OAEJ;AAAA,IAGD,eAAe,SAAS,KACvB,gBAAAF,MAACC,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAF,KAACG,OAAA,EAAK,eAAC;AAAA,MACN,eAAe,IAAI,CAAC,OAAO,MAAM;AAChC,cAAM,WAAW,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI,KAAK,MAAM;AACtD,cAAM,UAAU,MAAM,OAAO,IAAI,MAAM,IAAI,KAAK;AAChD,cAAM,OAAO,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,MAAM,MAAM,SAAS,KAAK,QAAQ;AAC3E,eACE,gBAAAF,MAACE,OAAA,EACC;AAAA,0BAAAH,KAACG,OAAA,EAAK,OAAM,OAAM,oBAAC;AAAA,UAAO;AAAA,UAAC,gBAAAH,KAACG,OAAA,EAAK,OAAM,OAAO,gBAAK;AAAA,UACnD,gBAAAF,MAACE,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,YAAG;AAAA,YAAU;AAAA,aAAQ;AAAA,aAF3B,CAGX;AAAA,MAEJ,CAAC;AAAA,OACH;AAAA,IAGD,gBAAgB,KAAK,eAAe,WAAW,KAC9C,gBAAAF,MAACE,OAAA,EAAK;AAAA,sBAAAH,KAACG,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,MAAO;AAAA,OAAgB;AAAA,IAGpD,gBAAAH,KAACG,OAAA,EAAK,eAAC;AAAA,IACP,gBAAAF,MAACC,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAF,KAACG,OAAA,EAAK,MAAI,MAAC,sBAAQ;AAAA,MAClB,eAAe,IAAI,CAAC,OAAO,MAC1B,gBAAAF,MAACE,OAAA,EAAa;AAAA;AAAA,QAAE,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,QAAO;AAAA,QAAE,MAAM;AAAA,QAAQ;AAAA,QAAE,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAE,gBAAM,MAAK;AAAA,WAAzE,CAAgF,CAC5F;AAAA,MACA,eAAe,WAAW,KAAK,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,gCAAkB;AAAA,OACnE;AAAA,KACF;AAEJ;;;ACpEA,SAAgB,aAAAC,YAAW,mBAAmB;AAC9C,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;;;ACDpC,OAAOC,SAAQ;AAER,IAAM,SAAS;AAAA,EACpB,QAAQ,CAAC,MAAcA,IAAG,IAAI,CAAC;AAAA,EAC/B,QAAQ,CAAC,MAAcA,IAAG,KAAKA,IAAG,MAAM,CAAC,CAAC;AAAA,EAC1C,OAAO,CAAC,MAAcA,IAAG,KAAKA,IAAG,MAAM,CAAC,CAAC;AAAA,EACzC,KAAK,CAAC,MAAcA,IAAG,IAAI,CAAC;AAAA,EAE5B,UAAU,CAAC,MAAcA,IAAG,KAAKA,IAAG,IAAI,CAAC,CAAC;AAAA,EAC1C,SAAS,CAAC,MAAcA,IAAG,OAAO,CAAC;AAAA,EACnC,UAAU,CAAC,MAAcA,IAAG,KAAK,CAAC;AAAA,EAClC,KAAK,CAAC,MAAcA,IAAG,IAAI,CAAC;AAAA,EAE5B,SAAS,CAAC,MAAcA,IAAG,MAAM,CAAC;AAAA,EAClC,SAAS,CAAC,MAAcA,IAAG,OAAO,CAAC;AAAA,EACnC,SAAS,CAAC,MAAcA,IAAG,IAAI,CAAC;AAAA,EAChC,OAAO,CAAC,MAAcA,IAAG,KAAKA,IAAG,IAAI,CAAC,CAAC;AAAA,EAEvC,UAAU,CAAC,MAAcA,IAAG,KAAKA,IAAG,MAAM,CAAC,CAAC;AAAA,EAC5C,WAAW,CAAC,MAAcA,IAAG,KAAKA,IAAG,MAAM,CAAC,CAAC;AAAA,EAE7C,QAAQ,CAAC,MAAcA,IAAG,OAAO,CAAC;AACpC;AAgBO,SAAS,cAAc,WAA2B;AACvD,QAAM,UAAU,KAAK,OAAO,KAAK,IAAI,IAAI,aAAa,GAAI;AAC1D,MAAI,UAAU,GAAI,QAAO;AACzB,MAAI,UAAU,GAAI,QAAO,GAAG,OAAO;AACnC,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,MAAI,UAAU,GAAI,QAAO,GAAG,OAAO;AACnC,QAAM,QAAQ,KAAK,MAAM,UAAU,EAAE;AACrC,SAAO,GAAG,KAAK;AACjB;AAiCO,SAAS,YAAY,SAAiB,OAAe,QAAgB,IAAY;AACtF,MAAI,SAAS,EAAG,QAAO,OAAO,IAAI,SAAI,OAAO,KAAK,CAAC;AACnD,QAAM,WAAW,KAAK,IAAI,GAAG,UAAU,KAAK;AAC5C,QAAM,SAAS,KAAK,MAAM,QAAQ,QAAQ;AAC1C,QAAM,QAAQ,QAAQ;AACtB,SAAO,OAAO,QAAQ,SAAI,OAAO,MAAM,CAAC,IAAI,OAAO,IAAI,SAAI,OAAO,KAAK,CAAC;AAC1E;;;ADfM,SACE,OAAAC,MADF,QAAAC,aAAA;AA5DN,SAAS,QAAQ,KAAqB;AACpC,QAAM,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,QAAQ;AAC9C,QAAM,OAAO,KAAK,MAAM,KAAK,GAAK;AAClC,MAAI,OAAO,GAAI,QAAO,GAAG,IAAI;AAC7B,QAAM,MAAM,KAAK,MAAM,OAAO,EAAE;AAChC,MAAI,MAAM,GAAI,QAAO,GAAG,GAAG;AAC3B,SAAO,GAAG,KAAK,MAAM,MAAM,EAAE,CAAC;AAChC;AAEO,SAAS,YAAgC;AAC9C,QAAM,EAAE,OAAO,SAAS,IAAI,aAAa;AACzC,QAAM,EAAE,eAAe,YAAY,iBAAiB,gBAAgB,IAAI;AAExE,QAAM,kBAAkB,mBAAmB,KAAK;AAChD,QAAM,SAAS,gBAAgB,OAAO,OAAK,EAAE,SAAS,SAAS;AAC/D,QAAM,EAAE,WAAW,UAAU,OAAO,IAAI;AAExC,QAAM,YAAY,YAAY,YAAY;AACxC,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,UAAU,IAAI,cAAc,OAAO;AACzC,YAAM,QAAQ,IAAI,aAAa,OAAO;AAEtC,YAAM,CAAC,MAAM,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,QACrC,QAAQ,eAAe,EAAE,OAAO,GAAG,CAAC;AAAA,QACpC,MAAM,YAAY;AAAA,MACpB,CAAC;AAED,YAAM,cAAc,KAAK,MACtB,OAAO,CAAC,MAA8D,EAAE,SAAS,SAAS,EAC1F,IAAI,OAAK,EAAE,IAAI;AAElB,eAAS,EAAE,MAAM,mBAAmB,WAAW,MAAM,UAAU,aAAa,YAAY,KAAK,CAAC;AAAA,IAChG,QAAQ;AACN,eAAS,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,CAAC;AAAA,IACtE;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ;AAAE,WAAK,UAAU;AAAA,IAAG;AAAA,EACnC,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,EAAAC,UAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,IAAI,WAAW,UAAU,KAAK;AAChC,eAAS,EAAE,MAAM,cAAc,CAAC;AAAA,IAClC,WAAW,IAAI,aAAa,UAAU,KAAK;AACzC,eAAS,EAAE,MAAM,gBAAgB,CAAC;AAAA,IACpC,WAAW,IAAI,QAAQ;AACrB,eAAS,EAAE,MAAM,kBAAkB,OAAO,gBAAgB,CAAC;AAAA,IAC7D,WAAW,UAAU,KAAK;AACxB,eAAS,EAAE,MAAM,mBAAmB,OAAO,gBAAgB,CAAC;AAAA,IAC9D;AAAA,EACF,CAAC;AAED,QAAM,aAAa,OAAO;AAC1B,QAAM,WAAW,UAAU;AAC3B,QAAM,WAAW,SAAS;AAE1B,MAAI,eAAe,KAAK,aAAa,KAAK,aAAa,KAAK,CAAC,QAAQ;AACnE,WACE,gBAAAF,MAACG,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,sBAAAJ,KAACK,OAAA,EAAK,MAAI,MAAC,kBAAI;AAAA,MACf,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,0BAAY;AAAA,OAC7B;AAAA,EAEJ;AAEA,MAAI,eAAe,KAAK,aAAa,KAAK,aAAa,GAAG;AACxD,WACE,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,sBAAAH,MAACI,OAAA,EAAK;AAAA,wBAAAL,KAACK,OAAA,EAAK,MAAI,MAAC,kBAAI;AAAA,QAAO;AAAA,QAAE,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,qCAAuB;AAAA,SAAO;AAAA,MAC3E,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,MACP,gBAAAJ,MAACI,OAAA,EAAK;AAAA;AAAA,QAAE,gBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,QAAO;AAAA,SAAyC;AAAA,MAC7E,gBAAAJ,MAACI,OAAA,EAAK;AAAA;AAAA,QAAE,gBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,QAAO;AAAA,SAAwC;AAAA,MAC5E,gBAAAJ,MAACI,OAAA,EAAK;AAAA;AAAA,QAAE,gBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,QAAO;AAAA,SAAwD;AAAA,MAC5F,gBAAAJ,MAACI,OAAA,EAAK;AAAA;AAAA,QAAE,gBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,QAAO;AAAA,SAAuB;AAAA,MAC3D,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,MACP,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,uDAAyC;AAAA,MACxD,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,kEAAoD;AAAA,MACnE,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,MACN,cAAc,IACX,gBAAAJ,MAACI,OAAA,EAAK;AAAA,wBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,QAAO;AAAA,QAAC,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,0CAA4B;AAAA,SAAO,IACrF,gBAAAJ,MAACI,OAAA,EAAK;AAAA,wBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,QAAO;AAAA,QAAK,gBAAAL,KAACK,OAAA,EAAK,MAAI,MAAC,+BAAiB;AAAA,QAAO;AAAA,QAAC,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,6BAAe;AAAA,SAAO;AAAA,OACjH;AAAA,EAEJ;AAEA,QAAM,oBAAoB,SAAS,OAAO,OAAK,EAAE,aAAa,GAAG,EAAE;AACnE,QAAM,mBAAmB,SAAS,OAAO,OAAK,EAAE,cAAc,GAAG,EAAE;AAEnE,SACE,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,oBAAAH,MAACI,OAAA,EACC;AAAA,sBAAAL,KAACK,OAAA,EAAK,MAAI,MAAC,kBAAI;AAAA,MACd;AAAA,MAAK,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAE;AAAA;AAAA,QAAW;AAAA,QAAO,eAAe,IAAI,MAAM;AAAA,QAAG;AAAA,QAAG;AAAA,QAAS;AAAA,QAAU,aAAa,IAAI,MAAM;AAAA,QAAG;AAAA,QAAG;AAAA,QAAS;AAAA,QAAS,aAAa,IAAI,MAAM;AAAA,SAAG;AAAA,OACrK;AAAA,IACA,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,IAEN,aAAa,KACZ,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAJ,KAACK,OAAA,EAAK,MAAI,MAAC,sBAAQ;AAAA,MAClB,OAAO,IAAI,CAAC,SAAS,QAAQ;AAC5B,cAAM,aAAa,QAAQ;AAC3B,cAAM,aAAa,QAAQ;AAC3B,cAAM,MAAM,cAAc,QAAQ,SAAS;AAC3C,cAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,EAAE,KAAK,QAAQ,QAAQ,SAAS,KAAK,QAAQ;AAClF,cAAMC,aAAY,QAAQ,YAAY,IAAI,QAAQ,QAAQ,YAAY,IAAI,WAAW;AACrF,eACE,gBAAAL,MAACG,MAAA,EAAqB,eAAc,UAClC;AAAA,0BAAAH,MAACI,OAAA,EACE;AAAA,yBAAa,gBAAAJ,MAACI,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,cAAI;AAAA,eAAC,IAAU,gBAAAL,KAACK,OAAA,EAAK,gBAAE;AAAA,YAC9DC,aAAY,gBAAAN,KAACK,OAAA,EAAK,OAAOC,YAAW,oBAAC,IAAU,gBAAAN,KAACK,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,YAAS;AAAA,YACxE,aAAa,gBAAAL,KAACK,OAAA,EAAK,MAAI,MAAE,eAAI,IAAU,gBAAAL,KAACK,OAAA,EAAM,eAAI;AAAA,YAClD;AAAA,YAAK,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAE;AAAA,sBAAQ;AAAA,cAAS;AAAA,cAAI;AAAA,eAAI;AAAA,aACjD;AAAA,WACE,cAAc,eAAe,QAAQ,mBACrC,gBAAAJ,MAACI,OAAA,EAAK;AAAA;AAAA,YAAI,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,YAAO;AAAA,YAAC,gBAAAL,KAACK,OAAA,EAAK,MAAI,MAAE,kBAAQ,iBAAgB;AAAA,aAAO;AAAA,aARvE,QAAQ,EAUlB;AAAA,MAEJ,CAAC;AAAA,MACD,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,OACT;AAAA,IAGD,WAAW,KACV,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAJ,KAACK,OAAA,EAAK,MAAI,MAAC,yBAAW;AAAA,MACrB,UAAU,MAAM,GAAG,EAAE,EAAE,IAAI,SAAO;AACjC,cAAM,MAAM,QAAQ,IAAI,IAAI;AAC5B,cAAM,OAAO,IAAI,OAAO,IAAI,KAAK,MAAM,GAAG,CAAC,IAAI;AAC/C,cAAM,SAAS,IAAI,WAAW;AAC9B,eACE,gBAAAJ,MAACI,OAAA,EACE;AAAA;AAAA,UAAM,SAAS,gBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC,IAAU,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,UAAS;AAAA,UACxE,gBAAAJ,MAACI,OAAA,EAAM;AAAA,gBAAI,SAAS,MAAM,GAAG,EAAE;AAAA,YAAG,IAAI,SAAS,SAAS,KAAK,QAAQ;AAAA,aAAG;AAAA,UACvE;AAAA,UAAK,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAE,eAAI;AAAA,UACzB,QAAQ,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,YAAG;AAAA,aAAK;AAAA,aAJvB,IAAI,EAKf;AAAA,MAEJ,CAAC;AAAA,MACD,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,OACT;AAAA,IAGD,WAAW,KACV,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAJ,KAACK,OAAA,EAAK,MAAI,MAAC,wBAAU;AAAA,MACpB,oBAAoB,KAAK,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAG;AAAA,QAAkB;AAAA,QAAa;AAAA,QAAiB;AAAA,SAAS;AAAA,MACpG,SAAS,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,QAAQ;AACtC,cAAM,OAAO,KAAK,MAAM,IAAI,aAAa,GAAG;AAC5C,cAAM,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,WAAW;AAC/D,cAAM,OAAO,IAAI,YAAY,MAAM,GAAG,EAAE,KAAK,IAAI,YAAY,SAAS,KAAK,QAAQ;AACnF,eACE,gBAAAJ,MAACI,OAAA,EACE;AAAA;AAAA,UAAM,IAAI,gBAAgB,gBAAAL,KAACK,OAAA,EAAK,OAAM,OAAM,oBAAC,IAAU,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,UAAS;AAAA,UACjF,gBAAAL,KAACK,OAAA,EAAM,gBAAK;AAAA,UACX;AAAA,UAAM,YAAY,gBAAAJ,MAACI,OAAA,EAAK,OAAO,WAAY;AAAA;AAAA,YAAK;AAAA,aAAC,IAAU,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAE;AAAA;AAAA,YAAK;AAAA,aAAC;AAAA,UACjF,IAAI,iBAAiB,gBAAAL,KAACK,OAAA,EAAK,OAAM,OAAM,2BAAa;AAAA,aAJ5C,GAKX;AAAA,MAEJ,CAAC;AAAA,OACH;AAAA,IAGF,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,IACP,gBAAAJ,MAACG,MAAA,EAAI,KAAK,GACP;AAAA,oBAAc,IAAI,gBAAAH,MAACI,OAAA,EAAK;AAAA,wBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,QAAO;AAAA,QAAC,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,gBAAE;AAAA,SAAO,IAAU,gBAAAL,KAACK,OAAA,EAAK,0BAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,2BAAQ,GAAO;AAAA,MAC3H,cAAc,OAAO,OAAK,EAAE,SAAS,aAAa,EAAE,SAAS,KAC5D,gBAAAJ,MAACI,OAAA,EAAK;AAAA,wBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,QAAO;AAAA,QAAC,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAE;AAAA,wBAAc,OAAO,OAAK,EAAE,SAAS,aAAa,EAAE;AAAA,UAAO;AAAA,WAAK;AAAA,SAAO;AAAA,OAE9H;AAAA,KACF;AAEJ;;;AExLA,SAAgB,eAAAE,oBAAmB;AACnC,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;AA0I9B,SAWE,YAAAC,WAXI,OAAAC,MAAN,QAAAC,aAAA;AApIN,SAAS,sBAAsB,MAA6E;AAC1G,MAAI,KAAK,UAAU,EAAG,QAAO;AAC7B,QAAM,aAAa,KAAK,cAAc,KAAK;AAC3C,MAAI,aAAa,KAAK,QAAQ;AAC5B,UAAM,iBAAiB,aAAa,KAAK;AACzC,UAAM,kBAAkB,aAAa,KAAK;AAC1C,WAAO,KAAK,MAAO,kBAAkB,iBAAkB,GAAG;AAAA,EAC5D;AACA,SAAO,KAAK,MAAO,KAAK,eAAe,KAAK,SAAU,GAAG;AAC3D;AAEO,SAAS,YAAgC;AAC9C,QAAM,EAAE,OAAO,SAAS,IAAI,aAAa;AACzC,QAAM,EAAE,WAAW,IAAI;AACvB,QAAM,cAAc,WAAW,MAAM,OAAO,OAAK,EAAE,WAAW,QAAQ;AACtE,QAAM,gBAAgB,WAAW,MAAM,OAAO,OAAK,EAAE,WAAW,UAAU;AAC1E,QAAM,aAAa,WAAW,MAAM,OAAO,OAAK,EAAE,WAAW,YAAY,EAAE,WAAW,UAAU;AAEhG,QAAM,eAAeC,aAAY,YAAY;AAC3C,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,QAAQ,WAAW,YAAY;AACrC,eAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,MAAM,IAAI,OAAK;AACpB,gBAAM,OAAO,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,aAAa,MAAM,EAAE,MAAM,QAAQ,EAAE,QAAQ,cAAc,EAAE,cAAc,QAAQ,EAAE,QAAQ,eAAe,EAAE,eAAe,WAAW,EAAE,UAAU;AAC5L,iBAAO,EAAE,WAAW,EAAE,GAAG,MAAM,UAAU,EAAE,SAAS,IAAI;AAAA,QAC1D,CAAC;AAAA,MACH,CAAC;AAAA,IACH,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,UAAUA,aAAY,OAAO,gBAAwB;AACzD,QAAI,CAAC,YAAY,KAAK,EAAG;AACzB,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,OAAa;AAAA,QACjB,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,QAChE,aAAa,YAAY,KAAK;AAAA,QAC9B,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC,UAAU,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAQ,EAAE,YAAY;AAAA,MAC7D;AACA,YAAM,WAAW,QAAQ,IAAI;AAC7B,eAAS,EAAE,MAAM,gBAAgB,SAAS,eAAe,YAAY,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;AACrF,YAAM,aAAa;AAAA,IACrB,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,UAAU,YAAY,CAAC;AAE3B,QAAM,eAAeA,aAAY,OAAO,WAAmB;AACzD,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,QAAQ,WAAW,YAAY;AACrC,YAAM,OAAO,MAAM,KAAK,OAAK,EAAE,OAAO,MAAM;AAC5C,UAAI,MAAM;AACR,cAAM,WAAW,WAAW,QAAQ,EAAE,QAAQ,YAAY,cAAc,KAAK,QAAQ,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC3H,iBAAS,EAAE,MAAM,gBAAgB,SAAS,kBAAkB,KAAK,YAAY,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;AAC7F,cAAM,aAAa;AAAA,MACrB;AAAA,IACF,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,UAAU,YAAY,CAAC;AAE3B,QAAM,aAAaA,aAAY,OAAO,WAAmB;AACvD,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,WAAW,QAAQ,EAAE,QAAQ,WAAW,CAAC;AAC1D,eAAS,EAAE,MAAM,gBAAgB,SAAS,eAAe,CAAC;AAC1D,YAAM,aAAa;AAAA,IACrB,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,UAAU,YAAY,CAAC;AAE3B,QAAM,iBAAiBA,aAAY,OAAO,WAAmB;AAC3D,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,WAAW,QAAQ,EAAE,QAAQ,UAAU,YAAY,OAAU,CAAC;AAC/E,eAAS,EAAE,MAAM,gBAAgB,SAAS,mBAAmB,CAAC;AAC9D,YAAM,aAAa;AAAA,IACrB,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,UAAU,YAAY,CAAC;AAE3B,EAAAC,UAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,WAAW,cAAc,OAAO;AAClC,UAAI,IAAI,QAAQ;AACd,iBAAS,EAAE,MAAM,wBAAwB,MAAM,SAAS,CAAC;AAAA,MAC3D,WAAW,IAAI,QAAQ;AACrB,aAAK,QAAQ,WAAW,WAAW;AACnC,iBAAS,EAAE,MAAM,wBAAwB,MAAM,SAAS,CAAC;AAAA,MAC3D,WAAW,IAAI,aAAa,IAAI,QAAQ;AACtC,iBAAS,EAAE,MAAM,0BAA0B,QAAQ,WAAW,YAAY,MAAM,GAAG,EAAE,EAAE,CAAC;AAAA,MAC1F,WAAW,UAAU,OAAO,WAAW,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,MAAM;AAClE,iBAAS,EAAE,MAAM,0BAA0B,QAAQ,WAAW,cAAc,OAAO,CAAC;AAAA,MACtF;AACA;AAAA,IACF;AAEA,QAAI,WAAW,IAAK,UAAS,EAAE,MAAM,wBAAwB,MAAM,MAAM,CAAC;AAAA,aACjE,IAAI,WAAW,WAAW,IAAK,UAAS,EAAE,MAAM,eAAe,OAAO,KAAK,IAAI,GAAG,WAAW,gBAAgB,CAAC,EAAE,CAAC;AAAA,aACjH,IAAI,aAAa,WAAW,IAAK,UAAS,EAAE,MAAM,eAAe,OAAO,KAAK,IAAI,YAAY,SAAS,GAAG,WAAW,gBAAgB,CAAC,EAAE,CAAC;AAAA,aACxI,IAAI,QAAQ;AACnB,YAAM,WAAW,YAAY,WAAW,aAAa;AACrD,UAAI,SAAU,MAAK,aAAa,SAAS,EAAE;AAAA,IAC7C,WAAW,WAAW,KAAK;AACzB,YAAM,WAAW,YAAY,WAAW,aAAa;AACrD,UAAI,SAAU,MAAK,WAAW,SAAS,EAAE;AAAA,IAC3C,WAAW,WAAW,KAAK;AACzB,YAAM,YAAY,WAAW,MAAM,OAAO,OAAK,EAAE,WAAW,cAAc,EAAE,WAAW,QAAQ;AAC/F,UAAI,UAAU,CAAC,EAAG,MAAK,WAAW,UAAU,CAAC,EAAE,EAAE;AAAA,IACnD,WAAW,WAAW,KAAK;AACzB,YAAM,SAAS,WAAW,MAAM,OAAO,OAAK,EAAE,WAAW,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;AACrJ,UAAI,OAAO,CAAC,EAAG,MAAK,eAAe,OAAO,CAAC,EAAE,EAAE;AAAA,IACjD;AAAA,EACF,CAAC;AAED,SACE,gBAAAF,MAACG,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,oBAAAH,MAACI,OAAA,EAAK;AAAA,sBAAAL,KAACK,OAAA,EAAK,MAAI,MAAC,mBAAK;AAAA,MAAO;AAAA,MAAE,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,6CAA+B;AAAA,OAAO;AAAA,IACpF,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,IAEN,WAAW,cAAc,QACxB,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAJ,KAACI,MAAA,EAAI,aAAY,SAAQ,aAAY,SAAQ,UAAU,GACrD,0BAAAH,MAACI,OAAA,EAAM;AAAA,mBAAW;AAAA,QAAY,gBAAAL,KAACK,OAAA,EAAK,MAAI,MAAC,OAAM,SAAQ,eAAC;AAAA,SAAO,GACjE;AAAA,MACA,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,0CAAyB;AAAA,OAC1C,IAEA,gBAAAL,KAAAD,WAAA,EACG,qBAAW,MAAM,WAAW,IAC3B,gBAAAE,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAJ,KAACK,OAAA,EAAK,UAAQ,MAAC,6BAAe;AAAA,MAC9B,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,+CAAiC;AAAA,OAClD,IAEA,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UAChB;AAAA,kBAAY,SAAS,KACpB,gBAAAH,MAACG,MAAA,EAAI,eAAc,UAChB;AAAA,oBAAY,IAAI,CAAC,MAAM,QAAQ;AAC9B,gBAAM,aAAa,WAAW,kBAAkB;AAChD,gBAAM,WAAW,sBAAsB,IAAI;AAC3C,gBAAM,MAAM,YAAY,UAAU,KAAK,CAAC;AACxC,gBAAM,SAAS,KAAK,gBAAgB,SAAS;AAC7C,iBACE,gBAAAH,MAACI,OAAA,EACE;AAAA,yBAAa,gBAAAJ,MAACI,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,cAAI;AAAA,eAAC,IAAU,gBAAAL,KAACK,OAAA,EAAK,gBAAE;AAAA,YAC/D,gBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,YAAO;AAAA,YAAE,KAAK,YAAY,MAAM,GAAG,EAAE;AAAA,YAC1D,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAG;AAAA,cAAO;AAAA,cAAG;AAAA,cAAI;AAAA,cAAE;AAAA,cAAS;AAAA,eAAC;AAAA,eAHnC,KAAK,EAIhB;AAAA,QAEJ,CAAC;AAAA,QACD,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,SACT;AAAA,MAGD,cAAc,SAAS,KACtB,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,wBAAAJ,KAACK,OAAA,EAAK,UAAQ,MAAC,wBAAU;AAAA,QACxB,cAAc,MAAM,GAAG,CAAC,EAAE,IAAI,OAC7B,gBAAAJ,MAACI,OAAA,EAAgB;AAAA;AAAA,UAAE,gBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,UAAO;AAAA,UAAE,EAAE,YAAY,MAAM,GAAG,EAAE;AAAA,aAA/D,EAAE,EAA+D,CAC7E;AAAA,QACA,cAAc,SAAS,KAAK,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,UAAM,cAAc,SAAS;AAAA,UAAE;AAAA,WAAK;AAAA,QAChF,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,SACT;AAAA,MAGD,WAAW,SAAS,KACnB,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,wBAAAJ,KAACK,OAAA,EAAK,UAAQ,MAAC,qBAAO;AAAA,QACrB,WAAW,MAAM,GAAG,CAAC,EAAE,IAAI,OAC1B,gBAAAJ,MAACI,OAAA,EAAgB;AAAA;AAAA,UAAE,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,UAAO;AAAA,UAAE,EAAE,YAAY,MAAM,GAAG,EAAE;AAAA,UAAE,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,YAAG,EAAE;AAAA,aAAO;AAAA,aAAvF,EAAE,EAA4F,CAC1G;AAAA,SACH;AAAA,OAEJ,GAEJ;AAAA,KAEJ;AAEJ;;;AC1MA,SAAgB,eAAAC,oBAAmB;AACnC,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;AAiH9B,SAWE,YAAAC,WAXI,OAAAC,MAAN,QAAAC,aAAA;AA5GC,SAAS,iBAAqC;AACnD,QAAM,EAAE,OAAO,SAAS,IAAI,aAAa;AACzC,QAAM,EAAE,gBAAgB,IAAI;AAC5B,QAAM,UAAU,gBAAgB,WAAW,OAAO,OAAK,EAAE,WAAW,SAAS;AAC7E,QAAM,YAAY,gBAAgB,WAAW,OAAO,OAAK,EAAE,WAAW,WAAW;AACjF,QAAM,cAAc,gBAAgB,WAAW,OAAO,OAAK,EAAE,WAAW,aAAa;AAErF,QAAM,oBAAoBC,aAAY,YAAY;AAChD,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,aAAa,WAAW,iBAAiB;AAC/C,eAAS;AAAA,QACP,MAAM;AAAA,QACN,YAAY,WAAW,IAAI,OAAK;AAC9B,gBAAM,OAAO,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,WAAW,YAAY,EAAE,YAAY,QAAQ,EAAE,QAAQ,eAAe,EAAE,SAAS,QAAQ,WAAW,EAAE,UAAU;AACtJ,iBAAO,EAAE,WAAW,EAAE,GAAG,MAAM,UAAU,EAAE,SAAS,IAAI;AAAA,QAC1D,CAAC;AAAA,MACH,CAAC;AAAA,IACH,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,gBAAgBA,aAAY,OAAO,cAAsB;AAC7D,QAAI,CAAC,UAAU,KAAK,EAAG;AACvB,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,aAAyB;AAAA,QAC7B,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,QAChE,WAAW,UAAU,KAAK;AAAA,QAC1B,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,UAAU,CAAC;AAAA,QACX,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC,cAAc;AAAA,MAChB;AACA,YAAM,WAAW,cAAc,UAAU;AACzC,eAAS,EAAE,MAAM,gBAAgB,SAAS,qBAAqB,UAAU,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;AACzF,YAAM,kBAAkB;AAAA,IAC1B,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,UAAU,iBAAiB,CAAC;AAEhC,QAAM,mBAAmBA,aAAY,OAAO,QAAgB,WAAiD;AAC3G,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,UAAI,WAAW,WAAY,OAAM,WAAW,iBAAiB,QAAQ,EAAE,QAAQ,aAAa,YAAY,IAAI,CAAC;AAAA,eACpG,WAAW,aAAc,OAAM,WAAW,iBAAiB,QAAQ,EAAE,QAAQ,eAAe,YAAY,IAAI,CAAC;AAAA,UACjH,OAAM,WAAW,iBAAiB,QAAQ,EAAE,QAAQ,UAAU,CAAC;AACpE,eAAS,EAAE,MAAM,gBAAgB,SAAS,cAAc,WAAW,aAAa,cAAc,WAAW,eAAe,gBAAgB,SAAS,GAAG,CAAC;AACrJ,YAAM,kBAAkB;AAAA,IAC1B,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,UAAU,iBAAiB,CAAC;AAEhC,QAAM,uBAAuBA,aAAY,OAAO,WAAmB;AACjE,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,iBAAiB,QAAQ,EAAE,QAAQ,WAAW,YAAY,KAAK,aAAa,OAAU,CAAC;AACxG,eAAS,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,CAAC;AACpE,YAAM,kBAAkB;AAAA,IAC1B,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,UAAU,iBAAiB,CAAC;AAEhC,EAAAC,UAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,gBAAgB,cAAc,OAAO;AACvC,UAAI,IAAI,QAAQ;AACd,iBAAS,EAAE,MAAM,6BAA6B,MAAM,SAAS,CAAC;AAAA,MAChE,WAAW,IAAI,QAAQ;AACrB,aAAK,cAAc,gBAAgB,WAAW;AAC9C,iBAAS,EAAE,MAAM,6BAA6B,MAAM,SAAS,CAAC;AAAA,MAChE,WAAW,IAAI,aAAa,IAAI,QAAQ;AACtC,iBAAS,EAAE,MAAM,+BAA+B,QAAQ,gBAAgB,YAAY,MAAM,GAAG,EAAE,EAAE,CAAC;AAAA,MACpG,WAAW,UAAU,OAAO,WAAW,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,MAAM;AAClE,iBAAS,EAAE,MAAM,+BAA+B,QAAQ,gBAAgB,cAAc,OAAO,CAAC;AAAA,MAChG;AACA;AAAA,IACF;AAEA,QAAI,WAAW,IAAK,UAAS,EAAE,MAAM,6BAA6B,MAAM,MAAM,CAAC;AAAA,aACtE,IAAI,WAAW,WAAW,IAAK,UAAS,EAAE,MAAM,qBAAqB,OAAO,KAAK,IAAI,GAAG,gBAAgB,gBAAgB,CAAC,EAAE,CAAC;AAAA,aAC5H,IAAI,aAAa,WAAW,IAAK,UAAS,EAAE,MAAM,qBAAqB,OAAO,KAAK,IAAI,QAAQ,SAAS,GAAG,gBAAgB,gBAAgB,CAAC,EAAE,CAAC;AAAA,aAC/I,WAAW,KAAK;AACvB,YAAM,WAAW,QAAQ,gBAAgB,aAAa;AACtD,UAAI,SAAU,MAAK,iBAAiB,SAAS,IAAI,UAAU;AAAA,IAC7D,WAAW,WAAW,KAAK;AACzB,YAAM,WAAW,QAAQ,gBAAgB,aAAa;AACtD,UAAI,SAAU,MAAK,iBAAiB,SAAS,IAAI,YAAY;AAAA,IAC/D,WAAW,WAAW,KAAK;AACzB,YAAM,WAAW,QAAQ,gBAAgB,aAAa;AACtD,UAAI,SAAU,MAAK,iBAAiB,SAAS,IAAI,QAAQ;AAAA,IAC3D,WAAW,WAAW,KAAK;AACzB,YAAM,YAAY,gBAAgB,WAAW,OAAO,OAAK,EAAE,WAAW,eAAe,EAAE,WAAW,aAAa;AAC/G,UAAI,UAAU,CAAC,EAAG,MAAK,iBAAiB,UAAU,CAAC,EAAE,IAAI,QAAQ;AAAA,IACnE,WAAW,WAAW,KAAK;AACzB,YAAM,SAAS,gBAAgB,WAAW,OAAO,OAAK,EAAE,WAAW,eAAe,EAAE,WAAW,aAAa,EACzG,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;AACnF,UAAI,OAAO,CAAC,EAAG,MAAK,qBAAqB,OAAO,CAAC,EAAE,EAAE;AAAA,IACvD;AAAA,EACF,CAAC;AAED,SACE,gBAAAF,MAACG,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,oBAAAH,MAACI,OAAA,EAAK;AAAA,sBAAAL,KAACK,OAAA,EAAK,MAAI,MAAC,wBAAU;AAAA,MAAO;AAAA,MAAE,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,+CAAiC;AAAA,OAAO;AAAA,IAC3F,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,IAEN,gBAAgB,cAAc,QAC7B,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAJ,KAACI,MAAA,EAAI,aAAY,SAAQ,aAAY,SAAQ,UAAU,GACrD,0BAAAH,MAACI,OAAA,EAAM;AAAA,wBAAgB;AAAA,QAAY,gBAAAL,KAACK,OAAA,EAAK,MAAI,MAAC,OAAM,SAAQ,eAAC;AAAA,SAAO,GACtE;AAAA,MACA,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,0CAAyB;AAAA,OAC1C,IAEA,gBAAAL,KAAAD,WAAA,EACG,0BAAgB,WAAW,WAAW,IACrC,gBAAAE,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAJ,KAACK,OAAA,EAAK,UAAQ,MAAC,kCAAoB;AAAA,MACnC,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,qDAAuC;AAAA,OACxD,IAEA,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UAChB;AAAA,cAAQ,SAAS,KAChB,gBAAAH,MAACG,MAAA,EAAI,eAAc,UAChB;AAAA,gBAAQ,IAAI,CAAC,MAAM,QAAQ;AAC1B,gBAAM,aAAa,gBAAgB,kBAAkB;AACrD,gBAAM,OAAO,KAAK,MAAM,KAAK,aAAa,GAAG;AAC7C,iBACE,gBAAAJ,KAACI,MAAA,EAAkB,eAAc,UAC/B,0BAAAH,MAACI,OAAA,EACE;AAAA,yBAAa,gBAAAJ,MAACI,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,cAAI;AAAA,eAAC,IAAU,gBAAAL,KAACK,OAAA,EAAK,gBAAE;AAAA,YAC/D,gBAAAL,KAACK,OAAA,EAAK,OAAM,UAAS,oBAAC;AAAA,YAAO;AAAA,YAAE,KAAK,UAAU,MAAM,GAAG,EAAE;AAAA,YACzD,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAG;AAAA,cAAK;AAAA,cAAK,KAAK;AAAA,cAAc;AAAA,eAAS;AAAA,aAC1D,KALQ,KAAK,EAMf;AAAA,QAEJ,CAAC;AAAA,QACD,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,SACT;AAAA,MAGD,UAAU,SAAS,KAClB,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,wBAAAJ,KAACK,OAAA,EAAK,UAAQ,MAAC,yBAAW;AAAA,QACzB,UAAU,MAAM,GAAG,CAAC,EAAE,IAAI,OACzB,gBAAAJ,MAACI,OAAA,EAAgB;AAAA;AAAA,UAAE,gBAAAL,KAACK,OAAA,EAAK,OAAM,SAAQ,oBAAC;AAAA,UAAO;AAAA,UAAE,EAAE,UAAU,MAAM,GAAG,EAAE;AAAA,aAA7D,EAAE,EAA6D,CAC3E;AAAA,QACA,UAAU,SAAS,KAAK,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,UAAM,UAAU,SAAS;AAAA,UAAE;AAAA,WAAK;AAAA,QACxE,gBAAAL,KAACK,OAAA,EAAK,eAAC;AAAA,SACT;AAAA,MAGD,YAAY,SAAS,KACpB,gBAAAJ,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,wBAAAJ,KAACK,OAAA,EAAK,UAAQ,MAAC,2BAAa;AAAA,QAC3B,YAAY,MAAM,GAAG,CAAC,EAAE,IAAI,OAC3B,gBAAAJ,MAACI,OAAA,EAAgB;AAAA;AAAA,UAAE,gBAAAL,KAACK,OAAA,EAAK,OAAM,OAAM,oBAAC;AAAA,UAAO;AAAA,UAAC,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAE,YAAE,UAAU,MAAM,GAAG,EAAE,GAAE;AAAA,aAA5E,EAAE,EAAiF,CAC/F;AAAA,QACA,YAAY,SAAS,KAAK,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,UAAM,YAAY,SAAS;AAAA,UAAE;AAAA,WAAK;AAAA,SAC9E;AAAA,OAEJ,GAEJ;AAAA,KAEJ;AAEJ;;;AClLA,SAAgB,aAAAC,YAAW,eAAAC,oBAAmB;AAC9C,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;AA4D9B,SACE,OAAAC,OADF,QAAAC,aAAA;AArDN,IAAM,aAAqC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,EAAE;AAEjG,SAAS,UAAU,MAAkC;AACnD,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAY,aAAO;AAAA,IACxB,KAAK;AAAQ,aAAO;AAAA,IACpB,KAAK;AAAU,aAAO;AAAA,IACtB;AAAS,aAAO;AAAA,EAClB;AACF;AAEA,SAASC,SAAQ,KAAqB;AACpC,QAAM,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,QAAQ;AAC9C,QAAM,OAAO,KAAK,MAAM,KAAK,GAAK;AAClC,MAAI,OAAO,GAAI,QAAO,GAAG,IAAI;AAC7B,QAAM,MAAM,KAAK,MAAM,OAAO,EAAE;AAChC,MAAI,MAAM,GAAI,QAAO,GAAG,GAAG;AAC3B,SAAO,GAAG,KAAK,MAAM,MAAM,EAAE,CAAC;AAChC;AAEO,SAAS,iBAAqC;AACnD,QAAM,EAAE,OAAO,SAAS,IAAI,aAAa;AACzC,QAAM,EAAE,WAAW,IAAI;AACvB,QAAM,EAAE,UAAU,gBAAgB,eAAe,cAAc,OAAO,IAAI;AAE1E,QAAM,WAAWC,aAAY,YAAY;AACvC,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,QAAQ,IAAI,aAAa,OAAO;AACtC,YAAM,CAAC,MAAM,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,QACzC,MAAM,YAAY;AAAA,QAClB,yBAAyB,CAAC;AAAA,MAC5B,CAAC;AACD,eAAS,EAAE,MAAM,mBAAmB,UAAU,MAAM,SAAS,CAAC;AAAA,IAChE,QAAQ;AACN,eAAS,EAAE,MAAM,gBAAgB,SAAS,2BAA2B,CAAC;AAAA,IACxE;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ;AAAE,WAAK,SAAS;AAAA,IAAG;AAAA,EAClC,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAErB,EAAAC,UAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,WAAW,WAAW,IAAK,UAAS,EAAE,MAAM,cAAc,CAAC;AAAA,aAC1D,IAAI,aAAa,WAAW,IAAK,UAAS,EAAE,MAAM,gBAAgB,CAAC;AAAA,aACnE,IAAI,OAAQ,UAAS,EAAE,MAAM,sBAAsB,QAAQ,aAAa,CAAC;AAAA,EACpF,CAAC;AAED,QAAM,MAAM,CAAC,WAAmB,iBAAiB;AAEjD,MAAI,CAAC,QAAQ;AACX,WACE,gBAAAJ,MAACK,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,sBAAAN,MAACO,OAAA,EAAK,MAAI,MAAC,qBAAO;AAAA,MAClB,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,wCAA0B;AAAA,OAC3C;AAAA,EAEJ;AAEA,QAAM,YAAY,UAAU,MAAM,UAAU;AAC5C,QAAM,YAAY,UAAU,MAAM,UAAU;AAE5C,MAAI,cAAc,KAAK,eAAe,WAAW,GAAG;AAClD,WACE,gBAAAN,MAACK,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,sBAAAN,MAACO,OAAA,EAAK,MAAI,MAAC,qBAAO;AAAA,MAClB,gBAAAP,MAACO,OAAA,EAAK,eAAC;AAAA,MACP,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,oCAAsB;AAAA,MACrC,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,kEAAoD;AAAA,OACrE;AAAA,EAEJ;AAEA,QAAM,YAAa,UAAU,MAAM,OAAO,OAAK,EAAE,SAAS,MAAM,KAAK,CAAC;AACtE,QAAM,cAAe,UAAU,MAAM,OAAO,OAAK,EAAE,SAAS,QAAQ,KAAK,CAAC;AAC1E,QAAM,eAAgB,UAAU,MAAM,OAAO,OAAK,EAAE,SAAS,SAAS,KAAK,CAAC;AAC5E,QAAM,gBAAiB,UAAU,MAAM,OAAO,OAAK,EAAE,SAAS,UAAU,KAAK,CAAC;AAC9E,QAAM,gBAAiB,UAAU,MAAM,OAAO,OAAK,EAAE,SAAS,UAAU,KAAK,CAAC;AAE9E,QAAM,cAAc,CAAC,GAAG,SAAS,EAAE;AAAA,IAAK,CAAC,GAAG,OACzC,WAAW,EAAE,KAAK,SAAS,KAAK,MAAM,WAAW,EAAE,KAAK,SAAS,KAAK;AAAA,EACzE;AACA,QAAM,gBAAgB,CAAC,GAAG,WAAW,EAAE;AAAA,IAAK,CAAC,GAAG,MAC9C,IAAI,KAAK,EAAE,KAAK,SAAS,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,KAAK,SAAS,EAAE,QAAQ;AAAA,EAC5E;AAEA,WAAS,oBAAoB,IAAY,OAAe,OAAe;AACrE,UAAM,WAAW,cAAc,IAAI,EAAE;AACrC,WACE,gBAAAN,MAACM,OAAA,EACE;AAAA,UAAI,EAAE,IAAI,gBAAAN,MAACM,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,QAAI;AAAA,SAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,gBAAE;AAAA,MAC3D,WAAW,gBAAAP,MAACO,OAAA,EAAK,OAAM,SAAQ,oBAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,MAAS;AAAA,MACnE,IAAI,EAAE,IAAI,gBAAAN,MAACM,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,QAAM;AAAA,QAAG;AAAA,QAAM;AAAA,SAAC,IAAU,gBAAAN,MAACM,OAAA,EAAK,MAAI,MAAE;AAAA;AAAA,QAAM;AAAA,QAAG;AAAA,QAAM;AAAA,SAAC;AAAA,OAC7F;AAAA,EAEJ;AAEA,SACE,gBAAAN,MAACK,MAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,oBAAAL,MAACM,OAAA,EAAK;AAAA,sBAAAP,MAACO,OAAA,EAAK,MAAI,MAAC,qBAAO;AAAA,MAAO;AAAA,MAAE,gBAAAN,MAACM,OAAA,EAAK,UAAQ,MAAE;AAAA;AAAA,QAAU;AAAA,QAAS;AAAA,QAAU;AAAA,SAAM;AAAA,OAAO;AAAA,IAC3F,gBAAAP,MAACO,OAAA,EAAK,eAAC;AAAA,IAEN,oBAAoB,SAAS,SAAS,UAAU,MAAM;AAAA,IACtD,cAAc,IAAI,OAAO,KAAK,YAAY,MAAM,GAAG,EAAE,EAAE,IAAI,OAAK;AAC/D,YAAM,SAAS,QAAQ,EAAE,EAAE;AAC3B,YAAM,OAAO,EAAE,KAAK,KAAK,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG;AACtD,YAAM,OAAO,EAAE,KAAK;AACpB,YAAM,QAAQ,UAAU,IAAI;AAC5B,aACE,gBAAAN,MAACM,OAAA,EACE;AAAA,YAAI,MAAM,IAAI,gBAAAN,MAACM,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,UAAI;AAAA,WAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,gBAAE;AAAA,QAC/D;AAAA,QACA,QAAQ,gBAAAP,MAACO,OAAA,EAAK,OAAc,oBAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,QAAS;AAAA,QAChE,IAAI,MAAM,IAAI,gBAAAP,MAACO,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS,gBAAK,IAAU,gBAAAP,MAACO,OAAA,EAAM,gBAAK;AAAA,QACnE;AAAA,QAAM,QAAQ,gBAAAP,MAACO,OAAA,EAAK,OAAe,gBAAK,IAAU,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAE,gBAAK;AAAA,QACvE;AAAA,QAAK,gBAAAN,MAACM,OAAA,EAAK,UAAQ,MAAE;AAAA,YAAE,KAAK;AAAA,UAAY;AAAA,WAAQ;AAAA,QAChD,EAAE,KAAK,gBAAgB,KAAK,gBAAAN,MAACM,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,UAAG,EAAE,KAAK;AAAA,UAAc;AAAA,WAAU;AAAA,WAPrE,EAAE,EAQb;AAAA,IAEJ,CAAC;AAAA,IAEA,oBAAoB,WAAW,WAAW,YAAY,MAAM;AAAA,IAC5D,cAAc,IAAI,SAAS,KAAK,cAAc,MAAM,GAAG,EAAE,EAAE,IAAI,OAAK;AACnE,YAAM,SAAS,UAAU,EAAE,EAAE;AAC7B,YAAM,MAAM,EAAE,KAAK,QAAQ,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,QAAQ,SAAS,KAAK,QAAQ;AAChF,YAAM,UAAU,EAAE,KAAK;AACvB,YAAM,eAAe,YAAY,aAAa,QAAQ,YAAY,YAAY,UAAU;AACxF,aACE,gBAAAN,MAACM,OAAA,EACE;AAAA,YAAI,MAAM,IAAI,gBAAAN,MAACM,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,UAAI;AAAA,WAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,gBAAE;AAAA,QAC/D;AAAA,QACA,eAAe,gBAAAP,MAACO,OAAA,EAAK,OAAO,cAAc,oBAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,QAAS;AAAA,QAC9E,IAAI,MAAM,IAAI,gBAAAP,MAACO,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS,eAAI,IAAU,gBAAAP,MAACO,OAAA,EAAM,eAAI;AAAA,QACjE;AAAA,QAAK,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAE,UAAAL,SAAQ,EAAE,KAAK,SAAS,GAAE;AAAA,WALvC,EAAE,EAMb;AAAA,IAEJ,CAAC;AAAA,IAEA,oBAAoB,YAAY,YAAY,aAAa,MAAM;AAAA,IAC/D,cAAc,IAAI,UAAU,KAAK,aAAa,MAAM,GAAG,EAAE,EAAE,IAAI,OAAK;AACnE,YAAM,SAAS,WAAW,EAAE,EAAE;AAC9B,YAAM,OAAO,KAAK,MAAM,EAAE,KAAK,aAAa,GAAG;AAC/C,YAAM,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,WAAW;AAC/D,YAAM,OAAO,EAAE,KAAK,YAAY,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,SAAS,KAAK,QAAQ;AACzF,aACE,gBAAAD,MAACM,OAAA,EACE;AAAA,YAAI,MAAM,IAAI,gBAAAN,MAACM,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,UAAI;AAAA,WAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,gBAAE;AAAA,QAC/D;AAAA,QACA,EAAE,KAAK,gBAAgB,gBAAAP,MAACO,OAAA,EAAK,OAAM,OAAM,oBAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,QAAS;AAAA,QAC7E,IAAI,MAAM,IAAI,gBAAAP,MAACO,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS,gBAAK,IAAU,gBAAAP,MAACO,OAAA,EAAM,gBAAK;AAAA,QACnE;AAAA,QAAM,YAAY,gBAAAN,MAACM,OAAA,EAAK,OAAO,WAAY;AAAA;AAAA,UAAK;AAAA,WAAC,IAAU,gBAAAN,MAACM,OAAA,EAAK,UAAQ,MAAE;AAAA;AAAA,UAAK;AAAA,WAAC;AAAA,QACjF,EAAE,KAAK,iBAAiB,gBAAAP,MAACO,OAAA,EAAK,OAAM,OAAM,2BAAa;AAAA,WAN/C,EAAE,EAOb;AAAA,IAEJ,CAAC;AAAA,IAEA,oBAAoB,aAAa,aAAa,cAAc,MAAM;AAAA,IAClE,cAAc,IAAI,WAAW,KAAK,cAAc,MAAM,GAAG,EAAE,EAAE,IAAI,OAAK;AACrE,YAAM,SAAS,YAAY,EAAE,EAAE;AAC/B,YAAM,WAAW,EAAE,KAAK,aAAa,aAAa,QAAQ,EAAE,KAAK,aAAa,UAAU,WAAW;AACnG,YAAM,OAAO,EAAE,KAAK,YAAY,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,SAAS,KAAK,QAAQ;AACzF,aACE,gBAAAN,MAACM,OAAA,EACE;AAAA,YAAI,MAAM,IAAI,gBAAAN,MAACM,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,UAAI;AAAA,WAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,gBAAE;AAAA,QAC/D;AAAA,QACA,WAAW,gBAAAP,MAACO,OAAA,EAAK,OAAO,UAAU,oBAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,QAAS;AAAA,QACtE,IAAI,MAAM,IAAI,gBAAAP,MAACO,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS,gBAAK,IAAU,gBAAAP,MAACO,OAAA,EAAM,gBAAK;AAAA,QACnE;AAAA,QAAM,EAAE,KAAK,WAAW,gBAAAP,MAACO,OAAA,EAAK,OAAM,SAAQ,sBAAQ,IAAU,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,kBAAI;AAAA,WALzE,EAAE,EAMb;AAAA,IAEJ,CAAC;AAAA,IAEA,oBAAoB,aAAa,aAAa,cAAc,MAAM;AAAA,IAClE,cAAc,IAAI,WAAW,KAAK,cAAc,MAAM,GAAG,EAAE,EAAE,IAAI,OAAK;AACrE,YAAM,SAAS,YAAY,EAAE,EAAE;AAC/B,YAAM,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,SAAS,SAAS,KAAK,QAAQ;AAClF,YAAM,eAAe,EAAE,KAAK,YAAY,SAAS,UAAU,EAAE,KAAK,YAAY,QAAQ,QAAQ;AAC9F,aACE,gBAAAN,MAACM,OAAA,EACE;AAAA,YAAI,MAAM,IAAI,gBAAAN,MAACM,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,UAAI;AAAA,WAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,gBAAE;AAAA,QAC/D;AAAA,QACA,eAAe,gBAAAP,MAACO,OAAA,EAAK,OAAO,cAAc,oBAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,QAAS;AAAA,QAC9E,IAAI,MAAM,IAAI,gBAAAP,MAACO,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS,eAAI,IAAU,gBAAAP,MAACO,OAAA,EAAM,eAAI;AAAA,QACjE;AAAA,QAAM,eAAe,gBAAAP,MAACO,OAAA,EAAK,OAAO,cAAe,YAAE,KAAK,SAAQ,IAAU,gBAAAP,MAACO,OAAA,EAAK,UAAQ,MAAE,YAAE,KAAK,SAAQ;AAAA,WALjG,EAAE,EAMb;AAAA,IAEJ,CAAC;AAAA,IAEA,oBAAoB,iBAAiB,iBAAiB,eAAe,MAAM;AAAA,IAC3E,cAAc,IAAI,eAAe,KAAK,eAAe,MAAM,GAAG,CAAC,EAAE,IAAI,aAAW;AAC/E,YAAM,YAAY,UAAU,QAAQ,EAAE;AACtC,YAAM,OAAO,QAAQ,QAAQ,MAAM,GAAG,EAAE,KAAK,QAAQ,QAAQ,SAAS,KAAK,QAAQ;AACnF,aACE,gBAAAN,MAACM,OAAA,EACE;AAAA,YAAI,SAAS,IAAI,gBAAAN,MAACM,OAAA,EAAK,MAAI,MAAC,OAAM,SAAS;AAAA;AAAA,UAAI;AAAA,WAAC,IAAU,gBAAAP,MAACO,OAAA,EAAK,gBAAE;AAAA,QAClE;AAAA,QAAM,gBAAAN,MAACM,OAAA,EAAK,UAAQ,MAAE;AAAA;AAAA,UAAK;AAAA,UAAI,QAAQ,SAAS;AAAA,UAAO;AAAA,WAAS;AAAA,WAFxD,QAAQ,EAGnB;AAAA,IAEJ,CAAC;AAAA,KACH;AAEJ;;;ACjNA,SAAS,OAAAC,OAAK,QAAAC,QAAM,YAAAC,iBAAgB;AAwB5B,gBAAAC,OACA,QAAAC,cADA;AArBD,SAAS,aAAiC;AAC/C,QAAM,EAAE,OAAO,SAAS,IAAI,aAAa;AACzC,QAAM,EAAE,QAAQ,WAAW,IAAI;AAE/B,QAAM,WAAW,KAAK,IAAI,KAAK,QAAQ,OAAO,QAAQ,MAAM,EAAE;AAC9D,QAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,OAAO,SAAS,QAAQ,CAAC;AAElE,EAAAC,UAAS,CAAC,OAAO,SAAS;AACxB,QAAI,UAAU,KAAK;AACjB,eAAS,EAAE,MAAM,oBAAoB,MAAM,KAAK,IAAI,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC;AAAA,IACvF,WAAW,UAAU,KAAK;AACxB,eAAS,EAAE,MAAM,oBAAoB,MAAM,KAAK,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC;AAAA,IAC1E;AAAA,EACF,CAAC;AAED,QAAM,WAAW,aAAa;AAC9B,QAAM,OAAO,OAAO,MAAM,UAAU,WAAW,QAAQ;AAEvD,SACE,gBAAAD,OAACE,OAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,oBAAAF,OAACG,QAAA,EACC;AAAA,sBAAAJ,MAACI,QAAA,EAAK,MAAI,MAAC,iBAAG;AAAA,MAAQ;AAAA,MACtB,gBAAAH,OAACG,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAM,aAAa;AAAA,QAAE;AAAA,QAAE;AAAA,SAAW;AAAA,MAAQ;AAAA,MACzD,gBAAAJ,MAACI,QAAA,EAAK,MAAI,MAAE,iBAAO,QAAO;AAAA,MAAO,gBAAAJ,MAACI,QAAA,EAAK,UAAQ,MAAC,sBAAQ;AAAA,OAC1D;AAAA,IACA,gBAAAJ,MAACI,QAAA,EAAK,eAAC;AAAA,IAEN,OAAO,WAAW,IACjB,gBAAAJ,MAACI,QAAA,EAAK,UAAQ,MAAC,mCAAqB,IAEpC,gBAAAJ,MAACG,OAAA,EAAI,eAAc,UAChB,eAAK,IAAI,CAAC,OAAO,MAAM;AACtB,YAAM,MAAM,MAAM,UAAU,UAAU,gBAAAH,MAACI,QAAA,EAAK,OAAM,OAAM,oBAAC,IACrD,MAAM,UAAU,SAAS,gBAAAJ,MAACI,QAAA,EAAK,OAAM,UAAS,oBAAC,IAC/C,MAAM,UAAU,SAAS,gBAAAJ,MAACI,QAAA,EAAK,OAAM,SAAQ,oBAAC,IAC9C,gBAAAJ,MAACI,QAAA,EAAK,UAAQ,MAAC,oBAAC;AACpB,aACE,gBAAAH,OAACG,QAAA,EACE;AAAA;AAAA,QAAM;AAAA,QAAK;AAAA,QACX,MAAM,QAAQ,MAAM,GAAG,EAAE;AAAA,QACzB;AAAA,QAAK,gBAAAJ,MAACI,QAAA,EAAK,UAAQ,MAAE,gBAAM,MAAK;AAAA,WAHxB,CAIX;AAAA,IAEJ,CAAC,GACH;AAAA,KAEJ;AAEJ;;;ACpDA,SAAgB,eAAAC,oBAAmB;AACnC,SAAS,OAAAC,OAAK,QAAAC,QAAM,YAAAC,iBAAgB;AAmG5B,SAAM,OAAAC,OAAN,QAAAC,cAAA;AA5FD,SAAS,WAA+B;AAC7C,QAAM,EAAE,OAAO,SAAS,IAAI,aAAa;AACzC,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,EAAE,UAAU,aAAa,QAAQ,IAAI;AAE3C,QAAM,cAAcC,aAAY,OAAO,aAAqB;AAC1D,aAAS,EAAE,MAAM,oBAAoB,MAAM,QAAQ,SAAS,SAAS,CAAC;AACtE,aAAS,EAAE,MAAM,kBAAkB,QAAQ,GAAG,CAAC;AAC/C,aAAS,EAAE,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAEpD,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,UAAU,IAAI,cAAc,OAAO;AACzC,YAAM,QAAQ,IAAI,aAAa,OAAO;AAEtC,YAAM,CAAC,WAAW,UAAU,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,QACpD,QAAQ,eAAe,EAAE,OAAO,GAAG,CAAC;AAAA,QACpC,QAAQ,cAAc,EAAE,OAAO,EAAE,CAAC;AAAA,QAClC,MAAM,YAAY;AAAA,MACpB,CAAC;AAED,YAAM,eAAyB,CAAC;AAEhC,UAAI,UAAU,SAAS,GAAG;AACxB,qBAAa,KAAK,wBAAwB,UAAU;AAAA,UAAI,OACtD,KAAK,EAAE,QAAQ,KAAK,EAAE,IAAI,GAAG,EAAE,OAAO,WAAW,EAAE,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;AAAA,QAC5E,EAAE,KAAK,IAAI,CAAC;AAAA,MACd;AAEA,UAAI,SAAS,SAAS,GAAG;AACvB,qBAAa,KAAK,uBAAuB,SAAS;AAAA,UAAI,OACpD,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM;AAAA,QAC7B,EAAE,KAAK,IAAI,CAAC;AAAA,MACd;AAEA,YAAM,YAAY,KAAK,MAAM,OAAO,OAAK,EAAE,SAAS,MAAM;AAC1D,YAAM,YAAY,UACf,OAAO,OAAK,EAAE,QAAQ,eAAe,EAAE,SAAS,EAAE,KAAK,cAAc,cAAc,EAAE,KAAK,cAAc,OAAO,EAC/G,MAAM,GAAG,EAAE;AACd,UAAI,UAAU,SAAS,GAAG;AACxB,qBAAa,KAAK,uBAAuB,UAAU;AAAA,UAAI,OACrD,KAAM,EAAE,KAA6C,IAAI,KAAM,EAAE,KAA+B,SAAS;AAAA,QAC3G,EAAE,KAAK,IAAI,CAAC;AAAA,MACd;AAEA,YAAM,eAAe,KAAK,MAAM,OAAO,OAAK,EAAE,SAAS,SAAS,EAAE,MAAM,GAAG,CAAC;AAC5E,UAAI,aAAa,SAAS,GAAG;AAC3B,qBAAa,KAAK,wBAAwB,aAAa;AAAA,UAAI,OACzD,KAAM,EAAE,KAAqD,WAAW,KAAK,KAAK,MAAO,EAAE,KAAgC,aAAa,GAAG,CAAC;AAAA,QAC9I,EAAE,KAAK,IAAI,CAAC;AAAA,MACd;AAEA,YAAM,eAAe,aAAa,SAAS,IACvC,aAAa,KAAK,MAAM,IACxB;AAEJ,YAAM,SAAS,MAAM,cAAc;AAAA,QACjC,cAAc;AAAA;AAAA;AAAA,EAAyM,YAAY;AAAA,QACnO,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,aAAa;AAAA,MACf,CAAC;AAED,UAAI,OAAO,SAAS;AAClB,iBAAS,EAAE,MAAM,oBAAoB,MAAM,aAAa,SAAS,OAAO,QAAQ,CAAC;AAAA,MACnF,OAAO;AACL,iBAAS,EAAE,MAAM,oBAAoB,MAAM,aAAa,SAAS,OAAO,SAAS,4BAA4B,CAAC;AAAA,MAChH;AAAA,IACF,SAAS,KAAK;AACZ,eAAS,EAAE,MAAM,oBAAoB,MAAM,aAAa,SAAS,UAAU,eAAe,QAAQ,IAAI,UAAU,SAAS,GAAG,CAAC;AAAA,IAC/H,UAAE;AACA,eAAS,EAAE,MAAM,oBAAoB,SAAS,MAAM,CAAC;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,EAAAC,UAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,QAAS;AAEb,QAAI,IAAI,UAAU,YAAY,KAAK,EAAE,SAAS,GAAG;AAC/C,WAAK,YAAY,YAAY,KAAK,CAAC;AAAA,IACrC,WAAW,IAAI,QAAQ;AACrB,eAAS,EAAE,MAAM,kBAAkB,QAAQ,GAAG,CAAC;AAAA,IACjD,WAAW,IAAI,aAAa,IAAI,QAAQ;AACtC,eAAS,EAAE,MAAM,kBAAkB,QAAQ,YAAY,MAAM,GAAG,EAAE,EAAE,CAAC;AAAA,IACvE,WAAW,SAAS,CAAC,IAAI,QAAQ,CAAC,IAAI,MAAM;AAC1C,eAAS,EAAE,MAAM,kBAAkB,QAAQ,cAAc,MAAM,CAAC;AAAA,IAClE;AAAA,EACF,CAAC;AAED,MAAI,CAAC,cAAc,GAAG;AACpB,WACE,gBAAAF,OAACG,OAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,sBAAAH,OAACI,QAAA,EAAK;AAAA,wBAAAL,MAACK,QAAA,EAAK,MAAI,MAAC,kBAAI;AAAA,QAAO;AAAA,QAAE,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,+BAAiB;AAAA,SAAO;AAAA,MACrE,gBAAAL,MAACK,QAAA,EAAK,eAAC;AAAA,MACP,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,oCAAsB;AAAA,MACrC,gBAAAJ,OAACI,QAAA,EAAK;AAAA;AAAA,QAAE,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,mBAAK;AAAA,QAAO;AAAA,QAAC,gBAAAL,MAACK,QAAA,EAAK,MAAI,MAAC,eAAC;AAAA,QAAO;AAAA,QAAC,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,8DAAgD;AAAA,SAAO;AAAA,MAC9H,gBAAAJ,OAACI,QAAA,EAAK;AAAA;AAAA,QAAE,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,oBAAM;AAAA,QAAO;AAAA,QAAC,gBAAAL,MAACK,QAAA,EAAK,MAAI,MAAC,+BAAiB;AAAA,QAAO;AAAA,QAAC,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,kCAAoB;AAAA,SAAO;AAAA,OACrH;AAAA,EAEJ;AAEA,SACE,gBAAAJ,OAACG,OAAA,EAAI,eAAc,UAAS,UAAU,GACpC;AAAA,oBAAAH,OAACI,QAAA,EAAK;AAAA,sBAAAL,MAACK,QAAA,EAAK,MAAI,MAAC,kBAAI;AAAA,MAAO;AAAA,MAAE,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,+BAAiB;AAAA,OAAO;AAAA,IACrE,gBAAAL,MAACK,QAAA,EAAK,eAAC;AAAA,IAEN,SAAS,WAAW,KAAK,CAAC,WACzB,gBAAAJ,OAACG,OAAA,EAAI,eAAc,UACjB;AAAA,sBAAAJ,MAACK,QAAA,EAAK,UAAQ,MAAC,uEAAyD;AAAA,MACxE,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,2EAA6D;AAAA,MAC5E,gBAAAL,MAACK,QAAA,EAAK,eAAC;AAAA,OACT;AAAA,IAGD,SAAS,IAAI,CAAC,KAAK,QAClB,gBAAAL,MAACI,OAAA,EAAc,eAAc,UAAS,cAAc,GACjD,cAAI,SAAS,SACZ,gBAAAH,OAACI,QAAA,EAAK;AAAA;AAAA,MAAE,gBAAAL,MAACK,QAAA,EAAK,MAAI,MAAC,OAAM,SAAQ,kBAAI;AAAA,MAAO;AAAA,MAAE,IAAI;AAAA,OAAQ,IAE1D,gBAAAL,MAACI,OAAA,EAAI,eAAc,UACjB,0BAAAH,OAACI,QAAA,EAAK;AAAA;AAAA,MAAE,gBAAAL,MAACK,QAAA,EAAK,MAAI,MAAC,mBAAK;AAAA,MAAO;AAAA,MAAE,IAAI,QAAQ,MAAM,GAAG,GAAG;AAAA,MAAG,IAAI,QAAQ,SAAS,MAAM,QAAQ;AAAA,OAAG,GACpG,KANM,GAQV,CACD;AAAA,IAEA,WAAW,gBAAAJ,OAACI,QAAA,EAAK;AAAA;AAAA,MAAE,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,yBAAW;AAAA,OAAO;AAAA,IAErD,gBAAAL,MAACI,OAAA,EAAI,UAAU,GAAG;AAAA,IAElB,gBAAAJ,MAACI,OAAA,EAAI,aAAY,SAAQ,aAAY,SAAQ,UAAU,GACrD,0BAAAH,OAACI,QAAA,EACE;AAAA,qBAAe,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,+BAAiB;AAAA,MAChD,gBAAAL,MAACK,QAAA,EAAK,MAAI,MAAC,OAAM,SAAQ,eAAC;AAAA,OAC5B,GACF;AAAA,IACA,gBAAAL,MAACK,QAAA,EAAK,UAAQ,MAAC,qCAAuB;AAAA,KACxC;AAEJ;;;AdsEqC,gBAAAC,OAWjC,QAAAC,cAXiC;AA/LrC,IAAM,aAA8B,CAAC,YAAY,UAAU,SAAS,cAAc,SAAS,MAAM;AAEjG,SAAS,aAAa,EAAE,QAAQ,GAET;AACrB,QAAM,EAAE,OAAO,SAAS,IAAI,aAAa;AACzC,QAAM,EAAE,KAAK,IAAI,OAAO;AACxB,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAS,KAAK;AAClD,QAAM,cAAc,OAAO,QAAQ;AACnC,cAAY,UAAU;AACtB,QAAM,WAAW,OAAO,KAAK;AAC7B,WAAS,UAAU;AAEnB,QAAM,aAAa,KAAK,iBAAiB,oBAAoB,QAAW,IAAI,CAAC,GAAG,YAAY;AAE5F,QAAM,aAAaC,aAAY,YAAY;AACzC,QAAI,CAAC,WAAW,UAAU,EAAG;AAC7B,QAAI;AACF,YAAM,MAAM,MAAM,SAAS,YAAY,OAAO;AAC9C,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,kBAAY,QAAQ,EAAE,MAAM,oBAAoB,QAAQ,OAAO,CAAC;AAAA,IAClE,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,gBAAgBA,aAAY,YAAY;AAC5C,QAAI;AACF,YAAM,MAAM,iBAAiB,oBAAoB,QAAW,IAAI,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC;AACvF,YAAM,UAAU,YAAY,KAAK,UAAU,SAAS,QAAQ,aAAa,MAAM,CAAC,GAAG,OAAO;AAAA,IAC5F,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,kBAAkBA,aAAY,OAAO,WAAmD;AAC5F,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,YAAY,YAAY,OAAO;AAErC,UAAI,CAAC,SAAS,QAAQ,kBAAkB;AACtC,cAAM,UAAU,WAAW;AAC3B,oBAAY,QAAQ,EAAE,MAAM,yBAAyB,aAAa,KAAK,CAAC;AACxE,cAAM,YAAY,UAAU,kBAAkB;AAC9C,YAAI,UAAU,SAAS,GAAG;AACxB,sBAAY,QAAQ,EAAE,MAAM,gBAAgB,UAAU,UAAU,CAAC;AAAA,QACnE;AAAA,MACF;AAEA,YAAM,eAAe,SAAS,QAAQ,MAAM,cAAc,IAAI,OAAK,EAAE,IAAI;AACzE,YAAM,cAAc,MAAM,UAAU,cAAc,QAAQ,EAAE,cAAc,aAAa,SAAS,QAAQ,MAAM,SAAS,CAAC;AAExH,UAAI,YAAY,SAAS,GAAG;AAC1B,oBAAY,QAAQ,EAAE,MAAM,gBAAgB,UAAU,YAAY,CAAC;AAAA,MACrE;AAEA,UAAI;AACF,cAAM,eAAe,MAAM,UAAU,gBAAgB;AACrD,oBAAY,QAAQ,EAAE,MAAM,qBAAqB,QAAQ,aAAa,CAAC;AAAA,MACzE,QAAQ;AAAA,MAAiB;AAAA,IAC3B,SAAS,OAAO;AACd,kBAAY,QAAQ,EAAE,MAAM,gBAAgB,SAAS,qBAAqB,iBAAiB,QAAQ,MAAM,UAAU,SAAS,GAAG,CAAC;AAAA,IAClI;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAeA,aAAY,YAAY;AAC3C,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,QAAQ,WAAW,YAAY;AACrC,kBAAY,QAAQ;AAAA,QAClB,MAAM;AAAA,QACN,OAAO,MAAM,IAAI,OAAK;AACpB,gBAAM,OAAO,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,aAAa,MAAM,EAAE,MAAM,QAAQ,EAAE,QAAQ,cAAc,EAAE,cAAc,QAAQ,EAAE,QAAQ,eAAe,EAAE,eAAe,WAAW,EAAE,UAAU;AAC5L,iBAAO,EAAE,WAAW,EAAE,GAAG,MAAM,UAAU,EAAE,SAAS,IAAI;AAAA,QAC1D,CAAC;AAAA,MACH,CAAC;AAAA,IACH,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAoBA,aAAY,YAAY;AAChD,QAAI;AACF,YAAM,UAAU,oBAAoB,QAAW,IAAI;AACnD,YAAM,aAAa,iBAAiB,OAAO;AAC3C,YAAM,WAAW,KAAK;AACtB,YAAM,aAAa,WAAW,iBAAiB;AAC/C,kBAAY,QAAQ;AAAA,QAClB,MAAM;AAAA,QACN,YAAY,WAAW,IAAI,OAAK;AAC9B,gBAAM,OAAO,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,WAAW,YAAY,EAAE,YAAY,QAAQ,EAAE,QAAQ,eAAe,EAAE,SAAS,QAAQ,WAAW,EAAE,UAAU;AACtJ,iBAAO,EAAE,WAAW,EAAE,GAAG,MAAM,UAAU,EAAE,SAAS,IAAI;AAAA,QAC1D,CAAC;AAAA,MACH,CAAC;AAAA,IACH,QAAQ;AAAA,IAAe;AAAA,EACzB,GAAG,CAAC,CAAC;AAEL,EAAAC,WAAU,MAAM;AACd,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,kBAAkB;AAEvB,UAAM,gBAAgB,iBAAiB;AACvC,kBAAc,QAAQ,KAAK;AAC3B,kBAAc,qBAAqB;AAAA,MACjC,YAAY,CAAC,YAAoB;AAC/B,oBAAY,QAAQ,EAAE,MAAM,gBAAgB,QAAQ,CAAC;AAAA,MACvD;AAAA,MACA,OAAO,CAAC,OAAe,YAAoB;AACzC,cAAM,QAAO,oBAAI,KAAK,GAAE,mBAAmB,SAAS,EAAE,QAAQ,OAAO,MAAM,WAAW,QAAQ,WAAW,QAAQ,UAAU,CAAC;AAC5H,oBAAY,QAAQ,EAAE,MAAM,iBAAiB,QAAQ,EAAE,MAAM,WAAW,MAAM,EAAE,MAAM,OAAO,QAAQ,GAAG,WAAW,KAAK,IAAI,EAAE,EAAE,CAAC;AAAA,MACnI;AAAA,MACA,SAAS,CAAC,UAAwB;AAChC,cAAM,SAA+C,EAAE,MAAM,qBAAqB,SAAS,MAAM,SAAS,UAAU,MAAM,SAAS;AACnI,YAAI,MAAM,SAAS,OAAW,CAAC,OAAe,OAAO,MAAM;AAC3D,YAAI,MAAM,eAAe,OAAW,CAAC,OAAe,aAAa,MAAM;AACvE,oBAAY,QAAQ,MAAM;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,UAAM,eAAe,CAAC,WAAyB;AAC7C,kBAAY,QAAQ,EAAE,MAAM,iBAAiB,OAAO,CAAC;AACrD,UAAI,OAAO,SAAS,mBAAmB,OAAO,KAAK,QAAQ;AACzD,aAAK,gBAAgB,OAAO,KAAK,MAAM;AAAA,MACzC;AAAA,IACF;AAEA,UAAM,YAAY,MAAM;AACtB,YAAM,IAAI,SAAS,QAAQ;AAC3B,aAAO;AAAA,QACL,YAAY,EAAE,GAAG,EAAE,YAAY,mBAAmB,EAAE,GAAG,EAAE,WAAW,kBAAkB,EAAE;AAAA,QACxF,aAAa,EAAE,GAAG,EAAE,YAAY;AAAA,QAChC,gBAAgB,EAAE,GAAG,EAAE,eAAe;AAAA,MACxC;AAAA,IACF;AAEA,YAAQ,cAAc,SAAS;AAE/B,WAAO,MAAM;AACX,oBAAc,kBAAkB;AAChC,oBAAc,QAAQ,SAAS;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,iBAAiB,cAAc,iBAAiB,CAAC;AAE1E,EAAAA,WAAU,MAAM;AACd,UAAM,WAAW,YAAY,MAAM;AACjC,kBAAY,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAAA,IAC5D,GAAG,GAAI;AACP,WAAO,MAAM,cAAc,QAAQ;AAAA,EACrC,GAAG,CAAC,CAAC;AAEL,EAAAC,UAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,WAAY;AAChB,QAAI,MAAM,SAAS,WAAW,MAAM,WAAW,cAAc,MAAO;AACpE,QAAI,MAAM,SAAS,gBAAgB,MAAM,gBAAgB,cAAc,MAAO;AAG9E,QAAI,MAAM,SAAS,QAAQ;AACzB,UAAI,IAAI,KAAK;AACX,cAAM,eAAe,WAAW,QAAQ,MAAM,IAAI;AAClD,cAAM,aAAa,eAAe,KAAK,WAAW;AAClD,iBAAS,EAAE,MAAM,YAAY,MAAM,WAAW,SAAS,KAAK,WAAW,CAAC;AAAA,MAC1E;AACA;AAAA,IACF;AAEA,QAAI,UAAU,OAAO,IAAI,QAAQ;AAC/B,WAAK;AACL,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,IAAI,KAAK;AACX,YAAM,eAAe,WAAW,QAAQ,MAAM,IAAI;AAClD,YAAM,YAAY,gBAAgB,KAAK,eAAe,KAAK,WAAW,SAAS;AAC/E,eAAS,EAAE,MAAM,YAAY,MAAM,WAAW,SAAS,KAAK,WAAW,CAAC;AACxE;AAAA,IACF;AAEA,QAAI,UAAU,KAAK;AAAE,oBAAc,IAAI;AAAG;AAAA,IAAQ;AAClD,QAAI,UAAU,KAAK;AAAE,eAAS,EAAE,MAAM,YAAY,MAAM,SAAS,CAAC;AAAG;AAAA,IAAQ;AAC7E,QAAI,UAAU,KAAK;AAAE,eAAS,EAAE,MAAM,YAAY,MAAM,QAAQ,CAAC;AAAG;AAAA,IAAQ;AAC5E,QAAI,UAAU,KAAK;AAAE,eAAS,EAAE,MAAM,YAAY,MAAM,QAAQ,CAAC;AAAG,WAAK,aAAa;AAAG;AAAA,IAAQ;AACjG,QAAI,UAAU,KAAK;AAAE,eAAS,EAAE,MAAM,YAAY,MAAM,aAAa,CAAC;AAAG,WAAK,kBAAkB;AAAG;AAAA,IAAQ;AAC3G,QAAI,UAAU,KAAK;AAAE,eAAS,EAAE,MAAM,YAAY,MAAM,SAAS,CAAC;AAAG;AAAA,IAAQ;AAC7E,QAAI,UAAU,KAAK;AAAE,eAAS,EAAE,MAAM,YAAY,MAAM,OAAO,CAAC;AAAG;AAAA,IAAQ;AAE3E,QAAI,MAAM,SAAS,WAAW,MAAM,SAAS,SAAU;AAEvD,QAAI,UAAU,IAAK,UAAS,EAAE,MAAM,UAAU,CAAC;AAC/C,QAAI,UAAU,IAAK,UAAS,EAAE,MAAM,YAAY,CAAC;AACjD,QAAI,UAAU,IAAK,UAAS,EAAE,MAAM,YAAY,CAAC;AAAA,EACnD,CAAC;AAED,MAAI;AACJ,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AAAY,sBAAgB,gBAAAL,MAAC,gBAAa;AAAI;AAAA,IACnD,KAAK;AAAS,sBAAgB,gBAAAA,MAAC,aAAU;AAAI;AAAA,IAC7C,KAAK;AAAS,sBAAgB,gBAAAA,MAAC,aAAU;AAAI;AAAA,IAC7C,KAAK;AAAc,sBAAgB,gBAAAA,MAAC,kBAAe;AAAI;AAAA,IACvD,KAAK;AAAU,sBAAgB,gBAAAA,MAAC,kBAAe;AAAI;AAAA,IACnD,KAAK;AAAU,sBAAgB,gBAAAA,MAAC,cAAW;AAAI;AAAA,IAC/C,KAAK;AAAQ,sBAAgB,gBAAAA,MAAC,YAAS;AAAI;AAAA,IAC3C;AAAS,sBAAgB,gBAAAA,MAAC,gBAAa;AAAA,EACzC;AAEA,SACE,gBAAAC,OAACK,OAAA,EAAI,eAAc,UAAS,QAAQ,QAAQ,OAAO,QAAQ,IACzD;AAAA,oBAAAN,MAAC,UAAO;AAAA,IACR,gBAAAA,MAAC,gBAAa;AAAA,IACd,gBAAAA,MAACM,OAAA,EAAI,UAAU,GAAG,eAAc,UAAS,UAAS,UAC/C,uBACC,gBAAAN,MAAC,gBAAa,SAAS,MAAM;AAAE,oBAAc,KAAK;AAAG,WAAK,cAAc;AAAA,IAAG,GAAG,IAE9E,eAEJ;AAAA,IACA,gBAAAA,MAAC,UAAO;AAAA,KACV;AAEJ;AASO,SAAS,IAAI,EAAE,QAAQ,GAAiC;AAC7D,SACE,gBAAAA,MAAC,qBACC,0BAAAA,MAAC,gBAAa,SAAkB,GAClC;AAEJ;;;AD3PO,IAAM,uBAAN,MAA2B;AAAA,EACxB,MAAuB;AAAA,EACvB,gBAAyD;AAAA,EACzD,cAAkC;AAAA,EAE1C,MAAM,QAAuB;AAC3B,SAAK,MAAM;AAAA,MACTO,QAAM,cAAc,KAAK;AAAA,QACvB,SAAS,CAAC,SAAS,cAAc;AAC/B,eAAK,gBAAgB;AACrB,eAAK,cAAc;AAAA,QACrB;AAAA,MACF,CAAC;AAAA,MACD,EAAE,aAAa,MAAM;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,OAAa;AACX,QAAI,KAAK,KAAK;AACZ,WAAK,IAAI,QAAQ;AACjB,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AAAA,EAEA,mBAAmB,QAA4B;AAC7C,SAAK,gBAAgB,MAAM;AAAA,EAC7B;AAAA,EAEA,iBAIE;AACA,QAAI,KAAK,YAAa,QAAO,KAAK,YAAY;AAC9C,WAAO;AAAA,MACL,YAAY,EAAE,eAAe,MAAM,aAAa,OAAO,mBAAmB,EAAE,UAAU,MAAM,YAAY,MAAM,WAAW,MAAM,eAAe,MAAM,YAAY,MAAM,iBAAiB,KAAK,GAAG,qBAAqB,GAAG;AAAA,MACvN,aAAa,EAAE,UAAU,MAAM,OAAO,MAAM,gBAAgB,GAAG,WAAW,MAAQ,SAAS,MAAM,WAAW,KAAK;AAAA,MACjH,gBAAgB,EAAE,UAAU,IAAI,MAAM,IAAI,QAAQ,GAAG;AAAA,IACvD;AAAA,EACF;AACF;","names":["React","useState","useEffect","useCallback","Box","useInput","jsx","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","Box","Text","jsx","jsxs","Box","Text","useEffect","Box","Text","useInput","pc","jsx","jsxs","useEffect","useInput","Box","Text","riskColor","useCallback","Box","Text","useInput","Fragment","jsx","jsxs","useCallback","useInput","Box","Text","useCallback","Box","Text","useInput","Fragment","jsx","jsxs","useCallback","useInput","Box","Text","useEffect","useCallback","Box","Text","useInput","jsx","jsxs","timeAgo","useCallback","useEffect","useInput","Box","Text","Box","Text","useInput","jsx","jsxs","useInput","Box","Text","useCallback","Box","Text","useInput","jsx","jsxs","useCallback","useInput","Box","Text","jsx","jsxs","useState","useCallback","useEffect","useInput","Box","React"]}
|
package/dist/cli/yolo-daemon.js
CHANGED
package/dist/index.js
CHANGED