{"version":3,"sources":["../../src/react/index.ts","../../src/react/context.tsx","../../src/react/theme.ts","../../src/react/hooks.ts","../../src/react/utils.ts","../../src/react/components/LacHub.tsx","../../src/react/components/LacSprintBoard.tsx","../../src/react/components/LacFeatureCard.tsx","../../src/react/components/MarkdownField.tsx","../../src/react/components/LacGuide.tsx","../../src/react/components/LacDecisionLog.tsx","../../src/react/components/LacSuccessBoard.tsx","../../src/react/components/LacSearch.tsx","../../src/react/components/LacHelpPanel.tsx","../../src/react/components/LacNodeField.tsx","../../src/react/components/LacRoleView.tsx","../../src/react/components/LacHelpButton.tsx","../../src/react/components/LacAbout.tsx","../../src/react/components/LacInheritedHelp.tsx"],"sourcesContent":["export type { LacNode, LacGraph, LacIndex, LacConfig, LacStatus } from '../schema.js'\nexport type { LacDataExport } from '../types.js'\n\nexport { LacDataProvider, useLacContext } from './context.js'\nexport type { LacDataProviderProps } from './context.js'\n\nexport { useLacData, useLacNode, useLacNodeWithParent, useLacNodesByType, useLacNodesByStatus, useLacNodesByDomain, useLacSearch, useLacSprint, useLacSuccessCriteria } from './hooks.js'\n\n\n\nexport { LacHub } from './components/LacHub.js'\nexport type { LacHubProps, HubTab } from './components/LacHub.js'\n\nexport { LacFeatureCard } from './components/LacFeatureCard.js'\nexport type { LacFeatureCardProps } from './components/LacFeatureCard.js'\n\nexport { LacSprintBoard } from './components/LacSprintBoard.js'\nexport type { LacSprintBoardProps } from './components/LacSprintBoard.js'\n\nexport { LacDecisionLog } from './components/LacDecisionLog.js'\nexport type { LacDecisionLogProps } from './components/LacDecisionLog.js'\n\nexport { LacSuccessBoard } from './components/LacSuccessBoard.js'\nexport type { LacSuccessBoardProps } from './components/LacSuccessBoard.js'\n\nexport { LacSearch } from './components/LacSearch.js'\nexport type { LacSearchProps } from './components/LacSearch.js'\n\nexport { LacGuide } from './components/LacGuide.js'\nexport type { LacGuideProps } from './components/LacGuide.js'\n\nexport { LacHelpPanel } from './components/LacHelpPanel.js'\nexport type { LacHelpPanelProps } from './components/LacHelpPanel.js'\n\nexport { LacNodeField } from './components/LacNodeField.js'\nexport type { LacNodeFieldProps, LacNodeFieldAs } from './components/LacNodeField.js'\n\nexport { LacRoleView, LacRoleSwitcher, ROLE_META } from './components/LacRoleView.js'\nexport type { LacRoleViewProps, LacRoleSwitcherProps, AudienceRole } from './components/LacRoleView.js'\n\nexport { LacHelpButton } from './components/LacHelpButton.js'\nexport type { LacHelpButtonProps } from './components/LacHelpButton.js'\n\nexport { LacAbout } from './components/LacAbout.js'\nexport type { LacAboutProps } from './components/LacAbout.js'\n\nexport { LacInheritedHelp, LacInheritedHelpButton } from './components/LacInheritedHelp.js'\nexport type { LacInheritedHelpProps, LacInheritedHelpButtonProps } from './components/LacInheritedHelp.js'\n\nexport { MarkdownField } from './components/MarkdownField.js'\n\nexport type { LacTheme, LacThemeMode } from './theme.js'\nexport { DARK_THEME, LIGHT_THEME, resolveTheme } from './theme.js'\n","import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport type { LacGraph } from '../schema.js'\nimport type { LacTheme, LacThemeMode } from './theme.js'\nimport { resolveTheme } from './theme.js'\n\ninterface LacContextValue {\n  graph: LacGraph | null\n  loading: boolean\n  error: string | null\n  theme: LacTheme\n  refetch: () => void\n}\n\nconst LacContext = createContext<LacContextValue | null>(null)\n\nexport interface LacDataProviderProps {\n  dataUrl?: string\n  data?: LacGraph\n  children: React.ReactNode\n  theme?: LacThemeMode | Partial<LacTheme>\n  themeOverrides?: Partial<LacTheme>\n}\n\nexport function LacDataProvider({ dataUrl, data: inlineData, children, theme = 'dark', themeOverrides }: LacDataProviderProps) {\n  const [graph, setGraph] = useState<LacGraph | null>(inlineData ?? null)\n  const [loading, setLoading] = useState(!inlineData && !!dataUrl)\n  const [error, setError] = useState<string | null>(null)\n\n  const resolvedTheme = useMemo(() => {\n    if (typeof theme === 'string') return resolveTheme(theme, themeOverrides)\n    return resolveTheme('dark', { ...theme, ...themeOverrides })\n  }, [theme, themeOverrides])\n\n  const fetchGraph = useCallback(async () => {\n    if (!dataUrl) return\n    setLoading(true)\n    setError(null)\n    try {\n      const res = await fetch(dataUrl)\n      if (!res.ok) throw new Error(`HTTP ${res.status} loading ${dataUrl}. Run \"lac build\" first.`)\n      setGraph(await res.json() as LacGraph)\n    } catch (e) {\n      setError(e instanceof Error ? e.message : String(e))\n    } finally {\n      setLoading(false)\n    }\n  }, [dataUrl])\n\n  useEffect(() => {\n    // If inline data is provided, use it directly — no fetch\n    if (inlineData) { setGraph(inlineData); setLoading(false); return }\n    if (dataUrl) fetchGraph()\n  }, [inlineData, dataUrl, fetchGraph])\n\n  const value = useMemo(\n    () => ({ graph, loading, error, theme: resolvedTheme, refetch: fetchGraph }),\n    [graph, loading, error, resolvedTheme, fetchGraph]\n  )\n\n  return <LacContext.Provider value={value}>{children}</LacContext.Provider>\n}\n\nexport function useLacContext(): LacContextValue {\n  const ctx = useContext(LacContext)\n  if (!ctx) throw new Error('useLacContext must be called inside a <LacDataProvider>.')\n  return ctx\n}\n","export interface LacTheme {\n  bg: string\n  surface: string\n  surfaceHover: string\n  border: string\n  text: string\n  textMuted: string\n  accent: string\n  accentBg: string\n  fontFamily: string\n  fontMono: string\n  borderRadius: string\n  borderRadiusSm: string\n}\n\nexport type LacThemeMode = 'dark' | 'light' | 'system'\n\nexport const DARK_THEME: LacTheme = {\n  bg: '#0f0f0f',\n  surface: '#1a1a1a',\n  surfaceHover: '#222222',\n  border: '#2a2a2a',\n  text: '#e0e0e0',\n  textMuted: '#888888',\n  accent: '#c4a255',\n  accentBg: 'rgba(196,162,85,0.12)',\n  fontFamily: 'system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif',\n  fontMono: '\"Fira Code\",\"JetBrains Mono\",Consolas,\"Courier New\",monospace',\n  borderRadius: '8px',\n  borderRadiusSm: '4px',\n}\n\nexport const LIGHT_THEME: LacTheme = {\n  bg: '#ffffff',\n  surface: '#f7f7f7',\n  surfaceHover: '#eeeeee',\n  border: '#e0e0e0',\n  text: '#1a1a1a',\n  textMuted: '#666666',\n  accent: '#a07830',\n  accentBg: 'rgba(160,120,48,0.10)',\n  fontFamily: 'system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif',\n  fontMono: '\"Fira Code\",\"JetBrains Mono\",Consolas,\"Courier New\",monospace',\n  borderRadius: '8px',\n  borderRadiusSm: '4px',\n}\n\nexport function resolveTheme(mode: LacThemeMode, overrides?: Partial<LacTheme>): LacTheme {\n  let base: LacTheme\n  if (mode === 'system') {\n    base = typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches\n      ? DARK_THEME : LIGHT_THEME\n  } else {\n    base = mode === 'dark' ? DARK_THEME : LIGHT_THEME\n  }\n  return overrides ? { ...base, ...overrides } : base\n}\n","import { useMemo } from 'react'\nimport type { LacNode, LacStatus } from '../schema.js'\nimport { useLacContext } from './context.js'\nimport { nodeMatchesQuery } from './utils.js'\n\nexport function useLacData() {\n  const { graph, loading, error, theme, refetch } = useLacContext()\n  return {\n    graph,\n    nodes: graph?.nodes ?? [],\n    edges: graph?.edges ?? [],\n    domains: graph?.meta.domains ?? [],\n    loading,\n    error,\n    theme,\n    refetch,\n  }\n}\n\nexport function useLacNode(id: string): LacNode | undefined {\n  const { graph } = useLacContext()\n  return useMemo(() => graph?.nodes.find((n) => n.id === id), [graph, id])\n}\n\nexport function useLacNodesByType(type: string): LacNode[] {\n  const { graph } = useLacContext()\n  return useMemo(() => (graph?.nodes ?? []).filter((n) => n.type === type), [graph, type])\n}\n\nexport function useLacNodesByStatus(status: LacStatus): LacNode[] {\n  const { graph } = useLacContext()\n  return useMemo(() => (graph?.nodes ?? []).filter((n) => n.status === status), [graph, status])\n}\n\nexport function useLacNodesByDomain(domain: string): LacNode[] {\n  const { graph } = useLacContext()\n  return useMemo(() => (graph?.nodes ?? []).filter((n) => n.domain === domain), [graph, domain])\n}\n\nexport function useLacSearch(query: string): LacNode[] {\n  const { graph } = useLacContext()\n  return useMemo(() => {\n    if (!query.trim()) return []\n    return (graph?.nodes ?? []).filter((n) => nodeMatchesQuery(n, query))\n  }, [graph, query])\n}\n\nexport function useLacSprint(): LacNode[] {\n  const { graph } = useLacContext()\n  return useMemo(() => {\n    return (graph?.nodes ?? [])\n      .filter((n) => n.status === 'active' || n.status === 'draft')\n      .sort((a, b) => {\n        const pa = a.priority ?? 99\n        const pb = b.priority ?? 99\n        if (pa !== pb) return pa - pb\n        return a.title.localeCompare(b.title)\n      })\n  }, [graph])\n}\n\nexport function useLacNodeWithParent(id: string): { node: LacNode | undefined; parent: LacNode | undefined } {\n  const { graph } = useLacContext()\n  return useMemo(() => {\n    const node = graph?.nodes.find((n) => n.id === id)\n    const parent = node?.parent ? graph?.nodes.find((n) => n.id === node.parent) : undefined\n    return { node, parent }\n  }, [graph, id])\n}\n\nexport function useLacSuccessCriteria(): LacNode[] {\n  const { graph } = useLacContext()\n  return useMemo(() => {\n    return (graph?.nodes ?? []).filter((n) => {\n      const sc = n.views['product']?.['successCriteria']\n      const ac = n.views['product']?.['acceptanceCriteria']\n      return (typeof sc === 'string' && sc.trim().length > 0) || (Array.isArray(ac) && ac.length > 0)\n    })\n  }, [graph])\n}\n","import type { LacNode, LacStatus } from '../schema.js'\nimport type { LacTheme } from './theme.js'\n\nexport function getViewField(node: LacNode, path: string): unknown {\n  const parts = path.split('.')\n  let obj: unknown = node\n  for (const part of parts) {\n    if (obj == null || typeof obj !== 'object') return undefined\n    obj = (obj as Record<string, unknown>)[part]\n  }\n  return obj\n}\n\nexport function statusColor(status: LacStatus, theme: LacTheme): string {\n  switch (status) {\n    case 'draft': return theme.textMuted\n    case 'active': return theme.accent\n    case 'frozen': return '#4a9eff'\n    case 'deprecated': return '#555555'\n  }\n}\n\nexport function statusBg(status: LacStatus, theme: LacTheme): string {\n  switch (status) {\n    case 'draft': return 'rgba(128,128,128,0.12)'\n    case 'active': return theme.accentBg\n    case 'frozen': return 'rgba(74,158,255,0.12)'\n    case 'deprecated': return 'rgba(80,80,80,0.12)'\n  }\n}\n\nexport function priorityBadge(priority?: number): string {\n  return priority ? `P${priority}` : '—'\n}\n\nexport function typeLabel(type: string): string {\n  return type.charAt(0).toUpperCase() + type.slice(1)\n}\n\nexport function truncate(text: string, maxLength: number): string {\n  if (text.length <= maxLength) return text\n  return text.slice(0, maxLength).trimEnd() + '…'\n}\n\nfunction searchIn(val: unknown, q: string): boolean {\n  if (typeof val === 'string') return val.toLowerCase().includes(q)\n  if (Array.isArray(val)) return val.some((v) => searchIn(v, q))\n  if (val !== null && typeof val === 'object') return Object.values(val as object).some((v) => searchIn(v, q))\n  return false\n}\n\nexport function nodeMatchesQuery(node: LacNode, query: string): boolean {\n  if (!query.trim()) return false\n  const q = query.toLowerCase()\n  return (\n    node.title.toLowerCase().includes(q) ||\n    node.domain.toLowerCase().includes(q) ||\n    node.type.toLowerCase().includes(q) ||\n    (node.tags ?? []).some((t) => t.toLowerCase().includes(q)) ||\n    searchIn(node.views, q)\n  )\n}\n","import React, { useState } from 'react'\nimport type { LacGraph } from '../../schema.js'\nimport type { LacTheme, LacThemeMode } from '../theme.js'\nimport { LacDataProvider } from '../context.js'\nimport { useLacData } from '../hooks.js'\nimport { LacSprintBoard } from './LacSprintBoard.js'\nimport { LacGuide } from './LacGuide.js'\nimport { LacDecisionLog } from './LacDecisionLog.js'\nimport { LacSuccessBoard } from './LacSuccessBoard.js'\nimport { LacSearch } from './LacSearch.js'\n\nexport type HubTab = 'sprint' | 'guide' | 'decisions' | 'success' | 'search'\n\nexport interface LacHubProps {\n  dataUrl?: string\n  data?: LacGraph\n  defaultTab?: HubTab\n  theme?: LacThemeMode | Partial<LacTheme>\n  themeOverrides?: Partial<LacTheme>\n  guideUrl?: string\n  style?: React.CSSProperties\n  fullscreen?: boolean\n}\n\nconst TABS: Array<{ id: HubTab; label: string }> = [\n  { id: 'sprint', label: 'Sprint' },\n  { id: 'guide', label: 'Guide' },\n  { id: 'decisions', label: 'Decisions' },\n  { id: 'success', label: 'Success' },\n  { id: 'search', label: 'Search' },\n]\n\nfunction HubInner({ defaultTab = 'sprint', guideUrl, style, fullscreen }: Omit<LacHubProps, 'dataUrl' | 'data' | 'theme' | 'themeOverrides'>) {\n  const { theme, loading, error } = useLacData()\n  const [tab, setTab] = useState<HubTab>(defaultTab)\n\n  const containerStyle: React.CSSProperties = {\n    fontFamily: theme.fontFamily,\n    background: theme.bg,\n    color: theme.text,\n    border: fullscreen ? 'none' : `1px solid ${theme.border}`,\n    borderRadius: fullscreen ? '0' : theme.borderRadius,\n    overflow: 'hidden',\n    display: 'flex',\n    flexDirection: 'column',\n    minHeight: '400px',\n    ...style,\n  }\n\n  if (loading) return <div style={containerStyle}><div style={{ padding: '24px', color: theme.textMuted }}>Loading…</div></div>\n  if (error) return <div style={containerStyle}><div style={{ padding: '24px', color: '#ff6b6b' }}>Error: {error}</div></div>\n\n  return (\n    <div style={containerStyle}>\n      <div style={{ display: 'flex', borderBottom: `1px solid ${theme.border}`, background: theme.surface }}>\n        {TABS.map((t) => (\n          <button\n            key={t.id}\n            onClick={() => setTab(t.id)}\n            style={{\n              padding: '10px 16px',\n              background: 'none',\n              border: 'none',\n              borderBottom: tab === t.id ? `2px solid ${theme.accent}` : '2px solid transparent',\n              color: tab === t.id ? theme.accent : theme.textMuted,\n              cursor: 'pointer',\n              fontFamily: theme.fontFamily,\n              fontSize: '13px',\n              fontWeight: tab === t.id ? 600 : 400,\n            }}\n          >\n            {t.label}\n          </button>\n        ))}\n        {guideUrl && (\n          <a href={guideUrl} target=\"_blank\" rel=\"noreferrer\" style={{ marginLeft: 'auto', padding: '10px 16px', color: theme.accent, fontSize: '13px', textDecoration: 'none' }}>\n            Open guide →\n          </a>\n        )}\n      </div>\n      <div style={{ flex: 1, overflow: 'auto' }}>\n        {tab === 'sprint' && <LacSprintBoard />}\n        {tab === 'guide' && <LacGuide />}\n        {tab === 'decisions' && <LacDecisionLog />}\n        {tab === 'success' && <LacSuccessBoard />}\n        {tab === 'search' && <LacSearch autoFocus />}\n      </div>\n    </div>\n  )\n}\n\nexport function LacHub({ dataUrl, data, defaultTab, theme, themeOverrides, guideUrl, style, fullscreen }: LacHubProps) {\n  return (\n    <LacDataProvider dataUrl={dataUrl} data={data} theme={theme} themeOverrides={themeOverrides}>\n      <HubInner defaultTab={defaultTab} guideUrl={guideUrl} style={style} fullscreen={fullscreen} />\n    </LacDataProvider>\n  )\n}\n","import React, { useState } from 'react'\nimport type { LacNode } from '../../schema.js'\nimport type { LacTheme } from '../theme.js'\nimport { useLacData, useLacSprint } from '../hooks.js'\nimport { priorityBadge, statusBg, statusColor, typeLabel } from '../utils.js'\nimport { LacFeatureCard } from './LacFeatureCard.js'\n\nexport interface LacSprintBoardProps {\n  theme?: LacTheme\n  domains?: string[]\n  onNodeClick?: (node: LacNode) => void\n}\n\nexport function LacSprintBoard({ theme: propTheme, domains, onNodeClick }: LacSprintBoardProps) {\n  const { theme: ctxTheme } = useLacData()\n  const t = propTheme ?? ctxTheme\n  const nodes = useLacSprint()\n  const [selected, setSelected] = useState<LacNode | null>(null)\n\n  const filtered = domains ? nodes.filter((n) => domains.includes(n.domain)) : nodes\n\n  const handleClick = (node: LacNode) => {\n    if (onNodeClick) { onNodeClick(node) } else { setSelected(node) }\n  }\n\n  if (selected) {\n    return <LacFeatureCard node={selected} theme={t} onClose={() => setSelected(null)} style={{ margin: '16px' }} />\n  }\n\n  return (\n    <div style={{ padding: '16px' }}>\n      {filtered.length === 0 && <div style={{ color: t.textMuted, padding: '24px 0', textAlign: 'center' }}>No active or draft nodes.</div>}\n      {filtered.map((node) => (\n        <div key={node.id} onClick={() => handleClick(node)} style={{ display: 'flex', alignItems: 'center', gap: '10px', padding: '10px 12px', marginBottom: '6px', background: t.surface, border: `1px solid ${t.border}`, borderRadius: t.borderRadiusSm, cursor: 'pointer' }}>\n          <span style={{ color: t.textMuted, fontSize: '12px', minWidth: '28px' }}>{priorityBadge(node.priority)}</span>\n          <span style={{ background: statusBg(node.status, t), color: statusColor(node.status, t), padding: '2px 6px', borderRadius: t.borderRadiusSm, fontSize: '11px' }}>{node.status}</span>\n          <span style={{ color: t.textMuted, fontSize: '12px' }}>{typeLabel(node.type)}</span>\n          <span style={{ flex: 1, color: t.text, fontSize: '14px' }}>{node.title}</span>\n          <span style={{ color: t.textMuted, fontSize: '12px' }}>{node.domain}</span>\n        </div>\n      ))}\n    </div>\n  )\n}\n","import React, { useState, useEffect, useRef } from 'react'\nimport type { LacNode } from '../../schema.js'\nimport type { LacTheme } from '../theme.js'\nimport { statusBg, statusColor, typeLabel } from '../utils.js'\nimport { MarkdownField } from './MarkdownField.js'\n\nconst FILE_PATH_RE = /^(packages|apps|src|libs|dist)\\/[\\w\\-./@]+\\.(tsx?|jsx?|json|css|scss|md|html|mjs|cjs)$/\nconst ARROW_ITEM_RE = /^(.+?)\\s+→\\s+(.+)$/\n\nexport interface LacFeatureCardProps {\n  node: LacNode\n  theme: LacTheme\n  defaultView?: string\n  onClose?: () => void\n  style?: React.CSSProperties\n  nodeIndex?: Map<string, LacNode>\n  onNodeRequest?: (id: string) => void\n  onFileOpen?: (path: string) => void\n  onSave?: (id: string, domain: string, fields: Record<string, unknown>) => Promise<void>\n  typeIcons?: Record<string, string>\n}\n\nconst VIEW_TABS = ['dev', 'product', 'user', 'support', 'tester']\nconst VIEW_LABELS: Record<string, string> = { dev: 'Dev', product: 'Product', user: 'Guide', support: 'Ops', tester: 'Tests' }\nconst BUILTIN_TYPE_ICONS: Record<string, string> = { epic: '⬡', feature: '◆', decision: '⊙', research: '△', release: '★', runbook: '▶', faq: '◇', bug: '⚠' }\nconst FIELD_LABELS: Record<string, string> = {\n  implementation: 'Implementation', componentFile: 'Component File', codeSnippets: 'Code Snippets',\n  edgeCases: 'Edge Cases', choice: 'Choice', rationale: 'Rationale',\n  problem: 'Problem', successCriteria: 'Success Criteria', acceptanceCriteria: 'Acceptance Criteria',\n  metrics: 'Metrics', milestones: 'Milestones', impact: 'Impact',\n  userGuide: 'User Guide', knownLimitations: 'Known Limitations', workarounds: 'Workarounds',\n  releaseNotes: 'Release Notes', faq: 'FAQ', supportNotes: 'Support Notes',\n  escalationPath: 'Escalation', steps: 'Steps', rollback: 'Rollback',\n  testCases: 'Test Cases', expectedBehavior: 'Expected Behavior',\n  npmPackages: 'npm Packages', publicInterface: 'Public Interface', testStrategy: 'Test Strategy',\n}\nconst RELATION_GROUPS: Array<{ key: keyof LacNode; label: string; multi: boolean }> = [\n  { key: 'parent', label: 'Parent', multi: false },\n  { key: 'children', label: 'Children', multi: true },\n  { key: 'references', label: 'References', multi: true },\n  { key: 'enables', label: 'Enables', multi: true },\n  { key: 'blockedBy', label: 'Blocked by', multi: true },\n  { key: 'fixes', label: 'Fixes', multi: false },\n  { key: 'supersedes', label: 'Supersedes', multi: false },\n  { key: 'supersededBy', label: 'Superseded by', multi: false },\n]\n\nfunction AutoTextarea({ value, onChange, theme: t }: { value: string; onChange: (v: string) => void; theme: LacTheme }) {\n  const ref = useRef<HTMLTextAreaElement>(null)\n  useEffect(() => {\n    if (ref.current) { ref.current.style.height = 'auto'; ref.current.style.height = `${ref.current.scrollHeight}px` }\n  }, [value])\n  return <textarea ref={ref} value={value} onChange={(e) => onChange(e.target.value)} rows={3} style={{ width: '100%', fontFamily: t.fontMono, fontSize: '12px', color: t.text, background: t.bg, border: `1px solid ${t.accent}`, borderRadius: '4px', padding: '8px', resize: 'none', outline: 'none', lineHeight: '1.5', overflow: 'hidden', boxSizing: 'border-box' }} />\n}\n\nfunction ArrayItem({ item, theme: t, onFileOpen }: { item: string; theme: LacTheme; onFileOpen?: (path: string) => void }) {\n  const arrowMatch = ARROW_ITEM_RE.exec(item)\n  if (arrowMatch) {\n    const [, label, path] = arrowMatch\n    const trimmedPath = path!.trim()\n    const isFile = FILE_PATH_RE.test(trimmedPath)\n    return (\n      <div style={{ display: 'flex', alignItems: 'baseline', gap: '8px', fontSize: '13px' }}>\n        <span style={{ color: t.text, fontWeight: 500, minWidth: '120px', flexShrink: 0 }}>{label}</span>\n        {isFile && onFileOpen ? (\n          <button onClick={() => onFileOpen(trimmedPath)} style={{ color: t.accent, fontSize: '12px', fontFamily: t.fontMono, textDecoration: 'underline', textDecorationStyle: 'dotted', background: 'none', border: 'none', cursor: 'pointer', padding: 0 }}>{trimmedPath}</button>\n        ) : (\n          <span style={{ color: t.textMuted, fontFamily: t.fontMono, fontSize: '12px' }}>{trimmedPath}</span>\n        )}\n      </div>\n    )\n  }\n  if (FILE_PATH_RE.test(item) && onFileOpen) {\n    return <button onClick={() => onFileOpen(item)} style={{ display: 'block', color: t.accent, fontSize: '12px', fontFamily: t.fontMono, textDecoration: 'underline', textDecorationStyle: 'dotted', background: 'none', border: 'none', cursor: 'pointer', padding: 0 }}>{item}</button>\n  }\n  return <div style={{ display: 'flex', gap: '6px', fontSize: '13px' }}><span style={{ color: t.textMuted, flexShrink: 0 }}>•</span><span style={{ color: t.text }}>{item}</span></div>\n}\n\nexport function LacFeatureCard({ node, theme: t, defaultView = 'dev', onClose, style, nodeIndex, onNodeRequest, onFileOpen, onSave, typeIcons }: LacFeatureCardProps) {\n  const TYPE_ICONS = typeIcons ? { ...BUILTIN_TYPE_ICONS, ...typeIcons } : BUILTIN_TYPE_ICONS\n  const availableViews = VIEW_TABS.filter((v) => node.views[v] && Object.keys(node.views[v]!).length > 0)\n  const [activeView, setActiveView] = useState(defaultView)\n  const [editMode, setEditMode] = useState(false)\n  const [saving, setSaving] = useState(false)\n  const [saveError, setSaveError] = useState<string | null>(null)\n  const [editValues, setEditValues] = useState<Record<string, string>>({})\n\n  useEffect(() => { setEditMode(false); setSaveError(null) }, [activeView, node.id])\n\n  const viewData = (node.views[activeView] ?? {}) as Record<string, unknown>\n\n  function enterEdit() {\n    const initial: Record<string, string> = {}\n    for (const [k, v] of Object.entries(viewData)) initial[k] = Array.isArray(v) ? (v as string[]).join('\\n') : String(v ?? '')\n    setEditValues(initial)\n    setEditMode(true)\n    setSaveError(null)\n  }\n\n  async function handleSave() {\n    if (!onSave) return\n    setSaving(true)\n    setSaveError(null)\n    const fields: Record<string, unknown> = {}\n    for (const [k, v] of Object.entries(editValues)) {\n      // Restore array fields: if the original value was an array, split back on newlines\n      const original = viewData[k]\n      fields[`views.${activeView}.${k}`] = Array.isArray(original)\n        ? v.split('\\n').map((s) => s.trim()).filter(Boolean)\n        : v\n    }\n    try { await onSave(node.id, node.domain, fields); setEditMode(false) }\n    catch (e) { setSaveError(e instanceof Error ? e.message : 'Save failed') }\n    finally { setSaving(false) }\n  }\n\n  const relGroups = RELATION_GROUPS.flatMap(({ key, label, multi }) => {\n    const val = node[key]\n    if (!val) return []\n    const ids: string[] = multi ? (val as string[]) : [val as string]\n    return ids.length === 0 ? [] : [{ label, ids }]\n  })\n\n  return (\n    <div style={{ background: t.surface, border: `1px solid ${t.border}`, borderRadius: t.borderRadius, overflow: 'hidden', ...style }}>\n      {/* Header */}\n      <div style={{ padding: '12px 16px', borderBottom: `1px solid ${t.border}`, display: 'flex', alignItems: 'center', gap: '8px', flexWrap: 'wrap' }}>\n        <span style={{ background: statusBg(node.status, t), color: statusColor(node.status, t), padding: '2px 6px', borderRadius: t.borderRadiusSm, fontSize: '11px' }}>{node.status}</span>\n        <span style={{ color: t.textMuted, fontSize: '12px' }}>{typeLabel(node.type)}</span>\n        <span style={{ flex: 1, color: t.text, fontWeight: 700, fontSize: '16px', minWidth: '120px' }}>{TYPE_ICONS[node.type] ?? '○'} {node.title}</span>\n        <span style={{ fontSize: '10px', color: t.textMuted, background: 'rgba(128,128,128,0.1)', borderRadius: '10px', padding: '1px 7px' }}>{node.domain}</span>\n        {node.priority && <span style={{ fontSize: '10px', color: t.accent, background: t.accentBg, borderRadius: '10px', padding: '1px 7px' }}>P{node.priority}</span>}\n        {onSave && !editMode && <button onClick={enterEdit} style={{ padding: '3px 10px', fontSize: '11px', borderRadius: t.borderRadiusSm, border: `1px solid ${t.border}`, background: 'transparent', color: t.textMuted, cursor: 'pointer', fontFamily: t.fontFamily }}>Edit</button>}\n        {editMode && <>\n          <button onClick={handleSave} disabled={saving} style={{ padding: '3px 10px', fontSize: '11px', borderRadius: t.borderRadiusSm, border: 'none', background: t.accent, color: '#fff', cursor: saving ? 'wait' : 'pointer', opacity: saving ? 0.7 : 1 }}>{saving ? '…' : 'Save'}</button>\n          <button onClick={() => setEditMode(false)} disabled={saving} style={{ padding: '3px 10px', fontSize: '11px', borderRadius: t.borderRadiusSm, border: `1px solid ${t.border}`, background: 'transparent', color: t.textMuted, cursor: 'pointer' }}>Cancel</button>\n        </>}\n        {onClose && <button onClick={onClose} style={{ background: 'none', border: 'none', color: t.textMuted, cursor: 'pointer', fontSize: '16px', padding: '0 4px', lineHeight: 1 }}>×</button>}\n      </div>\n\n      {/* View tabs */}\n      {availableViews.length > 1 && (\n        <div style={{ display: 'flex', borderBottom: `1px solid ${t.border}`, background: t.bg }}>\n          {availableViews.map((v) => (\n            <button key={v} onClick={() => setActiveView(v)} style={{ padding: '8px 16px', background: 'none', border: 'none', borderBottom: activeView === v ? `2px solid ${t.accent}` : '2px solid transparent', color: activeView === v ? t.accent : t.textMuted, cursor: 'pointer', fontFamily: t.fontFamily, fontSize: '13px', fontWeight: activeView === v ? 600 : 400 }}>\n              {VIEW_LABELS[v] ?? v}\n            </button>\n          ))}\n        </div>\n      )}\n\n      {/* Save error */}\n      {saveError && (\n        <div style={{ padding: '8px 16px', background: 'rgba(239,68,68,0.08)', borderBottom: '1px solid rgba(239,68,68,0.3)', color: '#ef4444', fontSize: '12px', display: 'flex', justifyContent: 'space-between' }}>\n          <span>{saveError}</span>\n          <button onClick={() => setSaveError(null)} style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#ef4444' }}>×</button>\n        </div>\n      )}\n\n      {/* Fields */}\n      <div style={{ padding: '16px' }}>\n        {Object.entries(viewData).map(([key, val]) =>\n          val != null && val !== '' ? (\n            <div key={key} style={{ marginBottom: '14px' }}>\n              <div style={{ color: t.textMuted, fontSize: '12px', textTransform: 'uppercase', letterSpacing: '0.06em', fontWeight: 600, marginBottom: '7px' }}>\n                {FIELD_LABELS[key] ?? key}\n              </div>\n              {editMode ? (\n                <AutoTextarea value={editValues[key] ?? ''} onChange={(v) => setEditValues((p) => ({ ...p, [key]: v }))} theme={t} />\n              ) : Array.isArray(val) ? (\n                <div style={{ display: 'flex', flexDirection: 'column', gap: '5px' }}>\n                  {(val as string[]).map((item, idx) => <ArrayItem key={idx} item={String(item)} theme={t} onFileOpen={onFileOpen} />)}\n                </div>\n              ) : typeof val === 'string' && FILE_PATH_RE.test(val) && onFileOpen ? (\n                <button onClick={() => onFileOpen(val)} style={{ color: t.accent, fontSize: '13px', textDecoration: 'underline', textDecorationStyle: 'dotted', fontFamily: t.fontMono, background: 'none', border: 'none', cursor: 'pointer', padding: 0 }}>{val}</button>\n              ) : typeof val === 'string' && (val.includes('\\n') || val.includes('**') || val.includes('`') || val.match(/^[-*]\\s/m)) ? (\n                <MarkdownField content={val} theme={t} onFileOpen={onFileOpen} />\n              ) : (\n                <div style={{ color: t.text, fontSize: '14px', lineHeight: '1.6' }}>{String(val)}</div>\n              )}\n            </div>\n          ) : null\n        )}\n        {Object.keys(viewData).length === 0 && <div style={{ color: t.textMuted, fontSize: '13px' }}>No content in this view yet.</div>}\n      </div>\n\n      {/* Related nodes */}\n      {!editMode && relGroups.length > 0 && (\n        <div style={{ padding: '12px 16px', borderTop: `1px solid ${t.border}`, display: 'flex', flexDirection: 'column', gap: '8px' }}>\n          <div style={{ fontSize: '12px', color: t.textMuted, textTransform: 'uppercase', letterSpacing: '0.06em', fontWeight: 600 }}>Related</div>\n          {relGroups.map(({ label, ids }) => (\n            <div key={label} style={{ display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: '6px' }}>\n              <span style={{ fontSize: '12px', color: t.textMuted, minWidth: '80px' }}>{label}</span>\n              {ids.map((id) => {\n                const linked = nodeIndex?.get(id)\n                const icon = TYPE_ICONS[linked?.type ?? ''] ?? '○'\n                const title = linked?.title ?? id.replace(/-[a-z0-9]{4,}$/, '').replace(/^[a-z]+-/, '').replace(/-/g, ' ')\n                return (\n                  <button key={id} onClick={() => onNodeRequest?.(id)} style={{ display: 'inline-flex', alignItems: 'center', gap: '4px', padding: '3px 10px', fontSize: '13px', borderRadius: '12px', border: `1px solid ${t.border}`, background: t.bg, color: onNodeRequest ? t.accent : t.text, cursor: onNodeRequest ? 'pointer' : 'default', fontFamily: t.fontFamily }}>\n                    <span style={{ fontSize: '11px' }}>{icon}</span>\n                    {title}\n                    {linked && <span style={{ fontSize: '10px', color: t.textMuted, background: 'rgba(128,128,128,0.12)', borderRadius: '8px', padding: '0 5px' }}>{linked.domain}</span>}\n                  </button>\n                )\n              })}\n            </div>\n          ))}\n        </div>\n      )}\n    </div>\n  )\n}\n","import React from 'react'\nimport type { LacTheme } from '../theme.js'\n\ninterface Props {\n  content: string\n  theme: LacTheme\n  onFileOpen?: (path: string) => void\n}\n\nconst FILE_PATH_RE = /^(packages|apps|src|libs|dist)\\/[\\w\\-./@]+\\.(tsx?|jsx?|json|css|scss|md|html|mjs|cjs)$/\n\nfunction parseInline(text: string, theme: LacTheme, onFileOpen?: (path: string) => void): React.ReactNode[] {\n  const parts: React.ReactNode[] = []\n  const re = /(`[^`]+`|\\*\\*[^*]+\\*\\*)/g\n  let last = 0\n  let m: RegExpExecArray | null\n\n  while ((m = re.exec(text)) !== null) {\n    if (m.index > last) parts.push(text.slice(last, m.index))\n    const token = m[0]!\n    if (token.startsWith('`')) {\n      const inner = token.slice(1, -1)\n      if (onFileOpen && FILE_PATH_RE.test(inner)) {\n        parts.push(\n          <button key={m.index} onClick={() => onFileOpen(inner)} style={{ fontFamily: theme.fontMono, background: 'rgba(128,128,128,0.15)', padding: '1px 4px', borderRadius: '3px', fontSize: '12px', color: theme.accent, border: 'none', cursor: 'pointer', textDecoration: 'underline', textDecorationStyle: 'dotted' }}>\n            {inner}\n          </button>\n        )\n      } else {\n        parts.push(<code key={m.index} style={{ fontFamily: theme.fontMono, background: 'rgba(128,128,128,0.15)', padding: '1px 4px', borderRadius: '3px', fontSize: '12px' }}>{inner}</code>)\n      }\n    } else {\n      parts.push(<strong key={m.index}>{token.slice(2, -2)}</strong>)\n    }\n    last = m.index + token.length\n  }\n  if (last < text.length) parts.push(text.slice(last))\n  return parts\n}\n\nexport function MarkdownField({ content, theme, onFileOpen }: Props) {\n  const lines = content.split('\\n')\n  const nodes: React.ReactNode[] = []\n  let i = 0\n\n  while (i < lines.length) {\n    const line = lines[i]!\n\n    if (line.trimStart().startsWith('```')) {\n      const codeLines: string[] = []\n      i++\n      while (i < lines.length && !lines[i]!.trimStart().startsWith('```')) { codeLines.push(lines[i]!); i++ }\n      nodes.push(<pre key={i} style={{ fontFamily: theme.fontMono, background: 'rgba(128,128,128,0.1)', border: '1px solid rgba(128,128,128,0.2)', borderRadius: '4px', padding: '10px 12px', fontSize: '12px', overflowX: 'auto', margin: '6px 0', whiteSpace: 'pre' }}><code>{codeLines.join('\\n')}</code></pre>)\n      i++\n      continue\n    }\n\n    const headingMatch = line.match(/^(#{1,3})\\s+(.+)/)\n    if (headingMatch) {\n      const level = headingMatch[1]!.length\n      const sizes = ['16px', '14px', '13px']\n      nodes.push(<div key={i} style={{ fontWeight: 700, fontSize: sizes[level - 1] ?? '13px', color: theme.text, marginTop: level === 1 ? '12px' : '8px', marginBottom: '4px' }}>{parseInline(headingMatch[2]!, theme, onFileOpen)}</div>)\n      i++\n      continue\n    }\n\n    if (line.match(/^[-*]\\s+/)) {\n      const items: string[] = []\n      while (i < lines.length && lines[i]!.match(/^[-*]\\s+/)) { items.push(lines[i]!.replace(/^[-*]\\s+/, '')); i++ }\n      nodes.push(<ul key={i} style={{ margin: '4px 0', paddingLeft: '16px' }}>{items.map((item, idx) => <li key={idx} style={{ color: theme.text, fontSize: '13px', marginBottom: '2px', listStyleType: 'disc' }}>{parseInline(item, theme, onFileOpen)}</li>)}</ul>)\n      continue\n    }\n\n    if (line.trim() === '') { i++; continue }\n\n    nodes.push(<p key={i} style={{ color: theme.text, fontSize: '13px', margin: '2px 0 6px 0', lineHeight: '1.5' }}>{parseInline(line, theme, onFileOpen)}</p>)\n    i++\n  }\n\n  return <div>{nodes}</div>\n}\n","import React, { useState } from 'react'\nimport type { LacNode } from '../../schema.js'\nimport type { LacTheme } from '../theme.js'\nimport { useLacData, useLacNodesByType } from '../hooks.js'\nimport { getViewField, typeLabel } from '../utils.js'\nimport { LacFeatureCard } from './LacFeatureCard.js'\n\nexport interface LacGuideProps {\n  theme?: LacTheme\n  onNodeClick?: (node: LacNode) => void\n}\n\nexport function LacGuide({ theme: propTheme, onNodeClick }: LacGuideProps) {\n  const { theme: ctxTheme } = useLacData()\n  const t = propTheme ?? ctxTheme\n  const faqs = useLacNodesByType('faq')\n  const runbooks = useLacNodesByType('runbook')\n  const features = useLacNodesByType('feature')\n  const guideNodes = [...faqs, ...runbooks, ...features.filter((n) => n.status === 'frozen')]\n  const [selected, setSelected] = useState<LacNode | null>(null)\n\n  const handleClick = (node: LacNode) => {\n    if (onNodeClick) { onNodeClick(node) } else { setSelected(node) }\n  }\n\n  if (selected) {\n    return <LacFeatureCard node={selected} theme={t} defaultView=\"user\" onClose={() => setSelected(null)} style={{ margin: '16px' }} />\n  }\n\n  return (\n    <div style={{ padding: '16px' }}>\n      {guideNodes.length === 0 && <div style={{ color: t.textMuted, padding: '24px 0', textAlign: 'center' }}>No guide content yet. Freeze features or add FAQ / Runbook nodes.</div>}\n      {guideNodes.map((node) => (\n        <div key={node.id} onClick={() => handleClick(node)} style={{ padding: '12px', marginBottom: '8px', background: t.surface, border: `1px solid ${t.border}`, borderRadius: t.borderRadiusSm, cursor: 'pointer' }}>\n          <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n            <span style={{ color: t.accent, fontSize: '11px', textTransform: 'uppercase' }}>{typeLabel(node.type)}</span>\n            <span style={{ color: t.text, fontSize: '14px' }}>{node.title}</span>\n          </div>\n          {!!getViewField(node, 'views.user.userGuide') && (\n            <div style={{ color: t.textMuted, fontSize: '12px', marginTop: '4px' }}>\n              {String(getViewField(node, 'views.user.userGuide')).slice(0, 120)}…\n            </div>\n          )}\n        </div>\n      ))}\n    </div>\n  )\n}\n","import React, { useState } from 'react'\nimport type { LacNode } from '../../schema.js'\nimport type { LacTheme } from '../theme.js'\nimport { useLacData, useLacNodesByType } from '../hooks.js'\nimport { getViewField, statusBg, statusColor } from '../utils.js'\nimport { LacFeatureCard } from './LacFeatureCard.js'\n\nexport interface LacDecisionLogProps {\n  theme?: LacTheme\n  onNodeClick?: (node: LacNode) => void\n}\n\nexport function LacDecisionLog({ theme: propTheme, onNodeClick }: LacDecisionLogProps) {\n  const { theme: ctxTheme } = useLacData()\n  const t = propTheme ?? ctxTheme\n  const decisions = useLacNodesByType('decision')\n  const [selected, setSelected] = useState<LacNode | null>(null)\n\n  const handleClick = (node: LacNode) => {\n    if (onNodeClick) { onNodeClick(node) } else { setSelected(node) }\n  }\n\n  if (selected) {\n    return <LacFeatureCard node={selected} theme={t} defaultView=\"dev\" onClose={() => setSelected(null)} style={{ margin: '16px' }} />\n  }\n\n  return (\n    <div style={{ padding: '16px' }}>\n      {decisions.length === 0 && <div style={{ color: t.textMuted, padding: '24px 0', textAlign: 'center' }}>No decision nodes yet.</div>}\n      {decisions.map((node) => (\n        <div key={node.id} onClick={() => handleClick(node)} style={{ padding: '12px', marginBottom: '8px', background: t.surface, border: `1px solid ${t.border}`, borderRadius: t.borderRadiusSm, cursor: 'pointer' }}>\n          <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '4px' }}>\n            <span style={{ background: statusBg(node.status, t), color: statusColor(node.status, t), padding: '2px 6px', borderRadius: t.borderRadiusSm, fontSize: '11px' }}>{node.status}</span>\n            <span style={{ color: t.text, fontSize: '14px', fontWeight: 500 }}>{node.title}</span>\n          </div>\n          {!!getViewField(node, 'views.dev.choice') && (\n            <div style={{ color: t.textMuted, fontSize: '12px' }}>Choice: {getViewField(node, 'views.dev.choice') as string}</div>\n          )}\n        </div>\n      ))}\n    </div>\n  )\n}\n","import React, { useState } from 'react'\nimport type { LacNode } from '../../schema.js'\nimport type { LacTheme } from '../theme.js'\nimport { useLacData, useLacSuccessCriteria } from '../hooks.js'\nimport { getViewField, statusBg, statusColor } from '../utils.js'\nimport { LacFeatureCard } from './LacFeatureCard.js'\n\nexport interface LacSuccessBoardProps {\n  theme?: LacTheme\n  onNodeClick?: (node: LacNode) => void\n}\n\nexport function LacSuccessBoard({ theme: propTheme, onNodeClick }: LacSuccessBoardProps) {\n  const { theme: ctxTheme } = useLacData()\n  const t = propTheme ?? ctxTheme\n  const nodes = useLacSuccessCriteria()\n  const [selected, setSelected] = useState<LacNode | null>(null)\n\n  const handleClick = (node: LacNode) => {\n    if (onNodeClick) { onNodeClick(node) } else { setSelected(node) }\n  }\n\n  if (selected) {\n    return <LacFeatureCard node={selected} theme={t} defaultView=\"product\" onClose={() => setSelected(null)} style={{ margin: '16px' }} />\n  }\n\n  return (\n    <div style={{ padding: '16px' }}>\n      {nodes.length === 0 && <div style={{ color: t.textMuted, padding: '24px 0', textAlign: 'center' }}>No nodes with success criteria.</div>}\n      {nodes.map((node) => {\n        const sc = getViewField(node, 'views.product.successCriteria') as string | undefined\n        return (\n          <div key={node.id} onClick={() => handleClick(node)} style={{ padding: '12px', marginBottom: '8px', background: t.surface, border: `1px solid ${t.border}`, borderRadius: t.borderRadiusSm, cursor: 'pointer' }}>\n            <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: sc ? '6px' : 0 }}>\n              <span style={{ background: statusBg(node.status, t), color: statusColor(node.status, t), padding: '2px 6px', borderRadius: t.borderRadiusSm, fontSize: '11px' }}>{node.status}</span>\n              <span style={{ color: t.text, fontSize: '14px', fontWeight: 500 }}>{node.title}</span>\n              <span style={{ fontSize: '10px', color: t.textMuted, background: 'rgba(128,128,128,0.1)', borderRadius: '10px', padding: '1px 7px', marginLeft: 'auto' }}>{node.domain}</span>\n            </div>\n            {sc && <div style={{ color: t.textMuted, fontSize: '13px', whiteSpace: 'pre-wrap' }}>{String(sc).slice(0, 200)}</div>}\n          </div>\n        )\n      })}\n    </div>\n  )\n}\n","import React, { useState } from 'react'\nimport type { LacNode } from '../../schema.js'\nimport type { LacTheme } from '../theme.js'\nimport { useLacData, useLacSearch } from '../hooks.js'\nimport { statusBg, statusColor, typeLabel } from '../utils.js'\nimport { LacFeatureCard } from './LacFeatureCard.js'\n\nexport interface LacSearchProps {\n  theme?: LacTheme\n  placeholder?: string\n  onNodeClick?: (node: LacNode) => void\n  autoFocus?: boolean\n  value?: string\n  onChange?: (query: string) => void\n}\n\nexport function LacSearch({ theme: propTheme, placeholder = 'Search nodes…', onNodeClick, autoFocus, value: controlled, onChange: onChangeProp }: LacSearchProps) {\n  const { theme: ctxTheme } = useLacData()\n  const t = propTheme ?? ctxTheme\n  const [internal, setInternal] = useState('')\n  const query = controlled ?? internal\n  const results = useLacSearch(query)\n  const [selected, setSelected] = useState<LacNode | null>(null)\n\n  const handleChange = (q: string) => {\n    if (onChangeProp) { onChangeProp(q) } else { setInternal(q) }\n    setSelected(null)\n  }\n\n  const handleClick = (node: LacNode) => {\n    if (onNodeClick) { onNodeClick(node) } else { setSelected(node) }\n  }\n\n  if (selected) {\n    return <LacFeatureCard node={selected} theme={t} onClose={() => setSelected(null)} style={{ margin: '16px' }} />\n  }\n\n  return (\n    <div style={{ padding: '16px' }}>\n      <input autoFocus={autoFocus} value={query} onChange={(e) => handleChange(e.target.value)} placeholder={placeholder}\n        style={{ width: '100%', padding: '8px 12px', background: t.surface, border: `1px solid ${t.border}`, borderRadius: t.borderRadiusSm, color: t.text, fontFamily: t.fontFamily, fontSize: '14px', boxSizing: 'border-box', outline: 'none', marginBottom: '12px' }}\n      />\n      {query && results.length === 0 && <div style={{ color: t.textMuted, textAlign: 'center', padding: '16px 0' }}>No results.</div>}\n      {results.map((node) => (\n        <div key={node.id} onClick={() => handleClick(node)} style={{ display: 'flex', alignItems: 'center', gap: '8px', padding: '10px 12px', marginBottom: '6px', background: t.surface, border: `1px solid ${t.border}`, borderRadius: t.borderRadiusSm, cursor: 'pointer' }}>\n          <span style={{ background: statusBg(node.status, t), color: statusColor(node.status, t), padding: '2px 6px', borderRadius: t.borderRadiusSm, fontSize: '11px' }}>{node.status}</span>\n          <span style={{ color: t.textMuted, fontSize: '12px' }}>{typeLabel(node.type)}</span>\n          <span style={{ flex: 1, color: t.text, fontSize: '14px' }}>{node.title}</span>\n        </div>\n      ))}\n    </div>\n  )\n}\n","import React, { useMemo } from 'react'\nimport type { LacTheme } from '../theme.js'\nimport { useLacData, useLacNode, useLacSearch } from '../hooks.js'\nimport { LacFeatureCard } from './LacFeatureCard.js'\n\nexport interface LacHelpPanelProps {\n  nodeId?: string\n  query?: string\n  theme?: LacTheme\n  open?: boolean\n  onClose?: () => void\n  position?: 'inline' | 'right' | 'bottom'\n  style?: React.CSSProperties\n}\n\nexport function LacHelpPanel({ nodeId, query, theme: propTheme, open = true, onClose, position = 'inline', style }: LacHelpPanelProps) {\n  const { theme: ctxTheme, nodes: allNodes } = useLacData()\n  const t = propTheme ?? ctxTheme\n  const directNode = useLacNode(nodeId ?? '')\n  const searchResults = useLacSearch(nodeId ? '' : (query ?? ''))\n  const node = directNode ?? searchResults[0]\n\n  const nodeIndex = useMemo(() => new Map(allNodes.map((n) => [n.id, n])), [allNodes])\n\n  if (!open) return null\n\n  const positionStyle: React.CSSProperties =\n    position === 'right'\n      ? { position: 'fixed', top: 0, right: 0, bottom: 0, width: '380px', zIndex: 1000, overflow: 'auto' }\n      : position === 'bottom'\n      ? { position: 'fixed', bottom: 0, left: 0, right: 0, maxHeight: '50vh', zIndex: 1000, overflow: 'auto' }\n      : {}\n\n  return (\n    <div style={{ background: t.bg, border: `1px solid ${t.border}`, borderRadius: t.borderRadius, ...positionStyle, ...style }}>\n      {!node && <div style={{ padding: '16px', color: t.textMuted }}>No help content found{query ? ` for \"${query}\"` : ''}.</div>}\n      {node && (\n        <LacFeatureCard\n          node={node}\n          theme={t}\n          defaultView=\"user\"\n          onClose={onClose}\n          nodeIndex={nodeIndex}\n        />\n      )}\n    </div>\n  )\n}\n","import React from 'react'\nimport type { LacNode } from '../../schema.js'\nimport { getViewField } from '../utils.js'\nimport { MarkdownField } from './MarkdownField.js'\n\nexport type LacNodeFieldAs = 'prose' | 'list' | 'code' | 'badge' | 'raw'\n\nexport interface LacNodeFieldProps {\n  /** The node object (use useLacNode to get it) */\n  node: LacNode\n  /** Dot-path to the field, e.g. \"views.user.userGuide\" or \"views.dev.componentFile\" */\n  field: string\n  /** How to render the value. Defaults to auto-detect (list → bullets, string → prose) */\n  as?: LacNodeFieldAs\n  /** Show a label above the value */\n  label?: string\n  /** Style overrides on the wrapper */\n  style?: React.CSSProperties\n  textColor?: string\n  mutedColor?: string\n  accentColor?: string\n  fontSize?: string\n}\n\nexport function LacNodeField({\n  node,\n  field,\n  as,\n  label,\n  style,\n  textColor = '#1a1a2e',\n  mutedColor = '#6b6570',\n  accentColor = '#7ec8a4',\n  fontSize = '14px',\n}: LacNodeFieldProps) {\n  const raw = getViewField(node, field)\n  if (raw == null || raw === '' || (Array.isArray(raw) && raw.length === 0)) return null\n\n  const renderAs = as ?? (Array.isArray(raw) ? 'list' : 'prose')\n\n  const content = (() => {\n    switch (renderAs) {\n      case 'list':\n        return (\n          <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', listStyle: 'disc' }}>\n            {(Array.isArray(raw) ? raw : [raw]).map((item, i) => (\n              <li key={i} style={{ fontSize, color: textColor, lineHeight: 1.6, marginBottom: '2px' }}>\n                {String(item)}\n              </li>\n            ))}\n          </ul>\n        )\n      case 'code':\n        return (\n          <code style={{ display: 'block', fontSize: '12px', background: 'rgba(0,0,0,0.05)', padding: '6px 10px', borderRadius: '6px', color: accentColor, fontFamily: 'monospace', marginTop: '4px' }}>\n            {String(raw)}\n          </code>\n        )\n      case 'badge':\n        return (\n          <span style={{ display: 'inline-block', fontSize: '11px', fontWeight: 600, padding: '2px 8px', borderRadius: '20px', background: `${accentColor}20`, color: accentColor, border: `1px solid ${accentColor}40`, marginTop: '4px' }}>\n            {String(raw)}\n          </span>\n        )\n      case 'raw':\n        return <span style={{ fontSize, color: textColor }}>{String(raw)}</span>\n      case 'prose':\n      default: {\n        const minTheme = { text: textColor, textMuted: mutedColor, accent: accentColor, surface: 'transparent', border: 'transparent', bg: 'transparent', accentBg: 'transparent', borderRadiusSm: '4px', borderRadius: '8px' }\n        return <MarkdownField content={String(raw)} theme={minTheme as never} />\n      }\n    }\n  })()\n\n  return (\n    <div style={style}>\n      {label && (\n        <div style={{ fontSize: '11px', fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.6px', color: mutedColor, marginBottom: '4px' }}>\n          {label}\n        </div>\n      )}\n      {content}\n    </div>\n  )\n}\n","import React, { useState } from 'react'\nimport type { LacNode } from '../../schema.js'\nimport { useLacData } from '../hooks.js'\nimport { getViewField, typeLabel } from '../utils.js'\nimport { LacNodeField } from './LacNodeField.js'\n\n// ─── audience roles ───────────────────────────────────────────────────────────\nexport type AudienceRole = 'user' | 'dev' | 'support' | 'product' | 'tester'\n\ninterface FieldSpec {\n  path: string\n  label?: string\n  isList?: boolean\n  as?: 'prose' | 'list' | 'code' | 'badge'\n}\n\ninterface SectionSpec {\n  /** node types to include in this section */\n  nodeTypes: string[]\n  /** heading shown above this group */\n  sectionTitle: string\n  /** which statuses to include (defaults to all non-deprecated) */\n  statuses?: string[]\n  /** fields to render per node, in order */\n  fields: FieldSpec[]\n}\n\n// ─── role → content mapping (the heart of the component) ─────────────────────\n// Each role sees different node types through different field lenses.\n// This config is what makes the component project-agnostic.\nconst ROLE_SECTIONS: Record<AudienceRole, SectionSpec[]> = {\n  user: [\n    {\n      nodeTypes: ['faq'],\n      sectionTitle: 'Frequently Asked Questions',\n      fields: [\n        { path: 'views.user.userGuide', label: '' },\n        { path: 'views.user.knownLimitations', label: 'Keep in mind', isList: true },\n      ],\n    },\n    {\n      nodeTypes: ['feature', 'release'],\n      sectionTitle: 'How to use',\n      statuses: ['frozen', 'active'],\n      fields: [\n        { path: 'views.user.userGuide', label: '' },\n        { path: 'views.user.knownLimitations', label: 'Limitations', isList: true },\n        { path: 'views.user.releaseNotes', label: 'Release notes' },\n      ],\n    },\n  ],\n\n  dev: [\n    {\n      nodeTypes: ['decision'],\n      sectionTitle: 'Architecture Decisions',\n      fields: [\n        { path: 'views.dev.choice', label: 'Decision' },\n        { path: 'views.dev.rationale', label: 'Rationale' },\n        { path: 'views.dev.edgeCases', label: 'Edge cases' },\n      ],\n    },\n    {\n      nodeTypes: ['feature'],\n      sectionTitle: 'Features',\n      fields: [\n        { path: 'views.dev.componentFile', label: 'Component', as: 'code' },\n        { path: 'views.dev.implementation', label: 'Implementation' },\n        { path: 'views.dev.edgeCases', label: 'Edge cases' },\n      ],\n    },\n    {\n      nodeTypes: ['runbook'],\n      sectionTitle: 'Runbooks',\n      fields: [\n        { path: 'views.support.steps', label: 'Steps', isList: true, as: 'list' },\n        { path: 'views.support.rollback', label: 'Rollback' },\n        { path: 'views.support.escalationPath', label: 'Escalation', as: 'code' },\n      ],\n    },\n    {\n      nodeTypes: ['research'],\n      sectionTitle: 'Research',\n      fields: [\n        { path: 'views.dev.implementation', label: 'Findings' },\n        { path: 'views.dev.rationale', label: 'Rationale' },\n      ],\n    },\n  ],\n\n  support: [\n    {\n      nodeTypes: ['runbook'],\n      sectionTitle: 'Runbooks',\n      fields: [\n        { path: 'views.support.steps', label: 'Steps', isList: true, as: 'list' },\n        { path: 'views.support.escalationPath', label: 'Escalation' },\n        { path: 'views.support.rollback', label: 'Rollback' },\n      ],\n    },\n    {\n      nodeTypes: ['faq'],\n      sectionTitle: 'FAQ',\n      fields: [\n        { path: 'views.user.userGuide', label: '' },\n        { path: 'views.user.knownLimitations', label: 'Known issues', isList: true },\n      ],\n    },\n    {\n      nodeTypes: ['bug'],\n      sectionTitle: 'Known Bugs',\n      statuses: ['active'],\n      fields: [\n        { path: 'views.product.problem', label: 'Description' },\n        { path: 'views.dev.edgeCases', label: 'Reproduction steps' },\n      ],\n    },\n  ],\n\n  product: [\n    {\n      nodeTypes: ['epic'],\n      sectionTitle: 'Vision',\n      fields: [\n        { path: 'views.product.problem', label: 'The problem we solve' },\n        { path: 'views.product.successCriteria', label: 'Success looks like' },\n      ],\n    },\n    {\n      nodeTypes: ['feature'],\n      sectionTitle: 'Features',\n      fields: [\n        { path: 'views.product.problem', label: 'Problem' },\n        { path: 'views.product.acceptanceCriteria', label: 'Acceptance criteria', isList: true, as: 'list' },\n        { path: 'views.product.impact', label: 'Impact' },\n      ],\n    },\n    {\n      nodeTypes: ['decision'],\n      sectionTitle: 'Key Decisions',\n      fields: [\n        { path: 'views.dev.choice', label: 'Decision' },\n        { path: 'views.product.impact', label: 'Impact' },\n      ],\n    },\n  ],\n\n  tester: [\n    {\n      nodeTypes: ['feature'],\n      sectionTitle: 'Features to Test',\n      fields: [\n        { path: 'views.tester.testCases', label: 'Test cases', isList: true, as: 'list' },\n        { path: 'views.tester.edgeCases', label: 'Edge cases', isList: true, as: 'list' },\n        { path: 'views.tester.expectedBehavior', label: 'Expected behavior' },\n      ],\n    },\n    {\n      nodeTypes: ['bug'],\n      sectionTitle: 'Bug Reports',\n      statuses: ['active'],\n      fields: [\n        { path: 'views.product.problem', label: 'Description' },\n        { path: 'views.tester.testCases', label: 'Steps to reproduce', isList: true, as: 'list' },\n        { path: 'views.tester.expectedBehavior', label: 'Expected behavior' },\n      ],\n    },\n  ],\n}\n\n// ─── role meta (labels, descriptions for switcher UI) ────────────────────────\nexport const ROLE_META: Record<AudienceRole, { label: string; description: string; emoji: string }> = {\n  user:    { label: 'User Guide',    description: 'How to use this — for everyone', emoji: '👤' },\n  dev:     { label: 'Developer',     description: 'Implementation, decisions, architecture', emoji: '⚙️' },\n  support: { label: 'Support',       description: 'Runbooks, escalation paths, known issues', emoji: '🛟' },\n  product: { label: 'Product',       description: 'Features, acceptance criteria, vision', emoji: '📋' },\n  tester:  { label: 'Tester',        description: 'Test cases, edge cases, expected behavior', emoji: '🧪' },\n}\n\n// ─── props ────────────────────────────────────────────────────────────────────\nexport interface LacRoleViewProps {\n  role: AudienceRole\n  /** Filter nodes to specific domains */\n  domain?: string | string[]\n  /** Override which node types to show (overrides role default) */\n  nodeTypes?: string[]\n  /** Show a role picker above the content */\n  showRolePicker?: boolean\n  onRoleChange?: (role: AudienceRole) => void\n  /** Layout variant */\n  layout?: 'accordion' | 'cards' | 'flat'\n  /** Empty state message */\n  emptyMessage?: string\n  style?: React.CSSProperties\n  /** Colors — defaults to a clean light theme so it works in any app */\n  colors?: {\n    bg?: string\n    surface?: string\n    border?: string\n    text?: string\n    muted?: string\n    accent?: string\n    sectionHeading?: string\n  }\n}\n\n// ─── defaults ─────────────────────────────────────────────────────────────────\nconst DEFAULT_COLORS = {\n  bg: 'transparent',\n  surface: '#ffffff',\n  border: '#e0dbd3',\n  text: '#1a1a2e',\n  muted: '#6b6570',\n  accent: '#7ec8a4',\n  sectionHeading: '#1a1a2e',\n}\n\n// ─── single node accordion item ───────────────────────────────────────────────\nfunction NodeItem({\n  node,\n  fields,\n  layout,\n  colors: c,\n}: {\n  node: LacNode\n  fields: FieldSpec[]\n  layout: 'accordion' | 'cards' | 'flat'\n  colors: typeof DEFAULT_COLORS\n}) {\n  const [open, setOpen] = useState(layout === 'flat')\n\n  // Check if any field has content\n  const hasContent = fields.some((f) => {\n    const val = getViewField(node, f.path)\n    return val != null && val !== '' && !(Array.isArray(val) && val.length === 0)\n  })\n  if (!hasContent) return null\n\n  if (layout === 'flat') {\n    return (\n      <div style={{ marginBottom: '24px' }}>\n        <div style={{ fontSize: '15px', fontWeight: 600, color: c.text, marginBottom: '12px' }}>\n          {node.title}\n        </div>\n        <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n          {fields.map((f) => (\n            <LacNodeField\n              key={f.path}\n              node={node}\n              field={f.path}\n              label={f.label}\n              as={f.as ?? (f.isList ? 'list' : undefined)}\n              textColor={c.text}\n              mutedColor={c.muted}\n              accentColor={c.accent}\n            />\n          ))}\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div style={{ border: `1px solid ${c.border}`, borderRadius: '10px', overflow: 'hidden', marginBottom: '8px' }}>\n      <button\n        onClick={() => setOpen((v) => !v)}\n        style={{\n          width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n          padding: '14px 16px', background: open ? `${c.accent}10` : c.surface,\n          border: 'none', cursor: 'pointer', textAlign: 'left',\n        }}\n      >\n        <span style={{ fontSize: '15px', fontWeight: 600, color: c.text }}>{node.title}</span>\n        <span style={{ fontSize: '18px', color: c.muted, lineHeight: 1 }}>{open ? '−' : '+'}</span>\n      </button>\n      {open && (\n        <div style={{ padding: '16px', background: c.surface, display: 'flex', flexDirection: 'column', gap: '14px', borderTop: `1px solid ${c.border}` }}>\n          {fields.map((f) => (\n            <LacNodeField\n              key={f.path}\n              node={node}\n              field={f.path}\n              label={f.label}\n              as={f.as ?? (f.isList ? 'list' : undefined)}\n              textColor={c.text}\n              mutedColor={c.muted}\n              accentColor={c.accent}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  )\n}\n\n// ─── main component ───────────────────────────────────────────────────────────\nexport function LacRoleView({\n  role,\n  domain,\n  nodeTypes: nodeTypesOverride,\n  showRolePicker = false,\n  onRoleChange,\n  layout = 'accordion',\n  emptyMessage,\n  style,\n  colors,\n}: LacRoleViewProps) {\n  const { nodes } = useLacData()\n  const [activeRole, setActiveRole] = useState<AudienceRole>(role)\n\n  const c = { ...DEFAULT_COLORS, ...colors }\n  const sections = ROLE_SECTIONS[activeRole]\n\n  const handleRoleChange = (r: AudienceRole) => {\n    setActiveRole(r)\n    onRoleChange?.(r)\n  }\n\n  // Filter nodes for a section\n  const getNodes = (spec: SectionSpec): LacNode[] => {\n    const types = nodeTypesOverride ?? spec.nodeTypes\n    const statuses = spec.statuses ?? ['draft', 'active', 'frozen']\n    const domainFilter = Array.isArray(domain) ? domain : domain ? [domain] : null\n\n    return nodes.filter((n) =>\n      types.includes(n.type) &&\n      statuses.includes(n.status) &&\n      (domainFilter ? domainFilter.includes(n.domain) : true)\n    ).sort((a, b) => (a.priority ?? 99) - (b.priority ?? 99) || a.title.localeCompare(b.title))\n  }\n\n  const hasAnyContent = sections.some((s) =>\n    getNodes(s).some((n) =>\n      s.fields.some((f) => {\n        const val = getViewField(n, f.path)\n        return val != null && val !== '' && !(Array.isArray(val) && val.length === 0)\n      })\n    )\n  )\n\n  return (\n    <div style={{ background: c.bg, ...style }}>\n      {/* Role picker */}\n      {showRolePicker && (\n        <div style={{ display: 'flex', gap: '6px', flexWrap: 'wrap', marginBottom: '24px' }}>\n          {(Object.keys(ROLE_META) as AudienceRole[]).map((r) => (\n            <button\n              key={r}\n              onClick={() => handleRoleChange(r)}\n              style={{\n                padding: '6px 14px', borderRadius: '20px', fontSize: '13px', fontWeight: 500,\n                cursor: 'pointer', border: `1px solid ${activeRole === r ? c.accent : c.border}`,\n                background: activeRole === r ? `${c.accent}18` : c.surface,\n                color: activeRole === r ? c.accent : c.muted,\n              }}\n            >\n              {ROLE_META[r].emoji} {ROLE_META[r].label}\n            </button>\n          ))}\n        </div>\n      )}\n\n      {/* Content */}\n      {!hasAnyContent ? (\n        <div style={{ textAlign: 'center', padding: '40px 24px', color: c.muted, fontSize: '14px' }}>\n          {emptyMessage ?? `No ${ROLE_META[activeRole].label.toLowerCase()} content yet.\\nAdd nodes with ${activeRole} view fields to see them here.`}\n        </div>\n      ) : (\n        sections.map((spec) => {\n          const sectionNodes = getNodes(spec)\n          if (sectionNodes.length === 0) return null\n          return (\n            <div key={spec.sectionTitle} style={{ marginBottom: '32px' }}>\n              <h3 style={{ fontSize: '13px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.8px', color: c.muted, margin: '0 0 14px' }}>\n                {spec.sectionTitle}\n              </h3>\n              {sectionNodes.map((node) => (\n                <NodeItem\n                  key={node.id}\n                  node={node}\n                  fields={spec.fields}\n                  layout={layout}\n                  colors={c}\n                />\n              ))}\n            </div>\n          )\n        })\n      )}\n    </div>\n  )\n}\n\n// ─── role switcher standalone component ───────────────────────────────────────\nexport interface LacRoleSwitcherProps {\n  value: AudienceRole\n  onChange: (role: AudienceRole) => void\n  style?: React.CSSProperties\n  colors?: LacRoleViewProps['colors']\n}\n\nexport function LacRoleSwitcher({ value, onChange, style, colors }: LacRoleSwitcherProps) {\n  const c = { ...DEFAULT_COLORS, ...colors }\n  return (\n    <div style={{ display: 'flex', gap: '6px', flexWrap: 'wrap', ...style }}>\n      {(Object.keys(ROLE_META) as AudienceRole[]).map((r) => (\n        <button\n          key={r}\n          onClick={() => onChange(r)}\n          title={ROLE_META[r].description}\n          style={{\n            padding: '6px 14px', borderRadius: '20px', fontSize: '13px', fontWeight: 500,\n            cursor: 'pointer', border: `1px solid ${value === r ? c.accent : c.border}`,\n            background: value === r ? `${c.accent}18` : c.surface,\n            color: value === r ? c.accent : c.muted,\n          }}\n        >\n          {ROLE_META[r].emoji} {ROLE_META[r].label}\n        </button>\n      ))}\n    </div>\n  )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport type { AudienceRole } from './LacRoleView.js'\nimport { ROLE_META } from './LacRoleView.js'\nimport { useLacNode } from '../hooks.js'\nimport { LacNodeField } from './LacNodeField.js'\nimport { getViewField } from '../utils.js'\n\n// ─── field map per role ───────────────────────────────────────────────────────\nconst ROLE_FIELDS: Record<AudienceRole, Array<{ path: string; label?: string; isList?: boolean }>> = {\n  user:    [{ path: 'views.user.userGuide' }, { path: 'views.user.knownLimitations', label: 'Keep in mind', isList: true }],\n  dev:     [{ path: 'views.dev.componentFile', label: 'Component' }, { path: 'views.dev.implementation', label: 'Implementation' }, { path: 'views.dev.edgeCases', label: 'Edge cases' }],\n  support: [{ path: 'views.support.steps', label: 'Steps', isList: true }, { path: 'views.support.escalationPath', label: 'Escalation' }, { path: 'views.support.rollback', label: 'Rollback' }],\n  product: [{ path: 'views.product.problem', label: 'Problem' }, { path: 'views.product.acceptanceCriteria', label: 'Acceptance criteria', isList: true }],\n  tester:  [{ path: 'views.tester.testCases', label: 'Test cases', isList: true }, { path: 'views.tester.edgeCases', label: 'Edge cases', isList: true }],\n}\n\nexport interface LacHelpButtonProps {\n  /** Node ID to show help for */\n  nodeId: string\n  /** Which audience lens to show. Defaults to 'user' */\n  role?: AudienceRole\n  /** Allow switching roles inside the drawer */\n  allowRoleSwitch?: boolean\n  /** Button label. Defaults to \"?\" */\n  label?: string | React.ReactNode\n  /** 'fixed' positions in corner of viewport; 'inline' renders as a normal button */\n  position?: 'fixed' | 'inline'\n  style?: React.CSSProperties\n  colors?: {\n    bg?: string\n    surface?: string\n    border?: string\n    text?: string\n    muted?: string\n    accent?: string\n    buttonBg?: string\n    buttonText?: string\n    overlay?: string\n  }\n}\n\nconst DEFAULT_COLORS = {\n  bg: '#f9f7f2',\n  surface: '#ffffff',\n  border: '#e0dbd3',\n  text: '#1a1a2e',\n  muted: '#6b6570',\n  accent: '#7ec8a4',\n  buttonBg: '#7ec8a4',\n  buttonText: '#ffffff',\n  overlay: 'rgba(26,26,46,0.4)',\n}\n\nexport function LacHelpButton({\n  nodeId,\n  role: initialRole = 'user',\n  allowRoleSwitch = false,\n  label = '?',\n  position = 'inline',\n  style,\n  colors,\n}: LacHelpButtonProps) {\n  const [open, setOpen] = useState(false)\n  const [activeRole, setActiveRole] = useState<AudienceRole>(initialRole)\n  const drawerRef = useRef<HTMLDivElement>(null)\n  const node = useLacNode(nodeId)\n  const c = { ...DEFAULT_COLORS, ...colors }\n\n  // Close on ESC\n  useEffect(() => {\n    if (!open) return\n    const handler = (e: KeyboardEvent) => { if (e.key === 'Escape') setOpen(false) }\n    document.addEventListener('keydown', handler)\n    return () => document.removeEventListener('keydown', handler)\n  }, [open])\n\n  const btnStyle: React.CSSProperties = {\n    width: '36px', height: '36px', borderRadius: '50%',\n    background: c.buttonBg, color: c.buttonText,\n    border: 'none', cursor: 'pointer',\n    fontWeight: 700, fontSize: '16px',\n    display: 'flex', alignItems: 'center', justifyContent: 'center',\n    flexShrink: 0,\n    ...(position === 'fixed' ? { position: 'fixed', bottom: '24px', right: '24px', zIndex: 9000, boxShadow: '0 2px 12px rgba(0,0,0,0.2)' } : {}),\n    ...style,\n  }\n\n  if (!node) return null\n\n  const fields = ROLE_FIELDS[activeRole]\n  const hasContent = fields.some((f) => {\n    const val = getViewField(node, f.path)\n    return val != null && val !== '' && !(Array.isArray(val) && val.length === 0)\n  })\n\n  return (\n    <>\n      <button style={btnStyle} onClick={() => setOpen(true)} aria-label={`Help for ${node.title}`}>\n        {label}\n      </button>\n\n      {open && (\n        <div\n          style={{ position: 'fixed', inset: 0, zIndex: 9001, display: 'flex', alignItems: 'flex-end', justifyContent: 'center', background: c.overlay }}\n          onClick={(e) => { if (e.target === e.currentTarget) setOpen(false) }}\n        >\n          <div\n            ref={drawerRef}\n            style={{ width: '100%', maxWidth: '560px', maxHeight: '80vh', background: c.bg, borderRadius: '16px 16px 0 0', padding: '0 0 32px', overflow: 'hidden', display: 'flex', flexDirection: 'column' }}\n          >\n            {/* Header */}\n            <div style={{ padding: '16px 20px 12px', borderBottom: `1px solid ${c.border}`, display: 'flex', alignItems: 'center', justifyContent: 'space-between', flexShrink: 0 }}>\n              <div>\n                <div style={{ fontSize: '16px', fontWeight: 700, color: c.text }}>{node.title}</div>\n                {allowRoleSwitch && (\n                  <div style={{ display: 'flex', gap: '4px', marginTop: '8px', flexWrap: 'wrap' }}>\n                    {(Object.keys(ROLE_META) as AudienceRole[]).map((r) => (\n                      <button\n                        key={r}\n                        onClick={() => setActiveRole(r)}\n                        style={{ padding: '3px 10px', borderRadius: '20px', fontSize: '11px', fontWeight: 600, cursor: 'pointer', border: `1px solid ${activeRole === r ? c.accent : c.border}`, background: activeRole === r ? `${c.accent}20` : 'transparent', color: activeRole === r ? c.accent : c.muted }}\n                      >\n                        {ROLE_META[r].emoji} {ROLE_META[r].label}\n                      </button>\n                    ))}\n                  </div>\n                )}\n              </div>\n              <button onClick={() => setOpen(false)} style={{ background: 'none', border: 'none', fontSize: '22px', cursor: 'pointer', color: c.muted, lineHeight: 1, padding: '4px' }}>×</button>\n            </div>\n\n            {/* Body */}\n            <div style={{ flex: 1, overflowY: 'auto', padding: '20px' }}>\n              {!hasContent ? (\n                <p style={{ color: c.muted, fontSize: '14px', textAlign: 'center', padding: '24px 0' }}>\n                  No {ROLE_META[activeRole].label.toLowerCase()} content for this node yet.\n                </p>\n              ) : (\n                <div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n                  {fields.map((f) => (\n                    <LacNodeField\n                      key={f.path}\n                      node={node}\n                      field={f.path}\n                      label={f.label}\n                      as={f.isList ? 'list' : undefined}\n                      textColor={c.text}\n                      mutedColor={c.muted}\n                      accentColor={c.accent}\n                      fontSize=\"15px\"\n                    />\n                  ))}\n                </div>\n              )}\n            </div>\n          </div>\n        </div>\n      )}\n    </>\n  )\n}\n","import React from 'react'\nimport type { AudienceRole } from './LacRoleView.js'\nimport { LacRoleView, LacRoleSwitcher } from './LacRoleView.js'\nimport { LacNodeField } from './LacNodeField.js'\nimport { useLacData, useLacNodesByType } from '../hooks.js'\nimport { useState } from 'react'\n\nexport interface LacAboutProps {\n  /**\n   * Default audience role. Pass `showRoleSwitcher` to let the viewer pick.\n   * Defaults to 'user' — the grandparent-readable view.\n   */\n  role?: AudienceRole\n  showRoleSwitcher?: boolean\n  /** Limit to a specific domain (e.g. 'games' shows only game nodes) */\n  domain?: string | string[]\n  /** Layout for the role view section */\n  layout?: 'accordion' | 'flat'\n  style?: React.CSSProperties\n  colors?: {\n    bg?: string\n    surface?: string\n    border?: string\n    text?: string\n    muted?: string\n    accent?: string\n    accentDark?: string\n  }\n}\n\nconst DEFAULT_COLORS = {\n  bg: '#f9f7f2',\n  surface: '#ffffff',\n  border: '#e0dbd3',\n  text: '#1a1a2e',\n  muted: '#6b6570',\n  accent: '#7ec8a4',\n  accentDark: '#4da87e',\n}\n\nexport function LacAbout({\n  role: initialRole = 'user',\n  showRoleSwitcher = false,\n  domain,\n  layout = 'accordion',\n  style,\n  colors,\n}: LacAboutProps) {\n  const [activeRole, setActiveRole] = useState<AudienceRole>(initialRole)\n  const { graph } = useLacData()\n  const epics = useLacNodesByType('epic')\n  const c = { ...DEFAULT_COLORS, ...colors }\n\n  const epic = epics[0] // Use first epic as the project vision\n\n  return (\n    <div style={{ background: c.bg, ...style }}>\n      {/* Project vision — from the epic node */}\n      {epic && (\n        <div style={{ marginBottom: '40px' }}>\n          <h1 style={{ fontSize: '26px', fontWeight: 700, color: c.text, margin: '0 0 6px', letterSpacing: '-0.5px' }}>\n            {epic.title}\n          </h1>\n          {graph?.project && epic.title !== graph.project && (\n            <div style={{ fontSize: '12px', color: c.muted, marginBottom: '16px' }}>\n              {graph.project}\n            </div>\n          )}\n          <LacNodeField\n            node={epic}\n            field=\"views.product.problem\"\n            style={{ marginBottom: '16px' }}\n            textColor={c.text}\n            mutedColor={c.muted}\n            accentColor={c.accent}\n            fontSize=\"16px\"\n          />\n          <LacNodeField\n            node={epic}\n            field=\"views.product.successCriteria\"\n            label=\"Success looks like\"\n            textColor={c.text}\n            mutedColor={c.muted}\n            accentColor={c.accent}\n            fontSize=\"15px\"\n          />\n        </div>\n      )}\n\n      {/* Role switcher */}\n      {showRoleSwitcher && (\n        <div style={{ marginBottom: '24px' }}>\n          <div style={{ fontSize: '12px', fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.6px', color: c.muted, marginBottom: '8px' }}>\n            I am a…\n          </div>\n          <LacRoleSwitcher\n            value={activeRole}\n            onChange={setActiveRole}\n            colors={{ surface: c.surface, border: c.border, muted: c.muted, accent: c.accent }}\n          />\n        </div>\n      )}\n\n      {/* Role-specific content */}\n      <LacRoleView\n        role={activeRole}\n        domain={domain}\n        layout={layout}\n        colors={{ bg: c.bg, surface: c.surface, border: c.border, text: c.text, muted: c.muted, accent: c.accent }}\n      />\n    </div>\n  )\n}\n","/**\n * LacInheritedHelp — makes the LAC parent/children relationship visible in the UI.\n *\n * Shows content inherited from a parent node first (\"shared rules\"), then the\n * child node's specific overrides (\"this game specifically\"). Mirrors how\n * inheritance works in code: base class first, subclass second.\n *\n * Works for any project — not just games. Any two nodes connected via\n * node.parent can be rendered this way.\n */\nimport React, { useState } from 'react'\nimport type { LacNode } from '../../schema.js'\nimport type { AudienceRole } from './LacRoleView.js'\nimport { ROLE_META } from './LacRoleView.js'\nimport { useLacNodeWithParent } from '../hooks.js'\nimport { LacNodeField } from './LacNodeField.js'\nimport { getViewField } from '../utils.js'\n\n// ─── field map per role (mirrors LacHelpButton) ───────────────────────────────\nconst ROLE_FIELDS: Record<AudienceRole, Array<{ path: string; label?: string; isList?: boolean }>> = {\n  user:    [{ path: 'views.user.userGuide' }, { path: 'views.user.knownLimitations', label: 'Keep in mind', isList: true }],\n  dev:     [{ path: 'views.dev.componentFile', label: 'Component' }, { path: 'views.dev.implementation', label: 'Implementation' }, { path: 'views.dev.edgeCases', label: 'Edge cases' }],\n  support: [{ path: 'views.support.steps', label: 'Steps', isList: true }, { path: 'views.support.escalationPath', label: 'Escalation' }],\n  product: [{ path: 'views.product.problem', label: 'Problem' }, { path: 'views.product.acceptanceCriteria', label: 'Acceptance criteria', isList: true }],\n  tester:  [{ path: 'views.tester.testCases', label: 'Test cases', isList: true }, { path: 'views.tester.edgeCases', label: 'Edge cases', isList: true }],\n}\n\nfunction hasAnyField(node: LacNode, fields: Array<{ path: string }>) {\n  return fields.some((f) => {\n    const v = getViewField(node, f.path)\n    return v != null && v !== '' && !(Array.isArray(v) && v.length === 0)\n  })\n}\n\n// ─── a single node's fields block ────────────────────────────────────────────\nfunction NodeBlock({\n  node,\n  label,\n  labelColor,\n  connectorColor,\n  isBase,\n  role,\n  colors: c,\n}: {\n  node: LacNode\n  label: string\n  labelColor: string\n  connectorColor: string\n  isBase: boolean\n  role: AudienceRole\n  colors: Required<NonNullable<LacInheritedHelpProps['colors']>>\n}) {\n  const fields = ROLE_FIELDS[role]\n  if (!hasAnyField(node, fields)) return null\n\n  return (\n    <div style={{ position: 'relative' }}>\n      {/* Inheritance badge */}\n      <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '10px' }}>\n        <span style={{ fontSize: '10px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.8px', color: labelColor, background: `${labelColor}18`, border: `1px solid ${labelColor}30`, borderRadius: '20px', padding: '2px 10px' }}>\n          {isBase ? '⬡ shared' : '◆ this game'}\n        </span>\n        <span style={{ fontSize: '13px', fontWeight: 600, color: c.text }}>{node.title}</span>\n      </div>\n\n      {/* Content */}\n      <div style={{ paddingLeft: '16px', borderLeft: `2px solid ${connectorColor}` }}>\n        <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n          {fields.map((f) => (\n            <LacNodeField\n              key={f.path}\n              node={node}\n              field={f.path}\n              label={f.label}\n              as={f.isList ? 'list' : undefined}\n              textColor={c.text}\n              mutedColor={c.muted}\n              accentColor={c.accent}\n              fontSize=\"14px\"\n            />\n          ))}\n        </div>\n      </div>\n    </div>\n  )\n}\n\n// ─── props ────────────────────────────────────────────────────────────────────\nexport interface LacInheritedHelpProps {\n  /** The child node ID (e.g. \"feature-count-the-dots-g1a2\") */\n  nodeId: string\n  /** Audience role — determines which fields to show */\n  role?: AudienceRole\n  /** Show a role picker above */\n  showRolePicker?: boolean\n  /** Whether to show the connector line between parent and child */\n  showConnector?: boolean\n  style?: React.CSSProperties\n  colors?: {\n    bg?: string\n    surface?: string\n    border?: string\n    text?: string\n    muted?: string\n    accent?: string\n    parentAccent?: string\n  }\n}\n\nconst DEFAULT_COLORS = {\n  bg: '#f9f7f2',\n  surface: '#ffffff',\n  border: '#e0dbd3',\n  text: '#1a1a2e',\n  muted: '#6b6570',\n  accent: '#7ec8a4',\n  parentAccent: '#b0c4de',\n}\n\nexport function LacInheritedHelp({\n  nodeId,\n  role: initialRole = 'user',\n  showRolePicker = false,\n  showConnector = true,\n  style,\n  colors,\n}: LacInheritedHelpProps) {\n  const [activeRole, setActiveRole] = useState<AudienceRole>(initialRole)\n  const { node, parent } = useLacNodeWithParent(nodeId)\n  const c = { ...DEFAULT_COLORS, ...colors }\n\n  if (!node) return null\n\n  const hasParent = !!parent && hasAnyField(parent, ROLE_FIELDS[activeRole])\n  const hasChild = hasAnyField(node, ROLE_FIELDS[activeRole])\n\n  return (\n    <div style={{ background: c.bg, ...style }}>\n      {/* Role picker */}\n      {showRolePicker && (\n        <div style={{ display: 'flex', gap: '4px', flexWrap: 'wrap', marginBottom: '20px' }}>\n          {(Object.keys(ROLE_META) as AudienceRole[]).map((r) => (\n            <button\n              key={r}\n              onClick={() => setActiveRole(r)}\n              style={{ padding: '4px 12px', borderRadius: '20px', fontSize: '12px', fontWeight: 500, cursor: 'pointer', border: `1px solid ${activeRole === r ? c.accent : c.border}`, background: activeRole === r ? `${c.accent}18` : 'transparent', color: activeRole === r ? c.accent : c.muted }}\n            >\n              {ROLE_META[r].emoji} {ROLE_META[r].label}\n            </button>\n          ))}\n        </div>\n      )}\n\n      {!hasParent && !hasChild && (\n        <p style={{ color: c.muted, fontSize: '14px', textAlign: 'center', padding: '24px 0' }}>\n          No {ROLE_META[activeRole].label.toLowerCase()} content yet.\n        </p>\n      )}\n\n      {/* Parent block (base class) */}\n      {hasParent && parent && (\n        <NodeBlock\n          node={parent}\n          label=\"shared\"\n          labelColor={c.parentAccent}\n          connectorColor={c.parentAccent}\n          isBase\n          role={activeRole}\n          colors={c}\n        />\n      )}\n\n      {/* Connector between parent and child */}\n      {hasParent && hasChild && showConnector && (\n        <div style={{ display: 'flex', alignItems: 'center', gap: '8px', margin: '16px 0' }}>\n          <div style={{ width: '24px', height: '1px', background: c.border }} />\n          <span style={{ fontSize: '10px', color: c.muted, fontStyle: 'italic' }}>extended by</span>\n          <div style={{ flex: 1, height: '1px', background: c.border }} />\n        </div>\n      )}\n\n      {/* Child block (specific overrides) */}\n      {hasChild && (\n        <NodeBlock\n          node={node}\n          label=\"this game\"\n          labelColor={c.accent}\n          connectorColor={c.accent}\n          isBase={false}\n          role={activeRole}\n          colors={c}\n        />\n      )}\n    </div>\n  )\n}\n\n// ─── LacHelpButton variant with inheritance baked in ─────────────────────────\nexport interface LacInheritedHelpButtonProps {\n  nodeId: string\n  role?: AudienceRole\n  allowRoleSwitch?: boolean\n  label?: string | React.ReactNode\n  position?: 'fixed' | 'inline'\n  style?: React.CSSProperties\n  colors?: LacInheritedHelpProps['colors']\n}\n\nexport function LacInheritedHelpButton({\n  nodeId,\n  role: initialRole = 'user',\n  allowRoleSwitch = false,\n  label = '?',\n  position = 'inline',\n  style,\n  colors,\n}: LacInheritedHelpButtonProps) {\n  const [open, setOpen] = useState(false)\n  const [activeRole, setActiveRole] = useState<AudienceRole>(initialRole)\n  const { node } = useLacNodeWithParent(nodeId)\n  const c = { ...DEFAULT_COLORS, ...colors }\n\n  if (!node) return null\n\n  const btnStyle: React.CSSProperties = {\n    width: '34px', height: '34px', borderRadius: '50%',\n    background: c.accent, color: '#fff',\n    border: 'none', cursor: 'pointer', fontWeight: 700, fontSize: '15px',\n    display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0,\n    ...(position === 'fixed' ? { position: 'fixed', bottom: '24px', right: '24px', zIndex: 9000, boxShadow: '0 2px 12px rgba(0,0,0,0.2)' } : {}),\n    ...style,\n  }\n\n  return (\n    <>\n      <button style={btnStyle} onClick={() => setOpen(true)} aria-label={`Help for ${node.title}`}>\n        {label}\n      </button>\n\n      {open && (\n        <div\n          style={{ position: 'fixed', inset: 0, zIndex: 9001, display: 'flex', alignItems: 'flex-end', justifyContent: 'center', background: 'rgba(26,26,46,0.4)' }}\n          onClick={(e) => { if (e.target === e.currentTarget) setOpen(false) }}\n        >\n          <div style={{ width: '100%', maxWidth: '560px', maxHeight: '82vh', background: c.bg, borderRadius: '16px 16px 0 0', display: 'flex', flexDirection: 'column', overflow: 'hidden' }}>\n            {/* Header */}\n            <div style={{ padding: '16px 20px 12px', borderBottom: `1px solid ${c.border}`, display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between', flexShrink: 0 }}>\n              <div style={{ flex: 1 }}>\n                <div style={{ fontSize: '16px', fontWeight: 700, color: c.text }}>{node.title}</div>\n                {allowRoleSwitch && (\n                  <div style={{ display: 'flex', gap: '4px', marginTop: '8px', flexWrap: 'wrap' }}>\n                    {(Object.keys(ROLE_META) as AudienceRole[]).map((r) => (\n                      <button key={r} onClick={() => setActiveRole(r)}\n                        style={{ padding: '2px 10px', borderRadius: '20px', fontSize: '11px', fontWeight: 600, cursor: 'pointer', border: `1px solid ${activeRole === r ? c.accent : c.border}`, background: activeRole === r ? `${c.accent}20` : 'transparent', color: activeRole === r ? c.accent : c.muted }}>\n                        {ROLE_META[r].emoji} {ROLE_META[r].label}\n                      </button>\n                    ))}\n                  </div>\n                )}\n              </div>\n              <button onClick={() => setOpen(false)} style={{ background: 'none', border: 'none', fontSize: '22px', cursor: 'pointer', color: c.muted, padding: '0 0 0 12px' }}>×</button>\n            </div>\n\n            {/* Body — inherited content */}\n            <div style={{ flex: 1, overflowY: 'auto', padding: '20px' }}>\n              <LacInheritedHelp\n                nodeId={nodeId}\n                role={activeRole}\n                showConnector\n                colors={c}\n              />\n            </div>\n          </div>\n        </div>\n      )}\n    </>\n  )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAA4F;;;ACiBrF,IAAM,aAAuB;AAAA,EAClC,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,cAAc;AAAA,EACd,gBAAgB;AAClB;AAEO,IAAM,cAAwB;AAAA,EACnC,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,cAAc;AAAA,EACd,gBAAgB;AAClB;AAEO,SAAS,aAAa,MAAoB,WAAyC;AACxF,MAAI;AACJ,MAAI,SAAS,UAAU;AACrB,WAAO,OAAO,WAAW,eAAe,OAAO,WAAW,8BAA8B,EAAE,UACtF,aAAa;AAAA,EACnB,OAAO;AACL,WAAO,SAAS,SAAS,aAAa;AAAA,EACxC;AACA,SAAO,YAAY,EAAE,GAAG,MAAM,GAAG,UAAU,IAAI;AACjD;;;ADGS;AA9CT,IAAM,iBAAa,4BAAsC,IAAI;AAUtD,SAAS,gBAAgB,EAAE,SAAS,MAAM,YAAY,UAAU,QAAQ,QAAQ,eAAe,GAAyB;AAC7H,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAA0B,cAAc,IAAI;AACtE,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,CAAC,cAAc,CAAC,CAAC,OAAO;AAC/D,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAwB,IAAI;AAEtD,QAAM,oBAAgB,sBAAQ,MAAM;AAClC,QAAI,OAAO,UAAU,SAAU,QAAO,aAAa,OAAO,cAAc;AACxE,WAAO,aAAa,QAAQ,EAAE,GAAG,OAAO,GAAG,eAAe,CAAC;AAAA,EAC7D,GAAG,CAAC,OAAO,cAAc,CAAC;AAE1B,QAAM,iBAAa,0BAAY,YAAY;AACzC,QAAI,CAAC,QAAS;AACd,eAAW,IAAI;AACf,aAAS,IAAI;AACb,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,OAAO;AAC/B,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,QAAQ,IAAI,MAAM,YAAY,OAAO,0BAA0B;AAC5F,eAAS,MAAM,IAAI,KAAK,CAAa;AAAA,IACvC,SAAS,GAAG;AACV,eAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,IACrD,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,8BAAU,MAAM;AAEd,QAAI,YAAY;AAAE,eAAS,UAAU;AAAG,iBAAW,KAAK;AAAG;AAAA,IAAO;AAClE,QAAI,QAAS,YAAW;AAAA,EAC1B,GAAG,CAAC,YAAY,SAAS,UAAU,CAAC;AAEpC,QAAM,YAAQ;AAAA,IACZ,OAAO,EAAE,OAAO,SAAS,OAAO,OAAO,eAAe,SAAS,WAAW;AAAA,IAC1E,CAAC,OAAO,SAAS,OAAO,eAAe,UAAU;AAAA,EACnD;AAEA,SAAO,4CAAC,WAAW,UAAX,EAAoB,OAAe,UAAS;AACtD;AAEO,SAAS,gBAAiC;AAC/C,QAAM,UAAM,yBAAW,UAAU;AACjC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,0DAA0D;AACpF,SAAO;AACT;;;AElEA,IAAAA,gBAAwB;;;ACGjB,SAAS,aAAa,MAAe,MAAuB;AACjE,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,MAAI,MAAe;AACnB,aAAW,QAAQ,OAAO;AACxB,QAAI,OAAO,QAAQ,OAAO,QAAQ,SAAU,QAAO;AACnD,UAAO,IAAgC,IAAI;AAAA,EAC7C;AACA,SAAO;AACT;AAEO,SAAS,YAAY,QAAmB,OAAyB;AACtE,UAAQ,QAAQ;AAAA,IACd,KAAK;AAAS,aAAO,MAAM;AAAA,IAC3B,KAAK;AAAU,aAAO,MAAM;AAAA,IAC5B,KAAK;AAAU,aAAO;AAAA,IACtB,KAAK;AAAc,aAAO;AAAA,EAC5B;AACF;AAEO,SAAS,SAAS,QAAmB,OAAyB;AACnE,UAAQ,QAAQ;AAAA,IACd,KAAK;AAAS,aAAO;AAAA,IACrB,KAAK;AAAU,aAAO,MAAM;AAAA,IAC5B,KAAK;AAAU,aAAO;AAAA,IACtB,KAAK;AAAc,aAAO;AAAA,EAC5B;AACF;AAEO,SAAS,cAAc,UAA2B;AACvD,SAAO,WAAW,IAAI,QAAQ,KAAK;AACrC;AAEO,SAAS,UAAU,MAAsB;AAC9C,SAAO,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AACpD;AAOA,SAAS,SAAS,KAAc,GAAoB;AAClD,MAAI,OAAO,QAAQ,SAAU,QAAO,IAAI,YAAY,EAAE,SAAS,CAAC;AAChE,MAAI,MAAM,QAAQ,GAAG,EAAG,QAAO,IAAI,KAAK,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC7D,MAAI,QAAQ,QAAQ,OAAO,QAAQ,SAAU,QAAO,OAAO,OAAO,GAAa,EAAE,KAAK,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3G,SAAO;AACT;AAEO,SAAS,iBAAiB,MAAe,OAAwB;AACtE,MAAI,CAAC,MAAM,KAAK,EAAG,QAAO;AAC1B,QAAM,IAAI,MAAM,YAAY;AAC5B,SACE,KAAK,MAAM,YAAY,EAAE,SAAS,CAAC,KACnC,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC,KACpC,KAAK,KAAK,YAAY,EAAE,SAAS,CAAC,MACjC,KAAK,QAAQ,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,KACzD,SAAS,KAAK,OAAO,CAAC;AAE1B;;;ADxDO,SAAS,aAAa;AAC3B,QAAM,EAAE,OAAO,SAAS,OAAO,OAAO,QAAQ,IAAI,cAAc;AAChE,SAAO;AAAA,IACL;AAAA,IACA,OAAO,OAAO,SAAS,CAAC;AAAA,IACxB,OAAO,OAAO,SAAS,CAAC;AAAA,IACxB,SAAS,OAAO,KAAK,WAAW,CAAC;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,WAAW,IAAiC;AAC1D,QAAM,EAAE,MAAM,IAAI,cAAc;AAChC,aAAO,uBAAQ,MAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;AACzE;AAEO,SAAS,kBAAkB,MAAyB;AACzD,QAAM,EAAE,MAAM,IAAI,cAAc;AAChC,aAAO,uBAAQ,OAAO,OAAO,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC;AACzF;AAEO,SAAS,oBAAoB,QAA8B;AAChE,QAAM,EAAE,MAAM,IAAI,cAAc;AAChC,aAAO,uBAAQ,OAAO,OAAO,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,GAAG,CAAC,OAAO,MAAM,CAAC;AAC/F;AAEO,SAAS,oBAAoB,QAA2B;AAC7D,QAAM,EAAE,MAAM,IAAI,cAAc;AAChC,aAAO,uBAAQ,OAAO,OAAO,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,GAAG,CAAC,OAAO,MAAM,CAAC;AAC/F;AAEO,SAAS,aAAa,OAA0B;AACrD,QAAM,EAAE,MAAM,IAAI,cAAc;AAChC,aAAO,uBAAQ,MAAM;AACnB,QAAI,CAAC,MAAM,KAAK,EAAG,QAAO,CAAC;AAC3B,YAAQ,OAAO,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAAA,EACtE,GAAG,CAAC,OAAO,KAAK,CAAC;AACnB;AAEO,SAAS,eAA0B;AACxC,QAAM,EAAE,MAAM,IAAI,cAAc;AAChC,aAAO,uBAAQ,MAAM;AACnB,YAAQ,OAAO,SAAS,CAAC,GACtB,OAAO,CAAC,MAAM,EAAE,WAAW,YAAY,EAAE,WAAW,OAAO,EAC3D,KAAK,CAAC,GAAG,MAAM;AACd,YAAM,KAAK,EAAE,YAAY;AACzB,YAAM,KAAK,EAAE,YAAY;AACzB,UAAI,OAAO,GAAI,QAAO,KAAK;AAC3B,aAAO,EAAE,MAAM,cAAc,EAAE,KAAK;AAAA,IACtC,CAAC;AAAA,EACL,GAAG,CAAC,KAAK,CAAC;AACZ;AAEO,SAAS,qBAAqB,IAAwE;AAC3G,QAAM,EAAE,MAAM,IAAI,cAAc;AAChC,aAAO,uBAAQ,MAAM;AACnB,UAAM,OAAO,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;AACjD,UAAM,SAAS,MAAM,SAAS,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,IAAI;AAC/E,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB,GAAG,CAAC,OAAO,EAAE,CAAC;AAChB;AAEO,SAAS,wBAAmC;AACjD,QAAM,EAAE,MAAM,IAAI,cAAc;AAChC,aAAO,uBAAQ,MAAM;AACnB,YAAQ,OAAO,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM;AACxC,YAAM,KAAK,EAAE,MAAM,SAAS,IAAI,iBAAiB;AACjD,YAAM,KAAK,EAAE,MAAM,SAAS,IAAI,oBAAoB;AACpD,aAAQ,OAAO,OAAO,YAAY,GAAG,KAAK,EAAE,SAAS,KAAO,MAAM,QAAQ,EAAE,KAAK,GAAG,SAAS;AAAA,IAC/F,CAAC;AAAA,EACH,GAAG,CAAC,KAAK,CAAC;AACZ;;;AE/EA,IAAAC,gBAAgC;;;ACAhC,IAAAC,gBAAgC;;;ACAhC,IAAAC,gBAAmD;;;ACwBzC,IAAAC,sBAAA;AAfV,IAAM,eAAe;AAErB,SAAS,YAAY,MAAc,OAAiB,YAAwD;AAC1G,QAAM,QAA2B,CAAC;AAClC,QAAM,KAAK;AACX,MAAI,OAAO;AACX,MAAI;AAEJ,UAAQ,IAAI,GAAG,KAAK,IAAI,OAAO,MAAM;AACnC,QAAI,EAAE,QAAQ,KAAM,OAAM,KAAK,KAAK,MAAM,MAAM,EAAE,KAAK,CAAC;AACxD,UAAM,QAAQ,EAAE,CAAC;AACjB,QAAI,MAAM,WAAW,GAAG,GAAG;AACzB,YAAM,QAAQ,MAAM,MAAM,GAAG,EAAE;AAC/B,UAAI,cAAc,aAAa,KAAK,KAAK,GAAG;AAC1C,cAAM;AAAA,UACJ,6CAAC,YAAqB,SAAS,MAAM,WAAW,KAAK,GAAG,OAAO,EAAE,YAAY,MAAM,UAAU,YAAY,0BAA0B,SAAS,WAAW,cAAc,OAAO,UAAU,QAAQ,OAAO,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,gBAAgB,aAAa,qBAAqB,SAAS,GAC9S,mBADU,EAAE,KAEf;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,KAAK,6CAAC,UAAmB,OAAO,EAAE,YAAY,MAAM,UAAU,YAAY,0BAA0B,SAAS,WAAW,cAAc,OAAO,UAAU,OAAO,GAAI,mBAAlJ,EAAE,KAAsJ,CAAO;AAAA,MACvL;AAAA,IACF,OAAO;AACL,YAAM,KAAK,6CAAC,YAAsB,gBAAM,MAAM,GAAG,EAAE,KAA3B,EAAE,KAA2B,CAAS;AAAA,IAChE;AACA,WAAO,EAAE,QAAQ,MAAM;AAAA,EACzB;AACA,MAAI,OAAO,KAAK,OAAQ,OAAM,KAAK,KAAK,MAAM,IAAI,CAAC;AACnD,SAAO;AACT;AAEO,SAAS,cAAc,EAAE,SAAS,OAAO,WAAW,GAAU;AACnE,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,QAAM,QAA2B,CAAC;AAClC,MAAI,IAAI;AAER,SAAO,IAAI,MAAM,QAAQ;AACvB,UAAM,OAAO,MAAM,CAAC;AAEpB,QAAI,KAAK,UAAU,EAAE,WAAW,KAAK,GAAG;AACtC,YAAM,YAAsB,CAAC;AAC7B;AACA,aAAO,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAG,UAAU,EAAE,WAAW,KAAK,GAAG;AAAE,kBAAU,KAAK,MAAM,CAAC,CAAE;AAAG;AAAA,MAAI;AACtG,YAAM,KAAK,6CAAC,SAAY,OAAO,EAAE,YAAY,MAAM,UAAU,YAAY,yBAAyB,QAAQ,mCAAmC,cAAc,OAAO,SAAS,aAAa,UAAU,QAAQ,WAAW,QAAQ,QAAQ,SAAS,YAAY,MAAM,GAAG,uDAAC,UAAM,oBAAU,KAAK,IAAI,GAAE,KAA1Q,CAAiR,CAAM;AAC5S;AACA;AAAA,IACF;AAEA,UAAM,eAAe,KAAK,MAAM,kBAAkB;AAClD,QAAI,cAAc;AAChB,YAAM,QAAQ,aAAa,CAAC,EAAG;AAC/B,YAAM,QAAQ,CAAC,QAAQ,QAAQ,MAAM;AACrC,YAAM,KAAK,6CAAC,SAAY,OAAO,EAAE,YAAY,KAAK,UAAU,MAAM,QAAQ,CAAC,KAAK,QAAQ,OAAO,MAAM,MAAM,WAAW,UAAU,IAAI,SAAS,OAAO,cAAc,MAAM,GAAI,sBAAY,aAAa,CAAC,GAAI,OAAO,UAAU,KAAtM,CAAwM,CAAM;AACnO;AACA;AAAA,IACF;AAEA,QAAI,KAAK,MAAM,UAAU,GAAG;AAC1B,YAAM,QAAkB,CAAC;AACzB,aAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAG,MAAM,UAAU,GAAG;AAAE,cAAM,KAAK,MAAM,CAAC,EAAG,QAAQ,YAAY,EAAE,CAAC;AAAG;AAAA,MAAI;AAC7G,YAAM,KAAK,6CAAC,QAAW,OAAO,EAAE,QAAQ,SAAS,aAAa,OAAO,GAAI,gBAAM,IAAI,CAAC,MAAM,QAAQ,6CAAC,QAAa,OAAO,EAAE,OAAO,MAAM,MAAM,UAAU,QAAQ,cAAc,OAAO,eAAe,OAAO,GAAI,sBAAY,MAAM,OAAO,UAAU,KAArI,GAAuI,CAAK,KAAnO,CAAqO,CAAK;AAC9P;AAAA,IACF;AAEA,QAAI,KAAK,KAAK,MAAM,IAAI;AAAE;AAAK;AAAA,IAAS;AAExC,UAAM,KAAK,6CAAC,OAAU,OAAO,EAAE,OAAO,MAAM,MAAM,UAAU,QAAQ,QAAQ,eAAe,YAAY,MAAM,GAAI,sBAAY,MAAM,OAAO,UAAU,KAAjI,CAAmI,CAAI;AAC1J;AAAA,EACF;AAEA,SAAO,6CAAC,SAAK,iBAAM;AACrB;;;AD5BS,IAAAC,sBAAA;AA9CT,IAAMC,gBAAe;AACrB,IAAM,gBAAgB;AAetB,IAAM,YAAY,CAAC,OAAO,WAAW,QAAQ,WAAW,QAAQ;AAChE,IAAM,cAAsC,EAAE,KAAK,OAAO,SAAS,WAAW,MAAM,SAAS,SAAS,OAAO,QAAQ,QAAQ;AAC7H,IAAM,qBAA6C,EAAE,MAAM,UAAK,SAAS,UAAK,UAAU,UAAK,UAAU,UAAK,SAAS,UAAK,SAAS,UAAK,KAAK,UAAK,KAAK,SAAI;AAC3J,IAAM,eAAuC;AAAA,EAC3C,gBAAgB;AAAA,EAAkB,eAAe;AAAA,EAAkB,cAAc;AAAA,EACjF,WAAW;AAAA,EAAc,QAAQ;AAAA,EAAU,WAAW;AAAA,EACtD,SAAS;AAAA,EAAW,iBAAiB;AAAA,EAAoB,oBAAoB;AAAA,EAC7E,SAAS;AAAA,EAAW,YAAY;AAAA,EAAc,QAAQ;AAAA,EACtD,WAAW;AAAA,EAAc,kBAAkB;AAAA,EAAqB,aAAa;AAAA,EAC7E,cAAc;AAAA,EAAiB,KAAK;AAAA,EAAO,cAAc;AAAA,EACzD,gBAAgB;AAAA,EAAc,OAAO;AAAA,EAAS,UAAU;AAAA,EACxD,WAAW;AAAA,EAAc,kBAAkB;AAAA,EAC3C,aAAa;AAAA,EAAgB,iBAAiB;AAAA,EAAoB,cAAc;AAClF;AACA,IAAM,kBAAgF;AAAA,EACpF,EAAE,KAAK,UAAU,OAAO,UAAU,OAAO,MAAM;AAAA,EAC/C,EAAE,KAAK,YAAY,OAAO,YAAY,OAAO,KAAK;AAAA,EAClD,EAAE,KAAK,cAAc,OAAO,cAAc,OAAO,KAAK;AAAA,EACtD,EAAE,KAAK,WAAW,OAAO,WAAW,OAAO,KAAK;AAAA,EAChD,EAAE,KAAK,aAAa,OAAO,cAAc,OAAO,KAAK;AAAA,EACrD,EAAE,KAAK,SAAS,OAAO,SAAS,OAAO,MAAM;AAAA,EAC7C,EAAE,KAAK,cAAc,OAAO,cAAc,OAAO,MAAM;AAAA,EACvD,EAAE,KAAK,gBAAgB,OAAO,iBAAiB,OAAO,MAAM;AAC9D;AAEA,SAAS,aAAa,EAAE,OAAO,UAAU,OAAO,EAAE,GAAsE;AACtH,QAAM,UAAM,sBAA4B,IAAI;AAC5C,+BAAU,MAAM;AACd,QAAI,IAAI,SAAS;AAAE,UAAI,QAAQ,MAAM,SAAS;AAAQ,UAAI,QAAQ,MAAM,SAAS,GAAG,IAAI,QAAQ,YAAY;AAAA,IAAK;AAAA,EACnH,GAAG,CAAC,KAAK,CAAC;AACV,SAAO,6CAAC,cAAS,KAAU,OAAc,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,QAAQ,YAAY,EAAE,UAAU,UAAU,QAAQ,OAAO,EAAE,MAAM,YAAY,EAAE,IAAI,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,OAAO,SAAS,OAAO,QAAQ,QAAQ,SAAS,QAAQ,YAAY,OAAO,UAAU,UAAU,WAAW,aAAa,GAAG;AAC3W;AAEA,SAAS,UAAU,EAAE,MAAM,OAAO,GAAG,WAAW,GAA2E;AACzH,QAAM,aAAa,cAAc,KAAK,IAAI;AAC1C,MAAI,YAAY;AACd,UAAM,CAAC,EAAE,OAAO,IAAI,IAAI;AACxB,UAAM,cAAc,KAAM,KAAK;AAC/B,UAAM,SAASA,cAAa,KAAK,WAAW;AAC5C,WACE,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,YAAY,KAAK,OAAO,UAAU,OAAO,GAClF;AAAA,mDAAC,UAAK,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,KAAK,UAAU,SAAS,YAAY,EAAE,GAAI,iBAAM;AAAA,MACzF,UAAU,aACT,6CAAC,YAAO,SAAS,MAAM,WAAW,WAAW,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,UAAU,QAAQ,YAAY,EAAE,UAAU,gBAAgB,aAAa,qBAAqB,UAAU,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,SAAS,EAAE,GAAI,uBAAY,IAElQ,6CAAC,UAAK,OAAO,EAAE,OAAO,EAAE,WAAW,YAAY,EAAE,UAAU,UAAU,OAAO,GAAI,uBAAY;AAAA,OAEhG;AAAA,EAEJ;AACA,MAAIA,cAAa,KAAK,IAAI,KAAK,YAAY;AACzC,WAAO,6CAAC,YAAO,SAAS,MAAM,WAAW,IAAI,GAAG,OAAO,EAAE,SAAS,SAAS,OAAO,EAAE,QAAQ,UAAU,QAAQ,YAAY,EAAE,UAAU,gBAAgB,aAAa,qBAAqB,UAAU,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,SAAS,EAAE,GAAI,gBAAK;AAAA,EAC/Q;AACA,SAAO,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,UAAU,OAAO,GAAG;AAAA,iDAAC,UAAK,OAAO,EAAE,OAAO,EAAE,WAAW,YAAY,EAAE,GAAG,oBAAC;AAAA,IAAO,6CAAC,UAAK,OAAO,EAAE,OAAO,EAAE,KAAK,GAAI,gBAAK;AAAA,KAAO;AACjL;AAEO,SAAS,eAAe,EAAE,MAAM,OAAO,GAAG,cAAc,OAAO,SAAS,OAAO,WAAW,eAAe,YAAY,QAAQ,UAAU,GAAwB;AACpK,QAAM,aAAa,YAAY,EAAE,GAAG,oBAAoB,GAAG,UAAU,IAAI;AACzE,QAAM,iBAAiB,UAAU,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,OAAO,KAAK,KAAK,MAAM,CAAC,CAAE,EAAE,SAAS,CAAC;AACtG,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,WAAW;AACxD,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,KAAK;AAC9C,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,KAAK;AAC1C,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAwB,IAAI;AAC9D,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAiC,CAAC,CAAC;AAEvE,+BAAU,MAAM;AAAE,gBAAY,KAAK;AAAG,iBAAa,IAAI;AAAA,EAAE,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC;AAEjF,QAAM,WAAY,KAAK,MAAM,UAAU,KAAK,CAAC;AAE7C,WAAS,YAAY;AACnB,UAAM,UAAkC,CAAC;AACzC,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,QAAQ,EAAG,SAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAK,EAAe,KAAK,IAAI,IAAI,OAAO,KAAK,EAAE;AAC1H,kBAAc,OAAO;AACrB,gBAAY,IAAI;AAChB,iBAAa,IAAI;AAAA,EACnB;AAEA,iBAAe,aAAa;AAC1B,QAAI,CAAC,OAAQ;AACb,cAAU,IAAI;AACd,iBAAa,IAAI;AACjB,UAAM,SAAkC,CAAC;AACzC,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,UAAU,GAAG;AAE/C,YAAM,WAAW,SAAS,CAAC;AAC3B,aAAO,SAAS,UAAU,IAAI,CAAC,EAAE,IAAI,MAAM,QAAQ,QAAQ,IACvD,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,IACjD;AAAA,IACN;AACA,QAAI;AAAE,YAAM,OAAO,KAAK,IAAI,KAAK,QAAQ,MAAM;AAAG,kBAAY,KAAK;AAAA,IAAE,SAC9D,GAAG;AAAE,mBAAa,aAAa,QAAQ,EAAE,UAAU,aAAa;AAAA,IAAE,UACzE;AAAU,gBAAU,KAAK;AAAA,IAAE;AAAA,EAC7B;AAEA,QAAM,YAAY,gBAAgB,QAAQ,CAAC,EAAE,KAAK,OAAO,MAAM,MAAM;AACnE,UAAM,MAAM,KAAK,GAAG;AACpB,QAAI,CAAC,IAAK,QAAO,CAAC;AAClB,UAAM,MAAgB,QAAS,MAAmB,CAAC,GAAa;AAChE,WAAO,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC;AAAA,EAChD,CAAC;AAED,SACE,8CAAC,SAAI,OAAO,EAAE,YAAY,EAAE,SAAS,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,EAAE,cAAc,UAAU,UAAU,GAAG,MAAM,GAE/H;AAAA,kDAAC,SAAI,OAAO,EAAE,SAAS,aAAa,cAAc,aAAa,EAAE,MAAM,IAAI,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,UAAU,OAAO,GAC7I;AAAA,mDAAC,UAAK,OAAO,EAAE,YAAY,SAAS,KAAK,QAAQ,CAAC,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,GAAG,SAAS,WAAW,cAAc,EAAE,gBAAgB,UAAU,OAAO,GAAI,eAAK,QAAO;AAAA,MAC9K,6CAAC,UAAK,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,OAAO,GAAI,oBAAU,KAAK,IAAI,GAAE;AAAA,MAC7E,8CAAC,UAAK,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,YAAY,KAAK,UAAU,QAAQ,UAAU,QAAQ,GAAI;AAAA,mBAAW,KAAK,IAAI,KAAK;AAAA,QAAI;AAAA,QAAE,KAAK;AAAA,SAAM;AAAA,MAC1I,6CAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,OAAO,EAAE,WAAW,YAAY,yBAAyB,cAAc,QAAQ,SAAS,UAAU,GAAI,eAAK,QAAO;AAAA,MAClJ,KAAK,YAAY,8CAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,OAAO,EAAE,QAAQ,YAAY,EAAE,UAAU,cAAc,QAAQ,SAAS,UAAU,GAAG;AAAA;AAAA,QAAE,KAAK;AAAA,SAAS;AAAA,MACvJ,UAAU,CAAC,YAAY,6CAAC,YAAO,SAAS,WAAW,OAAO,EAAE,SAAS,YAAY,UAAU,QAAQ,cAAc,EAAE,gBAAgB,QAAQ,aAAa,EAAE,MAAM,IAAI,YAAY,eAAe,OAAO,EAAE,WAAW,QAAQ,WAAW,YAAY,EAAE,WAAW,GAAG,kBAAI;AAAA,MACtQ,YAAY,8EACX;AAAA,qDAAC,YAAO,SAAS,YAAY,UAAU,QAAQ,OAAO,EAAE,SAAS,YAAY,UAAU,QAAQ,cAAc,EAAE,gBAAgB,QAAQ,QAAQ,YAAY,EAAE,QAAQ,OAAO,QAAQ,QAAQ,SAAS,SAAS,WAAW,SAAS,SAAS,MAAM,EAAE,GAAI,mBAAS,WAAM,QAAO;AAAA,QAC7Q,6CAAC,YAAO,SAAS,MAAM,YAAY,KAAK,GAAG,UAAU,QAAQ,OAAO,EAAE,SAAS,YAAY,UAAU,QAAQ,cAAc,EAAE,gBAAgB,QAAQ,aAAa,EAAE,MAAM,IAAI,YAAY,eAAe,OAAO,EAAE,WAAW,QAAQ,UAAU,GAAG,oBAAM;AAAA,SAC1P;AAAA,MACC,WAAW,6CAAC,YAAO,SAAS,SAAS,OAAO,EAAE,YAAY,QAAQ,QAAQ,QAAQ,OAAO,EAAE,WAAW,QAAQ,WAAW,UAAU,QAAQ,SAAS,SAAS,YAAY,EAAE,GAAG,kBAAC;AAAA,OAClL;AAAA,IAGC,eAAe,SAAS,KACvB,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,cAAc,aAAa,EAAE,MAAM,IAAI,YAAY,EAAE,GAAG,GACpF,yBAAe,IAAI,CAAC,MACnB,6CAAC,YAAe,SAAS,MAAM,cAAc,CAAC,GAAG,OAAO,EAAE,SAAS,YAAY,YAAY,QAAQ,QAAQ,QAAQ,cAAc,eAAe,IAAI,aAAa,EAAE,MAAM,KAAK,yBAAyB,OAAO,eAAe,IAAI,EAAE,SAAS,EAAE,WAAW,QAAQ,WAAW,YAAY,EAAE,YAAY,UAAU,QAAQ,YAAY,eAAe,IAAI,MAAM,IAAI,GAC9V,sBAAY,CAAC,KAAK,KADR,CAEb,CACD,GACH;AAAA,IAID,aACC,8CAAC,SAAI,OAAO,EAAE,SAAS,YAAY,YAAY,wBAAwB,cAAc,iCAAiC,OAAO,WAAW,UAAU,QAAQ,SAAS,QAAQ,gBAAgB,gBAAgB,GACzM;AAAA,mDAAC,UAAM,qBAAU;AAAA,MACjB,6CAAC,YAAO,SAAS,MAAM,aAAa,IAAI,GAAG,OAAO,EAAE,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,OAAO,UAAU,GAAG,kBAAC;AAAA,OAClI;AAAA,IAIF,8CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC3B;AAAA,aAAO,QAAQ,QAAQ,EAAE;AAAA,QAAI,CAAC,CAAC,KAAK,GAAG,MACtC,OAAO,QAAQ,QAAQ,KACrB,8CAAC,SAAc,OAAO,EAAE,cAAc,OAAO,GAC3C;AAAA,uDAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,QAAQ,eAAe,aAAa,eAAe,UAAU,YAAY,KAAK,cAAc,MAAM,GAC3I,uBAAa,GAAG,KAAK,KACxB;AAAA,UACC,WACC,6CAAC,gBAAa,OAAO,WAAW,GAAG,KAAK,IAAI,UAAU,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,OAAO,GAAG,IACjH,MAAM,QAAQ,GAAG,IACnB,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,MAAM,GAC/D,cAAiB,IAAI,CAAC,MAAM,QAAQ,6CAAC,aAAoB,MAAM,OAAO,IAAI,GAAG,OAAO,GAAG,cAAnC,GAA2D,CAAE,GACrH,IACE,OAAO,QAAQ,YAAYA,cAAa,KAAK,GAAG,KAAK,aACvD,6CAAC,YAAO,SAAS,MAAM,WAAW,GAAG,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,UAAU,QAAQ,gBAAgB,aAAa,qBAAqB,UAAU,YAAY,EAAE,UAAU,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,SAAS,EAAE,GAAI,eAAI,IAChP,OAAO,QAAQ,aAAa,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS,GAAG,KAAK,IAAI,MAAM,UAAU,KACnH,6CAAC,iBAAc,SAAS,KAAK,OAAO,GAAG,YAAwB,IAE/D,6CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,QAAQ,YAAY,MAAM,GAAI,iBAAO,GAAG,GAAE;AAAA,aAf3E,GAiBV,IACE;AAAA,MACN;AAAA,MACC,OAAO,KAAK,QAAQ,EAAE,WAAW,KAAK,6CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,OAAO,GAAG,0CAA4B;AAAA,OAC3H;AAAA,IAGC,CAAC,YAAY,UAAU,SAAS,KAC/B,8CAAC,SAAI,OAAO,EAAE,SAAS,aAAa,WAAW,aAAa,EAAE,MAAM,IAAI,SAAS,QAAQ,eAAe,UAAU,KAAK,MAAM,GAC3H;AAAA,mDAAC,SAAI,OAAO,EAAE,UAAU,QAAQ,OAAO,EAAE,WAAW,eAAe,aAAa,eAAe,UAAU,YAAY,IAAI,GAAG,qBAAO;AAAA,MAClI,UAAU,IAAI,CAAC,EAAE,OAAO,IAAI,MAC3B,8CAAC,SAAgB,OAAO,EAAE,SAAS,QAAQ,UAAU,QAAQ,YAAY,UAAU,KAAK,MAAM,GAC5F;AAAA,qDAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,OAAO,EAAE,WAAW,UAAU,OAAO,GAAI,iBAAM;AAAA,QAC/E,IAAI,IAAI,CAAC,OAAO;AACf,gBAAM,SAAS,WAAW,IAAI,EAAE;AAChC,gBAAM,OAAO,WAAW,QAAQ,QAAQ,EAAE,KAAK;AAC/C,gBAAM,QAAQ,QAAQ,SAAS,GAAG,QAAQ,kBAAkB,EAAE,EAAE,QAAQ,YAAY,EAAE,EAAE,QAAQ,MAAM,GAAG;AACzG,iBACE,8CAAC,YAAgB,SAAS,MAAM,gBAAgB,EAAE,GAAG,OAAO,EAAE,SAAS,eAAe,YAAY,UAAU,KAAK,OAAO,SAAS,YAAY,UAAU,QAAQ,cAAc,QAAQ,QAAQ,aAAa,EAAE,MAAM,IAAI,YAAY,EAAE,IAAI,OAAO,gBAAgB,EAAE,SAAS,EAAE,MAAM,QAAQ,gBAAgB,YAAY,WAAW,YAAY,EAAE,WAAW,GACxV;AAAA,yDAAC,UAAK,OAAO,EAAE,UAAU,OAAO,GAAI,gBAAK;AAAA,YACxC;AAAA,YACA,UAAU,6CAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,OAAO,EAAE,WAAW,YAAY,0BAA0B,cAAc,OAAO,SAAS,QAAQ,GAAI,iBAAO,QAAO;AAAA,eAHnJ,EAIb;AAAA,QAEJ,CAAC;AAAA,WAbO,KAcV,CACD;AAAA,OACH;AAAA,KAEJ;AAEJ;;;ADzLW,IAAAC,sBAAA;AAbJ,SAAS,eAAe,EAAE,OAAO,WAAW,SAAS,YAAY,GAAwB;AAC9F,QAAM,EAAE,OAAO,SAAS,IAAI,WAAW;AACvC,QAAM,IAAI,aAAa;AACvB,QAAM,QAAQ,aAAa;AAC3B,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAyB,IAAI;AAE7D,QAAM,WAAW,UAAU,MAAM,OAAO,CAAC,MAAM,QAAQ,SAAS,EAAE,MAAM,CAAC,IAAI;AAE7E,QAAM,cAAc,CAAC,SAAkB;AACrC,QAAI,aAAa;AAAE,kBAAY,IAAI;AAAA,IAAE,OAAO;AAAE,kBAAY,IAAI;AAAA,IAAE;AAAA,EAClE;AAEA,MAAI,UAAU;AACZ,WAAO,6CAAC,kBAAe,MAAM,UAAU,OAAO,GAAG,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG;AAAA,EAChH;AAEA,SACE,8CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC3B;AAAA,aAAS,WAAW,KAAK,6CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,SAAS,UAAU,WAAW,SAAS,GAAG,uCAAyB;AAAA,IAC9H,SAAS,IAAI,CAAC,SACb,8CAAC,SAAkB,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,QAAQ,SAAS,aAAa,cAAc,OAAO,YAAY,EAAE,SAAS,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,EAAE,gBAAgB,QAAQ,UAAU,GACrQ;AAAA,mDAAC,UAAK,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,QAAQ,UAAU,OAAO,GAAI,wBAAc,KAAK,QAAQ,GAAE;AAAA,MACvG,6CAAC,UAAK,OAAO,EAAE,YAAY,SAAS,KAAK,QAAQ,CAAC,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,GAAG,SAAS,WAAW,cAAc,EAAE,gBAAgB,UAAU,OAAO,GAAI,eAAK,QAAO;AAAA,MAC9K,6CAAC,UAAK,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,OAAO,GAAI,oBAAU,KAAK,IAAI,GAAE;AAAA,MAC7E,6CAAC,UAAK,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,UAAU,OAAO,GAAI,eAAK,OAAM;AAAA,MACvE,6CAAC,UAAK,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,OAAO,GAAI,eAAK,QAAO;AAAA,SAL5D,KAAK,EAMf,CACD;AAAA,KACH;AAEJ;;;AG3CA,IAAAC,gBAAgC;AA0BrB,IAAAC,sBAAA;AAdJ,SAAS,SAAS,EAAE,OAAO,WAAW,YAAY,GAAkB;AACzE,QAAM,EAAE,OAAO,SAAS,IAAI,WAAW;AACvC,QAAM,IAAI,aAAa;AACvB,QAAM,OAAO,kBAAkB,KAAK;AACpC,QAAM,WAAW,kBAAkB,SAAS;AAC5C,QAAM,WAAW,kBAAkB,SAAS;AAC5C,QAAM,aAAa,CAAC,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,OAAO,CAAC,MAAM,EAAE,WAAW,QAAQ,CAAC;AAC1F,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAyB,IAAI;AAE7D,QAAM,cAAc,CAAC,SAAkB;AACrC,QAAI,aAAa;AAAE,kBAAY,IAAI;AAAA,IAAE,OAAO;AAAE,kBAAY,IAAI;AAAA,IAAE;AAAA,EAClE;AAEA,MAAI,UAAU;AACZ,WAAO,6CAAC,kBAAe,MAAM,UAAU,OAAO,GAAG,aAAY,QAAO,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG;AAAA,EACnI;AAEA,SACE,8CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC3B;AAAA,eAAW,WAAW,KAAK,6CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,SAAS,UAAU,WAAW,SAAS,GAAG,+EAAiE;AAAA,IACxK,WAAW,IAAI,CAAC,SACf,8CAAC,SAAkB,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,SAAS,QAAQ,cAAc,OAAO,YAAY,EAAE,SAAS,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,EAAE,gBAAgB,QAAQ,UAAU,GAC5M;AAAA,oDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,YAAY,SAAS,GAC9D;AAAA,qDAAC,UAAK,OAAO,EAAE,OAAO,EAAE,QAAQ,UAAU,QAAQ,eAAe,YAAY,GAAI,oBAAU,KAAK,IAAI,GAAE;AAAA,QACtG,6CAAC,UAAK,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,OAAO,GAAI,eAAK,OAAM;AAAA,SAChE;AAAA,MACC,CAAC,CAAC,aAAa,MAAM,sBAAsB,KAC1C,8CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,QAAQ,WAAW,MAAM,GAClE;AAAA,eAAO,aAAa,MAAM,sBAAsB,CAAC,EAAE,MAAM,GAAG,GAAG;AAAA,QAAE;AAAA,SACpE;AAAA,SARM,KAAK,EAUf,CACD;AAAA,KACH;AAEJ;;;AC/CA,IAAAC,gBAAgC;AAuBrB,IAAAC,sBAAA;AAXJ,SAAS,eAAe,EAAE,OAAO,WAAW,YAAY,GAAwB;AACrF,QAAM,EAAE,OAAO,SAAS,IAAI,WAAW;AACvC,QAAM,IAAI,aAAa;AACvB,QAAM,YAAY,kBAAkB,UAAU;AAC9C,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAyB,IAAI;AAE7D,QAAM,cAAc,CAAC,SAAkB;AACrC,QAAI,aAAa;AAAE,kBAAY,IAAI;AAAA,IAAE,OAAO;AAAE,kBAAY,IAAI;AAAA,IAAE;AAAA,EAClE;AAEA,MAAI,UAAU;AACZ,WAAO,6CAAC,kBAAe,MAAM,UAAU,OAAO,GAAG,aAAY,OAAM,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG;AAAA,EAClI;AAEA,SACE,8CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC3B;AAAA,cAAU,WAAW,KAAK,6CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,SAAS,UAAU,WAAW,SAAS,GAAG,oCAAsB;AAAA,IAC5H,UAAU,IAAI,CAAC,SACd,8CAAC,SAAkB,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,SAAS,QAAQ,cAAc,OAAO,YAAY,EAAE,SAAS,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,EAAE,gBAAgB,QAAQ,UAAU,GAC5M;AAAA,oDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,cAAc,MAAM,GACnF;AAAA,qDAAC,UAAK,OAAO,EAAE,YAAY,SAAS,KAAK,QAAQ,CAAC,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,GAAG,SAAS,WAAW,cAAc,EAAE,gBAAgB,UAAU,OAAO,GAAI,eAAK,QAAO;AAAA,QAC9K,6CAAC,UAAK,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,QAAQ,YAAY,IAAI,GAAI,eAAK,OAAM;AAAA,SACjF;AAAA,MACC,CAAC,CAAC,aAAa,MAAM,kBAAkB,KACtC,8CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,OAAO,GAAG;AAAA;AAAA,QAAS,aAAa,MAAM,kBAAkB;AAAA,SAAY;AAAA,SAN1G,KAAK,EAQf,CACD;AAAA,KACH;AAEJ;;;AC1CA,IAAAC,gBAAgC;AAuBrB,IAAAC,sBAAA;AAXJ,SAAS,gBAAgB,EAAE,OAAO,WAAW,YAAY,GAAyB;AACvF,QAAM,EAAE,OAAO,SAAS,IAAI,WAAW;AACvC,QAAM,IAAI,aAAa;AACvB,QAAM,QAAQ,sBAAsB;AACpC,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAyB,IAAI;AAE7D,QAAM,cAAc,CAAC,SAAkB;AACrC,QAAI,aAAa;AAAE,kBAAY,IAAI;AAAA,IAAE,OAAO;AAAE,kBAAY,IAAI;AAAA,IAAE;AAAA,EAClE;AAEA,MAAI,UAAU;AACZ,WAAO,6CAAC,kBAAe,MAAM,UAAU,OAAO,GAAG,aAAY,WAAU,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG;AAAA,EACtI;AAEA,SACE,8CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC3B;AAAA,UAAM,WAAW,KAAK,6CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,SAAS,UAAU,WAAW,SAAS,GAAG,6CAA+B;AAAA,IACjI,MAAM,IAAI,CAAC,SAAS;AACnB,YAAM,KAAK,aAAa,MAAM,+BAA+B;AAC7D,aACE,8CAAC,SAAkB,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,SAAS,QAAQ,cAAc,OAAO,YAAY,EAAE,SAAS,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,EAAE,gBAAgB,QAAQ,UAAU,GAC5M;AAAA,sDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,cAAc,KAAK,QAAQ,EAAE,GAC5F;AAAA,uDAAC,UAAK,OAAO,EAAE,YAAY,SAAS,KAAK,QAAQ,CAAC,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,GAAG,SAAS,WAAW,cAAc,EAAE,gBAAgB,UAAU,OAAO,GAAI,eAAK,QAAO;AAAA,UAC9K,6CAAC,UAAK,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,QAAQ,YAAY,IAAI,GAAI,eAAK,OAAM;AAAA,UAC/E,6CAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,OAAO,EAAE,WAAW,YAAY,yBAAyB,cAAc,QAAQ,SAAS,WAAW,YAAY,OAAO,GAAI,eAAK,QAAO;AAAA,WACzK;AAAA,QACC,MAAM,6CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,QAAQ,YAAY,WAAW,GAAI,iBAAO,EAAE,EAAE,MAAM,GAAG,GAAG,GAAE;AAAA,WANvG,KAAK,EAOf;AAAA,IAEJ,CAAC;AAAA,KACH;AAEJ;;;AC5CA,IAAAC,gBAAgC;AAkCrB,IAAAC,sBAAA;AAlBJ,SAAS,UAAU,EAAE,OAAO,WAAW,cAAc,sBAAiB,aAAa,WAAW,OAAO,YAAY,UAAU,aAAa,GAAmB;AAChK,QAAM,EAAE,OAAO,SAAS,IAAI,WAAW;AACvC,QAAM,IAAI,aAAa;AACvB,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,EAAE;AAC3C,QAAM,QAAQ,cAAc;AAC5B,QAAM,UAAU,aAAa,KAAK;AAClC,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAyB,IAAI;AAE7D,QAAM,eAAe,CAAC,MAAc;AAClC,QAAI,cAAc;AAAE,mBAAa,CAAC;AAAA,IAAE,OAAO;AAAE,kBAAY,CAAC;AAAA,IAAE;AAC5D,gBAAY,IAAI;AAAA,EAClB;AAEA,QAAM,cAAc,CAAC,SAAkB;AACrC,QAAI,aAAa;AAAE,kBAAY,IAAI;AAAA,IAAE,OAAO;AAAE,kBAAY,IAAI;AAAA,IAAE;AAAA,EAClE;AAEA,MAAI,UAAU;AACZ,WAAO,6CAAC,kBAAe,MAAM,UAAU,OAAO,GAAG,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG;AAAA,EAChH;AAEA,SACE,8CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC5B;AAAA;AAAA,MAAC;AAAA;AAAA,QAAM;AAAA,QAAsB,OAAO;AAAA,QAAO,UAAU,CAAC,MAAM,aAAa,EAAE,OAAO,KAAK;AAAA,QAAG;AAAA,QACxF,OAAO,EAAE,OAAO,QAAQ,SAAS,YAAY,YAAY,EAAE,SAAS,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,EAAE,gBAAgB,OAAO,EAAE,MAAM,YAAY,EAAE,YAAY,UAAU,QAAQ,WAAW,cAAc,SAAS,QAAQ,cAAc,OAAO;AAAA;AAAA,IACjQ;AAAA,IACC,SAAS,QAAQ,WAAW,KAAK,6CAAC,SAAI,OAAO,EAAE,OAAO,EAAE,WAAW,WAAW,UAAU,SAAS,SAAS,GAAG,yBAAW;AAAA,IACxH,QAAQ,IAAI,CAAC,SACZ,8CAAC,SAAkB,SAAS,MAAM,YAAY,IAAI,GAAG,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,SAAS,aAAa,cAAc,OAAO,YAAY,EAAE,SAAS,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,EAAE,gBAAgB,QAAQ,UAAU,GACpQ;AAAA,mDAAC,UAAK,OAAO,EAAE,YAAY,SAAS,KAAK,QAAQ,CAAC,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,GAAG,SAAS,WAAW,cAAc,EAAE,gBAAgB,UAAU,OAAO,GAAI,eAAK,QAAO;AAAA,MAC9K,6CAAC,UAAK,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,OAAO,GAAI,oBAAU,KAAK,IAAI,GAAE;AAAA,MAC7E,6CAAC,UAAK,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,UAAU,OAAO,GAAI,eAAK,OAAM;AAAA,SAH/D,KAAK,EAIf,CACD;AAAA,KACH;AAEJ;;;APHkD,IAAAC,sBAAA;AAzBlD,IAAM,OAA6C;AAAA,EACjD,EAAE,IAAI,UAAU,OAAO,SAAS;AAAA,EAChC,EAAE,IAAI,SAAS,OAAO,QAAQ;AAAA,EAC9B,EAAE,IAAI,aAAa,OAAO,YAAY;AAAA,EACtC,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,EAClC,EAAE,IAAI,UAAU,OAAO,SAAS;AAClC;AAEA,SAAS,SAAS,EAAE,aAAa,UAAU,UAAU,OAAO,WAAW,GAAuE;AAC5I,QAAM,EAAE,OAAO,SAAS,MAAM,IAAI,WAAW;AAC7C,QAAM,CAAC,KAAK,MAAM,QAAI,wBAAiB,UAAU;AAEjD,QAAM,iBAAsC;AAAA,IAC1C,YAAY,MAAM;AAAA,IAClB,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,QAAQ,aAAa,SAAS,aAAa,MAAM,MAAM;AAAA,IACvD,cAAc,aAAa,MAAM,MAAM;AAAA,IACvC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,eAAe;AAAA,IACf,WAAW;AAAA,IACX,GAAG;AAAA,EACL;AAEA,MAAI,QAAS,QAAO,6CAAC,SAAI,OAAO,gBAAgB,uDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,OAAO,MAAM,UAAU,GAAG,2BAAQ,GAAM;AACvH,MAAI,MAAO,QAAO,6CAAC,SAAI,OAAO,gBAAgB,wDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,OAAO,UAAU,GAAG;AAAA;AAAA,IAAQ;AAAA,KAAM,GAAM;AAErH,SACE,8CAAC,SAAI,OAAO,gBACV;AAAA,kDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,cAAc,aAAa,MAAM,MAAM,IAAI,YAAY,MAAM,QAAQ,GACjG;AAAA,WAAK,IAAI,CAAC,MACT;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,MAAM,OAAO,EAAE,EAAE;AAAA,UAC1B,OAAO;AAAA,YACL,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,QAAQ;AAAA,YACR,cAAc,QAAQ,EAAE,KAAK,aAAa,MAAM,MAAM,KAAK;AAAA,YAC3D,OAAO,QAAQ,EAAE,KAAK,MAAM,SAAS,MAAM;AAAA,YAC3C,QAAQ;AAAA,YACR,YAAY,MAAM;AAAA,YAClB,UAAU;AAAA,YACV,YAAY,QAAQ,EAAE,KAAK,MAAM;AAAA,UACnC;AAAA,UAEC,YAAE;AAAA;AAAA,QAdE,EAAE;AAAA,MAeT,CACD;AAAA,MACA,YACC,6CAAC,OAAE,MAAM,UAAU,QAAO,UAAS,KAAI,cAAa,OAAO,EAAE,YAAY,QAAQ,SAAS,aAAa,OAAO,MAAM,QAAQ,UAAU,QAAQ,gBAAgB,OAAO,GAAG,+BAExK;AAAA,OAEJ;AAAA,IACA,8CAAC,SAAI,OAAO,EAAE,MAAM,GAAG,UAAU,OAAO,GACrC;AAAA,cAAQ,YAAY,6CAAC,kBAAe;AAAA,MACpC,QAAQ,WAAW,6CAAC,YAAS;AAAA,MAC7B,QAAQ,eAAe,6CAAC,kBAAe;AAAA,MACvC,QAAQ,aAAa,6CAAC,mBAAgB;AAAA,MACtC,QAAQ,YAAY,6CAAC,aAAU,WAAS,MAAC;AAAA,OAC5C;AAAA,KACF;AAEJ;AAEO,SAAS,OAAO,EAAE,SAAS,MAAM,YAAY,OAAO,gBAAgB,UAAU,OAAO,WAAW,GAAgB;AACrH,SACE,6CAAC,mBAAgB,SAAkB,MAAY,OAAc,gBAC3D,uDAAC,YAAS,YAAwB,UAAoB,OAAc,YAAwB,GAC9F;AAEJ;;;AQjGA,IAAAC,iBAA+B;AAmCf,IAAAC,uBAAA;AApBT,SAAS,aAAa,EAAE,QAAQ,OAAO,OAAO,WAAW,OAAO,MAAM,SAAS,WAAW,UAAU,MAAM,GAAsB;AACrI,QAAM,EAAE,OAAO,UAAU,OAAO,SAAS,IAAI,WAAW;AACxD,QAAM,IAAI,aAAa;AACvB,QAAM,aAAa,WAAW,UAAU,EAAE;AAC1C,QAAM,gBAAgB,aAAa,SAAS,KAAM,SAAS,EAAG;AAC9D,QAAM,OAAO,cAAc,cAAc,CAAC;AAE1C,QAAM,gBAAY,wBAAQ,MAAM,IAAI,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AAEnF,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,gBACJ,aAAa,UACT,EAAE,UAAU,SAAS,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,SAAS,QAAQ,KAAM,UAAU,OAAO,IACjG,aAAa,WACb,EAAE,UAAU,SAAS,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,QAAQ,QAAQ,KAAM,UAAU,OAAO,IACrG,CAAC;AAEP,SACE,+CAAC,SAAI,OAAO,EAAE,YAAY,EAAE,IAAI,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,EAAE,cAAc,GAAG,eAAe,GAAG,MAAM,GACvH;AAAA,KAAC,QAAQ,+CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,OAAO,EAAE,UAAU,GAAG;AAAA;AAAA,MAAsB,QAAQ,SAAS,KAAK,MAAM;AAAA,MAAG;AAAA,OAAC;AAAA,IACpH,QACC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP,aAAY;AAAA,QACZ;AAAA,QACA;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;;;ACDc,IAAAC,uBAAA;AAtBP,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc;AAAA,EACd,WAAW;AACb,GAAsB;AACpB,QAAM,MAAM,aAAa,MAAM,KAAK;AACpC,MAAI,OAAO,QAAQ,QAAQ,MAAO,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW,EAAI,QAAO;AAElF,QAAM,WAAW,OAAO,MAAM,QAAQ,GAAG,IAAI,SAAS;AAEtD,QAAM,WAAW,MAAM;AACrB,YAAQ,UAAU;AAAA,MAChB,KAAK;AACH,eACE,8CAAC,QAAG,OAAO,EAAE,QAAQ,WAAW,SAAS,cAAc,WAAW,OAAO,GACrE,iBAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,MAC7C,8CAAC,QAAW,OAAO,EAAE,UAAU,OAAO,WAAW,YAAY,KAAK,cAAc,MAAM,GACnF,iBAAO,IAAI,KADL,CAET,CACD,GACH;AAAA,MAEJ,KAAK;AACH,eACE,8CAAC,UAAK,OAAO,EAAE,SAAS,SAAS,UAAU,QAAQ,YAAY,oBAAoB,SAAS,YAAY,cAAc,OAAO,OAAO,aAAa,YAAY,aAAa,WAAW,MAAM,GACxL,iBAAO,GAAG,GACb;AAAA,MAEJ,KAAK;AACH,eACE,8CAAC,UAAK,OAAO,EAAE,SAAS,gBAAgB,UAAU,QAAQ,YAAY,KAAK,SAAS,WAAW,cAAc,QAAQ,YAAY,GAAG,WAAW,MAAM,OAAO,aAAa,QAAQ,aAAa,WAAW,MAAM,WAAW,MAAM,GAC7N,iBAAO,GAAG,GACb;AAAA,MAEJ,KAAK;AACH,eAAO,8CAAC,UAAK,OAAO,EAAE,UAAU,OAAO,UAAU,GAAI,iBAAO,GAAG,GAAE;AAAA,MACnE,KAAK;AAAA,MACL,SAAS;AACP,cAAM,WAAW,EAAE,MAAM,WAAW,WAAW,YAAY,QAAQ,aAAa,SAAS,eAAe,QAAQ,eAAe,IAAI,eAAe,UAAU,eAAe,gBAAgB,OAAO,cAAc,MAAM;AACtN,eAAO,8CAAC,iBAAc,SAAS,OAAO,GAAG,GAAG,OAAO,UAAmB;AAAA,MACxE;AAAA,IACF;AAAA,EACF,GAAG;AAEH,SACE,+CAAC,SAAI,OACF;AAAA,aACC,8CAAC,SAAI,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,eAAe,aAAa,eAAe,SAAS,OAAO,YAAY,cAAc,MAAM,GACzI,iBACH;AAAA,IAED;AAAA,KACH;AAEJ;;;ACpFA,IAAAC,iBAAgC;AAgP1B,IAAAC,uBAAA;AAlNN,IAAM,gBAAqD;AAAA,EACzD,MAAM;AAAA,IACJ;AAAA,MACE,WAAW,CAAC,KAAK;AAAA,MACjB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,wBAAwB,OAAO,GAAG;AAAA,QAC1C,EAAE,MAAM,+BAA+B,OAAO,gBAAgB,QAAQ,KAAK;AAAA,MAC7E;AAAA,IACF;AAAA,IACA;AAAA,MACE,WAAW,CAAC,WAAW,SAAS;AAAA,MAChC,cAAc;AAAA,MACd,UAAU,CAAC,UAAU,QAAQ;AAAA,MAC7B,QAAQ;AAAA,QACN,EAAE,MAAM,wBAAwB,OAAO,GAAG;AAAA,QAC1C,EAAE,MAAM,+BAA+B,OAAO,eAAe,QAAQ,KAAK;AAAA,QAC1E,EAAE,MAAM,2BAA2B,OAAO,gBAAgB;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,KAAK;AAAA,IACH;AAAA,MACE,WAAW,CAAC,UAAU;AAAA,MACtB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,oBAAoB,OAAO,WAAW;AAAA,QAC9C,EAAE,MAAM,uBAAuB,OAAO,YAAY;AAAA,QAClD,EAAE,MAAM,uBAAuB,OAAO,aAAa;AAAA,MACrD;AAAA,IACF;AAAA,IACA;AAAA,MACE,WAAW,CAAC,SAAS;AAAA,MACrB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,2BAA2B,OAAO,aAAa,IAAI,OAAO;AAAA,QAClE,EAAE,MAAM,4BAA4B,OAAO,iBAAiB;AAAA,QAC5D,EAAE,MAAM,uBAAuB,OAAO,aAAa;AAAA,MACrD;AAAA,IACF;AAAA,IACA;AAAA,MACE,WAAW,CAAC,SAAS;AAAA,MACrB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,uBAAuB,OAAO,SAAS,QAAQ,MAAM,IAAI,OAAO;AAAA,QACxE,EAAE,MAAM,0BAA0B,OAAO,WAAW;AAAA,QACpD,EAAE,MAAM,gCAAgC,OAAO,cAAc,IAAI,OAAO;AAAA,MAC1E;AAAA,IACF;AAAA,IACA;AAAA,MACE,WAAW,CAAC,UAAU;AAAA,MACtB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,4BAA4B,OAAO,WAAW;AAAA,QACtD,EAAE,MAAM,uBAAuB,OAAO,YAAY;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS;AAAA,IACP;AAAA,MACE,WAAW,CAAC,SAAS;AAAA,MACrB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,uBAAuB,OAAO,SAAS,QAAQ,MAAM,IAAI,OAAO;AAAA,QACxE,EAAE,MAAM,gCAAgC,OAAO,aAAa;AAAA,QAC5D,EAAE,MAAM,0BAA0B,OAAO,WAAW;AAAA,MACtD;AAAA,IACF;AAAA,IACA;AAAA,MACE,WAAW,CAAC,KAAK;AAAA,MACjB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,wBAAwB,OAAO,GAAG;AAAA,QAC1C,EAAE,MAAM,+BAA+B,OAAO,gBAAgB,QAAQ,KAAK;AAAA,MAC7E;AAAA,IACF;AAAA,IACA;AAAA,MACE,WAAW,CAAC,KAAK;AAAA,MACjB,cAAc;AAAA,MACd,UAAU,CAAC,QAAQ;AAAA,MACnB,QAAQ;AAAA,QACN,EAAE,MAAM,yBAAyB,OAAO,cAAc;AAAA,QACtD,EAAE,MAAM,uBAAuB,OAAO,qBAAqB;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS;AAAA,IACP;AAAA,MACE,WAAW,CAAC,MAAM;AAAA,MAClB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,yBAAyB,OAAO,uBAAuB;AAAA,QAC/D,EAAE,MAAM,iCAAiC,OAAO,qBAAqB;AAAA,MACvE;AAAA,IACF;AAAA,IACA;AAAA,MACE,WAAW,CAAC,SAAS;AAAA,MACrB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,yBAAyB,OAAO,UAAU;AAAA,QAClD,EAAE,MAAM,oCAAoC,OAAO,uBAAuB,QAAQ,MAAM,IAAI,OAAO;AAAA,QACnG,EAAE,MAAM,wBAAwB,OAAO,SAAS;AAAA,MAClD;AAAA,IACF;AAAA,IACA;AAAA,MACE,WAAW,CAAC,UAAU;AAAA,MACtB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,oBAAoB,OAAO,WAAW;AAAA,QAC9C,EAAE,MAAM,wBAAwB,OAAO,SAAS;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAQ;AAAA,IACN;AAAA,MACE,WAAW,CAAC,SAAS;AAAA,MACrB,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,EAAE,MAAM,0BAA0B,OAAO,cAAc,QAAQ,MAAM,IAAI,OAAO;AAAA,QAChF,EAAE,MAAM,0BAA0B,OAAO,cAAc,QAAQ,MAAM,IAAI,OAAO;AAAA,QAChF,EAAE,MAAM,iCAAiC,OAAO,oBAAoB;AAAA,MACtE;AAAA,IACF;AAAA,IACA;AAAA,MACE,WAAW,CAAC,KAAK;AAAA,MACjB,cAAc;AAAA,MACd,UAAU,CAAC,QAAQ;AAAA,MACnB,QAAQ;AAAA,QACN,EAAE,MAAM,yBAAyB,OAAO,cAAc;AAAA,QACtD,EAAE,MAAM,0BAA0B,OAAO,sBAAsB,QAAQ,MAAM,IAAI,OAAO;AAAA,QACxF,EAAE,MAAM,iCAAiC,OAAO,oBAAoB;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AACF;AAGO,IAAM,YAAyF;AAAA,EACpG,MAAS,EAAE,OAAO,cAAiB,aAAa,uCAAkC,OAAO,YAAK;AAAA,EAC9F,KAAS,EAAE,OAAO,aAAiB,aAAa,2CAA2C,OAAO,eAAK;AAAA,EACvG,SAAS,EAAE,OAAO,WAAiB,aAAa,4CAA4C,OAAO,YAAK;AAAA,EACxG,SAAS,EAAE,OAAO,WAAiB,aAAa,yCAAyC,OAAO,YAAK;AAAA,EACrG,QAAS,EAAE,OAAO,UAAiB,aAAa,6CAA6C,OAAO,YAAK;AAC3G;AA8BA,IAAM,iBAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,gBAAgB;AAClB;AAGA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,GAKG;AACD,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,WAAW,MAAM;AAGlD,QAAM,aAAa,OAAO,KAAK,CAAC,MAAM;AACpC,UAAM,MAAM,aAAa,MAAM,EAAE,IAAI;AACrC,WAAO,OAAO,QAAQ,QAAQ,MAAM,EAAE,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW;AAAA,EAC7E,CAAC;AACD,MAAI,CAAC,WAAY,QAAO;AAExB,MAAI,WAAW,QAAQ;AACrB,WACE,+CAAC,SAAI,OAAO,EAAE,cAAc,OAAO,GACjC;AAAA,oDAAC,SAAI,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,OAAO,EAAE,MAAM,cAAc,OAAO,GAClF,eAAK,OACR;AAAA,MACA,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,OAAO,GACjE,iBAAO,IAAI,CAAC,MACX;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA,OAAO,EAAE;AAAA,UACT,OAAO,EAAE;AAAA,UACT,IAAI,EAAE,OAAO,EAAE,SAAS,SAAS;AAAA,UACjC,WAAW,EAAE;AAAA,UACb,YAAY,EAAE;AAAA,UACd,aAAa,EAAE;AAAA;AAAA,QAPV,EAAE;AAAA,MAQT,CACD,GACH;AAAA,OACF;AAAA,EAEJ;AAEA,SACE,+CAAC,SAAI,OAAO,EAAE,QAAQ,aAAa,EAAE,MAAM,IAAI,cAAc,QAAQ,UAAU,UAAU,cAAc,MAAM,GAC3G;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;AAAA,QAChC,OAAO;AAAA,UACL,OAAO;AAAA,UAAQ,SAAS;AAAA,UAAQ,YAAY;AAAA,UAAU,gBAAgB;AAAA,UACtE,SAAS;AAAA,UAAa,YAAY,OAAO,GAAG,EAAE,MAAM,OAAO,EAAE;AAAA,UAC7D,QAAQ;AAAA,UAAQ,QAAQ;AAAA,UAAW,WAAW;AAAA,QAChD;AAAA,QAEA;AAAA,wDAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,OAAO,EAAE,KAAK,GAAI,eAAK,OAAM;AAAA,UAC/E,8CAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,OAAO,EAAE,OAAO,YAAY,EAAE,GAAI,iBAAO,WAAM,KAAI;AAAA;AAAA;AAAA,IACtF;AAAA,IACC,QACC,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,EAAE,SAAS,SAAS,QAAQ,eAAe,UAAU,KAAK,QAAQ,WAAW,aAAa,EAAE,MAAM,GAAG,GAC7I,iBAAO,IAAI,CAAC,MACX;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,OAAO,EAAE;AAAA,QACT,OAAO,EAAE;AAAA,QACT,IAAI,EAAE,OAAO,EAAE,SAAS,SAAS;AAAA,QACjC,WAAW,EAAE;AAAA,QACb,YAAY,EAAE;AAAA,QACd,aAAa,EAAE;AAAA;AAAA,MAPV,EAAE;AAAA,IAQT,CACD,GACH;AAAA,KAEJ;AAEJ;AAGO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,EAAE,MAAM,IAAI,WAAW;AAC7B,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAuB,IAAI;AAE/D,QAAM,IAAI,EAAE,GAAG,gBAAgB,GAAG,OAAO;AACzC,QAAM,WAAW,cAAc,UAAU;AAEzC,QAAM,mBAAmB,CAAC,MAAoB;AAC5C,kBAAc,CAAC;AACf,mBAAe,CAAC;AAAA,EAClB;AAGA,QAAM,WAAW,CAAC,SAAiC;AACjD,UAAM,QAAQ,qBAAqB,KAAK;AACxC,UAAM,WAAW,KAAK,YAAY,CAAC,SAAS,UAAU,QAAQ;AAC9D,UAAM,eAAe,MAAM,QAAQ,MAAM,IAAI,SAAS,SAAS,CAAC,MAAM,IAAI;AAE1E,WAAO,MAAM;AAAA,MAAO,CAAC,MACnB,MAAM,SAAS,EAAE,IAAI,KACrB,SAAS,SAAS,EAAE,MAAM,MACzB,eAAe,aAAa,SAAS,EAAE,MAAM,IAAI;AAAA,IACpD,EAAE,KAAK,CAAC,GAAG,OAAO,EAAE,YAAY,OAAO,EAAE,YAAY,OAAO,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;AAAA,EAC5F;AAEA,QAAM,gBAAgB,SAAS;AAAA,IAAK,CAAC,MACnC,SAAS,CAAC,EAAE;AAAA,MAAK,CAAC,MAChB,EAAE,OAAO,KAAK,CAAC,MAAM;AACnB,cAAM,MAAM,aAAa,GAAG,EAAE,IAAI;AAClC,eAAO,OAAO,QAAQ,QAAQ,MAAM,EAAE,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW;AAAA,MAC7E,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,OAAO,EAAE,YAAY,EAAE,IAAI,GAAG,MAAM,GAEtC;AAAA,sBACC,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,UAAU,QAAQ,cAAc,OAAO,GAC9E,iBAAO,KAAK,SAAS,EAAqB,IAAI,CAAC,MAC/C;AAAA,MAAC;AAAA;AAAA,QAEC,SAAS,MAAM,iBAAiB,CAAC;AAAA,QACjC,OAAO;AAAA,UACL,SAAS;AAAA,UAAY,cAAc;AAAA,UAAQ,UAAU;AAAA,UAAQ,YAAY;AAAA,UACzE,QAAQ;AAAA,UAAW,QAAQ,aAAa,eAAe,IAAI,EAAE,SAAS,EAAE,MAAM;AAAA,UAC9E,YAAY,eAAe,IAAI,GAAG,EAAE,MAAM,OAAO,EAAE;AAAA,UACnD,OAAO,eAAe,IAAI,EAAE,SAAS,EAAE;AAAA,QACzC;AAAA,QAEC;AAAA,oBAAU,CAAC,EAAE;AAAA,UAAM;AAAA,UAAE,UAAU,CAAC,EAAE;AAAA;AAAA;AAAA,MAT9B;AAAA,IAUP,CACD,GACH;AAAA,IAID,CAAC,gBACA,8CAAC,SAAI,OAAO,EAAE,WAAW,UAAU,SAAS,aAAa,OAAO,EAAE,OAAO,UAAU,OAAO,GACvF,0BAAgB,MAAM,UAAU,UAAU,EAAE,MAAM,YAAY,CAAC;AAAA,iBAAiC,UAAU,kCAC7G,IAEA,SAAS,IAAI,CAAC,SAAS;AACrB,YAAM,eAAe,SAAS,IAAI;AAClC,UAAI,aAAa,WAAW,EAAG,QAAO;AACtC,aACE,+CAAC,SAA4B,OAAO,EAAE,cAAc,OAAO,GACzD;AAAA,sDAAC,QAAG,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,eAAe,aAAa,eAAe,SAAS,OAAO,EAAE,OAAO,QAAQ,WAAW,GACpI,eAAK,cACR;AAAA,QACC,aAAa,IAAI,CAAC,SACjB;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA,QAAQ,KAAK;AAAA,YACb;AAAA,YACA,QAAQ;AAAA;AAAA,UAJH,KAAK;AAAA,QAKZ,CACD;AAAA,WAZO,KAAK,YAaf;AAAA,IAEJ,CAAC;AAAA,KAEL;AAEJ;AAUO,SAAS,gBAAgB,EAAE,OAAO,UAAU,OAAO,OAAO,GAAyB;AACxF,QAAM,IAAI,EAAE,GAAG,gBAAgB,GAAG,OAAO;AACzC,SACE,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,UAAU,QAAQ,GAAG,MAAM,GAClE,iBAAO,KAAK,SAAS,EAAqB,IAAI,CAAC,MAC/C;AAAA,IAAC;AAAA;AAAA,MAEC,SAAS,MAAM,SAAS,CAAC;AAAA,MACzB,OAAO,UAAU,CAAC,EAAE;AAAA,MACpB,OAAO;AAAA,QACL,SAAS;AAAA,QAAY,cAAc;AAAA,QAAQ,UAAU;AAAA,QAAQ,YAAY;AAAA,QACzE,QAAQ;AAAA,QAAW,QAAQ,aAAa,UAAU,IAAI,EAAE,SAAS,EAAE,MAAM;AAAA,QACzE,YAAY,UAAU,IAAI,GAAG,EAAE,MAAM,OAAO,EAAE;AAAA,QAC9C,OAAO,UAAU,IAAI,EAAE,SAAS,EAAE;AAAA,MACpC;AAAA,MAEC;AAAA,kBAAU,CAAC,EAAE;AAAA,QAAM;AAAA,QAAE,UAAU,CAAC,EAAE;AAAA;AAAA;AAAA,IAV9B;AAAA,EAWP,CACD,GACH;AAEJ;;;ACtaA,IAAAC,iBAAmD;AAgG/C,IAAAC,uBAAA;AAxFJ,IAAM,cAA+F;AAAA,EACnG,MAAS,CAAC,EAAE,MAAM,uBAAuB,GAAG,EAAE,MAAM,+BAA+B,OAAO,gBAAgB,QAAQ,KAAK,CAAC;AAAA,EACxH,KAAS,CAAC,EAAE,MAAM,2BAA2B,OAAO,YAAY,GAAG,EAAE,MAAM,4BAA4B,OAAO,iBAAiB,GAAG,EAAE,MAAM,uBAAuB,OAAO,aAAa,CAAC;AAAA,EACtL,SAAS,CAAC,EAAE,MAAM,uBAAuB,OAAO,SAAS,QAAQ,KAAK,GAAG,EAAE,MAAM,gCAAgC,OAAO,aAAa,GAAG,EAAE,MAAM,0BAA0B,OAAO,WAAW,CAAC;AAAA,EAC7L,SAAS,CAAC,EAAE,MAAM,yBAAyB,OAAO,UAAU,GAAG,EAAE,MAAM,oCAAoC,OAAO,uBAAuB,QAAQ,KAAK,CAAC;AAAA,EACvJ,QAAS,CAAC,EAAE,MAAM,0BAA0B,OAAO,cAAc,QAAQ,KAAK,GAAG,EAAE,MAAM,0BAA0B,OAAO,cAAc,QAAQ,KAAK,CAAC;AACxJ;AA2BA,IAAMC,kBAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AACX;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,MAAM,cAAc;AAAA,EACpB,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EACR,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAuB;AACrB,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,KAAK;AACtC,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAuB,WAAW;AACtE,QAAM,gBAAY,uBAAuB,IAAI;AAC7C,QAAM,OAAO,WAAW,MAAM;AAC9B,QAAM,IAAI,EAAE,GAAGA,iBAAgB,GAAG,OAAO;AAGzC,gCAAU,MAAM;AACd,QAAI,CAAC,KAAM;AACX,UAAM,UAAU,CAAC,MAAqB;AAAE,UAAI,EAAE,QAAQ,SAAU,SAAQ,KAAK;AAAA,IAAE;AAC/E,aAAS,iBAAiB,WAAW,OAAO;AAC5C,WAAO,MAAM,SAAS,oBAAoB,WAAW,OAAO;AAAA,EAC9D,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,WAAgC;AAAA,IACpC,OAAO;AAAA,IAAQ,QAAQ;AAAA,IAAQ,cAAc;AAAA,IAC7C,YAAY,EAAE;AAAA,IAAU,OAAO,EAAE;AAAA,IACjC,QAAQ;AAAA,IAAQ,QAAQ;AAAA,IACxB,YAAY;AAAA,IAAK,UAAU;AAAA,IAC3B,SAAS;AAAA,IAAQ,YAAY;AAAA,IAAU,gBAAgB;AAAA,IACvD,YAAY;AAAA,IACZ,GAAI,aAAa,UAAU,EAAE,UAAU,SAAS,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,KAAM,WAAW,6BAA6B,IAAI,CAAC;AAAA,IAC1I,GAAG;AAAA,EACL;AAEA,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,SAAS,YAAY,UAAU;AACrC,QAAM,aAAa,OAAO,KAAK,CAAC,MAAM;AACpC,UAAM,MAAM,aAAa,MAAM,EAAE,IAAI;AACrC,WAAO,OAAO,QAAQ,QAAQ,MAAM,EAAE,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW;AAAA,EAC7E,CAAC;AAED,SACE,gFACE;AAAA,kDAAC,YAAO,OAAO,UAAU,SAAS,MAAM,QAAQ,IAAI,GAAG,cAAY,YAAY,KAAK,KAAK,IACtF,iBACH;AAAA,IAEC,QACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,UAAU,SAAS,OAAO,GAAG,QAAQ,MAAM,SAAS,QAAQ,YAAY,YAAY,gBAAgB,UAAU,YAAY,EAAE,QAAQ;AAAA,QAC7I,SAAS,CAAC,MAAM;AAAE,cAAI,EAAE,WAAW,EAAE,cAAe,SAAQ,KAAK;AAAA,QAAE;AAAA,QAEnE;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,OAAO,EAAE,OAAO,QAAQ,UAAU,SAAS,WAAW,QAAQ,YAAY,EAAE,IAAI,cAAc,iBAAiB,SAAS,YAAY,UAAU,UAAU,SAAS,QAAQ,eAAe,SAAS;AAAA,YAGjM;AAAA,6DAAC,SAAI,OAAO,EAAE,SAAS,kBAAkB,cAAc,aAAa,EAAE,MAAM,IAAI,SAAS,QAAQ,YAAY,UAAU,gBAAgB,iBAAiB,YAAY,EAAE,GACpK;AAAA,+DAAC,SACC;AAAA,gEAAC,SAAI,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,OAAO,EAAE,KAAK,GAAI,eAAK,OAAM;AAAA,kBAC7E,mBACC,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,WAAW,OAAO,UAAU,OAAO,GAC1E,iBAAO,KAAK,SAAS,EAAqB,IAAI,CAAC,MAC/C;AAAA,oBAAC;AAAA;AAAA,sBAEC,SAAS,MAAM,cAAc,CAAC;AAAA,sBAC9B,OAAO,EAAE,SAAS,YAAY,cAAc,QAAQ,UAAU,QAAQ,YAAY,KAAK,QAAQ,WAAW,QAAQ,aAAa,eAAe,IAAI,EAAE,SAAS,EAAE,MAAM,IAAI,YAAY,eAAe,IAAI,GAAG,EAAE,MAAM,OAAO,eAAe,OAAO,eAAe,IAAI,EAAE,SAAS,EAAE,MAAM;AAAA,sBAErR;AAAA,kCAAU,CAAC,EAAE;AAAA,wBAAM;AAAA,wBAAE,UAAU,CAAC,EAAE;AAAA;AAAA;AAAA,oBAJ9B;AAAA,kBAKP,CACD,GACH;AAAA,mBAEJ;AAAA,gBACA,8CAAC,YAAO,SAAS,MAAM,QAAQ,KAAK,GAAG,OAAO,EAAE,YAAY,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,QAAQ,WAAW,OAAO,EAAE,OAAO,YAAY,GAAG,SAAS,MAAM,GAAG,kBAAC;AAAA,iBAC7K;AAAA,cAGA,8CAAC,SAAI,OAAO,EAAE,MAAM,GAAG,WAAW,QAAQ,SAAS,OAAO,GACvD,WAAC,aACA,+CAAC,OAAE,OAAO,EAAE,OAAO,EAAE,OAAO,UAAU,QAAQ,WAAW,UAAU,SAAS,SAAS,GAAG;AAAA;AAAA,gBAClF,UAAU,UAAU,EAAE,MAAM,YAAY;AAAA,gBAAE;AAAA,iBAChD,IAEA,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,OAAO,GACjE,iBAAO,IAAI,CAAC,MACX;AAAA,gBAAC;AAAA;AAAA,kBAEC;AAAA,kBACA,OAAO,EAAE;AAAA,kBACT,OAAO,EAAE;AAAA,kBACT,IAAI,EAAE,SAAS,SAAS;AAAA,kBACxB,WAAW,EAAE;AAAA,kBACb,YAAY,EAAE;AAAA,kBACd,aAAa,EAAE;AAAA,kBACf,UAAS;AAAA;AAAA,gBARJ,EAAE;AAAA,cAST,CACD,GACH,GAEJ;AAAA;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;;;AC3JA,IAAAC,iBAAyB;AAsDjB,IAAAC,uBAAA;AA7BR,IAAMC,kBAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY;AACd;AAEO,SAAS,SAAS;AAAA,EACvB,MAAM,cAAc;AAAA,EACpB,mBAAmB;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAAkB;AAChB,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAuB,WAAW;AACtE,QAAM,EAAE,MAAM,IAAI,WAAW;AAC7B,QAAM,QAAQ,kBAAkB,MAAM;AACtC,QAAM,IAAI,EAAE,GAAGA,iBAAgB,GAAG,OAAO;AAEzC,QAAM,OAAO,MAAM,CAAC;AAEpB,SACE,+CAAC,SAAI,OAAO,EAAE,YAAY,EAAE,IAAI,GAAG,MAAM,GAEtC;AAAA,YACC,+CAAC,SAAI,OAAO,EAAE,cAAc,OAAO,GACjC;AAAA,oDAAC,QAAG,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,OAAO,EAAE,MAAM,QAAQ,WAAW,eAAe,SAAS,GACvG,eAAK,OACR;AAAA,MACC,OAAO,WAAW,KAAK,UAAU,MAAM,WACtC,8CAAC,SAAI,OAAO,EAAE,UAAU,QAAQ,OAAO,EAAE,OAAO,cAAc,OAAO,GAClE,gBAAM,SACT;AAAA,MAEF;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,OAAM;AAAA,UACN,OAAO,EAAE,cAAc,OAAO;AAAA,UAC9B,WAAW,EAAE;AAAA,UACb,YAAY,EAAE;AAAA,UACd,aAAa,EAAE;AAAA,UACf,UAAS;AAAA;AAAA,MACX;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,OAAM;AAAA,UACN,OAAM;AAAA,UACN,WAAW,EAAE;AAAA,UACb,YAAY,EAAE;AAAA,UACd,aAAa,EAAE;AAAA,UACf,UAAS;AAAA;AAAA,MACX;AAAA,OACF;AAAA,IAID,oBACC,+CAAC,SAAI,OAAO,EAAE,cAAc,OAAO,GACjC;AAAA,oDAAC,SAAI,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,eAAe,aAAa,eAAe,SAAS,OAAO,EAAE,OAAO,cAAc,MAAM,GAAG,0BAE5I;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ,EAAE,SAAS,EAAE,SAAS,QAAQ,EAAE,QAAQ,OAAO,EAAE,OAAO,QAAQ,EAAE,OAAO;AAAA;AAAA,MACnF;AAAA,OACF;AAAA,IAIF;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,QAAQ,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,SAAS,QAAQ,EAAE,QAAQ,MAAM,EAAE,MAAM,OAAO,EAAE,OAAO,QAAQ,EAAE,OAAO;AAAA;AAAA,IAC3G;AAAA,KACF;AAEJ;;;ACtGA,IAAAC,iBAAgC;AAgD1B,IAAAC,uBAAA;AAvCN,IAAMC,eAA+F;AAAA,EACnG,MAAS,CAAC,EAAE,MAAM,uBAAuB,GAAG,EAAE,MAAM,+BAA+B,OAAO,gBAAgB,QAAQ,KAAK,CAAC;AAAA,EACxH,KAAS,CAAC,EAAE,MAAM,2BAA2B,OAAO,YAAY,GAAG,EAAE,MAAM,4BAA4B,OAAO,iBAAiB,GAAG,EAAE,MAAM,uBAAuB,OAAO,aAAa,CAAC;AAAA,EACtL,SAAS,CAAC,EAAE,MAAM,uBAAuB,OAAO,SAAS,QAAQ,KAAK,GAAG,EAAE,MAAM,gCAAgC,OAAO,aAAa,CAAC;AAAA,EACtI,SAAS,CAAC,EAAE,MAAM,yBAAyB,OAAO,UAAU,GAAG,EAAE,MAAM,oCAAoC,OAAO,uBAAuB,QAAQ,KAAK,CAAC;AAAA,EACvJ,QAAS,CAAC,EAAE,MAAM,0BAA0B,OAAO,cAAc,QAAQ,KAAK,GAAG,EAAE,MAAM,0BAA0B,OAAO,cAAc,QAAQ,KAAK,CAAC;AACxJ;AAEA,SAAS,YAAY,MAAe,QAAiC;AACnE,SAAO,OAAO,KAAK,CAAC,MAAM;AACxB,UAAM,IAAI,aAAa,MAAM,EAAE,IAAI;AACnC,WAAO,KAAK,QAAQ,MAAM,MAAM,EAAE,MAAM,QAAQ,CAAC,KAAK,EAAE,WAAW;AAAA,EACrE,CAAC;AACH;AAGA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,GAQG;AACD,QAAM,SAASA,aAAY,IAAI;AAC/B,MAAI,CAAC,YAAY,MAAM,MAAM,EAAG,QAAO;AAEvC,SACE,+CAAC,SAAI,OAAO,EAAE,UAAU,WAAW,GAEjC;AAAA,mDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,cAAc,OAAO,GACpF;AAAA,oDAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,eAAe,aAAa,eAAe,SAAS,OAAO,YAAY,YAAY,GAAG,UAAU,MAAM,QAAQ,aAAa,UAAU,MAAM,cAAc,QAAQ,SAAS,WAAW,GACpO,mBAAS,kBAAa,oBACzB;AAAA,MACA,8CAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,OAAO,EAAE,KAAK,GAAI,eAAK,OAAM;AAAA,OACjF;AAAA,IAGA,8CAAC,SAAI,OAAO,EAAE,aAAa,QAAQ,YAAY,aAAa,cAAc,GAAG,GAC3E,wDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,OAAO,GACjE,iBAAO,IAAI,CAAC,MACX;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,OAAO,EAAE;AAAA,QACT,OAAO,EAAE;AAAA,QACT,IAAI,EAAE,SAAS,SAAS;AAAA,QACxB,WAAW,EAAE;AAAA,QACb,YAAY,EAAE;AAAA,QACd,aAAa,EAAE;AAAA,QACf,UAAS;AAAA;AAAA,MARJ,EAAE;AAAA,IAST,CACD,GACH,GACF;AAAA,KACF;AAEJ;AAwBA,IAAMC,kBAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,cAAc;AAChB;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA,MAAM,cAAc;AAAA,EACpB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAuB,WAAW;AACtE,QAAM,EAAE,MAAM,OAAO,IAAI,qBAAqB,MAAM;AACpD,QAAM,IAAI,EAAE,GAAGA,iBAAgB,GAAG,OAAO;AAEzC,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,YAAY,CAAC,CAAC,UAAU,YAAY,QAAQD,aAAY,UAAU,CAAC;AACzE,QAAM,WAAW,YAAY,MAAMA,aAAY,UAAU,CAAC;AAE1D,SACE,+CAAC,SAAI,OAAO,EAAE,YAAY,EAAE,IAAI,GAAG,MAAM,GAEtC;AAAA,sBACC,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,UAAU,QAAQ,cAAc,OAAO,GAC9E,iBAAO,KAAK,SAAS,EAAqB,IAAI,CAAC,MAC/C;AAAA,MAAC;AAAA;AAAA,QAEC,SAAS,MAAM,cAAc,CAAC;AAAA,QAC9B,OAAO,EAAE,SAAS,YAAY,cAAc,QAAQ,UAAU,QAAQ,YAAY,KAAK,QAAQ,WAAW,QAAQ,aAAa,eAAe,IAAI,EAAE,SAAS,EAAE,MAAM,IAAI,YAAY,eAAe,IAAI,GAAG,EAAE,MAAM,OAAO,eAAe,OAAO,eAAe,IAAI,EAAE,SAAS,EAAE,MAAM;AAAA,QAErR;AAAA,oBAAU,CAAC,EAAE;AAAA,UAAM;AAAA,UAAE,UAAU,CAAC,EAAE;AAAA;AAAA;AAAA,MAJ9B;AAAA,IAKP,CACD,GACH;AAAA,IAGD,CAAC,aAAa,CAAC,YACd,+CAAC,OAAE,OAAO,EAAE,OAAO,EAAE,OAAO,UAAU,QAAQ,WAAW,UAAU,SAAS,SAAS,GAAG;AAAA;AAAA,MAClF,UAAU,UAAU,EAAE,MAAM,YAAY;AAAA,MAAE;AAAA,OAChD;AAAA,IAID,aAAa,UACZ;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,OAAM;AAAA,QACN,YAAY,EAAE;AAAA,QACd,gBAAgB,EAAE;AAAA,QAClB,QAAM;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA;AAAA,IACV;AAAA,IAID,aAAa,YAAY,iBACxB,+CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,QAAQ,SAAS,GAChF;AAAA,oDAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO,YAAY,EAAE,OAAO,GAAG;AAAA,MACpE,8CAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,OAAO,EAAE,OAAO,WAAW,SAAS,GAAG,yBAAW;AAAA,MACnF,8CAAC,SAAI,OAAO,EAAE,MAAM,GAAG,QAAQ,OAAO,YAAY,EAAE,OAAO,GAAG;AAAA,OAChE;AAAA,IAID,YACC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAM;AAAA,QACN,YAAY,EAAE;AAAA,QACd,gBAAgB,EAAE;AAAA,QAClB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,QAAQ;AAAA;AAAA,IACV;AAAA,KAEJ;AAEJ;AAaO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA,MAAM,cAAc;AAAA,EACpB,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EACR,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAgC;AAC9B,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,KAAK;AACtC,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAuB,WAAW;AACtE,QAAM,EAAE,KAAK,IAAI,qBAAqB,MAAM;AAC5C,QAAM,IAAI,EAAE,GAAGC,iBAAgB,GAAG,OAAO;AAEzC,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,WAAgC;AAAA,IACpC,OAAO;AAAA,IAAQ,QAAQ;AAAA,IAAQ,cAAc;AAAA,IAC7C,YAAY,EAAE;AAAA,IAAQ,OAAO;AAAA,IAC7B,QAAQ;AAAA,IAAQ,QAAQ;AAAA,IAAW,YAAY;AAAA,IAAK,UAAU;AAAA,IAC9D,SAAS;AAAA,IAAQ,YAAY;AAAA,IAAU,gBAAgB;AAAA,IAAU,YAAY;AAAA,IAC7E,GAAI,aAAa,UAAU,EAAE,UAAU,SAAS,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,KAAM,WAAW,6BAA6B,IAAI,CAAC;AAAA,IAC1I,GAAG;AAAA,EACL;AAEA,SACE,gFACE;AAAA,kDAAC,YAAO,OAAO,UAAU,SAAS,MAAM,QAAQ,IAAI,GAAG,cAAY,YAAY,KAAK,KAAK,IACtF,iBACH;AAAA,IAEC,QACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,UAAU,SAAS,OAAO,GAAG,QAAQ,MAAM,SAAS,QAAQ,YAAY,YAAY,gBAAgB,UAAU,YAAY,qBAAqB;AAAA,QACxJ,SAAS,CAAC,MAAM;AAAE,cAAI,EAAE,WAAW,EAAE,cAAe,SAAQ,KAAK;AAAA,QAAE;AAAA,QAEnE,yDAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,UAAU,SAAS,WAAW,QAAQ,YAAY,EAAE,IAAI,cAAc,iBAAiB,SAAS,QAAQ,eAAe,UAAU,UAAU,SAAS,GAE/K;AAAA,yDAAC,SAAI,OAAO,EAAE,SAAS,kBAAkB,cAAc,aAAa,EAAE,MAAM,IAAI,SAAS,QAAQ,YAAY,cAAc,gBAAgB,iBAAiB,YAAY,EAAE,GACxK;AAAA,2DAAC,SAAI,OAAO,EAAE,MAAM,EAAE,GACpB;AAAA,4DAAC,SAAI,OAAO,EAAE,UAAU,QAAQ,YAAY,KAAK,OAAO,EAAE,KAAK,GAAI,eAAK,OAAM;AAAA,cAC7E,mBACC,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,WAAW,OAAO,UAAU,OAAO,GAC1E,iBAAO,KAAK,SAAS,EAAqB,IAAI,CAAC,MAC/C;AAAA,gBAAC;AAAA;AAAA,kBAAe,SAAS,MAAM,cAAc,CAAC;AAAA,kBAC5C,OAAO,EAAE,SAAS,YAAY,cAAc,QAAQ,UAAU,QAAQ,YAAY,KAAK,QAAQ,WAAW,QAAQ,aAAa,eAAe,IAAI,EAAE,SAAS,EAAE,MAAM,IAAI,YAAY,eAAe,IAAI,GAAG,EAAE,MAAM,OAAO,eAAe,OAAO,eAAe,IAAI,EAAE,SAAS,EAAE,MAAM;AAAA,kBACrR;AAAA,8BAAU,CAAC,EAAE;AAAA,oBAAM;AAAA,oBAAE,UAAU,CAAC,EAAE;AAAA;AAAA;AAAA,gBAFxB;AAAA,cAGb,CACD,GACH;AAAA,eAEJ;AAAA,YACA,8CAAC,YAAO,SAAS,MAAM,QAAQ,KAAK,GAAG,OAAO,EAAE,YAAY,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,QAAQ,WAAW,OAAO,EAAE,OAAO,SAAS,aAAa,GAAG,kBAAC;AAAA,aACrK;AAAA,UAGA,8CAAC,SAAI,OAAO,EAAE,MAAM,GAAG,WAAW,QAAQ,SAAS,OAAO,GACxD;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,MAAM;AAAA,cACN,eAAa;AAAA,cACb,QAAQ;AAAA;AAAA,UACV,GACF;AAAA,WACF;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;","names":["import_react","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","FILE_PATH_RE","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","DEFAULT_COLORS","import_react","import_jsx_runtime","DEFAULT_COLORS","import_react","import_jsx_runtime","ROLE_FIELDS","DEFAULT_COLORS"]}