decocms 4.126.1 → 4.126.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-Cpl_iMHY.js → AlertCircle-wZFBWpo0.js} +1 -1
- package/dist/client/assets/{AreaChart-BqFUuFcm.js → AreaChart-BWG_A2yL.js} +1 -1
- package/dist/client/assets/{ArrowRight-NqG0gPh-.js → ArrowRight-DDYoySSU.js} +1 -1
- package/dist/client/assets/{ArrowUp-DMJUikwr.js → ArrowUp-BfmJVXpe.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-CtURRnV0.js → ArrowUpRight-CX0JFgau.js} +1 -1
- package/dist/client/assets/{Check-dpauEaNI.js → Check-C-gVe66h.js} +1 -1
- package/dist/client/assets/{CheckCircle-zW46MQTo.js → CheckCircle-DwQTzzLo.js} +1 -1
- package/dist/client/assets/{ChevronDown-BQLnN9E6.js → ChevronDown-CHUXS0bx.js} +1 -1
- package/dist/client/assets/{ChevronRight-CyiD6-MW.js → ChevronRight-BewiR8jv.js} +1 -1
- package/dist/client/assets/{ChevronUp-DQvrAigY.js → ChevronUp-DbJPy-my.js} +1 -1
- package/dist/client/assets/{Copy01-DDeCwAgK.js → Copy01-CXOBuKeI.js} +1 -1
- package/dist/client/assets/{DotsVertical-Bj4PS0aF.js → DotsVertical-DSuOWFkK.js} +1 -1
- package/dist/client/assets/{Eye-Dfg-461O.js → Eye-BzQwpriV.js} +1 -1
- package/dist/client/assets/{FilterLines-CxHovx4d.js → FilterLines-Cmyrpv9O.js} +1 -1
- package/dist/client/assets/{HardDrive-C67jRlzv.js → HardDrive-MuN_hYGO.js} +1 -1
- package/dist/client/assets/{Key01-D7-mKS4d.js → Key01-DsAMFomV.js} +1 -1
- package/dist/client/assets/{LayoutLeft-Dnk9I__a.js → LayoutLeft-BKoIFwRN.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DtG8qR-V.js → LinkExternal01-B0YPc_S1.js} +1 -1
- package/dist/client/assets/{LogOut01-Bv49wu0L.js → LogOut01-Cr7guD_C.js} +1 -1
- package/dist/client/assets/{Monitor01-DEsYEg9j.js → Monitor01-BDL-jnJs.js} +1 -1
- package/dist/client/assets/{Palette-3AyXb_ds.js → Palette-BAqGRxp5.js} +1 -1
- package/dist/client/assets/{Play-C5qDNLgC.js → Play-DgsbjMDE.js} +1 -1
- package/dist/client/assets/{Plus-C7p4TBsq.js → Plus--3XFCNRh.js} +1 -1
- package/dist/client/assets/{SearchLg-BP6dxoOu.js → SearchLg-fj8vBgbf.js} +1 -1
- package/dist/client/assets/{SearchMd-CFZ8th88.js → SearchMd-Db6xGpMm.js} +1 -1
- package/dist/client/assets/{Settings02-BRYke4o3.js → Settings02-BCqIMlR1.js} +1 -1
- package/dist/client/assets/{Shield01-DObW8vGC.js → Shield01-DmJb3xyD.js} +1 -1
- package/dist/client/assets/{Star01-b06OrJx9.js → Star01-6fXqBYGO.js} +1 -1
- package/dist/client/assets/{Stars01-CwezkrCj.js → Stars01-6mAfYED3.js} +1 -1
- package/dist/client/assets/{Stars02-CV1WX5s1.js → Stars02-DXc-e3hC.js} +1 -1
- package/dist/client/assets/{Sun-BYgqmEv8.js → Sun-BUqEkjZt.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-D9GLmxcG.js → SwitchHorizontal01-CGOv_Rrr.js} +1 -1
- package/dist/client/assets/{Tool01-CbNqThfz.js → Tool01-pmII3WpR.js} +1 -1
- package/dist/client/assets/{Tool02-BK6vOVj2.js → Tool02-CBXM0F92.js} +1 -1
- package/dist/client/assets/{Trash01-CZfSiRn_.js → Trash01-CJ9K1v0c.js} +1 -1
- package/dist/client/assets/{TrendUp01-CbzGmSk7.js → TrendUp01-BjARk23u.js} +1 -1
- package/dist/client/assets/{Upload01-OvmEXaXy.js → Upload01-dYbrTK96.js} +1 -1
- package/dist/client/assets/{User01-mA16LPDW.js → User01-BWh29jlX.js} +1 -1
- package/dist/client/assets/{Users01-D3kMDHBl.js → Users01-CVpagA8a.js} +1 -1
- package/dist/client/assets/{Users03-CMTgzssO.js → Users03-X_nEGPVF.js} +1 -1
- package/dist/client/assets/{X-Ds6dL0ec.js → X-BB9BsBG9.js} +1 -1
- package/dist/client/assets/{XCircle-Bw2f1-oB.js → XCircle-Cnd7dAXs.js} +1 -1
- package/dist/client/assets/{XClose-CggKQboo.js → XClose-DYcmy7Dm.js} +1 -1
- package/dist/client/assets/{Zap-cm7wIsil.js → Zap-CjDEO_x2.js} +1 -1
- package/dist/client/assets/{ZapSquare-CULLx7Oa.js → ZapSquare-l2Bo-FFh.js} +1 -1
- package/dist/client/assets/{access-gate-B5Uu6KI_.js → access-gate-wIXn4O0u.js} +1 -1
- package/dist/client/assets/{add-section-modal-C0j8sHqV.js → add-section-modal-LPPys9Wr.js} +1 -1
- package/dist/client/assets/{agent-icon-ZuDh9-Hb.js → agent-icon-zWW3t6VG.js} +1 -1
- package/dist/client/assets/{agents-list-BwHTZnDL.js → agents-list-BfMyyq9F.js} +1 -1
- package/dist/client/assets/{ai-providers-CUGZxUFM.js → ai-providers-CrFNNWxE.js} +1 -1
- package/dist/client/assets/{alert-DktlcBN9.js → alert-CG7QTVbj.js} +1 -1
- package/dist/client/assets/{alert-dialog-iJ0nuAo2.js → alert-dialog-DboT2S2L.js} +1 -1
- package/dist/client/assets/{app-editor-DKXC32M1.js → app-editor-BuHoAPSu.js} +1 -1
- package/dist/client/assets/{auth--O1w_iKV.js → auth-_9lv2gUI.js} +1 -1
- package/dist/client/assets/{auth-catchall-C66NRByx.js → auth-catchall-zPdg3Kfr.js} +1 -1
- package/dist/client/assets/{auth-entry-DKS3G1uz.js → auth-entry-DvIBJ_b3.js} +1 -1
- package/dist/client/assets/{auth-split-layout-DcrydIAL.js → auth-split-layout-DcqR7Bmx.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BimYrVCh.js → authenticate-and-persist-oauth-B1ortyYw.js} +1 -1
- package/dist/client/assets/{automation-list-row-CB0Na4Io.js → automation-list-row-CwLU5mFl.js} +1 -1
- package/dist/client/assets/{automation-runs-CjoeGDB3.js → automation-runs-DIhCKhoX.js} +1 -1
- package/dist/client/assets/{automations-5W4kO3k8.js → automations-CxAr-Q1U.js} +1 -1
- package/dist/client/assets/{avatar-BaVe5mnj.js → avatar-BLfSxUga.js} +1 -1
- package/dist/client/assets/{badge-rSCRRNZZ.js → badge-Caz53JSJ.js} +1 -1
- package/dist/client/assets/{block-document-BDVs9E35.js → block-document-DCUWew_G.js} +1 -1
- package/dist/client/assets/{brand-context-DXRoGovW.js → brand-context-CNCL9GzV.js} +1 -1
- package/dist/client/assets/{buckets-iue9Ud7d.js → buckets-DzyUqHLV.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-DlUIZJ14.js → bulk-category-panel-BS7tQG_z.js} +1 -1
- package/dist/client/assets/{calendar-B4BM6mn9.js → calendar-DDRNxoxt.js} +1 -1
- package/dist/client/assets/{capability-load-error-C19nQZEJ.js → capability-load-error-CQIupxYq.js} +1 -1
- package/dist/client/assets/{card-CCT9DM3i.js → card-MKJv9EQN.js} +1 -1
- package/dist/client/assets/{category-editor-B0T-VrR6.js → category-editor-oiFHZZss.js} +1 -1
- package/dist/client/assets/{chat-context-BBbr98oD.js → chat-context-CS8lxm9_.js} +1 -1
- package/dist/client/assets/{checkbox-Bq4_WPl3.js → checkbox-PaZ4NcMV.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CNtuqj7e.js → cli-auth-success-CDUUNd9g.js} +1 -1
- package/dist/client/assets/{collection-detail-DQNU4HiQ.js → collection-detail-0xKJQ9H2.js} +1 -1
- package/dist/client/assets/{collection-display-button-BXR6o3H2.js → collection-display-button-BshEeKVa.js} +1 -1
- package/dist/client/assets/{collection-search-BtCuCV16.js → collection-search-B27cYP5F.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-C_cazobp.js → collection-table-wrapper-BC54lFoV.js} +1 -1
- package/dist/client/assets/{collection-tabs-0Qyek4_u.js → collection-tabs-CkE9QnXQ.js} +1 -1
- package/dist/client/assets/{command-2wvo7x41.js → command-BtKeqRh4.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-CL4fDsdf.js → commerce-onboarding-DrIMQf60.js} +1 -1
- package/dist/client/assets/{companions-core-D1MZ9B1U.js → companions-core-CSljQMf_.js} +1 -1
- package/dist/client/assets/{connect-gUMrTotC.js → connect-CvYZoBOv.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-BuM5aUqF.js → connect-desktop-dialog-DPG0q8Du.js} +1 -1
- package/dist/client/assets/{connection-card-CD-x-wIk.js → connection-card-CR8Tezk_.js} +1 -1
- package/dist/client/assets/{connection-detail-BuJnU9wM.js → connection-detail-BMvUAx0H.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-bxVBlV5J.js → connection-form-helpers-BHvHPEt2.js} +1 -1
- package/dist/client/assets/{connection-B0_6E7Mv.js → connection-vOOMEOVb.js} +1 -1
- package/dist/client/assets/{connections-HgZRNGX4.js → connections-CANGKksk.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-zU_w0iZh.js → decopilot-sse-pool-Cs4Wzcc3.js} +1 -1
- package/dist/client/assets/{dialog-C1Qgh1pV.js → dialog-Bx0tkWaQ.js} +1 -1
- package/dist/client/assets/{domain-settings-Dr8-E0BO.js → domain-settings-D3GvEyoX.js} +1 -1
- package/dist/client/assets/{drawer-C-awTSYf.js → drawer-D1lsCtV4.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DnVtnirM.js → dropdown-menu-DuOVs_Vf.js} +1 -1
- package/dist/client/assets/{empty-state-t-xxj99b.js → empty-state-CJ5pANud.js} +1 -1
- package/dist/client/assets/{extract-connection-data-D2Q5eAdA.js → extract-connection-data-DN3g7eFu.js} +1 -1
- package/dist/client/assets/{file-explorer-YJoVbzpR.js → file-explorer-CwtsUPq9.js} +1 -1
- package/dist/client/assets/{form-Bcx3Dx5v.js → form-Du5MP186.js} +1 -1
- package/dist/client/assets/{general-CTIKCAQW.js → general-Nt3tjjZW.js} +1 -1
- package/dist/client/assets/{github-repo-picker-CfFhjmhR.js → github-repo-picker-CevuiACk.js} +1 -1
- package/dist/client/assets/{hooks-BRAlfwVg.js → hooks--vfnlMbG.js} +1 -1
- package/dist/client/assets/{index-5tHCzznE.js → index-3f_ZHyYf.js} +1 -1
- package/dist/client/assets/{index-poTj2wxK.js → index-99C6r-0O.js} +1 -1
- package/dist/client/assets/{index-25tDLcHQ.js → index-BGBjg2-p.js} +1 -1
- package/dist/client/assets/{index-CRfJJjBr.js → index-CGW3LfG6.js} +1 -1
- package/dist/client/assets/{index-BFHC2rlf.js → index-CNkhfL0R.js} +1 -1
- package/dist/client/assets/{index-75oUoREO.js → index-CQJLbbtF.js} +5 -5
- package/dist/client/assets/{index-CTwgLDWF.js → index-CoQgMoag.js} +3 -3
- package/dist/client/assets/{index-C_mT0QTy.js → index-D7Rza1Tk.js} +1 -1
- package/dist/client/assets/{index-D0GbPI_R.js → index-D7ecmoEk.js} +3 -3
- package/dist/client/assets/{index-DMXNbwjD.js → index-DdOGLJvQ.js} +1 -1
- package/dist/client/assets/{index-pNi6sXYH.js → index-do14p2vi.js} +1 -1
- package/dist/client/assets/{index-redirect-D_UJBrMZ.js → index-redirect-mbRRtjqd.js} +1 -1
- package/dist/client/assets/{input-Bb4p9_ik.js → input-Dc_Ksu2B.js} +1 -1
- package/dist/client/assets/{integration-icon-bG23TCVO.js → integration-icon-Bep1O6vd.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-BSPugAve.js → invite-member-dialog-Cgl5-4U8.js} +1 -1
- package/dist/client/assets/{label-5xpx6MdG.js → label-C7DWPW8F.js} +1 -1
- package/dist/client/assets/{layout-q_JOMITt.js → layout-DBTeM9nZ.js} +1 -1
- package/dist/client/assets/{login-DWFYfzVD.js → login-DpMXYVre.js} +1 -1
- package/dist/client/assets/{mcp-oauth-I-PLDGs0.js → mcp-oauth-BaAftNVP.js} +1 -1
- package/dist/client/assets/{members-DAGQnraC.js → members-Bmt50hSJ.js} +1 -1
- package/dist/client/assets/{monaco-editor-3ZmYAdL5.js → monaco-editor-BgAWurBW.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-D-FdpFBv.js → monitoring-stats-row-Bm74hEZ0.js} +1 -1
- package/dist/client/assets/{multi-select-CCg5PDqH.js → multi-select-CfZlB5Qw.js} +1 -1
- package/dist/client/assets/{oauth-callback-D3gHvTLm.js → oauth-callback-CYLUgfp4.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-D0DSENaB.js → oauth-callback-ai-provider-K0a_OY_-.js} +1 -1
- package/dist/client/assets/{onboarding-Bor5OprO.js → onboarding-BGO_NBG2.js} +1 -1
- package/dist/client/assets/{org-install-B0gCH-Nk.js → org-install-DR5oM3KD.js} +1 -1
- package/dist/client/assets/{org-layout-BWKTyxWj.js → org-layout-703CuN-Z.js} +1 -1
- package/dist/client/assets/{organization-choice-DWfbtdFz.js → organization-choice-CFpQM--U.js} +1 -1
- package/dist/client/assets/{orgs-BtRV84O-.js → orgs-EWbhKMdE.js} +1 -1
- package/dist/client/assets/{page-seo-form-BFCjEKMU.js → page-seo-form-D8vHQJoo.js} +1 -1
- package/dist/client/assets/page-seo-sheet-DyzBHLgd.js +1 -0
- package/dist/client/assets/{popover-BqPUB_i2.js → popover-uYC-XEIg.js} +1 -1
- package/dist/client/assets/{post-editor-MaKq00sv.js → post-editor-BqIreh8a.js} +1 -1
- package/dist/client/assets/{primitives-DtK7id8m.js → primitives-BPDffT-K.js} +1 -1
- package/dist/client/assets/{profile-CN9LLarl.js → profile-Da2FFTD6.js} +1 -1
- package/dist/client/assets/project-app-view-C3gRZgWO.js +1 -0
- package/dist/client/assets/record-editor-nWW4hsfT.js +1 -0
- package/dist/client/assets/{redirect-editor-D5Na_rRm.js → redirect-editor-Bh1TaWO_.js} +1 -1
- package/dist/client/assets/registry-CCileC0o.js +2 -0
- package/dist/client/assets/{registry-layout-XctP0_TB.js → registry-layout-D4_J8FmQ.js} +1 -1
- package/dist/client/assets/{reports-BBeGN80e.js → reports-BjYgGXCV.js} +1 -1
- package/dist/client/assets/{require-capability-2rozIXBv.js → require-capability-BiIETUd1.js} +1 -1
- package/dist/client/assets/{required-auth-layout-pINrUhAT.js → required-auth-layout-CWsSFaCw.js} +1 -1
- package/dist/client/assets/{reset-password-sGF0Deja.js → reset-password-DLH3cD85.js} +1 -1
- package/dist/client/assets/{roles-CtVuRlNg.js → roles-BrK-3S4P.js} +1 -1
- package/dist/client/assets/{search-input-DHMmvRu9.js → search-input-yjiuaHAG.js} +1 -1
- package/dist/client/assets/{secrets-Cek9nNDM.js → secrets-PZ05_PBq.js} +1 -1
- package/dist/client/assets/{sections-editor-KKjVHQIb.js → sections-editor-BksufGla.js} +1 -1
- package/dist/client/assets/{select-model-DeVAqDr8.js → select-model-ZFqJATQj.js} +1 -1
- package/dist/client/assets/{select-JTf4HMkB.js → select-o--wOfO_.js} +1 -1
- package/dist/client/assets/{self-tool-result-JVOqtq7F.js → self-tool-result-CGMZAwKq.js} +1 -1
- package/dist/client/assets/{seo-editor-BKn-yjw0.js → seo-editor-Bxl54AMl.js} +1 -1
- package/dist/client/assets/{settings-layout-0HfTLbLa.js → settings-layout-DPWbQ34b.js} +1 -1
- package/dist/client/assets/{settings-section-Duse8CF5.js → settings-section-ClU7ej3n.js} +1 -1
- package/dist/client/assets/{shell-controls-CjdX-cXs.js → shell-controls-CH6DRW8q.js} +1 -1
- package/dist/client/assets/{shell-layout-BX_6t6Y4.js → shell-layout-Bp9VqH1i.js} +1 -1
- package/dist/client/assets/{sidebar-JCplCzUs.js → sidebar-BVI_V0Ou.js} +1 -1
- package/dist/client/assets/{skeleton-rG0lAer-.js → skeleton-DzEF007-.js} +1 -1
- package/dist/client/assets/{sso-DZif8bEF.js → sso-DVZelKBV.js} +1 -1
- package/dist/client/assets/{store-DSniQ8uA.js → store-BMsGxZX_.js} +1 -1
- package/dist/client/assets/store-registry-xshyt2Qy.js +2 -0
- package/dist/client/assets/{studio-tools-CVP_bYI3.js → studio-tools-BnkAV7Qh.js} +1 -1
- package/dist/client/assets/{switch-RfqMPlNx.js → switch-JdJblN-W.js} +1 -1
- package/dist/client/assets/{tab-id-6SxTM-85.js → tab-id-BUyXQAAI.js} +1 -1
- package/dist/client/assets/{table-CkAONPU-.js → table-BsxxkDds.js} +1 -1
- package/dist/client/assets/{tabs-C6CALd7M.js → tabs-SMaulwar.js} +1 -1
- package/dist/client/assets/{textarea-BDUOK9v4.js → textarea-BJyqw4SL.js} +1 -1
- package/dist/client/assets/{toggle-group-BJ3nTIOw.js → toggle-group-D32XTjzk.js} +1 -1
- package/dist/client/assets/{toolbar-BbjlhC11.js → toolbar-CdMnBYXx.js} +1 -1
- package/dist/client/assets/{tooltip-CZxZ-Bns.js → tooltip-DV8_wP4H.js} +1 -1
- package/dist/client/assets/{use-ai-providers-RLFjMIPM.js → use-ai-providers-CGmpPHf_.js} +1 -1
- package/dist/client/assets/{use-api-keys-Yfc55xX1.js → use-api-keys-BfTMjXnb.js} +1 -1
- package/dist/client/assets/{use-automations-DMIHt0qx.js → use-automations-DKxhc36V.js} +1 -1
- package/dist/client/assets/{use-autosave-CTaJVuYe.js → use-autosave-B7d7j-io.js} +1 -1
- package/dist/client/assets/{use-capability-C9LPdJIR.js → use-capability-ev2jDwzE.js} +1 -1
- package/dist/client/assets/{use-clock-tick-CF0pPFJP.js → use-clock-tick-CdvZtpVB.js} +1 -1
- package/dist/client/assets/{use-connection-D67Pe6aW.js → use-connection-BVFqG9Id.js} +1 -1
- package/dist/client/assets/{use-copy-3pbdZZcV.js → use-copy-ChgQcxSu.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DOgSWB_T.js → use-create-virtual-mcp-Cz4bgQ9e.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-B7CCzcf-.js → use-debounced-autosave-D35X8JvW.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DSrcUzF-.js → use-debounced-value-BC1HcYvB.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BEDSGMQk.js → use-deco-credits-BuBKE8oE.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-DqMtcih3.js → use-decopilot-events-hTj_0wvh.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CeKf58YN.js → use-delete-connection-qfgJCzx4.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-BAJ25R18.js → use-deployment-admin-BmhPiQqU.js} +1 -1
- package/dist/client/assets/{use-file-configs-eEXpH4IT.js → use-file-configs-h0BKPSC_.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CUTwghko.js → use-infinite-scroll-DaBbmjUW.js} +1 -1
- package/dist/client/assets/{use-join-requests-DSCKcWR6.js → use-join-requests-RAdw_UW-.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-GN_90IVc.js → use-mcp-auth-status-D78D4ly6.js} +1 -1
- package/dist/client/assets/{use-mcp-client-2qqsLKMv.js → use-mcp-client-CnyXhKwV.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DYZgnU0f.js → use-mcp-tools-Y11uuW0V.js} +1 -1
- package/dist/client/assets/{use-members-BBMl3rpc.js → use-members-SNaM7f-x.js} +1 -1
- package/dist/client/assets/{use-mobile-orl9RI6e.js → use-mobile-BvPCUKE_.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BL6ciQ9Y.js → use-navigate-to-agent-mziLMlnK.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-nWz-MFtZ.js → use-org-auth-client-D-a5lzlz.js} +1 -1
- package/dist/client/assets/{use-org-sso-D-Dpc7wL.js → use-org-sso-DRXrpsuQ.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DuvB4P7M.js → use-organization-roles-Bfvpk2iJ.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DcpRbwzw.js → use-organization-settings-BIY_uMId.js} +1 -1
- package/dist/client/assets/{use-registry-app-CLQNyM7N.js → use-registry-app-Dah_IHSb.js} +1 -1
- package/dist/client/assets/{use-registry-connections-BgFdJfUy.js → use-registry-connections-Dt1w8c5m.js} +1 -1
- package/dist/client/assets/{use-secrets-DuyNYvJ7.js → use-secrets-CDDI4aok.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CO1cS1Qf.js → use-status-sounds-Co4aEO2K.js} +1 -1
- package/dist/client/assets/{use-view-mode-Ck3q6mF-.js → use-view-mode-D5dCZ-RY.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DYkiFIJC.js → use-virtual-mcp-qSYuKLW8.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BRBbsKnZ.js +1 -0
- package/dist/client/assets/{useQueries-DNJ2_DVv.js → useQueries-BoGu5qPQ.js} +1 -1
- package/dist/client/assets/{useRouterState-CSvDrQv7.js → useRouterState-Dmetv5YU.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BjnR7v75.js +1 -0
- package/dist/client/assets/{users-NNxyxZtX.js → users-BU2FMU03.js} +1 -1
- package/dist/client/assets/{variant-calendar-BotkXpCr.js → variant-calendar-Bby2_euu.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-B0C9EwSq.js → view-mode-toggle-AG0DCuNp.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/migrate.js +1 -1
- package/dist/server/server.js +3 -3
- package/package.json +1 -1
- package/dist/client/assets/page-seo-sheet-CgVitSBt.js +0 -1
- package/dist/client/assets/project-app-view-D-9tjTDx.js +0 -1
- package/dist/client/assets/record-editor-DoN02fjB.js +0 -1
- package/dist/client/assets/registry-BA7wbNAk.js +0 -2
- package/dist/client/assets/store-registry-7wOo-ziX.js +0 -2
- package/dist/client/assets/useInfiniteQuery-DwwDCJAw.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DOVA9lC8.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var v_8=Object.create;var{getPrototypeOf:x_8,defineProperty:sg,getOwnPropertyNames:l61,getOwnPropertyDescriptor:__8}=Object,d61=Object.prototype.hasOwnProperty;function m61(Z){return this[Z]}var y_8,g_8,k=(Z,X,G)=>{var Y=Z!=null&&typeof Z==="object";if(Y){var Q=X?y_8??=new WeakMap:g_8??=new WeakMap,$=Q.get(Z);if($)return $}G=Z!=null?v_8(x_8(Z)):{};let J=X||!Z||!Z.__esModule?sg(G,"default",{value:Z,enumerable:!0}):G;for(let W of l61(Z))if(!d61.call(J,W))sg(J,W,{get:m61.bind(Z,W),enumerable:!0});if(Y)Q.set(Z,J);return J},iz0=(Z)=>{var X=(c61??=new WeakMap).get(Z),G;if(X)return X;if(X=sg({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function"){for(var Y of l61(Z))if(!d61.call(X,Y))sg(X,Y,{get:m61.bind(Z,Y),enumerable:!(G=__8(Z,Y))||G.enumerable})}return c61.set(Z,X),X},c61,f=(Z,X)=>()=>(X||Z((X={exports:{}}).exports,X),X.exports);var h_8=(Z)=>Z;function u_8(Z,X){this[Z]=h_8.bind(null,X)}var Q6=(Z,X)=>{for(var G in X)sg(Z,G,{get:X[G],enumerable:!0,configurable:!0,set:u_8.bind(X,G)})};var B=(Z,X)=>()=>(Z&&(X=Z(Z=0)),X);var u0=import.meta.require;function c4(Z,X={}){let{signal:G}=X;if(G?.aborted)return Promise.reject(G.reason);return new Promise((Y,Q)=>{let $=()=>{clearTimeout(+W),Q(G?.reason)},W=c_8(()=>{G?.removeEventListener("abort",$),Y()},Z);G?.addEventListener("abort",$,{once:!0})})}function c_8(Z,X){if(X=Math.trunc(Math.max(X,0)||0),X<=nz0){let $=Number(setTimeout(Z,X));return{valueOf:()=>$}}let G=Date.now(),Y,Q=()=>{let $=X-(Date.now()-G);Y=$>nz0?Number(setTimeout(Q,nz0)):Number(setTimeout(Z,$))};return Q(),{valueOf:()=>Y}}var nz0=2147483647;function tY(Z,X,G,Y,Q){let $=Math.min(Z,X*Y**G);return(1-Q*Math.random())*$}async function rY(Z,X){let{multiplier:G=2,maxTimeout:Y=60000,maxAttempts:Q=5,minTimeout:$=1000,jitter:J=1,isRetriable:W=()=>!0,signal:K}=X??{};if(!Number.isInteger(Q)||Q<1)throw RangeError(`Cannot retry as 'maxAttempts' must be a positive integer: current value is ${Q}`);if(!Number.isFinite(G)||G<1)throw RangeError(`Cannot retry as 'multiplier' must be a finite number >= 1: current value is ${G}`);if(Number.isNaN(Y)||Y<=0)throw RangeError(`Cannot retry as 'maxTimeout' must be a positive number: current value is ${Y}`);if(Number.isNaN($)||$<0)throw RangeError(`Cannot retry as 'minTimeout' must be >= 0: current value is ${$}`);if($>Y)throw RangeError(`Cannot retry as 'minTimeout' must be <= 'maxTimeout': current values 'minTimeout=${$}', 'maxTimeout=${Y}'`);if(Number.isNaN(J)||J<0||J>1)throw RangeError(`Cannot retry as 'jitter' must be between 0 and 1: current value is ${J}`);let N=0;while(!0){K?.throwIfAborted();try{return await Z()}catch(F){if(!W(F))throw F;if(N+1>=Q)throw new fK(F,Q);let U=tY(Y,$,N,G,J);await c4(U,K?{signal:K}:void 0)}N++}}var fK;var i61=B(()=>{fK=class fK extends Error{constructor(Z,X){super(`Retrying exceeded the maxAttempts (${X}).`);this.name="RetryError",this.cause=Z}}});var u9=B(()=>{i61()});var K$="thread-gate",bK="decopilot-hosted-harness",oQ="automations",oF="background-tools";import{homedir as l_8}from"os";function m_8(Z){let X=(Z??"").trim();return d_8.has(X)?X:"all"}function n_8(Z){let X=(Z??"").trim();return i_8.has(X)?X:"development"}function r61(Z,X,G){let Y=Z==="worker"?0:Math.floor(X*0.6);if(G===void 0||G==="")return Y;let Q=Number(G);return Number.isFinite(Q)&&Q>=0?Q:Y}function uO(Z){return Z==="true"||Z==="1"}function p_8(Z){if(Z===void 0||Z==="")return;return uO(Z)}function eg(Z,X,G){if(X===void 0||X==="")return G;let Y=Number(X);if(!Number.isSafeInteger(Y)||Y<=0)throw Error(`${Z} must be a positive integer`);return Y}function t_8(Z,X){if(X===void 0||X==="")return;let G=Number(X);if(!Number.isSafeInteger(G)||G<=0)throw Error(`${Z} must be a positive integer`);return G}function r_8(Z,X){if(Z===void 0||Z==="")return X;return Z==="true"||Z==="1"}function t61(Z){if(!Z)return null;try{let G=new URL(Z).hostname.replace(/^\[|\]$/g,"");if(G==="localhost"||G==="127.0.0.1"||G==="::1")return null;return Z}catch{return null}}function o_8(Z){return Z===void 0||Z===""||Z==="true"||Z==="1"}function s_8(Z){let X=(Z??"").trim(),G=X.length>0?X:"user-desktop";if(G==="cluster")return"agent-sandbox";if(!a_8.has(G))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${Z}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return G}function o61(Z,X){let G=Z.home||X.DATA_DIR||X.DECOCMS_HOME||`${l_8()}/deco`,Y=Z.localMode,Q=Z.nodeEnv||n_8(X.NODE_ENV),$=X.NATS_URL||"nats://localhost:4222",J=p_8(X.NATS_TUNNEL_PUBLIC_ENABLED)??!!X.NATS_PUBLIC_URL;return{settings:{nodeEnv:Q,port:eg("PORT",Z.port||X.PORT,3000),baseUrl:Z.baseUrl||X.BASE_URL,dataDir:G,databasePgSsl:uO(X.DATABASE_PG_SSL),databasePoolMax:eg("DATABASE_POOL_MAX",X.DATABASE_POOL_MAX,5),betterAuthSecret:X.BETTER_AUTH_SECRET||"",encryptionKey:X.ENCRYPTION_KEY||"",studioJwtSecret:X.STUDIO_JWT_SECRET??X.MESH_JWT_SECRET,localMode:Y,disableRateLimit:uO(X.DISABLE_RATE_LIMIT),studioProvisionSecretKey:X.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(X.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((K)=>K.trim().toLowerCase()).filter(Boolean),clickhouseUrl:X.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:t_8("CLICKHOUSE_MAX_MEMORY_USAGE",X.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:X.MONITORING_OTLP_ENDPOINT,otelServiceName:X.OTEL_SERVICE_NAME||"studio",natsPublicUrl:X.NATS_PUBLIC_URL,natsTunnelPublicEnabled:J,natsTunnelSessionTtlSeconds:eg("NATS_TUNNEL_SESSION_TTL_SECONDS",X.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:X.NATS_OPERATOR_JWT,natsAccountJwt:X.NATS_ACCOUNT_JWT,natsAccountSigningKey:X.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:X.NATS_CREDS,configPath:X.CONFIG_PATH||"./config.json",aiGatewayEnabled:uO(X.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:X.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:X.DECO_AI_GATEWAY_ADMIN_TOKEN,seatAllowanceCents:eg("STUDIO_SEAT_ALLOWANCE_CENTS",X.STUDIO_SEAT_ALLOWANCE_CENTS,500),stripeWebhookSecret:X.STRIPE_WEBHOOK_SECRET,stripeSecretKey:X.STRIPE_SECRET_KEY,stripeSeatPriceId:X.STRIPE_SEAT_PRICE_ID,topupFeePercent:eg("STUDIO_TOPUP_FEE_PERCENT",X.STUDIO_TOPUP_FEE_PERCENT,15),enableDecoImport:uO(X.ENABLE_DECO_IMPORT),billingEnforced:uO(X.STUDIO_BILLING_ENFORCED),mcpCacheEnabled:r_8(X.MCP_CACHE_ENABLED,Q!=="development"),orgFsPublicSetsJson:X.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:uO(X.DISABLE_ORGFS_MOUNTS),s3Endpoint:X.S3_ENDPOINT,s3Bucket:X.S3_BUCKET,s3Region:X.S3_REGION||"auto",s3AccessKeyId:X.S3_ACCESS_KEY_ID,s3SecretAccessKey:X.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:o_8(X.S3_FORCE_PATH_STYLE),monitoringS3Bucket:X.MONITORING_S3_BUCKET,monitoringS3Endpoint:X.MONITORING_S3_ENDPOINT,monitoringS3Region:X.MONITORING_S3_REGION,monitoringS3AccessKeyId:X.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:X.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:X.MONITORING_S3_PREFIX,duckdbExtensionDirectory:X.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:X.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:X.DUCKDB_THREADS?Number(X.DUCKDB_THREADS):void 0,isCli:!0,noTui:Z.noTui===!0,podName:X.POD_NAME??crypto.randomUUID(),dispatchRole:m_8(X.STUDIO_DISPATCH_ROLE??X.MESH_DISPATCH_ROLE),sandboxProviderKind:s_8(X.STUDIO_SANDBOX_PROVIDER),decoSupabaseUrl:X.DECO_SUPABASE_URL,decoSupabaseServiceKey:X.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:X.FIRECRAWL_API_KEY,reportsInternalApiUrl:X.REPORTS_INTERNAL_API_URL??X.COMMERCE_DISCOVERY_INTERNAL_API_URL,reportsInternalApiKey:X.REPORTS_INTERNAL_API_KEY??X.COMMERCE_DISCOVERY_INTERNAL_API_KEY,s3TenantBucket:X.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:X.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:X.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:X.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:X.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:X.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:X.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:t61(X.DATABASE_URL),externalNatsUrl:t61($),skipMigrations:Z.skipMigrations}}var d_8,i_8,a_8;var pz0=B(()=>{d_8=new Set(["all","worker","api"]);i_8=new Set(["production","development","test"]);a_8=new Set(["agent-sandbox","user-desktop"])});function W1(){if(!hr)e_8();return hr}function e_8(){if(hr)return;let Z={...process.env},X=o61({port:Z.PORT||"3000",home:Z.DATA_DIR||Z.DECOCMS_HOME||"",localMode:Z.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:Z.DECO_NO_TUI==="true",vitePort:Z.VITE_PORT,baseUrl:Z.BASE_URL},Z);hr=Object.freeze({...X.settings,databaseUrl:Z.DATABASE_URL??"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(Z.NATS_URL||"nats://localhost:4222").split(",").map((G)=>G.trim()).filter(Boolean)})}var hr=null;var _8=B(()=>{pz0()});import{context as Zy8,propagation as Xy8,SpanKind as Gy8,SpanStatusCode as tz0}from"@opentelemetry/api";function Qy8(Z,X){let G=Z instanceof Error?Z.name:void 0;if(G==="TimeoutError")return"timeout";if(G==="AbortError")return"cancelled";if(X?.aborted)return"cancelled";return null}function $y8(Z,X){if(X.startsWith("/_sandbox/")){if(Z===404)return"daemon_gone";if(Z===409)return"daemon_not_ready"}if(Z===404&&X.includes("/sandboxclaims/"))return"claim_gone";return null}function Jy8(Z,X){if(Z===404&&(X==="/.decofile"||X==="/live/_meta"||X==="/sprites.svg"))return"not_a_deco_site";return null}function Wy8(Z){if(!(Z instanceof Error))return!1;if(Z.message.includes("socket connection was closed"))return!0;let X=Z.code;return X==="ECONNRESET"||X==="EPIPE"}async function Ky8(Z,X){let G,Y;if(Z instanceof Request)G=new URL(Z.url),Y=X?.method??Z.method;else if(Z instanceof URL)G=Z,Y=X?.method??"GET";else G=new URL(Z),Y=X?.method??"GET";let Q=`${Y} ${G.host}`;return aF.startActiveSpan(Q,{kind:Gy8.CLIENT,attributes:{"http.request.method":Y,"url.full":G.href,"url.scheme":G.protocol.replace(":",""),"url.path":G.pathname,"url.query":G.search||void 0,"server.address":G.hostname,"server.port":G.port?Number(G.port):void 0}},async($)=>{try{let J=new Headers(X?.headers??(Z instanceof Request?Z.headers:{}));Xy8.inject(Zy8.active(),J,{set:(H,w,O)=>H.set(w,O)});let W={...X,headers:J},K=await Yy8(Z,W);$.setAttribute("http.response.status_code",K.status);let N=K.status===405&&Y==="GET"&&(J.get("accept")??"").includes("text/event-stream"),F=K.status>=400?$y8(K.status,G.pathname):null,U=K.status>=400?Jy8(K.status,G.pathname):null;if(K.status>=400&&!N&&!F&&!U)$.setStatus({code:tz0.ERROR,message:`HTTP ${K.status}`});else{if(F)$.setAttribute("sandbox.lifecycle",F);if(U)$.setAttribute("preview.probe",U);$.setStatus({code:tz0.OK})}return K}catch(J){let W=X?.signal??(Z instanceof Request?Z.signal:void 0),K=Qy8(J,W??void 0);if(K)$.setAttribute("abort.reason",K);else if(Wy8(J)&&G.pathname.startsWith("/_sandbox/"))$.setAttribute("sandbox.lifecycle","connection_closed");else $.recordException(J),$.setStatus({code:tz0.ERROR,message:J instanceof Error?J.message:"Fetch failed"});throw J}finally{$.end()}})}function a61(){globalThis.fetch=Ky8}var Yy8;var s61=B(()=>{H9();Yy8=globalThis.fetch});import{join as oz0}from"path";function N$(){return oz0(W1().dataDir,"logs")}function iC(){return oz0(W1().dataDir,"traces")}function vK(){return oz0(W1().dataDir,"metrics")}function sF(Z,X){let G=Z[X];return G!=null?String(G):""}function Zh(Z,X){let G=Z[X];return G!=null&&G!==""?String(G):null}function e61(Z){let{attributes:X}=Z,G=X[j6.IS_ERROR],Y=X[j6.DURATION_MS];return{v:1,id:Z.id,type:sF(X,j6.TYPE)||Xh,organization_id:sF(X,j6.ORGANIZATION_ID),connection_id:sF(X,j6.CONNECTION_ID),connection_title:sF(X,j6.CONNECTION_TITLE),tool_name:sF(X,j6.TOOL_NAME),input:sF(X,j6.INPUT),output:sF(X,j6.OUTPUT),is_error:G===!0||G===1||G==="true"?1:0,error_message:Zh(X,j6.ERROR_MESSAGE),duration_ms:typeof Y==="number"?Y:Number(Y)||0,timestamp:new Date(Number(Z.timestampNano/1000000n)).toISOString(),user_id:Zh(X,j6.USER_ID),request_id:sF(X,j6.REQUEST_ID),user_agent:Zh(X,j6.USER_AGENT),virtual_mcp_id:Zh(X,j6.VIRTUAL_MCP_ID),properties:Zh(X,j6.PROPERTIES)}}function cr(Z){return Z[0]*1000+Z[1]/1e6}function pC(Z){return new Date(cr(Z)).toISOString()}var rz0="mcp.proxy.callTool",j6,Xh="tool_call",nC="llm_call",ur="decopilot";var oY=B(()=>{_8();j6={TYPE:"studio.monitoring.type",ORGANIZATION_ID:"studio.monitoring.organization_id",CONNECTION_ID:"studio.monitoring.connection_id",CONNECTION_TITLE:"studio.monitoring.connection_title",TOOL_NAME:"studio.monitoring.tool_name",INPUT:"studio.monitoring.input",OUTPUT:"studio.monitoring.output",IS_ERROR:"studio.monitoring.is_error",ERROR_MESSAGE:"studio.monitoring.error_message",DURATION_MS:"studio.monitoring.duration_ms",USER_ID:"studio.monitoring.user_id",REQUEST_ID:"studio.monitoring.request_id",USER_AGENT:"studio.monitoring.user_agent",VIRTUAL_MCP_ID:"studio.monitoring.virtual_mcp_id",PROPERTIES:"studio.monitoring.properties"}});import{ExportResultCode as lr}from"@opentelemetry/core";import{mkdir as Ny8,rename as Fy8,writeFile as Uy8}from"fs/promises";import{join as dr}from"path";class cO{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(Z){this.basePath=Z.basePath,this.flushThreshold=Z.flushThreshold??1000,this.maxBufferBytes=Z.maxBufferBytes??10485760,this.partitionKey=Z.partitionKey;let X=Z.flushIntervalMs??60000;if(X>0&&X<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((G)=>{console.error("[NDJSONExporter] Timer flush failed:",G)})},X),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(Z){if(this.isShutdown)return Promise.resolve({code:lr.FAILED});for(let X of Z){let G=JSON.stringify(X),Y=this.partitionKey?this.partitionKey(X):"";this.bufferItems.push({partition:Y,json:G}),this.bufferBytes+=Buffer.byteLength(G,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:lr.SUCCESS})).catch((X)=>{return console.error("[NDJSONExporter] Flush failed:",X),{code:lr.FAILED}});return Promise.resolve({code:lr.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let X=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=X,X}async doFlush(){if(this.bufferItems.length===0)return;let Z=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let X=new Map;for(let Q of Z){let $=X.get(Q.partition);if(!$)$=[],X.set(Q.partition,$);$.push(Q.json)}let G=await Promise.allSettled(Array.from(X.entries()).map(([Q,$])=>this.writeNDJSON($,Q).then(()=>Q))),Y=G.find((Q)=>Q.status==="rejected");if(Y){let Q=new Set;for(let J of G)if(J.status==="fulfilled")Q.add(J.value);let $=Z.filter((J)=>!Q.has(J.partition));this.bufferItems=$.concat(this.bufferItems),this.bufferBytes=0;for(let J of this.bufferItems)this.bufferBytes+=Buffer.byteLength(J.json,"utf8")+1;throw Y.reason}}async writeNDJSON(Z,X){let G=new Date,Y=[String(G.getUTCFullYear()),String(G.getUTCMonth()+1).padStart(2,"0"),String(G.getUTCDate()).padStart(2,"0"),String(G.getUTCHours()).padStart(2,"0")],Q=X?dr(this.basePath,X,...Y):dr(this.basePath,...Y);if(!this.knownDirs.has(Q))await Ny8(Q,{recursive:!0,mode:448}),this.knownDirs.add(Q);let $=`${crypto.randomUUID()}.ndjson`,J=dr(Q,`.${$}.tmp`),W=dr(Q,$),K=Z.join(`
|
|
2
|
+
var v_8=Object.create;var{getPrototypeOf:x_8,defineProperty:sg,getOwnPropertyNames:l61,getOwnPropertyDescriptor:__8}=Object,d61=Object.prototype.hasOwnProperty;function m61(Z){return this[Z]}var y_8,g_8,k=(Z,X,G)=>{var Y=Z!=null&&typeof Z==="object";if(Y){var Q=X?y_8??=new WeakMap:g_8??=new WeakMap,$=Q.get(Z);if($)return $}G=Z!=null?v_8(x_8(Z)):{};let J=X||!Z||!Z.__esModule?sg(G,"default",{value:Z,enumerable:!0}):G;for(let W of l61(Z))if(!d61.call(J,W))sg(J,W,{get:m61.bind(Z,W),enumerable:!0});if(Y)Q.set(Z,J);return J},iz0=(Z)=>{var X=(c61??=new WeakMap).get(Z),G;if(X)return X;if(X=sg({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function"){for(var Y of l61(Z))if(!d61.call(X,Y))sg(X,Y,{get:m61.bind(Z,Y),enumerable:!(G=__8(Z,Y))||G.enumerable})}return c61.set(Z,X),X},c61,f=(Z,X)=>()=>(X||Z((X={exports:{}}).exports,X),X.exports);var h_8=(Z)=>Z;function u_8(Z,X){this[Z]=h_8.bind(null,X)}var Q6=(Z,X)=>{for(var G in X)sg(Z,G,{get:X[G],enumerable:!0,configurable:!0,set:u_8.bind(X,G)})};var B=(Z,X)=>()=>(Z&&(X=Z(Z=0)),X);var u0=import.meta.require;function c4(Z,X={}){let{signal:G}=X;if(G?.aborted)return Promise.reject(G.reason);return new Promise((Y,Q)=>{let $=()=>{clearTimeout(+W),Q(G?.reason)},W=c_8(()=>{G?.removeEventListener("abort",$),Y()},Z);G?.addEventListener("abort",$,{once:!0})})}function c_8(Z,X){if(X=Math.trunc(Math.max(X,0)||0),X<=nz0){let $=Number(setTimeout(Z,X));return{valueOf:()=>$}}let G=Date.now(),Y,Q=()=>{let $=X-(Date.now()-G);Y=$>nz0?Number(setTimeout(Q,nz0)):Number(setTimeout(Z,$))};return Q(),{valueOf:()=>Y}}var nz0=2147483647;function tY(Z,X,G,Y,Q){let $=Math.min(Z,X*Y**G);return(1-Q*Math.random())*$}async function rY(Z,X){let{multiplier:G=2,maxTimeout:Y=60000,maxAttempts:Q=5,minTimeout:$=1000,jitter:J=1,isRetriable:W=()=>!0,signal:K}=X??{};if(!Number.isInteger(Q)||Q<1)throw RangeError(`Cannot retry as 'maxAttempts' must be a positive integer: current value is ${Q}`);if(!Number.isFinite(G)||G<1)throw RangeError(`Cannot retry as 'multiplier' must be a finite number >= 1: current value is ${G}`);if(Number.isNaN(Y)||Y<=0)throw RangeError(`Cannot retry as 'maxTimeout' must be a positive number: current value is ${Y}`);if(Number.isNaN($)||$<0)throw RangeError(`Cannot retry as 'minTimeout' must be >= 0: current value is ${$}`);if($>Y)throw RangeError(`Cannot retry as 'minTimeout' must be <= 'maxTimeout': current values 'minTimeout=${$}', 'maxTimeout=${Y}'`);if(Number.isNaN(J)||J<0||J>1)throw RangeError(`Cannot retry as 'jitter' must be between 0 and 1: current value is ${J}`);let N=0;while(!0){K?.throwIfAborted();try{return await Z()}catch(F){if(!W(F))throw F;if(N+1>=Q)throw new fK(F,Q);let U=tY(Y,$,N,G,J);await c4(U,K?{signal:K}:void 0)}N++}}var fK;var i61=B(()=>{fK=class fK extends Error{constructor(Z,X){super(`Retrying exceeded the maxAttempts (${X}).`);this.name="RetryError",this.cause=Z}}});var u9=B(()=>{i61()});var K$="thread-gate",bK="decopilot-hosted-harness",oQ="automations",oF="background-tools";import{homedir as l_8}from"os";function m_8(Z){let X=(Z??"").trim();return d_8.has(X)?X:"all"}function n_8(Z){let X=(Z??"").trim();return i_8.has(X)?X:"development"}function r61(Z,X,G){let Y=Z==="worker"?0:Math.floor(X*0.6);if(G===void 0||G==="")return Y;let Q=Number(G);return Number.isFinite(Q)&&Q>=0?Q:Y}function uO(Z){return Z==="true"||Z==="1"}function p_8(Z){if(Z===void 0||Z==="")return;return uO(Z)}function eg(Z,X,G){if(X===void 0||X==="")return G;let Y=Number(X);if(!Number.isSafeInteger(Y)||Y<=0)throw Error(`${Z} must be a positive integer`);return Y}function t_8(Z,X){if(X===void 0||X==="")return;let G=Number(X);if(!Number.isSafeInteger(G)||G<=0)throw Error(`${Z} must be a positive integer`);return G}function r_8(Z,X){if(Z===void 0||Z==="")return X;return Z==="true"||Z==="1"}function t61(Z){if(!Z)return null;try{let G=new URL(Z).hostname.replace(/^\[|\]$/g,"");if(G==="localhost"||G==="127.0.0.1"||G==="::1")return null;return Z}catch{return null}}function o_8(Z){return Z===void 0||Z===""||Z==="true"||Z==="1"}function s_8(Z){let X=(Z??"").trim(),G=X.length>0?X:"user-desktop";if(G==="cluster")return"agent-sandbox";if(!a_8.has(G))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${Z}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return G}function o61(Z,X){let G=Z.home||X.DATA_DIR||X.DECOCMS_HOME||`${l_8()}/deco`,Y=Z.localMode,Q=Z.nodeEnv||n_8(X.NODE_ENV),$=X.NATS_URL||"nats://localhost:4222",J=p_8(X.NATS_TUNNEL_PUBLIC_ENABLED)??!!X.NATS_PUBLIC_URL;return{settings:{nodeEnv:Q,port:eg("PORT",Z.port||X.PORT,3000),baseUrl:Z.baseUrl||X.BASE_URL,dataDir:G,databasePgSsl:uO(X.DATABASE_PG_SSL),databasePoolMax:eg("DATABASE_POOL_MAX",X.DATABASE_POOL_MAX,5),betterAuthSecret:X.BETTER_AUTH_SECRET||"",encryptionKey:X.ENCRYPTION_KEY||"",studioJwtSecret:X.STUDIO_JWT_SECRET??X.MESH_JWT_SECRET,localMode:Y,disableRateLimit:uO(X.DISABLE_RATE_LIMIT),studioProvisionSecretKey:X.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(X.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((K)=>K.trim().toLowerCase()).filter(Boolean),clickhouseUrl:X.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:t_8("CLICKHOUSE_MAX_MEMORY_USAGE",X.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:X.MONITORING_OTLP_ENDPOINT,otelServiceName:X.OTEL_SERVICE_NAME||"studio",natsPublicUrl:X.NATS_PUBLIC_URL,natsTunnelPublicEnabled:J,natsTunnelSessionTtlSeconds:eg("NATS_TUNNEL_SESSION_TTL_SECONDS",X.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:X.NATS_OPERATOR_JWT,natsAccountJwt:X.NATS_ACCOUNT_JWT,natsAccountSigningKey:X.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:X.NATS_CREDS,configPath:X.CONFIG_PATH||"./config.json",aiGatewayEnabled:uO(X.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:X.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:X.DECO_AI_GATEWAY_ADMIN_TOKEN,seatAllowanceCents:eg("STUDIO_SEAT_ALLOWANCE_CENTS",X.STUDIO_SEAT_ALLOWANCE_CENTS,500),stripeWebhookSecret:X.STRIPE_WEBHOOK_SECRET,stripeSecretKey:X.STRIPE_SECRET_KEY,stripeSeatPriceId:X.STRIPE_SEAT_PRICE_ID,topupFeePercent:eg("STUDIO_TOPUP_FEE_PERCENT",X.STUDIO_TOPUP_FEE_PERCENT,15),enableDecoImport:uO(X.ENABLE_DECO_IMPORT),billingEnforced:uO(X.STUDIO_BILLING_ENFORCED),mcpCacheEnabled:r_8(X.MCP_CACHE_ENABLED,Q!=="development"),orgFsPublicSetsJson:X.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:uO(X.DISABLE_ORGFS_MOUNTS),s3Endpoint:X.S3_ENDPOINT,s3Bucket:X.S3_BUCKET,s3Region:X.S3_REGION||"auto",s3AccessKeyId:X.S3_ACCESS_KEY_ID,s3SecretAccessKey:X.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:o_8(X.S3_FORCE_PATH_STYLE),monitoringS3Bucket:X.MONITORING_S3_BUCKET,monitoringS3Endpoint:X.MONITORING_S3_ENDPOINT,monitoringS3Region:X.MONITORING_S3_REGION,monitoringS3AccessKeyId:X.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:X.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:X.MONITORING_S3_PREFIX,duckdbExtensionDirectory:X.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:X.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:X.DUCKDB_THREADS?Number(X.DUCKDB_THREADS):void 0,isCli:!0,noTui:Z.noTui===!0,podName:X.POD_NAME??crypto.randomUUID(),dispatchRole:m_8(X.STUDIO_DISPATCH_ROLE??X.MESH_DISPATCH_ROLE),sandboxProviderKind:s_8(X.STUDIO_SANDBOX_PROVIDER),decoSupabaseUrl:X.DECO_SUPABASE_URL,decoSupabaseServiceKey:X.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:X.FIRECRAWL_API_KEY,reportsInternalApiUrl:X.REPORTS_INTERNAL_API_URL??X.COMMERCE_DISCOVERY_INTERNAL_API_URL,reportsInternalApiKey:X.REPORTS_INTERNAL_API_KEY??X.COMMERCE_DISCOVERY_INTERNAL_API_KEY,s3TenantBucket:X.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:X.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:X.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:X.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:X.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:X.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:X.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:t61(X.DATABASE_URL),externalNatsUrl:t61($),skipMigrations:Z.skipMigrations}}var d_8,i_8,a_8;var pz0=B(()=>{d_8=new Set(["all","worker","api"]);i_8=new Set(["production","development","test"]);a_8=new Set(["agent-sandbox","user-desktop"])});function W1(){if(!hr)e_8();return hr}function e_8(){if(hr)return;let Z={...process.env},X=o61({port:Z.PORT||"3000",home:Z.DATA_DIR||Z.DECOCMS_HOME||"",localMode:Z.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:Z.DECO_NO_TUI==="true",vitePort:Z.VITE_PORT,baseUrl:Z.BASE_URL},Z);hr=Object.freeze({...X.settings,databaseUrl:Z.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(Z.NATS_URL||"nats://localhost:4222").split(",").map((G)=>G.trim()).filter(Boolean)})}var hr=null;var _8=B(()=>{pz0()});import{context as Zy8,propagation as Xy8,SpanKind as Gy8,SpanStatusCode as tz0}from"@opentelemetry/api";function Qy8(Z,X){let G=Z instanceof Error?Z.name:void 0;if(G==="TimeoutError")return"timeout";if(G==="AbortError")return"cancelled";if(X?.aborted)return"cancelled";return null}function $y8(Z,X){if(X.startsWith("/_sandbox/")){if(Z===404)return"daemon_gone";if(Z===409)return"daemon_not_ready"}if(Z===404&&X.includes("/sandboxclaims/"))return"claim_gone";return null}function Jy8(Z,X){if(Z===404&&(X==="/.decofile"||X==="/live/_meta"||X==="/sprites.svg"))return"not_a_deco_site";return null}function Wy8(Z){if(!(Z instanceof Error))return!1;if(Z.message.includes("socket connection was closed"))return!0;let X=Z.code;return X==="ECONNRESET"||X==="EPIPE"}async function Ky8(Z,X){let G,Y;if(Z instanceof Request)G=new URL(Z.url),Y=X?.method??Z.method;else if(Z instanceof URL)G=Z,Y=X?.method??"GET";else G=new URL(Z),Y=X?.method??"GET";let Q=`${Y} ${G.host}`;return aF.startActiveSpan(Q,{kind:Gy8.CLIENT,attributes:{"http.request.method":Y,"url.full":G.href,"url.scheme":G.protocol.replace(":",""),"url.path":G.pathname,"url.query":G.search||void 0,"server.address":G.hostname,"server.port":G.port?Number(G.port):void 0}},async($)=>{try{let J=new Headers(X?.headers??(Z instanceof Request?Z.headers:{}));Xy8.inject(Zy8.active(),J,{set:(H,w,O)=>H.set(w,O)});let W={...X,headers:J},K=await Yy8(Z,W);$.setAttribute("http.response.status_code",K.status);let N=K.status===405&&Y==="GET"&&(J.get("accept")??"").includes("text/event-stream"),F=K.status>=400?$y8(K.status,G.pathname):null,U=K.status>=400?Jy8(K.status,G.pathname):null;if(K.status>=400&&!N&&!F&&!U)$.setStatus({code:tz0.ERROR,message:`HTTP ${K.status}`});else{if(F)$.setAttribute("sandbox.lifecycle",F);if(U)$.setAttribute("preview.probe",U);$.setStatus({code:tz0.OK})}return K}catch(J){let W=X?.signal??(Z instanceof Request?Z.signal:void 0),K=Qy8(J,W??void 0);if(K)$.setAttribute("abort.reason",K);else if(Wy8(J)&&G.pathname.startsWith("/_sandbox/"))$.setAttribute("sandbox.lifecycle","connection_closed");else $.recordException(J),$.setStatus({code:tz0.ERROR,message:J instanceof Error?J.message:"Fetch failed"});throw J}finally{$.end()}})}function a61(){globalThis.fetch=Ky8}var Yy8;var s61=B(()=>{H9();Yy8=globalThis.fetch});import{join as oz0}from"path";function N$(){return oz0(W1().dataDir,"logs")}function iC(){return oz0(W1().dataDir,"traces")}function vK(){return oz0(W1().dataDir,"metrics")}function sF(Z,X){let G=Z[X];return G!=null?String(G):""}function Zh(Z,X){let G=Z[X];return G!=null&&G!==""?String(G):null}function e61(Z){let{attributes:X}=Z,G=X[j6.IS_ERROR],Y=X[j6.DURATION_MS];return{v:1,id:Z.id,type:sF(X,j6.TYPE)||Xh,organization_id:sF(X,j6.ORGANIZATION_ID),connection_id:sF(X,j6.CONNECTION_ID),connection_title:sF(X,j6.CONNECTION_TITLE),tool_name:sF(X,j6.TOOL_NAME),input:sF(X,j6.INPUT),output:sF(X,j6.OUTPUT),is_error:G===!0||G===1||G==="true"?1:0,error_message:Zh(X,j6.ERROR_MESSAGE),duration_ms:typeof Y==="number"?Y:Number(Y)||0,timestamp:new Date(Number(Z.timestampNano/1000000n)).toISOString(),user_id:Zh(X,j6.USER_ID),request_id:sF(X,j6.REQUEST_ID),user_agent:Zh(X,j6.USER_AGENT),virtual_mcp_id:Zh(X,j6.VIRTUAL_MCP_ID),properties:Zh(X,j6.PROPERTIES)}}function cr(Z){return Z[0]*1000+Z[1]/1e6}function pC(Z){return new Date(cr(Z)).toISOString()}var rz0="mcp.proxy.callTool",j6,Xh="tool_call",nC="llm_call",ur="decopilot";var oY=B(()=>{_8();j6={TYPE:"studio.monitoring.type",ORGANIZATION_ID:"studio.monitoring.organization_id",CONNECTION_ID:"studio.monitoring.connection_id",CONNECTION_TITLE:"studio.monitoring.connection_title",TOOL_NAME:"studio.monitoring.tool_name",INPUT:"studio.monitoring.input",OUTPUT:"studio.monitoring.output",IS_ERROR:"studio.monitoring.is_error",ERROR_MESSAGE:"studio.monitoring.error_message",DURATION_MS:"studio.monitoring.duration_ms",USER_ID:"studio.monitoring.user_id",REQUEST_ID:"studio.monitoring.request_id",USER_AGENT:"studio.monitoring.user_agent",VIRTUAL_MCP_ID:"studio.monitoring.virtual_mcp_id",PROPERTIES:"studio.monitoring.properties"}});import{ExportResultCode as lr}from"@opentelemetry/core";import{mkdir as Ny8,rename as Fy8,writeFile as Uy8}from"fs/promises";import{join as dr}from"path";class cO{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(Z){this.basePath=Z.basePath,this.flushThreshold=Z.flushThreshold??1000,this.maxBufferBytes=Z.maxBufferBytes??10485760,this.partitionKey=Z.partitionKey;let X=Z.flushIntervalMs??60000;if(X>0&&X<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((G)=>{console.error("[NDJSONExporter] Timer flush failed:",G)})},X),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(Z){if(this.isShutdown)return Promise.resolve({code:lr.FAILED});for(let X of Z){let G=JSON.stringify(X),Y=this.partitionKey?this.partitionKey(X):"";this.bufferItems.push({partition:Y,json:G}),this.bufferBytes+=Buffer.byteLength(G,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:lr.SUCCESS})).catch((X)=>{return console.error("[NDJSONExporter] Flush failed:",X),{code:lr.FAILED}});return Promise.resolve({code:lr.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let X=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=X,X}async doFlush(){if(this.bufferItems.length===0)return;let Z=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let X=new Map;for(let Q of Z){let $=X.get(Q.partition);if(!$)$=[],X.set(Q.partition,$);$.push(Q.json)}let G=await Promise.allSettled(Array.from(X.entries()).map(([Q,$])=>this.writeNDJSON($,Q).then(()=>Q))),Y=G.find((Q)=>Q.status==="rejected");if(Y){let Q=new Set;for(let J of G)if(J.status==="fulfilled")Q.add(J.value);let $=Z.filter((J)=>!Q.has(J.partition));this.bufferItems=$.concat(this.bufferItems),this.bufferBytes=0;for(let J of this.bufferItems)this.bufferBytes+=Buffer.byteLength(J.json,"utf8")+1;throw Y.reason}}async writeNDJSON(Z,X){let G=new Date,Y=[String(G.getUTCFullYear()),String(G.getUTCMonth()+1).padStart(2,"0"),String(G.getUTCDate()).padStart(2,"0"),String(G.getUTCHours()).padStart(2,"0")],Q=X?dr(this.basePath,X,...Y):dr(this.basePath,...Y);if(!this.knownDirs.has(Q))await Ny8(Q,{recursive:!0,mode:448}),this.knownDirs.add(Q);let $=`${crypto.randomUUID()}.ndjson`,J=dr(Q,`.${$}.tmp`),W=dr(Q,$),K=Z.join(`
|
|
3
3
|
`)+`
|
|
4
4
|
`;await Uy8(J,K,{mode:384}),await Fy8(J,W)}}var mr=()=>{};import{ExportResultCode as Hy8}from"@opentelemetry/core";class az0{inner;constructor(Z){this.inner=new cO({...Z,partitionKey:(X)=>X.organization_id})}export(Z,X){let G=[];for(let Y of Z){if(!wy8.has(Y.attributes[j6.TYPE]))continue;let Q={};for(let[K,N]of Object.entries(Y.attributes))if(typeof N==="string"||typeof N==="number"||typeof N==="boolean")Q[K]=N;let $=Y.spanContext?.spanId??crypto.randomUUID(),J=Y.hrTime,W=BigInt(J[0])*1000000000n+BigInt(J[1]);G.push(e61({id:$,timestampNano:W,attributes:Q}))}this.inner.exportRows(G).then((Y)=>X(Y)).catch(()=>X({code:Hy8.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var wy8;var Z51=B(()=>{oY();mr();wy8=new Set([Xh,nC])});import{ExportResultCode as Oy8}from"@opentelemetry/core";import{AggregationTemporality as By8,DataPointType as X51}from"@opentelemetry/sdk-metrics";class sz0{inner;constructor(Z){this.inner=new cO({...Z,partitionKey:(X)=>X.organization_id})}selectAggregationTemporality(Z){return By8.DELTA}export(Z,X){let G=[];for(let Y of Z.scopeMetrics)for(let Q of Y.metrics){let{descriptor:$,dataPointType:J}=Q;if(J===X51.SUM)for(let W of Q.dataPoints){let K=W.attributes;G.push({v:1,name:$.name,type:"sum",unit:$.unit,timestamp:pC(W.endTime),organization_id:String(K["organization.id"]??""),connection_id:String(K["connection.id"]??""),tool_name:String(K["tool.name"]??""),status:String(K.status??""),error_type:String(K["error.type"]??""),value:W.value,hist_count:0,hist_sum:0,hist_min:0,hist_max:0,hist_boundaries:"[]",hist_bucket_counts:"[]"})}else if(J===X51.HISTOGRAM)for(let W of Q.dataPoints){let{attributes:K,value:N}=W;G.push({v:1,name:$.name,type:"histogram",unit:$.unit,timestamp:pC(W.endTime),organization_id:String(K["organization.id"]??""),connection_id:String(K["connection.id"]??""),tool_name:String(K["tool.name"]??""),status:String(K.status??""),error_type:String(K["error.type"]??""),value:N.count,hist_count:N.count,hist_sum:N.sum??0,hist_min:N.min??0,hist_max:N.max??0,hist_boundaries:JSON.stringify(N.buckets.boundaries),hist_bucket_counts:JSON.stringify(N.buckets.counts)})}}this.inner.exportRows(G).then((Y)=>X(Y)).catch(()=>X({code:Oy8.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var G51=B(()=>{oY();mr()});import{ExportResultCode as Dy8}from"@opentelemetry/core";function Ey8(Z){let X=Z.resource,G=X.attributes["service.name"]??"unknown";return{v:1,trace_id:Z.spanContext().traceId,span_id:Z.spanContext().spanId,parent_span_id:Z.parentSpanContext?.spanId||null,name:Z.name,kind:Z.kind,status:Z.status.code,status_message:Z.status.message||null,start_time:pC(Z.startTime),end_time:pC(Z.endTime),duration_ms:cr(Z.endTime)-cr(Z.startTime),service_name:G,attributes:JSON.stringify(Z.attributes),events:JSON.stringify(Z.events),links:JSON.stringify(Z.links),resource:JSON.stringify(X.attributes)}}class ez0{inner;constructor(Z){this.inner=new cO(Z)}export(Z,X){let G=Z.map(Ey8);this.inner.exportRows(G).then((Y)=>X(Y)).catch(()=>X({code:Dy8.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var Y51=B(()=>{oY();mr()});function tC(Z,X=65536){if(Z.length<=X&&Buffer.byteLength(Z,"utf8")<=X)return Z;let G=X-Ly8;if(G<=0)return"... [TRUNCATED]".slice(0,X);let Y=0,Q=0;for(let $ of Z){let J=$.charCodeAt(0)<=127?1:Buffer.byteLength($,"utf8");if(Y+J>G)break;Y+=J,Q+=$.length}return Z.slice(0,Q)+"... [TRUNCATED]"}var Ly8;var Zj0=B(()=>{Ly8=Buffer.byteLength("... [TRUNCATED]","utf8")});import{NOOP_LOGGER as zy8}from"@opentelemetry/api-logs";function $51(Z){Q51=Z.getLogger(jy8,Ay8)}function J51(){return Q51}var jy8="studio.monitoring",Ay8="1.0.0",Q51;var Xj0=B(()=>{Q51=zy8});var N51={};Q6(N51,{shouldSkipStudioContext:()=>Gj0,isServerPath:()=>Ty8,isHealthPath:()=>Gh,SYSTEM_PATHS:()=>g7});function Gh(Z){return Z===g7.HEALTH||Z===g7.HEALTH_LIVE||Z===g7.HEALTH_READY}function W51(Z){return Z===g7.HEALTH||Z===g7.HEALTH_LIVE||Z===g7.HEALTH_READY||Z===g7.METRICS||Z.startsWith(lO.WELL_KNOWN)||Z.startsWith(g7.DBOS_QUEUE_DEPTH_PREFIX)||Z===g7.HOSTED_RUN_PENDING}function K51(Z){return Z.startsWith(lO.API)}function Ty8(Z){return K51(Z)||Z==="/mcp"||Z.startsWith(lO.MCP)||Z.startsWith(lO.OAUTH_PROXY)||Z.startsWith(lO.ORG)||Z.startsWith(lO.REPORT)||W51(Z)}function Gj0(Z){return Z==="/"||Z.startsWith(lO.API_AUTH)||Z==="/api/trigger-callback"||W51(Z)||!K51(Z)&&Py8.test(Z)}var g7,lO,Py8;var ir=B(()=>{g7={HEALTH:"/health",HEALTH_LIVE:"/health/live",HEALTH_READY:"/health/ready",METRICS:"/metrics",DBOS_QUEUE_DEPTH_PREFIX:"/dbos-queue-depth/",HOSTED_RUN_PENDING:"/hosted-run-pending"},lO={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known",ORG:"/org/",REPORT:"/report/"},Py8=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/});import{SpanStatusCode as Yj0}from"@opentelemetry/api";var Ry8,Iy8=()=>Ry8??=B4.createHistogram("http.server.request.duration",{description:"Duration of inbound HTTP requests handled by the API.",unit:"s",advice:{explicitBucketBoundaries:[0.005,0.01,0.025,0.05,0.075,0.1,0.25,0.5,0.75,1,2.5,5,7.5,10]}}),Qj0=async(Z,X)=>{if(Gh(Z.req.path))return X();let G=Z.req.raw,Y=new URL(G.url),Q=performance.now(),$=H51(G),J=$j0(G),W={"http.request.url":G.url,"http.request.method":G.method,"http.request.body.size":G.headers.get("content-length")??void 0,"url.scheme":Y.protocol.replace(":",""),"server.address":Y.host,"url.query":Y.search||void 0,"url.path":Y.pathname,"user_agent.original":G.headers.get("user-agent")??void 0,"request.internal":G.headers.has("traceparent"),...J?{"trace.debug.id":J}:{}};await aF.startActiveSpan(`${G.method} ${Y.pathname}`,{attributes:W},$,async(K)=>{Z.set("rootSpan",K);try{await X()}catch(N){K.recordException(N),K.setStatus({code:Yj0.ERROR});let F=typeof N==="object"&&N&&"message"in N?String(N.message):JSON.stringify(N);throw console.error("error: ",F,W),N}finally{let N=Z.res?.status??500,F=N>=500;K.setStatus({code:F?Yj0.ERROR:Yj0.OK}),K.setAttribute("http.response.status_code",N);let U=Z.get("studioContext");if(U){if(U.auth.user?.id)K.setAttribute("studio.user.id",U.auth.user.id);if(U.auth.apiKey?.id)K.setAttribute("studio.api_key.id",U.auth.apiKey.id);if(U.organization?.id)K.setAttribute("studio.organization.id",U.organization.id)}if(J)U51(Z.res.headers,J);Iy8().record((performance.now()-Q)/1000,{"http.request.method":G.method,"http.route":Z.req.routePath,"http.response.status_code":N}),K.end()}})};var F51=B(()=>{H9();ir()});import{createContextKey as qy8,metrics as z51,propagation as My8,ROOT_CONTEXT as ky8,SpanStatusCode as w51,trace as Wj0}from"@opentelemetry/api";import{logs as j51,SeverityNumber as Kh}from"@opentelemetry/api-logs";import{OTLPLogExporter as O51}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as Sy8}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as Vy8}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as Cy8}from"@opentelemetry/instrumentation-runtime-node";import{BatchLogRecordProcessor as Jj0,LoggerProvider as B51}from"@opentelemetry/sdk-logs";import{detectResources as fy8,envDetector as by8,hostDetector as vy8,osDetector as xy8,processDetector as _y8,resourceFromAttributes as D51}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as yy8}from"@opentelemetry/sdk-metrics";import{NodeSDK as gy8}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as E51,SamplingDecision as rC}from"@opentelemetry/sdk-trace-base";class P51{inner;ratio;constructor(Z,X){this.inner=Z;this.ratio=X}onEmit(Z,X){if(Z.severityNumber!==void 0&&Z.severityNumber>=Kh.ERROR||Math.random()<this.ratio)this.inner.onEmit(Z,X)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class T51{inner;maxBytes;constructor(Z,X){this.inner=Z;this.maxBytes=X}onEmit(Z,X){let G=j6.OUTPUT,Y=Z.attributes?.[G];if(typeof Y==="string"&&Y.length>this.maxBytes){let Q=tC(Y,this.maxBytes);this.inner.onEmit({...Z,attributes:{...Z.attributes,[G]:Q}},X)}else this.inner.onEmit(Z,X)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class R51{inner;constructor(Z){this.inner=Z}shouldSample(Z,X,G,Y,Q,$){let J=Z.getValue(A51);if(!J){if(this.inner)return this.inner.shouldSample(Z,X,G,Y,Q,$);return{decision:rC.RECORD_AND_SAMPLED}}let W=$j0(J);if(W)return{decision:rC.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":W}};if(this.inner){let K=this.inner.shouldSample(Z,X,G,Y,Q,$);if(K.decision===rC.RECORD_AND_SAMPLED){let N=crypto.randomUUID();K.attributes={...K.attributes??{},"trace.debug.id":N}}return K}return{decision:rC.NOT_RECORD}}toString(){return"DebugSampler"}}class I51{ratio;constructor(Z){this.ratio=Z}shouldSample(){if(Math.random()<this.ratio)return{decision:rC.RECORD_AND_SAMPLED};return{decision:rC.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}function q51(){if(L51)return;let Z=W1(),X=!!process.env.OTEL_EXPORTER_OTLP_ENDPOINT,G=X?new Vy8:void 0;Yh=Z.nodeEnv==="test"?null:new az0({basePath:N$()}),Qh=Z.nodeEnv==="test"?null:new ez0({basePath:iC()}),$h=Z.nodeEnv==="test"?null:new sz0({basePath:vK()}),Jh=$h?new yy8({exporter:$h,exportIntervalMillis:60000}):null;let Y=process.env.STUDIO_ENV??"production"??"unknown",Q={};if(!process.env.OTEL_RESOURCE_ATTRIBUTES?.includes("deployment.environment"))Q["deployment.environment"]=Y;new gy8({serviceName:Z.otelServiceName,resource:D51(Q),metricReaders:[Kj0,...Jh?[Jh]:[]],sampler:cy8,spanProcessors:[...G?[new E51(G,{scheduledDelayMillis:60000,maxExportBatchSize:1000})]:[],...Qh?[new E51(Qh,{scheduledDelayMillis:60000,maxExportBatchSize:250})]:[]],instrumentations:[new Cy8]}).start(),B4=z51.getMeter("studio","1.0.0"),aF=Wj0.getTracer("studio","1.0.0");let J=fy8({detectors:[by8,vy8,xy8,_y8]}).merge(D51({"service.name":Z.otelServiceName,...Q})),W=[];if(X){let U=Y==="prod"||Y==="production"?1:0.1,H=process.env.INFRA_LOG_SAMPLE_RATIO,w=U;if(H!==void 0){let O=Number(H);if(Number.isFinite(O)&&O>=0&&O<=1)w=O;else console.warn(`[observability] Ignoring invalid INFRA_LOG_SAMPLE_RATIO="${H}" (expected 0..1); using ${U}`)}W.push(new P51(new Jj0(new O51),w))}Wh=new B51({resource:J,processors:W}),j51.setGlobalLoggerProvider(Wh),M51=Wh.getLogger("studio","1.0.0");let K=Z.monitoringOtlpEndpoint??process.env.OTEL_EXPORTER_OTLP_ENDPOINT,N=[];if(K){let F=K.replace(/\/$/,""),U=F.endsWith("/v1/logs")?F:`${F}/v1/logs`;N.push(new T51(new Jj0(new O51({url:U})),8000))}if(Yh)N.push(new Jj0(Yh,{scheduledDelayMillis:60000,maxExportBatchSize:250}));nr=new B51({resource:J,processors:N}),$51(nr),a61(),L51=!0}async function aQ(){let X=(await Promise.allSettled([Wh?Wh.forceFlush():Promise.resolve(),(async()=>{if(nr)await nr.forceFlush();if(Yh)await Yh.forceFlush()})(),(async()=>{let G=Wj0.getTracerProvider();if("forceFlush"in G)await G.forceFlush();if(Qh)await Qh.forceFlush()})(),(async()=>{if(Jh)await Jh.forceFlush();if($h)await $h.forceFlush()})()])).find((G)=>G.status==="rejected");if(X)throw X.reason}function Uj0(Z,X,G){return aF.startActiveSpan(Z,{attributes:G},async(Y)=>{try{let Q=await X(Y);return Y.setStatus({code:w51.OK}),Q}catch(Q){let $=Q instanceof Error?Q:Error(String(Q??"unknown"));throw Y.setStatus({code:w51.ERROR,message:$.message}),Y.recordException($),Q}finally{Y.end()}})}var hy8="__d",A51,uy8=1,$j0=(Z)=>{let G=new URL(Z.url).searchParams.get(hy8);if(G==="")return crypto.randomUUID();if(!G)G=Z.headers.get("x-trace-debug-id");return G},U51=(Z,X)=>{try{Z.set("x-trace-debug-id",X)}catch{}},Kj0,cy8,Yh=null,Qh=null,$h=null,Jh=null,Wh=null,nr=null,L51=!1,aF,B4,M51,Nj0=(Z,X,G)=>{let Y={},Q=G,$=G[G.length-1];if($!==null&&typeof $==="object"&&!Array.isArray($)&&!($ instanceof Error)&&Object.getPrototypeOf($)===Object.prototype)Y=$,Q=G.slice(0,-1);let J=Q.map((W)=>{if(W instanceof Error)return`${W.name}: ${W.message}`;if(typeof W==="object")try{return JSON.stringify(W)}catch{return"[Object]"}return String(W)}).join(" ");M51.emit({severityNumber:Z,severityText:X,body:J,attributes:{"log.source":"console",...Y}})},Fj0,H51=(Z)=>{return My8.extract(ky8,Z.headers,{get:(G,Y)=>G.get(Y)??void 0,keys:(G)=>[...G.keys()]}).setValue(A51,Z)};var H9=B(()=>{s61();Z51();G51();Y51();oY();Zj0();_8();Xj0();F51();A51=qy8("Current request");Kj0=new Sy8({preventServerStart:!0}),cy8=new R51(new I51(uy8));aF=Wj0.getTracer("studio","1.0.0"),B4=z51.getMeter("studio","1.0.0"),M51=j51.getLogger("studio","1.0.0"),Fj0={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...Z)=>{Nj0(Kh.ERROR,"ERROR",Z),Fj0.error(...Z)};console.warn=(...Z)=>{Nj0(Kh.WARN,"WARN",Z),Fj0.warn(...Z)};console.debug=(...Z)=>{Nj0(Kh.DEBUG,"DEBUG",Z),Fj0.debug(...Z)}});function dO(){try{return process.memoryUsage()}catch{return null}}import{Session as dy8}from"inspector";function mO(Z,X){return new Promise((G,Y)=>oC.post(Z,X,(Q,$)=>Q?Y(Q):G($??{})))}async function S51(Z){try{return oC=new dy8,oC.connect(),await mO("Profiler.enable"),await mO("Profiler.setSamplingInterval",{interval:Z}),await mO("Profiler.start"),sC=!0,!0}catch{return sC=!1,oC=null,!1}}function my8(Z,X){let{nodes:G,samples:Y,timeDeltas:Q}=Z;if(!Y?.length)return null;let $=new Map,J=new Map;for(let D of G){$.set(D.id,D);for(let E of D.children??[])J.set(E,D.id)}let W=Math.max(1,X)*1000,K=0,N=new Map;for(let D=Y.length-1;D>=0;D--){K+=Q[D]??0;let E=Y[D];if(E!==void 0)N.set(E,(N.get(E)??0)+1);if(K>=W)break}let F=-1,U=0;for(let[D,E]of N)if(E>U)U=E,F=D;if(F<0)return null;let H=[],w=new Set,O=F;while(O!=null&&!w.has(O)){w.add(O);let D=$.get(O);if(!D)break;let E=D.callFrame,L=E.url?` ${E.url}:${E.lineNumber+1}`:"";H.push(`${E.functionName||"(anonymous)"}${L}`),O=J.get(O)}return H}async function V51(Z){if(!sC||!oC||aC)return null;aC=!0;try{let{profile:X}=await mO("Profiler.stop"),G=X?my8(X,Z):null;return await mO("Profiler.start"),G}catch{return sC=!1,null}finally{aC=!1}}async function C51(){if(!sC||!oC||aC)return;aC=!0;try{await mO("Profiler.stop"),await mO("Profiler.start")}catch{sC=!1}finally{aC=!1}}var oC=null,sC=!1,aC=!1;var f51=()=>{};function v51(){if(wj0)return;let Z=performance.now()+Oj0;wj0=setInterval(()=>{let X=performance.now();b51=Math.max(0,X-Z),Z=X+Oj0},Oj0),wj0.unref?.()}function x51(){return v51(),b51}function _51(){if(v51(),process.env.EVENT_LOOP_MONITOR!=="1")return()=>{};let Z=Number(process.env.EVENT_LOOP_INTERVAL_MS??250),X=Number(process.env.EVENT_LOOP_SPIKE_MS??100),G=process.env.EVENT_LOOP_PROFILE==="1",Y=Number(process.env.EVENT_LOOP_PROFILE_MS??1000),Q=Number(process.env.EVENT_LOOP_PROFILE_INTERVAL_US??1e4),$=30000,J=performance.now();if(G)S51(Q).then((N)=>{console.warn(JSON.stringify({msg:"event-loop-profiler",status:N?"started":"unavailable",intervalUs:Q}))});let W=B4.createHistogram("eventloop.delay",{description:"Event-loop lag measured as timer scheduling drift",unit:"ms"}),K=performance.now()+Z;return pr=setInterval(()=>{let N=performance.now(),F=Math.max(0,N-K);if(K=N+Z,W.record(F),F>X){let U=dO();console.warn(JSON.stringify({msg:"event-loop-stall",ts:new Date().toISOString(),lagMs:Math.round(F),rss:U?.rss,heapUsed:U?.heapUsed,heapTotal:U?.heapTotal,external:U?.external}))}if(G){if(F>Y)V51(Math.round(F)).then((U)=>{if(U?.length)console.warn(JSON.stringify({msg:"event-loop-stall-profile",ts:new Date().toISOString(),lagMs:Math.round(F),stack:U}))}),J=N;else if(N-J>$)C51(),J=N}},Z),pr.unref?.(),()=>{if(pr)clearInterval(pr)}}var pr,wj0,b51=0,Oj0=500;var Bj0=B(()=>{H9();f51()});var iO=f((u51)=>{Object.defineProperty(u51,"__esModule",{value:!0});u51.RepublishHeaders=u51.DirectMsgHeaders=u51.JsHeaders=u51.AdvisoryKind=void 0;u51.isOrderedPushConsumerOptions=ty8;u51.isPullConsumer=ry8;u51.isPushConsumer=oy8;u51.isBoundPushConsumerOptions=ay8;function ty8(Z){if(Z&&typeof Z==="object")return"name_prefix"in Z||"deliver_subject_prefix"in Z||"filter_subjects"in Z||"filter_subject"in Z||"deliver_policy"in Z||"opt_start_seq"in Z||"opt_start_time"in Z||"replay_policy"in Z||"inactive_threshold"in Z||"headers_only"in Z||"deliver_prefix"in Z;return!1}function ry8(Z){return Z.isPullConsumer()}function oy8(Z){return Z.isPushConsumer()}function ay8(Z){if(Z&&typeof Z==="object")return"deliver_subject"in Z||"deliver_group"in Z||"idle_heartbeat"in Z;return!1}u51.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};u51.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};u51.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};u51.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var aY=f((l51)=>{Object.defineProperty(l51,"__esModule",{value:!0});l51.TD=l51.TE=l51.Empty=void 0;l51.encode=Jg8;l51.decode=Wg8;l51.Empty=new Uint8Array(0);l51.TE=new TextEncoder;l51.TD=new TextDecoder;function $g8(...Z){let X=0;for(let Q=0;Q<Z.length;Q++)X+=Z[Q].length;let G=new Uint8Array(X),Y=0;for(let Q=0;Q<Z.length;Q++)G.set(Z[Q],Y),Y+=Z[Q].length;return G}function Jg8(...Z){let X=[];for(let G=0;G<Z.length;G++)X.push(l51.TE.encode(Z[G]));if(X.length===0)return l51.Empty;if(X.length===1)return X[0];return $g8(...X)}function Wg8(Z){if(!Z||Z.length===0)return"";return l51.TD.decode(Z)}});var sY=f((i51)=>{Object.defineProperty(i51,"__esModule",{value:!0});i51.errors=i51.PermissionViolationError=i51.NoRespondersError=i51.TimeoutError=i51.RequestError=i51.ProtocolError=i51.ConnectionError=i51.DrainingConnectionError=i51.ClosedConnectionError=i51.AuthorizationError=i51.UserAuthenticationExpiredError=i51.InvalidOperationError=i51.InvalidArgumentError=i51.InvalidSubjectError=void 0;class Ej0 extends Error{constructor(Z,X){super(`illegal subject: '${Z}'`,X);this.name="InvalidSubjectError"}}i51.InvalidSubjectError=Ej0;class rr extends Error{constructor(Z,X){super(Z,X);this.name="InvalidArgumentError"}static format(Z,X,G){if(Array.isArray(X)&&X.length>1)X=X[0];if(Array.isArray(Z))Z=Z.map((Y)=>`'${Y}'`),Z=Z.join(",");else Z=`'${Z}'`;return new rr(`${Z} ${X}`,G)}}i51.InvalidArgumentError=rr;class Lj0 extends Error{constructor(Z,X){super(Z,X);this.name="InvalidOperationError"}}i51.InvalidOperationError=Lj0;class or extends Error{constructor(Z,X){super(Z,X);this.name="UserAuthenticationExpiredError"}static parse(Z){if(Z.toLowerCase().indexOf("user authentication expired")!==-1)return new or(Z);return null}}i51.UserAuthenticationExpiredError=or;class ar extends Error{constructor(Z,X){super(Z,X);this.name="AuthorizationError"}static parse(Z){let X=["authorization violation","account authentication expired","authentication timeout"],G=Z.toLowerCase();for(let Y=0;Y<X.length;Y++)if(G.indexOf(X[Y])!==-1)return new ar(Z);return null}}i51.AuthorizationError=ar;class zj0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}i51.ClosedConnectionError=zj0;class jj0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}i51.DrainingConnectionError=jj0;class Aj0 extends Error{constructor(Z,X){super(Z,X);this.name="ConnectionError"}}i51.ConnectionError=Aj0;class Pj0 extends Error{constructor(Z,X){super(Z,X);this.name="ProtocolError"}}i51.ProtocolError=Pj0;class Tj0 extends Error{constructor(Z="",X){super(Z,X);this.name="RequestError"}isNoResponders(){return this.cause instanceof sr}}i51.RequestError=Tj0;class Rj0 extends Error{constructor(Z){super("timeout",Z);this.name="TimeoutError"}}i51.TimeoutError=Rj0;class sr extends Error{subject;constructor(Z,X){super(`no responders: '${Z}'`,X);this.subject=Z,this.name="NoResponders"}}i51.NoRespondersError=sr;class er extends Error{operation;subject;queue;constructor(Z,X,G,Y,Q){super(Z,Q);this.name="PermissionViolationError",this.operation=X,this.subject=G,this.queue=Y}static parse(Z){if((Z?Z.toLowerCase():"").indexOf("permissions violation")===-1)return null;let G="publish",Y="",Q=void 0,$=Z.match(/(Publish|Subscription) to "(\S+)"/);if($){if(G=$[1].toLowerCase(),Y=$[2],G==="subscription"){let J=Z.match(/using queue "(\S+)"/);if(J)Q=J[1]}}return new er(Z,G,Y,Q)}}i51.PermissionViolationError=er;i51.errors={AuthorizationError:ar,ClosedConnectionError:zj0,ConnectionError:Aj0,DrainingConnectionError:jj0,InvalidArgumentError:rr,InvalidOperationError:Lj0,InvalidSubjectError:Ej0,NoRespondersError:sr,PermissionViolationError:er,ProtocolError:Pj0,RequestError:Tj0,TimeoutError:Rj0,UserAuthenticationExpiredError:or}});var F$=f((o51)=>{Object.defineProperty(o51,"__esModule",{value:!0});o51.SimpleMutex=o51.Perf=void 0;o51.extend=Rg8;o51.render=Ig8;o51.timeout=qg8;o51.delay=Mg8;o51.deadline=kg8;o51.deferred=qj0;o51.debugDeferred=Sg8;o51.shuffle=Vg8;o51.collect=Cg8;o51.jitter=r51;o51.backoff=fg8;o51.nanos=bg8;o51.millis=vg8;o51.randomToken=yg8;var Tg8=aY(),Ij0=sY();function Rg8(Z,...X){for(let G=0;G<X.length;G++){let Y=X[G];Object.keys(Y).forEach(function(Q){Z[Q]=Y[Q]})}return Z}function Ig8(Z){return Tg8.TD.decode(Z).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function qg8(Z,X=!0){let G=X?new Ij0.TimeoutError:null,Y,Q,$=new Promise((J,W)=>{Y={cancel:()=>{if(Q)clearTimeout(Q)}},Q=setTimeout(()=>{if(G===null)W(new Ij0.TimeoutError);else W(G)},Z)});return Object.assign($,Y)}function Mg8(Z=0){let X,G=new Promise((Y)=>{let Q=setTimeout(()=>{Y()},Z);X={cancel:()=>{if(Q)clearTimeout(Q),Y()}}});return Object.assign(G,X)}async function kg8(Z,X=1000){let G=qj0(),Y=setTimeout(()=>{G.reject(new Ij0.TimeoutError)},X);try{return await Promise.race([Z,G])}finally{clearTimeout(Y)}}function qj0(){let Z={},X=new Promise((G,Y)=>{Z={resolve:G,reject:Y}});return Object.assign(X,Z)}function Sg8(){let Z={},X=new Promise((G,Y)=>{Z={resolve:(Q)=>{console.trace("resolve",Q),G(Q)},reject:(Q)=>{console.trace("reject"),Y(Q)}}});return Object.assign(X,Z)}function Vg8(Z){for(let X=Z.length-1;X>0;X--){let G=Math.floor(Math.random()*(X+1));[Z[X],Z[G]]=[Z[G],Z[X]]}return Z}async function Cg8(Z){let X=[];for await(let G of Z)X.push(G);return X}class p51{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark(Z){this.timers.set(Z,performance.now())}measure(Z,X,G){let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);let Q=this.timers.get(G);if(Q===void 0)throw Error(`${G} is not defined`);this.measures.set(Z,Q-Y)}getEntries(){let Z=[];return this.measures.forEach((X,G)=>{Z.push({name:G,duration:X})}),Z}}o51.Perf=p51;class t51{max;current;waiting;constructor(Z=1){this.max=Z,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let Z=qj0();return this.waiting.push(Z),Z}unlock(){this.current--,this.waiting.pop()?.resolve()}}o51.SimpleMutex=t51;function r51(Z){if(Z===0)return 0;return Math.floor(Z/2+Math.random()*Z)}function fg8(Z=[0,250,250,500,500,3000,5000]){if(!Array.isArray(Z))Z=[0,250,250,500,500,3000,5000];let X=Z.length-1;return{backoff(G){return r51(G>X?Z[X]:Z[G])}}}function bg8(Z){return Z*1e6}function vg8(Z){return Math.floor(Z/1e6)}var xg8="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",xK=new Uint8Array(62);for(let Z=0;Z<62;Z++)xK[Z]=xg8.charCodeAt(Z);var _g8=218340105584896;function yg8(){let Z=Math.floor(Math.random()*_g8),X=Z%62,G=xK[X];Z=(Z-X)/62,X=Z%62;let Y=xK[X];Z=(Z-X)/62,X=Z%62;let Q=xK[X];Z=(Z-X)/62,X=Z%62;let $=xK[X];Z=(Z-X)/62,X=Z%62;let J=xK[X];Z=(Z-X)/62,X=Z%62;let W=xK[X];Z=(Z-X)/62,X=Z%62;let K=xK[X];Z=(Z-X)/62;let N=xK[Z];return String.fromCharCode(G,Y,Q,$,J,W,K,N)}});var Q91=f((G91)=>{Object.defineProperty(G91,"__esModule",{value:!0});G91.nuid=G91.NuidImpl=void 0;var eg8="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",eF=62,Xo=12,Z91=10,s51=33,Zh8=333,e51=Xo+Z91,kj0=new Uint8Array(eF);for(let Z=0;Z<eF;Z++)kj0[Z]=eg8.charCodeAt(Z);var Zo=4294967296,X91=BigInt(eF)**BigInt(Z91),Nh=Number(X91/(1n<<32n)),Mj0=Number(X91%(1n<<32n));function Xh8(Z){for(let X=0;X<Z.length;X++)Z[X]=Math.floor(Math.random()*256)}function Gh8(Z){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues(Z);else Xh8(Z)}class Sj0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(e51),this.cbuf=new Uint8Array(Xo),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let Z=0;do this.seqHi=Math.floor(Math.random()*(Nh+1)),this.seqLo=Math.floor(Math.random()*Zo);while(Z++<8&&this.seqHi===Nh&&this.seqLo>=Mj0);if(this.seqHi===Nh&&this.seqLo>=Mj0)this.seqLo=0;this.inc=Math.random()*(Zh8-s51)+s51|0}setPre(){Gh8(this.cbuf);for(let Z=0;Z<Xo;Z++)this.buf[Z]=kj0[this.cbuf[Z]%eF]}fillSeq(){let Z=this.seqHi,X=this.seqLo;for(let G=e51-1;G>=Xo;G--){let Y=Math.floor(Z/eF),$=(Z-Y*eF)*Zo+X,J=Math.floor($/eF),W=$-J*eF;this.buf[G]=kj0[W],Z=Y,X=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=Zo)this.seqLo-=Zo,this.seqHi+=1;if(this.seqHi>Nh||this.seqHi===Nh&&this.seqLo>=Mj0)this.setPre(),this.initSeqAndInc();this.fillSeq();let Z=this.buf;return String.fromCharCode(Z[0],Z[1],Z[2],Z[3],Z[4],Z[5],Z[6],Z[7],Z[8],Z[9],Z[10],Z[11],Z[12],Z[13],Z[14],Z[15],Z[16],Z[17],Z[18],Z[19],Z[20],Z[21])}reset(){this.init()}}G91.NuidImpl=Sj0;G91.nuid=new Sj0});var K91=f((J91)=>{Object.defineProperty(J91,"__esModule",{value:!0});J91.nuid=J91.Nuid=void 0;var $91=Q91();J91.Nuid=$91.NuidImpl;J91.nuid=$91.nuid});var Yo=f((Go)=>{Object.defineProperty(Go,"__esModule",{value:!0});Go.nuid=Go.Nuid=void 0;var N91=K91();Object.defineProperty(Go,"Nuid",{enumerable:!0,get:function(){return N91.Nuid}});Object.defineProperty(Go,"nuid",{enumerable:!0,get:function(){return N91.nuid}})});var ZU=f((F91)=>{Object.defineProperty(F91,"__esModule",{value:!0});F91.DEFAULT_HOST=F91.DEFAULT_PORT=F91.Match=void 0;F91.syncIterator=Kh8;F91.createInbox=Nh8;var Jh8=Yo(),Wh8=sY();F91.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Kh8(Z){let X=Z[Symbol.asyncIterator]();return{async next(){let G=await X.next();if(G.done)return Promise.resolve(null);return Promise.resolve(G.value)}}}function Nh8(Z=""){if(Z=Z||"_INBOX",typeof Z!=="string")throw TypeError("prefix must be a string");return Z.split(".").forEach((X)=>{if(X==="*"||X===">")throw Wh8.InvalidArgumentError.format("prefix",`cannot have wildcards ('${Z}')`)}),`${Z}.${Jh8.nuid.next()}`}F91.DEFAULT_PORT=4222;F91.DEFAULT_HOST="127.0.0.1"});var Fh=f((O91)=>{Object.defineProperty(O91,"__esModule",{value:!0});O91.DataBuffer=void 0;var H91=aY();class w91{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...Z){let X=0;for(let Q=0;Q<Z.length;Q++)X+=Z[Q].length;let G=new Uint8Array(X),Y=0;for(let Q=0;Q<Z.length;Q++)G.set(Z[Q],Y),Y+=Z[Q].length;return G}static fromAscii(Z){if(!Z)Z="";return H91.TE.encode(Z)}static toAscii(Z){return H91.TD.decode(Z)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let Z=new Uint8Array(this.byteLength),X=0;for(let G=0;G<this.buffers.length;G++)Z.set(this.buffers[G],X),X+=this.buffers[G].length;this.buffers.length=0,this.buffers.push(Z)}}shift(){if(this.buffers.length){let Z=this.buffers.shift();if(Z)return this.byteLength-=Z.length,Z}return new Uint8Array(0)}drain(Z){if(this.buffers.length){this.pack();let X=this.buffers.pop();if(X){let G=this.byteLength;if(Z===void 0||Z>G)Z=G;let Y=X.subarray(0,Z);if(G>Z)this.buffers.push(X.subarray(Z));return this.byteLength=G-Z,Y}}return new Uint8Array(0)}fill(Z,...X){if(Z)this.buffers.push(Z),this.byteLength+=Z.length;for(let G=0;G<X.length;G++)if(X[G]&&X[G].length)this.buffers.push(X[G]),this.byteLength+=X[G].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}O91.DataBuffer=w91});var nO=f((E91)=>{Object.defineProperty(E91,"__esModule",{value:!0});E91.LF=E91.CR=E91.CRLF=E91.CR_LF_LEN=E91.CR_LF=void 0;E91.setTransportFactory=Eh8;E91.defaultPort=Lh8;E91.getUrlParseFn=zh8;E91.newTransport=jh8;E91.getResolveFn=Ah8;E91.protoLen=D91;E91.extractProtocolMessage=Ph8;var Oh8=aY(),Bh8=ZU(),Dh8=Fh(),eY;function Eh8(Z){eY=Z}function Lh8(){return eY!==void 0&&eY.defaultPort!==void 0?eY.defaultPort:Bh8.DEFAULT_PORT}function zh8(){return eY!==void 0&&eY.urlParseFn?eY.urlParseFn:void 0}function jh8(){if(!eY||typeof eY.factory!=="function")throw Error("transport fn is not set");return eY.factory()}function Ah8(){return eY!==void 0&&eY.dnsResolveFn?eY.dnsResolveFn:void 0}E91.CR_LF=`\r
|
|
5
5
|
`;E91.CR_LF_LEN=E91.CR_LF.length;E91.CRLF=Dh8.DataBuffer.fromAscii(E91.CR_LF);E91.CR=new Uint8Array(E91.CRLF)[0];E91.LF=new Uint8Array(E91.CRLF)[1];function D91(Z){for(let X=0;X<Z.length;X++){let G=X+1;if(Z.byteLength>G&&Z[X]===E91.CR&&Z[G]===E91.LF)return G+1}return 0}function Ph8(Z){let X=D91(Z);if(X>0){let Y=new Uint8Array(Z).slice(0,X);return Oh8.TD.decode(Y)}return""}});var vj0=f((I91)=>{Object.defineProperty(I91,"__esModule",{value:!0});I91.ipV4=P91;I91.isIP=bh8;I91.parseIP=T91;var Uh=4,pO=16,Qo=48,A91=57,z91=65,Ch8=70,j91=97,fh8=102,bj0=16777215;function P91(Z,X,G,Y){let Q=new Uint8Array(pO);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((J,W)=>{Q[W]=J}),Q[12]=Z,Q[13]=X,Q[14]=G,Q[15]=Y,Q}function bh8(Z){return T91(Z)!==void 0}function T91(Z){for(let X=0;X<Z.length;X++)switch(Z[X]){case".":return R91(Z);case":":return vh8(Z)}return}function R91(Z){let X=new Uint8Array(Uh);for(let G=0;G<Uh;G++){if(Z.length===0)return;if(G>0){if(Z[0]!==".")return;Z=Z.substring(1)}let{n:Y,c:Q,ok:$}=xh8(Z);if(!$||Y>255)return;Z=Z.substring(Q),X[G]=Y}return P91(X[0],X[1],X[2],X[3])}function vh8(Z){let X=new Uint8Array(pO),G=-1;if(Z.length>=2&&Z[0]===":"&&Z[1]===":"){if(G=0,Z=Z.substring(2),Z.length===0)return X}let Y=0;while(Y<pO){let{n:Q,c:$,ok:J}=_h8(Z);if(!J||Q>65535)return;if($<Z.length&&Z[$]==="."){if(G<0&&Y!=pO-Uh)return;if(Y+Uh>pO)return;let W=R91(Z);if(W===void 0)return;X[Y]=W[12],X[Y+1]=W[13],X[Y+2]=W[14],X[Y+3]=W[15],Z="",Y+=Uh;break}if(X[Y]=Q>>8,X[Y+1]=Q,Y+=2,Z=Z.substring($),Z.length===0)break;if(Z[0]!==":"||Z.length==1)return;if(Z=Z.substring(1),Z[0]===":"){if(G>=0)return;if(G=Y,Z=Z.substring(1),Z.length===0)break}}if(Z.length!==0)return;if(Y<pO){if(G<0)return;let Q=pO-Y;for(let $=Y-1;$>=G;$--)X[$+Q]=X[$];for(let $=G+Q-1;$>=G;$--)X[$]=0}else if(G>=0)return;return X}function xh8(Z){let X=0,G=0;for(X=0;X<Z.length&&Qo<=Z.charCodeAt(X)&&Z.charCodeAt(X)<=A91;X++)if(G=G*10+(Z.charCodeAt(X)-Qo),G>=bj0)return{n:bj0,c:X,ok:!1};if(X===0)return{n:0,c:0,ok:!1};return{n:G,c:X,ok:!0}}function _h8(Z){let X=0,G=0;for(G=0;G<Z.length;G++){if(Qo<=Z.charCodeAt(G)&&Z.charCodeAt(G)<=A91)X*=16,X+=Z.charCodeAt(G)-Qo;else if(j91<=Z.charCodeAt(G)&&Z.charCodeAt(G)<=fh8)X*=16,X+=Z.charCodeAt(G)-j91+10;else if(z91<=Z.charCodeAt(G)&&Z.charCodeAt(G)<=Ch8)X*=16,X+=Z.charCodeAt(G)-z91+10;else break;if(X>=bj0)return{n:0,c:G,ok:!1}}if(G===0)return{n:0,c:G,ok:!1};return{n:X,c:G,ok:!0}}});var uj0=f((M91)=>{Object.defineProperty(M91,"__esModule",{value:!0});M91.Servers=M91.ServerImpl=void 0;M91.isIPV4OrHostname=q91;M91.hostPort=hj0;var xj0=nO(),_j0=F$(),yj0=vj0(),uh8=ZU(),ch8=sY();function q91(Z){if(Z.indexOf("[")!==-1||Z.indexOf("::")!==-1)return!1;if(Z.indexOf(".")!==-1)return!0;if(Z.split(":").length<=2)return!0;return!1}function gj0(Z){return!q91(Z)}function lh8(Z){let G=Z.toUpperCase().indexOf("::FFFF:");if(G!==-1&&Z.indexOf(".")!==-1){let Y=Z.substring(G+7);return Y=Y.replace("[",""),Y.replace("]","")}return Z}function hj0(Z){if(Z=Z.trim(),Z.match(/^(.*:\/\/)(.*)/m))Z=Z.replace(/^(.*:\/\/)(.*)/gm,"$2");if(Z=lh8(Z),gj0(Z)&&Z.indexOf("[")===-1)Z=`[${Z}]`;let X=gj0(Z)?Z.match(/(]:)(\d+)/):Z.match(/(:)(\d+)/),G=X&&X.length===3&&X[1]&&X[2]?parseInt(X[2]):uh8.DEFAULT_PORT,Q=new URL(`${G===80?"https":"http"}://${Z}`);Q.port=`${G}`;let $=Q.hostname;if($.charAt(0)==="[")$=$.substring(1,$.length-1);return{listen:Q.host,hostname:$,port:G}}class eC{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor(Z,X=!1){this.src=Z,this.tlsName="";let G=hj0(Z);this.listen=G.listen,this.hostname=G.hostname,this.port=G.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=X}toString(){return this.listen}async resolve(Z){if(!Z.fn||Z.resolve===!1)return[this];let X=[];if((0,yj0.isIP)(this.hostname))return[this];else{let G=await Z.fn(this.hostname);if(Z.debug)console.log(`resolve ${this.hostname} = ${G.join(",")}`);for(let Y of G){let Q=this.port===80?"https":"http",$=new URL(`${Q}://${gj0(Y)?"["+Y+"]":Y}`);$.port=`${this.port}`;let J=new eC($.host,!1);J.tlsName=this.hostname,X.push(J)}}if(Z.randomize)(0,_j0.shuffle)(X);return this.resolves=X,X}}M91.ServerImpl=eC;class $o{firstSelect;servers;currentServer;tlsName;randomize;constructor(Z={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=Z.randomize||!1}setServers(Z){if(!Array.isArray(Z)||Z.length===0)throw ch8.InvalidArgumentError.format("servers","cannot be empty");let X=(0,xj0.getUrlParseFn)(),G=new Map;for(let Q of this.servers)G.set(Q.listen,Q);let Y=[];for(let Q of Z){Q=X?X(Q):Q;let{listen:$}=hj0(Q),J=G.get($);if(J)J.gossiped=!1,Y.push(J);else Y.push(new eC(Q))}if(this.randomize)(0,_j0.shuffle)(Y);if(this.servers=Y,this.currentServer===void 0||!Y.includes(this.currentServer))this.currentServer=Y[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let Z=this.getCurrentServer();if(!(0,yj0.isIP)(Z.hostname))this.tlsName=Z.hostname,this.servers.forEach((X)=>{if(X.gossiped)X.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer(Z,X=!1){let G=(0,xj0.getUrlParseFn)();Z=G?G(Z):Z;let Y=new eC(Z,X);if((0,yj0.isIP)(Y.hostname))Y.tlsName=this.tlsName;this.servers.push(Y)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let Z=this.servers.shift();if(Z)this.servers.push(Z),this.currentServer=Z;return Z}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer(Z){if(Z){let X=this.servers.indexOf(Z);this.servers.splice(X,1)}}snapshot(){return $o.freezeAll(this.servers)}snapshotForHandler(){let Z=this.currentServer;if(!Z)return this.snapshot();let X=this.servers.indexOf(Z);if(X<=0)return this.snapshot();return $o.freezeAll([Z,...this.servers.slice(0,X),...this.servers.slice(X+1)])}static freezeAll(Z){return Z.map((X)=>Object.freeze({hostname:X.hostname,port:X.port,listen:X.listen,src:X.src,tlsName:X.tlsName,reconnects:X.reconnects,lastConnect:X.lastConnect,gossiped:X.gossiped,didConnect:X.didConnect}))}find(Z){return this.servers.find((X)=>X.listen===Z.listen)}setCurrent(Z){this.currentServer=Z}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update(Z,X){let G=[],Y=[],Q=(0,xj0.getUrlParseFn)(),$=new Map;if(Z.connect_urls&&Z.connect_urls.length>0)Z.connect_urls.forEach((W)=>{W=Q?Q(W,X):W;let K=new eC(W,!0);$.set(W,K)});let J=[];if(this.servers.forEach((W,K)=>{let N=W.listen;if(W.gossiped&&this.currentServer.listen!==N&&$.get(N)===void 0)J.push(K);$.delete(N)}),J.reverse(),J.forEach((W)=>{let K=this.servers.splice(W,1);Y=Y.concat(K[0].listen)}),$.forEach((W,K)=>{this.servers.push(W),G.push(K)}),this.randomize&&G.length>0){let W=this.currentServer,K=this.servers.filter((N)=>N!==W);(0,_j0.shuffle)(K),this.servers=W?[W,...K]:K}return{added:G,deleted:Y}}}M91.Servers=$o});var Jo=f((C91)=>{Object.defineProperty(C91,"__esModule",{value:!0});C91.QueuedIteratorImpl=void 0;var cj0=F$(),S91=sY();class V91{inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,cj0.deferred)(),this.yields=[],this.iterClosed=(0,cj0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push(Z){if(this.done)return;if(this.didBreak){if(typeof Z==="function"){let X=Z;try{X()}catch(G){}}return}if(typeof Z==="function")this.pendingFiltered++;this.yields.push(Z),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new S91.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new S91.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let Z=this.yields;this.inflight=Z.length,this.yields=[];for(let X=0;X<Z.length;X++){if(typeof Z[X]==="function"){this.pendingFiltered--;let Y=Z[X];try{Y()}catch(Q){throw Q}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let G=this.profile?Date.now():0;yield Z[X],this.time=this.profile?Date.now()-G:0}if(this.done)break;else if(this.yields.length===0)Z.length=0,this.yields=Z,this.signal=(0,cj0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop(Z){if(this.done)return;this.err=Z,this.done=!0,this.signal.resolve(),this.iterClosed.resolve(Z)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}C91.QueuedIteratorImpl=V91});var lj0=f((x91)=>{Object.defineProperty(x91,"__esModule",{value:!0});x91.MuxSubscription=void 0;var nh8=ZU(),b91=sY();class v91{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init(Z){return this.baseInbox=`${(0,nh8.createInbox)(Z)}.`,this.baseInbox}add(Z){if(!isNaN(Z.received))Z.received=0;this.reqs.set(Z.token,Z)}get(Z){return this.reqs.get(Z)}cancel(Z){this.reqs.delete(Z.token)}getToken(Z){let X=Z.subject||"";if(X.indexOf(this.baseInbox)===0)return X.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError(Z,X){if(Z)return this.all().forEach((G)=>{G.resolver(X,{})}),!0;if(X.operation==="publish"){let G=this.all().find((Y)=>{return Y.requestSubject===X.subject});if(G)return G.resolver(X,{}),!0}return!1}dispatcher(){return(Z,X)=>{let G=this.getToken(X);if(G){let Y=this.get(G);if(Y){if(Z===null)Z=X?.data?.length===0&&X.headers?.code===503?new b91.NoRespondersError(Y.requestSubject):null;Y.resolver(Z,X)}}}}close(){let Z=new b91.RequestError("connection closed");this.reqs.forEach((X)=>{X.resolver(Z,{})})}}x91.MuxSubscription=v91});var dj0=f((g91)=>{Object.defineProperty(g91,"__esModule",{value:!0});g91.Heartbeat=void 0;var ph8=F$();class y91{ph;interval;maxOut;timer;pendings;constructor(Z,X,G){this.ph=Z,this.interval=X,this.maxOut=G,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel(Z){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),Z)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let Z=(0,ph8.deferred)();this.ph.flush(Z).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push(Z),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter((Z)=>{return Z.resolve(),!1})}}g91.Heartbeat=y91});var nj0=f((d91)=>{Object.defineProperty(d91,"__esModule",{value:!0});d91.DenoBuffer=d91.MAX_SIZE=d91.AssertionError=void 0;d91.assert=c91;d91.concat=l91;d91.append=rh8;d91.readAll=oh8;d91.writeAll=ah8;var th8=aY();class mj0 extends Error{constructor(Z){super(Z);this.name="AssertionError"}}d91.AssertionError=mj0;function c91(Z,X="Assertion failed."){if(!Z)throw new mj0(X)}var u91=32768;d91.MAX_SIZE=4294967294;function Wo(Z,X,G=0){let Y=X.byteLength-G;if(Z.byteLength>Y)Z=Z.subarray(0,Y);return X.set(Z,G),Z.byteLength}function l91(Z,X){if(Z===void 0&&X===void 0)return new Uint8Array(0);if(Z===void 0)return X;if(X===void 0)return Z;let G=new Uint8Array(Z.length+X.length);return G.set(Z,0),G.set(X,Z.length),G}function rh8(Z,X){return l91(Z,Uint8Array.of(X))}class ij0{_buf;_off;constructor(Z){if(this._off=0,Z==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array(Z)}bytes(Z={copy:!0}){if(Z.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate(Z){if(Z===0){this.reset();return}if(Z<0||Z>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+Z)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice(Z){let X=this._buf.byteLength;if(Z<=this.capacity-X)return this._reslice(X+Z),X;return-1}_reslice(Z){c91(Z<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,Z)}readByte(){let Z=new Uint8Array(1);if(this.read(Z))return Z[0];return null}read(Z){if(this.empty()){if(this.reset(),Z.byteLength===0)return 0;return null}let X=Wo(this._buf.subarray(this._off),Z);return this._off+=X,X}writeByte(Z){return this.write(Uint8Array.of(Z))}writeString(Z){return this.write(th8.TE.encode(Z))}write(Z){let X=this._grow(Z.byteLength);return Wo(Z,this._buf,X)}_grow(Z){let X=this.length;if(X===0&&this._off!==0)this.reset();let G=this._tryGrowByReslice(Z);if(G>=0)return G;let Y=this.capacity;if(Z<=Math.floor(Y/2)-X)Wo(this._buf.subarray(this._off),this._buf);else if(Y+Z>d91.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Q=new Uint8Array(Math.min(2*Y+Z,d91.MAX_SIZE));Wo(this._buf.subarray(this._off),Q),this._buf=Q}return this._off=0,this._reslice(Math.min(X+Z,d91.MAX_SIZE)),X}grow(Z){if(Z<0)throw Error("Buffer._grow: negative count");let X=this._grow(Z);this._reslice(X)}readFrom(Z){let X=0,G=new Uint8Array(u91);while(!0){let Y=this.capacity-this.length<u91,Q=Y?G:new Uint8Array(this._buf.buffer,this.length),$=Z.read(Q);if($===null)return X;if(Y)this.write(Q.subarray(0,$));else this._reslice(this.length+$);X+=$}}}d91.DenoBuffer=ij0;function oh8(Z){let X=new ij0;return X.readFrom(Z),X.bytes()}function ah8(Z,X){let G=0;while(G<X.length)G+=Z.write(X.subarray(G))}});var rj0=f((t91)=>{Object.defineProperty(t91,"__esModule",{value:!0});t91.cc=t91.State=t91.Parser=t91.Kind=void 0;t91.describe=Qu8;var pj0=nj0(),tj0=aY();t91.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function Qu8(Z){let X,G="";switch(Z.kind){case t91.Kind.MSG:X="MSG";break;case t91.Kind.OK:X="OK";break;case t91.Kind.ERR:X="ERR",G=tj0.TD.decode(Z.data);break;case t91.Kind.PING:X="PING";break;case t91.Kind.PONG:X="PONG";break;case t91.Kind.INFO:X="INFO",G=tj0.TD.decode(Z.data)}return`${X}: ${G}`}function i91(){let Z={};return Z.sid=-1,Z.hdr=-1,Z.size=-1,Z}var n91=48,$u8=57,Zf=67108864;class p91{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor(Z){this.dispatcher=Z,this.state=t91.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse(Z){let X;for(X=0;X<Z.length;X++){let G=Z[X];switch(this.state){case t91.State.OP_START:switch(G){case t91.cc.M:case t91.cc.m:this.state=t91.State.OP_M,this.hdr=-1,this.ma=i91();break;case t91.cc.H:case t91.cc.h:this.state=t91.State.OP_H,this.hdr=0,this.ma=i91();break;case t91.cc.P:case t91.cc.p:this.state=t91.State.OP_P;break;case t91.cc.PLUS:this.state=t91.State.OP_PLUS;break;case t91.cc.MINUS:this.state=t91.State.OP_MINUS;break;case t91.cc.I:case t91.cc.i:this.state=t91.State.OP_I;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_H:switch(G){case t91.cc.M:case t91.cc.m:this.state=t91.State.OP_M;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_M:switch(G){case t91.cc.S:case t91.cc.s:this.state=t91.State.OP_MS;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_MS:switch(G){case t91.cc.G:case t91.cc.g:this.state=t91.State.OP_MSG;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_MSG:switch(G){case t91.cc.SPACE:case t91.cc.TAB:this.state=t91.State.OP_MSG_SPC;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_MSG_SPC:switch(G){case t91.cc.SPACE:case t91.cc.TAB:continue;default:this.state=t91.State.MSG_ARG,this.as=X}break;case t91.State.MSG_ARG:switch(G){case t91.cc.CR:this.drop=1;break;case t91.cc.NL:{let Y=this.argBuf?this.argBuf.bytes():Z.subarray(this.as,X-this.drop);this.processMsgArgs(Y),this.drop=0,this.as=X+1,this.state=t91.State.MSG_PAYLOAD,X=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(G)}break;case t91.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Y=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:t91.Kind.MSG,msg:this.ma,data:Y}),this.argBuf=void 0,this.msgBuf=void 0,this.state=t91.State.MSG_END}else{let Y=this.ma.size-this.msgBuf.length,Q=Z.length-X;if(Q<Y)Y=Q;if(Y>0)this.msgBuf.write(Z.subarray(X,X+Y)),X=X+Y-1;else this.msgBuf.writeByte(G)}else if(X-this.as>=this.ma.size)this.dispatcher.push({kind:t91.Kind.MSG,msg:this.ma,data:Z.subarray(this.as,X)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=t91.State.MSG_END;break;case t91.State.MSG_END:switch(G){case t91.cc.NL:this.drop=0,this.as=X+1,this.state=t91.State.OP_START;break;default:continue}break;case t91.State.OP_PLUS:switch(G){case t91.cc.O:case t91.cc.o:this.state=t91.State.OP_PLUS_O;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_PLUS_O:switch(G){case t91.cc.K:case t91.cc.k:this.state=t91.State.OP_PLUS_OK;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_PLUS_OK:switch(G){case t91.cc.NL:this.dispatcher.push({kind:t91.Kind.OK}),this.drop=0,this.state=t91.State.OP_START;break}break;case t91.State.OP_MINUS:switch(G){case t91.cc.E:case t91.cc.e:this.state=t91.State.OP_MINUS_E;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_MINUS_E:switch(G){case t91.cc.R:case t91.cc.r:this.state=t91.State.OP_MINUS_ER;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_MINUS_ER:switch(G){case t91.cc.R:case t91.cc.r:this.state=t91.State.OP_MINUS_ERR;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_MINUS_ERR:switch(G){case t91.cc.SPACE:case t91.cc.TAB:this.state=t91.State.OP_MINUS_ERR_SPC;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_MINUS_ERR_SPC:switch(G){case t91.cc.SPACE:case t91.cc.TAB:continue;default:this.state=t91.State.MINUS_ERR_ARG,this.as=X}break;case t91.State.MINUS_ERR_ARG:switch(G){case t91.cc.CR:this.drop=1;break;case t91.cc.NL:{let Y;if(this.argBuf)Y=this.argBuf.bytes(),this.argBuf=void 0;else Y=Z.subarray(this.as,X-this.drop);this.dispatcher.push({kind:t91.Kind.ERR,data:Y}),this.drop=0,this.as=X+1,this.state=t91.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(G))}break;case t91.State.OP_P:switch(G){case t91.cc.I:case t91.cc.i:this.state=t91.State.OP_PI;break;case t91.cc.O:case t91.cc.o:this.state=t91.State.OP_PO;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_PO:switch(G){case t91.cc.N:case t91.cc.n:this.state=t91.State.OP_PON;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_PON:switch(G){case t91.cc.G:case t91.cc.g:this.state=t91.State.OP_PONG;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_PONG:switch(G){case t91.cc.NL:this.dispatcher.push({kind:t91.Kind.PONG}),this.drop=0,this.state=t91.State.OP_START;break}break;case t91.State.OP_PI:switch(G){case t91.cc.N:case t91.cc.n:this.state=t91.State.OP_PIN;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_PIN:switch(G){case t91.cc.G:case t91.cc.g:this.state=t91.State.OP_PING;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_PING:switch(G){case t91.cc.NL:this.dispatcher.push({kind:t91.Kind.PING}),this.drop=0,this.state=t91.State.OP_START;break}break;case t91.State.OP_I:switch(G){case t91.cc.N:case t91.cc.n:this.state=t91.State.OP_IN;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_IN:switch(G){case t91.cc.F:case t91.cc.f:this.state=t91.State.OP_INF;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_INF:switch(G){case t91.cc.O:case t91.cc.o:this.state=t91.State.OP_INFO;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_INFO:switch(G){case t91.cc.SPACE:case t91.cc.TAB:this.state=t91.State.OP_INFO_SPC;break;default:throw this.fail(Z.subarray(X))}break;case t91.State.OP_INFO_SPC:switch(G){case t91.cc.SPACE:case t91.cc.TAB:continue;default:this.state=t91.State.INFO_ARG,this.as=X}break;case t91.State.INFO_ARG:switch(G){case t91.cc.CR:this.drop=1;break;case t91.cc.NL:{let Y;if(this.argBuf)Y=this.argBuf.bytes(),this.argBuf=void 0;else Y=Z.subarray(this.as,X-this.drop);this.dispatcher.push({kind:t91.Kind.INFO,data:Y}),this.drop=0,this.as=X+1,this.state=t91.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(G)}break;default:throw this.fail(Z.subarray(X))}}if((this.state===t91.State.MSG_ARG||this.state===t91.State.MINUS_ERR_ARG||this.state===t91.State.INFO_ARG)&&!this.argBuf)this.argBuf=new pj0.DenoBuffer(Z.subarray(this.as,X-this.drop));if(this.state===t91.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new pj0.DenoBuffer(Z.subarray(this.as))}}cloneMsgArg(){let Z=this.ma.subject.length,X=this.ma.reply?this.ma.reply.length:0,G=new Uint8Array(Z+X);if(G.set(this.ma.subject),this.ma.reply)G.set(this.ma.reply,Z);if(this.argBuf=new pj0.DenoBuffer(G),this.ma.subject=G.subarray(0,Z),this.ma.reply)this.ma.reply=G.subarray(Z)}processMsgArgs(Z){if(this.hdr>=0)return this.processHeaderMsgArgs(Z);let X=[],G=-1;for(let Y=0;Y<Z.length;Y++)switch(Z[Y]){case t91.cc.SPACE:case t91.cc.TAB:case t91.cc.CR:case t91.cc.NL:if(G>=0)X.push(Z.subarray(G,Y)),G=-1;break;default:if(G<0)G=Y}if(G>=0)X.push(Z.subarray(G));switch(X.length){case 3:this.ma.subject=X[0],this.ma.sid=this.protoParseInt(X[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(X[2],Zf);break;case 4:this.ma.subject=X[0],this.ma.sid=this.protoParseInt(X[1]),this.ma.reply=X[2],this.ma.size=this.protoParseInt(X[3],Zf);break;default:throw this.fail(Z,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail(Z,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail(Z,"processMsgArgs Bad or Missing Size Error")}fail(Z,X=""){if(!X)X=`parse error [${this.state}]`;else X=`${X} [${this.state}]`;return Error(`${X}: ${tj0.TD.decode(Z)}`)}processHeaderMsgArgs(Z){let X=[],G=-1;for(let Y=0;Y<Z.length;Y++)switch(Z[Y]){case t91.cc.SPACE:case t91.cc.TAB:case t91.cc.CR:case t91.cc.NL:if(G>=0)X.push(Z.subarray(G,Y)),G=-1;break;default:if(G<0)G=Y}if(G>=0)X.push(Z.subarray(G));switch(X.length){case 4:this.ma.subject=X[0],this.ma.sid=this.protoParseInt(X[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(X[2],Zf),this.ma.size=this.protoParseInt(X[3],Zf);break;case 5:this.ma.subject=X[0],this.ma.sid=this.protoParseInt(X[1]),this.ma.reply=X[2],this.ma.hdr=this.protoParseInt(X[3],Zf),this.ma.size=this.protoParseInt(X[4],Zf);break;default:throw this.fail(Z,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail(Z,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail(Z,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail(Z,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt(Z,X){if(Z.length===0||Z.length>15)return-1;let G=0;for(let Y=0;Y<Z.length;Y++){if(Z[Y]<n91||Z[Y]>$u8)return-1;G=G*10+(Z[Y]-n91)}return X!==void 0&&G>X?-1:G}}t91.Parser=p91;t91.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};t91.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var Fo=f((o91)=>{Object.defineProperty(o91,"__esModule",{value:!0});o91.MsgHdrsImpl=void 0;o91.canonicalMIMEHeaderKey=aj0;o91.headers=Ku8;var r91=aY(),U$=ZU(),No=sY();function aj0(Z){let F=!0,U=Array(Z.length);for(let H=0;H<Z.length;H++){let w=Z.charCodeAt(H);if(w===58||w<33||w>126)throw No.InvalidArgumentError.format("header",`'${Z[H]}' is not a valid character in a header name`);if(F&&97<=w&&w<=122)w-=32;else if(!F&&65<=w&&w<=90)w+=32;U[H]=w,F=w==45}return String.fromCharCode(...U)}function Ku8(Z=0,X=""){if(Z===0&&X!=="")throw No.InvalidArgumentError.format("code","is required");else if(Z>0&&X==="")throw No.InvalidArgumentError.format("description","is required");return new Xf(Z,X)}var oj0="NATS/1.0";class Xf{_code;headers;_description;constructor(Z=0,X=""){this._code=Z,this._description=X,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals(Z){if(Z&&this.headers.size===Z.headers.size&&this._code===Z._code){for(let[X,G]of this.headers){let Y=Z.values(X);if(G.length!==Y.length)return!1;let Q=[...G].sort(),$=[...Y].sort();for(let J=0;J<Q.length;J++)if(Q[J]!==$[J])return!1}return!0}return!1}static decode(Z){let X=new Xf,Y=r91.TD.decode(Z).split(`\r
|
|
@@ -1214,7 +1214,7 @@ conversation.
|
|
|
1214
1214
|
`);let Y=X.pax;if(Y)for(let Q in Y)G+=Vm0(" "+Q+"="+Y[Q]+`
|
|
1215
1215
|
`);return c6.from(G)};mX6.decodePax=function(X){let G={};while(X.length){let Y=0;while(Y<X.length&&X[Y]!==32)Y++;let Q=parseInt(c6.toString(X.subarray(0,Y)),10);if(!Q)return G;let $=c6.toString(X.subarray(Y+1,Q-1)),J=$.indexOf("=");if(J===-1)return G;G[$.slice(0,J)]=$.slice(J+1),X=X.subarray(Q)}return G};mX6.encode=function(X){let G=c6.alloc(512),Y=X.name,Q="";if(X.typeflag===5&&Y[Y.length-1]!=="/")Y+="/";if(c6.byteLength(Y)!==Y.length)return null;while(c6.byteLength(Y)>100){let $=Y.indexOf("/");if($===-1)return null;Q+=Q?"/"+Y.slice(0,$):Y.slice(0,$),Y=Y.slice($+1)}if(c6.byteLength(Y)>100||c6.byteLength(Q)>155)return null;if(X.linkname&&c6.byteLength(X.linkname)>100)return null;if(c6.write(G,Y),c6.write(G,fw(X.mode&4095,6),100),c6.write(G,fw(X.uid,6),108),c6.write(G,fw(X.gid,6),116),lX6(X.size,G,124),c6.write(G,fw(X.mtime.getTime()/1000|0,11),136),G[156]=48+uX6(X.type),X.linkname)c6.write(G,X.linkname,157);if(c6.copy(BZ8,G,257),c6.copy(bX6,G,263),X.uname)c6.write(G,X.uname,265);if(X.gname)c6.write(G,X.gname,297);if(c6.write(G,fw(X.devmajor||0,6),329),c6.write(G,fw(X.devminor||0,6),337),Q)c6.write(G,Q,345);return c6.write(G,fw(EZ8(G),6),148),G};mX6.decode=function(X,G,Y){let Q=X[156]===0?0:X[156]-48,$=y_(X,0,100,G),J=Cw(X,100,8),W=Cw(X,108,8),K=Cw(X,116,8),N=Cw(X,124,12),F=Cw(X,136,12),U=hX6(Q),H=X[157]===0?null:y_(X,157,100,G),w=y_(X,265,32),O=y_(X,297,32),D=Cw(X,329,8),E=Cw(X,337,8),L=EZ8(X);if(L===256)return null;if(L!==Cw(X,148,8))throw Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(_X6(X)){if(X[345])$=y_(X,345,155,G)+"/"+$}else if(yX6(X));else if(!Y)throw Error("Invalid tar header: unknown format.");if(Q===0&&$&&$[$.length-1]==="/")Q=5;return{name:$,mode:J,uid:W,gid:K,size:N,mtime:new Date(1000*F),type:U,linkname:H,uname:w,gname:O,devmajor:D,devminor:E,pax:null}};function _X6(Z){return c6.equals(BZ8,Z.subarray(257,263))}function yX6(Z){return c6.equals(vX6,Z.subarray(257,263))&&c6.equals(xX6,Z.subarray(263,265))}function gX6(Z,X,G){if(typeof Z!=="number")return G;if(Z=~~Z,Z>=X)return X;if(Z>=0)return Z;if(Z+=X,Z>=0)return Z;return 0}function hX6(Z){switch(Z){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null}function uX6(Z){switch(Z){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0}function DZ8(Z,X,G,Y){for(;G<Y;G++)if(Z[G]===X)return G;return Y}function EZ8(Z){let X=256;for(let G=0;G<148;G++)X+=Z[G];for(let G=156;G<512;G++)X+=Z[G];return X}function fw(Z,X){if(Z=Z.toString(8),Z.length>X)return"7777777777777777777".slice(0,X)+" ";return"0000000000000000000".slice(0,X-Z.length)+Z+" "}function cX6(Z,X,G){X[G]=128;for(let Y=11;Y>0;Y--)X[G+Y]=Z&255,Z=Math.floor(Z/256)}function lX6(Z,X,G){if(Z.toString(8).length>11)cX6(Z,X,G);else c6.write(X,fw(Z,11),G)}function dX6(Z){let X;if(Z[0]===128)X=!0;else if(Z[0]===255)X=!1;else return null;let G=[],Y;for(Y=Z.length-1;Y>0;Y--){let J=Z[Y];if(X)G.push(J);else G.push(255-J)}let Q=0,$=G.length;for(Y=0;Y<$;Y++)Q+=G[Y]*Math.pow(256,Y);return X?Q:-1*Q}function Cw(Z,X,G){if(Z=Z.subarray(X,X+G),X=0,Z[X]&128)return dX6(Z);else{while(X<Z.length&&Z[X]===32)X++;let Y=gX6(DZ8(Z,32,X,Z.length),Z.length,Z.length);while(X<Y&&Z[X]===0)X++;if(Y===X)return 0;return parseInt(c6.toString(Z.subarray(X,Y)),8)}}function y_(Z,X,G,Y){return c6.toString(Z.subarray(X,DZ8(Z,0,X,X+G)),Y)}function Vm0(Z){let X=c6.byteLength(Z),G=Math.floor(Math.log(X)/Math.log(10))+1;if(X+G>=Math.pow(10,G))G++;return X+G+Z}});var IZ8=f((EDZ,RZ8)=>{var{Writable:oX6,Readable:aX6,getStreamError:LZ8}=Sm0(),sX6=Tm0(),zZ8=__(),g_=Cm0(),eX6=zZ8.alloc(0);class jZ8{constructor(){this.buffered=0,this.shifted=0,this.queue=new sX6,this._offset=0}push(Z){this.buffered+=Z.byteLength,this.queue.push(Z)}shiftFirst(Z){return this._buffered===0?null:this._next(Z)}shift(Z){if(Z>this.buffered)return null;if(Z===0)return eX6;let X=this._next(Z);if(Z===X.byteLength)return X;let G=[X];while((Z-=X.byteLength)>0)X=this._next(Z),G.push(X);return zZ8.concat(G)}_next(Z){let X=this.queue.peek(),G=X.byteLength-this._offset;if(Z>=G){let Y=this._offset?X.subarray(this._offset,X.byteLength):X;return this.queue.shift(),this._offset=0,this.buffered-=G,this.shifted+=G,Y}return this.buffered-=Z,this.shifted+=Z,X.subarray(this._offset,this._offset+=Z)}}class AZ8 extends aX6{constructor(Z,X,G){super();this.header=X,this.offset=G,this._parent=Z}_read(Z){if(this.header.size===0)this.push(null);if(this._parent._stream===this)this._parent._update();Z(null)}_predestroy(){this._parent.destroy(LZ8(this))}_detach(){if(this._parent._stream===this)this._parent._stream=null,this._parent._missing=TZ8(this.header.size),this._parent._update()}_destroy(Z){this._detach(),Z(null)}}class PZ8 extends oX6{constructor(Z){super(Z);if(!Z)Z={};this._buffer=new jZ8,this._offset=0,this._header=null,this._stream=null,this._missing=0,this._longHeader=!1,this._callback=fm0,this._locked=!1,this._finished=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null,this._filenameEncoding=Z.filenameEncoding||"utf-8",this._allowUnknownFormat=!!Z.allowUnknownFormat,this._unlockBound=this._unlock.bind(this)}_unlock(Z){if(this._locked=!1,Z){this.destroy(Z),this._continueWrite(Z);return}this._update()}_consumeHeader(){if(this._locked)return!1;this._offset=this._buffer.shifted;try{this._header=g_.decode(this._buffer.shift(512),this._filenameEncoding,this._allowUnknownFormat)}catch(Z){return this._continueWrite(Z),!1}if(!this._header)return!0;switch(this._header.type){case"gnu-long-path":case"gnu-long-link-path":case"pax-global-header":case"pax-header":return this._longHeader=!0,this._missing=this._header.size,!0}if(this._locked=!0,this._applyLongHeaders(),this._header.size===0||this._header.type==="directory")return this.emit("entry",this._header,this._createStream(),this._unlockBound),!0;return this._stream=this._createStream(),this._missing=this._header.size,this.emit("entry",this._header,this._stream,this._unlockBound),!0}_applyLongHeaders(){if(this._gnuLongPath)this._header.name=this._gnuLongPath,this._gnuLongPath=null;if(this._gnuLongLinkPath)this._header.linkname=this._gnuLongLinkPath,this._gnuLongLinkPath=null;if(this._pax){if(this._pax.path)this._header.name=this._pax.path;if(this._pax.linkpath)this._header.linkname=this._pax.linkpath;if(this._pax.size)this._header.size=parseInt(this._pax.size,10);this._header.pax=this._pax,this._pax=null}}_decodeLongHeader(Z){switch(this._header.type){case"gnu-long-path":this._gnuLongPath=g_.decodeLongPath(Z,this._filenameEncoding);break;case"gnu-long-link-path":this._gnuLongLinkPath=g_.decodeLongPath(Z,this._filenameEncoding);break;case"pax-global-header":this._paxGlobal=g_.decodePax(Z);break;case"pax-header":this._pax=this._paxGlobal===null?g_.decodePax(Z):Object.assign({},this._paxGlobal,g_.decodePax(Z));break}}_consumeLongHeader(){this._longHeader=!1,this._missing=TZ8(this._header.size);let Z=this._buffer.shift(this._header.size);try{this._decodeLongHeader(Z)}catch(X){return this._continueWrite(X),!1}return!0}_consumeStream(){let Z=this._buffer.shiftFirst(this._missing);if(Z===null)return!1;this._missing-=Z.byteLength;let X=this._stream.push(Z);if(this._missing===0){if(this._stream.push(null),X)this._stream._detach();return X&&this._locked===!1}return X}_createStream(){return new AZ8(this,this._header,this._offset)}_update(){while(this._buffer.buffered>0&&!this.destroying){if(this._missing>0){if(this._stream!==null){if(this._consumeStream()===!1)return;continue}if(this._longHeader===!0){if(this._missing>this._buffer.buffered)break;if(this._consumeLongHeader()===!1)return!1;continue}let Z=this._buffer.shiftFirst(this._missing);if(Z!==null)this._missing-=Z.byteLength;continue}if(this._buffer.buffered<512)break;if(this._stream!==null||this._consumeHeader()===!1)return}this._continueWrite(null)}_continueWrite(Z){let X=this._callback;this._callback=fm0,X(Z)}_write(Z,X){this._callback=X,this._buffer.push(Z),this._update()}_final(Z){this._finished=this._missing===0&&this._buffer.buffered===0,Z(this._finished?null:Error("Unexpected end of data"))}_predestroy(){this._continueWrite(null)}_destroy(Z){if(this._stream)this._stream.destroy(LZ8(this));Z(null)}[Symbol.asyncIterator](){let Z=null,X=null,G=null,Y=null,Q=null,$=this;return this.on("entry",K),this.on("error",(U)=>{Z=U}),this.on("close",N),{[Symbol.asyncIterator](){return this},next(){return new Promise(W)},return(){return F(null)},throw(U){return F(U)}};function J(U){if(!Q)return;let H=Q;Q=null,H(U)}function W(U,H){if(Z)return H(Z);if(Y){U({value:Y,done:!1}),Y=null;return}if(X=U,G=H,J(null),$._finished&&X)X({value:void 0,done:!0}),X=G=null}function K(U,H,w){if(Q=w,H.on("error",fm0),X)X({value:H,done:!1}),X=G=null;else Y=H}function N(){if(J(Z),!X)return;if(Z)G(Z);else X({value:void 0,done:!0});X=G=null}function F(U){return $.destroy(U),J(U),new Promise((H,w)=>{if($.destroyed)return H({value:void 0,done:!0});$.once("close",function(){if(U)w(U);else H({value:void 0,done:!0})})})}}}RZ8.exports=function(X){return new PZ8(X)};function fm0(){}function TZ8(Z){return Z&=511,Z&&512-Z}});var MZ8=f((LDZ,bm0)=>{var qZ8={S_IFMT:61440,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960};try{bm0.exports=u0("fs").constants||qZ8}catch{bm0.exports=qZ8}});var vZ8=f((zDZ,bZ8)=>{var{Readable:ZG6,Writable:XG6,getStreamError:kZ8}=Sm0(),NV=__(),h_=MZ8(),VH0=Cm0(),SZ8=NV.alloc(1024);class VZ8 extends XG6{constructor(Z,X,G){super({mapWritable:YG6,eagerOpen:!0});if(this.written=0,this.header=X,this._callback=G,this._linkname=null,this._isLinkname=X.type==="symlink"&&!X.linkname,this._isVoid=X.type!=="file"&&X.type!=="contiguous-file",this._finished=!1,this._pack=Z,this._openCallback=null,this._pack._stream===null)this._pack._stream=this;else this._pack._pending.push(this)}_open(Z){if(this._openCallback=Z,this._pack._stream===this)this._continueOpen()}_continuePack(Z){if(this._callback===null)return;let X=this._callback;this._callback=null,X(Z)}_continueOpen(){if(this._pack._stream===null)this._pack._stream=this;let Z=this._openCallback;if(this._openCallback=null,Z===null)return;if(this._pack.destroying)return Z(Error("pack stream destroyed"));if(this._pack._finalized)return Z(Error("pack stream is already finalized"));if(this._pack._stream=this,!this._isLinkname)this._pack._encode(this.header);if(this._isVoid)this._finish(),this._continuePack(null);Z(null)}_write(Z,X){if(this._isLinkname)return this._linkname=this._linkname?NV.concat([this._linkname,Z]):Z,X(null);if(this._isVoid){if(Z.byteLength>0)return X(Error("No body allowed for this entry"));return X()}if(this.written+=Z.byteLength,this._pack.push(Z))return X();this._pack._drain=X}_finish(){if(this._finished)return;if(this._finished=!0,this._isLinkname)this.header.linkname=this._linkname?NV.toString(this._linkname,"utf-8"):"",this._pack._encode(this.header);fZ8(this._pack,this.header.size),this._pack._done(this)}_final(Z){if(this.written!==this.header.size)return Z(Error("Size mismatch"));this._finish(),Z(null)}_getError(){return kZ8(this)||Error("tar entry destroyed")}_predestroy(){this._pack.destroy(this._getError())}_destroy(Z){this._pack._done(this),this._continuePack(this._finished?null:this._getError()),Z()}}class CZ8 extends ZG6{constructor(Z){super(Z);this._drain=vm0,this._finalized=!1,this._finalizing=!1,this._pending=[],this._stream=null}entry(Z,X,G){if(this._finalized||this.destroying)throw Error("already finalized or destroyed");if(typeof X==="function")G=X,X=null;if(!G)G=vm0;if(!Z.size||Z.type==="symlink")Z.size=0;if(!Z.type)Z.type=GG6(Z.mode);if(!Z.mode)Z.mode=Z.type==="directory"?493:420;if(!Z.uid)Z.uid=0;if(!Z.gid)Z.gid=0;if(!Z.mtime)Z.mtime=new Date;if(typeof X==="string")X=NV.from(X);let Y=new VZ8(this,Z,G);if(NV.isBuffer(X))return Z.size=X.byteLength,Y.write(X),Y.end(),Y;if(Y._isVoid)return Y;return Y}finalize(){if(this._stream||this._pending.length>0){this._finalizing=!0;return}if(this._finalized)return;this._finalized=!0,this.push(SZ8),this.push(null)}_done(Z){if(Z!==this._stream)return;if(this._stream=null,this._finalizing)this.finalize();if(this._pending.length)this._pending.shift()._continueOpen()}_encode(Z){if(!Z.pax){let X=VH0.encode(Z);if(X){this.push(X);return}}this._encodePax(Z)}_encodePax(Z){let X=VH0.encodePax({name:Z.name,linkname:Z.linkname,pax:Z.pax}),G={name:"PaxHeader",mode:Z.mode,uid:Z.uid,gid:Z.gid,size:X.byteLength,mtime:Z.mtime,type:"pax-header",linkname:Z.linkname&&"PaxHeader",uname:Z.uname,gname:Z.gname,devmajor:Z.devmajor,devminor:Z.devminor};this.push(VH0.encode(G)),this.push(X),fZ8(this,X.byteLength),G.size=Z.size,G.type=Z.type,this.push(VH0.encode(G))}_doDrain(){let Z=this._drain;this._drain=vm0,Z()}_predestroy(){let Z=kZ8(this);if(this._stream)this._stream.destroy(Z);while(this._pending.length){let X=this._pending.shift();X.destroy(Z),X._continueOpen()}this._doDrain()}_read(Z){this._doDrain(),Z()}}bZ8.exports=function(X){return new CZ8(X)};function GG6(Z){switch(Z&h_.S_IFMT){case h_.S_IFBLK:return"block-device";case h_.S_IFCHR:return"character-device";case h_.S_IFDIR:return"directory";case h_.S_IFIFO:return"fifo";case h_.S_IFLNK:return"symlink"}return"file"}function vm0(){}function fZ8(Z,X){if(X&=511,X)Z.push(SZ8.subarray(0,512-X))}function YG6(Z){return NV.isBuffer(Z)?Z:NV.from(Z)}});var xZ8=f((QG6)=>{QG6.extract=IZ8();QG6.pack=vZ8()});var gZ8=f((ADZ,yZ8)=>{yZ8.exports=_Z8;function _Z8(Z,X){if(Z&&X)return _Z8(Z)(X);if(typeof Z!=="function")throw TypeError("need wrapper function");return Object.keys(Z).forEach(function(Y){G[Y]=Z[Y]}),G;function G(){var Y=Array(arguments.length);for(var Q=0;Q<Y.length;Q++)Y[Q]=arguments[Q];var $=Z.apply(this,Y),J=Y[Y.length-1];if(typeof $==="function"&&$!==J)Object.keys(J).forEach(function(W){$[W]=J[W]});return $}}});var _m0=f((PDZ,xm0)=>{var hZ8=gZ8();xm0.exports=hZ8(CH0);xm0.exports.strict=hZ8(uZ8);CH0.proto=CH0(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return CH0(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return uZ8(this)},configurable:!0})});function CH0(Z){var X=function(){if(X.called)return X.value;return X.called=!0,X.value=Z.apply(this,arguments)};return X.called=!1,X}function uZ8(Z){var X=function(){if(X.called)throw Error(X.onceError);return X.called=!0,X.value=Z.apply(this,arguments)},G=Z.name||"Function wrapped with `once`";return X.onceError=G+" shouldn't be called more than once",X.called=!1,X}});var dZ8=f((TDZ,lZ8)=>{var WG6=_m0(),KG6=function(){},NG6=global.Bare?queueMicrotask:process.nextTick.bind(process),FG6=function(Z){return Z.setHeader&&typeof Z.abort==="function"},UG6=function(Z){return Z.stdio&&Array.isArray(Z.stdio)&&Z.stdio.length===3},cZ8=function(Z,X,G){if(typeof X==="function")return cZ8(Z,null,X);if(!X)X={};G=WG6(G||KG6);var{_writableState:Y,_readableState:Q}=Z,$=X.readable||X.readable!==!1&&Z.readable,J=X.writable||X.writable!==!1&&Z.writable,W=!1,K=function(){if(!Z.writable)N()},N=function(){if(J=!1,!$)G.call(Z)},F=function(){if($=!1,!J)G.call(Z)},U=function(E){G.call(Z,E?Error("exited with error code: "+E):null)},H=function(E){G.call(Z,E)},w=function(){NG6(O)},O=function(){if(W)return;if($&&!(Q&&(Q.ended&&!Q.destroyed)))return G.call(Z,Error("premature close"));if(J&&!(Y&&(Y.ended&&!Y.destroyed)))return G.call(Z,Error("premature close"))},D=function(){Z.req.on("finish",N)};if(FG6(Z))if(Z.on("complete",N),Z.on("abort",w),Z.req)D();else Z.on("request",D);else if(J&&!Y)Z.on("end",K),Z.on("close",K);if(UG6(Z))Z.on("exit",U);if(Z.on("end",F),Z.on("finish",N),X.error!==!1)Z.on("error",H);return Z.on("close",w),function(){if(W=!0,Z.removeListener("complete",N),Z.removeListener("abort",w),Z.removeListener("request",D),Z.req)Z.req.removeListener("finish",N);Z.removeListener("end",K),Z.removeListener("close",K),Z.removeListener("finish",N),Z.removeListener("exit",U),Z.removeListener("end",F),Z.removeListener("error",H),Z.removeListener("close",w)}};lZ8.exports=cZ8});var nZ8=f((RDZ,iZ8)=>{var HG6=_m0(),wG6=dZ8(),fH0;try{fH0=u0("fs")}catch(Z){}var Rn=function(){},OG6=typeof process>"u"?!1:/^v?\.0/.test(process.version),bH0=function(Z){return typeof Z==="function"},BG6=function(Z){if(!OG6)return!1;if(!fH0)return!1;return(Z instanceof(fH0.ReadStream||Rn)||Z instanceof(fH0.WriteStream||Rn))&&bH0(Z.close)},DG6=function(Z){return Z.setHeader&&bH0(Z.abort)},EG6=function(Z,X,G,Y){Y=HG6(Y);var Q=!1;Z.on("close",function(){Q=!0}),wG6(Z,{readable:X,writable:G},function(J){if(J)return Y(J);Q=!0,Y()});var $=!1;return function(J){if(Q)return;if($)return;if($=!0,BG6(Z))return Z.close(Rn);if(DG6(Z))return Z.abort();if(bH0(Z.destroy))return Z.destroy();Y(J||Error("stream was destroyed"))}},mZ8=function(Z){Z()},LG6=function(Z,X){return Z.pipe(X)},zG6=function(){var Z=Array.prototype.slice.call(arguments),X=bH0(Z[Z.length-1]||Rn)&&Z.pop()||Rn;if(Array.isArray(Z[0]))Z=Z[0];if(Z.length<2)throw Error("pump requires two streams per minimum");var G,Y=Z.map(function(Q,$){var J=$<Z.length-1,W=$>0;return EG6(Q,J,W,function(K){if(!G)G=K;if(K)Y.forEach(mZ8);if(J)return;Y.forEach(mZ8),X(G)})});return Z.reduce(LG6)};iZ8.exports=zG6});var X78=f((TG6)=>{var pZ8=xZ8(),tZ8=nZ8(),rZ8=u0("fs"),e9=u0("path"),In=(global.Bare?global.Bare.platform:process.platform)==="win32";TG6.pack=function(X,G){if(!X)X=".";if(!G)G={};let Y=G.fs||rZ8,Q=G.ignore||G.filter||qn,$=G.mapStream||eZ8,J=PG6(Y,G.dereference?Y.stat:Y.lstat,X,Q,G.entries,G.sort),W=G.strict!==!1,K=typeof G.umask==="number"?~G.umask:~oZ8(),N=G.pack||pZ8.pack(),F=G.finish||qn,U=G.map||qn,H=typeof G.dmode==="number"?G.dmode:0,w=typeof G.fmode==="number"?G.fmode:0;if(G.strip)U=Z78(U,G.strip);if(G.readable)H|=parseInt(555,8),w|=parseInt(444,8);if(G.writable)H|=parseInt(333,8),w|=parseInt(222,8);E();function O(L,z){Y.readlink(e9.join(X,L),function(j,P){if(j)return N.destroy(j);z.linkname=ym0(P),N.entry(z,E)})}function D(L,z,j){if(N.destroyed)return;if(L)return N.destroy(L);if(!z){if(G.finalize!==!1)N.finalize();return F(N)}if(j.isSocket())return E();let P={name:ym0(z),mode:(j.mode|(j.isDirectory()?H:w))&K,mtime:j.mtime,size:j.size,type:"file",uid:j.uid,gid:j.gid};if(j.isDirectory())return P.size=0,P.type="directory",P=U(P)||P,N.entry(P,E);if(j.isSymbolicLink())return P.size=0,P.type="symlink",P=U(P)||P,O(z,P);if(P=U(P)||P,!j.isFile()){if(W)return N.destroy(Error("unsupported type for "+z));return E()}let A=N.entry(P,E),I=$(Y.createReadStream(e9.join(X,z),{start:0,end:P.size>0?P.size-1:P.size}),P);I.on("error",function(S){A.destroy(S)}),tZ8(I,A)}function E(L){if(L)return N.destroy(L);J(D)}return N};function jG6(Z){return Z.length?Z[Z.length-1]:null}function AG6(){return!global.Bare&&process.getuid?process.getuid():-1}function oZ8(){return!global.Bare&&process.umask?process.umask():0}TG6.extract=function(X,G){if(!X)X=".";if(!G)G={};X=e9.resolve(X);let Y=G.fs||rZ8,Q=G.ignore||G.filter||qn,$=G.mapStream||eZ8,J=G.chown!==!1&&!In&&AG6()===0,W=G.extract||pZ8.extract(),K=[],N=new Date,F=typeof G.umask==="number"?~G.umask:~oZ8(),U=G.strict!==!1,H=G.validateSymlinks!==!1,w=G.map||qn,O=typeof G.dmode==="number"?G.dmode:0,D=typeof G.fmode==="number"?G.fmode:0;if(G.strip)w=Z78(w,G.strip);if(G.readable)O|=parseInt(555,8),D|=parseInt(444,8);if(G.writable)O|=parseInt(333,8),D|=parseInt(222,8);if(W.on("entry",E),G.finish)W.on("finish",G.finish);return W;function E(A,I,S){A=w(A)||A,A.name=ym0(A.name);let M=e9.join(X,e9.join("/",A.name));if(Q(M,A))return I.resume(),S();let C=e9.join(M,".")===e9.join(X,".")?X:e9.dirname(M);sZ8(Y,C,e9.join(X,"."),function(K0,D0){if(K0)return S(K0);if(!D0)return S(Error(C+" is not a valid path"));if(A.type==="directory")return K.push([M,A.mtime]),P(M,{fs:Y,own:J,uid:A.uid,gid:A.gid,mode:A.mode},m);P(C,{fs:Y,own:J,uid:A.uid,gid:A.gid,mode:493},function(W0){if(W0)return S(W0);switch(A.type){case"file":return p();case"link":return _();case"symlink":return v()}if(U)return S(Error("unsupported type for "+M+" ("+A.type+")"));I.resume(),S()})});function m(K0){if(K0)return S(K0);z(M,A,function(D0){if(D0)return S(D0);if(In)return S();j(M,A,S)})}function v(){if(In)return S();Y.unlink(M,function(){let K0=e9.resolve(e9.dirname(M),A.linkname);if(!Z0(K0)&&H)return S(Error(M+" is not a valid symlink"));aZ8(Y,K0,e9.join(X,"."),function(D0,W0){if(D0)return S(D0);if(!W0&&H)return S(Error(M+" is not a valid symlink"));Y.symlink(A.linkname,M,m)})})}function _(){if(In)return S();Y.unlink(M,function(){let K0=e9.join(X,e9.join("/",A.linkname));Y.realpath(K0,function(D0,W0){if(D0||!Z0(W0))return S(Error(M+" is not a valid hardlink"));Y.link(W0,M,function(Q0){if(Q0&&Q0.code==="EPERM"&&G.hardlinkAsFilesFallback)return I=Y.createReadStream(W0),p();m(Q0)})})})}function Z0(K0){return K0===X||K0.startsWith(X+e9.sep)}function p(){let K0=Y.createWriteStream(M),D0=$(I,A);K0.on("error",function(W0){D0.destroy(W0)}),tZ8(D0,K0,function(W0){if(W0)return S(W0);K0.on("close",m)})}}function L(A,I){let S;while((S=jG6(K))&&A.slice(0,S[0].length)!==S[0])K.pop();if(!S)return I();Y.utimes(S[0],N,S[1],I)}function z(A,I,S){if(G.utimes===!1)return S();if(I.type==="directory")return Y.utimes(A,N,I.mtime,S);if(I.type==="symlink")return L(A,S);Y.utimes(A,N,I.mtime,function(M){if(M)return S(M);L(A,S)})}function j(A,I,S){let M=I.type==="symlink",C=M?Y.lchmod:Y.chmod,m=M?Y.lchown:Y.chown;if(!C)return S();let v=(I.mode|(I.type==="directory"?O:D))&F;if(m&&J)m.call(Y,A,I.uid,I.gid,_);else _(null);function _(Z0){if(Z0)return S(Z0);if(!C)return S();C.call(Y,A,v,S)}}function P(A,I,S){Y.stat(A,function(M){if(!M)return S(null);if(M.code!=="ENOENT")return S(M);Y.mkdir(A,{mode:I.mode,recursive:!0},function(C,m){if(C)return S(C);j(A,I,S)})})}};function aZ8(Z,X,G,Y){if(X===G)return Y(null,!0);if(!X.startsWith(G+e9.sep))return Y(null,!1);Z.lstat(X,function(Q,$){if(Q&&Q.code!=="ENOENT"&&Q.code!=="EPERM")return Y(Q);if(Q||!$.isSymbolicLink())return aZ8(Z,e9.join(X,".."),G,Y);Y(null,!1)})}function sZ8(Z,X,G,Y){if(X===G)return Y(null,!0);Z.lstat(X,function(Q,$){if(Q&&Q.code!=="ENOENT"&&Q.code!=="EPERM")return Y(Q);if(Q||$.isDirectory())return sZ8(Z,e9.join(X,".."),G,Y);Y(null,!1)})}function qn(){}function eZ8(Z){return Z}function ym0(Z){return In?Z.replace(/\\/g,"/").replace(/[:?<>|]/g,"_"):Z}function PG6(Z,X,G,Y,Q,$){if(!Q)Q=["."];let J=Q.slice(0);return function(K){if(!J.length)return K(null);let N=J.shift(),F=e9.join(G,N);X.call(Z,F,function(U,H){if(U)return K(Q.indexOf(N)===-1&&U.code==="ENOENT"?null:U);if(!H.isDirectory())return K(null,N,H);Z.readdir(F,function(w,O){if(w)return K(w);if($)O.sort();for(let D=0;D<O.length;D++)if(!Y(e9.join(G,N,O[D])))J.push(e9.join(N,O[D]));K(null,N,H)})})}}function Z78(Z,X){return function(G){G.name=G.name.split("/").slice(X).join("/");let Y=G.linkname;if(Y&&(G.type==="link"||e9.isAbsolute(Y)))G.linkname=Y.split("/").slice(X).join("/");return Z(G)}}});var qG6,MG6;var G78=B(()=>{Am0();qG6=k(d98(),1),MG6=k(X78(),1)});var vH0=()=>{};var Y78=B(()=>{tU0()});var Q78=B(()=>{AH0();jH0();vH0()});var $78=()=>{};var J78=()=>{};var gm0=B(()=>{R98();zm0();AH0();S98();Em0();Am0();V98();C98();f98();b98();Lm0();v98();G78();vH0();Y78();Q78();$78();J78();vH0()});var OZ,vZ,FV,Mn;var kn=B(()=>{OZ={CLAIM_API_GROUP:"extensions.agents.x-k8s.io",CLAIM_API_VERSION:"v1alpha1",CLAIM_PLURAL:"sandboxclaims",SANDBOX_API_GROUP:"agents.x-k8s.io",SANDBOX_API_VERSION:"v1alpha1",SANDBOX_PLURAL:"sandboxes",POD_NAME_ANNOTATION:"agents.x-k8s.io/pod-name"};vZ=class vZ extends Error{cause;constructor(Z,X){super(Z);if(this.name="SandboxError",this.cause=X,X instanceof Error&&X.stack)this.stack=`${this.stack}
|
|
1216
1216
|
Caused by: ${X.stack}`}};FV=class FV extends vZ{constructor(Z,X){super(Z,X);this.name="SandboxTimeoutError"}};Mn=class Mn extends vZ{constructor(Z,X){super(Z,X);this.name="SandboxAlreadyExistsError"}}});async function kG6(Z){let X=Z.getCurrentCluster();if(!X)throw new vZ("No active cluster in kubeconfig");let G={};await Z.applyToHTTPSOptions(G);let Y={},Q=G.headers??{};for(let[$,J]of Object.entries(Q))if(Array.isArray(J))Y[$]=J.join(", ");else if(J!==void 0)Y[$]=String(J);if(typeof G.auth==="string"&&!Y.Authorization)Y.Authorization=`Basic ${Buffer.from(G.auth).toString("base64")}`;return{server:X.server.replace(/\/+$/,""),headers:Y,tls:{cert:hm0(G.cert),key:hm0(G.key),ca:hm0(G.ca),rejectUnauthorized:X.skipTLSVerify?!1:void 0}}}function hm0(Z){if(Z==null)return;if(typeof Z==="string")return Z;if(Buffer.isBuffer(Z))return Z.toString("utf8");return String(Z)}async function UV(Z,X){let G=await kG6(Z),Y={...G.headers,...X.headers};if(X.method==="PATCH")Y["content-type"]=X.patchType==="apply"?"application/apply-patch+yaml":X.patchType==="strategic-merge"?"application/strategic-merge-patch+json":"application/merge-patch+json";else if(X.body!==void 0&&!("content-type"in Y))Y["content-type"]="application/json";let Q={method:X.method,headers:Y,body:X.body===void 0?void 0:JSON.stringify(X.body),signal:X.signal,tls:G.tls,...X.stream?{timeout:!1}:{}};return fetch(`${G.server}${X.path}`,Q)}async function um0(Z){try{return await Z.json()}catch{return null}}async function cm0(Z,X){if(Z.ok)return;let G=await um0(Z),Y=G?.message??`${X} failed: ${Z.status} ${Z.statusText}`;throw new W78(Z.status,G,Y)}async function Sn(Z,X,G,Y,Q="none"){try{let $=await UV(Z,X);if($.status===404)return null;if(await cm0($,G),Q==="json")return await $.json();return null}catch($){throw new vZ(Y,$)}}async function Vn(Z,X,G){let Y=`${K78}/${encodeURIComponent(X)}/${OZ.CLAIM_PLURAL}`,Q;try{Q=await UV(Z,{method:"POST",path:Y,body:G})}catch(N){let F=N instanceof Error?N.message:String(N);throw console.warn(`[agent-sandbox/client] createSandboxClaim ${G.metadata.name} transport error: ${F}`),new vZ(`Failed to create SandboxClaim: ${G.metadata.name} (transport error: ${F})`,N)}if(Q.ok)return;let $=await um0(Q),J=$?.reason?` ${$.reason}`:"",W=$?.message??Q.statusText,K=`Failed to create SandboxClaim: ${G.metadata.name} (${Q.status}${J}: ${W})`;if(console.warn(`[agent-sandbox/client] createSandboxClaim ${G.metadata.name} rejected: status=${Q.status} reason=${$?.reason??"<none>"} message=${W}`),Q.status===409)throw new Mn(K);throw new vZ(K)}async function xH0(Z,X,G,Y=60000){let Q=Date.now()+Y,$=500,J;while(!0){let W=await HF(Z,X,G).catch(()=>{return});if(!W)return;if(J=W,Date.now()>=Q){let K=J.metadata?.finalizers??[],N=J.metadata?.deletionTimestamp??"<unknown>";throw new FV(`SandboxClaim ${G} still terminating after ${Y}ms (deletionTimestamp=${N}, finalizers=[${K.join(", ")}])`)}await c4(500)}}function lm0(Z,X){return`${K78}/${encodeURIComponent(Z)}/${OZ.CLAIM_PLURAL}/${encodeURIComponent(X)}`}async function N78(Z,X,G,Y){await Sn(Z,{method:"PATCH",path:lm0(X,G),patchType:"merge",body:{spec:{lifecycle:{shutdownPolicy:"Delete",shutdownTime:Y}}}},"patchSandboxClaimShutdown",`Failed to patch SandboxClaim shutdownTime: ${G}`)}async function bw(Z,X,G){await Sn(Z,{method:"DELETE",path:lm0(X,G)},"deleteSandboxClaim",`Failed to delete SandboxClaim: ${G}`)}async function HF(Z,X,G){return await Sn(Z,{method:"GET",path:lm0(X,G)},"getSandboxClaim",`Failed to get SandboxClaim: ${G}`,"json")??void 0}async function F78(Z,X,G,Y=60){let Q=Date.now()+Y*1000,$=200;while(Date.now()<Q){let W=(await HF(Z,X,G).catch(()=>{return}))?.status?.sandbox?.name;if(W)return W;await c4(200)}throw new FV(`SandboxClaim ${G} did not record an adopted Sandbox (status.sandbox.name) within ${Y}s`)}function dm0(Z,X){return`${SG6}/${encodeURIComponent(Z)}/${w78}/${encodeURIComponent(X)}`}async function _H0(Z,X,G){let Y=new URLSearchParams({fieldManager:B78,force:"true"}),Q=`${dm0(X,G.metadata.name)}?${Y}`;try{let $=await UV(Z,{method:"PATCH",path:Q,patchType:"apply",body:G});await cm0($,"applyHttpRoute")}catch($){throw new vZ(`Failed to apply HTTPRoute: ${G.metadata.name}`,$)}}async function yH0(Z,X,G){await Sn(Z,{method:"DELETE",path:dm0(X,G)},"deleteHttpRoute",`Failed to delete HTTPRoute: ${G}`)}async function O78(Z,X,G){return await Sn(Z,{method:"GET",path:dm0(X,G)},"getHttpRoute",`Failed to get HTTPRoute: ${G}`,"json")??void 0}async function D78(Z,X,G,Y){let Q={apiVersion:"v1",kind:"Service",metadata:{name:G},spec:{ports:[{name:Y.name,port:Y.port,targetPort:Y.targetPort,protocol:Y.protocol??"TCP"}]}},$=new URLSearchParams({fieldManager:B78,force:"true"}),J=`/api/v1/namespaces/${encodeURIComponent(X)}/services/${encodeURIComponent(G)}?${$}`;try{let W=await UV(Z,{method:"PATCH",path:J,patchType:"apply",body:Q});await cm0(W,"ensureServicePort")}catch(W){throw new vZ(`Failed to apply Service ports: ${G}`,W)}}function gH0(Z,X,G,Y=180){let Q=`/apis/${OZ.SANDBOX_API_GROUP}/${OZ.SANDBOX_API_VERSION}/namespaces/${encodeURIComponent(X)}/${OZ.SANDBOX_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`,{resolve:$,reject:J,promise:W}=Promise.withResolvers(),K=new AbortController,N=!1,F=setTimeout(()=>{if(N)return;N=!0,K.abort(),J(new FV(`Sandbox did not become ready within ${Y} seconds`))},Y*1000),U=(H)=>{if(N)return;N=!0,clearTimeout(F),K.abort(),H()};return(async()=>{let H;try{H=await UV(Z,{method:"GET",path:Q,signal:K.signal,headers:{accept:"application/json"},stream:!0})}catch(w){U(()=>J(new vZ("Failed to start watch for sandbox readiness",w)));return}if(!H.ok||!H.body){let w=await um0(H).catch(()=>null);U(()=>J(new vZ(`Watch handshake failed (${H.status}): ${w?.message??H.statusText}`)));return}try{for await(let w of mm0(H.body)){if(N)return;if(w.type==="ERROR"){let z=w.object;U(()=>J(new vZ(`Watch stream error while waiting for sandbox: ${z.message??"unknown"}`)));return}if(w.type!=="ADDED"&&w.type!=="MODIFIED")continue;let O=w.object;if(!O.status?.conditions?.find((z)=>z.type==="Ready"&&z.status==="True"))continue;let E=O.metadata?.name;if(!E){U(()=>J(new vZ("Sandbox metadata or name is missing")));return}let L=O.metadata?.annotations?.[OZ.POD_NAME_ANNOTATION]??E;U(()=>$({sandboxName:E,podName:L}));return}U(()=>J(new vZ("Watch stream closed before sandbox became ready")))}catch(w){if(N)return;if(w instanceof Error&&(w.name==="AbortError"||K.signal.aborted))return;U(()=>J(new vZ("Watch stream error while waiting for sandbox",w)))}})(),W}async function*mm0(Z){let X=Z.getReader(),G=new TextDecoder,Y="";try{while(!0){let{value:$,done:J}=await X.read();if(J)break;Y+=G.decode($,{stream:!0});let W;while((W=Y.indexOf(`
|
|
1217
|
-
`))>=0){let K=Y.slice(0,W).trim();if(Y=Y.slice(W+1),!K)continue;yield JSON.parse(K)}}let Q=Y.trim();if(Q)yield JSON.parse(Q)}finally{X.releaseLock()}}var W78,K78,U78="gateway.networking.k8s.io",H78="v1",w78="httproutes",SG6,Cn,B78="mesh-sandbox-runner";var hH0=B(()=>{u9();kn();W78=class W78 extends Error{status;body;constructor(Z,X,G){super(G);this.status=Z;this.body=X;this.name="KubeHttpError"}};K78=`/apis/${OZ.CLAIM_API_GROUP}/${OZ.CLAIM_API_VERSION}/namespaces`;SG6=`/apis/${U78}/${H78}/namespaces`;Cn={API_GROUP:U78,API_VERSION:H78,PLURAL:w78}});var uH0=B(()=>{u9();BZ0()});async function lH0(Z){try{let X=await fetch(`${Z}/health`,{signal:AbortSignal.timeout(VG6)});if(!X.ok)return null;let G=await X.json();if(typeof G==="object"&&G!==null&&typeof G.bootId==="string"&&typeof G.ready==="boolean"&&G.setup&&typeof G.setup.running==="boolean"&&typeof G.setup.done==="boolean")return G;return null}catch{return null}}async function j78(Z){for(let X=0;X<E78;X++){if(await lH0(Z)!==null)return;let G=(Math.random()*2-1)*CG6;await c4(L78+G)}throw Error(`sandbox daemon at ${Z} did not respond on /health within ${E78*L78/1000}s`)}async function u_(Z,X,G,Y,Q){return fG6(Z,X,"POST",G,Y,Q)}async function fG6(Z,X,G,Y,Q,$){let J={...Y};if(Q&&Q.rotateToken!==void 0)J.auth=Q;let W=await fetch(`${Z}/_sandbox/config`,{method:G,headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:JSON.stringify(J),signal:AbortSignal.timeout($?.timeoutMs??z78)}),K=await W.text();if(!W.ok)throw new cH0(W.status,K);return JSON.parse(K)}async function A78(Z,X,G){let Y=await fetch(`${Z}/_sandbox/orgfs-config`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:G,signal:AbortSignal.timeout(z78)}),Q=await Y.text();if(!Y.ok)throw Error(`sandbox daemon /_sandbox/orgfs-config returned ${Y.status}: ${Q}`);return JSON.parse(Q)}async function fn(Z,X,G,Y){let Q=new Headers(Y.headers);for(let W of bG6)Q.delete(W);Q.set("authorization",`Bearer ${X}`);let $=Y.method!=="GET"&&Y.method!=="HEAD",J=`${Z}${G.startsWith("/")?G:`/${G}`}`;return fetch(J,{method:Y.method,headers:Q,body:$?Y.body:void 0,redirect:"manual",signal:Y.signal,duplex:$?"half":void 0})}var cH0,VG6=500,z78=30000,E78=25,L78=200,CG6=50,bG6;var P78=B(()=>{uH0();cH0=class cH0 extends Error{status;constructor(Z,X){super(`sandbox daemon /_sandbox/config returned ${Z}: ${X}`);this.status=Z;this.name="ConfigRequestError"}};bG6=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});async function*I78(Z){let X=Z.now??(()=>Date.now()),G=X(),Y=Z.schedulingTimeoutMs??_G6,Q={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},$=[],J=null,W=!1,K=(z)=>{if(W)return;if(J){let j=J;J=null,j(z)}else $.push(z)},N=()=>{if($.length>0)return Promise.resolve($.shift());if(W)return Promise.resolve(null);return new Promise((z)=>{J=z})},F=()=>{if(W)return;if(W=!0,J){let z=J;J=null,z(null)}},U=new AbortController,H=()=>{U.abort(),F()};if(Z.signal)if(Z.signal.aborted)U.abort(),F();else Z.signal.addEventListener("abort",H,{once:!0});let w=Math.max(0,Y-(X()-G)),O=setTimeout(()=>K("tick"),w+100),D,E=new Promise((z)=>{D=z}),L=Promise.allSettled([yG6(Z.kc,Z.namespace,Z.claimName,U.signal,Q,K,X,D),hG6(Z.kc,Z.namespace,Z.claimName,U.signal,Q,K),uG6(Z.kc,Z.namespace,Z.claimName,E,U.signal,Q,K,X)]);try{let z=null,j=-1,P=T78(Q,Y,X);if(z=nm0(P),!im0(P))j=R78(P);if(yield P,im0(P))return;while(!W){if(await N()===null)break;let I=T78(Q,Y,X);if(im0(I)){let C=nm0(I);if(C!==z)z=C,yield I;return}let S=R78(I);if(S<j)continue;let M=nm0(I);if(M!==z)z=M,j=S,yield I}}finally{if(clearTimeout(O),U.abort(),Z.signal)Z.signal.removeEventListener("abort",H);F(),await L.catch(()=>{})}}function T78(Z,X,G){let{pod:Y,sandbox:Q,events:$,startedAt:J}=Z;if(Q.ready)return{kind:"ready"};let W=Y.containerWaitingReason;if(W==="ImagePullBackOff"||W==="ErrImagePull")return{kind:"failed",reason:"image-pull-backoff",message:"Sandbox image failed to download. The cluster may be missing pull credentials or the image tag may not exist."};if(W==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!Y.scheduled&&$.lastFailedSchedulingAt!==void 0&&G()-J>X)return{kind:"failed",reason:"scheduling-timeout",message:$.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(X/1000)}s.`};if(Y.containerRunning&&!Y.containerReady)return{kind:"warming-daemon",since:J};if($.hasPulling&&!$.hasPulled)return{kind:"pulling-image",since:J};if(W==="ContainerCreating"||W==="PodInitializing"||Y.scheduled&&!Y.containerRunning)return{kind:"starting-container",since:J};if(Y.scheduledFalseReason==="Unschedulable"||$.lastFailedSchedulingAt!==void 0&&!Y.scheduled)return{kind:"waiting-for-capacity",since:J,message:$.failedSchedulingMessage??Y.scheduledFalseMessage,nodeClaim:$.nominatedNodeClaim};return{kind:"claiming",since:J}}function im0(Z){return Z.kind==="ready"||Z.kind==="failed"}function R78(Z){switch(Z.kind){case"claiming":return 0;case"waiting-for-capacity":return 1;case"pulling-image":return 2;case"starting-container":return 3;case"warming-daemon":return 4;case"ready":case"failed":return 99}}function nm0(Z){switch(Z.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return Z.kind;case"waiting-for-capacity":return`waiting-for-capacity:${Z.message??""}:${Z.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${Z.reason}:${Z.message}`}}async function yG6(Z,X,G,Y,Q,$,J,W){let K=`/api/v1/namespaces/${encodeURIComponent(X)}/pods?watch=true&labelSelector=${encodeURIComponent(`${vG6}=${G}`)}`;return dH0({kc:Z,path:K,signal:Y,label:`pod/${G}`,onEvent:(N)=>{if(N.type!=="ADDED"&&N.type!=="MODIFIED")return;let F=N.object;if(F.metadata?.name)W(F.metadata.name);gG6(F,Q,J),$("pod")}})}function gG6(Z,X,G){let Q=(Z.status?.conditions??[]).find((J)=>J.type==="PodScheduled");if(Q?.status==="True")X.pod.scheduled=!0,X.pod.scheduledFalseReason=void 0,X.pod.scheduledFalseMessage=void 0;else if(Q?.status==="False")X.pod.scheduled=!1,X.pod.scheduledFalseReason=Q.reason,X.pod.scheduledFalseMessage=Q.message;let $=(Z.status?.containerStatuses??[]).find((J)=>J.name===xG6);if($)X.pod.containerWaitingReason=$.state?.waiting?.reason,X.pod.containerRunning=!!$.state?.running,X.pod.containerReady=$.ready===!0}async function hG6(Z,X,G,Y,Q,$){let J=`/apis/${OZ.CLAIM_API_GROUP}/${OZ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(X)}/${OZ.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return dH0({kc:Z,path:J,signal:Y,label:`sandboxclaim/${G}`,onEvent:(W)=>{if(W.type!=="ADDED"&&W.type!=="MODIFIED")return;let N=W.object.status?.conditions?.find((F)=>F.type==="Ready");if(!N)return;if(N.status==="True")Q.sandbox.ready=!0,Q.sandbox.notReadyReason=void 0,Q.sandbox.notReadyMessage=void 0;else Q.sandbox.ready=!1,Q.sandbox.notReadyReason=N.reason,Q.sandbox.notReadyMessage=N.message;$("sandbox")}})}async function uG6(Z,X,G,Y,Q,$,J,W){let K=await Promise.race([Y,new Promise((F)=>{if(Q.aborted){F(G);return}Q.addEventListener("abort",()=>F(G),{once:!0})})]);if(Q.aborted)return;let N=`/api/v1/namespaces/${encodeURIComponent(X)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${K},involvedObject.kind=Pod`)}`;return dH0({kc:Z,path:N,signal:Q,label:`events/${G}`,onEvent:(F)=>{if(F.type!=="ADDED"&&F.type!=="MODIFIED")return;let U=F.object,H=U.reason;if(!H)return;switch(H){case"Pulling":$.events.hasPulling=!0;break;case"Pulled":$.events.hasPulling=!0,$.events.hasPulled=!0;break;case"FailedScheduling":$.events.lastFailedSchedulingAt=W(),$.events.failedSchedulingMessage=U.message;break;case"Nominated":{let w=U.message?.match(/nodeclaim\/([\w-]+)/);if(w)$.events.nominatedNodeClaim=w[1];break}default:return}J("event")}})}async function q78(Z){let{kc:X,namespace:G,labelSelector:Y,signal:Q,onDelete:$}=Z,J=`/apis/${OZ.CLAIM_API_GROUP}/${OZ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(G)}/${OZ.CLAIM_PLURAL}?watch=true&labelSelector=${encodeURIComponent(Y)}`;return dH0({kc:X,path:J,signal:Q,label:"sandboxclaim-reaper",onEvent:(W)=>{if(W.type!=="DELETED")return;let K=W.object.metadata?.name;if(K)$(K)}})}async function dH0(Z){let{kc:X,path:G,signal:Y,label:Q,onEvent:$}=Z,J=0;while(!Y.aborted){try{let K=await UV(X,{method:"GET",path:G,signal:Y,headers:{accept:"application/json"},stream:!0});if(!K.ok||!K.body){try{await K.body?.cancel()}catch{}if(K.status===401||K.status===403){console.warn(`[lifecycle-watcher] ${Q} stopped: watch denied (${K.status} ${K.statusText}). `+"The kubeconfig in use cannot watch SandboxClaims \u2014 if you are running locally, "+"this provider should not be active (check STUDIO_SANDBOX_PROVIDER / your sandbox preference).");return}throw Error(`watch handshake failed: ${K.status} ${K.statusText}`)}J=0;for await(let N of mm0(K.body)){if(Y.aborted)return;try{$(N)}catch(F){console.warn(`[lifecycle-watcher] ${Q} onEvent threw: ${F instanceof Error?F.message:String(F)}`)}}}catch(K){if(Y.aborted)return;let N=K instanceof Error?K.message:String(K);console.warn(`[lifecycle-watcher] ${Q} watch ended: ${N}`)}if(Y.aborted)return;let W=tY(5000,250,J,2,0);J+=1,await c4(W,{signal:Y}).catch(()=>{})}}var vG6="studio.decocms.com/sandbox-handle",xG6="sandbox",_G6=300000;var M78=B(()=>{u9();kn();hH0()});async function k78(Z,X,G){let Y=new Map;for(let Q of Z){let $=X(Q);if(!$)continue;let J=Y.get($);if(J)J.push(Q);else Y.set($,[Q])}await Promise.allSettled([...Y.values()].map(async(Q)=>{for(let $ of Q)await G($).catch(()=>{})}))}import{createHash as cG6,randomBytes as lG6,randomUUID as dG6}from"crypto";import*as f78 from"net";import{PassThrough as mG6}from"stream";function iG6(Z){if(Z instanceof Error)return Z.message;if(Z&&typeof Z==="object"){let X=Z;if(X.error instanceof Error)return X.error.message;if(typeof X.message==="string"&&X.message)return X.message}return String(Z)}class sm0{kind=eX;records=new Map;inflight=new wZ0;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;mintCloneUrl;closed=!1;claimWatchAbort=new AbortController;constructor(Z={}){this.stateStore=Z.stateStore??null,this.previewUrlPattern=Z.previewUrlPattern??null,this.kubeConfig=Z.kubeConfig??YY6(),this.portForward=new Pm0(this.kubeConfig),this.namespace=Z.namespace??nG6,this.sandboxTemplateName=Z.sandboxTemplateName??pG6,this.envName=NY6(Z.envName),this.tokenGenerator=Z.tokenGenerator??(()=>lG6(rG6).toString("hex")),this.idleTtlMs=Z.idleTtlMs??aG6,this.metrics=Z.meter?GY6(Z.meter):null,this.previewGateway=Z.previewGateway&&Z.previewUrlPattern?{...Z.previewGateway}:null;let X=Z.sentinelToken?.trim()??"";this.sentinelToken=X.length>0?X:null,this.mintCloneUrl=Z.mintCloneUrl,this.startClaimReaper(),this.startCredentialRefresher()}startClaimReaper(){let Z=["app.kubernetes.io/managed-by=studio","app.kubernetes.io/name=studio-sandbox",...this.envName?[`${h3.env}=${this.envName}`]:[]].join(",");q78({kc:this.kubeConfig,namespace:this.namespace,labelSelector:Z,signal:this.claimWatchAbort.signal,onDelete:(X)=>this.invalidateRecord(X)})}async ensure(Z,X={}){let G=Aw(Z,X.branch??X.repo?.branch??null);return this.inflight.run(G,()=>Qn(this.stateStore,Z,eX,(Y)=>this.ensureLocked(Z,G,X,Y)))}async delete(Z,X){if(X&&this.stateStore){await Qn(this.stateStore,X,eX,(G)=>this.deleteLocked(Z,X,G));return}await this.deleteLocked(Z,X,this.stateStore)}async deleteLocked(Z,X,G){let Y=this.records.get(Z)??null;if(this.records.delete(Z),Y)this.closeForwarder(Y.daemonForward),this.metrics?.active.add(-1,om0(Y.tenant));if(await this.deleteHttpRouteIfManaged(Z).catch((Q)=>{console.warn(`[${xZ}] HTTPRoute delete failed for ${Z}: ${Q instanceof Error?Q.message:String(Q)}`)}),await bw(this.kubeConfig,this.namespace,Z),G)if(X)await G.delete(X,eX);else if(Y)await G.delete(Y.id,eX);else await G.deleteByHandle(eX,Z)}async alive(Z){return await HF(this.kubeConfig,this.namespace,Z)!==void 0}watchClaimLifecycle(Z,X){return I78({kc:this.kubeConfig,namespace:this.namespace,claimName:Z,signal:X})}async getPreviewUrl(Z){let X=await this.getRecord(Z);if(!X)return null;return this.composePreviewUrl(X)}async proxyDaemonRequest(Z,X,G){let Y=await this.getRecord(Z);if(!Y&&this.previewUrlPattern&&this.stateStore){let K=await this.stateStore.getByHandle(eX,Z),N=K?.state,F=N?.token;if(K&&F){let H=`http://${N?.adoptedSandboxName??Z}.${this.namespace}.svc.cluster.local:${vw}`;try{let w=await fn(H,F,X,G);if(w.status!==404)return w;try{await w.body?.cancel()}catch{}}catch{}}}if(!Y)Y=await this.resurrectByHandle(Z);if(!Y)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let Q=Y,$=performance.now(),J=0,W=!(G.body instanceof ReadableStream);try{let K=await fn(Y.daemonUrl,Y.token,X,G);if(K.status===401&&W){this.invalidateRecord(Z);let N=await this.getRecord(Z).catch(()=>null)??await this.resurrectByHandle(Z).catch(()=>null);if(N)Q=N,K=await fn(N.daemonUrl,N.token,X,G)}return J=K.status,K}catch(K){if(!W)throw K;this.invalidateRecord(Z);let N=await this.resurrectByHandle(Z)??await this.getRecord(Z).catch(()=>null);if(!N)throw K;Q=N;let F=await fn(N.daemonUrl,N.token,X,G);return J=F.status,F}finally{this.recordProxyDuration("daemon",J,Q,performance.now()-$)}}async adoptLiveClaim(Z,X){if(this.records.has(X))return!0;let G=await HF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!G||G.metadata?.deletionTimestamp)return!1;return await this.inflight.run(X,async()=>{let Q=this.records.get(X);if(Q)return this.toSandbox(Q);let $=await this.adopt(Z,X,G);if(!$)throw Error(`cannot adopt live claim ${X}`);return Qn(this.stateStore,Z,eX,(J)=>this.finish($,J,!0,!0,"adopt"))}).catch(()=>null)!=null}async resolvePreviewUpstreamUrl(Z){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle(Z)}.${this.namespace}.svc.cluster.local:${vw}`;let X=await this.getRecord(Z);if(X)return X.daemonUrl;let G=await this.resurrectByHandle(Z);return G?G.daemonUrl:null}async resolveServiceNameForHandle(Z){let X=this.records.get(Z);if(X)return X.adoptedSandboxName;if(this.stateStore){let Y=(await this.stateStore.getByHandle(eX,Z).catch(()=>null))?.state?.adoptedSandboxName;if(Y)return Y}return Z}async proxyPreviewRequest(Z,X){let G=performance.now(),Y=this.records.get(Z)??null,Q=0;try{let $=await this.resolvePreviewUpstreamUrl(Z);if(!$){Q=404;let O=tm0(404,{error:"sandbox not found"});return O.headers.set(wV,"1"),O}let J=new URL(X.url);if((J.pathname==="/_sandbox"||J.pathname.startsWith("/_sandbox/")||J.pathname==="/_decopilot_vm"||J.pathname.startsWith("/_decopilot_vm/"))&&X.method!=="GET")return Q=404,tm0(404,{error:"not found"});let K=(O)=>`${O}${J.pathname}${J.search}`,N=new Headers(X.headers);for(let O of ZY6)N.delete(O);let F=X.method!=="GET"&&X.method!=="HEAD",U={method:X.method,headers:N,body:F?X.body:void 0,redirect:"manual",signal:X.signal,duplex:F?"half":void 0},H;try{H=await fetch(K($),U)}catch(O){let D=`${$}${J.pathname}`;if(console.warn(`[${xZ}] preview fetch to ${D} failed: ${O instanceof Error?O.message:String(O)}`),X.method==="GET"||X.method==="HEAD"){if(this.invalidateRecord(Z),await this.resurrectByHandle(Z).catch(()=>null)){let z=await this.resolvePreviewUpstreamUrl(Z);if(z)try{H=await fetch(K(z),U);let j=new Headers;for(let[P,A]of H.headers.entries())if(!S78.includes(P.toLowerCase()))j.set(P,A);return Q=H.status,new Response(H.body,{status:H.status,statusText:H.statusText,headers:j})}catch(j){console.warn(`[${xZ}] preview fetch retry to ${D} failed: ${j instanceof Error?j.message:String(j)}`)}}}else this.invalidateRecord(Z);Q=502;let E=tm0(502,{error:"sandbox daemon unreachable"});return E.headers.set(wV,"1"),E}let w=new Headers;for(let[O,D]of H.headers.entries())if(!S78.includes(O.toLowerCase()))w.set(O,D);return Q=H.status,new Response(H.body,{status:H.status,statusText:H.statusText,headers:w})}finally{this.recordProxyDuration("preview",Q,Y,performance.now()-G,Z)}}async ensureLocked(Z,X,G,Y){if(G.image)console.warn(`[${xZ}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${G.image}`);if(Y){let J=await Y.get(Z,eX);if(J){let W=await this.rehydrate(Z,X,J);if(W)return await this.refreshDaemonGitCredential(W,G),this.finish(W,Y,!1,!0,"resume");await Y.delete(Z,eX)}}let Q=await HF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(Q)if(Q.metadata?.deletionTimestamp)await xH0(this.kubeConfig,this.namespace,X).catch((J)=>{console.warn(`[${xZ}] wait for terminating claim ${X} failed: ${J instanceof Error?J.message:String(J)}`)});else{let J=await this.adopt(Z,X,Q).catch((W)=>{return console.warn(`[${xZ}] adopt ${X} failed, recreating: ${W instanceof Error?W.message:String(W)}`),null});if(J)return await this.refreshDaemonGitCredential(J,G),this.finish(J,Y,!0,!0,"adopt");await bw(this.kubeConfig,this.namespace,X).catch(()=>{}),await xH0(this.kubeConfig,this.namespace,X).catch((W)=>{console.warn(`[${xZ}] wait for deleted claim ${X} failed: ${W instanceof Error?W.message:String(W)}`)})}let $=await this.provision(Z,X,G);return this.finish($,Y,!0,!1,"fresh")}async finish(Z,X,G,Y,Q){let $=this.records.get(Z.handle),J=$!==void 0;if($&&$.daemonForward!==Z.daemonForward)this.closeForwarder($.daemonForward);if(this.records.set(Z.handle,Z),G)await this.persist(X,Z);if(Y)await N78(this.kubeConfig,this.namespace,Z.handle,this.computeShutdownTime()).catch((W)=>console.warn(`[${xZ}] TTL refresh failed for ${Z.handle}: ${W instanceof Error?W.message:String(W)}`));if(this.metrics){let W=om0(Z.tenant);if(this.metrics.ensureOutcome.add(1,{...W,outcome:Q}),!J)this.metrics.active.add(1,W)}return this.toSandbox(Z)}buildEnvMap(Z,X){let G={},Y=[];for(let[Q,$]of Object.entries(Z.env??{}))if(oG6.has(Q))Y.push(Q);else G[Q]=$;if(Y.length>0)console.warn(`[${xZ}] opts.env keys overlap reserved bootstrap names and were dropped: ${Y.join(",")}`);return{...G,DAEMON_TOKEN:X.token,DAEMON_BOOT_ID:X.daemonBootId,APP_ROOT:X.workdir,PROXY_PORT:String(vw)}}buildClaim(Z,X,G){let Y=this.sentinelToken!==null,Q=Y?[]:Object.entries(this.buildEnvMap(X,G)).sort(([W],[K])=>W<K?-1:W>K?1:0).map(([W,K])=>({name:W,value:K})),$=HY6(X),J=Object.keys($).length>0;return{apiVersion:`${OZ.CLAIM_API_GROUP}/${OZ.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:Z,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[h3.env]:this.envName}:{},...rm0(X.tenant)},...J?{annotations:$}:{}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:rm0(X.tenant,{[h3.role]:"claimed",[h3.sandboxHandle]:Z,...this.envName?{[h3.env]:this.envName}:{}}),...J?{annotations:$}:{}},env:Q,warmpool:Y?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(Z,X,G){let Y=this.tokenGenerator(),Q=dG6(),$=pm0,J=this.buildClaim(X,G,{token:Y,daemonBootId:Q,workdir:$});try{await Vn(this.kubeConfig,this.namespace,J)}catch(H){if(H instanceof Mn)await xH0(this.kubeConfig,this.namespace,X),await Vn(this.kubeConfig,this.namespace,J);else throw H}let W;try{W=await F78(this.kubeConfig,this.namespace,X),await gH0(this.kubeConfig,this.namespace,W)}catch(H){throw await bw(this.kubeConfig,this.namespace,X).catch(()=>{}),H}try{await this.ensureServicePortForAdoptedSandbox(W),await this.ensureHttpRouteForHandle(X,W,G.tenant??null)}catch(H){throw await bw(this.kubeConfig,this.namespace,X).catch(()=>{}),H}let K=await this.openForwarder(W,vw,X),N=`http://127.0.0.1:${K.localPort}`,F=this.workloadConfigPayload(G),U=Q;try{if(await j78(N),this.sentinelToken!==null){let H=await lH0(N);if(H)U=H.bootId;await u_(N,this.sentinelToken,F??{},{rotateToken:Y})}else if(F)await u_(N,Y,F);if(G.orgFsConfigJson)await A78(N,Y,G.orgFsConfigJson).catch((H)=>console.warn("[org-fs] sidecar config relay failed",H))}catch(H){throw this.closeForwarder(K),await this.deleteHttpRouteIfManaged(X).catch(()=>{}),await bw(this.kubeConfig,this.namespace,X).catch(()=>{}),H}return{id:Z,handle:X,adoptedSandboxName:W,token:Y,workdir:$,daemonUrl:N,daemonForward:K,workload:G.workload??null,daemonBootId:U,tenant:G.tenant??null,ensureOpts:OY6(G)}}workloadConfigPayload(Z){return cl0({runtime:Z?.workload?.runtime??"node",packageManager:Z?.workload?.packageManager?{name:Z.workload.packageManager,...Z.workload.packageManagerPath?{path:Z.workload.packageManagerPath}:{}}:null,repo:Z?.repo??null,port:Z?.workload?.devPort??tG6,tenant:Z?.tenant??void 0})}async refreshDaemonGitCredential(Z,X){let G=ll0(X);if(!G)return;try{await u_(Z.daemonUrl,Z.token,G)}catch(Y){console.warn(`[${xZ}] git credential refresh failed for ${Z.handle}: ${Y instanceof Error?Y.message:String(Y)}`)}}async withFreshCloneUrl(Z,X){if(!this.mintCloneUrl)return Z;try{let G=await this.mintCloneUrl(Z,X!==void 0?{bufferMs:X}:void 0);return G?{...Z,cloneUrl:G}:Z}catch(G){return console.warn(`[${xZ}] clone credential re-mint failed: ${G instanceof Error?G.message:String(G)}`),Z}}startCredentialRefresher(){if(!this.mintCloneUrl)return;let{signal:Z}=this.claimWatchAbort;(async()=>{while(!Z.aborted){if(await c4(sG6,{signal:Z}).catch(()=>{}),Z.aborted)break;try{await this.refreshAllGitCredentials()}catch(X){console.warn(`[${xZ}] periodic credential refresh failed: ${X instanceof Error?X.message:String(X)}`)}}})()}async refreshAllGitCredentials(){await k78(this.records.values(),(Z)=>Z.ensureOpts?.repo?.connectionId,async(Z)=>{if(this.claimWatchAbort.signal.aborted)return;let X=Z.ensureOpts?.repo;if(!X)return;let G=await this.withFreshCloneUrl(X,eG6);await this.refreshDaemonGitCredential(Z,{...Z.ensureOpts,repo:G}),Z.ensureOpts={...Z.ensureOpts,repo:G}})}async rebootstrapDaemon(Z,X,G){if(this.sentinelToken===null)return!1;let Y=this.workloadConfigPayload(G)??{};try{return await u_(Z,this.sentinelToken,Y,{rotateToken:X}),!0}catch(Q){if(Q instanceof cH0&&Q.status===401)try{return await u_(Z,X,Y,{rotateToken:X}),!0}catch($){return console.warn(`[${xZ}] re-bootstrap retry with claim token failed: ${$ instanceof Error?$.message:String($)}`),!1}return console.warn(`[${xZ}] re-bootstrap failed: ${Q instanceof Error?Q.message:String(Q)}`),!1}}async ensureServicePortForAdoptedSandbox(Z){if(!this.previewGateway||!this.previewUrlPattern)return;await D78(this.kubeConfig,this.namespace,Z,{name:"daemon",port:vw,targetPort:vw})}async ensureHttpRouteForHandle(Z,X,G){if(!this.previewGateway||!this.previewUrlPattern)return;let Y=BY6(this.previewUrlPattern,Z);if(!Y)throw new vZ(`Unable to derive preview hostname for ${Z} from pattern: ${this.previewUrlPattern}`);let Q={apiVersion:`${Cn.API_GROUP}/${Cn.API_VERSION}`,kind:"HTTPRoute",metadata:{name:Z,namespace:this.namespace,labels:rm0(G??void 0,{[h3.role]:"claimed",[h3.sandboxHandle]:Z,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[h3.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[Y],rules:[{backendRefs:[{group:"",kind:"Service",name:X,port:vw}]}]}};await _H0(this.kubeConfig,this.namespace,Q)}async deleteHttpRouteIfManaged(Z){if(!this.previewGateway)return;await yH0(this.kubeConfig,this.namespace,Z)}async rehydrate(Z,X,G){let Y=G.state;if(!Y.adoptedSandboxName&&!Y.podName||!Y.token)return null;let Q=await HF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!Q||!V78(Q))return null;let $=Q.status?.sandbox?.name??Y.adoptedSandboxName??Y.podName??X,J=await this.openAndProbeDaemon($,X);if(!J)return null;if(Y.daemonBootId&&Y.daemonBootId!==J.bootId){if(this.sentinelToken!==null){let W=Y.ensureOpts?.repo?{...Y.ensureOpts,repo:await this.withFreshCloneUrl(Y.ensureOpts.repo)}:Y.ensureOpts??null;if(!await this.rebootstrapDaemon(J.daemonUrl,Y.token,W))return this.closeForwarder(J.daemonForward),null}else console.warn(`[${xZ}] daemon restart detected (handle=${X}): stored bootId=${Y.daemonBootId} live bootId=${J.bootId}`);await this.stateStore?.put(Z,eX,{handle:X,state:{...Y,daemonBootId:J.bootId}}).catch((W)=>console.warn(`[${xZ}] bootId persist failed for ${X}: ${W instanceof Error?W.message:String(W)}`))}return{id:Z,handle:X,adoptedSandboxName:$,token:Y.token,workdir:Y.workdir??pm0,daemonUrl:J.daemonUrl,daemonForward:J.daemonForward,workload:Y.workload??null,daemonBootId:J.bootId,tenant:Y.tenant??null,ensureOpts:Y.ensureOpts??null}}async adopt(Z,X,G){if(!V78(G))return null;let Y=G.status?.sandbox?.name??X;if(this.sentinelToken!==null)return null;let Q=QY6(G);if(!Q)return null;let $=await this.openAndProbeDaemon(Y,X);if(!$)return null;let J=wY6(G);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(Y).catch((W)=>{console.warn(`[${xZ}] Service port backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)}),await this.ensureHttpRouteForHandle(X,Y,J).catch((W)=>{console.warn(`[${xZ}] HTTPRoute backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)});return{id:Z,handle:X,adoptedSandboxName:Y,token:Q,workdir:pm0,daemonUrl:$.daemonUrl,daemonForward:$.daemonForward,workload:null,daemonBootId:$.bootId,tenant:J,ensureOpts:null}}async openAndProbeDaemon(Z,X){let G=await this.openForwarder(Z,vw,X).catch(()=>null);if(!G)return null;let Y=`http://127.0.0.1:${G.localPort}`,Q=await lH0(Y);if(!Q)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:Y,bootId:Q.bootId}}async getRecord(Z){let X=this.records.get(Z);if(X)return X;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(eX,Z);if(!G)return null;let Y=await this.rehydrate(G.id,Z,G);if(Y)this.records.set(Z,Y);return Y}async resurrectByHandle(Z){if(!this.stateStore)return null;let X=await this.stateStore.getByHandle(eX,Z);if(!X)return null;let G=X.state.ensureOpts;if(!G)return null;let Y=G.repo?{...G,repo:await this.withFreshCloneUrl(G.repo)}:G;return await this.ensure(X.id,Y),this.records.get(Z)??null}invalidateRecord(Z){let X=this.records.get(Z);if(!X)return;this.records.delete(Z),this.closeForwarder(X.daemonForward)}recordProxyDuration(Z,X,G,Y,Q){if(!this.metrics)return;this.metrics.proxyDurationMs.record(Y,{...om0(G?.tenant??null),source:Z,sandbox_handle:G?.handle??Q??"",status_code:X||0})}composePreviewUrl(Z){if(this.previewUrlPattern)return OZ0(this.previewUrlPattern,Z.handle);return`http://127.0.0.1:${Z.daemonForward.localPort}/`}toSandbox(Z){return{handle:Z.handle,workdir:Z.workdir,previewUrl:this.composePreviewUrl(Z)}}async persist(Z,X){if(!Z)return;let G={adoptedSandboxName:X.adoptedSandboxName,token:X.token,workdir:X.workdir,workload:X.workload,daemonBootId:X.daemonBootId,tenant:X.tenant,...X.ensureOpts?{ensureOpts:X.ensureOpts}:{}};await Z.put(X.id,eX,{handle:X.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(Z,X,G=Z){let Y=$Y6(G,X);return new Promise((Q,$)=>{let J=(W,K)=>{let N=f78.createServer((F)=>this.handleForwardedConnection(F,Z,X,G));N.once("error",(F)=>{if(F.code==="EADDRINUSE"&&K<XY6){try{N.close()}catch{}let U=am0+(W-am0+1)%b78;J(U,K+1);return}$(F)}),N.listen(W,"127.0.0.1",()=>{let F=N.address();if(!F||typeof F==="string"){N.close(),$(Error("port-forward listener failed to bind"));return}Q({server:N,localPort:F.port})})};J(Y,0)})}handleForwardedConnection(Z,X,G,Y){let Q=new mG6,$=null,J=!1,W=()=>{if(J)return;if(J=!0,Q.destroy(),$)try{$.close()}catch{}if(!Z.destroyed)Z.destroy()};Z.pipe(Q),Z.on("error",W),Z.on("close",W),this.portForward.portForward(this.namespace,X,[G],Z,null,Q).then((K)=>{let N=typeof K==="function"?K():K;if(!N){W();return}if($=N,$.on("close",W),$.on("error",()=>{this.invalidateRecord(Y),W()}),J)try{$.close()}catch{}}).catch((K)=>{console.warn(`[${xZ}] port-forward to ${X}:${G} failed: ${iG6(K)}`),this.invalidateRecord(Y),W()})}closeForwarder(Z){Z.server.close((X)=>{if(X)console.warn(`[${xZ}] port-forward close on :${Z.localPort} errored: ${X instanceof Error?X.message:String(X)}`)})}close(){if(this.closed)return;this.closed=!0,this.claimWatchAbort.abort();for(let Z of this.records.values())this.closeForwarder(Z.daemonForward);this.records.clear()}}function GY6(Z){return{active:Z.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind and owning org. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (studio deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:Z.createCounter("studio.sandbox.ensure.outcome",{description:"Outcome of each ensure() call: fresh provision, resume from state-store after restart, or adopt of a cluster-side claim studio didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:Z.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of studio-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function YY6(){let Z=new x_;return Z.loadFromDefault(),Z}function V78(Z){return Boolean(Z.status?.conditions?.some((X)=>X.type==="Ready"&&X.status==="True"))}function QY6(Z){let X=Z.spec?.env;if(!X)return null;for(let G of X)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function $Y6(Z,X){let G=cG6("sha256").update(`${Z}:${X}`).digest();return am0+G.readUInt32BE(0)%b78}function tm0(Z,X){return new Response(JSON.stringify(X),{status:Z,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function C78(Z){let X=Z.slice(0,WY6);return JY6.test(X)?X:""}function NY6(Z){if(Z===void 0)return null;let X=Z.trim();if(X==="")return null;if(!KY6.test(X))throw Error(`AgentSandboxProvider: envName=${JSON.stringify(X)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Studio sets this from STUDIO_ENV; check the studio chart's configMap.`);return X}function rm0(Z,X={}){let G={...X};if(Z){let Y=C78(Z.orgId),Q=Z.userId?C78(Z.userId):"";if(Y)G[h3.orgId]=Y;if(Q)G[h3.userId]=Q}return G}function HV(Z){let X="";for(let G of Z){let Y=G.codePointAt(0)??0;X+=Y<32||Y===127?" ":G}return X.slice(0,FY6)}function UY6(Z){try{let X=new URL(Z);return X.username="",X.password="",X.toString()}catch{return""}}function HY6(Z){let X={},G=Z.tenant;if(G?.orgSlug)X[DJ.orgSlug]=HV(G.orgSlug);if(G?.orgName)X[DJ.orgName]=HV(G.orgName);if(G?.userEmail)X[DJ.userEmail]=HV(G.userEmail);if(G?.userName)X[DJ.userName]=HV(G.userName);let Y=Z.repo;if(Y){if(Y.displayName)X[DJ.gitRepo]=HV(Y.displayName);let Q=UY6(Y.cloneUrl);if(Q)X[DJ.gitRepoUrl]=HV(Q);let $=Z.branch??Y.branch;if($)X[DJ.gitBranch]=HV($)}return X}function wY6(Z){let X=Z.metadata?.labels;if(!X)return null;let G=X[h3.orgId],Y=X[h3.userId];if(!G)return null;let Q=Z.metadata?.annotations??{};return{orgId:G,...Y?{userId:Y}:{},orgSlug:Q[DJ.orgSlug],orgName:Q[DJ.orgName],userEmail:Q[DJ.userEmail],userName:Q[DJ.userName]}}function om0(Z){return{org_id:Z?.orgId??"",user_id:Z?.userId??"",runner_kind:eX}}function OY6(Z){let X={};if(Z.repo)X.repo=Z.repo;if(Z.workload)X.workload=Z.workload;if(Z.env&&Object.keys(Z.env).length>0)X.env=Z.env;if(Z.tenant)X.tenant=Z.tenant;return Object.keys(X).length>0?X:null}function BY6(Z,X){try{return new URL(OZ0(Z,X)).hostname||null}catch{return null}}var eX="agent-sandbox",xZ="AgentSandboxProvider",wV="x-sandbox-preview-not-ready",nG6="agent-sandbox-system",pG6="studio-sandbox",vw=9000,tG6=3000,pm0="/app",rG6=32,oG6,aG6=900000,sG6=900000,eG6=1800000,ZY6,S78,am0=40000,b78=1e4,XY6=256,h3,DJ,JY6,WY6=63,KY6,FY6=253;var v78=B(()=>{u9();gm0();P78();DZ0();hH0();kn();M78();oG6=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),ZY6=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],S78=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];h3={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id",env:"studio.decocms.com/env"},DJ={orgSlug:"studio.decocms.com/org-slug",orgName:"studio.decocms.com/org-name",userEmail:"studio.decocms.com/user-email",userName:"studio.decocms.com/user-name",gitRepo:"studio.decocms.com/git-repo",gitRepoUrl:"studio.decocms.com/git-repo-url",gitBranch:"studio.decocms.com/git-branch"},JY6=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;KY6=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var x78={};Q6(x78,{waitForSandboxReady:()=>gH0,getSandboxClaim:()=>HF,getHttpRoute:()=>O78,deleteSandboxClaim:()=>bw,deleteHttpRoute:()=>yH0,createSandboxClaim:()=>Vn,applyHttpRoute:()=>_H0,SandboxTimeoutError:()=>FV,SandboxError:()=>vZ,PREVIEW_NOT_READY_HEADER:()=>wV,KubeConfig:()=>x_,K8S_CONSTANTS:()=>OZ,HTTPROUTE_CONSTANTS:()=>Cn,AgentSandboxProvider:()=>sm0});var em0=B(()=>{gm0();kn();hH0();v78()});class mH0{kind=xw;userSub;dispatch;stateStore;records=new Map;constructor(Z){if(!Z.userSub)throw Error("DesktopSandboxProvider requires userSub");if(!Z.dispatch)throw Error("DesktopSandboxProvider requires dispatch");this.userSub=Z.userSub,this.dispatch=Z.dispatch,this.stateStore=Z.stateStore??null}async ensure(Z,X={}){let G=X.branch??X.repo?.branch,Y=Aw(Z,G),Q=this.records.get(Y);if(Q){if(await this.probeHealth(Y))return this.toSandbox(Q);if(this.records.delete(Y),this.stateStore)await this.stateStore.deleteByHandle(xw,Y).catch(()=>{})}else if(this.stateStore){let H=(await this.stateStore.getByHandle(xw,Y))?.state,w=H?.sandboxApiUrl;if(w){if(await this.probeHealth(Y)){let O={handle:Y,sandboxApiUrl:w,previewUrl:H?.previewUrl??w};return this.records.set(Y,O),this.toSandbox(O)}await this.stateStore.deleteByHandle(xw,Y).catch(()=>{})}}let $=$F({userName:X.tenant?.userName,userEmail:X.tenant?.userEmail}),J=JSON.stringify({handle:Y,repo:X.repo,branch:G,...X.workload?{workload:X.workload}:{},...$?{operator:$}:{},...X.offloadAllowedHosts?{offloadAllowedHosts:X.offloadAllowedHosts}:{},...X.offloadAllowSameHostDev!==void 0?{offloadAllowSameHostDev:X.offloadAllowSameHostDev}:{},...X.orgFsConfigJson?{orgFsConfigJson:X.orgFsConfigJson}:{}}),W=await this.dispatchJson("POST","/api/sandboxes",J),K=JSON.parse(W);if(typeof K.sandboxApiUrl!=="string")throw Error("desktop ensure: daemon did not return a sandboxApiUrl string");let N=typeof K.previewUrl==="string"?K.previewUrl:K.sandboxApiUrl,F={handle:Y,sandboxApiUrl:K.sandboxApiUrl,previewUrl:N};if(this.records.set(Y,F),this.stateStore)await this.stateStore.put(Z,xw,{handle:Y,state:{handle:Y,sandboxApiUrl:K.sandboxApiUrl,previewUrl:N}});return this.toSandbox(F)}async proxyDaemonRequest(Z,X,G){let Y=X.startsWith("/")?X:`/${X}`,Q=Y.startsWith("/_sandbox/")?Y.slice(9):Y,$=`/_sandbox/${encodeURIComponent(Z)}${Q}`,J=new Headers(G.headers);for(let L of["host","cookie","connection","keep-alive","transfer-encoding","upgrade","authorization"])J.delete(L);let W={};J.forEach((L,z)=>{W[z]=L});let K;if(G.body!=null)K=await EY6(G.body);let F=this.dispatch(this.userSub,{method:G.method,path:$,headers:W,body:K},{signal:G.signal})[Symbol.asyncIterator](),U=DY6(),H=200,w={"content-type":"application/octet-stream"},O=[];try{while(!0){let L=await F.next();if(L.done)break;let z=L.value;if(z.headers){H=z.headers.status,w=z.headers.headers;break}if(z.data!=null){let j=U.push(z.data);if(j.length)O.push(j)}}}catch(L){let z=L instanceof Error?L.message:"dispatch error";return new Response(JSON.stringify({error:z}),{status:502,headers:{"content-type":"application/json"}})}let D=!1,E=new ReadableStream({async start(L){for(let z of O)L.enqueue(z)},async pull(L){try{while(!0){let z=await F.next();if(D)return;if(z.done){let P=U.flush();if(P.length)L.enqueue(P);L.close();return}let j=z.value;if(j.data!=null){let P=U.push(j.data);if(P.length){L.enqueue(P);return}}}}catch(z){if(!D)L.error(z)}},cancel(){D=!0,F.return?.()}});return new Response(E,{status:H,headers:w})}async alive(Z){return this.probeHealth(Z)}async probeHealth(Z){let X=new AbortController,G=setTimeout(()=>X.abort(),3000);try{return await this.dispatchJson("GET",`/api/sandboxes/${encodeURIComponent(Z)}`,void 0,X.signal),!0}catch{return!1}finally{clearTimeout(G)}}async forgetHandle(Z){if(this.records.delete(Z),this.stateStore)await this.stateStore.deleteByHandle(xw,Z).catch(()=>{})}async delete(Z){if(this.records.delete(Z),this.stateStore)await this.stateStore.deleteByHandle(xw,Z).catch(()=>{});try{await this.dispatchJson("DELETE",`/api/sandboxes/${encodeURIComponent(Z)}`)}catch(X){if(!(X instanceof Error?X.message:String(X)).includes("404"))throw X}}async getPreviewUrl(Z){return(await this.resolveRecord(Z))?.previewUrl??null}async localWorkdir(Z){return null}async*watchClaimLifecycle(Z,X){yield{kind:"ready"}}toSandbox(Z){return{handle:Z.handle,workdir:Z.sandboxApiUrl,previewUrl:Z.previewUrl}}async resolveRecord(Z){let X=this.records.get(Z);if(X)return X;if(!this.stateStore)return null;let Y=(await this.stateStore.getByHandle(xw,Z))?.state,Q=Y?.sandboxApiUrl;if(!Q)return null;let $={handle:Z,sandboxApiUrl:Q,previewUrl:Y?.previewUrl??Q};return this.records.set(Z,$),$}async dispatchJson(Z,X,G,Y){let Q={accept:"application/json"};if(G!==void 0)Q["content-type"]="application/json";let $=this.dispatch(this.userSub,{method:Z,path:X,headers:Q,body:G},{signal:Y}),J=null,W="";for await(let N of $)if(N.headers)J=N.headers.status;else if(N.data!=null)W+=N.data;let K=Buffer.from(W,"base64").toString("utf8");if(J!=null&&(J<200||J>=300))throw Error(`daemon returned ${J}: ${K}`);return K}}function _78(Z){return new mH0(Z)}function DY6(){let Z="";return{push(X){if(X.length===0)return Zi0;Z+=X;let G=Z.length-Z.length%4;if(G===0)return Zi0;let Y=Z.slice(0,G);return Z=Z.slice(G),new Uint8Array(Buffer.from(Y,"base64"))},flush(){if(Z.length===0)return Zi0;let X=Z;return Z="",new Uint8Array(Buffer.from(X,"base64"))}}}async function EY6(Z){if(typeof Z==="string")return Z;if(Z instanceof ArrayBuffer)return Buffer.from(Z).toString("utf8");if(ArrayBuffer.isView(Z))return Buffer.from(Z.buffer,Z.byteOffset,Z.byteLength).toString("utf8");if(Z instanceof URLSearchParams)return Z.toString();return await new Response(Z).text()}var xw="user-desktop",Zi0;var y78=B(()=>{DZ0();BZ0();Zi0=new Uint8Array(0)});var g78={};Q6(g78,{createDesktopProvider:()=>_78,DesktopSandboxProvider:()=>mH0});var h78=B(()=>{y78()});var i78={};Q6(i78,{subscribeLifecycle:()=>Gi0,getSandboxProviderByKind:()=>bn,getOrInitSharedRunner:()=>IY6,buildDesktopProvider:()=>iH0,__resetSharedLifecyclesForTesting:()=>VY6});function d78(Z,X){let G=u78[Z];if(G)return Promise.resolve(G);let Y=Xi0[Z];if(Y)return Y;let Q=X().then(($)=>{return u78[Z]=$,$}).finally(()=>{delete Xi0[Z]});return Xi0[Z]=Q,Q}function jY6(){let Z=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return Z&&Z.trim()!==""?Z:void 0}function AY6(){let Z=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return Z&&Z.trim()!==""?Z:void 0}function PY6(){let Z=process.env.STUDIO_ENV;return Z&&Z.trim()!==""?Z:void 0}function TY6(){let Z=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return Z&&Z.trim()!==""?Z:void 0}function RY6(){let Z=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),X=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!Z&&!X)return;if(!Z||!X)throw Error("STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME and STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE must both be set, or both unset. Half-configured per-claim HTTPRoute routing would silently fail to attach.");return{name:Z,namespace:X}}async function m78(Z,X){let G=jY6();switch(Z){case"agent-sandbox":{let Y=new il0(X),{AgentSandboxProvider:Q}=await Promise.resolve().then(() => (em0(),x78)),$=new qN(W1().encryptionKey);return new Q({stateStore:Y,previewUrlPattern:G,sandboxTemplateName:AY6(),envName:PY6(),previewGateway:RY6(),sentinelToken:TY6(),meter:B4,mintCloneUrl:async(J,W)=>{if(!J.connectionId)return null;let K=_18(J.cloneUrl);if(!K)return null;let{cloneUrl:N}=await Pw(J.connectionId,K.owner,K.name,X,$,{bufferMs:W?.bufferMs});return N}})}case"user-desktop":throw Error("user-desktop provider cannot be instantiated without a per-run link claim \u2014 call resolveSandboxProvider, which binds the link before constructing the provider.");default:throw Error(`Unknown sandbox provider kind: ${String(Z)}`)}}async function iH0(Z,X){let{DesktopSandboxProvider:G}=await Promise.resolve().then(() => (h78(),g78)),{getProxyDispatch:Y}=await Promise.resolve().then(() => (Qi0(),Yi0)),Q=new ml0(Z.db);if(!X)throw Error("buildDesktopProvider: userSub must be a non-empty string");let $=Y();return new G({userSub:X,dispatch:$,stateStore:Q})}function bn(Z,X){return d78(X,()=>m78(X,Z.db))}async function IY6(){let Z;try{Z=yE()}catch(G){return console.warn("[lifecycle] cannot resolve sandbox runner:",G instanceof Error?G.message:String(G)),null}return await d78(Z,()=>m78(Z,P4().db))}function Gi0(Z,X,G){let Y=_w.get(X);if(Y){if(Y.terminated){if(Y.lastPhase)try{G(Y.lastPhase)}catch{}return{unsubscribe:kY6}}if(Y.listeners.add(G),Y.lastPhase)try{G(Y.lastPhase)}catch{}return c78(X,Y,G)}let Q=new AbortController,$={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:Q};return _w.set(X,$),SY6(Z,X,$),c78(X,$,G)}function kY6(){}function c78(Z,X,G){return{unsubscribe(){if(_w.get(Z)!==X)return;if(X.listeners.delete(G),X.listeners.size===0)_w.delete(Z),X.abort.abort()}}}async function SY6(Z,X,G){let Y=null;try{for await(let Q of Z.watchClaimLifecycle(X,G.abort.signal)){if(G.abort.signal.aborted)break;G.lastPhase=Q;let $=Q.kind==="ready"||Q.kind==="failed";if($)G.terminated=!0;let J=Array.from(G.listeners);for(let W of J)try{W(Q)}catch{}if($)break}}catch(Q){Y=Q}finally{if(!G.terminated&&!G.abort.signal.aborted&&G.listeners.size>0){let Q={kind:"failed",reason:"unknown",message:Y instanceof Error?Y.message:"Lifecycle watcher ended unexpectedly"};G.lastPhase=Q,G.terminated=!0;for(let $ of Array.from(G.listeners))try{$(Q)}catch{}}if(_w.get(X)===G)_w.delete(X)}}function VY6(){for(let Z of _w.values())Z.abort.abort();_w.clear()}var LY6,zY6,l78,u78,Xi0,qY6,MY6,_w;var vn=B(()=>{y3();GY();H9();I18();f18();Kn();pc();_8();LY6=Symbol.for("decocms.sandbox.lifecycle.runners"),zY6=Symbol.for("decocms.sandbox.lifecycle.inflight"),l78=globalThis,u78=l78[LY6]??={},Xi0=l78[zY6]??={};qY6=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),MY6=globalThis,_w=MY6[qY6]??=new Map});function yw(Z,X){return Aw(Z,X)}var xn=B(()=>{y3()});async function $i0(Z,X){if(X.length===0)return;let G=await bn(Z,"agent-sandbox");for(let Y=0;Y<X.length;Y+=n78){let Q=X.slice(Y,Y+n78);await Promise.all(Q.map(async($)=>{let J=_3({orgId:$.organizationId,virtualMcpId:$.virtualMcpId,branch:$.branch}),W=mW(J),K={organizationId:$.organizationId,virtualMcpId:$.virtualMcpId,branch:$.branch},N=await Z.storage.agentSandboxSessions.withLock(K,(F)=>F.beginDelete(K,$.lastStartedBy));if(!N)return;await G.delete(N.sandboxHandle??yw(W,$.branch),W),await Z.storage.agentSandboxSessions.withLock(K,(F)=>F.completeDelete(K,N.generation))}))}}async function p78(Z,X,G){while(!0){let Y=await Z.storage.agentSandboxSessions.listByVirtualMcp(X,G,{limit:200});if(Y.length===0)return;await $i0(Z,Y)}}var n78=20;var Ji0=B(()=>{y3();vn();xn()});import{z as Wi0}from"zod";var CY6,fY6,Ki0;var t78=B(()=>{Ew();UJ();X1();ii();BH();Ji0();CY6=Wi0.object({id:Wi0.string().describe("ID of the virtual MCP to delete")}),fY6=Wi0.object({item:CX.describe("The deleted virtual MCP entity")}),Ki0=e({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:CY6,outputSchema:fY6,handler:async(Z,X)=>{L0(X);let G=w0(X);await X.access.check();let Y=await X.storage.virtualMcps.findById(Z.id);if(!Y)throw Error(`Virtual MCP not found: ${Z.id}`);if(Y.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Z.id}`);if(await p78(X,G.id,Z.id),await X.storage.virtualMcps.delete(Z.id),X.orgFs)await wl0(X.orgFs,Z.id,C1(X)??"system");let Q=Y.metadata?.githubRepo?.connectionId;if(Q)try{let $=await X.storage.connections.findById(Q,G.id);if($&&b3($)){let W=await new V9(X.db,X.vault).get(Q);if(W?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${W.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await X.storage.connections.delete(Q)}}catch($){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Q,error:$.message})}return{item:Y}}})});import{z as VY}from"zod";var bY6,Ni0;var r78=B(()=>{X1();bY6=VY.object({id:VY.string(),virtualMcpId:VY.string(),pluginId:VY.string(),connectionId:VY.string().nullable(),settings:VY.record(VY.string(),VY.unknown()).nullable(),createdAt:VY.string(),updatedAt:VY.string()}),Ni0=e({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:VY.object({virtualMcpId:VY.string().describe("Virtual MCP ID"),pluginId:VY.string().describe("Plugin ID")}),outputSchema:VY.object({config:bY6.nullable()}),handler:async(Z,X)=>{L0(X);let G=w0(X);await X.access.check();let{virtualMcpId:Y,pluginId:Q}=Z,$=await X.storage.connections.findById(Y);if(!$||$.organization_id!==G.id)return{config:null};let J=await X.storage.virtualMcpPluginConfigs.get(Y,Q);if(!J)return{config:null};return{config:{id:J.id,virtualMcpId:J.virtualMcpId,pluginId:J.pluginId,connectionId:J.connectionId,settings:J.settings,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});import{z as f7}from"zod";var vY6,Fi0;var o78=B(()=>{X1();Cb();tZ();vY6=f7.object({id:f7.string(),virtualMcpId:f7.string(),pluginId:f7.string(),connectionId:f7.string().nullable(),settings:f7.record(f7.string(),f7.unknown()).nullable(),createdAt:f7.string(),updatedAt:f7.string()}),Fi0=e({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:f7.object({virtualMcpId:f7.string().describe("Virtual MCP ID"),pluginId:f7.string().describe("Plugin ID"),connectionId:f7.string().nullable().optional().describe("MCP connection to bind"),settings:f7.record(f7.string(),f7.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:f7.object({config:vY6}),handler:async(Z,X)=>{L0(X);let G=w0(X);await X.access.check();let{virtualMcpId:Y,pluginId:Q,connectionId:$,settings:J}=Z,W=C1(X),K=await X.storage.connections.findById(Y);if(!K)throw Error(`Connection not found: ${Y}`);if(K.organization_id!==G.id)throw Error(`Connection not found: ${Y}`);if(K.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Y}`);let N=$?await X.storage.connections.findById($):null;if($&&N&&N.organization_id!==G.id)throw Error(`Connection not found: ${$}`);if($&&K.organization_id&&!N&&b$()&&Q10($,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let U=Vb(K.organization_id,qZ());await X.storage.connections.create({...U,organization_id:K.organization_id,created_by:W})}else if($&&!N)throw Error(`Connection not found: ${$}`);let F=await X.storage.virtualMcpPluginConfigs.upsert(Y,Q,{connectionId:$,settings:J});return{config:{id:F.id,virtualMcpId:F.virtualMcpId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});import{z as gG}from"zod";var xY6,Ui0;var a78=B(()=>{X1();BH();xY6=gG.object({connectionId:gG.string(),toolName:gG.string(),label:gG.string(),icon:gG.string().nullable().optional()}),Ui0=e({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:gG.object({virtualMcpId:gG.string().describe("Virtual MCP ID"),pinnedViews:gG.array(xY6).describe("Pinned views to set for the virtual MCP sidebar"),layout:gG.object({defaultMainView:gG.object({type:gG.string(),id:gG.string().optional(),toolName:gG.string().optional()}).nullable().optional(),chatDefaultOpen:gG.boolean().nullable().optional()}).optional()}),outputSchema:gG.object({item:CX.nullable()}),handler:async(Z,X)=>{L0(X);let G=w0(X);await X.access.check();let{virtualMcpId:Y,pinnedViews:Q,layout:$}=Z,J=C1(X),W=await X.storage.virtualMcps.findById(Y);if(!W)throw Error(`Virtual MCP not found: ${Y}`);if(W.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Y}`);let K=W.metadata?.ui??{},N={...K,pinnedViews:Q.length>0?Q:null,layout:$??K.layout??null};return{item:await X.storage.virtualMcps.update(Y,J??"system",{metadata:{...W.metadata,ui:N}})}}})});import{z as wF}from"zod";var _Y6,yY6,Hi0;var s78=B(()=>{X1();_Y6=wF.object({ids:wF.array(wF.string()).describe("Virtual MCP ids to look up")}),yY6=wF.object({items:wF.array(wF.object({id:wF.string(),last_used_at:wF.string().optional(),last_used_by:wF.string().optional()}))}),Hi0=e({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_Y6,outputSchema:yY6,handler:async(Z,X)=>{L0(X),w0(X),await X.access.check();let G=await X.storage.threads.findLastUsedByVirtualMcpIds(Z.ids);return{items:Z.ids.map((Y)=>({id:Y,last_used_at:G.get(Y)?.last_used_at,last_used_by:G.get(Y)?.last_used_by}))}}})});var e78=B(()=>{U18();H18();w18();O18();t78();r78();o78();a78();s78()});import{z as F9}from"zod";var wi0;var ZX8=B(()=>{H9();X1();wi0=e({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:F9.object({id:F9.string().describe("Log ID to fetch")}),outputSchema:F9.object({log:F9.object({id:F9.string().optional(),organizationId:F9.string(),connectionId:F9.string(),toolName:F9.string(),input:F9.record(F9.string(),F9.unknown()),output:F9.record(F9.string(),F9.unknown()),isError:F9.boolean(),errorMessage:F9.string().nullish(),durationMs:F9.number(),timestamp:F9.string(),userId:F9.string().nullish(),requestId:F9.string(),userAgent:F9.string().nullish(),virtualMcpId:F9.string().nullish(),properties:F9.record(F9.string(),F9.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async(Z,X)=>{await X.access.check(),await aQ();let G=w0(X),Y=await X.storage.monitoring.getById(G.id,Z.id);if(!Y)return{log:null};return{log:{...Y,timestamp:Y.timestamp instanceof Date?Y.timestamp.toISOString():Y.timestamp}}}})});import{z as O4}from"zod";var hY6,Oi0;var XX8=B(()=>{H9();X1();hY6=O4.object({id:O4.string().optional().describe("Unique log identifier"),organizationId:O4.string().describe("Organization ID"),connectionId:O4.string().describe("Connection ID"),toolName:O4.string().describe("Name of the tool that was called"),isError:O4.boolean().describe("Whether the call resulted in an error"),errorMessage:O4.string().nullish().describe("Error message if applicable"),durationMs:O4.number().describe("Call duration in milliseconds"),timestamp:O4.string().describe("ISO 8601 timestamp of the call"),userId:O4.string().nullish().describe("User who triggered the call"),requestId:O4.string().describe("Unique request identifier"),userAgent:O4.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:O4.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:O4.record(O4.string(),O4.string()).nullish().describe("Custom key-value metadata attached to the log")}),Oi0=e({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:O4.object({connectionId:O4.string().optional().describe("Filter by connection ID"),excludeConnectionIds:O4.array(O4.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:O4.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:O4.string().optional().describe("Filter by tool name"),isError:O4.boolean().optional().describe("Filter by error status"),startDate:O4.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:O4.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:O4.number().default(20).describe("Maximum number of results"),offset:O4.number().default(0).describe("Offset for pagination"),properties:O4.record(O4.string(),O4.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:O4.array(O4.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:O4.record(O4.string(),O4.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:O4.record(O4.string(),O4.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:O4.object({logs:O4.array(hY6).describe("Array of monitoring logs"),total:O4.number().describe("Total number of logs matching filters"),offset:O4.number().describe("Current offset for pagination"),limit:O4.number().describe("Current limit for pagination")}),handler:async(Z,X)=>{await aQ();let G=w0(X),Q=Z.properties||Z.propertyKeys||Z.propertyPatterns||Z.propertyInValues?{properties:Z.properties,propertyKeys:Z.propertyKeys,propertyPatterns:Z.propertyPatterns,propertyInValues:Z.propertyInValues}:void 0,$={organizationId:G.id,connectionId:Z.connectionId,excludeConnectionIds:Z.excludeConnectionIds,virtualMcpId:Z.virtualMcpId,toolName:Z.toolName,isError:Z.isError,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,limit:Z.limit,offset:Z.offset,propertyFilters:Q},J=await X.storage.monitoring.query($);return{logs:J.logs.map(({input:W,output:K,...N})=>({...N,timestamp:N.timestamp instanceof Date?N.timestamp.toISOString():N.timestamp})),total:J.total,offset:Z.offset,limit:Z.limit}}})});import{z as N8}from"zod";var Bi0;var GX8=B(()=>{H9();X1();Bi0=e({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:N8.object({startDate:N8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:N8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:N8.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:N8.array(N8.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:N8.array(N8.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:N8.array(N8.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:N8.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:N8.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:N8.array(N8.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:N8.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:N8.object({totalCalls:N8.number().describe("Total number of tool calls"),errorRate:N8.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:N8.number().describe("Average call duration in milliseconds"),errorRatePercent:N8.string().optional().describe("Error rate as a percentage string"),totalErrors:N8.number().optional().describe("Total number of errors"),p50DurationMs:N8.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:N8.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:N8.array(N8.object({connectionId:N8.string(),calls:N8.number(),errors:N8.number(),errorRate:N8.number(),avgDurationMs:N8.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:N8.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:N8.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:N8.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:N8.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:N8.array(N8.object({toolName:N8.string(),connectionId:N8.string().nullable(),calls:N8.number(),inputTokens:N8.number().optional(),outputTokens:N8.number().optional(),costUsd:N8.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:N8.array(N8.object({timestamp:N8.string(),toolName:N8.string(),calls:N8.number(),errors:N8.number(),avg:N8.number(),p95:N8.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:N8.array(N8.object({timestamp:N8.string(),calls:N8.number(),errors:N8.number(),errorRate:N8.number(),avg:N8.number(),p50:N8.number(),p95:N8.number(),inputTokens:N8.number().optional(),outputTokens:N8.number().optional(),totalTokens:N8.number().optional(),costUsd:N8.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async(Z,X)=>{let G=w0(X);if(await X.access.check(),await aQ(),Z.interval&&Z.llmUsage)return X.storage.monitoring.queryLlmUsageStats({organizationId:G.id,interval:Z.interval,connectionId:Z.connectionIds?.[0]??"decopilot",startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,userIds:Z.userIds,topN:Z.topN});if(Z.interval){let Q=await X.storage.monitoring.queryMetricTimeseries({organizationId:G.id,interval:Z.interval,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,filters:{connectionIds:Z.connectionIds,excludeConnectionIds:Z.excludeConnectionIds,toolNames:Z.toolNames,status:Z.status}});if(!Z.topN)return Q;let $=await X.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:G.id,interval:Z.interval,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,topN:Z.topN,filters:{connectionIds:Z.connectionIds,excludeConnectionIds:Z.excludeConnectionIds,toolNames:Z.toolNames,status:Z.status}});return{...Q,topTools:$.topTools,topToolsTimeseries:$.timeseries}}let Y=await X.storage.monitoring.getStats({organizationId:G.id,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0});return{...Y,errorRatePercent:(Y.errorRate*100).toFixed(2)}}})});import{z as hG}from"zod";var Di0;var YX8=B(()=>{H9();X1();Di0=e({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hG.object({threadIds:hG.array(hG.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:hG.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:hG.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:hG.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:hG.object({items:hG.array(hG.object({threadId:hG.string(),calls:hG.number(),inputTokens:hG.number(),outputTokens:hG.number(),totalTokens:hG.number(),costUsd:hG.number()}))}),handler:async(Z,X)=>{let G=w0(X);return await X.access.check(),await aQ(),{items:await X.storage.monitoring.queryThreadUsage({organizationId:G.id,connectionId:Z.connectionId??"decopilot",threadIds:Z.threadIds,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0})}}})});var QX8=B(()=>{ZX8();XX8();GX8();YX8()});function nH0(Z){return typeof Z==="string"&&cY6.has(Z.trim().toLowerCase())}var cY6;var Ei0=B(()=>{cY6=new Set([".well-known","_admin","api","auth","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as fQ}from"zod";var Li0;var $X8=B(()=>{X1();Ei0();Li0=e({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:fQ.object({slug:fQ.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine((Z)=>!nH0(Z),"Slug is reserved by Studio"),name:fQ.string().min(1).max(255),description:fQ.string().optional()}),outputSchema:fQ.object({id:fQ.string(),name:fQ.string(),slug:fQ.string(),logo:fQ.string().nullable().optional(),metadata:fQ.any().optional(),createdAt:fQ.string().datetime().describe("ISO 8601 timestamp"),members:fQ.array(fQ.any()).optional()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=C1(X);if(!G)throw Error("User ID required to create organization");let Y=await X.boundAuth.organization.create({name:Z.name,slug:Z.slug,metadata:Z.description?{description:Z.description}:void 0,userId:G});if(!Y)throw Error("Failed to create organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as EJ}from"zod";var zi0;var JX8=B(()=>{X1();zi0=e({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:EJ.object({userId:EJ.string().optional()}),outputSchema:EJ.object({organizations:EJ.array(EJ.object({id:EJ.string(),name:EJ.string(),slug:EJ.string(),logo:EJ.string().nullable().optional(),metadata:EJ.any().optional(),createdAt:EJ.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=C1(X),Y=Z.userId||G;if(!Y)throw Error("User ID required to list organizations");return{organizations:(await X.boundAuth.organization.list(Y)).map(($)=>({...$,createdAt:$.createdAt instanceof Date?$.createdAt.toISOString():$.createdAt}))}}})});import{z as u3}from"zod";var ji0;var WX8=B(()=>{X1();ji0=e({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:u3.object({}),outputSchema:u3.object({id:u3.string(),name:u3.string(),slug:u3.string(),logo:u3.string().nullable().optional(),metadata:u3.any().optional(),createdAt:u3.string().datetime().describe("ISO 8601 timestamp"),members:u3.array(u3.any()).optional(),invitations:u3.array(u3.any()).optional()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.boundAuth.organization.get(G);if(!Y)throw Error("No active organization found");let Q=new Date,$=Y.invitations?.filter((J)=>new Date(J.expiresAt)>Q);return{...Y,invitations:$,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as LJ}from"zod";var Ai0;var KX8=B(()=>{X1();Ai0=e({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:LJ.object({id:LJ.string(),name:LJ.string().min(1).max(255).optional(),description:LJ.string().optional()}),outputSchema:LJ.object({id:LJ.string(),name:LJ.string(),slug:LJ.string(),logo:LJ.string().nullable().optional(),metadata:LJ.any().optional(),createdAt:LJ.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{L0(X),await X.access.check();let G={};if(Z.name)G.name=Z.name;if(Z.description)G.metadata={description:Z.description};let Y=await X.boundAuth.organization.update({organizationId:Z.id,data:G});if(!Y)throw Error("Failed to update organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as _n}from"zod";var Pi0;var NX8=B(()=>{X1();Pi0=e({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_n.object({id:_n.string()}),outputSchema:_n.object({success:_n.boolean(),id:_n.string()}),handler:async(Z,X)=>{return L0(X),await X.access.check(),await X.boundAuth.organization.update({organizationId:Z.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:Z.id}}})});import{z as h8}from"zod";var yn,gn,c_,FX8,pH0,hn,un,gw;var OF=B(()=>{yn=h8.object({title:h8.string(),url:h8.string(),icon:h8.string()}),gn=h8.object({registries:h8.record(h8.string(),h8.object({enabled:h8.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:h8.array(h8.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),c_=h8.object({keyId:h8.string(),modelId:h8.string(),title:h8.string().optional()}).nullable(),FX8=h8.enum(["fast","smart","thinking","image","web_search","deep_research"]),pH0=h8.enum(["fast","smart","thinking"]),hn=h8.object({tiers:h8.object({fast:c_,smart:c_,thinking:c_,image:c_,web_search:c_,deep_research:c_})}),un=h8.object({ids:h8.array(h8.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),gw=h8.object({id:h8.string().describe("Brand context ID"),name:h8.string().describe("Company name"),domain:h8.string().describe("Company domain (e.g. example.com)"),overview:h8.string().describe("Company overview / description"),logo:h8.string().nullable().optional().describe("Logo URL"),favicon:h8.string().nullable().optional().describe("Favicon URL"),ogImage:h8.string().nullable().optional().describe("OG image URL"),fonts:h8.object({heading:h8.string().optional().describe("Font family for headings"),body:h8.string().optional().describe("Font family for body text"),code:h8.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:h8.object({primary:h8.string().optional().describe("Primary brand color (hex)"),secondary:h8.string().optional().describe("Secondary brand color (hex)"),accent:h8.string().optional().describe("Accent / highlight color (hex)"),background:h8.string().optional().describe("Background color (hex)"),foreground:h8.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:h8.array(h8.record(h8.string(),h8.unknown())).nullable().optional().describe("Brand images"),metadata:h8.record(h8.string(),h8.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:h8.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:h8.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as BF}from"zod";var Ti0;var UX8=B(()=>{X1();OF();Ti0=e({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:BF.object({}),outputSchema:BF.object({organizationId:BF.string(),sidebar_items:BF.array(yn).nullable().optional(),enabled_plugins:BF.array(BF.string()).nullable().optional(),registry_config:gn.nullable().optional(),simple_mode:hn.nullable().optional(),default_home_agents:un.nullable().optional(),reports_only:BF.boolean().nullable().optional(),createdAt:BF.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:BF.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.organizationSettings.get(G);if(!Y)return{organizationId:G};return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as CY}from"zod";var Ri0;var HX8=B(()=>{X1();OF();Ri0=e({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:CY.object({organizationId:CY.string(),sidebar_items:CY.array(yn).optional(),enabled_plugins:CY.array(CY.string()).optional(),registry_config:gn.optional(),simple_mode:hn.optional(),default_home_agents:un.optional(),reports_only:CY.boolean().optional()}),outputSchema:CY.object({organizationId:CY.string(),sidebar_items:CY.array(yn).nullable().optional(),enabled_plugins:CY.array(CY.string()).nullable().optional(),registry_config:gn.nullable().optional(),simple_mode:hn.nullable().optional(),default_home_agents:un.nullable().optional(),reports_only:CY.boolean().nullable().optional(),createdAt:CY.string().datetime().describe("ISO 8601 timestamp"),updatedAt:CY.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{if(L0(X),await X.access.check(),w0(X).id!==Z.organizationId)throw Error("Cannot update settings for a different organization");let Y=await X.storage.organizationSettings.upsert(Z.organizationId,{sidebar_items:Z.sidebar_items,enabled_plugins:Z.enabled_plugins,registry_config:Z.registry_config,simple_mode:Z.simple_mode,default_home_agents:Z.default_home_agents,reports_only:Z.reports_only});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as zJ}from"zod";var wX8,Ii0,qi0;var OX8=B(()=>{X1();OF();wX8=gw.extend({organizationId:zJ.string(),archivedAt:zJ.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:zJ.string().describe("ISO 8601 timestamp"),updatedAt:zJ.string().describe("ISO 8601 timestamp")}),Ii0=e({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:zJ.object({includeArchived:zJ.boolean().optional().describe("Include archived brands in the list")}),outputSchema:zJ.object({items:zJ.array(wX8)}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await X.storage.brandContext.list(G,{includeArchived:Z.includeArchived})).map((Q)=>({...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}))}}}),qi0=e({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:zJ.object({id:zJ.string().describe("Brand context ID")}),outputSchema:wX8.extend({organizationId:zJ.string()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.brandContext.get(Z.id,G);if(!Y)throw Error("Brand context not found");return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as OV}from"zod";var BX8,Mi0,ki0,Si0;var DX8=B(()=>{X1();OF();BX8=gw.extend({organizationId:OV.string(),createdAt:OV.string().describe("ISO 8601 timestamp"),updatedAt:OV.string().describe("ISO 8601 timestamp")}),Mi0=e({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:gw.omit({id:!0}),outputSchema:BX8,handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.brandContext.create(G,{name:Z.name,domain:Z.domain,overview:Z.overview,logo:Z.logo??null,favicon:Z.favicon??null,ogImage:Z.ogImage??null,fonts:Z.fonts??null,colors:Z.colors??null,images:Z.images??null,metadata:Z.metadata??null});return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}}),ki0=e({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gw.partial().required({id:!0}),outputSchema:BX8,handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await X.storage.brandContext.get(Z.id,G))throw Error("Brand context not found");let{id:Q,...$}=Z;if($.isDefault===!0)await X.storage.brandContext.setDefault(Q,G);let J=await X.storage.brandContext.update(Q,G,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo!==void 0?$.logo??null:void 0,favicon:$.favicon!==void 0?$.favicon??null:void 0,ogImage:$.ogImage!==void 0?$.ogImage??null:void 0,fonts:$.fonts!==void 0?$.fonts??null:void 0,colors:$.colors!==void 0?$.colors??null:void 0,images:$.images!==void 0?$.images??null:void 0,metadata:$.metadata!==void 0?$.metadata??null:void 0,archivedAt:$.archivedAt!==void 0?$.archivedAt??null:void 0,isDefault:$.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),Si0=e({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:OV.object({id:OV.string().describe("Brand context ID")}),outputSchema:OV.object({success:OV.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await X.storage.brandContext.get(Z.id,G))throw Error("Brand context not found");return await X.storage.brandContext.update(Z.id,G,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function tH0(Z,X,G){let Y=Z.trim();if(!Y.startsWith("http"))Y=`https://${Y}`;let Q=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:JSON.stringify({url:Y,formats:["branding"]})});if(!Q.ok){let H=await Q.text().catch(()=>"");throw Error(`Firecrawl API error: ${Q.status} ${H.slice(0,200)}`)}let $=await Q.json();if(!$.success||!$.data?.branding)return null;let J=$.data.branding,W=$.data.metadata??{},K=mY6(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((H)=>H.trim()).filter(Boolean)?.slice().sort((H,w)=>H.length-w.length)[0]??W.ogSiteName??G??Z,domain:Z,overview:W.description??"",logo:K.logo,favicon:K.favicon,ogImage:K.ogImage,fonts:K.fonts,colors:K.colors,images:null,metadata:Object.keys(K.metadata).length>0?K.metadata:null}}function mY6(Z,X){let G=Z.images??{},Y=Z.colors??{},Q={};for(let[F,U]of Object.entries(Y))if(typeof U==="string"&&U&&lY6.has(F))Q[F]=U;let $={},W=(Z.typography??{}).fontFamilies??{};for(let[F,U]of Object.entries(W))if(typeof U==="string"&&U){let H=dY6[F.toLowerCase()];if(H&&!$[H])$[H]=U}let K=Z.fonts;if(Array.isArray(K))for(let F of K){let U=F.family;if(typeof U==="string"&&U&&!$.body)$.body=U}let N={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if(Z[F]!==void 0)N[F]=Z[F];return{logo:G.logo??null,favicon:G.favicon??null,ogImage:G.ogImage??X.ogImage??null,fonts:Object.keys($).length>0?$:null,colors:Object.keys(Q).length>0?Q:null,metadata:N}}var lY6,dY6;var Vi0=B(()=>{lY6=new Set(["primary","secondary","accent","background","foreground"]),dY6={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as rH0}from"zod";var iY6,Ci0;var EX8=B(()=>{X1();Vi0();OF();iY6=gw.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:rH0.boolean()}),Ci0=e({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:rH0.object({domain:rH0.string().describe("Website domain to extract brand from"),brandId:rH0.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:iY6,modelSummary:(Z)=>Z.success?`Brand saved (id=${Z.id}, name=${Z.name}, domain=${Z.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=X.firecrawlApiKey;if(!Y)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Q=await tH0(Z.domain,Y,Z.domain);if(!Q)throw Error("Firecrawl did not return branding data for this URL");let $={name:Q.name,domain:Q.domain,overview:Q.overview,logo:Q.logo,favicon:Q.favicon,ogImage:Q.ogImage,fonts:Q.fonts,colors:Q.colors,images:Q.images,metadata:Q.metadata},J=Z.brandId?await(async()=>{if(!await X.storage.brandContext.get(Z.brandId,G))throw Error("Brand context not found");return X.storage.brandContext.update(Z.brandId,G,$)})():await X.storage.brandContext.create(G,$);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function LX8(Z){let X=Z.metadata??{};return{id:Z.id,name:Z.name,domain:Z.domain||void 0,colors:Z.colors??void 0,fonts:Z.fonts??void 0,assets:Z.logo||Z.favicon||Z.ogImage?{logo:Z.logo??void 0,favicon:Z.favicon??void 0,ogImage:Z.ogImage??void 0}:void 0,overview:Z.overview||void 0,tagline:typeof X.tagline==="string"?X.tagline:void 0,tone:typeof X.tone==="string"?X.tone:void 0,metadata:(()=>{let G=Object.fromEntries(Object.entries(X).filter(([Y])=>Y!=="tagline"&&Y!=="tone"));return Object.keys(G).length>0?G:void 0})()}}var fi0,bi0;var zX8=B(()=>{Rl0();X1();fi0=e({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:GZ0,outputSchema:oi,handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=Z.id?await X.storage.brandContext.get(Z.id,G):await X.storage.brandContext.getDefault(G);if(!Y)throw Error(Z.id?"Brand not found":"No default brand configured");return LX8(Y)}}),bi0=e({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:YZ0,outputSchema:QZ0,handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await X.storage.brandContext.list(G)).map(LX8)}}})});import{resolveTxt as nY6}from"dns/promises";function vi0(Z){return`${pY6}.${Z.toLowerCase()}`}function jX8(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function AX8(Z,X,G=nY6){if(!X)return!1;try{return(await G(vi0(Z))).some((Q)=>Q.join("").trim()===X)}catch{return!1}}var pY6="_deco-verify";var PX8=()=>{};import{z as j9}from"zod";function hw(Z){let X=Z.verificationStatus==="pending"&&Boolean(Z.verificationToken);return{id:Z.id,domain:Z.domain,joinMode:Z.joinMode,verificationStatus:Z.verificationStatus,verificationMethod:Z.verificationMethod,verifiedAt:Z.verifiedAt?new Date(Z.verifiedAt).toISOString():null,recordName:X?vi0(Z.domain):null,recordValue:X?Z.verificationToken:null}}function rY6(Z){let X=Z.toLowerCase().trim();if(!tY6.test(X))throw Error(`Invalid domain format: "${X}". Must be a valid domain like "acme.com"`);if(jJ.has(X))throw Error(`Cannot claim generic email domain "${X}". Only corporate domains are allowed.`);return X}var tY6,xi0,oH0,_i0,yi0,gi0,hi0,ui0;var TX8=B(()=>{kQ();PX8();X1();tY6=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,xi0=j9.enum(["off","auto","request"]),oH0=j9.object({id:j9.string(),domain:j9.string(),joinMode:xi0,verificationStatus:j9.enum(["pending","verified"]),verificationMethod:j9.enum(["email","dns"]).nullable(),verifiedAt:j9.string().nullable(),recordName:j9.string().nullable(),recordValue:j9.string().nullable()});_i0=e({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({}),outputSchema:j9.object({domains:j9.array(oH0)}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X);return{domains:(await X.storage.organizationDomains.listByOrganizationId(G.id)).map(hw)}}}),yi0=e({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({domain:j9.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:xi0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:oH0,handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=rY6(Z.domain),$=X.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(X.auth.user?.emailVerified)&&$===Y,W=await X.storage.organizationDomains.getByOrgAndDomain(G.id,Y);if(W){if(W.verificationStatus!=="verified"&&J){let N=await X.storage.organizationDomains.markVerified(W.id,"email");return hw(N)}return hw(W)}let K=J?await X.storage.organizationDomains.add(G.id,Y,{joinMode:Z.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await X.storage.organizationDomains.add(G.id,Y,{joinMode:"off",verificationStatus:"pending",verificationToken:jX8()});return hw(K)}}),gi0=e({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({id:j9.string(),joinMode:xi0}),outputSchema:oH0,handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");if(Z.joinMode!=="off"&&Y.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Q=await X.storage.organizationDomains.updateJoinMode(Z.id,Z.joinMode);return hw(Q)}}),hi0=e({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:j9.object({id:j9.string()}),outputSchema:j9.object({verified:j9.boolean(),domain:oH0}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");if(Y.verificationStatus==="verified")return{verified:!0,domain:hw(Y)};if(!Y.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await AX8(Y.domain,Y.verificationToken))return{verified:!1,domain:hw(Y)};let $=await X.storage.organizationDomains.markVerified(Z.id,"dns");return{verified:!0,domain:hw($)}}}),ui0=e({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({id:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");return await X.storage.organizationDomains.removeById(Z.id),{success:!0}}})});function uw(Z){return(Z instanceof Error?Z.message.toLowerCase():"").includes("already a member")}import{z as BZ}from"zod";var oY6,ci0,li0,di0;var RX8=B(()=>{X1();I5();oY6=BZ.object({id:BZ.string(),userId:BZ.string(),status:BZ.enum(["pending","approved","denied"]),createdAt:BZ.string(),user:BZ.object({id:BZ.string(),name:BZ.string(),email:BZ.string(),image:BZ.string().nullable()}).nullable()}),ci0=e({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:BZ.object({}),outputSchema:BZ.object({requests:BZ.array(oY6)}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X);return{requests:(await X.storage.organizationJoinRequests.listPendingWithUser(G.id)).map((Q)=>({id:Q.id,userId:Q.userId,status:Q.status,createdAt:new Date(Q.createdAt).toISOString(),user:Q.user}))}}}),li0=e({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:BZ.object({requestId:BZ.string()}),outputSchema:BZ.object({success:BZ.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationJoinRequests.getById(Z.requestId);if(!Y||Y.organizationId!==G.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let Q=C1(X);if(!await X.storage.organizationJoinRequests.decide(Y.id,"approved",Q??Y.userId))return{success:!0};try{await X.boundAuth.organization.addMember({organizationId:G.id,userId:Y.userId,role:["user"]})}catch(J){if(!uw(J))throw J}if(Q)i1.capture({distinctId:Q,event:"organization_join_request_approved",groups:{organization:G.id},properties:{organization_id:G.id,user_id:Y.userId}});return{success:!0}}}),di0=e({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:BZ.object({requestId:BZ.string()}),outputSchema:BZ.object({success:BZ.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationJoinRequests.getById(Z.requestId);if(!Y||Y.organizationId!==G.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let Q=C1(X);if(await X.storage.organizationJoinRequests.decide(Y.id,"denied",Q??Y.userId)&&Q)i1.capture({distinctId:Q,event:"organization_join_request_denied",groups:{organization:G.id},properties:{organization_id:G.id,user_id:Y.userId}});return{success:!0}}})});import{z as fY}from"zod";var mi0;var IX8=B(()=>{I5();X1();A3();mi0=e({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:fY.object({organizationId:fY.string().optional(),userId:fY.string(),role:fY.array(fY.string())}),outputSchema:fY.object({id:fY.string(),organizationId:fY.string(),userId:fY.string(),role:fY.union([fY.string(),fY.array(fY.string())]),createdAt:fY.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==X.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=await X.db.selectFrom("member").select(["role"]).where("userId","=",C1(X)??"").where("organizationId","=",G).executeTakeFirst();if(!o60(Y?.role,Z.role))throw Error(`Insufficient privileges to assign role "${Z.role.join(",")}"`);let Q=await X.boundAuth.organization.addMember({organizationId:G,userId:Z.userId,role:Z.role});if(!Q)throw Error("Failed to add member");let $=C1(X);if($)i1.capture({distinctId:$,event:"organization_member_added",groups:{organization:G},properties:{organization_id:G,added_user_id:Z.userId,role:Z.role}});return{...Q,role:Q.role,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as l_}from"zod";var ii0;var qX8=B(()=>{I5();X1();ii0=e({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:l_.object({organizationId:l_.string().optional(),memberIdOrEmail:l_.string()}),outputSchema:l_.object({success:l_.boolean(),memberIdOrEmail:l_.string()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==X.organization?.id)throw Error("Organization ID does not match authenticated organization");await X.boundAuth.organization.removeMember({organizationId:G,memberIdOrEmail:Z.memberIdOrEmail});let Y=C1(X);if(Y)i1.capture({distinctId:Y,event:"organization_member_removed",groups:{organization:G},properties:{organization_id:G,member_id_or_email:Z.memberIdOrEmail}});return{success:!0,memberIdOrEmail:Z.memberIdOrEmail}}})});import{z as ZG}from"zod";var ni0;var MX8=B(()=>{X1();ni0=e({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZG.object({limit:ZG.number().optional(),offset:ZG.number().optional()}),outputSchema:ZG.object({members:ZG.array(ZG.object({id:ZG.string(),organizationId:ZG.string(),userId:ZG.string(),role:ZG.string(),createdAt:ZG.string().datetime().describe("ISO 8601 timestamp"),user:ZG.object({id:ZG.string(),name:ZG.string(),email:ZG.string(),image:ZG.string().optional()}).optional()}))}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.boundAuth.organization.listMembers({organizationId:G,limit:Z.limit,offset:Z.offset});return{members:(Array.isArray(Y)?Y:[]).map(($)=>({...$,createdAt:$.createdAt instanceof Date?$.createdAt.toISOString():$.createdAt}))}}})});import{z as b7}from"zod";var pi0;var kX8=B(()=>{I5();X1();A3();pi0=e({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:b7.object({organizationId:b7.string().optional(),memberId:b7.string(),role:b7.array(b7.string())}),outputSchema:b7.object({id:b7.string(),organizationId:b7.string(),userId:b7.string(),role:b7.union([b7.string(),b7.array(b7.string())]),createdAt:b7.string().datetime().describe("ISO 8601 timestamp"),user:b7.object({email:b7.string(),name:b7.string(),image:b7.string().optional()})}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.db.selectFrom("member").select(["role"]).where("userId","=",C1(X)??"").where("organizationId","=",G).executeTakeFirst();if(!o60(Y?.role,Z.role))throw Error(`Insufficient privileges to assign role "${Z.role.join(",")}"`);let Q=await X.boundAuth.organization.updateMemberRole({organizationId:G,memberId:Z.memberId,role:Z.role});if(!Q)throw Error("Failed to update member role");X.invalidateMemberRole?.(Q.userId,G);let $=C1(X);if($)i1.capture({distinctId:$,event:"organization_member_role_updated",groups:{organization:G},properties:{organization_id:G,member_id:Z.memberId,target_user_id:Q.userId,new_role:Array.isArray(Z.role)?Z.role.join(","):Z.role}});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});async function SX8(){if(cn&&Date.now()-cn.fetchedAt<600000)return cn.rate;try{let X=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),G=parseFloat(X.USDBRL?.bid??"");if(Number.isNaN(G)||G<=0)throw Error("Invalid rate");return cn={rate:G,fetchedAt:Date.now()},G}catch{return cn?.rate??5.5}}function VX8(Z,X,G){if(X==="brl")return Math.round(Z/G);return Z}var cn=null;function ti0(Z,X="",G=new URLSearchParams){for(let[Y,Q]of Object.entries(Z)){if(Q===void 0||Q===null)continue;let $=X?`${X}[${Y}]`:Y;if(Array.isArray(Q))Q.forEach((J,W)=>{if(typeof J==="object"&&J!==null)ti0(J,`${$}[${W}]`,G);else G.append(`${$}[${W}]`,String(J))});else if(typeof Q==="object")ti0(Q,$,G);else G.append($,String(Q))}return G}async function cw(Z,X){let G=W1().stripeSecretKey;if(!G)throw new bY(503,"billing is not configured");let Y=X?.params?ti0(X.params).toString():void 0,Q=await fetch(`${aY6}${Z}`,{method:X?.method??(Y?"POST":"GET"),headers:{Authorization:`Bearer ${G}`,...Y&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Y,signal:AbortSignal.timeout(sY6)}),$=await Q.json().catch(()=>({}));if(!Q.ok){let J=$.error?.message??`HTTP ${Q.status}`;throw new bY(Q.status,J)}return $}async function CX8(Z){let X=W1().stripeSeatPriceId;if(!X)throw new bY(503,"billing is not configured");let G=await cw("/checkout/sessions",{params:{mode:"subscription",line_items:[{price:X,quantity:Z.quantity}],success_url:Z.successUrl,cancel_url:Z.cancelUrl,metadata:{orgId:Z.organizationId},subscription_data:{metadata:{orgId:Z.organizationId}}}});if(!G.url)throw new bY(500,"checkout session lacks url");return{url:G.url}}async function ri0(Z){let G=(await cw(`/subscriptions/${encodeURIComponent(Z)}`)).items?.data??[],Y=W1().stripeSeatPriceId,Q=Y?G.find(($)=>$.price?.id===Y):G.length===1?G[0]:void 0;if(!Q)throw new bY(500,"subscription has no seat item");return{itemId:Q.id,quantity:Q.quantity??0}}async function fX8(Z){let{itemId:X}=await ri0(Z.subscriptionId),G=await cw("/invoices/create_preview",{params:{subscription:Z.subscriptionId,subscription_details:{items:[{id:X,quantity:Z.quantity}],proration_behavior:"always_invoice"}}});return{amountDueCents:G.amount_due??0,currency:G.currency??"usd"}}function eY6(Z,X){return Math.round(Z*(1+X/100))}async function bX8(Z){let X=eY6(Z.amountCents,Z.feePercent),G=VX8(Z.amountCents,Z.currency,await SX8()),Y=Z.currency==="brl"?`Studio AI credits (R$ ${(Z.amountCents/100).toFixed(2)})`:`Studio AI credits ($${(Z.amountCents/100).toFixed(2)})`,Q=await cw("/checkout/sessions",{params:{mode:"payment",...Z.customerId&&{customer:Z.customerId},line_items:[{quantity:1,price_data:{currency:Z.currency,unit_amount:X,product_data:{name:Y}}}],success_url:Z.successUrl,cancel_url:Z.cancelUrl,metadata:{kind:"topup",orgId:Z.organizationId,creditCents:G}}});if(!Q.url)throw new bY(500,"checkout session lacks url");return{url:Q.url}}async function vX8(Z){let X=await cw("/billing_portal/sessions",{params:{customer:Z.customerId,return_url:Z.returnUrl}});if(!X.url)throw new bY(500,"portal session lacks url");return{url:X.url}}async function xX8(Z){let{itemId:X}=await ri0(Z.subscriptionId);await cw(`/subscriptions/${encodeURIComponent(Z.subscriptionId)}`,{params:{items:[{id:X,quantity:Z.quantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}})}async function _X8(Z){await cw(`/subscriptions/${encodeURIComponent(Z)}`,{method:"DELETE"})}async function yX8(Z){if(Z.targetQuantity<1)return!1;let{itemId:X,quantity:G}=await ri0(Z.subscriptionId);if(G===Z.targetQuantity)return!1;return await cw(`/subscriptions/${encodeURIComponent(Z.subscriptionId)}`,{params:{items:[{id:X,quantity:Z.targetQuantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}}),!0}var aY6="https://api.stripe.com/v1",bY,sY6=15000;var d_=B(()=>{_8();bY=class bY extends Error{status;constructor(Z,X){super(`Stripe API ${Z}: ${X}`);this.status=Z;this.name="StripeApiError"}}});import{z as DZ}from"zod";var ZQ6,oi0,ai0;var gX8=B(()=>{d_();Sb();X1();Eb();ZQ6=DZ.object({legacy:DZ.boolean(),billingMode:DZ.string(),status:DZ.string(),includedReportUrl:DZ.string().nullable()}),oi0=e({name:"ORGANIZATION_SEATS_GET",description:"Get the organization's billing identity and which members hold paid seats.",annotations:{title:"Get Organization Seats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({}),outputSchema:DZ.object({billing:ZQ6.nullable(),paidSeatUserIds:DZ.array(DZ.string())}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let[Y,Q]=await Promise.all([X.storage.organizationBilling.getBilling(G),X.storage.organizationBilling.listPaidSeatUserIds(G)]);return{billing:Y?{legacy:Y.legacy,billingMode:Y.billingMode,status:Y.status,includedReportUrl:Y.includedReportUrl}:null,paidSeatUserIds:Q}}}),ai0=e({name:"ORGANIZATION_SEATS_SET",description:"Set members' seats (paid/free). Invoiced organizations apply directly; self-serve organizations with an active subscription also charge the prorated difference on the saved card (preview it with ORGANIZATION_SEATS_PREVIEW first).",annotations:{title:"Set Organization Seats",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({seats:DZ.array(DZ.object({userId:DZ.string().min(1),seat:DZ.enum(["paid","free"])})).min(1).max(200)}),outputSchema:DZ.object({applied:DZ.array(DZ.object({userId:DZ.string(),seat:DZ.enum(["paid","free"])})),paidSeatCount:DZ.number(),benefitsSyncQueued:DZ.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let Y=C1(X);if(!Y)throw Error("User ID required");let Q=await X.storage.organizationBilling.getBilling(G);if(!Q||Q.legacy)throw Error("This organization is on the legacy plan \u2014 seats do not apply.");let $=kb(Q)?Q.stripeSubscriptionId:null,J;try{J=await X.storage.organizationBilling.setSeats(G,Z.seats,Y,{markBenefitsPending:rB()})}catch(K){if(K instanceof R00)throw Error(K.message);throw K}if($)try{await xX8({subscriptionId:$,quantity:J.paidSeatCount})}catch(K){let N=K instanceof bY?K.message:"Stripe update failed";throw Error(`Seats saved, but updating the subscription failed: ${N}. Apply again to retry the charge.`)}let W=!1;if(J.benefitsReferenceId)try{await jN(G,J.benefitsReferenceId,"apply"),W=!0}catch(K){console.error("Failed to enqueue benefit sync (sweep covers):",K)}return{applied:J.applied,paidSeatCount:J.paidSeatCount,benefitsSyncQueued:W}}})});import{z as DF}from"zod";var si0,ei0;var hX8=B(()=>{d_();tZ();X1();si0=e({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's seat subscription: creates a Stripe Checkout session for the current paid-seat count and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:DF.object({}),outputSchema:DF.object({url:DF.string(),quantity:DF.number()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id,Y=X.organization?.slug;if(!G||!Y)throw Error("Organization context required");let[Q,$]=await Promise.all([X.storage.organizationBilling.getBilling(G),X.storage.organizationBilling.listPaidSeatUserIds(G)]);if(!Q||Q.legacy)throw Error("This organization is on the legacy plan \u2014 no subscription needed.");if(Q.billingMode!=="self_serve")throw Error("Contract-billed organizations do not use checkout.");if(Q.status==="active")throw Error("This organization already has an active subscription \u2014 seat changes apply directly.");if(Q.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let J=$.length;if(J<1)throw Error("Mark at least one member as a paid seat before subscribing.");let W=`${a7()}/${encodeURIComponent(Y)}/members`,{url:K}=await CX8({organizationId:G,quantity:J,successUrl:`${W}?checkout=success`,cancelUrl:`${W}?checkout=canceled`});return{url:K,quantity:J}}}),ei0=e({name:"ORGANIZATION_SEATS_PREVIEW",description:"Preview what the organization pays now for changing its paid-seat count (Stripe prorated invoice preview). Read-only \u2014 nothing is charged.",annotations:{title:"Preview Seat Change",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:DF.object({quantity:DF.number().int().min(1).max(1000)}),outputSchema:DF.object({amountDueCents:DF.number(),currency:DF.string()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let Y=await X.storage.organizationBilling.getBilling(G);if(!kb(Y))throw Error("Seat previews need an active self-serve subscription.");return await fX8({subscriptionId:Y.stripeSubscriptionId,quantity:Z.quantity})}})});import{z as lw}from"zod";var Zn0,Xn0;var uX8=B(()=>{d_();Sb();tZ();X1();ID();Zn0=e({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:lw.object({}),outputSchema:lw.object({url:lw.string()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X);if(!G.slug)throw Error("Organization context required");let Y=await X.storage.organizationBilling.getBilling(G.id);if(!Y?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");if(Y.legacy||Y.billingMode!=="self_serve")throw Error("This organization's billing is managed by deco \u2014 contact support.");try{return await vX8({customerId:Y.stripeCustomerId,returnUrl:`${a7()}/${encodeURIComponent(G.slug)}/members`})}catch(Q){if(Q instanceof bY)throw Error(Q.message);throw Q}}}),Xn0=e({name:"ORGANIZATION_INCLUDED_REPORT_SET",description:"Choose which site's weekly report re-run the organization's subscription includes (null clears it).",annotations:{title:"Set Included Report Site",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:lw.object({url:lw.string().trim().min(1).max(255).nullable()}),outputSchema:lw.object({includedReportUrl:lw.string().nullable(),benefitsSyncQueued:lw.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationBilling.getBilling(G.id);if(!Y||Y.legacy)throw Error("This organization is on the legacy plan \u2014 included reports do not apply.");let Q=Z.url===null?null:S40(Z.url);if(Z.url!==null&&!Q)throw Error(`"${Z.url}" is not a valid site URL.`);let{updated:$,benefitsReferenceId:J}=await X.storage.organizationBilling.setIncludedReportUrl(G.id,Q,{markBenefitsPending:rB()});if(!$)throw Error("Organization billing row missing.");let W=!1;if(J)try{await jN(G.id,J,"apply"),W=!0}catch(K){console.error("Failed to enqueue benefit sync (sweep covers):",K)}return{includedReportUrl:Q,benefitsSyncQueued:W}}})});import{z as ln}from"zod";function XQ6(Z){return`[CREDITS] Paid report runs need at least $${(cX8/100).toFixed(2)} of AI credit balance \u2014 current balance is $${(Z/100).toFixed(2)}. Top up and try again.`}var cX8=500,Gn0;var lX8=B(()=>{aC0();X1();hW();OH();ID();Gn0=e({name:"ORGANIZATION_REPORT_RUN_PAID",description:"Trigger a paid report run for one of the organization's sites, billed against its AI credits (requires at least $5 of balance; the run's real cost plus markup is debited at completion).",annotations:{title:"Run Paid Report",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:ln.object({url:ln.string().trim().min(1).max(255).optional()}),outputSchema:ln.object({url:ln.string(),started:ln.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=C1(X);if(!Y)throw Error("User ID required");if(!Lc())throw Error("Reports are not available on this deployment.");let Q;if(Z.url)Q=S40(Z.url);else Q=(await X.storage.organizationBilling.getBilling(G.id))?.includedReportUrl??null;if(!Q)throw Error(Z.url?`"${Z.url}" is not a valid site URL.`:"No site chosen \u2014 pass a url or set the included report site first.");let $=W7().deco;if(!$?.getCreditsBalance)throw Error("AI credit balance is not available on this deployment.");let J=await BW(Y,X.auth.user?.email),{balanceCents:W}=await $.getCreditsBalance(J,G.id);if(!(W>=cX8))throw Error(XQ6(W??0));return await rM1({host:Q,organizationId:G.id}),{url:Q,started:!0}}})});var dX8=B(()=>{$X8();JX8();WX8();KX8();NX8();UX8();HX8();OX8();DX8();EX8();zX8();TX8();RX8();IX8();qX8();MX8();kX8();gX8();hX8();uX8();lX8()});var bQ="super-agent",mX8="task-board.item.updated",iX8="task-board.item.deleted";import{z as l6}from"zod";var dn,BV,YQ6,nX8,m_;var DV=B(()=>{dn=l6.enum(["triage","todo","in_progress","in_review","done"]),BV=l6.enum(["none","low","medium","high","urgent"]),YQ6=l6.object({threadId:l6.string(),virtualMcpId:l6.string().nullable(),status:l6.enum(["in_progress","requires_action","failed","completed","expired"]).nullable(),title:l6.string().nullable(),lastMessage:l6.string().nullable(),hasPreview:l6.boolean(),createdAt:l6.string()}),nX8=l6.object({url:l6.string(),number:l6.number(),repoOwner:l6.string(),repoName:l6.string(),createdAt:l6.string(),title:l6.string().nullable(),body:l6.string().nullable(),state:l6.enum(["open","closed"]).nullable(),draft:l6.boolean().nullable(),merged:l6.boolean().nullable()}),m_=l6.object({id:l6.string(),organizationId:l6.string(),title:l6.string(),description:l6.string().nullable(),status:dn,priority:BV,assigneeId:l6.string().nullable(),assignedBy:l6.string().nullable(),dueDate:l6.string().datetime().nullable(),threads:l6.array(YQ6),createdBy:l6.string(),createdAt:l6.string().datetime(),updatedBy:l6.string(),updatedAt:l6.string().datetime()})});async function aH0(Z,X,G){if(G===bQ)return;let{members:Y}=await Z.boundAuth.organization.listMembers({organizationId:X,filterField:"userId",filterValue:G});if(!Y.some((Q)=>Q.userId===G))throw Error("assigneeId is not a member of the organization")}var Yn0=B(()=>{DV()});async function Qn0(Z,X,G){let Y;try{return await Promise.race([Z.aiProviders.listModels(X,G),new Promise(($,J)=>{Y=setTimeout(()=>J(Error("listModels timeout")),QQ6)})])}finally{if(Y)clearTimeout(Y)}}function $Q6(Z,X){switch(Z){case"fast":return X.chat.fast;case"smart":return X.chat.smart;case"thinking":return X.chat.thinking;case"image":return X.image;case"web_search":return X.webSearch;case"deep_research":return X.deepResearch}}function $n0(Z,X,G){let Y=Z.find((Q)=>Q.modelId===X);return{title:Y?.title??G??X,providerId:Y?.providerId,capabilities:Y?.capabilities,limits:Y?.limits??null}}async function vQ(Z,X){let G=Z.organization?.id;if(!G)throw Error("resolveTier called without an organization");let Q=(await Z.storage.organizationSettings.get(G))?.simple_mode?.tiers?.[X]??null,$=await Z.storage.aiProviderKeys.list({organizationId:G});if(Q&&$.some((F)=>F.id===Q.keyId)){let F=await Qn0(Z,Q.keyId,G).catch(()=>[]);return{credentialId:Q.keyId,modelId:Q.modelId,modelMeta:$n0(F,Q.modelId,Q.title)}}if($.length===0)throw new i_(X);let J={};await Promise.all($.map(async(F)=>{J[F.id]=await Qn0(Z,F.id,G).catch(()=>[])}));let W=$.map((F)=>({id:F.id,providerId:F.providerId,label:F.label,presetId:F.presetId,createdBy:F.createdBy,createdAt:F.createdAt})),K=yM1(W,J),N=$Q6(X,K);if(!N)throw new i_(X);return{credentialId:N.keyId,modelId:N.modelId,modelMeta:$n0(J[N.keyId]??[],N.modelId,N.title)}}async function pX8(Z,X,G){let Y=Z.organization?.id;if(!Y)throw Error("resolveSpecificModel called without an organization");let Q=await Qn0(Z,X,Y).catch(()=>[]);return{credentialId:X,modelId:G,modelMeta:$n0(Q,G)}}async function c3(Z,X){try{return await vQ(Z,X)}catch(G){if(G instanceof i_)return null;return console.warn(`[resolveTier] tier "${X}" resolution failed:`,G),null}}var i_,QQ6=5000;var EV=B(()=>{a4();i_=class i_ extends Error{tier;constructor(Z){super(`No model available for tier "${Z}". Connect a provider or configure the tier in organization settings.`);this.tier=Z;this.name="TierUnavailableError"}}});function sH0(Z){return Z.sandboxProviderKind==="agent-sandbox"&&Z.harnessId==="decopilot"}function tX8(Z){return Z.harnessId==="decopilot"&&(Z.sandboxProviderKind==null||Z.sandboxProviderKind==="agent-sandbox")}function WQ6(Z){return{type:"data-run-status",id:"run-status",data:{stage:Z}}}function rX8(Z){if(!Z||typeof Z!=="object")return!1;return Z.type==="data-run-status"}async function EF(Z,X,G){if(!Z)return;try{await Z.publishRawChunk(X,WQ6(G))}catch{}}var JQ6,mn,JPZ;var nn=B(()=>{JQ6=["waiting-runner","starting-run","gathering-context","preparing-tools","starting-assistant","analyzing-scope"],mn=["gathering-context","preparing-tools","starting-assistant","analyzing-scope"],JPZ=new Set(JQ6)});function eH0(){return crypto.randomUUID()}var Wn0=f((NPZ,sX8)=>{var{defineProperty:Jn0,getOwnPropertyDescriptor:KQ6,getOwnPropertyNames:NQ6}=Object,FQ6=Object.prototype.hasOwnProperty,UQ6=(Z,X)=>{for(var G in X)Jn0(Z,G,{get:X[G],enumerable:!0})},HQ6=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of NQ6(X))if(!FQ6.call(Z,Q)&&Q!==G)Jn0(Z,Q,{get:()=>X[Q],enumerable:!(Y=KQ6(X,Q))||Y.enumerable})}return Z},wQ6=(Z)=>HQ6(Jn0({},"__esModule",{value:!0}),Z),oX8={};UQ6(oX8,{SYMBOL_FOR_REQ_CONTEXT:()=>aX8,getContext:()=>OQ6});sX8.exports=wQ6(oX8);var aX8=Symbol.for("@vercel/request-context");function OQ6(){return globalThis[aX8]?.get?.()??{}}});var pn=f((FPZ,XG8)=>{var{defineProperty:Kn0,getOwnPropertyDescriptor:BQ6,getOwnPropertyNames:DQ6}=Object,EQ6=Object.prototype.hasOwnProperty,LQ6=(Z,X)=>{for(var G in X)Kn0(Z,G,{get:X[G],enumerable:!0})},zQ6=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of DQ6(X))if(!EQ6.call(Z,Q)&&Q!==G)Kn0(Z,Q,{get:()=>X[Q],enumerable:!(Y=BQ6(X,Q))||Y.enumerable})}return Z},jQ6=(Z)=>zQ6(Kn0({},"__esModule",{value:!0}),Z),eX8={};LQ6(eX8,{VercelOidcTokenError:()=>ZG8});XG8.exports=jQ6(eX8);class ZG8 extends Error{constructor(Z,X){super(Z);this.name="VercelOidcTokenError",this.cause=X}toString(){if(this.cause)return`${this.name}: ${this.message}: ${this.cause}`;return`${this.name}: ${this.message}`}}});var $G8=f((UPZ,QG8)=>{var{create:AQ6,defineProperty:Zw0,getOwnPropertyDescriptor:PQ6,getOwnPropertyNames:TQ6,getPrototypeOf:RQ6}=Object,IQ6=Object.prototype.hasOwnProperty,qQ6=(Z,X)=>{for(var G in X)Zw0(Z,G,{get:X[G],enumerable:!0})},GG8=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of TQ6(X))if(!IQ6.call(Z,Q)&&Q!==G)Zw0(Z,Q,{get:()=>X[Q],enumerable:!(Y=PQ6(X,Q))||Y.enumerable})}return Z},Fn0=(Z,X,G)=>(G=Z!=null?AQ6(RQ6(Z)):{},GG8(X||!Z||!Z.__esModule?Zw0(G,"default",{value:Z,enumerable:!0}):G,Z)),MQ6=(Z)=>GG8(Zw0({},"__esModule",{value:!0}),Z),YG8={};qQ6(YG8,{findRootDir:()=>VQ6,getUserDataDir:()=>CQ6});QG8.exports=MQ6(YG8);var tn=Fn0(u0("path")),kQ6=Fn0(u0("fs")),Nn0=Fn0(u0("os")),SQ6=pn();function VQ6(){try{let Z=process.cwd();while(Z!==tn.default.dirname(Z)){let X=tn.default.join(Z,".vercel");if(kQ6.default.existsSync(X))return Z;Z=tn.default.dirname(Z)}}catch(Z){throw new SQ6.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function CQ6(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(Nn0.default.platform()){case"darwin":return tn.default.join(Nn0.default.homedir(),"Library/Application Support");case"linux":return tn.default.join(Nn0.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}});var HG8=f((HPZ,UG8)=>{var{create:fQ6,defineProperty:Xw0,getOwnPropertyDescriptor:bQ6,getOwnPropertyNames:vQ6,getPrototypeOf:xQ6}=Object,_Q6=Object.prototype.hasOwnProperty,yQ6=(Z,X)=>{for(var G in X)Xw0(Z,G,{get:X[G],enumerable:!0})},JG8=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of vQ6(X))if(!_Q6.call(Z,Q)&&Q!==G)Xw0(Z,Q,{get:()=>X[Q],enumerable:!(Y=bQ6(X,Q))||Y.enumerable})}return Z},WG8=(Z,X,G)=>(G=Z!=null?fQ6(xQ6(Z)):{},JG8(X||!Z||!Z.__esModule?Xw0(G,"default",{value:Z,enumerable:!0}):G,Z)),gQ6=(Z)=>JG8(Xw0({},"__esModule",{value:!0}),Z),KG8={};yQ6(KG8,{isValidAccessToken:()=>lQ6,readAuthConfig:()=>uQ6,writeAuthConfig:()=>cQ6});UG8.exports=gQ6(KG8);var rn=WG8(u0("fs")),NG8=WG8(u0("path")),hQ6=on();function FG8(){let Z=(0,hQ6.getVercelDataDir)();if(!Z)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return NG8.join(Z,"auth.json")}function uQ6(){try{let Z=FG8();if(!rn.existsSync(Z))return null;let X=rn.readFileSync(Z,"utf8");if(!X)return null;return JSON.parse(X)}catch(Z){return null}}function cQ6(Z){let X=FG8(),G=NG8.dirname(X);if(!rn.existsSync(G))rn.mkdirSync(G,{mode:504,recursive:!0});rn.writeFileSync(X,JSON.stringify(Z,null,2),{mode:384})}function lQ6(Z,X=0){if(!Z.token)return!1;if(typeof Z.expiresAt!=="number")return!0;let G=Math.floor(Date.now()/1000),Y=X/1000;return Z.expiresAt>=G+Y}});var DG8=f((wPZ,BG8)=>{var{defineProperty:wn0,getOwnPropertyDescriptor:dQ6,getOwnPropertyNames:mQ6}=Object,iQ6=Object.prototype.hasOwnProperty,nQ6=(Z,X)=>{for(var G in X)wn0(Z,G,{get:X[G],enumerable:!0})},pQ6=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of mQ6(X))if(!iQ6.call(Z,Q)&&Q!==G)wn0(Z,Q,{get:()=>X[Q],enumerable:!(Y=dQ6(X,Q))||Y.enumerable})}return Z},tQ6=(Z)=>pQ6(wn0({},"__esModule",{value:!0}),Z),wG8={};nQ6(wG8,{processTokenResponse:()=>eQ6,refreshTokenRequest:()=>sQ6});BG8.exports=tQ6(wG8);var Un0=u0("os"),rQ6="https://vercel.com",oQ6="cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",OG8=`@vercel/oidc node-${process.version} ${(0,Un0.platform)()} (${(0,Un0.arch)()}) ${(0,Un0.hostname)()}`,Hn0=null;async function aQ6(){if(Hn0)return Hn0;let Z=`${rQ6}/.well-known/openid-configuration`,X=await fetch(Z,{headers:{"user-agent":OG8}});if(!X.ok)throw Error("Failed to discover OAuth endpoints");let G=await X.json();if(!G||typeof G.token_endpoint!=="string")throw Error("Invalid OAuth discovery response");let Y=G.token_endpoint;return Hn0=Y,Y}async function sQ6(Z){let X=await aQ6();return await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":OG8},body:new URLSearchParams({client_id:oQ6,grant_type:"refresh_token",...Z})})}async function eQ6(Z){let X=await Z.json();if(!Z.ok){let G=typeof X==="object"&&X&&"error"in X?String(X.error):"Token refresh failed";return[Error(G)]}if(typeof X!=="object"||X===null)return[Error("Invalid token response")];if(typeof X.access_token!=="string")return[Error("Missing access_token in response")];if(X.token_type!=="Bearer")return[Error("Invalid token_type in response")];if(typeof X.expires_in!=="number")return[Error("Missing expires_in in response")];return[null,X]}});var Bn0=f((OPZ,jG8)=>{var{defineProperty:On0,getOwnPropertyDescriptor:Z36,getOwnPropertyNames:X36}=Object,G36=Object.prototype.hasOwnProperty,Y36=(Z,X)=>{for(var G in X)On0(Z,G,{get:X[G],enumerable:!0})},Q36=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of X36(X))if(!G36.call(Z,Q)&&Q!==G)On0(Z,Q,{get:()=>X[Q],enumerable:!(Y=Z36(X,Q))||Y.enumerable})}return Z},$36=(Z)=>Q36(On0({},"__esModule",{value:!0}),Z),EG8={};Y36(EG8,{AccessTokenMissingError:()=>LG8,RefreshAccessTokenFailedError:()=>zG8});jG8.exports=$36(EG8);class LG8 extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login).");this.name="AccessTokenMissingError"}}class zG8 extends Error{constructor(Z){super("Failed to refresh authentication token.",{cause:Z});this.name="RefreshAccessTokenFailedError"}}});var on=f((BPZ,IG8)=>{var{create:J36,defineProperty:Gw0,getOwnPropertyDescriptor:W36,getOwnPropertyNames:K36,getPrototypeOf:N36}=Object,F36=Object.prototype.hasOwnProperty,U36=(Z,X)=>{for(var G in X)Gw0(Z,G,{get:X[G],enumerable:!0})},PG8=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of K36(X))if(!F36.call(Z,Q)&&Q!==G)Gw0(Z,Q,{get:()=>X[Q],enumerable:!(Y=W36(X,Q))||Y.enumerable})}return Z},TG8=(Z,X,G)=>(G=Z!=null?J36(N36(Z)):{},PG8(X||!Z||!Z.__esModule?Gw0(G,"default",{value:Z,enumerable:!0}):G,Z)),H36=(Z)=>PG8(Gw0({},"__esModule",{value:!0}),Z),RG8={};U36(RG8,{assertVercelOidcTokenResponse:()=>Dn0,findProjectInfo:()=>D36,getTokenPayload:()=>z36,getVercelDataDir:()=>w36,getVercelOidcToken:()=>B36,getVercelToken:()=>O36,isExpired:()=>j36,loadToken:()=>L36,saveToken:()=>E36});IG8.exports=H36(RG8);var an=TG8(u0("path")),LV=TG8(u0("fs")),t_=pn(),Yw0=$G8(),n_=HG8(),AG8=DG8(),p_=Bn0();function w36(){let X=(0,Yw0.getUserDataDir)();if(!X)return null;return an.join(X,"com.vercel.cli")}async function O36(Z){let X=(0,n_.readAuthConfig)();if(!X?.token)throw new p_.AccessTokenMissingError;if((0,n_.isValidAccessToken)(X,Z?.expirationBufferMs))return X.token;if(!X.refreshToken)throw(0,n_.writeAuthConfig)({}),new p_.RefreshAccessTokenFailedError("No refresh token available");try{let G=await(0,AG8.refreshTokenRequest)({refresh_token:X.refreshToken}),[Y,Q]=await(0,AG8.processTokenResponse)(G);if(Y||!Q)throw(0,n_.writeAuthConfig)({}),new p_.RefreshAccessTokenFailedError(Y);let $={token:Q.access_token,expiresAt:Math.floor(Date.now()/1000)+Q.expires_in};if(Q.refresh_token)$.refreshToken=Q.refresh_token;return(0,n_.writeAuthConfig)($),$.token}catch(G){if((0,n_.writeAuthConfig)({}),G instanceof p_.AccessTokenMissingError||G instanceof p_.RefreshAccessTokenFailedError)throw G;throw new p_.RefreshAccessTokenFailedError(G)}}async function B36(Z,X,G){let Y=`https://api.vercel.com/v1/projects/${X}/token?source=vercel-oidc-refresh${G?`&teamId=${G}`:""}`,Q=await fetch(Y,{method:"POST",headers:{Authorization:`Bearer ${Z}`}});if(!Q.ok)throw new t_.VercelOidcTokenError(`Failed to refresh OIDC token: ${Q.statusText}`);let $=await Q.json();return Dn0($),$}function Dn0(Z){if(!Z||typeof Z!=="object")throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in Z)||typeof Z.token!=="string")throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function D36(){let Z=(0,Yw0.findRootDir)();if(!Z)throw new t_.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let X=an.join(Z,".vercel","project.json");if(!LV.existsSync(X))throw new t_.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let G=JSON.parse(LV.readFileSync(X,"utf8"));if(typeof G.projectId!=="string"&&typeof G.orgId!=="string")throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:G.projectId,teamId:G.orgId}}function E36(Z,X){let G=(0,Yw0.getUserDataDir)();if(!G)throw new t_.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let Y=an.join(G,"com.vercel.token",`${X}.json`),Q=JSON.stringify(Z);LV.mkdirSync(an.dirname(Y),{mode:504,recursive:!0}),LV.writeFileSync(Y,Q),LV.chmodSync(Y,432);return}function L36(Z){let X=(0,Yw0.getUserDataDir)();if(!X)throw new t_.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let G=an.join(X,"com.vercel.token",`${Z}.json`);if(!LV.existsSync(G))return null;let Y=JSON.parse(LV.readFileSync(G,"utf8"));return Dn0(Y),Y}function z36(Z){let X=Z.split(".");if(X.length!==3)throw new t_.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let G=X[1].replace(/-/g,"+").replace(/_/g,"/"),Y=G.padEnd(G.length+(4-G.length%4)%4,"=");return JSON.parse(Buffer.from(Y,"base64").toString("utf8"))}function j36(Z,X=0){return Z.exp*1000<Date.now()+X}});var SG8=f((DPZ,kG8)=>{var{defineProperty:En0,getOwnPropertyDescriptor:A36,getOwnPropertyNames:P36}=Object,T36=Object.prototype.hasOwnProperty,R36=(Z,X)=>{for(var G in X)En0(Z,G,{get:X[G],enumerable:!0})},I36=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of P36(X))if(!T36.call(Z,Q)&&Q!==G)En0(Z,Q,{get:()=>X[Q],enumerable:!(Y=A36(X,Q))||Y.enumerable})}return Z},q36=(Z)=>I36(En0({},"__esModule",{value:!0}),Z),MG8={};R36(MG8,{refreshToken:()=>M36});kG8.exports=q36(MG8);var qG8=pn(),dw=on();async function M36(Z){let X=Z?.project,G=Z?.team;if(!X&&!G){let Q=(0,dw.findProjectInfo)();X=Q.projectId,G=Q.teamId}else if(!X||!G){let Q=(0,dw.findProjectInfo)();X=X??Q.projectId,G=G??Q.teamId}if(!X)throw new qG8.VercelOidcTokenError("Failed to refresh OIDC token: No project specified. Try re-linking your project with `vc link`");let Y=(0,dw.loadToken)(X);if(!Y||(0,dw.isExpired)((0,dw.getTokenPayload)(Y.token),Z?.expirationBufferMs)){let Q=await(0,dw.getVercelToken)({expirationBufferMs:Z?.expirationBufferMs});if(Y=await(0,dw.getVercelOidcToken)(Q,X,G),!Y)throw new qG8.VercelOidcTokenError("Failed to refresh OIDC token");(0,dw.saveToken)(Y,X)}process.env.VERCEL_OIDC_TOKEN=Y.token;return}});var fG8=f((EPZ,CG8)=>{var{defineProperty:zn0,getOwnPropertyDescriptor:k36,getOwnPropertyNames:S36}=Object,V36=Object.prototype.hasOwnProperty,C36=(Z,X)=>{for(var G in X)zn0(Z,G,{get:X[G],enumerable:!0})},f36=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of S36(X))if(!V36.call(Z,Q)&&Q!==G)zn0(Z,Q,{get:()=>X[Q],enumerable:!(Y=k36(X,Q))||Y.enumerable})}return Z},b36=(Z)=>f36(zn0({},"__esModule",{value:!0}),Z),VG8={};C36(VG8,{getVercelOidcToken:()=>_36,getVercelOidcTokenSync:()=>Ln0});CG8.exports=b36(VG8);var v36=Wn0(),x36=pn();async function _36(Z){let X="",G;try{X=Ln0()}catch(Y){G=Y}try{let[{getTokenPayload:Y,isExpired:Q},{refreshToken:$}]=await Promise.all([await Promise.resolve().then(() => k(on())),await Promise.resolve().then(() => k(SG8()))]);if(!X||Q(Y(X),Z?.expirationBufferMs))await $(Z),X=Ln0()}catch(Y){let Q=G instanceof Error?G.message:"";if(Y instanceof Error)Q=`${Q}
|
|
1217
|
+
`))>=0){let K=Y.slice(0,W).trim();if(Y=Y.slice(W+1),!K)continue;yield JSON.parse(K)}}let Q=Y.trim();if(Q)yield JSON.parse(Q)}finally{X.releaseLock()}}var W78,K78,U78="gateway.networking.k8s.io",H78="v1",w78="httproutes",SG6,Cn,B78="mesh-sandbox-runner";var hH0=B(()=>{u9();kn();W78=class W78 extends Error{status;body;constructor(Z,X,G){super(G);this.status=Z;this.body=X;this.name="KubeHttpError"}};K78=`/apis/${OZ.CLAIM_API_GROUP}/${OZ.CLAIM_API_VERSION}/namespaces`;SG6=`/apis/${U78}/${H78}/namespaces`;Cn={API_GROUP:U78,API_VERSION:H78,PLURAL:w78}});var uH0=B(()=>{u9();BZ0()});async function lH0(Z){try{let X=await fetch(`${Z}/health`,{signal:AbortSignal.timeout(VG6)});if(!X.ok)return null;let G=await X.json();if(typeof G==="object"&&G!==null&&typeof G.bootId==="string"&&typeof G.ready==="boolean"&&G.setup&&typeof G.setup.running==="boolean"&&typeof G.setup.done==="boolean")return G;return null}catch{return null}}async function j78(Z){for(let X=0;X<E78;X++){if(await lH0(Z)!==null)return;let G=(Math.random()*2-1)*CG6;await c4(L78+G)}throw Error(`sandbox daemon at ${Z} did not respond on /health within ${E78*L78/1000}s`)}async function u_(Z,X,G,Y,Q){return fG6(Z,X,"POST",G,Y,Q)}async function fG6(Z,X,G,Y,Q,$){let J={...Y};if(Q&&Q.rotateToken!==void 0)J.auth=Q;let W=await fetch(`${Z}/_sandbox/config`,{method:G,headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:JSON.stringify(J),signal:AbortSignal.timeout($?.timeoutMs??z78)}),K=await W.text();if(!W.ok)throw new cH0(W.status,K);return JSON.parse(K)}async function A78(Z,X,G){let Y=await fetch(`${Z}/_sandbox/orgfs-config`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:G,signal:AbortSignal.timeout(z78)}),Q=await Y.text();if(!Y.ok)throw Error(`sandbox daemon /_sandbox/orgfs-config returned ${Y.status}: ${Q}`);return JSON.parse(Q)}async function fn(Z,X,G,Y){let Q=new Headers(Y.headers);for(let W of bG6)Q.delete(W);Q.set("authorization",`Bearer ${X}`);let $=Y.method!=="GET"&&Y.method!=="HEAD",J=`${Z}${G.startsWith("/")?G:`/${G}`}`;return fetch(J,{method:Y.method,headers:Q,body:$?Y.body:void 0,redirect:"manual",signal:Y.signal,duplex:$?"half":void 0})}var cH0,VG6=500,z78=30000,E78=25,L78=200,CG6=50,bG6;var P78=B(()=>{uH0();cH0=class cH0 extends Error{status;constructor(Z,X){super(`sandbox daemon /_sandbox/config returned ${Z}: ${X}`);this.status=Z;this.name="ConfigRequestError"}};bG6=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});async function*I78(Z){let X=Z.now??(()=>Date.now()),G=X(),Y=Z.schedulingTimeoutMs??_G6,Q={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},$=[],J=null,W=!1,K=(z)=>{if(W)return;if(J){let j=J;J=null,j(z)}else $.push(z)},N=()=>{if($.length>0)return Promise.resolve($.shift());if(W)return Promise.resolve(null);return new Promise((z)=>{J=z})},F=()=>{if(W)return;if(W=!0,J){let z=J;J=null,z(null)}},U=new AbortController,H=()=>{U.abort(),F()};if(Z.signal)if(Z.signal.aborted)U.abort(),F();else Z.signal.addEventListener("abort",H,{once:!0});let w=Math.max(0,Y-(X()-G)),O=setTimeout(()=>K("tick"),w+100),D,E=new Promise((z)=>{D=z}),L=Promise.allSettled([yG6(Z.kc,Z.namespace,Z.claimName,U.signal,Q,K,X,D),hG6(Z.kc,Z.namespace,Z.claimName,U.signal,Q,K),uG6(Z.kc,Z.namespace,Z.claimName,E,U.signal,Q,K,X)]);try{let z=null,j=-1,P=T78(Q,Y,X);if(z=nm0(P),!im0(P))j=R78(P);if(yield P,im0(P))return;while(!W){if(await N()===null)break;let I=T78(Q,Y,X);if(im0(I)){let C=nm0(I);if(C!==z)z=C,yield I;return}let S=R78(I);if(S<j)continue;let M=nm0(I);if(M!==z)z=M,j=S,yield I}}finally{if(clearTimeout(O),U.abort(),Z.signal)Z.signal.removeEventListener("abort",H);F(),await L.catch(()=>{})}}function T78(Z,X,G){let{pod:Y,sandbox:Q,events:$,startedAt:J}=Z;if(Q.ready)return{kind:"ready"};let W=Y.containerWaitingReason;if(W==="ImagePullBackOff"||W==="ErrImagePull")return{kind:"failed",reason:"image-pull-backoff",message:"Sandbox image failed to download. The cluster may be missing pull credentials or the image tag may not exist."};if(W==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!Y.scheduled&&$.lastFailedSchedulingAt!==void 0&&G()-J>X)return{kind:"failed",reason:"scheduling-timeout",message:$.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(X/1000)}s.`};if(Y.containerRunning&&!Y.containerReady)return{kind:"warming-daemon",since:J};if($.hasPulling&&!$.hasPulled)return{kind:"pulling-image",since:J};if(W==="ContainerCreating"||W==="PodInitializing"||Y.scheduled&&!Y.containerRunning)return{kind:"starting-container",since:J};if(Y.scheduledFalseReason==="Unschedulable"||$.lastFailedSchedulingAt!==void 0&&!Y.scheduled)return{kind:"waiting-for-capacity",since:J,message:$.failedSchedulingMessage??Y.scheduledFalseMessage,nodeClaim:$.nominatedNodeClaim};return{kind:"claiming",since:J}}function im0(Z){return Z.kind==="ready"||Z.kind==="failed"}function R78(Z){switch(Z.kind){case"claiming":return 0;case"waiting-for-capacity":return 1;case"pulling-image":return 2;case"starting-container":return 3;case"warming-daemon":return 4;case"ready":case"failed":return 99}}function nm0(Z){switch(Z.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return Z.kind;case"waiting-for-capacity":return`waiting-for-capacity:${Z.message??""}:${Z.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${Z.reason}:${Z.message}`}}async function yG6(Z,X,G,Y,Q,$,J,W){let K=`/api/v1/namespaces/${encodeURIComponent(X)}/pods?watch=true&labelSelector=${encodeURIComponent(`${vG6}=${G}`)}`;return dH0({kc:Z,path:K,signal:Y,label:`pod/${G}`,onEvent:(N)=>{if(N.type!=="ADDED"&&N.type!=="MODIFIED")return;let F=N.object;if(F.metadata?.name)W(F.metadata.name);gG6(F,Q,J),$("pod")}})}function gG6(Z,X,G){let Q=(Z.status?.conditions??[]).find((J)=>J.type==="PodScheduled");if(Q?.status==="True")X.pod.scheduled=!0,X.pod.scheduledFalseReason=void 0,X.pod.scheduledFalseMessage=void 0;else if(Q?.status==="False")X.pod.scheduled=!1,X.pod.scheduledFalseReason=Q.reason,X.pod.scheduledFalseMessage=Q.message;let $=(Z.status?.containerStatuses??[]).find((J)=>J.name===xG6);if($)X.pod.containerWaitingReason=$.state?.waiting?.reason,X.pod.containerRunning=!!$.state?.running,X.pod.containerReady=$.ready===!0}async function hG6(Z,X,G,Y,Q,$){let J=`/apis/${OZ.CLAIM_API_GROUP}/${OZ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(X)}/${OZ.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return dH0({kc:Z,path:J,signal:Y,label:`sandboxclaim/${G}`,onEvent:(W)=>{if(W.type!=="ADDED"&&W.type!=="MODIFIED")return;let N=W.object.status?.conditions?.find((F)=>F.type==="Ready");if(!N)return;if(N.status==="True")Q.sandbox.ready=!0,Q.sandbox.notReadyReason=void 0,Q.sandbox.notReadyMessage=void 0;else Q.sandbox.ready=!1,Q.sandbox.notReadyReason=N.reason,Q.sandbox.notReadyMessage=N.message;$("sandbox")}})}async function uG6(Z,X,G,Y,Q,$,J,W){let K=await Promise.race([Y,new Promise((F)=>{if(Q.aborted){F(G);return}Q.addEventListener("abort",()=>F(G),{once:!0})})]);if(Q.aborted)return;let N=`/api/v1/namespaces/${encodeURIComponent(X)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${K},involvedObject.kind=Pod`)}`;return dH0({kc:Z,path:N,signal:Q,label:`events/${G}`,onEvent:(F)=>{if(F.type!=="ADDED"&&F.type!=="MODIFIED")return;let U=F.object,H=U.reason;if(!H)return;switch(H){case"Pulling":$.events.hasPulling=!0;break;case"Pulled":$.events.hasPulling=!0,$.events.hasPulled=!0;break;case"FailedScheduling":$.events.lastFailedSchedulingAt=W(),$.events.failedSchedulingMessage=U.message;break;case"Nominated":{let w=U.message?.match(/nodeclaim\/([\w-]+)/);if(w)$.events.nominatedNodeClaim=w[1];break}default:return}J("event")}})}async function q78(Z){let{kc:X,namespace:G,labelSelector:Y,signal:Q,onDelete:$}=Z,J=`/apis/${OZ.CLAIM_API_GROUP}/${OZ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(G)}/${OZ.CLAIM_PLURAL}?watch=true&labelSelector=${encodeURIComponent(Y)}`;return dH0({kc:X,path:J,signal:Q,label:"sandboxclaim-reaper",onEvent:(W)=>{if(W.type!=="DELETED")return;let K=W.object.metadata?.name;if(K)$(K)}})}async function dH0(Z){let{kc:X,path:G,signal:Y,label:Q,onEvent:$}=Z,J=0;while(!Y.aborted){try{let K=await UV(X,{method:"GET",path:G,signal:Y,headers:{accept:"application/json"},stream:!0});if(!K.ok||!K.body){try{await K.body?.cancel()}catch{}if(K.status===401||K.status===403){console.warn(`[lifecycle-watcher] ${Q} stopped: watch denied (${K.status} ${K.statusText}). `+"The kubeconfig in use cannot watch SandboxClaims \u2014 if you are running locally, "+"this provider should not be active (check STUDIO_SANDBOX_PROVIDER / your sandbox preference).");return}throw Error(`watch handshake failed: ${K.status} ${K.statusText}`)}J=0;for await(let N of mm0(K.body)){if(Y.aborted)return;try{$(N)}catch(F){console.warn(`[lifecycle-watcher] ${Q} onEvent threw: ${F instanceof Error?F.message:String(F)}`)}}}catch(K){if(Y.aborted)return;let N=K instanceof Error?K.message:String(K);console.warn(`[lifecycle-watcher] ${Q} watch ended: ${N}`)}if(Y.aborted)return;let W=tY(5000,250,J,2,0);J+=1,await c4(W,{signal:Y}).catch(()=>{})}}var vG6="studio.decocms.com/sandbox-handle",xG6="sandbox",_G6=300000;var M78=B(()=>{u9();kn();hH0()});async function k78(Z,X,G){let Y=new Map;for(let Q of Z){let $=X(Q);if(!$)continue;let J=Y.get($);if(J)J.push(Q);else Y.set($,[Q])}await Promise.allSettled([...Y.values()].map(async(Q)=>{for(let $ of Q)await G($).catch(()=>{})}))}import{createHash as cG6,randomBytes as lG6,randomUUID as dG6}from"crypto";import*as f78 from"net";import{PassThrough as mG6}from"stream";function iG6(Z){if(Z instanceof Error)return Z.message;if(Z&&typeof Z==="object"){let X=Z;if(X.error instanceof Error)return X.error.message;if(typeof X.message==="string"&&X.message)return X.message}return String(Z)}class sm0{kind=eX;records=new Map;inflight=new wZ0;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;mintCloneUrl;closed=!1;claimWatchAbort=new AbortController;constructor(Z={}){this.stateStore=Z.stateStore??null,this.previewUrlPattern=Z.previewUrlPattern??null,this.kubeConfig=Z.kubeConfig??YY6(),this.portForward=new Pm0(this.kubeConfig),this.namespace=Z.namespace??nG6,this.sandboxTemplateName=Z.sandboxTemplateName??pG6,this.envName=NY6(Z.envName),this.tokenGenerator=Z.tokenGenerator??(()=>lG6(rG6).toString("hex")),this.idleTtlMs=Z.idleTtlMs??aG6,this.metrics=Z.meter?GY6(Z.meter):null,this.previewGateway=Z.previewGateway&&Z.previewUrlPattern?{...Z.previewGateway}:null;let X=Z.sentinelToken?.trim()??"";this.sentinelToken=X.length>0?X:null,this.mintCloneUrl=Z.mintCloneUrl,this.startClaimReaper(),this.startCredentialRefresher()}startClaimReaper(){let Z=["app.kubernetes.io/managed-by=studio","app.kubernetes.io/name=studio-sandbox",...this.envName?[`${h3.env}=${this.envName}`]:[]].join(",");q78({kc:this.kubeConfig,namespace:this.namespace,labelSelector:Z,signal:this.claimWatchAbort.signal,onDelete:(X)=>this.invalidateRecord(X)})}async ensure(Z,X={}){let G=Aw(Z,X.branch??X.repo?.branch??null);return this.inflight.run(G,()=>Qn(this.stateStore,Z,eX,(Y)=>this.ensureLocked(Z,G,X,Y)))}async delete(Z,X){if(X&&this.stateStore){await Qn(this.stateStore,X,eX,(G)=>this.deleteLocked(Z,X,G));return}await this.deleteLocked(Z,X,this.stateStore)}async deleteLocked(Z,X,G){let Y=this.records.get(Z)??null;if(this.records.delete(Z),Y)this.closeForwarder(Y.daemonForward),this.metrics?.active.add(-1,om0(Y.tenant));if(await this.deleteHttpRouteIfManaged(Z).catch((Q)=>{console.warn(`[${xZ}] HTTPRoute delete failed for ${Z}: ${Q instanceof Error?Q.message:String(Q)}`)}),await bw(this.kubeConfig,this.namespace,Z),G)if(X)await G.delete(X,eX);else if(Y)await G.delete(Y.id,eX);else await G.deleteByHandle(eX,Z)}async alive(Z){return await HF(this.kubeConfig,this.namespace,Z)!==void 0}watchClaimLifecycle(Z,X){return I78({kc:this.kubeConfig,namespace:this.namespace,claimName:Z,signal:X})}async getPreviewUrl(Z){let X=await this.getRecord(Z);if(!X)return null;return this.composePreviewUrl(X)}async proxyDaemonRequest(Z,X,G){let Y=await this.getRecord(Z);if(!Y&&this.previewUrlPattern&&this.stateStore){let K=await this.stateStore.getByHandle(eX,Z),N=K?.state,F=N?.token;if(K&&F){let H=`http://${N?.adoptedSandboxName??Z}.${this.namespace}.svc.cluster.local:${vw}`;try{let w=await fn(H,F,X,G);if(w.status!==404)return w;try{await w.body?.cancel()}catch{}}catch{}}}if(!Y)Y=await this.resurrectByHandle(Z);if(!Y)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let Q=Y,$=performance.now(),J=0,W=!(G.body instanceof ReadableStream);try{let K=await fn(Y.daemonUrl,Y.token,X,G);if(K.status===401&&W){this.invalidateRecord(Z);let N=await this.getRecord(Z).catch(()=>null)??await this.resurrectByHandle(Z).catch(()=>null);if(N)Q=N,K=await fn(N.daemonUrl,N.token,X,G)}return J=K.status,K}catch(K){if(!W)throw K;this.invalidateRecord(Z);let N=await this.resurrectByHandle(Z)??await this.getRecord(Z).catch(()=>null);if(!N)throw K;Q=N;let F=await fn(N.daemonUrl,N.token,X,G);return J=F.status,F}finally{this.recordProxyDuration("daemon",J,Q,performance.now()-$)}}async adoptLiveClaim(Z,X){if(this.records.has(X))return!0;let G=await HF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!G||G.metadata?.deletionTimestamp)return!1;return await this.inflight.run(X,async()=>{let Q=this.records.get(X);if(Q)return this.toSandbox(Q);let $=await this.adopt(Z,X,G);if(!$)throw Error(`cannot adopt live claim ${X}`);return Qn(this.stateStore,Z,eX,(J)=>this.finish($,J,!0,!0,"adopt"))}).catch(()=>null)!=null}async resolvePreviewUpstreamUrl(Z){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle(Z)}.${this.namespace}.svc.cluster.local:${vw}`;let X=await this.getRecord(Z);if(X)return X.daemonUrl;let G=await this.resurrectByHandle(Z);return G?G.daemonUrl:null}async resolveServiceNameForHandle(Z){let X=this.records.get(Z);if(X)return X.adoptedSandboxName;if(this.stateStore){let Y=(await this.stateStore.getByHandle(eX,Z).catch(()=>null))?.state?.adoptedSandboxName;if(Y)return Y}return Z}async proxyPreviewRequest(Z,X){let G=performance.now(),Y=this.records.get(Z)??null,Q=0;try{let $=await this.resolvePreviewUpstreamUrl(Z);if(!$){Q=404;let O=tm0(404,{error:"sandbox not found"});return O.headers.set(wV,"1"),O}let J=new URL(X.url);if((J.pathname==="/_sandbox"||J.pathname.startsWith("/_sandbox/")||J.pathname==="/_decopilot_vm"||J.pathname.startsWith("/_decopilot_vm/"))&&X.method!=="GET")return Q=404,tm0(404,{error:"not found"});let K=(O)=>`${O}${J.pathname}${J.search}`,N=new Headers(X.headers);for(let O of ZY6)N.delete(O);let F=X.method!=="GET"&&X.method!=="HEAD",U={method:X.method,headers:N,body:F?X.body:void 0,redirect:"manual",signal:X.signal,duplex:F?"half":void 0},H;try{H=await fetch(K($),U)}catch(O){let D=`${$}${J.pathname}`;if(console.warn(`[${xZ}] preview fetch to ${D} failed: ${O instanceof Error?O.message:String(O)}`),X.method==="GET"||X.method==="HEAD"){if(this.invalidateRecord(Z),await this.resurrectByHandle(Z).catch(()=>null)){let z=await this.resolvePreviewUpstreamUrl(Z);if(z)try{H=await fetch(K(z),U);let j=new Headers;for(let[P,A]of H.headers.entries())if(!S78.includes(P.toLowerCase()))j.set(P,A);return Q=H.status,new Response(H.body,{status:H.status,statusText:H.statusText,headers:j})}catch(j){console.warn(`[${xZ}] preview fetch retry to ${D} failed: ${j instanceof Error?j.message:String(j)}`)}}}else this.invalidateRecord(Z);Q=502;let E=tm0(502,{error:"sandbox daemon unreachable"});return E.headers.set(wV,"1"),E}let w=new Headers;for(let[O,D]of H.headers.entries())if(!S78.includes(O.toLowerCase()))w.set(O,D);return Q=H.status,new Response(H.body,{status:H.status,statusText:H.statusText,headers:w})}finally{this.recordProxyDuration("preview",Q,Y,performance.now()-G,Z)}}async ensureLocked(Z,X,G,Y){if(G.image)console.warn(`[${xZ}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${G.image}`);if(Y){let J=await Y.get(Z,eX);if(J){let W=await this.rehydrate(Z,X,J);if(W)return await this.refreshDaemonGitCredential(W,G),this.finish(W,Y,!1,!0,"resume");await Y.delete(Z,eX)}}let Q=await HF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(Q)if(Q.metadata?.deletionTimestamp)await xH0(this.kubeConfig,this.namespace,X).catch((J)=>{console.warn(`[${xZ}] wait for terminating claim ${X} failed: ${J instanceof Error?J.message:String(J)}`)});else{let J=await this.adopt(Z,X,Q).catch((W)=>{return console.warn(`[${xZ}] adopt ${X} failed, recreating: ${W instanceof Error?W.message:String(W)}`),null});if(J)return await this.refreshDaemonGitCredential(J,G),this.finish(J,Y,!0,!0,"adopt");await bw(this.kubeConfig,this.namespace,X).catch(()=>{}),await xH0(this.kubeConfig,this.namespace,X).catch((W)=>{console.warn(`[${xZ}] wait for deleted claim ${X} failed: ${W instanceof Error?W.message:String(W)}`)})}let $=await this.provision(Z,X,G);return this.finish($,Y,!0,!1,"fresh")}async finish(Z,X,G,Y,Q){let $=this.records.get(Z.handle),J=$!==void 0;if($&&$.daemonForward!==Z.daemonForward)this.closeForwarder($.daemonForward);if(this.records.set(Z.handle,Z),G)await this.persist(X,Z);if(Y)await N78(this.kubeConfig,this.namespace,Z.handle,this.computeShutdownTime()).catch((W)=>console.warn(`[${xZ}] TTL refresh failed for ${Z.handle}: ${W instanceof Error?W.message:String(W)}`));if(this.metrics){let W=om0(Z.tenant);if(this.metrics.ensureOutcome.add(1,{...W,outcome:Q}),!J)this.metrics.active.add(1,W)}return this.toSandbox(Z)}buildEnvMap(Z,X){let G={},Y=[];for(let[Q,$]of Object.entries(Z.env??{}))if(oG6.has(Q))Y.push(Q);else G[Q]=$;if(Y.length>0)console.warn(`[${xZ}] opts.env keys overlap reserved bootstrap names and were dropped: ${Y.join(",")}`);return{...G,DAEMON_TOKEN:X.token,DAEMON_BOOT_ID:X.daemonBootId,APP_ROOT:X.workdir,PROXY_PORT:String(vw)}}buildClaim(Z,X,G){let Y=this.sentinelToken!==null,Q=Y?[]:Object.entries(this.buildEnvMap(X,G)).sort(([W],[K])=>W<K?-1:W>K?1:0).map(([W,K])=>({name:W,value:K})),$=HY6(X),J=Object.keys($).length>0;return{apiVersion:`${OZ.CLAIM_API_GROUP}/${OZ.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:Z,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[h3.env]:this.envName}:{},...rm0(X.tenant)},...J?{annotations:$}:{}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:rm0(X.tenant,{[h3.role]:"claimed",[h3.sandboxHandle]:Z,...this.envName?{[h3.env]:this.envName}:{}}),...J?{annotations:$}:{}},env:Q,warmpool:Y?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(Z,X,G){let Y=this.tokenGenerator(),Q=dG6(),$=pm0,J=this.buildClaim(X,G,{token:Y,daemonBootId:Q,workdir:$});try{await Vn(this.kubeConfig,this.namespace,J)}catch(H){if(H instanceof Mn)await xH0(this.kubeConfig,this.namespace,X),await Vn(this.kubeConfig,this.namespace,J);else throw H}let W;try{W=await F78(this.kubeConfig,this.namespace,X),await gH0(this.kubeConfig,this.namespace,W)}catch(H){throw await bw(this.kubeConfig,this.namespace,X).catch(()=>{}),H}try{await this.ensureServicePortForAdoptedSandbox(W),await this.ensureHttpRouteForHandle(X,W,G.tenant??null)}catch(H){throw await bw(this.kubeConfig,this.namespace,X).catch(()=>{}),H}let K=await this.openForwarder(W,vw,X),N=`http://127.0.0.1:${K.localPort}`,F=this.workloadConfigPayload(G),U=Q;try{if(await j78(N),this.sentinelToken!==null){let H=await lH0(N);if(H)U=H.bootId;await u_(N,this.sentinelToken,F??{},{rotateToken:Y})}else if(F)await u_(N,Y,F);if(G.orgFsConfigJson)await A78(N,Y,G.orgFsConfigJson).catch((H)=>console.warn("[org-fs] sidecar config relay failed",H))}catch(H){throw this.closeForwarder(K),await this.deleteHttpRouteIfManaged(X).catch(()=>{}),await bw(this.kubeConfig,this.namespace,X).catch(()=>{}),H}return{id:Z,handle:X,adoptedSandboxName:W,token:Y,workdir:$,daemonUrl:N,daemonForward:K,workload:G.workload??null,daemonBootId:U,tenant:G.tenant??null,ensureOpts:OY6(G)}}workloadConfigPayload(Z){return cl0({runtime:Z?.workload?.runtime??"node",packageManager:Z?.workload?.packageManager?{name:Z.workload.packageManager,...Z.workload.packageManagerPath?{path:Z.workload.packageManagerPath}:{}}:null,repo:Z?.repo??null,port:Z?.workload?.devPort??tG6,tenant:Z?.tenant??void 0})}async refreshDaemonGitCredential(Z,X){let G=ll0(X);if(!G)return;try{await u_(Z.daemonUrl,Z.token,G)}catch(Y){console.warn(`[${xZ}] git credential refresh failed for ${Z.handle}: ${Y instanceof Error?Y.message:String(Y)}`)}}async withFreshCloneUrl(Z,X){if(!this.mintCloneUrl)return Z;try{let G=await this.mintCloneUrl(Z,X!==void 0?{bufferMs:X}:void 0);return G?{...Z,cloneUrl:G}:Z}catch(G){return console.warn(`[${xZ}] clone credential re-mint failed: ${G instanceof Error?G.message:String(G)}`),Z}}startCredentialRefresher(){if(!this.mintCloneUrl)return;let{signal:Z}=this.claimWatchAbort;(async()=>{while(!Z.aborted){if(await c4(sG6,{signal:Z}).catch(()=>{}),Z.aborted)break;try{await this.refreshAllGitCredentials()}catch(X){console.warn(`[${xZ}] periodic credential refresh failed: ${X instanceof Error?X.message:String(X)}`)}}})()}async refreshAllGitCredentials(){await k78(this.records.values(),(Z)=>Z.ensureOpts?.repo?.connectionId,async(Z)=>{if(this.claimWatchAbort.signal.aborted)return;let X=Z.ensureOpts?.repo;if(!X)return;let G=await this.withFreshCloneUrl(X,eG6);await this.refreshDaemonGitCredential(Z,{...Z.ensureOpts,repo:G}),Z.ensureOpts={...Z.ensureOpts,repo:G}})}async rebootstrapDaemon(Z,X,G){if(this.sentinelToken===null)return!1;let Y=this.workloadConfigPayload(G)??{};try{return await u_(Z,this.sentinelToken,Y,{rotateToken:X}),!0}catch(Q){if(Q instanceof cH0&&Q.status===401)try{return await u_(Z,X,Y,{rotateToken:X}),!0}catch($){return console.warn(`[${xZ}] re-bootstrap retry with claim token failed: ${$ instanceof Error?$.message:String($)}`),!1}return console.warn(`[${xZ}] re-bootstrap failed: ${Q instanceof Error?Q.message:String(Q)}`),!1}}async ensureServicePortForAdoptedSandbox(Z){if(!this.previewGateway||!this.previewUrlPattern)return;await D78(this.kubeConfig,this.namespace,Z,{name:"daemon",port:vw,targetPort:vw})}async ensureHttpRouteForHandle(Z,X,G){if(!this.previewGateway||!this.previewUrlPattern)return;let Y=BY6(this.previewUrlPattern,Z);if(!Y)throw new vZ(`Unable to derive preview hostname for ${Z} from pattern: ${this.previewUrlPattern}`);let Q={apiVersion:`${Cn.API_GROUP}/${Cn.API_VERSION}`,kind:"HTTPRoute",metadata:{name:Z,namespace:this.namespace,labels:rm0(G??void 0,{[h3.role]:"claimed",[h3.sandboxHandle]:Z,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[h3.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[Y],rules:[{backendRefs:[{group:"",kind:"Service",name:X,port:vw}]}]}};await _H0(this.kubeConfig,this.namespace,Q)}async deleteHttpRouteIfManaged(Z){if(!this.previewGateway)return;await yH0(this.kubeConfig,this.namespace,Z)}async rehydrate(Z,X,G){let Y=G.state;if(!Y.adoptedSandboxName&&!Y.podName||!Y.token)return null;let Q=await HF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!Q||!V78(Q))return null;let $=Q.status?.sandbox?.name??Y.adoptedSandboxName??Y.podName??X,J=await this.openAndProbeDaemon($,X);if(!J)return null;if(Y.daemonBootId&&Y.daemonBootId!==J.bootId){if(this.sentinelToken!==null){let W=Y.ensureOpts?.repo?{...Y.ensureOpts,repo:await this.withFreshCloneUrl(Y.ensureOpts.repo)}:Y.ensureOpts??null;if(!await this.rebootstrapDaemon(J.daemonUrl,Y.token,W))return this.closeForwarder(J.daemonForward),null}else console.warn(`[${xZ}] daemon restart detected (handle=${X}): stored bootId=${Y.daemonBootId} live bootId=${J.bootId}`);await this.stateStore?.put(Z,eX,{handle:X,state:{...Y,daemonBootId:J.bootId}}).catch((W)=>console.warn(`[${xZ}] bootId persist failed for ${X}: ${W instanceof Error?W.message:String(W)}`))}return{id:Z,handle:X,adoptedSandboxName:$,token:Y.token,workdir:Y.workdir??pm0,daemonUrl:J.daemonUrl,daemonForward:J.daemonForward,workload:Y.workload??null,daemonBootId:J.bootId,tenant:Y.tenant??null,ensureOpts:Y.ensureOpts??null}}async adopt(Z,X,G){if(!V78(G))return null;let Y=G.status?.sandbox?.name??X;if(this.sentinelToken!==null)return null;let Q=QY6(G);if(!Q)return null;let $=await this.openAndProbeDaemon(Y,X);if(!$)return null;let J=wY6(G);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(Y).catch((W)=>{console.warn(`[${xZ}] Service port backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)}),await this.ensureHttpRouteForHandle(X,Y,J).catch((W)=>{console.warn(`[${xZ}] HTTPRoute backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)});return{id:Z,handle:X,adoptedSandboxName:Y,token:Q,workdir:pm0,daemonUrl:$.daemonUrl,daemonForward:$.daemonForward,workload:null,daemonBootId:$.bootId,tenant:J,ensureOpts:null}}async openAndProbeDaemon(Z,X){let G=await this.openForwarder(Z,vw,X).catch(()=>null);if(!G)return null;let Y=`http://127.0.0.1:${G.localPort}`,Q=await lH0(Y);if(!Q)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:Y,bootId:Q.bootId}}async getRecord(Z){let X=this.records.get(Z);if(X)return X;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(eX,Z);if(!G)return null;let Y=await this.rehydrate(G.id,Z,G);if(Y)this.records.set(Z,Y);return Y}async resurrectByHandle(Z){if(!this.stateStore)return null;let X=await this.stateStore.getByHandle(eX,Z);if(!X)return null;let G=X.state.ensureOpts;if(!G)return null;let Y=G.repo?{...G,repo:await this.withFreshCloneUrl(G.repo)}:G;return await this.ensure(X.id,Y),this.records.get(Z)??null}invalidateRecord(Z){let X=this.records.get(Z);if(!X)return;this.records.delete(Z),this.closeForwarder(X.daemonForward)}recordProxyDuration(Z,X,G,Y,Q){if(!this.metrics)return;this.metrics.proxyDurationMs.record(Y,{...om0(G?.tenant??null),source:Z,sandbox_handle:G?.handle??Q??"",status_code:X||0})}composePreviewUrl(Z){if(this.previewUrlPattern)return OZ0(this.previewUrlPattern,Z.handle);return`http://127.0.0.1:${Z.daemonForward.localPort}/`}toSandbox(Z){return{handle:Z.handle,workdir:Z.workdir,previewUrl:this.composePreviewUrl(Z)}}async persist(Z,X){if(!Z)return;let G={adoptedSandboxName:X.adoptedSandboxName,token:X.token,workdir:X.workdir,workload:X.workload,daemonBootId:X.daemonBootId,tenant:X.tenant,...X.ensureOpts?{ensureOpts:X.ensureOpts}:{}};await Z.put(X.id,eX,{handle:X.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(Z,X,G=Z){let Y=$Y6(G,X);return new Promise((Q,$)=>{let J=(W,K)=>{let N=f78.createServer((F)=>this.handleForwardedConnection(F,Z,X,G));N.once("error",(F)=>{if(F.code==="EADDRINUSE"&&K<XY6){try{N.close()}catch{}let U=am0+(W-am0+1)%b78;J(U,K+1);return}$(F)}),N.listen(W,"127.0.0.1",()=>{let F=N.address();if(!F||typeof F==="string"){N.close(),$(Error("port-forward listener failed to bind"));return}Q({server:N,localPort:F.port})})};J(Y,0)})}handleForwardedConnection(Z,X,G,Y){let Q=new mG6,$=null,J=!1,W=()=>{if(J)return;if(J=!0,Q.destroy(),$)try{$.close()}catch{}if(!Z.destroyed)Z.destroy()};Z.pipe(Q),Z.on("error",W),Z.on("close",W),this.portForward.portForward(this.namespace,X,[G],Z,null,Q).then((K)=>{let N=typeof K==="function"?K():K;if(!N){W();return}if($=N,$.on("close",W),$.on("error",()=>{this.invalidateRecord(Y),W()}),J)try{$.close()}catch{}}).catch((K)=>{console.warn(`[${xZ}] port-forward to ${X}:${G} failed: ${iG6(K)}`),this.invalidateRecord(Y),W()})}closeForwarder(Z){Z.server.close((X)=>{if(X)console.warn(`[${xZ}] port-forward close on :${Z.localPort} errored: ${X instanceof Error?X.message:String(X)}`)})}close(){if(this.closed)return;this.closed=!0,this.claimWatchAbort.abort();for(let Z of this.records.values())this.closeForwarder(Z.daemonForward);this.records.clear()}}function GY6(Z){return{active:Z.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind and owning org. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (studio deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:Z.createCounter("studio.sandbox.ensure.outcome",{description:"Outcome of each ensure() call: fresh provision, resume from state-store after restart, or adopt of a cluster-side claim studio didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:Z.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of studio-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function YY6(){let Z=new x_;return Z.loadFromDefault(),Z}function V78(Z){return Boolean(Z.status?.conditions?.some((X)=>X.type==="Ready"&&X.status==="True"))}function QY6(Z){let X=Z.spec?.env;if(!X)return null;for(let G of X)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function $Y6(Z,X){let G=cG6("sha256").update(`${Z}:${X}`).digest();return am0+G.readUInt32BE(0)%b78}function tm0(Z,X){return new Response(JSON.stringify(X),{status:Z,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function C78(Z){let X=Z.slice(0,WY6);return JY6.test(X)?X:""}function NY6(Z){if(Z===void 0)return null;let X=Z.trim();if(X==="")return null;if(!KY6.test(X))throw Error(`AgentSandboxProvider: envName=${JSON.stringify(X)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Studio sets this from STUDIO_ENV; check the studio chart's configMap.`);return X}function rm0(Z,X={}){let G={...X};if(Z){let Y=C78(Z.orgId),Q=Z.userId?C78(Z.userId):"";if(Y)G[h3.orgId]=Y;if(Q)G[h3.userId]=Q}return G}function HV(Z){let X="";for(let G of Z){let Y=G.codePointAt(0)??0;X+=Y<32||Y===127?" ":G}return X.slice(0,FY6)}function UY6(Z){try{let X=new URL(Z);return X.username="",X.password="",X.toString()}catch{return""}}function HY6(Z){let X={},G=Z.tenant;if(G?.orgSlug)X[DJ.orgSlug]=HV(G.orgSlug);if(G?.orgName)X[DJ.orgName]=HV(G.orgName);if(G?.userEmail)X[DJ.userEmail]=HV(G.userEmail);if(G?.userName)X[DJ.userName]=HV(G.userName);let Y=Z.repo;if(Y){if(Y.displayName)X[DJ.gitRepo]=HV(Y.displayName);let Q=UY6(Y.cloneUrl);if(Q)X[DJ.gitRepoUrl]=HV(Q);let $=Z.branch??Y.branch;if($)X[DJ.gitBranch]=HV($)}return X}function wY6(Z){let X=Z.metadata?.labels;if(!X)return null;let G=X[h3.orgId],Y=X[h3.userId];if(!G)return null;let Q=Z.metadata?.annotations??{};return{orgId:G,...Y?{userId:Y}:{},orgSlug:Q[DJ.orgSlug],orgName:Q[DJ.orgName],userEmail:Q[DJ.userEmail],userName:Q[DJ.userName]}}function om0(Z){return{org_id:Z?.orgId??"",user_id:Z?.userId??"",runner_kind:eX}}function OY6(Z){let X={};if(Z.repo)X.repo=Z.repo;if(Z.workload)X.workload=Z.workload;if(Z.env&&Object.keys(Z.env).length>0)X.env=Z.env;if(Z.tenant)X.tenant=Z.tenant;return Object.keys(X).length>0?X:null}function BY6(Z,X){try{return new URL(OZ0(Z,X)).hostname||null}catch{return null}}var eX="agent-sandbox",xZ="AgentSandboxProvider",wV="x-sandbox-preview-not-ready",nG6="agent-sandbox-system",pG6="studio-sandbox",vw=9000,tG6=3000,pm0="/app",rG6=32,oG6,aG6=900000,sG6=900000,eG6=1800000,ZY6,S78,am0=40000,b78=1e4,XY6=256,h3,DJ,JY6,WY6=63,KY6,FY6=253;var v78=B(()=>{u9();gm0();P78();DZ0();hH0();kn();M78();oG6=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),ZY6=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],S78=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];h3={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id",env:"studio.decocms.com/env"},DJ={orgSlug:"studio.decocms.com/org-slug",orgName:"studio.decocms.com/org-name",userEmail:"studio.decocms.com/user-email",userName:"studio.decocms.com/user-name",gitRepo:"studio.decocms.com/git-repo",gitRepoUrl:"studio.decocms.com/git-repo-url",gitBranch:"studio.decocms.com/git-branch"},JY6=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;KY6=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var x78={};Q6(x78,{waitForSandboxReady:()=>gH0,getSandboxClaim:()=>HF,getHttpRoute:()=>O78,deleteSandboxClaim:()=>bw,deleteHttpRoute:()=>yH0,createSandboxClaim:()=>Vn,applyHttpRoute:()=>_H0,SandboxTimeoutError:()=>FV,SandboxError:()=>vZ,PREVIEW_NOT_READY_HEADER:()=>wV,KubeConfig:()=>x_,K8S_CONSTANTS:()=>OZ,HTTPROUTE_CONSTANTS:()=>Cn,AgentSandboxProvider:()=>sm0});var em0=B(()=>{gm0();kn();hH0();v78()});class mH0{kind=xw;userSub;dispatch;stateStore;records=new Map;constructor(Z){if(!Z.userSub)throw Error("DesktopSandboxProvider requires userSub");if(!Z.dispatch)throw Error("DesktopSandboxProvider requires dispatch");this.userSub=Z.userSub,this.dispatch=Z.dispatch,this.stateStore=Z.stateStore??null}async ensure(Z,X={}){let G=X.branch??X.repo?.branch,Y=Aw(Z,G),Q=this.records.get(Y);if(Q){if(await this.probeHealth(Y))return this.toSandbox(Q);if(this.records.delete(Y),this.stateStore)await this.stateStore.deleteByHandle(xw,Y).catch(()=>{})}else if(this.stateStore){let H=(await this.stateStore.getByHandle(xw,Y))?.state,w=H?.sandboxApiUrl;if(w){if(await this.probeHealth(Y)){let O={handle:Y,sandboxApiUrl:w,previewUrl:H?.previewUrl??w};return this.records.set(Y,O),this.toSandbox(O)}await this.stateStore.deleteByHandle(xw,Y).catch(()=>{})}}let $=$F({userName:X.tenant?.userName,userEmail:X.tenant?.userEmail}),J=JSON.stringify({handle:Y,repo:X.repo,branch:G,...X.workload?{workload:X.workload}:{},...$?{operator:$}:{},...X.offloadAllowedHosts?{offloadAllowedHosts:X.offloadAllowedHosts}:{},...X.offloadAllowSameHostDev!==void 0?{offloadAllowSameHostDev:X.offloadAllowSameHostDev}:{},...X.orgFsConfigJson?{orgFsConfigJson:X.orgFsConfigJson}:{}}),W=await this.dispatchJson("POST","/api/sandboxes",J),K=JSON.parse(W);if(typeof K.sandboxApiUrl!=="string")throw Error("desktop ensure: daemon did not return a sandboxApiUrl string");let N=typeof K.previewUrl==="string"?K.previewUrl:K.sandboxApiUrl,F={handle:Y,sandboxApiUrl:K.sandboxApiUrl,previewUrl:N};if(this.records.set(Y,F),this.stateStore)await this.stateStore.put(Z,xw,{handle:Y,state:{handle:Y,sandboxApiUrl:K.sandboxApiUrl,previewUrl:N}});return this.toSandbox(F)}async proxyDaemonRequest(Z,X,G){let Y=X.startsWith("/")?X:`/${X}`,Q=Y.startsWith("/_sandbox/")?Y.slice(9):Y,$=`/_sandbox/${encodeURIComponent(Z)}${Q}`,J=new Headers(G.headers);for(let L of["host","cookie","connection","keep-alive","transfer-encoding","upgrade","authorization"])J.delete(L);let W={};J.forEach((L,z)=>{W[z]=L});let K;if(G.body!=null)K=await EY6(G.body);let F=this.dispatch(this.userSub,{method:G.method,path:$,headers:W,body:K},{signal:G.signal})[Symbol.asyncIterator](),U=DY6(),H=200,w={"content-type":"application/octet-stream"},O=[];try{while(!0){let L=await F.next();if(L.done)break;let z=L.value;if(z.headers){H=z.headers.status,w=z.headers.headers;break}if(z.data!=null){let j=U.push(z.data);if(j.length)O.push(j)}}}catch(L){let z=L instanceof Error?L.message:"dispatch error";return new Response(JSON.stringify({error:z}),{status:502,headers:{"content-type":"application/json"}})}let D=!1,E=new ReadableStream({async start(L){for(let z of O)L.enqueue(z)},async pull(L){try{while(!0){let z=await F.next();if(D)return;if(z.done){let P=U.flush();if(P.length)L.enqueue(P);L.close();return}let j=z.value;if(j.data!=null){let P=U.push(j.data);if(P.length){L.enqueue(P);return}}}}catch(z){if(!D)L.error(z)}},cancel(){D=!0,F.return?.()}});return new Response(E,{status:H,headers:w})}async alive(Z){return this.probeHealth(Z)}async probeHealth(Z){let X=new AbortController,G=setTimeout(()=>X.abort(),3000);try{return await this.dispatchJson("GET",`/api/sandboxes/${encodeURIComponent(Z)}`,void 0,X.signal),!0}catch{return!1}finally{clearTimeout(G)}}async forgetHandle(Z){if(this.records.delete(Z),this.stateStore)await this.stateStore.deleteByHandle(xw,Z).catch(()=>{})}async delete(Z){if(this.records.delete(Z),this.stateStore)await this.stateStore.deleteByHandle(xw,Z).catch(()=>{});try{await this.dispatchJson("DELETE",`/api/sandboxes/${encodeURIComponent(Z)}`)}catch(X){if(!(X instanceof Error?X.message:String(X)).includes("404"))throw X}}async getPreviewUrl(Z){return(await this.resolveRecord(Z))?.previewUrl??null}async localWorkdir(Z){return null}async*watchClaimLifecycle(Z,X){yield{kind:"ready"}}toSandbox(Z){return{handle:Z.handle,workdir:Z.sandboxApiUrl,previewUrl:Z.previewUrl}}async resolveRecord(Z){let X=this.records.get(Z);if(X)return X;if(!this.stateStore)return null;let Y=(await this.stateStore.getByHandle(xw,Z))?.state,Q=Y?.sandboxApiUrl;if(!Q)return null;let $={handle:Z,sandboxApiUrl:Q,previewUrl:Y?.previewUrl??Q};return this.records.set(Z,$),$}async dispatchJson(Z,X,G,Y){let Q={accept:"application/json"};if(G!==void 0)Q["content-type"]="application/json";let $=this.dispatch(this.userSub,{method:Z,path:X,headers:Q,body:G},{signal:Y}),J=null,W="";for await(let N of $)if(N.headers)J=N.headers.status;else if(N.data!=null)W+=N.data;let K=Buffer.from(W,"base64").toString("utf8");if(J!=null&&(J<200||J>=300))throw Error(`daemon returned ${J}: ${K}`);return K}}function _78(Z){return new mH0(Z)}function DY6(){let Z="";return{push(X){if(X.length===0)return Zi0;Z+=X;let G=Z.length-Z.length%4;if(G===0)return Zi0;let Y=Z.slice(0,G);return Z=Z.slice(G),new Uint8Array(Buffer.from(Y,"base64"))},flush(){if(Z.length===0)return Zi0;let X=Z;return Z="",new Uint8Array(Buffer.from(X,"base64"))}}}async function EY6(Z){if(typeof Z==="string")return Z;if(Z instanceof ArrayBuffer)return Buffer.from(Z).toString("utf8");if(ArrayBuffer.isView(Z))return Buffer.from(Z.buffer,Z.byteOffset,Z.byteLength).toString("utf8");if(Z instanceof URLSearchParams)return Z.toString();return await new Response(Z).text()}var xw="user-desktop",Zi0;var y78=B(()=>{DZ0();BZ0();Zi0=new Uint8Array(0)});var g78={};Q6(g78,{createDesktopProvider:()=>_78,DesktopSandboxProvider:()=>mH0});var h78=B(()=>{y78()});var i78={};Q6(i78,{subscribeLifecycle:()=>Gi0,getSandboxProviderByKind:()=>bn,getOrInitSharedRunner:()=>IY6,buildDesktopProvider:()=>iH0,__resetSharedLifecyclesForTesting:()=>VY6});function d78(Z,X){let G=u78[Z];if(G)return Promise.resolve(G);let Y=Xi0[Z];if(Y)return Y;let Q=X().then(($)=>{return u78[Z]=$,$}).finally(()=>{delete Xi0[Z]});return Xi0[Z]=Q,Q}function jY6(){let Z=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return Z&&Z.trim()!==""?Z:void 0}function AY6(){let Z=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return Z&&Z.trim()!==""?Z:void 0}function PY6(){let Z=process.env.STUDIO_ENV;return Z&&Z.trim()!==""?Z:void 0}function TY6(){let Z=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return Z&&Z.trim()!==""?Z:void 0}function RY6(){let Z=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),X=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!Z&&!X)return;if(!Z||!X)throw Error("STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME and STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE must both be set, or both unset. Half-configured per-claim HTTPRoute routing would silently fail to attach.");return{name:Z,namespace:X}}async function m78(Z,X){let G=jY6();switch(Z){case"agent-sandbox":{let Y=new il0(X),{AgentSandboxProvider:Q}=await Promise.resolve().then(() => (em0(),x78)),$=new qN(W1().encryptionKey);return new Q({stateStore:Y,previewUrlPattern:G,sandboxTemplateName:AY6(),envName:PY6(),previewGateway:RY6(),sentinelToken:TY6(),meter:B4,mintCloneUrl:async(J,W)=>{if(!J.connectionId)return null;let K=_18(J.cloneUrl);if(!K)return null;let{cloneUrl:N}=await Pw(J.connectionId,K.owner,K.name,X,$,{bufferMs:W?.bufferMs});return N}})}case"user-desktop":throw Error("user-desktop provider cannot be instantiated without a per-run link claim \u2014 call resolveSandboxProvider, which binds the link before constructing the provider.");default:throw Error(`Unknown sandbox provider kind: ${String(Z)}`)}}async function iH0(Z,X){let{DesktopSandboxProvider:G}=await Promise.resolve().then(() => (h78(),g78)),{getProxyDispatch:Y}=await Promise.resolve().then(() => (Qi0(),Yi0)),Q=new ml0(Z.db);if(!X)throw Error("buildDesktopProvider: userSub must be a non-empty string");let $=Y();return new G({userSub:X,dispatch:$,stateStore:Q})}function bn(Z,X){return d78(X,()=>m78(X,Z.db))}async function IY6(){let Z;try{Z=yE()}catch(G){return console.warn("[lifecycle] cannot resolve sandbox runner:",G instanceof Error?G.message:String(G)),null}return await d78(Z,()=>m78(Z,P4().db))}function Gi0(Z,X,G){let Y=_w.get(X);if(Y){if(Y.terminated){if(Y.lastPhase)try{G(Y.lastPhase)}catch{}return{unsubscribe:kY6}}if(Y.listeners.add(G),Y.lastPhase)try{G(Y.lastPhase)}catch{}return c78(X,Y,G)}let Q=new AbortController,$={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:Q};return _w.set(X,$),SY6(Z,X,$),c78(X,$,G)}function kY6(){}function c78(Z,X,G){return{unsubscribe(){if(_w.get(Z)!==X)return;if(X.listeners.delete(G),X.listeners.size===0)_w.delete(Z),X.abort.abort()}}}async function SY6(Z,X,G){let Y=null;try{for await(let Q of Z.watchClaimLifecycle(X,G.abort.signal)){if(G.abort.signal.aborted)break;G.lastPhase=Q;let $=Q.kind==="ready"||Q.kind==="failed";if($)G.terminated=!0;let J=Array.from(G.listeners);for(let W of J)try{W(Q)}catch{}if($)break}}catch(Q){Y=Q}finally{if(!G.terminated&&!G.abort.signal.aborted&&G.listeners.size>0){let Q={kind:"failed",reason:"unknown",message:Y instanceof Error?Y.message:"Lifecycle watcher ended unexpectedly"};G.lastPhase=Q,G.terminated=!0;for(let $ of Array.from(G.listeners))try{$(Q)}catch{}}if(_w.get(X)===G)_w.delete(X)}}function VY6(){for(let Z of _w.values())Z.abort.abort();_w.clear()}var LY6,zY6,l78,u78,Xi0,qY6,MY6,_w;var vn=B(()=>{y3();GY();H9();I18();f18();Kn();pc();_8();LY6=Symbol.for("decocms.sandbox.lifecycle.runners"),zY6=Symbol.for("decocms.sandbox.lifecycle.inflight"),l78=globalThis,u78=l78[LY6]??={},Xi0=l78[zY6]??={};qY6=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),MY6=globalThis,_w=MY6[qY6]??=new Map});function yw(Z,X){return Aw(Z,X)}var xn=B(()=>{y3()});async function $i0(Z,X){if(X.length===0)return;let G=await bn(Z,"agent-sandbox");for(let Y=0;Y<X.length;Y+=n78){let Q=X.slice(Y,Y+n78);await Promise.all(Q.map(async($)=>{let J=_3({orgId:$.organizationId,virtualMcpId:$.virtualMcpId,branch:$.branch}),W=mW(J),K={organizationId:$.organizationId,virtualMcpId:$.virtualMcpId,branch:$.branch},N=await Z.storage.agentSandboxSessions.withLock(K,(F)=>F.beginDelete(K,$.lastStartedBy));if(!N)return;await G.delete(N.sandboxHandle??yw(W,$.branch),W),await Z.storage.agentSandboxSessions.withLock(K,(F)=>F.completeDelete(K,N.generation))}))}}async function p78(Z,X,G){while(!0){let Y=await Z.storage.agentSandboxSessions.listByVirtualMcp(X,G,{limit:200});if(Y.length===0)return;await $i0(Z,Y)}}var n78=20;var Ji0=B(()=>{y3();vn();xn()});import{z as Wi0}from"zod";var CY6,fY6,Ki0;var t78=B(()=>{Ew();UJ();X1();ii();BH();Ji0();CY6=Wi0.object({id:Wi0.string().describe("ID of the virtual MCP to delete")}),fY6=Wi0.object({item:CX.describe("The deleted virtual MCP entity")}),Ki0=e({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:CY6,outputSchema:fY6,handler:async(Z,X)=>{L0(X);let G=w0(X);await X.access.check();let Y=await X.storage.virtualMcps.findById(Z.id);if(!Y)throw Error(`Virtual MCP not found: ${Z.id}`);if(Y.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Z.id}`);if(await p78(X,G.id,Z.id),await X.storage.virtualMcps.delete(Z.id),X.orgFs)await wl0(X.orgFs,Z.id,C1(X)??"system");let Q=Y.metadata?.githubRepo?.connectionId;if(Q)try{let $=await X.storage.connections.findById(Q,G.id);if($&&b3($)){let W=await new V9(X.db,X.vault).get(Q);if(W?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${W.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await X.storage.connections.delete(Q)}}catch($){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Q,error:$.message})}return{item:Y}}})});import{z as VY}from"zod";var bY6,Ni0;var r78=B(()=>{X1();bY6=VY.object({id:VY.string(),virtualMcpId:VY.string(),pluginId:VY.string(),connectionId:VY.string().nullable(),settings:VY.record(VY.string(),VY.unknown()).nullable(),createdAt:VY.string(),updatedAt:VY.string()}),Ni0=e({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:VY.object({virtualMcpId:VY.string().describe("Virtual MCP ID"),pluginId:VY.string().describe("Plugin ID")}),outputSchema:VY.object({config:bY6.nullable()}),handler:async(Z,X)=>{L0(X);let G=w0(X);await X.access.check();let{virtualMcpId:Y,pluginId:Q}=Z,$=await X.storage.connections.findById(Y);if(!$||$.organization_id!==G.id)return{config:null};if($.connection_type!=="VIRTUAL")return{config:null};let J=await X.storage.virtualMcpPluginConfigs.get(Y,Q);if(!J)return{config:null};return{config:{id:J.id,virtualMcpId:J.virtualMcpId,pluginId:J.pluginId,connectionId:J.connectionId,settings:J.settings,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});import{z as f7}from"zod";var vY6,Fi0;var o78=B(()=>{X1();Cb();tZ();vY6=f7.object({id:f7.string(),virtualMcpId:f7.string(),pluginId:f7.string(),connectionId:f7.string().nullable(),settings:f7.record(f7.string(),f7.unknown()).nullable(),createdAt:f7.string(),updatedAt:f7.string()}),Fi0=e({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:f7.object({virtualMcpId:f7.string().describe("Virtual MCP ID"),pluginId:f7.string().describe("Plugin ID"),connectionId:f7.string().nullable().optional().describe("MCP connection to bind"),settings:f7.record(f7.string(),f7.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:f7.object({config:vY6}),handler:async(Z,X)=>{L0(X);let G=w0(X);await X.access.check();let{virtualMcpId:Y,pluginId:Q,connectionId:$,settings:J}=Z,W=C1(X),K=await X.storage.connections.findById(Y);if(!K)throw Error(`Connection not found: ${Y}`);if(K.organization_id!==G.id)throw Error(`Connection not found: ${Y}`);if(K.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Y}`);let N=$?await X.storage.connections.findById($):null;if($&&N&&N.organization_id!==G.id)throw Error(`Connection not found: ${$}`);if($&&K.organization_id&&!N&&b$()&&Q10($,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let U=Vb(K.organization_id,qZ());await X.storage.connections.create({...U,organization_id:K.organization_id,created_by:W})}else if($&&!N)throw Error(`Connection not found: ${$}`);let F=await X.storage.virtualMcpPluginConfigs.upsert(Y,Q,{connectionId:$,settings:J});return{config:{id:F.id,virtualMcpId:F.virtualMcpId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});import{z as gG}from"zod";var xY6,Ui0;var a78=B(()=>{X1();BH();xY6=gG.object({connectionId:gG.string(),toolName:gG.string(),label:gG.string(),icon:gG.string().nullable().optional()}),Ui0=e({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:gG.object({virtualMcpId:gG.string().describe("Virtual MCP ID"),pinnedViews:gG.array(xY6).describe("Pinned views to set for the virtual MCP sidebar"),layout:gG.object({defaultMainView:gG.object({type:gG.string(),id:gG.string().optional(),toolName:gG.string().optional()}).nullable().optional(),chatDefaultOpen:gG.boolean().nullable().optional()}).optional()}),outputSchema:gG.object({item:CX.nullable()}),handler:async(Z,X)=>{L0(X);let G=w0(X);await X.access.check();let{virtualMcpId:Y,pinnedViews:Q,layout:$}=Z,J=C1(X),W=await X.storage.virtualMcps.findById(Y);if(!W)throw Error(`Virtual MCP not found: ${Y}`);if(W.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Y}`);let K=W.metadata?.ui??{},N={...K,pinnedViews:Q.length>0?Q:null,layout:$??K.layout??null};return{item:await X.storage.virtualMcps.update(Y,J??"system",{metadata:{...W.metadata,ui:N}})}}})});import{z as wF}from"zod";var _Y6,yY6,Hi0;var s78=B(()=>{X1();_Y6=wF.object({ids:wF.array(wF.string()).describe("Virtual MCP ids to look up")}),yY6=wF.object({items:wF.array(wF.object({id:wF.string(),last_used_at:wF.string().optional(),last_used_by:wF.string().optional()}))}),Hi0=e({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_Y6,outputSchema:yY6,handler:async(Z,X)=>{L0(X),w0(X),await X.access.check();let G=await X.storage.threads.findLastUsedByVirtualMcpIds(Z.ids);return{items:Z.ids.map((Y)=>({id:Y,last_used_at:G.get(Y)?.last_used_at,last_used_by:G.get(Y)?.last_used_by}))}}})});var e78=B(()=>{U18();H18();w18();O18();t78();r78();o78();a78();s78()});import{z as F9}from"zod";var wi0;var ZX8=B(()=>{H9();X1();wi0=e({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:F9.object({id:F9.string().describe("Log ID to fetch")}),outputSchema:F9.object({log:F9.object({id:F9.string().optional(),organizationId:F9.string(),connectionId:F9.string(),toolName:F9.string(),input:F9.record(F9.string(),F9.unknown()),output:F9.record(F9.string(),F9.unknown()),isError:F9.boolean(),errorMessage:F9.string().nullish(),durationMs:F9.number(),timestamp:F9.string(),userId:F9.string().nullish(),requestId:F9.string(),userAgent:F9.string().nullish(),virtualMcpId:F9.string().nullish(),properties:F9.record(F9.string(),F9.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async(Z,X)=>{await X.access.check(),await aQ();let G=w0(X),Y=await X.storage.monitoring.getById(G.id,Z.id);if(!Y)return{log:null};return{log:{...Y,timestamp:Y.timestamp instanceof Date?Y.timestamp.toISOString():Y.timestamp}}}})});import{z as O4}from"zod";var hY6,Oi0;var XX8=B(()=>{H9();X1();hY6=O4.object({id:O4.string().optional().describe("Unique log identifier"),organizationId:O4.string().describe("Organization ID"),connectionId:O4.string().describe("Connection ID"),toolName:O4.string().describe("Name of the tool that was called"),isError:O4.boolean().describe("Whether the call resulted in an error"),errorMessage:O4.string().nullish().describe("Error message if applicable"),durationMs:O4.number().describe("Call duration in milliseconds"),timestamp:O4.string().describe("ISO 8601 timestamp of the call"),userId:O4.string().nullish().describe("User who triggered the call"),requestId:O4.string().describe("Unique request identifier"),userAgent:O4.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:O4.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:O4.record(O4.string(),O4.string()).nullish().describe("Custom key-value metadata attached to the log")}),Oi0=e({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:O4.object({connectionId:O4.string().optional().describe("Filter by connection ID"),excludeConnectionIds:O4.array(O4.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:O4.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:O4.string().optional().describe("Filter by tool name"),isError:O4.boolean().optional().describe("Filter by error status"),startDate:O4.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:O4.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:O4.number().default(20).describe("Maximum number of results"),offset:O4.number().default(0).describe("Offset for pagination"),properties:O4.record(O4.string(),O4.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:O4.array(O4.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:O4.record(O4.string(),O4.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:O4.record(O4.string(),O4.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:O4.object({logs:O4.array(hY6).describe("Array of monitoring logs"),total:O4.number().describe("Total number of logs matching filters"),offset:O4.number().describe("Current offset for pagination"),limit:O4.number().describe("Current limit for pagination")}),handler:async(Z,X)=>{await aQ();let G=w0(X),Q=Z.properties||Z.propertyKeys||Z.propertyPatterns||Z.propertyInValues?{properties:Z.properties,propertyKeys:Z.propertyKeys,propertyPatterns:Z.propertyPatterns,propertyInValues:Z.propertyInValues}:void 0,$={organizationId:G.id,connectionId:Z.connectionId,excludeConnectionIds:Z.excludeConnectionIds,virtualMcpId:Z.virtualMcpId,toolName:Z.toolName,isError:Z.isError,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,limit:Z.limit,offset:Z.offset,propertyFilters:Q},J=await X.storage.monitoring.query($);return{logs:J.logs.map(({input:W,output:K,...N})=>({...N,timestamp:N.timestamp instanceof Date?N.timestamp.toISOString():N.timestamp})),total:J.total,offset:Z.offset,limit:Z.limit}}})});import{z as N8}from"zod";var Bi0;var GX8=B(()=>{H9();X1();Bi0=e({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:N8.object({startDate:N8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:N8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:N8.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:N8.array(N8.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:N8.array(N8.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:N8.array(N8.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:N8.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:N8.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:N8.array(N8.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:N8.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:N8.object({totalCalls:N8.number().describe("Total number of tool calls"),errorRate:N8.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:N8.number().describe("Average call duration in milliseconds"),errorRatePercent:N8.string().optional().describe("Error rate as a percentage string"),totalErrors:N8.number().optional().describe("Total number of errors"),p50DurationMs:N8.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:N8.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:N8.array(N8.object({connectionId:N8.string(),calls:N8.number(),errors:N8.number(),errorRate:N8.number(),avgDurationMs:N8.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:N8.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:N8.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:N8.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:N8.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:N8.array(N8.object({toolName:N8.string(),connectionId:N8.string().nullable(),calls:N8.number(),inputTokens:N8.number().optional(),outputTokens:N8.number().optional(),costUsd:N8.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:N8.array(N8.object({timestamp:N8.string(),toolName:N8.string(),calls:N8.number(),errors:N8.number(),avg:N8.number(),p95:N8.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:N8.array(N8.object({timestamp:N8.string(),calls:N8.number(),errors:N8.number(),errorRate:N8.number(),avg:N8.number(),p50:N8.number(),p95:N8.number(),inputTokens:N8.number().optional(),outputTokens:N8.number().optional(),totalTokens:N8.number().optional(),costUsd:N8.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async(Z,X)=>{let G=w0(X);if(await X.access.check(),await aQ(),Z.interval&&Z.llmUsage)return X.storage.monitoring.queryLlmUsageStats({organizationId:G.id,interval:Z.interval,connectionId:Z.connectionIds?.[0]??"decopilot",startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,userIds:Z.userIds,topN:Z.topN});if(Z.interval){let Q=await X.storage.monitoring.queryMetricTimeseries({organizationId:G.id,interval:Z.interval,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,filters:{connectionIds:Z.connectionIds,excludeConnectionIds:Z.excludeConnectionIds,toolNames:Z.toolNames,status:Z.status}});if(!Z.topN)return Q;let $=await X.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:G.id,interval:Z.interval,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,topN:Z.topN,filters:{connectionIds:Z.connectionIds,excludeConnectionIds:Z.excludeConnectionIds,toolNames:Z.toolNames,status:Z.status}});return{...Q,topTools:$.topTools,topToolsTimeseries:$.timeseries}}let Y=await X.storage.monitoring.getStats({organizationId:G.id,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0});return{...Y,errorRatePercent:(Y.errorRate*100).toFixed(2)}}})});import{z as hG}from"zod";var Di0;var YX8=B(()=>{H9();X1();Di0=e({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hG.object({threadIds:hG.array(hG.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:hG.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:hG.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:hG.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:hG.object({items:hG.array(hG.object({threadId:hG.string(),calls:hG.number(),inputTokens:hG.number(),outputTokens:hG.number(),totalTokens:hG.number(),costUsd:hG.number()}))}),handler:async(Z,X)=>{let G=w0(X);return await X.access.check(),await aQ(),{items:await X.storage.monitoring.queryThreadUsage({organizationId:G.id,connectionId:Z.connectionId??"decopilot",threadIds:Z.threadIds,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0})}}})});var QX8=B(()=>{ZX8();XX8();GX8();YX8()});function nH0(Z){return typeof Z==="string"&&cY6.has(Z.trim().toLowerCase())}var cY6;var Ei0=B(()=>{cY6=new Set([".well-known","_admin","api","auth","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as fQ}from"zod";var Li0;var $X8=B(()=>{X1();Ei0();Li0=e({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:fQ.object({slug:fQ.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine((Z)=>!nH0(Z),"Slug is reserved by Studio"),name:fQ.string().min(1).max(255),description:fQ.string().optional()}),outputSchema:fQ.object({id:fQ.string(),name:fQ.string(),slug:fQ.string(),logo:fQ.string().nullable().optional(),metadata:fQ.any().optional(),createdAt:fQ.string().datetime().describe("ISO 8601 timestamp"),members:fQ.array(fQ.any()).optional()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=C1(X);if(!G)throw Error("User ID required to create organization");let Y=await X.boundAuth.organization.create({name:Z.name,slug:Z.slug,metadata:Z.description?{description:Z.description}:void 0,userId:G});if(!Y)throw Error("Failed to create organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as EJ}from"zod";var zi0;var JX8=B(()=>{X1();zi0=e({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:EJ.object({userId:EJ.string().optional()}),outputSchema:EJ.object({organizations:EJ.array(EJ.object({id:EJ.string(),name:EJ.string(),slug:EJ.string(),logo:EJ.string().nullable().optional(),metadata:EJ.any().optional(),createdAt:EJ.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=C1(X),Y=Z.userId||G;if(!Y)throw Error("User ID required to list organizations");return{organizations:(await X.boundAuth.organization.list(Y)).map(($)=>({...$,createdAt:$.createdAt instanceof Date?$.createdAt.toISOString():$.createdAt}))}}})});import{z as u3}from"zod";var ji0;var WX8=B(()=>{X1();ji0=e({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:u3.object({}),outputSchema:u3.object({id:u3.string(),name:u3.string(),slug:u3.string(),logo:u3.string().nullable().optional(),metadata:u3.any().optional(),createdAt:u3.string().datetime().describe("ISO 8601 timestamp"),members:u3.array(u3.any()).optional(),invitations:u3.array(u3.any()).optional()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.boundAuth.organization.get(G);if(!Y)throw Error("No active organization found");let Q=new Date,$=Y.invitations?.filter((J)=>new Date(J.expiresAt)>Q);return{...Y,invitations:$,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as LJ}from"zod";var Ai0;var KX8=B(()=>{X1();Ai0=e({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:LJ.object({id:LJ.string(),name:LJ.string().min(1).max(255).optional(),description:LJ.string().optional()}),outputSchema:LJ.object({id:LJ.string(),name:LJ.string(),slug:LJ.string(),logo:LJ.string().nullable().optional(),metadata:LJ.any().optional(),createdAt:LJ.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{L0(X),await X.access.check();let G={};if(Z.name)G.name=Z.name;if(Z.description)G.metadata={description:Z.description};let Y=await X.boundAuth.organization.update({organizationId:Z.id,data:G});if(!Y)throw Error("Failed to update organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as _n}from"zod";var Pi0;var NX8=B(()=>{X1();Pi0=e({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_n.object({id:_n.string()}),outputSchema:_n.object({success:_n.boolean(),id:_n.string()}),handler:async(Z,X)=>{return L0(X),await X.access.check(),await X.boundAuth.organization.update({organizationId:Z.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:Z.id}}})});import{z as h8}from"zod";var yn,gn,c_,FX8,pH0,hn,un,gw;var OF=B(()=>{yn=h8.object({title:h8.string(),url:h8.string(),icon:h8.string()}),gn=h8.object({registries:h8.record(h8.string(),h8.object({enabled:h8.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:h8.array(h8.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),c_=h8.object({keyId:h8.string(),modelId:h8.string(),title:h8.string().optional()}).nullable(),FX8=h8.enum(["fast","smart","thinking","image","web_search","deep_research"]),pH0=h8.enum(["fast","smart","thinking"]),hn=h8.object({tiers:h8.object({fast:c_,smart:c_,thinking:c_,image:c_,web_search:c_,deep_research:c_})}),un=h8.object({ids:h8.array(h8.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),gw=h8.object({id:h8.string().describe("Brand context ID"),name:h8.string().describe("Company name"),domain:h8.string().describe("Company domain (e.g. example.com)"),overview:h8.string().describe("Company overview / description"),logo:h8.string().nullable().optional().describe("Logo URL"),favicon:h8.string().nullable().optional().describe("Favicon URL"),ogImage:h8.string().nullable().optional().describe("OG image URL"),fonts:h8.object({heading:h8.string().optional().describe("Font family for headings"),body:h8.string().optional().describe("Font family for body text"),code:h8.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:h8.object({primary:h8.string().optional().describe("Primary brand color (hex)"),secondary:h8.string().optional().describe("Secondary brand color (hex)"),accent:h8.string().optional().describe("Accent / highlight color (hex)"),background:h8.string().optional().describe("Background color (hex)"),foreground:h8.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:h8.array(h8.record(h8.string(),h8.unknown())).nullable().optional().describe("Brand images"),metadata:h8.record(h8.string(),h8.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:h8.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:h8.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as BF}from"zod";var Ti0;var UX8=B(()=>{X1();OF();Ti0=e({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:BF.object({}),outputSchema:BF.object({organizationId:BF.string(),sidebar_items:BF.array(yn).nullable().optional(),enabled_plugins:BF.array(BF.string()).nullable().optional(),registry_config:gn.nullable().optional(),simple_mode:hn.nullable().optional(),default_home_agents:un.nullable().optional(),reports_only:BF.boolean().nullable().optional(),createdAt:BF.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:BF.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.organizationSettings.get(G);if(!Y)return{organizationId:G};return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as CY}from"zod";var Ri0;var HX8=B(()=>{X1();OF();Ri0=e({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:CY.object({organizationId:CY.string(),sidebar_items:CY.array(yn).optional(),enabled_plugins:CY.array(CY.string()).optional(),registry_config:gn.optional(),simple_mode:hn.optional(),default_home_agents:un.optional(),reports_only:CY.boolean().optional()}),outputSchema:CY.object({organizationId:CY.string(),sidebar_items:CY.array(yn).nullable().optional(),enabled_plugins:CY.array(CY.string()).nullable().optional(),registry_config:gn.nullable().optional(),simple_mode:hn.nullable().optional(),default_home_agents:un.nullable().optional(),reports_only:CY.boolean().nullable().optional(),createdAt:CY.string().datetime().describe("ISO 8601 timestamp"),updatedAt:CY.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{if(L0(X),await X.access.check(),w0(X).id!==Z.organizationId)throw Error("Cannot update settings for a different organization");let Y=await X.storage.organizationSettings.upsert(Z.organizationId,{sidebar_items:Z.sidebar_items,enabled_plugins:Z.enabled_plugins,registry_config:Z.registry_config,simple_mode:Z.simple_mode,default_home_agents:Z.default_home_agents,reports_only:Z.reports_only});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as zJ}from"zod";var wX8,Ii0,qi0;var OX8=B(()=>{X1();OF();wX8=gw.extend({organizationId:zJ.string(),archivedAt:zJ.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:zJ.string().describe("ISO 8601 timestamp"),updatedAt:zJ.string().describe("ISO 8601 timestamp")}),Ii0=e({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:zJ.object({includeArchived:zJ.boolean().optional().describe("Include archived brands in the list")}),outputSchema:zJ.object({items:zJ.array(wX8)}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await X.storage.brandContext.list(G,{includeArchived:Z.includeArchived})).map((Q)=>({...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}))}}}),qi0=e({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:zJ.object({id:zJ.string().describe("Brand context ID")}),outputSchema:wX8.extend({organizationId:zJ.string()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.brandContext.get(Z.id,G);if(!Y)throw Error("Brand context not found");return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as OV}from"zod";var BX8,Mi0,ki0,Si0;var DX8=B(()=>{X1();OF();BX8=gw.extend({organizationId:OV.string(),createdAt:OV.string().describe("ISO 8601 timestamp"),updatedAt:OV.string().describe("ISO 8601 timestamp")}),Mi0=e({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:gw.omit({id:!0}),outputSchema:BX8,handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.brandContext.create(G,{name:Z.name,domain:Z.domain,overview:Z.overview,logo:Z.logo??null,favicon:Z.favicon??null,ogImage:Z.ogImage??null,fonts:Z.fonts??null,colors:Z.colors??null,images:Z.images??null,metadata:Z.metadata??null});return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}}),ki0=e({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gw.partial().required({id:!0}),outputSchema:BX8,handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await X.storage.brandContext.get(Z.id,G))throw Error("Brand context not found");let{id:Q,...$}=Z;if($.isDefault===!0)await X.storage.brandContext.setDefault(Q,G);let J=await X.storage.brandContext.update(Q,G,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo!==void 0?$.logo??null:void 0,favicon:$.favicon!==void 0?$.favicon??null:void 0,ogImage:$.ogImage!==void 0?$.ogImage??null:void 0,fonts:$.fonts!==void 0?$.fonts??null:void 0,colors:$.colors!==void 0?$.colors??null:void 0,images:$.images!==void 0?$.images??null:void 0,metadata:$.metadata!==void 0?$.metadata??null:void 0,archivedAt:$.archivedAt!==void 0?$.archivedAt??null:void 0,isDefault:$.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),Si0=e({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:OV.object({id:OV.string().describe("Brand context ID")}),outputSchema:OV.object({success:OV.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await X.storage.brandContext.get(Z.id,G))throw Error("Brand context not found");return await X.storage.brandContext.update(Z.id,G,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function tH0(Z,X,G){let Y=Z.trim();if(!Y.startsWith("http"))Y=`https://${Y}`;let Q=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:JSON.stringify({url:Y,formats:["branding"]})});if(!Q.ok){let H=await Q.text().catch(()=>"");throw Error(`Firecrawl API error: ${Q.status} ${H.slice(0,200)}`)}let $=await Q.json();if(!$.success||!$.data?.branding)return null;let J=$.data.branding,W=$.data.metadata??{},K=mY6(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((H)=>H.trim()).filter(Boolean)?.slice().sort((H,w)=>H.length-w.length)[0]??W.ogSiteName??G??Z,domain:Z,overview:W.description??"",logo:K.logo,favicon:K.favicon,ogImage:K.ogImage,fonts:K.fonts,colors:K.colors,images:null,metadata:Object.keys(K.metadata).length>0?K.metadata:null}}function mY6(Z,X){let G=Z.images??{},Y=Z.colors??{},Q={};for(let[F,U]of Object.entries(Y))if(typeof U==="string"&&U&&lY6.has(F))Q[F]=U;let $={},W=(Z.typography??{}).fontFamilies??{};for(let[F,U]of Object.entries(W))if(typeof U==="string"&&U){let H=dY6[F.toLowerCase()];if(H&&!$[H])$[H]=U}let K=Z.fonts;if(Array.isArray(K))for(let F of K){let U=F.family;if(typeof U==="string"&&U&&!$.body)$.body=U}let N={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if(Z[F]!==void 0)N[F]=Z[F];return{logo:G.logo??null,favicon:G.favicon??null,ogImage:G.ogImage??X.ogImage??null,fonts:Object.keys($).length>0?$:null,colors:Object.keys(Q).length>0?Q:null,metadata:N}}var lY6,dY6;var Vi0=B(()=>{lY6=new Set(["primary","secondary","accent","background","foreground"]),dY6={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as rH0}from"zod";var iY6,Ci0;var EX8=B(()=>{X1();Vi0();OF();iY6=gw.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:rH0.boolean()}),Ci0=e({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:rH0.object({domain:rH0.string().describe("Website domain to extract brand from"),brandId:rH0.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:iY6,modelSummary:(Z)=>Z.success?`Brand saved (id=${Z.id}, name=${Z.name}, domain=${Z.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=X.firecrawlApiKey;if(!Y)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Q=await tH0(Z.domain,Y,Z.domain);if(!Q)throw Error("Firecrawl did not return branding data for this URL");let $={name:Q.name,domain:Q.domain,overview:Q.overview,logo:Q.logo,favicon:Q.favicon,ogImage:Q.ogImage,fonts:Q.fonts,colors:Q.colors,images:Q.images,metadata:Q.metadata},J=Z.brandId?await(async()=>{if(!await X.storage.brandContext.get(Z.brandId,G))throw Error("Brand context not found");return X.storage.brandContext.update(Z.brandId,G,$)})():await X.storage.brandContext.create(G,$);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function LX8(Z){let X=Z.metadata??{};return{id:Z.id,name:Z.name,domain:Z.domain||void 0,colors:Z.colors??void 0,fonts:Z.fonts??void 0,assets:Z.logo||Z.favicon||Z.ogImage?{logo:Z.logo??void 0,favicon:Z.favicon??void 0,ogImage:Z.ogImage??void 0}:void 0,overview:Z.overview||void 0,tagline:typeof X.tagline==="string"?X.tagline:void 0,tone:typeof X.tone==="string"?X.tone:void 0,metadata:(()=>{let G=Object.fromEntries(Object.entries(X).filter(([Y])=>Y!=="tagline"&&Y!=="tone"));return Object.keys(G).length>0?G:void 0})()}}var fi0,bi0;var zX8=B(()=>{Rl0();X1();fi0=e({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:GZ0,outputSchema:oi,handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=Z.id?await X.storage.brandContext.get(Z.id,G):await X.storage.brandContext.getDefault(G);if(!Y)throw Error(Z.id?"Brand not found":"No default brand configured");return LX8(Y)}}),bi0=e({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:YZ0,outputSchema:QZ0,handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await X.storage.brandContext.list(G)).map(LX8)}}})});import{resolveTxt as nY6}from"dns/promises";function vi0(Z){return`${pY6}.${Z.toLowerCase()}`}function jX8(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function AX8(Z,X,G=nY6){if(!X)return!1;try{return(await G(vi0(Z))).some((Q)=>Q.join("").trim()===X)}catch{return!1}}var pY6="_deco-verify";var PX8=()=>{};import{z as j9}from"zod";function hw(Z){let X=Z.verificationStatus==="pending"&&Boolean(Z.verificationToken);return{id:Z.id,domain:Z.domain,joinMode:Z.joinMode,verificationStatus:Z.verificationStatus,verificationMethod:Z.verificationMethod,verifiedAt:Z.verifiedAt?new Date(Z.verifiedAt).toISOString():null,recordName:X?vi0(Z.domain):null,recordValue:X?Z.verificationToken:null}}function rY6(Z){let X=Z.toLowerCase().trim();if(!tY6.test(X))throw Error(`Invalid domain format: "${X}". Must be a valid domain like "acme.com"`);if(jJ.has(X))throw Error(`Cannot claim generic email domain "${X}". Only corporate domains are allowed.`);return X}var tY6,xi0,oH0,_i0,yi0,gi0,hi0,ui0;var TX8=B(()=>{kQ();PX8();X1();tY6=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,xi0=j9.enum(["off","auto","request"]),oH0=j9.object({id:j9.string(),domain:j9.string(),joinMode:xi0,verificationStatus:j9.enum(["pending","verified"]),verificationMethod:j9.enum(["email","dns"]).nullable(),verifiedAt:j9.string().nullable(),recordName:j9.string().nullable(),recordValue:j9.string().nullable()});_i0=e({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({}),outputSchema:j9.object({domains:j9.array(oH0)}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X);return{domains:(await X.storage.organizationDomains.listByOrganizationId(G.id)).map(hw)}}}),yi0=e({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({domain:j9.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:xi0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:oH0,handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=rY6(Z.domain),$=X.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(X.auth.user?.emailVerified)&&$===Y,W=await X.storage.organizationDomains.getByOrgAndDomain(G.id,Y);if(W){if(W.verificationStatus!=="verified"&&J){let N=await X.storage.organizationDomains.markVerified(W.id,"email");return hw(N)}return hw(W)}let K=J?await X.storage.organizationDomains.add(G.id,Y,{joinMode:Z.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await X.storage.organizationDomains.add(G.id,Y,{joinMode:"off",verificationStatus:"pending",verificationToken:jX8()});return hw(K)}}),gi0=e({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({id:j9.string(),joinMode:xi0}),outputSchema:oH0,handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");if(Z.joinMode!=="off"&&Y.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Q=await X.storage.organizationDomains.updateJoinMode(Z.id,Z.joinMode);return hw(Q)}}),hi0=e({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:j9.object({id:j9.string()}),outputSchema:j9.object({verified:j9.boolean(),domain:oH0}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");if(Y.verificationStatus==="verified")return{verified:!0,domain:hw(Y)};if(!Y.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await AX8(Y.domain,Y.verificationToken))return{verified:!1,domain:hw(Y)};let $=await X.storage.organizationDomains.markVerified(Z.id,"dns");return{verified:!0,domain:hw($)}}}),ui0=e({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({id:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");return await X.storage.organizationDomains.removeById(Z.id),{success:!0}}})});function uw(Z){return(Z instanceof Error?Z.message.toLowerCase():"").includes("already a member")}import{z as BZ}from"zod";var oY6,ci0,li0,di0;var RX8=B(()=>{X1();I5();oY6=BZ.object({id:BZ.string(),userId:BZ.string(),status:BZ.enum(["pending","approved","denied"]),createdAt:BZ.string(),user:BZ.object({id:BZ.string(),name:BZ.string(),email:BZ.string(),image:BZ.string().nullable()}).nullable()}),ci0=e({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:BZ.object({}),outputSchema:BZ.object({requests:BZ.array(oY6)}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X);return{requests:(await X.storage.organizationJoinRequests.listPendingWithUser(G.id)).map((Q)=>({id:Q.id,userId:Q.userId,status:Q.status,createdAt:new Date(Q.createdAt).toISOString(),user:Q.user}))}}}),li0=e({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:BZ.object({requestId:BZ.string()}),outputSchema:BZ.object({success:BZ.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationJoinRequests.getById(Z.requestId);if(!Y||Y.organizationId!==G.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let Q=C1(X);if(!await X.storage.organizationJoinRequests.decide(Y.id,"approved",Q??Y.userId))return{success:!0};try{await X.boundAuth.organization.addMember({organizationId:G.id,userId:Y.userId,role:["user"]})}catch(J){if(!uw(J))throw J}if(Q)i1.capture({distinctId:Q,event:"organization_join_request_approved",groups:{organization:G.id},properties:{organization_id:G.id,user_id:Y.userId}});return{success:!0}}}),di0=e({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:BZ.object({requestId:BZ.string()}),outputSchema:BZ.object({success:BZ.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationJoinRequests.getById(Z.requestId);if(!Y||Y.organizationId!==G.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let Q=C1(X);if(await X.storage.organizationJoinRequests.decide(Y.id,"denied",Q??Y.userId)&&Q)i1.capture({distinctId:Q,event:"organization_join_request_denied",groups:{organization:G.id},properties:{organization_id:G.id,user_id:Y.userId}});return{success:!0}}})});import{z as fY}from"zod";var mi0;var IX8=B(()=>{I5();X1();A3();mi0=e({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:fY.object({organizationId:fY.string().optional(),userId:fY.string(),role:fY.array(fY.string())}),outputSchema:fY.object({id:fY.string(),organizationId:fY.string(),userId:fY.string(),role:fY.union([fY.string(),fY.array(fY.string())]),createdAt:fY.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==X.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=await X.db.selectFrom("member").select(["role"]).where("userId","=",C1(X)??"").where("organizationId","=",G).executeTakeFirst();if(!o60(Y?.role,Z.role))throw Error(`Insufficient privileges to assign role "${Z.role.join(",")}"`);let Q=await X.boundAuth.organization.addMember({organizationId:G,userId:Z.userId,role:Z.role});if(!Q)throw Error("Failed to add member");let $=C1(X);if($)i1.capture({distinctId:$,event:"organization_member_added",groups:{organization:G},properties:{organization_id:G,added_user_id:Z.userId,role:Z.role}});return{...Q,role:Q.role,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as l_}from"zod";var ii0;var qX8=B(()=>{I5();X1();ii0=e({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:l_.object({organizationId:l_.string().optional(),memberIdOrEmail:l_.string()}),outputSchema:l_.object({success:l_.boolean(),memberIdOrEmail:l_.string()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==X.organization?.id)throw Error("Organization ID does not match authenticated organization");await X.boundAuth.organization.removeMember({organizationId:G,memberIdOrEmail:Z.memberIdOrEmail});let Y=C1(X);if(Y)i1.capture({distinctId:Y,event:"organization_member_removed",groups:{organization:G},properties:{organization_id:G,member_id_or_email:Z.memberIdOrEmail}});return{success:!0,memberIdOrEmail:Z.memberIdOrEmail}}})});import{z as ZG}from"zod";var ni0;var MX8=B(()=>{X1();ni0=e({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZG.object({limit:ZG.number().optional(),offset:ZG.number().optional()}),outputSchema:ZG.object({members:ZG.array(ZG.object({id:ZG.string(),organizationId:ZG.string(),userId:ZG.string(),role:ZG.string(),createdAt:ZG.string().datetime().describe("ISO 8601 timestamp"),user:ZG.object({id:ZG.string(),name:ZG.string(),email:ZG.string(),image:ZG.string().optional()}).optional()}))}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.boundAuth.organization.listMembers({organizationId:G,limit:Z.limit,offset:Z.offset});return{members:(Array.isArray(Y)?Y:[]).map(($)=>({...$,createdAt:$.createdAt instanceof Date?$.createdAt.toISOString():$.createdAt}))}}})});import{z as b7}from"zod";var pi0;var kX8=B(()=>{I5();X1();A3();pi0=e({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:b7.object({organizationId:b7.string().optional(),memberId:b7.string(),role:b7.array(b7.string())}),outputSchema:b7.object({id:b7.string(),organizationId:b7.string(),userId:b7.string(),role:b7.union([b7.string(),b7.array(b7.string())]),createdAt:b7.string().datetime().describe("ISO 8601 timestamp"),user:b7.object({email:b7.string(),name:b7.string(),image:b7.string().optional()})}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.db.selectFrom("member").select(["role"]).where("userId","=",C1(X)??"").where("organizationId","=",G).executeTakeFirst();if(!o60(Y?.role,Z.role))throw Error(`Insufficient privileges to assign role "${Z.role.join(",")}"`);let Q=await X.boundAuth.organization.updateMemberRole({organizationId:G,memberId:Z.memberId,role:Z.role});if(!Q)throw Error("Failed to update member role");X.invalidateMemberRole?.(Q.userId,G);let $=C1(X);if($)i1.capture({distinctId:$,event:"organization_member_role_updated",groups:{organization:G},properties:{organization_id:G,member_id:Z.memberId,target_user_id:Q.userId,new_role:Array.isArray(Z.role)?Z.role.join(","):Z.role}});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});async function SX8(){if(cn&&Date.now()-cn.fetchedAt<600000)return cn.rate;try{let X=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),G=parseFloat(X.USDBRL?.bid??"");if(Number.isNaN(G)||G<=0)throw Error("Invalid rate");return cn={rate:G,fetchedAt:Date.now()},G}catch{return cn?.rate??5.5}}function VX8(Z,X,G){if(X==="brl")return Math.round(Z/G);return Z}var cn=null;function ti0(Z,X="",G=new URLSearchParams){for(let[Y,Q]of Object.entries(Z)){if(Q===void 0||Q===null)continue;let $=X?`${X}[${Y}]`:Y;if(Array.isArray(Q))Q.forEach((J,W)=>{if(typeof J==="object"&&J!==null)ti0(J,`${$}[${W}]`,G);else G.append(`${$}[${W}]`,String(J))});else if(typeof Q==="object")ti0(Q,$,G);else G.append($,String(Q))}return G}async function cw(Z,X){let G=W1().stripeSecretKey;if(!G)throw new bY(503,"billing is not configured");let Y=X?.params?ti0(X.params).toString():void 0,Q=await fetch(`${aY6}${Z}`,{method:X?.method??(Y?"POST":"GET"),headers:{Authorization:`Bearer ${G}`,...Y&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Y,signal:AbortSignal.timeout(sY6)}),$=await Q.json().catch(()=>({}));if(!Q.ok){let J=$.error?.message??`HTTP ${Q.status}`;throw new bY(Q.status,J)}return $}async function CX8(Z){let X=W1().stripeSeatPriceId;if(!X)throw new bY(503,"billing is not configured");let G=await cw("/checkout/sessions",{params:{mode:"subscription",line_items:[{price:X,quantity:Z.quantity}],success_url:Z.successUrl,cancel_url:Z.cancelUrl,metadata:{orgId:Z.organizationId},subscription_data:{metadata:{orgId:Z.organizationId}}}});if(!G.url)throw new bY(500,"checkout session lacks url");return{url:G.url}}async function ri0(Z){let G=(await cw(`/subscriptions/${encodeURIComponent(Z)}`)).items?.data??[],Y=W1().stripeSeatPriceId,Q=Y?G.find(($)=>$.price?.id===Y):G.length===1?G[0]:void 0;if(!Q)throw new bY(500,"subscription has no seat item");return{itemId:Q.id,quantity:Q.quantity??0}}async function fX8(Z){let{itemId:X}=await ri0(Z.subscriptionId),G=await cw("/invoices/create_preview",{params:{subscription:Z.subscriptionId,subscription_details:{items:[{id:X,quantity:Z.quantity}],proration_behavior:"always_invoice"}}});return{amountDueCents:G.amount_due??0,currency:G.currency??"usd"}}function eY6(Z,X){return Math.round(Z*(1+X/100))}async function bX8(Z){let X=eY6(Z.amountCents,Z.feePercent),G=VX8(Z.amountCents,Z.currency,await SX8()),Y=Z.currency==="brl"?`Studio AI credits (R$ ${(Z.amountCents/100).toFixed(2)})`:`Studio AI credits ($${(Z.amountCents/100).toFixed(2)})`,Q=await cw("/checkout/sessions",{params:{mode:"payment",...Z.customerId&&{customer:Z.customerId},line_items:[{quantity:1,price_data:{currency:Z.currency,unit_amount:X,product_data:{name:Y}}}],success_url:Z.successUrl,cancel_url:Z.cancelUrl,metadata:{kind:"topup",orgId:Z.organizationId,creditCents:G}}});if(!Q.url)throw new bY(500,"checkout session lacks url");return{url:Q.url}}async function vX8(Z){let X=await cw("/billing_portal/sessions",{params:{customer:Z.customerId,return_url:Z.returnUrl}});if(!X.url)throw new bY(500,"portal session lacks url");return{url:X.url}}async function xX8(Z){let{itemId:X}=await ri0(Z.subscriptionId);await cw(`/subscriptions/${encodeURIComponent(Z.subscriptionId)}`,{params:{items:[{id:X,quantity:Z.quantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}})}async function _X8(Z){await cw(`/subscriptions/${encodeURIComponent(Z)}`,{method:"DELETE"})}async function yX8(Z){if(Z.targetQuantity<1)return!1;let{itemId:X,quantity:G}=await ri0(Z.subscriptionId);if(G===Z.targetQuantity)return!1;return await cw(`/subscriptions/${encodeURIComponent(Z.subscriptionId)}`,{params:{items:[{id:X,quantity:Z.targetQuantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}}),!0}var aY6="https://api.stripe.com/v1",bY,sY6=15000;var d_=B(()=>{_8();bY=class bY extends Error{status;constructor(Z,X){super(`Stripe API ${Z}: ${X}`);this.status=Z;this.name="StripeApiError"}}});import{z as DZ}from"zod";var ZQ6,oi0,ai0;var gX8=B(()=>{d_();Sb();X1();Eb();ZQ6=DZ.object({legacy:DZ.boolean(),billingMode:DZ.string(),status:DZ.string(),includedReportUrl:DZ.string().nullable()}),oi0=e({name:"ORGANIZATION_SEATS_GET",description:"Get the organization's billing identity and which members hold paid seats.",annotations:{title:"Get Organization Seats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({}),outputSchema:DZ.object({billing:ZQ6.nullable(),paidSeatUserIds:DZ.array(DZ.string())}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let[Y,Q]=await Promise.all([X.storage.organizationBilling.getBilling(G),X.storage.organizationBilling.listPaidSeatUserIds(G)]);return{billing:Y?{legacy:Y.legacy,billingMode:Y.billingMode,status:Y.status,includedReportUrl:Y.includedReportUrl}:null,paidSeatUserIds:Q}}}),ai0=e({name:"ORGANIZATION_SEATS_SET",description:"Set members' seats (paid/free). Invoiced organizations apply directly; self-serve organizations with an active subscription also charge the prorated difference on the saved card (preview it with ORGANIZATION_SEATS_PREVIEW first).",annotations:{title:"Set Organization Seats",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({seats:DZ.array(DZ.object({userId:DZ.string().min(1),seat:DZ.enum(["paid","free"])})).min(1).max(200)}),outputSchema:DZ.object({applied:DZ.array(DZ.object({userId:DZ.string(),seat:DZ.enum(["paid","free"])})),paidSeatCount:DZ.number(),benefitsSyncQueued:DZ.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let Y=C1(X);if(!Y)throw Error("User ID required");let Q=await X.storage.organizationBilling.getBilling(G);if(!Q||Q.legacy)throw Error("This organization is on the legacy plan \u2014 seats do not apply.");let $=kb(Q)?Q.stripeSubscriptionId:null,J;try{J=await X.storage.organizationBilling.setSeats(G,Z.seats,Y,{markBenefitsPending:rB()})}catch(K){if(K instanceof R00)throw Error(K.message);throw K}if($)try{await xX8({subscriptionId:$,quantity:J.paidSeatCount})}catch(K){let N=K instanceof bY?K.message:"Stripe update failed";throw Error(`Seats saved, but updating the subscription failed: ${N}. Apply again to retry the charge.`)}let W=!1;if(J.benefitsReferenceId)try{await jN(G,J.benefitsReferenceId,"apply"),W=!0}catch(K){console.error("Failed to enqueue benefit sync (sweep covers):",K)}return{applied:J.applied,paidSeatCount:J.paidSeatCount,benefitsSyncQueued:W}}})});import{z as DF}from"zod";var si0,ei0;var hX8=B(()=>{d_();tZ();X1();si0=e({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's seat subscription: creates a Stripe Checkout session for the current paid-seat count and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:DF.object({}),outputSchema:DF.object({url:DF.string(),quantity:DF.number()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id,Y=X.organization?.slug;if(!G||!Y)throw Error("Organization context required");let[Q,$]=await Promise.all([X.storage.organizationBilling.getBilling(G),X.storage.organizationBilling.listPaidSeatUserIds(G)]);if(!Q||Q.legacy)throw Error("This organization is on the legacy plan \u2014 no subscription needed.");if(Q.billingMode!=="self_serve")throw Error("Contract-billed organizations do not use checkout.");if(Q.status==="active")throw Error("This organization already has an active subscription \u2014 seat changes apply directly.");if(Q.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let J=$.length;if(J<1)throw Error("Mark at least one member as a paid seat before subscribing.");let W=`${a7()}/${encodeURIComponent(Y)}/members`,{url:K}=await CX8({organizationId:G,quantity:J,successUrl:`${W}?checkout=success`,cancelUrl:`${W}?checkout=canceled`});return{url:K,quantity:J}}}),ei0=e({name:"ORGANIZATION_SEATS_PREVIEW",description:"Preview what the organization pays now for changing its paid-seat count (Stripe prorated invoice preview). Read-only \u2014 nothing is charged.",annotations:{title:"Preview Seat Change",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:DF.object({quantity:DF.number().int().min(1).max(1000)}),outputSchema:DF.object({amountDueCents:DF.number(),currency:DF.string()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let Y=await X.storage.organizationBilling.getBilling(G);if(!kb(Y))throw Error("Seat previews need an active self-serve subscription.");return await fX8({subscriptionId:Y.stripeSubscriptionId,quantity:Z.quantity})}})});import{z as lw}from"zod";var Zn0,Xn0;var uX8=B(()=>{d_();Sb();tZ();X1();ID();Zn0=e({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:lw.object({}),outputSchema:lw.object({url:lw.string()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X);if(!G.slug)throw Error("Organization context required");let Y=await X.storage.organizationBilling.getBilling(G.id);if(!Y?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");if(Y.legacy||Y.billingMode!=="self_serve")throw Error("This organization's billing is managed by deco \u2014 contact support.");try{return await vX8({customerId:Y.stripeCustomerId,returnUrl:`${a7()}/${encodeURIComponent(G.slug)}/members`})}catch(Q){if(Q instanceof bY)throw Error(Q.message);throw Q}}}),Xn0=e({name:"ORGANIZATION_INCLUDED_REPORT_SET",description:"Choose which site's weekly report re-run the organization's subscription includes (null clears it).",annotations:{title:"Set Included Report Site",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:lw.object({url:lw.string().trim().min(1).max(255).nullable()}),outputSchema:lw.object({includedReportUrl:lw.string().nullable(),benefitsSyncQueued:lw.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=await X.storage.organizationBilling.getBilling(G.id);if(!Y||Y.legacy)throw Error("This organization is on the legacy plan \u2014 included reports do not apply.");let Q=Z.url===null?null:S40(Z.url);if(Z.url!==null&&!Q)throw Error(`"${Z.url}" is not a valid site URL.`);let{updated:$,benefitsReferenceId:J}=await X.storage.organizationBilling.setIncludedReportUrl(G.id,Q,{markBenefitsPending:rB()});if(!$)throw Error("Organization billing row missing.");let W=!1;if(J)try{await jN(G.id,J,"apply"),W=!0}catch(K){console.error("Failed to enqueue benefit sync (sweep covers):",K)}return{includedReportUrl:Q,benefitsSyncQueued:W}}})});import{z as ln}from"zod";function XQ6(Z){return`[CREDITS] Paid report runs need at least $${(cX8/100).toFixed(2)} of AI credit balance \u2014 current balance is $${(Z/100).toFixed(2)}. Top up and try again.`}var cX8=500,Gn0;var lX8=B(()=>{aC0();X1();hW();OH();ID();Gn0=e({name:"ORGANIZATION_REPORT_RUN_PAID",description:"Trigger a paid report run for one of the organization's sites, billed against its AI credits (requires at least $5 of balance; the run's real cost plus markup is debited at completion).",annotations:{title:"Run Paid Report",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:ln.object({url:ln.string().trim().min(1).max(255).optional()}),outputSchema:ln.object({url:ln.string(),started:ln.boolean()}),handler:async(Z,X)=>{L0(X),await X.access.check();let G=w0(X),Y=C1(X);if(!Y)throw Error("User ID required");if(!Lc())throw Error("Reports are not available on this deployment.");let Q;if(Z.url)Q=S40(Z.url);else Q=(await X.storage.organizationBilling.getBilling(G.id))?.includedReportUrl??null;if(!Q)throw Error(Z.url?`"${Z.url}" is not a valid site URL.`:"No site chosen \u2014 pass a url or set the included report site first.");let $=W7().deco;if(!$?.getCreditsBalance)throw Error("AI credit balance is not available on this deployment.");let J=await BW(Y,X.auth.user?.email),{balanceCents:W}=await $.getCreditsBalance(J,G.id);if(!(W>=cX8))throw Error(XQ6(W??0));return await rM1({host:Q,organizationId:G.id}),{url:Q,started:!0}}})});var dX8=B(()=>{$X8();JX8();WX8();KX8();NX8();UX8();HX8();OX8();DX8();EX8();zX8();TX8();RX8();IX8();qX8();MX8();kX8();gX8();hX8();uX8();lX8()});var bQ="super-agent",mX8="task-board.item.updated",iX8="task-board.item.deleted";import{z as l6}from"zod";var dn,BV,YQ6,nX8,m_;var DV=B(()=>{dn=l6.enum(["triage","todo","in_progress","in_review","done"]),BV=l6.enum(["none","low","medium","high","urgent"]),YQ6=l6.object({threadId:l6.string(),virtualMcpId:l6.string().nullable(),status:l6.enum(["in_progress","requires_action","failed","completed","expired"]).nullable(),title:l6.string().nullable(),lastMessage:l6.string().nullable(),hasPreview:l6.boolean(),createdAt:l6.string()}),nX8=l6.object({url:l6.string(),number:l6.number(),repoOwner:l6.string(),repoName:l6.string(),createdAt:l6.string(),title:l6.string().nullable(),body:l6.string().nullable(),state:l6.enum(["open","closed"]).nullable(),draft:l6.boolean().nullable(),merged:l6.boolean().nullable()}),m_=l6.object({id:l6.string(),organizationId:l6.string(),title:l6.string(),description:l6.string().nullable(),status:dn,priority:BV,assigneeId:l6.string().nullable(),assignedBy:l6.string().nullable(),dueDate:l6.string().datetime().nullable(),threads:l6.array(YQ6),createdBy:l6.string(),createdAt:l6.string().datetime(),updatedBy:l6.string(),updatedAt:l6.string().datetime()})});async function aH0(Z,X,G){if(G===bQ)return;let{members:Y}=await Z.boundAuth.organization.listMembers({organizationId:X,filterField:"userId",filterValue:G});if(!Y.some((Q)=>Q.userId===G))throw Error("assigneeId is not a member of the organization")}var Yn0=B(()=>{DV()});async function Qn0(Z,X,G){let Y;try{return await Promise.race([Z.aiProviders.listModels(X,G),new Promise(($,J)=>{Y=setTimeout(()=>J(Error("listModels timeout")),QQ6)})])}finally{if(Y)clearTimeout(Y)}}function $Q6(Z,X){switch(Z){case"fast":return X.chat.fast;case"smart":return X.chat.smart;case"thinking":return X.chat.thinking;case"image":return X.image;case"web_search":return X.webSearch;case"deep_research":return X.deepResearch}}function $n0(Z,X,G){let Y=Z.find((Q)=>Q.modelId===X);return{title:Y?.title??G??X,providerId:Y?.providerId,capabilities:Y?.capabilities,limits:Y?.limits??null}}async function vQ(Z,X){let G=Z.organization?.id;if(!G)throw Error("resolveTier called without an organization");let Q=(await Z.storage.organizationSettings.get(G))?.simple_mode?.tiers?.[X]??null,$=await Z.storage.aiProviderKeys.list({organizationId:G});if(Q&&$.some((F)=>F.id===Q.keyId)){let F=await Qn0(Z,Q.keyId,G).catch(()=>[]);return{credentialId:Q.keyId,modelId:Q.modelId,modelMeta:$n0(F,Q.modelId,Q.title)}}if($.length===0)throw new i_(X);let J={};await Promise.all($.map(async(F)=>{J[F.id]=await Qn0(Z,F.id,G).catch(()=>[])}));let W=$.map((F)=>({id:F.id,providerId:F.providerId,label:F.label,presetId:F.presetId,createdBy:F.createdBy,createdAt:F.createdAt})),K=yM1(W,J),N=$Q6(X,K);if(!N)throw new i_(X);return{credentialId:N.keyId,modelId:N.modelId,modelMeta:$n0(J[N.keyId]??[],N.modelId,N.title)}}async function pX8(Z,X,G){let Y=Z.organization?.id;if(!Y)throw Error("resolveSpecificModel called without an organization");let Q=await Qn0(Z,X,Y).catch(()=>[]);return{credentialId:X,modelId:G,modelMeta:$n0(Q,G)}}async function c3(Z,X){try{return await vQ(Z,X)}catch(G){if(G instanceof i_)return null;return console.warn(`[resolveTier] tier "${X}" resolution failed:`,G),null}}var i_,QQ6=5000;var EV=B(()=>{a4();i_=class i_ extends Error{tier;constructor(Z){super(`No model available for tier "${Z}". Connect a provider or configure the tier in organization settings.`);this.tier=Z;this.name="TierUnavailableError"}}});function sH0(Z){return Z.sandboxProviderKind==="agent-sandbox"&&Z.harnessId==="decopilot"}function tX8(Z){return Z.harnessId==="decopilot"&&(Z.sandboxProviderKind==null||Z.sandboxProviderKind==="agent-sandbox")}function WQ6(Z){return{type:"data-run-status",id:"run-status",data:{stage:Z}}}function rX8(Z){if(!Z||typeof Z!=="object")return!1;return Z.type==="data-run-status"}async function EF(Z,X,G){if(!Z)return;try{await Z.publishRawChunk(X,WQ6(G))}catch{}}var JQ6,mn,JPZ;var nn=B(()=>{JQ6=["waiting-runner","starting-run","gathering-context","preparing-tools","starting-assistant","analyzing-scope"],mn=["gathering-context","preparing-tools","starting-assistant","analyzing-scope"],JPZ=new Set(JQ6)});function eH0(){return crypto.randomUUID()}var Wn0=f((NPZ,sX8)=>{var{defineProperty:Jn0,getOwnPropertyDescriptor:KQ6,getOwnPropertyNames:NQ6}=Object,FQ6=Object.prototype.hasOwnProperty,UQ6=(Z,X)=>{for(var G in X)Jn0(Z,G,{get:X[G],enumerable:!0})},HQ6=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of NQ6(X))if(!FQ6.call(Z,Q)&&Q!==G)Jn0(Z,Q,{get:()=>X[Q],enumerable:!(Y=KQ6(X,Q))||Y.enumerable})}return Z},wQ6=(Z)=>HQ6(Jn0({},"__esModule",{value:!0}),Z),oX8={};UQ6(oX8,{SYMBOL_FOR_REQ_CONTEXT:()=>aX8,getContext:()=>OQ6});sX8.exports=wQ6(oX8);var aX8=Symbol.for("@vercel/request-context");function OQ6(){return globalThis[aX8]?.get?.()??{}}});var pn=f((FPZ,XG8)=>{var{defineProperty:Kn0,getOwnPropertyDescriptor:BQ6,getOwnPropertyNames:DQ6}=Object,EQ6=Object.prototype.hasOwnProperty,LQ6=(Z,X)=>{for(var G in X)Kn0(Z,G,{get:X[G],enumerable:!0})},zQ6=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of DQ6(X))if(!EQ6.call(Z,Q)&&Q!==G)Kn0(Z,Q,{get:()=>X[Q],enumerable:!(Y=BQ6(X,Q))||Y.enumerable})}return Z},jQ6=(Z)=>zQ6(Kn0({},"__esModule",{value:!0}),Z),eX8={};LQ6(eX8,{VercelOidcTokenError:()=>ZG8});XG8.exports=jQ6(eX8);class ZG8 extends Error{constructor(Z,X){super(Z);this.name="VercelOidcTokenError",this.cause=X}toString(){if(this.cause)return`${this.name}: ${this.message}: ${this.cause}`;return`${this.name}: ${this.message}`}}});var $G8=f((UPZ,QG8)=>{var{create:AQ6,defineProperty:Zw0,getOwnPropertyDescriptor:PQ6,getOwnPropertyNames:TQ6,getPrototypeOf:RQ6}=Object,IQ6=Object.prototype.hasOwnProperty,qQ6=(Z,X)=>{for(var G in X)Zw0(Z,G,{get:X[G],enumerable:!0})},GG8=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of TQ6(X))if(!IQ6.call(Z,Q)&&Q!==G)Zw0(Z,Q,{get:()=>X[Q],enumerable:!(Y=PQ6(X,Q))||Y.enumerable})}return Z},Fn0=(Z,X,G)=>(G=Z!=null?AQ6(RQ6(Z)):{},GG8(X||!Z||!Z.__esModule?Zw0(G,"default",{value:Z,enumerable:!0}):G,Z)),MQ6=(Z)=>GG8(Zw0({},"__esModule",{value:!0}),Z),YG8={};qQ6(YG8,{findRootDir:()=>VQ6,getUserDataDir:()=>CQ6});QG8.exports=MQ6(YG8);var tn=Fn0(u0("path")),kQ6=Fn0(u0("fs")),Nn0=Fn0(u0("os")),SQ6=pn();function VQ6(){try{let Z=process.cwd();while(Z!==tn.default.dirname(Z)){let X=tn.default.join(Z,".vercel");if(kQ6.default.existsSync(X))return Z;Z=tn.default.dirname(Z)}}catch(Z){throw new SQ6.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function CQ6(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(Nn0.default.platform()){case"darwin":return tn.default.join(Nn0.default.homedir(),"Library/Application Support");case"linux":return tn.default.join(Nn0.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}});var HG8=f((HPZ,UG8)=>{var{create:fQ6,defineProperty:Xw0,getOwnPropertyDescriptor:bQ6,getOwnPropertyNames:vQ6,getPrototypeOf:xQ6}=Object,_Q6=Object.prototype.hasOwnProperty,yQ6=(Z,X)=>{for(var G in X)Xw0(Z,G,{get:X[G],enumerable:!0})},JG8=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of vQ6(X))if(!_Q6.call(Z,Q)&&Q!==G)Xw0(Z,Q,{get:()=>X[Q],enumerable:!(Y=bQ6(X,Q))||Y.enumerable})}return Z},WG8=(Z,X,G)=>(G=Z!=null?fQ6(xQ6(Z)):{},JG8(X||!Z||!Z.__esModule?Xw0(G,"default",{value:Z,enumerable:!0}):G,Z)),gQ6=(Z)=>JG8(Xw0({},"__esModule",{value:!0}),Z),KG8={};yQ6(KG8,{isValidAccessToken:()=>lQ6,readAuthConfig:()=>uQ6,writeAuthConfig:()=>cQ6});UG8.exports=gQ6(KG8);var rn=WG8(u0("fs")),NG8=WG8(u0("path")),hQ6=on();function FG8(){let Z=(0,hQ6.getVercelDataDir)();if(!Z)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return NG8.join(Z,"auth.json")}function uQ6(){try{let Z=FG8();if(!rn.existsSync(Z))return null;let X=rn.readFileSync(Z,"utf8");if(!X)return null;return JSON.parse(X)}catch(Z){return null}}function cQ6(Z){let X=FG8(),G=NG8.dirname(X);if(!rn.existsSync(G))rn.mkdirSync(G,{mode:504,recursive:!0});rn.writeFileSync(X,JSON.stringify(Z,null,2),{mode:384})}function lQ6(Z,X=0){if(!Z.token)return!1;if(typeof Z.expiresAt!=="number")return!0;let G=Math.floor(Date.now()/1000),Y=X/1000;return Z.expiresAt>=G+Y}});var DG8=f((wPZ,BG8)=>{var{defineProperty:wn0,getOwnPropertyDescriptor:dQ6,getOwnPropertyNames:mQ6}=Object,iQ6=Object.prototype.hasOwnProperty,nQ6=(Z,X)=>{for(var G in X)wn0(Z,G,{get:X[G],enumerable:!0})},pQ6=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of mQ6(X))if(!iQ6.call(Z,Q)&&Q!==G)wn0(Z,Q,{get:()=>X[Q],enumerable:!(Y=dQ6(X,Q))||Y.enumerable})}return Z},tQ6=(Z)=>pQ6(wn0({},"__esModule",{value:!0}),Z),wG8={};nQ6(wG8,{processTokenResponse:()=>eQ6,refreshTokenRequest:()=>sQ6});BG8.exports=tQ6(wG8);var Un0=u0("os"),rQ6="https://vercel.com",oQ6="cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",OG8=`@vercel/oidc node-${process.version} ${(0,Un0.platform)()} (${(0,Un0.arch)()}) ${(0,Un0.hostname)()}`,Hn0=null;async function aQ6(){if(Hn0)return Hn0;let Z=`${rQ6}/.well-known/openid-configuration`,X=await fetch(Z,{headers:{"user-agent":OG8}});if(!X.ok)throw Error("Failed to discover OAuth endpoints");let G=await X.json();if(!G||typeof G.token_endpoint!=="string")throw Error("Invalid OAuth discovery response");let Y=G.token_endpoint;return Hn0=Y,Y}async function sQ6(Z){let X=await aQ6();return await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":OG8},body:new URLSearchParams({client_id:oQ6,grant_type:"refresh_token",...Z})})}async function eQ6(Z){let X=await Z.json();if(!Z.ok){let G=typeof X==="object"&&X&&"error"in X?String(X.error):"Token refresh failed";return[Error(G)]}if(typeof X!=="object"||X===null)return[Error("Invalid token response")];if(typeof X.access_token!=="string")return[Error("Missing access_token in response")];if(X.token_type!=="Bearer")return[Error("Invalid token_type in response")];if(typeof X.expires_in!=="number")return[Error("Missing expires_in in response")];return[null,X]}});var Bn0=f((OPZ,jG8)=>{var{defineProperty:On0,getOwnPropertyDescriptor:Z36,getOwnPropertyNames:X36}=Object,G36=Object.prototype.hasOwnProperty,Y36=(Z,X)=>{for(var G in X)On0(Z,G,{get:X[G],enumerable:!0})},Q36=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of X36(X))if(!G36.call(Z,Q)&&Q!==G)On0(Z,Q,{get:()=>X[Q],enumerable:!(Y=Z36(X,Q))||Y.enumerable})}return Z},$36=(Z)=>Q36(On0({},"__esModule",{value:!0}),Z),EG8={};Y36(EG8,{AccessTokenMissingError:()=>LG8,RefreshAccessTokenFailedError:()=>zG8});jG8.exports=$36(EG8);class LG8 extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login).");this.name="AccessTokenMissingError"}}class zG8 extends Error{constructor(Z){super("Failed to refresh authentication token.",{cause:Z});this.name="RefreshAccessTokenFailedError"}}});var on=f((BPZ,IG8)=>{var{create:J36,defineProperty:Gw0,getOwnPropertyDescriptor:W36,getOwnPropertyNames:K36,getPrototypeOf:N36}=Object,F36=Object.prototype.hasOwnProperty,U36=(Z,X)=>{for(var G in X)Gw0(Z,G,{get:X[G],enumerable:!0})},PG8=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of K36(X))if(!F36.call(Z,Q)&&Q!==G)Gw0(Z,Q,{get:()=>X[Q],enumerable:!(Y=W36(X,Q))||Y.enumerable})}return Z},TG8=(Z,X,G)=>(G=Z!=null?J36(N36(Z)):{},PG8(X||!Z||!Z.__esModule?Gw0(G,"default",{value:Z,enumerable:!0}):G,Z)),H36=(Z)=>PG8(Gw0({},"__esModule",{value:!0}),Z),RG8={};U36(RG8,{assertVercelOidcTokenResponse:()=>Dn0,findProjectInfo:()=>D36,getTokenPayload:()=>z36,getVercelDataDir:()=>w36,getVercelOidcToken:()=>B36,getVercelToken:()=>O36,isExpired:()=>j36,loadToken:()=>L36,saveToken:()=>E36});IG8.exports=H36(RG8);var an=TG8(u0("path")),LV=TG8(u0("fs")),t_=pn(),Yw0=$G8(),n_=HG8(),AG8=DG8(),p_=Bn0();function w36(){let X=(0,Yw0.getUserDataDir)();if(!X)return null;return an.join(X,"com.vercel.cli")}async function O36(Z){let X=(0,n_.readAuthConfig)();if(!X?.token)throw new p_.AccessTokenMissingError;if((0,n_.isValidAccessToken)(X,Z?.expirationBufferMs))return X.token;if(!X.refreshToken)throw(0,n_.writeAuthConfig)({}),new p_.RefreshAccessTokenFailedError("No refresh token available");try{let G=await(0,AG8.refreshTokenRequest)({refresh_token:X.refreshToken}),[Y,Q]=await(0,AG8.processTokenResponse)(G);if(Y||!Q)throw(0,n_.writeAuthConfig)({}),new p_.RefreshAccessTokenFailedError(Y);let $={token:Q.access_token,expiresAt:Math.floor(Date.now()/1000)+Q.expires_in};if(Q.refresh_token)$.refreshToken=Q.refresh_token;return(0,n_.writeAuthConfig)($),$.token}catch(G){if((0,n_.writeAuthConfig)({}),G instanceof p_.AccessTokenMissingError||G instanceof p_.RefreshAccessTokenFailedError)throw G;throw new p_.RefreshAccessTokenFailedError(G)}}async function B36(Z,X,G){let Y=`https://api.vercel.com/v1/projects/${X}/token?source=vercel-oidc-refresh${G?`&teamId=${G}`:""}`,Q=await fetch(Y,{method:"POST",headers:{Authorization:`Bearer ${Z}`}});if(!Q.ok)throw new t_.VercelOidcTokenError(`Failed to refresh OIDC token: ${Q.statusText}`);let $=await Q.json();return Dn0($),$}function Dn0(Z){if(!Z||typeof Z!=="object")throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in Z)||typeof Z.token!=="string")throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function D36(){let Z=(0,Yw0.findRootDir)();if(!Z)throw new t_.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let X=an.join(Z,".vercel","project.json");if(!LV.existsSync(X))throw new t_.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let G=JSON.parse(LV.readFileSync(X,"utf8"));if(typeof G.projectId!=="string"&&typeof G.orgId!=="string")throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:G.projectId,teamId:G.orgId}}function E36(Z,X){let G=(0,Yw0.getUserDataDir)();if(!G)throw new t_.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let Y=an.join(G,"com.vercel.token",`${X}.json`),Q=JSON.stringify(Z);LV.mkdirSync(an.dirname(Y),{mode:504,recursive:!0}),LV.writeFileSync(Y,Q),LV.chmodSync(Y,432);return}function L36(Z){let X=(0,Yw0.getUserDataDir)();if(!X)throw new t_.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let G=an.join(X,"com.vercel.token",`${Z}.json`);if(!LV.existsSync(G))return null;let Y=JSON.parse(LV.readFileSync(G,"utf8"));return Dn0(Y),Y}function z36(Z){let X=Z.split(".");if(X.length!==3)throw new t_.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let G=X[1].replace(/-/g,"+").replace(/_/g,"/"),Y=G.padEnd(G.length+(4-G.length%4)%4,"=");return JSON.parse(Buffer.from(Y,"base64").toString("utf8"))}function j36(Z,X=0){return Z.exp*1000<Date.now()+X}});var SG8=f((DPZ,kG8)=>{var{defineProperty:En0,getOwnPropertyDescriptor:A36,getOwnPropertyNames:P36}=Object,T36=Object.prototype.hasOwnProperty,R36=(Z,X)=>{for(var G in X)En0(Z,G,{get:X[G],enumerable:!0})},I36=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of P36(X))if(!T36.call(Z,Q)&&Q!==G)En0(Z,Q,{get:()=>X[Q],enumerable:!(Y=A36(X,Q))||Y.enumerable})}return Z},q36=(Z)=>I36(En0({},"__esModule",{value:!0}),Z),MG8={};R36(MG8,{refreshToken:()=>M36});kG8.exports=q36(MG8);var qG8=pn(),dw=on();async function M36(Z){let X=Z?.project,G=Z?.team;if(!X&&!G){let Q=(0,dw.findProjectInfo)();X=Q.projectId,G=Q.teamId}else if(!X||!G){let Q=(0,dw.findProjectInfo)();X=X??Q.projectId,G=G??Q.teamId}if(!X)throw new qG8.VercelOidcTokenError("Failed to refresh OIDC token: No project specified. Try re-linking your project with `vc link`");let Y=(0,dw.loadToken)(X);if(!Y||(0,dw.isExpired)((0,dw.getTokenPayload)(Y.token),Z?.expirationBufferMs)){let Q=await(0,dw.getVercelToken)({expirationBufferMs:Z?.expirationBufferMs});if(Y=await(0,dw.getVercelOidcToken)(Q,X,G),!Y)throw new qG8.VercelOidcTokenError("Failed to refresh OIDC token");(0,dw.saveToken)(Y,X)}process.env.VERCEL_OIDC_TOKEN=Y.token;return}});var fG8=f((EPZ,CG8)=>{var{defineProperty:zn0,getOwnPropertyDescriptor:k36,getOwnPropertyNames:S36}=Object,V36=Object.prototype.hasOwnProperty,C36=(Z,X)=>{for(var G in X)zn0(Z,G,{get:X[G],enumerable:!0})},f36=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of S36(X))if(!V36.call(Z,Q)&&Q!==G)zn0(Z,Q,{get:()=>X[Q],enumerable:!(Y=k36(X,Q))||Y.enumerable})}return Z},b36=(Z)=>f36(zn0({},"__esModule",{value:!0}),Z),VG8={};C36(VG8,{getVercelOidcToken:()=>_36,getVercelOidcTokenSync:()=>Ln0});CG8.exports=b36(VG8);var v36=Wn0(),x36=pn();async function _36(Z){let X="",G;try{X=Ln0()}catch(Y){G=Y}try{let[{getTokenPayload:Y,isExpired:Q},{refreshToken:$}]=await Promise.all([await Promise.resolve().then(() => k(on())),await Promise.resolve().then(() => k(SG8()))]);if(!X||Q(Y(X),Z?.expirationBufferMs))await $(Z),X=Ln0()}catch(Y){let Q=G instanceof Error?G.message:"";if(Y instanceof Error)Q=`${Q}
|
|
1218
1218
|
${Y.message}`;if(Q)throw new x36.VercelOidcTokenError(Q);throw Y}return X}function Ln0(){let Z=(0,v36.getContext)().headers?.["x-vercel-oidc-token"]??process.env.VERCEL_OIDC_TOKEN;if(!Z)throw Error("The 'x-vercel-oidc-token' header is missing from the request. Do you have the OIDC option enabled in the Vercel project settings?");return Z}});var An0=f((LPZ,_G8)=>{var{defineProperty:jn0,getOwnPropertyDescriptor:y36,getOwnPropertyNames:g36}=Object,h36=Object.prototype.hasOwnProperty,u36=(Z,X)=>{for(var G in X)jn0(Z,G,{get:X[G],enumerable:!0})},c36=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of g36(X))if(!h36.call(Z,Q)&&Q!==G)jn0(Z,Q,{get:()=>X[Q],enumerable:!(Y=y36(X,Q))||Y.enumerable})}return Z},l36=(Z)=>c36(jn0({},"__esModule",{value:!0}),Z),xG8={};u36(xG8,{AccessTokenMissingError:()=>vG8.AccessTokenMissingError,RefreshAccessTokenFailedError:()=>vG8.RefreshAccessTokenFailedError,getContext:()=>d36.getContext,getVercelOidcToken:()=>bG8.getVercelOidcToken,getVercelOidcTokenSync:()=>bG8.getVercelOidcTokenSync,getVercelToken:()=>m36.getVercelToken});_G8.exports=l36(xG8);var bG8=fG8(),d36=Wn0(),vG8=Bn0(),m36=on()});import{z as LF}from"zod/v4";import{z as tG8}from"zod/v4";import{z as Tn0}from"zod/v4";import{z as LZ}from"zod/v4";import{z as N7}from"zod/v4";import{z as EZ}from"zod/v4";import{z as Qw0}from"zod/v4";import{z as U9}from"zod/v4";import{z as u5}from"zod/v4";import{z as p4}from"zod/v4";import{z as A9}from"zod/v4";import{z as G5}from"zod";import{z as s6}from"zod";async function UY8({response:Z,statusCode:X,defaultMessage:G="Gateway request failed",cause:Y,authMethod:Q}){var $;let J=await t9({value:Z,schema:W$6});if(!J.success){let U=typeof Z==="object"&&Z!==null&&"generationId"in Z?Z.generationId:void 0;return new J$6({message:`Invalid error response format: ${G}`,statusCode:X,response:Z,validationError:J.error,cause:Y,generationId:U})}let W=J.value,K=W.error.type,N=W.error.message,F=($=W.generationId)!=null?$:void 0;switch(K){case"authentication_error":return $w0.createContextualError({apiKeyProvided:Q==="api-key",oidcTokenProvided:Q==="oidc",statusCode:X,cause:Y,generationId:F});case"invalid_request_error":return new t36({message:N,statusCode:X,cause:Y,generationId:F});case"rate_limit_exceeded":return new o36({message:N,statusCode:X,cause:Y,generationId:F});case"model_not_found":{let U=await t9({value:W.error.param,schema:s36});return new e36({message:N,statusCode:X,modelId:U.success?U.value.modelId:void 0,cause:Y,generationId:F})}case"internal_server_error":return new XY8({message:N,statusCode:X,cause:Y,generationId:F});case"failed_dependency":return new G$6({message:N,statusCode:X,cause:Y,generationId:F});case"forbidden":return new Q$6({message:N,statusCode:X,cause:Y,generationId:F});default:return new XY8({message:N,statusCode:X,cause:Y,generationId:F})}}function K$6(Z){if(Z.data!==void 0)return Z.data;if(Z.responseBody!=null)try{return JSON.parse(Z.responseBody)}catch(X){return Z.responseBody}return{}}function DY8(Z){if(!(Z instanceof Error))return!1;let X=Z.code;if(typeof X==="string")return["UND_ERR_HEADERS_TIMEOUT","UND_ERR_BODY_TIMEOUT","UND_ERR_CONNECT_TIMEOUT"].includes(X);return!1}async function vY(Z,X){var G;if(zZ.isInstance(Z))return Z;if(DY8(Z))return BY8.createTimeoutError({originalMessage:Z instanceof Error?Z.message:"Unknown error",cause:Z});if(W4.isInstance(Z)){if(Z.cause&&DY8(Z.cause))return BY8.createTimeoutError({originalMessage:Z.message,cause:Z});return await UY8({response:K$6(Z),statusCode:(G=Z.statusCode)!=null?G:500,defaultMessage:"Gateway request failed",cause:Z,authMethod:X})}return await UY8({response:{},statusCode:500,defaultMessage:Z instanceof Error?`Gateway request failed: ${Z.message}`:"Unknown Gateway error",cause:Z,authMethod:X})}async function oW(Z){let X=await t9({value:Z[kY8],schema:F$6});return X.success?X.value:void 0}function LY8(Z){if(Z.type==="file"&&Z.data instanceof Uint8Array)return{...Z,data:EY(Z.data)};return Z}function k$6(Z){if(Z.type==="file"&&Z.data instanceof Uint8Array)return{...Z,data:EY(Z.data)};return Z}async function i$6(){var Z;return(Z=SY8.getContext().headers)==null?void 0:Z["x-vercel-id"]}function Rn0(Z={}){var X,G;let Y=null,Q=null,$=(X=Z.metadataCacheRefreshMillis)!=null?X:300000,J=0,W=(G=eH(Z.baseURL))!=null?G:"https://ai-gateway.vercel.sh/v3/ai",K=async()=>{try{let z=await t$6(Z);return a6({Authorization:`Bearer ${z.token}`,"ai-gateway-protocol-version":p$6,[kY8]:z.authMethod,...Z.headers},`ai-sdk/gateway/${n$6}`)}catch(z){throw $w0.createContextualError({apiKeyProvided:!1,oidcTokenProvided:!1,statusCode:401,cause:z})}},N=()=>{let z=MW({settingValue:void 0,environmentVariableName:"VERCEL_DEPLOYMENT_ID"}),j=MW({settingValue:void 0,environmentVariableName:"VERCEL_ENV"}),P=MW({settingValue:void 0,environmentVariableName:"VERCEL_REGION"}),A=MW({settingValue:void 0,environmentVariableName:"VERCEL_PROJECT_ID"});return async()=>{let I=await i$6();return{...z&&{"ai-o11y-deployment-id":z},...j&&{"ai-o11y-environment":j},...P&&{"ai-o11y-region":P},...I&&{"ai-o11y-request-id":I},...A&&{"ai-o11y-project-id":A}}}},F=(z)=>{return new L$6(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})},U=async()=>{var z,j,P;let A=(P=(j=(z=Z._internal)==null?void 0:z.currentDate)==null?void 0:j.call(z).getTime())!=null?P:Date.now();if(!Y||A-J>$)J=A,Y=new EY8({baseURL:W,headers:K,fetch:Z.fetch}).getAvailableModels().then((I)=>{return Q=I,I}).catch(async(I)=>{throw await vY(I,await oW(await K()))});return Q?Promise.resolve(Q):Y},H=async()=>{return new EY8({baseURL:W,headers:K,fetch:Z.fetch}).getCredits().catch(async(z)=>{throw await vY(z,await oW(await K()))})},w=async(z)=>{return new O$6({baseURL:W,headers:K,fetch:Z.fetch}).getSpendReport(z).catch(async(j)=>{throw await vY(j,await oW(await K()))})},O=async(z)=>{return new D$6({baseURL:W,headers:K,fetch:Z.fetch}).getGenerationInfo(z).catch(async(j)=>{throw await vY(j,await oW(await K()))})},D=function(z){if(new.target)throw Error("The Gateway Provider model function cannot be called with the new keyword.");return F(z)};D.specificationVersion="v3",D.getAvailableModels=U,D.getCredits=H,D.getSpendReport=w,D.getGenerationInfo=O,D.imageModel=(z)=>{return new P$6(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})},D.languageModel=F;let E=(z)=>{return new z$6(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})};D.embeddingModel=E,D.textEmbeddingModel=E,D.videoModel=(z)=>{return new M$6(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})};let L=(z)=>{return new b$6(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})};return D.rerankingModel=L,D.reranking=L,D.chat=D.languageModel,D.embedding=D.embeddingModel,D.image=D.imageModel,D.video=D.videoModel,D.tools=m$6,D}async function t$6(Z){let X=MW({settingValue:Z.apiKey,environmentVariableName:"AI_GATEWAY_API_KEY"});if(X)return{token:X,authMethod:"api-key"};return{token:await VY8.getVercelOidcToken(),authMethod:"oidc"}}var SY8,VY8,i36="vercel.ai.gateway.error",Pn0,yG8,gG8,zZ,zY8="GatewayAuthenticationError",n36,hG8,uG8,cG8,$w0,jY8="GatewayInvalidRequestError",p36,lG8,dG8,mG8,t36,AY8="GatewayRateLimitError",r36,iG8,nG8,pG8,o36,PY8="GatewayModelNotFoundError",a36,rG8,s36,oG8,aG8,e36,TY8="GatewayInternalServerError",Z$6,sG8,eG8,ZY8,XY8,RY8="GatewayFailedDependencyError",X$6,GY8,YY8,QY8,G$6,IY8="GatewayForbiddenError",Y$6,$Y8,JY8,WY8,Q$6,qY8="GatewayResponseError",$$6,KY8,NY8,FY8,J$6,W$6,MY8="GatewayTimeoutError",N$6,HY8,wY8,OY8,BY8,kY8="ai-gateway-auth-method",F$6,U$6,EY8=class{constructor(Z){this.config=Z}async getAvailableModels(){try{let{value:Z}=await jQ({url:`${this.config.baseURL}/config`,headers:await x8(this.config.headers()),successfulResponseHandler:G4(H$6),failedResponseHandler:z9({errorSchema:LZ.any(),errorToMessage:(X)=>X}),fetch:this.config.fetch});return Z}catch(Z){throw await vY(Z)}}async getCredits(){try{let Z=new URL(this.config.baseURL),{value:X}=await jQ({url:`${Z.origin}/v1/credits`,headers:await x8(this.config.headers()),successfulResponseHandler:G4(w$6),failedResponseHandler:z9({errorSchema:LZ.any(),errorToMessage:(G)=>G}),fetch:this.config.fetch});return X}catch(Z){throw await vY(Z)}}},H$6,w$6,O$6=class{constructor(Z){this.config=Z}async getSpendReport(Z){try{let X=new URL(this.config.baseURL),G=new URLSearchParams;if(G.set("start_date",Z.startDate),G.set("end_date",Z.endDate),Z.groupBy)G.set("group_by",Z.groupBy);if(Z.datePart)G.set("date_part",Z.datePart);if(Z.userId)G.set("user_id",Z.userId);if(Z.model)G.set("model",Z.model);if(Z.provider)G.set("provider",Z.provider);if(Z.credentialType)G.set("credential_type",Z.credentialType);if(Z.tags&&Z.tags.length>0)G.set("tags",Z.tags.join(","));let{value:Y}=await jQ({url:`${X.origin}/v1/report?${G.toString()}`,headers:await x8(this.config.headers()),successfulResponseHandler:G4(B$6),failedResponseHandler:z9({errorSchema:N7.any(),errorToMessage:(Q)=>Q}),fetch:this.config.fetch});return Y}catch(X){throw await vY(X)}}},B$6,D$6=class{constructor(Z){this.config=Z}async getGenerationInfo(Z){try{let X=new URL(this.config.baseURL),{value:G}=await jQ({url:`${X.origin}/v1/generation?id=${encodeURIComponent(Z.id)}`,headers:await x8(this.config.headers()),successfulResponseHandler:G4(E$6),failedResponseHandler:z9({errorSchema:EZ.any(),errorToMessage:(Y)=>Y}),fetch:this.config.fetch});return G}catch(X){throw await vY(X)}}},E$6,L$6=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3",this.supportedUrls={"*/*":[/.*/]}}get provider(){return this.config.provider}async getArgs(Z){let{abortSignal:X,...G}=Z;return{args:this.maybeEncodeFileParts(G),warnings:[]}}async doGenerate(Z){let{args:X,warnings:G}=await this.getArgs(Z),{abortSignal:Y}=Z,Q=await x8(this.config.headers());try{let{responseHeaders:$,value:J,rawValue:W}=await w4({url:this.getUrl(),headers:r8(Q,Z.headers,this.getModelConfigHeaders(this.modelId,!1),await x8(this.config.o11yHeaders)),body:X,successfulResponseHandler:G4(Qw0.any()),failedResponseHandler:z9({errorSchema:Qw0.any(),errorToMessage:(K)=>K}),...Y&&{abortSignal:Y},fetch:this.config.fetch});return{...J,request:{body:X},response:{headers:$,body:W},warnings:G}}catch($){throw await vY($,await oW(Q))}}async doStream(Z){let{args:X,warnings:G}=await this.getArgs(Z),{abortSignal:Y}=Z,Q=await x8(this.config.headers());try{let{value:$,responseHeaders:J}=await w4({url:this.getUrl(),headers:r8(Q,Z.headers,this.getModelConfigHeaders(this.modelId,!0),await x8(this.config.o11yHeaders)),body:X,successfulResponseHandler:cX(Qw0.any()),failedResponseHandler:z9({errorSchema:Qw0.any(),errorToMessage:(W)=>W}),...Y&&{abortSignal:Y},fetch:this.config.fetch});return{stream:$.pipeThrough(new TransformStream({start(W){if(G.length>0)W.enqueue({type:"stream-start",warnings:G})},transform(W,K){if(W.success){let N=W.value;if(N.type==="raw"&&!Z.includeRawChunks)return;if(N.type==="response-metadata"&&N.timestamp&&typeof N.timestamp==="string")N.timestamp=new Date(N.timestamp);K.enqueue(N)}else K.error(W.error)}})),request:{body:X},response:{headers:J}}}catch($){throw await vY($,await oW(Q))}}isFilePart(Z){return Z&&typeof Z==="object"&&"type"in Z&&Z.type==="file"}maybeEncodeFileParts(Z){for(let X of Z.prompt)for(let G of X.content)if(this.isFilePart(G)){let Y=G;if(Y.data instanceof Uint8Array){let Q=Uint8Array.from(Y.data),$=Buffer.from(Q).toString("base64");Y.data=new URL(`data:${Y.mediaType||"application/octet-stream"};base64,${$}`)}}return Z}getUrl(){return`${this.config.baseURL}/language-model`}getModelConfigHeaders(Z,X){return{"ai-language-model-specification-version":"3","ai-language-model-id":Z,"ai-language-model-streaming":String(X)}}},z$6=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3",this.maxEmbeddingsPerCall=2048,this.supportsParallelCalls=!0}get provider(){return this.config.provider}async doEmbed({values:Z,headers:X,abortSignal:G,providerOptions:Y}){var Q,$;let J=await x8(this.config.headers());try{let{responseHeaders:W,value:K,rawValue:N}=await w4({url:this.getUrl(),headers:r8(J,X!=null?X:{},this.getModelConfigHeaders(),await x8(this.config.o11yHeaders)),body:{values:Z,...Y?{providerOptions:Y}:{}},successfulResponseHandler:G4(A$6),failedResponseHandler:z9({errorSchema:U9.any(),errorToMessage:(F)=>F}),...G&&{abortSignal:G},fetch:this.config.fetch});return{embeddings:K.embeddings,usage:(Q=K.usage)!=null?Q:void 0,providerMetadata:K.providerMetadata,response:{headers:W,body:N},warnings:($=K.warnings)!=null?$:[]}}catch(W){throw await vY(W,await oW(J))}}getUrl(){return`${this.config.baseURL}/embedding-model`}getModelConfigHeaders(){return{"ai-embedding-model-specification-version":"3","ai-model-id":this.modelId}}},j$6,A$6,P$6=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3",this.maxImagesPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:Z,n:X,size:G,aspectRatio:Y,seed:Q,files:$,mask:J,providerOptions:W,headers:K,abortSignal:N}){var F,U,H,w;let O=await x8(this.config.headers());try{let{responseHeaders:D,value:E,rawValue:L}=await w4({url:this.getUrl(),headers:r8(O,K!=null?K:{},this.getModelConfigHeaders(),await x8(this.config.o11yHeaders)),body:{prompt:Z,n:X,...G&&{size:G},...Y&&{aspectRatio:Y},...Q&&{seed:Q},...W&&{providerOptions:W},...$&&{files:$.map((z)=>LY8(z))},...J&&{mask:LY8(J)}},successfulResponseHandler:G4(q$6),failedResponseHandler:z9({errorSchema:u5.any(),errorToMessage:(z)=>z}),...N&&{abortSignal:N},fetch:this.config.fetch});return{images:E.images,warnings:(F=E.warnings)!=null?F:[],providerMetadata:E.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:D},...E.usage!=null&&{usage:{inputTokens:(U=E.usage.inputTokens)!=null?U:void 0,outputTokens:(H=E.usage.outputTokens)!=null?H:void 0,totalTokens:(w=E.usage.totalTokens)!=null?w:void 0}}}}catch(D){throw await vY(D,await oW(O))}}getUrl(){return`${this.config.baseURL}/image-model`}getModelConfigHeaders(){return{"ai-image-model-specification-version":"3","ai-model-id":this.modelId}}},T$6,R$6,I$6,q$6,M$6=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3",this.maxVideosPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:Z,n:X,aspectRatio:G,resolution:Y,duration:Q,fps:$,seed:J,image:W,providerOptions:K,headers:N,abortSignal:F}){var U;let H=await x8(this.config.headers());try{let{responseHeaders:w,value:O}=await w4({url:this.getUrl(),headers:r8(H,N!=null?N:{},this.getModelConfigHeaders(),await x8(this.config.o11yHeaders),{accept:"text/event-stream"}),body:{prompt:Z,n:X,...G&&{aspectRatio:G},...Y&&{resolution:Y},...Q&&{duration:Q},...$&&{fps:$},...J&&{seed:J},...K&&{providerOptions:K},...W&&{image:k$6(W)}},successfulResponseHandler:async({response:D,url:E,requestBodyValues:L})=>{if(D.body==null)throw new W4({message:"SSE response body is empty",url:E,requestBodyValues:L,statusCode:D.status});let j=nN({stream:D.body,schema:f$6}).getReader(),{done:P,value:A}=await j.read();if(j.releaseLock(),P||!A)throw new W4({message:"SSE stream ended without a data event",url:E,requestBodyValues:L,statusCode:D.status});if(!A.success)throw new W4({message:"Failed to parse video SSE event",cause:A.error,url:E,requestBodyValues:L,statusCode:D.status});let I=A.value;if(I.type==="error")throw new W4({message:I.message,statusCode:I.statusCode,url:E,requestBodyValues:L,responseHeaders:Object.fromEntries([...D.headers]),responseBody:JSON.stringify(I),data:{error:{message:I.message,type:I.errorType,param:I.param}}});return{value:{videos:I.videos,warnings:I.warnings,providerMetadata:I.providerMetadata},responseHeaders:Object.fromEntries([...D.headers])}},failedResponseHandler:z9({errorSchema:p4.any(),errorToMessage:(D)=>D}),...F&&{abortSignal:F},fetch:this.config.fetch});return{videos:O.videos,warnings:(U=O.warnings)!=null?U:[],providerMetadata:O.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:w}}}catch(w){throw await vY(w,await oW(H))}}getUrl(){return`${this.config.baseURL}/video-model`}getModelConfigHeaders(){return{"ai-video-model-specification-version":"3","ai-model-id":this.modelId}}},S$6,V$6,C$6,f$6,b$6=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3"}get provider(){return this.config.provider}async doRerank({documents:Z,query:X,topN:G,headers:Y,abortSignal:Q,providerOptions:$}){var J;let W=await x8(this.config.headers());try{let{responseHeaders:K,value:N,rawValue:F}=await w4({url:this.getUrl(),headers:r8(W,Y!=null?Y:{},this.getModelConfigHeaders(),await x8(this.config.o11yHeaders)),body:{documents:Z,query:X,...G!=null?{topN:G}:{},...$?{providerOptions:$}:{}},successfulResponseHandler:G4(x$6),failedResponseHandler:z9({errorSchema:A9.any(),errorToMessage:(U)=>U}),...Q&&{abortSignal:Q},fetch:this.config.fetch});return{ranking:N.ranking,providerMetadata:N.providerMetadata,response:{headers:K,body:F},warnings:(J=N.warnings)!=null?J:[]}}catch(K){throw await vY(K,await oW(W))}}getUrl(){return`${this.config.baseURL}/reranking-model`}getModelConfigHeaders(){return{"ai-reranking-model-specification-version":"3","ai-model-id":this.modelId}}},v$6,x$6,_$6,y$6,g$6,h$6=(Z={})=>g$6(Z),u$6,c$6,l$6,d$6=(Z={})=>l$6(Z),m$6,n$6="3.0.133",p$6="0.0.1",Jw0;var sn=B(()=>{e0();n1();e0();e0();e0();e0();e0();e0();e0();e0();e0();n1();e0();e0();e0();e0();SY8=k(An0(),1),VY8=k(An0(),1),Pn0=Symbol.for(i36),zZ=class Z extends(gG8=Error,yG8=Pn0,gG8){constructor({message:X,statusCode:G=500,cause:Y,generationId:Q,isRetryable:$=G!=null&&(G===408||G===409||G===429||G>=500)}){super(Q?`${X} [${Q}]`:X);this[yG8]=!0,this.statusCode=G,this.cause=Y,this.generationId=Q,this.isRetryable=$}static isInstance(X){return Z.hasMarker(X)}static hasMarker(X){return typeof X==="object"&&X!==null&&Pn0 in X&&X[Pn0]===!0}},n36=`vercel.ai.gateway.error.${zY8}`,hG8=Symbol.for(n36),$w0=class Z extends(cG8=zZ,uG8=hG8,cG8){constructor({message:X="Authentication failed",statusCode:G=401,cause:Y,generationId:Q}={}){super({message:X,statusCode:G,cause:Y,generationId:Q});this[uG8]=!0,this.name=zY8,this.type="authentication_error"}static isInstance(X){return zZ.hasMarker(X)&&hG8 in X}static createContextualError({apiKeyProvided:X,oidcTokenProvided:G,message:Y="Authentication failed",statusCode:Q=401,cause:$,generationId:J}){let W;if(X)W=`AI Gateway authentication failed: Invalid API key.
|
|
1219
1219
|
|
|
1220
1220
|
Create a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys
|
|
@@ -2790,7 +2790,7 @@ NKEYs are sensitive and should be treated as secrets.
|
|
|
2790
2790
|
-----BEGIN USER NKEY SEED-----
|
|
2791
2791
|
${G}
|
|
2792
2792
|
------END USER NKEY SEED------
|
|
2793
|
-
`;return new TextEncoder().encode(Y)}var o41,gC,f95,Tb8,r41="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",v95,l8,c8,G6,Pb8=24,hC,gJ;var Vb8=B(()=>{(function(Z){Z.Operator="operator",Z.Account="account",Z.User="user",Z.Activation="activation",Z.AuthorizationResponse="authorization_response"})(o41||(o41={}));(function(Z){var X=function(g,i){this.hi=g|0,this.lo=i|0},G=function(g){var i,h=new Float64Array(16);if(g)for(i=0;i<g.length;i++)h[i]=g[i];return h},Y=function(){throw Error("no PRNG")},Q=new Uint8Array(16),$=new Uint8Array(32);$[0]=9;var J=G(),W=G([1]),K=G([56129,1]),N=G([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),F=G([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),U=G([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),H=G([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),w=G([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function O(g,i){return g<<i|g>>>32-i}function D(g,i){var h=g[i+3]&255;return h=h<<8|g[i+2]&255,h=h<<8|g[i+1]&255,h<<8|g[i+0]&255}function E(g,i){var h=g[i]<<24|g[i+1]<<16|g[i+2]<<8|g[i+3],a=g[i+4]<<24|g[i+5]<<16|g[i+6]<<8|g[i+7];return new X(h,a)}function L(g,i,h){var a;for(a=0;a<4;a++)g[i+a]=h&255,h>>>=8}function z(g,i,h){g[i]=h.hi>>24&255,g[i+1]=h.hi>>16&255,g[i+2]=h.hi>>8&255,g[i+3]=h.hi&255,g[i+4]=h.lo>>24&255,g[i+5]=h.lo>>16&255,g[i+6]=h.lo>>8&255,g[i+7]=h.lo&255}function j(g,i,h,a,$0){var N0,b0=0;for(N0=0;N0<$0;N0++)b0|=g[i+N0]^h[a+N0];return(1&b0-1>>>8)-1}function P(g,i,h,a){return j(g,i,h,a,16)}function A(g,i,h,a){return j(g,i,h,a,32)}function I(g,i,h,a,$0){var N0=new Uint32Array(16),b0=new Uint32Array(16),d0=new Uint32Array(16),T0=new Uint32Array(4),S0,P0,_0;for(S0=0;S0<4;S0++)b0[5*S0]=D(a,4*S0),b0[1+S0]=D(h,4*S0),b0[6+S0]=D(i,4*S0),b0[11+S0]=D(h,16+4*S0);for(S0=0;S0<16;S0++)d0[S0]=b0[S0];for(S0=0;S0<20;S0++){for(P0=0;P0<4;P0++){for(_0=0;_0<4;_0++)T0[_0]=b0[(5*P0+4*_0)%16];T0[1]^=O(T0[0]+T0[3]|0,7),T0[2]^=O(T0[1]+T0[0]|0,9),T0[3]^=O(T0[2]+T0[1]|0,13),T0[0]^=O(T0[3]+T0[2]|0,18);for(_0=0;_0<4;_0++)N0[4*P0+(P0+_0)%4]=T0[_0]}for(_0=0;_0<16;_0++)b0[_0]=N0[_0]}if($0){for(S0=0;S0<16;S0++)b0[S0]=b0[S0]+d0[S0]|0;for(S0=0;S0<4;S0++)b0[5*S0]=b0[5*S0]-D(a,4*S0)|0,b0[6+S0]=b0[6+S0]-D(i,4*S0)|0;for(S0=0;S0<4;S0++)L(g,4*S0,b0[5*S0]),L(g,16+4*S0,b0[6+S0])}else for(S0=0;S0<16;S0++)L(g,4*S0,b0[S0]+d0[S0]|0)}function S(g,i,h,a){return I(g,i,h,a,!1),0}function M(g,i,h,a){return I(g,i,h,a,!0),0}var C=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function m(g,i,h,a,$0,N0,b0){var d0=new Uint8Array(16),T0=new Uint8Array(64),S0,P0;if(!$0)return 0;for(P0=0;P0<16;P0++)d0[P0]=0;for(P0=0;P0<8;P0++)d0[P0]=N0[P0];while($0>=64){S(T0,d0,b0,C);for(P0=0;P0<64;P0++)g[i+P0]=(h?h[a+P0]:0)^T0[P0];S0=1;for(P0=8;P0<16;P0++)S0=S0+(d0[P0]&255)|0,d0[P0]=S0&255,S0>>>=8;if($0-=64,i+=64,h)a+=64}if($0>0){S(T0,d0,b0,C);for(P0=0;P0<$0;P0++)g[i+P0]=(h?h[a+P0]:0)^T0[P0]}return 0}function v(g,i,h,a,$0){return m(g,i,null,0,h,a,$0)}function _(g,i,h,a,$0){var N0=new Uint8Array(32);return M(N0,a,$0,C),v(g,i,h,a.subarray(16),N0)}function Z0(g,i,h,a,$0,N0,b0){var d0=new Uint8Array(32);return M(d0,N0,b0,C),m(g,i,h,a,$0,N0.subarray(16),d0)}function p(g,i){var h,a=0;for(h=0;h<17;h++)a=a+(g[h]+i[h]|0)|0,g[h]=a&255,a>>>=8}var K0=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function D0(g,i,h,a,$0,N0){var b0,d0,T0,S0,P0=new Uint32Array(17),_0=new Uint32Array(17),a0=new Uint32Array(17),Z1=new Uint32Array(17),N1=new Uint32Array(17);for(T0=0;T0<17;T0++)_0[T0]=a0[T0]=0;for(T0=0;T0<16;T0++)_0[T0]=N0[T0];_0[3]&=15,_0[4]&=252,_0[7]&=15,_0[8]&=252,_0[11]&=15,_0[12]&=252,_0[15]&=15;while($0>0){for(T0=0;T0<17;T0++)Z1[T0]=0;for(T0=0;T0<16&&T0<$0;++T0)Z1[T0]=h[a+T0];Z1[T0]=1,a+=T0,$0-=T0,p(a0,Z1);for(d0=0;d0<17;d0++){P0[d0]=0;for(T0=0;T0<17;T0++)P0[d0]=P0[d0]+a0[T0]*(T0<=d0?_0[d0-T0]:320*_0[d0+17-T0]|0)|0|0}for(d0=0;d0<17;d0++)a0[d0]=P0[d0];S0=0;for(T0=0;T0<16;T0++)S0=S0+a0[T0]|0,a0[T0]=S0&255,S0>>>=8;S0=S0+a0[16]|0,a0[16]=S0&3,S0=5*(S0>>>2)|0;for(T0=0;T0<16;T0++)S0=S0+a0[T0]|0,a0[T0]=S0&255,S0>>>=8;S0=S0+a0[16]|0,a0[16]=S0}for(T0=0;T0<17;T0++)N1[T0]=a0[T0];p(a0,K0),b0=-(a0[16]>>>7)|0;for(T0=0;T0<17;T0++)a0[T0]^=b0&(N1[T0]^a0[T0]);for(T0=0;T0<16;T0++)Z1[T0]=N0[T0+16];Z1[16]=0,p(a0,Z1);for(T0=0;T0<16;T0++)g[i+T0]=a0[T0];return 0}function W0(g,i,h,a,$0,N0){var b0=new Uint8Array(16);return D0(b0,0,h,a,$0,N0),P(g,i,b0,0)}function Q0(g,i,h,a,$0){var N0;if(h<32)return-1;Z0(g,0,i,0,h,a,$0),D0(g,16,g,32,h-32,g);for(N0=0;N0<16;N0++)g[N0]=0;return 0}function s(g,i,h,a,$0){var N0,b0=new Uint8Array(32);if(h<32)return-1;if(_(b0,0,32,a,$0),W0(i,16,i,32,h-32,b0)!==0)return-1;Z0(g,0,i,0,h,a,$0);for(N0=0;N0<32;N0++)g[N0]=0;return 0}function E0(g,i){var h;for(h=0;h<16;h++)g[h]=i[h]|0}function U0(g){var i,h;for(h=0;h<16;h++)g[h]+=65536,i=Math.floor(g[h]/65536),g[(h+1)*(h<15?1:0)]+=i-1+37*(i-1)*(h===15?1:0),g[h]-=i*65536}function x0(g,i,h){var a,$0=~(h-1);for(var N0=0;N0<16;N0++)a=$0&(g[N0]^i[N0]),g[N0]^=a,i[N0]^=a}function c0(g,i){var h,a,$0,N0=G(),b0=G();for(h=0;h<16;h++)b0[h]=i[h];U0(b0),U0(b0),U0(b0);for(a=0;a<2;a++){N0[0]=b0[0]-65517;for(h=1;h<15;h++)N0[h]=b0[h]-65535-(N0[h-1]>>16&1),N0[h-1]&=65535;N0[15]=b0[15]-32767-(N0[14]>>16&1),$0=N0[15]>>16&1,N0[14]&=65535,x0(b0,N0,1-$0)}for(h=0;h<16;h++)g[2*h]=b0[h]&255,g[2*h+1]=b0[h]>>8}function m0(g,i){var h=new Uint8Array(32),a=new Uint8Array(32);return c0(h,g),c0(a,i),A(h,0,a,0)}function i0(g){var i=new Uint8Array(32);return c0(i,g),i[0]&1}function H0(g,i){var h;for(h=0;h<16;h++)g[h]=i[2*h]+(i[2*h+1]<<8);g[15]&=32767}function C0(g,i,h){var a;for(a=0;a<16;a++)g[a]=i[a]+h[a]|0}function I0(g,i,h){var a;for(a=0;a<16;a++)g[a]=i[a]-h[a]|0}function B0(g,i,h){var a,$0,N0=new Float64Array(31);for(a=0;a<31;a++)N0[a]=0;for(a=0;a<16;a++)for($0=0;$0<16;$0++)N0[a+$0]+=i[a]*h[$0];for(a=0;a<15;a++)N0[a]+=38*N0[a+16];for(a=0;a<16;a++)g[a]=N0[a];U0(g),U0(g)}function J0(g,i){B0(g,i,i)}function Y0(g,i){var h=G(),a;for(a=0;a<16;a++)h[a]=i[a];for(a=253;a>=0;a--)if(J0(h,h),a!==2&&a!==4)B0(h,h,i);for(a=0;a<16;a++)g[a]=h[a]}function V0(g,i){var h=G(),a;for(a=0;a<16;a++)h[a]=i[a];for(a=250;a>=0;a--)if(J0(h,h),a!==1)B0(h,h,i);for(a=0;a<16;a++)g[a]=h[a]}function t(g,i,h){var a=new Uint8Array(32),$0=new Float64Array(80),N0,b0,d0=G(),T0=G(),S0=G(),P0=G(),_0=G(),a0=G();for(b0=0;b0<31;b0++)a[b0]=i[b0];a[31]=i[31]&127|64,a[0]&=248,H0($0,h);for(b0=0;b0<16;b0++)T0[b0]=$0[b0],P0[b0]=d0[b0]=S0[b0]=0;d0[0]=P0[0]=1;for(b0=254;b0>=0;--b0)N0=a[b0>>>3]>>>(b0&7)&1,x0(d0,T0,N0),x0(S0,P0,N0),C0(_0,d0,S0),I0(d0,d0,S0),C0(S0,T0,P0),I0(T0,T0,P0),J0(P0,_0),J0(a0,d0),B0(d0,S0,d0),B0(S0,T0,_0),C0(_0,d0,S0),I0(d0,d0,S0),J0(T0,d0),I0(S0,P0,a0),B0(d0,S0,K),C0(d0,d0,P0),B0(S0,S0,d0),B0(d0,P0,a0),B0(P0,T0,$0),J0(T0,_0),x0(d0,T0,N0),x0(S0,P0,N0);for(b0=0;b0<16;b0++)$0[b0+16]=d0[b0],$0[b0+32]=S0[b0],$0[b0+48]=T0[b0],$0[b0+64]=P0[b0];var Z1=$0.subarray(32),N1=$0.subarray(16);return Y0(Z1,Z1),B0(N1,N1,Z1),c0(g,N1),0}function G0(g,i){return t(g,i,$)}function r0(g,i){return Y(i,32),G0(g,i)}function q0(g,i,h){var a=new Uint8Array(32);return t(a,h,i),M(g,Q,a,C)}var l=Q0,d=s;function k0(g,i,h,a,$0,N0){var b0=new Uint8Array(32);return q0(b0,$0,N0),l(g,i,h,a,b0)}function y0(g,i,h,a,$0,N0){var b0=new Uint8Array(32);return q0(b0,$0,N0),d(g,i,h,a,b0)}function O1(){var g=0,i=0,h=0,a=0,$0=65535,N0,b0,d0;for(d0=0;d0<arguments.length;d0++)N0=arguments[d0].lo,b0=arguments[d0].hi,g+=N0&$0,i+=N0>>>16,h+=b0&$0,a+=b0>>>16;return i+=g>>>16,h+=i>>>16,a+=h>>>16,new X(h&$0|a<<16,g&$0|i<<16)}function n0(g,i){return new X(g.hi>>>i,g.lo>>>i|g.hi<<32-i)}function j1(){var g=0,i=0,h;for(h=0;h<arguments.length;h++)g^=arguments[h].lo,i^=arguments[h].hi;return new X(i,g)}function M8(g,i){var h,a,$0=32-i;if(i<32)h=g.hi>>>i|g.lo<<$0,a=g.lo>>>i|g.hi<<$0;else if(i<64)h=g.lo>>>i|g.hi<<$0,a=g.hi>>>i|g.lo<<$0;return new X(h,a)}function L6(g,i,h){var a=g.hi&i.hi^~g.hi&h.hi,$0=g.lo&i.lo^~g.lo&h.lo;return new X(a,$0)}function P5(g,i,h){var a=g.hi&i.hi^g.hi&h.hi^i.hi&h.hi,$0=g.lo&i.lo^g.lo&h.lo^i.lo&h.lo;return new X(a,$0)}function h9(g){return j1(M8(g,28),M8(g,34),M8(g,39))}function X0(g){return j1(M8(g,14),M8(g,18),M8(g,41))}function K1(g){return j1(M8(g,1),M8(g,8),n0(g,7))}function a8(g){return j1(M8(g,19),M8(g,61),n0(g,6))}var s8=[new X(1116352408,3609767458),new X(1899447441,602891725),new X(3049323471,3964484399),new X(3921009573,2173295548),new X(961987163,4081628472),new X(1508970993,3053834265),new X(2453635748,2937671579),new X(2870763221,3664609560),new X(3624381080,2734883394),new X(310598401,1164996542),new X(607225278,1323610764),new X(1426881987,3590304994),new X(1925078388,4068182383),new X(2162078206,991336113),new X(2614888103,633803317),new X(3248222580,3479774868),new X(3835390401,2666613458),new X(4022224774,944711139),new X(264347078,2341262773),new X(604807628,2007800933),new X(770255983,1495990901),new X(1249150122,1856431235),new X(1555081692,3175218132),new X(1996064986,2198950837),new X(2554220882,3999719339),new X(2821834349,766784016),new X(2952996808,2566594879),new X(3210313671,3203337956),new X(3336571891,1034457026),new X(3584528711,2466948901),new X(113926993,3758326383),new X(338241895,168717936),new X(666307205,1188179964),new X(773529912,1546045734),new X(1294757372,1522805485),new X(1396182291,2643833823),new X(1695183700,2343527390),new X(1986661051,1014477480),new X(2177026350,1206759142),new X(2456956037,344077627),new X(2730485921,1290863460),new X(2820302411,3158454273),new X(3259730800,3505952657),new X(3345764771,106217008),new X(3516065817,3606008344),new X(3600352804,1432725776),new X(4094571909,1467031594),new X(275423344,851169720),new X(430227734,3100823752),new X(506948616,1363258195),new X(659060556,3750685593),new X(883997877,3785050280),new X(958139571,3318307427),new X(1322822218,3812723403),new X(1537002063,2003034995),new X(1747873779,3602036899),new X(1955562222,1575990012),new X(2024104815,1125592928),new X(2227730452,2716904306),new X(2361852424,442776044),new X(2428436474,593698344),new X(2756734187,3733110249),new X(3204031479,2999351573),new X(3329325298,3815920427),new X(3391569614,3928383900),new X(3515267271,566280711),new X(3940187606,3454069534),new X(4118630271,4000239992),new X(116418474,1914138554),new X(174292421,2731055270),new X(289380356,3203993006),new X(460393269,320620315),new X(685471733,587496836),new X(852142971,1086792851),new X(1017036298,365543100),new X(1126000580,2618297676),new X(1288033470,3409855158),new X(1501505948,4234509866),new X(1607167915,987167468),new X(1816402316,1246189591)];function AZ(g,i,h){var a=[],$0=[],N0=[],b0=[],d0,T0,S0;for(T0=0;T0<8;T0++)a[T0]=N0[T0]=E(g,8*T0);var P0=0;while(h>=128){for(T0=0;T0<16;T0++)b0[T0]=E(i,8*T0+P0);for(T0=0;T0<80;T0++){for(S0=0;S0<8;S0++)$0[S0]=N0[S0];d0=O1(N0[7],X0(N0[4]),L6(N0[4],N0[5],N0[6]),s8[T0],b0[T0%16]),$0[7]=O1(d0,h9(N0[0]),P5(N0[0],N0[1],N0[2])),$0[3]=O1($0[3],d0);for(S0=0;S0<8;S0++)N0[(S0+1)%8]=$0[S0];if(T0%16===15)for(S0=0;S0<16;S0++)b0[S0]=O1(b0[S0],b0[(S0+9)%16],K1(b0[(S0+1)%16]),a8(b0[(S0+14)%16]))}for(T0=0;T0<8;T0++)N0[T0]=O1(N0[T0],a[T0]),a[T0]=N0[T0];P0+=128,h-=128}for(T0=0;T0<8;T0++)z(g,8*T0,a[T0]);return h}var nG=new Uint8Array([106,9,230,103,243,188,201,8,187,103,174,133,132,202,167,59,60,110,243,114,254,148,248,43,165,79,245,58,95,29,54,241,81,14,82,127,173,230,130,209,155,5,104,140,43,62,108,31,31,131,217,171,251,65,189,107,91,224,205,25,19,126,33,121]);function q4(g,i,h){var a=new Uint8Array(64),$0=new Uint8Array(256),N0,b0=h;for(N0=0;N0<64;N0++)a[N0]=nG[N0];AZ(a,i,h),h%=128;for(N0=0;N0<256;N0++)$0[N0]=0;for(N0=0;N0<h;N0++)$0[N0]=i[b0-h+N0];$0[h]=128,h=256-128*(h<112?1:0),$0[h-9]=0,z($0,h-8,new X(b0/536870912|0,b0<<3)),AZ(a,$0,h);for(N0=0;N0<64;N0++)g[N0]=a[N0];return 0}function C6(g,i){var h=G(),a=G(),$0=G(),N0=G(),b0=G(),d0=G(),T0=G(),S0=G(),P0=G();I0(h,g[1],g[0]),I0(P0,i[1],i[0]),B0(h,h,P0),C0(a,g[0],g[1]),C0(P0,i[0],i[1]),B0(a,a,P0),B0($0,g[3],i[3]),B0($0,$0,F),B0(N0,g[2],i[2]),C0(N0,N0,N0),I0(b0,a,h),I0(d0,N0,$0),C0(T0,N0,$0),C0(S0,a,h),B0(g[0],b0,d0),B0(g[1],S0,T0),B0(g[2],T0,d0),B0(g[3],b0,S0)}function Z9(g,i,h){var a;for(a=0;a<4;a++)x0(g[a],i[a],h)}function T9(g,i){var h=G(),a=G(),$0=G();Y0($0,i[2]),B0(h,i[0],$0),B0(a,i[1],$0),c0(g,a),g[31]^=i0(h)<<7}function QZ(g,i,h){var a,$0;E0(g[0],J),E0(g[1],W),E0(g[2],W),E0(g[3],J);for($0=255;$0>=0;--$0)a=h[$0/8|0]>>($0&7)&1,Z9(g,i,a),C6(i,g),C6(g,g),Z9(g,i,a)}function PZ(g,i){var h=[G(),G(),G(),G()];E0(h[0],U),E0(h[1],H),E0(h[2],W),B0(h[3],U,H),QZ(g,h,i)}function _1(g,i,h){var a=new Uint8Array(64),$0=[G(),G(),G(),G()],N0;if(!h)Y(i,32);q4(a,i,32),a[0]&=248,a[31]&=127,a[31]|=64,PZ($0,a),T9(g,$0);for(N0=0;N0<32;N0++)i[N0+32]=g[N0];return 0}var M4=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function k4(g,i){var h,a,$0,N0;for(a=63;a>=32;--a){h=0;for($0=a-32,N0=a-12;$0<N0;++$0)i[$0]+=h-16*i[a]*M4[$0-(a-32)],h=Math.floor((i[$0]+128)/256),i[$0]-=h*256;i[$0]+=h,i[a]=0}h=0;for($0=0;$0<32;$0++)i[$0]+=h-(i[31]>>4)*M4[$0],h=i[$0]>>8,i[$0]&=255;for($0=0;$0<32;$0++)i[$0]-=h*M4[$0];for(a=0;a<32;a++)i[a+1]+=i[a]>>8,g[a]=i[a]&255}function Y6(g){var i=new Float64Array(64),h;for(h=0;h<64;h++)i[h]=g[h];for(h=0;h<64;h++)g[h]=0;k4(g,i)}function b8(g,i,h,a){var $0=new Uint8Array(64),N0=new Uint8Array(64),b0=new Uint8Array(64),d0,T0,S0=new Float64Array(64),P0=[G(),G(),G(),G()];q4($0,a,32),$0[0]&=248,$0[31]&=127,$0[31]|=64;var _0=h+64;for(d0=0;d0<h;d0++)g[64+d0]=i[d0];for(d0=0;d0<32;d0++)g[32+d0]=$0[32+d0];q4(b0,g.subarray(32),h+32),Y6(b0),PZ(P0,b0),T9(g,P0);for(d0=32;d0<64;d0++)g[d0]=a[d0];q4(N0,g,h+64),Y6(N0);for(d0=0;d0<64;d0++)S0[d0]=0;for(d0=0;d0<32;d0++)S0[d0]=b0[d0];for(d0=0;d0<32;d0++)for(T0=0;T0<32;T0++)S0[d0+T0]+=N0[d0]*$0[T0];return k4(g.subarray(32),S0),_0}function U4(g,i){var h=G(),a=G(),$0=G(),N0=G(),b0=G(),d0=G(),T0=G();if(E0(g[2],W),H0(g[1],i),J0($0,g[1]),B0(N0,$0,N),I0($0,$0,g[2]),C0(N0,g[2],N0),J0(b0,N0),J0(d0,b0),B0(T0,d0,b0),B0(h,T0,$0),B0(h,h,N0),V0(h,h),B0(h,h,$0),B0(h,h,N0),B0(h,h,N0),B0(g[0],h,N0),J0(a,g[0]),B0(a,a,N0),m0(a,$0))B0(g[0],g[0],w);if(J0(a,g[0]),B0(a,a,N0),m0(a,$0))return-1;if(i0(g[0])===i[31]>>7)I0(g[0],J,g[0]);return B0(g[3],g[0],g[1]),0}function AX(g,i,h,a){var $0,N0=new Uint8Array(32),b0=new Uint8Array(64),d0=[G(),G(),G(),G()],T0=[G(),G(),G(),G()];if(h<64)return-1;if(U4(T0,a))return-1;for($0=0;$0<h;$0++)g[$0]=i[$0];for($0=0;$0<32;$0++)g[$0+32]=a[$0];if(q4(b0,g,h),Y6(b0),QZ(d0,T0,b0),PZ(T0,i.subarray(32)),C6(d0,T0),T9(N0,d0),h-=64,A(i,0,N0,0)){for($0=0;$0<h;$0++)g[$0]=0;return-1}for($0=0;$0<h;$0++)g[$0]=i[$0+64];return h}var S8=32,i6=24,e6=32,r4=16,X9=32,V=32,c=32,u=32,R=32,o=i6,v0=e6,l0=r4,J1=64,U1=32,g1=64,v1=32,$4=64;Z.lowlevel={crypto_core_hsalsa20:M,crypto_stream_xor:Z0,crypto_stream:_,crypto_stream_salsa20_xor:m,crypto_stream_salsa20:v,crypto_onetimeauth:D0,crypto_onetimeauth_verify:W0,crypto_verify_16:P,crypto_verify_32:A,crypto_secretbox:Q0,crypto_secretbox_open:s,crypto_scalarmult:t,crypto_scalarmult_base:G0,crypto_box_beforenm:q0,crypto_box_afternm:l,crypto_box:k0,crypto_box_open:y0,crypto_box_keypair:r0,crypto_hash:q4,crypto_sign:b8,crypto_sign_keypair:_1,crypto_sign_open:AX,crypto_secretbox_KEYBYTES:S8,crypto_secretbox_NONCEBYTES:i6,crypto_secretbox_ZEROBYTES:e6,crypto_secretbox_BOXZEROBYTES:r4,crypto_scalarmult_BYTES:X9,crypto_scalarmult_SCALARBYTES:V,crypto_box_PUBLICKEYBYTES:c,crypto_box_SECRETKEYBYTES:u,crypto_box_BEFORENMBYTES:R,crypto_box_NONCEBYTES:o,crypto_box_ZEROBYTES:v0,crypto_box_BOXZEROBYTES:l0,crypto_sign_BYTES:J1,crypto_sign_PUBLICKEYBYTES:U1,crypto_sign_SECRETKEYBYTES:g1,crypto_sign_SEEDBYTES:v1,crypto_hash_BYTES:$4,gf:G,D:N,L:M4,pack25519:c0,unpack25519:H0,M:B0,A:C0,S:J0,Z:I0,pow2523:V0,add:C6,set25519:E0,modL:k4,scalarmult:QZ,scalarbase:PZ};function c1(g,i){if(g.length!==S8)throw Error("bad key size");if(i.length!==i6)throw Error("bad nonce size")}function L8(g,i){if(g.length!==c)throw Error("bad public key size");if(i.length!==u)throw Error("bad secret key size")}function Y8(){for(var g=0;g<arguments.length;g++)if(!(arguments[g]instanceof Uint8Array))throw TypeError("unexpected type, use Uint8Array")}function y8(g){for(var i=0;i<g.length;i++)g[i]=0}Z.randomBytes=function(g){var i=new Uint8Array(g);return Y(i,g),i},Z.secretbox=function(g,i,h){Y8(g,i,h),c1(h,i);var a=new Uint8Array(e6+g.length),$0=new Uint8Array(a.length);for(var N0=0;N0<g.length;N0++)a[N0+e6]=g[N0];return Q0($0,a,a.length,i,h),$0.subarray(r4)},Z.secretbox.open=function(g,i,h){Y8(g,i,h),c1(h,i);var a=new Uint8Array(r4+g.length),$0=new Uint8Array(a.length);for(var N0=0;N0<g.length;N0++)a[N0+r4]=g[N0];if(a.length<32)return null;if(s($0,a,a.length,i,h)!==0)return null;return $0.subarray(e6)},Z.secretbox.keyLength=S8,Z.secretbox.nonceLength=i6,Z.secretbox.overheadLength=r4,Z.scalarMult=function(g,i){if(Y8(g,i),g.length!==V)throw Error("bad n size");if(i.length!==X9)throw Error("bad p size");var h=new Uint8Array(X9);return t(h,g,i),h},Z.scalarMult.base=function(g){if(Y8(g),g.length!==V)throw Error("bad n size");var i=new Uint8Array(X9);return G0(i,g),i},Z.scalarMult.scalarLength=V,Z.scalarMult.groupElementLength=X9,Z.box=function(g,i,h,a){var $0=Z.box.before(h,a);return Z.secretbox(g,i,$0)},Z.box.before=function(g,i){Y8(g,i),L8(g,i);var h=new Uint8Array(R);return q0(h,g,i),h},Z.box.after=Z.secretbox,Z.box.open=function(g,i,h,a){var $0=Z.box.before(h,a);return Z.secretbox.open(g,i,$0)},Z.box.open.after=Z.secretbox.open,Z.box.keyPair=function(){var g=new Uint8Array(c),i=new Uint8Array(u);return r0(g,i),{publicKey:g,secretKey:i}},Z.box.keyPair.fromSecretKey=function(g){if(Y8(g),g.length!==u)throw Error("bad secret key size");var i=new Uint8Array(c);return G0(i,g),{publicKey:i,secretKey:new Uint8Array(g)}},Z.box.publicKeyLength=c,Z.box.secretKeyLength=u,Z.box.sharedKeyLength=R,Z.box.nonceLength=o,Z.box.overheadLength=Z.secretbox.overheadLength,Z.sign=function(g,i){if(Y8(g,i),i.length!==g1)throw Error("bad secret key size");var h=new Uint8Array(J1+g.length);return b8(h,g,g.length,i),h},Z.sign.open=function(g,i){if(Y8(g,i),i.length!==U1)throw Error("bad public key size");var h=new Uint8Array(g.length),a=AX(h,g,g.length,i);if(a<0)return null;var $0=new Uint8Array(a);for(var N0=0;N0<$0.length;N0++)$0[N0]=h[N0];return $0},Z.sign.detached=function(g,i){var h=Z.sign(g,i),a=new Uint8Array(J1);for(var $0=0;$0<a.length;$0++)a[$0]=h[$0];return a},Z.sign.detached.verify=function(g,i,h){if(Y8(g,i,h),i.length!==J1)throw Error("bad signature size");if(h.length!==U1)throw Error("bad public key size");var a=new Uint8Array(J1+g.length),$0=new Uint8Array(J1+g.length),N0;for(N0=0;N0<J1;N0++)a[N0]=i[N0];for(N0=0;N0<g.length;N0++)a[N0+J1]=g[N0];return AX($0,a,a.length,h)>=0},Z.sign.keyPair=function(){var g=new Uint8Array(U1),i=new Uint8Array(g1);return _1(g,i),{publicKey:g,secretKey:i}},Z.sign.keyPair.fromSecretKey=function(g){if(Y8(g),g.length!==g1)throw Error("bad secret key size");var i=new Uint8Array(U1);for(var h=0;h<i.length;h++)i[h]=g[32+h];return{publicKey:i,secretKey:new Uint8Array(g)}},Z.sign.keyPair.fromSeed=function(g){if(Y8(g),g.length!==v1)throw Error("bad seed size");var i=new Uint8Array(U1),h=new Uint8Array(g1);for(var a=0;a<32;a++)h[a]=g[a];return _1(i,h,!0),{publicKey:i,secretKey:h}},Z.sign.publicKeyLength=U1,Z.sign.secretKeyLength=g1,Z.sign.seedLength=v1,Z.sign.signatureLength=J1,Z.hash=function(g){Y8(g);var i=new Uint8Array($4);return q4(i,g,g.length),i},Z.hash.hashLength=$4,Z.verify=function(g,i){if(Y8(g,i),g.length===0||i.length===0)return!1;if(g.length!==i.length)return!1;return j(g,0,i,0,g.length)===0?!0:!1},Z.setPRNG=function(g){Y=g},function(){var g=typeof globalThis<"u"?globalThis.crypto||globalThis.msCrypto:null;if(g&&g.getRandomValues){var i=65536;Z.setPRNG(function(h,a){var $0,N0=new Uint8Array(a);for($0=0;$0<a;$0+=i)g.getRandomValues(N0.subarray($0,$0+Math.min(a-$0,i)));for($0=0;$0<a;$0++)h[$0]=N0[$0];y8(N0)})}else if(g=u0("crypto"),g&&g.randomBytes)Z.setPRNG(function(h,a){var $0,N0=g.randomBytes(a);for($0=0;$0<a;$0++)h[$0]=N0[$0];y8(N0)})}()})(typeof pg<"u"&&IY7?IY7:globalThis.nacl=globalThis.nacl||{});gC=typeof pg<"u"&&IY7?IY7:globalThis.nacl,f95={fromSeed:gC.sign.keyPair.fromSeed,sign:gC.sign.detached,verify:gC.sign.detached.verify,randomBytes:gC.randomBytes,scalarBaseMultiply:gC.scalarMult.base,seal:gC.box,open:gC.box.open};v95=new Uint16Array([0,4129,8258,12387,16516,20645,24774,28903,33032,37161,41290,45419,49548,53677,57806,61935,4657,528,12915,8786,21173,17044,29431,25302,37689,33560,45947,41818,54205,50076,62463,58334,9314,13379,1056,5121,25830,29895,17572,21637,42346,46411,34088,38153,58862,62927,50604,54669,13907,9842,5649,1584,30423,26358,22165,18100,46939,42874,38681,34616,63455,59390,55197,51132,18628,22757,26758,30887,2112,6241,10242,14371,51660,55789,59790,63919,35144,39273,43274,47403,23285,19156,31415,27286,6769,2640,14899,10770,56317,52188,64447,60318,39801,35672,47931,43802,27814,31879,19684,23749,11298,15363,3168,7233,60846,64911,52716,56781,44330,48395,36200,40265,32407,28342,24277,20212,15891,11826,7761,3696,65439,61374,57309,53244,48923,44858,40793,36728,37256,33193,45514,41451,53516,49453,61774,57711,4224,161,12482,8419,20484,16421,28742,24679,33721,37784,41979,46042,49981,54044,58239,62302,689,4752,8947,13010,16949,21012,25207,29270,46570,42443,38312,34185,62830,58703,54572,50445,13538,9411,5280,1153,29798,25671,21540,17413,42971,47098,34713,38840,59231,63358,50973,55100,9939,14066,1681,5808,26199,30326,17941,22068,55628,51565,63758,59695,39368,35305,47498,43435,22596,18533,30726,26663,6336,2273,14466,10403,52093,56156,60223,64286,35833,39896,43963,48026,19061,23124,27191,31254,2801,6864,10931,14994,64814,60687,56684,52557,48554,44427,40424,36297,31782,27655,23652,19525,15522,11395,7392,3265,61215,65342,53085,57212,44955,49082,36825,40952,28183,32310,20053,24180,11923,16050,3793,7920]);l8=class l8 extends Error{name;code;chainedError;constructor(Z,X){super(Z);this.name="NKeysError",this.code=Z,this.chainedError=X}};(function(Z){Z.InvalidPrefixByte="nkeys: invalid prefix byte",Z.InvalidKey="nkeys: invalid key",Z.InvalidPublicKey="nkeys: invalid public key",Z.InvalidSeedLen="nkeys: invalid seed length",Z.InvalidSeed="nkeys: invalid seed",Z.InvalidCurveSeed="nkeys: invalid curve seed",Z.InvalidCurveKey="nkeys: not a valid curve key",Z.InvalidCurveOperation="nkeys: curve key is not valid for sign/verify",Z.InvalidNKeyOperation="keys: only curve key can seal/open",Z.InvalidEncoding="nkeys: invalid encoded key",Z.InvalidRecipient="nkeys: not a valid recipient public curve key",Z.InvalidEncrypted="nkeys: encrypted input is not valid",Z.CannotSign="nkeys: cannot sign, no private key available",Z.PublicKeyOnly="nkeys: no seed or private key available",Z.InvalidChecksum="nkeys: invalid checksum",Z.SerializationError="nkeys: serialization error",Z.ApiError="nkeys: api error",Z.ClearedPair="nkeys: pair is cleared"})(c8||(c8={}));(function(Z){Z[Z.Unknown=-1]="Unknown",Z[Z.Seed=144]="Seed",Z[Z.Private=120]="Private",Z[Z.Operator=112]="Operator",Z[Z.Server=104]="Server",Z[Z.Cluster=16]="Cluster",Z[Z.Account=0]="Account",Z[Z.User=160]="User",Z[Z.Curve=184]="Curve"})(G6||(G6={}));hC=[120,107,118,49];b95(f95);(function(Z){Z.v1="ed25519",Z.v2="ed25519-nkey"})(gJ||(gJ={}))});function X61(Z){try{Z?.clear?.()}catch{}}async function Cb8({accountJwt:Z,accountSigningKey:X,expiresAt:G,permissions:Y,userId:Q,allowedConnectionTypes:$=["WEBSOCKET"]}){let J=kb8(Z),W=e41(J.sub),K=Z61(new TextEncoder().encode(X)),N=Rb8();try{let F=await Mb8(Q,N,W,{pub:{allow:Y.publish.allow},sub:{allow:Y.subscribe.allow},allowed_connection_types:$},{algorithm:gJ.v2,exp:Math.floor(G.getTime()/1000),signer:K});return new TextDecoder().decode(Sb8(F,N))}finally{X61(N),X61(K),X61(W)}}var fb8=B(()=>{Vb8()});function i95(Z){return/^wss?:\/\//i.test(Z.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function bb8(){let Z=new S1;return Z.post("/links/session",async(X)=>{let Y=X.get("studioContext").auth?.user?.id;if(!Y)return X.json({error:"Unauthorized"},401);let Q=W1();if(!Q.natsTunnelPublicEnabled)return X.json(G61(),503);if(!Q.natsPublicUrl)return X.json(G61(),503);if(!Q.natsAccountJwt||!Q.natsAccountSigningKey){if(!Q.localMode)return X.json(G61(),503)}let $=yJ(Y),J;if(Q.natsAccountJwt&&Q.natsAccountSigningKey){let W=new Date(Date.now()+Q.natsTunnelSessionTtlSeconds*1000);J=await Cb8({accountJwt:Q.natsAccountJwt,accountSigningKey:Q.natsAccountSigningKey,expiresAt:W,permissions:zb8($),userId:Y,allowedConnectionTypes:i95(Q.natsPublicUrl)})}return X.json(jb8({publicUrl:Q.natsPublicUrl,userId:Y,ttlSeconds:Q.natsTunnelSessionTtlSeconds,credentials:J}))}),Z}var G61=()=>({error:"link session unavailable"});var vb8=B(()=>{l4();_8();Ab8();fb8()});function p95(Z){return Z.filter((X)=>X.vendors?.alias).map((X)=>({name:X.name,title:X.title,description:X.description,logo:X.logo,category:X.category,vendor:{alias:X.vendors.alias,url:X.vendors.url}}))}async function t95(Z,X){let G=await fetch(`${Z}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:X,Authorization:`Bearer ${X}`,Accept:"application/json"},signal:AbortSignal.timeout(n95)});if(!G.ok){let Y=await G.text().catch(()=>G.statusText);throw console.error(`[deco-apps] Supabase error (${G.status}): ${Y.slice(0,200)}`),Error(`External service error (${G.status})`)}return await G.json()}var n95=1e4,r95=async(Z,X)=>{if(!Z.get("studioContext").auth.user?.id)return Z.json({error:"Unauthorized"},401);return X()},xb8=()=>{let Z=new S1;return Z.use("*",r95),Z.get("/",async(X)=>{let G=W1(),Y=G.decoSupabaseUrl,Q=G.decoSupabaseServiceKey;if(!Y||!Q)return X.json({apps:[]});try{let $=await t95(Y,Q);return X.json({apps:p95($)})}catch($){return console.error("[deco-apps] GET error:",$),X.json({error:"Failed to fetch apps"},502)}}),Z};var _b8=B(()=>{l4();_8()});import{z as h1}from"zod";function SK(Z,X="invalid_request_error",G=null,Y=null){return{error:{message:Z,type:X,param:G,code:Y}}}function $Z5(Z){if(!Z)return null;let X=Z.indexOf(":");if(X===-1)return{credentialId:null,modelId:Z};let G=Z.substring(0,X),Y=Z.substring(X+1);if(!G||!Y)return null;return{credentialId:G,modelId:Y}}function JZ5(Z,X,G){try{return JSON.parse(Z)}catch{throw new hb8(`Invalid JSON in tool call arguments for function '${G}' (tool_call_id: ${X}): ${Z}`)}}function WZ5(Z){let X={};for(let G of Z)if(G.role==="assistant"&&G.tool_calls)for(let Y of G.tool_calls)X[Y.id]=Y.function.name;return Z.map((G)=>{switch(G.role){case"system":return{role:"system",content:G.content};case"user":if(typeof G.content==="string")return{role:"user",content:G.content};return{role:"user",content:G.content.map((Q)=>{if(Q.type==="text")return{type:"text",text:Q.text};return{type:"image",image:Q.image_url.url}})};case"assistant":if(G.tool_calls&&G.tool_calls.length>0)return{role:"assistant",content:G.tool_calls.map((Q)=>({type:"tool-call",toolCallId:Q.id,toolName:Q.function.name,input:JZ5(Q.function.arguments,Q.id,Q.function.name)}))};return{role:"assistant",content:G.content??""};case"tool":let Y=X[G.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:G.tool_call_id,toolName:Y,output:{type:"text",value:G.content}}]}}})}function KZ5(Z){let X=Z.map((G)=>{let Y=G.function.parameters?AQ(G.function.parameters):AQ({type:"object",properties:{}});return[G.function.name,v8({description:G.function.description,inputSchema:Y})]});return Object.fromEntries(X)}function NZ5(Z){if(!Z)return;return{openai:{response_format:Z}}}function FZ5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function yb8(Z,X,G,Y,Q,$){let J={model:Z,messages:X,tools:G,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:$};return Q?{...J,providerOptions:Q}:J}function gb8(Z){if(Z==="tool-calls")return"tool_calls";if(Z==="length")return"length";return"stop"}var o95=256,a95,s95,e95,ZZ5,XZ5,GZ5,YZ5,QZ5,hb8,ub8,cb8;var lb8=B(()=>{N6();l4();ig();a95=h1.object({type:h1.literal("function"),function:h1.object({name:h1.string(),description:h1.string().optional(),parameters:h1.record(h1.string(),h1.unknown()).optional()})}),s95=h1.object({id:h1.string(),type:h1.literal("function"),function:h1.object({name:h1.string(),arguments:h1.string()})}),e95=h1.discriminatedUnion("role",[h1.object({role:h1.literal("system"),content:h1.string(),name:h1.string().optional()}),h1.object({role:h1.literal("user"),content:h1.union([h1.string(),h1.array(h1.union([h1.object({type:h1.literal("text"),text:h1.string()}),h1.object({type:h1.literal("image_url"),image_url:h1.object({url:h1.string(),detail:h1.string().optional()})})]))]),name:h1.string().optional()}),h1.object({role:h1.literal("assistant"),content:h1.string().nullable().optional(),name:h1.string().optional(),tool_calls:h1.array(s95).optional()}),h1.object({role:h1.literal("tool"),content:h1.string(),tool_call_id:h1.string()})]),ZZ5=h1.object({type:h1.literal("text")}),XZ5=h1.object({type:h1.literal("json_object")}),GZ5=h1.object({type:h1.literal("json_schema"),json_schema:h1.object({name:h1.string(),description:h1.string().optional(),schema:h1.record(h1.string(),h1.unknown()),strict:h1.boolean().optional()})}),YZ5=h1.union([ZZ5,XZ5,GZ5]),QZ5=h1.object({model:h1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:h1.array(e95),stream:h1.boolean().optional().default(!1),temperature:h1.number().min(0).max(2).optional(),max_tokens:h1.number().positive().optional(),top_p:h1.number().min(0).max(1).optional(),frequency_penalty:h1.number().min(-2).max(2).optional(),presence_penalty:h1.number().min(-2).max(2).optional(),stop:h1.union([h1.string(),h1.array(h1.string())]).optional(),tools:h1.array(a95).optional(),tool_choice:h1.union([h1.literal("auto"),h1.literal("none"),h1.literal("required"),h1.object({type:h1.literal("function"),function:h1.object({name:h1.string()})})]).optional(),response_format:YZ5.optional(),user:h1.string().optional()});hb8=class hb8 extends Error{constructor(Z){super(Z);this.name="MessageConversionError"}};ub8=new S1;ub8.post("/:org/v1/chat/completions",async(Z)=>{let X=Z.get("studioContext"),G=Z.req.param("org");try{if(!X.auth.apiKey?.id)return Z.json(SK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!X.organization)return Z.json(SK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((X.organization.slug??X.organization.id)!==G)return Z.json(SK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await Z.req.json(),Q=QZ5.safeParse(Y);if(!Q.success){let E=Q.error.issues[0]??{message:"Invalid request",path:[]};return Z.json(SK(`Invalid request: ${E.message}`,"invalid_request_error",E.path.length>0?E.path.join("."):null),400)}let $=Q.data,J=$Z5($.model);if(!J)return Z.json(SK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=await X.storage.aiProviderKeys.list({organizationId:X.organization.id});if(E.length===0)return Z.json(SK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E[0].id}let N;try{N=await X.aiProviders.activate(W,X.organization.id)}catch{return Z.json(SK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=N.aiSdk.languageModel(K),U=WZ5($.messages),H=$.tools?KZ5($.tools):void 0,w=NZ5($.response_format),O=FZ5(),D=Math.floor(Date.now()/1000);if($.stream)return pF(Z,async(E)=>{let L=yb8(F,U,H,$,w,Z.req.raw.signal);try{let z=d3(L),j=!1,P=0,A="",I=async()=>{if(A.length===0)return;let S=A;A="",await E.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await E.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(A+=S.text,A.length>=o95)await I()}else if(S.type==="tool-call"){await I();let M=P++;await E.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await I(),await E.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{},finish_reason:gb8(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await I(),await E.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await E.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let E=yb8(F,U,H,$,w,Z.req.raw.signal),L=await pw(E),z={role:"assistant",content:L.text||null};if(L.toolCalls&&L.toolCalls.length>0)z.tool_calls=L.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return Z.json({id:O,object:"chat.completion",created:D,model:$.model,choices:[{index:0,message:z,finish_reason:gb8(L.finishReason)}],usage:{prompt_tokens:L.usage?.inputTokens??0,completion_tokens:L.usage?.outputTokens??0,total_tokens:L.usage?.totalTokens??0}})}}catch(Y){let Q=Y;if(Q.name==="AbortError")return Z.json(SK("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return Z.json(SK(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),Z.json(SK(Q.message,"server_error"),500)}});cb8=ub8});var mb8;var db8=B(()=>{mb8={name:"decocms",version:"4.126.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^5.9.3",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function wZ5(){let Z=process.env.POSTHOG_KEY;if(!Z)return null;return{key:Z,host:process.env.POSTHOG_HOST??HZ5}}var ib8,HZ5="https://ph.studio.decocms.com",nb8;var pb8=B(()=>{l4();zf0();JO();tZ();_8();G11();db8();ib8=new S1;ib8.get("/",(Z)=>{let X={version:mb8.version,theme:rk1(),...ZD().logo&&{logo:ZD().logo},...t3()&&{internalUrl:Y10()},...W1().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!W1().firecrawlApiKey,auth:Wq8(),posthog:wZ5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!t3()&&W1().sandboxProviderKind==="agent-sandbox"}};return Z.header("Cache-Control","no-store"),Z.json({success:!0,config:X})});nb8=ib8});function tg(Z){let X=(Z??"").trim().toLowerCase();return X=X.replace(/^https?:\/\//,""),X=X.replace(/^www\./,""),X=X.split(/[/?#]/)[0]??"",X.replace(/\/+$/,"")}function Y61(Z){return(tg(Z).split(".")[0]||Z).replace(/[-_]/g," ").split(" ").filter(Boolean).map((G)=>G.charAt(0).toUpperCase()+G.slice(1)).join(" ")}function Q61(Z,X=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(tg(Z))}&sz=${X}`}function tb8(Z,X){let G=Z.trim();if(G.length<=X)return G;let Y=G.slice(0,X-1),Q=Y.lastIndexOf(" ");return`${(Q>X*0.6?Y.slice(0,Q):Y).trimEnd()}\u2026`}function rb8(Z){let{brand:X,domain:G,score:Y,verdict:Q}=Z,$=typeof Y==="number"?`${X} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${X} commerce report \xB7 decocms`,J=`See the full ${X} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Q?.trim()?tb8(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):tb8(`How does ${G} really perform? ${J}`,200);return{title:$,description:W}}import{z as Q1}from"zod";var cC,OZ5,BZ5,DZ5,EZ5,ob8;var ab8=B(()=>{cC=Q1.enum(["good","bad","neutral"]),OZ5=Q1.preprocess((Z)=>{if(Array.isArray(Z))return{kind:"text",value:Z.find((G)=>G!==null&&typeof G!=="object")??""};return Z!==null&&typeof Z==="object"?Z:{kind:"text",value:Z}},Q1.object({kind:Q1.enum(["text","number","sparkline","badge","score"]).catch("text"),value:Q1.coerce.string().optional(),tone:cC.optional(),muted:Q1.boolean().optional(),delta:Q1.coerce.string().optional(),deltaDir:Q1.enum(["up","down","neutral"]).optional(),points:Q1.array(Q1.coerce.number()).optional(),label:Q1.coerce.string().optional()}).transform((Z)=>{if(Z.kind==="badge"&&Z.label==null)Z.label=Z.value??"";if(Z.kind==="score"){let X=Number(Z.value);if(Number.isNaN(X))return{...Z,kind:"text"}}return Z})),BZ5=Q1.preprocess((Z)=>{let X=Z;if(X&&typeof X==="object"&&!Array.isArray(X)&&Array.isArray(X.cells))X=X.cells;if(Array.isArray(X)&&X.length===1&&Array.isArray(X[0]))X=X[0];if(Array.isArray(X))return X;if(X&&typeof X==="object")return Object.values(X);return X},Q1.array(OZ5)),DZ5={key:Q1.coerce.string(),title:Q1.coerce.string(),eyebrow:Q1.coerce.string().optional(),headline:Q1.coerce.string(),annotation:Q1.coerce.string().optional(),methodology:Q1.coerce.string().optional(),sources:Q1.array(Q1.object({name:Q1.coerce.string(),logoUrl:Q1.coerce.string()})).optional()},EZ5=Q1.discriminatedUnion("template",[Q1.object({template:Q1.literal("cover"),score:Q1.object({value:Q1.coerce.number(),max:Q1.coerce.number().optional(),grade:Q1.coerce.string().optional(),label:Q1.coerce.string().optional()}).optional(),brandImage:Q1.coerce.string().optional(),screenshot:Q1.coerce.string().optional(),mobileScreenshot:Q1.coerce.string().optional()}),Q1.object({template:Q1.literal("cta"),ctaUrl:Q1.coerce.string().optional(),ctaLabel:Q1.coerce.string().optional(),bullets:Q1.array(Q1.coerce.string()).optional()}),Q1.object({template:Q1.literal("series"),points:Q1.array(Q1.coerce.number()).min(2),xLabels:Q1.array(Q1.coerce.string()).min(1),unit:Q1.coerce.string().optional(),callout:Q1.object({index:Q1.coerce.number(),value:Q1.coerce.string(),tone:cC.optional()})}),Q1.object({template:Q1.literal("threshold"),value:Q1.coerce.string().default(""),metricLabel:Q1.coerce.string().optional(),ratio:Q1.coerce.number(),thresholdRatio:Q1.coerce.number().optional(),thresholdLabel:Q1.coerce.string().default(""),tone:cC.optional()}),Q1.object({template:Q1.literal("stats"),stats:Q1.array(Q1.object({value:Q1.coerce.string(),label:Q1.coerce.string(),tone:cC.optional()})).min(1)}),Q1.object({template:Q1.literal("bars"),items:Q1.array(Q1.object({value:Q1.coerce.string(),label:Q1.coerce.string(),ratio:Q1.coerce.number(),tone:cC.optional()})).min(1)}),Q1.object({template:Q1.literal("gauges"),gauges:Q1.array(Q1.object({label:Q1.coerce.string(),value:Q1.coerce.string(),status:Q1.enum(["good","warn","bad"]).catch("warn"),caption:Q1.coerce.string().optional(),ratio:Q1.coerce.number().optional()})).min(1)}),Q1.object({template:Q1.literal("checklist"),checks:Q1.array(Q1.object({label:Q1.coerce.string(),status:Q1.enum(["pass","fail","warn"]).catch("fail"),value:Q1.coerce.string().optional()})).min(1)}),Q1.object({template:Q1.literal("table"),columns:Q1.array(Q1.object({label:Q1.coerce.string(),align:Q1.enum(["left","right"]).optional()})).min(1),rows:Q1.array(BZ5).min(1),highlightRow:Q1.coerce.number().optional()}),Q1.object({template:Q1.literal("products"),products:Q1.array(Q1.object({name:Q1.coerce.string(),price:Q1.coerce.string().optional(),image:Q1.coerce.string().optional(),url:Q1.coerce.string().optional()})).min(1)}),Q1.object({template:Q1.literal("list"),entries:Q1.array(Q1.object({label:Q1.coerce.string(),severity:Q1.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:Q1.coerce.number().optional()}),Q1.object({template:Q1.literal("keywords"),volumeLabel:Q1.coerce.string().optional(),keywords:Q1.array(Q1.object({term:Q1.coerce.string(),volume:Q1.coerce.string(),position:Q1.coerce.number().catch(0)})).min(1)}),Q1.object({template:Q1.literal("competitor"),metricLabel:Q1.coerce.string().optional(),competitors:Q1.array(Q1.object({name:Q1.coerce.string(),value:Q1.coerce.string(),tone:cC.optional(),isYou:Q1.boolean().optional()})).min(1)}),Q1.object({template:Q1.literal("scorecard"),rivalLabel:Q1.coerce.string().optional(),dimensions:Q1.array(Q1.object({label:Q1.coerce.string(),you:Q1.coerce.string(),rival:Q1.coerce.string().optional(),rivalName:Q1.coerce.string().optional(),tone:cC.optional()})).min(1)})]),ob8=Q1.object({...DZ5,template:EZ5})});function Cz0(Z){let X=[],G=[...Z.sections].sort((Y,Q)=>Y.position-Q.position).map((Y)=>{let Q=ob8.safeParse(Y.props);if(Q.success)return Q.data;let $=Q.error.issues[0];return X.push({section_type:Y.section_type,position:Y.position,reason:$?`${$.path.join(".")||"(root)"}: ${$.message}`:"contract violation"}),null}).filter((Y)=>Y!==null);return{deck:{meta:{...Z.meta,scores:Z.summary?.scores},slides:G},drops:X}}var $61=B(()=>{ab8()});function J61(Z){return Buffer.from(Z,"base64")}var sb8;var eb8=B(()=>{sb8=[{name:"Inter",data:J61("d09GRgABAAAAAHfoAA8AAAABCXAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAAI8AAADQKTIpVUdQT1MAAAHoAAAYWQAAV8bDp85wR1NVQgAAGkQAABGDAAAq6hQX4jNPUy8yAAAryAAAAFcAAABgc0PykVNUQVQAACwgAAAATQAAAF5WpEHxY21hcAAALHAAAAHqAAACtqzmgtBnYXNwAAAuXAAAAAgAAAAIAAAAEGdseWYAAC5kAAA53QAAYi5wNvV7aGVhZAAAaEQAAAA0AAAANjLIWrBoaGVhAABoeAAAACAAAAAkFoQU8WhtdHgAAGiYAAADDwAACAyMLwO1bG9jYQAAa6gAAAPPAAAECO1uBeRtYXhwAABveAAAABsAAAAgAh4A9m5hbWUAAG+UAAABKAAAAlw0kF5qcG9zdAAAcLwAAAcqAAAQUksSMMp42iXGAQbCAACF4fevCswCIFFQRylQZ1tBmTrBNCTADMCqAZAgnaAMgyg9erzPLxQo0n+Zu+/HQisd7FFXe9PdPvS2H30FAYFt07EhoY3o2SEjO2Zip8zsnIWNWdo1G5uQ2C07m5LaPZnNyW1BYUsqtXjyEtTU7oZGLaFA0sAPhbqUnDhzoaYRguoHfCMjtwB42oSVA7QcWxBF62qiifFt27ZtxbZXbOOtiW3btm3btu2Xf+rEnr1q9+mqe3s8I0ZEEsvv0lT819/+/Le8m6t8icLyYr4SeQrJi4VzlCoqD4oX3C5eFIeDhS+fc++1mRHOCuUpUVTep58vkqNEIXm8SKEihXAVwYpw3RUi3CG03hwT+o8fT/xj4icjfeVfSYZVKdBPjDKRGvI6/LVEJcijcr+kkqh7WIwN4YgYsycsgztG0mHtKTqY2WaOmWvmmSO8RyMJsf/jUENMiJeoSRyKh4Ihd8iqIKdHKX+Gn8O34XPwIXg7vAqeD0+Sh0M6ZABShMTB+3h/2h8F+/1Ovxm1liz3C/1OMNtP9eNR6KNG+sGovr677wj6+ta+qa8P1yHVkK6D/Qq+lC+KlN/nRGX2/6J+Bz/6r8mn/n3/Js6uIxTHcyruX/bPgsdxfNCn8cl8Qm/deTiZT+ZOusNuL2q72whW6xG1FDXfzXST3Vg3HAwEvV1X0N61dI1JzLUHtVyVSCpXzpVwhUFel91ldH+7X9335EucaedjzN5FAR5fdy+617Hvaewsh+NA96i7H+5NcM4cdREn9qw9jjpod6O2gvWRVHal7iQlIqlwvtjORU23E+1oMN0Otf1tT9vZtrXNUT1BQxtna9g4n9lWsmVscVvQ5rZZQXr7p/3Zfms/tx/at+2r9nn7pH0YVcamE2NnuHliwu/uZTGmaVgKV6Dj6KbsV6Dj6AWRgfAM+kDYrFltm+l625quQBen69B5wsPwS5F0ap8V/jwcoZeptQ9bNaevIcOa3bc6ha2a08+wF2bOon2TLkFUHfKj8wLWwzo1/ZBhrixGt0YHZs4TltFH1LzHLJpdNayBdY2cThBTM5/BelinyEeYrVqnyI7ry6j5rLNgPczH0DqSAjkTdsHow9qHrZqP59twP5wHfZidztpx3dCBsQtm/9VwhF6mjlg6nZrTWnjMMB/DqAR56O/oMnRMzelYdGDN7ohmOKbm9JzugvPQZeiYmtOWdGN0YOZ6yDBzfWRYc+D1XQq9Ghyj89Bl1Jx69j37np026MCa7WRkmP0qapNarwbnoWN0GTXXn0aGuT6RroRjak7L0lV1L/wdXYaOqTktpHbJ0YHZqakOr6IDYxfM/lTNcIzOQ5dRY2olDaqxiDSVodJIhssCGSyLZJXMlTWyUZbJZjmLdEHi5bixxspJ402QUyZqonLGJDPJ5axpbJrIedPKtJZ40xaIaW86GHyugTMDzEDsGQ8iZiJIYA6aQyahRETkfdSbqJdRz6IeRz0oxiTx/O7QQW320B3VcoqOXPtHMSeu/ae4gk7grBKV/fbgbdkN+Dt2W1baxWQuWXkbppOJZDQZepX+96QnqjNpS5qDhnfhIIm7Sg1Q6SbKkOK3oSDITbLeBH95yc/k29uCX2Xy9mVeJdxBct+W58GTl3c8TNKRFLeQmHhATDw4fRNHFdvW7Dc7zWaz1k4UYxuJ6C+8bQNPU9s8ov1ntO/Sq+1rzN8yf0ZnVZvyzC9weig+m36i1K6aiGZOv2GeFP8efIadLHTxeP1e/8icic5DN6NfoavQo+ixaneE+Rzdkm5K91AHrnEpaE+34bQQPZk+zX7g40/NTlW6FF2PnioiVpKLlaiIpJCUkkTSypuSVN6Wv+Ql+VfqyU/SSBpLdWkqzaWmtJKhUoff+q781o//n9k6gJAijAI4/p/dAKmVEyIQHFEcgQA4kGJB0AmgSsEdAIMgFgBDAccBtAB2EChOKxwIrHOR5tQJ7QH2n/vs2FvN1Iyavf0t35pvZ3277703Xuj6d6HrP4Su/xK6++tJz3JINJ0VfwIRUTSklfcdndCDba6EV0Q7ehw9iZ4SRbuTjBYd2ivHK+e5ALQuvuAcXFrr3OU6NyhkTClH5DALa8Ip7oU1pYQ9anCLxviG5j2gArepwZgz5U5Ye96f273jcO468R5T7s5VR+BncpianKzgAMCbbkzG4AaAj4xnd4a7XpsS+JzATQLXPSZglYXzNlirnl2ffXOesb1pnHveKsq929MTu+CWWWmNh3djmIz4zSyLHvzvOnMnnI8pFTgmMK3SqXaNCewX/27jijkr5EcPjAHMiv9BvmdGYMJfmU2y+k+B+sxoiCnNK6vIAQ1ysExRcc+kLA7hvCXl0KR+Nftt7upT9fqoz8PyDP75fPv5J45pgGOWkt0qc1Sec+PT0TTJ1+KYG1ODD1mENRpRPfu+Z46vWGJem4zKp31TGuImVT0rnSWuhr1/mu1NC+qaPCYm5HAffFlU9Y4KJuNVKrFP4BH4lgJ+Z8of5C6Xd/OiuU+DPGKZ/GLCHoAkyaIoDJ8/q7q6MLZtLce2bbt7bNtsjG3b9kxobVvBtcK7uTduaOPFfUx/6UAV9bUl+Xc+BMQUIUFKcSpSUSkqU1l5qEpV5aUGNZSP+jRTftrQVcXpTndVpCc9VYl+9FdlBjJIVRnKMFVnJJmqySSm6kWmM0cNmM9SNWMF69SWjeSqCzvYod7sYp/6cIADGsghDmkQRzmqwRznuIZwlnMaygUuaDjXua4R3OO+RvIeH2o03/KDxitQL9+TGvrHUmX9aykPAYEKESGiUkSJqg5ppKk8MWIqQpy4jSZIqCZJkqriewj1qa+ABjQUNKKRojSmsaAJTRTQlKaCZjSz/ja0UUHa0lYlaE975aMjHS3vTGfLu9BFMfrRT7XpT39FGMhAVWIQgwRDGaoowxgmGMlIq49ilFKMZrQSjGGskoxjnPWMZ7z1ZJCpOJOYonSmMl1pzGCGYCYzVYxZzDKP2cy2+hzmWH0+8xWwgIWCRSxSlMUsFixhiQKWmgQmscLqK1klWM1qRVnDGsFa1ipgHeuFOW0y+81sVpQsslSObLIVI4ccFSDXFPO6YklT3KWy7Ga36rKHParIXvaqOvtMtzD72a/SHOSgKrhxUY5wRIVduhbHOKaqLp3fpcu4dDU+4hPBp3ymwFI3N67ixhXdOJ8bF3fjiBvXcOOiblzSdau6blFSpFTcz+u4n9dxP6/j7o1LB26M6wauW8x1y9KOdirgxgXpQAerm7TVO9FJBdy7oHvnoStdFfcrI+5XRtzPgOr/OwPS3T5w9cDV87p60tVTrp7X1ZOunnD1mKlPVZTpZh919dKuXsbVS7t6GVfHvQOXxo1x3cBdcdH8Lhq4aAUXzeOiRVw0v4tGXLS8i9Zy0TQXreyiJfx6remWpVyxml+vJVyxkCuWc8VKfr0W5kM+FPzAD0KonqKSCumbF3L0TDd0ycoT2uYpy+rrtETzNE4DLKFCQIR04iToz0D8vyIb2MFeznORa76OCOfD77gscU1SlL1hcy6Hd7gXXuF+eEWwV+UUWPs7a38nOKwiwmTaK0p6+D2p8A9aSbwpKWBgeIC5kuCxpAiTwvtMtpgS3jfFiGQ9rzLZYorFRolNFrk+byARl4Ta+J6W4RB72MYaJlnZiSYNf6EGlYjXP1X/FFYS6Ded0xEdqX+q4S8vbrLaLm3RMqEy+poA33tStKQ1XRjIKEZjZwzjGM8M5rEBkyXLNHPINZFLttVRRoUrGB3OZZyV48O5gr3h9wo4HP7N8fBvq7W0PdpgIwUJwuNEwsqkWRkLs0i3Mm6RtEhZdAkvMzAcwSgrx1lstOVussi2eq6VO8LjipIIJzLQYlTY1KZqKqx1WTF9bUtoaVP1CcVcG1tq7Q02gvWu8C09a1uaxTgrx4dZijDQtmyUxbjwvuLWWmGtDoyxnrHe24Gs8D1ybO3Xbc0x296f+I9bM4Bw7Ajj+HeltLunlMXBxrKlUbQUsEG1bABoAKpRlrbvYKGPBTyFFgGgDwcaCshbABnAngCuGko41rlCl3AcOXDyuySZTb63+yZ5ybxk2T/hmcx8M++b+c+b+X/f7uj31chybWQpHNX4fTheFz+OSn6a9Ncc9ddgIA8mz++PLMYjS/GobvLgt4knjHw4Vqo/f/vZn/LRLCPiA3nv8Ml4Jj+tf/KNVOVr0SjJFDuSD2eyOo7dSi5GRPaub4zU5rcTOvqOSkxXhOfEGRqTmelVV7fPkUphd0L1E7hOxMTZGhW9xXd1El7ZdrlAg5hEVsF+3lOnngWMS7fBcOH656aKTZJPUWGQ0T5RvZSsH3uEIgTUMLJLrGyr+wohDTU2q3cTpBXvtNrNqW2vNe5yWjmxLCjT5wWGXoYeuGdrl+in1+FsttPl/7l1mgLwhxQKeusqd9Q9em2ID36VYnDApRyIkMjBdYnlYyJ7qRJjn8a/j0Xk2Co2dRpyYOskXK7Mxh3LgVBKvNHxGpIZW3YWxZSoE0nJNZsky2eBE84xBCKcksziLWXqdKhkWSJKxZUONcc5EQVCqrPar1xj4wcaXFDjCx5PxhERSFmEIKWJmblWZvf/NheT0odUs9UuDOFw4NqHCai7VzEBweKYAyZLU3X0pnxAM58iTp3AsSvHdG1fBUdCiPX8UKGZ/V6EmO3EVRUv+j7x4o3uVsdFRZx5WWSkhJcebbTn/86R2fD9OiPgMltNwyjWJ/b5UA4w9LVPUt5uYZZrc7cjRLct0s1eB+txLG2NZq6TacdyPrX6SMZlxPTdnKedZU3/T6L23tf2C9SnJ77Q+uvR5k8oDHKz0QN05jNIKIKhQi2LnYQOj59TnbYZDnT0nMjmgDT5bt5+2FnGf5qY+fPd6NDE4g8fFnXVjWXgqHfs349rDnL6u4UpJg7O02lN2ryYjXPPrjPX2Esi8o+NJ1WJOFfWFIhIljBA2y7faNvN9wbptnTX8MHzzGygONdMBfa0rq2tPoKYtvVnrFsRixA5efLlNes5JHKNHJPnVrRlFcfxRhh+UT5opnyQZkZpVtrCTHzwiEq2D+hn+KAkCjxRykKwTi4QicjwkopX/sDZzDc/i0Zb3U3PpDwraYnFSF2f49vcsdJWug83qMsdA7Pd/Ev+utk/RrYHh5IlIruSQlrJytyfNocj2Qb0XnjozBCsFr8eSHg6tcwzjHsNurIkeUioS1Zf60T8S2P4v+zTmLTf50RWAv5Zf578HybiBw9duRhgfJlE4DdCzu2Xfm19ddgVb/jHWHxniCsvdbiyxTzeI7kvKJ4LGwU92QqI5O5REouFUbi+3ENkq3XE2x+BfqI6HIgFia5BhLG3sQ2DcHG+Lo/l3sDqaANO5/szVzomxGtZAk7vR3yB6voKJY+kcNDYJhuJpzcEFUdLJA/a/ucDDZ7d0TflHYXmDB5mFIbR88WsbdvtUmOu7e5P7am23bFu7GRKtmSObZtTrPc+58e53IfjwUy9/cAgw/SZh3kyaN7mw7BrpgybLzxtofBy3Z/Wlgkf17Oar+tZbaztE9PtgJjhelab6XpWm+16VpvrelbdoZ7VVrie1da4ntU2uZ7Vttor+6pbvov9ligOuD7VDro+VXd1iJN48FTvWLwZx3iMCUzCi8kskC9ksXwJy+UrWKmVVayWr2GdfD0b5BvFQjaxW76HI3hxlGPy48KLE5ySn+Ys4znHeYK5wCX8ucxVpnONW8zmNneYwF3uE8QDHjGFx7zHlw98wvjMTzz4JRbxm7/yf4RghBLGWMKJYA6RRMtjxBxiiZcnkMg0kkjGSCEVT9LIwINMsuTZwoMc8uT5FBJIkTCKKcWHMirwo1LsoIp6eQNNBNBMO7PooJMZdNGjmV76mcqAMAaFB0Niyygbd5GlNRAFUPhVu1YF+d3d3Q2HCQ5rwt3nbIBZbwPdAdNeRL9z2+XEM/+iN6ECLVGBNqhAe/SfA/rPJo1vgwr0MhXoxKRNWlIma7I6z5u8zumaqUA9ql9LC+qj+rUUoR7Vr6UL9dGF1ulCO3ShFbrQKl1ohS60ShdaoQut0oUmzB1zR1Lmnrmn8wfmgaToQq/QhV6gCx1RBlvqUB9lsKUR9dGIFmlEczSieRrRIo1ojkY0TSOapAyOUAZbGtEWjWibRrRFI9qmEfUogy2lqI8y2NKLepTBlmrUowy2tKM+ymBLQepRBls60jIdqY+OtE9HmqAjrdGRls1780kK1KRd2tEZReiUrtfS9XpGbchQ5uQZX60vyqY4WUbIeYSEVIhfFiQgKd2f1qGGlhhOgggJYmNFbfTFJwMZSViFPJIFeazDMk5yR5xcPOVkBSdZnKRxEjjiJK5OtJeV16qloFo+i5FvqsWgJYGWKFrm0LKKljxaVtGSlx/qZFWdbIkfJ3Pq5JcYhEQRsoYQi5DzR4TMI+Q6QuYRso6QFEKSCFlHyAVsGGxcxUYHG2NsZLAxxMYEFTdQMaSNHtNGV2ijK7TRFWy4IzYcNiLYcEdsOGxEsDHCxiVs9LDRx0YPG31s9LDRx0aTZrpCM12hma5g4yY2MtgoY8NhI4INh40INtrYqGOjgY02NurYqGKjRD9dpJ8uIsQhZIqQGUKmCJkdEeIQEkGIOyLEHRHiEBJBiDsQ8lQcQroIiSDkCkKaCBkgpIuQFkIy9NaXEXLN/DH/xNFMe3oO+S+OchotsnDQpBr5Tl18Z+Hs4dbxYXlrfntp7eRe/dvUTiH3AOTIEgZwvGeis23btm378njeTbKIcbaNwrPPtm3btq19//rqNue7+uo37FFnujuYzl7D9nBsJOZ/EH9LuhmER4bd+TcpM2MJ1knoLyWO6zv1f/lvk+56F42nrVUaKddK2rbE0qoll/YsJeW0pkotZTAb5S6kcqjhRHE1WU1RJaQclaIULaBUL1HLVTUpI7VUHFFXs2gWVU/ujfryajbQXJpLNZRXpxHPQg9TjVVzahGe2EdapEN6ZEBGZEJmZEFWZEN25EBO5EI+5EcBFEQRFEVJlEIZlEU5lEcFVEQlVEYVVEU1VEcN1EQbtEV7dEBHjMU4jMfv+AN/4i/8jf8wE7MwB3MxDwuxCIuxBEuxDMuxAiuxCquxBmuxDuuxB3uxHwdwEEfxArpy8lnahWRytxlghAlmWJAACZEIiZEESZEMyaGrrnxrZQX1K7802WCHg0+CUYhGDGJhoMZT6jhOIMFXr1uPf2abI/7FFn/jH5b/i/+YnolZmC3bKTUX8xCnFHcH58xWLdXf+A8zMQtzMBfzMB8LYJT9sp/wtgm+uq2B8winl3zopawwqsFc//C4X9RIPnvN5BOcxpPwyxk6uBKDus374Dtx/ZizMneK9/XPeSqdOe7fACmCCLGkAM+sl0N5VERldEAXOOCBF370xwAMwhAMxWEcwVGOoHGOiqGTYbhmoV0wMtXPUi4cBSy5LGkshPm5+ap5O0u+EuaV5pUMQ+Y0bPnZMN03bSSWh2MmMSYcPSWsEm1MjeR/AEtIFDLlkEhnSiGhfxjGhxK3w/Hwg3AYDht+5v+iukjk07fqq005tKPUvhKWctpc+WyRSvoo5iJMqjQl3CzvLpJSjttRb3RV/akxfibqSbtfX80iGkpb30gtJZqqNUQztVFtolY6SpveUp2lBe8gbXd39YKw0bOjurLTu6OmckjNFiUtV7TUb06p31zSHrm1obxiHmk7fPK/PCFeMTd3hgde+ODHO3eM9LOYw7mnYpgaaZAbeZAXtVAbdVAX9VAfDdAQjdAYTdAUzdAcLdASrdAa7dCV8mzFN0x/i+/wPX7Aj+iG7uiBnuiF3uiDCERyv9tgx3zybAEuM30FV3EX93AfD/AQj/AYT6CHzyB9uAaKpPTZYIcDUYhGDGLhJLULbr5L8MALH/wIIIgQ+lJC+6E/kqpIztYGO5x8+nbBTZnywAsf/AggiBAM774u7KMr21pxmXVXcBV3cQ/38QAP8QiP8QRsxXddVkSyDxvscDPvgRc++BFAECHkC+dLJGdvgx0Ojh2FaMQgFm5yxAMvfPAjgCBCuMzRruAqruE6buAmbuEu7uE+HuAhHuExnlB/jaPuHo8JmMjxsiudoQFGmGCGBQmQEImQGEmQFMmQHKURvipyxgY7+rK8H/pLr6Vp9PShbxG60/+oB3rHFdf6ICKuuJQNal+me2lO6QVkZe7dPkHUjtTV9NeTvlROxR3GMazQtNtvWqNWpKaHFTVAS9bPZ+kC6NKCzYJOG9KSvV0gNbU9W/Sj9dzOOdED6t3eZVKDOzk3H32WhnIMS3wq1lb+cC1n6mCK+1fm6NEl63vRIg/m+jexjiX03lrxwTHmaKRim35yvQk+TP1RikySYiSmcZyN2IST5M4pnMYZnMU5nMcFXMQlXCftPcZP8QzPOUJ1tOFoEeSdTY5m5UijVPJPHYkjzOEIxeP39NmtDayJv87KyiLtooNrCJJm6OtH2nCucQTGSn+1IFPvLjF/lH4EY9aE89kp+UyrKXnPceQM5C5hOOd/m6QRVwAAAHjabJYFcFzHFkRPz5slvZW+IjNqzczMJMuMIcN+YzjSWuUSBBSRIczMn5mZmTHMzMzM48nzQlWqa+69272a7n0wJQSUsZ7bMDW1q49ifN3OxhwVDEVLFh2VcRoff0wSEIYAS4w4CSx4JZFXPE9y9866Rpp3765vIHdcbk89J52wd+duVtbt2V1HTa6pfi/zG1xjZqOrTAbEaF9H+Rr3NQDKSVJGmgoqqaI7PelNX/ozkAwg722iZRnMEIYzgjGjvjbqksEPDb5hcOvg7GAG/aT6guq26m3V46uT1eMHPufWv9z6hlv73drm1nS30tXjBzzi1m8G/WTAdQMuSK8M7wh/FV6T+shU6Dyl2YQAkcRQxxSlVa4KfU6VOkJV6qbu6qF+6q9qZTRAAzVIgzVMwzVEQzVCI9VTvdRbfdRXozRaYzRW4zReEzRRkzRFUzVN0zVDMzVLszVHkzVX8zQfQ5mMQlCNVrh5ldZTqU3aRE9llaWXTtGp9Fa99tBXTTrIAJf2fCbov/ofkyjNbBTIKqa4EkoqpTKFcn+veuW0RzVaquVaoVotcz6rtU7rtUZrtUlZNalZLTpNp+sMnalWneVc2tSuDnWqS/u0Xwd0UOd7V4OUdtkpcl/LUO3zu7od/c4blNXntU3blfvMnR7VY3pcT+hJPaWn9Yye1XN6Xi/oRQwJXnJANVqJtElbSape9aTVpLMod9nOo6du00P0Ig4sTfwicUOiK3FSYm1iaiIefy3+QPwv8W/FL4ifFt8VXxmfGK+KfRR7JnZL7Gex8bEq+5F9wT5g/2V/Zr9gz7HN9ji73s62g20yeCN4KPhb8IPgmqAtOCFYHUw0b5n7zJ/MN8wFJmc2mtkmY6xL/C/9SNeoVds0VQOV5BXu4098g0sIMKmrUlchfoGxV/gJRhIQ2NZUW6oN8QWnuLlI2ZU6LnUc4iDyHc+LRkQOY1emVudZY6eyDbEJN6WmF/H9qUUsRKmBBTaVTCURo5HveFb0RXRHydciToiXMBgFCkHl6kGKgETsDwXQhezfIL9PPPalw+A4ZL9RpMViBz8Fy5G9oEixsbpDYDyye4v4IHZU7Ch6Irslzwppjc8xswCf4xclOfoehs9xXXEOd789fI624hz2iUPwOY4rzmH/Y//jc6wuybEOl8P+oACf477iHPayw/A5flOSo/lT+BxfKMmRPQSf42BJjhpb43PkSnKsIkBUIVNIbYhrlTaAstpOQjnlCNWmg6R1vs6nhx7Vi/QkINAbesNsRGZ0fs476h7dY6YjU4HxU0H5nX5n+iO9gVyPeIy+ZizSAwT6mp8LygV6DulP0VTgG3Ub0reQbsuz0m+QriDQNoffFPFfQWrFqNZNBfYipBPwPeJA2khMGyOcUaLMxGqmx44SPkOgjMPyErYMozJNLuZ4C2lgnhH/QDyB4QmlgYAYt0X4GXJVvOd5y688bkKuisc8G/AVh3OQq+I/njNcQiNyVfzCM2IXog3xtejzVYgcFOXYj8gSMNxhIXiuAbEcQxVjAYP0X90aaUchx4pKr1i6+AHwIx5iAo+4zFk+cGjBEPcnMP4ETvgTOPQncNqfwD38CdwTQxJDJ/C+QwcfqgedWqAlXKejdTQ36wpdwRf0G/2eL+olvcxXCUjopAKicw6fMK61isAWn9fzxDRdHixGzI1Yq4wc/C8aHnGB0krTG1HlGSEt87UW58xLBZQ6c0ceJc78JkKJM1/zKHHmModS5xW+LvfOjUXIIW7KO2/J4yjE/rzz4ghzEXV557EewxHH5J17O1QhFuedazAEGL0KetPhFYOR++Q4vkAronvJubIU/8R5XrQVKVu9sjxSjitStnhlfKSsLFI2E+BZcwViYl4xqleOABCTMfSne5G2VKsRKW3SZm3R1ui/iNPVhZDqsYBIIrWR1FylOYa11DCbkf5ZTBPX8xi1+9ocMc955jnPCKsH8tP9fgp4iLv4F1V8hy9xDRexnzNo4AS2+f1rmc90xjNchrf0BIE6HHxXi+8tbvLd4QXPt0e92fcWtUe9WS9i1eG/EU15riXPRd/z+3rOTxHnEHEOzcQYScbf/bSe8b/0Xoya9WyU49nI/z68PwlmMpGRDKY/Pan0V+opf03u9tfoSX9V7tKd0e95MMr9UN5RJNXkpjZ16Dbdrkf1WOHO0Oa7v/J6FKOsr5uKvtEVdavbvBIHLOuZTIYKAsAwl6mAgGERs56VETM0YnpTiRjvWbePsgipLVIz9M2fc5JRD/D6Jl+bCnmOGE6y4qaKTEWm/B/lDeUN4R/oKcIvhFeFF4Rd4WlhLjwu3BKuD2vDueHkcGQ4MOweloV8QhA8AAFixAAA7Fyc2m/btm3btm3btm3btm3btnb9nT/xW37Bj/ke3+QrfJ5P8VE+wLt5G2/kNbycF/FcnsGTeRyP5H842xd7ZQ/smp2xQ7bD1tkSm2UTbJj1sU7WwupZFStlBSybpbFEFsP+s18s6Ad9pnf0kp7QfbpFV+kCnaZjdJD20HbaRGtpBS2meTSTptB4GkX/UpVv8kYeyQ05J0dkl2yQZTJHJskI6SddpJU0kGpSRgpJDkknSSSWRJDfBPkTv+B7fIVP8QHexmt4Ec/gcTyEe3EHbsZ1uBKX4HychVNxAo7G/7DzT/SOntAtukDHaA9tohU0j6bQKBpA3agNNaIaVI6KUC7KQMkoDkWiP4jxC77CB3gNz+Ah3IHrcAnOwgk4DPtgJ2yB9bAKlsICmA3TYCKMgf/hLxjgAzyDO3AJTsA+2AKrYAFMgzEwCHpAO2gCtaACFIM8kAlSQSKIBZHgL3AI4VN4FR6FW+FSOBUOhV1hU1gVFoVZYVIYFQaFXqFTaPVDTFlMSUxRwHa9F5MTsG1vxKTFpMQkxSTCxMfEAWCxDkwAhkIYiNY/pYpx+HaRtuEQ7k0g5Jy4rxPrym23vnqloHCwsTCtYlE42FiYdmJRONhYmLZjUTjYWJi2YlE42FiYNmNRONhYmPF8f73/vTzQsZEkSRADQTmRBrz+Yvy07ZVzwTgTaqrqVNSzY8eOHTt2bNmyZcuWLXvssccee+yxYcOGDRs27O+umqo6FfVn931TU1Wnop4dO3bs2LFjy5YtW7Zs2WOPPfbYY48NGzZs2LBhf5/VVNWpqD/b77OaqjoV9ezYsWPHjh1btmzZsmXLHnvssccee2zYsGHDhg37+6ymqk5F/dnz+aupqlNRz44dO3bs2LFly5YtW7bssccee+yxx4YNGzZs2LC/z2qq6tQ/63N8js/xOT7H5/gcn+NzfI7P8Tk+x+f4HJ/jc3yOz/k+q6mqU3nFhg0bNmzYsO9zfI7P8Tk+x+dP/qemqk7lFfs+fzVVdSqvnvX5q6mqU3n1rM9fTVWdyis2bNiwYcPmWZ+/muqrZ33+6n+eywHadhgKomfm27Zt27ad9Nu2bdu2bdu2bdt6zspNtafdtY+StFiFBZiGMRiEHmiHJqiLyiiJ/MiK1EiI6AgrfvJN3sgjuSHn5IjsMnXePJkm42SY9JNu0k6amdq7Kq4L4ZmhxnX7B2XoxpWhhmepLZWhgmepLRVuuPeAL2lfclY7q53VzipnlbPKWnPnu6RdstZkm5zVzipnlbPKWnOtXdK+5Kx2VjurnVXOKmcVlGQKVTNU+VBFQ+UO/l9PHipuqMihyD/8xBe8xys8xQPcxjVcxBkcxyHsxQ5sRsWqLM2CzM60TMyYDI8A/MANXMAJHMAObEBKycR//MJXfMBrPMND3MF1XMJZnMBh7MNObEGP1VmWhZmT6ZmUsRmRgl/4gGe4g0s4gX3YYu6lAeiBDmiBBqiN8pKffvzGN3zEGzzHI9zFDVzGOZzEEezHLmzFBqzJ8izK3MzI5IzLyCT+4BNe4B6u4BQOYBvWYBFmYJyp4jugGRSqojQKIzcyIzUSIzYiI7T4SR/phlemir8tRC/Jz0HswXZswrqszJLMz6xMzYSMzrDwwze8wSPcwDkcwS5swDLMwSSMQD90QSs0QE2UR1HkRkYkR1xEBuWPfJIXck+uyCk5JLtkk6ySRTJLJskoGWS2/tJs/ZYQvfDK1DCDDRtaNrD0LLWlCuZtM72XobZUwXxt//AHB/E4xzYAAyAMBMWWNgLGyKwZJyms7668aNGgRkaKtg4tGtTISNHUoUWDGhkp6jq0aFAjI0WuQ4sGNTJSpDq0aFAjI/16s3oiI32NWgOQLEkUzKzpmW/btm3btm3btm3btr0827a+jb6Mid6+jtmIi4qNqs6Xme9V1Y6qOzhqx/bOqJ0zahsctWV7Z9QuOPrXWWc+wuzZazdGcTLonOhk1ykmdOUDrerQ2R+ni5MNBBntZiA5aGUFFM8CA3Id9wMuDkDfC8RnRW/jUqkyebjvIB6TelpPMTN4mLvt0U/uxvLipfPwJiMOLsc0JhcrjYfVFgGsddof4qTycErC75z8homRwsNIDgvN1XYrnuy/cXMPPhS322xFk3iiH8AgJfoqlkireYAX3PdozWEks7GDPMTDPMKjPMbjPMGTPMtzvMDzPMNTPO1xnQxCc0YC7eA6x48mL2pBbLmn5xP+wycwAJIiFa9zJ+dyIJuzLLMyLu7hC4ThJLZjKaZiKLqjJeqiIgqCrgbEk6PRH6BeOIT7QCEIjtwxS4iiGnvjftDF0JWXgwDoZuk6FC8O6GEKCcHVWnnZwmLjxwNDKITGqokPhlQJj12nXQ2pVCR2LdkyeO3X8wtkTdaCjdq40TML5BiOE0dc50mBvEjG9dzAjdzEzdzCrdzG7dzBPdzL/dzH3dzJXTCw5Av5xpdjQjkmdnkVRAou54r/8V9tEMAeu0GvY8rbyDuhvBPLO6nrhDq5c0L9NwyHaiZlQsVx1omfQcCJx4dBbrGMrTsjJiCmrgDLjaGMMH9MhkBVlPC/8P/m/8b/kT/KP9k/0N/en9pvWfesb6zLwTPS7FZSK+Bb75trP63Q0T77TGo+MjfNeXPU7DYDTXt9J0nIZ/yFH/Fk8DtBS1ZnUTzCD7iOs5iMgdBJPZ7BMApPYRiGOCiJwjF3CHAfhhF4DMNIW2n4EA/FfgDDcNzVPaZ7UhIW/ta1FdTGx5/i/ib0D7F+l0558YuiP8vbm/dH5fpBjO9Vw1fifSmvb+X1jcvrc+GfiS8EH2v8kZhC8IGQ951q33FG0SHnHqUaIqWKUA03leWWKgmT5o5qiJnxdbGvCb0qxhWxVQEuKXrRVdN5IedcyGkhp4QEdK8vK9IjJRLjiOo5rEr2y3Wf6jko7gHlJCwcda3CbjF2uZAd0m8POeMtct2sPJuk2Sj2Wrmsl2adk2e1GISFlc5KLnVlWiTt4pCZ5irHbLHniTdLORaoghnSzHHt7zQxp4b0Gi/9ZCknyXei2BOkHyffsU6Foz3/oyPFHSF0uFjDXHmHKDpY3gnREx3REg1RE5VRFsWd3RmorAPE7aVqekrRQ67d5NpVrv3hY4SN9bP7SBvta/d3bbyP+jD0Vh+hSju71rKjxh1c/yfthLR15tXKGTXXKBEGu+5iVkV516o1U71N5VBP9dZQpTVVdR3pa6veJqo3DI3Vh6OR6r6LhsH6G6iPQH2obte6VpN7VblUkWNl1yuhoqIVXPMpJ6SsCyktpJSQuKhoXxdFfuREZt3xLK5oMc2kqOZQRP75NZNCUhVU9gKqLeiKvIrnca1tLqlzShEPtT17mxLZ5JtVmbJIl1GKDHJKJ11aZcocXK1M6vUqQWrnVZLS2aFkruyJ5ZUkllkmVNYE4scT06eslmoKSOVX7vjOf04JGCTSk5WpkEbPTuZDSZRBeVRCddRCS7RBe3RCFwzCUIzCGEzBdCzEEizHKqzBNuzEHuzFSZzBBVzGDdzG23gPH+JTfIGf8Cv+wj944vo8HgnL5h/DcUMEHLQz2qMy8sIPIHWwEZbiahoZ+BjGSJB3eRfkQz4UaulzmzhqNx9O2M3ici6HgQFAxY/iBJe/AcUzKZAAeNpjYGHVYpzAwMrAwGrMcpaBgWEWhGY6y9DDNB9IM7AyM4AolgYGhnQgK4sBCoKCfYMZDjAw/PvPfuCfEAMDx12mKQwMjPNBcixxrJeAlAIDDwDP0hAsAHjaHcexAQFAEACw3D9oACZQG4COUTQAAGAKA9kNpIsQKjI6MnrSdnd8RJ/rdHaKEPPTeBVDSUlLVyDFQA1ZSN89SS/k/0Yg+AC7rwgoAAAAeNp1jAOAW0EURc+dn9p2O0lt27Zt27Zt27Zt23ab2rbt7j7zAAZwgNA46Ft2mWlADrLgBxeQmLR0YgGflFTFzQazy5wzFxw5LieAE90aG8AGsqFtRBvVemwsm9ymsznsArfHPdQ93BPy46dPnwCwJCEdU1j0hVLMrP9BwXEc/78ooWx4G/kbJZlN+x9FwDEA+NQa4OOHj/c/3oZv9dwrB6/svrLrSi64kudK2iu5rqS6kuZKSW9JbwNvIW/By7XNEwRkAypxk4+gSZoCAJrwuwbQGHwVHVQWVVcxPmizMquaciin+qmN6qmM6quEGqqxWqq1Wimb8mEITkjCEA4P0YlFXJKTgtSkIyPZKEEpSlOOilSmIU1oSWs6K5dKK7f6qo+20o3BDGMko5nCVGYwm+WsYDXr2cR2DnOUY5zkLBe4yR0e8pjXyqOSyquOOqSsfBQqzieV0kht00ANUXP11gDt1GB10GiN0RYua4SaaLdGaahaaKM2aJOy4we/+MOFg3+CEIrwRCAikUhAQhIRTw/JRC5yk4ccZFc7clKFqlSjOm14xxl6050e9Kcn/RjAcMYyjvGMYT4LWMhc3rOZ3exhLzvZofbswssVrnKRpwzlCcU5ZFBV7dUe7dc+PdELVfnS1/4Mo6KlTgAAAAEAAf//AA942q18B0BUx/b3nblbaCIdQUGXFbCisiyLCEjvHQSlgwgoYIGlSLeAqIhIbNg1iiSxRYm+aKJGk/cUE/OiRk3ie0nMe8bUl5CYWNjLd2b2clkJySvfP3HZnd+de+a0OXPmzN1lDFAol8U+lvoyLDOCMWUsGRnjzMxglMwsJoRhkMxUhixlSrlKKbNUsKYyU6lcqUDwLrdUKBWWcqUzuWrpSFqki6UpXCcYf4VH2ceaWHyC00O+d+5wF+/eRb6+Fy/2M8j3InzwhVY/c7GBu9jg69uAfBsuIt+2Nu7iUi5L77PHjK9vvZ8vaoDe0AeRu5gG6NPg+9m+Bt99vr5ZaFyW72e+0PDNgn8Mgxk3hhHHiW8wUsaMYRRIgeSsjEWsk7OTs0QqkbJu2O4eHn9li2ZHGz5XZOc0bsrkcRNsF4pvPHVB+7gsHIxc4qsXbN6aXxvJ3ejv19KTlmMnoM0wUvQjswCpBXyhgF9j3tTB1wn4VTR+WPwKujYs/hMarYM/FXAN2sQwAh4i4D3MR4P99Qb5ecIs0uJcKtGHgPei60+Chxn3ETqD1Fr9SYtBfyMZc6I/maXMVHixyFSO3PC7ohyNG96jycF3+ko1X17Cn6RzreIbXZxFF2fWRbXow9r0fQmjUGqU2xFabtkgpBbwdQJ+RaSC0Vmmm2FEV2B0c8aOcYbxTWWuVlaWFhKJ1NIek3e5o8zVXenm5CSXKeETfIRP3dhk17X5gUv8gten5987we1GGcdeiFyfxW1HobErI9ds4k6KbxSeKs6qDTczFs09ULa0e2FXU3ZEXeS+2aVR2U1Er91cKhkZODLh9bTtSTCDmKr+b8UF4geMI+jLYTxWupmNV7jaY2u5Cyt3kABPZlYKVx+sUhiz7MgL3IevvIImX1h2dV+hxXmTqCVNYU136+rvNoY1LYkyOW9euO+qxeso+dvvUPJZ//rXSqPUsROauScXznNP1kyMKYss6W4IIGNyCXRMD4ZBSoWrO8goV4EH/9HoWAo6orqS473lqsmTVfHWexu2/ht2cmOSc1KXVHIJC+3Cxxw3jE37Y+Zko8Uxoqi4ufFEY1Qz1IZmWhviUdSDwIbiSLChAUQURiYDE4rMLC2wiFjOTOmGwWC4kZuG/vExUh7q5C5xBkh6+l/lZV8e5b4U3zjJnfryK+7V7q71SPTaKYTWaW1DKMJIlrxtGqhtiLeEwUiG1FMET+1mWzSueLdmPr5DvNK2izPqAiq0N+XXWjszmc+Rehj8CmoeFv+JuauDlwv4j4yDDh4i4D3M1kFc784AjjGzbTgc/UpxKi2RSsB70fonwcPw8wipdcZdKODXmCqk5rUzE7Sjr6udbrZRMxOv0tQSzeAuTQ3D+3gl+JvzH/m4u8pdBXOOWJK1/At3q6sLTbhQ/t6BQou3rSMXro5Zdbuu/uO1dRfdFZirw157uO8szqLkb4g3Ba88VRRaEj95Dffk4nnuaXPh/Iz6zhdf537YMuBHlVQuOe9HZkgt4CEC3oPGDcgl9hmwOkgGLzn87T7PGp8/39crvqGpwaufuuBOTQrvOz5Um05abWIR1SalQq3oxFtx5wB1VALUWXgHuqjkPFkaAOjv7+9hGJxG75movYc7jdSAvw94NrEkjz/mzlEJDAktIhmPX+0vG7AYttHBrzBjKJ0bgCfq4D/1F1H8B8DdpQsF/Fq/McU5wCdIQwS8p38SpV8E43bp0HnE6FG8g0tFm8U3BLyXGUvnUW7/t+zfQERTYn8nJSzuFsTgStCshQTL3nl8vqW0pOX8rxYPb8fGNm/c2Cya8Ozu7Ye8LZzpndQWLDiJuwopEJIjKbGItZXrIg/05hNNJ079nGNhPnKY+95ujG+VF/pcU913Cr/7BWfN8PZwpjy78bPw6sBsICMIeC96V5j742FkMR2ZzPrz+CSY6nYXpUauUmoqQcM8NXKXgPeiigFqkiagNp3OFQS+b2XtroLAimTgBG4glJtKIoUgC4K5YMglrKxhPTLtRsZoyQiZo6lYLBKbOjqMQIvQyHOIxWiE8aipE4y5U4e4Y8ZOU0cZj0QIYSy+0Zcom6+eaWY60sSjLM+BPfLUhU1wKV8Z4OQ4aXJo4+LxfUfZBHnhqrDJU8aO82usntF3FLim3FFpPPkZcmBAGsK1gPfiQwPSiBNAGjuqG2RlBdLA8uFEDCpHTiQXAsgK+P8MZ4wKnGBlKcIifP6+5h+OEdNh0rMiMXAa4qgOmzhlukv0ahe2HfiMnVWb5J0Q5pfRMqHvGG+xBOqV3nzc6UdqAV8n4FfwiGHxqyhPsDBwK+C92ASkwHT+H4SoNJIZqxOX+MXEmV9LBuITawJr75EjsNhdQJNeeYW7faHxTn39ncamu/X1d4U19yz30nffci+9fmINkp6/iKRr6PoGEWkgDh2ks9ufjwinkFrAFwr4NWRIchXAb4gPShhmDMwmd8IhqFXqTNZpwug40LnKWgp6JuwiBLCWV2srMeUdeiO4CoxvMTRMW5nvPjEJ2Ed1WwwN0lcWuE+cA0JoruMyPf0iIoWvOVoHIs02t9as19crskiXSFenbPaNe4UKli6VNqZsnR17hIqHSti1EkkAFW6V8z+osKudZH2VEnHgoKTrBImuohKkHga/gm2GxX9CC3XwEAHvQc6DuN6gxp4wfxoW70cmOvgdAe97Dt8r4Nzw/TFGE4al8+sAzqUSTxLwXjzmSfAwcj3CYrCsiFoWcN6ynv+zbc3NFez/aF9Vy9VL/7ONxVeQE/cxQ+YQiLUaIoEZiQWygTk0mCohYX1XsNZvczcgXXR5W5Q7kD71Fd5t+7iq6uO2u+dQzN8/RzFn+XRKPKmV07x6jNNshFFotD1GV2TLgZzdBFJ1makpSdFpst6NuGOfFxd/doy7gDzK2/z8NlVwPeIb9be5X+42aP6JL8VtOLE+lo/cx6hNEvl1YAtS02igptHAnJkwGA3GkWAAia+13FnCKqxh9dGNCQpXlRAWUB2EhTmBhRf/vKLy/T/vCp0+eyA4NMWHPh8fXmlO6j+qRA/emz1/1XNBwnZA1od0xRszKCuwgORIkFipK/JSWzsUfY/rMTWjom/092+jolf8lfvl3ZnGBppdOABpzuNvguqT560KG1i9HlIdJPM62CysXjC2gPeiV2m8V/c/AP0/YFyJZiC8K+yxgmfDmYR9WL8UwKe13InoRmJpAZ+t7Vmyn8Kb9n/XpH9ZL6cjecH+jLim2O7uK80P2164v0p0dsTpxqxNsdmN7lu8Nq2eU99rW3CuNrFY6V8ZE5riCR5zfnPdmwUFp5YVV8wuDo7OVI6caOKRvrGg6u0S4JXyRGVI4WXooDKouVTCq4D3oj1Uhhx+5ydlGHPIMsmymyPK46aeF0/q6np6WzwJ7s0R9mjp/L0HtOtd/0OxL9xrST2DLnMgIlUBTWFE+NkJ7knb+cwTVVXHM863cc9Grfuhg73T51F4OCvrcCF7pW9ixw9kp0EpUa4z+ciYjtTD4FewaFj8J5Sog5cL+I/MHh18oYBfY37RwUMEvAeZDeJ6g/2fMC/q4HcE/PHv4E9/B+9jnungewX8GTIX1mTQqID3YumT4GHkfYR+IFmzUHUxhiiDIOOg6RPNBPFczb0raNboibJJk2UTbJGiR3MfkouWyPqCTVvyayJZ9VMX5rl6SrFQT9GpX1BcqF9oR5SSmDOBjmhOcxyafZo/30ByJNR+UA+36NK35g4mBvr6BibjzX+8+y8LuSk09E3Gm33zNlfwt37GxnqEkZGhpV0/MLk4bFvU9BkzpkdtC2PbaWuqi8tU2oJ86ERasVeIr8eiRX2xfEVD6+9LtZ6DE5B6GPwKfqqDlwv4j2jzgLxELgHvxRoq70zQjxfIO5ZUZdAQGYmQvJQQiWZiK87w3p3p3rZmsAbZzJ7+yR3OEJt+wj2b5Gljam5mYjtrCvcEP8N3uLeDs1wcpkx2cMkORl6a6X0cqvKZN9XOUT5maupsrgn4oeNSPst4T04XLO4J/JiA/k2fN7kpsfk95OzqbGFpaek8DTl9ormHc9il3Ni4MGdXtwnhUejzvjbNngG7e1L9VPBx4iJSC3g5wflxU3TwEAHvYa5TfCidq8hG8B/gU8B70eUnwcP0f4SO6NBZKODXmJNUXlhJRa0grw3oX4mIpBK5RE42xIj4FgCwrK7EO6YqbG08ZqanaR6JjDRLpyvtxsz0SE3Dxk3spwGBMgcWdzX3zQgJcXRkESJVCUqX8lHPy79hIGch4wl4L1pHs+KU/gfsZ6IixplaxoFEdx8MOxWl0k0b3aXOPpjs3kk5Vm6MnUkUVBqzsHkhcR/dWXQ0L7J+R3RunbdbQXRsSYjZ0cntJ5I8NjYmv2pkntjkm7su1DA8c56t37JArwLb2B2LsyqDHAxGGDtMlARnu7lGOM/MK50+Onb3Ks3Y7c4JHnujawN3jrA0MWT1nCN8PaMnAO+UR4kV8L6Sl0nFMMPgPzFrdHDM4xL04wcU5VKJpELvXjSTWm4olatM27DUHyH5IC6+KVDvCRrsvUvo/TOj0en9SOh9DbbKLEElP4HW/ZgoJnlQ7wrF81ofmJNU/5YyaNJVSGVtjOUO2glqjBG/BhPDqGRusEA7gAehu4uO5SW1dMX/rMgfNIvfdv8pY6xHe+7NnXekJaHvjsh58o4FAUUxlsdta/6krnrLZ5SpmXyieh3S741Zk7DqytqQ/XiJtay1p91ZRm3XECFbGJQzYDa5cry3bLSX36xVt3dGFEUnpThFzZw6Z0VYfNiYsRPkk2aPx0YTE32T54FNfwn1Ts6bH0P3C1R6qsEWfnU6ywi4xErAr+Aj8I6ZPf0PRXUwV6wYJz4jkVvKYSVWUB2R/ZuEuqXbYD6CDy1aGWxucazb2Dywobjlw+WVHx5euCEkeMOi/JaQ0A2jwtLHHoXKzkf2qaEtkHme5Ppa9y+7UKY+t7jg9Zqa84XAzR4ulYwK3Gzk/WUvmTGAZwzlxvQ/4sa4+w+40bwqVf8+O6SqVgBacAGfoZVjWrulfmEtdWH5cWjtFpyDxQu2/7Oh4Z/b49oqkqyPGrmGpKmWtgUHty31yAhzNTpilVzZPqoNiY4cR+K2STGlYTMmhyrtys4vXfym2l4VOXVGRFnCZDIil0FHHFI3/qOxdevG6Bdt3diyIr30j7kJc1XRsnEGKRvvM5wV+se8WY4U+9KyMViJaoX6TDsfGxbDO6Z4qGAlQV+wzIGl+FA21Ep+629XLr+9vrghyMy4+5iFWciK2LyW0JCW/EUbgkNaR7Ui0clXEdsSmmqPnZ+6HB2bHra/8HxNzesFi8+pyy4sI9yAz4RSn9nC+0wm9RnCTTBocvSA9UzMhpvUSObET1+sPvBNfc0X2+cd3ZDYdxem6c48/6Joy2O2NWc4D7xUaiNv7mlzGgdWxGgukmzmZ2DyPJiB0xMbQvGBSN852fx8o6PTeLhNGw+5QdSKoHzce5MZDr+CcofFf2K6B3HxTYF6TwnDawIkFnr3ovwnwcNQeYRidag8EqhcSyI+bwGmvC0ZxYyCBs3h4RSQ335YS6nlLC1xJ8d137uX2h7nm2jhajzVKSFSlLGjz4t9e8eW7JX+lvo7xEZz4oqJFbhgUTidQUqgR2auiu5slEo5DaiDOxuFkuT5Enaoh8yvea1S3j4qZHlO01FT86AVRU23a6rurC9aEWxuenzl3zbw7tIaEtrKBc8u8M4YF61qWPfZuLkB9T8fP9rfEpJmf+pZY9uZJFyUfryq4rX84tNLS0/MB/kpb1Qv+3mt5zHMAE60CzjVrproZQ+s8nbUuxlEg4+7ijJuCQ03yi6K7+52CcqoX/ZK5mtrymIbwskBG0S8a5nT/NLPtWo88ZkV7cFNfJyzoz57kLfUQmKp/uNkDGm5gP/I7aSZBCnxV0hYwLsoR72Y5wjFizIYVls/3dMtynh2AKicAAv6U9/r4qnsYhjAbwM+RvxIwK9xP1P8R0JHYiXgV/tTCU7p9wu4BNYG0vtPQMVTQEmFO55S+QfgxuKbAt7Tb0KpwFXUqkPl0fcEreFSUZUgkROViFSzxdRj68lVUQa9KuDAzAMuAyWAxEYMY64wtYIChVxJnGn3ayi8vXi8LDoUVBC/aHts57wEGIX2L6ejnNTqDfF6o3HKSKs3BV/sBgVaob9/yk1Bv37J5ZfD5mEv+o4bp1mJDZdwucAVvY/med18RRohNcGFCERxGCUOuOXto3MOEd8tnEOQa/gz+OjEnKH3FCJXvITXOUfHoLgwRi1opJKOATjVCDswhiRXVMJMorLwmYuQwuh6p+6nPceRleOMxtCqSG9bSyfltnnZ+zK7m1Miimd112T6lQaLMt7zmTLLK8I71WOKt3/iyys1xvi75QWzF4donHB/eol35TyNL3BFR6e2PcdnD2sZRqsRwpWA9+KWAW5FY0RFwhyyHm4OHUXTwmESvZzZLUwiUcb7CxVD5hClRb35vDZ6zWUGUMrReWFOD4dfZS4McEo4EnCYicLqkQuc8pVrYS0bPtfg1/6OBw0NDzqWtQcHty+jy62w4kO94vgRrq9tv/rNxUsulGnXVjI+HYfO1cvadUJPQIlsPHoti2SwCf03RRWi9YwdWFs1tKIJzOmWNCmPQhXTGUEnLbfWhNsSW6viwuUWJr6E6VIry2WLaqzNfLW8y8VibpSBQehR9E+pNIzIIWdHhZqY1ae02stWUmlCjU0aUzbJHFcNypQ1wkjztr6e52U8UyLxJPJlDEpC9X6Z1/tfmOFwyCGGxX8idhE0clPQSE8Nv+IRKwm9e9GyJ8HDUHmEUuBdpNWgxIrX4Kz/WYe0LPw/6PEDKAn/b7pkd2nrwSyRTboTPHMK48UEC74pzPph9y102/Ibtx1MfQQHLs3xnpW1bLgUqPRA2QJv75xSXffG9c+lRSKtQD4FeT7hQ5OjUJ/8Au/Q59wfo4F8aSDDB6lo7mhuqrDUSe3l2oQfDWF/zzELIbVvock+8tDJ8LkMCXNKJ7mnCT+ePGTHQcelnvI+74f7tbks4KED/CBIgogaqaaFbGUoP6LQbmPIXwsHM1qLY5yFTjbLZeAYSGB1ctpTfZN1s1lthMQfihbTJ3eIFrR5l6XTQOA+ZjR2b66FykTPd3xsPax2R+bkY/Qa1gsoi9QEgjz0firPDa08NGOk6wehS3Hd9aOo/yF7E+SczO+rVNRtQCydqrOQ91lAzVn7LA+2LT2ltnhlVGNu2fq4hLPbNxedqyjdv8DmRevCotzGlJyXtrcv+cuogNVZE9OScoM8o8ynjN9WnvVCQtDymEleOWnBPhHWE8ZvK83pmAu8UR4ozx/yNnBlGIJzqYQ3Ae9FSuHcuApq5ZOJjiiLlCl+D0RzAiqC9gN8osybdi95p6HuL+r6wk0ni95ZfeiQev2OVStSQxfObC5f+oIoofa17PQjlTXHHY2N39lRfnbR4XWFy9pfDivzz9/YuOjZCZIZ9/fiMnEBeUYDwWaYHrCrrCXEP5UkS4ZcAic98A4xVVo5jgmRbzrQ1dUNabEmIyJIT7TdwKBjLT6xAxlwv4BsFlwqoQWyfcTbo5FmgO+RMaRGAv4j9zoyIH7R3yuyg8zHitqJr49T6ejWisxhG8g7u5vLYuvDXzs2PSLLOP2NDfjPmjBYLtdk4j3PDnxQ7ErXbEKJrjj3tCsOwwyg4kcCCqspg+js6IRRHWBODqnIw+GB5UBgkdDCCORPYdURkRVB3dO97MavD5psMnbajMKUwukT7chc1KQUrPb2WVWAO/v2qibv9J0wO9h5okw20cFTc0XggHrBPWGFHg6HFX1Y/CfmtI4kN3mcZu/8Og/6E3r3okWg799SeYTiGSK5O3kiByQ35mvTNLhqC7Wfc3Pe+d5ptKGhoZGt4/fvcHNEGZqF+XmTJ02anJePtz07QMaj91N9PtDq05OiwAVQ5VHCRQT16GDoEgyjOQ0dTXdgOTtYIGZRB3f0QvOYcaNGWVmPtWu6uHrMWJico8baNV/gjp7aZDXJwsDQwMByktUmUQY3Krcuq6Q4o34ResiNyq/LXFycUbcQPXx2AD2N2pc4ecrkyXMORHASwiHlhHrHV1r/I+8CbiXgV1HXsPgVHKPFuVQikYD34ngqqR/DUD8era2BWw/Ip4KW3HmgzC/1Q2u51hvr3SeYmJmYyFWt17l1qPmDg0onE5ORxnL3TuyDx32UGDYW/gtL/EhzW/Pus/iQMaNHjwmJfwaj01GoFN9rffwGtSmXBNqnY5urrK3cYdTnTUtjfIuLuSoldPQ4amVbrZV/eJuzdMisi5kezBXuEhuPiIxNhxPWhQV5k3ijP302r1RlDCPTMejIP2hH/oIRUCseJT4cxgi4+KbQuyd5uN5XmQNCb+BfwHtx7pPgYfo/Qkod6o8E6tdmES3UMQz7HWjBkFbBlbT8bSmzrMOlmv1siGYvLmtinQwPb+z7wvAwoUL7U+qPed7dGIpzqYSOgPeiGTRzBr8QldBzpFF0lyam0ZmeJcvNhdPkroto9L57paX39nH/vAif8zaEhm7IE9/g3kdll8orLqu5c+xTzY8+6oOVfgO1JT/JVMaJzCwECZqQGuhUEIj7iEkypyJGVQ1doNm/9Khccyuq/7Z569+XV16rSaxNGmUi8/eezz2ZdiN5aVhtlaHRY+5CQUuo3/qlC9cH+a4Xr8mZ6buKO3exu59pXte7a8+PzZ5zJqctzM6sX5znO7PWO1tfv/LpCzmdeRmnlxeeyM85UsiwcG7qJDomOcJMZ2bRDE1J0ixnBT3uMaXLKvE3eEQLADjRpbFTe5ZLCnlQV+DPfeXOpoDQZdcKz6nJrKCnvFEz3GfBAa86aUFleeYycsabGjp/Fj3eXT6/yd8jlhwBo0qVS1hsdsD0jy/pTXIjZ762ZrBom9IDXzcng56/SKe4wbGv1zR9TmrCn/nOnKZ3CRVLrWXa0+GP0G0983HkWNjWglgA7Eo2r5NIJUem5GuSA4LQwiQGSYD9waIkqyPA2OJkKEmWJheXq1xD+aqki80YO9tpAxVJhUe5//TQ4ODQ6S+PUPH1yFDViCMvi0Za8lXJkVJR39sivZEDVUkTUReKYt1HOM8iKaWnM4MYe+AzXHvKY44U5H9LmdRSexwNzq50hj/oX8hfhAJucK0cd4FFgdwbb3JnUTDLvYkYbiOUbLzw2xqrZkl7M3cR+Ta3S5rx12TuLAbapZB5TCVzx9XdmSWPyzs9lyRJrK1hLHMrYktwdvoknkS+eF4Uq79ji1RUfL215EyF6VHzxsLMGk8sRV9wDvrYbZKpGZ7h4vRSbdPhvGw0feuDVX9dnnZ42ZjCuqiVcd9s5e4EpI4x1Hee6jOtsZGc3PV/K/oE+FCRuSAjOxKZVEj5tSnJeLCFXKUAZ1PBG/jUeGCS2Ah4BNZELoGacxhjgwAueoSFx6Uqv2U5EyMi3116ivs6eoLFFeVKjM8oX7CYEI2sTi3riQubsqDEt+qSh+UI9vKm8U6O8hc8pq1ucvB02B0a9vqRpLwX5I5O4zflJ79yNipy7wRv+ZpV02cy2ifARO3A6bD76KFPgOGmzq9rar8+dOibmuqvDxdvj43dXkz/WnSjOT/1oqTTp7mXe3u5l7s7W5Hhm+fRiNaN3M/n3+QetRLrZMGAG7TPHyBSt0RKR7zhnAG3HQXSwosD9+jdf0G/HWDFGOBpLI2APliIEfLBZFIiJUFxB/pXwmKP8LrYObWBp6tuNDa+V+bZvpo7i4+vxTYpzdVB0SXeQbWJq68sWfJGWVzHpRbukNFhGKEWpK6AEdx++zSHkJTyh05yH6wdUng+Hle3328UX5TMWT8nY1Ni3I4ly5cnN4b7VcZFNs5hz4hWf7Rq/dWixpLMNSGrH1jkniwPyVf5lUfFVQcfml0SFb7YW5UXVnYyd+npRXUnHIxG5mzNqLq4BCxRCVK/Rp/pHkmez0Bke0FOUVSgKMtK3PJlT89pZMTZoGk7RXp9osPcB2jaYda4jzMium0AiYJIvWoYicChnM3B6Vm6W+GFSFz11xrxnyTRtREpG2ITN2UEtU45OZc10bQp9FxaovKONoSs+Mwi/1SJf8GsxM0ZWduTpzhY4fuHuSinGeFrThdt/GwF7z01oEcHRkHHpe4z5EkYhaBAnQ2u9qQUN6Wf7UiL2NhTX/vnOrOzNi3qkkNzjSYsXRfVcKu+5v72lLbEuNaUwLK5M+LbLAL3IbPr76AZN4tzT5Zlr2zSnPKZN63u07b1X6w5nLItPXXLXGV6hd/cben8ky6OWk9T8EvoFbxVI2IvawrFY40Ov/r0U4al3C+nfjaNmU35p2uVSql9H2L2obtz8yFtvHzblysiVycUN5Rfb1x1vWLForjV0au+3Dq/LSaxPS2jPTG6PTemKiSwOi6+OjCoxqLwjeUZ+4tG6o05W15yKh80XX52jN7Iov0Zy98oPORXFpNQHxZWnxBT5ocvzC6JiFjs7b04IqJktqD1rwSt07WLWlunZg8Rn85hKNj74Of4TK0HZb9h3VJecnAeKHttdMPt+rovOtL+tD0torVncWD5XNeEjWkpGxPjWixyuyvmr27iur3nzaj/dOP6f65hUdAe7ofrf+au3yzGF9zTK/yTtqTP25YG6gfOWoGzA/9xNNne+XVVzVeHDn1dXfUVRJOYmO3F9C9Ek6Te56LJBmT05gVk1NrK/XzhTe7nDcTjP6e7zBvaPElGowl5RvlztJFGlK9QzD7RShJRnl7fR/KhN0neA7xJkEhO2luB1zbaFtuQ9nK4fhroSZAEkfZJEiNoW+pK2tug3UH769mR9mnov5xe108k7e1wfRu9bmA/2P8raBvS/kVcB2pn/spIUXb/u085QNr6f0J7EIIehT8wA23RJMYJ2rTm3P8DO5HgzAnAv2ScCQJyaK884GmehjuctTTJFUaP3tPPfYVPSKYC7UBHQnsptGW0HWRCtBfPX58KDQcXrKRlNAh95Pk+euxu6QRbcgsJTXnok9hkS4lPFG5JnTh9YpZMlgVvqVsK6zPt4yP04b+IePvMeu6rqZmb8/9RoZgiOS2Z4lr+IG9zpss2VFbP3Z+ZHmjGIguMzYMyPLh/1JfDwJSr68DFZBLxYDGmj4GTCegMLJGKs5JWyywgMVNYSiTwyRgvbciwj4+U6utLI+PtMxoKN6dOnDGtTFKdNTF1M/fVlvJ6NMYjI8gcYxjLLDB9JrKvK9vmkrk570G5qyvqRnnl/8jfnDm1vx85CDoK9uV1hDjaDnkEbfgXAtfXUx1mkOvQlpE26JC047XXsQTZMQPXr9O2PbSBvvY6pc9fRxxpA31yPRpPZO/h98Fqc2kVlSCb2XusJ4+Q+tcFZopoiSgH7ikzJTydh/Zi2i7/gLRvodGiNLYU2hW92ucac0XLRZOgXfkjaV9GP0KFZje0l2vbzFKgZw/tKr4NVTRRCLSrSRvGC4Lr2dCuoe1tqE20lTWCdi1pIwluod8JkKJ1zGZGe8f7oiViMSBljCnzIuERkMUUKe//gCK30HlRmsgKkIr+Xop0Iynw+R4glf0/UuQy3iwqYn0BWT6AIHPg5S1AqgYQ5hvg9mtAqilCRr8HfR4DUgPINsIxngIcdwFSC8guQP7M9IsWim6CDOtZbYX2W7FU/BlUaGcy4ULcB7+jD/Dr5hhSBLBSYSHRPgALb6x04Ggf+iNIpWn1aiCHDnzhdmlsiG+suZlvWMqhxUsPzFXM8yxCs40MnY4GThaLP/goPzh3cbciLSK4Ln5evL+Ku5A92ndqZpxH0jTFFDOL4tdLc1q9PbxGWUVunTd/e1LypnmB6pzJsVztqNFZlZvPqyQSTU3QeGd8ximwLChsiY+jnStuC7HwiHYLSXOJc/fIU1mRrG4fRJKj9GSL5BKsgmUdQDCQi4j1rtG7I+Z6xMR4eERHo0/Zn/pGcBYxKgKoYsi93DZ0VFTO3wslDt173xpxyihfFUO7c9vIvaIblJCHB7k3vv8n9lWIgTIaV+hiOnwqZQyzWpcuqlfmBvmn+C0OnFUcKjkvrrhUvvLCokXZvjFygdW3DNduSZ44oTo5eIHHjIKEuhPpC06WLD8yyzmsYJ4h5yqIAHzkcZXsO6JCng9iSsFswJJCWCXpQ13mlANAAMDbtXwsCZhVHCamfKy4CHz4RWv5ANHxbsPmrUmTgI+gPMJH7avpea8SPiaELpxriK6DKijDJL59DBFmPUQUE9Ckm5mZSiHBZOkzg+QIfxygjjgetcxLuSTpeP0qnPkiWoAiqndzR7jX2hu5H7gPTn6ELpGsGWiY8jTczcgKimG9NyNLqjRr3mKF19Lo4xFl/o213Fdn0Axk3NCOIlDi7mruNW7HgU85nw+Bxn2gsRRoSIEGrJFySC3vo9b7AEsDO55830F4rYY++nwfJalZykyr70Mv7qsOiVnH4zdInzbo8/1/v2p8/3+6alBOP/ovV43q/5tVg2RfXJnUV7yHCWPmES2M1yY55FszJM2hrgU6keiUPvhnJ6wGEvLxcgeRNgUSDRwBsUPPKiw+5bq+qaz6CkXfuo5UNxZZBa1Vu1Wl6+vZNi1rPJVaeK4ia8Vogz0BvmHR9gld/czRI1zvGzk5l9CYs7EdlXaTXTYd2pNdofKqSI5X+7gu5cqqvkHJ9z5E8d/VNn7B3d9eeOdU8bhwH9/s1Z9vaLpVHeyUqCn2Ssn964s1X50tXniF+/z0n7jP38mzdzRoMXeywWHRu8sr16jmbEhMOzCfRP2PYW1bT9e6QLr2ZUHblLaDaPs+tJfSdjBtV0Nbn7ZDaLsN2t/Tdqhw/SPaDqPtqv45Ul9JHZYiiNDMZwwmNW7RdxDTRpPcUmYuY+XmsHGmLwUrg5dCKqcvBBfxXwK5loBtAX+3+bvXJzafwCekDtwWcM9a2+RikdqLa0E7uQVo51a0eDv9BK/tXPtWbgGegRaTHRmsE0mQd01kZj53EmkCzuasgqKk7nmkCVkipMMd4+H7NUWRvg3lq8bburjYTWopb/UMLKqpLg7x2lj1wkQ7Fxcb+dqqFf4xxdWVl0tLL1dWvFNW9o7FdAflypom1ewSZFAS4rWpZuOUsdOmjZv2Qs3mWUEl3C8lPsq1NY0eDtMP1N+qX3GrtvbWCvhAZodL/zjcLRnFsNBAcoS7uXGd6DPJqCd6kscEknDj0IvSk8JTDy/ulp78ZbF+O4mbF7mHaCFdN6S0Nig3hx4XX4L/0AuaOZKvNfPw4SFjiJECYWM6xmeSx0/0SJSAvMYev09HsJQpWXtNCX6/sxOuMHiiiBm8ImL6mMErejpX9JjH/BXEIDO2gW0nqxFyeH59xr5z25OS2ufO25SUtAmZDXyaByjNpyGbsmc9wafm0lyKgQyDoe15A209bTuFtGGkl9gG0UTwuVTwuW3A1T52J/oz1QdZCdl9u9bNZXdilebqMNfmXt8lXLsB1zbTa3T1fWh1yUp7DUaFa/gh2amjHFqXzUGJNI8Ceqw7xbMonoWWDsGzKZ7N45VcB2vM/JXm/nefcvRK6FOOXtmB9jAfAEKu9AM/eewZlDvIa55bTw17Bo/W/BN6wzXWidIvoPQL0CVKv4HrQJ38fuUzoI9oVnEMIbLjEuuu3c5kwYPXCPoXXnA39JWEI0T2MgxDdi44mlIvFO2i1Ckt0SSsvS4lf9mJBGfeQ8fEIuxM8Y+1V0Qsz08P3etQfuiVMdp7sDc6xkZg2heHA6e5YPvLIl9GzDCOCBwUoUfcErTpOleO1rWhu+guN4GbAP1iod9xbT8V7ReL1nHl19EmbonQjXAL9ETzoJ8TWka5XYa2UiliAQ+ieAnFSwgOdI9Blp4hytGupciS/H+MPaHxwFewXh269zZ3zIg7don0/A567tb2REhJ/xft7ovFVzQe7Amsx42/hOKNUPzb3HgyP+9Dtr+ILeXnJylrwOs+29xXyTbj9zo7uWiYMkD1MuwCmkFXhiA/Kaqaar+djuO4EtT6EqzpJblo8170Ale8lysi/gq7hGq8W5iX1X3JePeRI+QK7BfqRPaUEkLOCIGerBESGXB7uD1qlEP/oBw1twflLBWa5dxuNL+cdAGzAo1QUbUohGaUo7UjIB3/0c0Dycjopio6WqWKilLx73jXyy9rjkSr3KOi3FXR+JcoD/foaHePKKKR60wQ8JfNGNJsVZBUbko0cx2tfgmt4mpf4mpAme1dyJn7qIv7GDlpTnV1ET11wu7mEGtET5xomZiv0SoVVnQBd6ZR3LoLJ6wJD6+KU/o6+YQcxIlN4ZE1Ue6znTwjETpTszXAJ8TFKSW5emuAX8A0x/hM4hnHYA+UIRZjsiti6E7lO0B2U6ScR+7DrmiRyAqQCh65zPSD3d4BpBKQnSRaQMyqZn0BWc73uYHMQeK3AKkaQJhvQL9fA1LNI9eZe9DnMSA1JJIB0omngKRdgNQCsgtk/wzNEo3HXxHfR9RH2GrNAjYQzUIj93LxAIKHp7DgTsQrZCSOd/al0Fgdz7qwpeIXqQ/SX3+Rs/Fo6l/Q1Fc/GnGHdcFlmvXoDjcRepbgFrZN+911ZC52dnRUiSEcOlqLxVJHc/T6CO7nUGTLPQhFRiPajJBhKPcA2YZyj4xwC/J+pa69veEV5M1dfqWhvb3uFe4yEKEayhPdJBQdf0MRBxtwb0WjZO7lWORlsMcAzYrlXkbJ0dwlg37UcH3t8VPNf0X13Mr3m08dX/set4IRMbkoRfQD7FhMaRVQpc1r3bRf77DQPg/NL+WwkqvIQ/b876WQ5R7xD4Djlytv7ktN3XezcvnNfSkp+24ur7pSUXGlavnVioqrjzJKK5GJQ7RqjI1DMfdKkY3Kw2oxSoHeP9Cb6NuGiis/wy3kz7HTp/EoxwjPWRMdLT5AI6dlyYkFuvq/knSJvwIuFfSXg4b5vqHCVdja/CYtxRKRM60DumBt8dUeY0b9TkXB8VLjEyMbE0MrQ+FfYtnIEyOKDhdUvKNGXXu5r29VVNxCVnv3Iivyift6b/Wdg2lpB+9U8+/4YeXb6nnbs8OzQirDQitCMiOyd8wre1tTOeQ2SuqYcCP/TvaL7FlRI33S0wJkYskjh7A+wRsLUxgmMHxI2JupfvFgWfZuTfEBdOgAexYt5LbhUdxytEbzEBVw29HbiYmcF4kFK1lvVi7+O60+Ds0Vfvtw1a30jrS0jvS07amp29MUia6uiQq3Oa6uc1jvlI609B2pqTvS0zpSthI4UaFIdIMuMEYAXsNOFH/NyBlXYQy6jaR1gOe/GcQPqoSzNjomKpmzNi5/T2Ls/Glzk5LzLfaPK90UqawsDOzUt1kZFl6gMkrMsItZlI3XzCqJz8ybqq9vONpOFBgZNMU5Mn2SzeySFM3NUteEJuWc6YsMzQxFBjN9PL2Bp2jczLYCT/+Z3N/XvpGf/0Zt7bkC+K5pQqHSrSghvlCpLMTNxZdWrLpcVHR51YrLRRtjVsXErI6Ff/ABxpiLH6IRUmu+KgBRVjdq5+yPgejpNF6pxA/ZUX0P2Vr38XJ4gtzJjexf8UP8qUSPWBiySeGZKeGR0v69HRLbsrhlG/cmhYSki25zZuyoBp/w9nrNj+jnqHlpA+d69vx3H+E+YWsFQWt+d+LeeyUl9/aiy+IpfX1VH65puln91IWhO7UbIjOY2z5MLBDRfXoKPjq6YGo6FSUlPDxPdWQttsfa+o/23dzKnb/JSaLtgBUlB+Zb7bdZuDi9xDXUgXvgm630yAtmAwLf7Xzx5OTtDml5WYtcw+TI1j9TMSvfn53ubZ9zzHhsStBYr6nc/XGJPvY+07kb4euzJ6UWxsWowt3MDzrllXt5L4sUiWeWxLQeOrBtYnZ+Upgyws2y0zm/xHP2klCJdHz0XNeMdRG4xcwm3n9isLfNQfMxCX4TQnzHEC3NZ1einyTHhPM1qVKFfjqq98n7kmN9t3DHiu01tObKrmTtJH9ixtDcZKCAZSnnjQnOSk5jy1HidN+xGUEh8zrPtG17zcI9L74DvcaurEYjnDyV9u6zZ7uXrG0skAVEpnktka4HuvlsJesGdGltQDiTEB7zosM8f5ymdVDUk7MvE5/Ai8Ki5xemRUZG5SYFBs/Hh1FqR0b2pti8hMKS9BfZSs+FwRMUPtNm+FR7T586UzU1eJGXd4FfYKqhZEROVFCRN4M4yItZG22WK0MKaIuYl/oY8Q2tN0T3/4ovsUrIFKyfz1+deeboFG3efuDFbdte3N8RGRERCS/9m9d6bt+52nNrTduate0vNDdvJDqMgD+n2SnPafr0fv23XmSngKYPbtlXS+0Bw7bBiLba7zO6D9G0REI1vQiZKGdFTHP13bm3tGrruJTkRSi4CDnPnOMyzc19RnHt6nTHuMqsMoM1JK8FGS4AxSlUgv9Yx2hjwuoY8YvSuOmesaFRiYmqoJkzJs8V7RDFr4ycU+oV5pOUcER/WvIsm3EzXdyC6ma7TVE6yb3T3HwXqIIzjA0M8qPnrwYNpoI8PSA1PaFU8SeUlnIlnFCylqko8Mr8+TtYw6u1K7CL5k5TbW0ThOoDhgz99vwjfATudBjKN7DrTM8mpYrBkIVWRS0PZneKgibPik0KMPEa1eqJ/sydGy01DnGEx9eimgxVGV4OkyO9feaI8ThUtebMiFHBVVHR1aEDdj4POrLXPjNJp7nuWsnHH13Lk3qVFdrosiTXN2XbvMiqGMO9I/0VEVmG8jzfYHXwwZbZc2J9nfwmi6XJ+mPidq/Y+laaV56fo2ttjdIjsDKm/NCqpNleSY6znT1ziLQhwEY9SKtz+lgHSUkJ9uAO452GTS2aLIalfJ4BPscCn6r/5PRRcFJzXYddmbY+akLIFM+A0Nq42LrQQI9JwZNj1qcGRsR7z44LD3YL8ld5+AXoQwyakeiprz9ygdfsHI+ZOT7euSPhEeZEV//8WbU+bh5BQR5uPmjRLFfXmTNdXWdRPf4CepzJjGOmDj1lHCxu8T9xwAKsch9gqSKqKtpwn7Gfm2vUFAPHAp/g8uCY9SkTCxcEpGxOmuI/gRXPCfRNiDbwWujv5OaxNEHpFbQ8OmFVOItso3ev3n4pDW2eHChXZif7eCcRfS5nGvA+3EX3IPQ3DxWWxPFQ1K1bDTdvNtxZfvfu8jvEy1As7kC3BnYxuEPzCbq1mnhuE3Mdb8Zxz++bmrCxphcboxv19VxfQwMZqbH/VXScPUHXOGILBSnTaT2n0TloSrtvpJ3PjPawGPRC8pVzAWu4T8sCWg4XlT8i93rBvXnae61JVIUqLTWd1MvNe3SEX/uUwAlRETFLX1rrW4Zka/zPXZlb9qiSntz/guYy14l01jpR6dups2dPhZcB/QsvMkYe9zmKZzqFfXzIoVpA3uFmQYYfjXfjS+JPsBTtAP/rBCQCdyI40QRkJ4/Mx524jfbZxSO5cNcFiuzmkVTo00Pv2sMjarwTH6HIXh4hY52nd+3jkRC4q5722a/T5wztc0BAdsFdnwLyIo8sZ53wPnE0IAcHxmJ/wR2iKkAO8UgTq4Y90K+AdPJII05GxyVJgBzmES9A8ijSRRCiVdyA5rJziVbNh9EqbhDUClpF61E8G6urVUCoVkmkl+TBmuKs1SG8d+Aoutffxd5mGL6HxbA99rDhtEcu9ABNwJXdQo8f+B7fwbuYedD/heSR+Gu6C5nBzGYC+DxOCAQDIYCf9+CU/+46rcsZZq4KCFyVkbXCP2BFZqSPV3SE32yRBQ+u9BsE+0bStZKdnbAuPjp+bULCWnhbl7BqYUC0/6JF/tEBC/tkv3spjyyxIGeX6AekkViRb6JRubdC+xvavkrayEJsyXZKsPBMc54Y44f0+k+0fV8sYyeIH0H7Gm3fEgdhTnwT2j20PUl0CHtIdkH7Z9reyWWgJ8x0aP8CWkTC+Lwdu+DLHICQr2UggRe4hliFOUp+62oLf5FBwkgDkYPT3BbfbG1lkMCTtXZnSJdX7VM0dLslkeBmx5DZSnNbG1zHxsQ6+3sqbWxsxdVsglhmI7NxtUspt5XZOk3OKGG0vziAyvrD6PPkDH3eFiSTHBCPor8dhJC1lB6d0C+HwaJIH9umz+5Zs0kaNW5R31Ss8nOUjZNNTJgows84eJONM7N0yU13volb4PoNxVI3e1upWKrfqa8nlhibOCYkON3QjqN/9n8aR2r7+MF/MU7/Uwu12J7RA7eGcRBQR2yaZjFuV3NuZku/a0PvSnA7aSk7OSWjvQM4s2dGDN4htda97b5U73Fcarr06OMnyI6/+YvO1PRO7gu4HzGgwbu8ZM6wEyM/GwHi0R8vHfhVNmdnFRJFqm86p+dOszAbN3ZSwqRnnAjD27hxMkf/lW431UQop4QERxNjiVgPpALZbO3dlipuqDVq7Sj6P/wHo0hztaOYm9NRHj+Q2v43o4D2Xua154yANlIhs1Fq9O53bWZLOTc1bpeo0bVOdE2tWcxo+4PsRHd8f5Wz9iZRqBqN6TMRbUlPfbaQ/ZH7Qo3bJCXIrjM9tRPZDd4NMg1ztzRDjeweP5EeTU99HCfV4+7DwEPvZnp4jah+61HPaQTpquuPXU1c9byuNOrnlPm06Q/8UFeV8L+umn8zE0a4/9/yrXfxD/n+1ff/n2/M9AjWMtfaC0npdAF7OUqtwXbUak+PUAPReSNOopZ7PDo1XbIvPZVYkPuihJ9AtFtqanp6qpY26OQPaBscBNq/5g3S1ttFaf/8YWq6/oM/oE31Lb4Pa5sdqRYiqfPgbyPSn32kGiabzp4/CCxshlapbiv9QeXjyPT9VmQBb2PHmVlMI1rVRpKHMNINMpI+Vlk/95uMFtTKxKIq8X2tohXL3OxthGnIj4TVv4mzFs++hbdxMnMLaj+I4yBTOkTtMixBN5h0bVv/LG3f5NvJEAWroX1roA3XSftD0kYM3H+X9r890AbbkvYdbRvuf5n2vzvQhv6k/dFAG/qT9sda+sL9nwy0wZ6kfU/bFvr/baAN10n770w6g0ltRpxP6is0vpHam2K43xQmpXW8j5t27tywvyyMWjg13rUD7/rNDwxzRjtg1IHfEx38ZdDrmisMFvICujPXPRmQ6Xxmp88IDp4xIyiIm8R/EFvStxm0Sd8ZxFSJLVGZhB2a9/2qCA9XuIWHk3tcg4JcSV8h/9CDUeVKeNLFUu6MrF/95pVvT7WKsT4y5B7pH2ewkHfA6cWw9bXBzdiM0MqQkMrQsIqQkIowZViY0i0sTHQosCQ4eFlg4LLg4JLAunA3wNzc6CkVJCD7YPwRZHyyfQK1A1WJFAU3hxiOsFi/3idmvP5o0Q9rLczLZTMjJzFIyHlMQT7h90cU/K+L7NT+uIh95uAvhzxo0v6YNIYcZyLmpPPpHohmOSrIkUimcx3yJPGZ1tbtyIL7lmFYZCF6wnZCT2KP0b9vEZJj/dYqCSTrejLUMiiJEudpSx79O9qEv9/SRic1t4ehTTZv/znXkP39lnI0pIO/zzVzUDyRdZdO1j3Bcvwd+kSj6Nuh9Il+1wwlT0/0xBJ2AnBNeR4+w0Sg59/NMrm/EetJnk81URjlGzxXIsYe0qf/iedqfVb71y0slHiuRBxYEhS8LCBgWXAQeG6Y1nPDQAtvANfRoA9rRs5M+z2+zX9HQ78ri2So1n4jl8dvVMhrUPLojzRoDvb63VEDNbd/M86/wKMQU8d+gl6SjGYMyFxz035xw9Kybkq8R5mLkv3kdf+NjTOigrannoO+KdgVWYoThKcqLM+JE/o+ZWXMsDMPfJD4yU3wusGZ9/8AXjbnngAAAHjaY2BkYGBgYXDavaFfIJ7f5isDMwcDCDwqa58Apef+Ev+bI7KK4y6Qy8zABBIFAGF7DQl42mNgZGBgP/BPiIFBtOSX+PcMkVUcDKiAiRkAi7MFnXjardMDtORKFAXQU+q8b9u2bYxt27afx7Zt27Zt27Y9J+ruMbPWrqqLODH/iqR6GGBq48d7ZZ0MMX9ilGMdIoPmMCa99D6M5z7nEBl0grFHfmy7uoCWcv2EF6+gY3SFcUlqr5ujoMmLUT5dJ8T6PSRg3cLbiHxYEY/zut/kucmODa8z6H1UDPoc+R2nMOqBhL+LHTczlfCbozTXdxKBSJ+ORfZ7YWUJ0XvQJagFigbt8Qy4O3kGL+p9XPsmoovr6lBxDNHURRy7OozW0HEvHke7uE7v9cQx3mPTBdHFZ/fKbe5MMZZEF5+ecAuLUDRMhvD4xpp1lXPo/osqhS6eGP0bSgYd4bfaBS+6ri4O3R8N8+ZbicPPvkAjJL6Rzo3/HKzfUQnE+szL6Kf7o6j9DTrvqTDe1jtR2mTit/AkItV/yKu3o4M+jhjzBarqqYjXZxCp6yK/PsmZa/MtmtB2mkxtqBqNoLY0htrZa++fbBampHoXV6kspXdn8b473zpvvhWpXZhKU2gVjaKZYaa65xaBe+vDHF4LbOYTfn+p0M2mX0F6KiwPYgPlpR0UpYqhGUVZExB5p5p5Du+bRagqd+Br2V8E5GeYZq/VEDTTACJIxwvcGMuX0c1RGCvUBKqDbo7cqCqO0DwUVg14XakRT90CB9ib2lPczakXUJDS8t0WpLQmBYbQYdpBM2lFmCXU5x57tqk+gJqN9FqivPmMfRlR0ErL72gn31Vv1FDdkUBtQmrRGllVFL+fFSitGyFSlkEBVZ/vsjmKiPpXyqpnkVq+gRTyOPNP8XrfQw55ARXVk8zPQRJlkNpeq9dQjfWK6nXUEQdRm/4U6xBPhR/FMQJzkSJQAimsp3kfG7FHtkY/aqMniBdVahTWj2OHWoFVMj8+lx+hI4B+1IZW0Q5xlPf2L2DTAERFOJvVAwsen4AFL1V0Z6uHwOMTBF6qKOCv7fzTYN2bA4NcD7Kv2Y4XdTxGuWcXLwKIpML0ORWkjrRKDxMv6gnEmffVSwM77B7Ok2gH7zFWlEB2u/caNMoFlQB42gzBA5DYQAAAwDNzSG3bHdS2bdu2bdu2bdu2bdt97AIA2kSfAhaANWAHOAIugDvgBfgCIqCC2WF+WBqOgFPgOZQUZUTVUCPUEw1FE9FctBJtRQfRWXQTPUUfMcFFcUVcF3fBA/AYPAsvw5vwPnwKX8OP8Dv8ixCSnJQgVUgD0p70JsPJNfKIvKNJaUaakxalFelIOpUupP+YYLFYMpaJ5WLFWCVWj7Vi3dggNo595ql4GV6Dz+Hn+C3+TGQReUQJUUs0E6PFdLFYrBe7xXFxWdwXr8V3CaWR8WVqWUJWkQ3kCrlFHpBn5A0VQyVRRVQFVUe1UF3UADVGzVBH1AV1R2fSuXQxXVHX1S11Vz1Aj9HTg1hBsiBT0DLoGmwMXpk8poQZbMabc+ameWo+mr+W2Rg2iU1vK9kFdo3dbu/al/arjXDKxXEpXBaX2xV3lV0919b1dBPdHLfDHXEX3D33yn3zwBf0ZX1N39+P8tP8Ir/OP/Jv/Y+wUlgvbBV2CweGY8OZYVRT8ADtOgwAAPTb/6nammxNmq1t0jXtt23btm3btm3btm3btnn47v0W1zBubtzKuKdCCkEUkFBfaC10FzYLN4WnwkfRL4ZEV2wkthN7icPEieJccaV4UrwiPpAsKaOUVyopVZVGSJOlo9IF6Y70XPosJ5KjZL+cTs4lF5M7yseVTMowZYvyw1fWN9g33XfCL/kz+tv4d/hPq0ztoq5SD6mn1EvqLfWR+kr9pP4CSUEUkIEOXJATFAQlwRhwGlwGt8Fj8Bp8Br9hMhgFFYigBT2YFeaFRWFZWBXWhU1hO9gdDoAj4SQ4Gy6Ba+E2uB8e/z+QI1At0CWwI/AniIMFgpWCTYLLg8+0llpHrac2UBupTdRmaou02ygbKoaqoBaoOxqCJqJ5aDc6jE6jy+gOeoV+4JRYwhg7ODsugMvhWrgx7olH4ql4EV6Pd+Az+AF+g3/oMbqp59Ar6HX1/vpa/Yz+kyQlUUQhiFCSnuQgBUkpUps0J33IUnI2FAqNCW0OPQ2nDzcM9wsvCO82MhvFjE7GZuOQ8cL4bZpmY3OAuc38bqW1alnzrc3WAeuK9YnGUpNmorlpEVqWVqP1aQvakfaig+kYOpXOo8vpBrqTnqd36TuWiAmsM+vNBrPRbDKbzRaz1WwzO8gusLt2cjsm3oJ2V3ucvc5+GFEibqR0pFXkmBN2Kjj9nM3OC+eD84Mn5qm5wAEn3OYZeA5egJfgFfhgPv7frfw0v+9GuZZbyK3uDnU3uQ+8GC+P18Jb5932PqZLlE75C50gLz0AeNpjYGRgYGJmaGHgYShgYAfxEADEBwAYnAEXAHjadJADboVBFIW/2rb/sLatoDbi1M/220SxhK6m6+hKejKZus3ouzozc4EKnskjJ78EeMjps5xDaY5jOZfKnFrLeYzwajmfVl4sFzDFk+VC+dOWK+Vfw3BODuVMWZ6hmU7LsxTTaHlFOaWWV0VwRIgAlwTZJK7Tj4drRpkgLHvf7PKYiMOxOMst59yKXLgV1dIIE2OOYY2Q+JYgd6IgcasoDzHtQ/JGVblpYrfiQY64lSehzEvZZ8Ybw2PqHSZUM6IxyryyPMRVMWXGBNNcK3Kl8ann/ND7Wn/EMbta8//f/8P6zFs3P8uI7M9xGDO6U6ITeW5xPvPFB9pDeGVdm+xVEqZfIfM/h56fvbP/cyvviiHelgyOG32QaiBdDGRlwk3XBADlTVc3eNpswQOMGAAAwMB2tm3btm3btm3btm3zbRuxscyxppi7IwcA/LnFIf4jR05AajGDJzwmlmhmmsOc5jI3x8xjXmqbjzrM4jd1zU894plNDHEWsKCFLGwRi1KfBhazOA0tYUkakWQpkkkg0dKWsazlaEwTy1uBpla0Es2sbBWaM8eqVrM6LZjLU46TTgqp1rCmtaxtHetaz/o2sCHPaGkjWtHaxjahjU1tRlub044sMshkni1saStb28a2trO9HWhvRzvRwc52savd6Gh3OvGFj/awp73sbR8629d+9GI+C1lkfxY4wIEsYTHXHORgejuE7/RhKX/o61D6sZLlLGOFwxzuCEfSnwGOcjQDHeNYBpHNWsexmlWscbwTnOgkJzOYIU5xKkOd5nRnMMyZzmI465ztHOcygk1s5jobWM9G5znfBS7kOSNdxChGu9gljHGpy9jPWJe7gnFsd6Wr2MoWtrnaNa5lvOtczwQ3uNFNbmaiW5jEB7661W1ud4c7mewud/ONz+RlF2fY7R5KUorSlKEs5ShPBSpSyb3uc78HPOghD3vEox7zuCc86SlPe8aznvO8F7zoJS97xate87o3vOktb3vHu97zvg986CMf+8SnPvO5L3zpK1/7xre+8z35ycVNanCDghSiC92YwjRq+sGPBhhokMGGkIdASjCVT3SlGC94yV5DDTPcCN7wlgLk5hWviSTCSKMoSnEeUtloqhBOEMHc5wFVqU41ivCDn7zjJNONMdY4400w0SSTTeEWPehOYVM5wEEOsZPLXDHNdPaxxwwzzSLgH0FwbYBAAAAB7NKxF/PBeLi7O49Loq6hqaWto6unb2BoZGxiamZuYWllbWNrZ+/g6OTs4qpwc88l1xQppZJyqmmkmVa66Xl4enn7/AmCCwMGYQAAYG2Yu7u7y/8X8QSQhCRmMRdEJErKKqpq6hqaWto6unr6BoZGxiamZuYWllbWIbWxtbN3cHRydnF1c/fw9PL28fXzL8qsri1XcSC4EZw98Td8MJlHp805775hoxnrDCAvYdLXX9QqsPB9qurg7lK3xIy5yuJDIXKzzrm13O4kLncrC2gr/842V7v4UFdM+S0XuDF3+D3ZSxfoK1yHwBVwo+p9hTzbAra2D9wZ31Y8TZj5rV5+EwJRzrGAtvGDps7xgTiNaxs/URjNQ7h982ft8La9Am4QbxFlPAtoQ8UGuBv/XKZxedQkeK7xm26ujN8107eBG+NPdcw/e1vwgAFwrdKDEIjj71ygD/8GuDP+fiziZ2b8TU2HfyecFazkpYqHIVBtw27G9y/lK/dXLtAHhsZ/mvgI4ldLoGPGuvpdYzP9rnjArcn0Za4j4Bq4xXqQby+BrR0YXA2L9+5EBFxPgIvDITvhZAFuwhLofJEmojJSTV+X8xXW7Ri5flsiuANT9PpugV+NxUfb94xCN9dGqW/fAaJCFBg1HYwaWuvmvHqjnQeEzmAL/Gr40u7VeFH7ftHahBFwi1k4xpu+ZQ8YACPjXd+y88WuLoT5zgqxqB4MkTMJ1Yu0BtWxYNI2H0RdEPJnipf8VcZL9sxySRh/PFYyIedUYHAQWRY3ZHhiBReJcqVCJk8VOcSlzJyULONtaHKKC5an7KGSeWQUqDzZN6NmbYiMNjST1hOrEJzDbMPX56LoeaNVhusa5bUk8vSSbvVG8N3B10scHt9OR5rMDAwBM2Vl2eDosWBxxQqa3f91nMrYKa1L6ch4TmSc1WnFT+mbrJjwZ57QwGRamzKNywNXz0X+IC6bmrx8kmnUCW3naNfaU9WTLFTsQqo0rKtOAhwz6IB53YnpxqYpaot0suAYlKf4IMmIXsLKkoX7W5pfrOjqcvTXH8191l/h/GJ/ZqxwjI0QZ3kSl0fw7Mz3dZoylf/lqeAZGyei3qeM+Oh8gYfdlCf6iEfn+Q674Y7Oc5r2xjrWZjrrD3R+Mc1pb5QGX+R1Vhg5wUC+3bI+lQP5eiUZ0fslOqQHnuQiozRJKE0SpEk6lA8djD8jTz52ylPPnah68JSYcxSkoxLDUYnSKIhqK5amtmKyx/hU0K/o+0GUlHcHJELKJYFySUk5MVJOjJRLAuVESTlRUk6MlBODcqKknKimXJqacrKhnDiUU1X6zjb2fkgfZMnoG+1Y7pB2Kj2DRFR7looXE49Bom1ZNjACrodxUYgXKYI8wVfeTBo/iPxxJSM23OGIEkkeXP5cWlrqlFKSfapnRarDXlRHeIJJm6c5VyY569NQBcVLPuukqbcAfWTc9kXqCSHueCdXD/pk3F0IJ+eNpr7/o4iMWXcOPRaQca2fSA+vyPjih2YdmPgWywqBAdAGrqZHIZ7ivdBXa1PWcrtx79q/2t01WKSH+9ap/vTD26Wqe4JUldKG4J3SxaGSjTWCkkV9uKPARfYNOXu9SKa9XtOxrWBJ/0aNlGa/iX8AxwUEnwAA"),weight:400,style:"normal"},{name:"Inter",data:J61("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"),weight:600,style:"normal"},{name:"Inter",data:J61("d09GRgABAAAAAHpYAA8AAAABCZQAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAAI8AAADQKTIpVUdQT1MAAAHoAAAZbQAAV/As979mR1NVQgAAG1gAABGDAAAq6hQX4jNPUy8yAAAs3AAAAFcAAABgdG/yzlNUQVQAAC00AAAASgAAAFpX00BdY21hcAAALYAAAAHqAAACtqzmgtBnYXNwAAAvbAAAAAgAAAAIAAAAEGdseWYAAC90AAA7PAAAYjwfmOWOaGVhZAAAarAAAAA0AAAANjJlWqFoaGVhAABq5AAAACAAAAAkFiATgmhtdHgAAGsEAAADGQAACAzZOdlCbG9jYQAAbiAAAAPMAAAECPMUC41tYXhwAABx7AAAABsAAAAgAh4A9m5hbWUAAHIIAAABJAAAAlA0FF+HcG9zdAAAcywAAAcpAAAQUksrMPx42iXGAQbCAACF4fevCswCIFFQRylQZ1tBmTrBNCTADMCqAZAgnaAMgyg9erzPLxQo0n+Zu+/HQisd7FFXe9PdPvS2H30FAYFt07EhoY3o2SEjO2Zip8zsnIWNWdo1G5uQ2C07m5LaPZnNyW1BYUsqtXjyEtTU7oZGLaFA0sAPhbqUnDhzoaYRguoHfCMjtwB42oSVA5hcWRCF6+rNfKO1bds2Y9u2emcVrb09MdaKbdu2bduY7KkTO/9Xf5+uurc6mtdiRCRJckpj8W++nTWvPF3m49pV5f4KtctVkfurlopVl+vFC34dOSIOLxY+9p53T86McFalXO3q8ix9b7VStavIrdWqVKuCLYIT4ZQNEW/IMcuxDejfdnNSLClrNEXySxpOXYp+EspEbeRRuKKkSHBt5Ga5Vi5HNrZedAPsomQxZkRYD8+J7tBPM+PMeDPBTDTb+YlGEnG/ZGgD3y4pJik0DT+Hb8PnCnJdlJIeaobKoSwoDgqG3CBreJu8Gp5HJuHJ8HC4N9webgxXg0tDUvAhyWeSfX4H3if5TX6NX4Za4GehpvhxqBF+kO8DRvhuvoP/F/6dtEQ6BfYbh7L+R6SvfUPUJz6Gqg4q+tKkqM/vc+LdKYSr/fuoN/3L4Fm8Pu4f9Hf7W/31/kr4bpDmE731ie6Q2wO26StqA2qVW+LmuRluEhgDhrkBoJfr4tqRv10v8Ktr7jLc9+5LVx985GpH2V1VV96VJIXxDh04r9MCfH3Xve7ejZ52L7qn3dN4HeMedffrZ5A7kTTf7K51l7sUF6HEHkDtAlvsOrvCLrJzyDS7Dkywo1BDbD/bAwyxnWwb+6dtbZvan1F/gm/t57au/dx/YtNtTVvZf23Loorbgja3zWrftq/a5+2T9mF7r73d3mhv94n2ajF2s79BTGjsXhRjMsIMuD79G53Bfn36N3pV1A+eR+8Oq+A5attUz9vm9Fd0DzoWboTfie5Q++Jw1SgZrhLWq7UP36DmNDcyrNmVwxRGB+a0Au+WZ66PDTA3NNA+8g1qnZo3E+5Sh4rovIYzMPvjkWFu+JIeiA7MHOPOD7gtxm31OK2vHdcGGeaeqxNaqMMMer2am6/Rk8g30HfClyXE1XrSpuMkjJMw93SPLkUuz08sxyn/1PANav6uLgvXwjH0YXYOaMc1QQfGLZj97NyTDR0YG9R3qDntiN8zzN/JloQG8KaEYnScbqHmdCc6sGZ/t2a4hZrTw7y7hXe3HstxuoWaZzrRf6ADM7dAhpnjmsMoze4q7FG3gK/GNs1xNaep7Kehj8xOP3RgzeYmZJg75yPDPPMzp7fqZnM77mpuQcfVPH8IGdaM/cVofhantel6/NPVxVQdp1uoOS2udpejA7MTV4cXtQMXU7N/ABnm3YPYqTmuxtTKlagMEWksPSQuvWSydJOpMlcmyHxZIjNlmRxAOiyZsstYY2WP8SbIXpNiUmS/STOXyAGTYRrJIdPCtJRM0xqI+dX8ZozpCJzpbLrgziAQmSEgwWwxW02iRCLyLOpx1IOou1G3oq4XY+7k/5l6tFWbEfQc+mq1RCe/dczuk987rqaL4LKSIpvsrnOyBawDK87JiWcfmXAORpEhpB/pcYJOF6UN6k/SmjQFP1+AaeTbE3wO6p5BOql5DiqDsqT4WeDpTLKSt88JntzkyWM8THiDlD0n91o+6cnV5FKSdBZeMZkn2Gf22X6nY3YotrXZZNaYZWaB1f8VC0T0W8D+Bk9T25gMgd8WgXOrXSnm8vTXavMX8xvM16jdrswKmtWuDftXqW1xtSzKLIDOtezUo9Mz86JTg7kcHaNb0W/Rbeit9M4jh/XZxbyF7kT/Q3dTh1FqdxWdSvfjtBQ9X21uZj7EaRI7t7BTl/6Jbkwf+J/5eoCRIwzDOP6fvdq2bVthbYa9OKkbXZzUthXVtm3btu023Kfpl+zkMJPbL3eL3xqjV5kBAuQnQB6gAAXJTVEakZcm9KU2A5hGV2YxmzHMZT7jWMQOJpreX2F6/5Dp/dOm9y+a3n9jevzd/87lAw6QDcepCjg4ziUCoe6jAFmABEqZm0OCM8QZ6gzDcc4H3xOgAAlF/hTJQz4gkH88WaBQowI9qE09POk0vvQNl34DaBXJ6AyAbuFD07GgJCJGW7FXFTu1CYNWYkGjiSmtAVA7NSUZddMpktFidXTfX09RHYYu4dJBLQYdBG0AUH0lBn/rutoBaLBGJ/vnQdAiLcXQSAwl6jmAOugNBiWIOrUGWdWzOrhLpoTmaTqApmt68K9X7rUSzBb7gJL03rfGzatGQ/AJaaiT++5uZteZ1pjto4OEQb8xtCWcTlW1UMy0zXu/NTrcnHnRTd3VaAC98TwC97tQ5DWOdOlx8L39FLCfSvpNhOggEedbkbvxh16TIdodT1HRbS123//w3l480ikttq9mXSIZ3bOuDwv6kF4GtQ9PWq0dkewv/SYuqU8Y51FuzjU6eTS12H32jLlGY0EFiYbmRIBN9nWGFLSMeNQIQ5WDT/Ck6ZGcVRqFlwKkNcJ3ypd1K9jWQL9prIMgQjHRYlx6BpriVfVyI6iXhNQgLFqNoS+go3jQZ4/rt2L+3WytABmiZ0SQvhBPAlTk6T8m7AFIkiwI4/j3r+7pqZ61be8Za9u2NVjbNgdr23Zoz3fhONu2Gb59l5Ghixf5kOX6dZesyN/zISKlBGmKKaYOdVSMetRTcRrQQCVoTGOVpBltVYrO9FEl+tFPdRjAANVlKMNUjxGMVAPGMFaNmECemjCdWXqcOSxUc5awSm1Zy2Z1YRtF6s1e9moQ+zmswRzlqEZwnOMaySlOaRRnOKPRXOKyxnCVqxrHHe5oPPd4ShN4k3c0iS/4WjmKNNCPpLH+tVJP960UJyJSWRIkVJUkST1IBhmqRYqUyhMT29Q0aTUhiyzV9yOEZjRTRHNaCFrSUkla0UrQmtaWb0MbQVvaWr4znVWGLnRRZbrRTSXpQQ+re9HL6t70VoqhDNUDDGOYEoxghOoykpGCMYxRkrGMFUxggvUnMlHFmMQkpZnMFGWRTbZlcsixTC55ipnOTGUyiznKYC5zBfOYp4rMZ755LGCB9Rey0PpLWKKIpSwTLGe5kqxghWAlKy2/yiQwibXWX8d6wQY2KMlGNgo2scnym9kizGm72e9gh5Lkk6+aFFCgFIUUqjRFpljCFauY4n7V4AAH9BAHOag6HOKQGnHYdMtxhCOqxjGOqbYbV+AkJ1XOpZtymtNq4NKlXLq6SzfkXd4XfMCHiqz0deP6blzHjUu6cSU3TrhxYzeu4MZVXLeB61agGMVUyX/Xsf+uY/9dx+6NS0dujOtGrlvRdWvQla4q7cZl6E5365u09XvSU6Xdu4x7F6cPfRT7PyP2f0bsv4BG//sFZLp95OqRq5dw9SxXL+bqJVw9y9XTrp4y9VlKMsfsk65ezdWru3o1V6/u6rh35NK4Ma4buSsuWspFIxet7aLFXbS8i5Zy0YSL1nLRpi6a4aL1XLSy/1+buGVVV2zo/9fKrljWFWu6Yl3/v5bjHd4RfM3XQuhhJSWV1eePFepF3dV1a89qt5d862/WSi1WtoZbwdYHCTKJSTOMEfh3Rbayl0Nc4Rq3fRsJroT3uCFxO3yjJIfCQG6EV7gXzvFUOCc4pFaKbPyejd8TnFApYTLdlCQz/EWx8C0dw3e8El5QxIhwlEXhtuA5SQmmh5eYYTEzvGSKCckybzDDYqbFtvAP2y2Kwj+KiCRiSaizH2l1jnOQ3WxkurU9ad3iVxpTl7jZ+WbnsZZIv+uyTupks/Mtfn18u/X2a6dWC1XXZ0T40VOMDnSiNyOYyCTsF0M2OcxlMVsxWfJNs5AiE7lue51kYljLpLCIbGtzwiLBofCVIk7Ynp7xPe0QnmKrTSlDFM6QCPXIsDYV8sm0NrbIsihm0TvcYEQYz0Rrsy222Xq3WxRYv8javeGMkqTDNEZYTAxtbK42wkY3lNJntoYONtfgIBbZtFU23mpTsOxa39NLtqf5ZFubE/KVYER4yrJPWeYpxTZaa6PuTLbMFM92Jz+8SaFt/Y5tOWX7+zPFLDrYmgfbmhbZHFvv2++CXMvk+fbOCPLtuPF+hq3xINkWi2wtW/xMPPUf9+YAJEsShOH/bNs2w3G2bc97Z9vusyZ46kPg7Omz6mw+nG3bvvkW3ZHRFTv9tntrlt+ia1A5FV3MP3M0VZdSvfx/S1+t6S13YkpNvMiVmlRaorbo2lpfaynP/EqZTeU4ow/K7nrFSi5O0qySxLsSczK6hc75psQZ3f8/4/IWGpMzveqLnudIvi6vLEmszKFqCbFdPXiZ1yfkq5Pwo9UrAXXiijrKfJVOnbu18NZvVg5u5FErXyQZpisyJlOxRVJOUeF3q2+kdRnf/fnz81yqW3TpsIxiY5wmI+Zj3za1VAPm4Hyr+aFL72Z/X/H21W4ONZXbNG7NKWkyvjNVY2p1sRw/8zMO8yc0mfmWM5AqyUt1Xw0e0RxZb3+nHPwqH/n1ArlUbYW3+qrcUVOfoa4QTlYXmyuUBRmjGSQSLcln6TPZfLxHU0m5Z5ykBbJHM6VXIokadS2phbJxMEZlWE3d8LikyXg3i3Aswnf5eA2JzbTJilQE7pCoEdmKLt4t7ZdaL7Agt3MjoyRWJLF4y8yczBus0soSka0aJ0ksgpPBgn7khvXt3T8WtY3R1HmUjVmBA9hfImJ/zSxxsYSzCIczrezRbP1/sKskMS3ry2C0DBxHN38nLoiZ7E+teBSzP/tPOOaAy2nNphMQqxB+tPolFHFOZk9vHTa4llckiXF+q8IhzvcPq2BWif2exfVPXJWP5cHPVvqyeH8LJ2i1Wq9dEWfeDIiUBGv9/l3mD1l8osT+sVuBtcr7D4lsvONy8dg9NAPO9m7X4243aLSyVjjCP1E3PS3ySiuljjrnqw/41riGWL3CM9lJzBt9JDQkYr4snvNc1NKawT0kJLKVi1fTfkqvodi+vL/aBM9ZcVp58Enp2RgAz1gPiqMlNmd9jmsZ097D1HL/jq/L+qzC1lLz93z0nCitxTXsYvXVfKbXfeEanKwcrkMH7RM+M6vf4DG/V3i89TjglbBxwCuFe3P16HcD14Y4uOWG4Uh4y856U0m8IYvu2flvGqUsJWl8Fk9an4hbPGsGEUnvOQK2l8zHfzJ4lFckXBW/1axVvQef2Rz8VwZxqZ7aPzut+9aqtuByHmQMB0ucn6/FLRIRv8lnxqx1y0mMYRWJRYjy1vzPpy7xeL5+3iKP9ZuKoyrrKGfwEw1qEud4EewLJKIeK9H89myDBqtIzMkqeWsyeMm7B1bfEFfmTtHbS3zhZ3+Uy19sfuC14EdV5YzME5T2U54HJZ1s79ncnmkoo1OZN7RV6Vhpw/+MYqhpkMENbP4l18uDk3AaMIqULEmT+Z6Mr2T1jLOyv9rNGlba3+L5A9D3xBKLFGYIrt/+8cDTvJVa5gOchCs/OkkkpuXovLXqY52IZ6g3v9J01EmkzuuRqgRtyfqj5uWcV6KZKIAwXbk94EJnEvsH+NyWVcsqXoShEs1XFE5gjCU8W5L3WT0sIzzgmwWL8bs93zvzaETS3rnQH/CqBgQiDT6LyMAV+Y+8pBFIa7WOeFBaYCXWb/7u+Sr2DiJc5o31Mxw94XxdVtIIgmckfufQ3Hc/vuZHGfyiXuDQ4R1fsMzf9fuuUDKn2g71gZyNxKmHIHFNJdXyQf98EApjVI4Z/WvwnjJxB8/2DB1YFIVReJ/YGtu2rX5sT7/GrsbTjlHGtqqkS+rYtlnFOvcGaz/81e1e9z2W4cAIMMYEw6qlHBlTCejChDVTGPengmyd5iQbNGfZrLkYzyquxrOKr5zTlsgFbanxrLLMeFZZYTyrrDKeVdYYzypbjWeVncazyn7jWeWY2qu/esp/7bykaReMT5WLxqfqWb3aTRz4igO+ONs/c4UA5uPEAtYirGOD7o1sQdjKNuaznR3Wye3WvYe9CPu0deznjFVlV3DiKtcQa+ScuMEthNvcxV+/rvt484BHuPOYpyzhGa9YwWveEMBb3uPFBz6xkM98x5Uf/EL4TRAOBGvrCSEMB8KJRIgiGl9iiGUlcSTgS6K2kiRS8CWVNBaTTgZCJlk4kk0uDuSRr7tAc6CQYt0llOFJuSZUUIUL1dTiZlXnSepp0d1KOx500MNyeuljKf0M4sEQIyxiVBPGNAerQI9aBbrFKtBdVoEesP7zkPWfu63x3WUV6CmrQI/JWlnLGlkv6/W5UTayZs41H8DPql+fKbLt6sCKGACj8J+7bskg1911Zt3dnnCoCXfvA2sDLQBphHCA1XgD39sJLWic6tdShAZUv5YuNE4XGtGFztKFdulCe3ShXbrQHl1oly60RxdaNBfNRZXNZXPZn1fNVZXpQrfoQs/RhS5TBlvq0DhlsKURjdOItmhE6zSiDRrRFo1onUa0QiNaogzOUgZbGtFpGtEZGtFpGtEZGtGAMthSisYpgy29aEAZbKlGA8pgSzsapwy2FKQBZbClI+3QkcbpSBfoSIt0pCEdacc8Mc/VpCadox1dpwhdo+u1dL3BHxtaUky3+bU+oAk5DSHkLELSiiuhfiVV1pAqfoZoyeMkhZAUNoY1pwXFtahlZbyQ6+rXDT+HcFI/4uT8KSfDOKnhpIKT5BEnBe/E97J64LU0vZYXMnrttRi0FNGSQ0sMLSNoaaBlBC0Nr+Wtf7/TByVwEvNOPskgJIeQUYRYhJw9IqQPIbsI6UPIGELKCCkhZAwh57BhsLGNjVlsrGCjio0lbKyiYg8VS7TRK7TRXdroLm10FxvuiA2HjSw23BEbDhtZbCxjYwMb89hYwMY8NhawMY+NBWxM0Ux3aaa7NNNdbOxjo4qNDjYcNrLYcNjIYmMGGxE2JrExg40IGz1stOmnW/TTLYQ4hKwhZB0hawhZPyLEISSLEHdEiDsixCEkixB3IOSWHELmEJJFyBZCphCyiJA5hEwjpEpvvYmQHfPFfJOjmQ7MD/NLjnIaLeo/aFKNfhdyD1ByLFEAhm93D2Lbtm3bduYxTmYna8e2bXMV27Zt2076/afO24mTc8/X6a4utaqi2tnqfxfXsfw4qn0d9lXGA1usb1ONS8YRY587dhCR38RClW8y4a+27Y0yhk3tEZxToX9QcU4/oC/WZ+rt9TZaOtElifquRc1tsdWsFl/NZwmluFSUxOobTMd3FyoZZBCRX8bJeCmgvqNCfEVRUkRWyzopp76RSmISVTW7Zpdq6t2orp5mDc1X85Wa6unU0gZqA6W21GcU4X/sIymSITlSICVSITXSIC3SIT0yICMyIRuyIwdyIg/yoiAKoQiKohiKowRKohRKowzKohzKowIqogmaojlaoCVGYCRGYS7mYT4W0KOFWIKlWIYwhCMCK8izEquwGmuwFuuwHhuwEZuwGVuwFdtwGEdwDMdxAmfwHrr4mMvFF/FENyPFgAVW2GBHDMRELMRGHMRFPMSHLm1NhzjA+GpOFSc84DIHS3d4wgveMBjxRM7hPGJw3VVlIZZgKZYhDOGIgB79f7YlLnlFFmIR6YuxhP2lWIblqpxIOCJgivB2iMSiVENZiCVYimUIQzgiEIkoWFS91OMuG+O3ZQ364c6v7kNnccAi/cwJMsisLkNMP1lqrhJNCzHXs3WxNeSROVMemzM5cnB00Zwo78zl6iiZBJMjBKHmei2HOV0rhuIoidJogTZwwR8BCEIv9EZf9McAnMJpnDGni0Yfs7L14Ym5RxYtlhpZetqLuSOHPZM9iZ2wvbPdse0j5Tdh22DbwDbUloSSPw3rM+sOYp07lhLD3dFRhUNFE2st9dMBC6jIZc2ggp8LqEL/NiwvVDxyx4tvwmWcMmYanY02KrLpe/RN1gzaGUZfFfZiWrj6s0UitUYxE2GVwnzhNvW7i7h8x80YN9pKL0aMmUQ1Ne9Xl2VETTXX15I1RF3ZTNSTHbKTUekMc3pDucIM3kLN3e3lPeFkZUd58WB1R0VxqZGtu5q5PNX45qPGN181H/lpA3hi/mruCFQ/lyeUJ+bHm+GPAAQiCF+8MWqdRRh9T8Q2MZIgM7IgKyqhMqqgKqqhOmqgJmqhNuqgLuqhPhqgIRqhMZqhrTlUHPiD/T/xF/7GP/gX7dAeHdARndAZXdAV3XjfnfBAJPcsCrfYv407eIKneIbneIGXeIXX0N09SB49AlFnJ3HCAy50hye84A0fcvvCz6wm/ghAIIIQjBCEoofZU3qiF+JSa5g44QEfc474wo+v1h8BCEQQghGCUBhfPhfqaEtZB25x7jbu4Ame4hme4wVe4hVeg1KmjzjQjTqc8IAfx/4IQCCCEIwQhCKb+750o/dOeMBF293hCS94w4874o8ABCIIwQhBKG7R2m3cwV3cw308wEM8wVM8w3O8wEu8wmvGr5GM3aMwGmNoL73obA1YYIUNdsRATMRCbMRBXMRDfBSG+6q4M054oAfpPdFLrVqayEof1hahvSlaB3Q282td0NXMr74NRl/2O2k+ahWQg6Mv1wRpHO0SnVp8qMVHvWETxQFNe/T/bNSI3D6iMQI05HwkqVHQ1Qy2DDpzSENqu05uRntK9JSYso8+sQJK60xKF3SFi/760LdAcw51ThR7dC7Olv7urEHKHFKGqiOdfJznGcVmrgmTnZwjRWMtyDdthGnkokxPdb0xvsv9bY5UKscQTKSdHdiJC9ydi7iEy7iCq7iG67iBm7hHXt4IeYO3eEcL5dGE1rpy75yqNQctDZX4P2qJFsJoIX90TT8tbagzXcDdErvWgjwuriGEPAM+vdQGcY2DMUKtVwth78sU23f5B/MrZ9z32UfdZ2ZNde9VO/RAvSVsw/4Dt6Z+/QAAAHjabJYFcFzHFkRPz5slvZW+IjNqzczMJMuMIcN+YzjSWuUSBBSRIczMn5mZmTHMzMzM48nzQlWqa+69272a7n0wJQSUsZ7bMDW1q49ifN3OxhwVDEVLFh2VcRoff0wSEIYAS4w4CSx4JZFXPE9y9866Rpp3765vIHdcbk89J52wd+duVtbt2V1HTa6pfi/zG1xjZqOrTAbEaF9H+Rr3NQDKSVJGmgoqqaI7PelNX/ozkAwg722iZRnMEIYzgjGjvjbqksEPDb5hcOvg7GAG/aT6guq26m3V46uT1eMHPufWv9z6hlv73drm1nS30tXjBzzi1m8G/WTAdQMuSK8M7wh/FV6T+shU6Dyl2YQAkcRQxxSlVa4KfU6VOkJV6qbu6qF+6q9qZTRAAzVIgzVMwzVEQzVCI9VTvdRbfdRXozRaYzRW4zReEzRRkzRFUzVN0zVDMzVLszVHkzVX8zQfQ5mMQlCNVrh5ldZTqU3aRE9llaWXTtGp9Fa99tBXTTrIAJf2fCbov/ofkyjNbBTIKqa4EkoqpTKFcn+veuW0RzVaquVaoVotcz6rtU7rtUZrtUlZNalZLTpNp+sMnalWneVc2tSuDnWqS/u0Xwd0UOd7V4OUdtkpcl/LUO3zu7od/c4blNXntU3blfvMnR7VY3pcT+hJPaWn9Yye1XN6Xi/oRQwJXnJANVqJtElbSape9aTVpLMod9nOo6du00P0Ig4sTfwicUOiK3FSYm1iaiIefy3+QPwv8W/FL4ifFt8VXxmfGK+KfRR7JnZL7Gex8bEq+5F9wT5g/2V/Zr9gz7HN9ji73s62g20yeCN4KPhb8IPgmqAtOCFYHUw0b5n7zJ/MN8wFJmc2mtkmY6xL/C/9SNeoVds0VQOV5BXu4098g0sIMKmrUlchfoGxV/gJRhIQ2NZUW6oN8QWnuLlI2ZU6LnUc4iDyHc+LRkQOY1emVudZY6eyDbEJN6WmF/H9qUUsRKmBBTaVTCURo5HveFb0RXRHydciToiXMBgFCkHl6kGKgETsDwXQhezfIL9PPPalw+A4ZL9RpMViBz8Fy5G9oEixsbpDYDyye4v4IHZU7Ch6Irslzwppjc8xswCf4xclOfoehs9xXXEOd789fI624hz2iUPwOY4rzmH/Y//jc6wuybEOl8P+oACf477iHPayw/A5flOSo/lT+BxfKMmRPQSf42BJjhpb43PkSnKsIkBUIVNIbYhrlTaAstpOQjnlCNWmg6R1vs6nhx7Vi/QkINAbesNsRGZ0fs476h7dY6YjU4HxU0H5nX5n+iO9gVyPeIy+ZizSAwT6mp8LygV6DulP0VTgG3Ub0reQbsuz0m+QriDQNoffFPFfQWrFqNZNBfYipBPwPeJA2khMGyOcUaLMxGqmx44SPkOgjMPyErYMozJNLuZ4C2lgnhH/QDyB4QmlgYAYt0X4GXJVvOd5y688bkKuisc8G/AVh3OQq+I/njNcQiNyVfzCM2IXog3xtejzVYgcFOXYj8gSMNxhIXiuAbEcQxVjAYP0X90aaUchx4pKr1i6+AHwIx5iAo+4zFk+cGjBEPcnMP4ETvgTOPQncNqfwD38CdwTQxJDJ/C+QwcfqgedWqAlXKejdTQ36wpdwRf0G/2eL+olvcxXCUjopAKicw6fMK61isAWn9fzxDRdHixGzI1Yq4wc/C8aHnGB0krTG1HlGSEt87UW58xLBZQ6c0ceJc78JkKJM1/zKHHmModS5xW+LvfOjUXIIW7KO2/J4yjE/rzz4ghzEXV557EewxHH5J17O1QhFuedazAEGL0KetPhFYOR++Q4vkAronvJubIU/8R5XrQVKVu9sjxSjitStnhlfKSsLFI2E+BZcwViYl4xqleOABCTMfSne5G2VKsRKW3SZm3R1ui/iNPVhZDqsYBIIrWR1FylOYa11DCbkf5ZTBPX8xi1+9ocMc955jnPCKsH8tP9fgp4iLv4F1V8hy9xDRexnzNo4AS2+f1rmc90xjNchrf0BIE6HHxXi+8tbvLd4QXPt0e92fcWtUe9WS9i1eG/EU15riXPRd/z+3rOTxHnEHEOzcQYScbf/bSe8b/0Xoya9WyU49nI/z68PwlmMpGRDKY/Pan0V+opf03u9tfoSX9V7tKd0e95MMr9UN5RJNXkpjZ16Dbdrkf1WOHO0Oa7v/J6FKOsr5uKvtEVdavbvBIHLOuZTIYKAsAwl6mAgGERs56VETM0YnpTiRjvWbePsgipLVIz9M2fc5JRD/D6Jl+bCnmOGE6y4qaKTEWm/B/lDeUN4R/oKcIvhFeFF4Rd4WlhLjwu3BKuD2vDueHkcGQ4MOweloV8QhA8AAFixAAA7Fyc2m/btm3btm3btm3btm3btnb9nT/xW37Bj/ke3+QrfJ5P8VE+wLt5G2/kNbycF/FcnsGTeRyP5H842xd7ZQ/smp2xQ7bD1tkSm2UTbJj1sU7WwupZFStlBSybpbFEFsP+s18s6Ad9pnf0kp7QfbpFV+kCnaZjdJD20HbaRGtpBS2meTSTptB4GkX/UpVv8kYeyQ05J0dkl2yQZTJHJskI6SddpJU0kGpSRgpJDkknSSSWRJDfBPkTv+B7fIVP8QHexmt4Ec/gcTyEe3EHbsZ1uBKX4HychVNxAo7G/7DzT/SOntAtukDHaA9tohU0j6bQKBpA3agNNaIaVI6KUC7KQMkoDkWiP4jxC77CB3gNz+Ah3IHrcAnOwgk4DPtgJ2yB9bAKlsICmA3TYCKMgf/hLxjgAzyDO3AJTsA+2AKrYAFMgzEwCHpAO2gCtaACFIM8kAlSQSKIBZHgL3AI4VN4FR6FW+FSOBUOhV1hU1gVFoVZYVIYFQaFXqFTaPVDTFlMSUxRwHa9F5MTsG1vxKTFpMQkxSTCxMfEAWCxDkwAhkIYiNY/pYpx+HaRtuEQ7k0g5Jy4rxPrym23vnqloHCwsTCtYlE42FiYdmJRONhYmLZjUTjYWJi2YlE42FiYNmNRONhYmPF8f73/vTzQsZEkSRADQTmRBrz+Yvy07ZVzwTgTaqrqVNSzY8eOHTt2bNmyZcuWLXvssccee+yxYcOGDRs27O+umqo6FfVn931TU1Wnop4dO3bs2LFjy5YtW7Zs2WOPPfbYY48NGzZs2LBhf5/VVNWpqD/b77OaqjoV9ezYsWPHjh1btmzZsmXLHnvssccee2zYsGHDhg37+6ymqk5F/dnz+aupqlNRz44dO3bs2LFly5YtW7bssccee+yxx4YNGzZs2LC/z2qq6tQ/63N8js/xOT7H5/gcn+NzfI7P8Tk+x+f4HJ/jc3yOz/k+q6mqU3nFhg0bNmzYsO9zfI7P8Tk+x+dP/qemqk7lFfs+fzVVdSqvnvX5q6mqU3n1rM9fTVWdyis2bNiwYcPmWZ+/muqrZ33+6n+eywHadhgKomfm27Zt27ad9Nu2bdu2bdu2bdt6zspNtafdtY+StFiFBZiGMRiEHmiHJqiLyiiJ/MiK1EiI6AgrfvJN3sgjuSHn5IjsMnXePJkm42SY9JNu0k6amdq7Kq4L4ZmhxnX7B2XoxpWhhmepLZWhgmepLRVuuPeAL2lfclY7q53VzipnlbPKWnPnu6RdstZkm5zVzipnlbPKWnOtXdK+5Kx2VjurnVXOKmcVlGQKVTNU+VBFQ+UO/l9PHipuqMihyD/8xBe8xys8xQPcxjVcxBkcxyHsxQ5sRsWqLM2CzM60TMyYDI8A/MANXMAJHMAObEBKycR//MJXfMBrPMND3MF1XMJZnMBh7MNObEGP1VmWhZmT6ZmUsRmRgl/4gGe4g0s4gX3YYu6lAeiBDmiBBqiN8pKffvzGN3zEGzzHI9zFDVzGOZzEEezHLmzFBqzJ8izK3MzI5IzLyCT+4BNe4B6u4BQOYBvWYBFmYJyp4jugGRSqojQKIzcyIzUSIzYiI7T4SR/phlemir8tRC/Jz0HswXZswrqszJLMz6xMzYSMzrDwwze8wSPcwDkcwS5swDLMwSSMQD90QSs0QE2UR1HkRkYkR1xEBuWPfJIXck+uyCk5JLtkk6ySRTJLJskoGWS2/tJs/ZYQvfDK1DCDDRtaNrD0LLWlCuZtM72XobZUwXxt//AHB/E4xzYAAyAMBMWWNgLGyKwZJyms7668aNGgRkaKtg4tGtTISNHUoUWDGhkp6jq0aFAjI0WuQ4sGNTJSpDq0aFAjI/16s3oiI32NWgOQLEkUzKzpmW/btm3btm3btm3btr0827a+jb6Mid6+jtmIi4qNqs6Xme9V1Y6qOzhqx/bOqJ0zahsctWV7Z9QuOPrXWWc+wuzZazdGcTLonOhk1ykmdOUDrerQ2R+ni5MNBBntZiA5aGUFFM8CA3Id9wMuDkDfC8RnRW/jUqkyebjvIB6TelpPMTN4mLvt0U/uxvLipfPwJiMOLsc0JhcrjYfVFgGsddof4qTycErC75z8homRwsNIDgvN1XYrnuy/cXMPPhS322xFk3iiH8AgJfoqlkireYAX3PdozWEks7GDPMTDPMKjPMbjPMGTPMtzvMDzPMNTPO1xnQxCc0YC7eA6x48mL2pBbLmn5xP+wycwAJIiFa9zJ+dyIJuzLLMyLu7hC4ThJLZjKaZiKLqjJeqiIgqCrgbEk6PRH6BeOIT7QCEIjtwxS4iiGnvjftDF0JWXgwDoZuk6FC8O6GEKCcHVWnnZwmLjxwNDKITGqokPhlQJj12nXQ2pVCR2LdkyeO3X8wtkTdaCjdq40TML5BiOE0dc50mBvEjG9dzAjdzEzdzCrdzG7dzBPdzL/dzH3dzJXTCw5Av5xpdjQjkmdnkVRAou54r/8V9tEMAeu0GvY8rbyDuhvBPLO6nrhDq5c0L9NwyHaiZlQsVx1omfQcCJx4dBbrGMrTsjJiCmrgDLjaGMMH9MhkBVlPC/8P/m/8b/kT/KP9k/0N/en9pvWfesb6zLwTPS7FZSK+Bb75trP63Q0T77TGo+MjfNeXPU7DYDTXt9J0nIZ/yFH/Fk8DtBS1ZnUTzCD7iOs5iMgdBJPZ7BMApPYRiGOCiJwjF3CHAfhhF4DMNIW2n4EA/FfgDDcNzVPaZ7UhIW/ta1FdTGx5/i/ib0D7F+l0558YuiP8vbm/dH5fpBjO9Vw1fifSmvb+X1jcvrc+GfiS8EH2v8kZhC8IGQ951q33FG0SHnHqUaIqWKUA03leWWKgmT5o5qiJnxdbGvCb0qxhWxVQEuKXrRVdN5IedcyGkhp4QEdK8vK9IjJRLjiOo5rEr2y3Wf6jko7gHlJCwcda3CbjF2uZAd0m8POeMtct2sPJuk2Sj2Wrmsl2adk2e1GISFlc5KLnVlWiTt4pCZ5irHbLHniTdLORaoghnSzHHt7zQxp4b0Gi/9ZCknyXei2BOkHyffsU6Foz3/oyPFHSF0uFjDXHmHKDpY3gnREx3REg1RE5VRFsWd3RmorAPE7aVqekrRQ67d5NpVrv3hY4SN9bP7SBvta/d3bbyP+jD0Vh+hSju71rKjxh1c/yfthLR15tXKGTXXKBEGu+5iVkV516o1U71N5VBP9dZQpTVVdR3pa6veJqo3DI3Vh6OR6r6LhsH6G6iPQH2obte6VpN7VblUkWNl1yuhoqIVXPMpJ6SsCyktpJSQuKhoXxdFfuREZt3xLK5oMc2kqOZQRP75NZNCUhVU9gKqLeiKvIrnca1tLqlzShEPtT17mxLZ5JtVmbJIl1GKDHJKJ11aZcocXK1M6vUqQWrnVZLS2aFkruyJ5ZUkllkmVNYE4scT06eslmoKSOVX7vjOf04JGCTSk5WpkEbPTuZDSZRBeVRCddRCS7RBe3RCFwzCUIzCGEzBdCzEEizHKqzBNuzEHuzFSZzBBVzGDdzG23gPH+JTfIGf8Cv+wj944vo8HgnL5h/DcUMEHLQz2qMy8sIPIHWwEZbiahoZ+BjGSJB3eRfkQz4UaulzmzhqNx9O2M3ici6HgQFAxY/iBJe/AcUzKZAAeNotxbENQFAUQNHreS8UKhPYwRwaotVKTGEIleYbRMQCv9Fb5UM4zUGtlRUDK9UD87d4NnHPWMybjtADA7+6qRoWCFeyhxzSUyaIHIB2dgAF2Q34yxCWAHjaBcGxAUFBFACwvDvQANQmUAIdo2gAAMBshvuJEGoyejIG0vly/8WU93rziBDbx/IQc0lFR18gxUwDIYhR+iNLUixAUACXqAfDAAB42nWMA4BbQRRFz52f2nY7SW3btm3btm3btm3bdpvatu3uPvMABnCA0DjoW3aZaUAOsuAHF5CYtHRiAZ+UVMXNBrPLnDMXHDkuJ4AT3RobwAayoW1EG9V6bCyb3KazOewCt8c91D3cE/Ljp0+fALAkIR1TWPSFUsys/0HBcRz/vyihbHgb+RslmU37H0XAMQD41Brg44eP9z/ehm/13CsHr+y+sutKLriS50raK7mupLqS5kpJb0lvA28hb8HLtc0TBGQDKnGTj6BJmgIAmvC7BtAYfBUdVBZVVzE+aLMyq5pyKKf6qY3qqYzqq4QaqrFaqrVaKZvyYQhOSMIQDg/RiUVckpOC1KQjI9koQSlKU46KVKYhTWhJazorl0ort/qqj7bSjcEMYySjmcJUZjCb5axgNevZxHYOc5RjnOQsF7jJHR7ymNfKo5LKq446pKx8FCrOJ5XSSG3TQA1Rc/XWAO3UYHXQaI3RFi5rhJpot0ZpqFpoozZok7LjB7/4w4WDf4IQivBEICKRSEBCEhFPD8lELnKThxxkVztyUoWqVKM6bXjHGXrTnR70pyf9GMBwxjKO8YxhPgtYyFzes5nd7GEvO9mh9uzCyxWucpGnDOUJxTlkUFXt1R7t1z490QtV+dLX/gyjoqVOAAAAAQAB//8AD3jarbwHQFRH9zd8Z+7dXYqKdNRYlqV3WGDpvUgTCyAgUi0giDQFA4q99xqNLdhLTLPFqCnG2Ess0SSaXsQkRkmzsMN3ZvbuZTUk/+d5vlddd+c3c+fUmTlzZnY5EzSQFPKPFFEcz3XnzDlrTsk5c75cABfKJXIcUporkbUyQKUJUFqreXOluUIVoEbwrrJWB6itVQHOtNbakZZoE2tzqKeYWCOi/CPtYPw6MUJRN2+S927dQlFR773XwaGo96LgH5Q6uPemkfemRUVNQ1HT3kNRy5aR96pIodFXj7ioqOboKDQNWkMbRJ/ipkVNg7ZfbZkWtSUqqhANKIz6KgoKUYXwj+Mw8M/JzsiucgrOguPUSImUvJJHzk7wV66QKxS+SIuWYRPyaq321wnY19Pdo2//fr3dXN1lV594oVyyAyfNWbijvH5y+c55czo6dP0plmIn6JvjFOghNwXVSfhsCT/PPTLA10r4WeTQJX4Gfdcl/htSGeBtEq5FszlOwkdK+DkU3NneaKWEP+aadTgJofqQ8Db0yePkLuj+gT5BdTr9Kd4H/Zlxlkx/1kpz6cUjcxXyxTNlJto03Kydjg+1OxDvFbgkhdyQXdWS1Y/JIi0qJptwOL6m9WRUoDfGbXcdt/yLqE7C10r4GcEJqPPcXI4T2oG6JdeXcwb65ko/GxtrK7lcYd0P03eVo9IvMMDfyUmlDFD7BdKPKtVcnL7t8/EJk9MyVo+s+3Y3OYaM5jSFV6WRBw+jS0Nry/+SXS3ZV5U9c5iFGZ+zuXLS0fKnpZmRRZqPvYeHDRlDtTqXhFC6wE9PUUvjHydziMvv+Fm2SvYD5wjasnfAAf4WDmq/fthW6cWr7OVyaysbG7VfBNYoe/C8xUfk9MFDKOTD5s/3VJiT8ybBmZVRda8VFe+vjRo/PNgUBXQr2faN1QGU1fYbGn4gcd6pqREFsaq6O5teuV2lii0MLz2xJovSJHmMZhDHISojlVAD/vtv1DF17UCqKRVe3Ozj4uKT12dD88b/k53qEZVC/tiaKSSvvm9Mn5buybn/xp27Sj5QGDI4bwhojGmGWdBC9Od25j9gQVkZWNAE5hNOqQQDChbWVlhAorVAGLxS+zs2/wrF7t9P3iExF5adLC55f+kl2dW3yFt3W8mbbyHFmE927rihtwztD+hYi5YppZZhnlIJdEyZl0heOpf/XpuKp2mn4UPUI196TOZroRfWmnFrqxuV3A5U1wV+Bo3pEv+N226AL5Xwhx3EAB8p4ee4o5240S09jjH3Tlc4+kuPkxAqlYS3oeGPk7vg5w803IDubAk/z01GdaJ2RoB2jA21M5e/rh2Ji7SbqWYKH2s/5EQP3wTe5tS1h/ekLhaoCdQoA5TUjHyfj8mpN46AW039dHd5T3KuZ/CQ0oja14uLXm+oWO/mjMkxXLGDfGH1Nhr+E3B/KGnO4QmBmWH9a2+TD+/UDUqKH3H36Ifkx7XUtow2k0olah/mUAkfKeHnUKpeKlmtZHPp71zki+cjP3JJWw+S7cC5T7xwo3a23ntqmT6dRH3eYvpkPSmWSvhDrllPAR0BCjy8Q8/oCLlM1wXZ1Y6Ojlc5Dq9iz7jqniFbKbcdrwO+htpSxB+R7Qz/ifZFpRPxsx3JepvhTAP8DGfK2i8G/IAB/ltHEsNPAd6kmC3h5zv6MbwD8BiqJRE/11HA+i8Eup8a9PNHRzvDG0kIOkV1IeJtHU/YSIrr+FlwApnNmQcEUDtTmweA/FYC1twlfyDfspycUuRFHln99vXwvPLKygrB5umv3/wm2mQJe5rZhAdfCdQgJYJ/CmoZQaHwGBeHxqOJ2ms4nKwl2cADKSP7u5kmLB6G9mkb29/Csz4jWaJVljDO/UV/OKkfFZSGhLehA9IcEAq0ZYw2Hf1sdbr61F0/5kNZbxpRzwp9b/QpCW9DYfre5PehNy/Wm6WNja2NLZPGkjqZfyAdBXIFTLUQUHhhiCesbGFNAhmvt5k5W1mZm1taOZvdR5+Qi7wMI2RqauvtZvYX6Xhq5uZtZ2KCsIwH98zweSk7a8jgzOz1PngfOOoJ3xW7s5wc3dxzdiz00sbgE17zd+Q4OfXtn7l3pVobA/wyvpgcITo58Fa9HJRfCW/Dq/RyyFaAHH2ZHIjJAcuHExgUik40EgLIhnKegW46JDtbWmAsN0JBZC/J8B7s3kcp8HIFsNojZN4wVy8n5/x9Yfg8sLovbXl2QGx4cMkrau0wTrTXCuaZ4TrPRCaoTsLXSvgZ9FeX+FkUKNkXOJbwNnQXJMFsHrgAc5MZ199gdhIXFF5cT/QrIW99ipw6fBiFnvoIhRw+TD76qO7VwsJX62r3Fxbul1bdA2T3b21kzwFkVn1n8yt3qmvubNl8uwZ4YLTY6I4RZ4SXUJ2Ez5bw88iSRiqAvy+7IO8JWnbh1JQ7UKvCma7TOiZB6RpbBSiaLX5IZNPWRsbYhsaIcrxREApXlYW65zG+Wak02GMEcK99jI2zaoB5HwVKrnsV3hTavzKtcjGeP3p15JC9TJpczM8fsypy8D6dTJfx9xoqUKX5ZSrdBDMz7QsaSYa1kgxnUSSq6wI/g7ku8d9QhAE+UsLPoYxO3GilhD/m1neJdyBrA/yWhLc/g1+TcNJ1e4xRRpf9/KXHSQj1GwlvQw8fJ3ch1x/oIdhSYLYEXLSl5n+zpqWlkv8fLCpbiGwu/w9mlY1GGnKWo6MERDkM492CjnilfpR0hkRIihXVvPI6ef/1N1DUJ8IybaoYwtttnv7OmNFvT91+CKV/+z1KPySGTcL50hs7tt0o5XRRnfA10OjG2RhG5SqluTmN61hYNxfH77k/pfnhPvLb7fzJoaEv5n8uuzr925Wrvm4mvfCd6Jo11ZF01mB9MStkiLMDxCxstM9io92Kc31+tEN0a6l0lvNKOiEbDnq1n+bZcT8iJOMm+bax8QGSjXfo5aMf/7Vqz2engL0VKeTBOl9stdA9tLJzIjAVI1gbtgPqrZe1J906IiVS6cQNMJS3wdgIhZP95Ntfb+c3hIVNplI3fEY+uxEkCNp3sJX2Z95UPTo5dWygOAPaMNmHi7LPkGZAoCnhbWgRm8szO+4Jd0EnfkwjTs7KfljPgDOd0mFVUgN/tspOldja9uPBNgLe/Rb5a5WAXOWDZgwdOjkuvGbotuOfLNe2bP9zASafGs2vSasMjqmMmJvf8mLsPEJsKm9tShnt550VrI73s3T1OtUy91xV9dmZucUeg/w0SZ5mSuuBZcvy556tBH4ZX0yOXFGO+aiO4iSE8ivhbaiZyZEC/Hdju3LOMoC5pXmK8D4JJpeEG1rtU3fhBvWMFNBCN6aFkeLT83QrWsdPskx42lqnBRaZsLiUBSlU1l+OkJ/WId+0hSPzF6Yhv/XkJ+v5v2/lT7cPHT43LW3ucH5/e/DW3+cDDdYX47xAnAttUV0X+Bl0q0v8N2RjgC+V8IdclQE+W8LPcz8Z4CMl/Bzy6MSNVkr4Y67GAL8l4Y/+AX/yD3g794sBfl3Cn+rpkhCqUwlvQ2cfJ3ch7x/oLI2MpbxKD5hjkNJSDI4gNkI4VPsnGnYfEin9+vdxc/0BDSEYogffeVvLGyaXt8zDl594cc9kTMaLmnlimKGQcBaj6ygavQAUXRhFw3js2QJS8vrsDo/eJ1Uo7VVrlbnAC4KFk+0hFH7Q1smSh2JPR6tX0SAygWz7aICNQiGXWalOAZ+qvI/LbKG/so/z8B1WsrGysmEliHmeNK9yd3dxWTFXK2cyUJ6Ydqp03oMHo7ou8DO8uQG+VMIfot16malsEt7GYyYzjSQOgsz9ae4FKW075dQoERVUlBREVWNb0gsVb/UK7SU3Uih6hXntQLmkH+5B1lx2VVuZdu9mau3v9gl+gm89Saz2NzMz6+Ffk/hE69uuRUGR2S5WdrZWLjmR5AyVi9FlfE4UvXmiZPVdwE9PsIH5s2Y3xznaW2h0u3O/Hj16dO/r+Dsapf0a+/AtxCchfoCj04D4eHSlPV97RW/7XUw/9eLouonqJHyphD/kJhjgIyX8HHKXcMN+ziIbyYeATwlvQ+cfJ3fR/g90xqCf2RJ+nrvH5AVrCF+BvL1A/wGIRfwquYrufRH1LwBgYa3FeUGx1tZubqNHkV7CeO1rofF2dt7epaXok8N85qB0OzuMtUfajw4d8sILGCG6F2H9Mj6aRflXozqKkxBKT8Lb0HQW+cbB/OooVHDOXDCd8+hMD3meCBygX/wUjhGwEtD9B2Rae2ANnQsDevCwPaFrADoybndRfP3aYUX1Gpf0oJCswO7kl75zTk/J3TM3nXxn0ie3GSeWh3UPjInqpcnw8ki1SVk9YeTUVBcjE3NHB5lPjEoV4uBZPG+ge+7y0Vqzl/3Tva4FFYZONunZzYQ3cgj1cg/tB9wzLuUq4H6GKFUQx/0Nl6PfJnWifST04RWGkhAqKUVFDSjBcn/v42z933um9nTtpChrlfBz3CIDTl6V8N+5Wwa4udT7eVigeIrKn4LWo7g0LrtT72r1s1oXhyRTv7XSxla3FGlkPbDKXjc+e2BLcTlmixRSAkw7UMjRmZrXSoYufrP4pKuhXWozB/l27x65tbjyxNLBWp7vN2BiWkBWhDmysZ11ZX7lwegBvcx7udfN+2lfSqmmIDlxXBiSo8+wRe+KQWmVL9jYpKypLJiX6ZLnHau3nL0y3NRUrUlYfH1ZxvDQmOh+oe7Wo1/KiAjqM6CPrWtQP/SXS4JnfBxYFXUP9IxOGhjuzfQCGmB6XCSOu6scp8flKgk/g6fCO+amdfwivA3jxYZz0unLWcUWdzXVkw3dp8mdn9un4bYRU9Ote5BPkYexddrUgqZLjQ2X7gwq12jGpadVBAVXWEaM8HwLJuYrHvlRkPp/9yjpmP0w66Xi4jVZw1aPGb02A/iZRkIoXeBnqeg1dXTcAJ7/PD/m/xE/xuT6v/Gj3auo+2eGaB5tCHjUWKFClylmuVrmILay53K1sh48rtv9x+zZf+wu2TUjoydpNXYKTHQfPF6jGT/YfWCQkxGy7ZkxY7fNcsTv24/45f6FC7L8PeJ9e2etH12yPruPeqCnOmfhKH9Kk+RTms9niv+NumGmGP2myxT3nlrU+H/xkxEWp0sU59NE8aZuIQP/nb3eFvI4liqm3sN0w7xnhThP5DPvGQLes1CylqQ1WPQg7BYntuetZTftckPTpaaCqYMsTZAH+dTMKn0qSq0I0lSkpZcHasotZyN09F16TpTvgX2eeL3lOSLiYcba0WNWD8taU1z8Uhblh4RQusDPatF70qj3MD7rQZ8vcM4SP10Nc4PxjCfvfTR7VtvWyhPLhujG7aCArPCeqGefOWfJNPSZ3KJPWdqg8S9Y2yxC+I1XkbCCjcjMsJgYGJHqvIWp+K0gr6hEGH56TdWzOXKtbo6824mqGMpWPfD6rvAzKL1L/DduSScua5Xwc9w2HU5CqNwS3oaiHyd30c8fKNqgf3OJy/MldARYcRzfR27H2UHBmg47OAEUNyi2CqYua2t8/x65cepUwbbSxIl9Ai3V/eKChfzv2+fyk7/Pqt+Ubmv0jcwkOjSV2oIkCEvYeAqA/uhIdmR7nwDqFSp7g72POoDuAeT8855SvejKjF4I9wgtHlg709YqtXHE1EuNUy435U9Lt+qOnBf+vi6tPCioHNxGo6kgCYlN6QP7hzqVTbjkmREwqe3t42RaZIHHsad7154ZhfenLh1Vsmpo5qrC4qWDQAOMO6aZV0TNF3KcHpe1Svg57gC8gzdynNDEPJ1DbEIK1DDmrWlmkbGM9sEM5OQWl7MEUgPkWnlBZIkGz9VOhonwYEFI6ujjM7XBeGXpJE0pJ85/TcyDt4kWy6YW69hE6SiWSvhDsorFGdVA9x25A+C7mMXaHohcoX1CPsfr8qfTkIeQ/7SFg35aOA7PZ364S+znJY7iRwGvlptL+PkOS4Z/RXuSqyT8bEckxSkFnCzhsPqx1jMA3W3Q+jdd647fAdfIWiX8XEcG6yUTer9k0MsfDylaTULQCUkmJyoTy2r/xnx3Iq0V8lmthHOo4xLJZzJ34zhL5jcqVQB1q2bkOeqdGeEuqeGgg7Jpm5N/jo4CKrS9qLk3n9Wc8DLLhzDNqcWEN1WhOapEI+Chw2QzOZMlu9r+BdpPemvnodOFZB3lmz3LYsEDYl6aQ3WiTaFPCW9DIcCxaCWDMwlwFP2ZBK3j50CdE3eYPVOOZuLBer0zGgyXaNSAVt5hNA6LWnmgpyG/KEzg3Jg8YngjxTmGfmr4aRqy6War8puXMjk51N7OOejlzLGvjCTXx6YEDfMkXxSlBWT6CvmfRnhGR6SGV8f4xMfm7n5R2wO/XZDnmx2qHYzfH1rkMzJWm0e1wjhgNn5HjDCWcaKnU84kvA1P13MsNAoV0oiy7XpE9RHck+mQKiDXpSEl5P84LvL5EcX6Y559QjenNXaiKoqK43ws1xV+ltup55ZyJeEwLqWVZS1wK2aypZWu64ikbtefs2f/uUsXJQyuCAysGDy4PDCwXIoJlhPt/n1Eu/znnJeLYNHNXl9S9HIOpc/osHF7Urd+/NmJmkvoeZgOeECvAk+LWNbT7/mcZ6BhzlPi0RlB0RlBE8YqMNpobTW+rKaPdSzlt9HCorpsYl/bGB3blmSOSbeApaje2DhwS3mgTVK3Ho150x3cpjMZBnbrNi1vtqPHDEmSYXEkw8TY8xTabazwAJkGdfKuEnmnmt7IdYVDTNEl/pthe1mrhJ/j3pTWPrCMhLeh9MfJXfTzB0qHd4FpDXBRa4H/k95oqvi/090smiX+7xXIm7EkMU+lUawH//PgQrkEyQOlMd7lVobtZCTnFH3TIPSR3LQxwts7fHKXIdDMvU1Rvj5hjTov3kKdGDcaREWSRw909Fc7Jj0fGyU4BPg5JD3j5ei0GC7po32QisWPlpDqNgjzVbrg3/K5sTUNOfeQovzpLPK/ZxDrk3w5d8wgzGehP572/O6D0mW+cVn0ve26eBbwhXp+kNKcRSpM01Kkgp7jR1hIrptACJvXGdaaIWftPYOIluTjTAhiDeLaY+3TDCNa3WzI9xXGszs7VA+6qMvcSZqo7bv1X55vG2hllWofVwlL3MnScTIZ+V1hFFqWoJ0lriR9mUxXxRXjLTY+6kgI7VnC2zra2Pw7CMaHD8jqLu6zHKnrgGjP5qVljAMQ1NZWd2KAw+ZemWWJbG0q87JKEpPeb9ky6eqSWR80WJE/zYuGJo+KTj/bsmna1zZpK0t9Bg2K9vMIMnNRbp5S8XJG0pwR3sFJEf5uIT1dlKsbKrfnAXeMC8b1DdESwA/FSQjlTsLbUD/pxPg3yKe7Uz0xJhlbCmv6JsUCdB8l3S4C9s3nTv1u3bL7S2vHrNzTcHPRyVWjJs2smpgemO5RWVTUICRNf7tkxFuzarf362lyacP0I0V/jsvKGf9zwHD/YZUT8p5+Q2Pjjgf4nKyUs9XFxiwvoLGVUy8NoHEyLFp478feGvOInu5+JZ673ly/ngZj32svBaiNha/Num1bh1O/RyaEzedWJIT2BtJ9qpOOm8Kiv48pFYWjhD8kp5EJ9Y6ONqEJYh4bZitd/lxKnyvpKMeobn8B8qjIjyrWIE/yHe+eMqIHrJD4tHY8rJBlyXju05bWishUoM56Y2vMbd0agzgJNZfQ800gKhsp7UDZno5PKWsvMqC21k8ycpY3ATd11xSFReQHIndnT4+pKxJdLGz6u+RlFbjYWdCRqS1PG+unHpOGV7d/4eb8U7JLWIC9m0rl1kulPd/Jg4ryIK4Vu7iu8DOotEv8N25nJy5rlfBz3DFpdQc9SngbKga9/72fP1AuvCO61guvCvld5MzRO2QUijxm39vYxMSkl/1RFEpKhHztsfET3D083CeMx3EsDtf1wLT6g06roxhKQmi/DJX2azp68v1Az+k5eoYfn00iozJyCIUW9eprZW5h3b/PGGQ1qld/a0tzyz69i1AkOUAuN1k4mAvwx8LBAkQnJRNm5Iwqzp5ZjTaSkuoZOSUl2TNq0ManLei16I1DLeHP0E1RhO36GTfMT1rF3O5drhNXSfhZtLRL/AwezInSUqkkvA2HMWndQDcvgrR99LlyUUaWKe+88OmGSsl+FDfax9nE1NTUya8MRZCdIPeJJl9nU1MTEyefJhyBB7w+PMPOztYuc/jr2tvaj65mZdrCn8ysq5QDRolJcl/n8deZdUmW8IaOvqXG1obm6J81Mpv9G+Idw/KD5UYkj9rbRmFkbNzH4UOwt6P9uE1VYaWk7hvjnj0igsKEIu2xykpHJyenSmr+frmzBpoDbUaF0X6go/0LJ6EqiooenclJuKxVws9xu7mu2p/lVul1S2VguHSHpIv2f6AEg37MJW7Ol1JNNIB++oImTFnWPICly62V1g0YFjJ+uvYR7nMI7zdqO60tMWqjvbD2rPdHIve+HMNJCO2H4VIumMM0Ryu8w86eerFdm63++BmyDIjm9tiKOgP5f/Hmn83Nf775BbkAn3NrNZraXNlV8guqvzh9xsVJ5AJ/hQxGwYWhYSVhuvzTXbCrA+fEcgw0ZGOhg8ILdyYXqB/JaHSnoZZ1NFy/6aWTt3f4eU1eMvPBjk33Z9VenJ1QmfFCT6+s4HhyyeZyQbl9y7q+LyAjcmrwhNCACVlDKzWaSllTppvvNHLwo4Pk9+UIzX24efUvC5wjHcYWRgZtWFgW7tniNtzcYs6Tc4OX5A9fnj10yaEVGRwPJ64a4a78Zc5HjOACaBzmrGQHROZsyaVeB/eyAYDzYDafspNgOgisId/A+AaUNweELck2uGLx+Nm6I+JoV588OB1uHtXYMHNMIzsgjlMnJ7Kz4enlyzwcw+LCg539G5z7a4JjNH3PHjTy1NDz4l495WiBLTssDvI0PnzYyCsYjox9HYzJInPxvFjjpTiI3paZ2dKT5V7mZsgPZci629BDZZvu1Apg3bFgXTdqBWWAmL/UC8OSmBj4BhGkBKa1oRAB00sgfdlYMr0+NixDn8FUdYc/DlL2Mjyu3qmfBv7022saKqYuk0JM9+6RW/QWE5jdZVhbzMu66xOYlrI9aCNeZ2rnThObHnYc4voBp3ViFgdieKS2VtK/LFdJ/6oRyn7wAIWRN74kN5EruUmukfdRJHn/KTkAeZyjOEHr+caEN8hV5AVv+Bq7fwl9npLd5Tzp2PELdHaml+idngmf5La2QMXWhlpSSTNgSpq9zR+WI3TbsNLIuOmHVc0XZ1uRH3uMykwucMdyNI9MVfDJIQKPvu3bG9lu20LS0+5/0LLp28aiA40eecXBFclvfPB+WkFvjPq8EBS0dhPwEQJ3Y0wgMtLQkaCkl1uUCmlDoAtVHMAKKo0aXE0Db+BRDiy154XZdkAhpCUSB4zRujRyUWHstm5MdNmQPrXpZ6uPk9vDnK2vhs7A+HjoGmuXYcjheN2ZoTV9M8ZFj1nnZqzgL290cHa0b+llM36MvY/Vw5jYg3uHFLWoHJwcNxYP23s4PvY3G19V2XjbXpx4K0zxT7fC/raXfvMY+XPJEmRy7BgyXbKY/HE8rzk2tjlvxLSYmGlWB1Fm20O4pHqY7HnYRvYe1DZ8t3XbDw2Tv9+29bsGap2RQPAX3b0F9s0Hmbkj/oVcNiF7URJNwgin2pDdj7RlJdhxPXDVn82BEVhiQtkZZsJqBP7ShHvGjfQNK42NLw0it2f/vH7TzzOjd677Gk+6jX6NKR8bFlvoH1SatPzmxOqPpg9rObvoC9OnlEIJ3NOk92P8WRRneBdECldFmgplBBZJivfmBbyy5elyjNR8bE1CclVUbNPwBQuSKiMDi6KjK2IQ+Qwvblu77ofml5sqVqeuIB1WEz6aHjTMS50XHpEf8K06Jywky9c7I6T5w8qqE3VTdtmZ9shfMXLqR9XUHqOBn+7sxrcZvd2BIB3G0r8acxWyHo0noOajR8nn8m6kGhk/5G+1e/5J/kLGf+KZ2vndmI5Brg00h9WFXOBYjpbg/Dzb0TBRYN+57teFAnLjo8dFptTGxE5Mi220J/cT+Tnaeicjl42Fo/dOTVj42Kr6o+aQHN/YhvT0xrgATx++RzuZG5gwcOaB8jV3Z+v8SLgB+rTn1DrK1JGeu0+jlhRpkKXRnbHifdXXdxZnbPpi/spvFvYg1y3rs4vnxpnYV68YMutyw6JHO5Pr4mLqkjX5ic4xE61SdyO7i8eQy5WK2pON6SPqbqyMzvdt/GzR2nuz2xInp6Y0JLolF2qSJidxutsyQp7O69RsOTVHb+AKrZdgrl0hXDBp7+CeenEczyS4xXzOm4tkY4HtvDQB0g7M0AWeHxqWz5Xx+p2ErMxcPqJ+1Zx7a1b/NHdNXc7y4auIdmdaTVRMbXJybUxkXWpUSXBQSXR0SVDQKKvKEw0jN5aZGfc68mLtwdLSg7UvHullbFa2cWTDicpvNCVRMaNDQ0bHRhUH4Q3+eaFhuX5+uWGhef5M9/dA9/ck3bOVjFrdMLtPl3k6qGluPwI/w2rTym8XmCEvi0k5xXPjQefLh876uH7Rk+3VV3cWZ278YqqmIMElti4laWJcbK1N3UeNg/Mn3lwZla9uAo3/NBen7SZ3Lx4nN6+Mx3+4JxUGDWxISpycAkag/pwHWr0MWv3PcnVrjpFp07XHjpHmZu3x3EmhoZNyc+tDQ+thbsl6qJ9bHpI9B7XV3+599bvq6u9e3fttNbXyG2DlLeJt9gDd3EKv672B5rHpBSWiwL/4S3R+eer4F0RH06H9PuBLjgQLDsoFwOcZVpa103I01N+D/uRIfoeWa6D+dVZWWNHyCCh/zNobaWl5MbTfxOqNY2g5B+qvsnqTp7r296D9PSibsvbBZCI6zn3NKVBRx8qnZoCM7fgFfYDioUX5u5y+LLhzTlBm2eiOd/EPFOd2Av4950wR7qiuht8i9nkTnnDW9clqrrNndpJW/K7cE/qOI7TvIihPZuX4flR7fcV6dyjYQ8DGbmGqzOmyFMAO7a1h4y5GP+y6Mz2Mx++W7m2M8XIZ2X9AnotXTOPe0hczVL6+2dm+vqqMF0lr34xXZu+vUnvIUU+5h1/Va7NahvX7dnTFZ5oyVxc7GzsXtzLNp+VjOUS54Xmg7kpnPFiSxeiLXbOmSYMAllCzsqUnmXLKRw9cREn5ZGf7UFKlexpjvTxrhUl5sY17SOs3Y8s/1ZS5MRquZZrPKkZ/229Yy6zXqvz8EGlDo6v2z34loy9o4RNJKwlKvVaSWTmR2WxnRyLUL2Ray6f1UJ4MZao1Wu6rq8dy1JcT63melfux8ie6eta//vlkWob+oYxi0C/8j/gO2CmbO8hxFMFV/I98oYjMhGde4iyFlcIqeGZiGyeWV7DyJLZL38r9IMzj34Ny/Ze0vJobKqwRMqDc8AUtb0DXhGWY+uVkVp7PxQvbhCIov6ir56yEZcIKKDfSMvQfDPSaodzE+qtHtcJbfDCUp7D6x3iR4MP8fEGOrv1uYaXMDTie2NHGrRGRFQyZ1HGeIVtRkzBPGA5IfceX3FrG5V3g8idAGjq+YMgGPE5YxpcBMpkhlNPPgdNHgLyob8PtFZbJXAFppAij9RFQ7w5IE/S8hPKL5cDvRUCmQJuVgLzMfQ8S/gIcL/yO02VvZcNl33EeXDCXLOZwmMMxf3smvrCk/q9mbm/JMju8Qn/8D+15CKFZTksfO8eu/6ohMSo8XS6DI8ZDk+v35ftmh+c87dHN8WmYv6npl+TD3EElZXtMwyMDC6OGDurV6+7g/n59B8Z6xDj4uiObqmO1ufNCNBq5YuDWwvK9JQWbi+JfLPWMIl/07ptXteDT9J5mpGN0eL8BuM7IMyc0KMPToZsZnhlgpQ61Vw+0j3DzLQrAdM7d3fELpvdDeRZD8EqetwfBQC4q1iUbFGuzcFBJyaD0khJ0i3/SLifW+Smp+fmpKfnsabIcdxMmiU9DusPw6bdtINvYIj5NltOnhRX0SeiBPZ0OtxB6wbynpDE4Ygto16FUDxjShj2jOZ6ZEbF5vkPVPlkannyFZ342Y9ntKQ1jg1McZg8aNWpQenExOmfXvGK4o8eYJP9UN7eh4cuO5xcemDptT7h9fN5AO6KSxMAwlhsEd6Fa5IOaUzIdsKSU1kV2DcyScQAIAPh3z6zwuBG+w/x8MzU8GoBn3Zq59A7wEZIMfIDgwAteBXxkOQEf6rRn+FDF5ifaoTsSHwi02Yo/gDmlJ+jS38JCo5RjiB8sLCAowrthUUW2A0s13mOGktbmmbhgBxqDkhteJq+RA2tmkr/I1WPX0EnoJRZ6GSH2EmhhEeCPMazxFnQRVcQOG+2lGTsQ2aTWxcyaSlpPIG9kNH0NSkVDXm4gh8i67d+Q8I/pLH8IetkEvSh0+X0VhJaH0N3Tp0mrIu67J7O+o23GQJt0sQ1kUlWwlo45fRq1ktbvZE3fPTpG2yyC+XrEf7ta8CMqD89K9HUrtrcvdvNNnHW4cka2k786P1/t75Q9479YLYBD3v+/Wy3GzMh2DPDLz/cLcMyeUXloVqKfT4NsSnHirEP/6WpBoyySoTgpO80lcTlUbgcWyrC9Eg1mmEOBFuRyg+sUcEah1ieH/enOTpBT49sIum1gD8w/f4Dh9ANZ92T6lN/R2LufopzfpnmVbKyKrhtkYtRn46T5742uPDW9eHFf00seXpHJAzJ2te96gzw8MrLgHWR5cOiaJtd03w0nlg2rCNBUDEotD1KXkYypbajg61uoCHELpt8lp49MudUyQpUSnDJy6terV37dnKAZox3pEzRk54wVv+4bWXKMPNy7n/x2ON/OwfyKnVdf/HLMjILCSYFxDekZs2i2ejesYB+wFS6OrXCxUB7ByvGsfAjKm1g5gZXHQDmdlRNZeRGskLr2A/X1vD8rJ9EyvLwVJ+UtWIFgZuY+5zDLsveGuawPjR+VcNSnsoTtMnupeSW81AoVeyGoxG+Gk1vh34Zfcr7gc9HpAnxCrvDfRaeLPgCFk+HIxYfcQhPJQjTxG6T6ln2C17fkzjdkIR6OVEBxbsdd2RrhAefGhTxzHtkTvMxZA+lIw1NJW+rktgqDsz3Jlrxp84Tk8NkL5ittfXz6OK1YsDIoekLzlAlxISuXvOTYxwchH9sBS5fMjkqdMGXS+7W170+q/6Cm5gMrn/4+M5fM9QupQSY10UErlqxwfcHbu5/7miVrAiNrZs+uCfJZuGSueoDPsYlnGqecrqs7PaXxzEQOcS90DOA5uR272YCUiOfIANKOvpLbPTaSP4L6+2QANlG8qb/5gE3Id4o3/6w0XgEy3yB30ddsxVCwnKCStriBupHf2WuTNll+T5uG3+KepSMDOqidDEAC+uor+aPHRmx2gKjGD99hdKyVAbyfNhffefCAQ1D+ReA6awSuneusMTKoMeIe6Wu2IwvekV9B1yJk/+z6jL7PXpGVtSI7Z3lW1nJkof+UAyhHfQ1iKT++ENNYimOxFIerBI4hOZ2IkQ7JFZHtaDfvKLgCMgKQtZQDfgx2ZbrhLMHfth+5kA1IhXbV83VKfns28jgiVkLtOX4M+onVslW4tT9S9hNrgRLU8pvpTh0Vs/xsMTrAUXw74B0ML2R4IfpEwn9leBHDi9ApMc87kX+f+5pF/deemrGal56a6WpQO/cNILSmJ3A0kV+JjnfyOzEAWTbyK3Gk9n3oidbyPzMKpYxCKfZmFOqhn6fiXuUqUEAswuBRPN1tyQzX8KykUaOS4GVZkpRUQl/wNLRVjEDxdB/DcXTXgvex3stl2ax31pfgjmk9w8EqP1CcO4d5mQI7M/yOroY/qeMH27B9DuOH1VjonsG2mOcrsa4XN+A0h1vGuwpRnIzjHBF1V3SPTEDLUSSZhBYsQ7fQLeJCXFieAFr21rXUsJYpaAE0ikDLyQSpIdCAHgUttHNC1YzfanSDyZEC+K8Mr2F4DcWh3x0Qsb8irNKtqMgcWSPzHfxTbQo+iG7+hT4iX5IfepAfyde07UVoe0bXFkFT2lw40y7Dh7TJ/FN0k4Sh/qhXD9QbKUkIjbZOQfS/B6J/Xv9dIASvU/z37X347/Gpp0+Jsr2d9nsYdgVHhAxqL0eaXjXXfY8dB5FmNJ2gGWTqUDT/AZpP6h+Qemh/HHYNb+Kr0kh9s90U0xtSiNsL+4ePhCLWE0LOCIGubBESupN9ZN9RlMH+Qxlvk1fRsHg0jLz6NhSHHSN7UeYx8ioB0/PccdhzvCmsYBFmHx0F5NTpRby88zOljJ4MHD16YMLo0QmJY8YkJkL4daGtTTsQjUqKHzUqPmkU74QYnJg4hurkbdjBHIAdjCmLX/WyWqsCqG7eRs0ETSUzCJnOP8Wr7yGug7vX0aHd9vAh1dM6VCvc4IPZKRRLG4s5W2e1DV3YxdsathuFtGWF8U2D3UOcAmJQq5C+LD+pOcU7wNE/DqPV848VBCU6Og8dDh/Co10dBo0Aze2AXdErMjcM+ySOY7uii4CcYcgkETmFmoQ9wnBA6uncA8hh7iuw27eANACyFJDjsE96ky8DZLLYZi/3OVjkESAvishx2Ce9KXMFpFFE3oZ90gFZd0CaAFkCyDosB0kvAjIFkJUg+03UVyjke1D/R8xH+BJtHT8f9UXoATEDELy8F3+ZoxbklHRmv9zu++OPgMfzXvwW2WvMB5EaqXgVH4/UfyD1j+91f4/3wtO1zeggSYGWW/Ai/qbu++3IUuHs6Kix5dW8xpYuoZbotuX9IoRIR9F9y/cs7hd0dBTct8CL0Aubd02ZsmczeoF8t3nPlCm7NpPvdD79vbBP+IX25Wgpo33JoC9HW5kMspw4zIJ8MZGeFkxCSoufzNGASeQ9FDWRfGn+PSr56PzGjefPoBKy6TT9dIps4gSuCOUKP8t+gP4GcN5ckC629dd9MQTCO7q8G6zuGmcVzcvCUmRFIwCkv+mAdzRc25Kbu+Vaw2Td++T6k7V1H9RPOllXd/JOxogFSOGXoe5tpxpLjuT08/Tsm4tyR2y59uDalhHi27q6D+5/UKd7ZPvBg9jOdVCNi4PVZdTTzd3NgWp/V0erfJesFSIiNfttIf3xmkpij92IUOtiUn2oGqgPVTHNXkZgFpGy9Gs/jC0mHKsZtXt8t+vdxkQFFwbDv6iCbtdMx20fVXNsAlqzmdy7Xl9/Hdls3oxs6Cdyb3PleyuHDl35XqX4ju/WHq3KXl0QPDCoICSYvuWvzZrwjrbmucdYV79ID4rvHOaG8keF99ktUCuQiTeHDQWst/DGK+k2BLTNNzTN3Dh3zqZZjVq/FnS2hT+KAsh5bEdeRqO1d5E/uYD2VFaSLDoL1PJWfIjsNs07/j1ycH42AYpulbQUFrYUF79SWPhKsXu8q2uCm1sC/M9bFbYUsbqSopbCc8g13o3WxtNaoBGEF/ODZPc5FefXSUP8XhFNtjuL3yoC9lViyjsATtwYUVScNTetYH1OeoF7cnxCVo9bthWbihPmVkR9adR/ukPIcN8eMckvxA9Jx4uDqoblVagVRt1f6C34BQW6KAeWaZTx5cnacxNDk7e6xHtkG/cwFYz9vb18gacY4GkP8NSl3M+HqOjPOR+OG/fhnDkny8tPzoke7uGeHR2d7eGRjReP/2D6jJMVFSdnTP9g/JGo6oEDq6KjqpIGVkcBjUR8F/kpQsQMAcyvhvv4wbcqvBPifXwSEvBd3q79Ll8R5+0VH+ftE8shLh0wmdyIWZgaWLxbZQ2fGVfI6eZF4161GbWLb6LY0NA04Thx5+1mRqaumqN9gr6OTRrE0V44TogTvz0JT0obLpiyhhzI2vpNbe03W5FWuKuNevHG3DnXGp94cWz/dk3wgrPBCG6weAdeI96ygo+O4im1hnUlXbJnWrKV9cO6fJDunbehSQ32nWEA5dAAR0w9Wm2pNcsdnjbcKcadPB44LjiiciDKG/Hte29fHfDEMjU9ZYhroheSJ47RRFYmoLh0VeVJM7sYf16wDfK93yvaTyb0Cfcg14atK/NKHBIV7hLsZlbRd0R9TMIoyDOtGLXj3Te2eCanxIa5h7uZl/fJrY6KHxMqCMrCCUHlW7LxBVMLjZcyPNB8jKm5xtshOsCC6mkC34SD5UdYNEH1pAjQ4OBWk5tX5EfaP8STp55qoq2K+CY+Sf4B9wKLT/QpLWuVaNAemJ2z1aBRboG9B4eGJ31xavO+U5Zhk8cOQSv5pu2I6+flaucd4O05ZemialXSkHxNkNFh6LeQr+FLoV9PUdtqUdvi+Zo4RlR/vzeGvhy9vxzdR0MjotKHxJWXh6bEh4alo69Kdowp25xTmd1QO/oNviZmUpq9m4+zi3q2n7OTu6syrSY6ekJiTLbCqFtBSnJ1JIdIFcfxkbpoV4nUUBa4y+2c7KrOH+I6/sJ/8DSGtX02inUWmWPDdOP2Awe3bTvw1vboyMjo6KhI488uXLh95/yFz3ZNm9o8c9bUqfRCOfOo23yYoabR7fPGR3byYaDpVYsOT6Gt6IHIfqDYW/d9yMDnNC2eaA5HDgEe0Z6eQR/snLF0m3JcZQiKWIKs/Aa6+Ph7e9TNmj/WKWfm2AiTbTRmBRk+gR49QIJ/0XEEflbFaOHQ5SPwZSHOwycyJjw72zta7e4Zjz5AWYuG5cwYODyhKP+osbo43rKvn4tr0IogVydPpwEJZSHRlVGxuabG3QoGVcwHDaaCPA9AanZWqQlAanpWCYEWnFXy1qkotqO4+H2F6WtVm7Gn9ubWqqqtKIpcYKeUZR1/4lvwpL2Yf5X4ZtMmPaNUqA02euuHL0w/jaNc/BMSQ2xDrPZ7oydkq62iR35oyvjwwUtNIsdFO7jGBQcnWvbUoJe2X1D6xTQMypiRLFr5Nmion+5uJRvmhqulOAMZ2p0NarRBM7k0Km9zUdbsIcYXTIPtE1KNezUkxo8LfX2FJjFeYx9kj4VEY+XwlmlLTpbEVcfZ9582ISwxpi51xo6XU4I0Kapge3UGlTUYtLRY5xtq8TpPFUoi03AGOYhXGL+yU1vO8YzPL4HP/sCnhmnlX04fn3FRS0N3XV64NsszxT0oJX1eVsaCwWmBrine2WsLNFFxav+4aI1HWKinV0iocWRZtE9mqLFJ97KIyNEhoaMjIsq6mxiFZvpGl0UuD/X2CQvz8Q5FozTuboEB7m5BTI+/gx6TIDbyNPQ1cGKDlJcmUJwh/ehnPU/TM0GF502DHLyj7I16vxgfXx6atjA/sHF8XN7GAkeNPeITgwMT47rF18Xbq0LHJ4cnxU1MyZibjlC/rG2zlp0ahd5wCLX3H5yq0dAYsoZrwAfwO2wHwn4XUW1N3Q7FXLnScuVKw43116+vvwHtKlAC3o/u6fcweL/2BLq3bRvIUs8dw6/j6md3TfU4WHsaB6Mrr7xCfm5p4WgPHW+io/wbbJWj0qlp9k7nORUu8Z4HImPsgnwPpKSjNcNPH42dR76ZGDNvd/XEv+iznvBso+5ZWzqnYmc1043CU62xi4k64BXnkpY2qG733KiJqN+82KMfZU/8q4H9OsNDtAEJf9tZW4QOHhwaMniwWXpIaHp6aEg6nWHJh2gNd0CfmShMeLASkAekJ/2OKV6M/5B9jhVoPf1FLUAG4zXotuwqIC+LSCJeg/ezNhtEJAWe+oQhG0UkFdo8YE9tEpEyvAjfYshmioi0brOntohIMDy1mLV5xaDNl6xNi4QsgKe+BGSriNTwPfAB2RBAtolIBX8b7xeaAdkuIvX8UPy6TAHIDn0bnIiOyhMA2SkinoA0MmQXRahWcRHawNdRraKutIqLJLVSvaJRaA2fYahXQJhe6Uwv/wDWFGedFuF9HR7N9vsbBIhqxBYzu2yxiV+pyxRAobfsc6jZKLVo17UQ3OFdxh3t+EExBk6LzWE+8OUiuVgxlpOmAv0kII58cMv/q16G1Ah1jFuenLq8FP5PWV4W6+sdH6NWC6PKlqekrhhbvkwC/fyefsjWSt40d032oNzVufAP3nIO52oGBY4s8B+kyW13MKjKWZNzeEQgVOUHDAocsZEusTQbI/xMv6+m/6Ya9wqUY1j5LC0jE+ER/1DeB8oPWX2s8Dtfzup/Y+WdMszny82hfJ6Vt8jc8beyViifY+USYQ+eJ38Vyr+z8s8kH4/lPKD8J2gRSfTFbNdu+rUP4WfdL/0giRseCpBJRhMuIZuFYjXS05Jmj2+1x2WtJ05wSOLKVrdDZAus7j4N23TJ5XiJd2qo2q6/Em/jq/N8kkPUve378y24Tob7u/YPdG9eAG9+3lMXUp5nkBB0vqOS3Tvn2E3ccx2H5S2yIhqPyRCyVcjF30qgP5agtNf/4JitLb9Z644/2X4vYHm8qYlCEdTgyze0z/NtCDJSePpqxjq2JuEb+Ma21sA6fyMFwiZmv5qZIqx0ds90usvp6BgflRX+Z3RubG/tpCNf9rjqOTrXt/4LnQNWdbISzkhHB0HviG/RuuBb20mceet9W3QsFd/CN7eS2F9JnPgEcFbCdRc5o+EAu7QnPtYhr3m0PS1dkfN4KdE92nE3Lf0ugWcRB9q7JWrPWSP+zJyc/eqEn/6325ydNUjgt7c6jtX4elKJ/Nrn8Q1+DUFyubFJwrLAe9vxJ0nb7jplujvZY2QKAplgpDDyrwts3aZ1F6kYP2C6+3cqij6GVB5XyZd1Umndjm/8A5WtWg9GBTS3R9ScM4K+kQaZX9uBjt+3Mb9HYnfgm6nb0LFf0fGtWlexPcjO9AZcQXuNM/xHhcXbSft2ISY97ekxPq8DxEvdSu6mp93t6HwS5OniSUWvHeTxUkVOetqj7fKaDiBp+CSz1V140ocL+JsXPasJ9IyaDN1rgnYE3r7tSKd7CWM6lXRkG96uHbHtSKcSn67vdL0jdngb3rbtiOR6ehXCc9o8bd62w5J2JZ88LHLdPfD/LdeKff/G9aOM/99cY+6cZCVLnZ1sFZR5aidHhS3YjFrr6S2yXTdKBDdqr0cT0tJlj9LTwG5kq26wUNulpaWnp+n6BE38S58m+dvJoxX6PhVV4D23/nBNSzeO6LpPql1YAetk99mOEiGFs8GvJKrM/fX6VCjOsQnqbuBEtTHVQ88HPU0RUjq5Zzne5XvhG1r37a2ByxNMTBVGdIjW8EtAwwqqwzFOrTorfgd0rlI6xlhja/DbjHDqqreoRiOv07ppPSgdqm9kCnRA4UpnN6CD32aTG9CJN6F2rPfjl7TX+NVTWzE67KSGs4IZ+V0sR1e5fF0Z5qcTUL4mls1hhnsfytf1Zain5Ru0jDh4/hZ7/hN9GexIn7+pK8Pze1j7W/oytKflT/VlaE/Ln4n9x0N5MZQ/50bqymBDWr6tK0vt7+j5gXpa/oLL5zDNvsgOsfwJ/Y079tMCXf2yME2b46+0v7/3Xhe/L4zCyUk88wKe+fzPDJNZF6jOFnKcEMnuoWoE3bcPzmgfcVha89mu2zAWUxp85kdEZGdHwIso2Ifhw4VHWWFhmZlh4Zn6dw5xM4QH6Lzc4W9RnVNcYWFcXFGR8CA3Kio3JzoqFxpI0YURFJSwWYVl3RkNJE+R8gekJE+WCL8rkAu5pdjDYSmygPOJrrJoBhuuSalTkpOnpKY2JSc3pfolJKh9ExKEPQkTExPrEhLqEhMnJixI8POLj/fzSwAeRkF8cRt46A69qjSBbJsOvcoVaOKbaXKF6ZYtGYUO5v2En+eZmq7zSMhw5pAU1VjSvYp+d69RW4u/O/Kz7mdHHGtl+l8UUSr73PHI1v1eCIchkjHH3ypGsd0Oi2U0ENPSeOZMU9sR2eUTJ+bTM16O48E2X/APoSW1TZ9/tg6Nif9uocjGtiPCF2CdLMMXepF2LvXd///qm/L3977Ru9rjf+8bR2/Z8l9wzast/95z2OGHTf/MNTdYZs5rFIWGJ1WO/9A/1ShGz/dP9VvJXJZ2Lb5Tq+wUWvl84Jrx3HUciUDP/xhLkgNNDw8LrbqAcn5/l/6+PlMXogmMb/BfuTGep2j7T/x3SFNCQtOQIY0JCY1D/GNi/OElN46eEB8/ISqK/h89K8rXN4q+QAtLgeuJigLgWsV5/xPf/D9o6B9lMRKVJWntb3KNGRwUnJ4eHDRY/y5psP+/adAS7PWPVEO1x5+ngwPBoxA3h/8J3ZAHcyYw4lhaw5beI5rjn+m3ysGX/+nDxJUzvAZHrhpzCtruw35oriyH43WZPzT3c1lO+6e8c9cjD3yQ+sm1ww+ndI68/w8onh+BeNpjYGRgYGBhcHrUKXkqnt/mKwMzBwMIPCprnwCl5/7c/DdYZBXHc6BaZgYmkCgAdeIN2njaY2BkYGA/8E+IgUG05Ofmrz9FVnEwoAImZgClWAbHeNqt0gPQHEsUhuF3GjtbUeHatm37/ow9sW0b17Zt27YR20Yh5ubb3ZnYSVU9dc6ZaXf7K4Mb3bvgV3DWzkqfvoEv4JaceUTr/aJa3Phd8D63pAKihF/JLQlzBZJ5S96VeXF9l/wkGdX1pZd7i2v9d9yScEM3CDtvkDpoK04m2lPpY4n8GdySlbpA+VXKE5dRdb3qFOSM45bdsvFdFG3Jz+acnDHKt6eU9gn3EtfujPDGDXxZ+ifcR1RMqM5xP+6YPYN9fQUqJtwq+udlnjan0EH6m1Myz8vnMjmuB8pi5VXjNl1U/53lXqR/ItvWPpqP0jEson9Cc2xpNhV3VjiLihvtv6K9mv6xzq4XxQl/NbeYheybl/lv4/l8Kh+36k+OSKT+2pL2d3LOf8q35yG6J3wtBro/qJh9g7m7upfD/aFEvicX+yZEthN1fRna+pNp5FvQxK1UfTaRe4UCf57anS2nUkfekwFST66SjlJb7pKa2dwcz0XSbCMX2SN5RRrIYXEcGcetfvenBlfn8WjsBXlInpTb4viodJMVO9nuCa0FwdenovmQ17JcT0qkgXW8JtfIx9LUfsud0jR9FNH2/vmz2D91ILfYQzjUrGCh+ZgR2dx+zZ0OSIv9g5c2r03v2Mf87lpKJV5yV8m+dDclcjZdXAO97zfpJq+ltQbFvK/z33RvNaXA30hNKfBteVn+kp/kE/lK3ojjZ/LYTrYZZf8BO4PrXA+e9Y3UrpAGYSmv+iOoZN+ik/2YC+08rg5+5wb7vs7wd7mTyLxOO/s2DezP1A/eWdveXsS15jRKzQq1O4gCexaF9lBa2CP1/ScussdwrT1Sjqejzq21PYFuwSxay2nmGG6R+ntjjLA8pakfKQ3rUJA+ks/NfF6T59yqoIzWe43zvGIH8ayZRyMzl/nAa/KcPCuvmGIGBjNAcCheDQDh8/xe5nN+369zPobPB5T5PGC/zgFxLvxeAX5PYnh5bDf6pvZlX/cMdwBAUAYYKNdII2ks8+VZtzQo41aJovZV6uAV1EbxHnnF1GSoOZ03Udt1BdbeaAAAAHjaDMEDAOggFADAlhZWr33btm3btm3btm3btm3bts07hFCL/yegOWgF2oIOoDPoBnqCPqA/nvLSe7m94t5gb7x3EsfBKXAFXAd3xv3xaDwdL8br8W58HF/G9/Frgkk+UopUI+1JbzKcTCULyVqykxwlF8ld8pJ8pYQmoMVoJVqPtqU96VB6kd6lL1k8loplY4VYOTaETWBz2CeOeMCj8UQ8Hc/Fi/FKvB5vxbvxQfyhH9nP6Rf1R/rb/cP+eRFbJBeZRTFRSfQQQ8QEMUesEFvEAXFG3BBPxAfxRyoZRWaVBWVZOV0uluvlbnlcMRWqzCq/Kq2qq8aqveqthqvNar86rePpVDqrLqDL6Oq6sW6ve+thgQwiB/GD2kHzYElwz2Qy+UwvM8wcN5fMPfPKfLPUOhvLJrVl7Gy73G62t+1z+xkQGIgOiSE95IJiUAnqQhvoARNgNuyEo3AR7sNr+O6YK+IquDpuiBvvZrvlbrN77j65v2GFsE7YIvzXFDxAMQ4DAAA9W1sxJGuTZkXSNe3Ztm3btm3btm3btm3bfLz/O/n6+Ub5pvk++uv4Z/iX+B8KiQS/oAh1hZZCV2GjcEN4InwQgWiIacUmYgexjzhCnCIuENeIZ8Ub4hPJlbJLhaXyUm1pgjRbOifdlJ5KH+W4cko5JEflHHIRuYLcR74UyB+YEtgXTBSsHhwbXBS8HCKh/KHeoROhO+Gc4eHh3eHL4dvhx+HX4c/h3yAxSA0CAAELZAB5QSlQCdQCM8FVcBc8BW/BVxgXJoU+GIIatGF6mB3mh8VheVgd1ofNYXvYHQ6AI+EkOBsugWvhNrgfnoAX/o0UjDSI9I8cVpIrXCmr1Fc6KhuUN2o7tZvaTx2mjlOnqfPU5eoDlAeVQbVQBzQAjUWz0HJ0BJ1F19B99AJ9w0lxEEexh3Pgorgcrotb4k54BJ6Bl+CNeB8+ju/gD1ocLYWmadm0Ulojrb02UTug3SOpSZBgwkh6koMUJKVIZVKHtCU9yTiyhdyJZozOiR6OftXz6x31cfpG/YxR1KhhDDGOGleMX6bPzGZ2NSeZx60Ulmq1tjZYR6yL1lOamBKalRamZWhVWo82px1oTzqIjqZT6Fy6jK6nO+hBeoo+pO9ZAiYxgw1lY9lUNpctZWvZVraXHWVX2GP2wQZ29L9V7BH2Qnu//SlGY3ljtWLdY5ectE51Z6Cz1XnpfHR+8oQ8JZd4hOvc4Rl5Tl6Ql+QV+WA+/u+t/Ax/5PrdmFvCreuOdne4z7yAV8hr523xHnrf0yZNq/wB6rssmnjaY2BkYGBiZmhh4GEoYGAH8RAAxAcAGJwBFwB42myQA24FQBRFT20zKMLatoLaiNNv238L5Uq6iC6i6+nNZOrm6TwMgUZeKKOkvAZ4Lmm1XEJtSbXlUqpLsFzGMG+Wy2nn1XIF89xbrlQ9b7lR9W0Ml5RQz7zlua89SxbpptfyEtV0Wt7UfK3lLRGcEyOCgyh7pBXDBHAxxSxx5SfGq2I6/VyIi3i4wSPy4VdXJomTYpkJSUzsIYpXFCVtd1SFlPy4qkl87JmeRzzGNjFNubk2eYqAWdnPrKYnJVOs4FM1rdl5I7Ms4FLHKfnaqR+704+V51xwJFv590wbv/V2zAsKIvtC+pk2e82LLlXxKH4/9VQ+RlCZy0xvkVH0m5emlA/+/iP7Gr/mnIzzvmRwHOiDVAPpYiArE266JgAlMlHeeNpswQOMGAAAwMB2tm3btm3btm3btm3zbRuxscyxppi7IwcA/AkkiP/IkROQWszgCY+JJZqZ5jCnuczNMfOYl9rmow6z+E1d81OPeGYTQ5wFLGghC1vEotSngcUsTkNLWJJGJFmKZBJItLRlLGs5GtPE8lagqRWtRDMrW4XmzLGq1axOC+bylOOkk0KqNaxpLWtbx7rWs74NbMgzWtqIVrS2sU1oY1Ob0dbmtCOLDDKZZwtb2srWtrGt7WxvB9rb0U50sLNd7Go3OtqdTnzhoz3saS9724fO9rUfvZjPQhbZnwUOcCBLWMw1BzmY3g7hO31Yyh/6OpR+rGQ5y1jhMIc7wpH0Z4CjHM1AxziWQWSz1nGsZhVrHO8EJzrJyQxmiFOcylCnOd0ZDHOmsxjOOmc7x7mMYBObuc4G1rPRec53gQt5zkgXMYrRLnYJY1zqMvYz1uWuYBzbXekqtrKFba52jWsZ7zrXM8ENbnSTm5noFibxga9udZvb3eFOJrvL3XzjM3nZxRl2u4eSlKI0ZShLOcpTgYpUcq/73O8BD3rIwx7xqMc87glPesrTnvGs5zzvBS96ycte8arXvO4Nb3rL297xrve87wMf+sjHPvGpz3zuC1/6yte+8a3vfE9+cnGTGtygIIXoQjemMI2afvCjAQYaZLAh5CGQEkzlE10pxgtestdQwww3gje8pQC5ecVrIokw0iiKUpyHVDaaKoQTRDD3eUBVqlONIvzgJ+84yXRjjDXOeBNMNMlkU7hFD7pT2FQOcJBD7OQyV0wznX3sMcNMswj4RxBcGyAQAEAAu3TsxXwwHu7u7vqJuoamlraOrp6+gaGRsYmpmbmFpZW1ja2dvYOjk7OLq5u7Ry655pZSKimnmkaaaaWbnqeXt4+CILgwQBgGAADWZri7uzv8/xFHTJI0JDGLuSAiUVJWUVVT19DU0tbR1dM3MDQyNjE1M7ewtLIOfxtbO3sHRydnF1c3dw9PL28fXz9FmdW15SoOBDeCsyf+hg8m8+i0OefdN2w0Y50B5CVM+vqLWgUWvk9VHdxd6paYWZqrLD4UIjfrnFvL7U7icreygLby72xztYsPdcWU33KBG3OH35O9dIG+wnUIXAE3qt5XyLMtYGv7wJ3xbcXThJnf6uU3IRDlHAtoGz9o6hwfiNO4tvETwtQ8hNs3f9YOb9sr4AbxFlHGs4A2VGyAu/HPZRqXR02C5xq/6ebK+F0zfRu4Mf5Ux/yztwUPGADXKj0IgTj+zgX68G+AO+PvxyJ+Zsbf1HT4d8JZwUpeqngYAtU27GZ8/1K+cn/lAn1gaPyniY8gfrUEOmasq981NtPvigfcmkxf5joCroFbrAf59hLY2oHB1bB4705EwPUEuDgcshNOFuAmLIHOF2kiKiPV9HU5X2HdjpHrtyWCOzBFr+8W+NVYfLR9zyh0c22U+vYdICpEgVHTwaihtW7OqzfaeUDoDLbAr4Yv7V6NF7XvF61NGAG3mIVjvOlb9oABMDLe9S07X+zqQpjvrBCL6sEQOZNQvUhrUB0LJm3zQdQFIX+meMlfZbxkzyyXhPHHYyUTck4FBgeRZXFDhidWcJEoVypk8lSRQ1zKzEnJMt6GJqe4YHnKHiqZR0aBypN9M2rWhshoQzNpPbEKwTnMNnx9LoqeN1pluK5RXksiTy/pVm8E3x18vcTh8e10pMnMwBAwU1aWDY4eCxZXrKDZ/V/HqYyd0rqUjoznRMZZnVb8lL7Jigl/5gkNTKa1KdO4PHD1XOQP4rKpycsnmUad0HaOdq09VT1hUcUupErDuuokwDGDDpjXnZhubJqitkgnC45BeYoPkozoJawsWbi/pfnFiq4uR3/90dxn/RXOL/ZnxgrH2AhxlidxeQTPznxfpylT+V+eCp6xcSLqfcqIj84XeNhNeaKPeHSe77Ab7ug8p2lvrGNtprP+QOcX05z2RmnwRV5nhZETDOTbLetTOZCvV5IRvV+iQ3rgSS4ySpOE0iRBmqRD+dDB+DPy5GOnPHruitKDV4k5R0E6KjEclSiNgqi2YmlqKyZ7jE8F/Yq+H0RJeXdAIqRcEiiXlJQTI+XESLkkUE6UlBMl5cRIOTFSDkrKiWrKpakpJxvKiUM5VaXvbGPvh/RBloy+0Y7lDmmn0jNIRLVnqXgx8Rgk2pZlAyPgehgXhXiRIsgTfOXNpPGDyB9XMmLDHY4okeTB5c+lpaVOKSXZp3pWpDrsRXWEJ5i0eZpzZZKzPg1VULzks06aegvQR8ZtX6SeEOKOd3L1oE/G3YVwct701Os/isiYdefQYwEZ1/qJ9PCKjC9+aNaBiW+xrBAYAG3ganoU4ineC321NmUttxv3rv2r3V2DRXq4b53qTz+8Xaq6J0hVKW0I3ildHCrZWCMoWdSHOwpcZN+Qs9eLZNrrNR3bCpb0b9RIafab+AeMTwTqAAAA"),weight:700,style:"normal"}]});import LZ5 from"satori";import{Resvg as zZ5}from"@resvg/resvg-js";async function AZ5(Z){try{let X=await fetch(Z,{signal:AbortSignal.timeout(1500)});if(!X.ok)return null;let G=X.headers.get("content-type")||"image/png";if(!G.startsWith("image/"))return null;let Y=Buffer.from(await X.arrayBuffer()).toString("base64");return`data:${G};base64,${Y}`}catch{return null}}async function Gv8(Z){let X=Z.faviconUrl?await AZ5(Z.faviconUrl):null,G=X?jX("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:Xv8,display:"flex",alignItems:"center",justifyContent:"center"},jX("img",{},null,{src:X,width:56,height:56})):jX("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:fz0,color:K61,fontSize:44,fontWeight:700,display:"flex",alignItems:"center",justifyContent:"center"},(Z.initial||Z.domain.charAt(0)||"?").toUpperCase()),Y=jX("div",{width:W61,height:Zv8,display:"flex",flexDirection:"column",justifyContent:"space-between",padding:"72px 80px",backgroundColor:K61,color:Xv8,fontFamily:"Inter"},[jX("div",{display:"flex",alignItems:"center",gap:22},[G,jX("div",{display:"flex",flexDirection:"column"},[jX("div",{fontSize:24,color:fz0,fontWeight:600,marginBottom:4},"Commerce report"),jX("div",{fontSize:46,fontWeight:600,letterSpacing:"-0.02em"},Z.domain)])]),jX("div",{display:"flex",alignItems:"flex-end",gap:28},[jX("div",{fontSize:220,fontWeight:700,color:fz0,lineHeight:0.82,letterSpacing:"-0.05em"},String(Math.round(Z.score))),jX("div",{fontSize:60,fontWeight:400,color:"rgba(244,251,230,0.55)",paddingBottom:30},"/100"),jX("div",{fontSize:30,fontWeight:400,color:"rgba(244,251,230,0.82)",paddingBottom:40},"Commerce health score")]),jX("div",{display:"flex",alignItems:"center",gap:14},[jX("div",{width:44,height:44,borderRadius:11,backgroundColor:fz0,display:"flex",alignItems:"center",justifyContent:"center"},jX("svg",{},jX("path",{},null,{d:jZ5,fill:K61}),{width:30,height:30,viewBox:"0 0 200 200"})),jX("div",{fontSize:26,fontWeight:700},"decocms")])]),Q=await LZ5(Y,{width:W61,height:Zv8,fonts:sb8}),$=new zZ5(Q,{fitTo:{mode:"width",value:W61}}).render().asPng();return Uint8Array.from($)}var W61=1200,Zv8=630,K61="#07401a",fz0="#d0ec1a",Xv8="#f4fbe6",jZ5="M79.8641 145.438C97.4676 145.438 107.196 137.562 118.777 113.01C125.263 99.5758 130.358 86.1415 136.381 73.1705L143.793 75.4867C145.646 75.95 147.035 75.0235 146.109 73.1705L136.844 55.1037C136.381 53.714 134.528 53.714 133.601 54.1772L111.365 62.5157C109.512 62.979 109.512 64.832 111.365 65.2952L117.851 67.6115C112.292 79.656 105.806 98.186 100.247 109.767C94.2249 122.738 91.4454 131.54 80.7906 131.54C70.1359 131.54 68.7461 123.665 73.3786 112.084C78.4744 98.6493 86.8129 94.9433 96.0779 97.7228C98.8574 94.0168 100.71 88.4578 101.637 83.362C98.8574 82.4355 95.6146 82.4355 92.8351 82.4355C77.5479 82.4355 62.2606 90.3108 55.7751 106.988C48.8263 128.761 56.2383 145.438 79.8641 145.438Z",jX=(Z,X,G,Y={})=>({type:Z,props:{...Y,style:X,children:G}});var Yv8=B(()=>{eb8()});import{join as Qv8}from"path";async function $v8(Z){try{let X=await fetch(`${f$({})}/api/v2/public/diagnostics/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(PZ5)});if(!X.ok)return null;let G=await X.json(),{deck:Y}=Cz0(G);if(!Y.slides.length)return null;let Q=Y.slides.find((W)=>W.template.template==="cover"),$=Q?.template,J=$&&$.template==="cover"?$:void 0;return{brand:Y.meta.brand?.trim()||Y61(Z),score:Y.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function rQ(Z){return Z.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function TZ5(Z,X){let G=tg(Z),Y=X?.brand?.trim()||Y61(G),Q=Q61(G,128),J=`${(W1().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(G)}`,{title:W,description:K}=rb8({brand:Y,domain:G,score:X?.score,verdict:X?.verdict}),N=`${J}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${rQ(W)}</title>`,`<meta name="description" content="${rQ(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${rQ(W)}" />`,`<meta property="og:description" content="${rQ(K)}" />`,`<meta property="og:url" content="${rQ(J)}" />`,`<meta property="og:image" content="${rQ(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${rQ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${rQ(W)}" />`,`<meta name="twitter:description" content="${rQ(K)}" />`,`<meta name="twitter:image" content="${rQ(N)}" />`,`<meta name="twitter:image:alt" content="${rQ(F)}" />`,`<link rel="canonical" href="${rQ(J)}" />`,`<link rel="icon" href="${rQ(Q)}" sizes="any" />`].join(`
|
|
2793
|
+
`;return new TextEncoder().encode(Y)}var o41,gC,f95,Tb8,r41="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",v95,l8,c8,G6,Pb8=24,hC,gJ;var Vb8=B(()=>{(function(Z){Z.Operator="operator",Z.Account="account",Z.User="user",Z.Activation="activation",Z.AuthorizationResponse="authorization_response"})(o41||(o41={}));(function(Z){var X=function(g,i){this.hi=g|0,this.lo=i|0},G=function(g){var i,h=new Float64Array(16);if(g)for(i=0;i<g.length;i++)h[i]=g[i];return h},Y=function(){throw Error("no PRNG")},Q=new Uint8Array(16),$=new Uint8Array(32);$[0]=9;var J=G(),W=G([1]),K=G([56129,1]),N=G([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),F=G([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),U=G([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),H=G([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),w=G([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function O(g,i){return g<<i|g>>>32-i}function D(g,i){var h=g[i+3]&255;return h=h<<8|g[i+2]&255,h=h<<8|g[i+1]&255,h<<8|g[i+0]&255}function E(g,i){var h=g[i]<<24|g[i+1]<<16|g[i+2]<<8|g[i+3],a=g[i+4]<<24|g[i+5]<<16|g[i+6]<<8|g[i+7];return new X(h,a)}function L(g,i,h){var a;for(a=0;a<4;a++)g[i+a]=h&255,h>>>=8}function z(g,i,h){g[i]=h.hi>>24&255,g[i+1]=h.hi>>16&255,g[i+2]=h.hi>>8&255,g[i+3]=h.hi&255,g[i+4]=h.lo>>24&255,g[i+5]=h.lo>>16&255,g[i+6]=h.lo>>8&255,g[i+7]=h.lo&255}function j(g,i,h,a,$0){var N0,b0=0;for(N0=0;N0<$0;N0++)b0|=g[i+N0]^h[a+N0];return(1&b0-1>>>8)-1}function P(g,i,h,a){return j(g,i,h,a,16)}function A(g,i,h,a){return j(g,i,h,a,32)}function I(g,i,h,a,$0){var N0=new Uint32Array(16),b0=new Uint32Array(16),d0=new Uint32Array(16),T0=new Uint32Array(4),S0,P0,_0;for(S0=0;S0<4;S0++)b0[5*S0]=D(a,4*S0),b0[1+S0]=D(h,4*S0),b0[6+S0]=D(i,4*S0),b0[11+S0]=D(h,16+4*S0);for(S0=0;S0<16;S0++)d0[S0]=b0[S0];for(S0=0;S0<20;S0++){for(P0=0;P0<4;P0++){for(_0=0;_0<4;_0++)T0[_0]=b0[(5*P0+4*_0)%16];T0[1]^=O(T0[0]+T0[3]|0,7),T0[2]^=O(T0[1]+T0[0]|0,9),T0[3]^=O(T0[2]+T0[1]|0,13),T0[0]^=O(T0[3]+T0[2]|0,18);for(_0=0;_0<4;_0++)N0[4*P0+(P0+_0)%4]=T0[_0]}for(_0=0;_0<16;_0++)b0[_0]=N0[_0]}if($0){for(S0=0;S0<16;S0++)b0[S0]=b0[S0]+d0[S0]|0;for(S0=0;S0<4;S0++)b0[5*S0]=b0[5*S0]-D(a,4*S0)|0,b0[6+S0]=b0[6+S0]-D(i,4*S0)|0;for(S0=0;S0<4;S0++)L(g,4*S0,b0[5*S0]),L(g,16+4*S0,b0[6+S0])}else for(S0=0;S0<16;S0++)L(g,4*S0,b0[S0]+d0[S0]|0)}function S(g,i,h,a){return I(g,i,h,a,!1),0}function M(g,i,h,a){return I(g,i,h,a,!0),0}var C=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function m(g,i,h,a,$0,N0,b0){var d0=new Uint8Array(16),T0=new Uint8Array(64),S0,P0;if(!$0)return 0;for(P0=0;P0<16;P0++)d0[P0]=0;for(P0=0;P0<8;P0++)d0[P0]=N0[P0];while($0>=64){S(T0,d0,b0,C);for(P0=0;P0<64;P0++)g[i+P0]=(h?h[a+P0]:0)^T0[P0];S0=1;for(P0=8;P0<16;P0++)S0=S0+(d0[P0]&255)|0,d0[P0]=S0&255,S0>>>=8;if($0-=64,i+=64,h)a+=64}if($0>0){S(T0,d0,b0,C);for(P0=0;P0<$0;P0++)g[i+P0]=(h?h[a+P0]:0)^T0[P0]}return 0}function v(g,i,h,a,$0){return m(g,i,null,0,h,a,$0)}function _(g,i,h,a,$0){var N0=new Uint8Array(32);return M(N0,a,$0,C),v(g,i,h,a.subarray(16),N0)}function Z0(g,i,h,a,$0,N0,b0){var d0=new Uint8Array(32);return M(d0,N0,b0,C),m(g,i,h,a,$0,N0.subarray(16),d0)}function p(g,i){var h,a=0;for(h=0;h<17;h++)a=a+(g[h]+i[h]|0)|0,g[h]=a&255,a>>>=8}var K0=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function D0(g,i,h,a,$0,N0){var b0,d0,T0,S0,P0=new Uint32Array(17),_0=new Uint32Array(17),a0=new Uint32Array(17),Z1=new Uint32Array(17),N1=new Uint32Array(17);for(T0=0;T0<17;T0++)_0[T0]=a0[T0]=0;for(T0=0;T0<16;T0++)_0[T0]=N0[T0];_0[3]&=15,_0[4]&=252,_0[7]&=15,_0[8]&=252,_0[11]&=15,_0[12]&=252,_0[15]&=15;while($0>0){for(T0=0;T0<17;T0++)Z1[T0]=0;for(T0=0;T0<16&&T0<$0;++T0)Z1[T0]=h[a+T0];Z1[T0]=1,a+=T0,$0-=T0,p(a0,Z1);for(d0=0;d0<17;d0++){P0[d0]=0;for(T0=0;T0<17;T0++)P0[d0]=P0[d0]+a0[T0]*(T0<=d0?_0[d0-T0]:320*_0[d0+17-T0]|0)|0|0}for(d0=0;d0<17;d0++)a0[d0]=P0[d0];S0=0;for(T0=0;T0<16;T0++)S0=S0+a0[T0]|0,a0[T0]=S0&255,S0>>>=8;S0=S0+a0[16]|0,a0[16]=S0&3,S0=5*(S0>>>2)|0;for(T0=0;T0<16;T0++)S0=S0+a0[T0]|0,a0[T0]=S0&255,S0>>>=8;S0=S0+a0[16]|0,a0[16]=S0}for(T0=0;T0<17;T0++)N1[T0]=a0[T0];p(a0,K0),b0=-(a0[16]>>>7)|0;for(T0=0;T0<17;T0++)a0[T0]^=b0&(N1[T0]^a0[T0]);for(T0=0;T0<16;T0++)Z1[T0]=N0[T0+16];Z1[16]=0,p(a0,Z1);for(T0=0;T0<16;T0++)g[i+T0]=a0[T0];return 0}function W0(g,i,h,a,$0,N0){var b0=new Uint8Array(16);return D0(b0,0,h,a,$0,N0),P(g,i,b0,0)}function Q0(g,i,h,a,$0){var N0;if(h<32)return-1;Z0(g,0,i,0,h,a,$0),D0(g,16,g,32,h-32,g);for(N0=0;N0<16;N0++)g[N0]=0;return 0}function s(g,i,h,a,$0){var N0,b0=new Uint8Array(32);if(h<32)return-1;if(_(b0,0,32,a,$0),W0(i,16,i,32,h-32,b0)!==0)return-1;Z0(g,0,i,0,h,a,$0);for(N0=0;N0<32;N0++)g[N0]=0;return 0}function E0(g,i){var h;for(h=0;h<16;h++)g[h]=i[h]|0}function U0(g){var i,h;for(h=0;h<16;h++)g[h]+=65536,i=Math.floor(g[h]/65536),g[(h+1)*(h<15?1:0)]+=i-1+37*(i-1)*(h===15?1:0),g[h]-=i*65536}function x0(g,i,h){var a,$0=~(h-1);for(var N0=0;N0<16;N0++)a=$0&(g[N0]^i[N0]),g[N0]^=a,i[N0]^=a}function c0(g,i){var h,a,$0,N0=G(),b0=G();for(h=0;h<16;h++)b0[h]=i[h];U0(b0),U0(b0),U0(b0);for(a=0;a<2;a++){N0[0]=b0[0]-65517;for(h=1;h<15;h++)N0[h]=b0[h]-65535-(N0[h-1]>>16&1),N0[h-1]&=65535;N0[15]=b0[15]-32767-(N0[14]>>16&1),$0=N0[15]>>16&1,N0[14]&=65535,x0(b0,N0,1-$0)}for(h=0;h<16;h++)g[2*h]=b0[h]&255,g[2*h+1]=b0[h]>>8}function m0(g,i){var h=new Uint8Array(32),a=new Uint8Array(32);return c0(h,g),c0(a,i),A(h,0,a,0)}function i0(g){var i=new Uint8Array(32);return c0(i,g),i[0]&1}function H0(g,i){var h;for(h=0;h<16;h++)g[h]=i[2*h]+(i[2*h+1]<<8);g[15]&=32767}function C0(g,i,h){var a;for(a=0;a<16;a++)g[a]=i[a]+h[a]|0}function I0(g,i,h){var a;for(a=0;a<16;a++)g[a]=i[a]-h[a]|0}function B0(g,i,h){var a,$0,N0=new Float64Array(31);for(a=0;a<31;a++)N0[a]=0;for(a=0;a<16;a++)for($0=0;$0<16;$0++)N0[a+$0]+=i[a]*h[$0];for(a=0;a<15;a++)N0[a]+=38*N0[a+16];for(a=0;a<16;a++)g[a]=N0[a];U0(g),U0(g)}function J0(g,i){B0(g,i,i)}function Y0(g,i){var h=G(),a;for(a=0;a<16;a++)h[a]=i[a];for(a=253;a>=0;a--)if(J0(h,h),a!==2&&a!==4)B0(h,h,i);for(a=0;a<16;a++)g[a]=h[a]}function V0(g,i){var h=G(),a;for(a=0;a<16;a++)h[a]=i[a];for(a=250;a>=0;a--)if(J0(h,h),a!==1)B0(h,h,i);for(a=0;a<16;a++)g[a]=h[a]}function t(g,i,h){var a=new Uint8Array(32),$0=new Float64Array(80),N0,b0,d0=G(),T0=G(),S0=G(),P0=G(),_0=G(),a0=G();for(b0=0;b0<31;b0++)a[b0]=i[b0];a[31]=i[31]&127|64,a[0]&=248,H0($0,h);for(b0=0;b0<16;b0++)T0[b0]=$0[b0],P0[b0]=d0[b0]=S0[b0]=0;d0[0]=P0[0]=1;for(b0=254;b0>=0;--b0)N0=a[b0>>>3]>>>(b0&7)&1,x0(d0,T0,N0),x0(S0,P0,N0),C0(_0,d0,S0),I0(d0,d0,S0),C0(S0,T0,P0),I0(T0,T0,P0),J0(P0,_0),J0(a0,d0),B0(d0,S0,d0),B0(S0,T0,_0),C0(_0,d0,S0),I0(d0,d0,S0),J0(T0,d0),I0(S0,P0,a0),B0(d0,S0,K),C0(d0,d0,P0),B0(S0,S0,d0),B0(d0,P0,a0),B0(P0,T0,$0),J0(T0,_0),x0(d0,T0,N0),x0(S0,P0,N0);for(b0=0;b0<16;b0++)$0[b0+16]=d0[b0],$0[b0+32]=S0[b0],$0[b0+48]=T0[b0],$0[b0+64]=P0[b0];var Z1=$0.subarray(32),N1=$0.subarray(16);return Y0(Z1,Z1),B0(N1,N1,Z1),c0(g,N1),0}function G0(g,i){return t(g,i,$)}function r0(g,i){return Y(i,32),G0(g,i)}function q0(g,i,h){var a=new Uint8Array(32);return t(a,h,i),M(g,Q,a,C)}var l=Q0,d=s;function k0(g,i,h,a,$0,N0){var b0=new Uint8Array(32);return q0(b0,$0,N0),l(g,i,h,a,b0)}function y0(g,i,h,a,$0,N0){var b0=new Uint8Array(32);return q0(b0,$0,N0),d(g,i,h,a,b0)}function O1(){var g=0,i=0,h=0,a=0,$0=65535,N0,b0,d0;for(d0=0;d0<arguments.length;d0++)N0=arguments[d0].lo,b0=arguments[d0].hi,g+=N0&$0,i+=N0>>>16,h+=b0&$0,a+=b0>>>16;return i+=g>>>16,h+=i>>>16,a+=h>>>16,new X(h&$0|a<<16,g&$0|i<<16)}function n0(g,i){return new X(g.hi>>>i,g.lo>>>i|g.hi<<32-i)}function j1(){var g=0,i=0,h;for(h=0;h<arguments.length;h++)g^=arguments[h].lo,i^=arguments[h].hi;return new X(i,g)}function M8(g,i){var h,a,$0=32-i;if(i<32)h=g.hi>>>i|g.lo<<$0,a=g.lo>>>i|g.hi<<$0;else if(i<64)h=g.lo>>>i|g.hi<<$0,a=g.hi>>>i|g.lo<<$0;return new X(h,a)}function L6(g,i,h){var a=g.hi&i.hi^~g.hi&h.hi,$0=g.lo&i.lo^~g.lo&h.lo;return new X(a,$0)}function P5(g,i,h){var a=g.hi&i.hi^g.hi&h.hi^i.hi&h.hi,$0=g.lo&i.lo^g.lo&h.lo^i.lo&h.lo;return new X(a,$0)}function h9(g){return j1(M8(g,28),M8(g,34),M8(g,39))}function X0(g){return j1(M8(g,14),M8(g,18),M8(g,41))}function K1(g){return j1(M8(g,1),M8(g,8),n0(g,7))}function a8(g){return j1(M8(g,19),M8(g,61),n0(g,6))}var s8=[new X(1116352408,3609767458),new X(1899447441,602891725),new X(3049323471,3964484399),new X(3921009573,2173295548),new X(961987163,4081628472),new X(1508970993,3053834265),new X(2453635748,2937671579),new X(2870763221,3664609560),new X(3624381080,2734883394),new X(310598401,1164996542),new X(607225278,1323610764),new X(1426881987,3590304994),new X(1925078388,4068182383),new X(2162078206,991336113),new X(2614888103,633803317),new X(3248222580,3479774868),new X(3835390401,2666613458),new X(4022224774,944711139),new X(264347078,2341262773),new X(604807628,2007800933),new X(770255983,1495990901),new X(1249150122,1856431235),new X(1555081692,3175218132),new X(1996064986,2198950837),new X(2554220882,3999719339),new X(2821834349,766784016),new X(2952996808,2566594879),new X(3210313671,3203337956),new X(3336571891,1034457026),new X(3584528711,2466948901),new X(113926993,3758326383),new X(338241895,168717936),new X(666307205,1188179964),new X(773529912,1546045734),new X(1294757372,1522805485),new X(1396182291,2643833823),new X(1695183700,2343527390),new X(1986661051,1014477480),new X(2177026350,1206759142),new X(2456956037,344077627),new X(2730485921,1290863460),new X(2820302411,3158454273),new X(3259730800,3505952657),new X(3345764771,106217008),new X(3516065817,3606008344),new X(3600352804,1432725776),new X(4094571909,1467031594),new X(275423344,851169720),new X(430227734,3100823752),new X(506948616,1363258195),new X(659060556,3750685593),new X(883997877,3785050280),new X(958139571,3318307427),new X(1322822218,3812723403),new X(1537002063,2003034995),new X(1747873779,3602036899),new X(1955562222,1575990012),new X(2024104815,1125592928),new X(2227730452,2716904306),new X(2361852424,442776044),new X(2428436474,593698344),new X(2756734187,3733110249),new X(3204031479,2999351573),new X(3329325298,3815920427),new X(3391569614,3928383900),new X(3515267271,566280711),new X(3940187606,3454069534),new X(4118630271,4000239992),new X(116418474,1914138554),new X(174292421,2731055270),new X(289380356,3203993006),new X(460393269,320620315),new X(685471733,587496836),new X(852142971,1086792851),new X(1017036298,365543100),new X(1126000580,2618297676),new X(1288033470,3409855158),new X(1501505948,4234509866),new X(1607167915,987167468),new X(1816402316,1246189591)];function AZ(g,i,h){var a=[],$0=[],N0=[],b0=[],d0,T0,S0;for(T0=0;T0<8;T0++)a[T0]=N0[T0]=E(g,8*T0);var P0=0;while(h>=128){for(T0=0;T0<16;T0++)b0[T0]=E(i,8*T0+P0);for(T0=0;T0<80;T0++){for(S0=0;S0<8;S0++)$0[S0]=N0[S0];d0=O1(N0[7],X0(N0[4]),L6(N0[4],N0[5],N0[6]),s8[T0],b0[T0%16]),$0[7]=O1(d0,h9(N0[0]),P5(N0[0],N0[1],N0[2])),$0[3]=O1($0[3],d0);for(S0=0;S0<8;S0++)N0[(S0+1)%8]=$0[S0];if(T0%16===15)for(S0=0;S0<16;S0++)b0[S0]=O1(b0[S0],b0[(S0+9)%16],K1(b0[(S0+1)%16]),a8(b0[(S0+14)%16]))}for(T0=0;T0<8;T0++)N0[T0]=O1(N0[T0],a[T0]),a[T0]=N0[T0];P0+=128,h-=128}for(T0=0;T0<8;T0++)z(g,8*T0,a[T0]);return h}var nG=new Uint8Array([106,9,230,103,243,188,201,8,187,103,174,133,132,202,167,59,60,110,243,114,254,148,248,43,165,79,245,58,95,29,54,241,81,14,82,127,173,230,130,209,155,5,104,140,43,62,108,31,31,131,217,171,251,65,189,107,91,224,205,25,19,126,33,121]);function q4(g,i,h){var a=new Uint8Array(64),$0=new Uint8Array(256),N0,b0=h;for(N0=0;N0<64;N0++)a[N0]=nG[N0];AZ(a,i,h),h%=128;for(N0=0;N0<256;N0++)$0[N0]=0;for(N0=0;N0<h;N0++)$0[N0]=i[b0-h+N0];$0[h]=128,h=256-128*(h<112?1:0),$0[h-9]=0,z($0,h-8,new X(b0/536870912|0,b0<<3)),AZ(a,$0,h);for(N0=0;N0<64;N0++)g[N0]=a[N0];return 0}function C6(g,i){var h=G(),a=G(),$0=G(),N0=G(),b0=G(),d0=G(),T0=G(),S0=G(),P0=G();I0(h,g[1],g[0]),I0(P0,i[1],i[0]),B0(h,h,P0),C0(a,g[0],g[1]),C0(P0,i[0],i[1]),B0(a,a,P0),B0($0,g[3],i[3]),B0($0,$0,F),B0(N0,g[2],i[2]),C0(N0,N0,N0),I0(b0,a,h),I0(d0,N0,$0),C0(T0,N0,$0),C0(S0,a,h),B0(g[0],b0,d0),B0(g[1],S0,T0),B0(g[2],T0,d0),B0(g[3],b0,S0)}function Z9(g,i,h){var a;for(a=0;a<4;a++)x0(g[a],i[a],h)}function T9(g,i){var h=G(),a=G(),$0=G();Y0($0,i[2]),B0(h,i[0],$0),B0(a,i[1],$0),c0(g,a),g[31]^=i0(h)<<7}function QZ(g,i,h){var a,$0;E0(g[0],J),E0(g[1],W),E0(g[2],W),E0(g[3],J);for($0=255;$0>=0;--$0)a=h[$0/8|0]>>($0&7)&1,Z9(g,i,a),C6(i,g),C6(g,g),Z9(g,i,a)}function PZ(g,i){var h=[G(),G(),G(),G()];E0(h[0],U),E0(h[1],H),E0(h[2],W),B0(h[3],U,H),QZ(g,h,i)}function _1(g,i,h){var a=new Uint8Array(64),$0=[G(),G(),G(),G()],N0;if(!h)Y(i,32);q4(a,i,32),a[0]&=248,a[31]&=127,a[31]|=64,PZ($0,a),T9(g,$0);for(N0=0;N0<32;N0++)i[N0+32]=g[N0];return 0}var M4=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function k4(g,i){var h,a,$0,N0;for(a=63;a>=32;--a){h=0;for($0=a-32,N0=a-12;$0<N0;++$0)i[$0]+=h-16*i[a]*M4[$0-(a-32)],h=Math.floor((i[$0]+128)/256),i[$0]-=h*256;i[$0]+=h,i[a]=0}h=0;for($0=0;$0<32;$0++)i[$0]+=h-(i[31]>>4)*M4[$0],h=i[$0]>>8,i[$0]&=255;for($0=0;$0<32;$0++)i[$0]-=h*M4[$0];for(a=0;a<32;a++)i[a+1]+=i[a]>>8,g[a]=i[a]&255}function Y6(g){var i=new Float64Array(64),h;for(h=0;h<64;h++)i[h]=g[h];for(h=0;h<64;h++)g[h]=0;k4(g,i)}function b8(g,i,h,a){var $0=new Uint8Array(64),N0=new Uint8Array(64),b0=new Uint8Array(64),d0,T0,S0=new Float64Array(64),P0=[G(),G(),G(),G()];q4($0,a,32),$0[0]&=248,$0[31]&=127,$0[31]|=64;var _0=h+64;for(d0=0;d0<h;d0++)g[64+d0]=i[d0];for(d0=0;d0<32;d0++)g[32+d0]=$0[32+d0];q4(b0,g.subarray(32),h+32),Y6(b0),PZ(P0,b0),T9(g,P0);for(d0=32;d0<64;d0++)g[d0]=a[d0];q4(N0,g,h+64),Y6(N0);for(d0=0;d0<64;d0++)S0[d0]=0;for(d0=0;d0<32;d0++)S0[d0]=b0[d0];for(d0=0;d0<32;d0++)for(T0=0;T0<32;T0++)S0[d0+T0]+=N0[d0]*$0[T0];return k4(g.subarray(32),S0),_0}function U4(g,i){var h=G(),a=G(),$0=G(),N0=G(),b0=G(),d0=G(),T0=G();if(E0(g[2],W),H0(g[1],i),J0($0,g[1]),B0(N0,$0,N),I0($0,$0,g[2]),C0(N0,g[2],N0),J0(b0,N0),J0(d0,b0),B0(T0,d0,b0),B0(h,T0,$0),B0(h,h,N0),V0(h,h),B0(h,h,$0),B0(h,h,N0),B0(h,h,N0),B0(g[0],h,N0),J0(a,g[0]),B0(a,a,N0),m0(a,$0))B0(g[0],g[0],w);if(J0(a,g[0]),B0(a,a,N0),m0(a,$0))return-1;if(i0(g[0])===i[31]>>7)I0(g[0],J,g[0]);return B0(g[3],g[0],g[1]),0}function AX(g,i,h,a){var $0,N0=new Uint8Array(32),b0=new Uint8Array(64),d0=[G(),G(),G(),G()],T0=[G(),G(),G(),G()];if(h<64)return-1;if(U4(T0,a))return-1;for($0=0;$0<h;$0++)g[$0]=i[$0];for($0=0;$0<32;$0++)g[$0+32]=a[$0];if(q4(b0,g,h),Y6(b0),QZ(d0,T0,b0),PZ(T0,i.subarray(32)),C6(d0,T0),T9(N0,d0),h-=64,A(i,0,N0,0)){for($0=0;$0<h;$0++)g[$0]=0;return-1}for($0=0;$0<h;$0++)g[$0]=i[$0+64];return h}var S8=32,i6=24,e6=32,r4=16,X9=32,V=32,c=32,u=32,R=32,o=i6,v0=e6,l0=r4,J1=64,U1=32,g1=64,v1=32,$4=64;Z.lowlevel={crypto_core_hsalsa20:M,crypto_stream_xor:Z0,crypto_stream:_,crypto_stream_salsa20_xor:m,crypto_stream_salsa20:v,crypto_onetimeauth:D0,crypto_onetimeauth_verify:W0,crypto_verify_16:P,crypto_verify_32:A,crypto_secretbox:Q0,crypto_secretbox_open:s,crypto_scalarmult:t,crypto_scalarmult_base:G0,crypto_box_beforenm:q0,crypto_box_afternm:l,crypto_box:k0,crypto_box_open:y0,crypto_box_keypair:r0,crypto_hash:q4,crypto_sign:b8,crypto_sign_keypair:_1,crypto_sign_open:AX,crypto_secretbox_KEYBYTES:S8,crypto_secretbox_NONCEBYTES:i6,crypto_secretbox_ZEROBYTES:e6,crypto_secretbox_BOXZEROBYTES:r4,crypto_scalarmult_BYTES:X9,crypto_scalarmult_SCALARBYTES:V,crypto_box_PUBLICKEYBYTES:c,crypto_box_SECRETKEYBYTES:u,crypto_box_BEFORENMBYTES:R,crypto_box_NONCEBYTES:o,crypto_box_ZEROBYTES:v0,crypto_box_BOXZEROBYTES:l0,crypto_sign_BYTES:J1,crypto_sign_PUBLICKEYBYTES:U1,crypto_sign_SECRETKEYBYTES:g1,crypto_sign_SEEDBYTES:v1,crypto_hash_BYTES:$4,gf:G,D:N,L:M4,pack25519:c0,unpack25519:H0,M:B0,A:C0,S:J0,Z:I0,pow2523:V0,add:C6,set25519:E0,modL:k4,scalarmult:QZ,scalarbase:PZ};function c1(g,i){if(g.length!==S8)throw Error("bad key size");if(i.length!==i6)throw Error("bad nonce size")}function L8(g,i){if(g.length!==c)throw Error("bad public key size");if(i.length!==u)throw Error("bad secret key size")}function Y8(){for(var g=0;g<arguments.length;g++)if(!(arguments[g]instanceof Uint8Array))throw TypeError("unexpected type, use Uint8Array")}function y8(g){for(var i=0;i<g.length;i++)g[i]=0}Z.randomBytes=function(g){var i=new Uint8Array(g);return Y(i,g),i},Z.secretbox=function(g,i,h){Y8(g,i,h),c1(h,i);var a=new Uint8Array(e6+g.length),$0=new Uint8Array(a.length);for(var N0=0;N0<g.length;N0++)a[N0+e6]=g[N0];return Q0($0,a,a.length,i,h),$0.subarray(r4)},Z.secretbox.open=function(g,i,h){Y8(g,i,h),c1(h,i);var a=new Uint8Array(r4+g.length),$0=new Uint8Array(a.length);for(var N0=0;N0<g.length;N0++)a[N0+r4]=g[N0];if(a.length<32)return null;if(s($0,a,a.length,i,h)!==0)return null;return $0.subarray(e6)},Z.secretbox.keyLength=S8,Z.secretbox.nonceLength=i6,Z.secretbox.overheadLength=r4,Z.scalarMult=function(g,i){if(Y8(g,i),g.length!==V)throw Error("bad n size");if(i.length!==X9)throw Error("bad p size");var h=new Uint8Array(X9);return t(h,g,i),h},Z.scalarMult.base=function(g){if(Y8(g),g.length!==V)throw Error("bad n size");var i=new Uint8Array(X9);return G0(i,g),i},Z.scalarMult.scalarLength=V,Z.scalarMult.groupElementLength=X9,Z.box=function(g,i,h,a){var $0=Z.box.before(h,a);return Z.secretbox(g,i,$0)},Z.box.before=function(g,i){Y8(g,i),L8(g,i);var h=new Uint8Array(R);return q0(h,g,i),h},Z.box.after=Z.secretbox,Z.box.open=function(g,i,h,a){var $0=Z.box.before(h,a);return Z.secretbox.open(g,i,$0)},Z.box.open.after=Z.secretbox.open,Z.box.keyPair=function(){var g=new Uint8Array(c),i=new Uint8Array(u);return r0(g,i),{publicKey:g,secretKey:i}},Z.box.keyPair.fromSecretKey=function(g){if(Y8(g),g.length!==u)throw Error("bad secret key size");var i=new Uint8Array(c);return G0(i,g),{publicKey:i,secretKey:new Uint8Array(g)}},Z.box.publicKeyLength=c,Z.box.secretKeyLength=u,Z.box.sharedKeyLength=R,Z.box.nonceLength=o,Z.box.overheadLength=Z.secretbox.overheadLength,Z.sign=function(g,i){if(Y8(g,i),i.length!==g1)throw Error("bad secret key size");var h=new Uint8Array(J1+g.length);return b8(h,g,g.length,i),h},Z.sign.open=function(g,i){if(Y8(g,i),i.length!==U1)throw Error("bad public key size");var h=new Uint8Array(g.length),a=AX(h,g,g.length,i);if(a<0)return null;var $0=new Uint8Array(a);for(var N0=0;N0<$0.length;N0++)$0[N0]=h[N0];return $0},Z.sign.detached=function(g,i){var h=Z.sign(g,i),a=new Uint8Array(J1);for(var $0=0;$0<a.length;$0++)a[$0]=h[$0];return a},Z.sign.detached.verify=function(g,i,h){if(Y8(g,i,h),i.length!==J1)throw Error("bad signature size");if(h.length!==U1)throw Error("bad public key size");var a=new Uint8Array(J1+g.length),$0=new Uint8Array(J1+g.length),N0;for(N0=0;N0<J1;N0++)a[N0]=i[N0];for(N0=0;N0<g.length;N0++)a[N0+J1]=g[N0];return AX($0,a,a.length,h)>=0},Z.sign.keyPair=function(){var g=new Uint8Array(U1),i=new Uint8Array(g1);return _1(g,i),{publicKey:g,secretKey:i}},Z.sign.keyPair.fromSecretKey=function(g){if(Y8(g),g.length!==g1)throw Error("bad secret key size");var i=new Uint8Array(U1);for(var h=0;h<i.length;h++)i[h]=g[32+h];return{publicKey:i,secretKey:new Uint8Array(g)}},Z.sign.keyPair.fromSeed=function(g){if(Y8(g),g.length!==v1)throw Error("bad seed size");var i=new Uint8Array(U1),h=new Uint8Array(g1);for(var a=0;a<32;a++)h[a]=g[a];return _1(i,h,!0),{publicKey:i,secretKey:h}},Z.sign.publicKeyLength=U1,Z.sign.secretKeyLength=g1,Z.sign.seedLength=v1,Z.sign.signatureLength=J1,Z.hash=function(g){Y8(g);var i=new Uint8Array($4);return q4(i,g,g.length),i},Z.hash.hashLength=$4,Z.verify=function(g,i){if(Y8(g,i),g.length===0||i.length===0)return!1;if(g.length!==i.length)return!1;return j(g,0,i,0,g.length)===0?!0:!1},Z.setPRNG=function(g){Y=g},function(){var g=typeof globalThis<"u"?globalThis.crypto||globalThis.msCrypto:null;if(g&&g.getRandomValues){var i=65536;Z.setPRNG(function(h,a){var $0,N0=new Uint8Array(a);for($0=0;$0<a;$0+=i)g.getRandomValues(N0.subarray($0,$0+Math.min(a-$0,i)));for($0=0;$0<a;$0++)h[$0]=N0[$0];y8(N0)})}else if(g=u0("crypto"),g&&g.randomBytes)Z.setPRNG(function(h,a){var $0,N0=g.randomBytes(a);for($0=0;$0<a;$0++)h[$0]=N0[$0];y8(N0)})}()})(typeof pg<"u"&&IY7?IY7:globalThis.nacl=globalThis.nacl||{});gC=typeof pg<"u"&&IY7?IY7:globalThis.nacl,f95={fromSeed:gC.sign.keyPair.fromSeed,sign:gC.sign.detached,verify:gC.sign.detached.verify,randomBytes:gC.randomBytes,scalarBaseMultiply:gC.scalarMult.base,seal:gC.box,open:gC.box.open};v95=new Uint16Array([0,4129,8258,12387,16516,20645,24774,28903,33032,37161,41290,45419,49548,53677,57806,61935,4657,528,12915,8786,21173,17044,29431,25302,37689,33560,45947,41818,54205,50076,62463,58334,9314,13379,1056,5121,25830,29895,17572,21637,42346,46411,34088,38153,58862,62927,50604,54669,13907,9842,5649,1584,30423,26358,22165,18100,46939,42874,38681,34616,63455,59390,55197,51132,18628,22757,26758,30887,2112,6241,10242,14371,51660,55789,59790,63919,35144,39273,43274,47403,23285,19156,31415,27286,6769,2640,14899,10770,56317,52188,64447,60318,39801,35672,47931,43802,27814,31879,19684,23749,11298,15363,3168,7233,60846,64911,52716,56781,44330,48395,36200,40265,32407,28342,24277,20212,15891,11826,7761,3696,65439,61374,57309,53244,48923,44858,40793,36728,37256,33193,45514,41451,53516,49453,61774,57711,4224,161,12482,8419,20484,16421,28742,24679,33721,37784,41979,46042,49981,54044,58239,62302,689,4752,8947,13010,16949,21012,25207,29270,46570,42443,38312,34185,62830,58703,54572,50445,13538,9411,5280,1153,29798,25671,21540,17413,42971,47098,34713,38840,59231,63358,50973,55100,9939,14066,1681,5808,26199,30326,17941,22068,55628,51565,63758,59695,39368,35305,47498,43435,22596,18533,30726,26663,6336,2273,14466,10403,52093,56156,60223,64286,35833,39896,43963,48026,19061,23124,27191,31254,2801,6864,10931,14994,64814,60687,56684,52557,48554,44427,40424,36297,31782,27655,23652,19525,15522,11395,7392,3265,61215,65342,53085,57212,44955,49082,36825,40952,28183,32310,20053,24180,11923,16050,3793,7920]);l8=class l8 extends Error{name;code;chainedError;constructor(Z,X){super(Z);this.name="NKeysError",this.code=Z,this.chainedError=X}};(function(Z){Z.InvalidPrefixByte="nkeys: invalid prefix byte",Z.InvalidKey="nkeys: invalid key",Z.InvalidPublicKey="nkeys: invalid public key",Z.InvalidSeedLen="nkeys: invalid seed length",Z.InvalidSeed="nkeys: invalid seed",Z.InvalidCurveSeed="nkeys: invalid curve seed",Z.InvalidCurveKey="nkeys: not a valid curve key",Z.InvalidCurveOperation="nkeys: curve key is not valid for sign/verify",Z.InvalidNKeyOperation="keys: only curve key can seal/open",Z.InvalidEncoding="nkeys: invalid encoded key",Z.InvalidRecipient="nkeys: not a valid recipient public curve key",Z.InvalidEncrypted="nkeys: encrypted input is not valid",Z.CannotSign="nkeys: cannot sign, no private key available",Z.PublicKeyOnly="nkeys: no seed or private key available",Z.InvalidChecksum="nkeys: invalid checksum",Z.SerializationError="nkeys: serialization error",Z.ApiError="nkeys: api error",Z.ClearedPair="nkeys: pair is cleared"})(c8||(c8={}));(function(Z){Z[Z.Unknown=-1]="Unknown",Z[Z.Seed=144]="Seed",Z[Z.Private=120]="Private",Z[Z.Operator=112]="Operator",Z[Z.Server=104]="Server",Z[Z.Cluster=16]="Cluster",Z[Z.Account=0]="Account",Z[Z.User=160]="User",Z[Z.Curve=184]="Curve"})(G6||(G6={}));hC=[120,107,118,49];b95(f95);(function(Z){Z.v1="ed25519",Z.v2="ed25519-nkey"})(gJ||(gJ={}))});function X61(Z){try{Z?.clear?.()}catch{}}async function Cb8({accountJwt:Z,accountSigningKey:X,expiresAt:G,permissions:Y,userId:Q,allowedConnectionTypes:$=["WEBSOCKET"]}){let J=kb8(Z),W=e41(J.sub),K=Z61(new TextEncoder().encode(X)),N=Rb8();try{let F=await Mb8(Q,N,W,{pub:{allow:Y.publish.allow},sub:{allow:Y.subscribe.allow},allowed_connection_types:$},{algorithm:gJ.v2,exp:Math.floor(G.getTime()/1000),signer:K});return new TextDecoder().decode(Sb8(F,N))}finally{X61(N),X61(K),X61(W)}}var fb8=B(()=>{Vb8()});function i95(Z){return/^wss?:\/\//i.test(Z.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function bb8(){let Z=new S1;return Z.post("/links/session",async(X)=>{let Y=X.get("studioContext").auth?.user?.id;if(!Y)return X.json({error:"Unauthorized"},401);let Q=W1();if(!Q.natsTunnelPublicEnabled)return X.json(G61(),503);if(!Q.natsPublicUrl)return X.json(G61(),503);if(!Q.natsAccountJwt||!Q.natsAccountSigningKey){if(!Q.localMode)return X.json(G61(),503)}let $=yJ(Y),J;if(Q.natsAccountJwt&&Q.natsAccountSigningKey){let W=new Date(Date.now()+Q.natsTunnelSessionTtlSeconds*1000);J=await Cb8({accountJwt:Q.natsAccountJwt,accountSigningKey:Q.natsAccountSigningKey,expiresAt:W,permissions:zb8($),userId:Y,allowedConnectionTypes:i95(Q.natsPublicUrl)})}return X.json(jb8({publicUrl:Q.natsPublicUrl,userId:Y,ttlSeconds:Q.natsTunnelSessionTtlSeconds,credentials:J}))}),Z}var G61=()=>({error:"link session unavailable"});var vb8=B(()=>{l4();_8();Ab8();fb8()});function p95(Z){return Z.filter((X)=>X.vendors?.alias).map((X)=>({name:X.name,title:X.title,description:X.description,logo:X.logo,category:X.category,vendor:{alias:X.vendors.alias,url:X.vendors.url}}))}async function t95(Z,X){let G=await fetch(`${Z}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:X,Authorization:`Bearer ${X}`,Accept:"application/json"},signal:AbortSignal.timeout(n95)});if(!G.ok){let Y=await G.text().catch(()=>G.statusText);throw console.error(`[deco-apps] Supabase error (${G.status}): ${Y.slice(0,200)}`),Error(`External service error (${G.status})`)}return await G.json()}var n95=1e4,r95=async(Z,X)=>{if(!Z.get("studioContext").auth.user?.id)return Z.json({error:"Unauthorized"},401);return X()},xb8=()=>{let Z=new S1;return Z.use("*",r95),Z.get("/",async(X)=>{let G=W1(),Y=G.decoSupabaseUrl,Q=G.decoSupabaseServiceKey;if(!Y||!Q)return X.json({apps:[]});try{let $=await t95(Y,Q);return X.json({apps:p95($)})}catch($){return console.error("[deco-apps] GET error:",$),X.json({error:"Failed to fetch apps"},502)}}),Z};var _b8=B(()=>{l4();_8()});import{z as h1}from"zod";function SK(Z,X="invalid_request_error",G=null,Y=null){return{error:{message:Z,type:X,param:G,code:Y}}}function $Z5(Z){if(!Z)return null;let X=Z.indexOf(":");if(X===-1)return{credentialId:null,modelId:Z};let G=Z.substring(0,X),Y=Z.substring(X+1);if(!G||!Y)return null;return{credentialId:G,modelId:Y}}function JZ5(Z,X,G){try{return JSON.parse(Z)}catch{throw new hb8(`Invalid JSON in tool call arguments for function '${G}' (tool_call_id: ${X}): ${Z}`)}}function WZ5(Z){let X={};for(let G of Z)if(G.role==="assistant"&&G.tool_calls)for(let Y of G.tool_calls)X[Y.id]=Y.function.name;return Z.map((G)=>{switch(G.role){case"system":return{role:"system",content:G.content};case"user":if(typeof G.content==="string")return{role:"user",content:G.content};return{role:"user",content:G.content.map((Q)=>{if(Q.type==="text")return{type:"text",text:Q.text};return{type:"image",image:Q.image_url.url}})};case"assistant":if(G.tool_calls&&G.tool_calls.length>0)return{role:"assistant",content:G.tool_calls.map((Q)=>({type:"tool-call",toolCallId:Q.id,toolName:Q.function.name,input:JZ5(Q.function.arguments,Q.id,Q.function.name)}))};return{role:"assistant",content:G.content??""};case"tool":let Y=X[G.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:G.tool_call_id,toolName:Y,output:{type:"text",value:G.content}}]}}})}function KZ5(Z){let X=Z.map((G)=>{let Y=G.function.parameters?AQ(G.function.parameters):AQ({type:"object",properties:{}});return[G.function.name,v8({description:G.function.description,inputSchema:Y})]});return Object.fromEntries(X)}function NZ5(Z){if(!Z)return;return{openai:{response_format:Z}}}function FZ5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function yb8(Z,X,G,Y,Q,$){let J={model:Z,messages:X,tools:G,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:$};return Q?{...J,providerOptions:Q}:J}function gb8(Z){if(Z==="tool-calls")return"tool_calls";if(Z==="length")return"length";return"stop"}var o95=256,a95,s95,e95,ZZ5,XZ5,GZ5,YZ5,QZ5,hb8,ub8,cb8;var lb8=B(()=>{N6();l4();ig();a95=h1.object({type:h1.literal("function"),function:h1.object({name:h1.string(),description:h1.string().optional(),parameters:h1.record(h1.string(),h1.unknown()).optional()})}),s95=h1.object({id:h1.string(),type:h1.literal("function"),function:h1.object({name:h1.string(),arguments:h1.string()})}),e95=h1.discriminatedUnion("role",[h1.object({role:h1.literal("system"),content:h1.string(),name:h1.string().optional()}),h1.object({role:h1.literal("user"),content:h1.union([h1.string(),h1.array(h1.union([h1.object({type:h1.literal("text"),text:h1.string()}),h1.object({type:h1.literal("image_url"),image_url:h1.object({url:h1.string(),detail:h1.string().optional()})})]))]),name:h1.string().optional()}),h1.object({role:h1.literal("assistant"),content:h1.string().nullable().optional(),name:h1.string().optional(),tool_calls:h1.array(s95).optional()}),h1.object({role:h1.literal("tool"),content:h1.string(),tool_call_id:h1.string()})]),ZZ5=h1.object({type:h1.literal("text")}),XZ5=h1.object({type:h1.literal("json_object")}),GZ5=h1.object({type:h1.literal("json_schema"),json_schema:h1.object({name:h1.string(),description:h1.string().optional(),schema:h1.record(h1.string(),h1.unknown()),strict:h1.boolean().optional()})}),YZ5=h1.union([ZZ5,XZ5,GZ5]),QZ5=h1.object({model:h1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:h1.array(e95),stream:h1.boolean().optional().default(!1),temperature:h1.number().min(0).max(2).optional(),max_tokens:h1.number().positive().optional(),top_p:h1.number().min(0).max(1).optional(),frequency_penalty:h1.number().min(-2).max(2).optional(),presence_penalty:h1.number().min(-2).max(2).optional(),stop:h1.union([h1.string(),h1.array(h1.string())]).optional(),tools:h1.array(a95).optional(),tool_choice:h1.union([h1.literal("auto"),h1.literal("none"),h1.literal("required"),h1.object({type:h1.literal("function"),function:h1.object({name:h1.string()})})]).optional(),response_format:YZ5.optional(),user:h1.string().optional()});hb8=class hb8 extends Error{constructor(Z){super(Z);this.name="MessageConversionError"}};ub8=new S1;ub8.post("/:org/v1/chat/completions",async(Z)=>{let X=Z.get("studioContext"),G=Z.req.param("org");try{if(!X.auth.apiKey?.id)return Z.json(SK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!X.organization)return Z.json(SK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((X.organization.slug??X.organization.id)!==G)return Z.json(SK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await Z.req.json(),Q=QZ5.safeParse(Y);if(!Q.success){let E=Q.error.issues[0]??{message:"Invalid request",path:[]};return Z.json(SK(`Invalid request: ${E.message}`,"invalid_request_error",E.path.length>0?E.path.join("."):null),400)}let $=Q.data,J=$Z5($.model);if(!J)return Z.json(SK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=await X.storage.aiProviderKeys.list({organizationId:X.organization.id});if(E.length===0)return Z.json(SK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E[0].id}let N;try{N=await X.aiProviders.activate(W,X.organization.id)}catch{return Z.json(SK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=N.aiSdk.languageModel(K),U=WZ5($.messages),H=$.tools?KZ5($.tools):void 0,w=NZ5($.response_format),O=FZ5(),D=Math.floor(Date.now()/1000);if($.stream)return pF(Z,async(E)=>{let L=yb8(F,U,H,$,w,Z.req.raw.signal);try{let z=d3(L),j=!1,P=0,A="",I=async()=>{if(A.length===0)return;let S=A;A="",await E.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await E.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(A+=S.text,A.length>=o95)await I()}else if(S.type==="tool-call"){await I();let M=P++;await E.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await I(),await E.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{},finish_reason:gb8(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await I(),await E.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await E.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let E=yb8(F,U,H,$,w,Z.req.raw.signal),L=await pw(E),z={role:"assistant",content:L.text||null};if(L.toolCalls&&L.toolCalls.length>0)z.tool_calls=L.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return Z.json({id:O,object:"chat.completion",created:D,model:$.model,choices:[{index:0,message:z,finish_reason:gb8(L.finishReason)}],usage:{prompt_tokens:L.usage?.inputTokens??0,completion_tokens:L.usage?.outputTokens??0,total_tokens:L.usage?.totalTokens??0}})}}catch(Y){let Q=Y;if(Q.name==="AbortError")return Z.json(SK("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return Z.json(SK(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),Z.json(SK(Q.message,"server_error"),500)}});cb8=ub8});var mb8;var db8=B(()=>{mb8={name:"decocms",version:"4.126.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^5.9.3",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function wZ5(){let Z=process.env.POSTHOG_KEY;if(!Z)return null;return{key:Z,host:process.env.POSTHOG_HOST??HZ5}}var ib8,HZ5="https://ph.studio.decocms.com",nb8;var pb8=B(()=>{l4();zf0();JO();tZ();_8();G11();db8();ib8=new S1;ib8.get("/",(Z)=>{let X={version:mb8.version,theme:rk1(),...ZD().logo&&{logo:ZD().logo},...t3()&&{internalUrl:Y10()},...W1().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!W1().firecrawlApiKey,auth:Wq8(),posthog:wZ5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!t3()&&W1().sandboxProviderKind==="agent-sandbox"}};return Z.header("Cache-Control","no-store"),Z.json({success:!0,config:X})});nb8=ib8});function tg(Z){let X=(Z??"").trim().toLowerCase();return X=X.replace(/^https?:\/\//,""),X=X.replace(/^www\./,""),X=X.split(/[/?#]/)[0]??"",X.replace(/\/+$/,"")}function Y61(Z){return(tg(Z).split(".")[0]||Z).replace(/[-_]/g," ").split(" ").filter(Boolean).map((G)=>G.charAt(0).toUpperCase()+G.slice(1)).join(" ")}function Q61(Z,X=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(tg(Z))}&sz=${X}`}function tb8(Z,X){let G=Z.trim();if(G.length<=X)return G;let Y=G.slice(0,X-1),Q=Y.lastIndexOf(" ");return`${(Q>X*0.6?Y.slice(0,Q):Y).trimEnd()}\u2026`}function rb8(Z){let{brand:X,domain:G,score:Y,verdict:Q}=Z,$=typeof Y==="number"?`${X} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${X} commerce report \xB7 decocms`,J=`See the full ${X} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Q?.trim()?tb8(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):tb8(`How does ${G} really perform? ${J}`,200);return{title:$,description:W}}import{z as Q1}from"zod";var cC,OZ5,BZ5,DZ5,EZ5,ob8;var ab8=B(()=>{cC=Q1.enum(["good","bad","neutral"]),OZ5=Q1.preprocess((Z)=>{if(Array.isArray(Z))return{kind:"text",value:Z.find((G)=>G!==null&&typeof G!=="object")??""};return Z!==null&&typeof Z==="object"?Z:{kind:"text",value:Z}},Q1.object({kind:Q1.enum(["text","number","sparkline","badge","score"]).catch("text"),value:Q1.coerce.string().optional(),tone:cC.optional(),muted:Q1.boolean().optional(),delta:Q1.coerce.string().optional(),deltaDir:Q1.enum(["up","down","neutral"]).optional(),points:Q1.array(Q1.coerce.number()).optional(),label:Q1.coerce.string().optional()}).transform((Z)=>{if(Z.kind==="badge"&&Z.label==null)Z.label=Z.value??"";if(Z.kind==="score"){let X=Number(Z.value);if(Number.isNaN(X))return{...Z,kind:"text"}}return Z})),BZ5=Q1.preprocess((Z)=>{let X=Z;if(X&&typeof X==="object"&&!Array.isArray(X)&&Array.isArray(X.cells))X=X.cells;if(Array.isArray(X)&&X.length===1&&Array.isArray(X[0]))X=X[0];if(Array.isArray(X))return X;if(X&&typeof X==="object")return Object.values(X);return X},Q1.array(OZ5)),DZ5={key:Q1.coerce.string(),title:Q1.coerce.string(),eyebrow:Q1.coerce.string().optional(),headline:Q1.coerce.string(),annotation:Q1.coerce.string().optional(),methodology:Q1.coerce.string().optional(),sources:Q1.array(Q1.object({name:Q1.coerce.string(),logoUrl:Q1.coerce.string()})).optional()},EZ5=Q1.discriminatedUnion("template",[Q1.object({template:Q1.literal("cover"),score:Q1.object({value:Q1.coerce.number(),max:Q1.coerce.number().optional(),grade:Q1.coerce.string().optional(),label:Q1.coerce.string().optional()}).optional(),brandImage:Q1.coerce.string().optional(),screenshot:Q1.coerce.string().optional(),mobileScreenshot:Q1.coerce.string().optional()}),Q1.object({template:Q1.literal("cta"),ctaUrl:Q1.coerce.string().optional(),ctaLabel:Q1.coerce.string().optional(),bullets:Q1.array(Q1.coerce.string()).optional()}),Q1.object({template:Q1.literal("series"),points:Q1.array(Q1.coerce.number()).min(2),xLabels:Q1.array(Q1.coerce.string()).min(1),unit:Q1.coerce.string().optional(),callout:Q1.object({index:Q1.coerce.number(),value:Q1.coerce.string(),tone:cC.optional()})}),Q1.object({template:Q1.literal("threshold"),value:Q1.coerce.string().default(""),metricLabel:Q1.coerce.string().optional(),ratio:Q1.coerce.number(),thresholdRatio:Q1.coerce.number().optional(),thresholdLabel:Q1.coerce.string().default(""),tone:cC.optional()}),Q1.object({template:Q1.literal("stats"),stats:Q1.array(Q1.object({value:Q1.coerce.string(),label:Q1.coerce.string(),tone:cC.optional()})).min(1)}),Q1.object({template:Q1.literal("bars"),items:Q1.array(Q1.object({value:Q1.coerce.string(),label:Q1.coerce.string(),ratio:Q1.coerce.number(),tone:cC.optional()})).min(1)}),Q1.object({template:Q1.literal("gauges"),gauges:Q1.array(Q1.object({label:Q1.coerce.string(),value:Q1.coerce.string(),status:Q1.enum(["good","warn","bad"]).catch("warn"),caption:Q1.coerce.string().optional(),ratio:Q1.coerce.number().optional()})).min(1)}),Q1.object({template:Q1.literal("checklist"),checks:Q1.array(Q1.object({label:Q1.coerce.string(),status:Q1.enum(["pass","fail","warn"]).catch("fail"),value:Q1.coerce.string().optional()})).min(1)}),Q1.object({template:Q1.literal("table"),columns:Q1.array(Q1.object({label:Q1.coerce.string(),align:Q1.enum(["left","right"]).optional()})).min(1),rows:Q1.array(BZ5).min(1),highlightRow:Q1.coerce.number().optional()}),Q1.object({template:Q1.literal("products"),products:Q1.array(Q1.object({name:Q1.coerce.string(),price:Q1.coerce.string().optional(),image:Q1.coerce.string().optional(),url:Q1.coerce.string().optional()})).min(1)}),Q1.object({template:Q1.literal("list"),entries:Q1.array(Q1.object({label:Q1.coerce.string(),severity:Q1.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:Q1.coerce.number().optional()}),Q1.object({template:Q1.literal("keywords"),volumeLabel:Q1.coerce.string().optional(),keywords:Q1.array(Q1.object({term:Q1.coerce.string(),volume:Q1.coerce.string(),position:Q1.coerce.number().catch(0)})).min(1)}),Q1.object({template:Q1.literal("competitor"),metricLabel:Q1.coerce.string().optional(),competitors:Q1.array(Q1.object({name:Q1.coerce.string(),value:Q1.coerce.string(),tone:cC.optional(),isYou:Q1.boolean().optional()})).min(1)}),Q1.object({template:Q1.literal("scorecard"),rivalLabel:Q1.coerce.string().optional(),dimensions:Q1.array(Q1.object({label:Q1.coerce.string(),you:Q1.coerce.string(),rival:Q1.coerce.string().optional(),rivalName:Q1.coerce.string().optional(),tone:cC.optional()})).min(1)})]),ob8=Q1.object({...DZ5,template:EZ5})});function Cz0(Z){let X=[],G=[...Z.sections].sort((Y,Q)=>Y.position-Q.position).map((Y)=>{let Q=ob8.safeParse(Y.props);if(Q.success)return Q.data;let $=Q.error.issues[0];return X.push({section_type:Y.section_type,position:Y.position,reason:$?`${$.path.join(".")||"(root)"}: ${$.message}`:"contract violation"}),null}).filter((Y)=>Y!==null);return{deck:{meta:{...Z.meta,scores:Z.summary?.scores},slides:G},drops:X}}var $61=B(()=>{ab8()});function J61(Z){return Buffer.from(Z,"base64")}var sb8;var eb8=B(()=>{sb8=[{name:"Inter",data:J61("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"),weight:400,style:"normal"},{name:"Inter",data:J61("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"),weight:600,style:"normal"},{name:"Inter",data:J61("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"),weight:700,style:"normal"}]});import LZ5 from"satori";import{Resvg as zZ5}from"@resvg/resvg-js";async function AZ5(Z){try{let X=await fetch(Z,{signal:AbortSignal.timeout(1500)});if(!X.ok)return null;let G=X.headers.get("content-type")||"image/png";if(!G.startsWith("image/"))return null;let Y=Buffer.from(await X.arrayBuffer()).toString("base64");return`data:${G};base64,${Y}`}catch{return null}}async function Gv8(Z){let X=Z.faviconUrl?await AZ5(Z.faviconUrl):null,G=X?jX("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:Xv8,display:"flex",alignItems:"center",justifyContent:"center"},jX("img",{},null,{src:X,width:56,height:56})):jX("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:fz0,color:K61,fontSize:44,fontWeight:700,display:"flex",alignItems:"center",justifyContent:"center"},(Z.initial||Z.domain.charAt(0)||"?").toUpperCase()),Y=jX("div",{width:W61,height:Zv8,display:"flex",flexDirection:"column",justifyContent:"space-between",padding:"72px 80px",backgroundColor:K61,color:Xv8,fontFamily:"Inter"},[jX("div",{display:"flex",alignItems:"center",gap:22},[G,jX("div",{display:"flex",flexDirection:"column"},[jX("div",{fontSize:24,color:fz0,fontWeight:600,marginBottom:4},"Commerce report"),jX("div",{fontSize:46,fontWeight:600,letterSpacing:"-0.02em"},Z.domain)])]),jX("div",{display:"flex",alignItems:"flex-end",gap:28},[jX("div",{fontSize:220,fontWeight:700,color:fz0,lineHeight:0.82,letterSpacing:"-0.05em"},String(Math.round(Z.score))),jX("div",{fontSize:60,fontWeight:400,color:"rgba(244,251,230,0.55)",paddingBottom:30},"/100"),jX("div",{fontSize:30,fontWeight:400,color:"rgba(244,251,230,0.82)",paddingBottom:40},"Commerce health score")]),jX("div",{display:"flex",alignItems:"center",gap:14},[jX("div",{width:44,height:44,borderRadius:11,backgroundColor:fz0,display:"flex",alignItems:"center",justifyContent:"center"},jX("svg",{},jX("path",{},null,{d:jZ5,fill:K61}),{width:30,height:30,viewBox:"0 0 200 200"})),jX("div",{fontSize:26,fontWeight:700},"decocms")])]),Q=await LZ5(Y,{width:W61,height:Zv8,fonts:sb8}),$=new zZ5(Q,{fitTo:{mode:"width",value:W61}}).render().asPng();return Uint8Array.from($)}var W61=1200,Zv8=630,K61="#07401a",fz0="#d0ec1a",Xv8="#f4fbe6",jZ5="M79.8641 145.438C97.4676 145.438 107.196 137.562 118.777 113.01C125.263 99.5758 130.358 86.1415 136.381 73.1705L143.793 75.4867C145.646 75.95 147.035 75.0235 146.109 73.1705L136.844 55.1037C136.381 53.714 134.528 53.714 133.601 54.1772L111.365 62.5157C109.512 62.979 109.512 64.832 111.365 65.2952L117.851 67.6115C112.292 79.656 105.806 98.186 100.247 109.767C94.2249 122.738 91.4454 131.54 80.7906 131.54C70.1359 131.54 68.7461 123.665 73.3786 112.084C78.4744 98.6493 86.8129 94.9433 96.0779 97.7228C98.8574 94.0168 100.71 88.4578 101.637 83.362C98.8574 82.4355 95.6146 82.4355 92.8351 82.4355C77.5479 82.4355 62.2606 90.3108 55.7751 106.988C48.8263 128.761 56.2383 145.438 79.8641 145.438Z",jX=(Z,X,G,Y={})=>({type:Z,props:{...Y,style:X,children:G}});var Yv8=B(()=>{eb8()});import{join as Qv8}from"path";async function $v8(Z){try{let X=await fetch(`${f$({})}/api/v2/public/diagnostics/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(PZ5)});if(!X.ok)return null;let G=await X.json(),{deck:Y}=Cz0(G);if(!Y.slides.length)return null;let Q=Y.slides.find((W)=>W.template.template==="cover"),$=Q?.template,J=$&&$.template==="cover"?$:void 0;return{brand:Y.meta.brand?.trim()||Y61(Z),score:Y.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function rQ(Z){return Z.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function TZ5(Z,X){let G=tg(Z),Y=X?.brand?.trim()||Y61(G),Q=Q61(G,128),J=`${(W1().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(G)}`,{title:W,description:K}=rb8({brand:Y,domain:G,score:X?.score,verdict:X?.verdict}),N=`${J}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${rQ(W)}</title>`,`<meta name="description" content="${rQ(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${rQ(W)}" />`,`<meta property="og:description" content="${rQ(K)}" />`,`<meta property="og:url" content="${rQ(J)}" />`,`<meta property="og:image" content="${rQ(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${rQ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${rQ(W)}" />`,`<meta name="twitter:description" content="${rQ(K)}" />`,`<meta name="twitter:image" content="${rQ(N)}" />`,`<meta name="twitter:image:alt" content="${rQ(F)}" />`,`<link rel="canonical" href="${rQ(J)}" />`,`<link rel="icon" href="${rQ(Q)}" sizes="any" />`].join(`
|
|
2794
2794
|
`)}function RZ5(Z,X){return Z.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${X}
|
|
2795
2795
|
</head>`)}async function qZ5(Z,X){let G=`${Z}|${Math.round(X)}`,Y=fr.get(G);if(Y)return Y;let Q=await Gv8({domain:Z,initial:Z.charAt(0),score:X,faviconUrl:Q61(Z,128)});if(fr.size>=IZ5){let $=fr.keys().next().value;if($!==void 0)fr.delete($)}return fr.set(G,Q),Q}function Jv8(Z){let X=new S1;return X.get("/:domain/og.png",async(G)=>{let Y=tg(G.req.param("domain")),Q=async()=>{let $=Z?Bun.file(Qv8(Z,"report-og-fallback.png")):null;if(!$||!await $.exists())return G.notFound();return G.body(new Uint8Array(await $.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let $=await $v8(Y);if(!$||typeof $.score!=="number")return Q();let J=await qZ5(Y,$.score);return G.body(J,200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=86400"})}catch{return Q()}}),X.get("/:domain",async(G)=>{let Y=G.req.param("domain"),Q=Z?Qv8(Z,"index.html"):null,$=Q?Bun.file(Q):null;if(!$||!await $.exists())return G.notFound();let J=await $.text();try{let W=await $v8(tg(Y)),K=TZ5(Y,W);return G.html(RZ5(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return G.html(J)}}),X}var PZ5=2500,fr,IZ5=256;var Wv8=B(()=>{l4();$61();Yv8();iU();_8();fr=new Map});function br(Z,X){return fetch(`${f$({})}${Z}`,X)}async function MZ5(Z,X,G){let Y=new URLSearchParams;if(X)Y.set("pw",X);if(G)Y.set("lang",G);let Q=Y.toString()?`?${Y.toString()}`:"",$=await br(`/api/v2/public/diagnostics/${encodeURIComponent(Z)}${Q}`,{headers:{Accept:"application/json"}});if($.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!$.ok)throw Error(`report read HTTP ${$.status}`);let J=await $.json(),{deck:W,drops:K}=Cz0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var kZ5,lC,Kv8;var Nv8=B(()=>{l4();kQ();iU();$61();kZ5=new Set(["complete","errored","terminated","unknown"]),lC=new S1;lC.use("*",async(Z,X)=>{let G=await Y4.api.getSession({headers:Z.req.raw.headers});if(!G?.user?.id)return Z.json({error:"Authentication required"},401,{"Cache-Control":"private, no-store",Vary:"Cookie"});Z.set("reportUser",{email:G.user.email}),await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie");return});lC.get("/site/:domain",async(Z)=>{let X=Z.req.param("domain").trim();if(!X)return Z.json({error:"domain is required"},400);let G=Z.req.query("key")?.trim()||void 0,Y=Z.req.query("lang")?.trim()||void 0;try{let Q=await MZ5(X,G,Y);return Z.header("Cache-Control","private, no-store"),Z.json(Q)}catch{return Z.json({error:"report read failed"},502)}});lC.post("/run",async(Z)=>{let X;try{X=await Z.req.json()}catch{return Z.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return Z.json({error:"domain is required"},400);let Y=Z.get("reportUser").email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let $=await br("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${tB({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});if(!$.ok)return Z.json({error:`run HTTP ${$.status}`},502);let J=await $.json(),W=J.blocked?{state:"blocked"}:J.status==="fresh"?{state:"fresh"}:J.mode==="sync"?{state:"sync"}:{state:"running",id:J.id??null};return Z.json(W)}catch{return Z.json({error:"run failed"},502)}});lC.get("/status",async(Z)=>{let X=Z.req.query("id");if(!X)return Z.json({error:"id is required"},400);try{let G=await br(`/api/v2/diagnostics/status?id=${encodeURIComponent(X)}`,{headers:{Authorization:`Bearer ${tB({})}`}});if(!G.ok)return Z.json({error:`status HTTP ${G.status}`},502);let Q=(await G.json()).status??"unknown",$={done:kZ5.has(Q),status:Q};return Z.json($)}catch{return Z.json({error:"status failed"},502)}});lC.get("/link-token/:id",async(Z)=>{let X=Z.req.param("id");try{let G=await br(`/api/v2/public/link-tokens/${encodeURIComponent(X)}`,{headers:{Accept:"application/json"}});if(G.status===404)return Z.json(null);if(!G.ok)return Z.json({error:`link token HTTP ${G.status}`},502);return Z.json(await G.json())}catch{return Z.json({error:"link token resolve failed"},502)}});lC.get("/suggest",async(Z)=>{let X=(Z.req.query("q")??"").trim().slice(0,64);if(X.length<2)return Z.json({suggestions:[]});try{let G=await br(`/api/v2/public/suggest?q=${encodeURIComponent(X)}`,{headers:{Accept:"application/json"}});if(!G.ok)return Z.json({suggestions:[]});let Y=await G.json();return Z.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return Z.json({suggestions:[]})}});Kv8=lC});import{createHmac as SZ5,timingSafeEqual as VZ5}from"crypto";function Fv8(Z,X,G,Y=Date.now()){if(!X||!G)return!1;let Q,$=[];for(let N of X.split(",")){let F=N.indexOf("=");if(F<=0)continue;let U=N.slice(0,F).trim(),H=N.slice(F+1).trim();if(U==="t")Q=H;else if(U==="v1")$.push(H)}if(!Q||$.length===0)return!1;let J=Number(Q);if(!Number.isFinite(J)||Math.abs(Y/1000-J)>CZ5)return!1;let W=SZ5("sha256",G).update(`${Q}.${Z}`).digest("hex"),K=Buffer.from(W,"hex");return $.some((N)=>{let F=Buffer.from(N,"hex");return K.length===F.length&&VZ5(K,F)})}function Uv8(Z){let X;try{X=JSON.parse(Z)}catch{return null}let G=J$(X),Y=J$(J$(G?.data)?.object);if(!G||typeof G.type!=="string"||!Y)return null;return{id:$$(G.id),type:G.type,created:typeof G.created==="number"?G.created:void 0,livemode:typeof G.livemode==="boolean"?G.livemode:void 0,data:{object:Y}}}function fZ5(Z){switch(Z){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function $$(Z){return typeof Z==="string"?Z:void 0}function J$(Z){return typeof Z==="object"&&Z!==null?Z:void 0}function bz0(Z){return typeof Z==="number"?new Date(Z*1000):null}function U61(Z){return $$(Z)??$$(J$(Z)?.id)}function bZ5(Z){return U61(Z.subscription)??$$(J$(J$(Z.parent)?.subscription_details)?.subscription)}function vZ5(Z){let X=bz0(Z.current_period_end);if(X)return X;let G=J$(Z.items)?.data;if(!Array.isArray(G))return null;let Y=0;for(let Q of G){let $=J$(Q)?.current_period_end;if(typeof $==="number"&&$>Y)Y=$}return Y>0?new Date(Y*1000):null}function N61(Z,X){let G=bz0(Z.created);return!!G&&!!X.lastStripeEventAt&&G<X.lastStripeEventAt}function F61(Z,X){let G=bz0(Z.created);if(!G)return;return X.lastStripeEventAt&&X.lastStripeEventAt>G?void 0:G}async function xZ5(Z,X){let G=X.data.object;switch(X.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Y=$$(J$(G.metadata)?.orgId);if(!Y)return{handled:!1,reason:"no orgId"};if($$(J$(G.metadata)?.kind)==="topup"){if(G.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if($$(G.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let W=$$(G.id);if(!W)return console.error("stripe webhook: topup session without id",{eventId:X.id,organizationId:Y}),{handled:!1,reason:"topup session without id"};let K=Number(J$(G.metadata)?.creditCents);if(!Number.isInteger(K)||K<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:X.id,organizationId:Y,creditCents:J$(G.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Y,topUp:{creditCents:K,referenceId:`stripe-topup:${W}`}}}if(G.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if($$(G.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Q=await Z.getBilling(Y);if(!Q)return{handled:!1,reason:"unknown org"};if(Q.legacy||Q.billingMode!=="self_serve")return console.error("stripe webhook: refused checkout bind",{organizationId:Y,eventId:X.id,legacy:Q.legacy,billingMode:Q.billingMode}),{handled:!1,reason:"org is not self-serve"};let $=U61(G.subscription);if(Q.stripeSubscriptionId&&$&&Q.stripeSubscriptionId!==$)return console.error("stripe webhook: refused checkout rebind",{organizationId:Y,eventId:X.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:$};if(N61(X,Q))return{handled:!1,reason:"stale event"};let J=`stripe-checkout:${$$(G.id)??crypto.randomUUID()}`;return await Z.updateStripeState(Y,{stripeCustomerId:U61(G.customer),stripeSubscriptionId:$,status:"active",benefitsReferenceId:J,lastStripeEventAt:F61(X,Q)}),{handled:!0,organizationId:Y,benefitsReferenceId:J}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Y=$$(G.id);if(!Y)return{handled:!1,reason:"no sub id"};let Q=await Z.getBillingByStripeSubscriptionId(Y);if(!Q)return{handled:!1,reason:"unknown subscription"};let $=X.type==="customer.subscription.deleted";if(!$&&N61(X,Q))return{handled:!1,reason:"stale event"};let J=$?"canceled":fZ5(G.status),W=vZ5(G),K=`stripe-sub:${Y}:${J}:${W?.getTime()??0}`;return await Z.updateStripeState(Q.organizationId,{status:J,currentPeriodEnd:W,...$&&{stripeSubscriptionId:null},benefitsReferenceId:K,lastStripeEventAt:F61(X,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:K}}case"invoice.paid":{let Y=bZ5(G);if(!Y)return{handled:!1,reason:"no sub id"};let Q=await Z.getBillingByStripeSubscriptionId(Y);if(!Q)return{handled:!1,reason:"unknown subscription"};if(N61(X,Q))return{handled:!1,reason:"stale event"};let $=`stripe-invoice:${$$(G.id)??crypto.randomUUID()}`;return await Z.updateStripeState(Q.organizationId,{status:"active",currentPeriodEnd:bz0(G.period_end),benefitsReferenceId:$,lastStripeEventAt:F61(X,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:$}}default:return{handled:!1,reason:`unhandled event ${X.type}`}}}async function yZ5(Z,X){let[G,Y]=await Promise.all([Z.getBilling(X),Z.listPaidSeatUserIds(X)]);if(!kb(G))return;if(await yX8({subscriptionId:G.stripeSubscriptionId,targetQuantity:Y.length}))console.error("stripe webhook: reconciled diverged seat quantity",{organizationId:X,targetQuantity:Y.length})}async function Hv8(Z){let X=new ON(P4().db),G=await xZ5(X,Z);if(G.handled&&G.topUp)await yq1({organizationId:G.organizationId,amountCents:G.topUp.creditCents,referenceId:G.topUp.referenceId});if(G.handled&&G.benefitsReferenceId)try{await jN(G.organizationId,G.benefitsReferenceId,"apply")}catch(Y){console.error("Failed to enqueue benefit sync (sweep covers):",Y)}if(G.handled&&_Z5.has(Z.type))try{await yZ5(X,G.organizationId)}catch(Y){console.error("Failed to reconcile seat quantity (next cycle):",Y)}if(!G.handled&&G.orphanSubscriptionId)try{await _X8(G.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:G.orphanSubscriptionId,eventId:Z.id})}catch(Y){if(!(Y instanceof bY&&(Y.status===400||Y.status===404)))throw Y}return G}var CZ5=300,_Z5;var wv8=B(()=>{GY();Eb();d_();I00();Sb();_Z5=new Set(["checkout.session.completed","checkout.session.async_payment_succeeded","invoice.paid"])});var gZ5=1048576,H61;var Ov8=B(()=>{l4();MC();_8();wv8();H61=new S1;H61.post("/webhook",LX({maxSize:gZ5,onError:(Z)=>Z.json({error:"payload too large"},413)}),async(Z)=>{let X=W1().stripeWebhookSecret;if(!X)return Z.json({error:"stripe billing not configured"},503);let G=await Z.req.text();if(!Fv8(G,Z.req.header("stripe-signature"),X))return Z.json({error:"invalid signature"},400);let Q=Uv8(G);if(!Q)return Z.json({error:"invalid payload"},400);let $=await Hv8(Q);return console.log("stripe webhook",{eventId:Q.id,type:Q.type,livemode:Q.livemode,...$}),Z.json({received:!0})})});function Bv8(Z,X){if(X.startsWith("text/html")||X.startsWith("image/svg"))Z.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Dv8,hZ5,uZ5,Ev8;var Lv8=B(()=>{l4();v$();By();Cb();Dv8=new S1,hZ5=["range","if-none-match","if-modified-since"],uZ5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Dv8.get("/:org/files/*",async(Z)=>{let X=Z.get("studioContext"),G=X.organization?.id;if(!X.auth?.user?.id){if(kg(Z))return Z.redirect(`/login?next=${encodeURIComponent(Z.req.path)}`,302);throw new j8(401,{message:"Authentication required"})}if(!G)throw new j8(401,{message:"Organization context required"});let Y=Z.req.path.replace(/^.*\/files\//,"");if(!Y)throw new j8(400,{message:"Missing file key"});let Q=await Tp(Y,X);if(!Q)throw new j8(503,{message:"Object storage not configured"});if(Q.startsWith("data:")&&b$()){let K=Q.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new j8(500,{message:"Invalid data URL from storage"});let[,N,F]=K,U=Buffer.from(F,"base64"),H=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return Bv8(H,N),new Response(U,{status:200,headers:H})}let $=new Headers;for(let K of hZ5){let N=Z.req.header(K);if(N)$.set(K,N)}let J=await fetch(Q,{headers:$});if(J.status===403||J.status===404)throw new j8(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Y),new j8(502,{message:"Upstream storage error"});let W=new Headers;for(let K of uZ5){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),Bv8(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Ev8=Dv8});var vr=f((dC)=>{var cZ5=dC&&dC.__createBinding||(Object.create?function(Z,X,G,Y){if(Y===void 0)Y=G;var Q=Object.getOwnPropertyDescriptor(X,G);if(!Q||("get"in Q?!X.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return X[G]}};Object.defineProperty(Z,Y,Q)}:function(Z,X,G,Y){if(Y===void 0)Y=G;Z[Y]=X[G]}),lZ5=dC&&dC.__exportStar||function(Z,X){for(var G in Z)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(X,G))cZ5(X,Z,G)};Object.defineProperty(dC,"__esModule",{value:!0});lZ5(ZQ(),dC)});var Av8=f((zv8)=>{Object.defineProperty(zv8,"__esModule",{value:!0});zv8.version=void 0;zv8.version="3.4.0"});var Rv8=f((VK)=>{var dZ5=VK&&VK.__importDefault||function(Z){return Z&&Z.__esModule?Z:{default:Z}};Object.defineProperty(VK,"__esModule",{value:!0});VK.NodeTransport=VK.VERSION=void 0;VK.nodeResolveHost=rZ5;var i5=vr(),mZ5=u0("net"),w61=u0("tls"),iZ5=u0("path"),Pv8=u0("fs"),nZ5=dZ5(u0("dns")),pZ5=Av8();VK.VERSION=pZ5.version;var tZ5="nats.js";class Tv8{socket;version;lang;yields=[];signal=(0,i5.deferred)();closedNotification=(0,i5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=tZ5,this.version=VK.VERSION}async connect(Z,X){this.tlsName=Z.tlsName,this.options=X;let{tls:G}=this.options,{handshakeFirst:Y}=G||{};try{if(Y===!0)this.socket=await this.tlsFirst(Z);else this.socket=await this.dial(Z);if(this.done)this.socket?.destroy();let Q=await this.peekInfo();(0,i5.checkOptions)(Q,X);let{tls_required:$,tls_available:J}=Q,W=J===!0&&X.tls!==null;if(!Y&&($||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if($&&this.socket.encrypted!==!0)throw i5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Q){let $=Q;if(!$)$=new i5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=$,W=J==="ECONNREFUSED"?new i5.errors.ConnectionError("connection refused",{cause:$}):$;throw this.socket?.destroy(),W}}dial(Z){let X=(0,i5.deferred)(),G,Y=(0,mZ5.createConnection)(Z.port,Z.hostname,()=>{X.resolve(Y),Y.removeAllListeners()});return Y.on("error",(Q)=>{G=Q}),Y.on("close",()=>{Y.removeAllListeners(),X.reject(G)}),Y.setNoDelay(!0),X}get isClosed(){return this.done}close(Z){return this._closed(Z,!1)}peekInfo(){let Z=(0,i5.deferred)(),X;return this.socket.on("data",(G)=>{this.yields.push(G);let Y=i5.DataBuffer.concat(...this.yields),Q=(0,i5.extractProtocolMessage)(Y);if(Q!=="")try{let $=i5.INFO.exec(Q);if(!$)throw Error("unexpected response from server");let J=JSON.parse($[1]);Z.resolve(J)}catch($){Z.reject($)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(G)=>{X=G}),this.socket.on("close",()=>{this.socket.removeAllListeners(),Z.reject(X)}),Z}loadFile(Z){if(!Z)return Promise.resolve();let X=(0,i5.deferred)();try{if(Z=(0,iZ5.resolve)(Z),!(0,Pv8.existsSync)(Z))X.reject(Error(`${Z} doesn't exist`));(0,Pv8.readFile)(Z,(G,Y)=>{if(G)return X.reject(G);X.resolve(Y)})}catch(G){X.reject(G)}return X}async loadClientCerts(){let Z={},{certFile:X,cert:G,caFile:Y,ca:Q,keyFile:$,key:J}=this.options.tls;try{if(X){let W=await this.loadFile(X);if(W)Z.cert=W}else if(G)Z.cert=G;if($){let W=await this.loadFile($);if(W)Z.key=W}else if(J)Z.key=J;if(Y){let W=await this.loadFile(Y);if(W)Z.ca=[W]}else if(Q)Z.ca=Q;return Promise.resolve(Z)}catch(W){return Promise.reject(W)}}async tlsFirst(Z){let X,G={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)G.socket=this.socket;if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};G=(0,i5.extend)(G,this.options.tls,Q)}catch(Q){return Promise.reject(new i5.errors.ConnectionError(Q.message,{cause:Q}))}let Y=(0,i5.deferred)();try{let Q=(0,w61.connect)(Z.port,Z.hostname,G,()=>{Q.removeAllListeners(),Y.resolve(Q)});Q.on("error",($)=>{X=$}),Q.on("secureConnect",()=>{if(G.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{Y.reject(X),Q.removeAllListeners()}),Q.setNoDelay(!0)}catch(Q){Y.reject(new i5.errors.ConnectionError(Q.message,{cause:Q}))}return Y}async startTLS(){let Z,X={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,i5.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new i5.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,i5.deferred)();try{let Y=(0,w61.connect)(X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()})}catch(Y){G.reject(new i5.errors.ConnectionError(Y.message,{cause:Y}))}return G}setupHandlers(){let Z;this.socket.on("data",(X)=>{return this.yields.push(X),this.signal.resolve()}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed(Z,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let Z=this.yields;this.yields=[];for(let X=0;X<Z.length;X++){if(this.options.debug)console.info(`> ${(0,i5.render)(Z[X])}`);yield Z[X]}if(this.done)break;else if(this.yields.length===0)Z.length=0,this.yields=Z,this.signal=(0,i5.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof w61.TLSSocket}_send(Z){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,i5.render)(Z)}`);let X=(0,i5.deferred)();try{this.socket.write(Z,(G)=>{if(G){if(this.options.debug)console.error(`!!! ${(0,i5.render)(Z)}: ${G}`);return X.reject(G)}return X.resolve()})}catch(G){if(this.options.debug)console.error(`!!! ${(0,i5.render)(Z)}: ${G}`);X.reject(G)}return X}send(Z){this._send(Z).catch((G)=>{})}async _closed(Z,X=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=Z,!Z&&this.socket&&X)try{await this._send(new TextEncoder().encode(""))}catch(G){if(this.options.debug)console.log("transport close terminated with an error",G)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(G){console.log(G)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}VK.NodeTransport=Tv8;function rZ5(Z){let X=(0,i5.deferred)();return nZ5.default.lookup(Z,{all:!0},(G,Y)=>{if(G){X.reject(G);return}let Q=[];for(let $ of Y)Q.push($.address);if(Q.length===0)Q.push(Z);X.resolve(Q)}),X}});var Sv8=f((kv8)=>{Object.defineProperty(kv8,"__esModule",{value:!0});kv8.connect=oZ5;var Iv8=Rv8(),qv8=vr(),Mv8=vr();function oZ5(Z={}){if((0,Mv8.hasWsProtocol)(Z))return Promise.reject(Mv8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,qv8.setTransportFactory)({factory:()=>{return new Iv8.NodeTransport},dnsResolveFn:Iv8.nodeResolveHost}),qv8.NatsConnectionImpl.connect(Z)}});var Vv8=f((rF)=>{var sZ5=rF&&rF.__createBinding||(Object.create?function(Z,X,G,Y){if(Y===void 0)Y=G;var Q=Object.getOwnPropertyDescriptor(X,G);if(!Q||("get"in Q?!X.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return X[G]}};Object.defineProperty(Z,Y,Q)}:function(Z,X,G,Y){if(Y===void 0)Y=G;Z[Y]=X[G]}),eZ5=rF&&rF.__exportStar||function(Z,X){for(var G in Z)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(X,G))sZ5(X,Z,G)};Object.defineProperty(rF,"__esModule",{value:!0});rF.connect=void 0;var Z75=Sv8();Object.defineProperty(rF,"connect",{enumerable:!0,get:function(){return Z75.connect}});eZ5(vr(),rF)});function vv8(Z){let X=Z?.connectFn??Q75,G=null,Y=null,Q=!1,$=!1,J=!1,W=[];function K(){return G!==null&&!G.isClosed()&&!G.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let H of W)try{H()}catch{}}function F(H){(async()=>{for await(let w of H.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Y=null,N()})().catch(()=>{})}async function U(H,w){let O=0;while(!$)try{G=await X({servers:H,timeout:Y75,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${G.getServer()} after ${O} attempt(s)`),Y=null,J=!1,F(G),N();return}catch{O++;let D=tY(G75,X75,O-1,2,0.5);await c4(D)}}return{init(H,w){if(Q)return;Q=!0,$=!1;let O=w?.creds?Cv8.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;U(H,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?G:null},getJetStream(){if(!K())return null;if(!Y)Y=bv8.jetstream(G);return Y},onReady(H){if(W.push(H),K())try{H()}catch{}},async drain(){if($=!0,Q=!1,Y=null,J=!1,G){let H=G;G=null,await H.drain().catch(()=>{})}}}}function Q75(Z){return fv8.connect(Z)}var Cv8,fv8,bv8,X75=100,G75=3000,Y75=3000;var xv8=B(()=>{u9();Cv8=k(Ah(),1),fv8=k(Vv8(),1),bv8=k(GB(),1)});function O61(Z,X){return`${Z}.${X}`}class B61{cache;constructor(Z){this.cache=Og({ttlMs:Z?.ttlMs??$75,maxSize:Z?.maxSize??J75})}async get(Z,X){return this.cache.get(O61(Z,X))??null}async set(Z,X,G){this.cache.set(O61(Z,X),G)}async invalidate(Z,X){this.cache.delete(O61(Z,X))}teardown(){this.cache.clear()}}var $75=600000,J75=5000;var _v8=()=>{};function vz0(Z,X){return`${Z}:${X}`}function D61(Z){let X=Og({ttlMs:Z?.ttlMs??W75,maxSize:Z?.maxSize??K75}),G=Z?.getConnection,Y=crypto.randomUUID(),Q=new TextEncoder,$=new TextDecoder,J=null;function W(K,N){let F=G?.();if(!F)return;try{F.publish(yv8,Q.encode(JSON.stringify({organizationId:K,keyId:N,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,N){return X.get(vz0(K,N))},set(K,N,F){X.set(vz0(K,N),F)},invalidate(K,N){X.delete(vz0(K,N)),W(K,N)},start(){if(J)return;let K=G?.();if(!K)return;J=K.subscribe(yv8),(async()=>{for await(let N of J)try{let F=JSON.parse($.decode(N.data));if(F.originId===Y)continue;X.delete(vz0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,X.clear()}}}var yv8="studio.ai-provider-keys.invalidate",W75=30000,K75=5000;var gv8=()=>{};class E61{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor(Z){this.options=Z}async start(Z){if(Z)this.onCancel=Z;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let X=this.options.getConnection();if(!X)return;let G=new TextDecoder;this.subscriptions=hv8.map((Y)=>X.subscribe(Y));for(let Y of this.subscriptions)(async()=>{for await(let Q of Y)try{let $=JSON.parse(G.decode(Q.data));if($.originId===this.originId)continue;if($.messageId&&this.hasSeen($.messageId))continue;this.onCancel?.($.taskId)}catch{}})().catch(console.error)}broadcast(Z){if(/[.*>\s]/.test(Z)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(Z);try{let X=this.options.getConnection();if(!X)return;let G=this.encoder.encode(JSON.stringify({taskId:Z,originId:this.originId,messageId:crypto.randomUUID()}));for(let Y of hv8)X.publish(Y,G)}catch(X){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",X)}}publishControlFrame(Z,X){}async stop(){for(let Z of this.subscriptions)Z.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen(Z){if(this.seenMessageIds.has(Z))return!0;if(this.seenMessageIds.add(Z),this.seenMessageIds.size>1000){let X=this.seenMessageIds.values().next().value;if(X)this.seenMessageIds.delete(X)}return!1}}var hv8;var uv8=B(()=>{hv8=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var cv8=(Z)=>{let X;return()=>X??=Z()},L61,z61;var lv8=B(()=>{H9();L61=cv8(()=>B4.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),z61=cv8(()=>B4.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function B75(){return{name:jF,subjects:[`${Jp0}.>`],storage:hJ.StorageType.File,max_age:U75,max_bytes:w75,max_msgs_per_subject:O75,discard:hJ.DiscardPolicy.Old,retention:hJ.RetentionPolicy.Limits,duplicate_window:H75,num_replicas:1}}class iv8{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(Z,X){if(this.chunks++,this.encodeMs+=Z,Z>this.maxMs)this.maxMs=Z;this.bytes+=X}flush(){let Z=performance.now(),X=Z-this.windowStart;if(this.chunks>0&&X>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(X),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/X*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=Z}}function dv8(Z){let X=mv8.headers();for(let[G,Y]of Object.entries(Z))X.set(G,Y);return X}function z75(Z,X){let G=0;return{publish(Y,Q,$,J){Y.publish(Q,$,J?{headers:J}:void 0).catch((W)=>{if(G++,F75().add(1,{"org.id":X??"unknown"}),G===1||G%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${Z} (${G} total):`,W)})},get errorCount(){return G}}}function j75(Z){if(!(Z instanceof Error))return!1;if(Z.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test(Z.message)}class j61{options;js=null;jsm=null;constructor(Z){this.options=Z}async init(){let Z=this.options.getConnection();if(!Z){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let X=B75(),G=await rY(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await hJ.jetstreamManager(Z);try{await Y.streams.info(jF),await Y.streams.update(jF,X)}catch(Q){if(Q instanceof Error&&Q.message.includes("stream not found"))await Y.streams.add(X);else if(Q instanceof Error&&/can ?not change.*storage|storage type/i.test(Q.message))await Y.streams.delete(jF),await Y.streams.add(X);else throw Q}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:j75});this.js=this.options.getJetStream(),this.jsm=G,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(Z,X,G,Y){let Q=this.js;if(!Q)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${X}; chunks NOT published to NATS`),Promise.resolve();let $=z75(X,Y),J=!1,W=()=>{if(J)return;J=!0;let N=P$8(X);Q.publish(N.subject,N.data).catch(()=>{})};G.addEventListener("abort",W,{once:!0});let K=(N)=>{let F=performance.now(),U=Kp0(N,{runId:X}),H=performance.now()-F;if(L61().record(H),z61().add(1,{"org.id":Y??"unknown"}),L75?.record(H,U.reduce((w,O)=>w+O.data.length,0)),U.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${X}`);return}for(let w of U)$.publish(Q,w.subject,w.data,w.headers?dv8(w.headers):void 0)};return(async()=>{let N=Z.getReader(),F=0,U=0,H;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),U++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(w){H=w,console.warn(`[Decopilot] stream pump error for thread ${X}:`,w?.message??w)}finally{if(N.releaseLock(),W(),E75)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:X,publishedChunks:U,publishErrors:$.errorCount}))}if(H!==void 0)throw H})()}async publishRawChunk(Z,X,G){let Y=this.js;if(!Y)return!1;let Q=performance.now(),$=Kp0(X,{runId:Z,dedup:G});if(L61().record(performance.now()-Q),z61().add(1),$.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${Z} (> MAX_CHUNKED_BYTES)`),!0;for(let J of $)await Y.publish(J.subject,J.data,{...J.headers?{headers:dv8(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone(Z,X,G){let Y=this.js;if(!Y)return!1;let Q=A$8({runId:Z,fenceToken:X,finalSeq:G});return await Y.publish(Q.subject,Q.data,{msgID:Q.msgId}),!0}async createTailStream(Z,X,G){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${Z}; no live tail`),null;let Q=G?.deliverPolicy==="new"?hJ.DeliverPolicy.New:hJ.DeliverPolicy.All,$=G?.closeOnDone??!1,J=rw(Z),W;try{W=await(await Y.consumers.get(jF,{filter_subjects:J,deliver_policy:Q})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=kw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Iw0()).pipeThrough(qw0()).getReader(),U=!1,H=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),F.cancel().catch(()=>{}),H()};return X?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:E,value:L}=await F.read();if(E){O(),D.close();return}let z=L;if(z.kind==="done"){if($){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge(Z){if(!this.jsm)return;this.jsm.streams.purge(jF,{filter:rw(Z)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var hJ,mv8,N75=(Z)=>{let X;return()=>X??=Z()},F75,U75=86400000000000,H75=120000000000,w75=4294967296,O75=500000,D75,E75,L75;var nv8=B(()=>{u9();Fp0();Sw0();Np0();H9();lv8();hJ=k(GB(),1),mv8=k(Ah(),1),F75=N75(()=>B4.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));D75=process.env.STREAM_ENCODE_TRACE==="1",E75=process.env.DECOPILOT_STREAM_TRACE==="1";L75=D75?new iv8:null});import{z as Q4}from"zod";var pv8,tv8,CK,A61,rv8,ov8,av8,sv8,A75,ev8,Zx8,Xx8,Gx8,Yx8,P75,Qx8,W37,T75,R75=(Z)=>{return Z.issues.map((X)=>{return`${X.path.length>0?X.path.join("."):"frame"}: ${X.message}`}).join("; ")},$x8=(Z)=>{return new TextEncoder().encode(JSON.stringify(Z))},Jx8=(Z)=>{let X;try{X=JSON.parse(new TextDecoder().decode(Z))}catch($){throw TypeError("malformed JSON in tunnel frame",{cause:$})}if(X===null||typeof X!=="object"||Array.isArray(X))throw TypeError("frame must be an object");if(!("type"in X))throw TypeError("frame type missing");let G=X.type,Y=typeof G==="string"?T75[G]:void 0;if(!Y)throw TypeError(`unknown frame type: ${String(G)}`);let Q=Y.safeParse(X);if(!Q.success)throw TypeError(`invalid tunnel frame: ${R75(Q.error)}`);return Q.data};var Wx8=B(()=>{pv8=Q4.string().regex(/^[A-Za-z0-9_-]*$/u),tv8=Q4.array(Q4.tuple([Q4.string(),Q4.string()])),CK=Q4.string().regex(/^[A-Za-z0-9_-]+$/u),A61=Q4.string().min(1),rv8=Q4.object({type:Q4.literal("request.start"),protocol:Q4.literal("tunnel.v1"),requestId:CK,method:Q4.string().min(1),url:Q4.string().min(1),headers:tv8,replySubject:A61,bodySubject:A61.optional(),abortSubject:A61,deadlineUnixMs:Q4.number().int().nonnegative().optional()}),ov8=Q4.object({type:Q4.literal("request.chunk"),requestId:CK,seq:Q4.number().int().nonnegative(),data:pv8}),av8=Q4.object({type:Q4.literal("request.end"),requestId:CK,seq:Q4.number().int().nonnegative()}),sv8=Q4.object({type:Q4.literal("request.error"),requestId:CK,code:Q4.string().min(1),message:Q4.string()}),A75=Q4.union([ov8,av8,sv8]),ev8=Q4.object({type:Q4.literal("response.ack"),requestId:CK}),Zx8=Q4.object({type:Q4.literal("response.start"),requestId:CK,status:Q4.number().int().min(100).max(599),statusText:Q4.string().optional(),headers:tv8}),Xx8=Q4.object({type:Q4.literal("response.chunk"),requestId:CK,seq:Q4.number().int().nonnegative(),data:pv8}),Gx8=Q4.object({type:Q4.literal("response.end"),requestId:CK,seq:Q4.number().int().nonnegative()}),Yx8=Q4.object({type:Q4.literal("response.error"),requestId:CK,code:Q4.string().min(1),message:Q4.string()}),P75=Q4.union([ev8,Zx8,Xx8,Gx8,Yx8]),Qx8=Q4.object({type:Q4.literal("abort"),requestId:CK,reason:Q4.string().optional()}),W37=Q4.union([rv8,A75,P75,Qx8]),T75={"request.start":rv8,"request.chunk":ov8,"request.end":av8,"request.error":sv8,"response.ack":ev8,"response.start":Zx8,"response.chunk":Xx8,"response.end":Gx8,"response.error":Yx8,abort:Qx8}});var I75=(Z)=>{return Z.replaceAll("+","-").replaceAll("/","_").replaceAll("=","")},q75=(Z)=>{let X=Z.replaceAll("-","+").replaceAll("_","/"),G=(4-X.length%4)%4;return X+"=".repeat(G)},M75=(Z)=>{let X=[];for(let G=0;G<Z.length;G+=32768)X.push(String.fromCharCode(...Z.subarray(G,G+32768)));return X.join("")},k75=(Z)=>{let X=new Uint8Array(Z.length);for(let G=0;G<Z.length;G+=32768){let Y=Z.slice(G,G+32768);X.set(Uint8Array.from(Y,(Q)=>Q.charCodeAt(0)),G)}return X},Kx8=(Z)=>{return I75(btoa(M75(Z)))},Nx8=(Z)=>{return k75(atob(q75(Z)))},S75;var Fx8=B(()=>{S75=class S75{#Z=[];#X;#G=!1;#$=new Set;push(Z){if(this.#G)return;let X=this.#Q();if(X){X.resolve({value:Z,done:!1});return}this.#Z.push(Z)}close(){if(this.#G)return;this.#G=!0,this.#Y()}fail(Z){if(this.#G)return;this.#X=Z,this.#G=!0,this.#J(Z)}[Symbol.asyncIterator](){let Z=!1,X=new Set;return{next:()=>{if(Z)return Promise.resolve({value:void 0,done:!0});if(this.#Z.length>0)return Promise.resolve({value:this.#Z.shift(),done:!1});if(this.#X)return Promise.reject(this.#X);if(this.#G)return Promise.resolve({value:void 0,done:!0});return new Promise((G,Y)=>{let Q;Q={resolve:($)=>{X.delete(Q),G($)},reject:($)=>{X.delete(Q),Y($)}},X.add(Q),this.#$.add(Q)})},return:()=>{Z=!0;for(let G of X)this.#$.delete(G),G.resolve({value:void 0,done:!0});return X.clear(),Promise.resolve({value:void 0,done:!0})}}}#Q(){for(let Z of this.#$)return this.#$.delete(Z),Z;return}#Y(){for(let Z of this.#$)Z.resolve({value:void 0,done:!0});this.#$.clear()}#J(Z){for(let X of this.#$)X.reject(Z);this.#$.clear()}}});function*h75(Z,X){for(let G=0;G<Z.length;G+=X)yield Z.subarray(G,G+X)}class p75{maxSize;ttlMs;now;#Z=new Map;constructor(Z,X,G=Date.now){this.maxSize=Z;this.ttlMs=X;this.now=G}get(Z){let X=this.#Z.get(Z);if(!X)return;if(X.expiresAt<=this.now()){this.#Z.delete(Z);return}return X.value}has(Z){return this.get(Z)!==void 0}set(Z,X){let G=this.now();this.prune(G),this.#Z.delete(Z),this.#Z.set(Z,{value:X,expiresAt:G+this.ttlMs});while(this.#Z.size>this.maxSize){let Y=this.#Z.keys().next().value;if(Y===void 0)return;this.#Z.delete(Y)}}take(Z){let X=this.get(Z);return this.#Z.delete(Z),X}clear(){this.#Z.clear()}prune(Z){for(let[X,G]of this.#Z)if(G.expiresAt<=Z)this.#Z.delete(X)}}var V75=30000,C75=1000,f75=65536,W$,b75=(Z)=>{return"connection"in Z},v75=(Z)=>{let X=b75(Z)?Z:{connection:Z};return{connection:X.connection,timeoutMs:X.timeoutMs??0,firstFrameTimeoutMs:X.firstFrameTimeoutMs??V75,idleTimeoutMs:X.idleTimeoutMs??0,republishIntervalMs:X.republishIntervalMs??C75,maxChunkBytes:X.maxChunkBytes??f75,diagnostics:X.diagnostics}},Ux8=(Z)=>{return Array.from(Z.entries())},x75=(Z)=>{return Z!==void 0&&!(Z instanceof Headers)&&typeof Z!=="function"&&typeof Z[Symbol.iterator]==="function"},_75=(Z,X,G)=>{if(x75(X?.headers))return Array.from(X?.headers,([Y,Q])=>[String(Y),String(Q)]);if(Z instanceof Request)return Ux8(G.headers);return Ux8(G.headers)},Hx8=(Z)=>{let X=new Headers;for(let[G,Y]of Z)X.append(G,Y);return X},y75=()=>{return crypto.randomUUID().replaceAll("-","")},g75=(Z)=>{try{Z?.unsubscribe()}catch{}},u75=(Z)=>{if(!Number.isSafeInteger(Z)||Z<1)throw TypeError("maxChunkBytes must be a positive safe integer")},c75=(Z,X)=>{return Z==="HEAD"||X===204||X===205||X===304},gO=(Z,X,G)=>{Z.publish(X,$x8(G))},l75=(Z)=>{return Z.type.startsWith("response.")},P61=(Z)=>{let X=Z.reason;if(X instanceof Error)return X.message;if(typeof X==="string")return X;return"aborted"},d75=(Z)=>{if(Z==="idle")return new W$("tunnel_idle_timeout","no response frame within idleTimeoutMs");return new W$("tunnel_no_first_frame","no response frame arrived before firstFrameTimeoutMs")},wx8=async(Z,X,G,Y,Q="first_frame")=>{while(!0){let $,J;try{let W=await Promise.race([Z.next(),new Promise((N,F)=>{if(Y.aborted){F(Y.reason);return}let U=()=>F(Y.reason);J=()=>{Y.removeEventListener("abort",U)},Y.addEventListener("abort",U,{once:!0})}),...G>0?[new Promise((N,F)=>{$=setTimeout(()=>{F(d75(Q))},G)})]:[]]);if(W.done)return{value:void 0,done:!0};let K=Jx8(W.value.data);if(!l75(K)||K.requestId!==X)continue;return{value:K,done:!1}}finally{if(J?.(),$)clearTimeout($)}}},m75=async(Z)=>{let X=!1;while(!0){let G=await wx8(Z.iterator,Z.requestId,X?0:Z.firstFrameTimeoutMs,Z.signal);if(G.done)throw new W$("tunnel_response_closed","response subscription closed before response.start");if(!X)X=!0,Z.onFirstResponseFrame();if(G.value.type==="response.ack")continue;if(G.value.type==="response.start")return G.value;if(G.value.type==="response.error")throw new W$(G.value.code,G.value.message);throw new W$("tunnel_unexpected_response_frame",`expected response.start, got ${G.value.type}`)}},i75=async(Z)=>{let X=Z.body.getReader(),G=0,Y=!1,Q=()=>{Y=!0,X.cancel(Z.signal.reason).catch(()=>{})};try{if(Z.signal.aborted){Q();return}Z.signal.addEventListener("abort",Q,{once:!0});while(!0){let{done:$,value:J}=await X.read();if(Y)return;if($){gO(Z.connection,Z.subject,{type:"request.end",requestId:Z.requestId,seq:G});return}for(let W of h75(J,Z.maxChunkBytes)){if(Y)return;gO(Z.connection,Z.subject,{type:"request.chunk",requestId:Z.requestId,seq:G,data:Kx8(W)}),G++}}}catch($){if(Y)return;gO(Z.connection,Z.subject,{type:"request.error",requestId:Z.requestId,code:"tunnel_request_body_error",message:$ instanceof Error?$.message:String($)})}finally{Z.signal.removeEventListener("abort",Q),X.releaseLock()}},n75=(Z)=>{return new ReadableStream({async pull(X){while(!0)try{let G=await wx8(Z.iterator,Z.requestId,Z.idleTimeoutMs,Z.signal,"idle");if(G.done){X.error(new W$("tunnel_response_closed","response subscription closed before response.end")),Z.cleanup();return}let Y=G.value;if(Y.type==="response.ack"||Y.type==="response.start")continue;if(Y.type==="response.chunk"){X.enqueue(Nx8(Y.data));return}if(Y.type==="response.end"){X.close(),Z.cleanup();return}X.error(new W$(Y.code,Y.message)),Z.cleanup();return}catch(G){X.error(G),Z.cleanup();return}},cancel(){gO(Z.connection,Z.abortSubject,{type:"abort",requestId:Z.requestId,reason:"response_body_cancelled"}),Z.cleanup()}},{highWaterMark:0})},hO=(Z)=>{let X=v75(Z);return u75(X.maxChunkBytes),async(G,Y)=>{let Q=Eb8(G),$=new Request(G,Y),J=y75(),W=Lb8(Q.hostname,J),K=new AbortController,N=new AbortController,F=!1,U,H,w,O,D=!1,E=(P=new W$("tunnel_closed","tunnel request closed"))=>{if(F)return;if(F=!0,g75(U),$.body&&!D)$.body.cancel(P).catch(()=>{});if(N.abort(P),K.abort(P),w)clearInterval(w);if(O)clearTimeout(O);$.signal.removeEventListener("abort",L)},L=()=>{let P=new W$("tunnel_aborted",P61($.signal));gO(X.connection,W.abort,{type:"abort",requestId:J,reason:P61($.signal)}),K.abort(P),E(P)};if($.signal.aborted)throw new W$("tunnel_aborted",P61($.signal));if(U=X.connection.subscribe(W.reply),H=U[Symbol.asyncIterator](),$.signal.addEventListener("abort",L,{once:!0}),X.timeoutMs>0)O=setTimeout(()=>{let P=new W$("tunnel_timeout",`tunnel request timed out after ${X.timeoutMs}ms`);gO(X.connection,W.abort,{type:"abort",requestId:J,reason:"tunnel_timeout"}),K.abort(P),E(P)},X.timeoutMs);let z={type:"request.start",protocol:"tunnel.v1",requestId:J,method:$.method,url:Q.pathWithSearch,headers:_75(G,Y,$),replySubject:W.reply,abortSubject:W.abort,...$.body?{bodySubject:W.body}:{},...X.timeoutMs>0?{deadlineUnixMs:Date.now()+X.timeoutMs}:{}};gO(X.connection,W.request,z),w=X.republishIntervalMs>0?setInterval(()=>{if(!D)gO(X.connection,W.request,z)},X.republishIntervalMs):void 0;let j=()=>{if(D)return;D=!0,($.body?i75({connection:X.connection,subject:W.body,requestId:J,body:$.body,maxChunkBytes:X.maxChunkBytes,signal:N.signal}):void 0)?.catch((A)=>{X.diagnostics?.({event:"request_body_error",requestId:J,subject:W.body,error:A instanceof Error?A.message:String(A)})})};try{let P=await m75({iterator:H,requestId:J,firstFrameTimeoutMs:X.firstFrameTimeoutMs,signal:K.signal,onFirstResponseFrame:()=>{if(w)clearInterval(w);j()}});if(c75($.method,P.status))return E(),new Response(null,{status:P.status,statusText:P.statusText,headers:Hx8(P.headers)});return new Response(n75({connection:X.connection,abortSubject:W.abort,iterator:H,requestId:J,idleTimeoutMs:X.idleTimeoutMs,signal:K.signal,cleanup:E}),{status:P.status,statusText:P.statusText,headers:Hx8(P.headers)})}catch(P){throw E(P instanceof Error?P:Error(String(P))),P}}};var Ox8=B(()=>{Wx8();Fx8();Mz0();W$=class W$ extends Error{code;constructor(Z,X,G){super(`${Z}: ${X}`,G);this.code=Z;this.name="TunnelTransportError"}}});var xz0=B(()=>{Ox8()});function Bx8(Z){let X=Z.createFetch??t75,G=Z.timeoutMs??2000;return async(Y)=>{try{let Q=Z.getConnection();if(!Q)return T61;let $=yJ(Y),W=await X(Q,G)(`tunnel://${$}/api/links/status`,{method:"GET"});if(!W.ok)return T61;let K=await W.json();return{online:!0,hostname:K.hostname,capabilities:K.capabilities??[],cliVersion:K.cliVersion}}catch{return T61}}}var T61,t75=(Z,X)=>hO({connection:Z,firstFrameTimeoutMs:X});var Dx8=B(()=>{xz0();Vr();T61={online:!1,capabilities:[]}});async function*r75(Z){if(!Z.body){yield{headers:{status:Z.status,headers:Object.fromEntries(Z.headers.entries())}};return}let X=Z.body.getReader(),G=!1;try{yield{headers:{status:Z.status,headers:Object.fromEntries(Z.headers.entries())}};while(!0){let{done:Y,value:Q}=await X.read();if(Y){G=!0;return}yield{data:Buffer.from(Q).toString("base64")}}}finally{try{if(!G)await X.cancel()}catch{}finally{X.releaseLock()}}}function Ex8(Z){let X=Z.createFetch??((G)=>hO({connection:G,idleTimeoutMs:o75}));return async function*(Y,Q,$){let J=Z.getConnection();if(!J)throw Error("link_unavailable: NATS unavailable");let W=yJ(Y),K=X(J),N={method:Q.method,headers:Q.headers,signal:$?.signal};if(Q.body!=null)N.body=Q.body;let F=await K(`tunnel://${W}${Q.path}`,N);yield*r75(F)}}var o75=45000;var Lx8=B(()=>{xz0();Vr()});import{z as uJ}from"zod";function zx8(Z){return JSON.stringify(Z)}var _37;var jx8=B(()=>{_37=uJ.discriminatedUnion("type",[uJ.object({type:uJ.literal("cancel"),runId:uJ.string()}),uJ.object({type:uJ.literal("cancel_req"),reqId:uJ.string()}),uJ.object({type:uJ.literal("keep_alive")}),uJ.object({type:uJ.literal("shutdown")})])});function Ax8(Z){let X=Z.createFetch??((G)=>hO({connection:G,idleTimeoutMs:a75}));return{async publish(G,Y,Q){let $=Z.getConnection();if(!$)throw Error("link_unavailable: NATS unavailable");let J=yJ(G),K=await X($)(`tunnel://${J}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(Y),signal:Q?.signal});if(!K.ok){let N=await K.text().catch(()=>"");throw Error(`tunnel work publish failed (${K.status})${N?`: ${N}`:""}`)}await K.body?.cancel().catch(()=>{})}}}function Px8(Z){let X=Z.createFetch??hO;return{async publishControlFrame(G,Y,Q){let $=Z.getConnection();if(!$)throw Error("link_unavailable: NATS unavailable");let J=yJ(G),K=await X($)(`tunnel://${J}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:zx8(Y),signal:Q?.signal});if(!K.ok){let N=await K.text().catch(()=>"");throw Error(`tunnel control publish failed (${K.status})${N?`: ${N}`:""}`)}await K.body?.cancel().catch(()=>{})}}}var a75=45000;var Tx8=B(()=>{xz0();jx8();Vr()});function _z0(Z,X,G,Y){if(!Y)return!1;return Z.emit(X,QW(G,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var Rx8=B(()=>{a4()});class R61{storage;options;timer=null;constructor(Z,X={}){this.storage=Z;this.options=X}start(){if(this.timer)return;let Z=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},Z)}async runOnce(){let Z=this.options.staleAfterMs??3600000;try{let X=await this.storage.sweepAbandoned(Z);if(X>0)console.log(`[async-research-sweeper] marked ${X} stale jobs as abandoned`);return X}catch(X){return console.error("[async-research-sweeper] sweep failed",X),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as s75,rm as yz0}from"fs/promises";import{join as gz0}from"path";async function hz0(Z){let X=new Date;X.setUTCDate(X.getUTCDate()-e75),X.setUTCHours(0,0,0,0);let G=0;try{let Y=await mC(Z);for(let Q of Y)if(/^\d{4}$/.test(Q))G+=await Ix8(Z,Q,X);else if(!Q.startsWith(".")){let $=gz0(Z,Q),J=await mC($);for(let K of J){if(!/^\d{4}$/.test(K))continue;G+=await Ix8($,K,X)}if((await mC($)).length===0)await yz0($,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return G}async function Ix8(Z,X,G){let Y=0,Q=gz0(Z,X),$=await mC(Q);for(let W of $){if(!/^\d{2}$/.test(W))continue;let K=gz0(Q,W),N=await mC(K);for(let U of N){if(!/^\d{2}$/.test(U))continue;let H=new Date(`${X}-${W}-${U}T00:00:00Z`);if(isNaN(H.getTime()))continue;if(H<G){let w=gz0(K,U);await yz0(w,{recursive:!0,force:!0}),Y++}}if((await mC(K)).length===0)await yz0(K,{recursive:!0,force:!0})}if((await mC(Q)).length===0)await yz0(Q,{recursive:!0,force:!0});return Y}async function mC(Z){try{return(await s75(Z)).filter((G)=>!G.startsWith("."))}catch{return[]}}var e75=30;var I61=()=>{};import{DBOS as q61,SchedulerMode as ZX5}from"@dbos-inc/dbos-sdk";async function GX5(){let Z=[N$(),iC(),vK()],X=0;for(let G of Z)try{X+=await hz0(G)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${X} day-dir(s) across ${Z.length} signal dir(s)`),{deleted:X,dirs:Z.length}}async function YX5(Z,X){await q61.runStep(()=>GX5(),{name:"monitoringRetention"})}function Mx8(){if(qx8)return;qx8=!0;let Z=q61.registerWorkflow(YX5,{name:"monitoringRetentionWorkflow"});q61.registerScheduled(Z,{name:"monitoringRetentionWorkflow",crontab:XX5,mode:ZX5.ExactlyOncePerIntervalWhenActive})}var XX5="23 4 * * *",qx8=!1;var kx8=B(()=>{oY();I61()});function Sx8(Z){return async(X,G)=>{let Y=await Z.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",G).where("member.organizationId","=",X).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${G} not found in org ${X} \u2014 returning null`),null;let Q=await Ow.create();Q.auth.user={id:G,role:Y.role},Q.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let $=await sc0(Z.db,X,Y.role);return Q.boundAuth=ac0({auth:Q.authInstance,headers:new Headers,role:Y.role,permissions:$,userId:G}),Q.access=new aD(G,void 0,Q.boundAuth,Y.role,"self"),q90(Q,{id:Y.orgId,slug:Y.orgSlug}),Q}}var Vx8=B(()=>{sD();yi()});function QX5(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function JX5(){for(let Z of $X5)Z()}function Cx8(Z){let X=[...M61.logs,Z];M61={...M61,logs:X.length>500?X.slice(-500):X},JX5()}function k61(){return WX5}var M61,$X5,WX5=!1;var S61=B(()=>{M61=QX5(),$X5=new Set});import{EventEmitter as KX5}from"events";var V61;var fx8=B(()=>{S61();V61=new KX5;V61.on("request",(Z)=>{Cx8(Z)})});function bx8(){return async(Z,X)=>{let G=Date.now(),Y=Z.req.method,Q=Z.req.path;if(Q==="/api/auth/get-session"||Q.includes("favicon")){await X();return}let $="",J=!1;if(Q.startsWith("/mcp")&&Y==="POST"){J=!0;try{if(Z.req.header("Content-Type")?.includes("application/json")){let H=await Z.req.raw.clone().json();if(H.method==="tools/call"&&H.params?.name){let w=rg(H.params.name),O=H.params.arguments||{},D=Object.keys(O).map((L)=>rg(L)),E=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";$=`${e5.tool}${w}${e5.dim}(${E})${e5.reset}`}else if(H.method)$=`${e5.dim}${rg(H.method)}${e5.reset}`}}catch{}}let W=rg(Q);if(Q.startsWith("/mcp/conn_")){let F=Q.split("/")[2]??"";W=`/mcp/${e5.mcp}${rg(F.slice(0,12))}\u2026${e5.reset}`}else if(Q==="/mcp")W=`${e5.mcp}/mcp${e5.reset}`;else if(Q==="/mcp/registry")W=`${e5.mcp}/mcp/registry${e5.reset}`;let K=FX5(Y),N=J?"\u25C0":"\u2190";if(!k61())console.log(`${e5.dim}${N}${e5.reset} ${K}${Y}${e5.reset} ${W}${$?` ${$}`:""}`);try{await X()}finally{let F=Date.now()-G,U=Z.res.status,H=NX5(U),w=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!k61())console.log(`${e5.dim}${O}${e5.reset} ${K}${Y}${e5.reset} ${W}${$?` ${$}`:""} ${H}${U}${e5.reset} ${e5.duration}${w}${e5.reset}`);V61.emit("request",{method:Y,path:rg(Q),status:U,duration:F,timestamp:new Date})}}}var e5,NX5=(Z)=>{if(Z>=500)return e5.serverError;if(Z>=400)return e5.clientError;if(Z>=300)return e5.redirect;return e5.ok},FX5=(Z)=>{return e5[Z]||e5.reset},rg=(Z)=>{return Z.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var vx8=B(()=>{S61();fx8();e5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as gx8}from"crypto";import{mkdir as UX5,readdir as HX5,rm as xx8,stat as hx8}from"fs/promises";import{join as f61,relative as wX5}from"path";import{z as P8}from"zod";function cx8(Z){let X=Z.replace(/[^a-zA-Z0-9_-]/g,"_");return f61(OX5,X)}function lx8(Z){return Z.replace(/^\/+/,"").replace(/\.\./g,"")}function C61(Z,X){let G=cx8(Z),Y=lx8(X);return f61(G,Y)}function BX5(Z,X,G,Y){let Q=W1().encryptionKey||"dev-secret",$=`${Z}:${X}:${G}:${Y}`;return gx8("sha256",Q).update($).digest("hex")}function yx8(Z,X,G,Y,Q){let $=Math.floor(Date.now()/1000)+Y,J=BX5(X,G,$,Q),W=new URL(`/api/dev-assets/${X}/${lx8(G)}`,Z);return W.searchParams.set("expires",$.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Q),W.toString()}function dx8(Z,X,G){let Y=`${Z}:${X.getTime()}:${G}`;return`"${gx8("md5","etag").update(Y).digest("hex")}"`}async function mx8(Z,X,G,Y,Q){try{let $=await HX5(Z,{withFileTypes:!0});for(let J of $){let W=f61(Z,J.name),N=wX5(X,W).replace(/\\/g,"/");if(G&&!N.startsWith(G))continue;if(J.isDirectory())if(Y){let F=N+"/";if(!G||F.startsWith(G)){if(!(G?N.slice(G.length):N).includes("/"))Q.commonPrefixes.add(F)}}else await mx8(W,X,G,Y,Q);else if(J.isFile()){if(Y&&G){let F=N.slice(G.length);if(F.includes(Y)){let U=F.indexOf(Y),H=G+F.slice(0,U+1);Q.commonPrefixes.add(H);continue}}try{let F=await hx8(W);Q.objects.push({key:N,size:F.size,lastModified:F.mtime.toISOString(),etag:dx8(W,F.mtime,F.size)})}catch{}}}}catch{}}function ix8(Z,X){let Y=w0(Z).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P8.object({prefix:P8.string().optional(),maxKeys:P8.number().optional().default(1000),continuationToken:P8.string().optional(),delimiter:P8.string().optional()}),outputSchema:P8.object({objects:P8.array(P8.object({key:P8.string(),size:P8.number(),lastModified:P8.string(),etag:P8.string()})),nextContinuationToken:P8.string().optional(),isTruncated:P8.boolean(),commonPrefixes:P8.array(P8.string()).optional()}),handler:async(Q)=>{let $=Q,J=$.prefix||"",W=$.maxKeys??1000,K=$.delimiter,N=$.continuationToken,F=cx8(Y);await UX5(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await mx8(F,F,J,K,U),U.objects.sort((E,L)=>E.key.localeCompare(L.key));let H=0;if(N){if(H=U.objects.findIndex((E)=>E.key>N),H===-1)H=U.objects.length}let w=U.objects.slice(H,H+W),O=H+W<U.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P8.object({key:P8.string()}),outputSchema:P8.object({contentType:P8.string().optional(),contentLength:P8.number(),lastModified:P8.string(),etag:P8.string(),metadata:P8.record(P8.string(),P8.string()).optional()}),handler:async(Q)=>{let $=Q,J=C61(Y,$.key),W=await hx8(J);return{contentType:H81($.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:dx8(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P8.object({key:P8.string(),expiresIn:P8.number().optional()}),outputSchema:P8.object({url:P8.string(),expiresIn:P8.number()}),handler:async(Q)=>{let $=Q,J=$.expiresIn??_x8;return{url:yx8(X,Y,$.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P8.object({key:P8.string(),expiresIn:P8.number().optional(),contentType:P8.string().optional()}),outputSchema:P8.object({url:P8.string(),expiresIn:P8.number()}),handler:async(Q)=>{let $=Q,J=$.expiresIn??_x8;return{url:yx8(X,Y,$.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P8.object({key:P8.string()}),outputSchema:P8.object({success:P8.boolean(),key:P8.string()}),handler:async(Q)=>{let $=Q,J=C61(Y,$.key);try{return await xx8(J),{success:!0,key:$.key}}catch{return{success:!1,key:$.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P8.object({keys:P8.array(P8.string()).max(1000)}),outputSchema:P8.object({deleted:P8.array(P8.string()),errors:P8.array(P8.object({key:P8.string(),message:P8.string()}))}),handler:async(Q)=>{let $=Q,J=[],W=[];return await Promise.all($.keys.map(async(K)=>{let N=C61(Y,K);try{await xx8(N),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function b61(Z,X,G){let Y=ix8(X,G),Q=new bN({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:D9});for(let J of Y){let W="shape"in J.inputSchema?J.inputSchema.shape:P8.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P8.object({}).shape;Q.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let F=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let $=new cQ({enableJsonResponse:Z.headers.get("Accept")?.includes("application/json")??!1});return await Q.connect($),JK(Q,$,Z,"mcp:dev-assets")}async function nx8(Z,X,G,Y){let $=ix8(G,Y).find((J)=>J.name===Z);if(!$)return{content:[{type:"text",text:`Tool not found: ${Z}`}],isError:!0};try{let J=await $.handler(X);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var OX5="./data/assets",_x8=3600,ux8,px8;var tx8=B(()=>{_8();Mp();l4();Rl();zy();SG();iL0();ux8=new S1;ux8.all("/",async(Z)=>{let X=Z.get("studioContext"),G=new URL(Z.req.url),Y=`${G.protocol}//${G.host}`;return b61(Z.req.raw,X,Y)});px8=ux8});var rx8={};Q6(rx8,{mountDevRoutes:()=>DX5});function DX5(Z,X){Z.all("/mcp/:connectionId{.*_dev-assets$}",X,async(Y)=>{let Q=Y.get("studioContext"),$=new URL(Y.req.url),J=`${$.protocol}//${$.host}`;return b61(Y.req.raw,Q,J)}),Z.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",X,async(Y)=>{let Q=Y.get("studioContext"),$=new URL(Y.req.url),J=`${$.protocol}//${$.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),N=await nx8(W,K,Q,J);if(N.isError)return Y.json(N.content,500);return Y.json(N.content)}),Z.use("/mcp/dev-assets",X),Z.route("/mcp/dev-assets",px8);let G=new S1;G.use("*",xJ({mountPath:"/api/dev-assets"})),G.route("/",mL0({orgFromPath:!1})),Z.route("/api/dev-assets",G)}var ox8=B(()=>{l4();Q81();iL0();tx8()});import{sql as EX5}from"kysely";import{randomUUID as ax8}from"crypto";import{z as LX5}from"zod";async function jX5(Z){let X=new Date().toISOString(),G=ax8(),Y=p6.SELF(Z.organizationId),Q="registry.publish_request.created",$={requestId:Z.request.id,requestedId:Z.request.requested_id,title:Z.request.title,status:Z.request.status,createdAt:Z.request.created_at,requester:{name:Z.request.requester_name,email:Z.request.requester_email}};await Z.db.insertInto("events").values({id:G,organization_id:Z.organizationId,type:"registry.publish_request.created",source:Y,specversion:"1.0",subject:Z.request.id,time:X,datacontenttype:"application/json",dataschema:null,data:JSON.stringify($),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:X,updated_at:X}).execute();let J=await Z.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",Z.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Y)])).execute();if(J.length>0)await Z.db.insertInto("event_deliveries").values(J.map((W)=>({id:ax8(),event_id:G,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:X}))).execute();try{await EX5`SELECT
|
|
2796
2796
|
pg_notify('studio_events', ${G}),
|