{"allowContribute":false,"item":{"activeCommit":"9d1e7126e8b5adbb62280bc64f306966ee933e3d","apis":{"routes":[],"types":{}},"assets":{},"backendEvents":[],"backendSchedules":null,"bundleHash":"2dade15cf4e6526e","createdAt":1786941792245,"displayName":"AI 程式工坊","gitCommit":"9d1e7126e8b5adbb62280bc64f306966ee933e3d","id":"b9526fe674288f93c3e38433","isPublic":true,"itemType":"PLUGIN","name":"AI 程式工坊","pluginDir":"b9526fe674288f93c3e38433","repositoryID":"repo_6f5330c20f4a36849175e97a","status":"active","updatedAt":1789726693312,"updatedBy":{"userId":"6a3d5cc101c322d3356f1c","userName":"Harry"},"version":6},"ownerMemberId":"6a3d5cc101c322d3356f1c","ownerName":"Harry","publicPlugins":{"PLUGIN":{"pluginItemId":"b9526fe674288f93c3e38433","pluginDir":"b9526fe674288f93c3e38433","bundleHash":"2dade15cf4e6526e","live":true}},"subtree":[{"activeCommit":"9d1e7126e8b5adbb62280bc64f306966ee933e3d","apis":{"routes":[],"types":{}},"assets":{},"backendEvents":[],"backendSchedules":null,"bundleHash":"2dade15cf4e6526e","createdAt":1786941792245,"displayName":"AI 程式工坊","gitCommit":"9d1e7126e8b5adbb62280bc64f306966ee933e3d","id":"b9526fe674288f93c3e38433","isPublic":true,"itemType":"PLUGIN","name":"AI 程式工坊","pluginDir":"b9526fe674288f93c3e38433","repositoryID":"repo_6f5330c20f4a36849175e97a","status":"active","updatedAt":1789726693312,"updatedBy":{"userId":"6a3d5cc101c322d3356f1c","userName":"Harry"},"version":6},{"codeFilesJson":"{\".env.example\":\"PORT=3001\\nHOST=127.0.0.1\\nDATABASE_PATH=./data/vault.db\\nSTORAGE_DIR=./storage\\nMAX_UPLOAD_BYTES=10485760\\n# OpenAI（只由後端讀取，絕不傳給瀏覽器）\\nOPENAI_API_KEY=\\nOPENAI_MODEL=gpt-4o-mini\\n# Ollama\\nOLLAMA_BASE_URL=http://127.0.0.1:11434\\nOLLAMA_MODEL=llama3.2\\n# 真實三棒 HTTP 驗收（需先以 npm run dev -w server 啟動 API）\\nE2E_BASE_URL=http://127.0.0.1:3001\\nE2E_PROVIDER=ollama\\n# E2E_MODEL=llama3.2\\n\",\".gitignore\":\"node_modules\\ndist\\ndata/*.db\\nstorage/*\\n!storage/.gitkeep\\n.env\\n\",\"README.md\":\"# 類 CubeLV Vault（可執行全端版）\\n\\n此專案不是單檔預覽：前端以 React + TypeScript 建置，後端為 Node.js + Fastify，資料以 SQLite 持久化、附件 bytes 置於本機儲存層，AI 對話以 SSE 逐段串流。所有 API key 僅在後端 `.env` 使用。\\n\\n## 功能範圍\\n\\n- Item 型別 API：筆記、結構化卡片、待辦、圖表、資料夾、對話、Agent 與檔案的 SQLite CRUD；SQL 全部參數化。\\n- 檔案上傳：10MB 預設上限、白名單 MIME（PNG/JPEG/PDF/TXT/Markdown）、metadata 與實體檔分離，並能下載。\\n- AI 對話：OpenAI 和 Ollama adapter 共用介面；`POST /api/chat/stream` 是真正 SSE。未配置或服務不可用時回傳明確錯誤，沒有任何假回覆。\\n- AI 員工：`POST /api/agents/:id/run` 會建立 AgentRun、以真實模型執行並把成果寫成 NOTE；`POST /api/workflows/run` 依序執行 2–12 位員工，將前一棒的真實輸出帶入下一棒，並回傳每一步的輸入與輸出字數供稽核。排程以 SQLite 的 `(agent_id, slot_key)` 唯一鍵原子去重，避免並行 tick 或重啟後在同一時段重複執行。\\n- 前端：儀表板、全域搜尋、筆記／卡片／待辦／圖表／Agent CRUD、檔案庫與對話頁；資料均由 API 取得，無 localStorage/mock 資料。\\n- 安全：HTML 白名單淨化、Zod 輸入驗證、檔案大小/MIME 限制、API key 不進前端。\\n\\n## 需求\\n\\n- Node.js 20+（建議 22 LTS）\\n- 若使用 Ollama：已啟動的 Ollama 與已拉取模型，例如 `ollama pull llama3.2`\\n\\n## 安裝與啟動\\n\\n```bash\\ncp .env.example .env\\nnpm ci\\nnpm run dev\\n```\\n\\n瀏覽器開啟 `http://127.0.0.1:5173`。後端會在首次啟動建立 `server/data/vault.db` 並套用 `server/migrations/001_init.sql`；檔案放在 `server/storage/`。\\n\\n`package-lock.json` 已納入專案，請以 `npm ci` 安裝，避免不同電腦解析出不同依賴版本。`better-sqlite3` 是原生 SQLite addon；一般 Node.js 20+ 環境會在安裝時自動下載或編譯對應 binary。若因企業網路或先前使用 `--ignore-scripts` 造成 binary 缺失，執行 `npm rebuild better-sqlite3` 後再跑測試。\\n\\n設定 OpenAI 時，將 `.env` 的 `OPENAI_API_KEY` 與可選 `OPENAI_MODEL` 填上後重啟。使用 Ollama 時可保留預設 `OLLAMA_BASE_URL` / `OLLAMA_MODEL`。\\n\\n## 可重現驗收\\n\\n另開終端，在專案根目錄執行：\\n\\n```bash\\n# 1. 型別編譯與前端打包\\nnpm run build\\n\\n# 2. 後端 smoke test\\nnpm test\\n\\n# 3. 健康檢查（開發伺服器運行時）\\ncurl http://127.0.0.1:3001/api/health\\n\\n# 4. 寫入 SQLite 的真實筆記，再讀回\\ncurl -X POST http://127.0.0.1:3001/api/items -H 'content-type: application/json' \\\\\\n  -d '{\\\"type\\\":\\\"note\\\",\\\"name\\\":\\\"驗收筆記\\\",\\\"content\\\":\\\"\u003cp\u003e資料已寫入 SQLite\u003c/p\u003e\\\",\\\"tags\\\":[\\\"驗收\\\"],\\\"data\\\":{},\\\"parents\\\":[]}'\\ncurl 'http://127.0.0.1:3001/api/items?type=note\u0026q=驗收筆記'\\n```\\n\\n聊天驗收：前端建立「新對話」，選 Ollama 或 OpenAI 後送出問題。若 provider 未設定，畫面會顯示其設定／連線錯誤；設定可用模型後，會透過 SSE 逐段顯示真實輸出並保存訊息。\\n\\n## Agent 與排程驗收\\n\\n先建立三個 `agent` item，再以真實可用的 Ollama 或 OpenAI provider 執行：\\n\\n```bash\\ncurl -X POST http://127.0.0.1:3001/api/workflows/run -H 'content-type: application/json' \\\\\\n  -d '{\\\"agentIds\\\":[\\\"\u003cagent-1\u003e\\\",\\\"\u003cagent-2\u003e\\\",\\\"\u003cagent-3\u003e\\\"],\\\"input\\\":\\\"整理本週重點\\\",\\\"provider\\\":\\\"ollama\\\"}'\\ncurl http://127.0.0.1:3001/api/agents/\u003cagent-3\u003e/runs\\n```\\n\\n已設定可用 provider 並啟動 API 後，可執行以下真實端對端驗收。此指令先驗證聊天 SSE 至少收到一個 `token` 與一個 `done` 事件，再建立三位臨時 Agent、執行三棒接力，逐棒確認非空模型輸出、completed AgentRun 與成果 NOTE 已寫入 SQLite；未設定或無法連線模型時會以非零狀態失敗，絕不偽造成功：\\n\\n```bash\\nnpm run verify:real-model\\n```\\n\\n若要排程，將 agent 的 `data.schedule` 存成 `{\\\"frequency\\\":\\\"DAILY\\\",\\\"time\\\":\\\"09:00\\\",\\\"prompt\\\":\\\"產出每日摘要\\\",\\\"provider\\\":\\\"ollama\\\"}`；服務每分鐘檢查並建立 AgentRun 與成果 NOTE。每個 agent 每個日期／時間時段只會取得一次執行權（即使同時呼叫兩次 tick）。測試環境可用 `POST /api/scheduler/tick` 帶 `{ \\\"at\\\": \u003cepoch-ms\u003e }` 主動觸發一次檢查。\\n\\n## 檔案樹\\n\\n```text\\nclient/                 React + TypeScript + Vite 前端\\nserver/src/index.ts     Fastify 路由、SSE、上傳與下載\\nserver/src/db.ts        SQLite repository 與 migration 初始化\\nserver/src/model.ts     OpenAI / Ollama ModelAdapter\\nserver/migrations/      SQLite schema\\n.env.example            伺服器設定範本\\n```\\n\\n## 仍未完成\\n\\n- 登入／OAuth 與其他雲端 provider 尚未納入此 MVP；可依 `server/src/model.ts` 的 adapter 介面新增。模型未設定時會明確失敗，不會偽造登入或 AI 成功回覆。\\n\",\"client/index.html\":\"\u003c!doctype html\u003e\u003chtml lang=\\\"zh-Hant\\\"\u003e\u003chead\u003e\u003cmeta charset=\\\"UTF-8\\\"/\u003e\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1.0\\\"/\u003e\u003ctitle\u003eVault AI 助理\u003c/title\u003e\u003c/head\u003e\u003cbody\u003e\u003cdiv id=\\\"root\\\"\u003e\u003c/div\u003e\u003cscript type=\\\"module\\\" src=\\\"/src/main.tsx\\\"\u003e\u003c/script\u003e\u003c/body\u003e\u003c/html\u003e\\n\",\"client/package.json\":\"{\\\"name\\\":\\\"vault-web\\\",\\\"private\\\":true,\\\"version\\\":\\\"1.0.0\\\",\\\"scripts\\\":{\\\"dev\\\":\\\"vite\\\",\\\"build\\\":\\\"tsc -b \u0026\u0026 vite build\\\"},\\\"dependencies\\\":{\\\"react\\\":\\\"^18.3.1\\\",\\\"react-dom\\\":\\\"^18.3.1\\\",\\\"recharts\\\":\\\"^2.15.0\\\"},\\\"devDependencies\\\":{\\\"@types/react\\\":\\\"^18.3.12\\\",\\\"@types/react-dom\\\":\\\"^18.3.1\\\",\\\"@vitejs/plugin-react\\\":\\\"^4.3.4\\\",\\\"typescript\\\":\\\"^5.7.2\\\",\\\"vite\\\":\\\"^6.4.3\\\"}}\",\"client/src/api.ts\":\"export type Item={id:string;type:string;name:string;content:string;tags:string[];data:Record\u003cstring,unknown\u003e;parents:string[];createdAt:number;updatedAt:number};\\nconst json=async\u003cT\u003e(url:string,init?:RequestInit):Promise\u003cT\u003e=\u003e{const r=await fetch(url,init);if(!r.ok)throw new Error((await r.json().catch(()=\u003e({}))).error||`HTTP ${r.status}`);return r.status===204?undefined as T:r.json()};\\nexport const api={items:(type?:string,q?:string)=\u003ejson\u003c{items:Item[]}\u003e(`/api/items?${new URLSearchParams({...(type?{type}:{}),...(q?{q}:{})})}`),create:(body:Partial\u003cItem\u003e)=\u003ejson\u003cItem\u003e('/api/items',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(body)}),patch:(id:string,body:Partial\u003cItem\u003e)=\u003ejson\u003cItem\u003e(`/api/items/${id}`,{method:'PATCH',headers:{'Content-Type':'application/json'},body:JSON.stringify(body)}),remove:(id:string)=\u003ejson\u003cvoid\u003e(`/api/items/${id}`,{method:'DELETE'}),messages:(id:string)=\u003ejson\u003c{messages:any[]}\u003e(`/api/threads/${id}/messages`),upload:async(file:File)=\u003e{const f=new FormData();f.append('file',file);return json\u003cItem\u003e('/api/files',{method:'POST',body:f})}};\\n\",\"client/src/main.tsx\":\"import React,{useEffect,useState}from'react';import{createRoot}from'react-dom/client';import{api,Item}from'./api';import'./styles.css';\\nconst pages:[string,string,string][]=[['dashboard','儀表板',''],['chat','AI 對話','thread'],['notes','筆記','note'],['cards','結構化卡片','card'],['todos','待辦','todo'],['charts','圖表','chart'],['agents','AI 員工','agent'],['files','檔案庫','file'],['settings','設定','setting']];\\nconst typeOf=(page:string)=\u003epages.find(x=\u003ex[0]===page)?.[2]||'';const text=(html:string)=\u003ehtml.replace(/\u003c[^\u003e]*\u003e/g,'');\\nfunction App(){const[page,setPage]=useState(location.hash.slice(1)||'dashboard'),[items,setItems]=useState\u003cItem[]\u003e([]),[error,setError]=useState(''),[q,setQ]=useState('');const refresh=()=\u003eapi.items(undefined,q).then(x=\u003esetItems(x.items)).catch(e=\u003esetError(e.message));useEffect(()=\u003e{refresh();const h=()=\u003esetPage(location.hash.slice(1)||'dashboard');addEventListener('hashchange',h);return()=\u003eremoveEventListener('hashchange',h)},[q]);const go=(x:string)=\u003elocation.hash=x;return \u003cdiv className=\\\"app\\\"\u003e\u003caside\u003e\u003ch1\u003eV \u003cspan\u003eVault\u003c/span\u003e\u003c/h1\u003e{pages.map(([id,label])=\u003e\u003cbutton key={id} className={page===id?'active':''} onClick={()=\u003ego(id)}\u003e{label}\u003c/button\u003e)}\u003c/aside\u003e\u003cmain\u003e\u003cheader\u003e\u003cb\u003e{pages.find(x=\u003ex[0]===page)?.[1]}\u003c/b\u003e\u003cinput value={q} onChange={e=\u003esetQ(e.target.value)} placeholder=\\\"全域搜尋／標籤\\\"/\u003e\u003c/header\u003e{error\u0026\u0026\u003cp className=\\\"error\\\"\u003e{error}\u003c/p\u003e}\u003cPage page={page} items={items} refresh={refresh} fail={setError}/\u003e\u003c/main\u003e\u003c/div\u003e}\\nfunction Page({page,items,refresh,fail}:{page:string;items:Item[];refresh:()=\u003evoid;fail:(s:string)=\u003evoid}){if(page==='dashboard')return \u003csection\u003e\u003ch2\u003e資料庫總覽\u003c/h2\u003e\u003cdiv className=\\\"metrics\\\"\u003e{['note','card','todo','chart','agent','file'].map(t=\u003e\u003cdiv key={t}\u003e\u003cb\u003e{items.filter(x=\u003ex.type===t).length}\u003c/b\u003e\u003cspan\u003e{t}\u003c/span\u003e\u003c/div\u003e)}\u003c/div\u003e\u003cp\u003e所有資料皆由 SQLite API 載入，重新啟動仍會保留。\u003c/p\u003e\u003c/section\u003e;if(page==='files')return \u003cFiles items={items} refresh={refresh} fail={fail}/\u003e;if(page==='chat')return \u003cChat items={items} refresh={refresh} fail={fail}/\u003e;if(page==='settings')return \u003cSettings items={items} refresh={refresh} fail={fail}/\u003e;return \u003cCollection type={typeOf(page)} title={pages.find(x=\u003ex[0]===page)?.[1]||''} items={items} refresh={refresh} fail={fail}/\u003e}\\nfunction Collection({type,title,items,refresh,fail}:{type:string;title:string;items:Item[];refresh:()=\u003evoid;fail:(s:string)=\u003evoid}){const[name,setName]=useState(''),[content,setContent]=useState(''),[tags,setTags]=useState(''),[data,setData]=useState('{}');const rows=items.filter(x=\u003ex.type===type);const create=async()=\u003e{try{await api.create({type,name,content,tags:tags.split(',').map(x=\u003ex.trim()).filter(Boolean),data:JSON.parse(data),parents:[]});setName('');setContent('');refresh()}catch(e:any){fail(`儲存失敗：${e.message}`)}};return \u003csection\u003e\u003ch2\u003e{title}\u003c/h2\u003e\u003cdiv className=\\\"form\\\"\u003e\u003cinput value={name} onChange={e=\u003esetName(e.target.value)} placeholder=\\\"名稱\\\"/\u003e\u003ctextarea value={content} onChange={e=\u003esetContent(e.target.value)} placeholder={type==='agent'?'員工系統提示／工作規則':type==='chart'?'圖表說明':'內容（安全 HTML）'}/\u003e\u003cinput value={tags} onChange={e=\u003esetTags(e.target.value)} placeholder=\\\"標籤，以逗號分隔\\\"/\u003e\u003ctextarea value={data} onChange={e=\u003esetData(e.target.value)} placeholder=\\\"結構化資料 JSON（卡片欄位、提醒、圖表資料、排程設定）\\\"/\u003e\u003cbutton onClick={create}\u003e新增並保存\u003c/button\u003e\u003c/div\u003e\u003cul\u003e{rows.map(x=\u003e\u003cli key={x.id}\u003e\u003cdiv\u003e\u003cb\u003e{x.name}\u003c/b\u003e\u003cp\u003e{text(x.content).slice(0,120)}\u003c/p\u003e\u003csmall\u003e{x.tags.join(' · ')} {Object.keys(x.data).length?'· 已附結構化資料':''}\u003c/small\u003e\u003c/div\u003e{type==='todo'\u0026\u0026\u003cbutton onClick={()=\u003eapi.patch(x.id,{data:{...x.data,completed:!x.data.completed}}).then(refresh)}\u003e{x.data.completed?'取消完成':'完成'}\u003c/button\u003e}{type==='agent'\u0026\u0026\u003cbutton onClick={async()=\u003e{const input=prompt('輸入本次工作指令');if(!input)return;try{const r=await fetch(`/api/agents/${x.id}/run`,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({input,provider:'ollama'})});if(!r.ok)throw new Error((await r.json()).error);refresh()}catch(e:any){fail(e.message)}}}\u003e執行並落庫\u003c/button\u003e}\u003cbutton onClick={()=\u003eapi.remove(x.id).then(refresh)}\u003e刪除\u003c/button\u003e\u003c/li\u003e)}\u003c/ul\u003e\u003c/section\u003e}\\nfunction Files({items,refresh,fail}:{items:Item[];refresh:()=\u003evoid;fail:(s:string)=\u003evoid}){return \u003csection\u003e\u003ch2\u003e檔案庫\u003c/h2\u003e\u003cinput type=\\\"file\\\" onChange={async e=\u003e{const f=e.target.files?.[0];if(f)try{await api.upload(f);refresh()}catch(x:any){fail(x.message)}}}/\u003e\u003cul\u003e{items.filter(x=\u003ex.type==='file').map(x=\u003e\u003cli key={x.id}\u003e\u003ca href={`/api/files/${x.id}/download`}\u003e{x.name}\u003c/a\u003e\u003csmall\u003e{String(x.data.mime||'')}\u003c/small\u003e\u003c/li\u003e)}\u003c/ul\u003e\u003c/section\u003e}\\nfunction Chat({items,refresh,fail}:{items:Item[];refresh:()=\u003evoid;fail:(s:string)=\u003evoid}){const[thread,setThread]=useState\u003cItem|undefined\u003e(items.find(x=\u003ex.type==='thread')),[ms,setMs]=useState\u003cany[]\u003e([]),[value,setValue]=useState(''),[provider,setProvider]=useState\u003c'openai'|'ollama'|'custom'\u003e('ollama');useEffect(()=\u003e{if(thread)api.messages(thread.id).then(x=\u003esetMs(x.messages))},[thread]);const send=async()=\u003e{if(!thread){try{setThread(await api.create({type:'thread',name:'新對話',content:'',tags:[],data:{},parents:[]}));refresh()}catch(e:any){fail(e.message)};return}const content=value;setValue('');try{const r=await fetch('/api/chat/stream',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({threadId:thread.id,content,provider})});if(!r.ok)throw new Error((await r.json()).error);const rd=r.body!.getReader(),dc=new TextDecoder();let b='',a='';setMs(x=\u003e[...x,{role:'user',content},{role:'assistant',content:''}]);for(;;){const{done,value}=await rd.read();if(done)break;b+=dc.decode(value,{stream:true});const chunks=b.split('\\\\n\\\\n');b=chunks.pop()||'';for(const c of chunks){const m=c.match(/event: (.+)\\\\ndata: (.+)/);if(!m)continue;const d=JSON.parse(m[2]);if(m[1]==='token'){a+=d.token;setMs(x=\u003e[...x.slice(0,-1),{role:'assistant',content:a}])}if(m[1]==='error')fail(d.message)}}}catch(e:any){fail(e.message)}};return \u003csection className=\\\"chat\\\"\u003e\u003cdiv\u003e{items.filter(x=\u003ex.type==='thread').map(x=\u003e\u003cbutton key={x.id} onClick={()=\u003esetThread(x)}\u003e{x.name}\u003c/button\u003e)}\u003cbutton onClick={()=\u003e{setThread(undefined);setMs([])}}\u003e＋新對話\u003c/button\u003e\u003c/div\u003e\u003carticle\u003e{ms.map((m,i)=\u003e\u003cp key={i} className={m.role}\u003e{m.content}\u003c/p\u003e)}\u003cselect value={provider} onChange={e=\u003esetProvider(e.target.value as any)}\u003e\u003coption value=\\\"ollama\\\"\u003eOllama\u003c/option\u003e\u003coption value=\\\"openai\\\"\u003eOpenAI\u003c/option\u003e\u003coption value=\\\"custom\\\"\u003e自訂 Adapter\u003c/option\u003e\u003c/select\u003e\u003ctextarea value={value} onChange={e=\u003esetValue(e.target.value)} placeholder=\\\"輸入問題\\\"/\u003e\u003cbutton onClick={send}\u003e送出並串流\u003c/button\u003e{ms.filter(x=\u003ex.role==='assistant').length\u003e0\u0026\u0026\u003cbutton onClick={async()=\u003e{const m=ms.filter(x=\u003ex.role==='assistant').at(-1);try{await api.create({type:'note',name:`對話摘錄 ${new Date().toLocaleString()}`,content:m.content,tags:['chat'],data:{threadId:thread?.id},parents:[]});refresh()}catch(e:any){fail(e.message)}}}\u003e最後回覆存為筆記\u003c/button\u003e}\u003c/article\u003e\u003c/section\u003e}\\nfunction Settings({items,refresh,fail}:{items:Item[];refresh:()=\u003evoid;fail:(s:string)=\u003evoid}){const setting=items.find(x=\u003ex.type==='setting');const[theme,setTheme]=useState(String(setting?.data.theme||'light'));useEffect(()=\u003e{document.documentElement.dataset.theme=theme},[theme]);return \u003csection\u003e\u003ch2\u003e設定\u003c/h2\u003e\u003cp\u003eAPI 金鑰只由後端環境變數讀取，不會儲存在瀏覽器或 SQLite。\u003c/p\u003e\u003cselect value={theme} onChange={e=\u003esetTheme(e.target.value)}\u003e\u003coption value=\\\"light\\\"\u003e淺色\u003c/option\u003e\u003coption value=\\\"dark\\\"\u003e深色\u003c/option\u003e\u003c/select\u003e\u003cbutton onClick={async()=\u003e{try{if(setting)await api.patch(setting.id,{data:{...setting.data,theme}});else await api.create({type:'setting',name:'介面設定',content:'',tags:[],data:{theme},parents:[]});refresh()}catch(e:any){fail(e.message)}}}\u003e保存主題\u003c/button\u003e\u003c/section\u003e};createRoot(document.getElementById('root')!).render(\u003cApp/\u003e);\\n\",\"client/src/styles.css\":\":root{font-family:system-ui,\\\"Noto Sans TC\\\",sans-serif;color:#172033;background:#f5f7fb}*{box-sizing:border-box}body{margin:0}.app{min-height:100vh;display:grid;grid-template-columns:220px 1fr}aside{padding:20px;background:#172033;color:#e9f5f2}aside h1{margin:0;color:#66d7c5}aside small{color:#a9b8c4;display:block;margin:5px 0 20px}aside button{width:100%;text-align:left;background:transparent;border:0;color:inherit;padding:10px;border-radius:8px;cursor:pointer}aside button:hover,aside .active{background:#294557}main{min-width:0}header{height:58px;padding:15px 24px;background:#fff;border-bottom:1px solid #e6e9ed;display:flex;justify-content:space-between}header input{width:260px}section{max-width:980px;margin:28px auto;padding:0 24px}.metrics{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}.metrics div{background:#fff;padding:18px;border-radius:12px;border:1px solid #e5e9ee}.metrics b{display:block;font-size:28px}.metrics span,small{color:#667085}.form{display:grid;gap:8px;background:#fff;padding:16px;border-radius:10px}input,textarea,select{padding:9px;border:1px solid #cfd6df;border-radius:7px;font:inherit}textarea{min-height:70px}button{padding:8px 12px;background:#0e7c6b;color:#fff;border:0;border-radius:7px;cursor:pointer}ul{padding:0;list-style:none}li{background:#fff;margin:8px 0;padding:14px;border-radius:9px;display:flex;gap:10px;align-items:center;justify-content:space-between}li div{flex:1}li p{margin:4px 0;color:#667085}.error{margin:10px 24px;padding:10px;background:#fee4e2;color:#b42318}.chat{display:grid;grid-template-columns:180px 1fr;gap:16px}.chat\u003ediv{display:grid;align-content:start;gap:6px}.chat article{background:#fff;padding:16px;border-radius:12px}.chat article textarea{display:block;width:100%;margin:12px 0}.chat p{padding:10px;border-radius:9px;white-space:pre-wrap}.chat .user{background:#dff7f2;margin-left:20%}.chat .assistant{background:#f1f3f5;margin-right:20%}@media(max-width:700px){.app{grid-template-columns:1fr}aside{display:flex;overflow:auto;padding:10px;gap:5px}aside h1,aside small,aside hr{display:none}aside button{width:auto;white-space:nowrap}.metrics{grid-template-columns:repeat(2,1fr)}.chat{grid-template-columns:1fr}}\\n\",\"client/src/vite-env.d.ts\":\"/// \u003creference types=\\\"vite/client\\\" /\u003e\\n\",\"client/tsconfig.json\":\"{\\\"compilerOptions\\\":{\\\"target\\\":\\\"ES2020\\\",\\\"useDefineForClassFields\\\":true,\\\"lib\\\":[\\\"DOM\\\",\\\"ES2020\\\"],\\\"allowJs\\\":false,\\\"skipLibCheck\\\":true,\\\"esModuleInterop\\\":true,\\\"allowSyntheticDefaultImports\\\":true,\\\"strict\\\":true,\\\"module\\\":\\\"ESNext\\\",\\\"moduleResolution\\\":\\\"Bundler\\\",\\\"resolveJsonModule\\\":true,\\\"isolatedModules\\\":true,\\\"jsx\\\":\\\"react-jsx\\\",\\\"noEmit\\\":true},\\\"include\\\":[\\\"src\\\"],\\\"references\\\":[{\\\"path\\\":\\\"./tsconfig.node.json\\\"}]}\\n\",\"client/tsconfig.node.json\":\"{\\\"compilerOptions\\\":{\\\"composite\\\":true,\\\"module\\\":\\\"ESNext\\\",\\\"moduleResolution\\\":\\\"Bundler\\\",\\\"allowSyntheticDefaultImports\\\":true},\\\"include\\\":[\\\"vite.config.ts\\\"]}\\n\",\"client/vite.config.ts\":\"import {defineConfig} from 'vite';import react from '@vitejs/plugin-react';export default defineConfig({plugins:[react()],server:{port:5173,proxy:{'/api':'http://127.0.0.1:3001'}}});\\n\",\"package-lock.json\":\"{\\n  \\\"name\\\": \\\"cubelv-vault-fullstack\\\",\\n  \\\"lockfileVersion\\\": 3,\\n  \\\"requires\\\": true,\\n  \\\"packages\\\": {\\n    \\\"\\\": {\\n      \\\"name\\\": \\\"cubelv-vault-fullstack\\\",\\n      \\\"workspaces\\\": [\\n        \\\"client\\\",\\n        \\\"server\\\"\\n      ],\\n      \\\"devDependencies\\\": {\\n        \\\"concurrently\\\": \\\"^9.1.2\\\"\\n      }\\n    },\\n    \\\"client\\\": {\\n      \\\"name\\\": \\\"vault-web\\\",\\n      \\\"version\\\": \\\"1.0.0\\\",\\n      \\\"dependencies\\\": {\\n        \\\"react\\\": \\\"^18.3.1\\\",\\n        \\\"react-dom\\\": \\\"^18.3.1\\\",\\n        \\\"recharts\\\": \\\"^2.15.0\\\"\\n      },\\n      \\\"devDependencies\\\": {\\n        \\\"@types/react\\\": \\\"^18.3.12\\\",\\n        \\\"@types/react-dom\\\": \\\"^18.3.1\\\",\\n        \\\"@vitejs/plugin-react\\\": \\\"^4.3.4\\\",\\n        \\\"typescript\\\": \\\"^5.7.2\\\",\\n        \\\"vite\\\": \\\"^6.4.3\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/code-frame\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/helper-validator-identifier\\\": \\\"^7.29.7\\\",\\n        \\\"js-tokens\\\": \\\"^4.0.0\\\",\\n        \\\"picocolors\\\": \\\"^1.1.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/compat-data\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/core\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/code-frame\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/generator\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/helper-compilation-targets\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/helper-module-transforms\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/helpers\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/parser\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/template\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/traverse\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/types\\\": \\\"^7.29.7\\\",\\n        \\\"@jridgewell/remapping\\\": \\\"^2.3.5\\\",\\n        \\\"convert-source-map\\\": \\\"^2.0.0\\\",\\n        \\\"debug\\\": \\\"^4.1.0\\\",\\n        \\\"gensync\\\": \\\"^1.0.0-beta.2\\\",\\n        \\\"json5\\\": \\\"^2.2.3\\\",\\n        \\\"semver\\\": \\\"^6.3.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"type\\\": \\\"opencollective\\\",\\n        \\\"url\\\": \\\"https://opencollective.com/babel\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/generator\\\": {\\n      \\\"version\\\": \\\"7.29.8\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/parser\\\": \\\"^7.29.8\\\",\\n        \\\"@babel/types\\\": \\\"^7.29.8\\\",\\n        \\\"@jridgewell/gen-mapping\\\": \\\"^0.3.12\\\",\\n        \\\"@jridgewell/trace-mapping\\\": \\\"^0.3.28\\\",\\n        \\\"jsesc\\\": \\\"^3.0.2\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/helper-compilation-targets\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/compat-data\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/helper-validator-option\\\": \\\"^7.29.7\\\",\\n        \\\"browserslist\\\": \\\"^4.24.0\\\",\\n        \\\"lru-cache\\\": \\\"^5.1.1\\\",\\n        \\\"semver\\\": \\\"^6.3.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/helper-globals\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/helper-module-imports\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/traverse\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/types\\\": \\\"^7.29.7\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/helper-module-transforms\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/helper-module-imports\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/helper-validator-identifier\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/traverse\\\": \\\"^7.29.7\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"@babel/core\\\": \\\"^7.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/helper-plugin-utils\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/helper-string-parser\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/helper-validator-identifier\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/helper-validator-option\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/helpers\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/template\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/types\\\": \\\"^7.29.7\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/parser\\\": {\\n      \\\"version\\\": \\\"7.29.8\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/types\\\": \\\"^7.29.8\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"parser\\\": \\\"bin/babel-parser.js\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/plugin-transform-react-jsx-self\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/helper-plugin-utils\\\": \\\"^7.29.7\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"@babel/core\\\": \\\"^7.0.0-0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/plugin-transform-react-jsx-source\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/helper-plugin-utils\\\": \\\"^7.29.7\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"@babel/core\\\": \\\"^7.0.0-0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/runtime\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/template\\\": {\\n      \\\"version\\\": \\\"7.29.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/code-frame\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/parser\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/types\\\": \\\"^7.29.7\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/traverse\\\": {\\n      \\\"version\\\": \\\"7.29.8\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/code-frame\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/generator\\\": \\\"^7.29.8\\\",\\n        \\\"@babel/helper-globals\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/parser\\\": \\\"^7.29.8\\\",\\n        \\\"@babel/template\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/types\\\": \\\"^7.29.8\\\",\\n        \\\"debug\\\": \\\"^4.3.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@babel/types\\\": {\\n      \\\"version\\\": \\\"7.29.8\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/helper-string-parser\\\": \\\"^7.29.7\\\",\\n        \\\"@babel/helper-validator-identifier\\\": \\\"^7.29.7\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/aix-ppc64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ppc64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"aix\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/android-arm\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"android\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/android-arm64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"android\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/android-x64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"android\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/darwin-arm64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"darwin\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/darwin-x64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"darwin\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/freebsd-arm64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"freebsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/freebsd-x64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"freebsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/linux-arm\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/linux-arm64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/linux-ia32\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ia32\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/linux-loong64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"loong64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/linux-mips64el\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"mips64el\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/linux-ppc64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ppc64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/linux-riscv64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"riscv64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/linux-s390x\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"s390x\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/linux-x64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/netbsd-arm64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"netbsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/netbsd-x64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"netbsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/openbsd-arm64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"openbsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/openbsd-x64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"openbsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/openharmony-arm64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"openharmony\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/sunos-x64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"sunos\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/win32-arm64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/win32-ia32\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ia32\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@esbuild/win32-x64\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/@fastify/ajv-compiler\\\": {\\n      \\\"version\\\": \\\"4.0.6\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.6.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-NtuzM0SfaMJbGlnjr9LWQUN5LzgSrbB8tf/wRZNas+4E1O/Nmzl53e7ruT61HDZyRCJGC6FxIogmNZO1c5ETBA==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"ajv\\\": \\\"^8.12.0\\\",\\n        \\\"ajv-formats\\\": \\\"^3.0.1\\\",\\n        \\\"fast-uri\\\": \\\"^4.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@fastify/busboy\\\": {\\n      \\\"version\\\": \\\"3.2.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-yXSS27qPExaXeuLvMRMXOLtpipzfQYNjG3FkunDWKGfMYjKuhFXko9CVzqxm8jcF+lmtS9Fd89QNdh9XDjnbNg==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@fastify/cors\\\": {\\n      \\\"version\\\": \\\"10.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/cors/-/cors-10.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-MZyBCBJtII60CU9Xme/iE4aEy8G7QpzGR8zkdXZkDFt7ElEMachbE61tfhAG/bvSaULlqlf0huMT12T7iqEmdQ==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"fastify-plugin\\\": \\\"^5.0.0\\\",\\n        \\\"mnemonist\\\": \\\"0.40.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@fastify/deepmerge\\\": {\\n      \\\"version\\\": \\\"3.2.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-3.2.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-N5Oqvltoa2r9z1tbx4xjky0oRR60v+T47Ic4J1ukoVQcptLOrIdRnCSdTGmOmajZuHVKlTnfcmrjyqsGEW1ztA==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@fastify/error\\\": {\\n      \\\"version\\\": \\\"4.2.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/error/-/error-4.2.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@fastify/fast-json-stringify-compiler\\\": {\\n      \\\"version\\\": \\\"5.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-PxcYtKLbQ8Z+yApiqjK8FwxIwvEj38k2OiLc17u8dkJSlmfi2wHHPaSnaoqBPQqtvF8YVsDgDpP2snDCfFrpfw==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"fast-json-stringify\\\": \\\"^7.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@fastify/forwarded\\\": {\\n      \\\"version\\\": \\\"3.0.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/forwarded/-/forwarded-3.0.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-NE8HgKLgYejV9lDpqkEFaDKMLYelJBVfHekhB0UKvX0ghagXRJqg68feg8er1NPXxG4N9i6vPxzt8E+3wHfcmA==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@fastify/merge-json-schemas\\\": {\\n      \\\"version\\\": \\\"0.2.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"dequal\\\": \\\"^2.0.3\\\"\\n      }\\n    },\\n    \\\"node_modules/@fastify/multipart\\\": {\\n      \\\"version\\\": \\\"9.4.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/multipart/-/multipart-9.4.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Z404bzZeLSXTBmp/trCBuoVFX28pM7rhv849Q5TsbTFZHuk1lc4QjQITTPK92DKVpXmNtJXeHSSc7GYvqFpxAQ==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@fastify/busboy\\\": \\\"^3.0.0\\\",\\n        \\\"@fastify/deepmerge\\\": \\\"^3.0.0\\\",\\n        \\\"@fastify/error\\\": \\\"^4.0.0\\\",\\n        \\\"fastify-plugin\\\": \\\"^5.0.0\\\",\\n        \\\"secure-json-parse\\\": \\\"^4.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@fastify/proxy-addr\\\": {\\n      \\\"version\\\": \\\"5.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@fastify/forwarded\\\": \\\"^3.0.0\\\",\\n        \\\"ipaddr.js\\\": \\\"^2.1.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@jridgewell/gen-mapping\\\": {\\n      \\\"version\\\": \\\"0.3.13\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@jridgewell/sourcemap-codec\\\": \\\"^1.5.0\\\",\\n        \\\"@jridgewell/trace-mapping\\\": \\\"^0.3.24\\\"\\n      }\\n    },\\n    \\\"node_modules/@jridgewell/remapping\\\": {\\n      \\\"version\\\": \\\"2.3.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@jridgewell/gen-mapping\\\": \\\"^0.3.5\\\",\\n        \\\"@jridgewell/trace-mapping\\\": \\\"^0.3.24\\\"\\n      }\\n    },\\n    \\\"node_modules/@jridgewell/resolve-uri\\\": {\\n      \\\"version\\\": \\\"3.1.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@jridgewell/sourcemap-codec\\\": {\\n      \\\"version\\\": \\\"1.5.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@jridgewell/trace-mapping\\\": {\\n      \\\"version\\\": \\\"0.3.31\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@jridgewell/resolve-uri\\\": \\\"^3.1.0\\\",\\n        \\\"@jridgewell/sourcemap-codec\\\": \\\"^1.4.14\\\"\\n      }\\n    },\\n    \\\"node_modules/@napi-rs/lzma-linux-x64-gnu\\\": {\\n      \\\"version\\\": \\\"1.5.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"^22.20 || ^24.12 || \u003e=25\\\"\\n      }\\n    },\\n    \\\"node_modules/@pinojs/redact\\\": {\\n      \\\"version\\\": \\\"0.4.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@rolldown/pluginutils\\\": {\\n      \\\"version\\\": \\\"1.0.0-beta.27\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@rollup/rollup-android-arm-eabi\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-jfkGfTwhQpsiSckPF8r9bU3pn3vyd72NlWaO+TgEO6WPSDnUhXzrNYCHBMOYj0ACaUgjm6eERLF+XV9a6RstoA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"android\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-android-arm64\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-oGVqyQlxnrz9/ty89oHpU857VUHEl5/Xu4R2lS+aivCTrNnSsbiENzTnNaBsjxH0CNWGPhzHArOLFwo+oKXveA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"android\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-darwin-arm64\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-bW7B8xMEq8n99Q3ieEcPRGuphurdZAaFzQc9Efyyw3FL6DZO6pMy9xhdN+kBoD7Sy05xNXSr4OyPPnpkYriS/A==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"darwin\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-darwin-x64\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-YSwBS86QeHOGlrxJ1PSOIZSkzRL/JmKeunhc+lV6M1a6En8QuVCD/T/qIA0J4Gd2Y86RIOBYrLcOUtqGh9+/1w==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"darwin\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-freebsd-arm64\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-2fST8lILgl7cKbme/1KDdPCmbXbG+gqoV3bHp19L0ypX/3akYMBVdOunPleRCwonoLnXOZ/0F+Mt/v8POFmfcQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"freebsd\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-freebsd-x64\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-cpIxQCP9J+EVad0a6LO1kY3ZGODlk80VlI+2I96B8xMcdHZ4pLVhfQ49JFpYqjPF91FFkQWftf57YlDcTiw9yQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"freebsd\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-arm-gnueabihf\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-r9fGh3eFs3e/udWh5ZjXQtxiYK/xoFxQaYR/cELxac/Udkl5Th+IsFm0CX3Kl9hmUH/we7EoMpjJgeQNnE0+IA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-arm-musleabihf\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-xdvFdp7OM6KLJviJT2g/YuRSUjnZgGHk4RNgwIbN7X6cPugOucV60DdHXWzsBVCUdrGb6qSXnJQrrAKMmQuj3Q==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-arm64-gnu\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-rRqILAndyzHzP7T9NFQrq+4HFWNhqkqkKur7eiBpfLmz01PO0JKx5Vchu3YllE4YXI/Ftgq/szrDWg5GJ0mI8g==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-arm64-musl\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Gf4X3qVMucayUvux6aXXPgXovocSFUC0rrffDuPI/S2nHhNMhjcZxsrAFYCOF350PRreW1XwzFj3CT/3bKsWCw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-loong64-gnu\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-+s5qA0TNM0qm8PK/a5gt/1Hpx+NV08uSuCncvhziIlQzT6AEV2fnUQo7eBtFTFO0nA9scauvoR2HusfXmQnO4w==\\\",\\n      \\\"cpu\\\": [\\n        \\\"loong64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-loong64-musl\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ybb6QvWwWJCbBWqERpc8K3pYVGIrXlG8MEQ8IIuJY6Y9KdHQxoFoNyfkAOtKn1VHu3KuLidXvwrvGR1mEjeWCw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"loong64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-ppc64-gnu\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-nZb1DtnOyhCmYvsC8A2CwOkopVg+IS1+fPUa7rMOAXtNw5+lLCLLPqd6XAiNrGtoQKsbvIBOwsHnBH/3wnb4HQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ppc64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-ppc64-musl\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-yMbj63Sp89ryrXLWyz+sy+fYD2HpOnMCLGbe4Oa1smclFSUukdtD/BgdiHaAetJNb74URD8U4hM+qG5KVzMEkg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ppc64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-riscv64-gnu\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-mhoan3OJw2kYV/e1jtIdmvUZgyBFeA6zGWsOswmR0Tg19TQbowZuR+JMLID6spbbBN7Zee2ejrgmy3+FxGrIdA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"riscv64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-riscv64-musl\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-5ZTLmjWbb1VZdjuyhe83K/8QO0/h11midQCBP+X5OYn32ra7eOBoM0ZqtaY4nkgNsYgmdVhMYPoyVPTjUpHf3w==\\\",\\n      \\\"cpu\\\": [\\n        \\\"riscv64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-s390x-gnu\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-m53kG+br6PGxOTmgBEM2DHSDs9RVjsyEbUwjJPJGTFm1grWOG8EKJggDCTb60unD4Tjby8fi7/m9XfkEWasVWg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"s390x\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-x64-gnu\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-6RHPJR1g/uvdYU8uXBnfq3nlqyZCP82Fr6NHgfGoaIeSh0YEqnX/x6uA9MmJJbnSH7swqX4F+CkGdUF+6doiQA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-linux-x64-musl\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-xs+OXQtEXgpXT0DmA5+U3qnRZHdCST/5HRQxS8wSPZTUZN/EMWeHuSIod32LQklTBZBV9DyfncKBQ8n5V3eFdw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-openbsd-x64\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-e7hD+sl3s+mcLQDZ8pbudBVsdG6r5yN4w3LqG2TJ8sQHDpblWj5lrJs/3m01Cvlxbt4x13zu5thLjgypgtkYzw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"openbsd\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-openharmony-arm64\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-GiyJaCf+WpMub/17aPcKk27QMl5W6f+KhdPTjlFOn5akH5Wa/DCM9Stdx5cDfmasyKB08MqpVQ1uJE2RkkpbXg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"openharmony\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-win32-arm64-msvc\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-+OQ8U2DdoEfXl8T4Fb18AjmEwbXMerKDKCL8yCPAYhKCEEKoul7rkbeGCBFCbAlaGaa7pmtRTpkAJM2LE/i5FA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-win32-ia32-msvc\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-KanvAZrPKbDBFwrgiU9yEVpQoox9QPV1WZOXX7HudJQY+eSlu82CtWxDU8WtuRRvtN5EGkLczkd6Y6DTcvm9wA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ia32\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-win32-x64-gnu\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-1aC3UEWTtRl3RK3VpDJ/Tqk1XI4SLTmXIthAq6wRWo8XiSXJNd+VprJM4/1P4+i6HIaFEFlVi9sTTziniD2tOQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ]\\n    },\\n    \\\"node_modules/@rollup/rollup-win32-x64-msvc\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-/gDJaRs4gl0NPIwqCz+6PkpmhhjRAD2j6P4rSNHBzUkO3naEx2mIU0pRle1vUNRQ7mE/+8OOeXLTv/J56FKiQg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ]\\n    },\\n    \\\"node_modules/@types/babel__core\\\": {\\n      \\\"version\\\": \\\"7.20.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/parser\\\": \\\"^7.20.7\\\",\\n        \\\"@babel/types\\\": \\\"^7.20.7\\\",\\n        \\\"@types/babel__generator\\\": \\\"*\\\",\\n        \\\"@types/babel__template\\\": \\\"*\\\",\\n        \\\"@types/babel__traverse\\\": \\\"*\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/babel__generator\\\": {\\n      \\\"version\\\": \\\"7.27.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/types\\\": \\\"^7.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/babel__template\\\": {\\n      \\\"version\\\": \\\"7.4.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/parser\\\": \\\"^7.1.0\\\",\\n        \\\"@babel/types\\\": \\\"^7.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/babel__traverse\\\": {\\n      \\\"version\\\": \\\"7.28.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/types\\\": \\\"^7.28.2\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/better-sqlite3\\\": {\\n      \\\"version\\\": \\\"7.6.13\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@types/node\\\": \\\"*\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/d3-array\\\": {\\n      \\\"version\\\": \\\"3.2.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@types/d3-color\\\": {\\n      \\\"version\\\": \\\"3.1.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@types/d3-ease\\\": {\\n      \\\"version\\\": \\\"3.0.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@types/d3-interpolate\\\": {\\n      \\\"version\\\": \\\"3.0.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@types/d3-color\\\": \\\"*\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/d3-path\\\": {\\n      \\\"version\\\": \\\"3.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@types/d3-scale\\\": {\\n      \\\"version\\\": \\\"4.0.9\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@types/d3-time\\\": \\\"*\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/d3-shape\\\": {\\n      \\\"version\\\": \\\"3.2.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.2.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-kVd74ta9eof3eJOvbNd1vGKS/XERRyQbT26Og63hIsvDO84cjD5gEOhsXf26w3FSoNlPVz84DOFcKv/oou+fMw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@types/d3-path\\\": \\\"*\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/d3-time\\\": {\\n      \\\"version\\\": \\\"3.0.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@types/d3-timer\\\": {\\n      \\\"version\\\": \\\"3.0.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@types/estree\\\": {\\n      \\\"version\\\": \\\"1.0.9\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@types/node\\\": {\\n      \\\"version\\\": \\\"22.20.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"undici-types\\\": \\\"~6.21.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/prop-types\\\": {\\n      \\\"version\\\": \\\"15.7.15\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/@types/react\\\": {\\n      \\\"version\\\": \\\"18.3.31\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@types/prop-types\\\": \\\"*\\\",\\n        \\\"csstype\\\": \\\"^3.2.2\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/react-dom\\\": {\\n      \\\"version\\\": \\\"18.3.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"peerDependencies\\\": {\\n        \\\"@types/react\\\": \\\"^18.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/@types/sanitize-html\\\": {\\n      \\\"version\\\": \\\"2.16.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.16.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-n9wjs8bCOTyN/ynwD8s/nTcTreIHB1vf31vhLMGqUPNHaweKC4/fAl4Dj+hUlCTKYgm4P3k83fmiFfzkZ6sgMA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"htmlparser2\\\": \\\"^10.1\\\"\\n      }\\n    },\\n    \\\"node_modules/@vitejs/plugin-react\\\": {\\n      \\\"version\\\": \\\"4.7.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/core\\\": \\\"^7.28.0\\\",\\n        \\\"@babel/plugin-transform-react-jsx-self\\\": \\\"^7.27.1\\\",\\n        \\\"@babel/plugin-transform-react-jsx-source\\\": \\\"^7.27.1\\\",\\n        \\\"@rolldown/pluginutils\\\": \\\"1.0.0-beta.27\\\",\\n        \\\"@types/babel__core\\\": \\\"^7.20.5\\\",\\n        \\\"react-refresh\\\": \\\"^0.17.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"^14.18.0 || \u003e=16.0.0\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"vite\\\": \\\"^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/abstract-logging\\\": {\\n      \\\"version\\\": \\\"2.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/ajv\\\": {\\n      \\\"version\\\": \\\"8.20.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"fast-deep-equal\\\": \\\"^3.1.3\\\",\\n        \\\"fast-uri\\\": \\\"^3.0.1\\\",\\n        \\\"json-schema-traverse\\\": \\\"^1.0.0\\\",\\n        \\\"require-from-string\\\": \\\"^2.0.2\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"type\\\": \\\"github\\\",\\n        \\\"url\\\": \\\"https://github.com/sponsors/epoberezkin\\\"\\n      }\\n    },\\n    \\\"node_modules/ajv-formats\\\": {\\n      \\\"version\\\": \\\"3.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"ajv\\\": \\\"^8.0.0\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"ajv\\\": \\\"^8.0.0\\\"\\n      },\\n      \\\"peerDependenciesMeta\\\": {\\n        \\\"ajv\\\": {\\n          \\\"optional\\\": true\\n        }\\n      }\\n    },\\n    \\\"node_modules/ajv/node_modules/fast-uri\\\": {\\n      \\\"version\\\": \\\"3.1.6\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"BSD-3-Clause\\\"\\n    },\\n    \\\"node_modules/ansi-regex\\\": {\\n      \\\"version\\\": \\\"5.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=8\\\"\\n      }\\n    },\\n    \\\"node_modules/ansi-styles\\\": {\\n      \\\"version\\\": \\\"4.3.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"color-convert\\\": \\\"^2.0.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=8\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/chalk/ansi-styles?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/atomic-sleep\\\": {\\n      \\\"version\\\": \\\"1.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=8.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/avvio\\\": {\\n      \\\"version\\\": \\\"9.3.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/avvio/-/avvio-9.3.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-g2tQ7LE7oOSqDfwEm3M+ZCMTJc7KiZCdJ4UwyZJb5ckTKyYu50OYmvv0mCFXPuYXoM4zkSt8zM9XQ9KCvxA74A==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@fastify/error\\\": \\\"^4.0.0\\\",\\n        \\\"fastq\\\": \\\"^1.17.1\\\"\\n      }\\n    },\\n    \\\"node_modules/base64-js\\\": {\\n      \\\"version\\\": \\\"1.5.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"patreon\\\",\\n          \\\"url\\\": \\\"https://www.patreon.com/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"consulting\\\",\\n          \\\"url\\\": \\\"https://feross.org/support\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/baseline-browser-mapping\\\": {\\n      \\\"version\\\": \\\"2.11.18\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.18.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-1iEmLEYSiE1SeBoAfPo/Mnx3PzfzHUkDK61ASkCpuk3YXugYLH5DYK1SzqV55F8FMI6s0F+/tCP7Polz1QRjxw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"Apache-2.0\\\",\\n      \\\"bin\\\": {\\n        \\\"baseline-browser-mapping\\\": \\\"dist/cli.cjs\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/better-sqlite3\\\": {\\n      \\\"version\\\": \\\"11.10.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==\\\",\\n      \\\"hasInstallScript\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"bindings\\\": \\\"^1.5.0\\\",\\n        \\\"prebuild-install\\\": \\\"^7.1.1\\\"\\n      }\\n    },\\n    \\\"node_modules/bindings\\\": {\\n      \\\"version\\\": \\\"1.5.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"file-uri-to-path\\\": \\\"1.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/bl\\\": {\\n      \\\"version\\\": \\\"4.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/bl/-/bl-4.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"buffer\\\": \\\"^5.5.0\\\",\\n        \\\"inherits\\\": \\\"^2.0.4\\\",\\n        \\\"readable-stream\\\": \\\"^3.4.0\\\"\\n      }\\n    },\\n    \\\"node_modules/browserslist\\\": {\\n      \\\"version\\\": \\\"4.28.8\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/browserslist\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"tidelift\\\",\\n          \\\"url\\\": \\\"https://tidelift.com/funding/github/npm/browserslist\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/ai\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"baseline-browser-mapping\\\": \\\"^2.11.12\\\",\\n        \\\"caniuse-lite\\\": \\\"^1.0.30001809\\\",\\n        \\\"electron-to-chromium\\\": \\\"^1.5.402\\\",\\n        \\\"node-releases\\\": \\\"^2.0.53\\\",\\n        \\\"update-browserslist-db\\\": \\\"^1.3.0\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"browserslist\\\": \\\"cli.js\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || \u003e=13.7\\\"\\n      }\\n    },\\n    \\\"node_modules/buffer\\\": {\\n      \\\"version\\\": \\\"5.7.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"patreon\\\",\\n          \\\"url\\\": \\\"https://www.patreon.com/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"consulting\\\",\\n          \\\"url\\\": \\\"https://feross.org/support\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"base64-js\\\": \\\"^1.3.1\\\",\\n        \\\"ieee754\\\": \\\"^1.1.13\\\"\\n      }\\n    },\\n    \\\"node_modules/caniuse-lite\\\": {\\n      \\\"version\\\": \\\"1.0.30001809\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/browserslist\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"tidelift\\\",\\n          \\\"url\\\": \\\"https://tidelift.com/funding/github/npm/caniuse-lite\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/ai\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"CC-BY-4.0\\\"\\n    },\\n    \\\"node_modules/chalk\\\": {\\n      \\\"version\\\": \\\"4.1.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"ansi-styles\\\": \\\"^4.1.0\\\",\\n        \\\"supports-color\\\": \\\"^7.1.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/chalk/chalk?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/chalk/node_modules/supports-color\\\": {\\n      \\\"version\\\": \\\"7.2.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"has-flag\\\": \\\"^4.0.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=8\\\"\\n      }\\n    },\\n    \\\"node_modules/chownr\\\": {\\n      \\\"version\\\": \\\"1.1.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==\\\",\\n      \\\"license\\\": \\\"ISC\\\"\\n    },\\n    \\\"node_modules/cliui\\\": {\\n      \\\"version\\\": \\\"8.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"string-width\\\": \\\"^4.2.0\\\",\\n        \\\"strip-ansi\\\": \\\"^6.0.1\\\",\\n        \\\"wrap-ansi\\\": \\\"^7.0.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/clsx\\\": {\\n      \\\"version\\\": \\\"2.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6\\\"\\n      }\\n    },\\n    \\\"node_modules/color-convert\\\": {\\n      \\\"version\\\": \\\"2.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"color-name\\\": \\\"~1.1.4\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=7.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/color-name\\\": {\\n      \\\"version\\\": \\\"1.1.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/concurrently\\\": {\\n      \\\"version\\\": \\\"9.2.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/concurrently/-/concurrently-9.2.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-TZ0CEhyzvFjgtAvHTusDMgj7wNdihCh7LLLrzdUOXIhdlnL2JBBGA9eJxR24rtqgmdjh3OA3hrN1rCHj6HM8qA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"chalk\\\": \\\"4.1.2\\\",\\n        \\\"rxjs\\\": \\\"7.8.2\\\",\\n        \\\"shell-quote\\\": \\\"1.9.0\\\",\\n        \\\"supports-color\\\": \\\"8.1.1\\\",\\n        \\\"tree-kill\\\": \\\"1.2.2\\\",\\n        \\\"yargs\\\": \\\"17.7.2\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"conc\\\": \\\"dist/bin/concurrently.js\\\",\\n        \\\"concurrently\\\": \\\"dist/bin/concurrently.js\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/open-cli-tools/concurrently?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/convert-source-map\\\": {\\n      \\\"version\\\": \\\"2.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/cookie\\\": {\\n      \\\"version\\\": \\\"1.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"type\\\": \\\"opencollective\\\",\\n        \\\"url\\\": \\\"https://opencollective.com/express\\\"\\n      }\\n    },\\n    \\\"node_modules/csstype\\\": {\\n      \\\"version\\\": \\\"3.2.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/d3-array\\\": {\\n      \\\"version\\\": \\\"3.2.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"internmap\\\": \\\"1 - 2\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-color\\\": {\\n      \\\"version\\\": \\\"3.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-ease\\\": {\\n      \\\"version\\\": \\\"3.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==\\\",\\n      \\\"license\\\": \\\"BSD-3-Clause\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-format\\\": {\\n      \\\"version\\\": \\\"3.1.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-interpolate\\\": {\\n      \\\"version\\\": \\\"3.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"d3-color\\\": \\\"1 - 3\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-path\\\": {\\n      \\\"version\\\": \\\"3.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-scale\\\": {\\n      \\\"version\\\": \\\"4.0.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"d3-array\\\": \\\"2.10.0 - 3\\\",\\n        \\\"d3-format\\\": \\\"1 - 3\\\",\\n        \\\"d3-interpolate\\\": \\\"1.2.0 - 3\\\",\\n        \\\"d3-time\\\": \\\"2.1.1 - 3\\\",\\n        \\\"d3-time-format\\\": \\\"2 - 4\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-shape\\\": {\\n      \\\"version\\\": \\\"3.2.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"d3-path\\\": \\\"^3.1.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-time\\\": {\\n      \\\"version\\\": \\\"3.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"d3-array\\\": \\\"2 - 3\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-time-format\\\": {\\n      \\\"version\\\": \\\"4.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"d3-time\\\": \\\"1 - 3\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/d3-timer\\\": {\\n      \\\"version\\\": \\\"3.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/dayjs\\\": {\\n      \\\"version\\\": \\\"1.11.23\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/dayjs/-/dayjs-1.11.23.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/debug\\\": {\\n      \\\"version\\\": \\\"4.4.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"ms\\\": \\\"^2.1.3\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.0\\\"\\n      },\\n      \\\"peerDependenciesMeta\\\": {\\n        \\\"supports-color\\\": {\\n          \\\"optional\\\": true\\n        }\\n      }\\n    },\\n    \\\"node_modules/decimal.js-light\\\": {\\n      \\\"version\\\": \\\"2.5.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/decompress-response\\\": {\\n      \\\"version\\\": \\\"6.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"mimic-response\\\": \\\"^3.1.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/sponsors/sindresorhus\\\"\\n      }\\n    },\\n    \\\"node_modules/deep-extend\\\": {\\n      \\\"version\\\": \\\"0.6.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=4.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/deepmerge\\\": {\\n      \\\"version\\\": \\\"4.3.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/dequal\\\": {\\n      \\\"version\\\": \\\"2.0.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6\\\"\\n      }\\n    },\\n    \\\"node_modules/detect-libc\\\": {\\n      \\\"version\\\": \\\"2.1.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==\\\",\\n      \\\"license\\\": \\\"Apache-2.0\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=8\\\"\\n      }\\n    },\\n    \\\"node_modules/dom-helpers\\\": {\\n      \\\"version\\\": \\\"5.2.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/runtime\\\": \\\"^7.8.7\\\",\\n        \\\"csstype\\\": \\\"^3.0.2\\\"\\n      }\\n    },\\n    \\\"node_modules/dom-serializer\\\": {\\n      \\\"version\\\": \\\"2.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"domelementtype\\\": \\\"^2.3.0\\\",\\n        \\\"domhandler\\\": \\\"^5.0.2\\\",\\n        \\\"entities\\\": \\\"^4.2.0\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/cheeriojs/dom-serializer?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/dom-serializer/node_modules/entities\\\": {\\n      \\\"version\\\": \\\"4.5.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/entities/-/entities-4.5.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==\\\",\\n      \\\"license\\\": \\\"BSD-2-Clause\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.12\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/fb55/entities?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/domelementtype\\\": {\\n      \\\"version\\\": \\\"2.3.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fb55\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"BSD-2-Clause\\\"\\n    },\\n    \\\"node_modules/domhandler\\\": {\\n      \\\"version\\\": \\\"5.0.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==\\\",\\n      \\\"license\\\": \\\"BSD-2-Clause\\\",\\n      \\\"dependencies\\\": {\\n        \\\"domelementtype\\\": \\\"^2.3.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e= 4\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/fb55/domhandler?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/domutils\\\": {\\n      \\\"version\\\": \\\"3.2.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==\\\",\\n      \\\"license\\\": \\\"BSD-2-Clause\\\",\\n      \\\"dependencies\\\": {\\n        \\\"dom-serializer\\\": \\\"^2.0.0\\\",\\n        \\\"domelementtype\\\": \\\"^2.3.0\\\",\\n        \\\"domhandler\\\": \\\"^5.0.3\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/fb55/domutils?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/dotenv\\\": {\\n      \\\"version\\\": \\\"16.6.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==\\\",\\n      \\\"license\\\": \\\"BSD-2-Clause\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://dotenvx.com\\\"\\n      }\\n    },\\n    \\\"node_modules/electron-to-chromium\\\": {\\n      \\\"version\\\": \\\"1.5.412\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.412.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-z4rMe3esBzlzovKHj4gxJnsCGZRK5l4baUvm+gCGJBPE+gsyUMKsuU9tnEUtI1dOebXz1ytAPGjvXhmQ7rIPwA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"ISC\\\"\\n    },\\n    \\\"node_modules/emoji-regex\\\": {\\n      \\\"version\\\": \\\"8.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/end-of-stream\\\": {\\n      \\\"version\\\": \\\"1.4.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"once\\\": \\\"^1.4.0\\\"\\n      }\\n    },\\n    \\\"node_modules/entities\\\": {\\n      \\\"version\\\": \\\"7.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/entities/-/entities-7.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==\\\",\\n      \\\"license\\\": \\\"BSD-2-Clause\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.12\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/fb55/entities?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/esbuild\\\": {\\n      \\\"version\\\": \\\"0.28.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"hasInstallScript\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"bin\\\": {\\n        \\\"esbuild\\\": \\\"bin/esbuild\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      },\\n      \\\"optionalDependencies\\\": {\\n        \\\"@esbuild/aix-ppc64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/android-arm\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/android-arm64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/android-x64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/darwin-arm64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/darwin-x64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/freebsd-arm64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/freebsd-x64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/linux-arm\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/linux-arm64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/linux-ia32\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/linux-loong64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/linux-mips64el\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/linux-ppc64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/linux-riscv64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/linux-s390x\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/linux-x64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/netbsd-arm64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/netbsd-x64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/openbsd-arm64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/openbsd-x64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/openharmony-arm64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/sunos-x64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/win32-arm64\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/win32-ia32\\\": \\\"0.28.2\\\",\\n        \\\"@esbuild/win32-x64\\\": \\\"0.28.2\\\"\\n      }\\n    },\\n    \\\"node_modules/escalade\\\": {\\n      \\\"version\\\": \\\"3.2.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6\\\"\\n      }\\n    },\\n    \\\"node_modules/escape-string-regexp\\\": {\\n      \\\"version\\\": \\\"4.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/sponsors/sindresorhus\\\"\\n      }\\n    },\\n    \\\"node_modules/eventemitter3\\\": {\\n      \\\"version\\\": \\\"4.0.7\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/expand-template\\\": {\\n      \\\"version\\\": \\\"2.0.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==\\\",\\n      \\\"license\\\": \\\"(MIT OR WTFPL)\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6\\\"\\n      }\\n    },\\n    \\\"node_modules/fast-decode-uri-component\\\": {\\n      \\\"version\\\": \\\"1.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/fast-deep-equal\\\": {\\n      \\\"version\\\": \\\"3.1.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/fast-equals\\\": {\\n      \\\"version\\\": \\\"5.4.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-DjlFSM5Pk9cGcL0q5QXl66eGzx0N6szNgaswwc5ZphlBohjTVJSnGgI+rJVOgOi65qUoQnDZN4nDqi33udtydQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/fast-json-stringify\\\": {\\n      \\\"version\\\": \\\"7.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-7.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-eRSayARSbbwlBjpP4vnTTIRD5QPcIrmihPxDeN1DtKnHPg66UuJLx+8hlK1kaFdjvzyQ/dzALoi4vwAQ+T+iZA==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@fastify/merge-json-schemas\\\": \\\"^0.2.0\\\",\\n        \\\"ajv\\\": \\\"^8.12.0\\\",\\n        \\\"ajv-formats\\\": \\\"^3.0.1\\\",\\n        \\\"fast-uri\\\": \\\"^4.0.0\\\",\\n        \\\"json-schema-ref-resolver\\\": \\\"^3.0.0\\\",\\n        \\\"rfdc\\\": \\\"^1.2.0\\\"\\n      }\\n    },\\n    \\\"node_modules/fast-querystring\\\": {\\n      \\\"version\\\": \\\"1.1.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"fast-decode-uri-component\\\": \\\"^1.0.1\\\"\\n      }\\n    },\\n    \\\"node_modules/fast-uri\\\": {\\n      \\\"version\\\": \\\"4.1.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fast-uri/-/fast-uri-4.1.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-7+72G6vLt7jjNas8SmSATx2qeyRIjxeqO3i4IkmDTxlqYZRKANhOe1bnovcp4WZmvsYrp60WyqPyHqgRiX0yXw==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"BSD-3-Clause\\\"\\n    },\\n    \\\"node_modules/fastify\\\": {\\n      \\\"version\\\": \\\"5.12.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fastify/-/fastify-5.12.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-FWi+tQvwxR/PeRX7Z2mhfEF5ozJ3jn9asiiclzKXNSzJRHAYcU924aIOKAdHFJ+YIKieh3cqr1IwCOvTr41B3Q==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@fastify/ajv-compiler\\\": \\\"^4.0.5\\\",\\n        \\\"@fastify/error\\\": \\\"^4.0.0\\\",\\n        \\\"@fastify/fast-json-stringify-compiler\\\": \\\"^5.0.0\\\",\\n        \\\"@fastify/proxy-addr\\\": \\\"^5.0.0\\\",\\n        \\\"abstract-logging\\\": \\\"^2.0.1\\\",\\n        \\\"avvio\\\": \\\"^9.0.0\\\",\\n        \\\"fast-json-stringify\\\": \\\"^7.0.0\\\",\\n        \\\"find-my-way\\\": \\\"^9.6.0\\\",\\n        \\\"light-my-request\\\": \\\"^6.0.0\\\",\\n        \\\"pino\\\": \\\"^9.14.0 || ^10.1.0\\\",\\n        \\\"process-warning\\\": \\\"^5.1.0\\\",\\n        \\\"rfdc\\\": \\\"^1.3.1\\\",\\n        \\\"secure-json-parse\\\": \\\"^4.0.0\\\",\\n        \\\"semver\\\": \\\"^7.6.0\\\",\\n        \\\"toad-cache\\\": \\\"^3.7.0\\\"\\n      }\\n    },\\n    \\\"node_modules/fastify-plugin\\\": {\\n      \\\"version\\\": \\\"5.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/fastify/node_modules/semver\\\": {\\n      \\\"version\\\": \\\"7.8.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/semver/-/semver-7.8.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"bin\\\": {\\n        \\\"semver\\\": \\\"bin/semver.js\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      }\\n    },\\n    \\\"node_modules/fastq\\\": {\\n      \\\"version\\\": \\\"1.20.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"reusify\\\": \\\"^1.0.4\\\"\\n      }\\n    },\\n    \\\"node_modules/fdir\\\": {\\n      \\\"version\\\": \\\"6.5.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12.0.0\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"picomatch\\\": \\\"^3 || ^4\\\"\\n      },\\n      \\\"peerDependenciesMeta\\\": {\\n        \\\"picomatch\\\": {\\n          \\\"optional\\\": true\\n        }\\n      }\\n    },\\n    \\\"node_modules/file-uri-to-path\\\": {\\n      \\\"version\\\": \\\"1.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/find-my-way\\\": {\\n      \\\"version\\\": \\\"9.9.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/find-my-way/-/find-my-way-9.9.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-sJsgZ1sQH2UDuowPuMKg8az7Qc8F0jnj+SKkFWU/+T0xcFlgV5skgXOGUqmQzOdmW6ALA7AhJINWx3qFBkbLHA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"fast-deep-equal\\\": \\\"^3.1.3\\\",\\n        \\\"fast-querystring\\\": \\\"^1.0.0\\\",\\n        \\\"safe-regex2\\\": \\\"^5.0.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=20\\\"\\n      }\\n    },\\n    \\\"node_modules/fs-constants\\\": {\\n      \\\"version\\\": \\\"1.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/fsevents\\\": {\\n      \\\"version\\\": \\\"2.3.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"hasInstallScript\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"darwin\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"^8.16.0 || ^10.6.0 || \u003e=11.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/gensync\\\": {\\n      \\\"version\\\": \\\"1.0.0-beta.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6.9.0\\\"\\n      }\\n    },\\n    \\\"node_modules/get-caller-file\\\": {\\n      \\\"version\\\": \\\"2.0.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"6.* || 8.* || \u003e= 10.*\\\"\\n      }\\n    },\\n    \\\"node_modules/github-from-package\\\": {\\n      \\\"version\\\": \\\"0.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/has-flag\\\": {\\n      \\\"version\\\": \\\"4.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=8\\\"\\n      }\\n    },\\n    \\\"node_modules/htmlparser2\\\": {\\n      \\\"version\\\": \\\"10.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==\\\",\\n      \\\"funding\\\": [\\n        \\\"https://github.com/fb55/htmlparser2?sponsor=1\\\",\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fb55\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"domelementtype\\\": \\\"^2.3.0\\\",\\n        \\\"domhandler\\\": \\\"^5.0.3\\\",\\n        \\\"domutils\\\": \\\"^3.2.2\\\",\\n        \\\"entities\\\": \\\"^7.0.1\\\"\\n      }\\n    },\\n    \\\"node_modules/ieee754\\\": {\\n      \\\"version\\\": \\\"1.2.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"patreon\\\",\\n          \\\"url\\\": \\\"https://www.patreon.com/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"consulting\\\",\\n          \\\"url\\\": \\\"https://feross.org/support\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"BSD-3-Clause\\\"\\n    },\\n    \\\"node_modules/inherits\\\": {\\n      \\\"version\\\": \\\"2.0.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==\\\",\\n      \\\"license\\\": \\\"ISC\\\"\\n    },\\n    \\\"node_modules/ini\\\": {\\n      \\\"version\\\": \\\"1.3.8\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/ini/-/ini-1.3.8.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==\\\",\\n      \\\"license\\\": \\\"ISC\\\"\\n    },\\n    \\\"node_modules/internmap\\\": {\\n      \\\"version\\\": \\\"2.0.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/ipaddr.js\\\": {\\n      \\\"version\\\": \\\"2.5.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.5.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e= 10\\\"\\n      }\\n    },\\n    \\\"node_modules/is-fullwidth-code-point\\\": {\\n      \\\"version\\\": \\\"3.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=8\\\"\\n      }\\n    },\\n    \\\"node_modules/is-plain-object\\\": {\\n      \\\"version\\\": \\\"5.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-bUi/yjmtKYcRVUtWRGr0UA6xEFh2I6zWUwMrUXB3s7bmYCaZ8a+0ZsTRkrawh/mzlSD1Y0Ph8bp/U+TvBpWDNw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/js-tokens\\\": {\\n      \\\"version\\\": \\\"4.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/jsesc\\\": {\\n      \\\"version\\\": \\\"3.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"bin\\\": {\\n        \\\"jsesc\\\": \\\"bin/jsesc\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6\\\"\\n      }\\n    },\\n    \\\"node_modules/json-schema-ref-resolver\\\": {\\n      \\\"version\\\": \\\"3.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"dequal\\\": \\\"^2.0.3\\\"\\n      }\\n    },\\n    \\\"node_modules/json-schema-traverse\\\": {\\n      \\\"version\\\": \\\"1.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/json5\\\": {\\n      \\\"version\\\": \\\"2.2.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/json5/-/json5-2.2.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"bin\\\": {\\n        \\\"json5\\\": \\\"lib/cli.js\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6\\\"\\n      }\\n    },\\n    \\\"node_modules/launder\\\": {\\n      \\\"version\\\": \\\"1.7.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/launder/-/launder-1.7.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"dayjs\\\": \\\"^1.11.7\\\"\\n      }\\n    },\\n    \\\"node_modules/light-my-request\\\": {\\n      \\\"version\\\": \\\"6.6.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/light-my-request/-/light-my-request-6.6.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"BSD-3-Clause\\\",\\n      \\\"dependencies\\\": {\\n        \\\"cookie\\\": \\\"^1.0.1\\\",\\n        \\\"process-warning\\\": \\\"^4.0.0\\\",\\n        \\\"set-cookie-parser\\\": \\\"^2.6.0\\\"\\n      }\\n    },\\n    \\\"node_modules/light-my-request/node_modules/process-warning\\\": {\\n      \\\"version\\\": \\\"4.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/lodash\\\": {\\n      \\\"version\\\": \\\"4.18.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/loose-envify\\\": {\\n      \\\"version\\\": \\\"1.4.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"js-tokens\\\": \\\"^3.0.0 || ^4.0.0\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"loose-envify\\\": \\\"cli.js\\\"\\n      }\\n    },\\n    \\\"node_modules/lru-cache\\\": {\\n      \\\"version\\\": \\\"5.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"yallist\\\": \\\"^3.0.2\\\"\\n      }\\n    },\\n    \\\"node_modules/mimic-response\\\": {\\n      \\\"version\\\": \\\"3.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/sponsors/sindresorhus\\\"\\n      }\\n    },\\n    \\\"node_modules/minimist\\\": {\\n      \\\"version\\\": \\\"1.2.8\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/sponsors/ljharb\\\"\\n      }\\n    },\\n    \\\"node_modules/mkdirp-classic\\\": {\\n      \\\"version\\\": \\\"0.5.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/mnemonist\\\": {\\n      \\\"version\\\": \\\"0.40.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/mnemonist/-/mnemonist-0.40.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-kdd8AFNig2AD5Rkih7EPCXhu/iMvwevQFX/uEiGhZyPZi7fHqOoF4V4kHLpCfysxXMgQ4B52kdPMCwARshKvEg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"obliterator\\\": \\\"^2.0.4\\\"\\n      }\\n    },\\n    \\\"node_modules/ms\\\": {\\n      \\\"version\\\": \\\"2.1.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/nanoid\\\": {\\n      \\\"version\\\": \\\"3.3.18\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/ai\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"bin\\\": {\\n        \\\"nanoid\\\": \\\"bin/nanoid.cjs\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"^10 || ^12 || ^13.7 || ^14 || \u003e=15.0.1\\\"\\n      }\\n    },\\n    \\\"node_modules/napi-build-utils\\\": {\\n      \\\"version\\\": \\\"2.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/node-abi\\\": {\\n      \\\"version\\\": \\\"3.94.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/node-abi/-/node-abi-3.94.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-W5ZNO5KRPB5TkYmGVD9F6YqhsglXJzE6etpbmT+f6EQElhiX/UTG551cnsRGvLG3fyZEg9HwaDmNmj5nwJ4z9g==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"semver\\\": \\\"^7.3.5\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      }\\n    },\\n    \\\"node_modules/node-abi/node_modules/semver\\\": {\\n      \\\"version\\\": \\\"7.8.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/semver/-/semver-7.8.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"bin\\\": {\\n        \\\"semver\\\": \\\"bin/semver.js\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      }\\n    },\\n    \\\"node_modules/node-releases\\\": {\\n      \\\"version\\\": \\\"2.0.53\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/object-assign\\\": {\\n      \\\"version\\\": \\\"4.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/obliterator\\\": {\\n      \\\"version\\\": \\\"2.0.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/on-exit-leak-free\\\": {\\n      \\\"version\\\": \\\"2.1.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=14.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/once\\\": {\\n      \\\"version\\\": \\\"1.4.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/once/-/once-1.4.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"wrappy\\\": \\\"1\\\"\\n      }\\n    },\\n    \\\"node_modules/parse-srcset\\\": {\\n      \\\"version\\\": \\\"1.0.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/picocolors\\\": {\\n      \\\"version\\\": \\\"1.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==\\\",\\n      \\\"license\\\": \\\"ISC\\\"\\n    },\\n    \\\"node_modules/picomatch\\\": {\\n      \\\"version\\\": \\\"4.0.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/sponsors/jonschlinkert\\\"\\n      }\\n    },\\n    \\\"node_modules/pino\\\": {\\n      \\\"version\\\": \\\"10.3.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/pino/-/pino-10.3.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@pinojs/redact\\\": \\\"^0.4.0\\\",\\n        \\\"atomic-sleep\\\": \\\"^1.0.0\\\",\\n        \\\"on-exit-leak-free\\\": \\\"^2.1.0\\\",\\n        \\\"pino-abstract-transport\\\": \\\"^3.0.0\\\",\\n        \\\"pino-std-serializers\\\": \\\"^7.0.0\\\",\\n        \\\"process-warning\\\": \\\"^5.0.0\\\",\\n        \\\"quick-format-unescaped\\\": \\\"^4.0.3\\\",\\n        \\\"real-require\\\": \\\"^0.2.0\\\",\\n        \\\"safe-stable-stringify\\\": \\\"^2.3.1\\\",\\n        \\\"sonic-boom\\\": \\\"^4.0.1\\\",\\n        \\\"thread-stream\\\": \\\"^4.0.0\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"pino\\\": \\\"bin.js\\\"\\n      }\\n    },\\n    \\\"node_modules/pino-abstract-transport\\\": {\\n      \\\"version\\\": \\\"3.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"split2\\\": \\\"^4.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/pino-std-serializers\\\": {\\n      \\\"version\\\": \\\"7.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/postcss\\\": {\\n      \\\"version\\\": \\\"8.5.26\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/postcss/\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"tidelift\\\",\\n          \\\"url\\\": \\\"https://tidelift.com/funding/github/npm/postcss\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/ai\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"nanoid\\\": \\\"^3.3.17\\\",\\n        \\\"picocolors\\\": \\\"^1.1.1\\\",\\n        \\\"source-map-js\\\": \\\"^1.2.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"^10 || ^12 || \u003e=14\\\"\\n      }\\n    },\\n    \\\"node_modules/prebuild-install\\\": {\\n      \\\"version\\\": \\\"7.1.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==\\\",\\n      \\\"deprecated\\\": \\\"No longer maintained. Please contact the author of the relevant native addon; alternatives are available.\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"detect-libc\\\": \\\"^2.0.0\\\",\\n        \\\"expand-template\\\": \\\"^2.0.3\\\",\\n        \\\"github-from-package\\\": \\\"0.0.0\\\",\\n        \\\"minimist\\\": \\\"^1.2.3\\\",\\n        \\\"mkdirp-classic\\\": \\\"^0.5.3\\\",\\n        \\\"napi-build-utils\\\": \\\"^2.0.0\\\",\\n        \\\"node-abi\\\": \\\"^3.3.0\\\",\\n        \\\"pump\\\": \\\"^3.0.0\\\",\\n        \\\"rc\\\": \\\"^1.2.7\\\",\\n        \\\"simple-get\\\": \\\"^4.0.0\\\",\\n        \\\"tar-fs\\\": \\\"^2.0.0\\\",\\n        \\\"tunnel-agent\\\": \\\"^0.6.0\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"prebuild-install\\\": \\\"bin.js\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      }\\n    },\\n    \\\"node_modules/process-warning\\\": {\\n      \\\"version\\\": \\\"5.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/process-warning/-/process-warning-5.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/prop-types\\\": {\\n      \\\"version\\\": \\\"15.8.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"loose-envify\\\": \\\"^1.4.0\\\",\\n        \\\"object-assign\\\": \\\"^4.1.1\\\",\\n        \\\"react-is\\\": \\\"^16.13.1\\\"\\n      }\\n    },\\n    \\\"node_modules/prop-types/node_modules/react-is\\\": {\\n      \\\"version\\\": \\\"16.13.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/pump\\\": {\\n      \\\"version\\\": \\\"3.0.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/pump/-/pump-3.0.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"end-of-stream\\\": \\\"^1.1.0\\\",\\n        \\\"once\\\": \\\"^1.3.1\\\"\\n      }\\n    },\\n    \\\"node_modules/quick-format-unescaped\\\": {\\n      \\\"version\\\": \\\"4.0.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/rc\\\": {\\n      \\\"version\\\": \\\"1.2.8\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/rc/-/rc-1.2.8.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==\\\",\\n      \\\"license\\\": \\\"(BSD-2-Clause OR MIT OR Apache-2.0)\\\",\\n      \\\"dependencies\\\": {\\n        \\\"deep-extend\\\": \\\"^0.6.0\\\",\\n        \\\"ini\\\": \\\"~1.3.0\\\",\\n        \\\"minimist\\\": \\\"^1.2.0\\\",\\n        \\\"strip-json-comments\\\": \\\"~2.0.1\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"rc\\\": \\\"cli.js\\\"\\n      }\\n    },\\n    \\\"node_modules/react\\\": {\\n      \\\"version\\\": \\\"18.3.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/react/-/react-18.3.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"loose-envify\\\": \\\"^1.1.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/react-dom\\\": {\\n      \\\"version\\\": \\\"18.3.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"loose-envify\\\": \\\"^1.1.0\\\",\\n        \\\"scheduler\\\": \\\"^0.23.2\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"react\\\": \\\"^18.3.1\\\"\\n      }\\n    },\\n    \\\"node_modules/react-is\\\": {\\n      \\\"version\\\": \\\"18.3.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/react-refresh\\\": {\\n      \\\"version\\\": \\\"0.17.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/react-smooth\\\": {\\n      \\\"version\\\": \\\"4.0.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"fast-equals\\\": \\\"^5.0.1\\\",\\n        \\\"prop-types\\\": \\\"^15.8.1\\\",\\n        \\\"react-transition-group\\\": \\\"^4.4.5\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"react\\\": \\\"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0\\\",\\n        \\\"react-dom\\\": \\\"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/react-transition-group\\\": {\\n      \\\"version\\\": \\\"4.4.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==\\\",\\n      \\\"license\\\": \\\"BSD-3-Clause\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@babel/runtime\\\": \\\"^7.5.5\\\",\\n        \\\"dom-helpers\\\": \\\"^5.0.1\\\",\\n        \\\"loose-envify\\\": \\\"^1.4.0\\\",\\n        \\\"prop-types\\\": \\\"^15.6.2\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"react\\\": \\\"\u003e=16.6.0\\\",\\n        \\\"react-dom\\\": \\\"\u003e=16.6.0\\\"\\n      }\\n    },\\n    \\\"node_modules/readable-stream\\\": {\\n      \\\"version\\\": \\\"3.6.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"inherits\\\": \\\"^2.0.3\\\",\\n        \\\"string_decoder\\\": \\\"^1.1.1\\\",\\n        \\\"util-deprecate\\\": \\\"^1.0.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e= 6\\\"\\n      }\\n    },\\n    \\\"node_modules/real-require\\\": {\\n      \\\"version\\\": \\\"0.2.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e= 12.13.0\\\"\\n      }\\n    },\\n    \\\"node_modules/recharts\\\": {\\n      \\\"version\\\": \\\"2.15.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==\\\",\\n      \\\"deprecated\\\": \\\"1.x and 2.x branches are no longer active. Bump to Recharts v3 to receive latest features and bugfixes. See https://github.com/recharts/recharts/wiki/3.0-migration-guide\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"clsx\\\": \\\"^2.0.0\\\",\\n        \\\"eventemitter3\\\": \\\"^4.0.1\\\",\\n        \\\"lodash\\\": \\\"^4.17.21\\\",\\n        \\\"react-is\\\": \\\"^18.3.1\\\",\\n        \\\"react-smooth\\\": \\\"^4.0.4\\\",\\n        \\\"recharts-scale\\\": \\\"^0.4.4\\\",\\n        \\\"tiny-invariant\\\": \\\"^1.3.1\\\",\\n        \\\"victory-vendor\\\": \\\"^36.6.8\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=14\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"react\\\": \\\"^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0\\\",\\n        \\\"react-dom\\\": \\\"^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/recharts-scale\\\": {\\n      \\\"version\\\": \\\"0.4.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"decimal.js-light\\\": \\\"^2.4.1\\\"\\n      }\\n    },\\n    \\\"node_modules/require-directory\\\": {\\n      \\\"version\\\": \\\"2.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/require-from-string\\\": {\\n      \\\"version\\\": \\\"2.0.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/ret\\\": {\\n      \\\"version\\\": \\\"0.5.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/ret/-/ret-0.5.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      }\\n    },\\n    \\\"node_modules/reusify\\\": {\\n      \\\"version\\\": \\\"1.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"iojs\\\": \\\"\u003e=1.0.0\\\",\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/rfdc\\\": {\\n      \\\"version\\\": \\\"1.4.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/rollup\\\": {\\n      \\\"version\\\": \\\"4.62.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/rollup/-/rollup-4.62.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-/tqMfgP7GPA3PHhCmuiS4vIjrSVhHLgY++i+dhbG462euyAj7FpM4D9uq1X3BgjlqRdpcOrYhcQtfiQLNc8tqw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@types/estree\\\": \\\"1.0.9\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"rollup\\\": \\\"dist/bin/rollup\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18.0.0\\\",\\n        \\\"npm\\\": \\\"\u003e=8.0.0\\\"\\n      },\\n      \\\"optionalDependencies\\\": {\\n        \\\"@napi-rs/lzma-linux-x64-gnu\\\": \\\"1.5.1\\\",\\n        \\\"@rollup/rollup-android-arm-eabi\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-android-arm64\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-darwin-arm64\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-darwin-x64\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-freebsd-arm64\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-freebsd-x64\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-arm-gnueabihf\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-arm-musleabihf\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-arm64-gnu\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-arm64-musl\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-loong64-gnu\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-loong64-musl\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-ppc64-gnu\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-ppc64-musl\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-riscv64-gnu\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-riscv64-musl\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-s390x-gnu\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-x64-gnu\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-linux-x64-musl\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-openbsd-x64\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-openharmony-arm64\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-win32-arm64-msvc\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-win32-ia32-msvc\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-win32-x64-gnu\\\": \\\"4.62.5\\\",\\n        \\\"@rollup/rollup-win32-x64-msvc\\\": \\\"4.62.5\\\",\\n        \\\"fsevents\\\": \\\"~2.3.2\\\"\\n      }\\n    },\\n    \\\"node_modules/rxjs\\\": {\\n      \\\"version\\\": \\\"7.8.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"Apache-2.0\\\",\\n      \\\"dependencies\\\": {\\n        \\\"tslib\\\": \\\"^2.1.0\\\"\\n      }\\n    },\\n    \\\"node_modules/safe-buffer\\\": {\\n      \\\"version\\\": \\\"5.2.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"patreon\\\",\\n          \\\"url\\\": \\\"https://www.patreon.com/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"consulting\\\",\\n          \\\"url\\\": \\\"https://feross.org/support\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/safe-regex2\\\": {\\n      \\\"version\\\": \\\"5.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"ret\\\": \\\"~0.5.0\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"safe-regex2\\\": \\\"bin/safe-regex2.js\\\"\\n      }\\n    },\\n    \\\"node_modules/safe-stable-stringify\\\": {\\n      \\\"version\\\": \\\"2.5.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      }\\n    },\\n    \\\"node_modules/sanitize-html\\\": {\\n      \\\"version\\\": \\\"2.17.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ZmU1joGRrvoyctKIiuwUxqR6moLoU2Wk+2bMccN6f7UwhAmwYDvWziqPxRDDN2Qip62NqnIrVrT9akbL6Wretg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"deepmerge\\\": \\\"^4.2.2\\\",\\n        \\\"escape-string-regexp\\\": \\\"^4.0.0\\\",\\n        \\\"htmlparser2\\\": \\\"^10.1.0\\\",\\n        \\\"is-plain-object\\\": \\\"^5.0.0\\\",\\n        \\\"launder\\\": \\\"^1.7.1\\\",\\n        \\\"parse-srcset\\\": \\\"^1.0.2\\\",\\n        \\\"postcss\\\": \\\"^8.3.11\\\"\\n      }\\n    },\\n    \\\"node_modules/scheduler\\\": {\\n      \\\"version\\\": \\\"0.23.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"loose-envify\\\": \\\"^1.1.0\\\"\\n      }\\n    },\\n    \\\"node_modules/secure-json-parse\\\": {\\n      \\\"version\\\": \\\"4.1.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/fastify\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/fastify\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"BSD-3-Clause\\\"\\n    },\\n    \\\"node_modules/semver\\\": {\\n      \\\"version\\\": \\\"6.3.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"bin\\\": {\\n        \\\"semver\\\": \\\"bin/semver.js\\\"\\n      }\\n    },\\n    \\\"node_modules/set-cookie-parser\\\": {\\n      \\\"version\\\": \\\"2.7.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/shell-quote\\\": {\\n      \\\"version\\\": \\\"1.9.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/shell-quote/-/shell-quote-1.9.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e= 0.4\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/sponsors/ljharb\\\"\\n      }\\n    },\\n    \\\"node_modules/simple-concat\\\": {\\n      \\\"version\\\": \\\"1.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"patreon\\\",\\n          \\\"url\\\": \\\"https://www.patreon.com/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"consulting\\\",\\n          \\\"url\\\": \\\"https://feross.org/support\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/simple-get\\\": {\\n      \\\"version\\\": \\\"4.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==\\\",\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"patreon\\\",\\n          \\\"url\\\": \\\"https://www.patreon.com/feross\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"consulting\\\",\\n          \\\"url\\\": \\\"https://feross.org/support\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"decompress-response\\\": \\\"^6.0.0\\\",\\n        \\\"once\\\": \\\"^1.3.1\\\",\\n        \\\"simple-concat\\\": \\\"^1.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/sonic-boom\\\": {\\n      \\\"version\\\": \\\"4.2.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"atomic-sleep\\\": \\\"^1.0.0\\\"\\n      }\\n    },\\n    \\\"node_modules/source-map-js\\\": {\\n      \\\"version\\\": \\\"1.2.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==\\\",\\n      \\\"license\\\": \\\"BSD-3-Clause\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/split2\\\": {\\n      \\\"version\\\": \\\"4.2.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/split2/-/split2-4.2.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==\\\",\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e= 10.x\\\"\\n      }\\n    },\\n    \\\"node_modules/string_decoder\\\": {\\n      \\\"version\\\": \\\"1.3.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"safe-buffer\\\": \\\"~5.2.0\\\"\\n      }\\n    },\\n    \\\"node_modules/string-width\\\": {\\n      \\\"version\\\": \\\"4.2.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"emoji-regex\\\": \\\"^8.0.0\\\",\\n        \\\"is-fullwidth-code-point\\\": \\\"^3.0.0\\\",\\n        \\\"strip-ansi\\\": \\\"^6.0.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=8\\\"\\n      }\\n    },\\n    \\\"node_modules/strip-ansi\\\": {\\n      \\\"version\\\": \\\"6.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"ansi-regex\\\": \\\"^5.0.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=8\\\"\\n      }\\n    },\\n    \\\"node_modules/strip-json-comments\\\": {\\n      \\\"version\\\": \\\"2.0.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=0.10.0\\\"\\n      }\\n    },\\n    \\\"node_modules/supports-color\\\": {\\n      \\\"version\\\": \\\"8.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"has-flag\\\": \\\"^4.0.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/chalk/supports-color?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/tar-fs\\\": {\\n      \\\"version\\\": \\\"2.1.5\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.5.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"chownr\\\": \\\"^1.1.1\\\",\\n        \\\"mkdirp-classic\\\": \\\"^0.5.2\\\",\\n        \\\"pump\\\": \\\"^3.0.0\\\",\\n        \\\"tar-stream\\\": \\\"^2.1.4\\\"\\n      }\\n    },\\n    \\\"node_modules/tar-stream\\\": {\\n      \\\"version\\\": \\\"2.2.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"bl\\\": \\\"^4.0.3\\\",\\n        \\\"end-of-stream\\\": \\\"^1.4.1\\\",\\n        \\\"fs-constants\\\": \\\"^1.0.0\\\",\\n        \\\"inherits\\\": \\\"^2.0.3\\\",\\n        \\\"readable-stream\\\": \\\"^3.1.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=6\\\"\\n      }\\n    },\\n    \\\"node_modules/thread-stream\\\": {\\n      \\\"version\\\": \\\"4.2.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"real-require\\\": \\\"^1.0.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=20\\\"\\n      }\\n    },\\n    \\\"node_modules/thread-stream/node_modules/real-require\\\": {\\n      \\\"version\\\": \\\"1.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/tiny-invariant\\\": {\\n      \\\"version\\\": \\\"1.3.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/tinyglobby\\\": {\\n      \\\"version\\\": \\\"0.2.17\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"fdir\\\": \\\"^6.5.0\\\",\\n        \\\"picomatch\\\": \\\"^4.0.4\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12.0.0\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/sponsors/SuperchupuDev\\\"\\n      }\\n    },\\n    \\\"node_modules/toad-cache\\\": {\\n      \\\"version\\\": \\\"3.7.4\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.4.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-m1TdR/rvT7kgGJZhspNtXdsdYk0fddFpJJFlG5s+UkPFo6lkLoZ3YLOaovPYjq1R75NP5JfeTlSHaOsE09peCg==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=20\\\"\\n      }\\n    },\\n    \\\"node_modules/tree-kill\\\": {\\n      \\\"version\\\": \\\"1.2.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"bin\\\": {\\n        \\\"tree-kill\\\": \\\"cli.js\\\"\\n      }\\n    },\\n    \\\"node_modules/tslib\\\": {\\n      \\\"version\\\": \\\"2.8.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"0BSD\\\"\\n    },\\n    \\\"node_modules/tsx\\\": {\\n      \\\"version\\\": \\\"4.23.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/tsx/-/tsx-4.23.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"esbuild\\\": \\\"~0.28.0\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"tsx\\\": \\\"dist/cli.mjs\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18.0.0\\\"\\n      },\\n      \\\"optionalDependencies\\\": {\\n        \\\"fsevents\\\": \\\"~2.3.3\\\"\\n      }\\n    },\\n    \\\"node_modules/tunnel-agent\\\": {\\n      \\\"version\\\": \\\"0.6.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==\\\",\\n      \\\"license\\\": \\\"Apache-2.0\\\",\\n      \\\"dependencies\\\": {\\n        \\\"safe-buffer\\\": \\\"^5.0.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"*\\\"\\n      }\\n    },\\n    \\\"node_modules/typescript\\\": {\\n      \\\"version\\\": \\\"5.9.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"Apache-2.0\\\",\\n      \\\"bin\\\": {\\n        \\\"tsc\\\": \\\"bin/tsc\\\",\\n        \\\"tsserver\\\": \\\"bin/tsserver\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=14.17\\\"\\n      }\\n    },\\n    \\\"node_modules/undici-types\\\": {\\n      \\\"version\\\": \\\"6.21.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/update-browserslist-db\\\": {\\n      \\\"version\\\": \\\"1.3.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==\\\",\\n      \\\"dev\\\": true,\\n      \\\"funding\\\": [\\n        {\\n          \\\"type\\\": \\\"opencollective\\\",\\n          \\\"url\\\": \\\"https://opencollective.com/browserslist\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"tidelift\\\",\\n          \\\"url\\\": \\\"https://tidelift.com/funding/github/npm/browserslist\\\"\\n        },\\n        {\\n          \\\"type\\\": \\\"github\\\",\\n          \\\"url\\\": \\\"https://github.com/sponsors/ai\\\"\\n        }\\n      ],\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"escalade\\\": \\\"^3.2.0\\\",\\n        \\\"picocolors\\\": \\\"^1.1.1\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"update-browserslist-db\\\": \\\"cli.js\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"browserslist\\\": \\\"\u003e= 4.21.0\\\"\\n      }\\n    },\\n    \\\"node_modules/util-deprecate\\\": {\\n      \\\"version\\\": \\\"1.0.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==\\\",\\n      \\\"license\\\": \\\"MIT\\\"\\n    },\\n    \\\"node_modules/vault-api\\\": {\\n      \\\"resolved\\\": \\\"server\\\",\\n      \\\"link\\\": true\\n    },\\n    \\\"node_modules/vault-web\\\": {\\n      \\\"resolved\\\": \\\"client\\\",\\n      \\\"link\\\": true\\n    },\\n    \\\"node_modules/victory-vendor\\\": {\\n      \\\"version\\\": \\\"36.9.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==\\\",\\n      \\\"license\\\": \\\"MIT AND ISC\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@types/d3-array\\\": \\\"^3.0.3\\\",\\n        \\\"@types/d3-ease\\\": \\\"^3.0.0\\\",\\n        \\\"@types/d3-interpolate\\\": \\\"^3.0.1\\\",\\n        \\\"@types/d3-scale\\\": \\\"^4.0.2\\\",\\n        \\\"@types/d3-shape\\\": \\\"^3.1.0\\\",\\n        \\\"@types/d3-time\\\": \\\"^3.0.0\\\",\\n        \\\"@types/d3-timer\\\": \\\"^3.0.0\\\",\\n        \\\"d3-array\\\": \\\"^3.1.6\\\",\\n        \\\"d3-ease\\\": \\\"^3.0.1\\\",\\n        \\\"d3-interpolate\\\": \\\"^3.0.1\\\",\\n        \\\"d3-scale\\\": \\\"^4.0.2\\\",\\n        \\\"d3-shape\\\": \\\"^3.1.0\\\",\\n        \\\"d3-time\\\": \\\"^3.0.0\\\",\\n        \\\"d3-timer\\\": \\\"^3.0.1\\\"\\n      }\\n    },\\n    \\\"node_modules/vite\\\": {\\n      \\\"version\\\": \\\"6.4.3\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/vite/-/vite-6.4.3.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"esbuild\\\": \\\"^0.25.0\\\",\\n        \\\"fdir\\\": \\\"^6.4.4\\\",\\n        \\\"picomatch\\\": \\\"^4.0.2\\\",\\n        \\\"postcss\\\": \\\"^8.5.3\\\",\\n        \\\"rollup\\\": \\\"^4.34.9\\\",\\n        \\\"tinyglobby\\\": \\\"^0.2.13\\\"\\n      },\\n      \\\"bin\\\": {\\n        \\\"vite\\\": \\\"bin/vite.js\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"^18.0.0 || ^20.0.0 || \u003e=22.0.0\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/vitejs/vite?sponsor=1\\\"\\n      },\\n      \\\"optionalDependencies\\\": {\\n        \\\"fsevents\\\": \\\"~2.3.3\\\"\\n      },\\n      \\\"peerDependencies\\\": {\\n        \\\"@types/node\\\": \\\"^18.0.0 || ^20.0.0 || \u003e=22.0.0\\\",\\n        \\\"jiti\\\": \\\"\u003e=1.21.0\\\",\\n        \\\"less\\\": \\\"*\\\",\\n        \\\"lightningcss\\\": \\\"^1.21.0\\\",\\n        \\\"sass\\\": \\\"*\\\",\\n        \\\"sass-embedded\\\": \\\"*\\\",\\n        \\\"stylus\\\": \\\"*\\\",\\n        \\\"sugarss\\\": \\\"*\\\",\\n        \\\"terser\\\": \\\"^5.16.0\\\",\\n        \\\"tsx\\\": \\\"^4.8.1\\\",\\n        \\\"yaml\\\": \\\"^2.4.2\\\"\\n      },\\n      \\\"peerDependenciesMeta\\\": {\\n        \\\"@types/node\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"jiti\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"less\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"lightningcss\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"sass\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"sass-embedded\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"stylus\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"sugarss\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"terser\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"tsx\\\": {\\n          \\\"optional\\\": true\\n        },\\n        \\\"yaml\\\": {\\n          \\\"optional\\\": true\\n        }\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/aix-ppc64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ppc64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"aix\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/android-arm\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"android\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/android-arm64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"android\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/android-x64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"android\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/darwin-arm64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"darwin\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/darwin-x64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"darwin\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/freebsd-arm64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"freebsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/freebsd-x64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"freebsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/linux-arm\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/linux-arm64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/linux-ia32\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ia32\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/linux-loong64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==\\\",\\n      \\\"cpu\\\": [\\n        \\\"loong64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/linux-mips64el\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"mips64el\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/linux-ppc64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ppc64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/linux-riscv64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==\\\",\\n      \\\"cpu\\\": [\\n        \\\"riscv64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/linux-s390x\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"s390x\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/linux-x64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"linux\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/netbsd-arm64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"netbsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/netbsd-x64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"netbsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/openbsd-arm64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"openbsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/openbsd-x64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"openbsd\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/openharmony-arm64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"openharmony\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/sunos-x64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"sunos\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/win32-arm64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==\\\",\\n      \\\"cpu\\\": [\\n        \\\"arm64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/win32-ia32\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==\\\",\\n      \\\"cpu\\\": [\\n        \\\"ia32\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/@esbuild/win32-x64\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==\\\",\\n      \\\"cpu\\\": [\\n        \\\"x64\\\"\\n      ],\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"optional\\\": true,\\n      \\\"os\\\": [\\n        \\\"win32\\\"\\n      ],\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      }\\n    },\\n    \\\"node_modules/vite/node_modules/esbuild\\\": {\\n      \\\"version\\\": \\\"0.25.12\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==\\\",\\n      \\\"dev\\\": true,\\n      \\\"hasInstallScript\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"bin\\\": {\\n        \\\"esbuild\\\": \\\"bin/esbuild\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=18\\\"\\n      },\\n      \\\"optionalDependencies\\\": {\\n        \\\"@esbuild/aix-ppc64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/android-arm\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/android-arm64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/android-x64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/darwin-arm64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/darwin-x64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/freebsd-arm64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/freebsd-x64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/linux-arm\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/linux-arm64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/linux-ia32\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/linux-loong64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/linux-mips64el\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/linux-ppc64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/linux-riscv64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/linux-s390x\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/linux-x64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/netbsd-arm64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/netbsd-x64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/openbsd-arm64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/openbsd-x64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/openharmony-arm64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/sunos-x64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/win32-arm64\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/win32-ia32\\\": \\\"0.25.12\\\",\\n        \\\"@esbuild/win32-x64\\\": \\\"0.25.12\\\"\\n      }\\n    },\\n    \\\"node_modules/wrap-ansi\\\": {\\n      \\\"version\\\": \\\"7.0.0\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"ansi-styles\\\": \\\"^4.0.0\\\",\\n        \\\"string-width\\\": \\\"^4.1.0\\\",\\n        \\\"strip-ansi\\\": \\\"^6.0.0\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      },\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/chalk/wrap-ansi?sponsor=1\\\"\\n      }\\n    },\\n    \\\"node_modules/wrappy\\\": {\\n      \\\"version\\\": \\\"1.0.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==\\\",\\n      \\\"license\\\": \\\"ISC\\\"\\n    },\\n    \\\"node_modules/y18n\\\": {\\n      \\\"version\\\": \\\"5.0.8\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=10\\\"\\n      }\\n    },\\n    \\\"node_modules/yallist\\\": {\\n      \\\"version\\\": \\\"3.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"ISC\\\"\\n    },\\n    \\\"node_modules/yargs\\\": {\\n      \\\"version\\\": \\\"17.7.2\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"dependencies\\\": {\\n        \\\"cliui\\\": \\\"^8.0.1\\\",\\n        \\\"escalade\\\": \\\"^3.1.1\\\",\\n        \\\"get-caller-file\\\": \\\"^2.0.5\\\",\\n        \\\"require-directory\\\": \\\"^2.1.1\\\",\\n        \\\"string-width\\\": \\\"^4.2.3\\\",\\n        \\\"y18n\\\": \\\"^5.0.5\\\",\\n        \\\"yargs-parser\\\": \\\"^21.1.1\\\"\\n      },\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/yargs-parser\\\": {\\n      \\\"version\\\": \\\"21.1.1\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==\\\",\\n      \\\"dev\\\": true,\\n      \\\"license\\\": \\\"ISC\\\",\\n      \\\"engines\\\": {\\n        \\\"node\\\": \\\"\u003e=12\\\"\\n      }\\n    },\\n    \\\"node_modules/zod\\\": {\\n      \\\"version\\\": \\\"3.25.76\\\",\\n      \\\"resolved\\\": \\\"https://registry.npmjs.org/zod/-/zod-3.25.76.tgz\\\",\\n      \\\"integrity\\\": \\\"sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==\\\",\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"funding\\\": {\\n        \\\"url\\\": \\\"https://github.com/sponsors/colinhacks\\\"\\n      }\\n    },\\n    \\\"server\\\": {\\n      \\\"name\\\": \\\"vault-api\\\",\\n      \\\"dependencies\\\": {\\n        \\\"@fastify/cors\\\": \\\"^10.0.1\\\",\\n        \\\"@fastify/multipart\\\": \\\"^9.0.3\\\",\\n        \\\"better-sqlite3\\\": \\\"^11.7.0\\\",\\n        \\\"dotenv\\\": \\\"^16.4.7\\\",\\n        \\\"fastify\\\": \\\"^5.2.1\\\",\\n        \\\"sanitize-html\\\": \\\"^2.14.0\\\",\\n        \\\"zod\\\": \\\"^3.24.1\\\"\\n      },\\n      \\\"devDependencies\\\": {\\n        \\\"@types/better-sqlite3\\\": \\\"^7.6.12\\\",\\n        \\\"@types/node\\\": \\\"^22.10.2\\\",\\n        \\\"@types/sanitize-html\\\": \\\"^2.13.0\\\",\\n        \\\"tsx\\\": \\\"^4.19.2\\\",\\n        \\\"typescript\\\": \\\"^5.7.2\\\"\\n      }\\n    }\\n  }\\n}\\n\",\"package.json\":\"{\\n  \\\"name\\\": \\\"cubelv-vault-fullstack\\\",\\n  \\\"private\\\": true,\\n  \\\"workspaces\\\": [\\\"client\\\", \\\"server\\\"],\\n  \\\"scripts\\\": {\\n    \\\"dev\\\": \\\"concurrently -n api,web -c cyan,magenta \\\\\\\"npm run dev -w server\\\\\\\" \\\\\\\"npm run dev -w client\\\\\\\"\\\",\\n    \\\"build\\\": \\\"npm run build -w server \u0026\u0026 npm run build -w client\\\",\\n    \\\"test\\\": \\\"npm run test -w server\\\",\\n    \\\"verify:real-model\\\": \\\"npm run verify:real-model -w server\\\",\\n    \\\"start\\\": \\\"npm run start -w server\\\"\\n  },\\n  \\\"devDependencies\\\": {\\\"concurrently\\\": \\\"^9.1.2\\\"}\\n}\\n\",\"server/migrations/001_init.sql\":\"PRAGMA foreign_keys = ON;\\nCREATE TABLE IF NOT EXISTS items (\\n id TEXT PRIMARY KEY, type TEXT NOT NULL, name TEXT NOT NULL, content TEXT NOT NULL DEFAULT '',\\n tags TEXT NOT NULL DEFAULT '[]', data TEXT NOT NULL DEFAULT '{}', created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL\\n);\\nCREATE TABLE IF NOT EXISTS item_parents (item_id TEXT NOT NULL, parent_id TEXT NOT NULL, PRIMARY KEY(item_id,parent_id), FOREIGN KEY(item_id) REFERENCES items(id) ON DELETE CASCADE);\\nCREATE TABLE IF NOT EXISTS messages (id TEXT PRIMARY KEY, thread_id TEXT NOT NULL, role TEXT NOT NULL CHECK(role IN ('user','assistant','system')), content TEXT NOT NULL, position INTEGER NOT NULL, created_at INTEGER NOT NULL, FOREIGN KEY(thread_id) REFERENCES items(id) ON DELETE CASCADE);\\nCREATE TABLE IF NOT EXISTS agent_runs (id TEXT PRIMARY KEY, agent_id TEXT NOT NULL, status TEXT NOT NULL, input TEXT NOT NULL, output TEXT, started_at INTEGER NOT NULL, finished_at INTEGER, FOREIGN KEY(agent_id) REFERENCES items(id) ON DELETE CASCADE);\\nCREATE TABLE IF NOT EXISTS agent_schedule_slots (agent_id TEXT NOT NULL, slot_key TEXT NOT NULL, claimed_at INTEGER NOT NULL, PRIMARY KEY(agent_id,slot_key), FOREIGN KEY(agent_id) REFERENCES items(id) ON DELETE CASCADE);\\nCREATE INDEX IF NOT EXISTS idx_items_type ON items(type);\\nCREATE INDEX IF NOT EXISTS idx_messages_thread ON messages(thread_id, position);\\n\",\"server/package.json\":\"{\\n  \\\"name\\\": \\\"vault-api\\\",\\n  \\\"type\\\": \\\"module\\\",\\n  \\\"scripts\\\": {\\\"dev\\\":\\\"tsx watch src/index.ts\\\",\\\"build\\\":\\\"tsc -p tsconfig.json\\\",\\\"start\\\":\\\"node dist/index.js\\\",\\\"test\\\":\\\"tsx --test src/db.test.ts\\\",\\\"verify:real-model\\\":\\\"tsx src/real-model.e2e.ts\\\"},\\n  \\\"dependencies\\\": {\\\"@fastify/cors\\\":\\\"^10.0.1\\\",\\\"@fastify/multipart\\\":\\\"^9.0.3\\\",\\\"better-sqlite3\\\":\\\"^11.7.0\\\",\\\"dotenv\\\":\\\"^16.4.7\\\",\\\"fastify\\\":\\\"^5.2.1\\\",\\\"sanitize-html\\\":\\\"^2.14.0\\\",\\\"zod\\\":\\\"^3.24.1\\\"},\\n  \\\"devDependencies\\\": {\\\"@types/better-sqlite3\\\":\\\"^7.6.12\\\",\\\"@types/node\\\":\\\"^22.10.2\\\",\\\"@types/sanitize-html\\\":\\\"^2.13.0\\\",\\\"tsx\\\":\\\"^4.19.2\\\",\\\"typescript\\\":\\\"^5.7.2\\\"}\\n}\\n\",\"server/src/db.test.ts\":\"import test from 'node:test';import assert from 'node:assert/strict';import {createItem,getItem,updateItem,listItems,createAgentRun,finishAgentRun,listAgentRuns,claimScheduleSlot} from './db.js';import {streamCompletion,ModelConfigurationError} from './model.js';\\ntest('SQLite item CRUD 使用參數化資料並保留多資料夾關聯',()=\u003e{const folderA=createItem({type:'folder',name:'驗收 A',content:'',tags:[],data:{},parents:[]}),folderB=createItem({type:'folder',name:'驗收 B',content:'',tags:[],data:{},parents:[]}),note=createItem({type:'note',name:'含特殊字元的筆記',content:'\u003cp\u003eSQLite 真實寫入\u003c/p\u003e',tags:['驗收'],data:{},parents:[folderA.id,folderB.id]});assert.deepEqual(getItem(note.id)?.parents.sort(),[folderA.id,folderB.id].sort());assert.equal(listItems('note','特殊字元').some(x=\u003ex.id===note.id),true);assert.equal(updateItem(note.id,{name:'已更新'})?.name,'已更新')});\\ntest('AgentRun 會持久化輸入、狀態與完成時間',()=\u003e{const agent=createItem({type:'agent',name:'驗收員工',content:'系統提示',tags:[],data:{},parents:[]}),run=createAgentRun(agent.id,'驗收輸入'),done=finishAgentRun(run.id,'completed','真實 adapter 的成果會落庫');assert.equal(done.status,'completed');assert.ok(done.finishedAt);assert.equal(listAgentRuns(agent.id)[0].output,'真實 adapter 的成果會落庫')});\\ntest('未設定的自訂模型明確拒絕，不會回傳模擬內容',async()=\u003e{await assert.rejects(()=\u003estreamCompletion({provider:'custom'},[],async()=\u003e{}),ModelConfigurationError)});\\ntest('排程以 agent 與時段鍵原子去重，不依賴短暫時間窗',()=\u003e{const agent=createItem({type:'agent',name:'排程驗收員工',content:'',tags:[],data:{},parents:[]}),slot='DAILY:2026-08-23:09:00';assert.equal(claimScheduleSlot(agent.id,slot,1),true);assert.equal(claimScheduleSlot(agent.id,slot,2),false);assert.equal(claimScheduleSlot(agent.id,'DAILY:2026-08-24:09:00',3),true)});\\n\",\"server/src/db.ts\":\"import Database from 'better-sqlite3'; import fs from 'node:fs'; import path from 'node:path'; import crypto from 'node:crypto'; import {fileURLToPath} from 'node:url'; import type {VaultItem,ItemType,ChatMessage} from './types.js';\\nconst root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..'); const dbPath=path.resolve(process.env.DATABASE_PATH||path.join(root,'data/vault.db')); fs.mkdirSync(path.dirname(dbPath),{recursive:true});\\nexport const db=new Database(dbPath); db.pragma('foreign_keys = ON'); db.exec(fs.readFileSync(path.join(root,'migrations/001_init.sql'),'utf8'));\\nconst id=()=\u003ecrypto.randomUUID(), now=()=\u003eDate.now();\\nconst decode=(row:any):VaultItem=\u003e({...row,tags:JSON.parse(row.tags),data:JSON.parse(row.data),parents:db.prepare('SELECT parent_id FROM item_parents WHERE item_id=?').all(row.id).map((x:any)=\u003ex.parent_id),createdAt:row.created_at,updatedAt:row.updated_at});\\nexport function listItems(type?:ItemType,q?:string){let sql='SELECT * FROM items';const args:string[]=[];if(type||q){sql+=' WHERE ';const w=[] as string[];if(type){w.push('type=?');args.push(type)}if(q){w.push('(name LIKE ? OR content LIKE ? OR tags LIKE ?)');args.push(`%${q}%`,`%${q}%`,`%${q}%`)}sql+=w.join(' AND ')}sql+=' ORDER BY updated_at DESC';return db.prepare(sql).all(...args).map(decode)}\\nexport function getItem(itemId:string){const r=db.prepare('SELECT * FROM items WHERE id=?').get(itemId);return r?decode(r):undefined}\\nexport function createItem(input:Omit\u003cVaultItem,'id'|'createdAt'|'updatedAt'\u003e){const item={...input,id:id(),createdAt:now(),updatedAt:now()};db.transaction(()=\u003e{db.prepare('INSERT INTO items VALUES(?,?,?,?,?,?,?,?)').run(item.id,item.type,item.name,item.content,JSON.stringify(item.tags),JSON.stringify(item.data),item.createdAt,item.updatedAt);for(const p of item.parents)db.prepare('INSERT INTO item_parents VALUES(?,?)').run(item.id,p)})();return getItem(item.id)!}\\nexport function updateItem(itemId:string,input:Partial\u003cOmit\u003cVaultItem,'id'|'createdAt'|'updatedAt'\u003e\u003e){const old=getItem(itemId);if(!old)return;const n={...old,...input,updatedAt:now()};db.transaction(()=\u003e{db.prepare('UPDATE items SET type=?,name=?,content=?,tags=?,data=?,updated_at=? WHERE id=?').run(n.type,n.name,n.content,JSON.stringify(n.tags),JSON.stringify(n.data),n.updatedAt,itemId);if(input.parents){db.prepare('DELETE FROM item_parents WHERE item_id=?').run(itemId);for(const p of n.parents)db.prepare('INSERT INTO item_parents VALUES(?,?)').run(itemId,p)}})();return getItem(itemId)}\\nexport function deleteItem(itemId:string){return db.prepare('DELETE FROM items WHERE id=?').run(itemId).changes\u003e0}\\nexport function messages(threadId:string):ChatMessage[]{return db.prepare('SELECT id,thread_id as threadId,role,content,position,created_at as createdAt FROM messages WHERE thread_id=? ORDER BY position').all(threadId) as ChatMessage[]}\\nexport function addMessage(threadId:string,role:ChatMessage['role'],content:string){const position=(db.prepare('SELECT COALESCE(MAX(position),-1)+1 as p FROM messages WHERE thread_id=?').get(threadId) as any).p;const m={id:id(),threadId,role,content,position,createdAt:now()};db.prepare('INSERT INTO messages VALUES(?,?,?,?,?,?)').run(m.id,m.threadId,m.role,m.content,m.position,m.createdAt);return m}\\nexport type AgentRun={id:string;agentId:string;status:'running'|'completed'|'failed';input:string;output:string|null;startedAt:number;finishedAt:number|null};\\nexport function createAgentRun(agentId:string,input:string):AgentRun{const run={id:id(),agentId,status:'running' as const,input,output:null,startedAt:now(),finishedAt:null};db.prepare('INSERT INTO agent_runs VALUES(?,?,?,?,?,?,?)').run(run.id,run.agentId,run.status,run.input,run.output,run.startedAt,run.finishedAt);return run}\\nexport function finishAgentRun(runId:string,status:'completed'|'failed',output:string){db.prepare('UPDATE agent_runs SET status=?,output=?,finished_at=? WHERE id=?').run(status,output,now(),runId);return getAgentRun(runId)!}\\nexport function getAgentRun(runId:string):AgentRun|undefined{return db.prepare('SELECT id,agent_id as agentId,status,input,output,started_at as startedAt,finished_at as finishedAt FROM agent_runs WHERE id=?').get(runId) as AgentRun|undefined}\\nexport function listAgentRuns(agentId:string){return db.prepare('SELECT id,agent_id as agentId,status,input,output,started_at as startedAt,finished_at as finishedAt FROM agent_runs WHERE agent_id=? ORDER BY started_at DESC').all(agentId) as AgentRun[]}\\nexport function listAllAgentRuns(){return db.prepare('SELECT id,agent_id as agentId,status,input,output,started_at as startedAt,finished_at as finishedAt FROM agent_runs ORDER BY started_at DESC').all() as AgentRun[]}\\n/** 原子取得排程時段的執行權；false 代表該時段已由其他 tick 處理。 */\\nexport function claimScheduleSlot(agentId:string,slotKey:string,claimedAt:number){return db.prepare('INSERT OR IGNORE INTO agent_schedule_slots(agent_id,slot_key,claimed_at) VALUES(?,?,?)').run(agentId,slotKey,claimedAt).changes===1}\\n\",\"server/src/env.ts\":\"import dotenv from 'dotenv';\\nimport path from 'node:path';\\nimport { fileURLToPath } from 'node:url';\\n\\n// npm workspace scripts run with server/ as cwd. Always load the documented\\n// project-root .env instead of relying on the caller's current directory.\\nconst serverDir = path.dirname(fileURLToPath(import.meta.url));\\ndotenv.config({ path: path.resolve(serverDir, '../../.env') });\\n\\n\",\"server/src/index.ts\":\"import './env.js';\\nimport Fastify from 'fastify';import cors from '@fastify/cors';import multipart from '@fastify/multipart';import path from 'node:path';import fs from 'node:fs';import crypto from 'node:crypto';import sanitizeHtml from 'sanitize-html';import {z} from 'zod';import {listItems,getItem,createItem,updateItem,deleteItem,messages,addMessage,createAgentRun,finishAgentRun,listAgentRuns,claimScheduleSlot} from './db.js';import {streamCompletion,ModelConfigurationError} from './model.js';\\nconst app=Fastify({logger:true});await app.register(cors,{origin:true});await app.register(multipart,{limits:{fileSize:Number(process.env.MAX_UPLOAD_BYTES||10485760),files:1}});const storage=path.resolve(process.env.STORAGE_DIR||'./storage');fs.mkdirSync(storage,{recursive:true});\\nconst types=['folder','note','card','file','todo','chart','thread','agent','setting'] as const;const schema=z.object({type:z.enum(types),name:z.string().trim().min(1).max(160),content:z.string().max(200000).optional().default(''),tags:z.array(z.string().trim().max(40)).max(20).default([]),data:z.record(z.unknown()).default({}),parents:z.array(z.string().uuid()).max(20).default([])});const clean=(v:string)=\u003esanitizeHtml(v,{allowedTags:['p','br','strong','em','u','h1','h2','h3','ul','ol','li','blockquote','code','pre','a'],allowedAttributes:{a:['href','target','rel']},allowedSchemes:['http','https','mailto']});\\ntype Provider='openai'|'ollama'|'custom';type RunOptions={input:string;provider:Provider;model?:string};\\nasync function executeAgent(agent:any,options:RunOptions){const run=createAgentRun(agent.id,options.input);let out='';try{await streamCompletion({provider:options.provider,model:options.model},[{role:'system',content:agent.content||'你是資料庫助理，請回傳可保存成果。'},{role:'user',content:options.input}],async t=\u003e{out+=t});if(!out.trim())throw new Error('模型未產生任何內容，成果不會被標記為成功。');const done=finishAgentRun(run.id,'completed',out),note=createItem({type:'note',name:`${agent.name}｜執行成果`,content:clean(out),tags:['agent-output'],parents:[],data:{agentId:agent.id,runId:run.id,provider:options.provider}});return {run:done,note,output:out}}catch(e){const m=e instanceof Error?e.message:'執行失敗';throw Object.assign(new Error(m),{run:finishAgentRun(run.id,'failed',m)})}}\\nfunction scheduleSlot(agent:any,at:number){const s=(agent.data as any)?.schedule;if(!s||!['DAILY','WEEKLY'].includes(s.frequency)||typeof s.prompt!=='string'||!s.prompt.trim())return;const d=new Date(at),hm=`${String(d.getHours()).padStart(2,'0')}:${String(d.getMinutes()).padStart(2,'0')}`;if(s.time\u0026\u0026s.time!==hm)return;if(s.frequency==='WEEKLY'\u0026\u0026Number(s.dayOfWeek)!==d.getDay())return;const day=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;return `${s.frequency}:${day}:${s.time||'all-day'}`}\\nasync function runDueSchedules(at=Date.now()){const runs:any[]=[];for(const agent of listItems('agent')){const slot=scheduleSlot(agent,at);if(!slot)continue;if(!claimScheduleSlot(agent.id,slot,at)){runs.push({agentId:agent.id,status:'skipped',reason:'此排程時段已執行'});continue}try{const s=(agent.data as any).schedule,result=await executeAgent(agent,{input:s.prompt,provider:s.provider||'ollama',model:s.model});updateItem(agent.id,{data:{...agent.data,schedule:{...s,lastRunAt:at,lastSlot:slot}}});runs.push({agentId:agent.id,status:'completed',runId:result.run.id,slot})}catch(e){runs.push({agentId:agent.id,status:'failed',slot,error:(e as Error).message})}}return runs}\\nsetInterval(()=\u003e{void runDueSchedules()},60_000).unref();\\napp.get('/api/health',async()=\u003e({ok:true,time:Date.now()}));app.get('/api/items',async(req)=\u003e{const q=req.query as {type?:any;q?:string};return{items:listItems(q.type,q.q)}});app.get('/api/items/:id',async(req,r)=\u003egetItem((req.params as any).id)||r.code(404).send({error:'找不到項目'}));app.post('/api/items',async(req,r)=\u003e{const b=schema.parse(req.body);return r.code(201).send(createItem({...b,content:clean(b.content)}))});app.patch('/api/items/:id',async(req,r)=\u003e{const b=schema.partial().parse(req.body);if(b.content!==undefined)b.content=clean(b.content);return updateItem((req.params as any).id,b)||r.code(404).send({error:'找不到項目'})});app.delete('/api/items/:id',async(req,r)=\u003edeleteItem((req.params as any).id)?r.code(204).send():r.code(404).send({error:'找不到項目'}));\\napp.get('/api/threads/:id/messages',async(req)=\u003e({messages:messages((req.params as any).id)}));app.get('/api/agents/:id/runs',async(req)=\u003e({runs:listAgentRuns((req.params as any).id)}));\\napp.post('/api/chat/stream',async(req,r)=\u003e{const b=z.object({threadId:z.string().uuid(),content:z.string().trim().min(1).max(12000),provider:z.enum(['openai','ollama','custom']).default('openai'),model:z.string().max(100).optional()}).parse(req.body);if(!getItem(b.threadId))return r.code(404).send({error:'找不到對話'});addMessage(b.threadId,'user',b.content);r.hijack();r.raw.writeHead(200,{'Content-Type':'text/event-stream; charset=utf-8','Cache-Control':'no-cache'});let whole='';const send=(e:string,d:unknown)=\u003er.raw.write(`event: ${e}\\\\ndata: ${JSON.stringify(d)}\\\\n\\\\n`);try{await streamCompletion({provider:b.provider,model:b.model},messages(b.threadId),async t=\u003e{whole+=t;send('token',{token:t})});addMessage(b.threadId,'assistant',whole);send('done',{content:whole})}catch(e){send('error',{message:e instanceof Error?e.message:'模型服務失敗',configuration:e instanceof ModelConfigurationError})}finally{r.raw.end()}});\\napp.post('/api/agents/:id/run',async(req,r)=\u003e{\\n const agent=getItem((req.params as any).id);if(!agent||agent.type!=='agent')return r.code(404).send({error:'找不到 AI 員工'});\\n const b=z.object({input:z.string().trim().min(1).max(12000),provider:z.enum(['openai','ollama','custom']).default('ollama'),model:z.string().max(100).optional()}).parse(req.body);\\n try{return r.code(201).send(await executeAgent(agent,b))}catch(e){const failure=e as any;return r.code(422).send({run:failure.run,error:failure.message})}\\n});\\napp.post('/api/workflows/run',async(req,r)=\u003e{\\n const b=z.object({agentIds:z.array(z.string().uuid()).min(2).max(12),input:z.string().trim().min(1).max(12000),provider:z.enum(['openai','ollama','custom']).default('ollama'),model:z.string().max(100).optional()}).parse(req.body);let handoff=b.input;const steps:any[]=[];\\n for(const id of b.agentIds){const agent=getItem(id);if(!agent||agent.type!=='agent')return r.code(404).send({error:'工作流包含不存在的 AI 員工',steps});try{const input=handoff,result=await executeAgent(agent,{input,provider:b.provider,model:b.model});steps.push({agentId:id,agentName:agent.name,input,run:result.run,note:result.note,outputChars:result.output.length});handoff=`前一棒「${agent.name}」的真實模型成果如下，請在此基礎上完成你的工作：\\\\n\\\\n${result.output}`}catch(e){const failure=e as any;steps.push({agentId:id,agentName:agent.name,input:handoff,run:failure.run,error:failure.message});return r.code(422).send({error:`工作流在「${agent.name}」失敗：${failure.message}`,steps})}}\\n return r.code(201).send({steps,output:handoff});\\n});\\napp.post('/api/scheduler/tick',async(req)=\u003e({runs:await runDueSchedules(Number((req.body as any)?.at)||Date.now())}));\\napp.post('/api/files',async(req,r)=\u003e{const p=await req.file();if(!p)return r.code(400).send({error:'請選擇檔案'});const allow=['image/png','image/jpeg','application/pdf','text/plain','text/markdown'];if(!allow.includes(p.mimetype))return r.code(415).send({error:'不支援的 MIME 類型'});const key=`${crypto.randomUUID()}${path.extname(p.filename).replace(/[^.a-z0-9]/gi,'')}`,target=path.join(storage,key);await new Promise\u003cvoid\u003e((ok,bad)=\u003ep.file.pipe(fs.createWriteStream(target)).on('finish',ok).on('error',bad));return r.code(201).send(createItem({type:'file',name:p.filename,content:'',tags:[],parents:[],data:{storageKey:key,mime:p.mimetype,size:Number(p.file.bytesRead||0)}}))});app.get('/api/files/:id/download',async(req,r)=\u003e{const x=getItem((req.params as any).id);if(!x||x.type!=='file')return r.code(404).send({error:'找不到檔案'});const d=x.data as any,f=path.join(storage,path.basename(String(d.storageKey||'')));if(!fs.existsSync(f))return r.code(404).send({error:'實體檔案遺失'});r.header('Content-Type',String(d.mime||'application/octet-stream'));return r.send(fs.createReadStream(f))});\\nawait app.listen({port:Number(process.env.PORT||3001),host:process.env.HOST||'127.0.0.1'});\\n\",\"server/src/model.ts\":\"export type ModelConfig={provider:'openai'|'ollama'|'custom';model?:string}; export type TokenSink=(token:string)=\u003ePromise\u003cvoid\u003e;\\nexport class ModelConfigurationError extends Error{}\\nexport async function streamCompletion(config:ModelConfig,messages:{role:string;content:string}[],emit:TokenSink){\\n if(config.provider==='custom')throw new ModelConfigurationError('自訂 Provider 尚未設定。請在後端實作 ModelAdapter 後再使用，系統不會產生模擬回覆。');\\n if(config.provider==='openai'){const key=process.env.OPENAI_API_KEY;if(!key)throw new ModelConfigurationError('尚未設定 OPENAI_API_KEY。請在伺服器 .env 設定後重啟。');const res=await fetch('https://api.openai.com/v1/chat/completions',{method:'POST',headers:{Authorization:`Bearer ${key}`,'Content-Type':'application/json'},body:JSON.stringify({model:config.model||process.env.OPENAI_MODEL||'gpt-4o-mini',stream:true,messages})});if(!res.ok)throw new Error(`OpenAI 請求失敗：${res.status} ${await res.text()}`);const reader=res.body!.getReader(),dec=new TextDecoder();let buf='';while(true){const {done,value}=await reader.read();if(done)break;buf+=dec.decode(value,{stream:true});for(const line of buf.split('\\\\n')){if(!line.startsWith('data: '))continue;const raw=line.slice(6);if(raw==='[DONE]')return;try{const token=JSON.parse(raw).choices?.[0]?.delta?.content;if(token)await emit(token)}catch{}}buf=buf.endsWith('\\\\n')?'':buf.split('\\\\n').pop()||''}return}\\n const base=process.env.OLLAMA_BASE_URL||'http://127.0.0.1:11434';const res=await fetch(`${base}/api/chat`,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({model:config.model||process.env.OLLAMA_MODEL||'llama3.2',stream:true,messages})});if(!res.ok)throw new ModelConfigurationError(`Ollama 無法使用（${res.status}）。請確認服務與模型已啟動。`);const reader=res.body!.pipeThrough(new TextDecoderStream()).getReader();let buffer='';while(true){const {done,value}=await reader.read();if(done)break;buffer+=value;const lines=buffer.split('\\\\n');buffer=lines.pop()||'';for(const line of lines)if(line)try{const token=JSON.parse(line).message?.content;if(token)await emit(token)}catch{}}if(buffer.trim())try{const token=JSON.parse(buffer).message?.content;if(token)await emit(token)}catch{}\\n}\\n\",\"server/src/real-model.e2e.ts\":\"/**\\n * 真實模型三棒驗收：必須由正在運行的 API 與已配置的 provider 執行。\\n * 本檔不使用 mock，也不會在 provider 未配置時跳過或偽造成功。\\n */\\nimport './env.js';\\n\\nconst baseUrl = process.env.E2E_BASE_URL || 'http://127.0.0.1:3001';\\nconst provider = process.env.E2E_PROVIDER === 'openai' ? 'openai' : 'ollama';\\nconst model = process.env.E2E_MODEL;\\n\\nif (provider === 'openai' \u0026\u0026 !process.env.OPENAI_API_KEY) {\\n  throw new Error('真實驗收已中止：E2E_PROVIDER=openai 時必須設定 OPENAI_API_KEY。');\\n}\\nif (provider === 'ollama' \u0026\u0026 !process.env.OLLAMA_BASE_URL) {\\n  throw new Error('真實驗收已中止：E2E_PROVIDER=ollama 時必須設定 OLLAMA_BASE_URL。');\\n}\\n\\nconst request = async \u003cT\u003e(path: string, init?: RequestInit): Promise\u003cT\u003e =\u003e {\\n  const response = await fetch(`${baseUrl}${path}`, init);\\n  const body = await response.json().catch(() =\u003e ({}));\\n  if (!response.ok) throw new Error(`${path} 驗收失敗（HTTP ${response.status}）：${body.error || JSON.stringify(body)}`);\\n  return body as T;\\n};\\n\\nconst post = \u003cT\u003e(path: string, body: unknown) =\u003e request\u003cT\u003e(path, {\\n  method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(body),\\n});\\n\\ntype Item = { id: string; name: string; type: string };\\ntype WorkflowResult = { steps: Array\u003c{ agentId: string; run: { id: string; status: string; output: string | null }; note: Item; outputChars: number }\u003e };\\n\\nawait request('/api/health');\\nconst stamp = new Date().toISOString();\\nconst thread = await post\u003cItem\u003e('/api/items', {\\n  type: 'thread', name: `真實 SSE 驗收-${stamp}`, content: '', tags: ['e2e', 'real-model'], data: {}, parents: [],\\n});\\nconst streamResponse = await fetch(`${baseUrl}/api/chat/stream`, {\\n  method: 'POST', headers: { 'content-type': 'application/json' },\\n  body: JSON.stringify({ threadId: thread.id, content: '請只回覆一個簡短的繁體中文句子。', provider, ...(model ? { model } : {}) }),\\n});\\nif (!streamResponse.ok || !streamResponse.body) throw new Error(`SSE 驗收無法啟動（HTTP ${streamResponse.status}）。`);\\nconst sse = await streamResponse.text();\\nif (/event: error\\\\n/.test(sse)) throw new Error(`SSE 真實模型失敗：${sse}`);\\nconst tokens = [...sse.matchAll(/event: token\\\\ndata: (.+)\\\\n/g)];\\nconst done = sse.match(/event: done\\\\ndata: (.+)\\\\n/);\\nif (tokens.length \u003c 1 || !done) throw new Error('SSE 未收到至少一個 token 與 done 事件，不能視為真實成功。');\\nconst agents: Item[] = [];\\nfor (const [index, role] of ['研究員：列三點重點。', '編輯：整合前一棒為三點摘要。', '審稿：產出一句可驗收結論。'].entries()) {\\n  agents.push(await post\u003cItem\u003e('/api/items', {\\n    type: 'agent', name: `真實模型驗收-${stamp}-${index + 1}`, content: role, tags: ['e2e', 'real-model'], data: {}, parents: [],\\n  }));\\n}\\n\\nconst result = await post\u003cWorkflowResult\u003e('/api/workflows/run', {\\n  agentIds: agents.map((agent) =\u003e agent.id), input: '請以繁體中文說明 SQLite 持久化的好處。', provider, ...(model ? { model } : {}),\\n});\\nif (result.steps.length !== 3) throw new Error(`預期三棒，實際取得 ${result.steps.length} 棒。`);\\nfor (const [index, step] of result.steps.entries()) {\\n  if (step.run.status !== 'completed' || !step.run.output?.trim() || step.outputChars \u003c 1 || step.note.type !== 'note') {\\n    throw new Error(`第 ${index + 1} 棒未留下真實成功輸出與成果 NOTE。`);\\n  }\\n  const runs = await request\u003c{ runs: Array\u003c{ id: string; status: string; output: string | null }\u003e }\u003e(`/api/agents/${step.agentId}/runs`);\\n  const persisted = runs.runs.find((run) =\u003e run.id === step.run.id);\\n  if (!persisted || persisted.status !== 'completed' || persisted.output !== step.run.output) {\\n    throw new Error(`第 ${index + 1} 棒 AgentRun 未正確持久化。`);\\n  }\\n}\\nconsole.log(JSON.stringify({ ok: true, provider, sse: { tokenEvents: tokens.length, done: true }, steps: result.steps.map((step) =\u003e ({ agentId: step.agentId, runId: step.run.id, noteId: step.note.id, outputChars: step.outputChars })) }, null, 2));\\n\",\"server/src/types.ts\":\"export type ItemType = 'folder'|'note'|'card'|'file'|'todo'|'chart'|'thread'|'agent'|'setting';\\nexport type VaultItem = {id:string;type:ItemType;name:string;content:string;tags:string[];data:Record\u003cstring,unknown\u003e;parents:string[];createdAt:number;updatedAt:number};\\nexport type ChatMessage = {id:string;threadId:string;role:'user'|'assistant'|'system';content:string;position:number;createdAt:number};\\n\",\"server/tsconfig.json\":\"{\\\"compilerOptions\\\":{\\\"target\\\":\\\"ES2022\\\",\\\"module\\\":\\\"NodeNext\\\",\\\"moduleResolution\\\":\\\"NodeNext\\\",\\\"outDir\\\":\\\"dist\\\",\\\"strict\\\":true,\\\"esModuleInterop\\\":true,\\\"skipLibCheck\\\":true},\\\"include\\\":[\\\"src\\\"]}\\n\"}","createdAt":1787201966251,"id":"411e0cc78dfe565283e2f7f7","itemType":"CODING_PROJECT","logsJson":"[{\"at\":1787454266248,\"stage\":\"P0-rework\",\"message\":\"完成 dotenv 載入與 Ollama 分段串流修正；npm run build、npm test 與 HTTP SSE 防假回覆驗證通過。\"},{\"at\":1787454800000,\"stage\":\"真實模型驗收與安裝重現\",\"message\":\"新增 package-lock.json；驗收腳本明確載入根目錄 .env，先檢查 SSE token/done，再檢查三棒 completed AgentRun、成果 NOTE 持久化。乾淨安裝後 npm run build 與 npm test（4/4）通過；本環境無可用真實 provider，verify:real-model 以非零狀態明確停止，未偽造成功。\"},{\"at\":1787455545900,\"stage\":\"真實模型三棒複驗\",\"message\":\"從 codeFilesJson 還原後 npm ci、npm run build、npm test（4/4）與 npm audit --omit=dev --audit-level=high 全數通過；GET /api/health=200。npm run verify:real-model 因未設定 OLLAMA_BASE_URL 以非零狀態明確中止，未偽造 token、done 或三棒成功。專案維持 preview，交由具備 provider 的測試部署環境重跑。\"}]","name":"類 CubeLV Vault — AI 助理網頁程式","originPluginDir":"b9526fe674288f93c3e38433","originPluginID":"b9526fe674288f93c3e38433","parents":{"default_coding_project_folder_6a3d5cc101c322d3356f1c":1787201966251},"previewHtml":"\u003c!doctype html\u003e\u003chtml lang=\"zh-Hant\"\u003e\u003cbody style=\"font-family:system-ui;padding:28px;background:#f5f7fb;color:#172033\"\u003e\u003ch1\u003e類 CubeLV Vault\u003c/h1\u003e\u003cp\u003e此為全端專案的靜態示意；完整 React／Fastify／SQLite 原始碼請由 codeFilesJson 取出並依 README 啟動。\u003c/p\u003e\u003cul\u003e\u003cli\u003eSQLite Item CRUD\u003c/li\u003e\u003cli\u003e檔案上傳與下載\u003c/li\u003e\u003cli\u003eOpenAI / Ollama SSE 對話\u003c/li\u003e\u003c/ul\u003e\u003c/body\u003e\u003c/html\u003e","prompt":"開發一個像 CubeLV Vault 這樣的 AI 助理網頁程式，包含以下核心能力：\n\n1. AI 對話機器人：連續多輪對話、串流回覆、對話歷史管理，支援切換模型來源（雲端 API / 本地模型）。\n2. 知識庫與檔案管理：筆記（富文字）、卡片（結構化實體）、檔案庫（上傳/分類/標籤/搜尋）、待辦、圖表等資料管理，具備資料夾與搜尋能力。\n3. AI 員工自動化：可建立多個 Agent 角色，設定排程/觸發條件自動執行任務，支援多 Agent 接力工作流（如 搜集→分析→彙整→發布）。\n4. 完整 Vault 系統：個人資料庫概念，含插件/擴充機制、主題、檔案同步概念、儀表板。\n\n模型接入：需同時支援三種模式 — (a) OAuth/帳號登入授權模型 (b) API Key 直連（OpenAI / Claude / DeepSeek 等） (c) 本地模型（Ollama / 本地 LLM），可在設定頁切換。\n\n技術選型由需求分析師規劃，需考慮：前後端分離、可擴充插件架構、資料持久化方案、即時串流、檔案儲存。優先做出可預覽的單頁原型，再逐步拆解為完整系統。","reviewedAt":1787454960000,"spec":"# 類 CubeLV Vault — AI 助理網頁程式 規格書\n\n\u003e 版本 0.1 ｜ 2026-08-20 ｜ 需求分析師 ｜ 專案 CODING_PROJECT 411e0cc78dfe565283e2f7f7\n\n## 1. 專案概述\n\n**情境**：打造一套個人化「AI 助理資料庫（Vault）」網頁程式，把 AI 對話、知識庫（筆記/卡片/檔案/待辦/圖表）與自動化 AI 員工整合進同一個入口，並具備個人資料庫系統（資料夾、搜尋、插件、主題、儀表板）概念。\n\n**目標用戶**：個人知識工作者，想用一套工具同時收納「跟 AI 的對話」「整理好的知識」「交給 AI 自動跑的例行任務」。\n\n**核心價值**：單一入口統一對話與資料；AI 員工把「搜集→分析→彙整→發布」類例行流程自動化；資料以 Vault 資料夾體系組織、可搜尋。\n\n**成功指標**：\n- 一次啟動即可完成「發問 + 把回覆存進筆記」全流程 ≤ 5 步\n- 可建立至少 1 個排程自動執行的 AI 員工並看到執行產出\n- 全部資料型別可建立、搜尋、搬進資料夾\n\n**範圍邊界**：\n- In Scope（本期）：單頁 SPA 原型 → 多頁路由；四大核心 + 模型三模式可切換；資料持久化本機 SQLite。\n- Out of Scope（P2/不做）：多使用者多租戶、真實 OAuth 完整授權流程（本期以 mock/註冊代替）、跨裝置即時同步、正式插件 SDK 生態。\n\n## 2. 功能清單（可驗收）\n\n### 模組 A：AI 對話機器人\n- **A1 (P0)** 連續多輪對話：同 thread 內保留上下文，可開新 thread；**驗收**：同 thread 連續問 5 輪，模型能引用先前輪次。\n- **A2 (P0)** 串流回覆：模型輸出逐字/逐塊即時顯示；**驗收**：送長回答時 UI 出現打字即時流，非等整段。\n- **A3 (P0)** 對話歷史管理：thread 清單、重新命名、刪除、續接；**驗收**：重開頁面後 thread 仍在，可續接。\n- **A4 (P0)** 模型來源切換（三模式）：登入授權 mock / API Key / 本地模型；**驗收**：設定頁切換後對話用新來源，且註明當前來源。\n- **A5 (P1)** 一鍵「存為筆記」：把回覆存成知識庫 NOTE；**驗收**：存完可在筆記區找到。\n\n### 模組 B：知識庫與檔案管理\n- **B1 (P0)** 筆記（富文字）：建立/編輯/刪除，支援標題、粗體、清單；**驗收**：編輯存檔後重開內容保留。\n- **B2 (P0)** 卡片（結構化實體）：可自訂欄位 schema；**驗收**：建一張含 3 個欄位的卡片並檢視。\n- **B3 (P0)** 檔案庫：上傳（含圖/文）、分類、標籤；**驗收**：上傳 2 個檔案，可分入資料夾、打標籤、可搜到。\n- **B4 (P0)** 待辦：建/勾選完成/排程提醒；**驗收**：建待辦、打勾後狀態變更且可篩「未完成」。\n- **B5 (P0)** 圖表：數值+時間軸資料視覺化（長條/折線）；**驗收**：輸入一段時間序列顯示對應圖。\n- **B6 (P0)** 資料夾與搜尋：全域搜尋跨所有型別；**驗收**：輸入關鍵字能命中筆記、卡片、待辦。\n- **B7 (P1)** 標籤與多資料夾掛載：一 item 屬多個資料夾；**驗收**：一筆記同時在兩個資料夾可見。\n\n### 模組 C：AI 員工自動化\n- **C1 (P0)** 建立多個 Agent 角色：每個 Agent 有名字、系統提示、職責；**驗收**：可建立 2 個不同 Agent。\n- **C2 (P0)** 排程/觸發自動執行：DAILY/WEEKLY 排程或手動觸發；**驗收**：建立一個每 5 分鐘（或手動）觸發的 Agent，能產生產出。\n- **C3 (P0)** 多 Agent 接力工作流（搜集→分析→彙整→發布）：上棒產出餵給下棒；**驗收**：跑一個 3 步接力，末棒產出引用首棒資料。\n- **C4 (P1)** AgentRun 執行紀錄：每次執行的輸入/輸出/狀態/時間；**驗收**：執行後可在紀錄頁看到一次 run 的明細。\n- **C5 (P1)** 執行成果自動落庫：Agent 產出直接寫成 NOTE/CARD；**驗收**：執行完在知識庫看到新產物 item。\n\n### 模組 D：Vault 個人資料庫系統\n- **D1 (P0)** 儀表板：統計各資料型別數量、最近活動；**驗收**：首頁顯示筆記/卡片/待辦/Agent 計數。\n- **D2 (P0)** 插件/擴充機制：插件註冊入口與載入骨架（可無功能）；**驗收**：側欄出現一個「範例插件」區塊。\n- **D3 (P1)** 主題切換：淺色/深色；**驗收**：切深色後整體配色變深且可讀。\n- **D4 (P1)** 設定頁：模型來源設定、個人資料；**驗收**：設定存檔後生效。\n\n### 模組 E：模型接入（三模式）\n- **E1 (P0)** OAuth/登入授權：以簡化登入(帳號密碼 mock 或 OAuth mock)取得授權後呼叫雲端模型；**驗收**：登入後可用雲端模型發問。\n- **E2 (P0)** API Key 直連：支援 OpenAI / Claude(Anthropic) / DeepSeek 至少其一，多 provider 可選；**驗收**：填對 key 後可發問，key 加密儲存不回顯。\n- **E3 (P0)** 本地模型：Ollama 連線（/api/chat 相容）；**驗收**：本地無網環境可連 Ollama 發問。\n- **E4 (P1)** 模型來源健康檢查與自動 fallback；**驗收**：主來源失敗自動嘗試次要來源並提示。\n\n## 3. 頁面結構 / 路由規劃\n\n| 路由 | 頁面 | 說明 |\n|---|---|---|\n| `/` | 儀表板 Dashboard | 統計卡、最近活動、快速入口 |\n| `/chat` | AI 對話 | 左側 thread 清單 + 右側對話串流 |\n| `/notes` | 筆記 | 資料夾樹 + 筆記列表 + 富文字編輯器 |\n| `/cards` | 卡片 | 卡片 schema 列表 + 卡片網格/表格 |\n| `/files` | 檔案庫 | 資料夾 + 上傳 + 標籤篩選 |\n| `/todos` | 待辦 | 清單 + 完成篩選 + 排程 |\n| `/charts` | 圖表 | 資料輸入 + 圖表繪製 |\n| `/agents` | AI 員工 | Agent 列表 + 建立 + 執行紀錄 + 工作流編輯 |\n| `/settings` | 設定 | 模型來源切換 + 主題 + 個人資料 |\n\n**元件階層**：AppShell（Sidebar/Header/Toast）→ 各模組 Layout → 共用元件（Button/Input/Modal/Table/EmptyState/Chart/Editor/Tree）。\n\n**關鍵流程**：\n- 發問存檔：`/chat` 發問（串流）→ 存為筆記 → `/notes` 看到。\n- 自動化：`/agents` 建 Agent → 設排程 → 執行 → 產出落庫 → `/notes` 看到 + 紀錄在 `/agents`。\n- 模型切換：`/settings` 選模式 → 存 → `/chat` 以新來源發問。\n\n## 4. 資料模型與欄位定義\n\n通用 **Item** 基底：`id`(string PK)、`type`(enum: note/card/file/todo/thread/message/agent/agentRun/chart/folder)、`name`、`content`(text/JSON)、`parents`(folderId[])、`tags`(string[])、`createdAt`/`updatedAt`、`data`(type-specific JSON)。資料夾為 `folder` 型 Item，形成樹。\n\n| 型別 | 關鍵欄位 | 說明 |\n|---|---|---|\n| `thread` | `modelSource`、`title` | AI 對話會話 |\n| `message` | `threadId`、`role`(user/assistant)、`content`、`streamed` | 單則訊息，附順序 |\n| `note` | `content`(HTML 富文字)、`tags` | 筆記 |\n| `card` | `schemaDef`(欄位定義 JSON)、`fields`(值 JSON) | 結構化卡片 |\n| `file` | `storageKey`、`mime`、`size`、`originalName` | 檔案實體，metadata 與 bytes 分離 |\n| `todo` | `completed`、`dueAt`、`periodic`(DAILY/WEEKLY) | 待辦 |\n| `chart` | `dataPoints`([{t,value}])、`chartType` | 圖表資料 |\n| `agent` | `systemPrompt`、`schedule`(cron)、`trigger`(manual/scheduled)、`prevAgentId`(接力) | AI 員工 |\n| `agentRun` | `agentId`、`input`、`output`、`status`、`startedAt/finishedAt` | 單次執行 |\n\n**關聯**：`message.threadId → thread`；`agentRun.agentId → agent`；`agent.prevAgentId → agent`（接力鏈）；全部 Item `parents → folder`。**索引**：message(threadId, order)、agentRun(agentId, startedAt)、todo(completed)。\n\n## 5. 技術選型與理由\n\n| 層 | 選型 | 理由 | 替代方案 |\n|---|---|---|---|\n| 前端框架 | React + TypeScript | 生態成熟、型別安全、與 CubeLV 插件體系一致 | Vue 3 |\n| 樣式 | Tailwind CSS | 快速響應式切版、設計 token 整合佳 | CSS Modules / UnoCSS |\n| 富文字 | Tiptap | 可擴充、與 React 整合好 | Quill / Lexical |\n| 後端 | Node.js + Fastify | 輕量、支援 SSE/WS、與前端同語系 | Express / NestJS |\n| 儲存 | SQLite（本地單檔） | 零部署、單人 Vault 足夠，後可換 | Postgres / Supabase |\n| 即時串流 | SSE（Server-Sent Events） | 單向逐字推送最簡、自動重連 | WebSocket |\n| 模型接入 | 各 Provider REST/SSE + Ollama | 三模式統一抽象成 ModelAdapter 介面 | 各 SDK |\n| 檔案儲存 | 本地磁碟目錄 | 原型簡單；介面隔離後可換 S3 | S3 / Cloudflare R2 |\n| 圖表 | Recharts | React 聲明式、文件佳 | ECharts / Chart.js |\n| 認證 | 簡化 Session（mock） | 原型階段先跑通授權流，後接真 OAuth | Auth.js / Supabase Auth |\n\n**架構重點**：前端 SPA + 後端 API 前後端分離；ModelAdapter 介面隔離三種模型來源；Agent 引擎以 queue 排程、run 落庫、產出寫回 Item；資料層以 Item 抽象統一所有型別，利於插件擴充。\n\n## 6. 非功能需求\n\n- **效能**：首屏 LCP \u003c 2.5s；串流首字 \u003c 1s；搜尋 p95 \u003c 300ms。\n- **安全**：API Key 加密儲存、不回顯；輸入輸出 sanitize 防 XSS；SQLite 防注入（參數化）；本地/Ollama 連線僅限本機。\n- **可用性**：RWD 手機/桌機；表單 label、鍵盤可操作、錯誤提示明確；串流中斷自動重連。\n- **維運擴充**：AgentRun 執行日誌留存；插件註冊以 Item 抽象擴充新型別；資料層可遷移（SQLite→PG）。\n- **相容性**：近兩版 Chrome / Safari / Firefox、iOS / Android 瀏覽器。\n\n## 驗收里程碑\n\n1. **原型（M1）**：單頁完成 AI 對話串流（含三模式 mock）+ 筆記基本 CRUD + 儀表板。\n2. **核心（M2）**：多頁路由；卡片/檔案/待辦/圖表；全域搜尋與資料夾。\n3. **自動化（M3）**：AI 員工建立、排程/手動執行、3 步接力工作流、執行紀錄與落庫。\n4. **收尾（M4）**：插件骨架、主題切換、設定頁、非功能驗收。\n","status":"preview","techStack":"React + TypeScript + Vite 6.4.3｜Node.js + Fastify｜SQLite（better-sqlite3）｜本機檔案儲存｜SSE｜OpenAI／Ollama Adapter｜dotenv（明確載入根目錄 .env）｜真實 provider 三棒 E2E 驗收｜package-lock 可重現安裝","updatedAt":1787455772181,"updatedBy":{"agentId":"86fee8252b7362618b0ef512","agentName":"測試部署員","userId":"6a3d5cc101c322d3356f1c","userName":"Harry"},"version":29}]}