@ottocode/web-sdk 0.1.310 → 0.1.312

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.
Files changed (102) hide show
  1. package/dist/assets/provider-logos.d.ts +1 -0
  2. package/dist/assets/provider-logos.d.ts.map +1 -1
  3. package/dist/components/chat/ChatInput.d.ts +4 -0
  4. package/dist/components/chat/ChatInput.d.ts.map +1 -1
  5. package/dist/components/chat/ChatInputContainer.d.ts +4 -0
  6. package/dist/components/chat/ChatInputContainer.d.ts.map +1 -1
  7. package/dist/components/chat/ConfigModal.d.ts +3 -1
  8. package/dist/components/chat/ConfigModal.d.ts.map +1 -1
  9. package/dist/components/chat/ConfigSelector.d.ts.map +1 -1
  10. package/dist/components/chat/InputApprovalBar.d.ts.map +1 -1
  11. package/dist/components/chat/InputSecureInputBar.d.ts.map +1 -1
  12. package/dist/components/chat/InputSubagentsBar.d.ts.map +1 -1
  13. package/dist/components/chat/InputTodosBar.d.ts.map +1 -1
  14. package/dist/components/chat/NewSessionLanding.d.ts +4 -0
  15. package/dist/components/chat/NewSessionLanding.d.ts.map +1 -1
  16. package/dist/components/chat/input-bar-chrome.d.ts +24 -0
  17. package/dist/components/chat/input-bar-chrome.d.ts.map +1 -0
  18. package/dist/components/common/OttoOIcon.d.ts +8 -0
  19. package/dist/components/common/OttoOIcon.d.ts.map +1 -0
  20. package/dist/components/common/ProviderLogo.d.ts.map +1 -1
  21. package/dist/components/index.d.ts +3 -2
  22. package/dist/components/index.d.ts.map +1 -1
  23. package/dist/components/index.js +4718 -3514
  24. package/dist/components/index.js.map +46 -36
  25. package/dist/components/messages/MessageThreadContainer.d.ts +6 -0
  26. package/dist/components/messages/MessageThreadContainer.d.ts.map +1 -1
  27. package/dist/components/messages/OttoKickoffNotice.d.ts +15 -0
  28. package/dist/components/messages/OttoKickoffNotice.d.ts.map +1 -0
  29. package/dist/components/messages/OttoWakeupNotice.d.ts +12 -0
  30. package/dist/components/messages/OttoWakeupNotice.d.ts.map +1 -0
  31. package/dist/components/messages/UserMessageGroup.d.ts.map +1 -1
  32. package/dist/components/messages/compactActivity.d.ts.map +1 -1
  33. package/dist/components/messages/otto-notice-parsing.d.ts +43 -0
  34. package/dist/components/messages/otto-notice-parsing.d.ts.map +1 -0
  35. package/dist/components/messages/renderers/GoalToolRenderer.d.ts.map +1 -1
  36. package/dist/components/onboarding/OnboardingModal.d.ts.map +1 -1
  37. package/dist/components/onboarding/steps/ProviderSetupStep.d.ts +10 -0
  38. package/dist/components/onboarding/steps/ProviderSetupStep.d.ts.map +1 -1
  39. package/dist/components/otto/OttoGoalBar.d.ts +18 -0
  40. package/dist/components/otto/OttoGoalBar.d.ts.map +1 -0
  41. package/dist/components/otto/OttoSessionRail.d.ts +15 -0
  42. package/dist/components/otto/OttoSessionRail.d.ts.map +1 -0
  43. package/dist/components/otto/OttoSessionView.d.ts +14 -0
  44. package/dist/components/otto/OttoSessionView.d.ts.map +1 -0
  45. package/dist/components/otto/OttoTabBar.d.ts +20 -0
  46. package/dist/components/otto/OttoTabBar.d.ts.map +1 -0
  47. package/dist/components/otto/OttoWorkspace.d.ts +20 -0
  48. package/dist/components/otto/OttoWorkspace.d.ts.map +1 -0
  49. package/dist/components/otto/index.d.ts +7 -0
  50. package/dist/components/otto/index.d.ts.map +1 -0
  51. package/dist/components/sessions/SessionListContainer.d.ts +8 -0
  52. package/dist/components/sessions/SessionListContainer.d.ts.map +1 -1
  53. package/dist/components/subagents/SubagentFloatingViewer.d.ts +3 -2
  54. package/dist/components/subagents/SubagentFloatingViewer.d.ts.map +1 -1
  55. package/dist/components/titlebar/TitleBar.d.ts +48 -0
  56. package/dist/components/titlebar/TitleBar.d.ts.map +1 -0
  57. package/dist/hooks/index.d.ts +1 -0
  58. package/dist/hooks/index.d.ts.map +1 -1
  59. package/dist/hooks/index.js +267 -70
  60. package/dist/hooks/index.js.map +13 -12
  61. package/dist/hooks/useAgents.d.ts.map +1 -1
  62. package/dist/hooks/useAuthStatus.d.ts +5 -0
  63. package/dist/hooks/useAuthStatus.d.ts.map +1 -1
  64. package/dist/hooks/useChatComposer.d.ts.map +1 -1
  65. package/dist/hooks/useEdgeHover.d.ts +26 -0
  66. package/dist/hooks/useEdgeHover.d.ts.map +1 -0
  67. package/dist/hooks/useGoals.d.ts +34 -6
  68. package/dist/hooks/useGoals.d.ts.map +1 -1
  69. package/dist/hooks/useSessionStream.d.ts.map +1 -1
  70. package/dist/hooks/useSessions.d.ts +9 -2
  71. package/dist/hooks/useSessions.d.ts.map +1 -1
  72. package/dist/index.js +4864 -3571
  73. package/dist/index.js.map +48 -38
  74. package/dist/lib/api-client/auth.d.ts +10 -0
  75. package/dist/lib/api-client/auth.d.ts.map +1 -1
  76. package/dist/lib/api-client/goals.d.ts +9 -1
  77. package/dist/lib/api-client/goals.d.ts.map +1 -1
  78. package/dist/lib/api-client/index.d.ts +18 -0
  79. package/dist/lib/api-client/index.d.ts.map +1 -1
  80. package/dist/lib/api-client/sessions.d.ts +2 -0
  81. package/dist/lib/api-client/sessions.d.ts.map +1 -1
  82. package/dist/lib/index.js +45 -3
  83. package/dist/lib/index.js.map +6 -6
  84. package/dist/stores/index.d.ts +1 -1
  85. package/dist/stores/index.d.ts.map +1 -1
  86. package/dist/stores/index.js +57 -56
  87. package/dist/stores/index.js.map +6 -6
  88. package/dist/stores/subagentViewerStore.d.ts +20 -5
  89. package/dist/stores/subagentViewerStore.d.ts.map +1 -1
  90. package/dist/stores/workspaceTabStore.d.ts +14 -0
  91. package/dist/stores/workspaceTabStore.d.ts.map +1 -0
  92. package/dist/types/api.d.ts +2 -2
  93. package/dist/types/api.d.ts.map +1 -1
  94. package/package.json +3 -3
  95. package/dist/components/goals/GoalsSidebar.d.ts +0 -6
  96. package/dist/components/goals/GoalsSidebar.d.ts.map +0 -1
  97. package/dist/components/goals/GoalsSidebarToggle.d.ts +0 -6
  98. package/dist/components/goals/GoalsSidebarToggle.d.ts.map +0 -1
  99. package/dist/components/goals/index.d.ts +0 -3
  100. package/dist/components/goals/index.d.ts.map +0 -1
  101. package/dist/stores/goalsPanelStore.d.ts +0 -9
  102. package/dist/stores/goalsPanelStore.d.ts.map +0 -1
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/hooks/useConfig.ts", "../src/lib/api-client/sessions.ts", "../src/lib/api-client/utils.ts", "../src/lib/platform.ts", "../src/lib/config.ts", "../src/lib/api-client/git.ts", "../src/lib/api-client/config.ts", "../src/lib/api-client/files.ts", "../src/lib/api-client/branches.ts", "../src/lib/api-client/goals.ts", "../src/lib/api-client/approval.ts", "../src/lib/api-client/ottorouter.ts", "../src/lib/api-client/auth.ts", "../src/lib/api-client/skills.ts", "../src/lib/api-client/usage.ts", "../src/lib/api-client/dictation.ts", "../src/lib/api-client/secure-input.ts", "../src/lib/api-client/index.ts", "../src/hooks/usePreferences.ts", "../src/hooks/useFiles.ts", "../src/hooks/useGit.ts", "../src/stores/gitStore.ts", "../src/stores/sessionFilesStore.ts", "../src/stores/researchStore.ts", "../src/stores/settingsStore.ts", "../src/stores/tunnelStore.ts", "../src/stores/fileBrowserStore.ts", "../src/stores/mcpStore.ts", "../src/stores/skillsStore.ts", "../src/stores/viewerTabsStore.ts", "../src/hooks/useMessages.ts", "../src/hooks/useQueueState.ts", "../src/hooks/useSessions.ts", "../src/hooks/useSessionStream.ts", "../src/lib/sse-client.ts", "../src/stores/toolApprovalStore.ts", "../src/stores/secureInputStore.ts", "../src/hooks/useClientEvents.ts", "../src/stores/toastStore.ts", "../src/lib/open-url.ts", "../src/hooks/useTheme.ts", "../src/hooks/useWorkingDirectory.ts", "../src/hooks/useKeyboardShortcuts.ts", "../src/stores/focusStore.ts", "../src/stores/sidebarStore.ts", "../src/stores/filePickerStore.ts", "../src/stores/terminalStore.ts", "../src/hooks/useImageUpload.ts", "../src/hooks/useFileUpload.ts", "../src/hooks/useSessionFiles.ts", "../src/hooks/useBranch.ts", "../src/hooks/useGoals.ts", "../src/hooks/useResearch.ts", "../src/stores/pendingResearchStore.ts", "../src/hooks/useOttoRouterPayments.ts", "../src/stores/ottorouterStore.ts", "../src/stores/topupApprovalStore.ts", "../src/hooks/useOttoRouterBalance.ts", "../src/stores/usageStore.ts", "../src/hooks/useShareStatus.ts", "../src/hooks/useToolApprovalShortcuts.ts", "../src/hooks/useTopupCallback.ts", "../src/hooks/useAuthStatus.ts", "../src/stores/onboardingStore.ts", "../src/hooks/useTunnel.ts", "../src/hooks/useProviderUsage.ts", "../src/hooks/useFileBrowser.ts", "../src/hooks/useMCP.ts", "../src/hooks/useSkills.ts", "../src/hooks/useAgents.ts", "../src/stores/agentsStore.ts", "../src/hooks/useChatComposer.ts", "../src/hooks/useConfigModalControls.ts", "../src/hooks/useContainerWidth.ts", "../src/hooks/useVoiceInput.ts", "../src/hooks/useDictationModels.ts"],
3
+ "sources": ["../src/hooks/useConfig.ts", "../src/lib/api-client/sessions.ts", "../src/lib/api-client/utils.ts", "../src/lib/platform.ts", "../src/lib/config.ts", "../src/lib/api-client/git.ts", "../src/lib/api-client/config.ts", "../src/lib/api-client/files.ts", "../src/lib/api-client/branches.ts", "../src/lib/api-client/goals.ts", "../src/lib/api-client/approval.ts", "../src/lib/api-client/ottorouter.ts", "../src/lib/api-client/auth.ts", "../src/lib/api-client/skills.ts", "../src/lib/api-client/usage.ts", "../src/lib/api-client/dictation.ts", "../src/lib/api-client/secure-input.ts", "../src/lib/api-client/index.ts", "../src/hooks/usePreferences.ts", "../src/hooks/useFiles.ts", "../src/hooks/useGit.ts", "../src/stores/gitStore.ts", "../src/stores/sessionFilesStore.ts", "../src/stores/researchStore.ts", "../src/stores/settingsStore.ts", "../src/stores/tunnelStore.ts", "../src/stores/fileBrowserStore.ts", "../src/stores/mcpStore.ts", "../src/stores/skillsStore.ts", "../src/stores/viewerTabsStore.ts", "../src/hooks/useMessages.ts", "../src/hooks/useQueueState.ts", "../src/hooks/useSessions.ts", "../src/hooks/useSessionStream.ts", "../src/lib/sse-client.ts", "../src/stores/toolApprovalStore.ts", "../src/stores/secureInputStore.ts", "../src/hooks/useClientEvents.ts", "../src/stores/toastStore.ts", "../src/lib/open-url.ts", "../src/hooks/useTheme.ts", "../src/hooks/useWorkingDirectory.ts", "../src/hooks/useKeyboardShortcuts.ts", "../src/stores/focusStore.ts", "../src/stores/sidebarStore.ts", "../src/stores/filePickerStore.ts", "../src/stores/terminalStore.ts", "../src/hooks/useImageUpload.ts", "../src/hooks/useFileUpload.ts", "../src/hooks/useSessionFiles.ts", "../src/hooks/useBranch.ts", "../src/hooks/useGoals.ts", "../src/hooks/useResearch.ts", "../src/stores/pendingResearchStore.ts", "../src/hooks/useOttoRouterPayments.ts", "../src/stores/ottorouterStore.ts", "../src/stores/topupApprovalStore.ts", "../src/hooks/useOttoRouterBalance.ts", "../src/stores/usageStore.ts", "../src/hooks/useShareStatus.ts", "../src/hooks/useToolApprovalShortcuts.ts", "../src/hooks/useTopupCallback.ts", "../src/hooks/useAuthStatus.ts", "../src/stores/onboardingStore.ts", "../src/hooks/useTunnel.ts", "../src/hooks/useProviderUsage.ts", "../src/hooks/useFileBrowser.ts", "../src/hooks/useMCP.ts", "../src/hooks/useSkills.ts", "../src/hooks/useAgents.ts", "../src/stores/agentsStore.ts", "../src/hooks/useChatComposer.ts", "../src/hooks/useConfigModalControls.ts", "../src/hooks/useContainerWidth.ts", "../src/hooks/useEdgeHover.ts", "../src/hooks/useVoiceInput.ts", "../src/hooks/useDictationModels.ts"],
4
4
  "sourcesContent": [
5
5
  "import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\n\ntype ConfigData = Awaited<ReturnType<typeof apiClient.getConfig>>;\n\nexport function useConfig() {\n\treturn useQuery({\n\t\tqueryKey: ['config'],\n\t\tqueryFn: () => apiClient.getConfig(),\n\t\tstaleTime: 30000,\n\t});\n}\n\nexport function useModels(provider?: string) {\n\treturn useQuery({\n\t\tqueryKey: ['models', provider],\n\t\tqueryFn: () => (provider ? apiClient.getModels(provider) : null),\n\t\tenabled: !!provider,\n\t});\n}\n\nexport function useAllModels() {\n\treturn useQuery({\n\t\tqueryKey: ['models', 'all'],\n\t\tqueryFn: () => apiClient.getAllModels(),\n\t});\n}\n\nexport function useUpdateDefaults() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (data: {\n\t\t\tagent?: string;\n\t\t\tprovider?: string;\n\t\t\tmodel?: string;\n\t\t\ttoolApproval?: 'auto' | 'dangerous' | 'all' | 'yolo';\n\t\t\tguidedMode?: boolean;\n\t\t\treasoningText?: boolean;\n\t\t\treasoningLevel?: 'minimal' | 'low' | 'medium' | 'high' | 'max' | 'xhigh';\n\t\t\ttheme?: 'light' | 'dark';\n\t\t\tvimMode?: boolean;\n\t\t\tcompactThread?: boolean;\n\t\t\tfontFamily?: string;\n\t\t\tsmartEdges?: boolean;\n\t\t\treleaseToSend?: boolean;\n\t\t\tfullWidthContent?: boolean;\n\t\t\tautoCompactThresholdTokens?: number | null;\n\t\t\tottoEnabled?: boolean;\n\t\t\tscope?: 'global' | 'local';\n\t\t}) => apiClient.updateDefaults(data),\n\t\tonMutate: async (data) => {\n\t\t\tawait queryClient.cancelQueries({ queryKey: ['config'] });\n\n\t\t\tconst previousConfig = queryClient.getQueryData<ConfigData>(['config']);\n\t\t\tif (previousConfig) {\n\t\t\t\tconst defaultUpdates = Object.fromEntries(\n\t\t\t\t\tObject.entries(data).filter(\n\t\t\t\t\t\t([key, value]) => key !== 'scope' && value !== undefined,\n\t\t\t\t\t),\n\t\t\t\t) as Partial<ConfigData['defaults']>;\n\n\t\t\t\tqueryClient.setQueryData<ConfigData>(['config'], {\n\t\t\t\t\t...previousConfig,\n\t\t\t\t\tdefaults: {\n\t\t\t\t\t\t...previousConfig.defaults,\n\t\t\t\t\t\t...defaultUpdates,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn { previousConfig };\n\t\t},\n\t\tonError: (_error, _data, context) => {\n\t\t\tif (context?.previousConfig) {\n\t\t\t\tqueryClient.setQueryData(['config'], context.previousConfig);\n\t\t\t}\n\t\t},\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['config'] });\n\t\t},\n\t});\n}\n",
6
- "import {\n\tcreateSession as apiCreateSession,\n\tlistSessions as apiListSessions,\n\tlistMessages as apiListMessages,\n\tcreateMessage as apiCreateMessage,\n\tabortSession as apiAbortSession,\n\tdeleteSession as apiDeleteSession,\n\tmarkSessionViewed as apiMarkSessionViewed,\n\tupdateSession as apiUpdateSession,\n\tgetSessionQueue as apiGetSessionQueue,\n\tremoveFromQueue as apiRemoveFromQueue,\n\tretryMessage as apiRetryMessage,\n\tcreateSessionHandoff as apiCreateSessionHandoff,\n\tsendQueuedMessageNow as apiSendQueuedMessageNow,\n\tbuildSessionStreamUrl,\n\ttype CreateSessionData,\n\ttype CreateMessageData,\n} from '@ottocode/api';\nimport type {\n\tSession,\n\tMessage,\n\tCreateSessionRequest,\n\tSendMessageRequest,\n\tSendMessageResponse,\n\tUpdateSessionRequest,\n\tSessionsPage,\n} from '../../types/api';\nimport {\n\textractErrorMessage,\n\tconvertSession,\n\tconvertMessage,\n\tgetBaseUrl,\n} from './utils';\n\ntype ApiSession = Parameters<typeof convertSession>[0];\n\nexport const sessionsMixin = {\n\tasync getSessions(): Promise<Session[]> {\n\t\tconst page = await this.getSessionsPage({ limit: 200 });\n\t\treturn page.items;\n\t},\n\n\tasync getSessionsPage(\n\t\tparams: { limit?: number; offset?: number } = {},\n\t): Promise<SessionsPage> {\n\t\tconst { limit = 50, offset = 0 } = params;\n\t\tconst response = await apiListSessions({\n\t\t\tquery: { limit, offset },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tconst data = response.data;\n\t\treturn {\n\t\t\titems: (data?.items ?? []).map((s) => convertSession(s as ApiSession)),\n\t\t\thasMore: data?.hasMore ?? false,\n\t\t\tnextOffset: data?.nextOffset ?? null,\n\t\t};\n\t},\n\n\tasync createSession(data: CreateSessionRequest): Promise<Session> {\n\t\tconst response = await apiCreateSession({\n\t\t\tbody: data as CreateSessionData['body'],\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tif (!response.data) throw new Error('No data returned from create session');\n\t\treturn convertSession(response.data as ApiSession);\n\t},\n\n\tasync updateSession(\n\t\tsessionId: string,\n\t\tdata: UpdateSessionRequest,\n\t): Promise<Session> {\n\t\tconst response = await apiUpdateSession({\n\t\t\tpath: { sessionId },\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tbody: data as any,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn convertSession(response.data as ApiSession);\n\t},\n\n\tasync markSessionViewed(sessionId: string): Promise<Session> {\n\t\tconst response = await apiMarkSessionViewed({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn convertSession(response.data as ApiSession);\n\t},\n\n\tasync deleteSession(sessionId: string): Promise<{ success: boolean }> {\n\t\tconst response = await apiDeleteSession({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as { success: boolean };\n\t},\n\n\tasync createHandoff(sessionId: string): Promise<{\n\t\tsession: Session;\n\t\tsessionId: string;\n\t\tsourceSessionId: string;\n\t\tmessage: string;\n\t}> {\n\t\tconst response = await apiCreateSessionHandoff({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tconst data = response.data;\n\t\tif (!data?.session || !data?.sessionId) {\n\t\t\tthrow new Error('No data returned from handoff');\n\t\t}\n\t\treturn {\n\t\t\tsession: convertSession(data.session as ApiSession),\n\t\t\tsessionId: String(data.sessionId),\n\t\t\tsourceSessionId: String(data.sourceSessionId),\n\t\t\tmessage: String(data.message ?? ''),\n\t\t};\n\t},\n\n\tasync abortSession(sessionId: string): Promise<{ success: boolean }> {\n\t\tconst response = await apiAbortSession({\n\t\t\tpath: { sessionId },\n\t\t\tbody: {},\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as { success: boolean };\n\t},\n\n\tasync abortMessage(\n\t\tsessionId: string,\n\t\t_messageId: string,\n\t): Promise<{ success: boolean; wasRunning: boolean; messageId: string }> {\n\t\tconst response = await apiAbortSession({\n\t\t\tpath: { sessionId },\n\t\t\tbody: {},\n\t\t});\n\t\tif (response.error) throw new Error('Failed to abort message');\n\t\treturn response.data as {\n\t\t\tsuccess: boolean;\n\t\t\twasRunning: boolean;\n\t\t\tmessageId: string;\n\t\t};\n\t},\n\n\tasync getQueueState(sessionId: string): Promise<{\n\t\tcurrentMessageId: string | null;\n\t\tqueuedMessages: Array<{ messageId: string; position: number }>;\n\t\tisRunning: boolean;\n\t}> {\n\t\tconst response = await apiGetSessionQueue({ path: { sessionId } });\n\t\tif (response.error) throw new Error('Failed to get queue state');\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync removeFromQueue(\n\t\tsessionId: string,\n\t\tmessageId: string,\n\t): Promise<{\n\t\tsuccess: boolean;\n\t\tremoved: boolean;\n\t\twasQueued?: boolean;\n\t\twasRunning?: boolean;\n\t}> {\n\t\tconst response = await apiRemoveFromQueue({\n\t\t\tpath: { sessionId, messageId },\n\t\t});\n\t\tif (response.error) throw new Error('Failed to remove from queue');\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync sendQueuedMessageNow(\n\t\tsessionId: string,\n\t\tmessageId: string,\n\t): Promise<{\n\t\tsuccess: boolean;\n\t\tpromoted: boolean;\n\t\twasQueued?: boolean;\n\t\twasRunning?: boolean;\n\t\tpreemptedMessageId?: string | null;\n\t}> {\n\t\tconst response = await apiSendQueuedMessageNow({\n\t\t\tpath: { sessionId, messageId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as {\n\t\t\tsuccess: boolean;\n\t\t\tpromoted: boolean;\n\t\t\twasQueued?: boolean;\n\t\t\twasRunning?: boolean;\n\t\t\tpreemptedMessageId?: string | null;\n\t\t};\n\t},\n\n\tasync getMessages(sessionId: string): Promise<Message[]> {\n\t\tconst response = await apiListMessages({ path: { id: sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn (response.data || []).map(convertMessage);\n\t},\n\n\tasync sendMessage(\n\t\tsessionId: string,\n\t\tdata: SendMessageRequest,\n\t): Promise<SendMessageResponse> {\n\t\tconst response = await apiCreateMessage({\n\t\t\tpath: { id: sessionId },\n\t\t\tbody: data as CreateMessageData['body'],\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as SendMessageResponse;\n\t},\n\n\tgetStreamUrl(sessionId: string): string {\n\t\treturn buildSessionStreamUrl({ baseUrl: getBaseUrl(), sessionId });\n\t},\n\n\tasync retryMessage(\n\t\tsessionId: string,\n\t\tmessageId: string,\n\t): Promise<{ success: boolean; messageId: string }> {\n\t\tconst response = await apiRetryMessage({\n\t\t\tpath: { sessionId, messageId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n};\n",
6
+ "import {\n\tcreateSession as apiCreateSession,\n\tlistSessions as apiListSessions,\n\tgetSession as apiGetSession,\n\tlistMessages as apiListMessages,\n\tcreateMessage as apiCreateMessage,\n\tabortSession as apiAbortSession,\n\tdeleteSession as apiDeleteSession,\n\tmarkSessionViewed as apiMarkSessionViewed,\n\tupdateSession as apiUpdateSession,\n\tgetSessionQueue as apiGetSessionQueue,\n\tremoveFromQueue as apiRemoveFromQueue,\n\tretryMessage as apiRetryMessage,\n\tcreateSessionHandoff as apiCreateSessionHandoff,\n\tsendQueuedMessageNow as apiSendQueuedMessageNow,\n\tbuildSessionStreamUrl,\n\ttype CreateSessionData,\n\ttype CreateMessageData,\n} from '@ottocode/api';\nimport type {\n\tSession,\n\tMessage,\n\tCreateSessionRequest,\n\tSendMessageRequest,\n\tSendMessageResponse,\n\tUpdateSessionRequest,\n\tSessionsPage,\n} from '../../types/api';\nimport {\n\textractErrorMessage,\n\tconvertSession,\n\tconvertMessage,\n\tgetBaseUrl,\n} from './utils';\n\ntype ApiSession = Parameters<typeof convertSession>[0];\n\nexport const sessionsMixin = {\n\tasync getSessions(): Promise<Session[]> {\n\t\tconst page = await this.getSessionsPage({ limit: 200 });\n\t\treturn page.items;\n\t},\n\n\tasync getSessionsPage(\n\t\tparams: { limit?: number; offset?: number; sessionType?: 'otto' } = {},\n\t): Promise<SessionsPage> {\n\t\tconst { limit = 50, offset = 0, sessionType } = params;\n\t\tconst response = await apiListSessions({\n\t\t\tquery: sessionType ? { limit, offset, sessionType } : { limit, offset },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tconst data = response.data;\n\t\treturn {\n\t\t\titems: (data?.items ?? []).map((s) => convertSession(s as ApiSession)),\n\t\t\thasMore: data?.hasMore ?? false,\n\t\t\tnextOffset: data?.nextOffset ?? null,\n\t\t};\n\t},\n\n\tasync createSession(data: CreateSessionRequest): Promise<Session> {\n\t\tconst response = await apiCreateSession({\n\t\t\tbody: data as CreateSessionData['body'],\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tif (!response.data) throw new Error('No data returned from create session');\n\t\treturn convertSession(response.data as ApiSession);\n\t},\n\n\tasync getSession(sessionId: string): Promise<Session> {\n\t\tconst response = await apiGetSession({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn convertSession(response.data as ApiSession);\n\t},\n\n\tasync updateSession(\n\t\tsessionId: string,\n\t\tdata: UpdateSessionRequest,\n\t): Promise<Session> {\n\t\tconst response = await apiUpdateSession({\n\t\t\tpath: { sessionId },\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tbody: data as any,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn convertSession(response.data as ApiSession);\n\t},\n\n\tasync markSessionViewed(sessionId: string): Promise<Session> {\n\t\tconst response = await apiMarkSessionViewed({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn convertSession(response.data as ApiSession);\n\t},\n\n\tasync deleteSession(sessionId: string): Promise<{ success: boolean }> {\n\t\tconst response = await apiDeleteSession({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as { success: boolean };\n\t},\n\n\tasync createHandoff(sessionId: string): Promise<{\n\t\tsession: Session;\n\t\tsessionId: string;\n\t\tsourceSessionId: string;\n\t\tmessage: string;\n\t}> {\n\t\tconst response = await apiCreateSessionHandoff({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tconst data = response.data;\n\t\tif (!data?.session || !data?.sessionId) {\n\t\t\tthrow new Error('No data returned from handoff');\n\t\t}\n\t\treturn {\n\t\t\tsession: convertSession(data.session as ApiSession),\n\t\t\tsessionId: String(data.sessionId),\n\t\t\tsourceSessionId: String(data.sourceSessionId),\n\t\t\tmessage: String(data.message ?? ''),\n\t\t};\n\t},\n\n\tasync abortSession(sessionId: string): Promise<{ success: boolean }> {\n\t\tconst response = await apiAbortSession({\n\t\t\tpath: { sessionId },\n\t\t\tbody: {},\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as { success: boolean };\n\t},\n\n\tasync abortMessage(\n\t\tsessionId: string,\n\t\t_messageId: string,\n\t): Promise<{ success: boolean; wasRunning: boolean; messageId: string }> {\n\t\tconst response = await apiAbortSession({\n\t\t\tpath: { sessionId },\n\t\t\tbody: {},\n\t\t});\n\t\tif (response.error) throw new Error('Failed to abort message');\n\t\treturn response.data as {\n\t\t\tsuccess: boolean;\n\t\t\twasRunning: boolean;\n\t\t\tmessageId: string;\n\t\t};\n\t},\n\n\tasync getQueueState(sessionId: string): Promise<{\n\t\tcurrentMessageId: string | null;\n\t\tqueuedMessages: Array<{ messageId: string; position: number }>;\n\t\tisRunning: boolean;\n\t}> {\n\t\tconst response = await apiGetSessionQueue({ path: { sessionId } });\n\t\tif (response.error) throw new Error('Failed to get queue state');\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync removeFromQueue(\n\t\tsessionId: string,\n\t\tmessageId: string,\n\t): Promise<{\n\t\tsuccess: boolean;\n\t\tremoved: boolean;\n\t\twasQueued?: boolean;\n\t\twasRunning?: boolean;\n\t}> {\n\t\tconst response = await apiRemoveFromQueue({\n\t\t\tpath: { sessionId, messageId },\n\t\t});\n\t\tif (response.error) throw new Error('Failed to remove from queue');\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync sendQueuedMessageNow(\n\t\tsessionId: string,\n\t\tmessageId: string,\n\t): Promise<{\n\t\tsuccess: boolean;\n\t\tpromoted: boolean;\n\t\twasQueued?: boolean;\n\t\twasRunning?: boolean;\n\t\tpreemptedMessageId?: string | null;\n\t}> {\n\t\tconst response = await apiSendQueuedMessageNow({\n\t\t\tpath: { sessionId, messageId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as {\n\t\t\tsuccess: boolean;\n\t\t\tpromoted: boolean;\n\t\t\twasQueued?: boolean;\n\t\t\twasRunning?: boolean;\n\t\t\tpreemptedMessageId?: string | null;\n\t\t};\n\t},\n\n\tasync getMessages(sessionId: string): Promise<Message[]> {\n\t\tconst response = await apiListMessages({ path: { id: sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn (response.data || []).map(convertMessage);\n\t},\n\n\tasync sendMessage(\n\t\tsessionId: string,\n\t\tdata: SendMessageRequest,\n\t): Promise<SendMessageResponse> {\n\t\tconst response = await apiCreateMessage({\n\t\t\tpath: { id: sessionId },\n\t\t\tbody: data as CreateMessageData['body'],\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as SendMessageResponse;\n\t},\n\n\tgetStreamUrl(sessionId: string): string {\n\t\treturn buildSessionStreamUrl({ baseUrl: getBaseUrl(), sessionId });\n\t},\n\n\tasync retryMessage(\n\t\tsessionId: string,\n\t\tmessageId: string,\n\t): Promise<{ success: boolean; messageId: string }> {\n\t\tconst response = await apiRetryMessage({\n\t\t\tpath: { sessionId, messageId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n};\n",
7
7
  "import { client } from '@ottocode/api';\nimport {\n\tgetRuntimeApiBaseUrl,\n\tsetRuntimeApiBaseUrl as persistRuntimeApiBaseUrl,\n} from '../config';\nimport type { Session, Message } from '../../types/api';\n\ntype ApiSession = Record<string, unknown> & {\n\ttitle?: string | null;\n\tcreatedAt?: string | number;\n\tlastActiveAt?: string | number;\n\tlastViewedAt?: string | number | null;\n\tpinnedAt?: string | number | null;\n};\n\ntype ApiMessage = Record<string, unknown> & {\n\tcreatedAt?: string | number;\n\tcompletedAt?: string | number | null;\n};\n\nfunction getClientAdapter(): 'fetch' | undefined {\n\tif (typeof window !== 'undefined' && typeof window.fetch === 'function') {\n\t\treturn 'fetch';\n\t}\n\treturn undefined;\n}\n\nexport function extractErrorMessage(error: unknown): string {\n\tif (!error) return 'Unknown error';\n\tif (typeof error === 'string') return error;\n\tif (error && typeof error === 'object') {\n\t\tconst errObj = error as Record<string, unknown>;\n\t\tif (errObj.error && typeof errObj.error === 'object') {\n\t\t\tconst innerError = errObj.error as Record<string, unknown>;\n\t\t\tif (typeof innerError.message === 'string') return innerError.message;\n\t\t}\n\t\tif (typeof errObj.error === 'string') return errObj.error;\n\t\tif (typeof errObj.message === 'string') return errObj.message;\n\t\ttry {\n\t\t\treturn JSON.stringify(error);\n\t\t} catch {\n\t\t\treturn 'Error occurred (unable to parse)';\n\t\t}\n\t}\n\treturn 'Unknown error';\n}\n\nexport function configureApiClient() {\n\tconst baseURL = getRuntimeApiBaseUrl();\n\tclient.setConfig({\n\t\tbaseURL,\n\t\tadapter: getClientAdapter(),\n\t});\n}\n\nconfigureApiClient();\n\nexport function getBaseUrl(): string {\n\treturn getRuntimeApiBaseUrl();\n}\n\nexport function setRuntimeApiBaseUrl(value: string): string {\n\tconst baseUrl = persistRuntimeApiBaseUrl(value);\n\tconfigureApiClient();\n\treturn baseUrl;\n}\n\nexport function convertSession(apiSession: ApiSession): Session {\n\treturn {\n\t\t...apiSession,\n\t\ttitle: apiSession.title ?? null,\n\t\tcreatedAt:\n\t\t\ttypeof apiSession.createdAt === 'string'\n\t\t\t\t? new Date(apiSession.createdAt).getTime()\n\t\t\t\t: apiSession.createdAt,\n\t\tlastActiveAt:\n\t\t\ttypeof apiSession.lastActiveAt === 'string'\n\t\t\t\t? new Date(apiSession.lastActiveAt).getTime()\n\t\t\t\t: apiSession.lastActiveAt,\n\t\tlastViewedAt:\n\t\t\ttypeof apiSession.lastViewedAt === 'string'\n\t\t\t\t? new Date(apiSession.lastViewedAt).getTime()\n\t\t\t\t: apiSession.lastViewedAt,\n\t\tpinnedAt:\n\t\t\ttypeof apiSession.pinnedAt === 'string'\n\t\t\t\t? new Date(apiSession.pinnedAt).getTime()\n\t\t\t\t: apiSession.pinnedAt,\n\t} as Session;\n}\n\nexport function convertMessage(apiMessage: ApiMessage): Message {\n\treturn {\n\t\t...apiMessage,\n\t\tcreatedAt:\n\t\t\ttypeof apiMessage.createdAt === 'string'\n\t\t\t\t? new Date(apiMessage.createdAt).getTime()\n\t\t\t\t: apiMessage.createdAt,\n\t\tcompletedAt: apiMessage.completedAt\n\t\t\t? typeof apiMessage.completedAt === 'string'\n\t\t\t\t? new Date(apiMessage.completedAt).getTime()\n\t\t\t\t: apiMessage.completedAt\n\t\t\t: null,\n\t} as Message;\n}\n",
8
8
  "export interface OttoPlatformNotification {\n\tid: string;\n\ttitle: string;\n\tbody?: string;\n\tsessionId?: string;\n}\n\ninterface OttoPlatformWindow extends Window {\n\tOTTO_OPEN_URL?: (url: string) => void | Promise<void>;\n\tOTTO_SHOW_NOTIFICATION?: (\n\t\tnotification: OttoPlatformNotification,\n\t) => void | Promise<void>;\n\tOTTO_LIST_SYSTEM_FONTS?: () => Promise<string[]>;\n\tOTTO_SET_DESKTOP_FONT?: (fontFamily: string) => void | Promise<void>;\n\tOTTO_OPEN_SESSION?: (sessionId: string) => void | Promise<void>;\n\tOTTO_IS_WINDOW_FOCUSED?: () => boolean;\n}\n\nfunction getPlatformWindow(): OttoPlatformWindow | null {\n\tif (typeof window === 'undefined') return null;\n\treturn window as OttoPlatformWindow;\n}\n\nexport function openPlatformUrl(url: string): boolean {\n\tconst win = getPlatformWindow();\n\tif (!win?.OTTO_OPEN_URL) return false;\n\tvoid win.OTTO_OPEN_URL(url);\n\treturn true;\n}\n\nexport function showPlatformNotification(\n\tnotification: OttoPlatformNotification,\n): boolean {\n\tconst win = getPlatformWindow();\n\tif (!win?.OTTO_SHOW_NOTIFICATION) return false;\n\tvoid win.OTTO_SHOW_NOTIFICATION(notification);\n\treturn true;\n}\n\nexport function listPlatformSystemFonts(): Promise<string[]> | null {\n\tconst win = getPlatformWindow();\n\tif (!win?.OTTO_LIST_SYSTEM_FONTS) return null;\n\treturn win.OTTO_LIST_SYSTEM_FONTS();\n}\n\nexport function notifyPlatformFontFamilyChanged(fontFamily: string): boolean {\n\tconst win = getPlatformWindow();\n\tif (!win?.OTTO_SET_DESKTOP_FONT) return false;\n\tvoid win.OTTO_SET_DESKTOP_FONT(fontFamily);\n\treturn true;\n}\n\nexport function openPlatformSession(sessionId: string): boolean {\n\tconst win = getPlatformWindow();\n\tif (!win?.OTTO_OPEN_SESSION) return false;\n\tvoid win.OTTO_OPEN_SESSION(sessionId);\n\treturn true;\n}\n\nexport function getPlatformWindowFocused(): boolean | null {\n\tconst win = getPlatformWindow();\n\tif (!win?.OTTO_IS_WINDOW_FOCUSED) return null;\n\treturn win.OTTO_IS_WINDOW_FOCUSED();\n}\n\nexport function hasPlatformOpenUrl(): boolean {\n\treturn !!getPlatformWindow()?.OTTO_OPEN_URL;\n}\n\nexport function hasPlatformSystemFonts(): boolean {\n\treturn !!getPlatformWindow()?.OTTO_LIST_SYSTEM_FONTS;\n}\n\nexport function isPlatformDesktop(): boolean {\n\tif (typeof window === 'undefined') return false;\n\ttry {\n\t\treturn (\n\t\t\t'__TAURI__' in window ||\n\t\t\t'__TAURI_INTERNALS__' in window ||\n\t\t\t'__TAURI_METADATA__' in window\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n}\n",
9
9
  "import { isPlatformDesktop } from './platform';\n\n// Extend Window interface to include custom properties\ninterface OttoWindow extends Window {\n\t__OTTO_API_URL__?: string;\n\tOTTO_SERVER_URL?: string;\n}\n\nexport const RUNTIME_API_BASE_URL_STORAGE_KEY = 'otto-api-base-url';\n\nexport function normalizeApiBaseUrl(value: string): string {\n\tconst trimmed = value.trim();\n\tif (!trimmed) {\n\t\tthrow new Error('Enter an otto tunnel URL.');\n\t}\n\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(trimmed);\n\t} catch {\n\t\tthrow new Error('Enter a valid URL, including http:// or https://.');\n\t}\n\n\tif (url.protocol !== 'http:' && url.protocol !== 'https:') {\n\t\tthrow new Error('Tunnel URL must start with http:// or https://.');\n\t}\n\n\turl.hash = '';\n\turl.pathname = url.pathname.replace(/\\/+$/, '') || '';\n\treturn url.toString().replace(/\\/+$/, '');\n}\n\nfunction getStoredApiBaseUrl(): string | undefined {\n\tif (typeof window === 'undefined') return undefined;\n\tif (isPlatformDesktop()) return undefined;\n\ttry {\n\t\treturn (\n\t\t\twindow.localStorage.getItem(RUNTIME_API_BASE_URL_STORAGE_KEY) ?? undefined\n\t\t);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function getConfiguredRuntimeApiBaseUrl(): string | undefined {\n\tif (typeof window === 'undefined') return undefined;\n\n\tconst params = new URLSearchParams(window.location.search);\n\tconst urlParam = params.get('url');\n\tif (urlParam) return normalizeApiBaseUrl(urlParam);\n\n\tconst win = window as OttoWindow;\n\tif (win.OTTO_SERVER_URL) return normalizeApiBaseUrl(win.OTTO_SERVER_URL);\n\tif (win.__OTTO_API_URL__) return normalizeApiBaseUrl(win.__OTTO_API_URL__);\n\n\tconst storedUrl = getStoredApiBaseUrl();\n\tif (storedUrl) return normalizeApiBaseUrl(storedUrl);\n\n\treturn undefined;\n}\n\nexport function hasConfiguredRuntimeApiBaseUrl(): boolean {\n\treturn Boolean(getConfiguredRuntimeApiBaseUrl());\n}\n\nexport function setRuntimeApiBaseUrl(value: string): string {\n\tconst baseUrl = normalizeApiBaseUrl(value);\n\tif (typeof window !== 'undefined') {\n\t\tconst win = window as OttoWindow;\n\t\twin.OTTO_SERVER_URL = baseUrl;\n\t\tif (!isPlatformDesktop()) {\n\t\t\ttry {\n\t\t\t\twindow.localStorage.setItem(RUNTIME_API_BASE_URL_STORAGE_KEY, baseUrl);\n\t\t\t} catch {\n\t\t\t\t// Ignore storage errors; the in-memory URL still works for this page load.\n\t\t\t}\n\t\t}\n\t}\n\treturn baseUrl;\n}\n\nexport function clearRuntimeApiBaseUrl() {\n\tif (typeof window === 'undefined') return;\n\tconst win = window as OttoWindow;\n\tdelete win.OTTO_SERVER_URL;\n\tdelete win.__OTTO_API_URL__;\n\ttry {\n\t\twindow.localStorage.removeItem(RUNTIME_API_BASE_URL_STORAGE_KEY);\n\t} catch {\n\t\t// Ignore storage errors.\n\t}\n}\n\n// This function will execute at runtime in the browser\nfunction computeApiBaseUrl(): string {\n\tconst runtimeUrl = getConfiguredRuntimeApiBaseUrl();\n\tif (runtimeUrl) {\n\t\treturn runtimeUrl;\n\t}\n\n\tconst envUrl = import.meta.env?.VITE_API_BASE_URL;\n\tif (envUrl) return normalizeApiBaseUrl(envUrl);\n\n\t// Fallback for standalone dev\n\treturn 'http://localhost:9100';\n}\n\nexport function getRuntimeApiBaseUrl(): string {\n\treturn computeApiBaseUrl();\n}\n\nexport const API_BASE_URL = computeApiBaseUrl();\n\nexport const config = {\n\tapiBaseUrl: API_BASE_URL,\n};\n",
@@ -11,15 +11,15 @@
11
11
  "import {\n\tgetConfig as apiGetConfig,\n\tgetProviderModels as apiGetProviderModels,\n\tgetAllModels as apiGetAllModels,\n\tgetAgentDetails as apiGetAgentDetails,\n\tgetAgent as apiGetAgent,\n\tgetConfigTools as apiGetConfigTools,\n\tupsertAgent as apiUpsertAgent,\n\tdeleteAgent as apiDeleteAgent,\n\tdiscoverProviderModels as apiDiscoverProviderModels,\n\tupdateDefaults as apiUpdateDefaults,\n\tupdateProviderSettings as apiUpdateProviderSettings,\n\tdeleteProviderSettings as apiDeleteProviderSettings,\n} from '@ottocode/api';\nimport type {\n\tGetAgentDetailsResponse,\n\tGetAgentResponse,\n\tGetConfigToolsResponse,\n\tUpsertAgentData,\n\tUpsertAgentResponse,\n\tDeleteAgentResponse,\n} from '@ottocode/api';\nimport type { AllModelsResponse } from '../../types/api';\nimport { extractErrorMessage } from './utils';\n\ntype ProviderCompatibility =\n\t| 'openai'\n\t| 'anthropic'\n\t| 'google'\n\t| 'openrouter'\n\t| 'ollama'\n\t| 'openai-compatible';\n\nexport type DiscoveredProviderModel = {\n\tid: string;\n\tlabel: string;\n\ttoolCall?: boolean;\n\treasoningText?: boolean;\n\tvision?: boolean;\n\tattachment?: boolean;\n\tcontextWindow?: number;\n\tmaxOutputTokens?: number;\n};\n\nexport type AgentDetail = GetAgentResponse['agent'];\n\nexport type AgentToolGroups = {\n\tfirstClass?: string[];\n\tloadable?: string[];\n};\n\nexport type AgentToolConfig = AgentToolGroups;\n\nexport type UpdateAgentInput = UpsertAgentData['body'];\n\nexport type ToolDetail = GetConfigToolsResponse['tools'][number];\n\nexport const configMixin = {\n\tasync getConfig(): Promise<{\n\t\tagents: string[];\n\t\tproviders: string[];\n\t\tdefaults: {\n\t\t\tagent: string;\n\t\t\tprovider: string;\n\t\t\tmodel: string;\n\t\t\ttoolApproval?: 'auto' | 'dangerous' | 'all' | 'yolo';\n\t\t\tguidedMode?: boolean;\n\t\t\treasoningText?: boolean;\n\t\t\treasoningLevel?: 'minimal' | 'low' | 'medium' | 'high' | 'max' | 'xhigh';\n\t\t\ttheme?: 'light' | 'dark';\n\t\t\tvimMode?: boolean;\n\t\t\tcompactThread?: boolean;\n\t\t\tfontFamily?: string;\n\t\t\tsmartEdges?: boolean;\n\t\t\treleaseToSend?: boolean;\n\t\t\tfullWidthContent?: boolean;\n\t\t\tautoCompactThresholdTokens?: number | null;\n\t\t\tottoEnabled?: boolean;\n\t\t};\n\t}> {\n\t\tconst response = await apiGetConfig();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getAgentDetails(): Promise<GetAgentDetailsResponse> {\n\t\tconst response = await apiGetAgentDetails();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as GetAgentDetailsResponse;\n\t},\n\n\tasync getAgent(name: string): Promise<GetAgentResponse> {\n\t\tconst response = await apiGetAgent({ path: { agent: name } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as GetAgentResponse;\n\t},\n\n\tasync getConfigTools(): Promise<GetConfigToolsResponse> {\n\t\tconst response = await apiGetConfigTools();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as GetConfigToolsResponse;\n\t},\n\n\tasync updateAgent(\n\t\tname: string,\n\t\tinput: UpdateAgentInput,\n\t): Promise<UpsertAgentResponse> {\n\t\tconst response = await apiUpsertAgent({\n\t\t\tpath: { agent: name },\n\t\t\tbody: input,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as UpsertAgentResponse;\n\t},\n\n\tasync deleteAgent(\n\t\tname: string,\n\t\tscope: 'local' | 'global' = 'local',\n\t): Promise<DeleteAgentResponse> {\n\t\tconst response = await apiDeleteAgent({\n\t\t\tpath: { agent: name },\n\t\t\tquery: { scope },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as DeleteAgentResponse;\n\t},\n\n\tasync getModels(providerId: string): Promise<{\n\t\tmodels: Array<{\n\t\t\tid: string;\n\t\t\tlabel: string;\n\t\t\ttoolCall?: boolean;\n\t\t\treasoningText?: boolean;\n\t\t\tvision?: boolean;\n\t\t\tattachment?: boolean;\n\t\t\tfree?: boolean;\n\t\t\tcontextWindow?: number;\n\t\t\tmaxOutputTokens?: number;\n\t\t\tavailable?: boolean;\n\t\t\tunavailableReason?: string;\n\t\t}>;\n\t\tdefault: string;\n\t\tallowAnyModel?: boolean;\n\t\tdynamicModels?: boolean;\n\t\tlabel?: string;\n\t}> {\n\t\tconst response = await apiGetProviderModels({\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tpath: { provider: providerId as any },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getAllModels(): Promise<AllModelsResponse> {\n\t\tconst response = await apiGetAllModels();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as AllModelsResponse;\n\t},\n\n\tasync discoverProviderModels(data: {\n\t\tcompatibility: ProviderCompatibility;\n\t\tbaseURL: string;\n\t\tapiKey?: string;\n\t}): Promise<{\n\t\tbaseURL?: string;\n\t\tmodels: DiscoveredProviderModel[];\n\t\tunsupported?: boolean;\n\t\tmessage?: string;\n\t}> {\n\t\tconst response = await apiDiscoverProviderModels({\n\t\t\tbody: data,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as {\n\t\t\tbaseURL?: string;\n\t\t\tmodels: DiscoveredProviderModel[];\n\t\t\tunsupported?: boolean;\n\t\t\tmessage?: string;\n\t\t};\n\t},\n\n\tasync updateProviderSettings(\n\t\tprovider: string,\n\t\tdata: {\n\t\t\tenabled?: boolean;\n\t\t\tcustom?: boolean;\n\t\t\tlabel?: string;\n\t\t\tcompatibility?: ProviderCompatibility;\n\t\t\tbaseURL?: string | null;\n\t\t\tapiKey?: string | null;\n\t\t\tmodels?: string[];\n\t\t\tallowAnyModel?: boolean;\n\t\t},\n\t): Promise<{ success: boolean; provider: string }> {\n\t\tconst response = await apiUpdateProviderSettings({\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tpath: { provider: provider as any },\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tbody: data as any,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync deleteProviderSettings(\n\t\tprovider: string,\n\t): Promise<{ success: boolean; provider: string }> {\n\t\tconst response = await apiDeleteProviderSettings({\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tpath: { provider: provider as any },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync updateDefaults(data: {\n\t\tagent?: string;\n\t\tprovider?: string;\n\t\tmodel?: string;\n\t\ttoolApproval?: 'auto' | 'dangerous' | 'all' | 'yolo';\n\t\tguidedMode?: boolean;\n\t\treasoningText?: boolean;\n\t\treasoningLevel?: 'minimal' | 'low' | 'medium' | 'high' | 'max' | 'xhigh';\n\t\ttheme?: 'light' | 'dark';\n\t\tvimMode?: boolean;\n\t\tcompactThread?: boolean;\n\t\tfontFamily?: string;\n\t\tsmartEdges?: boolean;\n\t\treleaseToSend?: boolean;\n\t\tfullWidthContent?: boolean;\n\t\tautoCompactThresholdTokens?: number | null;\n\t\tottoEnabled?: boolean;\n\t\tscope?: 'global' | 'local';\n\t}): Promise<{\n\t\tsuccess: boolean;\n\t\tdefaults: {\n\t\t\tagent: string;\n\t\t\tprovider: string;\n\t\t\tmodel: string;\n\t\t\ttoolApproval?: 'auto' | 'dangerous' | 'all' | 'yolo';\n\t\t\tguidedMode?: boolean;\n\t\t\treasoningText?: boolean;\n\t\t\treasoningLevel?: 'minimal' | 'low' | 'medium' | 'high' | 'max' | 'xhigh';\n\t\t\ttheme?: 'light' | 'dark';\n\t\t\tvimMode?: boolean;\n\t\t\tcompactThread?: boolean;\n\t\t\tfontFamily?: string;\n\t\t\tsmartEdges?: boolean;\n\t\t\treleaseToSend?: boolean;\n\t\t\tfullWidthContent?: boolean;\n\t\t\tautoCompactThresholdTokens?: number | null;\n\t\t\tottoEnabled?: boolean;\n\t\t};\n\t}> {\n\t\tconst response = await apiUpdateDefaults({\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tbody: { scope: 'global', ...data } as any,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n};\n",
12
12
  "import {\n\tlistFiles as apiListFiles,\n\tsearchFiles as apiSearchFiles,\n\tgetFileTree as apiGetFileTree,\n\treadFile as apiReadFile,\n\tgetSessionFiles as apiGetSessionFiles,\n} from '@ottocode/api';\nimport type { SessionFilesResponse } from '../../types/api';\nimport { extractErrorMessage } from './utils';\n\nexport const filesMixin = {\n\tasync listFiles() {\n\t\tconst response = await apiListFiles();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as {\n\t\t\tfiles: string[];\n\t\t\tignoredFiles?: string[];\n\t\t\tchangedFiles: Array<{ path: string; status: string }>;\n\t\t\ttruncated: boolean;\n\t\t};\n\t},\n\n\tasync searchFiles(query = '') {\n\t\tconst response = await apiSearchFiles({ query: { q: query } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as {\n\t\t\tfiles: string[];\n\t\t\tignoredFiles?: string[];\n\t\t\tchangedFiles: Array<{ path: string; status: string }>;\n\t\t\ttruncated: boolean;\n\t\t};\n\t},\n\n\tasync getFileTree(dirPath = '.'): Promise<{\n\t\titems: Array<{\n\t\t\tname: string;\n\t\t\tpath: string;\n\t\t\ttype: 'file' | 'directory';\n\t\t\tgitignored?: boolean;\n\t\t\tvendor?: boolean;\n\t\t\tsearchable?: boolean;\n\t\t}>;\n\t\tpath: string;\n\t\ttruncated: boolean;\n\t}> {\n\t\tconst response = await apiGetFileTree({\n\t\t\tquery: { path: dirPath },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync readFileContent(filePath: string): Promise<{\n\t\tcontent: string;\n\t\tpath: string;\n\t\textension: string;\n\t\tlineCount: number;\n\t}> {\n\t\tconst response = await apiReadFile({\n\t\t\tquery: { path: filePath },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getSessionFiles(sessionId: string): Promise<SessionFilesResponse> {\n\t\tconst response = await apiGetSessionFiles({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as SessionFilesResponse;\n\t},\n};\n",
13
13
  "import {\n\tcreateBranch as apiCreateBranch,\n\tlistBranches as apiListBranches,\n\tgetParentSession as apiGetParentSession,\n\tgetShareStatus as apiGetShareStatus,\n\tshareSession as apiShareSession,\n\tsyncShare as apiSyncShare,\n} from '@ottocode/api';\nimport type {\n\tCreateBranchRequest,\n\tBranchResult,\n\tListBranchesResponse,\n\tParentSessionResponse,\n\tShareStatus,\n\tShareSessionResponse,\n\tSyncSessionResponse,\n} from '../../types/api';\nimport { extractErrorMessage } from './utils';\n\nexport const branchesMixin = {\n\tasync createBranch(\n\t\tsessionId: string,\n\t\tdata: CreateBranchRequest,\n\t): Promise<BranchResult> {\n\t\tconst response = await apiCreateBranch({\n\t\t\tpath: { sessionId },\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tbody: data as any,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as BranchResult;\n\t},\n\n\tasync listBranches(sessionId: string): Promise<ListBranchesResponse> {\n\t\tconst response = await apiListBranches({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as ListBranchesResponse;\n\t},\n\n\tasync getParentSession(sessionId: string): Promise<ParentSessionResponse> {\n\t\tconst response = await apiGetParentSession({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as ParentSessionResponse;\n\t},\n\n\tasync getShareStatus(sessionId: string): Promise<ShareStatus> {\n\t\tconst response = await apiGetShareStatus({ path: { sessionId } });\n\t\tif (response.error) return { shared: false };\n\t\treturn response.data as ShareStatus;\n\t},\n\n\tasync shareSession(sessionId: string): Promise<ShareSessionResponse> {\n\t\tconst response = await apiShareSession({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as ShareSessionResponse;\n\t},\n\n\tasync syncSession(sessionId: string): Promise<SyncSessionResponse> {\n\t\tconst response = await apiSyncShare({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as SyncSessionResponse;\n\t},\n};\n",
14
- "import {\n\tgetSessionGoal as apiGetSessionGoal,\n\tcreateSessionGoal as apiCreateSessionGoal,\n\tupdateGoal as apiUpdateGoal,\n\taddGoalTasks as apiAddGoalTasks,\n\tupdateGoalTask as apiUpdateGoalTask,\n\tstartGoal as apiStartGoal,\n\tlistSessionSubagents as apiListSessionSubagents,\n} from '@ottocode/api';\nimport { extractErrorMessage } from './utils';\n\nexport type GoalTaskStatus =\n\t| 'pending'\n\t| 'in_progress'\n\t| 'done_pending'\n\t| 'completed'\n\t| 'blocked'\n\t| 'cancelled';\n\nexport type GoalStatus = 'active' | 'completed' | 'abandoned';\n\nexport type GoalTask = {\n\tid: string;\n\tgoalId: string;\n\tposition: number;\n\tcontent: string;\n\tstatus: GoalTaskStatus;\n\tnote: string | null;\n\tcreatedAt: number;\n\tupdatedAt: number;\n};\n\nexport type Goal = {\n\tid: string;\n\tprojectPath: string;\n\tsessionId: string | null;\n\ttitle: string;\n\tstatus: GoalStatus;\n\tstartedAt: number | null;\n\tcreatedAt: number;\n\tupdatedAt: number;\n\ttasks: GoalTask[];\n};\n\nexport type SubagentStatus = 'running' | 'completed' | 'failed' | 'cancelled';\n\nexport type Subagent = {\n\tid: string;\n\tparentSessionId: string;\n\tchildSessionId: string;\n\tagent: string;\n\ttask: string;\n\tstatus: SubagentStatus;\n\tsummary: string | null;\n\treported: boolean;\n\tcreatedAt: number;\n\tupdatedAt: number;\n};\n\nexport const goalsMixin = {\n\tasync getSessionGoal(sessionId: string): Promise<{ goal: Goal | null }> {\n\t\tconst response = await apiGetSessionGoal({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal | null };\n\t},\n\n\tasync createSessionGoal(\n\t\tsessionId: string,\n\t\tdata: { title: string; tasks?: string[] },\n\t): Promise<{ goal: Goal }> {\n\t\tconst response = await apiCreateSessionGoal({\n\t\t\tpath: { sessionId },\n\t\t\tbody: data,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal };\n\t},\n\n\tasync updateGoal(\n\t\tgoalId: string,\n\t\tdata: { title?: string; status?: GoalStatus },\n\t): Promise<{ goal: Goal }> {\n\t\tconst response = await apiUpdateGoal({\n\t\t\tpath: { goalId },\n\t\t\tbody: data,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal };\n\t},\n\n\tasync addGoalTasks(goalId: string, tasks: string[]): Promise<{ goal: Goal }> {\n\t\tconst response = await apiAddGoalTasks({\n\t\t\tpath: { goalId },\n\t\t\tbody: { tasks },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal };\n\t},\n\n\tasync updateGoalTask(\n\t\tgoalId: string,\n\t\ttaskId: string,\n\t\tdata: {\n\t\t\tcontent?: string;\n\t\t\tstatus?: GoalTaskStatus;\n\t\t\tnote?: string | null;\n\t\t},\n\t): Promise<{ task: GoalTask }> {\n\t\tconst response = await apiUpdateGoalTask({\n\t\t\tpath: { goalId, taskId },\n\t\t\tbody: data,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { task: GoalTask };\n\t},\n\n\tasync startGoal(goalId: string): Promise<{ goal: Goal }> {\n\t\tconst response = await apiStartGoal({ path: { goalId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal };\n\t},\n\n\tasync listSessionSubagents(\n\t\tsessionId: string,\n\t\tstatus?: SubagentStatus,\n\t): Promise<{ subagents: Subagent[] }> {\n\t\tconst response = await apiListSessionSubagents({\n\t\t\tpath: { sessionId },\n\t\t\tquery: status ? { status } : undefined,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { subagents: Subagent[] };\n\t},\n};\n",
14
+ "import {\n\tgetSessionGoal as apiGetSessionGoal,\n\tcreateSessionGoal as apiCreateSessionGoal,\n\tlistGoals as apiListGoals,\n\tupdateGoal as apiUpdateGoal,\n\taddGoalTasks as apiAddGoalTasks,\n\tupdateGoalTask as apiUpdateGoalTask,\n\tdeleteGoalTask as apiDeleteGoalTask,\n\tstartGoal as apiStartGoal,\n\tlistSessionSubagents as apiListSessionSubagents,\n} from '@ottocode/api';\nimport { extractErrorMessage } from './utils';\n\nexport type GoalTaskStatus =\n\t| 'pending'\n\t| 'in_progress'\n\t| 'completed'\n\t| 'blocked'\n\t| 'cancelled';\n\nexport type GoalStatus = 'active' | 'completed' | 'abandoned';\n\nexport type GoalTask = {\n\tid: string;\n\tgoalId: string;\n\tsessionId: string | null;\n\tposition: number;\n\tcontent: string;\n\tstatus: GoalTaskStatus;\n\tnote: string | null;\n\tcreatedAt: number;\n\tupdatedAt: number;\n};\n\nexport type Goal = {\n\tid: string;\n\tprojectPath: string;\n\tsessionId: string | null;\n\tottoSessionId: string | null;\n\ttitle: string;\n\tstatus: GoalStatus;\n\tstartedAt: number | null;\n\tcreatedAt: number;\n\tupdatedAt: number;\n\ttasks: GoalTask[];\n};\n\nexport type SubagentStatus = 'running' | 'completed' | 'failed' | 'cancelled';\n\nexport type Subagent = {\n\tid: string;\n\tparentSessionId: string;\n\tchildSessionId: string;\n\tagent: string;\n\ttask: string;\n\tstatus: SubagentStatus;\n\tsummary: string | null;\n\treported: boolean;\n\tcreatedAt: number;\n\tupdatedAt: number;\n};\n\nexport const goalsMixin = {\n\tasync listGoals(): Promise<{ goals: Goal[] }> {\n\t\tconst response = await apiListGoals();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goals: Goal[] };\n\t},\n\n\tasync getSessionGoal(sessionId: string): Promise<{ goal: Goal | null }> {\n\t\tconst response = await apiGetSessionGoal({ path: { sessionId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal | null };\n\t},\n\n\tasync createSessionGoal(\n\t\tsessionId: string,\n\t\tdata: { title: string; tasks?: string[] },\n\t): Promise<{ goal: Goal }> {\n\t\tconst response = await apiCreateSessionGoal({\n\t\t\tpath: { sessionId },\n\t\t\tbody: data,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal };\n\t},\n\n\tasync updateGoal(\n\t\tgoalId: string,\n\t\tdata: { title?: string; status?: GoalStatus },\n\t): Promise<{ goal: Goal }> {\n\t\tconst response = await apiUpdateGoal({\n\t\t\tpath: { goalId },\n\t\t\tbody: data,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal };\n\t},\n\n\tasync addGoalTasks(goalId: string, tasks: string[]): Promise<{ goal: Goal }> {\n\t\tconst response = await apiAddGoalTasks({\n\t\t\tpath: { goalId },\n\t\t\tbody: { tasks },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal };\n\t},\n\n\tasync updateGoalTask(\n\t\tgoalId: string,\n\t\ttaskId: string,\n\t\tdata: {\n\t\t\tcontent?: string;\n\t\t\tstatus?: GoalTaskStatus;\n\t\t\tnote?: string | null;\n\t\t},\n\t): Promise<{ task: GoalTask }> {\n\t\tconst response = await apiUpdateGoalTask({\n\t\t\tpath: { goalId, taskId },\n\t\t\tbody: data,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { task: GoalTask };\n\t},\n\n\tasync deleteGoalTask(\n\t\tgoalId: string,\n\t\ttaskId: string,\n\t): Promise<{ goal: Goal }> {\n\t\tconst response = await apiDeleteGoalTask({ path: { goalId, taskId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal };\n\t},\n\n\tasync startGoal(goalId: string): Promise<{ goal: Goal }> {\n\t\tconst response = await apiStartGoal({ path: { goalId } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { goal: Goal };\n\t},\n\n\tasync listSessionSubagents(\n\t\tsessionId: string,\n\t\tstatus?: SubagentStatus,\n\t): Promise<{ subagents: Subagent[] }> {\n\t\tconst response = await apiListSessionSubagents({\n\t\t\tpath: { sessionId },\n\t\t\tquery: status ? { status } : undefined,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as unknown as { subagents: Subagent[] };\n\t},\n};\n",
15
15
  "import {\n\tresolveApproval as apiResolveApproval,\n\tgetPendingApprovals as apiGetPendingApprovals,\n} from '@ottocode/api';\n\nexport const approvalMixin = {\n\tasync approveToolCall(\n\t\tsessionId: string,\n\t\tcallId: string,\n\t\tapproved: boolean,\n\t): Promise<{ ok: boolean; callId: string; approved: boolean }> {\n\t\tconst response = await apiResolveApproval({\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API path type mismatch\n\t\t\tpath: { id: sessionId } as any,\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tbody: { callId, approved, sessionId } as any,\n\t\t});\n\t\tif (response.error) throw new Error('Failed to send tool approval');\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getPendingApprovals(sessionId: string): Promise<{\n\t\tok: boolean;\n\t\tpending: Array<{\n\t\t\tcallId: string;\n\t\t\ttoolName: string;\n\t\t\targs: unknown;\n\t\t\tmessageId: string;\n\t\t\tcreatedAt: number;\n\t\t}>;\n\t}> {\n\t\tconst response = await apiGetPendingApprovals({\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API path type mismatch\n\t\t\tpath: { id: sessionId } as any,\n\t\t});\n\t\tif (response.error) return { ok: false, pending: [] };\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n};\n",
16
16
  "import {\n\tgetOttoRouterBalance as apiGetOttoRouterBalance,\n\tgetOttoRouterWallet as apiGetOttoRouterWallet,\n\tgetOttoRouterUsdcBalance as apiGetOttoRouterUsdcBalance,\n\tcreatePolarCheckout as apiCreatePolarCheckout,\n\tgetPolarTopupEstimate as apiGetPolarTopupEstimate,\n\tgetPolarTopupStatus as apiGetPolarTopupStatus,\n\tgetRazorpayTopupEstimate as apiGetRazorpayTopupEstimate,\n\tcreateRazorpayOrder as apiCreateRazorpayOrder,\n\tverifyRazorpayPayment as apiVerifyRazorpayPayment,\n\tselectTopupMethod as apiSelectTopupMethod,\n\tcancelTopup as apiCancelTopup,\n\tgetPendingTopup as apiGetPendingTopup,\n} from '@ottocode/api';\nimport { extractErrorMessage } from './utils';\n\nexport const ottorouterMixin = {\n\tasync getOttoRouterBalance(): Promise<{\n\t\twalletAddress: string;\n\t\tbalance: number;\n\t\ttotalSpent: number;\n\t\ttotalTopups: number;\n\t\trequestCount: number;\n\t\tscope?: 'wallet' | 'account';\n\t\tpayg?: {\n\t\t\twalletBalanceUsd: number;\n\t\t\taccountBalanceUsd: number;\n\t\t\trawPoolUsd: number;\n\t\t\teffectiveSpendableUsd: number;\n\t\t};\n\t\tlimits?: {\n\t\t\tenabled: boolean;\n\t\t\tdailyLimitUsd: number | null;\n\t\t\tdailySpentUsd: number;\n\t\t\tdailyRemainingUsd: number | null;\n\t\t\tmonthlyLimitUsd: number | null;\n\t\t\tmonthlySpentUsd: number;\n\t\t\tmonthlyRemainingUsd: number | null;\n\t\t\tcapRemainingUsd: number | null;\n\t\t} | null;\n\t\tsubscription?: {\n\t\t\tactive: boolean;\n\t\t\ttierId?: string;\n\t\t\ttierName?: string;\n\t\t\tcreditsIncluded?: number;\n\t\t\tcreditsUsed?: number;\n\t\t\tcreditsRemaining?: number;\n\t\t\tcreditsWeeklyLimit?: number | null;\n\t\t\tcreditsFiveHourLimit?: number | null;\n\t\t\tusageWindows?: {\n\t\t\t\tweekly: {\n\t\t\t\t\tlimit: number | null;\n\t\t\t\t\tused: number;\n\t\t\t\t\tremaining: number | null;\n\t\t\t\t\tpercentUsed: number;\n\t\t\t\t};\n\t\t\t\tfiveHour: {\n\t\t\t\t\tlimit: number | null;\n\t\t\t\t\tused: number;\n\t\t\t\t\tremaining: number | null;\n\t\t\t\t\tpercentUsed: number;\n\t\t\t\t};\n\t\t\t};\n\t\t\tperiodStart?: string;\n\t\t\tperiodEnd?: string;\n\t\t} | null;\n\t} | null> {\n\t\ttry {\n\t\t\tconst response = await apiGetOttoRouterBalance();\n\t\t\tif (response.error) return null;\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\t\treturn response.data as any;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t},\n\n\tasync getOttoRouterWallet(): Promise<{\n\t\tconfigured: boolean;\n\t\tpublicKey?: string;\n\t\terror?: string;\n\t}> {\n\t\ttry {\n\t\t\tconst response = await apiGetOttoRouterWallet();\n\t\t\tif (response.error) return { configured: false };\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\t\treturn response.data as any;\n\t\t} catch {\n\t\t\treturn { configured: false };\n\t\t}\n\t},\n\n\tasync getOttoRouterUsdcBalance(\n\t\tnetwork: 'mainnet' | 'devnet' = 'mainnet',\n\t): Promise<{\n\t\twalletAddress: string;\n\t\tusdcBalance: number;\n\t\tnetwork: 'mainnet' | 'devnet';\n\t} | null> {\n\t\ttry {\n\t\t\tconst response = await apiGetOttoRouterUsdcBalance({\n\t\t\t\tquery: { network },\n\t\t\t});\n\t\t\tif (response.error) return null;\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\t\treturn response.data as any;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t},\n\n\tasync getPolarTopupEstimate(amount: number): Promise<{\n\t\tcreditAmount: number;\n\t\tchargeAmount: number;\n\t\tfeeAmount: number;\n\t\tfeeBreakdown: {\n\t\t\tbasePercent: number;\n\t\t\tinternationalPercent: number;\n\t\t\tfixedCents: number;\n\t\t};\n\t} | null> {\n\t\ttry {\n\t\t\tconst response = await apiGetPolarTopupEstimate({\n\t\t\t\tquery: { amount },\n\t\t\t});\n\t\t\tif (response.error) return null;\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\t\treturn response.data as any;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t},\n\n\tasync createPolarCheckout(\n\t\tamount: number,\n\t\tsuccessUrl: string,\n\t): Promise<{\n\t\tsuccess: boolean;\n\t\tcheckoutId: string;\n\t\tcheckoutUrl: string;\n\t\tcreditAmount: number;\n\t\tchargeAmount: number;\n\t\tfeeAmount: number;\n\t}> {\n\t\tconst response = await apiCreatePolarCheckout({\n\t\t\tbody: { amount, successUrl },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync selectTopupMethod(\n\t\tsessionId: string,\n\t\tmethod: 'crypto' | 'fiat',\n\t): Promise<{ success: boolean; method: string }> {\n\t\tconst response = await apiSelectTopupMethod({\n\t\t\tbody: { sessionId, method },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync cancelTopup(\n\t\tsessionId: string,\n\t\treason?: string,\n\t): Promise<{ success: boolean }> {\n\t\tconst response = await apiCancelTopup({\n\t\t\tbody: { sessionId, reason },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getPendingTopup(sessionId: string): Promise<{\n\t\thasPending: boolean;\n\t\tsessionId?: string;\n\t\tmessageId?: string;\n\t\tamountUsd?: number;\n\t\tcurrentBalance?: number;\n\t\tcreatedAt?: number;\n\t}> {\n\t\ttry {\n\t\t\tconst response = await apiGetPendingTopup({\n\t\t\t\tquery: { sessionId },\n\t\t\t});\n\t\t\tif (response.error) return { hasPending: false };\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\t\treturn response.data as any;\n\t\t} catch {\n\t\t\treturn { hasPending: false };\n\t\t}\n\t},\n\n\tasync getPolarTopupStatus(checkoutId: string): Promise<{\n\t\tcheckoutId: string;\n\t\tconfirmed: boolean;\n\t\tamountUsd: number | null;\n\t\tconfirmedAt: string | null;\n\t} | null> {\n\t\ttry {\n\t\t\tconst response = await apiGetPolarTopupStatus({\n\t\t\t\tquery: { checkoutId },\n\t\t\t});\n\t\t\tif (response.error) return null;\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\t\treturn response.data as any;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t},\n\n\tasync getRazorpayTopupEstimate(amount: number): Promise<{\n\t\tcreditAmountUsd: number;\n\t\tchargeAmountInr: number;\n\t\tfeeAmountInr: number;\n\t\tcurrency: string;\n\t\texchangeRate: number;\n\t} | null> {\n\t\ttry {\n\t\t\tconst response = await apiGetRazorpayTopupEstimate({\n\t\t\t\tquery: { amount },\n\t\t\t});\n\t\t\tif (response.error) return null;\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\t\treturn response.data as any;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t},\n\n\tasync createRazorpayOrder(amount: number): Promise<{\n\t\tsuccess: boolean;\n\t\torderId: string;\n\t\tamount: number;\n\t\tcurrency: string;\n\t\tcreditAmountUsd: number;\n\t\tkeyId: string;\n\t}> {\n\t\tconst response = await apiCreateRazorpayOrder({\n\t\t\tbody: { amount },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync verifyRazorpayPayment(params: {\n\t\trazorpay_order_id: string;\n\t\trazorpay_payment_id: string;\n\t\trazorpay_signature: string;\n\t}): Promise<{\n\t\tsuccess: boolean;\n\t\tcredited: number;\n\t\tnewBalance: number;\n\t}> {\n\t\tconst response = await apiVerifyRazorpayPayment({\n\t\t\tbody: params,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n};\n",
17
- "import {\n\tgetAuthStatus as apiGetAuthStatus,\n\tsetupOttoRouterWallet as apiSetupOttoRouterWallet,\n\timportOttoRouterWallet as apiImportOttoRouterWallet,\n\texportOttoRouterWallet as apiExportOttoRouterWallet,\n\taddProviderApiKey as apiAddProviderApiKey,\n\tremoveProvider as apiRemoveProvider,\n\tcompleteOnboarding as apiCompleteOnboarding,\n\tgetOAuthUrl as apiGetOAuthUrl,\n\texchangeOAuthCode as apiExchangeOAuthCode,\n\tstartOpenAiDeviceFlow as apiStartOpenAiDeviceFlow,\n\tpollOpenAiDeviceFlow as apiPollOpenAiDeviceFlow,\n\tstartCopilotDeviceFlow as apiStartCopilotDeviceFlow,\n\tpollCopilotDeviceFlow as apiPollCopilotDeviceFlow,\n\tgetCopilotAuthMethods as apiGetCopilotAuthMethods,\n\tsaveCopilotToken as apiSaveCopilotToken,\n\timportCopilotTokenFromGh as apiImportCopilotTokenFromGh,\n\tgetCopilotDiagnostics as apiGetCopilotDiagnostics,\n\tgetProviderUsage as apiGetProviderUsage,\n} from '@ottocode/api';\nimport type { ProviderUsageResponse } from '../../types/api';\nimport { extractErrorMessage, getBaseUrl } from './utils';\n\nexport const authMixin = {\n\tasync getAuthStatus(): Promise<{\n\t\tonboardingComplete: boolean;\n\t\tottorouter: { configured: boolean; publicKey?: string };\n\t\tproviders: Record<\n\t\t\tstring,\n\t\t\t{\n\t\t\t\tconfigured: boolean;\n\t\t\t\ttype?: 'api' | 'oauth' | 'wallet';\n\t\t\t\tlabel: string;\n\t\t\t\tsupportsOAuth: boolean;\n\t\t\t\tsupportsToken?: boolean;\n\t\t\t\tsupportsGhImport?: boolean;\n\t\t\t\tcustom?: boolean;\n\t\t\t\tmodelCount: number;\n\t\t\t\tcostRange?: { min: number; max: number };\n\t\t\t}\n\t\t>;\n\t\tdefaults: {\n\t\t\tagent: string;\n\t\t\tprovider: string;\n\t\t\tmodel: string;\n\t\t\ttoolApproval?: 'auto' | 'dangerous' | 'all' | 'yolo';\n\t\t};\n\t}> {\n\t\tconst response = await apiGetAuthStatus();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync setupOttoRouterWallet(): Promise<{\n\t\tsuccess: boolean;\n\t\tpublicKey: string;\n\t\tisNew: boolean;\n\t}> {\n\t\tconst response = await apiSetupOttoRouterWallet();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync importOttoRouterWallet(privateKey: string): Promise<{\n\t\tsuccess: boolean;\n\t\tpublicKey: string;\n\t}> {\n\t\tconst response = await apiImportOttoRouterWallet({\n\t\t\tbody: { privateKey },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync exportOttoRouterWallet(): Promise<{\n\t\tsuccess: boolean;\n\t\tpublicKey: string;\n\t\tprivateKey: string;\n\t}> {\n\t\tconst response = await apiExportOttoRouterWallet();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync addProvider(\n\t\tprovider: string,\n\t\tapiKey: string,\n\t): Promise<{ success: boolean; provider: string }> {\n\t\tconst response = await apiAddProviderApiKey({\n\t\t\tpath: { provider },\n\t\t\tbody: { apiKey },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync removeProvider(\n\t\tprovider: string,\n\t): Promise<{ success: boolean; provider: string }> {\n\t\tconst response = await apiRemoveProvider({ path: { provider } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync completeOnboarding(): Promise<{ success: boolean }> {\n\t\tconst response = await apiCompleteOnboarding();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tgetOAuthStartUrl(provider: string, mode?: string): string {\n\t\tconst baseUrl = `${getBaseUrl()}/v1/auth/${provider}/oauth/start`;\n\t\tif (mode) return `${baseUrl}?mode=${mode}`;\n\t\treturn baseUrl;\n\t},\n\n\tasync getOAuthUrl(\n\t\tprovider: string,\n\t\tmode?: string,\n\t): Promise<{ url: string; sessionId: string; provider: string }> {\n\t\tconst response = await apiGetOAuthUrl({\n\t\t\tpath: { provider },\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tbody: { mode } as any,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync exchangeOAuthCode(\n\t\tprovider: string,\n\t\tcode: string,\n\t\tsessionId: string,\n\t): Promise<{ success: boolean; provider: string }> {\n\t\tconst response = await apiExchangeOAuthCode({\n\t\t\tpath: { provider },\n\t\t\tbody: { code, sessionId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync startOpenAIDeviceFlow(): Promise<{\n\t\tsessionId: string;\n\t\tuserCode: string;\n\t\tverificationUri: string;\n\t\tinterval: number;\n\t}> {\n\t\tconst response = await apiStartOpenAiDeviceFlow();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync pollOpenAIDeviceFlow(\n\t\tsessionId: string,\n\t): Promise<{ status: 'complete' | 'pending' | 'error'; error?: string }> {\n\t\tconst response = await apiPollOpenAiDeviceFlow({\n\t\t\tbody: { sessionId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync startCopilotDeviceFlow(): Promise<{\n\t\tsessionId: string;\n\t\tuserCode: string;\n\t\tverificationUri: string;\n\t\tinterval: number;\n\t}> {\n\t\tconst response = await apiStartCopilotDeviceFlow();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync pollCopilotDeviceFlow(\n\t\tsessionId: string,\n\t): Promise<{ status: 'complete' | 'pending' | 'error'; error?: string }> {\n\t\tconst response = await apiPollCopilotDeviceFlow({\n\t\t\tbody: { sessionId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getCopilotAuthMethods(): Promise<{\n\t\toauth: boolean;\n\t\ttoken: boolean;\n\t\tghImport: { available: boolean; authenticated: boolean; reason?: string };\n\t}> {\n\t\tconst response = await apiGetCopilotAuthMethods();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync saveCopilotToken(token: string): Promise<{\n\t\tsuccess: boolean;\n\t\tprovider: string;\n\t\tsource: 'token';\n\t\tmodelCount: number;\n\t\thasGpt52Codex: boolean;\n\t\tsampleModels: string[];\n\t}> {\n\t\tconst response = await apiSaveCopilotToken({ body: { token } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync importCopilotTokenFromGh(): Promise<{\n\t\tsuccess: boolean;\n\t\tprovider: string;\n\t\tsource: 'gh';\n\t\tmodelCount: number;\n\t\thasGpt52Codex: boolean;\n\t\tsampleModels: string[];\n\t}> {\n\t\tconst response = await apiImportCopilotTokenFromGh();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getCopilotDiagnostics(): Promise<{\n\t\ttokenSources: Array<{\n\t\t\tsource: 'env' | 'stored';\n\t\t\tconfigured: boolean;\n\t\t\tmodelCount?: number;\n\t\t\thasGpt52Codex?: boolean;\n\t\t\tsampleModels?: string[];\n\t\t\trestrictedByOrgPolicy?: boolean;\n\t\t\trestrictedOrg?: string;\n\t\t\trestrictionMessage?: string;\n\t\t\terror?: string;\n\t\t}>;\n\t\tmethods: {\n\t\t\toauth: boolean;\n\t\t\ttoken: boolean;\n\t\t\tghImport: { available: boolean; authenticated: boolean; reason?: string };\n\t\t};\n\t}> {\n\t\tconst response = await apiGetCopilotDiagnostics();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getProviderUsage(provider: string): Promise<ProviderUsageResponse> {\n\t\tconst response = await apiGetProviderUsage({\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API path type mismatch\n\t\t\tpath: { provider } as any,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as ProviderUsageResponse;\n\t},\n};\n",
17
+ "import {\n\tgetAuthStatus as apiGetAuthStatus,\n\tsetupOttoRouterWallet as apiSetupOttoRouterWallet,\n\timportOttoRouterWallet as apiImportOttoRouterWallet,\n\texportOttoRouterWallet as apiExportOttoRouterWallet,\n\taddProviderApiKey as apiAddProviderApiKey,\n\tremoveProvider as apiRemoveProvider,\n\tcompleteOnboarding as apiCompleteOnboarding,\n\tgetOAuthUrl as apiGetOAuthUrl,\n\texchangeOAuthCode as apiExchangeOAuthCode,\n\tstartOpenAiDeviceFlow as apiStartOpenAiDeviceFlow,\n\tpollOpenAiDeviceFlow as apiPollOpenAiDeviceFlow,\n\tstartCopilotDeviceFlow as apiStartCopilotDeviceFlow,\n\tpollCopilotDeviceFlow as apiPollCopilotDeviceFlow,\n\tstartKimiDeviceFlow as apiStartKimiDeviceFlow,\n\tpollKimiDeviceFlow as apiPollKimiDeviceFlow,\n\tgetCopilotAuthMethods as apiGetCopilotAuthMethods,\n\tsaveCopilotToken as apiSaveCopilotToken,\n\timportCopilotTokenFromGh as apiImportCopilotTokenFromGh,\n\tgetCopilotDiagnostics as apiGetCopilotDiagnostics,\n\tgetProviderUsage as apiGetProviderUsage,\n} from '@ottocode/api';\nimport type { ProviderUsageResponse } from '../../types/api';\nimport { extractErrorMessage, getBaseUrl } from './utils';\n\nexport const authMixin = {\n\tasync getAuthStatus(): Promise<{\n\t\tonboardingComplete: boolean;\n\t\tottorouter: { configured: boolean; publicKey?: string };\n\t\tproviders: Record<\n\t\t\tstring,\n\t\t\t{\n\t\t\t\tconfigured: boolean;\n\t\t\t\ttype?: 'api' | 'oauth' | 'wallet';\n\t\t\t\tlabel: string;\n\t\t\t\tsupportsOAuth: boolean;\n\t\t\t\tsupportsToken?: boolean;\n\t\t\t\tsupportsGhImport?: boolean;\n\t\t\t\tcustom?: boolean;\n\t\t\t\tmodelCount: number;\n\t\t\t\tcostRange?: { min: number; max: number };\n\t\t\t}\n\t\t>;\n\t\tdefaults: {\n\t\t\tagent: string;\n\t\t\tprovider: string;\n\t\t\tmodel: string;\n\t\t\ttoolApproval?: 'auto' | 'dangerous' | 'all' | 'yolo';\n\t\t};\n\t}> {\n\t\tconst response = await apiGetAuthStatus();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync setupOttoRouterWallet(): Promise<{\n\t\tsuccess: boolean;\n\t\tpublicKey: string;\n\t\tisNew: boolean;\n\t}> {\n\t\tconst response = await apiSetupOttoRouterWallet();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync importOttoRouterWallet(privateKey: string): Promise<{\n\t\tsuccess: boolean;\n\t\tpublicKey: string;\n\t}> {\n\t\tconst response = await apiImportOttoRouterWallet({\n\t\t\tbody: { privateKey },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync exportOttoRouterWallet(): Promise<{\n\t\tsuccess: boolean;\n\t\tpublicKey: string;\n\t\tprivateKey: string;\n\t}> {\n\t\tconst response = await apiExportOttoRouterWallet();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync addProvider(\n\t\tprovider: string,\n\t\tapiKey: string,\n\t): Promise<{ success: boolean; provider: string }> {\n\t\tconst response = await apiAddProviderApiKey({\n\t\t\tpath: { provider },\n\t\t\tbody: { apiKey },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync removeProvider(\n\t\tprovider: string,\n\t): Promise<{ success: boolean; provider: string }> {\n\t\tconst response = await apiRemoveProvider({ path: { provider } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync completeOnboarding(): Promise<{ success: boolean }> {\n\t\tconst response = await apiCompleteOnboarding();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tgetOAuthStartUrl(provider: string, mode?: string): string {\n\t\tconst baseUrl = `${getBaseUrl()}/v1/auth/${provider}/oauth/start`;\n\t\tif (mode) return `${baseUrl}?mode=${mode}`;\n\t\treturn baseUrl;\n\t},\n\n\tasync getOAuthUrl(\n\t\tprovider: string,\n\t\tmode?: string,\n\t): Promise<{ url: string; sessionId: string; provider: string }> {\n\t\tconst response = await apiGetOAuthUrl({\n\t\t\tpath: { provider },\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API type mismatch\n\t\t\tbody: { mode } as any,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync exchangeOAuthCode(\n\t\tprovider: string,\n\t\tcode: string,\n\t\tsessionId: string,\n\t): Promise<{ success: boolean; provider: string }> {\n\t\tconst response = await apiExchangeOAuthCode({\n\t\t\tpath: { provider },\n\t\t\tbody: { code, sessionId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync startOpenAIDeviceFlow(): Promise<{\n\t\tsessionId: string;\n\t\tuserCode: string;\n\t\tverificationUri: string;\n\t\tinterval: number;\n\t}> {\n\t\tconst response = await apiStartOpenAiDeviceFlow();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync pollOpenAIDeviceFlow(\n\t\tsessionId: string,\n\t): Promise<{ status: 'complete' | 'pending' | 'error'; error?: string }> {\n\t\tconst response = await apiPollOpenAiDeviceFlow({\n\t\t\tbody: { sessionId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync startCopilotDeviceFlow(): Promise<{\n\t\tsessionId: string;\n\t\tuserCode: string;\n\t\tverificationUri: string;\n\t\tinterval: number;\n\t}> {\n\t\tconst response = await apiStartCopilotDeviceFlow();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync pollCopilotDeviceFlow(\n\t\tsessionId: string,\n\t): Promise<{ status: 'complete' | 'pending' | 'error'; error?: string }> {\n\t\tconst response = await apiPollCopilotDeviceFlow({\n\t\t\tbody: { sessionId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync startKimiDeviceFlow(): Promise<{\n\t\tsessionId: string;\n\t\tuserCode: string;\n\t\tverificationUri: string;\n\t\tinterval: number;\n\t}> {\n\t\tconst response = await apiStartKimiDeviceFlow();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync pollKimiDeviceFlow(\n\t\tsessionId: string,\n\t): Promise<{ status: 'complete' | 'pending' | 'error'; error?: string }> {\n\t\tconst response = await apiPollKimiDeviceFlow({\n\t\t\tbody: { sessionId },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getCopilotAuthMethods(): Promise<{\n\t\toauth: boolean;\n\t\ttoken: boolean;\n\t\tghImport: { available: boolean; authenticated: boolean; reason?: string };\n\t}> {\n\t\tconst response = await apiGetCopilotAuthMethods();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync saveCopilotToken(token: string): Promise<{\n\t\tsuccess: boolean;\n\t\tprovider: string;\n\t\tsource: 'token';\n\t\tmodelCount: number;\n\t\thasGpt52Codex: boolean;\n\t\tsampleModels: string[];\n\t}> {\n\t\tconst response = await apiSaveCopilotToken({ body: { token } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync importCopilotTokenFromGh(): Promise<{\n\t\tsuccess: boolean;\n\t\tprovider: string;\n\t\tsource: 'gh';\n\t\tmodelCount: number;\n\t\thasGpt52Codex: boolean;\n\t\tsampleModels: string[];\n\t}> {\n\t\tconst response = await apiImportCopilotTokenFromGh();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getCopilotDiagnostics(): Promise<{\n\t\ttokenSources: Array<{\n\t\t\tsource: 'env' | 'stored';\n\t\t\tconfigured: boolean;\n\t\t\tmodelCount?: number;\n\t\t\thasGpt52Codex?: boolean;\n\t\t\tsampleModels?: string[];\n\t\t\trestrictedByOrgPolicy?: boolean;\n\t\t\trestrictedOrg?: string;\n\t\t\trestrictionMessage?: string;\n\t\t\terror?: string;\n\t\t}>;\n\t\tmethods: {\n\t\t\toauth: boolean;\n\t\t\ttoken: boolean;\n\t\t\tghImport: { available: boolean; authenticated: boolean; reason?: string };\n\t\t};\n\t}> {\n\t\tconst response = await apiGetCopilotDiagnostics();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\t// biome-ignore lint/suspicious/noExplicitAny: API response structure\n\t\treturn response.data as any;\n\t},\n\n\tasync getProviderUsage(provider: string): Promise<ProviderUsageResponse> {\n\t\tconst response = await apiGetProviderUsage({\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: API path type mismatch\n\t\t\tpath: { provider } as any,\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as ProviderUsageResponse;\n\t},\n};\n",
18
18
  "import {\n\tgetSkillsConfig as apiGetSkillsConfig,\n\tupdateSkillsConfig as apiUpdateSkillsConfig,\n\tlistSkills as apiListSkills,\n\tgetSkill as apiGetSkill,\n\tlistSkillFiles as apiListSkillFiles,\n\tgetSkillFile as apiGetSkillFile,\n} from '@ottocode/api';\nimport { extractErrorMessage } from './utils';\n\nexport interface SkillSummary {\n\tname: string;\n\tdescription: string;\n\tscope: string;\n\tpath: string;\n\tenabled?: boolean;\n}\n\nexport interface SkillsConfigResponse {\n\tenabled: boolean;\n\ttotalCount: number;\n\tenabledCount: number;\n\titems: SkillSummary[];\n}\n\nexport interface SkillDetail {\n\tname: string;\n\tdescription: string;\n\tlicense?: string | null;\n\tcompatibility?: string | null;\n\tmetadata?: unknown;\n\tallowedTools?: string[] | null;\n\tpath: string;\n\tscope: string;\n\tcontent: string;\n}\n\nexport interface SkillFileInfo {\n\trelativePath: string;\n\tsize: number;\n}\n\nexport const skillsMixin = {\n\tasync listSkills(): Promise<{ skills: SkillSummary[] }> {\n\t\tconst response = await apiListSkills();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as { skills: SkillSummary[] };\n\t},\n\n\tasync getSkill(name: string): Promise<SkillDetail> {\n\t\tconst response = await apiGetSkill({ path: { name } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as SkillDetail;\n\t},\n\n\tasync getSkillFiles(name: string): Promise<{ files: SkillFileInfo[] }> {\n\t\tconst response = await apiListSkillFiles({ path: { name } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as { files: SkillFileInfo[] };\n\t},\n\n\tasync getSkillFileContent(\n\t\tname: string,\n\t\tfilePath: string,\n\t): Promise<{ content: string; path: string }> {\n\t\tconst response = await apiGetSkillFile({\n\t\t\tpath: { name, filePath },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as { content: string; path: string };\n\t},\n\n\tasync getSkillsConfig(): Promise<SkillsConfigResponse> {\n\t\tconst response = await apiGetSkillsConfig();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as SkillsConfigResponse;\n\t},\n\n\tasync updateSkillsConfig(input: {\n\t\tenabled?: boolean;\n\t\titems?: Record<string, { enabled?: boolean }>;\n\t\tscope?: 'global' | 'local';\n\t}): Promise<SkillsConfigResponse> {\n\t\tconst response = await apiUpdateSkillsConfig({ body: input });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as SkillsConfigResponse;\n\t},\n};\n",
19
19
  "import {\n\tgetUsageStats as apiGetUsageStats,\n\tgetGlobalUsageStats as apiGetGlobalUsageStats,\n\ttype UsageStats,\n} from '@ottocode/api';\nimport { extractErrorMessage } from './utils';\n\nexport type { UsageStats };\nexport type UsageTotals = UsageStats['totals'];\nexport type UsageProviderAgg = UsageStats['providers'][number];\nexport type UsageModelAgg = UsageStats['models'][number];\nexport type UsageDailyAgg = UsageStats['daily'][number];\nexport type UsageProjectsBreakdown = NonNullable<UsageStats['projects']>;\nexport type UsageProjectInfo = UsageProjectsBreakdown['included'][number];\nexport type UsageProjectUnavailable =\n\tUsageProjectsBreakdown['unavailable'][number];\n\nexport type UsageAuthBucket = 'oauth' | 'api' | 'subscription';\n\nexport const usageMixin = {\n\tasync getUsageStats(): Promise<UsageStats> {\n\t\tconst { data, error } = await apiGetUsageStats();\n\t\tif (error) throw new Error(extractErrorMessage(error));\n\t\tif (!data) throw new Error('Empty response from /v1/usage/stats');\n\t\treturn data;\n\t},\n\tasync getGlobalUsageStats(): Promise<UsageStats> {\n\t\tconst { data, error } = await apiGetGlobalUsageStats();\n\t\tif (error) throw new Error(extractErrorMessage(error));\n\t\tif (!data) throw new Error('Empty response from /v1/usage/stats/global');\n\t\treturn data;\n\t},\n};\n",
20
20
  "import {\n\tgetDictationStatus as apiGetDictationStatus,\n\tinstallDictationModel as apiInstallDictationModel,\n\tlistDictationModels as apiListDictationModels,\n\tremoveDictationModel as apiRemoveDictationModel,\n\tcreateDictationSession as apiCreateDictationSession,\n} from '@ottocode/api';\nimport { extractErrorMessage, getBaseUrl } from './utils';\n\nexport type DictationModelInstallStatus =\n\t| 'idle'\n\t| 'installing'\n\t| 'verifying'\n\t| 'installed'\n\t| 'error';\n\nexport interface DictationModelState {\n\tid: string;\n\tlabel: string;\n\tlanguage: 'en' | 'multi';\n\tsizeBytes: number;\n\turl: string;\n\tsha256: string;\n\trecommended?: boolean;\n\tinstalled: boolean;\n\tinstalling: boolean;\n\tinstalledSizeBytes: number;\n\tinstallStatus: DictationModelInstallStatus;\n\tprogressBytes: number;\n\ttotalBytes: number;\n\terror?: string;\n\terrorCode?: string;\n}\n\nexport interface DictationStatusResponse {\n\tavailable: boolean;\n\tengine: string;\n\tengineInstalled: boolean;\n\tdefaultModel: string;\n\tformat?: {\n\t\tencoding?: string;\n\t\tsampleRate?: number;\n\t\tchannels?: number;\n\t};\n\tmodels: DictationModelState[];\n}\n\nexport interface DictationModelsResponse {\n\tmodels: DictationModelState[];\n}\n\nexport interface InstallDictationModelInput {\n\tmodel: string;\n\tforce?: boolean;\n}\n\nexport interface InstallDictationModelResponse {\n\tmodel: DictationModelState;\n}\n\nexport interface RemoveDictationModelResponse {\n\tremoved: boolean;\n\tmodel: DictationModelState;\n}\n\nexport interface DictationModelInstallEvent {\n\ttype: 'model';\n\tmodel: DictationModelState;\n}\n\nexport interface CreateDictationSessionInput {\n\tmodel?: string;\n\tlanguage?: string;\n}\n\nexport interface CreateDictationSessionResponse {\n\tid: string;\n\twsUrl: string;\n\tmodel: string;\n\tmodelInstalled: boolean;\n\tformat: {\n\t\tencoding: string;\n\t\tsampleRate: number;\n\t\tchannels: number;\n\t};\n}\n\nfunction coerceModelState(value: unknown): DictationModelState {\n\treturn value as DictationModelState;\n}\n\nfunction coerceModels(value: unknown): DictationModelState[] {\n\treturn Array.isArray(value) ? value.map(coerceModelState) : [];\n}\n\nfunction buildInstallEventsUrl(model: string): string {\n\tconst baseUrl = getBaseUrl().replace(/\\/+$/, '');\n\treturn `${baseUrl}/v1/dictation/models/${encodeURIComponent(model)}/install/events`;\n}\n\nexport const dictationMixin = {\n\tasync getDictationStatus(): Promise<DictationStatusResponse> {\n\t\tconst response = await apiGetDictationStatus();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tconst data = response.data as Omit<DictationStatusResponse, 'models'> & {\n\t\t\tmodels?: unknown;\n\t\t};\n\t\treturn {\n\t\t\t...data,\n\t\t\tmodels: coerceModels(data.models),\n\t\t};\n\t},\n\n\tasync listDictationModels(): Promise<DictationModelsResponse> {\n\t\tconst response = await apiListDictationModels();\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tconst data = response.data as { models?: unknown };\n\t\treturn { models: coerceModels(data.models) };\n\t},\n\n\tasync installDictationModel({\n\t\tmodel,\n\t\tforce,\n\t}: InstallDictationModelInput): Promise<InstallDictationModelResponse> {\n\t\tconst response = await apiInstallDictationModel({\n\t\t\tpath: { model },\n\t\t\tbody: { force },\n\t\t});\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tconst data = response.data as { model: unknown };\n\t\treturn { model: coerceModelState(data.model) };\n\t},\n\n\tasync removeDictationModel(\n\t\tmodel: string,\n\t): Promise<RemoveDictationModelResponse> {\n\t\tconst response = await apiRemoveDictationModel({ path: { model } });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\tconst data = response.data as { removed: boolean; model: unknown };\n\t\treturn {\n\t\t\tremoved: data.removed,\n\t\t\tmodel: coerceModelState(data.model),\n\t\t};\n\t},\n\n\tasync createDictationSession(\n\t\tinput: CreateDictationSessionInput = {},\n\t): Promise<CreateDictationSessionResponse> {\n\t\tconst response = await apiCreateDictationSession({ body: input });\n\t\tif (response.error) throw new Error(extractErrorMessage(response.error));\n\t\treturn response.data as CreateDictationSessionResponse;\n\t},\n\n\tgetDictationModelInstallEventsUrl: buildInstallEventsUrl,\n};\n",
21
21
  "import {\n\tlistPendingSecureInputs as apiListPendingSecureInputs,\n\tresolveSecureInput as apiResolveSecureInput,\n} from '@ottocode/api';\n\nexport const secureInputMixin = {\n\tasync submitSecureInput(\n\t\tsessionId: string,\n\t\tpromptId: string,\n\t\tvalue: string,\n\t): Promise<{ ok: boolean; promptId: string; cancelled: boolean }> {\n\t\tconst response = await apiResolveSecureInput({\n\t\t\tpath: { id: sessionId },\n\t\t\tbody: { promptId, value },\n\t\t});\n\t\tif (response.error) throw new Error('Failed to submit secure input');\n\t\treturn response.data;\n\t},\n\n\tasync cancelSecureInput(\n\t\tsessionId: string,\n\t\tpromptId: string,\n\t): Promise<{ ok: boolean; promptId: string; cancelled: boolean }> {\n\t\tconst response = await apiResolveSecureInput({\n\t\t\tpath: { id: sessionId },\n\t\t\tbody: { promptId, cancelled: true },\n\t\t});\n\t\tif (response.error) throw new Error('Failed to cancel secure input');\n\t\treturn response.data;\n\t},\n\n\tasync getPendingSecureInputs(sessionId: string): Promise<{\n\t\tok: boolean;\n\t\tpending: Array<{\n\t\t\tpromptId: string;\n\t\t\tmessageId?: string;\n\t\t\tcallId?: string;\n\t\t\tprompt: string;\n\t\t\tinputKind: 'password';\n\t\t\tcreatedAt: number;\n\t\t}>;\n\t}> {\n\t\tconst response = await apiListPendingSecureInputs({\n\t\t\tpath: { id: sessionId },\n\t\t});\n\t\tif (response.error) throw new Error('Failed to get pending secure inputs');\n\t\treturn response.data;\n\t},\n};\n",
22
- "import { sessionsMixin } from './sessions';\nimport { gitMixin } from './git';\nimport { configMixin } from './config';\nimport { filesMixin } from './files';\nimport { branchesMixin } from './branches';\nimport { goalsMixin } from './goals';\nimport { approvalMixin } from './approval';\nimport { ottorouterMixin } from './ottorouter';\nimport { authMixin } from './auth';\nimport { skillsMixin } from './skills';\nimport { usageMixin } from './usage';\nimport { dictationMixin } from './dictation';\nimport { secureInputMixin } from './secure-input';\n\nexport { configureApiClient } from './utils';\nexport type {\n\tGoal,\n\tGoalStatus,\n\tGoalTask,\n\tGoalTaskStatus,\n\tSubagent,\n\tSubagentStatus,\n} from './goals';\nexport type {\n\tCreateDictationSessionInput,\n\tCreateDictationSessionResponse,\n\tDictationModelInstallEvent,\n\tDictationModelInstallStatus,\n\tDictationModelState,\n\tDictationModelsResponse,\n\tDictationStatusResponse,\n\tInstallDictationModelInput,\n\tInstallDictationModelResponse,\n\tRemoveDictationModelResponse,\n} from './dictation';\n\nclass ApiClient {\n\tgetSessions = sessionsMixin.getSessions;\n\tgetSessionsPage = sessionsMixin.getSessionsPage;\n\tcreateSession = sessionsMixin.createSession;\n\tupdateSession = sessionsMixin.updateSession;\n\tmarkSessionViewed = sessionsMixin.markSessionViewed;\n\tdeleteSession = sessionsMixin.deleteSession;\n\tcreateHandoff = sessionsMixin.createHandoff;\n\tabortSession = sessionsMixin.abortSession;\n\tabortMessage = sessionsMixin.abortMessage;\n\tgetQueueState = sessionsMixin.getQueueState;\n\tremoveFromQueue = sessionsMixin.removeFromQueue;\n\tsendQueuedMessageNow = sessionsMixin.sendQueuedMessageNow;\n\tgetMessages = sessionsMixin.getMessages;\n\tsendMessage = sessionsMixin.sendMessage;\n\tgetStreamUrl = sessionsMixin.getStreamUrl;\n\tretryMessage = sessionsMixin.retryMessage;\n\n\tinitGitRepo = gitMixin.initGitRepo;\n\tgetGitStatus = gitMixin.getGitStatus;\n\tgetGitDiff = gitMixin.getGitDiff;\n\tgetGitDiffFullFile = gitMixin.getGitDiffFullFile;\n\tgenerateCommitMessage = gitMixin.generateCommitMessage;\n\tstageFiles = gitMixin.stageFiles;\n\tunstageFiles = gitMixin.unstageFiles;\n\trestoreFiles = gitMixin.restoreFiles;\n\tdeleteFiles = gitMixin.deleteFiles;\n\tcommitChanges = gitMixin.commitChanges;\n\tgetGitBranch = gitMixin.getGitBranch;\n\tpushCommits = gitMixin.pushCommits;\n\tpullChanges = gitMixin.pullChanges;\n\tperformRebaseAction = gitMixin.performRebaseAction;\n\tgetRemotes = gitMixin.getRemotes;\n\taddRemote = gitMixin.addRemote;\n\tremoveRemote = gitMixin.removeRemote;\n\tlistGitBranches = gitMixin.listGitBranches;\n\tcheckoutBranch = gitMixin.checkoutBranch;\n\tcreateGitBranch = gitMixin.createGitBranch;\n\n\tgetConfig = configMixin.getConfig;\n\tgetAgentDetails = configMixin.getAgentDetails;\n\tgetAgent = configMixin.getAgent;\n\tgetConfigTools = configMixin.getConfigTools;\n\tupdateAgent = configMixin.updateAgent;\n\tdeleteAgent = configMixin.deleteAgent;\n\tgetModels = configMixin.getModels;\n\tgetAllModels = configMixin.getAllModels;\n\tdiscoverProviderModels = configMixin.discoverProviderModels;\n\tupdateProviderSettings = configMixin.updateProviderSettings;\n\tdeleteProviderSettings = configMixin.deleteProviderSettings;\n\tupdateDefaults = configMixin.updateDefaults;\n\n\tlistFiles = filesMixin.listFiles;\n\tsearchFiles = filesMixin.searchFiles;\n\tgetFileTree = filesMixin.getFileTree;\n\treadFileContent = filesMixin.readFileContent;\n\tgetSessionFiles = filesMixin.getSessionFiles;\n\n\tcreateBranch = branchesMixin.createBranch;\n\tlistBranches = branchesMixin.listBranches;\n\tgetParentSession = branchesMixin.getParentSession;\n\tgetShareStatus = branchesMixin.getShareStatus;\n\tshareSession = branchesMixin.shareSession;\n\tsyncSession = branchesMixin.syncSession;\n\n\tgetSessionGoal = goalsMixin.getSessionGoal;\n\tcreateSessionGoal = goalsMixin.createSessionGoal;\n\tupdateGoal = goalsMixin.updateGoal;\n\taddGoalTasks = goalsMixin.addGoalTasks;\n\tupdateGoalTask = goalsMixin.updateGoalTask;\n\tstartGoal = goalsMixin.startGoal;\n\tlistSessionSubagents = goalsMixin.listSessionSubagents;\n\n\tapproveToolCall = approvalMixin.approveToolCall;\n\tgetPendingApprovals = approvalMixin.getPendingApprovals;\n\tsubmitSecureInput = secureInputMixin.submitSecureInput;\n\tcancelSecureInput = secureInputMixin.cancelSecureInput;\n\tgetPendingSecureInputs = secureInputMixin.getPendingSecureInputs;\n\n\tgetOttoRouterBalance = ottorouterMixin.getOttoRouterBalance;\n\tgetOttoRouterWallet = ottorouterMixin.getOttoRouterWallet;\n\tgetOttoRouterUsdcBalance = ottorouterMixin.getOttoRouterUsdcBalance;\n\tgetPolarTopupEstimate = ottorouterMixin.getPolarTopupEstimate;\n\tcreatePolarCheckout = ottorouterMixin.createPolarCheckout;\n\tselectTopupMethod = ottorouterMixin.selectTopupMethod;\n\tcancelTopup = ottorouterMixin.cancelTopup;\n\tgetPendingTopup = ottorouterMixin.getPendingTopup;\n\tgetPolarTopupStatus = ottorouterMixin.getPolarTopupStatus;\n\tgetRazorpayTopupEstimate = ottorouterMixin.getRazorpayTopupEstimate;\n\tcreateRazorpayOrder = ottorouterMixin.createRazorpayOrder;\n\tverifyRazorpayPayment = ottorouterMixin.verifyRazorpayPayment;\n\n\tgetAuthStatus = authMixin.getAuthStatus;\n\tsetupOttoRouterWallet = authMixin.setupOttoRouterWallet;\n\timportOttoRouterWallet = authMixin.importOttoRouterWallet;\n\texportOttoRouterWallet = authMixin.exportOttoRouterWallet;\n\taddProvider = authMixin.addProvider;\n\tremoveProvider = authMixin.removeProvider;\n\tcompleteOnboarding = authMixin.completeOnboarding;\n\tgetOAuthStartUrl = authMixin.getOAuthStartUrl;\n\tgetOAuthUrl = authMixin.getOAuthUrl;\n\texchangeOAuthCode = authMixin.exchangeOAuthCode;\n\tstartOpenAIDeviceFlow = authMixin.startOpenAIDeviceFlow;\n\tpollOpenAIDeviceFlow = authMixin.pollOpenAIDeviceFlow;\n\tstartCopilotDeviceFlow = authMixin.startCopilotDeviceFlow;\n\tpollCopilotDeviceFlow = authMixin.pollCopilotDeviceFlow;\n\tgetCopilotAuthMethods = authMixin.getCopilotAuthMethods;\n\tsaveCopilotToken = authMixin.saveCopilotToken;\n\timportCopilotTokenFromGh = authMixin.importCopilotTokenFromGh;\n\tgetCopilotDiagnostics = authMixin.getCopilotDiagnostics;\n\tgetProviderUsage = authMixin.getProviderUsage;\n\n\tlistSkills = skillsMixin.listSkills;\n\tgetSkill = skillsMixin.getSkill;\n\tgetSkillFiles = skillsMixin.getSkillFiles;\n\tgetSkillFileContent = skillsMixin.getSkillFileContent;\n\tgetSkillsConfig = skillsMixin.getSkillsConfig;\n\tupdateSkillsConfig = skillsMixin.updateSkillsConfig;\n\n\tgetUsageStats = usageMixin.getUsageStats;\n\tgetGlobalUsageStats = usageMixin.getGlobalUsageStats;\n\n\tgetDictationStatus = dictationMixin.getDictationStatus;\n\tlistDictationModels = dictationMixin.listDictationModels;\n\tinstallDictationModel = dictationMixin.installDictationModel;\n\tremoveDictationModel = dictationMixin.removeDictationModel;\n\tcreateDictationSession = dictationMixin.createDictationSession;\n\tgetDictationModelInstallEventsUrl =\n\t\tdictationMixin.getDictationModelInstallEventsUrl;\n}\n\nexport const apiClient = new ApiClient();\n",
22
+ "import { sessionsMixin } from './sessions';\nimport { gitMixin } from './git';\nimport { configMixin } from './config';\nimport { filesMixin } from './files';\nimport { branchesMixin } from './branches';\nimport { goalsMixin } from './goals';\nimport { approvalMixin } from './approval';\nimport { ottorouterMixin } from './ottorouter';\nimport { authMixin } from './auth';\nimport { skillsMixin } from './skills';\nimport { usageMixin } from './usage';\nimport { dictationMixin } from './dictation';\nimport { secureInputMixin } from './secure-input';\n\nexport { configureApiClient } from './utils';\nexport type {\n\tGoal,\n\tGoalStatus,\n\tGoalTask,\n\tGoalTaskStatus,\n\tSubagent,\n\tSubagentStatus,\n} from './goals';\nexport type {\n\tCreateDictationSessionInput,\n\tCreateDictationSessionResponse,\n\tDictationModelInstallEvent,\n\tDictationModelInstallStatus,\n\tDictationModelState,\n\tDictationModelsResponse,\n\tDictationStatusResponse,\n\tInstallDictationModelInput,\n\tInstallDictationModelResponse,\n\tRemoveDictationModelResponse,\n} from './dictation';\n\nclass ApiClient {\n\tgetSessions = sessionsMixin.getSessions;\n\tgetSessionsPage = sessionsMixin.getSessionsPage;\n\tcreateSession = sessionsMixin.createSession;\n\tgetSession = sessionsMixin.getSession;\n\tupdateSession = sessionsMixin.updateSession;\n\tmarkSessionViewed = sessionsMixin.markSessionViewed;\n\tdeleteSession = sessionsMixin.deleteSession;\n\tcreateHandoff = sessionsMixin.createHandoff;\n\tabortSession = sessionsMixin.abortSession;\n\tabortMessage = sessionsMixin.abortMessage;\n\tgetQueueState = sessionsMixin.getQueueState;\n\tremoveFromQueue = sessionsMixin.removeFromQueue;\n\tsendQueuedMessageNow = sessionsMixin.sendQueuedMessageNow;\n\tgetMessages = sessionsMixin.getMessages;\n\tsendMessage = sessionsMixin.sendMessage;\n\tgetStreamUrl = sessionsMixin.getStreamUrl;\n\tretryMessage = sessionsMixin.retryMessage;\n\n\tinitGitRepo = gitMixin.initGitRepo;\n\tgetGitStatus = gitMixin.getGitStatus;\n\tgetGitDiff = gitMixin.getGitDiff;\n\tgetGitDiffFullFile = gitMixin.getGitDiffFullFile;\n\tgenerateCommitMessage = gitMixin.generateCommitMessage;\n\tstageFiles = gitMixin.stageFiles;\n\tunstageFiles = gitMixin.unstageFiles;\n\trestoreFiles = gitMixin.restoreFiles;\n\tdeleteFiles = gitMixin.deleteFiles;\n\tcommitChanges = gitMixin.commitChanges;\n\tgetGitBranch = gitMixin.getGitBranch;\n\tpushCommits = gitMixin.pushCommits;\n\tpullChanges = gitMixin.pullChanges;\n\tperformRebaseAction = gitMixin.performRebaseAction;\n\tgetRemotes = gitMixin.getRemotes;\n\taddRemote = gitMixin.addRemote;\n\tremoveRemote = gitMixin.removeRemote;\n\tlistGitBranches = gitMixin.listGitBranches;\n\tcheckoutBranch = gitMixin.checkoutBranch;\n\tcreateGitBranch = gitMixin.createGitBranch;\n\n\tgetConfig = configMixin.getConfig;\n\tgetAgentDetails = configMixin.getAgentDetails;\n\tgetAgent = configMixin.getAgent;\n\tgetConfigTools = configMixin.getConfigTools;\n\tupdateAgent = configMixin.updateAgent;\n\tdeleteAgent = configMixin.deleteAgent;\n\tgetModels = configMixin.getModels;\n\tgetAllModels = configMixin.getAllModels;\n\tdiscoverProviderModels = configMixin.discoverProviderModels;\n\tupdateProviderSettings = configMixin.updateProviderSettings;\n\tdeleteProviderSettings = configMixin.deleteProviderSettings;\n\tupdateDefaults = configMixin.updateDefaults;\n\n\tlistFiles = filesMixin.listFiles;\n\tsearchFiles = filesMixin.searchFiles;\n\tgetFileTree = filesMixin.getFileTree;\n\treadFileContent = filesMixin.readFileContent;\n\tgetSessionFiles = filesMixin.getSessionFiles;\n\n\tcreateBranch = branchesMixin.createBranch;\n\tlistBranches = branchesMixin.listBranches;\n\tgetParentSession = branchesMixin.getParentSession;\n\tgetShareStatus = branchesMixin.getShareStatus;\n\tshareSession = branchesMixin.shareSession;\n\tsyncSession = branchesMixin.syncSession;\n\n\tgetSessionGoal = goalsMixin.getSessionGoal;\n\tlistGoals = goalsMixin.listGoals;\n\tcreateSessionGoal = goalsMixin.createSessionGoal;\n\tupdateGoal = goalsMixin.updateGoal;\n\taddGoalTasks = goalsMixin.addGoalTasks;\n\tupdateGoalTask = goalsMixin.updateGoalTask;\n\tdeleteGoalTask = goalsMixin.deleteGoalTask;\n\tstartGoal = goalsMixin.startGoal;\n\tlistSessionSubagents = goalsMixin.listSessionSubagents;\n\n\tapproveToolCall = approvalMixin.approveToolCall;\n\tgetPendingApprovals = approvalMixin.getPendingApprovals;\n\tsubmitSecureInput = secureInputMixin.submitSecureInput;\n\tcancelSecureInput = secureInputMixin.cancelSecureInput;\n\tgetPendingSecureInputs = secureInputMixin.getPendingSecureInputs;\n\n\tgetOttoRouterBalance = ottorouterMixin.getOttoRouterBalance;\n\tgetOttoRouterWallet = ottorouterMixin.getOttoRouterWallet;\n\tgetOttoRouterUsdcBalance = ottorouterMixin.getOttoRouterUsdcBalance;\n\tgetPolarTopupEstimate = ottorouterMixin.getPolarTopupEstimate;\n\tcreatePolarCheckout = ottorouterMixin.createPolarCheckout;\n\tselectTopupMethod = ottorouterMixin.selectTopupMethod;\n\tcancelTopup = ottorouterMixin.cancelTopup;\n\tgetPendingTopup = ottorouterMixin.getPendingTopup;\n\tgetPolarTopupStatus = ottorouterMixin.getPolarTopupStatus;\n\tgetRazorpayTopupEstimate = ottorouterMixin.getRazorpayTopupEstimate;\n\tcreateRazorpayOrder = ottorouterMixin.createRazorpayOrder;\n\tverifyRazorpayPayment = ottorouterMixin.verifyRazorpayPayment;\n\n\tgetAuthStatus = authMixin.getAuthStatus;\n\tsetupOttoRouterWallet = authMixin.setupOttoRouterWallet;\n\timportOttoRouterWallet = authMixin.importOttoRouterWallet;\n\texportOttoRouterWallet = authMixin.exportOttoRouterWallet;\n\taddProvider = authMixin.addProvider;\n\tremoveProvider = authMixin.removeProvider;\n\tcompleteOnboarding = authMixin.completeOnboarding;\n\tgetOAuthStartUrl = authMixin.getOAuthStartUrl;\n\tgetOAuthUrl = authMixin.getOAuthUrl;\n\texchangeOAuthCode = authMixin.exchangeOAuthCode;\n\tstartOpenAIDeviceFlow = authMixin.startOpenAIDeviceFlow;\n\tpollOpenAIDeviceFlow = authMixin.pollOpenAIDeviceFlow;\n\tstartCopilotDeviceFlow = authMixin.startCopilotDeviceFlow;\n\tpollCopilotDeviceFlow = authMixin.pollCopilotDeviceFlow;\n\tstartKimiDeviceFlow = authMixin.startKimiDeviceFlow;\n\tpollKimiDeviceFlow = authMixin.pollKimiDeviceFlow;\n\tgetCopilotAuthMethods = authMixin.getCopilotAuthMethods;\n\tsaveCopilotToken = authMixin.saveCopilotToken;\n\timportCopilotTokenFromGh = authMixin.importCopilotTokenFromGh;\n\tgetCopilotDiagnostics = authMixin.getCopilotDiagnostics;\n\tgetProviderUsage = authMixin.getProviderUsage;\n\n\tlistSkills = skillsMixin.listSkills;\n\tgetSkill = skillsMixin.getSkill;\n\tgetSkillFiles = skillsMixin.getSkillFiles;\n\tgetSkillFileContent = skillsMixin.getSkillFileContent;\n\tgetSkillsConfig = skillsMixin.getSkillsConfig;\n\tupdateSkillsConfig = skillsMixin.updateSkillsConfig;\n\n\tgetUsageStats = usageMixin.getUsageStats;\n\tgetGlobalUsageStats = usageMixin.getGlobalUsageStats;\n\n\tgetDictationStatus = dictationMixin.getDictationStatus;\n\tlistDictationModels = dictationMixin.listDictationModels;\n\tinstallDictationModel = dictationMixin.installDictationModel;\n\tremoveDictationModel = dictationMixin.removeDictationModel;\n\tcreateDictationSession = dictationMixin.createDictationSession;\n\tgetDictationModelInstallEventsUrl =\n\t\tdictationMixin.getDictationModelInstallEventsUrl;\n}\n\nexport const apiClient = new ApiClient();\n",
23
23
  "import { useCallback, useEffect, useMemo } from 'react';\nimport { useConfig, useUpdateDefaults } from './useConfig';\nimport { notifyPlatformFontFamilyChanged } from '../lib/platform';\n\ninterface Preferences {\n\tvimMode: boolean;\n\tcompactThread: boolean;\n\tfontFamily: string;\n\tsmartEdges: boolean;\n\treleaseToSend: boolean;\n\tfullWidthContent: boolean;\n}\n\nconst DEFAULT_FONT_FAMILY = 'IBM Plex Mono';\nconst DEFAULT_PREFERENCES: Preferences = {\n\tvimMode: false,\n\tcompactThread: true,\n\tfontFamily: DEFAULT_FONT_FAMILY,\n\tsmartEdges: true,\n\treleaseToSend: false,\n\tfullWidthContent: false,\n};\n\nfunction cssFontFamily(fontFamily: string): string {\n\tconst trimmed = fontFamily.trim();\n\tif (!trimmed || trimmed === DEFAULT_FONT_FAMILY) {\n\t\treturn `\"${DEFAULT_FONT_FAMILY}\", monospace`;\n\t}\n\treturn `\"${trimmed.replaceAll('\"', '\\\\\"')}\", \"${DEFAULT_FONT_FAMILY}\", monospace`;\n}\n\nfunction applyFontFamily(fontFamily: string) {\n\tif (typeof document === 'undefined') {\n\t\treturn;\n\t}\n\tdocument.documentElement.style.setProperty(\n\t\t'--otto-font-family',\n\t\tcssFontFamily(fontFamily),\n\t);\n\tdocument.documentElement.dataset.ottoFontFamily = fontFamily;\n\tif (notifyPlatformFontFamilyChanged(fontFamily)) {\n\t\treturn;\n\t}\n\tif (window.self !== window.top) {\n\t\twindow.parent.postMessage(\n\t\t\t{ type: 'otto-font-family-changed', fontFamily },\n\t\t\t'*',\n\t\t);\n\t}\n}\n\nexport function usePreferences() {\n\tconst { data: config } = useConfig();\n\tconst updateDefaults = useUpdateDefaults();\n\n\tconst resolvedPreferences = useMemo<Preferences>(\n\t\t() => ({\n\t\t\tvimMode: config?.defaults?.vimMode ?? DEFAULT_PREFERENCES.vimMode,\n\t\t\tcompactThread:\n\t\t\t\tconfig?.defaults?.compactThread ?? DEFAULT_PREFERENCES.compactThread,\n\t\t\tfontFamily:\n\t\t\t\tconfig?.defaults?.fontFamily?.trim() || DEFAULT_PREFERENCES.fontFamily,\n\t\t\tsmartEdges:\n\t\t\t\tconfig?.defaults?.smartEdges ?? DEFAULT_PREFERENCES.smartEdges,\n\t\t\treleaseToSend:\n\t\t\t\tconfig?.defaults?.releaseToSend ?? DEFAULT_PREFERENCES.releaseToSend,\n\t\t\tfullWidthContent:\n\t\t\t\tconfig?.defaults?.fullWidthContent ??\n\t\t\t\tDEFAULT_PREFERENCES.fullWidthContent,\n\t\t}),\n\t\t[\n\t\t\tconfig?.defaults?.vimMode,\n\t\t\tconfig?.defaults?.compactThread,\n\t\t\tconfig?.defaults?.fontFamily,\n\t\t\tconfig?.defaults?.smartEdges,\n\t\t\tconfig?.defaults?.releaseToSend,\n\t\t\tconfig?.defaults?.fullWidthContent,\n\t\t],\n\t);\n\n\tuseEffect(() => {\n\t\tapplyFontFamily(resolvedPreferences.fontFamily);\n\t}, [resolvedPreferences.fontFamily]);\n\n\tconst updatePreferences = useCallback(\n\t\t(updates: Partial<Preferences>) => {\n\t\t\tconst nextUpdates: Partial<Preferences> = {};\n\n\t\t\tif (updates.vimMode !== undefined) {\n\t\t\t\tnextUpdates.vimMode = updates.vimMode;\n\t\t\t}\n\t\t\tif (updates.compactThread !== undefined) {\n\t\t\t\tnextUpdates.compactThread = updates.compactThread;\n\t\t\t}\n\t\t\tif (updates.fontFamily !== undefined) {\n\t\t\t\tnextUpdates.fontFamily =\n\t\t\t\t\tupdates.fontFamily.trim() || DEFAULT_FONT_FAMILY;\n\t\t\t}\n\t\t\tif (updates.smartEdges !== undefined) {\n\t\t\t\tnextUpdates.smartEdges = updates.smartEdges;\n\t\t\t}\n\t\t\tif (updates.releaseToSend !== undefined) {\n\t\t\t\tnextUpdates.releaseToSend = updates.releaseToSend;\n\t\t\t}\n\t\t\tif (updates.fullWidthContent !== undefined) {\n\t\t\t\tnextUpdates.fullWidthContent = updates.fullWidthContent;\n\t\t\t}\n\n\t\t\tif (Object.keys(nextUpdates).length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdateDefaults.mutate({ ...nextUpdates, scope: 'global' });\n\t\t},\n\t\t[updateDefaults],\n\t);\n\n\treturn useMemo(\n\t\t() => ({ preferences: resolvedPreferences, updatePreferences }),\n\t\t[resolvedPreferences, updatePreferences],\n\t);\n}\n\nexport type { Preferences };\n",
24
24
  "import { useQuery } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\n\nexport function useFiles(options: { enabled?: boolean; query?: string } = {}) {\n\treturn useQuery({\n\t\tqueryKey: ['files', options.query ?? ''],\n\t\tqueryFn: async () => {\n\t\t\tconst result = await apiClient.searchFiles(options.query ?? '');\n\t\t\treturn result;\n\t\t},\n\t\tenabled: options.enabled ?? true,\n\t\tstaleTime: 10000,\n\t\trefetchOnWindowFocus: true,\n\t\tretry: 1,\n\t});\n}\n",
25
25
  "import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport { useGitStore } from '../stores/gitStore';\n\nexport function useGitStatus() {\n\tconst isExpanded = useGitStore((state) => state.isExpanded);\n\n\treturn useQuery({\n\t\tqueryKey: ['git', 'status'],\n\t\tqueryFn: () => apiClient.getGitStatus(),\n\t\t// Only poll when sidebar is expanded to reduce unnecessary requests\n\t\t// Disabled during active generation to prevent interference\n\t\trefetchInterval: isExpanded ? 5000 : false, // Poll every 5 seconds when expanded\n\t\tretry: 1,\n\t\t// Keep data fresh but don't spam the server\n\t\tstaleTime: 3000,\n\t});\n}\n\nexport function useGitDiff(file: string | null, staged = false) {\n\treturn useQuery({\n\t\tqueryKey: ['git', 'diff', file, staged],\n\t\tqueryFn: () => (file ? apiClient.getGitDiff(file, staged) : null),\n\t\tenabled: !!file,\n\t\tretry: 1,\n\t\t// Don't refetch automatically for diff views\n\t\trefetchInterval: false,\n\t});\n}\n\nexport function useGitBranch() {\n\tconst isExpanded = useGitStore((state) => state.isExpanded);\n\n\treturn useQuery({\n\t\tqueryKey: ['git', 'branch'],\n\t\tqueryFn: () => apiClient.getGitBranch(),\n\t\t// Only poll when sidebar is expanded\n\t\trefetchInterval: isExpanded ? 10000 : false, // Poll every 10 seconds\n\t\tretry: 1,\n\t\tstaleTime: 5000,\n\t});\n}\n\nexport function useGenerateCommitMessage(sessionId?: string | null) {\n\treturn useMutation({\n\t\tmutationFn: () => apiClient.generateCommitMessage(sessionId ?? undefined),\n\t});\n}\n\nexport function useStageFiles() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (files: string[]) => apiClient.stageFiles(files),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t},\n\t});\n}\n\nexport function useUnstageFiles() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (files: string[]) => apiClient.unstageFiles(files),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t},\n\t});\n}\n\nexport function useRestoreFiles() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (files: string[]) => apiClient.restoreFiles(files),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t},\n\t});\n}\n\nexport function useDeleteFiles() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (files: string[]) => apiClient.deleteFiles(files),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t},\n\t});\n}\n\nexport function useCommitChanges() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (message: string) => apiClient.commitChanges(message),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'branch'] });\n\t\t},\n\t});\n}\n\nexport function usePushCommits() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: () => apiClient.pushCommits(),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'branch'] });\n\t\t},\n\t});\n}\n\nexport function usePullChanges() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: () => apiClient.pullChanges(),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'branch'] });\n\t\t},\n\t});\n}\n\nexport function useGitRebaseAction() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (action: 'continue' | 'abort' | 'skip') =>\n\t\t\tapiClient.performRebaseAction(action),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'branch'] });\n\t\t},\n\t});\n}\n\nexport function useGitInit() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: () => apiClient.initGitRepo(),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'branch'] });\n\t\t},\n\t});\n}\n\nexport function useGitRemotes() {\n\tconst isExpanded = useGitStore((state) => state.isExpanded);\n\n\treturn useQuery({\n\t\tqueryKey: ['git', 'remotes'],\n\t\tqueryFn: () => apiClient.getRemotes(),\n\t\tenabled: isExpanded,\n\t\tretry: 1,\n\t\tstaleTime: 10000,\n\t});\n}\n\nexport function useAddRemote() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: ({ name, url }: { name: string; url: string }) =>\n\t\t\tapiClient.addRemote(name, url),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'remotes'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t},\n\t});\n}\n\nexport function useRemoveRemote() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (name: string) => apiClient.removeRemote(name),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'remotes'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t},\n\t});\n}\n\nexport function useGitBranches(enabled = true) {\n\treturn useQuery({\n\t\tqueryKey: ['git', 'branches'],\n\t\tqueryFn: () => apiClient.listGitBranches(),\n\t\tenabled,\n\t\tretry: 1,\n\t\tstaleTime: 5000,\n\t});\n}\n\nexport function useCheckoutBranch() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (branch: string) => apiClient.checkoutBranch(branch),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'branch'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'branches'] });\n\t\t},\n\t});\n}\n\nexport function useCreateGitBranch() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: ({\n\t\t\tname,\n\t\t\tstartPoint,\n\t\t\tcheckout,\n\t\t}: {\n\t\t\tname: string;\n\t\t\tstartPoint?: string;\n\t\t\tcheckout?: boolean;\n\t\t}) => apiClient.createGitBranch(name, { startPoint, checkout }),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'status'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'branch'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['git', 'branches'] });\n\t\t},\n\t});\n}\n",
@@ -34,8 +34,8 @@
34
34
  "import { create } from 'zustand';\nimport type { SessionFileOperation } from '../types/api';\n\nexport interface ToolActivityHighlight {\n\tstartLine?: number;\n\tendLine?: number;\n\treason: 'read' | 'write' | 'apply_patch';\n\tcallId?: string;\n\tstatus: 'streaming' | 'success' | 'error';\n}\n\nexport interface ToolActivityAnnotation {\n\tid: string;\n\treason: 'write' | 'apply_patch';\n\tcallId?: string;\n\tstatus: 'streaming' | 'success' | 'error';\n\tlineTones: Array<[number, 'add' | 'remove']>;\n\tcreatedAt: number;\n}\n\nexport interface ToolChangeCount {\n\tadditions: number;\n\tremovals: number;\n}\n\nexport type ToolPatchPreviewName = 'apply_patch' | 'edit' | 'multiedit';\n\nexport interface ToolPreviewTabInput {\n\tpath: string;\n\ttoolName: 'write' | ToolPatchPreviewName;\n\tcallId?: string;\n\tcontent?: string;\n\tbaseContent?: string;\n\tpatch?: string;\n\tchangedLines?: number[];\n\tpreviewContent?: string;\n\tresultContent?: string;\n\tpreviewLineTones?: Array<[number, 'add' | 'remove']>;\n\tpreviewFirstLine?: number;\n\tpreviewLatestLine?: number;\n\tchangeCount?: ToolChangeCount;\n\tstatus: 'streaming' | 'success' | 'error';\n\terror?: string;\n}\n\nexport type ToolPatchPreview = Omit<\n\tToolPreviewTabInput,\n\t'toolName' | 'content'\n> & {\n\ttoolName: ToolPatchPreviewName;\n};\n\nexport type ToolWritePreview = Omit<\n\tToolPreviewTabInput,\n\t| 'toolName'\n\t| 'baseContent'\n\t| 'patch'\n\t| 'changedLines'\n\t| 'previewContent'\n\t| 'resultContent'\n\t| 'previewLineTones'\n\t| 'previewFirstLine'\n\t| 'previewLatestLine'\n> & {\n\ttoolName: 'write';\n};\n\nexport type ViewerTab =\n\t| {\n\t\t\tid: string;\n\t\t\ttype: 'git-diff';\n\t\t\ttitle: string;\n\t\t\tpath: string;\n\t\t\tstaged: boolean;\n\t }\n\t| {\n\t\t\tid: string;\n\t\t\ttype: 'session-file-diff';\n\t\t\ttitle: string;\n\t\t\tpath: string;\n\t\t\toperations: SessionFileOperation[];\n\t\t\tselectedOperationIndex: number;\n\t }\n\t| {\n\t\t\tid: string;\n\t\t\ttype: 'file';\n\t\t\ttitle: string;\n\t\t\tpath: string;\n\t\t\thighlight?: ToolActivityHighlight;\n\t\t\tannotations?: ToolActivityAnnotation[];\n\t\t\tpatchPreview?: ToolPatchPreview;\n\t\t\twritePreview?: ToolWritePreview;\n\t }\n\t| {\n\t\t\tid: string;\n\t\t\ttype: 'tool-preview';\n\t\t\ttitle: string;\n\t\t\tpath: string;\n\t\t\ttoolName: 'write' | ToolPatchPreviewName;\n\t\t\tcallId?: string;\n\t\t\tcontent?: string;\n\t\t\tbaseContent?: string;\n\t\t\tpatch?: string;\n\t\t\tchangedLines?: number[];\n\t\t\tpreviewContent?: string;\n\t\t\tresultContent?: string;\n\t\t\tpreviewLineTones?: Array<[number, 'add' | 'remove']>;\n\t\t\tpreviewFirstLine?: number;\n\t\t\tpreviewLatestLine?: number;\n\t\t\tchangeCount?: ToolChangeCount;\n\t\t\tstatus: 'streaming' | 'success' | 'error';\n\t\t\terror?: string;\n\t }\n\t| {\n\t\t\tid: string;\n\t\t\ttype: 'skill-file';\n\t\t\ttitle: string;\n\t\t\tskill: string;\n\t\t\tfile: string | null;\n\t }\n\t| {\n\t\t\tid: string;\n\t\t\ttype: 'browser';\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\tkind: 'browser' | 'simulator';\n\t\t\treloadKey: number;\n\t };\n\nexport type ViewerMode = 'work' | 'preview';\n\ninterface ViewerTabsState {\n\ttabs: ViewerTab[];\n\tactiveTabId: string | null;\n\tactiveMode: ViewerMode;\n\tactiveWorkTabId: string | null;\n\tactivePreviewTabId: string | null;\n\tfollowToolActivity: boolean;\n\ttoggleFollowToolActivity: () => void;\n\tsetFollowToolActivity: (enabled: boolean) => void;\n\tsetViewerMode: (mode: ViewerMode) => void;\n\topenGitDiffTab: (path: string, staged: boolean) => void;\n\topenSessionFileDiffTab: (\n\t\tpath: string,\n\t\toperations: SessionFileOperation[],\n\t) => void;\n\topenFileTab: (path: string) => void;\n\topenToolReadTab: (path: string, highlight: ToolActivityHighlight) => void;\n\topenToolPreviewTab: (preview: ToolPreviewTabInput) => void;\n\topenSkillFileTab: (skill: string, file: string | null) => void;\n\topenBrowserTab: (\n\t\turl?: string,\n\t\toptions?: {\n\t\t\tkind?: 'browser' | 'simulator';\n\t\t\ttitle?: string;\n\t\t\tnewTab?: boolean;\n\t\t},\n\t) => void;\n\tupdateBrowserTabUrl: (id: string, url: string) => void;\n\treloadBrowserTab: (id: string) => void;\n\tsetActiveTab: (id: string) => void;\n\tcloseTab: (id: string) => void;\n\tupdateSessionFileOperationIndex: (id: string, index: number) => void;\n\tcloseAllTabs: () => void;\n}\n\nfunction titleFromPath(path: string): string {\n\treturn path.split('/').pop() || path;\n}\n\nfunction normalizeViewerPath(path: string): string {\n\treturn path\n\t\t.trim()\n\t\t.replace(/^a\\//, '')\n\t\t.replace(/^b\\//, '')\n\t\t.replace(/^\\.\\//, '')\n\t\t.replace(/\\/+/g, '/')\n\t\t.replace(/\\/+$/, '');\n}\n\nfunction viewerPathsMatch(left: string, right: string): boolean {\n\tconst normalizedLeft = normalizeViewerPath(left);\n\tconst normalizedRight = normalizeViewerPath(right);\n\treturn (\n\t\tnormalizedLeft === normalizedRight ||\n\t\tnormalizedLeft.endsWith(`/${normalizedRight}`) ||\n\t\tnormalizedRight.endsWith(`/${normalizedLeft}`)\n\t);\n}\n\nfunction fileTabId(path: string): string {\n\treturn `file:${normalizeViewerPath(path)}`;\n}\n\nfunction browserTabId(kind: 'browser' | 'simulator'): string {\n\treturn `browser:${kind}`;\n}\n\nfunction newBrowserTabId(): string {\n\treturn `browser:browser:${Date.now()}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction modeForTab(tab: ViewerTab): ViewerMode {\n\treturn tab.type === 'browser' ? 'preview' : 'work';\n}\n\nfunction findFallbackTabId(\n\ttabs: ViewerTab[],\n\tmode: ViewerMode,\n\tclosingIndex: number,\n): string | null {\n\tconst next = tabs.slice(closingIndex).find((tab) => modeForTab(tab) === mode);\n\tif (next) return next.id;\n\tconst previous = [...tabs]\n\t\t.slice(0, closingIndex)\n\t\t.reverse()\n\t\t.find((tab) => modeForTab(tab) === mode);\n\treturn previous?.id ?? null;\n}\n\nfunction activeIdForWorkUpdate(\n\tstate: ViewerTabsState,\n\ttargetId: string,\n): string {\n\treturn state.activeMode === 'preview' && state.activePreviewTabId\n\t\t? state.activePreviewTabId\n\t\t: targetId;\n}\n\nfunction upsertTab(tabs: ViewerTab[], tab: ViewerTab): ViewerTab[] {\n\tconst existingIndex = tabs.findIndex((item) => item.id === tab.id);\n\tif (existingIndex === -1) {\n\t\treturn [...tabs, tab];\n\t}\n\n\tconst next = [...tabs];\n\tnext[existingIndex] = tab;\n\treturn next;\n}\n\nfunction isPatchPreviewTool(\n\ttoolName: ToolPreviewTabInput['toolName'],\n): toolName is ToolPatchPreviewName {\n\treturn (\n\t\ttoolName === 'apply_patch' ||\n\t\ttoolName === 'edit' ||\n\t\ttoolName === 'multiedit'\n\t);\n}\n\nfunction isSamePatchCall(\n\texisting: Pick<ToolPatchPreview, 'callId' | 'patch' | 'status'> | undefined,\n\tpreview: Pick<ToolPreviewTabInput, 'callId' | 'patch' | 'status'>,\n): boolean {\n\tif (!existing) return false;\n\tif (preview.callId || existing.callId) {\n\t\treturn Boolean(preview.callId && existing.callId === preview.callId);\n\t}\n\tif (preview.status === 'streaming' && existing.status !== 'streaming') {\n\t\treturn false;\n\t}\n\tif (!preview.patch || !existing.patch) return existing.status === 'streaming';\n\treturn (\n\t\tpreview.patch === existing.patch ||\n\t\tpreview.patch.startsWith(existing.patch) ||\n\t\texisting.patch.startsWith(preview.patch)\n\t);\n}\n\nfunction mergeChangedLines(\n\texisting: number[] | undefined,\n\tincoming: number[] | undefined,\n): number[] | undefined {\n\tif (!existing?.length) return incoming;\n\tif (!incoming?.length) return existing;\n\treturn [...new Set([...existing, ...incoming])].sort((a, b) => a - b);\n}\n\nfunction countContentLines(content: string): number {\n\treturn content.length === 0 ? 1 : content.split('\\n').length;\n}\n\nfunction annotationId(\n\tpreview: ToolPreviewTabInput,\n\ttargetPath: string,\n): string {\n\treturn `${preview.toolName}:${preview.callId ?? `${normalizeViewerPath(targetPath)}:${preview.patch ?? preview.content ?? ''}`}`;\n}\n\nfunction buildAnnotation(\n\tpreview: ToolPreviewTabInput,\n\ttargetPath: string,\n\texisting?: ToolActivityAnnotation,\n): ToolActivityAnnotation | undefined {\n\tif (preview.status === 'error') return existing;\n\tconst id = annotationId(preview, targetPath);\n\tif (preview.toolName === 'write') {\n\t\tconst content = preview.content;\n\t\tif (content === undefined) return existing;\n\t\treturn {\n\t\t\tid,\n\t\t\treason: 'write',\n\t\t\tcallId: preview.callId,\n\t\t\tstatus: preview.status,\n\t\t\tlineTones: Array.from(\n\t\t\t\t{ length: countContentLines(content) },\n\t\t\t\t(_, index) => [index + 1, 'add' as const],\n\t\t\t),\n\t\t\tcreatedAt: existing?.createdAt ?? Date.now(),\n\t\t};\n\t}\n\n\tconst lineTones: Array<[number, 'add' | 'remove']> | undefined = preview\n\t\t.previewLineTones?.length\n\t\t? preview.previewLineTones\n\t\t: preview.changedLines?.length\n\t\t\t? preview.changedLines.map((line) => [line, 'add'])\n\t\t\t: existing?.lineTones;\n\tif (!lineTones?.length) return existing;\n\treturn {\n\t\tid,\n\t\treason: 'apply_patch',\n\t\tcallId: preview.callId,\n\t\tstatus: preview.status,\n\t\tlineTones,\n\t\tcreatedAt: existing?.createdAt ?? Date.now(),\n\t};\n}\n\nfunction upsertAnnotation(\n\tannotations: ToolActivityAnnotation[] | undefined,\n\tannotation: ToolActivityAnnotation | undefined,\n): ToolActivityAnnotation[] | undefined {\n\tif (!annotation) return annotations;\n\tconst existing = annotations ?? [];\n\tconst index = existing.findIndex((item) => item.id === annotation.id);\n\tif (index === -1) return [...existing, annotation];\n\tconst next = [...existing];\n\tnext[index] = annotation;\n\treturn next;\n}\n\nexport const useViewerTabsStore = create<ViewerTabsState>((set) => ({\n\ttabs: [],\n\tactiveTabId: null,\n\tactiveMode: 'work',\n\tactiveWorkTabId: null,\n\tactivePreviewTabId: null,\n\tfollowToolActivity: false,\n\n\ttoggleFollowToolActivity: () =>\n\t\tset((state) => ({ followToolActivity: !state.followToolActivity })),\n\n\tsetFollowToolActivity: (enabled) => set({ followToolActivity: enabled }),\n\n\tsetViewerMode: (mode) =>\n\t\tset((state) => {\n\t\t\tconst activeTabId =\n\t\t\t\tmode === 'preview' ? state.activePreviewTabId : state.activeWorkTabId;\n\t\t\treturn {\n\t\t\t\tactiveMode: mode,\n\t\t\t\tactiveTabId: activeTabId ?? null,\n\t\t\t};\n\t\t}),\n\n\topenGitDiffTab: (path, staged) => {\n\t\tconst id = `git-diff:${staged ? 'staged' : 'unstaged'}:${path}`;\n\t\tset((state) => ({\n\t\t\ttabs: upsertTab(state.tabs, {\n\t\t\t\tid,\n\t\t\t\ttype: 'git-diff',\n\t\t\t\ttitle: titleFromPath(path),\n\t\t\t\tpath,\n\t\t\t\tstaged,\n\t\t\t}),\n\t\t\tactiveMode: 'work',\n\t\t\tactiveWorkTabId: id,\n\t\t\tactiveTabId: id,\n\t\t}));\n\t},\n\n\topenSessionFileDiffTab: (path, operations) => {\n\t\tconst id = `session-file-diff:${path}`;\n\t\tset((state) => ({\n\t\t\ttabs: upsertTab(state.tabs, {\n\t\t\t\tid,\n\t\t\t\ttype: 'session-file-diff',\n\t\t\t\ttitle: titleFromPath(path),\n\t\t\t\tpath,\n\t\t\t\toperations,\n\t\t\t\tselectedOperationIndex: Math.max(0, operations.length - 1),\n\t\t\t}),\n\t\t\tactiveMode: 'work',\n\t\t\tactiveWorkTabId: id,\n\t\t\tactiveTabId: id,\n\t\t}));\n\t},\n\n\topenFileTab: (path) => {\n\t\tconst id = fileTabId(path);\n\t\tset((state) => {\n\t\t\tconst matchingFileTabs = state.tabs.filter(\n\t\t\t\t(tab): tab is Extract<ViewerTab, { type: 'file' }> =>\n\t\t\t\t\ttab.type === 'file' && viewerPathsMatch(tab.path, path),\n\t\t\t);\n\t\t\tconst existingFile =\n\t\t\t\tmatchingFileTabs.find((tab) => tab.id === state.activeTabId) ??\n\t\t\t\tmatchingFileTabs[0];\n\t\t\tconst targetId = existingFile?.id ?? id;\n\t\t\tconst targetPath = existingFile?.path ?? path;\n\t\t\tconst tabs = state.tabs.filter(\n\t\t\t\t(tab) =>\n\t\t\t\t\t!(\n\t\t\t\t\t\t(tab.type === 'tool-preview' || tab.type === 'file') &&\n\t\t\t\t\t\ttab.id !== targetId &&\n\t\t\t\t\t\tviewerPathsMatch(tab.path, path)\n\t\t\t\t\t),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttabs: upsertTab(tabs, {\n\t\t\t\t\tid: targetId,\n\t\t\t\t\ttype: 'file',\n\t\t\t\t\ttitle: existingFile?.title ?? titleFromPath(targetPath),\n\t\t\t\t\tpath: targetPath,\n\t\t\t\t\thighlight: existingFile?.highlight,\n\t\t\t\t\tannotations: existingFile?.annotations,\n\t\t\t\t\tpatchPreview: existingFile?.patchPreview,\n\t\t\t\t\twritePreview: existingFile?.writePreview,\n\t\t\t\t}),\n\t\t\t\tactiveMode: 'work',\n\t\t\t\tactiveWorkTabId: targetId,\n\t\t\t\tactiveTabId: targetId,\n\t\t\t};\n\t\t});\n\t},\n\n\topenToolReadTab: (path, highlight) => {\n\t\tconst id = fileTabId(path);\n\t\tset((state) => {\n\t\t\tconst matchingFileTabs = state.tabs.filter(\n\t\t\t\t(tab): tab is Extract<ViewerTab, { type: 'file' }> =>\n\t\t\t\t\ttab.type === 'file' && viewerPathsMatch(tab.path, path),\n\t\t\t);\n\t\t\tconst existingFile =\n\t\t\t\tmatchingFileTabs.find((tab) => tab.id === state.activeTabId) ??\n\t\t\t\tmatchingFileTabs[0];\n\t\t\tconst targetId = existingFile?.id ?? id;\n\t\t\tconst targetPath = existingFile?.path ?? path;\n\t\t\tconst tabs = state.tabs.filter(\n\t\t\t\t(tab) =>\n\t\t\t\t\t!(\n\t\t\t\t\t\t(tab.type === 'tool-preview' || tab.type === 'file') &&\n\t\t\t\t\t\ttab.id !== targetId &&\n\t\t\t\t\t\tviewerPathsMatch(tab.path, path)\n\t\t\t\t\t),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttabs: upsertTab(tabs, {\n\t\t\t\t\tid: targetId,\n\t\t\t\t\ttype: 'file',\n\t\t\t\t\ttitle: existingFile?.title ?? titleFromPath(targetPath),\n\t\t\t\t\tpath: targetPath,\n\t\t\t\t\thighlight,\n\t\t\t\t\tannotations: existingFile?.annotations,\n\t\t\t\t\tpatchPreview: undefined,\n\t\t\t\t\twritePreview: undefined,\n\t\t\t\t}),\n\t\t\t\tactiveWorkTabId: targetId,\n\t\t\t\tactiveTabId: activeIdForWorkUpdate(state, targetId),\n\t\t\t};\n\t\t});\n\t},\n\n\topenToolPreviewTab: (preview) => {\n\t\tconst id = fileTabId(preview.path);\n\t\tset((state) => {\n\t\t\tconst matchingFileTabs = state.tabs.filter(\n\t\t\t\t(tab): tab is Extract<ViewerTab, { type: 'file' }> =>\n\t\t\t\t\ttab.type === 'file' && viewerPathsMatch(tab.path, preview.path),\n\t\t\t);\n\t\t\tconst existingFile =\n\t\t\t\tmatchingFileTabs.find((tab) => tab.id === state.activeTabId) ??\n\t\t\t\tmatchingFileTabs[0];\n\t\t\tconst targetId = existingFile?.id ?? id;\n\t\t\tconst targetPath = existingFile?.path ?? preview.path;\n\t\t\tconst existing = state.tabs.find(\n\t\t\t\t(tab): tab is Extract<ViewerTab, { type: 'tool-preview' }> =>\n\t\t\t\t\ttab.type === 'tool-preview' &&\n\t\t\t\t\tviewerPathsMatch(tab.path, preview.path),\n\t\t\t);\n\t\t\tconst tabs = state.tabs.filter(\n\t\t\t\t(tab) =>\n\t\t\t\t\t!(\n\t\t\t\t\t\t(tab.type === 'tool-preview' || tab.type === 'file') &&\n\t\t\t\t\t\ttab.id !== targetId &&\n\t\t\t\t\t\t(viewerPathsMatch(tab.path, preview.path) ||\n\t\t\t\t\t\t\tBoolean(\n\t\t\t\t\t\t\t\tpreview.callId &&\n\t\t\t\t\t\t\t\t\t'toolName' in tab &&\n\t\t\t\t\t\t\t\t\ttab.callId === preview.callId,\n\t\t\t\t\t\t\t))\n\t\t\t\t\t),\n\t\t\t);\n\t\t\tif (isPatchPreviewTool(preview.toolName)) {\n\t\t\t\tconst existingPatchPreview =\n\t\t\t\t\texistingFile?.patchPreview ??\n\t\t\t\t\t(existing && isPatchPreviewTool(existing.toolName)\n\t\t\t\t\t\t? existing\n\t\t\t\t\t\t: undefined);\n\t\t\t\tconst samePatchCall = isSamePatchCall(existingPatchPreview, preview);\n\t\t\t\tconst baseContent =\n\t\t\t\t\tpreview.baseContent ??\n\t\t\t\t\t(samePatchCall\n\t\t\t\t\t\t? existingPatchPreview?.baseContent\n\t\t\t\t\t\t: (existingPatchPreview?.resultContent ??\n\t\t\t\t\t\t\texistingPatchPreview?.baseContent));\n\t\t\t\tconst changedLines = samePatchCall\n\t\t\t\t\t? (preview.changedLines ?? existingPatchPreview?.changedLines)\n\t\t\t\t\t: mergeChangedLines(\n\t\t\t\t\t\t\texistingPatchPreview?.changedLines,\n\t\t\t\t\t\t\tpreview.changedLines,\n\t\t\t\t\t\t);\n\t\t\t\tconst annotationPreview = {\n\t\t\t\t\t...preview,\n\t\t\t\t\tchangedLines: preview.changedLines,\n\t\t\t\t};\n\t\t\t\tconst existingAnnotation = existingFile?.annotations?.find(\n\t\t\t\t\t(annotation) =>\n\t\t\t\t\t\tannotation.id === annotationId(annotationPreview, targetPath),\n\t\t\t\t);\n\t\t\t\tconst annotations = upsertAnnotation(\n\t\t\t\t\texistingFile?.annotations,\n\t\t\t\t\tbuildAnnotation(annotationPreview, targetPath, existingAnnotation),\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\ttabs: upsertTab(tabs, {\n\t\t\t\t\t\tid: targetId,\n\t\t\t\t\t\ttype: 'file',\n\t\t\t\t\t\ttitle: existingFile?.title ?? titleFromPath(targetPath),\n\t\t\t\t\t\tpath: targetPath,\n\t\t\t\t\t\thighlight: undefined,\n\t\t\t\t\t\tannotations,\n\t\t\t\t\t\twritePreview: undefined,\n\t\t\t\t\t\tpatchPreview: {\n\t\t\t\t\t\t\tpath: targetPath,\n\t\t\t\t\t\t\ttoolName: preview.toolName,\n\t\t\t\t\t\t\tcallId: preview.callId ?? existingPatchPreview?.callId,\n\t\t\t\t\t\t\tbaseContent,\n\t\t\t\t\t\t\tpatch: preview.patch ?? existingPatchPreview?.patch,\n\t\t\t\t\t\t\tchangedLines,\n\t\t\t\t\t\t\tpreviewContent:\n\t\t\t\t\t\t\t\tpreview.previewContent ??\n\t\t\t\t\t\t\t\t(samePatchCall\n\t\t\t\t\t\t\t\t\t? existingPatchPreview?.previewContent\n\t\t\t\t\t\t\t\t\t: undefined),\n\t\t\t\t\t\t\tresultContent:\n\t\t\t\t\t\t\t\tpreview.resultContent ??\n\t\t\t\t\t\t\t\t(samePatchCall\n\t\t\t\t\t\t\t\t\t? existingPatchPreview?.resultContent\n\t\t\t\t\t\t\t\t\t: undefined),\n\t\t\t\t\t\t\tpreviewLineTones:\n\t\t\t\t\t\t\t\tpreview.previewLineTones ??\n\t\t\t\t\t\t\t\t(samePatchCall\n\t\t\t\t\t\t\t\t\t? existingPatchPreview?.previewLineTones\n\t\t\t\t\t\t\t\t\t: undefined),\n\t\t\t\t\t\t\tpreviewFirstLine:\n\t\t\t\t\t\t\t\tpreview.previewFirstLine ??\n\t\t\t\t\t\t\t\t(samePatchCall\n\t\t\t\t\t\t\t\t\t? existingPatchPreview?.previewFirstLine\n\t\t\t\t\t\t\t\t\t: undefined),\n\t\t\t\t\t\t\tpreviewLatestLine:\n\t\t\t\t\t\t\t\tpreview.previewLatestLine ??\n\t\t\t\t\t\t\t\t(samePatchCall\n\t\t\t\t\t\t\t\t\t? existingPatchPreview?.previewLatestLine\n\t\t\t\t\t\t\t\t\t: undefined),\n\t\t\t\t\t\t\tstatus: preview.status,\n\t\t\t\t\t\t\terror: preview.error ?? existingPatchPreview?.error,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tactiveWorkTabId: targetId,\n\t\t\t\t\tactiveTabId: activeIdForWorkUpdate(state, targetId),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (existingFile) {\n\t\t\t\tconst existingWritePreview = existingFile.writePreview;\n\t\t\t\tconst existingAnnotation = existingFile.annotations?.find(\n\t\t\t\t\t(annotation) => annotation.id === annotationId(preview, targetPath),\n\t\t\t\t);\n\t\t\t\tconst annotations = upsertAnnotation(\n\t\t\t\t\texistingFile.annotations,\n\t\t\t\t\tbuildAnnotation(preview, targetPath, existingAnnotation),\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\ttabs: upsertTab(tabs, {\n\t\t\t\t\t\t...existingFile,\n\t\t\t\t\t\thighlight: undefined,\n\t\t\t\t\t\tannotations,\n\t\t\t\t\t\tpatchPreview: undefined,\n\t\t\t\t\t\twritePreview: {\n\t\t\t\t\t\t\tpath: targetPath,\n\t\t\t\t\t\t\ttoolName: 'write',\n\t\t\t\t\t\t\tcallId: preview.callId ?? existingWritePreview?.callId,\n\t\t\t\t\t\t\tcontent: preview.content ?? existingWritePreview?.content,\n\t\t\t\t\t\t\tchangeCount:\n\t\t\t\t\t\t\t\tpreview.changeCount ?? existingWritePreview?.changeCount,\n\t\t\t\t\t\t\tstatus: preview.status,\n\t\t\t\t\t\t\terror: preview.error ?? existingWritePreview?.error,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tactiveWorkTabId: targetId,\n\t\t\t\t\tactiveTabId: activeIdForWorkUpdate(state, targetId),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst existingWrite =\n\t\t\t\texisting?.toolName === 'write' ? existing : undefined;\n\t\t\tconst annotation = buildAnnotation(preview, preview.path);\n\t\t\treturn {\n\t\t\t\ttabs: upsertTab(tabs, {\n\t\t\t\t\tid,\n\t\t\t\t\ttype: 'file',\n\t\t\t\t\ttitle: titleFromPath(preview.path),\n\t\t\t\t\tpath: preview.path,\n\t\t\t\t\thighlight: undefined,\n\t\t\t\t\tannotations: annotation ? [annotation] : undefined,\n\t\t\t\t\tpatchPreview: undefined,\n\t\t\t\t\twritePreview: {\n\t\t\t\t\t\tpath: preview.path,\n\t\t\t\t\t\ttoolName: 'write',\n\t\t\t\t\t\tcallId: preview.callId,\n\t\t\t\t\t\tcontent: preview.content ?? existingWrite?.content,\n\t\t\t\t\t\tchangeCount: preview.changeCount ?? existingWrite?.changeCount,\n\t\t\t\t\t\tstatus: preview.status,\n\t\t\t\t\t\terror: preview.error ?? existingWrite?.error,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tactiveWorkTabId: id,\n\t\t\t\tactiveTabId: activeIdForWorkUpdate(state, id),\n\t\t\t};\n\t\t});\n\t},\n\n\topenSkillFileTab: (skill, file) => {\n\t\tconst displayFile = file ?? 'SKILL.md';\n\t\tconst id = `skill-file:${skill}:${displayFile}`;\n\t\tset((state) => ({\n\t\t\ttabs: upsertTab(state.tabs, {\n\t\t\t\tid,\n\t\t\t\ttype: 'skill-file',\n\t\t\t\ttitle: titleFromPath(displayFile),\n\t\t\t\tskill,\n\t\t\t\tfile,\n\t\t\t}),\n\t\t\tactiveMode: 'work',\n\t\t\tactiveWorkTabId: id,\n\t\t\tactiveTabId: id,\n\t\t}));\n\t},\n\n\topenBrowserTab: (url = '', options = {}) => {\n\t\tconst kind = options.kind ?? 'browser';\n\t\tset((state) => {\n\t\t\tconst shouldCreate = kind === 'browser' && options.newTab === true;\n\t\t\tconst id = shouldCreate ? newBrowserTabId() : browserTabId(kind);\n\t\t\tconst existing = state.tabs.find(\n\t\t\t\t(tab): tab is Extract<ViewerTab, { type: 'browser' }> =>\n\t\t\t\t\t!shouldCreate && tab.type === 'browser' && tab.id === id,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttabs: upsertTab(state.tabs, {\n\t\t\t\t\tid,\n\t\t\t\t\ttype: 'browser',\n\t\t\t\t\ttitle: options.title ?? existing?.title ?? 'Browser',\n\t\t\t\t\turl: url || existing?.url || '',\n\t\t\t\t\tkind,\n\t\t\t\t\treloadKey: existing?.reloadKey ?? 0,\n\t\t\t\t}),\n\t\t\t\tactiveMode: 'preview',\n\t\t\t\tactivePreviewTabId: id,\n\t\t\t\tactiveTabId: id,\n\t\t\t};\n\t\t});\n\t},\n\n\tupdateBrowserTabUrl: (id, url) =>\n\t\tset((state) => ({\n\t\t\ttabs: state.tabs.map((tab) =>\n\t\t\t\ttab.id === id && tab.type === 'browser'\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...tab,\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\ttitle: tab.kind === 'simulator' ? 'Simulator' : 'Browser',\n\t\t\t\t\t\t}\n\t\t\t\t\t: tab,\n\t\t\t),\n\t\t})),\n\n\treloadBrowserTab: (id) =>\n\t\tset((state) => ({\n\t\t\ttabs: state.tabs.map((tab) =>\n\t\t\t\ttab.id === id && tab.type === 'browser'\n\t\t\t\t\t? { ...tab, reloadKey: tab.reloadKey + 1 }\n\t\t\t\t\t: tab,\n\t\t\t),\n\t\t})),\n\n\tsetActiveTab: (id) =>\n\t\tset((state) => {\n\t\t\tconst tab = state.tabs.find((item) => item.id === id);\n\t\t\tconst mode = tab ? modeForTab(tab) : state.activeMode;\n\t\t\treturn {\n\t\t\t\tactiveMode: mode,\n\t\t\t\tactiveWorkTabId: mode === 'work' ? id : state.activeWorkTabId,\n\t\t\t\tactivePreviewTabId: mode === 'preview' ? id : state.activePreviewTabId,\n\t\t\t\tactiveTabId: id,\n\t\t\t};\n\t\t}),\n\n\tcloseTab: (id) =>\n\t\tset((state) => {\n\t\t\tconst closingIndex = state.tabs.findIndex((tab) => tab.id === id);\n\t\t\tconst closingTab = state.tabs[closingIndex];\n\t\t\tconst tabs = state.tabs.filter((tab) => tab.id !== id);\n\t\t\tlet activeMode = state.activeMode;\n\t\t\tlet activeWorkTabId = state.activeWorkTabId;\n\t\t\tlet activePreviewTabId = state.activePreviewTabId;\n\n\t\t\tif (\n\t\t\t\tclosingTab &&\n\t\t\t\tmodeForTab(closingTab) === 'work' &&\n\t\t\t\tactiveWorkTabId === id\n\t\t\t) {\n\t\t\t\tactiveWorkTabId = findFallbackTabId(tabs, 'work', closingIndex);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tclosingTab &&\n\t\t\t\tmodeForTab(closingTab) === 'preview' &&\n\t\t\t\tactivePreviewTabId === id\n\t\t\t) {\n\t\t\t\tactivePreviewTabId = findFallbackTabId(tabs, 'preview', closingIndex);\n\t\t\t}\n\n\t\t\tif (activeMode === 'work' && !activeWorkTabId && activePreviewTabId) {\n\t\t\t\tactiveMode = 'preview';\n\t\t\t}\n\n\t\t\tif (activeMode === 'preview' && !activePreviewTabId && activeWorkTabId) {\n\t\t\t\tactiveMode = 'work';\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttabs,\n\t\t\t\tactiveMode,\n\t\t\t\tactiveWorkTabId,\n\t\t\t\tactivePreviewTabId,\n\t\t\t\tactiveTabId:\n\t\t\t\t\tactiveMode === 'preview' ? activePreviewTabId : activeWorkTabId,\n\t\t\t};\n\t\t}),\n\n\tupdateSessionFileOperationIndex: (id, index) =>\n\t\tset((state) => ({\n\t\t\ttabs: state.tabs.map((tab) =>\n\t\t\t\ttab.id === id && tab.type === 'session-file-diff'\n\t\t\t\t\t? { ...tab, selectedOperationIndex: index }\n\t\t\t\t\t: tab,\n\t\t\t),\n\t\t})),\n\n\tcloseAllTabs: () =>\n\t\tset({\n\t\t\ttabs: [],\n\t\t\tactiveTabId: null,\n\t\t\tactiveMode: 'work',\n\t\t\tactiveWorkTabId: null,\n\t\t\tactivePreviewTabId: null,\n\t\t}),\n}));\n",
35
35
  "import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport type { SendMessageRequest } from '../types/api';\nimport { optimisticallyQueueMessage } from './useQueueState';\nimport { sessionsQueryKey } from './useSessions';\n\ninterface UseMessagesOptions {\n\tenabled?: boolean;\n\tstaleTime?: number;\n}\n\nexport function useMessages(\n\tsessionId: string | undefined,\n\toptions: UseMessagesOptions = {},\n) {\n\tconst { enabled = true, staleTime = 15_000 } = options;\n\n\treturn useQuery({\n\t\tqueryKey: ['messages', sessionId],\n\t\tqueryFn: () => {\n\t\t\tif (!sessionId) {\n\t\t\t\tthrow new Error('Session ID is required');\n\t\t\t}\n\t\t\treturn apiClient.getMessages(sessionId);\n\t\t},\n\t\tenabled: !!sessionId && enabled,\n\t\tstaleTime,\n\t\trefetchOnWindowFocus: false,\n\t});\n}\n\nexport function useSendMessage(sessionId: string) {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: async (data: SendMessageRequest) => {\n\t\t\tawait apiClient.markSessionViewed(sessionId).catch(() => undefined);\n\t\t\treturn apiClient.sendMessage(sessionId, data);\n\t\t},\n\t\tonSuccess: (result) => {\n\t\t\toptimisticallyQueueMessage(queryClient, sessionId, result.messageId);\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['messages', sessionId] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t},\n\t});\n}\n",
36
36
  "import { useQuery, type QueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\n\nexport type QueueState = {\n\tcurrentMessageId: string | null;\n\tqueuedMessages: Array<{ messageId: string; position: number }>;\n\tqueueLength: number;\n\tisRunning: boolean;\n};\n\nconst defaultQueueState: QueueState = {\n\tcurrentMessageId: null,\n\tqueuedMessages: [],\n\tqueueLength: 0,\n\tisRunning: false,\n};\n\nexport function normalizeQueueState(state: {\n\tcurrentMessageId: string | null;\n\tqueuedMessages: Array<{ messageId: string; position: number }>;\n\tisRunning?: boolean;\n}): QueueState {\n\tconst isRunning = state.isRunning ?? Boolean(state.currentMessageId);\n\tconst currentMessageId = isRunning ? state.currentMessageId : null;\n\tconst hasActiveTurn = Boolean(currentMessageId);\n\tconst queuedMessages = hasActiveTurn ? state.queuedMessages : [];\n\n\treturn {\n\t\tcurrentMessageId,\n\t\tqueuedMessages,\n\t\tqueueLength: queuedMessages.length,\n\t\tisRunning: hasActiveTurn,\n\t};\n}\n\nexport function optimisticallyQueueMessage(\n\tqueryClient: QueryClient,\n\tsessionId: string,\n\tmessageId: string,\n) {\n\tqueryClient.setQueryData<QueueState>(['queueState', sessionId], (current) => {\n\t\tif (!current) return current;\n\t\tif (!current.isRunning || !current.currentMessageId) return current;\n\t\tif (current.currentMessageId === messageId) return current;\n\t\tif (current.queuedMessages.some((item) => item.messageId === messageId)) {\n\t\t\treturn current;\n\t\t}\n\n\t\tconst queuedMessages = [\n\t\t\t...current.queuedMessages,\n\t\t\t{ messageId, position: current.queuedMessages.length },\n\t\t];\n\t\treturn {\n\t\t\t...current,\n\t\t\tqueuedMessages,\n\t\t\tqueueLength: queuedMessages.length,\n\t\t};\n\t});\n}\n\nexport function useQueueState(sessionId: string | undefined): QueueState {\n\tconst { data } = useQuery<QueueState>({\n\t\tqueryKey: ['queueState', sessionId],\n\t\tqueryFn: async () => {\n\t\t\tif (!sessionId) return defaultQueueState;\n\t\t\tconst queueState = await apiClient.getQueueState(sessionId);\n\t\t\treturn normalizeQueueState(queueState);\n\t\t},\n\t\tenabled: !!sessionId,\n\t\tplaceholderData: defaultQueueState,\n\t\tstaleTime: Infinity,\n\t});\n\n\treturn data ?? defaultQueueState;\n}\n\nexport function useMessageQueuePosition(\n\tsessionId: string | undefined,\n\tmessageId: string,\n): { isQueued: boolean; isRunning: boolean; position: number | null } {\n\tconst queueState = useQueueState(sessionId);\n\n\tif (!sessionId || !queueState) {\n\t\treturn { isQueued: false, isRunning: false, position: null };\n\t}\n\n\tif (queueState.currentMessageId === messageId) {\n\t\treturn { isQueued: false, isRunning: true, position: null };\n\t}\n\n\tconst queuedItem = queueState.queuedMessages.find(\n\t\t(item) => item.messageId === messageId,\n\t);\n\n\tif (queuedItem) {\n\t\treturn { isQueued: true, isRunning: false, position: queuedItem.position };\n\t}\n\n\treturn { isQueued: false, isRunning: false, position: null };\n}\n",
37
- "import {\n\tuseInfiniteQuery,\n\tuseMutation,\n\tuseQueryClient,\n} from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { apiClient } from '../lib/api-client';\nimport type {\n\tCreateSessionRequest,\n\tUpdateSessionRequest,\n\tSession,\n\tSessionsPage,\n} from '../types/api';\n\nconst SESSIONS_PAGE_SIZE = 50;\n\nexport const sessionsQueryKey = ['sessions', 'list'] as const;\n\nexport function useSessionsInfinite() {\n\treturn useInfiniteQuery({\n\t\tqueryKey: sessionsQueryKey,\n\t\tqueryFn: ({ pageParam = 0 }) =>\n\t\t\tapiClient.getSessionsPage({\n\t\t\t\tlimit: SESSIONS_PAGE_SIZE,\n\t\t\t\toffset: pageParam,\n\t\t\t}),\n\t\tgetNextPageParam: (lastPage) => lastPage.nextOffset ?? undefined,\n\t\tinitialPageParam: 0,\n\t\tstaleTime: 30_000,\n\t\trefetchInterval: 30_000,\n\t\trefetchOnWindowFocus: false,\n\t});\n}\n\nexport function useSessions() {\n\tconst query = useSessionsInfinite();\n\tconst data = useMemo<Session[]>(() => {\n\t\tif (!query.data?.pages) return [];\n\t\treturn query.data.pages.flatMap((p) => p.items ?? []);\n\t}, [query.data]);\n\n\treturn {\n\t\tdata,\n\t\tisLoading: query.isLoading,\n\t\tisError: query.isError,\n\t\terror: query.error,\n\t\thasNextPage: query.hasNextPage,\n\t\tfetchNextPage: query.fetchNextPage,\n\t\tisFetchingNextPage: query.isFetchingNextPage,\n\t};\n}\n\nexport function useSession(sessionId: string) {\n\tconst { data: sessions } = useSessions();\n\treturn sessions?.find((s) => s.id === sessionId);\n}\n\nexport function useCreateSession() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (data: CreateSessionRequest) => apiClient.createSession(data),\n\t\tonSuccess: (newSession) => {\n\t\t\tqueryClient.setQueryData<{ pages: SessionsPage[]; pageParams: number[] }>(\n\t\t\t\tsessionsQueryKey,\n\t\t\t\t(old) => {\n\t\t\t\t\tif (!old) return old;\n\t\t\t\t\tconst firstPage = old.pages[0];\n\t\t\t\t\tif (!firstPage) return old;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...old,\n\t\t\t\t\t\tpages: [\n\t\t\t\t\t\t\t{ ...firstPage, items: [newSession, ...firstPage.items] },\n\t\t\t\t\t\t\t...old.pages.slice(1),\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t},\n\t});\n}\n\nexport function useUpdateSession(sessionId: string) {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (data: UpdateSessionRequest) =>\n\t\t\tapiClient.updateSession(sessionId, data),\n\t\tonSuccess: async () => {\n\t\t\tawait queryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t\tawait queryClient.invalidateQueries({ queryKey: ['session', sessionId] });\n\t\t},\n\t});\n}\n\nexport function useSetSessionPinned() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: ({\n\t\t\tsessionId,\n\t\t\tisPinned,\n\t\t}: {\n\t\t\tsessionId: string;\n\t\t\tisPinned: boolean;\n\t\t}) => apiClient.updateSession(sessionId, { isPinned }),\n\t\tonSuccess: async (updatedSession) => {\n\t\t\tqueryClient.setQueryData<{ pages: SessionsPage[]; pageParams: number[] }>(\n\t\t\t\tsessionsQueryKey,\n\t\t\t\t(old) => {\n\t\t\t\t\tif (!old) return old;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...old,\n\t\t\t\t\t\tpages: old.pages.map((page) => ({\n\t\t\t\t\t\t\t...page,\n\t\t\t\t\t\t\titems: page.items.map((session) =>\n\t\t\t\t\t\t\t\tsession.id === updatedSession.id\n\t\t\t\t\t\t\t\t\t? { ...session, ...updatedSession }\n\t\t\t\t\t\t\t\t\t: session,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t})),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t\tawait queryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t\tawait queryClient.invalidateQueries({\n\t\t\t\tqueryKey: ['session', updatedSession.id],\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport function useMarkSessionViewed() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (sessionId: string) => apiClient.markSessionViewed(sessionId),\n\t\tonSuccess: (updatedSession) => {\n\t\t\tqueryClient.setQueryData<{ pages: SessionsPage[]; pageParams: number[] }>(\n\t\t\t\tsessionsQueryKey,\n\t\t\t\t(old) => {\n\t\t\t\t\tif (!old) return old;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...old,\n\t\t\t\t\t\tpages: old.pages.map((page) => ({\n\t\t\t\t\t\t\t...page,\n\t\t\t\t\t\t\titems: page.items.map((session) =>\n\t\t\t\t\t\t\t\tsession.id === updatedSession.id\n\t\t\t\t\t\t\t\t\t? { ...session, ...updatedSession }\n\t\t\t\t\t\t\t\t\t: session,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t})),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t});\n}\n\nexport function useDeleteSession() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (sessionId: string) => apiClient.deleteSession(sessionId),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t},\n\t});\n}\n",
38
- "import { useEffect, useRef } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { SSEClient } from '../lib/sse-client';\nimport { apiClient } from '../lib/api-client';\nimport type { Message, MessagePart } from '../types/api';\nimport { useToolApprovalStore } from '../stores/toolApprovalStore';\nimport { useSecureInputStore } from '../stores/secureInputStore';\nimport { useViewerTabsStore } from '../stores/viewerTabsStore';\nimport {\n\tnormalizeQueueState,\n\toptimisticallyQueueMessage,\n} from './useQueueState';\nimport { sessionsQueryKey } from './useSessions';\n\nconst TOOL_PREVIEW_THROTTLE_MS = 500;\nconst TOOL_PREVIEW_THROTTLE_MIN_CHARS = 8_000;\nconst TOOL_PREVIEW_THROTTLE_MIN_DELTA_CHARS = 16_000;\nconst STREAMING_WRITE_CONTENT_PREVIEW_CHARS = 24_000;\nconst STREAMING_PATCH_PREVIEW_HEAD_CHARS = 12_000;\nconst STREAMING_PATCH_PREVIEW_TAIL_CHARS = 24_000;\nconst STREAMING_TOOL_INPUT_HEAD_CHARS = 8_000;\nconst STREAMING_TOOL_INPUT_TAIL_CHARS = 16_000;\nconst STREAMING_TOOL_MESSAGE_THROTTLE_MS = 500;\n\nexport function useSessionStream(\n\tsessionId: string | undefined,\n\tenabled = true,\n) {\n\tconst queryClient = useQueryClient();\n\tconst clientRef = useRef<SSEClient | null>(null);\n\tconst assistantMessageIdRef = useRef<string | null>(null);\n\tconst toolInputBuffersRef = useRef<Map<string, string>>(new Map());\n\tconst toolPreviewEmitRef = useRef<\n\t\tMap<\n\t\t\tstring,\n\t\t\t{ emittedAt: number; contentLength: number; lineSignature?: string }\n\t\t>\n\t>(new Map());\n\tconst toolMessageEmitRef = useRef<Map<string, number>>(new Map());\n\n\tconst {\n\t\taddPendingApproval,\n\t\tremovePendingApproval,\n\t\tupdatePendingApproval,\n\t\tsetPendingApprovals,\n\t} = useToolApprovalStore();\n\tconst { addPendingInput, removePendingInput, setPendingInputs } =\n\t\tuseSecureInputStore();\n\n\tuseEffect(() => {\n\t\tif (!sessionId || !enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tassistantMessageIdRef.current = null;\n\t\ttoolInputBuffersRef.current.clear();\n\t\ttoolPreviewEmitRef.current.clear();\n\t\ttoolMessageEmitRef.current.clear();\n\t\tlet lastSessionInvalidation = 0;\n\n\t\t// Fetch pending approvals from server for this session\n\t\tapiClient\n\t\t\t.getPendingApprovals(sessionId)\n\t\t\t.then((result) => {\n\t\t\t\tif (result.ok && result.pending.length > 0) {\n\t\t\t\t\tsetPendingApprovals(result.pending);\n\t\t\t\t} else {\n\t\t\t\t\tsetPendingApprovals([]);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tsetPendingApprovals([]);\n\t\t\t});\n\n\t\tapiClient\n\t\t\t.getPendingSecureInputs(sessionId)\n\t\t\t.then((result) => {\n\t\t\t\tif (result.ok && result.pending.length > 0) {\n\t\t\t\t\tsetPendingInputs(result.pending);\n\t\t\t\t} else {\n\t\t\t\t\tsetPendingInputs([]);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tsetPendingInputs([]);\n\t\t\t});\n\n\t\tconst client = new SSEClient();\n\t\tclientRef.current = client;\n\n\t\tconst url = apiClient.getStreamUrl(sessionId);\n\t\tconsole.log('[useSessionStream] Connecting to stream:', url);\n\t\tclient.connect(url);\n\n\t\tconst resolveAssistantTargetIndex = (messages: Message[]): number => {\n\t\t\tif (assistantMessageIdRef.current) {\n\t\t\t\tconst byId = messages.findIndex(\n\t\t\t\t\t(message) => message.id === assistantMessageIdRef.current,\n\t\t\t\t);\n\t\t\t\tif (byId !== -1) return byId;\n\t\t\t}\n\t\t\tfor (let i = messages.length - 1; i >= 0; i -= 1) {\n\t\t\t\tconst candidate = messages[i];\n\t\t\t\tif (candidate.role === 'assistant' && candidate.status === 'pending') {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\n\t\tconst extractText = (part: MessagePart): string => {\n\t\t\tif (\n\t\t\t\tpart.contentJson &&\n\t\t\t\ttypeof part.contentJson === 'object' &&\n\t\t\t\t!Array.isArray(part.contentJson) &&\n\t\t\t\t'text' in part.contentJson\n\t\t\t) {\n\t\t\t\treturn String((part.contentJson as Record<string, unknown>).text ?? '');\n\t\t\t}\n\t\t\tif (typeof part.content === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = JSON.parse(part.content);\n\t\t\t\t\tif (parsed && typeof parsed.text === 'string') return parsed.text;\n\t\t\t\t} catch {}\n\t\t\t\treturn part.content;\n\t\t\t}\n\t\t\treturn '';\n\t\t};\n\n\t\tconst getToolEventCallId = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tif (typeof payload?.callId === 'string') return payload.callId;\n\t\t\treturn typeof payload?.toolCallId === 'string'\n\t\t\t\t? payload.toolCallId\n\t\t\t\t: null;\n\t\t};\n\n\t\tconst getToolEventName = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tif (typeof payload?.name === 'string') return payload.name;\n\t\t\treturn typeof payload?.toolName === 'string' ? payload.toolName : null;\n\t\t};\n\n\t\tconst getToolEventArgs = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): unknown => payload?.args ?? payload?.input;\n\n\t\tconst getToolEventResult = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): unknown => payload?.result ?? payload?.output;\n\n\t\tconst getToolBufferKey = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tif (callId) return callId;\n\t\t\tconst name = getToolEventName(payload);\n\t\t\treturn name ? `name:${name}` : null;\n\t\t};\n\n\t\tconst parseArgsRecord = (\n\t\t\tvalue: unknown,\n\t\t): Record<string, unknown> | null => {\n\t\t\tif (value && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t\treturn value as Record<string, unknown>;\n\t\t\t}\n\n\t\t\tif (typeof value !== 'string') return null;\n\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(value);\n\t\t\t\treturn parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n\t\t\t\t\t? (parsed as Record<string, unknown>)\n\t\t\t\t\t: null;\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tconst normalizeLineNumber = (value: unknown): number | undefined => {\n\t\t\tconst parsed =\n\t\t\t\ttypeof value === 'number'\n\t\t\t\t\t? value\n\t\t\t\t\t: typeof value === 'string'\n\t\t\t\t\t\t? Number.parseInt(value, 10)\n\t\t\t\t\t\t: Number.NaN;\n\t\t\treturn Number.isFinite(parsed) && parsed > 0\n\t\t\t\t? Math.floor(parsed)\n\t\t\t\t: undefined;\n\t\t};\n\n\t\tconst parseLineRange = (\n\t\t\tvalue: unknown,\n\t\t): { startLine?: number; endLine?: number } => {\n\t\t\tif (typeof value !== 'string') return {};\n\t\t\tconst match = value.match(/@(\\d+)(?:-(\\d+))?/);\n\t\t\tif (!match) return {};\n\t\t\treturn {\n\t\t\t\tstartLine: normalizeLineNumber(match[1]),\n\t\t\t\tendLine: normalizeLineNumber(match[2] ?? match[1]),\n\t\t\t};\n\t\t};\n\n\t\tconst getBoundedStreamingToolInput = (value: string): string => {\n\t\t\tconst maxLength =\n\t\t\t\tSTREAMING_TOOL_INPUT_HEAD_CHARS + STREAMING_TOOL_INPUT_TAIL_CHARS;\n\t\t\tif (value.length <= maxLength) return value;\n\t\t\treturn `${value.slice(\n\t\t\t\t0,\n\t\t\t\tSTREAMING_TOOL_INPUT_HEAD_CHARS,\n\t\t\t)}\\n… streamed tool input truncated for UI responsiveness …\\n${value.slice(\n\t\t\t\t-STREAMING_TOOL_INPUT_TAIL_CHARS,\n\t\t\t)}`;\n\t\t};\n\n\t\tconst getToolArgsForViewer = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t): Record<string, unknown> | null => {\n\t\t\tconst args = parseArgsRecord(getToolEventArgs(payload));\n\t\t\tif (args) return args;\n\n\t\t\tconst key = getToolBufferKey(payload);\n\t\t\tif (!key) return null;\n\n\t\t\tconst previous = toolInputBuffersRef.current.get(key) ?? '';\n\t\t\tif (!delta) return parseArgsRecord(previous);\n\n\t\t\tconst next = getBoundedStreamingToolInput(`${previous}${delta}`);\n\t\t\ttoolInputBuffersRef.current.set(key, next);\n\t\t\treturn parseArgsRecord(next);\n\t\t};\n\n\t\tconst bestEffortUnescapeJsonString = (value: string): string => {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(`\"${value.replace(/\\\\$/, '')}\"`) as string;\n\t\t\t} catch {\n\t\t\t\treturn value\n\t\t\t\t\t.replace(/\\\\n/g, '\\n')\n\t\t\t\t\t.replace(/\\\\t/g, '\\t')\n\t\t\t\t\t.replace(/\\\\r/g, '\\r')\n\t\t\t\t\t.replace(/\\\\\"/g, '\"')\n\t\t\t\t\t.replace(/\\\\\\\\/g, '\\\\');\n\t\t\t}\n\t\t};\n\n\t\tconst extractJsonStringField = (\n\t\t\ttext: string,\n\t\t\tfield: string,\n\t\t\trequireClosed = false,\n\t\t): string | undefined => {\n\t\t\tconst marker = `\"${field}\"`;\n\t\t\tconst markerIndex = text.indexOf(marker);\n\t\t\tif (markerIndex === -1) return undefined;\n\n\t\t\tconst colonIndex = text.indexOf(':', markerIndex + marker.length);\n\t\t\tif (colonIndex === -1) return undefined;\n\n\t\t\tconst quoteIndex = text.indexOf('\"', colonIndex + 1);\n\t\t\tif (quoteIndex === -1) return undefined;\n\n\t\t\tlet escaped = '';\n\t\t\tlet escaping = false;\n\t\t\tlet closed = false;\n\t\t\tfor (let i = quoteIndex + 1; i < text.length; i += 1) {\n\t\t\t\tconst char = text[i];\n\t\t\t\tif (escaping) {\n\t\t\t\t\tescaped += `\\\\${char}`;\n\t\t\t\t\tescaping = false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (char === '\\\\') {\n\t\t\t\t\tescaping = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (char === '\"') {\n\t\t\t\t\tclosed = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tescaped += char;\n\t\t\t}\n\n\t\t\tif (requireClosed && !closed) return undefined;\n\n\t\t\treturn bestEffortUnescapeJsonString(escaped);\n\t\t};\n\n\t\tconst getBufferedToolInput = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string => {\n\t\t\tconst key = getToolBufferKey(payload);\n\t\t\treturn key ? (toolInputBuffersRef.current.get(key) ?? '') : '';\n\t\t};\n\n\t\tconst getStringArg = (\n\t\t\targs: Record<string, unknown> | null,\n\t\t\tbuffer: string,\n\t\t\tfield: string,\n\t\t\trequireClosed = false,\n\t\t): string | undefined => {\n\t\t\tconst value = args?.[field];\n\t\t\tif (typeof value === 'string') return value;\n\t\t\treturn extractJsonStringField(buffer, field, requireClosed);\n\t\t};\n\n\t\tconst getStreamingWritePreviewContent = (\n\t\t\targs: Record<string, unknown> | null,\n\t\t\tbuffer: string,\n\t\t): string | undefined => {\n\t\t\tconst argContent = args?.content;\n\t\t\tif (typeof argContent === 'string') {\n\t\t\t\tif (argContent.length <= STREAMING_WRITE_CONTENT_PREVIEW_CHARS) {\n\t\t\t\t\treturn argContent;\n\t\t\t\t}\n\n\t\t\t\treturn `… showing latest streamed content only …\\n${argContent.slice(\n\t\t\t\t\t-STREAMING_WRITE_CONTENT_PREVIEW_CHARS,\n\t\t\t\t)}`;\n\t\t\t}\n\n\t\t\tconst marker = '\"content\"';\n\t\t\tconst markerIndex = buffer.indexOf(marker);\n\t\t\tif (markerIndex === -1) return undefined;\n\n\t\t\tconst colonIndex = buffer.indexOf(':', markerIndex + marker.length);\n\t\t\tif (colonIndex === -1) return undefined;\n\n\t\t\tconst quoteIndex = buffer.indexOf('\"', colonIndex + 1);\n\t\t\tif (quoteIndex === -1) return undefined;\n\n\t\t\tconst valueStart = quoteIndex + 1;\n\t\t\tif (buffer.length - valueStart <= STREAMING_WRITE_CONTENT_PREVIEW_CHARS) {\n\t\t\t\treturn extractJsonStringField(buffer, 'content');\n\t\t\t}\n\n\t\t\tconst rawTail = buffer.slice(\n\t\t\t\tMath.max(\n\t\t\t\t\tvalueStart,\n\t\t\t\t\tbuffer.length - STREAMING_WRITE_CONTENT_PREVIEW_CHARS,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn `… showing latest streamed content only …\\n${bestEffortUnescapeJsonString(\n\t\t\t\trawTail,\n\t\t\t)}`;\n\t\t};\n\n\t\tconst getStreamingPatchPreviewContent = (\n\t\t\targs: Record<string, unknown> | null,\n\t\t\tbuffer: string,\n\t\t): string | undefined => {\n\t\t\tconst argPatch = args?.patch;\n\t\t\tif (typeof argPatch === 'string') {\n\t\t\t\tif (\n\t\t\t\t\targPatch.length <=\n\t\t\t\t\tSTREAMING_PATCH_PREVIEW_HEAD_CHARS +\n\t\t\t\t\t\tSTREAMING_PATCH_PREVIEW_TAIL_CHARS\n\t\t\t\t) {\n\t\t\t\t\treturn argPatch;\n\t\t\t\t}\n\n\t\t\t\treturn `${argPatch.slice(\n\t\t\t\t\t0,\n\t\t\t\t\tSTREAMING_PATCH_PREVIEW_HEAD_CHARS,\n\t\t\t\t)}\\n… patch preview truncated while streaming …\\n${argPatch.slice(\n\t\t\t\t\t-STREAMING_PATCH_PREVIEW_TAIL_CHARS,\n\t\t\t\t)}`;\n\t\t\t}\n\n\t\t\tconst marker = '\"patch\"';\n\t\t\tconst markerIndex = buffer.indexOf(marker);\n\t\t\tif (markerIndex === -1) return undefined;\n\n\t\t\tconst colonIndex = buffer.indexOf(':', markerIndex + marker.length);\n\t\t\tif (colonIndex === -1) return undefined;\n\n\t\t\tconst quoteIndex = buffer.indexOf('\"', colonIndex + 1);\n\t\t\tif (quoteIndex === -1) return undefined;\n\n\t\t\tconst valueStart = quoteIndex + 1;\n\t\t\tconst rawLength = buffer.length - valueStart;\n\t\t\tif (\n\t\t\t\trawLength <=\n\t\t\t\tSTREAMING_PATCH_PREVIEW_HEAD_CHARS + STREAMING_PATCH_PREVIEW_TAIL_CHARS\n\t\t\t) {\n\t\t\t\treturn extractJsonStringField(buffer, 'patch');\n\t\t\t}\n\n\t\t\tconst rawHead = buffer.slice(\n\t\t\t\tvalueStart,\n\t\t\t\tvalueStart + STREAMING_PATCH_PREVIEW_HEAD_CHARS,\n\t\t\t);\n\t\t\tconst rawTail = buffer.slice(-STREAMING_PATCH_PREVIEW_TAIL_CHARS);\n\t\t\treturn `${bestEffortUnescapeJsonString(\n\t\t\t\trawHead,\n\t\t\t)}\\n… patch preview truncated while streaming …\\n${bestEffortUnescapeJsonString(\n\t\t\t\trawTail,\n\t\t\t)}`;\n\t\t};\n\n\t\tconst getResultRecord = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): Record<string, unknown> | null =>\n\t\t\tpayload?.result &&\n\t\t\ttypeof payload.result === 'object' &&\n\t\t\t!Array.isArray(payload.result)\n\t\t\t\t? (payload.result as Record<string, unknown>)\n\t\t\t\t: null;\n\n\t\tconst getArtifactRecord = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): Record<string, unknown> | null => {\n\t\t\tif (\n\t\t\t\tpayload?.artifact &&\n\t\t\t\ttypeof payload.artifact === 'object' &&\n\t\t\t\t!Array.isArray(payload.artifact)\n\t\t\t) {\n\t\t\t\treturn payload.artifact as Record<string, unknown>;\n\t\t\t}\n\n\t\t\tconst result = getResultRecord(payload);\n\t\t\treturn result?.artifact &&\n\t\t\t\ttypeof result.artifact === 'object' &&\n\t\t\t\t!Array.isArray(result.artifact)\n\t\t\t\t? (result.artifact as Record<string, unknown>)\n\t\t\t\t: null;\n\t\t};\n\n\t\tconst extractErrorMessage = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | undefined => {\n\t\t\tconst result = getResultRecord(payload);\n\t\t\tif (typeof payload?.error === 'string') return payload.error;\n\t\t\treturn typeof result?.error === 'string' ? result.error : undefined;\n\t\t};\n\n\t\tconst normalizePatchPath = (path: string): string =>\n\t\t\tpath.replace(/^a\\//, '').replace(/^b\\//, '').trim();\n\n\t\tconst patchPathMatches = (\n\t\t\tpatchPath: string,\n\t\t\ttargetPath: string,\n\t\t): boolean => {\n\t\t\tconst normalizedPatch = normalizePatchPath(patchPath);\n\t\t\tconst normalizedTarget = normalizePatchPath(targetPath);\n\t\t\treturn (\n\t\t\t\tnormalizedPatch === normalizedTarget ||\n\t\t\t\tnormalizedPatch.endsWith(`/${normalizedTarget}`) ||\n\t\t\t\tnormalizedTarget.endsWith(`/${normalizedPatch}`)\n\t\t\t);\n\t\t};\n\n\t\tconst patchPathMayReferToTarget = (\n\t\t\tpatchPath: string,\n\t\t\ttargetPath: string,\n\t\t): boolean => {\n\t\t\tconst normalizedPatch = normalizePatchPath(patchPath).replace(/\\/+$/, '');\n\t\t\tconst normalizedTarget = normalizePatchPath(targetPath);\n\t\t\tif (!normalizedPatch) return false;\n\t\t\treturn (\n\t\t\t\tpatchPathMatches(patchPath, targetPath) ||\n\t\t\t\tnormalizedTarget.startsWith(`${normalizedPatch}/`)\n\t\t\t);\n\t\t};\n\n\t\tconst isLikelyCompletePatchPath = (path: string): boolean => {\n\t\t\tconst normalized = normalizePatchPath(path);\n\t\t\tif (!normalized || normalized.endsWith('/')) return false;\n\t\t\tconst name = normalized.split('/').pop() ?? '';\n\t\t\treturn name.includes('.');\n\t\t};\n\n\t\tconst getCompletedPatchChangeLineSignature = (\n\t\t\tpatch: string,\n\t\t): string | undefined => {\n\t\t\tconst stablePatch = patch.endsWith('\\n')\n\t\t\t\t? patch\n\t\t\t\t: patch.slice(0, patch.lastIndexOf('\\n') + 1);\n\t\t\tif (!stablePatch) return undefined;\n\n\t\t\tlet changeLines = 0;\n\t\t\tlet stableChangeLength = 0;\n\t\t\tlet lineDirectiveCount = 0;\n\t\t\tfor (const line of stablePatch.split('\\n')) {\n\t\t\t\tif (\n\t\t\t\t\t(line.startsWith('+') && !line.startsWith('+++')) ||\n\t\t\t\t\t(line.startsWith('-') && !line.startsWith('---'))\n\t\t\t\t) {\n\t\t\t\t\tchangeLines += 1;\n\t\t\t\t\tstableChangeLength += line.length;\n\t\t\t\t} else if (\n\t\t\t\t\t/^\\*\\*\\* (?:Delete Lines in|Replace Lines in|Insert Before in|Insert After in): /.test(\n\t\t\t\t\t\tline,\n\t\t\t\t\t) ||\n\t\t\t\t\tline.startsWith('*** Lines:') ||\n\t\t\t\t\tline.startsWith('*** Line:') ||\n\t\t\t\t\tline.startsWith('*** With:')\n\t\t\t\t) {\n\t\t\t\t\tlineDirectiveCount += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (changeLines > 0) return `${changeLines}:${stableChangeLength}`;\n\t\t\treturn lineDirectiveCount > 0\n\t\t\t\t? `lines:${lineDirectiveCount}:${stablePatch.length}`\n\t\t\t\t: undefined;\n\t\t};\n\n\t\tconst extractPathsFromPatch = (patch: string): string[] => {\n\t\t\tconst paths = new Set<string>();\n\t\t\tfor (const line of patch.split('\\n')) {\n\t\t\t\tconst directive = line.match(\n\t\t\t\t\t/^\\*\\*\\* (?:Update|Add|Delete) File: (.+)$/,\n\t\t\t\t);\n\t\t\t\tconst replaceDirective = line.match(/^\\*\\*\\* Replace in: (.+)$/);\n\t\t\t\tconst lineDirective = line.match(\n\t\t\t\t\t/^\\*\\*\\* (?:Delete Lines in|Replace Lines in|Insert Before in|Insert After in): (.+)$/,\n\t\t\t\t);\n\t\t\t\tconst path =\n\t\t\t\t\tdirective?.[1] ?? replaceDirective?.[1] ?? lineDirective?.[1];\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.add(path.trim());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst unified = line.match(/^\\+\\+\\+ (?:b\\/)?(.+)$/);\n\t\t\t\tif (unified?.[1] && unified[1] !== '/dev/null') {\n\t\t\t\t\tpaths.add(unified[1].trim());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn [...paths];\n\t\t};\n\n\t\ttype FileContentCache = {\n\t\t\tcontent: string;\n\t\t\tpath: string;\n\t\t\textension: string;\n\t\t\tlineCount: number;\n\t\t};\n\n\t\tconst getExtension = (path: string): string =>\n\t\t\tpath.split('.').pop()?.toLowerCase() ?? '';\n\n\t\tconst updateFileContentCache = (path: string, content: string) => {\n\t\t\tqueryClient.setQueryData<FileContentCache>(['files', 'read', path], {\n\t\t\t\tcontent,\n\t\t\t\tpath,\n\t\t\t\textension: getExtension(path),\n\t\t\t\tlineCount: content.split('\\n').length,\n\t\t\t});\n\t\t};\n\n\t\tconst mergeReadResultIntoFileCache = (\n\t\t\tpath: string,\n\t\t\tresult: Record<string, unknown> | null,\n\t\t\tstartLine: number | undefined,\n\t\t\tendLine: number | undefined,\n\t\t) => {\n\t\t\tif (typeof result?.content !== 'string') return;\n\t\t\tconst readContent = result.content;\n\t\t\tif (!startLine || !endLine) {\n\t\t\t\tupdateFileContentCache(path, readContent);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tqueryClient.setQueryData<FileContentCache | undefined>(\n\t\t\t\t['files', 'read', path],\n\t\t\t\t(current) => {\n\t\t\t\t\tif (!current?.content) return current;\n\t\t\t\t\tconst lines = current.content.split('\\n');\n\t\t\t\t\tif (lines.at(-1) === '') lines.pop();\n\t\t\t\t\tconst readLines = readContent.split('\\n');\n\t\t\t\t\tlines.splice(startLine - 1, endLine - startLine + 1, ...readLines);\n\t\t\t\t\tconst content = `${lines.join('\\n')}\\n`;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...current,\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tlineCount:\n\t\t\t\t\t\t\ttypeof result.totalLines === 'number'\n\t\t\t\t\t\t\t\t? result.totalLines\n\t\t\t\t\t\t\t\t: lines.length,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst invalidateFileContentCache = (path: string) => {\n\t\t\tvoid queryClient.invalidateQueries({ queryKey: ['files', 'read', path] });\n\t\t};\n\n\t\tconst getChangedLinesForPath = (\n\t\t\tresult: Record<string, unknown> | null,\n\t\t\tpath: string,\n\t\t): number[] | undefined => {\n\t\t\tconst changes = Array.isArray(result?.changes) ? result.changes : [];\n\t\t\tconst lines = new Set<number>();\n\n\t\t\tfor (const change of changes) {\n\t\t\t\tif (!change || typeof change !== 'object') continue;\n\t\t\t\tconst record = change as Record<string, unknown>;\n\t\t\t\tif (typeof record.filePath !== 'string') continue;\n\t\t\t\tif (!patchPathMatches(record.filePath, path)) continue;\n\t\t\t\tif (!Array.isArray(record.hunks)) continue;\n\n\t\t\t\tfor (const hunk of record.hunks) {\n\t\t\t\t\tif (!hunk || typeof hunk !== 'object') continue;\n\t\t\t\t\tconst hunkRecord = hunk as Record<string, unknown>;\n\t\t\t\t\tconst newStart =\n\t\t\t\t\t\ttypeof hunkRecord.newStart === 'number'\n\t\t\t\t\t\t\t? hunkRecord.newStart\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst newLines =\n\t\t\t\t\t\ttypeof hunkRecord.newLines === 'number'\n\t\t\t\t\t\t\t? hunkRecord.newLines\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (!newStart || !newLines) continue;\n\n\t\t\t\t\tfor (let line = newStart; line < newStart + newLines; line += 1) {\n\t\t\t\t\t\tlines.add(line);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn lines.size > 0 ? [...lines] : undefined;\n\t\t};\n\n\t\ttype EditPreviewToolName = 'edit' | 'multiedit';\n\n\t\ttype StringEditPreview = {\n\t\t\toldString: string;\n\t\t\tnewString: string;\n\t\t};\n\n\t\tconst getPatchTextLines = (value: string): string[] => {\n\t\t\tif (value.length === 0) return [];\n\t\t\tconst lines = value.split('\\n');\n\t\t\tif (value.endsWith('\\n')) lines.pop();\n\t\t\treturn lines;\n\t\t};\n\n\t\tconst appendStringEditPatchHunk = (\n\t\t\tlines: string[],\n\t\t\tedit: StringEditPreview,\n\t\t) => {\n\t\t\tlines.push('@@');\n\t\t\tfor (const line of getPatchTextLines(edit.oldString)) {\n\t\t\t\tlines.push(`-${line}`);\n\t\t\t}\n\t\t\tfor (const line of getPatchTextLines(edit.newString)) {\n\t\t\t\tlines.push(`+${line}`);\n\t\t\t}\n\t\t};\n\n\t\tconst buildStringEditPatchPreview = (\n\t\t\tpath: string,\n\t\t\tedits: StringEditPreview[],\n\t\t): string | undefined => {\n\t\t\tconst validEdits = edits.filter(\n\t\t\t\t(edit) => edit.oldString.length > 0 || edit.newString.length > 0,\n\t\t\t);\n\t\t\tif (validEdits.length === 0) return undefined;\n\n\t\t\tconst lines = ['*** Begin Patch', `*** Update File: ${path}`];\n\t\t\tfor (const edit of validEdits) appendStringEditPatchHunk(lines, edit);\n\t\t\tlines.push('*** End Patch', '');\n\t\t\treturn lines.join('\\n');\n\t\t};\n\n\t\tconst getMultiEditPreviewEdits = (\n\t\t\targs: Record<string, unknown> | null,\n\t\t): StringEditPreview[] => {\n\t\t\tconst edits = Array.isArray(args?.edits) ? args.edits : [];\n\t\t\treturn edits.flatMap((edit) => {\n\t\t\t\tif (!edit || typeof edit !== 'object' || Array.isArray(edit)) return [];\n\t\t\t\tconst record = edit as Record<string, unknown>;\n\t\t\t\treturn typeof record.oldString === 'string' &&\n\t\t\t\t\ttypeof record.newString === 'string'\n\t\t\t\t\t? [{ oldString: record.oldString, newString: record.newString }]\n\t\t\t\t\t: [];\n\t\t\t});\n\t\t};\n\n\t\tconst getEditPreviewPatch = (\n\t\t\ttoolName: EditPreviewToolName,\n\t\t\tpath: string,\n\t\t\targs: Record<string, unknown> | null,\n\t\t\tbuffer: string,\n\t\t\tartifact: Record<string, unknown> | null,\n\t\t): string | undefined => {\n\t\t\tif (typeof artifact?.patch === 'string') return artifact.patch;\n\n\t\t\tif (toolName === 'edit') {\n\t\t\t\tconst oldString = getStringArg(args, buffer, 'oldString');\n\t\t\t\tconst newString = getStringArg(args, buffer, 'newString');\n\t\t\t\treturn oldString !== undefined && newString !== undefined\n\t\t\t\t\t? buildStringEditPatchPreview(path, [{ oldString, newString }])\n\t\t\t\t\t: undefined;\n\t\t\t}\n\n\t\t\tconst edits = getMultiEditPreviewEdits(args);\n\t\t\treturn buildStringEditPatchPreview(path, edits);\n\t\t};\n\n\t\tconst handleReadToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name !== 'read') return;\n\n\t\t\tconst args = getToolArgsForViewer(payload, delta);\n\t\t\tconst path = typeof args?.path === 'string' ? args.path : null;\n\t\t\tif (!path) return;\n\n\t\t\tconst result =\n\t\t\t\tpayload?.result &&\n\t\t\t\ttypeof payload.result === 'object' &&\n\t\t\t\t!Array.isArray(payload.result)\n\t\t\t\t\t? (payload.result as Record<string, unknown>)\n\t\t\t\t\t: null;\n\t\t\tconst rangeFromResult = parseLineRange(result?.lineRange);\n\t\t\tconst startLine =\n\t\t\t\tnormalizeLineNumber(args.startLine) ??\n\t\t\t\tnormalizeLineNumber(args.start_line) ??\n\t\t\t\trangeFromResult.startLine;\n\t\t\tconst endLine =\n\t\t\t\tnormalizeLineNumber(args.endLine) ??\n\t\t\t\tnormalizeLineNumber(args.end_line) ??\n\t\t\t\trangeFromResult.endLine ??\n\t\t\t\tstartLine;\n\t\t\tconst failed = result?.ok === false || eventType === 'error';\n\t\t\tif (eventType === 'tool.result' && !failed) {\n\t\t\t\tmergeReadResultIntoFileCache(path, result, startLine, endLine);\n\t\t\t}\n\n\t\t\tconst viewerStore = useViewerTabsStore.getState();\n\t\t\tif (!viewerStore.followToolActivity) return;\n\n\t\t\tviewerStore.openToolReadTab(path, {\n\t\t\t\tstartLine,\n\t\t\t\tendLine,\n\t\t\t\treason: 'read',\n\t\t\t\tcallId: getToolEventCallId(payload) ?? undefined,\n\t\t\t\tstatus: failed\n\t\t\t\t\t? 'error'\n\t\t\t\t\t: eventType === 'tool.result'\n\t\t\t\t\t\t? 'success'\n\t\t\t\t\t\t: 'streaming',\n\t\t\t});\n\t\t};\n\n\t\tconst handleWriteToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name !== 'write') return;\n\n\t\t\tconst args = getToolArgsForViewer(payload, delta);\n\t\t\tconst buffer = getBufferedToolInput(payload);\n\t\t\tconst result = getResultRecord(payload);\n\t\t\tconst path =\n\t\t\t\t(typeof result?.path === 'string' ? result.path : undefined) ??\n\t\t\t\tgetStringArg(args, buffer, 'path', true);\n\t\t\tif (!path) return;\n\n\t\t\tconst failed = result?.ok === false || eventType === 'error';\n\t\t\tconst callId = getToolEventCallId(payload) ?? undefined;\n\t\t\tconst status = failed\n\t\t\t\t? 'error'\n\t\t\t\t: eventType === 'tool.result'\n\t\t\t\t\t? 'success'\n\t\t\t\t\t: 'streaming';\n\t\t\tconst content =\n\t\t\t\tstatus === 'streaming'\n\t\t\t\t\t? getStreamingWritePreviewContent(args, buffer)\n\t\t\t\t\t: getStringArg(args, buffer, 'content');\n\t\t\tconst summary =\n\t\t\t\tresult?.summary && typeof result.summary === 'object'\n\t\t\t\t\t? (result.summary as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\t\t\tconst changeCount =\n\t\t\t\ttypeof summary?.additions === 'number' &&\n\t\t\t\ttypeof summary.deletions === 'number'\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tadditions: summary.additions,\n\t\t\t\t\t\t\tremovals: summary.deletions,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined;\n\t\t\tif (status === 'success') {\n\t\t\t\tif (content !== undefined) updateFileContentCache(path, content);\n\t\t\t\telse invalidateFileContentCache(path);\n\t\t\t}\n\n\t\t\tconst viewerStore = useViewerTabsStore.getState();\n\t\t\tif (!viewerStore.followToolActivity) return;\n\n\t\t\tif (\n\t\t\t\tstatus === 'streaming' &&\n\t\t\t\tcontent !== undefined &&\n\t\t\t\tcontent.length >= TOOL_PREVIEW_THROTTLE_MIN_CHARS\n\t\t\t) {\n\t\t\t\tconst previewKey = callId ?? path;\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst last = toolPreviewEmitRef.current.get(previewKey);\n\t\t\t\tconst contentDelta = Math.abs(\n\t\t\t\t\tcontent.length - (last?.contentLength ?? 0),\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\tlast &&\n\t\t\t\t\tnow - last.emittedAt < TOOL_PREVIEW_THROTTLE_MS &&\n\t\t\t\t\tcontentDelta < TOOL_PREVIEW_THROTTLE_MIN_DELTA_CHARS\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttoolPreviewEmitRef.current.set(previewKey, {\n\t\t\t\t\temittedAt: now,\n\t\t\t\t\tcontentLength: content.length,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tviewerStore.openToolPreviewTab({\n\t\t\t\tpath,\n\t\t\t\ttoolName: 'write',\n\t\t\t\tcallId,\n\t\t\t\tcontent,\n\t\t\t\tchangeCount,\n\t\t\t\tstatus,\n\t\t\t\terror: extractErrorMessage(payload),\n\t\t\t});\n\t\t};\n\n\t\tconst handleApplyPatchToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name !== 'apply_patch') return;\n\n\t\t\tconst args = getToolArgsForViewer(payload, delta);\n\t\t\tconst buffer = getBufferedToolInput(payload);\n\t\t\tconst artifact = getArtifactRecord(payload);\n\t\t\tconst result = getResultRecord(payload);\n\t\t\tconst failed = result?.ok === false || eventType === 'error';\n\t\t\tconst status = failed\n\t\t\t\t? 'error'\n\t\t\t\t: eventType === 'tool.result'\n\t\t\t\t\t? 'success'\n\t\t\t\t\t: 'streaming';\n\t\t\tconst callId = getToolEventCallId(payload) ?? undefined;\n\n\t\t\tconst patch =\n\t\t\t\t(typeof artifact?.patch === 'string' ? artifact.patch : undefined) ??\n\t\t\t\t(status === 'streaming'\n\t\t\t\t\t? getStreamingPatchPreviewContent(args, buffer)\n\t\t\t\t\t: getStringArg(args, buffer, 'patch'));\n\t\t\tif (!patch) return;\n\n\t\t\tconst previewKey = callId ?? 'apply_patch';\n\t\t\tconst lineSignature =\n\t\t\t\tstatus === 'streaming'\n\t\t\t\t\t? getCompletedPatchChangeLineSignature(patch)\n\t\t\t\t\t: undefined;\n\t\t\tif (status === 'streaming') {\n\t\t\t\tconst last = toolPreviewEmitRef.current.get(previewKey);\n\t\t\t\tif (last?.lineSignature === lineSignature) return;\n\t\t\t}\n\n\t\t\tconst patchPaths = extractPathsFromPatch(patch);\n\t\t\tif (patchPaths.length === 0) return;\n\t\t\tif (status === 'success') {\n\t\t\t\tfor (const path of patchPaths) invalidateFileContentCache(path);\n\t\t\t}\n\n\t\t\tconst viewerStore = useViewerTabsStore.getState();\n\t\t\tif (!viewerStore.followToolActivity) return;\n\n\t\t\tconst matchingFileTabs = viewerStore.tabs.filter(\n\t\t\t\t(\n\t\t\t\t\ttab,\n\t\t\t\t): tab is Extract<\n\t\t\t\t\t(typeof viewerStore.tabs)[number],\n\t\t\t\t\t{ type: 'file' }\n\t\t\t\t> =>\n\t\t\t\t\ttab.type === 'file' &&\n\t\t\t\t\tpatchPaths.some((path) => patchPathMayReferToTarget(path, tab.path)),\n\t\t\t);\n\t\t\tconst activeMatchingFileTab = matchingFileTabs.find(\n\t\t\t\t(tab) => tab.id === viewerStore.activeTabId,\n\t\t\t);\n\t\t\tconst fallbackPath = patchPaths.find(isLikelyCompletePatchPath);\n\t\t\tif (!activeMatchingFileTab && !matchingFileTabs[0] && !fallbackPath)\n\t\t\t\treturn;\n\t\t\tconst targetPath =\n\t\t\t\tactiveMatchingFileTab?.path ??\n\t\t\t\tmatchingFileTabs[0]?.path ??\n\t\t\t\tfallbackPath;\n\t\t\tif (!targetPath) return;\n\n\t\t\tviewerStore.openToolPreviewTab({\n\t\t\t\tpath: targetPath,\n\t\t\t\ttoolName: 'apply_patch',\n\t\t\t\tcallId,\n\t\t\t\tpatch,\n\t\t\t\tchangedLines: getChangedLinesForPath(result, targetPath),\n\t\t\t\tstatus,\n\t\t\t\terror: extractErrorMessage(payload),\n\t\t\t});\n\n\t\t\tif (status === 'streaming') {\n\t\t\t\ttoolPreviewEmitRef.current.set(previewKey, {\n\t\t\t\t\temittedAt: Date.now(),\n\t\t\t\t\tcontentLength: buffer.length,\n\t\t\t\t\tlineSignature,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst handleEditToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name !== 'edit' && name !== 'multiedit') return;\n\n\t\t\tconst args = getToolArgsForViewer(payload, delta);\n\t\t\tconst buffer = getBufferedToolInput(payload);\n\t\t\tconst artifact = getArtifactRecord(payload);\n\t\t\tconst result = getResultRecord(payload);\n\t\t\tconst path =\n\t\t\t\t(typeof result?.path === 'string' ? result.path : undefined) ??\n\t\t\t\tgetStringArg(args, buffer, 'path', true);\n\t\t\tif (!path) return;\n\n\t\t\tconst failed = result?.ok === false || eventType === 'error';\n\t\t\tconst status = failed\n\t\t\t\t? 'error'\n\t\t\t\t: eventType === 'tool.result'\n\t\t\t\t\t? 'success'\n\t\t\t\t\t: 'streaming';\n\t\t\tconst callId = getToolEventCallId(payload) ?? undefined;\n\t\t\tconst patch = getEditPreviewPatch(name, path, args, buffer, artifact);\n\t\t\tif (status === 'success') invalidateFileContentCache(path);\n\t\t\tif (!patch) return;\n\n\t\t\tconst previewKey = callId ?? `${name}:${path}`;\n\t\t\tconst lineSignature =\n\t\t\t\tstatus === 'streaming'\n\t\t\t\t\t? getCompletedPatchChangeLineSignature(patch)\n\t\t\t\t\t: undefined;\n\t\t\tif (status === 'streaming') {\n\t\t\t\tconst last = toolPreviewEmitRef.current.get(previewKey);\n\t\t\t\tif (last?.lineSignature === lineSignature) return;\n\t\t\t}\n\n\t\t\tconst viewerStore = useViewerTabsStore.getState();\n\t\t\tif (!viewerStore.followToolActivity) return;\n\n\t\t\tviewerStore.openToolPreviewTab({\n\t\t\t\tpath,\n\t\t\t\ttoolName: name,\n\t\t\t\tcallId,\n\t\t\t\tpatch,\n\t\t\t\tstatus,\n\t\t\t\terror: extractErrorMessage(payload),\n\t\t\t});\n\n\t\t\tif (status === 'streaming') {\n\t\t\t\ttoolPreviewEmitRef.current.set(previewKey, {\n\t\t\t\t\temittedAt: Date.now(),\n\t\t\t\t\tcontentLength: buffer.length,\n\t\t\t\t\tlineSignature,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst handleSimulatorToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tif (eventType !== 'tool.result') return;\n\t\t\tconst result = getToolEventResult(payload);\n\t\t\tif (!result || typeof result !== 'object' || Array.isArray(result))\n\t\t\t\treturn;\n\t\t\tconst resultRecord = result as Record<string, unknown>;\n\t\t\tconst firstStream = Array.isArray(resultRecord.streams)\n\t\t\t\t? resultRecord.streams[0]\n\t\t\t\t: undefined;\n\t\t\tconst stream = resultRecord.stream ?? firstStream;\n\t\t\tconst previewUrl = resultRecord.previewUrl;\n\t\t\tif (typeof previewUrl === 'string' && previewUrl.trim()) {\n\t\t\t\tuseViewerTabsStore.getState().openBrowserTab(previewUrl, {\n\t\t\t\t\tkind: 'simulator',\n\t\t\t\t\ttitle: 'Simulator',\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!stream || typeof stream !== 'object' || Array.isArray(stream))\n\t\t\t\treturn;\n\n\t\t\tuseViewerTabsStore.getState().openBrowserTab('http://localhost:3200', {\n\t\t\t\tkind: 'simulator',\n\t\t\t\ttitle: 'Simulator',\n\t\t\t});\n\t\t};\n\n\t\tconst handleToolActivityViewerEvent = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name === 'read') handleReadToolActivity(eventType, payload, delta);\n\t\t\tif (name === 'write') handleWriteToolActivity(eventType, payload, delta);\n\t\t\tif (name === 'edit' || name === 'multiedit') {\n\t\t\t\thandleEditToolActivity(eventType, payload, delta);\n\t\t\t}\n\t\t\tif (name === 'apply_patch') {\n\t\t\t\thandleApplyPatchToolActivity(eventType, payload, delta);\n\t\t\t}\n\t\t\tif (name === 'simulator') {\n\t\t\t\thandleSimulatorToolActivity(eventType, payload);\n\t\t\t}\n\t\t};\n\n\t\tconst getToolInputDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tif (typeof payload?.delta === 'string') return payload.delta;\n\t\t\treturn typeof payload?.inputTextDelta === 'string'\n\t\t\t\t? payload.inputTextDelta\n\t\t\t\t: null;\n\t\t};\n\n\t\tconst getToolOutputDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tif (typeof payload?.delta === 'string') return payload.delta;\n\t\t\treturn typeof payload?.outputTextDelta === 'string'\n\t\t\t\t? payload.outputTextDelta\n\t\t\t\t: null;\n\t\t};\n\n\t\tconst getOptimisticPartIndex = (\n\t\t\tparts: MessagePart[],\n\t\t\t_stepIndex: number | null,\n\t\t): number => {\n\t\t\tconst indexes = parts\n\t\t\t\t.map((part) => part.index)\n\t\t\t\t.filter((index): index is number => Number.isFinite(index));\n\t\t\treturn indexes.length > 0 ? Math.max(...indexes) + 0.001 : 0;\n\t\t};\n\n\t\tconst applyReasoningDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst messageId =\n\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\tconst partId =\n\t\t\t\ttypeof payload?.partId === 'string' ? payload.partId : null;\n\t\t\tconst delta = typeof payload?.delta === 'string' ? payload.delta : null;\n\t\t\tif (!messageId || !partId || delta === null) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tconst messageIndex = nextMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === messageId,\n\t\t\t\t\t);\n\t\t\t\t\tif (messageIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[messageIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = parts.findIndex((part) => part.id === partId);\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload?.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: partId,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'reasoning',\n\t\t\t\t\t\t\tcontent: JSON.stringify({ text: delta }),\n\t\t\t\t\t\t\tcontentJson: { text: delta },\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: null,\n\t\t\t\t\t\t\ttoolCallId: null,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t\tpartIndex = parts.length - 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst previous = extractText(existing);\n\t\t\t\t\t\tconst nextText = `${previous}${delta}`;\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify({ text: nextText }),\n\t\t\t\t\t\t\tcontentJson: { text: nextText },\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[messageIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst applyMessageDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst messageId =\n\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\tconst partId =\n\t\t\t\ttypeof payload?.partId === 'string' ? payload.partId : null;\n\t\t\tconst payloadType =\n\t\t\t\ttypeof payload?.type === 'string' ? payload.type : undefined;\n\t\t\tif (payloadType === 'error') {\n\t\t\t\tupsertErrorPart(payload);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst delta = typeof payload?.delta === 'string' ? payload.delta : null;\n\t\t\tif (!messageId || !partId || delta === null) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tconst messageIndex = nextMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === messageId,\n\t\t\t\t\t);\n\t\t\t\t\tif (messageIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[messageIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = parts.findIndex((part) => part.id === partId);\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload?.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: partId,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\tcontent: JSON.stringify({ text: delta }),\n\t\t\t\t\t\t\tcontentJson: { text: delta },\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: null,\n\t\t\t\t\t\t\ttoolCallId: null,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t\tpartIndex = parts.length - 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst previous = extractText(existing);\n\t\t\t\t\t\tconst nextText = `${previous}${delta}`;\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify({ text: nextText }),\n\t\t\t\t\t\t\tcontentJson: { text: nextText },\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[messageIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst toRecord = (value: unknown): Record<string, unknown> | null => {\n\t\t\tif (value && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t\treturn value as Record<string, unknown>;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tconst parseErrorContent = (\n\t\t\tpayload: Record<string, unknown>,\n\t\t): Record<string, unknown> => {\n\t\t\tconst contentRecord = toRecord(payload.content);\n\t\t\tif (contentRecord) return contentRecord;\n\n\t\t\tif (typeof payload.content === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = JSON.parse(payload.content);\n\t\t\t\t\tconst parsedRecord = toRecord(parsed);\n\t\t\t\t\tif (parsedRecord) return parsedRecord;\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\tconst message =\n\t\t\t\ttypeof payload.error === 'string'\n\t\t\t\t\t? payload.error\n\t\t\t\t\t: typeof payload.message === 'string'\n\t\t\t\t\t\t? payload.message\n\t\t\t\t\t\t: 'Assistant run failed';\n\t\t\treturn {\n\t\t\t\tmessage,\n\t\t\t\ttype:\n\t\t\t\t\ttypeof payload.errorType === 'string' ? payload.errorType : 'error',\n\t\t\t\tdetails: toRecord(payload.details) ?? undefined,\n\t\t\t\tisAborted: payload.isAborted === true,\n\t\t\t\tautoCompacted: payload.autoCompacted === true,\n\t\t\t};\n\t\t};\n\n\t\tconst upsertErrorPart = (payload: Record<string, unknown> | undefined) => {\n\t\t\tconst messageId =\n\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\tif (!payload || !messageId) return;\n\n\t\t\tconst contentJson = parseErrorContent(payload);\n\t\t\tconst content = JSON.stringify(contentJson);\n\t\t\tconst errorMessage =\n\t\t\t\ttypeof contentJson.message === 'string'\n\t\t\t\t\t? contentJson.message\n\t\t\t\t\t: typeof payload.error === 'string'\n\t\t\t\t\t\t? payload.error\n\t\t\t\t\t\t: 'Assistant run failed';\n\t\t\tconst stepIndex =\n\t\t\t\ttypeof payload.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\tconst partId =\n\t\t\t\ttypeof payload.partId === 'string'\n\t\t\t\t\t? payload.partId\n\t\t\t\t\t: `error-${messageId}`;\n\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tconst messageIndex = nextMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === messageId,\n\t\t\t\t\t);\n\t\t\t\t\tif (messageIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[messageIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tconst partIndex = parts.findIndex((part) => part.id === partId);\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: partId,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\tcontent,\n\t\t\t\t\t\t\tcontentJson,\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: Date.now(),\n\t\t\t\t\t\t\ttoolName: null,\n\t\t\t\t\t\t\ttoolCallId: null,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...parts[partIndex],\n\t\t\t\t\t\t\tcontent,\n\t\t\t\t\t\t\tcontentJson,\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? parts[partIndex].stepIndex ?? null,\n\t\t\t\t\t\t\tcompletedAt: Date.now(),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[messageIndex] = {\n\t\t\t\t\t\t...targetMessage,\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\tcompletedAt: targetMessage.completedAt ?? Date.now(),\n\t\t\t\t\t\terror: errorMessage,\n\t\t\t\t\t\tparts,\n\t\t\t\t\t};\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst upsertEphemeralToolCall = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tif (!payload) return;\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (!name) return;\n\n\t\t\tif (name === 'write' || name === 'apply_patch') {\n\t\t\t\tconst bufferKey = getToolBufferKey(payload);\n\t\t\t\tconst bufferedLength = bufferKey\n\t\t\t\t\t? (toolInputBuffersRef.current.get(bufferKey)?.length ?? 0)\n\t\t\t\t\t: 0;\n\t\t\t\tif (bufferedLength >= TOOL_PREVIEW_THROTTLE_MIN_CHARS) {\n\t\t\t\t\tconst emitKey = callId ?? `name:${name}`;\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tconst last = toolMessageEmitRef.current.get(emitKey) ?? 0;\n\t\t\t\t\tif (now - last < STREAMING_TOOL_MESSAGE_THROTTLE_MS) return;\n\t\t\t\t\ttoolMessageEmitRef.current.set(emitKey, now);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tlet targetIndex = resolveAssistantTargetIndex(nextMessages);\n\t\t\t\t\tif (typeof payload.messageId === 'string') {\n\t\t\t\t\t\tconst explicitIndex = nextMessages.findIndex(\n\t\t\t\t\t\t\t(message) => message.id === payload.messageId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (explicitIndex !== -1) targetIndex = explicitIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[targetIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = -1;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.toolCallId === callId && part.ephemeral,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Only fallback to name match if we don't have a callId\n\t\t\t\t\tif (partIndex === -1 && !callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.ephemeral && part.toolName === name,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst args = getToolEventArgs(payload);\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tconst contentJsonBase: Record<string, unknown> = { name };\n\t\t\t\t\tif (callId) contentJsonBase.callId = callId;\n\t\t\t\t\tif (args !== undefined) contentJsonBase.args = args;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: callId\n\t\t\t\t\t\t\t\t? `ephemeral-tool-call-${callId}`\n\t\t\t\t\t\t\t\t: `ephemeral-tool-call-${name}-${Date.now()}`,\n\t\t\t\t\t\t\tmessageId: targetMessage.id,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\t\t\tcontent: JSON.stringify(contentJsonBase),\n\t\t\t\t\t\t\tcontentJson: contentJsonBase,\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: name,\n\t\t\t\t\t\t\ttoolCallId: callId,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t\tephemeral: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst nextContentJson: Record<string, unknown> = {\n\t\t\t\t\t\t\t...(typeof existing.contentJson === 'object' &&\n\t\t\t\t\t\t\t!Array.isArray(existing.contentJson)\n\t\t\t\t\t\t\t\t? (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (callId) nextContentJson.callId = callId;\n\t\t\t\t\t\tif (args !== undefined) nextContentJson.args = args;\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify(nextContentJson),\n\t\t\t\t\t\t\tcontentJson: nextContentJson,\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t\ttoolCallId: callId ?? existing.toolCallId,\n\t\t\t\t\t\t\ttoolName: name,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[targetIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst accumulateToolInputDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta: string,\n\t\t) => {\n\t\t\tif (!payload) return;\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (!name) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tlet targetIndex = resolveAssistantTargetIndex(nextMessages);\n\t\t\t\t\tif (typeof payload.messageId === 'string') {\n\t\t\t\t\t\tconst explicitIndex = nextMessages.findIndex(\n\t\t\t\t\t\t\t(message) => message.id === payload.messageId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (explicitIndex !== -1) targetIndex = explicitIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[targetIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = -1;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.toolCallId === callId && part.ephemeral,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (partIndex === -1 && !callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.ephemeral && part.toolName === name,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst contentJsonBase: Record<string, unknown> = {\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t_streamedInput: getBoundedStreamingToolInput(delta),\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (callId) contentJsonBase.callId = callId;\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: callId\n\t\t\t\t\t\t\t\t? `ephemeral-tool-call-${callId}`\n\t\t\t\t\t\t\t\t: `ephemeral-tool-call-${name}-${Date.now()}`,\n\t\t\t\t\t\t\tmessageId: targetMessage.id,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\t\t\tcontent: JSON.stringify(contentJsonBase),\n\t\t\t\t\t\t\tcontentJson: contentJsonBase,\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: name,\n\t\t\t\t\t\t\ttoolCallId: callId,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t\tephemeral: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst prev =\n\t\t\t\t\t\t\ttypeof (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t?._streamedInput === 'string'\n\t\t\t\t\t\t\t\t? ((existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t._streamedInput as string)\n\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\t\tconst nextContentJson: Record<string, unknown> = {\n\t\t\t\t\t\t\t...(typeof existing.contentJson === 'object' &&\n\t\t\t\t\t\t\t!Array.isArray(existing.contentJson)\n\t\t\t\t\t\t\t\t? (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t_streamedInput: getBoundedStreamingToolInput(prev + delta),\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify(nextContentJson),\n\t\t\t\t\t\t\tcontentJson: nextContentJson,\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[targetIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst accumulateToolOutputDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta: string,\n\t\t) => {\n\t\t\tif (!payload) return;\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (!name) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tlet targetIndex = resolveAssistantTargetIndex(nextMessages);\n\t\t\t\t\tif (typeof payload.messageId === 'string') {\n\t\t\t\t\t\tconst explicitIndex = nextMessages.findIndex(\n\t\t\t\t\t\t\t(message) => message.id === payload.messageId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (explicitIndex !== -1) targetIndex = explicitIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[targetIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = -1;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.toolCallId === callId && part.ephemeral,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (partIndex === -1 && !callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.ephemeral && part.toolName === name,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst contentJsonBase: Record<string, unknown> = {\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t_streamedOutput: delta,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (callId) contentJsonBase.callId = callId;\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: callId\n\t\t\t\t\t\t\t\t? `ephemeral-tool-call-${callId}`\n\t\t\t\t\t\t\t\t: `ephemeral-tool-call-${name}-${Date.now()}`,\n\t\t\t\t\t\t\tmessageId: targetMessage.id,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\t\t\tcontent: JSON.stringify(contentJsonBase),\n\t\t\t\t\t\t\tcontentJson: contentJsonBase,\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: name,\n\t\t\t\t\t\t\ttoolCallId: callId,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t\tephemeral: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst prev =\n\t\t\t\t\t\t\ttypeof (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t?._streamedOutput === 'string'\n\t\t\t\t\t\t\t\t? ((existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t._streamedOutput as string)\n\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\t\tconst nextContentJson: Record<string, unknown> = {\n\t\t\t\t\t\t\t...(typeof existing.contentJson === 'object' &&\n\t\t\t\t\t\t\t!Array.isArray(existing.contentJson)\n\t\t\t\t\t\t\t\t? (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t_streamedOutput: prev + delta,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify(nextContentJson),\n\t\t\t\t\t\t\tcontentJson: nextContentJson,\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[targetIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst resolveEphemeralToolCall = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tif (!callId) return;\n\t\t\tconst payloadName = getToolEventName(payload);\n\t\t\tconst payloadMessageId =\n\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\tconst payloadStepIndex =\n\t\t\t\ttypeof payload?.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\tconst payloadResult = payload?.result;\n\t\t\tconst payloadArtifact = payload?.artifact;\n\t\t\tconst payloadArgs = getToolEventArgs(payload);\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tlet changed = false;\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tconst nextMessages = oldMessages.map((message) => {\n\t\t\t\t\t\tif (payloadMessageId && message.id !== payloadMessageId) {\n\t\t\t\t\t\t\treturn message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!message.parts?.length) return message;\n\t\t\t\t\t\tlet messageChanged = false;\n\t\t\t\t\t\tconst updatedParts = message.parts.map((part) => {\n\t\t\t\t\t\t\tif (!(part.ephemeral && part.toolCallId === callId)) {\n\t\t\t\t\t\t\t\treturn part;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmessageChanged = true;\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\tconst nextContentJson: Record<string, unknown> = {\n\t\t\t\t\t\t\t\t...(typeof part.contentJson === 'object' &&\n\t\t\t\t\t\t\t\t!Array.isArray(part.contentJson)\n\t\t\t\t\t\t\t\t\t? (part.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\tname: payloadName ?? part.toolName ?? 'tool',\n\t\t\t\t\t\t\t\tcallId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (payloadArgs !== undefined) nextContentJson.args = payloadArgs;\n\t\t\t\t\t\t\tif (payloadResult !== undefined)\n\t\t\t\t\t\t\t\tnextContentJson.result = payloadResult;\n\t\t\t\t\t\t\tif (payloadArtifact !== undefined)\n\t\t\t\t\t\t\t\tnextContentJson.artifact = payloadArtifact;\n\t\t\t\t\t\t\tconst durationMs =\n\t\t\t\t\t\t\t\tpart.startedAt && Number.isFinite(part.startedAt)\n\t\t\t\t\t\t\t\t\t? Math.max(0, now - part.startedAt)\n\t\t\t\t\t\t\t\t\t: part.toolDurationMs;\n\t\t\t\t\t\t\tconst resolvedPart: MessagePart = {\n\t\t\t\t\t\t\t\t...part,\n\t\t\t\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\t\t\t\tcontent: JSON.stringify(nextContentJson),\n\t\t\t\t\t\t\t\tcontentJson: nextContentJson,\n\t\t\t\t\t\t\t\tstepIndex: payloadStepIndex ?? part.stepIndex ?? null,\n\t\t\t\t\t\t\t\tcompletedAt: now,\n\t\t\t\t\t\t\t\ttoolName: payloadName ?? part.toolName,\n\t\t\t\t\t\t\t\ttoolDurationMs: durationMs ?? null,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn resolvedPart;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!messageChanged) return message;\n\t\t\t\t\t\treturn { ...message, parts: updatedParts };\n\t\t\t\t\t});\n\t\t\t\t\treturn changed ? nextMessages : oldMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst removeEphemeralToolCall = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tif (!callId) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tlet changed = false;\n\t\t\t\t\tconst nextMessages = oldMessages.map((message) => {\n\t\t\t\t\t\tif (!message.parts?.length) return message;\n\t\t\t\t\t\tconst filtered = message.parts.filter(\n\t\t\t\t\t\t\t(part) => !(part.ephemeral && part.toolCallId === callId),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (filtered.length === message.parts.length) return message;\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\treturn { ...message, parts: filtered };\n\t\t\t\t\t});\n\t\t\t\t\treturn changed ? nextMessages : oldMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst clearEphemeralForMessage = (messageId: string | null) => {\n\t\t\tif (!messageId) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst targetIndex = oldMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === messageId,\n\t\t\t\t\t);\n\t\t\t\t\tif (targetIndex === -1) return oldMessages;\n\t\t\t\t\tconst target = oldMessages[targetIndex];\n\t\t\t\t\tif (\n\t\t\t\t\t\t!target.parts?.some(\n\t\t\t\t\t\t\t(part) => part.ephemeral && part.type === 'tool_call',\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t\treturn oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tnextMessages[targetIndex] = {\n\t\t\t\t\t\t...target,\n\t\t\t\t\t\tparts:\n\t\t\t\t\t\t\ttarget.parts?.filter(\n\t\t\t\t\t\t\t\t(part) => !(part.ephemeral && part.type === 'tool_call'),\n\t\t\t\t\t\t\t) ?? [],\n\t\t\t\t\t};\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst markMessageCompleted = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst id = typeof payload?.id === 'string' ? payload.id : null;\n\t\t\tif (!id) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tconst messageIndex = nextMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === id,\n\t\t\t\t\t);\n\t\t\t\t\tif (messageIndex === -1) return oldMessages;\n\t\t\t\t\tconst existing = nextMessages[messageIndex];\n\t\t\t\t\tnextMessages[messageIndex] = {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\tstatus: 'complete',\n\t\t\t\t\t\tcompletedAt: Date.now(),\n\t\t\t\t\t};\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst unsubscribe = client.on('*', (event) => {\n\t\t\t// console.log('[useSessionStream] Event received:', event);\n\t\t\tconst payload = event.payload as Record<string, unknown> | undefined;\n\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'message.created': {\n\t\t\t\t\tconst role = typeof payload?.role === 'string' ? payload.role : null;\n\t\t\t\t\tconst id = typeof payload?.id === 'string' ? payload.id : null;\n\t\t\t\t\tif (role === 'assistant' && id) {\n\t\t\t\t\t\tassistantMessageIdRef.current = id;\n\t\t\t\t\t\toptimisticallyQueueMessage(queryClient, sessionId, id);\n\t\t\t\t\t}\n\t\t\t\t\tif (id && role) {\n\t\t\t\t\t\tconst agent =\n\t\t\t\t\t\t\ttypeof payload?.agent === 'string' ? payload.agent : '';\n\t\t\t\t\t\tconst provider =\n\t\t\t\t\t\t\ttypeof payload?.provider === 'string' ? payload.provider : '';\n\t\t\t\t\t\tconst model =\n\t\t\t\t\t\t\ttypeof payload?.model === 'string' ? payload.model : '';\n\t\t\t\t\t\tconst content =\n\t\t\t\t\t\t\ttypeof payload?.content === 'string' ? payload.content : null;\n\t\t\t\t\t\tconst userParts: MessagePart[] =\n\t\t\t\t\t\t\trole === 'user' && content\n\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tid: `${id}-text`,\n\t\t\t\t\t\t\t\t\t\t\tmessageId: id,\n\t\t\t\t\t\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\t\t\t\t\t\tstepIndex: null,\n\t\t\t\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\t\t\t\tcontent: JSON.stringify({ text: content }),\n\t\t\t\t\t\t\t\t\t\t\tcontentJson: { text: content },\n\t\t\t\t\t\t\t\t\t\t\tagent,\n\t\t\t\t\t\t\t\t\t\t\tprovider,\n\t\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\tcompletedAt: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\ttoolName: null,\n\t\t\t\t\t\t\t\t\t\t\ttoolCallId: null,\n\t\t\t\t\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t\t\t\t['messages', sessionId],\n\t\t\t\t\t\t\t(oldMessages) => {\n\t\t\t\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\t\t\t\tif (oldMessages.some((m) => m.id === id)) return oldMessages;\n\t\t\t\t\t\t\t\tconst newMessage: Message = {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\t\trole: role as Message['role'],\n\t\t\t\t\t\t\t\t\tstatus: role === 'user' ? 'complete' : 'pending',\n\t\t\t\t\t\t\t\t\tagent,\n\t\t\t\t\t\t\t\t\tprovider,\n\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\t\t\tlatencyMs: null,\n\t\t\t\t\t\t\t\t\tpromptTokens: null,\n\t\t\t\t\t\t\t\t\tcompletionTokens: null,\n\t\t\t\t\t\t\t\t\ttotalTokens: null,\n\t\t\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t\t\t\tparts: userParts,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst next = [...oldMessages, newMessage];\n\t\t\t\t\t\t\t\tnext.sort((a, b) => a.createdAt - b.createdAt);\n\t\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'message.part.delta': {\n\t\t\t\t\tapplyMessageDelta(payload);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'reasoning.delta': {\n\t\t\t\t\tapplyReasoningDelta(payload);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'message.completed': {\n\t\t\t\t\tconst id = typeof payload?.id === 'string' ? payload.id : null;\n\t\t\t\t\tif (id && assistantMessageIdRef.current === id) {\n\t\t\t\t\t\tassistantMessageIdRef.current = null;\n\t\t\t\t\t}\n\t\t\t\t\tmarkMessageCompleted(payload);\n\t\t\t\t\tclearEphemeralForMessage(id);\n\t\t\t\t\tif (id) {\n\t\t\t\t\t\tqueryClient.setQueryData<ReturnType<typeof normalizeQueueState>>(\n\t\t\t\t\t\t\t['queueState', sessionId],\n\t\t\t\t\t\t\t(current) => {\n\t\t\t\t\t\t\t\tif (!current || current.currentMessageId !== id) return current;\n\t\t\t\t\t\t\t\treturn normalizeQueueState({\n\t\t\t\t\t\t\t\t\tcurrentMessageId: null,\n\t\t\t\t\t\t\t\t\tqueuedMessages: [],\n\t\t\t\t\t\t\t\t\tisRunning: false,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['messages', sessionId] });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['goal', sessionId] });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['subagents', sessionId] });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.delta': {\n\t\t\t\t\tconst channel =\n\t\t\t\t\t\ttypeof payload?.channel === 'string' ? payload.channel : null;\n\t\t\t\t\tconst delta =\n\t\t\t\t\t\tchannel === 'output'\n\t\t\t\t\t\t\t? getToolOutputDelta(payload)\n\t\t\t\t\t\t\t: getToolInputDelta(payload);\n\t\t\t\t\tif (channel === 'input' || (channel == null && delta)) {\n\t\t\t\t\t\tif (delta) {\n\t\t\t\t\t\t\taccumulateToolInputDelta(payload, delta);\n\t\t\t\t\t\t\thandleToolActivityViewerEvent('tool.delta', payload, delta);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tupsertEphemeralToolCall(payload);\n\t\t\t\t\t\t\thandleToolActivityViewerEvent('tool.delta', payload);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (channel === 'output' && delta) {\n\t\t\t\t\t\taccumulateToolOutputDelta(payload, delta);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.call': {\n\t\t\t\t\tupsertEphemeralToolCall(payload);\n\t\t\t\t\thandleToolActivityViewerEvent('tool.call', payload);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.result': {\n\t\t\t\t\tresolveEphemeralToolCall(payload);\n\t\t\t\t\thandleToolActivityViewerEvent('tool.result', payload);\n\t\t\t\t\tconst key = getToolBufferKey(payload);\n\t\t\t\t\tif (key) toolInputBuffersRef.current.delete(key);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.approval.required': {\n\t\t\t\t\tconst callId =\n\t\t\t\t\t\ttypeof payload?.callId === 'string' ? payload.callId : null;\n\t\t\t\t\tconst toolName =\n\t\t\t\t\t\ttypeof payload?.toolName === 'string' ? payload.toolName : null;\n\t\t\t\t\tconst messageId =\n\t\t\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\t\t\tconst args = payload?.args;\n\t\t\t\t\tif (callId && toolName && messageId) {\n\t\t\t\t\t\taddPendingApproval({\n\t\t\t\t\t\t\tcallId,\n\t\t\t\t\t\t\ttoolName,\n\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.approval.resolved': {\n\t\t\t\t\tconst callId =\n\t\t\t\t\t\ttypeof payload?.callId === 'string' ? payload.callId : null;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tremovePendingApproval(callId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.approval.updated': {\n\t\t\t\t\tconst callId =\n\t\t\t\t\t\ttypeof payload?.callId === 'string' ? payload.callId : null;\n\t\t\t\t\tconst args = payload?.args;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tupdatePendingApproval(callId, args);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'shell.secure_input.required': {\n\t\t\t\t\tconst promptId =\n\t\t\t\t\t\ttypeof payload?.promptId === 'string' ? payload.promptId : null;\n\t\t\t\t\tconst prompt =\n\t\t\t\t\t\ttypeof payload?.prompt === 'string' ? payload.prompt : null;\n\t\t\t\t\tif (promptId && prompt) {\n\t\t\t\t\t\taddPendingInput({\n\t\t\t\t\t\t\tpromptId,\n\t\t\t\t\t\t\tprompt,\n\t\t\t\t\t\t\tmessageId:\n\t\t\t\t\t\t\t\ttypeof payload?.messageId === 'string'\n\t\t\t\t\t\t\t\t\t? payload.messageId\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tcallId:\n\t\t\t\t\t\t\t\ttypeof payload?.callId === 'string'\n\t\t\t\t\t\t\t\t\t? payload.callId\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tinputKind: 'password',\n\t\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'shell.secure_input.resolved': {\n\t\t\t\t\tconst promptId =\n\t\t\t\t\t\ttypeof payload?.promptId === 'string' ? payload.promptId : null;\n\t\t\t\t\tif (promptId) {\n\t\t\t\t\t\tremovePendingInput(promptId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\thandleToolActivityViewerEvent('error', payload);\n\t\t\t\t\tremoveEphemeralToolCall(payload);\n\t\t\t\t\tconst messageId =\n\t\t\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\t\t\tif (messageId) {\n\t\t\t\t\t\tif (assistantMessageIdRef.current === messageId) {\n\t\t\t\t\t\t\tassistantMessageIdRef.current = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearEphemeralForMessage(messageId);\n\t\t\t\t\t\tupsertErrorPart(payload);\n\t\t\t\t\t}\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['messages', sessionId] });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'message.updated': {\n\t\t\t\t\tconst id = typeof payload?.id === 'string' ? payload.id : null;\n\t\t\t\t\tconst status =\n\t\t\t\t\t\ttypeof payload?.status === 'string' ? payload.status : null;\n\t\t\t\t\tif (id && status) {\n\t\t\t\t\t\tif (status !== 'pending' && assistantMessageIdRef.current === id) {\n\t\t\t\t\t\t\tassistantMessageIdRef.current = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (status !== 'pending') {\n\t\t\t\t\t\t\tclearEphemeralForMessage(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst error =\n\t\t\t\t\t\t\ttypeof payload?.error === 'string' ? payload.error : undefined;\n\t\t\t\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t\t\t\t['messages', sessionId],\n\t\t\t\t\t\t\t(oldMessages) => {\n\t\t\t\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\t\t\t\tconst idx = oldMessages.findIndex((m) => m.id === id);\n\t\t\t\t\t\t\t\tif (idx === -1) return oldMessages;\n\t\t\t\t\t\t\t\tconst next = [...oldMessages];\n\t\t\t\t\t\t\t\tnext[idx] = {\n\t\t\t\t\t\t\t\t\t...next[idx],\n\t\t\t\t\t\t\t\t\tstatus: status as Message['status'],\n\t\t\t\t\t\t\t\t\tcompletedAt:\n\t\t\t\t\t\t\t\t\t\tstatus === 'pending'\n\t\t\t\t\t\t\t\t\t\t\t? next[idx].completedAt\n\t\t\t\t\t\t\t\t\t\t\t: (next[idx].completedAt ?? Date.now()),\n\t\t\t\t\t\t\t\t\terror: error ?? next[idx].error,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'goal.updated': {\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['goal', sessionId] });\n\t\t\t\t\tqueryClient.invalidateQueries({\n\t\t\t\t\t\tqueryKey: ['subagents', sessionId],\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'queue.updated': {\n\t\t\t\t\tconst queueState = normalizeQueueState({\n\t\t\t\t\t\tcurrentMessageId: payload?.currentMessageId as string | null,\n\t\t\t\t\t\tqueuedMessages: (payload?.queuedMessages ?? []) as Array<{\n\t\t\t\t\t\t\tmessageId: string;\n\t\t\t\t\t\t\tposition: number;\n\t\t\t\t\t\t}>,\n\t\t\t\t\t\tisRunning:\n\t\t\t\t\t\t\ttypeof payload?.isRunning === 'boolean'\n\t\t\t\t\t\t\t\t? payload.isRunning\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tqueryClient.setQueryData(['queueState', sessionId], queueState);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (event.type === 'finish-step') {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (now - lastSessionInvalidation >= 2000) {\n\t\t\t\t\tlastSessionInvalidation = now;\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tclient.disconnect();\n\t\t};\n\t}, [\n\t\tsessionId,\n\t\tqueryClient,\n\t\taddPendingApproval,\n\t\taddPendingInput,\n\t\tremovePendingApproval,\n\t\tremovePendingInput,\n\t\tenabled,\n\t\tsetPendingApprovals,\n\t\tsetPendingInputs,\n\t\tupdatePendingApproval,\n\t]);\n}\n",
37
+ "import {\n\tuseInfiniteQuery,\n\tuseMutation,\n\tuseQuery,\n\tuseQueryClient,\n} from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { apiClient } from '../lib/api-client';\nimport type {\n\tCreateSessionRequest,\n\tUpdateSessionRequest,\n\tSession,\n\tSessionsPage,\n} from '../types/api';\n\nconst SESSIONS_PAGE_SIZE = 50;\n\nexport const sessionsQueryKey = ['sessions', 'list'] as const;\n\nexport type SessionListFilter = 'otto' | undefined;\n\nexport function useSessionsInfinite(sessionType?: SessionListFilter) {\n\treturn useInfiniteQuery({\n\t\tqueryKey: sessionType\n\t\t\t? ([...sessionsQueryKey, sessionType] as const)\n\t\t\t: sessionsQueryKey,\n\t\tqueryFn: ({ pageParam = 0 }) =>\n\t\t\tapiClient.getSessionsPage({\n\t\t\t\tlimit: SESSIONS_PAGE_SIZE,\n\t\t\t\toffset: pageParam,\n\t\t\t\tsessionType,\n\t\t\t}),\n\t\tgetNextPageParam: (lastPage) => lastPage.nextOffset ?? undefined,\n\t\tinitialPageParam: 0,\n\t\tstaleTime: 30_000,\n\t\trefetchInterval: 30_000,\n\t\trefetchOnWindowFocus: false,\n\t});\n}\n\nexport function useSessions(sessionType?: SessionListFilter) {\n\tconst query = useSessionsInfinite(sessionType);\n\tconst data = useMemo<Session[]>(() => {\n\t\tif (!query.data?.pages) return [];\n\t\treturn query.data.pages.flatMap((p) => p.items ?? []);\n\t}, [query.data]);\n\n\treturn {\n\t\tdata,\n\t\tisLoading: query.isLoading,\n\t\tisError: query.isError,\n\t\terror: query.error,\n\t\thasNextPage: query.hasNextPage,\n\t\tfetchNextPage: query.fetchNextPage,\n\t\tisFetchingNextPage: query.isFetchingNextPage,\n\t};\n}\n\n/**\n * Resolves a session row by id. Looks in the main sessions list first; when\n * the session is not listed there (e.g. otto orchestrator sessions, which are\n * excluded from the default listing) it falls back to fetching the single\n * session. The fallback query stays disabled for normally-listed sessions.\n */\nexport function useSession(sessionId: string) {\n\tconst { data: sessions } = useSessions();\n\tconst listed = sessions?.find((s) => s.id === sessionId);\n\tconst { data: detail } = useQuery({\n\t\tqueryKey: ['session', sessionId],\n\t\tqueryFn: () => apiClient.getSession(sessionId),\n\t\tenabled: Boolean(sessionId) && !listed,\n\t\tstaleTime: 15_000,\n\t});\n\treturn listed ?? detail;\n}\n\nexport function useCreateSession() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (data: CreateSessionRequest) => apiClient.createSession(data),\n\t\tonSuccess: (newSession) => {\n\t\t\tqueryClient.setQueryData<{ pages: SessionsPage[]; pageParams: number[] }>(\n\t\t\t\tsessionsQueryKey,\n\t\t\t\t(old) => {\n\t\t\t\t\tif (!old) return old;\n\t\t\t\t\tconst firstPage = old.pages[0];\n\t\t\t\t\tif (!firstPage) return old;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...old,\n\t\t\t\t\t\tpages: [\n\t\t\t\t\t\t\t{ ...firstPage, items: [newSession, ...firstPage.items] },\n\t\t\t\t\t\t\t...old.pages.slice(1),\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t},\n\t});\n}\n\nexport function useUpdateSession(sessionId: string) {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (data: UpdateSessionRequest) =>\n\t\t\tapiClient.updateSession(sessionId, data),\n\t\tonSuccess: async () => {\n\t\t\tawait queryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t\tawait queryClient.invalidateQueries({ queryKey: ['session', sessionId] });\n\t\t},\n\t});\n}\n\nexport function useSetSessionPinned() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: ({\n\t\t\tsessionId,\n\t\t\tisPinned,\n\t\t}: {\n\t\t\tsessionId: string;\n\t\t\tisPinned: boolean;\n\t\t}) => apiClient.updateSession(sessionId, { isPinned }),\n\t\tonSuccess: async (updatedSession) => {\n\t\t\tqueryClient.setQueryData<{ pages: SessionsPage[]; pageParams: number[] }>(\n\t\t\t\tsessionsQueryKey,\n\t\t\t\t(old) => {\n\t\t\t\t\tif (!old) return old;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...old,\n\t\t\t\t\t\tpages: old.pages.map((page) => ({\n\t\t\t\t\t\t\t...page,\n\t\t\t\t\t\t\titems: page.items.map((session) =>\n\t\t\t\t\t\t\t\tsession.id === updatedSession.id\n\t\t\t\t\t\t\t\t\t? { ...session, ...updatedSession }\n\t\t\t\t\t\t\t\t\t: session,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t})),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t\tawait queryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t\tawait queryClient.invalidateQueries({\n\t\t\t\tqueryKey: ['session', updatedSession.id],\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport function useMarkSessionViewed() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (sessionId: string) => apiClient.markSessionViewed(sessionId),\n\t\tonSuccess: (updatedSession) => {\n\t\t\tqueryClient.setQueryData<{ pages: SessionsPage[]; pageParams: number[] }>(\n\t\t\t\tsessionsQueryKey,\n\t\t\t\t(old) => {\n\t\t\t\t\tif (!old) return old;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...old,\n\t\t\t\t\t\tpages: old.pages.map((page) => ({\n\t\t\t\t\t\t\t...page,\n\t\t\t\t\t\t\titems: page.items.map((session) =>\n\t\t\t\t\t\t\t\tsession.id === updatedSession.id\n\t\t\t\t\t\t\t\t\t? { ...session, ...updatedSession }\n\t\t\t\t\t\t\t\t\t: session,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t})),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t});\n}\n\nexport function useDeleteSession() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (sessionId: string) => apiClient.deleteSession(sessionId),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t},\n\t});\n}\n",
38
+ "import { useEffect, useRef } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { SSEClient } from '../lib/sse-client';\nimport { apiClient } from '../lib/api-client';\nimport type { Message, MessagePart } from '../types/api';\nimport { useToolApprovalStore } from '../stores/toolApprovalStore';\nimport { useSecureInputStore } from '../stores/secureInputStore';\nimport { useViewerTabsStore } from '../stores/viewerTabsStore';\nimport {\n\tnormalizeQueueState,\n\toptimisticallyQueueMessage,\n} from './useQueueState';\nimport { sessionsQueryKey } from './useSessions';\n\nconst TOOL_PREVIEW_THROTTLE_MS = 500;\nconst TOOL_PREVIEW_THROTTLE_MIN_CHARS = 8_000;\nconst TOOL_PREVIEW_THROTTLE_MIN_DELTA_CHARS = 16_000;\nconst STREAMING_WRITE_CONTENT_PREVIEW_CHARS = 24_000;\nconst STREAMING_PATCH_PREVIEW_HEAD_CHARS = 12_000;\nconst STREAMING_PATCH_PREVIEW_TAIL_CHARS = 24_000;\nconst STREAMING_TOOL_INPUT_HEAD_CHARS = 8_000;\nconst STREAMING_TOOL_INPUT_TAIL_CHARS = 16_000;\nconst STREAMING_TOOL_MESSAGE_THROTTLE_MS = 500;\n\nexport function useSessionStream(\n\tsessionId: string | undefined,\n\tenabled = true,\n) {\n\tconst queryClient = useQueryClient();\n\tconst clientRef = useRef<SSEClient | null>(null);\n\tconst assistantMessageIdRef = useRef<string | null>(null);\n\tconst toolInputBuffersRef = useRef<Map<string, string>>(new Map());\n\tconst toolPreviewEmitRef = useRef<\n\t\tMap<\n\t\t\tstring,\n\t\t\t{ emittedAt: number; contentLength: number; lineSignature?: string }\n\t\t>\n\t>(new Map());\n\tconst toolMessageEmitRef = useRef<Map<string, number>>(new Map());\n\n\tconst {\n\t\taddPendingApproval,\n\t\tremovePendingApproval,\n\t\tupdatePendingApproval,\n\t\tsetPendingApprovals,\n\t} = useToolApprovalStore();\n\tconst { addPendingInput, removePendingInput, setPendingInputs } =\n\t\tuseSecureInputStore();\n\n\tuseEffect(() => {\n\t\tif (!sessionId || !enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tassistantMessageIdRef.current = null;\n\t\ttoolInputBuffersRef.current.clear();\n\t\ttoolPreviewEmitRef.current.clear();\n\t\ttoolMessageEmitRef.current.clear();\n\t\tlet lastSessionInvalidation = 0;\n\n\t\t// Fetch pending approvals from server for this session\n\t\tapiClient\n\t\t\t.getPendingApprovals(sessionId)\n\t\t\t.then((result) => {\n\t\t\t\tif (result.ok && result.pending.length > 0) {\n\t\t\t\t\tsetPendingApprovals(result.pending);\n\t\t\t\t} else {\n\t\t\t\t\tsetPendingApprovals([]);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tsetPendingApprovals([]);\n\t\t\t});\n\n\t\tapiClient\n\t\t\t.getPendingSecureInputs(sessionId)\n\t\t\t.then((result) => {\n\t\t\t\tif (result.ok && result.pending.length > 0) {\n\t\t\t\t\tsetPendingInputs(result.pending);\n\t\t\t\t} else {\n\t\t\t\t\tsetPendingInputs([]);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tsetPendingInputs([]);\n\t\t\t});\n\n\t\tconst client = new SSEClient();\n\t\tclientRef.current = client;\n\n\t\tconst url = apiClient.getStreamUrl(sessionId);\n\t\tconsole.log('[useSessionStream] Connecting to stream:', url);\n\t\tclient.connect(url);\n\n\t\tconst resolveAssistantTargetIndex = (messages: Message[]): number => {\n\t\t\tif (assistantMessageIdRef.current) {\n\t\t\t\tconst byId = messages.findIndex(\n\t\t\t\t\t(message) => message.id === assistantMessageIdRef.current,\n\t\t\t\t);\n\t\t\t\tif (byId !== -1) return byId;\n\t\t\t}\n\t\t\tfor (let i = messages.length - 1; i >= 0; i -= 1) {\n\t\t\t\tconst candidate = messages[i];\n\t\t\t\tif (candidate.role === 'assistant' && candidate.status === 'pending') {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\n\t\tconst extractText = (part: MessagePart): string => {\n\t\t\tif (\n\t\t\t\tpart.contentJson &&\n\t\t\t\ttypeof part.contentJson === 'object' &&\n\t\t\t\t!Array.isArray(part.contentJson) &&\n\t\t\t\t'text' in part.contentJson\n\t\t\t) {\n\t\t\t\treturn String((part.contentJson as Record<string, unknown>).text ?? '');\n\t\t\t}\n\t\t\tif (typeof part.content === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = JSON.parse(part.content);\n\t\t\t\t\tif (parsed && typeof parsed.text === 'string') return parsed.text;\n\t\t\t\t} catch {}\n\t\t\t\treturn part.content;\n\t\t\t}\n\t\t\treturn '';\n\t\t};\n\n\t\tconst getToolEventCallId = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tif (typeof payload?.callId === 'string') return payload.callId;\n\t\t\treturn typeof payload?.toolCallId === 'string'\n\t\t\t\t? payload.toolCallId\n\t\t\t\t: null;\n\t\t};\n\n\t\tconst getToolEventName = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tif (typeof payload?.name === 'string') return payload.name;\n\t\t\treturn typeof payload?.toolName === 'string' ? payload.toolName : null;\n\t\t};\n\n\t\tconst getToolEventArgs = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): unknown => payload?.args ?? payload?.input;\n\n\t\tconst getToolEventResult = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): unknown => payload?.result ?? payload?.output;\n\n\t\tconst getToolBufferKey = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tif (callId) return callId;\n\t\t\tconst name = getToolEventName(payload);\n\t\t\treturn name ? `name:${name}` : null;\n\t\t};\n\n\t\tconst parseArgsRecord = (\n\t\t\tvalue: unknown,\n\t\t): Record<string, unknown> | null => {\n\t\t\tif (value && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t\treturn value as Record<string, unknown>;\n\t\t\t}\n\n\t\t\tif (typeof value !== 'string') return null;\n\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(value);\n\t\t\t\treturn parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n\t\t\t\t\t? (parsed as Record<string, unknown>)\n\t\t\t\t\t: null;\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tconst normalizeLineNumber = (value: unknown): number | undefined => {\n\t\t\tconst parsed =\n\t\t\t\ttypeof value === 'number'\n\t\t\t\t\t? value\n\t\t\t\t\t: typeof value === 'string'\n\t\t\t\t\t\t? Number.parseInt(value, 10)\n\t\t\t\t\t\t: Number.NaN;\n\t\t\treturn Number.isFinite(parsed) && parsed > 0\n\t\t\t\t? Math.floor(parsed)\n\t\t\t\t: undefined;\n\t\t};\n\n\t\tconst parseLineRange = (\n\t\t\tvalue: unknown,\n\t\t): { startLine?: number; endLine?: number } => {\n\t\t\tif (typeof value !== 'string') return {};\n\t\t\tconst match = value.match(/@(\\d+)(?:-(\\d+))?/);\n\t\t\tif (!match) return {};\n\t\t\treturn {\n\t\t\t\tstartLine: normalizeLineNumber(match[1]),\n\t\t\t\tendLine: normalizeLineNumber(match[2] ?? match[1]),\n\t\t\t};\n\t\t};\n\n\t\tconst getBoundedStreamingToolInput = (value: string): string => {\n\t\t\tconst maxLength =\n\t\t\t\tSTREAMING_TOOL_INPUT_HEAD_CHARS + STREAMING_TOOL_INPUT_TAIL_CHARS;\n\t\t\tif (value.length <= maxLength) return value;\n\t\t\treturn `${value.slice(\n\t\t\t\t0,\n\t\t\t\tSTREAMING_TOOL_INPUT_HEAD_CHARS,\n\t\t\t)}\\n… streamed tool input truncated for UI responsiveness …\\n${value.slice(\n\t\t\t\t-STREAMING_TOOL_INPUT_TAIL_CHARS,\n\t\t\t)}`;\n\t\t};\n\n\t\tconst getToolArgsForViewer = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t): Record<string, unknown> | null => {\n\t\t\tconst args = parseArgsRecord(getToolEventArgs(payload));\n\t\t\tif (args) return args;\n\n\t\t\tconst key = getToolBufferKey(payload);\n\t\t\tif (!key) return null;\n\n\t\t\tconst previous = toolInputBuffersRef.current.get(key) ?? '';\n\t\t\tif (!delta) return parseArgsRecord(previous);\n\n\t\t\tconst next = getBoundedStreamingToolInput(`${previous}${delta}`);\n\t\t\ttoolInputBuffersRef.current.set(key, next);\n\t\t\treturn parseArgsRecord(next);\n\t\t};\n\n\t\tconst bestEffortUnescapeJsonString = (value: string): string => {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(`\"${value.replace(/\\\\$/, '')}\"`) as string;\n\t\t\t} catch {\n\t\t\t\treturn value\n\t\t\t\t\t.replace(/\\\\n/g, '\\n')\n\t\t\t\t\t.replace(/\\\\t/g, '\\t')\n\t\t\t\t\t.replace(/\\\\r/g, '\\r')\n\t\t\t\t\t.replace(/\\\\\"/g, '\"')\n\t\t\t\t\t.replace(/\\\\\\\\/g, '\\\\');\n\t\t\t}\n\t\t};\n\n\t\tconst extractJsonStringField = (\n\t\t\ttext: string,\n\t\t\tfield: string,\n\t\t\trequireClosed = false,\n\t\t): string | undefined => {\n\t\t\tconst marker = `\"${field}\"`;\n\t\t\tconst markerIndex = text.indexOf(marker);\n\t\t\tif (markerIndex === -1) return undefined;\n\n\t\t\tconst colonIndex = text.indexOf(':', markerIndex + marker.length);\n\t\t\tif (colonIndex === -1) return undefined;\n\n\t\t\tconst quoteIndex = text.indexOf('\"', colonIndex + 1);\n\t\t\tif (quoteIndex === -1) return undefined;\n\n\t\t\tlet escaped = '';\n\t\t\tlet escaping = false;\n\t\t\tlet closed = false;\n\t\t\tfor (let i = quoteIndex + 1; i < text.length; i += 1) {\n\t\t\t\tconst char = text[i];\n\t\t\t\tif (escaping) {\n\t\t\t\t\tescaped += `\\\\${char}`;\n\t\t\t\t\tescaping = false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (char === '\\\\') {\n\t\t\t\t\tescaping = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (char === '\"') {\n\t\t\t\t\tclosed = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tescaped += char;\n\t\t\t}\n\n\t\t\tif (requireClosed && !closed) return undefined;\n\n\t\t\treturn bestEffortUnescapeJsonString(escaped);\n\t\t};\n\n\t\tconst getBufferedToolInput = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string => {\n\t\t\tconst key = getToolBufferKey(payload);\n\t\t\treturn key ? (toolInputBuffersRef.current.get(key) ?? '') : '';\n\t\t};\n\n\t\tconst getStringArg = (\n\t\t\targs: Record<string, unknown> | null,\n\t\t\tbuffer: string,\n\t\t\tfield: string,\n\t\t\trequireClosed = false,\n\t\t): string | undefined => {\n\t\t\tconst value = args?.[field];\n\t\t\tif (typeof value === 'string') return value;\n\t\t\treturn extractJsonStringField(buffer, field, requireClosed);\n\t\t};\n\n\t\tconst getStreamingWritePreviewContent = (\n\t\t\targs: Record<string, unknown> | null,\n\t\t\tbuffer: string,\n\t\t): string | undefined => {\n\t\t\tconst argContent = args?.content;\n\t\t\tif (typeof argContent === 'string') {\n\t\t\t\tif (argContent.length <= STREAMING_WRITE_CONTENT_PREVIEW_CHARS) {\n\t\t\t\t\treturn argContent;\n\t\t\t\t}\n\n\t\t\t\treturn `… showing latest streamed content only …\\n${argContent.slice(\n\t\t\t\t\t-STREAMING_WRITE_CONTENT_PREVIEW_CHARS,\n\t\t\t\t)}`;\n\t\t\t}\n\n\t\t\tconst marker = '\"content\"';\n\t\t\tconst markerIndex = buffer.indexOf(marker);\n\t\t\tif (markerIndex === -1) return undefined;\n\n\t\t\tconst colonIndex = buffer.indexOf(':', markerIndex + marker.length);\n\t\t\tif (colonIndex === -1) return undefined;\n\n\t\t\tconst quoteIndex = buffer.indexOf('\"', colonIndex + 1);\n\t\t\tif (quoteIndex === -1) return undefined;\n\n\t\t\tconst valueStart = quoteIndex + 1;\n\t\t\tif (buffer.length - valueStart <= STREAMING_WRITE_CONTENT_PREVIEW_CHARS) {\n\t\t\t\treturn extractJsonStringField(buffer, 'content');\n\t\t\t}\n\n\t\t\tconst rawTail = buffer.slice(\n\t\t\t\tMath.max(\n\t\t\t\t\tvalueStart,\n\t\t\t\t\tbuffer.length - STREAMING_WRITE_CONTENT_PREVIEW_CHARS,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn `… showing latest streamed content only …\\n${bestEffortUnescapeJsonString(\n\t\t\t\trawTail,\n\t\t\t)}`;\n\t\t};\n\n\t\tconst getStreamingPatchPreviewContent = (\n\t\t\targs: Record<string, unknown> | null,\n\t\t\tbuffer: string,\n\t\t): string | undefined => {\n\t\t\tconst argPatch = args?.patch;\n\t\t\tif (typeof argPatch === 'string') {\n\t\t\t\tif (\n\t\t\t\t\targPatch.length <=\n\t\t\t\t\tSTREAMING_PATCH_PREVIEW_HEAD_CHARS +\n\t\t\t\t\t\tSTREAMING_PATCH_PREVIEW_TAIL_CHARS\n\t\t\t\t) {\n\t\t\t\t\treturn argPatch;\n\t\t\t\t}\n\n\t\t\t\treturn `${argPatch.slice(\n\t\t\t\t\t0,\n\t\t\t\t\tSTREAMING_PATCH_PREVIEW_HEAD_CHARS,\n\t\t\t\t)}\\n… patch preview truncated while streaming …\\n${argPatch.slice(\n\t\t\t\t\t-STREAMING_PATCH_PREVIEW_TAIL_CHARS,\n\t\t\t\t)}`;\n\t\t\t}\n\n\t\t\tconst marker = '\"patch\"';\n\t\t\tconst markerIndex = buffer.indexOf(marker);\n\t\t\tif (markerIndex === -1) return undefined;\n\n\t\t\tconst colonIndex = buffer.indexOf(':', markerIndex + marker.length);\n\t\t\tif (colonIndex === -1) return undefined;\n\n\t\t\tconst quoteIndex = buffer.indexOf('\"', colonIndex + 1);\n\t\t\tif (quoteIndex === -1) return undefined;\n\n\t\t\tconst valueStart = quoteIndex + 1;\n\t\t\tconst rawLength = buffer.length - valueStart;\n\t\t\tif (\n\t\t\t\trawLength <=\n\t\t\t\tSTREAMING_PATCH_PREVIEW_HEAD_CHARS + STREAMING_PATCH_PREVIEW_TAIL_CHARS\n\t\t\t) {\n\t\t\t\treturn extractJsonStringField(buffer, 'patch');\n\t\t\t}\n\n\t\t\tconst rawHead = buffer.slice(\n\t\t\t\tvalueStart,\n\t\t\t\tvalueStart + STREAMING_PATCH_PREVIEW_HEAD_CHARS,\n\t\t\t);\n\t\t\tconst rawTail = buffer.slice(-STREAMING_PATCH_PREVIEW_TAIL_CHARS);\n\t\t\treturn `${bestEffortUnescapeJsonString(\n\t\t\t\trawHead,\n\t\t\t)}\\n… patch preview truncated while streaming …\\n${bestEffortUnescapeJsonString(\n\t\t\t\trawTail,\n\t\t\t)}`;\n\t\t};\n\n\t\tconst getResultRecord = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): Record<string, unknown> | null =>\n\t\t\tpayload?.result &&\n\t\t\ttypeof payload.result === 'object' &&\n\t\t\t!Array.isArray(payload.result)\n\t\t\t\t? (payload.result as Record<string, unknown>)\n\t\t\t\t: null;\n\n\t\tconst getArtifactRecord = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): Record<string, unknown> | null => {\n\t\t\tif (\n\t\t\t\tpayload?.artifact &&\n\t\t\t\ttypeof payload.artifact === 'object' &&\n\t\t\t\t!Array.isArray(payload.artifact)\n\t\t\t) {\n\t\t\t\treturn payload.artifact as Record<string, unknown>;\n\t\t\t}\n\n\t\t\tconst result = getResultRecord(payload);\n\t\t\treturn result?.artifact &&\n\t\t\t\ttypeof result.artifact === 'object' &&\n\t\t\t\t!Array.isArray(result.artifact)\n\t\t\t\t? (result.artifact as Record<string, unknown>)\n\t\t\t\t: null;\n\t\t};\n\n\t\tconst extractErrorMessage = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | undefined => {\n\t\t\tconst result = getResultRecord(payload);\n\t\t\tif (typeof payload?.error === 'string') return payload.error;\n\t\t\treturn typeof result?.error === 'string' ? result.error : undefined;\n\t\t};\n\n\t\tconst normalizePatchPath = (path: string): string =>\n\t\t\tpath.replace(/^a\\//, '').replace(/^b\\//, '').trim();\n\n\t\tconst patchPathMatches = (\n\t\t\tpatchPath: string,\n\t\t\ttargetPath: string,\n\t\t): boolean => {\n\t\t\tconst normalizedPatch = normalizePatchPath(patchPath);\n\t\t\tconst normalizedTarget = normalizePatchPath(targetPath);\n\t\t\treturn (\n\t\t\t\tnormalizedPatch === normalizedTarget ||\n\t\t\t\tnormalizedPatch.endsWith(`/${normalizedTarget}`) ||\n\t\t\t\tnormalizedTarget.endsWith(`/${normalizedPatch}`)\n\t\t\t);\n\t\t};\n\n\t\tconst patchPathMayReferToTarget = (\n\t\t\tpatchPath: string,\n\t\t\ttargetPath: string,\n\t\t): boolean => {\n\t\t\tconst normalizedPatch = normalizePatchPath(patchPath).replace(/\\/+$/, '');\n\t\t\tconst normalizedTarget = normalizePatchPath(targetPath);\n\t\t\tif (!normalizedPatch) return false;\n\t\t\treturn (\n\t\t\t\tpatchPathMatches(patchPath, targetPath) ||\n\t\t\t\tnormalizedTarget.startsWith(`${normalizedPatch}/`)\n\t\t\t);\n\t\t};\n\n\t\tconst isLikelyCompletePatchPath = (path: string): boolean => {\n\t\t\tconst normalized = normalizePatchPath(path);\n\t\t\tif (!normalized || normalized.endsWith('/')) return false;\n\t\t\tconst name = normalized.split('/').pop() ?? '';\n\t\t\treturn name.includes('.');\n\t\t};\n\n\t\tconst getCompletedPatchChangeLineSignature = (\n\t\t\tpatch: string,\n\t\t): string | undefined => {\n\t\t\tconst stablePatch = patch.endsWith('\\n')\n\t\t\t\t? patch\n\t\t\t\t: patch.slice(0, patch.lastIndexOf('\\n') + 1);\n\t\t\tif (!stablePatch) return undefined;\n\n\t\t\tlet changeLines = 0;\n\t\t\tlet stableChangeLength = 0;\n\t\t\tlet lineDirectiveCount = 0;\n\t\t\tfor (const line of stablePatch.split('\\n')) {\n\t\t\t\tif (\n\t\t\t\t\t(line.startsWith('+') && !line.startsWith('+++')) ||\n\t\t\t\t\t(line.startsWith('-') && !line.startsWith('---'))\n\t\t\t\t) {\n\t\t\t\t\tchangeLines += 1;\n\t\t\t\t\tstableChangeLength += line.length;\n\t\t\t\t} else if (\n\t\t\t\t\t/^\\*\\*\\* (?:Delete Lines in|Replace Lines in|Insert Before in|Insert After in): /.test(\n\t\t\t\t\t\tline,\n\t\t\t\t\t) ||\n\t\t\t\t\tline.startsWith('*** Lines:') ||\n\t\t\t\t\tline.startsWith('*** Line:') ||\n\t\t\t\t\tline.startsWith('*** With:')\n\t\t\t\t) {\n\t\t\t\t\tlineDirectiveCount += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (changeLines > 0) return `${changeLines}:${stableChangeLength}`;\n\t\t\treturn lineDirectiveCount > 0\n\t\t\t\t? `lines:${lineDirectiveCount}:${stablePatch.length}`\n\t\t\t\t: undefined;\n\t\t};\n\n\t\tconst extractPathsFromPatch = (patch: string): string[] => {\n\t\t\tconst paths = new Set<string>();\n\t\t\tfor (const line of patch.split('\\n')) {\n\t\t\t\tconst directive = line.match(\n\t\t\t\t\t/^\\*\\*\\* (?:Update|Add|Delete) File: (.+)$/,\n\t\t\t\t);\n\t\t\t\tconst replaceDirective = line.match(/^\\*\\*\\* Replace in: (.+)$/);\n\t\t\t\tconst lineDirective = line.match(\n\t\t\t\t\t/^\\*\\*\\* (?:Delete Lines in|Replace Lines in|Insert Before in|Insert After in): (.+)$/,\n\t\t\t\t);\n\t\t\t\tconst path =\n\t\t\t\t\tdirective?.[1] ?? replaceDirective?.[1] ?? lineDirective?.[1];\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.add(path.trim());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst unified = line.match(/^\\+\\+\\+ (?:b\\/)?(.+)$/);\n\t\t\t\tif (unified?.[1] && unified[1] !== '/dev/null') {\n\t\t\t\t\tpaths.add(unified[1].trim());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn [...paths];\n\t\t};\n\n\t\ttype FileContentCache = {\n\t\t\tcontent: string;\n\t\t\tpath: string;\n\t\t\textension: string;\n\t\t\tlineCount: number;\n\t\t};\n\n\t\tconst getExtension = (path: string): string =>\n\t\t\tpath.split('.').pop()?.toLowerCase() ?? '';\n\n\t\tconst updateFileContentCache = (path: string, content: string) => {\n\t\t\tqueryClient.setQueryData<FileContentCache>(['files', 'read', path], {\n\t\t\t\tcontent,\n\t\t\t\tpath,\n\t\t\t\textension: getExtension(path),\n\t\t\t\tlineCount: content.split('\\n').length,\n\t\t\t});\n\t\t};\n\n\t\tconst mergeReadResultIntoFileCache = (\n\t\t\tpath: string,\n\t\t\tresult: Record<string, unknown> | null,\n\t\t\tstartLine: number | undefined,\n\t\t\tendLine: number | undefined,\n\t\t) => {\n\t\t\tif (typeof result?.content !== 'string') return;\n\t\t\tconst readContent = result.content;\n\t\t\tif (!startLine || !endLine) {\n\t\t\t\tupdateFileContentCache(path, readContent);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tqueryClient.setQueryData<FileContentCache | undefined>(\n\t\t\t\t['files', 'read', path],\n\t\t\t\t(current) => {\n\t\t\t\t\tif (!current?.content) return current;\n\t\t\t\t\tconst lines = current.content.split('\\n');\n\t\t\t\t\tif (lines.at(-1) === '') lines.pop();\n\t\t\t\t\tconst readLines = readContent.split('\\n');\n\t\t\t\t\tlines.splice(startLine - 1, endLine - startLine + 1, ...readLines);\n\t\t\t\t\tconst content = `${lines.join('\\n')}\\n`;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...current,\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tlineCount:\n\t\t\t\t\t\t\ttypeof result.totalLines === 'number'\n\t\t\t\t\t\t\t\t? result.totalLines\n\t\t\t\t\t\t\t\t: lines.length,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst invalidateFileContentCache = (path: string) => {\n\t\t\tvoid queryClient.invalidateQueries({ queryKey: ['files', 'read', path] });\n\t\t};\n\n\t\tconst getChangedLinesForPath = (\n\t\t\tresult: Record<string, unknown> | null,\n\t\t\tpath: string,\n\t\t): number[] | undefined => {\n\t\t\tconst changes = Array.isArray(result?.changes) ? result.changes : [];\n\t\t\tconst lines = new Set<number>();\n\n\t\t\tfor (const change of changes) {\n\t\t\t\tif (!change || typeof change !== 'object') continue;\n\t\t\t\tconst record = change as Record<string, unknown>;\n\t\t\t\tif (typeof record.filePath !== 'string') continue;\n\t\t\t\tif (!patchPathMatches(record.filePath, path)) continue;\n\t\t\t\tif (!Array.isArray(record.hunks)) continue;\n\n\t\t\t\tfor (const hunk of record.hunks) {\n\t\t\t\t\tif (!hunk || typeof hunk !== 'object') continue;\n\t\t\t\t\tconst hunkRecord = hunk as Record<string, unknown>;\n\t\t\t\t\tconst newStart =\n\t\t\t\t\t\ttypeof hunkRecord.newStart === 'number'\n\t\t\t\t\t\t\t? hunkRecord.newStart\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst newLines =\n\t\t\t\t\t\ttypeof hunkRecord.newLines === 'number'\n\t\t\t\t\t\t\t? hunkRecord.newLines\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (!newStart || !newLines) continue;\n\n\t\t\t\t\tfor (let line = newStart; line < newStart + newLines; line += 1) {\n\t\t\t\t\t\tlines.add(line);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn lines.size > 0 ? [...lines] : undefined;\n\t\t};\n\n\t\ttype EditPreviewToolName = 'edit' | 'multiedit';\n\n\t\ttype StringEditPreview = {\n\t\t\toldString: string;\n\t\t\tnewString: string;\n\t\t};\n\n\t\tconst getPatchTextLines = (value: string): string[] => {\n\t\t\tif (value.length === 0) return [];\n\t\t\tconst lines = value.split('\\n');\n\t\t\tif (value.endsWith('\\n')) lines.pop();\n\t\t\treturn lines;\n\t\t};\n\n\t\tconst appendStringEditPatchHunk = (\n\t\t\tlines: string[],\n\t\t\tedit: StringEditPreview,\n\t\t) => {\n\t\t\tlines.push('@@');\n\t\t\tfor (const line of getPatchTextLines(edit.oldString)) {\n\t\t\t\tlines.push(`-${line}`);\n\t\t\t}\n\t\t\tfor (const line of getPatchTextLines(edit.newString)) {\n\t\t\t\tlines.push(`+${line}`);\n\t\t\t}\n\t\t};\n\n\t\tconst buildStringEditPatchPreview = (\n\t\t\tpath: string,\n\t\t\tedits: StringEditPreview[],\n\t\t): string | undefined => {\n\t\t\tconst validEdits = edits.filter(\n\t\t\t\t(edit) => edit.oldString.length > 0 || edit.newString.length > 0,\n\t\t\t);\n\t\t\tif (validEdits.length === 0) return undefined;\n\n\t\t\tconst lines = ['*** Begin Patch', `*** Update File: ${path}`];\n\t\t\tfor (const edit of validEdits) appendStringEditPatchHunk(lines, edit);\n\t\t\tlines.push('*** End Patch', '');\n\t\t\treturn lines.join('\\n');\n\t\t};\n\n\t\tconst getMultiEditPreviewEdits = (\n\t\t\targs: Record<string, unknown> | null,\n\t\t): StringEditPreview[] => {\n\t\t\tconst edits = Array.isArray(args?.edits) ? args.edits : [];\n\t\t\treturn edits.flatMap((edit) => {\n\t\t\t\tif (!edit || typeof edit !== 'object' || Array.isArray(edit)) return [];\n\t\t\t\tconst record = edit as Record<string, unknown>;\n\t\t\t\treturn typeof record.oldString === 'string' &&\n\t\t\t\t\ttypeof record.newString === 'string'\n\t\t\t\t\t? [{ oldString: record.oldString, newString: record.newString }]\n\t\t\t\t\t: [];\n\t\t\t});\n\t\t};\n\n\t\tconst getEditPreviewPatch = (\n\t\t\ttoolName: EditPreviewToolName,\n\t\t\tpath: string,\n\t\t\targs: Record<string, unknown> | null,\n\t\t\tbuffer: string,\n\t\t\tartifact: Record<string, unknown> | null,\n\t\t): string | undefined => {\n\t\t\tif (typeof artifact?.patch === 'string') return artifact.patch;\n\n\t\t\tif (toolName === 'edit') {\n\t\t\t\tconst oldString = getStringArg(args, buffer, 'oldString');\n\t\t\t\tconst newString = getStringArg(args, buffer, 'newString');\n\t\t\t\treturn oldString !== undefined && newString !== undefined\n\t\t\t\t\t? buildStringEditPatchPreview(path, [{ oldString, newString }])\n\t\t\t\t\t: undefined;\n\t\t\t}\n\n\t\t\tconst edits = getMultiEditPreviewEdits(args);\n\t\t\treturn buildStringEditPatchPreview(path, edits);\n\t\t};\n\n\t\tconst handleReadToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name !== 'read') return;\n\n\t\t\tconst args = getToolArgsForViewer(payload, delta);\n\t\t\tconst path = typeof args?.path === 'string' ? args.path : null;\n\t\t\tif (!path) return;\n\n\t\t\tconst result =\n\t\t\t\tpayload?.result &&\n\t\t\t\ttypeof payload.result === 'object' &&\n\t\t\t\t!Array.isArray(payload.result)\n\t\t\t\t\t? (payload.result as Record<string, unknown>)\n\t\t\t\t\t: null;\n\t\t\tconst rangeFromResult = parseLineRange(result?.lineRange);\n\t\t\tconst startLine =\n\t\t\t\tnormalizeLineNumber(args.startLine) ??\n\t\t\t\tnormalizeLineNumber(args.start_line) ??\n\t\t\t\trangeFromResult.startLine;\n\t\t\tconst endLine =\n\t\t\t\tnormalizeLineNumber(args.endLine) ??\n\t\t\t\tnormalizeLineNumber(args.end_line) ??\n\t\t\t\trangeFromResult.endLine ??\n\t\t\t\tstartLine;\n\t\t\tconst failed = result?.ok === false || eventType === 'error';\n\t\t\tif (eventType === 'tool.result' && !failed) {\n\t\t\t\tmergeReadResultIntoFileCache(path, result, startLine, endLine);\n\t\t\t}\n\n\t\t\tconst viewerStore = useViewerTabsStore.getState();\n\t\t\tif (!viewerStore.followToolActivity) return;\n\n\t\t\tviewerStore.openToolReadTab(path, {\n\t\t\t\tstartLine,\n\t\t\t\tendLine,\n\t\t\t\treason: 'read',\n\t\t\t\tcallId: getToolEventCallId(payload) ?? undefined,\n\t\t\t\tstatus: failed\n\t\t\t\t\t? 'error'\n\t\t\t\t\t: eventType === 'tool.result'\n\t\t\t\t\t\t? 'success'\n\t\t\t\t\t\t: 'streaming',\n\t\t\t});\n\t\t};\n\n\t\tconst handleWriteToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name !== 'write') return;\n\n\t\t\tconst args = getToolArgsForViewer(payload, delta);\n\t\t\tconst buffer = getBufferedToolInput(payload);\n\t\t\tconst result = getResultRecord(payload);\n\t\t\tconst path =\n\t\t\t\t(typeof result?.path === 'string' ? result.path : undefined) ??\n\t\t\t\tgetStringArg(args, buffer, 'path', true);\n\t\t\tif (!path) return;\n\n\t\t\tconst failed = result?.ok === false || eventType === 'error';\n\t\t\tconst callId = getToolEventCallId(payload) ?? undefined;\n\t\t\tconst status = failed\n\t\t\t\t? 'error'\n\t\t\t\t: eventType === 'tool.result'\n\t\t\t\t\t? 'success'\n\t\t\t\t\t: 'streaming';\n\t\t\tconst content =\n\t\t\t\tstatus === 'streaming'\n\t\t\t\t\t? getStreamingWritePreviewContent(args, buffer)\n\t\t\t\t\t: getStringArg(args, buffer, 'content');\n\t\t\tconst summary =\n\t\t\t\tresult?.summary && typeof result.summary === 'object'\n\t\t\t\t\t? (result.summary as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\t\t\tconst changeCount =\n\t\t\t\ttypeof summary?.additions === 'number' &&\n\t\t\t\ttypeof summary.deletions === 'number'\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tadditions: summary.additions,\n\t\t\t\t\t\t\tremovals: summary.deletions,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined;\n\t\t\tif (status === 'success') {\n\t\t\t\tif (content !== undefined) updateFileContentCache(path, content);\n\t\t\t\telse invalidateFileContentCache(path);\n\t\t\t}\n\n\t\t\tconst viewerStore = useViewerTabsStore.getState();\n\t\t\tif (!viewerStore.followToolActivity) return;\n\n\t\t\tif (\n\t\t\t\tstatus === 'streaming' &&\n\t\t\t\tcontent !== undefined &&\n\t\t\t\tcontent.length >= TOOL_PREVIEW_THROTTLE_MIN_CHARS\n\t\t\t) {\n\t\t\t\tconst previewKey = callId ?? path;\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst last = toolPreviewEmitRef.current.get(previewKey);\n\t\t\t\tconst contentDelta = Math.abs(\n\t\t\t\t\tcontent.length - (last?.contentLength ?? 0),\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\tlast &&\n\t\t\t\t\tnow - last.emittedAt < TOOL_PREVIEW_THROTTLE_MS &&\n\t\t\t\t\tcontentDelta < TOOL_PREVIEW_THROTTLE_MIN_DELTA_CHARS\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttoolPreviewEmitRef.current.set(previewKey, {\n\t\t\t\t\temittedAt: now,\n\t\t\t\t\tcontentLength: content.length,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tviewerStore.openToolPreviewTab({\n\t\t\t\tpath,\n\t\t\t\ttoolName: 'write',\n\t\t\t\tcallId,\n\t\t\t\tcontent,\n\t\t\t\tchangeCount,\n\t\t\t\tstatus,\n\t\t\t\terror: extractErrorMessage(payload),\n\t\t\t});\n\t\t};\n\n\t\tconst handleApplyPatchToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name !== 'apply_patch') return;\n\n\t\t\tconst args = getToolArgsForViewer(payload, delta);\n\t\t\tconst buffer = getBufferedToolInput(payload);\n\t\t\tconst artifact = getArtifactRecord(payload);\n\t\t\tconst result = getResultRecord(payload);\n\t\t\tconst failed = result?.ok === false || eventType === 'error';\n\t\t\tconst status = failed\n\t\t\t\t? 'error'\n\t\t\t\t: eventType === 'tool.result'\n\t\t\t\t\t? 'success'\n\t\t\t\t\t: 'streaming';\n\t\t\tconst callId = getToolEventCallId(payload) ?? undefined;\n\n\t\t\tconst patch =\n\t\t\t\t(typeof artifact?.patch === 'string' ? artifact.patch : undefined) ??\n\t\t\t\t(status === 'streaming'\n\t\t\t\t\t? getStreamingPatchPreviewContent(args, buffer)\n\t\t\t\t\t: getStringArg(args, buffer, 'patch'));\n\t\t\tif (!patch) return;\n\n\t\t\tconst previewKey = callId ?? 'apply_patch';\n\t\t\tconst lineSignature =\n\t\t\t\tstatus === 'streaming'\n\t\t\t\t\t? getCompletedPatchChangeLineSignature(patch)\n\t\t\t\t\t: undefined;\n\t\t\tif (status === 'streaming') {\n\t\t\t\tconst last = toolPreviewEmitRef.current.get(previewKey);\n\t\t\t\tif (last?.lineSignature === lineSignature) return;\n\t\t\t}\n\n\t\t\tconst patchPaths = extractPathsFromPatch(patch);\n\t\t\tif (patchPaths.length === 0) return;\n\t\t\tif (status === 'success') {\n\t\t\t\tfor (const path of patchPaths) invalidateFileContentCache(path);\n\t\t\t}\n\n\t\t\tconst viewerStore = useViewerTabsStore.getState();\n\t\t\tif (!viewerStore.followToolActivity) return;\n\n\t\t\tconst matchingFileTabs = viewerStore.tabs.filter(\n\t\t\t\t(\n\t\t\t\t\ttab,\n\t\t\t\t): tab is Extract<\n\t\t\t\t\t(typeof viewerStore.tabs)[number],\n\t\t\t\t\t{ type: 'file' }\n\t\t\t\t> =>\n\t\t\t\t\ttab.type === 'file' &&\n\t\t\t\t\tpatchPaths.some((path) => patchPathMayReferToTarget(path, tab.path)),\n\t\t\t);\n\t\t\tconst activeMatchingFileTab = matchingFileTabs.find(\n\t\t\t\t(tab) => tab.id === viewerStore.activeTabId,\n\t\t\t);\n\t\t\tconst fallbackPath = patchPaths.find(isLikelyCompletePatchPath);\n\t\t\tif (!activeMatchingFileTab && !matchingFileTabs[0] && !fallbackPath)\n\t\t\t\treturn;\n\t\t\tconst targetPath =\n\t\t\t\tactiveMatchingFileTab?.path ??\n\t\t\t\tmatchingFileTabs[0]?.path ??\n\t\t\t\tfallbackPath;\n\t\t\tif (!targetPath) return;\n\n\t\t\tviewerStore.openToolPreviewTab({\n\t\t\t\tpath: targetPath,\n\t\t\t\ttoolName: 'apply_patch',\n\t\t\t\tcallId,\n\t\t\t\tpatch,\n\t\t\t\tchangedLines: getChangedLinesForPath(result, targetPath),\n\t\t\t\tstatus,\n\t\t\t\terror: extractErrorMessage(payload),\n\t\t\t});\n\n\t\t\tif (status === 'streaming') {\n\t\t\t\ttoolPreviewEmitRef.current.set(previewKey, {\n\t\t\t\t\temittedAt: Date.now(),\n\t\t\t\t\tcontentLength: buffer.length,\n\t\t\t\t\tlineSignature,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst handleEditToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name !== 'edit' && name !== 'multiedit') return;\n\n\t\t\tconst args = getToolArgsForViewer(payload, delta);\n\t\t\tconst buffer = getBufferedToolInput(payload);\n\t\t\tconst artifact = getArtifactRecord(payload);\n\t\t\tconst result = getResultRecord(payload);\n\t\t\tconst path =\n\t\t\t\t(typeof result?.path === 'string' ? result.path : undefined) ??\n\t\t\t\tgetStringArg(args, buffer, 'path', true);\n\t\t\tif (!path) return;\n\n\t\t\tconst failed = result?.ok === false || eventType === 'error';\n\t\t\tconst status = failed\n\t\t\t\t? 'error'\n\t\t\t\t: eventType === 'tool.result'\n\t\t\t\t\t? 'success'\n\t\t\t\t\t: 'streaming';\n\t\t\tconst callId = getToolEventCallId(payload) ?? undefined;\n\t\t\tconst patch = getEditPreviewPatch(name, path, args, buffer, artifact);\n\t\t\tif (status === 'success') invalidateFileContentCache(path);\n\t\t\tif (!patch) return;\n\n\t\t\tconst previewKey = callId ?? `${name}:${path}`;\n\t\t\tconst lineSignature =\n\t\t\t\tstatus === 'streaming'\n\t\t\t\t\t? getCompletedPatchChangeLineSignature(patch)\n\t\t\t\t\t: undefined;\n\t\t\tif (status === 'streaming') {\n\t\t\t\tconst last = toolPreviewEmitRef.current.get(previewKey);\n\t\t\t\tif (last?.lineSignature === lineSignature) return;\n\t\t\t}\n\n\t\t\tconst viewerStore = useViewerTabsStore.getState();\n\t\t\tif (!viewerStore.followToolActivity) return;\n\n\t\t\tviewerStore.openToolPreviewTab({\n\t\t\t\tpath,\n\t\t\t\ttoolName: name,\n\t\t\t\tcallId,\n\t\t\t\tpatch,\n\t\t\t\tstatus,\n\t\t\t\terror: extractErrorMessage(payload),\n\t\t\t});\n\n\t\t\tif (status === 'streaming') {\n\t\t\t\ttoolPreviewEmitRef.current.set(previewKey, {\n\t\t\t\t\temittedAt: Date.now(),\n\t\t\t\t\tcontentLength: buffer.length,\n\t\t\t\t\tlineSignature,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst handleSimulatorToolActivity = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tif (eventType !== 'tool.result') return;\n\t\t\tconst result = getToolEventResult(payload);\n\t\t\tif (!result || typeof result !== 'object' || Array.isArray(result))\n\t\t\t\treturn;\n\t\t\tconst resultRecord = result as Record<string, unknown>;\n\t\t\tconst firstStream = Array.isArray(resultRecord.streams)\n\t\t\t\t? resultRecord.streams[0]\n\t\t\t\t: undefined;\n\t\t\tconst stream = resultRecord.stream ?? firstStream;\n\t\t\tconst previewUrl = resultRecord.previewUrl;\n\t\t\tif (typeof previewUrl === 'string' && previewUrl.trim()) {\n\t\t\t\tuseViewerTabsStore.getState().openBrowserTab(previewUrl, {\n\t\t\t\t\tkind: 'simulator',\n\t\t\t\t\ttitle: 'Simulator',\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!stream || typeof stream !== 'object' || Array.isArray(stream))\n\t\t\t\treturn;\n\n\t\t\tuseViewerTabsStore.getState().openBrowserTab('http://localhost:3200', {\n\t\t\t\tkind: 'simulator',\n\t\t\t\ttitle: 'Simulator',\n\t\t\t});\n\t\t};\n\n\t\tconst handleToolActivityViewerEvent = (\n\t\t\teventType: string,\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta?: string | null,\n\t\t) => {\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (name === 'read') handleReadToolActivity(eventType, payload, delta);\n\t\t\tif (name === 'write') handleWriteToolActivity(eventType, payload, delta);\n\t\t\tif (name === 'edit' || name === 'multiedit') {\n\t\t\t\thandleEditToolActivity(eventType, payload, delta);\n\t\t\t}\n\t\t\tif (name === 'apply_patch') {\n\t\t\t\thandleApplyPatchToolActivity(eventType, payload, delta);\n\t\t\t}\n\t\t\tif (name === 'simulator') {\n\t\t\t\thandleSimulatorToolActivity(eventType, payload);\n\t\t\t}\n\t\t};\n\n\t\tconst getToolInputDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tif (typeof payload?.delta === 'string') return payload.delta;\n\t\t\treturn typeof payload?.inputTextDelta === 'string'\n\t\t\t\t? payload.inputTextDelta\n\t\t\t\t: null;\n\t\t};\n\n\t\tconst getToolOutputDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t): string | null => {\n\t\t\tif (typeof payload?.delta === 'string') return payload.delta;\n\t\t\treturn typeof payload?.outputTextDelta === 'string'\n\t\t\t\t? payload.outputTextDelta\n\t\t\t\t: null;\n\t\t};\n\n\t\tconst getOptimisticPartIndex = (\n\t\t\tparts: MessagePart[],\n\t\t\t_stepIndex: number | null,\n\t\t): number => {\n\t\t\tconst indexes = parts\n\t\t\t\t.map((part) => part.index)\n\t\t\t\t.filter((index): index is number => Number.isFinite(index));\n\t\t\treturn indexes.length > 0 ? Math.max(...indexes) + 0.001 : 0;\n\t\t};\n\n\t\tconst applyReasoningDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst messageId =\n\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\tconst partId =\n\t\t\t\ttypeof payload?.partId === 'string' ? payload.partId : null;\n\t\t\tconst delta = typeof payload?.delta === 'string' ? payload.delta : null;\n\t\t\tif (!messageId || !partId || delta === null) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tconst messageIndex = nextMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === messageId,\n\t\t\t\t\t);\n\t\t\t\t\tif (messageIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[messageIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = parts.findIndex((part) => part.id === partId);\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload?.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: partId,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'reasoning',\n\t\t\t\t\t\t\tcontent: JSON.stringify({ text: delta }),\n\t\t\t\t\t\t\tcontentJson: { text: delta },\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: null,\n\t\t\t\t\t\t\ttoolCallId: null,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t\tpartIndex = parts.length - 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst previous = extractText(existing);\n\t\t\t\t\t\tconst nextText = `${previous}${delta}`;\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify({ text: nextText }),\n\t\t\t\t\t\t\tcontentJson: { text: nextText },\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[messageIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst applyMessageDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst messageId =\n\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\tconst partId =\n\t\t\t\ttypeof payload?.partId === 'string' ? payload.partId : null;\n\t\t\tconst payloadType =\n\t\t\t\ttypeof payload?.type === 'string' ? payload.type : undefined;\n\t\t\tif (payloadType === 'error') {\n\t\t\t\tupsertErrorPart(payload);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst delta = typeof payload?.delta === 'string' ? payload.delta : null;\n\t\t\tif (!messageId || !partId || delta === null) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tconst messageIndex = nextMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === messageId,\n\t\t\t\t\t);\n\t\t\t\t\tif (messageIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[messageIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = parts.findIndex((part) => part.id === partId);\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload?.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: partId,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\tcontent: JSON.stringify({ text: delta }),\n\t\t\t\t\t\t\tcontentJson: { text: delta },\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: null,\n\t\t\t\t\t\t\ttoolCallId: null,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t\tpartIndex = parts.length - 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst previous = extractText(existing);\n\t\t\t\t\t\tconst nextText = `${previous}${delta}`;\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify({ text: nextText }),\n\t\t\t\t\t\t\tcontentJson: { text: nextText },\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[messageIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst toRecord = (value: unknown): Record<string, unknown> | null => {\n\t\t\tif (value && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t\treturn value as Record<string, unknown>;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tconst parseErrorContent = (\n\t\t\tpayload: Record<string, unknown>,\n\t\t): Record<string, unknown> => {\n\t\t\tconst contentRecord = toRecord(payload.content);\n\t\t\tif (contentRecord) return contentRecord;\n\n\t\t\tif (typeof payload.content === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = JSON.parse(payload.content);\n\t\t\t\t\tconst parsedRecord = toRecord(parsed);\n\t\t\t\t\tif (parsedRecord) return parsedRecord;\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\tconst message =\n\t\t\t\ttypeof payload.error === 'string'\n\t\t\t\t\t? payload.error\n\t\t\t\t\t: typeof payload.message === 'string'\n\t\t\t\t\t\t? payload.message\n\t\t\t\t\t\t: 'Assistant run failed';\n\t\t\treturn {\n\t\t\t\tmessage,\n\t\t\t\ttype:\n\t\t\t\t\ttypeof payload.errorType === 'string' ? payload.errorType : 'error',\n\t\t\t\tdetails: toRecord(payload.details) ?? undefined,\n\t\t\t\tisAborted: payload.isAborted === true,\n\t\t\t\tautoCompacted: payload.autoCompacted === true,\n\t\t\t};\n\t\t};\n\n\t\tconst upsertErrorPart = (payload: Record<string, unknown> | undefined) => {\n\t\t\tconst messageId =\n\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\tif (!payload || !messageId) return;\n\n\t\t\tconst contentJson = parseErrorContent(payload);\n\t\t\tconst content = JSON.stringify(contentJson);\n\t\t\tconst errorMessage =\n\t\t\t\ttypeof contentJson.message === 'string'\n\t\t\t\t\t? contentJson.message\n\t\t\t\t\t: typeof payload.error === 'string'\n\t\t\t\t\t\t? payload.error\n\t\t\t\t\t\t: 'Assistant run failed';\n\t\t\tconst stepIndex =\n\t\t\t\ttypeof payload.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\tconst partId =\n\t\t\t\ttypeof payload.partId === 'string'\n\t\t\t\t\t? payload.partId\n\t\t\t\t\t: `error-${messageId}`;\n\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tconst messageIndex = nextMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === messageId,\n\t\t\t\t\t);\n\t\t\t\t\tif (messageIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[messageIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tconst partIndex = parts.findIndex((part) => part.id === partId);\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: partId,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\tcontent,\n\t\t\t\t\t\t\tcontentJson,\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: Date.now(),\n\t\t\t\t\t\t\ttoolName: null,\n\t\t\t\t\t\t\ttoolCallId: null,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...parts[partIndex],\n\t\t\t\t\t\t\tcontent,\n\t\t\t\t\t\t\tcontentJson,\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? parts[partIndex].stepIndex ?? null,\n\t\t\t\t\t\t\tcompletedAt: Date.now(),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[messageIndex] = {\n\t\t\t\t\t\t...targetMessage,\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\tcompletedAt: targetMessage.completedAt ?? Date.now(),\n\t\t\t\t\t\terror: errorMessage,\n\t\t\t\t\t\tparts,\n\t\t\t\t\t};\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst upsertEphemeralToolCall = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tif (!payload) return;\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (!name) return;\n\n\t\t\tif (name === 'write' || name === 'apply_patch') {\n\t\t\t\tconst bufferKey = getToolBufferKey(payload);\n\t\t\t\tconst bufferedLength = bufferKey\n\t\t\t\t\t? (toolInputBuffersRef.current.get(bufferKey)?.length ?? 0)\n\t\t\t\t\t: 0;\n\t\t\t\tif (bufferedLength >= TOOL_PREVIEW_THROTTLE_MIN_CHARS) {\n\t\t\t\t\tconst emitKey = callId ?? `name:${name}`;\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tconst last = toolMessageEmitRef.current.get(emitKey) ?? 0;\n\t\t\t\t\tif (now - last < STREAMING_TOOL_MESSAGE_THROTTLE_MS) return;\n\t\t\t\t\ttoolMessageEmitRef.current.set(emitKey, now);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tlet targetIndex = resolveAssistantTargetIndex(nextMessages);\n\t\t\t\t\tif (typeof payload.messageId === 'string') {\n\t\t\t\t\t\tconst explicitIndex = nextMessages.findIndex(\n\t\t\t\t\t\t\t(message) => message.id === payload.messageId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (explicitIndex !== -1) targetIndex = explicitIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[targetIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = -1;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.toolCallId === callId && part.ephemeral,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Only fallback to name match if we don't have a callId\n\t\t\t\t\tif (partIndex === -1 && !callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.ephemeral && part.toolName === name,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst args = getToolEventArgs(payload);\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tconst contentJsonBase: Record<string, unknown> = { name };\n\t\t\t\t\tif (callId) contentJsonBase.callId = callId;\n\t\t\t\t\tif (args !== undefined) contentJsonBase.args = args;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: callId\n\t\t\t\t\t\t\t\t? `ephemeral-tool-call-${callId}`\n\t\t\t\t\t\t\t\t: `ephemeral-tool-call-${name}-${Date.now()}`,\n\t\t\t\t\t\t\tmessageId: targetMessage.id,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\t\t\tcontent: JSON.stringify(contentJsonBase),\n\t\t\t\t\t\t\tcontentJson: contentJsonBase,\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: name,\n\t\t\t\t\t\t\ttoolCallId: callId,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t\tephemeral: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst nextContentJson: Record<string, unknown> = {\n\t\t\t\t\t\t\t...(typeof existing.contentJson === 'object' &&\n\t\t\t\t\t\t\t!Array.isArray(existing.contentJson)\n\t\t\t\t\t\t\t\t? (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (callId) nextContentJson.callId = callId;\n\t\t\t\t\t\tif (args !== undefined) nextContentJson.args = args;\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify(nextContentJson),\n\t\t\t\t\t\t\tcontentJson: nextContentJson,\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t\ttoolCallId: callId ?? existing.toolCallId,\n\t\t\t\t\t\t\ttoolName: name,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[targetIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst accumulateToolInputDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta: string,\n\t\t) => {\n\t\t\tif (!payload) return;\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (!name) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tlet targetIndex = resolveAssistantTargetIndex(nextMessages);\n\t\t\t\t\tif (typeof payload.messageId === 'string') {\n\t\t\t\t\t\tconst explicitIndex = nextMessages.findIndex(\n\t\t\t\t\t\t\t(message) => message.id === payload.messageId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (explicitIndex !== -1) targetIndex = explicitIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[targetIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = -1;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.toolCallId === callId && part.ephemeral,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (partIndex === -1 && !callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.ephemeral && part.toolName === name,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst contentJsonBase: Record<string, unknown> = {\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t_streamedInput: getBoundedStreamingToolInput(delta),\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (callId) contentJsonBase.callId = callId;\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: callId\n\t\t\t\t\t\t\t\t? `ephemeral-tool-call-${callId}`\n\t\t\t\t\t\t\t\t: `ephemeral-tool-call-${name}-${Date.now()}`,\n\t\t\t\t\t\t\tmessageId: targetMessage.id,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\t\t\tcontent: JSON.stringify(contentJsonBase),\n\t\t\t\t\t\t\tcontentJson: contentJsonBase,\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: name,\n\t\t\t\t\t\t\ttoolCallId: callId,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t\tephemeral: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst prev =\n\t\t\t\t\t\t\ttypeof (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t?._streamedInput === 'string'\n\t\t\t\t\t\t\t\t? ((existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t._streamedInput as string)\n\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\t\tconst nextContentJson: Record<string, unknown> = {\n\t\t\t\t\t\t\t...(typeof existing.contentJson === 'object' &&\n\t\t\t\t\t\t\t!Array.isArray(existing.contentJson)\n\t\t\t\t\t\t\t\t? (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t_streamedInput: getBoundedStreamingToolInput(prev + delta),\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify(nextContentJson),\n\t\t\t\t\t\t\tcontentJson: nextContentJson,\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[targetIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst accumulateToolOutputDelta = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t\tdelta: string,\n\t\t) => {\n\t\t\tif (!payload) return;\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tconst name = getToolEventName(payload);\n\t\t\tif (!name) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tlet targetIndex = resolveAssistantTargetIndex(nextMessages);\n\t\t\t\t\tif (typeof payload.messageId === 'string') {\n\t\t\t\t\t\tconst explicitIndex = nextMessages.findIndex(\n\t\t\t\t\t\t\t(message) => message.id === payload.messageId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (explicitIndex !== -1) targetIndex = explicitIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetIndex === -1) return oldMessages;\n\t\t\t\t\tconst targetMessage = nextMessages[targetIndex];\n\t\t\t\t\tconst parts = targetMessage.parts ? [...targetMessage.parts] : [];\n\t\t\t\t\tlet partIndex = -1;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.toolCallId === callId && part.ephemeral,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (partIndex === -1 && !callId) {\n\t\t\t\t\t\tpartIndex = parts.findIndex(\n\t\t\t\t\t\t\t(part) => part.ephemeral && part.toolName === name,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst stepIndex =\n\t\t\t\t\t\ttypeof payload.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\t\t\tif (partIndex === -1) {\n\t\t\t\t\t\tconst contentJsonBase: Record<string, unknown> = {\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t_streamedOutput: delta,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (callId) contentJsonBase.callId = callId;\n\t\t\t\t\t\tconst newPart: MessagePart = {\n\t\t\t\t\t\t\tid: callId\n\t\t\t\t\t\t\t\t? `ephemeral-tool-call-${callId}`\n\t\t\t\t\t\t\t\t: `ephemeral-tool-call-${name}-${Date.now()}`,\n\t\t\t\t\t\t\tmessageId: targetMessage.id,\n\t\t\t\t\t\t\tindex: getOptimisticPartIndex(parts, stepIndex),\n\t\t\t\t\t\t\tstepIndex,\n\t\t\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\t\t\tcontent: JSON.stringify(contentJsonBase),\n\t\t\t\t\t\t\tcontentJson: contentJsonBase,\n\t\t\t\t\t\t\tagent: targetMessage.agent,\n\t\t\t\t\t\t\tprovider: targetMessage.provider,\n\t\t\t\t\t\t\tmodel: targetMessage.model,\n\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\ttoolName: name,\n\t\t\t\t\t\t\ttoolCallId: callId,\n\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t\tephemeral: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts.push(newPart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst existing = parts[partIndex];\n\t\t\t\t\t\tconst prev =\n\t\t\t\t\t\t\ttypeof (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t?._streamedOutput === 'string'\n\t\t\t\t\t\t\t\t? ((existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t._streamedOutput as string)\n\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\t\tconst nextContentJson: Record<string, unknown> = {\n\t\t\t\t\t\t\t...(typeof existing.contentJson === 'object' &&\n\t\t\t\t\t\t\t!Array.isArray(existing.contentJson)\n\t\t\t\t\t\t\t\t? (existing.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t_streamedOutput: prev + delta,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tparts[partIndex] = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tcontent: JSON.stringify(nextContentJson),\n\t\t\t\t\t\t\tcontentJson: nextContentJson,\n\t\t\t\t\t\t\tstepIndex: stepIndex ?? existing.stepIndex ?? null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tnextMessages[targetIndex] = { ...targetMessage, parts };\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst resolveEphemeralToolCall = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tif (!callId) return;\n\t\t\tconst payloadName = getToolEventName(payload);\n\t\t\tconst payloadMessageId =\n\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\tconst payloadStepIndex =\n\t\t\t\ttypeof payload?.stepIndex === 'number' ? payload.stepIndex : null;\n\t\t\tconst payloadResult = payload?.result;\n\t\t\tconst payloadArtifact = payload?.artifact;\n\t\t\tconst payloadArgs = getToolEventArgs(payload);\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tlet changed = false;\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tconst nextMessages = oldMessages.map((message) => {\n\t\t\t\t\t\tif (payloadMessageId && message.id !== payloadMessageId) {\n\t\t\t\t\t\t\treturn message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!message.parts?.length) return message;\n\t\t\t\t\t\tlet messageChanged = false;\n\t\t\t\t\t\tconst updatedParts = message.parts.map((part) => {\n\t\t\t\t\t\t\tif (!(part.ephemeral && part.toolCallId === callId)) {\n\t\t\t\t\t\t\t\treturn part;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmessageChanged = true;\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\tconst nextContentJson: Record<string, unknown> = {\n\t\t\t\t\t\t\t\t...(typeof part.contentJson === 'object' &&\n\t\t\t\t\t\t\t\t!Array.isArray(part.contentJson)\n\t\t\t\t\t\t\t\t\t? (part.contentJson as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\tname: payloadName ?? part.toolName ?? 'tool',\n\t\t\t\t\t\t\t\tcallId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (payloadArgs !== undefined) nextContentJson.args = payloadArgs;\n\t\t\t\t\t\t\tif (payloadResult !== undefined)\n\t\t\t\t\t\t\t\tnextContentJson.result = payloadResult;\n\t\t\t\t\t\t\tif (payloadArtifact !== undefined)\n\t\t\t\t\t\t\t\tnextContentJson.artifact = payloadArtifact;\n\t\t\t\t\t\t\tconst durationMs =\n\t\t\t\t\t\t\t\tpart.startedAt && Number.isFinite(part.startedAt)\n\t\t\t\t\t\t\t\t\t? Math.max(0, now - part.startedAt)\n\t\t\t\t\t\t\t\t\t: part.toolDurationMs;\n\t\t\t\t\t\t\tconst resolvedPart: MessagePart = {\n\t\t\t\t\t\t\t\t...part,\n\t\t\t\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\t\t\t\tcontent: JSON.stringify(nextContentJson),\n\t\t\t\t\t\t\t\tcontentJson: nextContentJson,\n\t\t\t\t\t\t\t\tstepIndex: payloadStepIndex ?? part.stepIndex ?? null,\n\t\t\t\t\t\t\t\tcompletedAt: now,\n\t\t\t\t\t\t\t\ttoolName: payloadName ?? part.toolName,\n\t\t\t\t\t\t\t\ttoolDurationMs: durationMs ?? null,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn resolvedPart;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!messageChanged) return message;\n\t\t\t\t\t\treturn { ...message, parts: updatedParts };\n\t\t\t\t\t});\n\t\t\t\t\treturn changed ? nextMessages : oldMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst removeEphemeralToolCall = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst callId = getToolEventCallId(payload);\n\t\t\tif (!callId) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tlet changed = false;\n\t\t\t\t\tconst nextMessages = oldMessages.map((message) => {\n\t\t\t\t\t\tif (!message.parts?.length) return message;\n\t\t\t\t\t\tconst filtered = message.parts.filter(\n\t\t\t\t\t\t\t(part) => !(part.ephemeral && part.toolCallId === callId),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (filtered.length === message.parts.length) return message;\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\treturn { ...message, parts: filtered };\n\t\t\t\t\t});\n\t\t\t\t\treturn changed ? nextMessages : oldMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst clearEphemeralForMessage = (messageId: string | null) => {\n\t\t\tif (!messageId) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst targetIndex = oldMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === messageId,\n\t\t\t\t\t);\n\t\t\t\t\tif (targetIndex === -1) return oldMessages;\n\t\t\t\t\tconst target = oldMessages[targetIndex];\n\t\t\t\t\tif (\n\t\t\t\t\t\t!target.parts?.some(\n\t\t\t\t\t\t\t(part) => part.ephemeral && part.type === 'tool_call',\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t\treturn oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tnextMessages[targetIndex] = {\n\t\t\t\t\t\t...target,\n\t\t\t\t\t\tparts:\n\t\t\t\t\t\t\ttarget.parts?.filter(\n\t\t\t\t\t\t\t\t(part) => !(part.ephemeral && part.type === 'tool_call'),\n\t\t\t\t\t\t\t) ?? [],\n\t\t\t\t\t};\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst markMessageCompleted = (\n\t\t\tpayload: Record<string, unknown> | undefined,\n\t\t) => {\n\t\t\tconst id = typeof payload?.id === 'string' ? payload.id : null;\n\t\t\tif (!id) return;\n\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t['messages', sessionId],\n\t\t\t\t(oldMessages) => {\n\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\tconst nextMessages = [...oldMessages];\n\t\t\t\t\tconst messageIndex = nextMessages.findIndex(\n\t\t\t\t\t\t(message) => message.id === id,\n\t\t\t\t\t);\n\t\t\t\t\tif (messageIndex === -1) return oldMessages;\n\t\t\t\t\tconst existing = nextMessages[messageIndex];\n\t\t\t\t\tnextMessages[messageIndex] = {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\tstatus: 'complete',\n\t\t\t\t\t\tcompletedAt: Date.now(),\n\t\t\t\t\t};\n\t\t\t\t\treturn nextMessages;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst unsubscribe = client.on('*', (event) => {\n\t\t\t// console.log('[useSessionStream] Event received:', event);\n\t\t\tconst payload = event.payload as Record<string, unknown> | undefined;\n\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'message.created': {\n\t\t\t\t\tconst role = typeof payload?.role === 'string' ? payload.role : null;\n\t\t\t\t\tconst id = typeof payload?.id === 'string' ? payload.id : null;\n\t\t\t\t\tif (role === 'assistant' && id) {\n\t\t\t\t\t\tassistantMessageIdRef.current = id;\n\t\t\t\t\t\toptimisticallyQueueMessage(queryClient, sessionId, id);\n\t\t\t\t\t}\n\t\t\t\t\tif (id && role) {\n\t\t\t\t\t\tconst agent =\n\t\t\t\t\t\t\ttypeof payload?.agent === 'string' ? payload.agent : '';\n\t\t\t\t\t\tconst provider =\n\t\t\t\t\t\t\ttypeof payload?.provider === 'string' ? payload.provider : '';\n\t\t\t\t\t\tconst model =\n\t\t\t\t\t\t\ttypeof payload?.model === 'string' ? payload.model : '';\n\t\t\t\t\t\tconst content =\n\t\t\t\t\t\t\ttypeof payload?.content === 'string' ? payload.content : null;\n\t\t\t\t\t\tconst userParts: MessagePart[] =\n\t\t\t\t\t\t\trole === 'user' && content\n\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tid: `${id}-text`,\n\t\t\t\t\t\t\t\t\t\t\tmessageId: id,\n\t\t\t\t\t\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\t\t\t\t\t\tstepIndex: null,\n\t\t\t\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\t\t\t\tcontent: JSON.stringify({ text: content }),\n\t\t\t\t\t\t\t\t\t\t\tcontentJson: { text: content },\n\t\t\t\t\t\t\t\t\t\t\tagent,\n\t\t\t\t\t\t\t\t\t\t\tprovider,\n\t\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t\t\tstartedAt: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\tcompletedAt: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\ttoolName: null,\n\t\t\t\t\t\t\t\t\t\t\ttoolCallId: null,\n\t\t\t\t\t\t\t\t\t\t\ttoolDurationMs: null,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t\t\t\t['messages', sessionId],\n\t\t\t\t\t\t\t(oldMessages) => {\n\t\t\t\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\t\t\t\tif (oldMessages.some((m) => m.id === id)) return oldMessages;\n\t\t\t\t\t\t\t\tconst newMessage: Message = {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\t\trole: role as Message['role'],\n\t\t\t\t\t\t\t\t\tstatus: role === 'user' ? 'complete' : 'pending',\n\t\t\t\t\t\t\t\t\tagent,\n\t\t\t\t\t\t\t\t\tprovider,\n\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\t\t\t\tlatencyMs: null,\n\t\t\t\t\t\t\t\t\tpromptTokens: null,\n\t\t\t\t\t\t\t\t\tcompletionTokens: null,\n\t\t\t\t\t\t\t\t\ttotalTokens: null,\n\t\t\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t\t\t\tparts: userParts,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst next = [...oldMessages, newMessage];\n\t\t\t\t\t\t\t\tnext.sort((a, b) => a.createdAt - b.createdAt);\n\t\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'message.part.delta': {\n\t\t\t\t\tapplyMessageDelta(payload);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'reasoning.delta': {\n\t\t\t\t\tapplyReasoningDelta(payload);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'message.completed': {\n\t\t\t\t\tconst id = typeof payload?.id === 'string' ? payload.id : null;\n\t\t\t\t\tif (id && assistantMessageIdRef.current === id) {\n\t\t\t\t\t\tassistantMessageIdRef.current = null;\n\t\t\t\t\t}\n\t\t\t\t\tmarkMessageCompleted(payload);\n\t\t\t\t\tclearEphemeralForMessage(id);\n\t\t\t\t\tif (id) {\n\t\t\t\t\t\tqueryClient.setQueryData<ReturnType<typeof normalizeQueueState>>(\n\t\t\t\t\t\t\t['queueState', sessionId],\n\t\t\t\t\t\t\t(current) => {\n\t\t\t\t\t\t\t\tif (!current || current.currentMessageId !== id) return current;\n\t\t\t\t\t\t\t\treturn normalizeQueueState({\n\t\t\t\t\t\t\t\t\tcurrentMessageId: null,\n\t\t\t\t\t\t\t\t\tqueuedMessages: [],\n\t\t\t\t\t\t\t\t\tisRunning: false,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['messages', sessionId] });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['session', sessionId] });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['goal', sessionId] });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['goals', 'project'] });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['subagents', sessionId] });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.delta': {\n\t\t\t\t\tconst channel =\n\t\t\t\t\t\ttypeof payload?.channel === 'string' ? payload.channel : null;\n\t\t\t\t\tconst delta =\n\t\t\t\t\t\tchannel === 'output'\n\t\t\t\t\t\t\t? getToolOutputDelta(payload)\n\t\t\t\t\t\t\t: getToolInputDelta(payload);\n\t\t\t\t\tif (channel === 'input' || (channel == null && delta)) {\n\t\t\t\t\t\tif (delta) {\n\t\t\t\t\t\t\taccumulateToolInputDelta(payload, delta);\n\t\t\t\t\t\t\thandleToolActivityViewerEvent('tool.delta', payload, delta);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tupsertEphemeralToolCall(payload);\n\t\t\t\t\t\t\thandleToolActivityViewerEvent('tool.delta', payload);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (channel === 'output' && delta) {\n\t\t\t\t\t\taccumulateToolOutputDelta(payload, delta);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.call': {\n\t\t\t\t\tupsertEphemeralToolCall(payload);\n\t\t\t\t\thandleToolActivityViewerEvent('tool.call', payload);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.result': {\n\t\t\t\t\tresolveEphemeralToolCall(payload);\n\t\t\t\t\thandleToolActivityViewerEvent('tool.result', payload);\n\t\t\t\t\tconst key = getToolBufferKey(payload);\n\t\t\t\t\tif (key) toolInputBuffersRef.current.delete(key);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.approval.required': {\n\t\t\t\t\tconst callId =\n\t\t\t\t\t\ttypeof payload?.callId === 'string' ? payload.callId : null;\n\t\t\t\t\tconst toolName =\n\t\t\t\t\t\ttypeof payload?.toolName === 'string' ? payload.toolName : null;\n\t\t\t\t\tconst messageId =\n\t\t\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\t\t\tconst args = payload?.args;\n\t\t\t\t\tif (callId && toolName && messageId) {\n\t\t\t\t\t\taddPendingApproval({\n\t\t\t\t\t\t\tcallId,\n\t\t\t\t\t\t\ttoolName,\n\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.approval.resolved': {\n\t\t\t\t\tconst callId =\n\t\t\t\t\t\ttypeof payload?.callId === 'string' ? payload.callId : null;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tremovePendingApproval(callId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'tool.approval.updated': {\n\t\t\t\t\tconst callId =\n\t\t\t\t\t\ttypeof payload?.callId === 'string' ? payload.callId : null;\n\t\t\t\t\tconst args = payload?.args;\n\t\t\t\t\tif (callId) {\n\t\t\t\t\t\tupdatePendingApproval(callId, args);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'shell.secure_input.required': {\n\t\t\t\t\tconst promptId =\n\t\t\t\t\t\ttypeof payload?.promptId === 'string' ? payload.promptId : null;\n\t\t\t\t\tconst prompt =\n\t\t\t\t\t\ttypeof payload?.prompt === 'string' ? payload.prompt : null;\n\t\t\t\t\tif (promptId && prompt) {\n\t\t\t\t\t\taddPendingInput({\n\t\t\t\t\t\t\tpromptId,\n\t\t\t\t\t\t\tprompt,\n\t\t\t\t\t\t\tmessageId:\n\t\t\t\t\t\t\t\ttypeof payload?.messageId === 'string'\n\t\t\t\t\t\t\t\t\t? payload.messageId\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tcallId:\n\t\t\t\t\t\t\t\ttypeof payload?.callId === 'string'\n\t\t\t\t\t\t\t\t\t? payload.callId\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tinputKind: 'password',\n\t\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'shell.secure_input.resolved': {\n\t\t\t\t\tconst promptId =\n\t\t\t\t\t\ttypeof payload?.promptId === 'string' ? payload.promptId : null;\n\t\t\t\t\tif (promptId) {\n\t\t\t\t\t\tremovePendingInput(promptId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\thandleToolActivityViewerEvent('error', payload);\n\t\t\t\t\tremoveEphemeralToolCall(payload);\n\t\t\t\t\tconst messageId =\n\t\t\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : null;\n\t\t\t\t\tif (messageId) {\n\t\t\t\t\t\tif (assistantMessageIdRef.current === messageId) {\n\t\t\t\t\t\t\tassistantMessageIdRef.current = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearEphemeralForMessage(messageId);\n\t\t\t\t\t\tupsertErrorPart(payload);\n\t\t\t\t\t}\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['messages', sessionId] });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'message.updated': {\n\t\t\t\t\tconst id = typeof payload?.id === 'string' ? payload.id : null;\n\t\t\t\t\tconst status =\n\t\t\t\t\t\ttypeof payload?.status === 'string' ? payload.status : null;\n\t\t\t\t\tif (id && status) {\n\t\t\t\t\t\tif (status !== 'pending' && assistantMessageIdRef.current === id) {\n\t\t\t\t\t\t\tassistantMessageIdRef.current = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (status !== 'pending') {\n\t\t\t\t\t\t\tclearEphemeralForMessage(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst error =\n\t\t\t\t\t\t\ttypeof payload?.error === 'string' ? payload.error : undefined;\n\t\t\t\t\t\tqueryClient.setQueryData<Message[]>(\n\t\t\t\t\t\t\t['messages', sessionId],\n\t\t\t\t\t\t\t(oldMessages) => {\n\t\t\t\t\t\t\t\tif (!oldMessages) return oldMessages;\n\t\t\t\t\t\t\t\tconst idx = oldMessages.findIndex((m) => m.id === id);\n\t\t\t\t\t\t\t\tif (idx === -1) return oldMessages;\n\t\t\t\t\t\t\t\tconst next = [...oldMessages];\n\t\t\t\t\t\t\t\tnext[idx] = {\n\t\t\t\t\t\t\t\t\t...next[idx],\n\t\t\t\t\t\t\t\t\tstatus: status as Message['status'],\n\t\t\t\t\t\t\t\t\tcompletedAt:\n\t\t\t\t\t\t\t\t\t\tstatus === 'pending'\n\t\t\t\t\t\t\t\t\t\t\t? next[idx].completedAt\n\t\t\t\t\t\t\t\t\t\t\t: (next[idx].completedAt ?? Date.now()),\n\t\t\t\t\t\t\t\t\terror: error ?? next[idx].error,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'goal.updated': {\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['goal', sessionId] });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['goals', 'project'] });\n\t\t\t\t\tqueryClient.invalidateQueries({\n\t\t\t\t\t\tqueryKey: ['subagents', sessionId],\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'queue.updated': {\n\t\t\t\t\tconst queueState = normalizeQueueState({\n\t\t\t\t\t\tcurrentMessageId: payload?.currentMessageId as string | null,\n\t\t\t\t\t\tqueuedMessages: (payload?.queuedMessages ?? []) as Array<{\n\t\t\t\t\t\t\tmessageId: string;\n\t\t\t\t\t\t\tposition: number;\n\t\t\t\t\t\t}>,\n\t\t\t\t\t\tisRunning:\n\t\t\t\t\t\t\ttypeof payload?.isRunning === 'boolean'\n\t\t\t\t\t\t\t\t? payload.isRunning\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tqueryClient.setQueryData(['queueState', sessionId], queueState);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (event.type === 'finish-step') {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (now - lastSessionInvalidation >= 2000) {\n\t\t\t\t\tlastSessionInvalidation = now;\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['session', sessionId] });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tclient.disconnect();\n\t\t};\n\t}, [\n\t\tsessionId,\n\t\tqueryClient,\n\t\taddPendingApproval,\n\t\taddPendingInput,\n\t\tremovePendingApproval,\n\t\tremovePendingInput,\n\t\tenabled,\n\t\tsetPendingApprovals,\n\t\tsetPendingInputs,\n\t\tupdatePendingApproval,\n\t]);\n}\n",
39
39
  "import type { SSEEvent } from '../types/api';\n\nexport type SSEEventHandler = (event: SSEEvent) => void;\n\nexport class SSEClient {\n\tprivate abortController: AbortController | null = null;\n\tprivate handlers: Map<string, Set<SSEEventHandler>> = new Map();\n\tprivate running = false;\n\n\tasync connect(url: string) {\n\t\tif (this.abortController) {\n\t\t\tthis.abortController.abort();\n\t\t}\n\n\t\tthis.abortController = new AbortController();\n\t\tthis.running = true;\n\n\t\tconst isTunnel = !url.includes('localhost') && !url.includes('127.0.0.1');\n\n\t\ttry {\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: isTunnel ? 'POST' : 'GET',\n\t\t\t\theaders: { Accept: 'text/event-stream' },\n\t\t\t\tsignal: this.abortController.signal,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconsole.error('[SSE] Connection failed:', response.status);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst reader = response.body?.getReader();\n\t\t\tif (!reader) {\n\t\t\t\tconsole.error('[SSE] No response body');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst decoder = new TextDecoder();\n\t\t\tlet buffer = '';\n\n\t\t\twhile (this.running) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) break;\n\n\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\t\tlet idx = buffer.indexOf('\\n\\n');\n\n\t\t\t\twhile (idx !== -1) {\n\t\t\t\t\tconst raw = buffer.slice(0, idx);\n\t\t\t\t\tbuffer = buffer.slice(idx + 2);\n\t\t\t\t\tconst lines = raw.split('\\n');\n\n\t\t\t\t\tlet eventType = 'message';\n\t\t\t\t\tlet data = '';\n\n\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\tif (line.startsWith('event: ')) {\n\t\t\t\t\t\t\teventType = line.slice(7).trim();\n\t\t\t\t\t\t} else if (line.startsWith('data: ')) {\n\t\t\t\t\t\t\tdata += (data ? '\\n' : '') + line.slice(6);\n\t\t\t\t\t\t} else if (line.startsWith(':')) {\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst payload = JSON.parse(data);\n\t\t\t\t\t\t\tthis.emit({ type: eventType, payload });\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconsole.error(`[SSE] Failed to parse ${eventType}:`, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tidx = buffer.indexOf('\\n\\n');\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error && error.name === 'AbortError') {\n\t\t\t} else if (\n\t\t\t\terror instanceof TypeError &&\n\t\t\t\terror.message === 'Load failed'\n\t\t\t) {\n\t\t\t} else {\n\t\t\t\tconsole.error('[SSE] Connection error:', error);\n\t\t\t}\n\t\t}\n\t}\n\n\tdisconnect() {\n\t\tthis.running = false;\n\t\tif (this.abortController) {\n\t\t\tthis.abortController.abort();\n\t\t\tthis.abortController = null;\n\t\t}\n\t}\n\n\ton(eventType: string, handler: SSEEventHandler) {\n\t\tif (!this.handlers.has(eventType)) {\n\t\t\tthis.handlers.set(eventType, new Set());\n\t\t}\n\t\tthis.handlers.get(eventType)?.add(handler);\n\n\t\treturn () => {\n\t\t\tthis.off(eventType, handler);\n\t\t};\n\t}\n\n\toff(eventType: string, handler: SSEEventHandler) {\n\t\tconst handlers = this.handlers.get(eventType);\n\t\tif (handlers) {\n\t\t\thandlers.delete(handler);\n\t\t\tif (handlers.size === 0) {\n\t\t\t\tthis.handlers.delete(eventType);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate emit(event: SSEEvent) {\n\t\tconst handlers = this.handlers.get(event.type);\n\t\tif (handlers) {\n\t\t\tfor (const handler of handlers) {\n\t\t\t\thandler(event);\n\t\t\t}\n\t\t}\n\n\t\tconst allHandlers = this.handlers.get('*');\n\t\tif (allHandlers) {\n\t\t\tfor (const handler of allHandlers) {\n\t\t\t\thandler(event);\n\t\t\t}\n\t\t}\n\t}\n}\n",
40
40
  "import { create } from 'zustand';\n\nexport interface PendingToolApproval {\n\tcallId: string;\n\ttoolName: string;\n\targs: unknown;\n\tmessageId: string;\n\tcreatedAt: number;\n}\n\ninterface ToolApprovalState {\n\tpendingApprovals: PendingToolApproval[];\n\taddPendingApproval: (approval: PendingToolApproval) => void;\n\tremovePendingApproval: (callId: string) => void;\n\tupdatePendingApproval: (callId: string, args: unknown) => void;\n\tclearPendingApprovals: () => void;\n\tsetPendingApprovals: (approvals: PendingToolApproval[]) => void;\n}\n\nexport const useToolApprovalStore = create<ToolApprovalState>((set) => ({\n\tpendingApprovals: [],\n\n\taddPendingApproval: (approval) =>\n\t\tset((state) => ({\n\t\t\tpendingApprovals: [...state.pendingApprovals, approval],\n\t\t})),\n\n\tremovePendingApproval: (callId) =>\n\t\tset((state) => ({\n\t\t\tpendingApprovals: state.pendingApprovals.filter(\n\t\t\t\t(a) => a.callId !== callId,\n\t\t\t),\n\t\t})),\n\n\tupdatePendingApproval: (callId, args) =>\n\t\tset((state) => ({\n\t\t\tpendingApprovals: state.pendingApprovals.map((a) =>\n\t\t\t\ta.callId === callId ? { ...a, args } : a,\n\t\t\t),\n\t\t})),\n\n\tclearPendingApprovals: () => set({ pendingApprovals: [] }),\n\n\tsetPendingApprovals: (approvals) => set({ pendingApprovals: approvals }),\n}));\n",
41
41
  "import { create } from 'zustand';\n\nexport interface PendingSecureInput {\n\tpromptId: string;\n\tmessageId?: string;\n\tcallId?: string;\n\tprompt: string;\n\tinputKind?: 'password' | 'passphrase' | 'token';\n\tcreatedAt: number;\n}\n\ninterface SecureInputState {\n\tpendingInputs: PendingSecureInput[];\n\taddPendingInput: (input: PendingSecureInput) => void;\n\tremovePendingInput: (promptId: string) => void;\n\tsetPendingInputs: (inputs: PendingSecureInput[]) => void;\n\tclearPendingInputs: () => void;\n}\n\nexport const useSecureInputStore = create<SecureInputState>((set) => ({\n\tpendingInputs: [],\n\taddPendingInput: (input) =>\n\t\tset((state) => ({\n\t\t\tpendingInputs: [\n\t\t\t\t...state.pendingInputs.filter(\n\t\t\t\t\t(item) => item.promptId !== input.promptId,\n\t\t\t\t),\n\t\t\t\tinput,\n\t\t\t],\n\t\t})),\n\tremovePendingInput: (promptId) =>\n\t\tset((state) => ({\n\t\t\tpendingInputs: state.pendingInputs.filter(\n\t\t\t\t(input) => input.promptId !== promptId,\n\t\t\t),\n\t\t})),\n\tsetPendingInputs: (inputs) => set({ pendingInputs: inputs }),\n\tclearPendingInputs: () => set({ pendingInputs: [] }),\n}));\n",
@@ -53,7 +53,7 @@
53
53
  "import {\n\tuseState,\n\tuseCallback,\n\tuseEffect,\n\ttype DragEvent,\n\ttype ClipboardEvent,\n} from 'react';\nimport { uploadAttachment } from '@ottocode/api';\nimport { extractErrorMessage } from '../lib/api-client/utils';\n\nexport type FileAttachmentType = 'image' | 'pdf' | 'text' | 'binary';\nexport type FileUploadStatus = 'uploading' | 'ready' | 'failed';\n\nexport interface UploadedAttachment {\n\tid: string;\n\tfilename: string;\n\tmimeType: string;\n\tsize: number;\n\tsha256: string;\n\tkind: FileAttachmentType;\n\toriginalPath: string;\n\toriginalUrl: string;\n\tmetadataUrl: string;\n\tstatus: 'ready';\n}\n\nexport interface FileAttachment {\n\tid: string;\n\tfile: File;\n\ttype: FileAttachmentType;\n\tname: string;\n\tpreview?: string;\n\tdata?: string;\n\tmediaType: string;\n\ttextContent?: string;\n\tuploadStatus: FileUploadStatus;\n\tuploadedAttachment?: UploadedAttachment;\n\tuploadError?: string;\n}\n\nconst IMAGE_TYPES = ['image/png', 'image/jpeg', 'image/gif', 'image/webp'];\nconst PDF_TYPES = ['application/pdf'];\nconst TEXT_TYPES = [\n\t'text/plain',\n\t'text/markdown',\n\t'text/x-markdown',\n\t'application/json',\n\t'text/csv',\n\t'text/xml',\n\t'application/xml',\n\t'text/yaml',\n\t'text/x-yaml',\n\t'application/x-yaml',\n\t'text/html',\n\t'text/css',\n\t'text/javascript',\n\t'application/javascript',\n\t'application/typescript',\n];\nconst TEXT_EXTENSIONS = [\n\t'.txt',\n\t'.md',\n\t'.markdown',\n\t'.json',\n\t'.csv',\n\t'.xml',\n\t'.yaml',\n\t'.yml',\n\t'.html',\n\t'.css',\n\t'.js',\n\t'.ts',\n\t'.jsx',\n\t'.tsx',\n\t'.py',\n\t'.rs',\n\t'.go',\n\t'.java',\n\t'.c',\n\t'.cpp',\n\t'.h',\n\t'.hpp',\n\t'.rb',\n\t'.php',\n\t'.sh',\n\t'.bash',\n\t'.zsh',\n\t'.toml',\n\t'.ini',\n\t'.cfg',\n\t'.env',\n\t'.log',\n\t'.sql',\n\t'.graphql',\n\t'.svelte',\n\t'.vue',\n];\n\nfunction generateId(): string {\n\treturn `file-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction getExtension(file: File): string {\n\tconst index = file.name.lastIndexOf('.');\n\treturn index >= 0 ? file.name.toLowerCase().slice(index) : '';\n}\n\nfunction getFileType(file: File): FileAttachmentType {\n\tif (IMAGE_TYPES.includes(file.type)) return 'image';\n\tif (PDF_TYPES.includes(file.type)) return 'pdf';\n\tif (TEXT_TYPES.includes(file.type)) return 'text';\n\tif (TEXT_EXTENSIONS.includes(getExtension(file))) return 'text';\n\treturn 'binary';\n}\n\nasync function fileToBase64(file: File): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\t\treader.onload = () => {\n\t\t\tconst result = reader.result as string;\n\t\t\tconst base64 = result.split(',')[1];\n\t\t\tresolve(base64);\n\t\t};\n\t\treader.onerror = reject;\n\t\treader.readAsDataURL(file);\n\t});\n}\n\nasync function fileToText(file: File): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\t\treader.onload = () => resolve(reader.result as string);\n\t\treader.onerror = reject;\n\t\treader.readAsText(file);\n\t});\n}\n\nasync function fileToPreview(file: File): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\t\treader.onload = () => resolve(reader.result as string);\n\t\treader.onerror = reject;\n\t\treader.readAsDataURL(file);\n\t});\n}\n\nasync function uploadOriginalFile(\n\tfile: File,\n\tsessionId?: string,\n): Promise<UploadedAttachment> {\n\tconst response = await uploadAttachment({\n\t\tbody: {\n\t\t\tfile,\n\t\t\t...(sessionId ? { sessionId } : {}),\n\t\t},\n\t});\n\tif (response.error) {\n\t\tthrow new Error(extractErrorMessage(response.error));\n\t}\n\treturn response.data as UploadedAttachment;\n}\n\ninterface UseFileUploadOptions {\n\tmaxFiles?: number;\n\tmaxSizeMB?: number;\n\tpageWide?: boolean;\n\tsupportsImages?: boolean;\n\tsupportsFileAttachments?: boolean;\n\tsessionId?: string;\n\tonError?: (message: string) => void;\n}\n\nexport function useFileUpload(options: UseFileUploadOptions = {}) {\n\tconst {\n\t\tmaxFiles = 10,\n\t\tmaxSizeMB = 100,\n\t\tpageWide = true,\n\t\tsupportsImages = true,\n\t\tsupportsFileAttachments = true,\n\t\tsessionId,\n\t\tonError,\n\t} = options;\n\n\tconst [files, setFiles] = useState<FileAttachment[]>([]);\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst [error, setError] = useState<string | null>(null);\n\n\tconst maxSizeBytes = maxSizeMB * 1024 * 1024;\n\n\tconst validateFile = useCallback(\n\t\t(file: File): string | null => {\n\t\t\tif (file.size > maxSizeBytes) {\n\t\t\t\treturn `File too large: ${(file.size / 1024 / 1024).toFixed(1)}MB. Max: ${maxSizeMB}MB`;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t[maxSizeBytes, maxSizeMB],\n\t);\n\n\tconst addFiles = useCallback(\n\t\tasync (inputFiles: FileList | File[]) => {\n\t\t\tsetError(null);\n\t\t\tconst fileArray = Array.from(inputFiles);\n\t\t\tconst remaining = maxFiles - files.length;\n\n\t\t\tif (remaining <= 0) {\n\t\t\t\tconst msg = `Maximum ${maxFiles} files allowed`;\n\t\t\t\tsetError(msg);\n\t\t\t\tonError?.(msg);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst filesToAdd = fileArray.slice(0, remaining);\n\t\t\tconst newFiles: FileAttachment[] = [];\n\n\t\t\tfor (const file of filesToAdd) {\n\t\t\t\tconst validationError = validateFile(file);\n\t\t\t\tif (validationError) {\n\t\t\t\t\tsetError(validationError);\n\t\t\t\t\tonError?.(validationError);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst fileType = getFileType(file);\n\n\t\t\t\ttry {\n\t\t\t\t\tlet preview: string | undefined;\n\t\t\t\t\tlet data: string | undefined;\n\t\t\t\t\tlet textContent: string | undefined;\n\t\t\t\t\tlet mediaType = file.type || 'application/octet-stream';\n\n\t\t\t\t\tif (fileType === 'image') {\n\t\t\t\t\t\tif (supportsImages) {\n\t\t\t\t\t\t\t[preview, data] = await Promise.all([\n\t\t\t\t\t\t\t\tfileToPreview(file),\n\t\t\t\t\t\t\t\tfileToBase64(file),\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpreview = await fileToPreview(file);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (fileType === 'pdf') {\n\t\t\t\t\t\tmediaType = 'application/pdf';\n\t\t\t\t\t\tif (supportsFileAttachments) {\n\t\t\t\t\t\t\tdata = await fileToBase64(file);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (fileType === 'text') {\n\t\t\t\t\t\ttextContent = await fileToText(file);\n\t\t\t\t\t\tdata = textContent;\n\t\t\t\t\t\tif (!file.type) {\n\t\t\t\t\t\t\tconst ext = file.name.toLowerCase();\n\t\t\t\t\t\t\tmediaType =\n\t\t\t\t\t\t\t\text.endsWith('.md') || ext.endsWith('.markdown')\n\t\t\t\t\t\t\t\t\t? 'text/markdown'\n\t\t\t\t\t\t\t\t\t: 'text/plain';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst id = generateId();\n\t\t\t\t\tnewFiles.push({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\ttype: fileType,\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t\tpreview,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tmediaType,\n\t\t\t\t\t\ttextContent,\n\t\t\t\t\t\tuploadStatus: 'uploading',\n\t\t\t\t\t});\n\t\t\t\t} catch {\n\t\t\t\t\tconst msg = `Failed to process file: ${file.name}`;\n\t\t\t\t\tsetError(msg);\n\t\t\t\t\tonError?.(msg);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newFiles.length > 0) {\n\t\t\t\tsetFiles((prev) => [...prev, ...newFiles]);\n\t\t\t\tfor (const item of newFiles) {\n\t\t\t\t\tvoid uploadOriginalFile(item.file, sessionId)\n\t\t\t\t\t\t.then((uploadedAttachment) => {\n\t\t\t\t\t\t\tsetFiles((prev) =>\n\t\t\t\t\t\t\t\tprev.map((existing) =>\n\t\t\t\t\t\t\t\t\texisting.id === item.id\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\t\t\t\t\t\tuploadStatus: 'ready',\n\t\t\t\t\t\t\t\t\t\t\t\tuploadedAttachment,\n\t\t\t\t\t\t\t\t\t\t\t\tuploadError: undefined,\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: existing,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((uploadError: unknown) => {\n\t\t\t\t\t\t\tconst msg =\n\t\t\t\t\t\t\t\tuploadError instanceof Error\n\t\t\t\t\t\t\t\t\t? uploadError.message\n\t\t\t\t\t\t\t\t\t: `Failed to upload ${item.name}`;\n\t\t\t\t\t\t\tsetFiles((prev) =>\n\t\t\t\t\t\t\t\tprev.map((existing) =>\n\t\t\t\t\t\t\t\t\texisting.id === item.id\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\t\t\t\t\t\tuploadStatus: 'failed',\n\t\t\t\t\t\t\t\t\t\t\t\tuploadError: msg,\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: existing,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tonError?.(msg);\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tfiles.length,\n\t\t\tmaxFiles,\n\t\t\tvalidateFile,\n\t\t\tonError,\n\t\t\tsessionId,\n\t\t\tsupportsImages,\n\t\t\tsupportsFileAttachments,\n\t\t],\n\t);\n\n\tconst removeFile = useCallback((id: string) => {\n\t\tsetFiles((prev) => prev.filter((f) => f.id !== id));\n\t\tsetError(null);\n\t}, []);\n\n\tconst clearFiles = useCallback(() => {\n\t\tsetFiles([]);\n\t\tsetError(null);\n\t}, []);\n\n\tconst handleDragEnter = useCallback((e: DragEvent) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tif (e.dataTransfer.types.includes('Files')) {\n\t\t\tsetIsDragging(true);\n\t\t}\n\t}, []);\n\n\tconst handleDragLeave = useCallback((e: DragEvent) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tconst rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\t\tconst x = e.clientX;\n\t\tconst y = e.clientY;\n\t\tif (x < rect.left || x > rect.right || y < rect.top || y > rect.bottom) {\n\t\t\tsetIsDragging(false);\n\t\t}\n\t}, []);\n\n\tconst handleDragOver = useCallback((e: DragEvent) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}, []);\n\n\tconst handleDrop = useCallback(\n\t\t(e: DragEvent) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tsetIsDragging(false);\n\n\t\t\tconst droppedFiles = e.dataTransfer.files;\n\t\t\tif (droppedFiles.length > 0) {\n\t\t\t\taddFiles(Array.from(droppedFiles));\n\t\t\t}\n\t\t},\n\t\t[addFiles],\n\t);\n\n\tconst handlePaste = useCallback(\n\t\t(e: ClipboardEvent) => {\n\t\t\tconst items = e.clipboardData?.items;\n\t\t\tif (!items) return;\n\n\t\t\tconst pastedFiles: File[] = [];\n\t\t\tfor (const item of Array.from(items)) {\n\t\t\t\tif (item.kind === 'file') {\n\t\t\t\t\tconst file = item.getAsFile();\n\t\t\t\t\tif (file) {\n\t\t\t\t\t\tpastedFiles.push(file);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pastedFiles.length > 0) {\n\t\t\t\te.preventDefault();\n\t\t\t\taddFiles(pastedFiles);\n\t\t\t}\n\t\t},\n\t\t[addFiles],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!pageWide) return;\n\n\t\tlet dragCounter = 0;\n\n\t\tconst onDragEnter = (e: globalThis.DragEvent) => {\n\t\t\te.preventDefault();\n\t\t\tif (e.dataTransfer?.types.includes('Files')) {\n\t\t\t\tdragCounter++;\n\t\t\t\tif (dragCounter === 1) {\n\t\t\t\t\tsetIsDragging(true);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst onDragLeave = (e: globalThis.DragEvent) => {\n\t\t\te.preventDefault();\n\t\t\tdragCounter--;\n\t\t\tif (dragCounter === 0) {\n\t\t\t\tsetIsDragging(false);\n\t\t\t}\n\t\t};\n\n\t\tconst onDragOver = (e: globalThis.DragEvent) => {\n\t\t\te.preventDefault();\n\t\t};\n\n\t\tconst onDrop = (e: globalThis.DragEvent) => {\n\t\t\te.preventDefault();\n\t\t\tdragCounter = 0;\n\t\t\tsetIsDragging(false);\n\n\t\t\tconst droppedFiles = e.dataTransfer?.files;\n\t\t\tif (droppedFiles && droppedFiles.length > 0) {\n\t\t\t\taddFiles(Array.from(droppedFiles));\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener('dragenter', onDragEnter);\n\t\tdocument.addEventListener('dragleave', onDragLeave);\n\t\tdocument.addEventListener('dragover', onDragOver);\n\t\tdocument.addEventListener('drop', onDrop);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('dragenter', onDragEnter);\n\t\t\tdocument.removeEventListener('dragleave', onDragLeave);\n\t\t\tdocument.removeEventListener('dragover', onDragOver);\n\t\t\tdocument.removeEventListener('drop', onDrop);\n\t\t};\n\t}, [pageWide, addFiles]);\n\n\tconst images = files.filter((f) => f.type === 'image');\n\tconst documents = files.filter((f) => f.type !== 'image');\n\n\treturn {\n\t\tfiles,\n\t\timages,\n\t\tdocuments,\n\t\tisDragging,\n\t\terror,\n\t\taddFiles,\n\t\tremoveFile,\n\t\tclearFiles,\n\t\thandleDragEnter,\n\t\thandleDragLeave,\n\t\thandleDragOver,\n\t\thandleDrop,\n\t\thandlePaste,\n\t};\n}\n",
54
54
  "import { useQuery } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport { useSessionFilesStore } from '../stores/sessionFilesStore';\n\nexport function useSessionFiles(sessionId: string | undefined, enabled = true) {\n\tconst isExpanded = useSessionFilesStore((state) => state.isExpanded);\n\n\treturn useQuery({\n\t\tqueryKey: ['session', sessionId, 'files'],\n\t\tqueryFn: () => (sessionId ? apiClient.getSessionFiles(sessionId) : null),\n\t\tenabled: !!sessionId && enabled,\n\t\trefetchInterval: isExpanded && enabled ? 5000 : false,\n\t\tretry: 1,\n\t\tstaleTime: 3000,\n\t});\n}\n",
55
55
  "import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport type { CreateBranchRequest } from '../types/api';\nimport { sessionsQueryKey } from './useSessions';\n\nexport function useCreateBranch(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (data: CreateBranchRequest) => {\n\t\t\tif (!sessionId) throw new Error('No session ID');\n\t\t\treturn apiClient.createBranch(sessionId, data);\n\t\t},\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t\tif (sessionId) {\n\t\t\t\tqueryClient.invalidateQueries({\n\t\t\t\t\tqueryKey: ['branches', sessionId],\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t});\n}\n\nexport function useBranches(sessionId: string | undefined) {\n\treturn useQuery({\n\t\tqueryKey: ['branches', sessionId],\n\t\tqueryFn: () => {\n\t\t\tif (!sessionId) throw new Error('No session ID');\n\t\t\treturn apiClient.listBranches(sessionId);\n\t\t},\n\t\tenabled: Boolean(sessionId),\n\t});\n}\n\nexport function useParentSession(sessionId: string | undefined) {\n\treturn useQuery({\n\t\tqueryKey: ['parentSession', sessionId],\n\t\tqueryFn: () => {\n\t\t\tif (!sessionId) throw new Error('No session ID');\n\t\t\treturn apiClient.getParentSession(sessionId);\n\t\t},\n\t\tenabled: Boolean(sessionId),\n\t});\n}\n",
56
- "import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport type {\n\tGoalStatus,\n\tGoalTaskStatus,\n\tSubagentStatus,\n} from '../lib/api-client';\nimport { useConfig } from './useConfig';\n\nexport const goalQueryKey = (sessionId: string | undefined) => [\n\t'goal',\n\tsessionId,\n];\nexport const subagentsQueryKey = (sessionId: string | undefined) => [\n\t'subagents',\n\tsessionId,\n];\n\nexport function useOttoEnabled(): boolean {\n\tconst { data: config } = useConfig();\n\treturn config?.defaults?.ottoEnabled ?? true;\n}\n\nexport function useSessionGoal(sessionId: string | undefined) {\n\tconst ottoEnabled = useOttoEnabled();\n\treturn useQuery({\n\t\tqueryKey: goalQueryKey(sessionId),\n\t\tqueryFn: () => {\n\t\t\tif (!sessionId) throw new Error('No session ID');\n\t\t\treturn apiClient.getSessionGoal(sessionId);\n\t\t},\n\t\tenabled: Boolean(sessionId) && ottoEnabled,\n\t\trefetchInterval: 15000,\n\t});\n}\n\nexport function useCreateSessionGoal(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (data: { title: string; tasks?: string[] }) => {\n\t\t\tif (!sessionId) throw new Error('No session ID');\n\t\t\treturn apiClient.createSessionGoal(sessionId, data);\n\t\t},\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t},\n\t});\n}\n\nexport function useUpdateGoal(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: {\n\t\t\tgoalId: string;\n\t\t\ttitle?: string;\n\t\t\tstatus?: GoalStatus;\n\t\t}) =>\n\t\t\tapiClient.updateGoal(input.goalId, {\n\t\t\t\ttitle: input.title,\n\t\t\t\tstatus: input.status,\n\t\t\t}),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t},\n\t});\n}\n\nexport function useAddGoalTasks(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: { goalId: string; tasks: string[] }) =>\n\t\t\tapiClient.addGoalTasks(input.goalId, input.tasks),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t},\n\t});\n}\n\nexport function useUpdateGoalTask(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: {\n\t\t\tgoalId: string;\n\t\t\ttaskId: string;\n\t\t\tcontent?: string;\n\t\t\tstatus?: GoalTaskStatus;\n\t\t\tnote?: string | null;\n\t\t}) =>\n\t\t\tapiClient.updateGoalTask(input.goalId, input.taskId, {\n\t\t\t\tcontent: input.content,\n\t\t\t\tstatus: input.status,\n\t\t\t\tnote: input.note,\n\t\t\t}),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t},\n\t});\n}\n\nexport function useSessionSubagents(\n\tsessionId: string | undefined,\n\tstatus?: SubagentStatus,\n) {\n\treturn useQuery({\n\t\tqueryKey: [...subagentsQueryKey(sessionId), status ?? 'all'],\n\t\tqueryFn: () => {\n\t\t\tif (!sessionId) throw new Error('No session ID');\n\t\t\treturn apiClient.listSessionSubagents(sessionId, status);\n\t\t},\n\t\tenabled: Boolean(sessionId),\n\t\trefetchInterval: (query) => {\n\t\t\tconst hasRunning = query.state.data?.subagents.some(\n\t\t\t\t(record) => record.status === 'running',\n\t\t\t);\n\t\t\treturn hasRunning ? 5000 : 30000;\n\t\t},\n\t});\n}\n\n/**\n * Starts the session's goal via the server start endpoint, which injects an\n * automated tagged kickoff into the main session and marks the goal started.\n */\nexport function useStartGoal(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: { goalId: string }) =>\n\t\t\tapiClient.startGoal(input.goalId),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t\tif (sessionId) {\n\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['messages', sessionId] });\n\t\t\t}\n\t\t},\n\t});\n}\n",
56
+ "import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport type {\n\tGoal,\n\tGoalStatus,\n\tGoalTaskStatus,\n\tSubagentStatus,\n} from '../lib/api-client';\nimport { useConfig } from './useConfig';\n\nexport const goalQueryKey = (sessionId: string | undefined) => [\n\t'goal',\n\tsessionId,\n];\nexport const projectGoalsQueryKey = ['goals', 'project'] as const;\nexport const subagentsQueryKey = (sessionId: string | undefined) => [\n\t'subagents',\n\tsessionId,\n];\n\nexport function useOttoEnabled(): boolean {\n\tconst { data: config } = useConfig();\n\treturn config?.defaults?.ottoEnabled ?? true;\n}\n\n/**\n * Lists every goal for the current project (active, completed, abandoned),\n * each with its full task queue. Powers the Otto tab overview and goal view.\n */\nexport function useProjectGoals() {\n\tconst ottoEnabled = useOttoEnabled();\n\treturn useQuery({\n\t\tqueryKey: projectGoalsQueryKey,\n\t\tqueryFn: () => apiClient.listGoals(),\n\t\tenabled: ottoEnabled,\n\t\trefetchInterval: 10000,\n\t});\n}\n\nfunction applyGoalToProjectCache(\n\tqueryClient: ReturnType<typeof useQueryClient>,\n\tgoal: Goal,\n) {\n\tqueryClient.setQueryData<{ goals: Goal[] }>(projectGoalsQueryKey, (old) =>\n\t\told ? { goals: old.goals.map((g) => (g.id === goal.id ? goal : g)) } : old,\n\t);\n\tqueryClient.invalidateQueries({ queryKey: projectGoalsQueryKey });\n}\n\n/**\n * Appends tasks to a goal from the Otto tab. Updates the project goals cache\n * with the returned goal so the queue refreshes immediately.\n */\nexport function useAddProjectGoalTasks() {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: { goalId: string; tasks: string[] }) =>\n\t\t\tapiClient.addGoalTasks(input.goalId, input.tasks),\n\t\tonSuccess: ({ goal }) => applyGoalToProjectCache(queryClient, goal),\n\t});\n}\n\n/**\n * Deletes a goal task from the Otto tab. The server rejects in_progress\n * tasks with a 409 — surface the error to the caller via onError.\n */\nexport function useDeleteProjectGoalTask() {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: { goalId: string; taskId: string }) =>\n\t\t\tapiClient.deleteGoalTask(input.goalId, input.taskId),\n\t\tonSuccess: ({ goal }) => applyGoalToProjectCache(queryClient, goal),\n\t});\n}\n\nexport function useSessionGoal(sessionId: string | undefined) {\n\tconst ottoEnabled = useOttoEnabled();\n\treturn useQuery({\n\t\tqueryKey: goalQueryKey(sessionId),\n\t\tqueryFn: () => {\n\t\t\tif (!sessionId) throw new Error('No session ID');\n\t\t\treturn apiClient.getSessionGoal(sessionId);\n\t\t},\n\t\tenabled: Boolean(sessionId) && ottoEnabled,\n\t\trefetchInterval: 15000,\n\t});\n}\n\nexport function useCreateSessionGoal(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (data: { title: string; tasks?: string[] }) => {\n\t\t\tif (!sessionId) throw new Error('No session ID');\n\t\t\treturn apiClient.createSessionGoal(sessionId, data);\n\t\t},\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t},\n\t});\n}\n\nexport function useUpdateGoal(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: {\n\t\t\tgoalId: string;\n\t\t\ttitle?: string;\n\t\t\tstatus?: GoalStatus;\n\t\t}) =>\n\t\t\tapiClient.updateGoal(input.goalId, {\n\t\t\t\ttitle: input.title,\n\t\t\t\tstatus: input.status,\n\t\t\t}),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t\tqueryClient.invalidateQueries({ queryKey: projectGoalsQueryKey });\n\t\t},\n\t});\n}\n\nexport function useAddGoalTasks(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: { goalId: string; tasks: string[] }) =>\n\t\t\tapiClient.addGoalTasks(input.goalId, input.tasks),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t\tqueryClient.invalidateQueries({ queryKey: projectGoalsQueryKey });\n\t\t},\n\t});\n}\n\nexport function useUpdateGoalTask(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: {\n\t\t\tgoalId: string;\n\t\t\ttaskId: string;\n\t\t\tcontent?: string;\n\t\t\tstatus?: GoalTaskStatus;\n\t\t\tnote?: string | null;\n\t\t}) =>\n\t\t\tapiClient.updateGoalTask(input.goalId, input.taskId, {\n\t\t\t\tcontent: input.content,\n\t\t\t\tstatus: input.status,\n\t\t\t\tnote: input.note,\n\t\t\t}),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t\tqueryClient.invalidateQueries({ queryKey: projectGoalsQueryKey });\n\t\t},\n\t});\n}\n\nexport function useSessionSubagents(\n\tsessionId: string | undefined,\n\tstatus?: SubagentStatus,\n) {\n\treturn useQuery({\n\t\tqueryKey: [...subagentsQueryKey(sessionId), status ?? 'all'],\n\t\tqueryFn: () => {\n\t\t\tif (!sessionId) throw new Error('No session ID');\n\t\t\treturn apiClient.listSessionSubagents(sessionId, status);\n\t\t},\n\t\tenabled: Boolean(sessionId),\n\t\trefetchInterval: (query) => {\n\t\t\tconst hasRunning = query.state.data?.subagents.some(\n\t\t\t\t(record) => record.status === 'running',\n\t\t\t);\n\t\t\treturn hasRunning ? 5000 : 30000;\n\t\t},\n\t});\n}\n\n/**\n * Starts the session's goal via the server start endpoint, which injects an\n * automated tagged kickoff into the main session and marks the goal started.\n */\nexport function useStartGoal(sessionId: string | undefined) {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (input: { goalId: string }) =>\n\t\t\tapiClient.startGoal(input.goalId),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });\n\t\t\tqueryClient.invalidateQueries({ queryKey: projectGoalsQueryKey });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['sessions', 'list'] });\n\t\t\tif (sessionId) {\n\t\t\t\tqueryClient.invalidateQueries({ queryKey: ['messages', sessionId] });\n\t\t\t}\n\t\t},\n\t});\n}\n",
57
57
  "import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport {\n\tcreateResearchSession as apiCreateResearchSession,\n\tdeleteResearchSession as apiDeleteResearchSession,\n\texportResearchSession as apiExportResearchSession,\n\tinjectResearchContext as apiInjectResearchContext,\n\tlistResearchSessions as apiListResearchSessions,\n} from '@ottocode/api';\nimport { usePendingResearchStore } from '../stores/pendingResearchStore';\nimport { sessionsQueryKey } from './useSessions';\n\nexport interface ResearchSession {\n\tid: string;\n\ttitle: string | null;\n\tcreatedAt: number;\n\tlastActiveAt: number | null;\n\tprovider: string;\n\tmodel: string;\n\tmessageCount: number;\n}\n\nexport interface ResearchSessionsResponse {\n\tsessions: ResearchSession[];\n}\n\nexport interface CreateResearchResponse {\n\tsession: ResearchSession;\n\tparentSessionId: string;\n}\n\nexport interface InjectContextResponse {\n\tcontent: string;\n\tlabel: string;\n\tsessionId: string;\n\tparentSessionId: string;\n\ttokenEstimate: number;\n}\n\nexport interface ExportToSessionResponse {\n\tnewSession: {\n\t\tid: string;\n\t\ttitle: string | null;\n\t\tagent: string;\n\t\tprovider: string;\n\t\tmodel: string;\n\t};\n\tinjectedContext: string;\n}\n\nclass ResearchApiClient {\n\tasync listResearchSessions(\n\t\tparentSessionId: string,\n\t): Promise<ResearchSessionsResponse> {\n\t\tconst response = await apiListResearchSessions({\n\t\t\tpath: { parentId: parentSessionId },\n\t\t});\n\t\tif (response.error) throw new Error(JSON.stringify(response.error));\n\t\treturn response.data as unknown as ResearchSessionsResponse;\n\t}\n\n\tasync createResearchSession(\n\t\tparentSessionId: string,\n\t\tdata: { provider?: string; model?: string; title?: string },\n\t): Promise<CreateResearchResponse> {\n\t\tconst response = await apiCreateResearchSession({\n\t\t\tpath: { parentId: parentSessionId },\n\t\t\tbody: data,\n\t\t});\n\t\tif (response.error) throw new Error(JSON.stringify(response.error));\n\t\treturn response.data as unknown as CreateResearchResponse;\n\t}\n\n\tasync deleteResearchSession(\n\t\tresearchId: string,\n\t): Promise<{ success: boolean }> {\n\t\tconst response = await apiDeleteResearchSession({\n\t\t\tpath: { researchId },\n\t\t});\n\t\tif (response.error) throw new Error(JSON.stringify(response.error));\n\t\treturn response.data as { success: boolean };\n\t}\n\n\tasync injectContext(\n\t\tparentSessionId: string,\n\t\tresearchSessionId: string,\n\t\tlabel?: string,\n\t): Promise<InjectContextResponse> {\n\t\tconst response = await apiInjectResearchContext({\n\t\t\tpath: { parentId: parentSessionId },\n\t\t\tbody: { researchSessionId, label },\n\t\t});\n\t\tif (response.error) throw new Error(JSON.stringify(response.error));\n\t\treturn response.data as InjectContextResponse;\n\t}\n\n\tasync exportToNewSession(\n\t\tresearchId: string,\n\t\tdata?: { provider?: string; model?: string; agent?: string },\n\t): Promise<ExportToSessionResponse> {\n\t\tconst response = await apiExportResearchSession({\n\t\t\tpath: { researchId },\n\t\t\tbody: data ?? {},\n\t\t});\n\t\tif (response.error) throw new Error(JSON.stringify(response.error));\n\t\treturn response.data as ExportToSessionResponse;\n\t}\n}\n\nconst researchApi = new ResearchApiClient();\n\nexport function useResearchSessions(\n\tparentSessionId: string | null,\n\tenabled = true,\n) {\n\treturn useQuery({\n\t\tqueryKey: ['research', 'sessions', parentSessionId],\n\t\tqueryFn: () => researchApi.listResearchSessions(parentSessionId as string),\n\t\tenabled: !!parentSessionId && enabled,\n\t\tstaleTime: 30000,\n\t});\n}\n\nexport function useCreateResearchSession() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: ({\n\t\t\tparentSessionId,\n\t\t\tdata,\n\t\t}: {\n\t\t\tparentSessionId: string;\n\t\t\tdata?: { provider?: string; model?: string; title?: string };\n\t\t}) => researchApi.createResearchSession(parentSessionId, data ?? {}),\n\t\tonSuccess: (_, { parentSessionId }) => {\n\t\t\tqueryClient.invalidateQueries({\n\t\t\t\tqueryKey: ['research', 'sessions', parentSessionId],\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport function useDeleteResearchSession() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: (researchId: string) =>\n\t\t\tresearchApi.deleteResearchSession(researchId),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['research', 'sessions'] });\n\t\t},\n\t});\n}\n\nexport function useInjectContext() {\n\tconst addContext = usePendingResearchStore((state) => state.addContext);\n\n\treturn useMutation({\n\t\tmutationFn: ({\n\t\t\tparentSessionId,\n\t\t\tresearchSessionId,\n\t\t\tlabel,\n\t\t}: {\n\t\t\tparentSessionId: string;\n\t\t\tresearchSessionId: string;\n\t\t\tlabel?: string;\n\t\t}) => researchApi.injectContext(parentSessionId, researchSessionId, label),\n\t\tonSuccess: (data, { parentSessionId }) => {\n\t\t\taddContext(parentSessionId, {\n\t\t\t\tid: data.sessionId,\n\t\t\t\tsessionId: data.sessionId,\n\t\t\t\tlabel: data.label,\n\t\t\t\tcontent: data.content,\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport function useExportToSession() {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation({\n\t\tmutationFn: ({\n\t\t\tresearchId,\n\t\t\tdata,\n\t\t}: {\n\t\t\tresearchId: string;\n\t\t\tdata?: { provider?: string; model?: string; agent?: string };\n\t\t}) => researchApi.exportToNewSession(researchId, data),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.invalidateQueries({ queryKey: sessionsQueryKey });\n\t\t},\n\t});\n}\n",
58
58
  "import { create } from 'zustand';\n\nexport interface PendingResearchContext {\n\tid: string;\n\tsessionId: string;\n\tlabel: string;\n\tcontent: string;\n}\n\ninterface PendingResearchState {\n\tpendingContexts: Map<string, PendingResearchContext[]>;\n\taddContext: (\n\t\tparentSessionId: string,\n\t\tcontext: PendingResearchContext,\n\t) => void;\n\tremoveContext: (parentSessionId: string, contextId: string) => void;\n\tgetContexts: (parentSessionId: string) => PendingResearchContext[];\n\tclearContexts: (parentSessionId: string) => void;\n\tconsumeContexts: (parentSessionId: string) => PendingResearchContext[];\n}\n\nexport const usePendingResearchStore = create<PendingResearchState>(\n\t(set, get) => ({\n\t\tpendingContexts: new Map(),\n\n\t\taddContext: (parentSessionId, context) => {\n\t\t\tset((state) => {\n\t\t\t\tconst newMap = new Map(state.pendingContexts);\n\t\t\t\tconst existing = newMap.get(parentSessionId) || [];\n\t\t\t\tif (!existing.some((c) => c.id === context.id)) {\n\t\t\t\t\tnewMap.set(parentSessionId, [...existing, context]);\n\t\t\t\t}\n\t\t\t\treturn { pendingContexts: newMap };\n\t\t\t});\n\t\t},\n\n\t\tremoveContext: (parentSessionId, contextId) => {\n\t\t\tset((state) => {\n\t\t\t\tconst newMap = new Map(state.pendingContexts);\n\t\t\t\tconst existing = newMap.get(parentSessionId) || [];\n\t\t\t\tnewMap.set(\n\t\t\t\t\tparentSessionId,\n\t\t\t\t\texisting.filter((c) => c.id !== contextId),\n\t\t\t\t);\n\t\t\t\treturn { pendingContexts: newMap };\n\t\t\t});\n\t\t},\n\n\t\tgetContexts: (parentSessionId) => {\n\t\t\treturn get().pendingContexts.get(parentSessionId) || [];\n\t\t},\n\n\t\tclearContexts: (parentSessionId) => {\n\t\t\tset((state) => {\n\t\t\t\tconst newMap = new Map(state.pendingContexts);\n\t\t\t\tnewMap.delete(parentSessionId);\n\t\t\t\treturn { pendingContexts: newMap };\n\t\t\t});\n\t\t},\n\n\t\tconsumeContexts: (parentSessionId) => {\n\t\t\tconst contexts = get().getContexts(parentSessionId);\n\t\t\tget().clearContexts(parentSessionId);\n\t\t\treturn contexts;\n\t\t},\n\t}),\n);\n",
59
59
  "import { useEffect, useRef } from 'react';\nimport { SSEClient } from '../lib/sse-client';\nimport { apiClient } from '../lib/api-client';\nimport { toast, useToastStore } from '../stores/toastStore';\nimport { useOttoRouterStore } from '../stores/ottorouterStore';\nimport { useTopupApprovalStore } from '../stores/topupApprovalStore';\n\nexport function useOttoRouterPayments(sessionId: string | undefined) {\n\tconst clientRef = useRef<SSEClient | null>(null);\n\tconst loadingToastIdRef = useRef<string | null>(null);\n\tconst setBalance = useOttoRouterStore((s) => s.setBalance);\n\tconst setPaymentPending = useOttoRouterStore((s) => s.setPaymentPending);\n\tconst removeToast = useToastStore((s) => s.removeToast);\n\tconst updateToast = useToastStore((s) => s.updateToast);\n\tconst setPendingTopup = useTopupApprovalStore((s) => s.setPendingTopup);\n\tconst clearPendingTopup = useTopupApprovalStore((s) => s.clearPendingTopup);\n\n\tuseEffect(() => {\n\t\tif (!sessionId) return;\n\n\t\tconst client = new SSEClient();\n\t\tclientRef.current = client;\n\n\t\tconst url = apiClient.getStreamUrl(sessionId);\n\t\tclient.connect(url);\n\n\t\tconst unsubscribe = client.on('*', (event) => {\n\t\t\tconst payload = event.payload as Record<string, unknown> | undefined;\n\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'ottorouter.topup.required': {\n\t\t\t\t\tconst amountUsd =\n\t\t\t\t\t\ttypeof payload?.amountUsd === 'number' ? payload.amountUsd : 0;\n\t\t\t\t\tconst currentBalance =\n\t\t\t\t\t\ttypeof payload?.currentBalance === 'number'\n\t\t\t\t\t\t\t? payload.currentBalance\n\t\t\t\t\t\t\t: 0;\n\t\t\t\t\tconst minTopupUsd =\n\t\t\t\t\t\ttypeof payload?.minTopupUsd === 'number' ? payload.minTopupUsd : 5;\n\t\t\t\t\tconst suggestedTopupUsd =\n\t\t\t\t\t\ttypeof payload?.suggestedTopupUsd === 'number'\n\t\t\t\t\t\t\t? payload.suggestedTopupUsd\n\t\t\t\t\t\t\t: 10;\n\t\t\t\t\tconst messageId =\n\t\t\t\t\t\ttypeof payload?.messageId === 'string' ? payload.messageId : '';\n\n\t\t\t\t\tsetPendingTopup({\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\tamountUsd,\n\t\t\t\t\t\tcurrentBalance,\n\t\t\t\t\t\tminTopupUsd,\n\t\t\t\t\t\tsuggestedTopupUsd,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'ottorouter.topup.method_selected': {\n\t\t\t\t\tconst method = payload?.method;\n\t\t\t\t\tif (method === 'crypto') {\n\t\t\t\t\t\tsetPaymentPending(true);\n\t\t\t\t\t\tloadingToastIdRef.current = toast.loading(\n\t\t\t\t\t\t\t'💳 Processing crypto payment...',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'ottorouter.topup.cancelled': {\n\t\t\t\t\tclearPendingTopup();\n\t\t\t\t\tconst reason =\n\t\t\t\t\t\ttypeof payload?.reason === 'string'\n\t\t\t\t\t\t\t? payload.reason\n\t\t\t\t\t\t\t: 'Request cancelled';\n\t\t\t\t\ttoast(`⚠️ ${reason}`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'ottorouter.payment.required': {\n\t\t\t\t\tconst amountUsd =\n\t\t\t\t\t\ttypeof payload?.amountUsd === 'number' ? payload.amountUsd : 0;\n\t\t\t\t\tsetPaymentPending(true);\n\t\t\t\t\tif (!loadingToastIdRef.current) {\n\t\t\t\t\t\tloadingToastIdRef.current = toast.loading(\n\t\t\t\t\t\t\t`💳 Payment required: $${amountUsd.toFixed(2)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'ottorouter.payment.signing': {\n\t\t\t\t\tif (loadingToastIdRef.current) {\n\t\t\t\t\t\tupdateToast(loadingToastIdRef.current, {\n\t\t\t\t\t\t\tmessage: '✍️ Signing transaction...',\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tloadingToastIdRef.current = toast.loading(\n\t\t\t\t\t\t\t'✍️ Signing transaction...',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'ottorouter.payment.complete': {\n\t\t\t\t\tclearPendingTopup();\n\t\t\t\t\tconst rawAmount = payload?.amountUsd;\n\t\t\t\t\tconst rawBalance = payload?.newBalance;\n\t\t\t\t\tconst transactionId =\n\t\t\t\t\t\ttypeof payload?.transactionId === 'string'\n\t\t\t\t\t\t\t? payload.transactionId\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst amountUsd =\n\t\t\t\t\t\ttypeof rawAmount === 'number'\n\t\t\t\t\t\t\t? rawAmount\n\t\t\t\t\t\t\t: typeof rawAmount === 'string'\n\t\t\t\t\t\t\t\t? parseFloat(rawAmount)\n\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\tconst newBalance =\n\t\t\t\t\t\ttypeof rawBalance === 'number'\n\t\t\t\t\t\t\t? rawBalance\n\t\t\t\t\t\t\t: typeof rawBalance === 'string'\n\t\t\t\t\t\t\t\t? parseFloat(rawBalance)\n\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\tsetBalance(newBalance);\n\t\t\t\t\tsetPaymentPending(false);\n\t\t\t\t\tif (loadingToastIdRef.current) {\n\t\t\t\t\t\tremoveToast(loadingToastIdRef.current);\n\t\t\t\t\t\tloadingToastIdRef.current = null;\n\t\t\t\t\t}\n\t\t\t\t\tconst message = `✅ Paid $${amountUsd.toFixed(2)}`;\n\t\t\t\t\tif (transactionId) {\n\t\t\t\t\t\ttoast.successWithAction(message, {\n\t\t\t\t\t\t\tlabel: 'View Tx',\n\t\t\t\t\t\t\thref: `https://orbmarkets.io/tx/${transactionId}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttoast.success(message);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'ottorouter.fiat.checkout_created': {\n\t\t\t\t\tclearPendingTopup();\n\t\t\t\t\tsetPaymentPending(false);\n\t\t\t\t\tif (loadingToastIdRef.current) {\n\t\t\t\t\t\tremoveToast(loadingToastIdRef.current);\n\t\t\t\t\t\tloadingToastIdRef.current = null;\n\t\t\t\t\t}\n\t\t\t\t\t// Modal is already opened by TopupApprovalCard\n\t\t\t\t\t// Just show a helpful toast\n\t\t\t\t\ttoast.success('💳 Complete payment, then retry your message');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'ottorouter.balance.updated': {\n\t\t\t\t\tconst rawBalance = payload?.balanceRemaining;\n\t\t\t\t\tconst newBalance =\n\t\t\t\t\t\ttypeof rawBalance === 'number'\n\t\t\t\t\t\t\t? rawBalance\n\t\t\t\t\t\t\t: typeof rawBalance === 'string'\n\t\t\t\t\t\t\t\t? parseFloat(rawBalance)\n\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\tif (newBalance !== null && !Number.isNaN(newBalance)) {\n\t\t\t\t\t\tsetBalance(newBalance);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'ottorouter.payment.error': {\n\t\t\t\t\tclearPendingTopup();\n\t\t\t\t\tconst error =\n\t\t\t\t\t\ttypeof payload?.error === 'string'\n\t\t\t\t\t\t\t? payload.error\n\t\t\t\t\t\t\t: 'Payment failed';\n\t\t\t\t\tsetPaymentPending(false);\n\t\t\t\t\tif (loadingToastIdRef.current) {\n\t\t\t\t\t\tremoveToast(loadingToastIdRef.current);\n\t\t\t\t\t\tloadingToastIdRef.current = null;\n\t\t\t\t\t}\n\t\t\t\t\ttoast.error(`❌ ${error}`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tclient.disconnect();\n\t\t};\n\t}, [\n\t\tsessionId,\n\t\tsetBalance,\n\t\tsetPaymentPending,\n\t\tremoveToast,\n\t\tupdateToast,\n\t\tsetPendingTopup,\n\t\tclearPendingTopup,\n\t]);\n}\n",
@@ -64,7 +64,7 @@
64
64
  "import { useQuery } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport type { ShareStatus } from '../types/api';\n\nexport function useShareStatus(sessionId: string | undefined): {\n\tdata: ShareStatus | undefined;\n\tisLoading: boolean;\n\terror: Error | null;\n} {\n\tconst { data, isLoading, error } = useQuery({\n\t\tqueryKey: ['share-status', sessionId],\n\t\tqueryFn: () => apiClient.getShareStatus(sessionId as string),\n\t\tenabled: !!sessionId,\n\t\tstaleTime: 30000,\n\t});\n\n\treturn { data, isLoading, error: error as Error | null };\n}\n",
65
65
  "import { useEffect, useCallback } from 'react';\nimport { useToolApprovalStore } from '../stores/toolApprovalStore';\nimport { apiClient } from '../lib/api-client';\n\n/**\n * Hook for handling keyboard shortcuts for tool approval.\n * Only responds to shortcuts when there are pending approvals for the given session.\n *\n * Shortcuts:\n * - Y: Approve first pending\n * - N or Escape: Reject first pending\n * - A: Approve all pending\n */\nexport function useToolApprovalShortcuts(sessionId: string | undefined) {\n\tconst { pendingApprovals, removePendingApproval } = useToolApprovalStore();\n\n\t// Filter approvals for this session\n\t// Since approvals are tied to messages, and messages to sessions,\n\t// we need to check that the pending approval belongs to this session's messages\n\tconst sessionPendingApprovals = pendingApprovals;\n\n\tconst handleApprove = useCallback(\n\t\tasync (callId: string) => {\n\t\t\tif (!sessionId) return;\n\t\t\ttry {\n\t\t\t\tawait apiClient.approveToolCall(sessionId, callId, true);\n\t\t\t\tremovePendingApproval(callId);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Failed to approve tool call:', error);\n\t\t\t}\n\t\t},\n\t\t[sessionId, removePendingApproval],\n\t);\n\n\tconst handleReject = useCallback(\n\t\tasync (callId: string) => {\n\t\t\tif (!sessionId) return;\n\t\t\ttry {\n\t\t\t\tawait apiClient.approveToolCall(sessionId, callId, false);\n\t\t\t\tremovePendingApproval(callId);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Failed to reject tool call:', error);\n\t\t\t}\n\t\t},\n\t\t[sessionId, removePendingApproval],\n\t);\n\n\tconst handleApproveAll = useCallback(async () => {\n\t\tif (!sessionId) return;\n\t\ttry {\n\t\t\tawait Promise.all(\n\t\t\t\tsessionPendingApprovals.map((a) =>\n\t\t\t\t\tapiClient.approveToolCall(sessionId, a.callId, true),\n\t\t\t\t),\n\t\t\t);\n\t\t\tfor (const a of sessionPendingApprovals) {\n\t\t\t\tremovePendingApproval(a.callId);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to approve all tool calls:', error);\n\t\t}\n\t}, [sessionId, sessionPendingApprovals, removePendingApproval]);\n\n\tuseEffect(() => {\n\t\tif (!sessionId || sessionPendingApprovals.length === 0) return;\n\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\t// Don't trigger if user is typing in an input/textarea\n\t\t\tif (\n\t\t\t\te.target instanceof HTMLInputElement ||\n\t\t\t\te.target instanceof HTMLTextAreaElement ||\n\t\t\t\t(e.target as HTMLElement)?.isContentEditable\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst firstPending = sessionPendingApprovals[0];\n\n\t\t\tif (e.key === 'y' || e.key === 'Y') {\n\t\t\t\te.preventDefault();\n\t\t\t\thandleApprove(firstPending.callId);\n\t\t\t} else if (e.key === 'n' || e.key === 'N' || e.key === 'Escape') {\n\t\t\t\te.preventDefault();\n\t\t\t\thandleReject(firstPending.callId);\n\t\t\t} else if (e.key === 'a' || e.key === 'A') {\n\t\t\t\te.preventDefault();\n\t\t\t\thandleApproveAll();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener('keydown', handleKeyDown);\n\t\treturn () => window.removeEventListener('keydown', handleKeyDown);\n\t}, [\n\t\tsessionId,\n\t\tsessionPendingApprovals,\n\t\thandleApprove,\n\t\thandleReject,\n\t\thandleApproveAll,\n\t]);\n}\n",
66
66
  "import { useEffect, useRef } from 'react';\nimport { useToastStore, toast } from '../stores/toastStore';\nimport { useOttoRouterStore } from '../stores/ottorouterStore';\nimport { apiClient } from '../lib/api-client';\n\nconst STORAGE_KEY = 'pendingPolarCheckout';\n\nexport function useTopupCallback() {\n\tconst hasHandled = useRef(false);\n\tconst loadingToastId = useRef<string | null>(null);\n\tconst setBalance = useOttoRouterStore((s) => s.setBalance);\n\tconst removeToast = useToastStore((s) => s.removeToast);\n\n\tuseEffect(() => {\n\t\tif (hasHandled.current) return;\n\n\t\tconst params = new URLSearchParams(window.location.search);\n\t\tconst topupStatus = params.get('topup');\n\n\t\tconst pendingCheckoutId = localStorage.getItem(STORAGE_KEY);\n\n\t\tif (topupStatus === 'pending' || pendingCheckoutId) {\n\t\t\thasHandled.current = true;\n\n\t\t\tconst url = new URL(window.location.href);\n\t\t\turl.searchParams.delete('topup');\n\t\t\twindow.history.replaceState({}, '', url.toString());\n\n\t\t\tif (!pendingCheckoutId) {\n\t\t\t\ttoast.info('Checking top-up status...');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tloadingToastId.current = toast.loading('Verifying top-up...');\n\n\t\t\tlet attempts = 0;\n\t\t\tconst maxAttempts = 10;\n\t\t\tconst delayMs = 2000;\n\n\t\t\tconst dismissLoading = () => {\n\t\t\t\tif (loadingToastId.current) {\n\t\t\t\t\tremoveToast(loadingToastId.current);\n\t\t\t\t\tloadingToastId.current = null;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst checkStatus = async () => {\n\t\t\t\tattempts++;\n\t\t\t\ttry {\n\t\t\t\t\tconst status = await apiClient.getPolarTopupStatus(pendingCheckoutId);\n\n\t\t\t\t\tif (status?.confirmed) {\n\t\t\t\t\t\tlocalStorage.removeItem(STORAGE_KEY);\n\t\t\t\t\t\tdismissLoading();\n\n\t\t\t\t\t\tconst balanceData = await apiClient.getOttoRouterBalance();\n\t\t\t\t\t\tif (balanceData?.balance !== undefined) {\n\t\t\t\t\t\t\tsetBalance(balanceData.balance);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttoast.success(\n\t\t\t\t\t\t\t`Top-up confirmed! +$${status.amountUsd?.toFixed(2)} credited`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (attempts < maxAttempts) {\n\t\t\t\t\t\tsetTimeout(checkStatus, delayMs);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlocalStorage.removeItem(STORAGE_KEY);\n\t\t\t\t\t\tdismissLoading();\n\t\t\t\t\t\ttoast.info(\n\t\t\t\t\t\t\t'Top-up is still processing. Balance will update automatically.',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\tif (attempts < maxAttempts) {\n\t\t\t\t\t\tsetTimeout(checkStatus, delayMs);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlocalStorage.removeItem(STORAGE_KEY);\n\t\t\t\t\t\tdismissLoading();\n\t\t\t\t\t\ttoast.error('Could not verify top-up. Please check your balance.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tsetTimeout(checkStatus, 1500);\n\t\t}\n\t}, [setBalance, removeToast]);\n}\n",
67
- "import { useEffect, useCallback, useState, useRef } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport { openPlatformUrl } from '../lib/platform';\nimport { useOnboardingStore } from '../stores/onboardingStore';\n\nconst isInIframe = typeof window !== 'undefined' && window.self !== window.top;\n\nexport function useAuthStatus() {\n\tconst setAuthStatus = useOnboardingStore((s) => s.setAuthStatus);\n\tconst setOpen = useOnboardingStore((s) => s.setOpen);\n\tconst setLoading = useOnboardingStore((s) => s.setLoading);\n\tconst setError = useOnboardingStore((s) => s.setError);\n\tconst authStatus = useOnboardingStore((s) => s.authStatus);\n\tconst isOpen = useOnboardingStore((s) => s.isOpen);\n\tconst queryClient = useQueryClient();\n\n\tconst [initialized, setInitialized] = useState(false);\n\tconst [oauthPolling, setOauthPolling] = useState(false);\n\tconst oauthPollingRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\tconst preOauthProvidersRef = useRef<Set<string>>(new Set());\n\n\tconst fetchAuthStatus = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst status = await apiClient.getAuthStatus();\n\t\t\tsetAuthStatus(status);\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['config'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['models'] });\n\t\t\treturn status;\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : 'Failed to load';\n\t\t\tsetError(message);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [setAuthStatus, setLoading, setError, queryClient]);\n\n\tconst checkOnboarding = useCallback(async () => {\n\t\tconst status = await fetchAuthStatus();\n\t\tif (status) {\n\t\t\tconst hasAnyProvider = Object.values(status.providers).some(\n\t\t\t\t(p) => p.configured,\n\t\t\t);\n\t\t\tconst needsOnboarding =\n\t\t\t\t!status.onboardingComplete ||\n\t\t\t\t!hasAnyProvider ||\n\t\t\t\t!status.ottorouter.configured;\n\t\t\tif (needsOnboarding) {\n\t\t\t\tsetOpen(true);\n\t\t\t}\n\t\t}\n\t\tsetInitialized(true);\n\t}, [fetchAuthStatus, setOpen]);\n\n\tconst setupWallet = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst result = await apiClient.setupOttoRouterWallet();\n\t\t\tawait fetchAuthStatus();\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : 'Setup failed';\n\t\t\tsetError(message);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [fetchAuthStatus, setLoading, setError]);\n\n\tconst importWallet = useCallback(\n\t\tasync (privateKey: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst result = await apiClient.importOttoRouterWallet(privateKey);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message = err instanceof Error ? err.message : 'Import failed';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst addProvider = useCallback(\n\t\tasync (provider: string, apiKey: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst result = await apiClient.addProvider(provider, apiKey);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to add provider';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst addCustomProvider = useCallback(\n\t\tasync (data: {\n\t\t\tid: string;\n\t\t\tlabel: string;\n\t\t\tbaseURL: string;\n\t\t\tapiKey?: string;\n\t\t\tcompatibility:\n\t\t\t\t| 'openai-compatible'\n\t\t\t\t| 'openai'\n\t\t\t\t| 'anthropic'\n\t\t\t\t| 'google'\n\t\t\t\t| 'openrouter'\n\t\t\t\t| 'ollama';\n\t\t\tmodels: string[];\n\t\t\tallowAnyModel: boolean;\n\t\t}) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst result = await apiClient.updateProviderSettings(data.id, {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tcustom: true,\n\t\t\t\t\tlabel: data.label,\n\t\t\t\t\tbaseURL: data.baseURL,\n\t\t\t\t\t...(data.apiKey ? { apiKey: data.apiKey } : {}),\n\t\t\t\t\tcompatibility: data.compatibility,\n\t\t\t\t\tmodels: data.models,\n\t\t\t\t\tallowAnyModel: data.allowAnyModel,\n\t\t\t\t});\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to add custom provider';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst removeProvider = useCallback(\n\t\tasync (provider: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst isCustomProvider =\n\t\t\t\t\tuseOnboardingStore.getState().authStatus?.providers[provider]?.custom;\n\t\t\t\tconst result = isCustomProvider\n\t\t\t\t\t? await apiClient.deleteProviderSettings(provider)\n\t\t\t\t\t: await apiClient.removeProvider(provider);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to remove provider';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst completeOnboarding = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tawait apiClient.completeOnboarding();\n\t\t\tawait fetchAuthStatus();\n\t\t\tsetOpen(false);\n\t\t} catch (err) {\n\t\t\tconst message =\n\t\t\t\terr instanceof Error ? err.message : 'Failed to complete onboarding';\n\t\t\tsetError(message);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [fetchAuthStatus, setLoading, setError, setOpen]);\n\n\tconst snapshotConfiguredProviders = useCallback(() => {\n\t\tconst status = useOnboardingStore.getState().authStatus;\n\t\tif (status) {\n\t\t\tpreOauthProvidersRef.current = new Set(\n\t\t\t\tObject.entries(status.providers)\n\t\t\t\t\t.filter(([, p]) => p.configured)\n\t\t\t\t\t.map(([id]) => id),\n\t\t\t);\n\t\t}\n\t}, []);\n\n\tconst startOAuth = useCallback(\n\t\t(provider: string, mode?: string) => {\n\t\t\tconst url = apiClient.getOAuthStartUrl(provider, mode);\n\t\t\tif (openPlatformUrl(url)) {\n\t\t\t\tsnapshotConfiguredProviders();\n\t\t\t\tsetOauthPolling(true);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (isInIframe) {\n\t\t\t\tsnapshotConfiguredProviders();\n\t\t\t\twindow.parent.postMessage({ type: 'otto-open-url', url }, '*');\n\t\t\t\tsetOauthPolling(true);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst width = 600;\n\t\t\tconst height = 700;\n\t\t\tconst left = window.screenX + (window.outerWidth - width) / 2;\n\t\t\tconst top = window.screenY + (window.outerHeight - height) / 2;\n\t\t\tconst popup = window.open(\n\t\t\t\turl,\n\t\t\t\t'oauth_popup',\n\t\t\t\t`width=${width},height=${height},left=${left},top=${top},toolbar=no,menubar=no`,\n\t\t\t);\n\t\t\treturn popup;\n\t\t},\n\t\t[snapshotConfiguredProviders],\n\t);\n\n\tconst startOAuthManual = useCallback(\n\t\tasync (provider: string, mode?: string) => {\n\t\t\tconst { url, sessionId } = await apiClient.getOAuthUrl(provider, mode);\n\n\t\t\tif (openPlatformUrl(url)) {\n\t\t\t\tsnapshotConfiguredProviders();\n\t\t\t\tsetOauthPolling(true);\n\t\t\t\treturn { popup: null, sessionId };\n\t\t\t}\n\n\t\t\tif (isInIframe) {\n\t\t\t\tsnapshotConfiguredProviders();\n\t\t\t\twindow.parent.postMessage({ type: 'otto-open-url', url }, '*');\n\t\t\t\tsetOauthPolling(true);\n\t\t\t\treturn { popup: null, sessionId };\n\t\t\t}\n\n\t\t\tconst width = 600;\n\t\t\tconst height = 700;\n\t\t\tconst left = window.screenX + (window.outerWidth - width) / 2;\n\t\t\tconst top = window.screenY + (window.outerHeight - height) / 2;\n\t\t\tconst popup = window.open(\n\t\t\t\turl,\n\t\t\t\t'oauth_popup',\n\t\t\t\t`width=${width},height=${height},left=${left},top=${top},toolbar=no,menubar=no`,\n\t\t\t);\n\t\t\treturn { popup, sessionId };\n\t\t},\n\t\t[snapshotConfiguredProviders],\n\t);\n\n\tconst exchangeOAuthCode = useCallback(\n\t\tasync (provider: string, code: string, sessionId: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tawait apiClient.exchangeOAuthCode(provider, code, sessionId);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn true;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to exchange code';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!oauthPolling || !isInIframe) return;\n\t\toauthPollingRef.current = setInterval(() => {\n\t\t\tfetchAuthStatus();\n\t\t}, 3000);\n\t\tconst timeout = setTimeout(() => {\n\t\t\tsetOauthPolling(false);\n\t\t}, 300000);\n\t\treturn () => {\n\t\t\tclearInterval(oauthPollingRef.current);\n\t\t\tclearTimeout(timeout);\n\t\t};\n\t}, [oauthPolling, fetchAuthStatus]);\n\n\tuseEffect(() => {\n\t\tif (!oauthPolling || !authStatus) return;\n\t\tconst currentConfigured = Object.entries(authStatus.providers).filter(\n\t\t\t([, p]) => p.configured,\n\t\t);\n\t\tconst hasNewProvider = currentConfigured.some(\n\t\t\t([id]) => !preOauthProvidersRef.current.has(id),\n\t\t);\n\t\tif (hasNewProvider) {\n\t\t\tsetOauthPolling(false);\n\t\t}\n\t}, [authStatus, oauthPolling]);\n\n\tuseEffect(() => {\n\t\tconst handleOAuthMessage = (event: MessageEvent) => {\n\t\t\tif (event.data?.type === 'oauth-success') {\n\t\t\t\tfetchAuthStatus();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener('message', handleOAuthMessage);\n\t\treturn () => window.removeEventListener('message', handleOAuthMessage);\n\t}, [fetchAuthStatus]);\n\n\tconst pollCopilotDeviceFlow = useCallback(\n\t\tasync (sessionId: string) => {\n\t\t\tconst result = await apiClient.pollCopilotDeviceFlow(sessionId);\n\t\t\tif (result.status === 'complete') {\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t[fetchAuthStatus],\n\t);\n\n\tconst pollOpenAIDeviceFlow = useCallback(\n\t\tasync (sessionId: string) => {\n\t\t\tconst result = await apiClient.pollOpenAIDeviceFlow(sessionId);\n\t\t\tif (result.status === 'complete') {\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t[fetchAuthStatus],\n\t);\n\n\tconst saveCopilotToken = useCallback(\n\t\tasync (token: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst result = await apiClient.saveCopilotToken(token);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to save Copilot token';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst importCopilotTokenFromGh = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst result = await apiClient.importCopilotTokenFromGh();\n\t\t\tawait fetchAuthStatus();\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst message =\n\t\t\t\terr instanceof Error\n\t\t\t\t\t? err.message\n\t\t\t\t\t: 'Failed to import Copilot token from GH';\n\t\t\tsetError(message);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [fetchAuthStatus, setLoading, setError]);\n\n\treturn {\n\t\tauthStatus,\n\t\tisOpen,\n\t\tinitialized,\n\t\tfetchAuthStatus,\n\t\tcheckOnboarding,\n\t\tsetupWallet,\n\t\timportWallet,\n\t\taddProvider,\n\t\taddCustomProvider,\n\t\tremoveProvider,\n\t\tcompleteOnboarding,\n\t\tstartOAuth,\n\t\tstartOAuthManual,\n\t\texchangeOAuthCode,\n\t\tstartOpenAIDeviceFlow: apiClient.startOpenAIDeviceFlow.bind(apiClient),\n\t\tpollOpenAIDeviceFlow,\n\t\tstartCopilotDeviceFlow: apiClient.startCopilotDeviceFlow.bind(apiClient),\n\t\tpollCopilotDeviceFlow,\n\t\tgetCopilotAuthMethods: apiClient.getCopilotAuthMethods.bind(apiClient),\n\t\tsaveCopilotToken,\n\t\timportCopilotTokenFromGh,\n\t\tgetCopilotDiagnostics: apiClient.getCopilotDiagnostics.bind(apiClient),\n\t};\n}\n",
67
+ "import { useEffect, useCallback, useState, useRef } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport { openPlatformUrl } from '../lib/platform';\nimport { useOnboardingStore } from '../stores/onboardingStore';\n\nconst isInIframe = typeof window !== 'undefined' && window.self !== window.top;\n\nexport function useAuthStatus() {\n\tconst setAuthStatus = useOnboardingStore((s) => s.setAuthStatus);\n\tconst setOpen = useOnboardingStore((s) => s.setOpen);\n\tconst setLoading = useOnboardingStore((s) => s.setLoading);\n\tconst setError = useOnboardingStore((s) => s.setError);\n\tconst authStatus = useOnboardingStore((s) => s.authStatus);\n\tconst isOpen = useOnboardingStore((s) => s.isOpen);\n\tconst queryClient = useQueryClient();\n\n\tconst [initialized, setInitialized] = useState(false);\n\tconst [oauthPolling, setOauthPolling] = useState(false);\n\tconst oauthPollingRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\tconst preOauthProvidersRef = useRef<Set<string>>(new Set());\n\n\tconst fetchAuthStatus = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst status = await apiClient.getAuthStatus();\n\t\t\tsetAuthStatus(status);\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['config'] });\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['models'] });\n\t\t\treturn status;\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : 'Failed to load';\n\t\t\tsetError(message);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [setAuthStatus, setLoading, setError, queryClient]);\n\n\tconst checkOnboarding = useCallback(async () => {\n\t\tconst status = await fetchAuthStatus();\n\t\tif (status) {\n\t\t\tconst hasAnyProvider = Object.values(status.providers).some(\n\t\t\t\t(p) => p.configured,\n\t\t\t);\n\t\t\tconst needsOnboarding =\n\t\t\t\t!status.onboardingComplete ||\n\t\t\t\t!hasAnyProvider ||\n\t\t\t\t!status.ottorouter.configured;\n\t\t\tif (needsOnboarding) {\n\t\t\t\tsetOpen(true);\n\t\t\t}\n\t\t}\n\t\tsetInitialized(true);\n\t}, [fetchAuthStatus, setOpen]);\n\n\tconst setupWallet = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst result = await apiClient.setupOttoRouterWallet();\n\t\t\tawait fetchAuthStatus();\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : 'Setup failed';\n\t\t\tsetError(message);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [fetchAuthStatus, setLoading, setError]);\n\n\tconst importWallet = useCallback(\n\t\tasync (privateKey: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst result = await apiClient.importOttoRouterWallet(privateKey);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message = err instanceof Error ? err.message : 'Import failed';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst addProvider = useCallback(\n\t\tasync (provider: string, apiKey: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst result = await apiClient.addProvider(provider, apiKey);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to add provider';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst addCustomProvider = useCallback(\n\t\tasync (data: {\n\t\t\tid: string;\n\t\t\tlabel: string;\n\t\t\tbaseURL: string;\n\t\t\tapiKey?: string;\n\t\t\tcompatibility:\n\t\t\t\t| 'openai-compatible'\n\t\t\t\t| 'openai'\n\t\t\t\t| 'anthropic'\n\t\t\t\t| 'google'\n\t\t\t\t| 'openrouter'\n\t\t\t\t| 'ollama';\n\t\t\tmodels: string[];\n\t\t\tallowAnyModel: boolean;\n\t\t}) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst result = await apiClient.updateProviderSettings(data.id, {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tcustom: true,\n\t\t\t\t\tlabel: data.label,\n\t\t\t\t\tbaseURL: data.baseURL,\n\t\t\t\t\t...(data.apiKey ? { apiKey: data.apiKey } : {}),\n\t\t\t\t\tcompatibility: data.compatibility,\n\t\t\t\t\tmodels: data.models,\n\t\t\t\t\tallowAnyModel: data.allowAnyModel,\n\t\t\t\t});\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to add custom provider';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst removeProvider = useCallback(\n\t\tasync (provider: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst isCustomProvider =\n\t\t\t\t\tuseOnboardingStore.getState().authStatus?.providers[provider]?.custom;\n\t\t\t\tconst result = isCustomProvider\n\t\t\t\t\t? await apiClient.deleteProviderSettings(provider)\n\t\t\t\t\t: await apiClient.removeProvider(provider);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to remove provider';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst completeOnboarding = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tawait apiClient.completeOnboarding();\n\t\t\tawait fetchAuthStatus();\n\t\t\tsetOpen(false);\n\t\t} catch (err) {\n\t\t\tconst message =\n\t\t\t\terr instanceof Error ? err.message : 'Failed to complete onboarding';\n\t\t\tsetError(message);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [fetchAuthStatus, setLoading, setError, setOpen]);\n\n\tconst snapshotConfiguredProviders = useCallback(() => {\n\t\tconst status = useOnboardingStore.getState().authStatus;\n\t\tif (status) {\n\t\t\tpreOauthProvidersRef.current = new Set(\n\t\t\t\tObject.entries(status.providers)\n\t\t\t\t\t.filter(([, p]) => p.configured)\n\t\t\t\t\t.map(([id]) => id),\n\t\t\t);\n\t\t}\n\t}, []);\n\n\tconst startOAuth = useCallback(\n\t\t(provider: string, mode?: string) => {\n\t\t\tconst url = apiClient.getOAuthStartUrl(provider, mode);\n\t\t\tif (openPlatformUrl(url)) {\n\t\t\t\tsnapshotConfiguredProviders();\n\t\t\t\tsetOauthPolling(true);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (isInIframe) {\n\t\t\t\tsnapshotConfiguredProviders();\n\t\t\t\twindow.parent.postMessage({ type: 'otto-open-url', url }, '*');\n\t\t\t\tsetOauthPolling(true);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst width = 600;\n\t\t\tconst height = 700;\n\t\t\tconst left = window.screenX + (window.outerWidth - width) / 2;\n\t\t\tconst top = window.screenY + (window.outerHeight - height) / 2;\n\t\t\tconst popup = window.open(\n\t\t\t\turl,\n\t\t\t\t'oauth_popup',\n\t\t\t\t`width=${width},height=${height},left=${left},top=${top},toolbar=no,menubar=no`,\n\t\t\t);\n\t\t\treturn popup;\n\t\t},\n\t\t[snapshotConfiguredProviders],\n\t);\n\n\tconst startOAuthManual = useCallback(\n\t\tasync (provider: string, mode?: string) => {\n\t\t\tconst { url, sessionId } = await apiClient.getOAuthUrl(provider, mode);\n\n\t\t\tif (openPlatformUrl(url)) {\n\t\t\t\tsnapshotConfiguredProviders();\n\t\t\t\tsetOauthPolling(true);\n\t\t\t\treturn { popup: null, sessionId };\n\t\t\t}\n\n\t\t\tif (isInIframe) {\n\t\t\t\tsnapshotConfiguredProviders();\n\t\t\t\twindow.parent.postMessage({ type: 'otto-open-url', url }, '*');\n\t\t\t\tsetOauthPolling(true);\n\t\t\t\treturn { popup: null, sessionId };\n\t\t\t}\n\n\t\t\tconst width = 600;\n\t\t\tconst height = 700;\n\t\t\tconst left = window.screenX + (window.outerWidth - width) / 2;\n\t\t\tconst top = window.screenY + (window.outerHeight - height) / 2;\n\t\t\tconst popup = window.open(\n\t\t\t\turl,\n\t\t\t\t'oauth_popup',\n\t\t\t\t`width=${width},height=${height},left=${left},top=${top},toolbar=no,menubar=no`,\n\t\t\t);\n\t\t\treturn { popup, sessionId };\n\t\t},\n\t\t[snapshotConfiguredProviders],\n\t);\n\n\tconst exchangeOAuthCode = useCallback(\n\t\tasync (provider: string, code: string, sessionId: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tawait apiClient.exchangeOAuthCode(provider, code, sessionId);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn true;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to exchange code';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!oauthPolling || !isInIframe) return;\n\t\toauthPollingRef.current = setInterval(() => {\n\t\t\tfetchAuthStatus();\n\t\t}, 3000);\n\t\tconst timeout = setTimeout(() => {\n\t\t\tsetOauthPolling(false);\n\t\t}, 300000);\n\t\treturn () => {\n\t\t\tclearInterval(oauthPollingRef.current);\n\t\t\tclearTimeout(timeout);\n\t\t};\n\t}, [oauthPolling, fetchAuthStatus]);\n\n\tuseEffect(() => {\n\t\tif (!oauthPolling || !authStatus) return;\n\t\tconst currentConfigured = Object.entries(authStatus.providers).filter(\n\t\t\t([, p]) => p.configured,\n\t\t);\n\t\tconst hasNewProvider = currentConfigured.some(\n\t\t\t([id]) => !preOauthProvidersRef.current.has(id),\n\t\t);\n\t\tif (hasNewProvider) {\n\t\t\tsetOauthPolling(false);\n\t\t}\n\t}, [authStatus, oauthPolling]);\n\n\tuseEffect(() => {\n\t\tconst handleOAuthMessage = (event: MessageEvent) => {\n\t\t\tif (event.data?.type === 'oauth-success') {\n\t\t\t\tfetchAuthStatus();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener('message', handleOAuthMessage);\n\t\treturn () => window.removeEventListener('message', handleOAuthMessage);\n\t}, [fetchAuthStatus]);\n\n\tconst pollCopilotDeviceFlow = useCallback(\n\t\tasync (sessionId: string) => {\n\t\t\tconst result = await apiClient.pollCopilotDeviceFlow(sessionId);\n\t\t\tif (result.status === 'complete') {\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t[fetchAuthStatus],\n\t);\n\n\tconst pollOpenAIDeviceFlow = useCallback(\n\t\tasync (sessionId: string) => {\n\t\t\tconst result = await apiClient.pollOpenAIDeviceFlow(sessionId);\n\t\t\tif (result.status === 'complete') {\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t[fetchAuthStatus],\n\t);\n\n\tconst pollKimiDeviceFlow = useCallback(\n\t\tasync (sessionId: string) => {\n\t\t\tconst result = await apiClient.pollKimiDeviceFlow(sessionId);\n\t\t\tif (result.status === 'complete') {\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t[fetchAuthStatus],\n\t);\n\n\tconst saveCopilotToken = useCallback(\n\t\tasync (token: string) => {\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst result = await apiClient.saveCopilotToken(token);\n\t\t\t\tawait fetchAuthStatus();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst message =\n\t\t\t\t\terr instanceof Error ? err.message : 'Failed to save Copilot token';\n\t\t\t\tsetError(message);\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[fetchAuthStatus, setLoading, setError],\n\t);\n\n\tconst importCopilotTokenFromGh = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst result = await apiClient.importCopilotTokenFromGh();\n\t\t\tawait fetchAuthStatus();\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst message =\n\t\t\t\terr instanceof Error\n\t\t\t\t\t? err.message\n\t\t\t\t\t: 'Failed to import Copilot token from GH';\n\t\t\tsetError(message);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [fetchAuthStatus, setLoading, setError]);\n\n\treturn {\n\t\tauthStatus,\n\t\tisOpen,\n\t\tinitialized,\n\t\tfetchAuthStatus,\n\t\tcheckOnboarding,\n\t\tsetupWallet,\n\t\timportWallet,\n\t\taddProvider,\n\t\taddCustomProvider,\n\t\tremoveProvider,\n\t\tcompleteOnboarding,\n\t\tstartOAuth,\n\t\tstartOAuthManual,\n\t\texchangeOAuthCode,\n\t\tstartOpenAIDeviceFlow: apiClient.startOpenAIDeviceFlow.bind(apiClient),\n\t\tpollOpenAIDeviceFlow,\n\t\tstartCopilotDeviceFlow: apiClient.startCopilotDeviceFlow.bind(apiClient),\n\t\tpollCopilotDeviceFlow,\n\t\tstartKimiDeviceFlow: apiClient.startKimiDeviceFlow.bind(apiClient),\n\t\tpollKimiDeviceFlow,\n\t\tgetCopilotAuthMethods: apiClient.getCopilotAuthMethods.bind(apiClient),\n\t\tsaveCopilotToken,\n\t\timportCopilotTokenFromGh,\n\t\tgetCopilotDiagnostics: apiClient.getCopilotDiagnostics.bind(apiClient),\n\t};\n}\n",
68
68
  "import { create } from 'zustand';\n\nexport type OnboardingStep = 'wallet' | 'defaults';\n\nexport interface ProviderInfo {\n\tconfigured: boolean;\n\ttype?: 'api' | 'oauth' | 'wallet';\n\tlabel: string;\n\tsupportsOAuth: boolean;\n\tsupportsToken?: boolean;\n\tsupportsGhImport?: boolean;\n\tcustom?: boolean;\n\tmodelCount: number;\n\tcostRange?: { min: number; max: number };\n}\n\nexport interface AuthStatus {\n\tonboardingComplete: boolean;\n\tottorouter: { configured: boolean; publicKey?: string };\n\tproviders: Record<string, ProviderInfo>;\n\tdefaults: {\n\t\tagent: string;\n\t\tprovider: string;\n\t\tmodel: string;\n\t\ttoolApproval?: 'auto' | 'dangerous' | 'all' | 'yolo';\n\t};\n}\n\ninterface OnboardingState {\n\tisOpen: boolean;\n\tcurrentStep: OnboardingStep;\n\tmanageMode: boolean;\n\tisLoading: boolean;\n\terror: string | null;\n\tauthStatus: AuthStatus | null;\n\tsetOpen: (open: boolean) => void;\n\tsetStep: (step: OnboardingStep) => void;\n\tsetManageMode: (manageMode: boolean) => void;\n\tsetLoading: (loading: boolean) => void;\n\tsetError: (error: string | null) => void;\n\tsetAuthStatus: (status: AuthStatus | null) => void;\n\tnextStep: () => void;\n\tprevStep: () => void;\n\treset: () => void;\n}\n\nconst STEPS: OnboardingStep[] = ['wallet', 'defaults'];\n\nexport const useOnboardingStore = create<OnboardingState>((set, get) => ({\n\tisOpen: false,\n\tcurrentStep: 'wallet',\n\tmanageMode: false,\n\tisLoading: false,\n\terror: null,\n\tauthStatus: null,\n\tsetOpen: (isOpen) => set({ isOpen }),\n\tsetStep: (currentStep) => set({ currentStep }),\n\tsetManageMode: (manageMode) => set({ manageMode }),\n\tsetLoading: (isLoading) => set({ isLoading }),\n\tsetError: (error) => set({ error }),\n\tsetAuthStatus: (authStatus) => set({ authStatus }),\n\tnextStep: () => {\n\t\tconst { currentStep } = get();\n\t\tconst currentIndex = STEPS.indexOf(currentStep);\n\t\tif (currentIndex < STEPS.length - 1) {\n\t\t\tset({ currentStep: STEPS[currentIndex + 1] });\n\t\t}\n\t},\n\tprevStep: () => {\n\t\tconst { currentStep } = get();\n\t\tconst currentIndex = STEPS.indexOf(currentStep);\n\t\tif (currentIndex > 0) {\n\t\t\tset({ currentStep: STEPS[currentIndex - 1] });\n\t\t}\n\t},\n\treset: () =>\n\t\tset({\n\t\t\tisOpen: false,\n\t\t\tcurrentStep: 'wallet',\n\t\t\tmanageMode: false,\n\t\t\tisLoading: false,\n\t\t\terror: null,\n\t\t}),\n}));\n",
69
69
  "import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useCallback, useRef } from 'react';\nimport {\n\tclient,\n\tgetTunnelQr,\n\tgetTunnelStatus,\n\tstartTunnel as apiStartTunnel,\n\tstopTunnel as apiStopTunnel,\n} from '@ottocode/api';\nimport { useTunnelStore } from '../stores/tunnelStore';\nimport { API_BASE_URL } from '../lib/config';\n\ninterface TunnelStatusResponse {\n\tstatus: 'idle' | 'starting' | 'connected' | 'error';\n\turl: string | null;\n\terror: string | null;\n\tbinaryInstalled: boolean;\n\tisRunning: boolean;\n}\n\ninterface TunnelStartResponse {\n\tok: boolean;\n\turl?: string;\n\tmessage?: string;\n\terror?: string;\n}\n\ninterface TunnelQrResponse {\n\tok: boolean;\n\turl?: string;\n\tqrCode?: string;\n\terror?: string;\n}\n\nfunction normalizeTunnelStatus(data: {\n\tstatus: TunnelStatusResponse['status'];\n\turl: string | null;\n\tisRunning?: boolean;\n}): TunnelStatusResponse['status'] {\n\tif (data.isRunning && data.url) return 'connected';\n\tif (data.isRunning && data.status === 'idle') return 'starting';\n\tif (data.status === 'connected' && !data.url) return 'starting';\n\treturn data.status;\n}\n\nasync function fetchTunnelStatus(): Promise<TunnelStatusResponse> {\n\tconst response = await getTunnelStatus();\n\tif (response.error) throw new Error(JSON.stringify(response.error));\n\treturn response.data as TunnelStatusResponse;\n}\n\nasync function startTunnel(): Promise<TunnelStartResponse> {\n\t// Server uses its own port automatically - no need to pass it\n\tconst response = await apiStartTunnel({\n\t\tbody: {},\n\t});\n\tif (response.error) throw new Error(JSON.stringify(response.error));\n\treturn response.data as TunnelStartResponse;\n}\n\nasync function stopTunnel(): Promise<{\n\tok: boolean;\n\tmessage?: string;\n\terror?: string;\n}> {\n\tconst response = await apiStopTunnel();\n\tif (response.error) throw new Error(JSON.stringify(response.error));\n\treturn response.data as { ok: boolean; message?: string; error?: string };\n}\n\nasync function fetchTunnelQr(): Promise<TunnelQrResponse> {\n\tconst response = await getTunnelQr();\n\tif (response.error) throw new Error(JSON.stringify(response.error));\n\treturn response.data as TunnelQrResponse;\n}\n\nexport function useTunnelStatus() {\n\tconst setStatus = useTunnelStore((s) => s.setStatus);\n\tconst setUrl = useTunnelStore((s) => s.setUrl);\n\tconst setError = useTunnelStore((s) => s.setError);\n\n\tconst query = useQuery<TunnelStatusResponse>({\n\t\tqueryKey: ['tunnel', 'status'],\n\t\tqueryFn: fetchTunnelStatus,\n\t\trefetchInterval: 3000,\n\t\trefetchOnMount: 'always',\n\t});\n\n\tuseEffect(() => {\n\t\tif (query.data) {\n\t\t\tsetStatus(normalizeTunnelStatus(query.data));\n\t\t\tsetUrl(query.data.url);\n\t\t\tsetError(query.data.error);\n\t\t}\n\t}, [query.data, setStatus, setUrl, setError]);\n\n\treturn query;\n}\n\nexport function useStartTunnel() {\n\tconst queryClient = useQueryClient();\n\tconst setStatus = useTunnelStore((s) => s.setStatus);\n\tconst setUrl = useTunnelStore((s) => s.setUrl);\n\tconst setError = useTunnelStore((s) => s.setError);\n\tconst setProgress = useTunnelStore((s) => s.setProgress);\n\n\treturn useMutation<TunnelStartResponse, Error, void>({\n\t\tmutationFn: () => startTunnel(),\n\t\tonMutate: () => {\n\t\t\tsetStatus('starting');\n\t\t\tsetProgress('Connecting...');\n\t\t\tsetError(null);\n\t\t},\n\t\tonSuccess: (data) => {\n\t\t\tif (data.ok) {\n\t\t\t\tif (data.url) {\n\t\t\t\t\tsetStatus('connected');\n\t\t\t\t\tsetUrl(data.url);\n\t\t\t\t}\n\t\t\t\tsetProgress(null);\n\t\t\t} else {\n\t\t\t\tsetStatus('error');\n\t\t\t\tsetError(data.error || 'Failed to start tunnel');\n\t\t\t\tsetProgress(null);\n\t\t\t}\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['tunnel'] });\n\t\t},\n\t\tonError: (error) => {\n\t\t\tsetStatus('error');\n\t\t\tsetError(error.message);\n\t\t\tsetProgress(null);\n\t\t},\n\t});\n}\n\nexport function useStopTunnel() {\n\tconst queryClient = useQueryClient();\n\tconst reset = useTunnelStore((s) => s.reset);\n\n\treturn useMutation({\n\t\tmutationFn: stopTunnel,\n\t\tonSuccess: () => {\n\t\t\treset();\n\t\t\tqueryClient.invalidateQueries({ queryKey: ['tunnel'] });\n\t\t},\n\t});\n}\n\nexport function useTunnelQr() {\n\tconst url = useTunnelStore((s) => s.url);\n\tconst setQrCode = useTunnelStore((s) => s.setQrCode);\n\n\tconst query = useQuery<TunnelQrResponse>({\n\t\tqueryKey: ['tunnel', 'qr', url],\n\t\tqueryFn: fetchTunnelQr,\n\t\tenabled: !!url,\n\t});\n\n\tuseEffect(() => {\n\t\tif (query.data?.ok && query.data.qrCode) {\n\t\t\tsetQrCode(query.data.qrCode);\n\t\t}\n\t}, [query.data, setQrCode]);\n\n\treturn query;\n}\n\nexport function useTunnelStream() {\n\tconst setStatus = useTunnelStore((s) => s.setStatus);\n\tconst setUrl = useTunnelStore((s) => s.setUrl);\n\tconst setError = useTunnelStore((s) => s.setError);\n\tconst setProgress = useTunnelStore((s) => s.setProgress);\n\tconst isExpanded = useTunnelStore((s) => s.isExpanded);\n\tconst eventSourceRef = useRef<EventSource | null>(null);\n\n\tconst connect = useCallback(() => {\n\t\tif (eventSourceRef.current) {\n\t\t\teventSourceRef.current.close();\n\t\t}\n\n\t\tconst es = new EventSource(\n\t\t\tclient.buildUrl({ baseURL: API_BASE_URL, url: '/v1/tunnel/stream' }),\n\t\t);\n\t\teventSourceRef.current = es;\n\n\t\tes.onmessage = (event) => {\n\t\t\ttry {\n\t\t\t\tconst data = JSON.parse(event.data);\n\t\t\t\tif (data.type === 'status') {\n\t\t\t\t\tsetStatus(normalizeTunnelStatus(data));\n\t\t\t\t\tsetUrl(data.url);\n\t\t\t\t\tsetError(data.error);\n\t\t\t\t\tsetProgress(data.progress);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// ignore parse errors\n\t\t\t}\n\t\t};\n\n\t\tes.onerror = () => {\n\t\t\tes.close();\n\t\t\teventSourceRef.current = null;\n\t\t};\n\n\t\treturn () => {\n\t\t\tes.close();\n\t\t\teventSourceRef.current = null;\n\t\t};\n\t}, [setStatus, setUrl, setError, setProgress]);\n\n\tuseEffect(() => {\n\t\tif (isExpanded) {\n\t\t\tconst cleanup = connect();\n\t\t\treturn cleanup;\n\t\t}\n\t\treturn () => {\n\t\t\tif (eventSourceRef.current) {\n\t\t\t\teventSourceRef.current.close();\n\t\t\t\teventSourceRef.current = null;\n\t\t\t}\n\t\t};\n\t}, [isExpanded, connect]);\n\n\treturn { connect };\n}\n",
70
70
  "import { useEffect, useCallback, useRef } from 'react';\nimport { apiClient } from '../lib/api-client';\nimport { useUsageStore } from '../stores/usageStore';\n\nconst POLL_INTERVAL = 60_000;\nconst STALE_THRESHOLD = 60_000;\n\nconst inflight = new Set<string>();\n\nexport function useProviderUsage(\n\tprovider: string | undefined,\n\tauthType: string | undefined,\n) {\n\tconst setUsage = useUsageStore((s) => s.setUsage);\n\tconst setLoading = useUsageStore((s) => s.setLoading);\n\tconst setLastFetched = useUsageStore((s) => s.setLastFetched);\n\tconst isModalOpen = useUsageStore((s) => s.isModalOpen);\n\tconst modalProvider = useUsageStore((s) => s.modalProvider);\n\tconst usage = useUsageStore((s) =>\n\t\tprovider ? s.usage[provider] : undefined,\n\t);\n\n\tconst isOAuthProvider =\n\t\tauthType === 'oauth' &&\n\t\t(provider === 'anthropic' || provider === 'openai' || provider === 'xai');\n\n\tconst fetchUsage = useCallback(\n\t\tasync (force = false) => {\n\t\t\tif (!provider || !isOAuthProvider) return;\n\t\t\tif (inflight.has(provider)) return;\n\n\t\t\tconst last = useUsageStore.getState().lastFetched[provider] ?? 0;\n\t\t\tif (!force && last && Date.now() - last < STALE_THRESHOLD) return;\n\n\t\t\tinflight.add(provider);\n\t\t\tsetLoading(provider, true);\n\t\t\ttry {\n\t\t\t\tconst data = await apiClient.getProviderUsage(provider);\n\t\t\t\tsetUsage(provider, data);\n\t\t\t\tsetLastFetched(provider, Date.now());\n\t\t\t} catch {\n\t\t\t} finally {\n\t\t\t\tsetLoading(provider, false);\n\t\t\t\tinflight.delete(provider);\n\t\t\t}\n\t\t},\n\t\t[provider, isOAuthProvider, setUsage, setLoading, setLastFetched],\n\t);\n\n\tconst fetchRef = useRef(fetchUsage);\n\tfetchRef.current = fetchUsage;\n\n\tuseEffect(() => {\n\t\tif (!provider || !isOAuthProvider) return;\n\n\t\tfetchRef.current();\n\t}, [isOAuthProvider, provider]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\t!provider ||\n\t\t\t!isOAuthProvider ||\n\t\t\t!isModalOpen ||\n\t\t\tmodalProvider !== provider\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tfetchRef.current(true);\n\n\t\tconst interval = setInterval(() => fetchRef.current(), POLL_INTERVAL);\n\t\treturn () => clearInterval(interval);\n\t}, [isModalOpen, isOAuthProvider, modalProvider, provider]);\n\n\treturn {\n\t\tusage,\n\t\tfetchUsage,\n\t\tisOAuthProvider,\n\t};\n}\n",
@@ -73,13 +73,14 @@
73
73
  "import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useSkillsStore } from '../stores/skillsStore';\nimport { useEffect } from 'react';\nimport { apiClient } from '../lib/api-client';\n\ninterface UseSkillsOptions {\n\tenabled?: boolean;\n}\n\nexport function useSkills(options: UseSkillsOptions = {}) {\n\tconst enabled = options.enabled ?? true;\n\tconst setSkillsConfig = useSkillsStore((s) => s.setSkillsConfig);\n\n\tconst query = useQuery({\n\t\tqueryKey: ['skills'],\n\t\tqueryFn: async () => {\n\t\t\treturn apiClient.getSkillsConfig();\n\t\t},\n\t\tenabled,\n\t\trefetchInterval: 30000,\n\t});\n\n\tuseEffect(() => {\n\t\tif (query.data?.items) {\n\t\t\tsetSkillsConfig({\n\t\t\t\tskills: query.data.items,\n\t\t\t\tglobalEnabled: query.data.enabled,\n\t\t\t\ttotalCount: query.data.totalCount,\n\t\t\t\tenabledCount: query.data.enabledCount,\n\t\t\t});\n\t\t}\n\t}, [query.data, setSkillsConfig]);\n\n\treturn query;\n}\n\nexport function useUpdateSkillsConfig() {\n\tconst queryClient = useQueryClient();\n\tconst setSkillsConfig = useSkillsStore((s) => s.setSkillsConfig);\n\n\treturn useMutation({\n\t\tmutationFn: (input: {\n\t\t\tenabled?: boolean;\n\t\t\titems?: Record<string, { enabled?: boolean }>;\n\t\t\tscope?: 'global' | 'local';\n\t\t}) => apiClient.updateSkillsConfig(input),\n\t\tonSuccess: (data) => {\n\t\t\tsetSkillsConfig({\n\t\t\t\tskills: data.items,\n\t\t\t\tglobalEnabled: data.enabled,\n\t\t\t\ttotalCount: data.totalCount,\n\t\t\t\tenabledCount: data.enabledCount,\n\t\t\t});\n\t\t\tqueryClient.setQueryData(['skills'], data);\n\t\t},\n\t});\n}\n\nexport function useSkillDetail(name: string | null) {\n\treturn useQuery({\n\t\tqueryKey: ['skills', name],\n\t\tqueryFn: async () => {\n\t\t\tif (!name) return null;\n\t\t\treturn apiClient.getSkill(name);\n\t\t},\n\t\tenabled: !!name,\n\t});\n}\n\nexport function useSkillFiles(name: string | null) {\n\treturn useQuery({\n\t\tqueryKey: ['skills', name, 'files'],\n\t\tqueryFn: async () => {\n\t\t\tif (!name) return null;\n\t\t\treturn apiClient.getSkillFiles(name);\n\t\t},\n\t\tenabled: !!name,\n\t});\n}\n\nexport function useSkillFileContent(\n\tname: string | null,\n\tfilePath: string | null,\n) {\n\treturn useQuery({\n\t\tqueryKey: ['skills', name, 'files', filePath],\n\t\tqueryFn: async () => {\n\t\t\tif (!name || !filePath) return null;\n\t\t\treturn apiClient.getSkillFileContent(name, filePath);\n\t\t},\n\t\tenabled: !!name && !!filePath,\n\t});\n}\n",
74
74
  "import { useEffect } from 'react';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport type { AgentDetail, UpdateAgentInput } from '../lib/api-client/config';\nimport { useAgentsStore } from '../stores/agentsStore';\n\nexport type {\n\tAgentDetail,\n\tToolDetail,\n\tUpdateAgentInput,\n} from '../lib/api-client/config';\n\ninterface UseAgentsOptions {\n\tenabled?: boolean;\n}\n\nexport function useAgentDetails(options: UseAgentsOptions = {}) {\n\tconst managerOpen = useAgentsStore((s) => s.isManagerOpen);\n\tconst createOpen = useAgentsStore((s) => s.isCreateModalOpen);\n\tconst enabled = options.enabled ?? (managerOpen || createOpen);\n\tconst setAgents = useAgentsStore((s) => s.setAgents);\n\tconst selectedAgent = useAgentsStore((s) => s.selectedAgent);\n\tconst selectAgent = useAgentsStore((s) => s.selectAgent);\n\n\tconst query = useQuery({\n\t\tqueryKey: ['config', 'agents'],\n\t\tqueryFn: () => apiClient.getAgentDetails(),\n\t\tenabled,\n\t\tstaleTime: 15_000,\n\t});\n\n\tuseEffect(() => {\n\t\tif (!query.data) return;\n\t\tsetAgents(query.data.agents, query.data.default);\n\t\tif (!selectedAgent && query.data.agents.length > 0) {\n\t\t\tconst defaultAgent = query.data.agents.find(\n\t\t\t\t(agent) => agent.name === query.data.default,\n\t\t\t);\n\t\t\tselectAgent(defaultAgent?.name ?? query.data.agents[0].name);\n\t\t}\n\t}, [query.data, selectAgent, selectedAgent, setAgents]);\n\n\treturn query;\n}\n\nexport function useAgent(agentName: string | null) {\n\treturn useQuery({\n\t\tqueryKey: ['config', 'agents', agentName],\n\t\tqueryFn: async () => {\n\t\t\tif (!agentName) return null;\n\t\t\treturn apiClient.getAgent(agentName);\n\t\t},\n\t\tenabled: Boolean(agentName),\n\t\tstaleTime: 15_000,\n\t});\n}\n\n/**\n * Lightweight agent list for @mention suggestions and input highlighting.\n * Shares the cache with useAgentDetails but has no store side effects.\n */\nexport function useMentionAgents(options: UseAgentsOptions = {}) {\n\treturn useQuery({\n\t\tqueryKey: ['config', 'agents'],\n\t\tqueryFn: () => apiClient.getAgentDetails(),\n\t\tenabled: options.enabled ?? true,\n\t\tstaleTime: 60_000,\n\t});\n}\n\nexport function useConfigTools(options: UseAgentsOptions = {}) {\n\tconst managerOpen = useAgentsStore((s) => s.isManagerOpen);\n\tconst createOpen = useAgentsStore((s) => s.isCreateModalOpen);\n\tconst enabled = options.enabled ?? (managerOpen || createOpen);\n\treturn useQuery({\n\t\tqueryKey: ['config', 'tools'],\n\t\tqueryFn: () => apiClient.getConfigTools(),\n\t\tenabled,\n\t\tstaleTime: 30_000,\n\t});\n}\n\nexport function useUpdateAgent() {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: ({ name, input }: { name: string; input: UpdateAgentInput }) =>\n\t\t\tapiClient.updateAgent(name, input),\n\t\tonSuccess: (data, variables) => {\n\t\t\tqueryClient.setQueryData(['config', 'agents', variables.name], data);\n\t\t\tvoid queryClient.invalidateQueries({ queryKey: ['config', 'agents'] });\n\t\t\tvoid queryClient.invalidateQueries({ queryKey: ['config'] });\n\t\t},\n\t});\n}\n\nexport function useDeleteAgent() {\n\tconst queryClient = useQueryClient();\n\tconst setAgents = useAgentsStore((s) => s.setAgents);\n\tconst selectAgent = useAgentsStore((s) => s.selectAgent);\n\treturn useMutation({\n\t\tmutationFn: ({\n\t\t\tname,\n\t\t\tscope = 'local',\n\t\t}: {\n\t\t\tname: string;\n\t\t\tscope?: 'local' | 'global';\n\t\t}) => apiClient.deleteAgent(name, scope),\n\t\tonSuccess: async (_data, variables) => {\n\t\t\tawait queryClient.invalidateQueries({ queryKey: ['config', 'agents'] });\n\t\t\tconst refreshed = await queryClient.fetchQuery({\n\t\t\t\tqueryKey: ['config', 'agents'],\n\t\t\t\tqueryFn: () => apiClient.getAgentDetails(),\n\t\t\t});\n\t\t\tsetAgents(refreshed.agents, refreshed.default);\n\t\t\tif (variables.name === useAgentsStore.getState().selectedAgent) {\n\t\t\t\tconst next =\n\t\t\t\t\trefreshed.agents.find((a) => a.name === refreshed.default)?.name ??\n\t\t\t\t\trefreshed.agents[0]?.name ??\n\t\t\t\t\tnull;\n\t\t\t\tselectAgent(next);\n\t\t\t}\n\t\t\tvoid queryClient.invalidateQueries({ queryKey: ['config'] });\n\t\t},\n\t});\n}\n\nexport function useSetDefaultAgent() {\n\tconst queryClient = useQueryClient();\n\treturn useMutation({\n\t\tmutationFn: (name: string) =>\n\t\t\tapiClient.updateDefaults({ agent: name, scope: 'global' }),\n\t\tonSuccess: () => {\n\t\t\tvoid queryClient.invalidateQueries({ queryKey: ['config', 'agents'] });\n\t\t\tvoid queryClient.invalidateQueries({ queryKey: ['config'] });\n\t\t},\n\t});\n}\n\nexport function getAgentToolCount(\n\tagent: AgentDetail | null | undefined,\n): number {\n\tif (!agent) return 0;\n\treturn Array.from(\n\t\tnew Set([\n\t\t\t...(agent.toolConfig.firstClass ?? []),\n\t\t\t...(agent.toolConfig.loadable ?? []),\n\t\t]),\n\t).length;\n}\n",
75
75
  "import { create } from 'zustand';\nimport type { AgentDetail } from '../lib/api-client/config';\nimport type { AgentEditorPage } from '../components/agents/agentConstants';\nimport { useFileBrowserStore } from './fileBrowserStore';\nimport { useGitStore } from './gitStore';\nimport { useMCPStore } from './mcpStore';\nimport { useResearchStore } from './researchStore';\nimport { useSessionFilesStore } from './sessionFilesStore';\nimport { useSettingsStore } from './settingsStore';\nimport { useSkillsStore } from './skillsStore';\nimport { useTunnelStore } from './tunnelStore';\n\nexport type AgentsManagerMode = 'library' | 'workspace';\n\ninterface AgentsState {\n\t/** Rail toggle highlight (manager open). */\n\tisExpanded: boolean;\n\tisManagerOpen: boolean;\n\tmanagerMode: AgentsManagerMode;\n\teditorPage: AgentEditorPage;\n\tagents: AgentDetail[];\n\tdefaultAgent: string | null;\n\tselectedAgent: string | null;\n\tisCreateModalOpen: boolean;\n\tsetManagerMode: (mode: AgentsManagerMode) => void;\n\topenManager: () => void;\n\tcloseManager: () => void;\n\ttoggleManager: () => void;\n\tsetAgents: (agents: AgentDetail[], defaultAgent: string) => void;\n\tselectAgent: (agent: string | null) => void;\n\tbackToList: () => void;\n\topenAgentInManager: (agent: string) => void;\n\tsetEditorPage: (page: AgentEditorPage) => void;\n\topenCreateModal: () => void;\n\tcloseCreateModal: () => void;\n}\n\nfunction collapseOtherRightPanels() {\n\tuseGitStore.getState().collapseSidebar();\n\tuseSessionFilesStore.getState().collapseSidebar();\n\tuseResearchStore.getState().collapseSidebar();\n\tuseSettingsStore.getState().collapseSidebar();\n\tuseTunnelStore.getState().collapseSidebar();\n\tuseFileBrowserStore.getState().collapseSidebar();\n\tuseMCPStore.getState().collapseSidebar();\n\tuseSkillsStore.getState().collapseSidebar();\n}\n\nexport const useAgentsStore = create<AgentsState>((set) => ({\n\tisExpanded: false,\n\tisManagerOpen: false,\n\tmanagerMode: 'library',\n\teditorPage: 'overview',\n\tagents: [],\n\tdefaultAgent: null,\n\tselectedAgent: null,\n\tisCreateModalOpen: false,\n\n\tsetManagerMode: (mode) => set({ managerMode: mode }),\n\n\topenManager: () => {\n\t\tcollapseOtherRightPanels();\n\t\tset({ isManagerOpen: true, isExpanded: true, managerMode: 'library' });\n\t},\n\n\tcloseManager: () =>\n\t\tset({\n\t\t\tisManagerOpen: false,\n\t\t\tisExpanded: false,\n\t\t\tisCreateModalOpen: false,\n\t\t\tmanagerMode: 'library',\n\t\t\teditorPage: 'overview',\n\t\t}),\n\n\ttoggleManager: () => {\n\t\tconst open = useAgentsStore.getState().isManagerOpen;\n\t\tif (open) {\n\t\t\tuseAgentsStore.getState().closeManager();\n\t\t} else {\n\t\t\tuseAgentsStore.getState().openManager();\n\t\t}\n\t},\n\n\tsetAgents: (agents, defaultAgent) =>\n\t\tset((state) => ({\n\t\t\tagents,\n\t\t\tdefaultAgent,\n\t\t\tselectedAgent:\n\t\t\t\tstate.selectedAgent &&\n\t\t\t\tagents.some((a) => a.name === state.selectedAgent)\n\t\t\t\t\t? state.selectedAgent\n\t\t\t\t\t: (agents.find((a) => a.name === defaultAgent)?.name ??\n\t\t\t\t\t\tagents[0]?.name ??\n\t\t\t\t\t\tnull),\n\t\t})),\n\n\tselectAgent: (agent) => set({ selectedAgent: agent }),\n\n\tbackToList: () => set({ selectedAgent: null, editorPage: 'overview' }),\n\n\topenAgentInManager: (agent) =>\n\t\tset({\n\t\t\tisManagerOpen: true,\n\t\t\tisExpanded: true,\n\t\t\tmanagerMode: 'workspace',\n\t\t\tselectedAgent: agent,\n\t\t\teditorPage: 'overview',\n\t\t\tisCreateModalOpen: false,\n\t\t}),\n\n\tsetEditorPage: (page) => set({ editorPage: page }),\n\n\topenCreateModal: () =>\n\t\tset({ isManagerOpen: true, isExpanded: true, isCreateModalOpen: true }),\n\n\tcloseCreateModal: () =>\n\t\tset({\n\t\t\tisCreateModalOpen: false,\n\t\t\tmanagerMode: 'library',\n\t\t\teditorPage: 'overview',\n\t\t}),\n}));\n",
76
- "import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useAgentDetails } from './useAgents';\nimport { useAllModels, useConfig } from './useConfig';\nimport { useSession, useUpdateSession } from './useSessions';\nimport type { UpdateSessionRequest } from '../types/api';\n\nexport interface UseChatComposerOptions {\n\t/** When set, composer state hydrates from the session and persists changes to it. */\n\tsessionId?: string;\n\t/** Initial agent override for the new-session (no sessionId) case. */\n\tdefaultAgent?: string;\n}\n\n/**\n * Shared controller state for the chat input composer.\n *\n * Owns agent/provider/model selection for both the existing-session input\n * (hydrates from the session row, persists via session PATCH) and the\n * new-session input (hydrates from config defaults + agent overrides,\n * local-only until the session is created).\n */\nexport function useChatComposer({\n\tsessionId,\n\tdefaultAgent,\n}: UseChatComposerOptions = {}) {\n\tconst { data: config } = useConfig();\n\tconst { data: allModels } = useAllModels();\n\tconst { data: agentDetails } = useAgentDetails({ enabled: true });\n\tconst session = useSession(sessionId ?? '');\n\tconst updateSession = useUpdateSession(sessionId ?? '');\n\n\tconst [agent, setAgent] = useState('');\n\tconst [provider, setProvider] = useState('');\n\tconst [model, setModel] = useState('');\n\tconst initializedRef = useRef(false);\n\n\tuseEffect(() => {\n\t\tif (!sessionId || !session) return;\n\t\tsetAgent(session.agent);\n\t\tsetProvider(session.provider);\n\t\tsetModel(session.model);\n\t}, [sessionId, session]);\n\n\tuseEffect(() => {\n\t\tif (sessionId || initializedRef.current) return;\n\t\tif (!config?.defaults || !agentDetails?.agents.length) return;\n\t\tinitializedRef.current = true;\n\t\tconst initialAgent = defaultAgent || config.defaults.agent || 'general';\n\t\tconst selectedAgent = agentDetails.agents.find(\n\t\t\t(agentDetail) => agentDetail.name === initialAgent,\n\t\t);\n\t\tsetAgent(initialAgent);\n\t\tsetProvider(selectedAgent?.provider ?? config.defaults.provider ?? '');\n\t\tsetModel(selectedAgent?.model ?? config.defaults.model ?? '');\n\t}, [sessionId, agentDetails?.agents, config, defaultAgent]);\n\n\tconst agentNames = useMemo(\n\t\t() =>\n\t\t\tagentDetails?.agents.length\n\t\t\t\t? agentDetails.agents.map((agentDetail) => agentDetail.name)\n\t\t\t\t: (config?.agents ?? []),\n\t\t[agentDetails?.agents, config?.agents],\n\t);\n\n\tconst selectedModel = useMemo(\n\t\t() => allModels?.[provider]?.models?.find((m) => m.id === model),\n\t\t[allModels, provider, model],\n\t);\n\n\tconst persist = useCallback(\n\t\tasync (update: UpdateSessionRequest) => {\n\t\t\tif (!sessionId) return;\n\t\t\ttry {\n\t\t\t\tawait updateSession.mutateAsync(update);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Failed to update session:', error);\n\t\t\t}\n\t\t},\n\t\t[sessionId, updateSession],\n\t);\n\n\tconst handleAgentChange = useCallback(\n\t\tasync (value: string) => {\n\t\t\tsetAgent(value);\n\t\t\tconst selectedAgent = agentDetails?.agents.find(\n\t\t\t\t(agentDetail) => agentDetail.name === value,\n\t\t\t);\n\t\t\tif (!selectedAgent) {\n\t\t\t\tawait persist({ agent: value });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst nextProvider =\n\t\t\t\tselectedAgent.provider ?? config?.defaults?.provider ?? provider;\n\t\t\tconst nextModel = selectedAgent.model ?? config?.defaults?.model ?? model;\n\t\t\tsetProvider(nextProvider);\n\t\t\tsetModel(nextModel);\n\t\t\tawait persist({\n\t\t\t\tagent: value,\n\t\t\t\tprovider: nextProvider,\n\t\t\t\tmodel: nextModel,\n\t\t\t});\n\t\t},\n\t\t[\n\t\t\tagentDetails?.agents,\n\t\t\tconfig?.defaults?.model,\n\t\t\tconfig?.defaults?.provider,\n\t\t\tmodel,\n\t\t\tprovider,\n\t\t\tpersist,\n\t\t],\n\t);\n\n\tconst handlePlanModeToggle = useCallback(\n\t\tasync (isPlanMode: boolean) => {\n\t\t\tawait handleAgentChange(isPlanMode ? 'plan' : 'build');\n\t\t},\n\t\t[handleAgentChange],\n\t);\n\n\tconst handleModelSelectorChange = useCallback(\n\t\tasync (newProvider: string, newModel: string) => {\n\t\t\tsetProvider(newProvider);\n\t\t\tsetModel(newModel);\n\t\t\tawait persist({ provider: newProvider, model: newModel });\n\t\t},\n\t\t[persist],\n\t);\n\n\tconst handleProviderChange = useCallback(\n\t\tasync (newProvider: string) => {\n\t\t\tsetProvider(newProvider);\n\t\t\tif (model) {\n\t\t\t\tawait persist({ provider: newProvider, model });\n\t\t\t}\n\t\t},\n\t\t[model, persist],\n\t);\n\n\tconst handleModelChange = useCallback(\n\t\tasync (newModel: string) => {\n\t\t\tsetModel(newModel);\n\t\t\tawait persist({ provider, model: newModel });\n\t\t},\n\t\t[provider, persist],\n\t);\n\n\treturn {\n\t\tconfig,\n\t\tallModels,\n\t\tagent,\n\t\tprovider,\n\t\tmodel,\n\t\tagentNames,\n\t\tisPlanMode: agent === 'plan',\n\t\tmodelSupportsReasoning: selectedModel?.reasoningText,\n\t\tmodelSupportsVision: selectedModel?.vision,\n\t\tmodelSupportsAttachment: selectedModel?.attachment,\n\t\tmodelIsFree: selectedModel?.free,\n\t\tproviderAuthType: allModels?.[provider]?.authType,\n\t\tisCustomProvider:\n\t\t\tallModels?.[provider]?.label?.includes('(custom)') ?? false,\n\t\thandleAgentChange,\n\t\thandlePlanModeToggle,\n\t\thandleProviderChange,\n\t\thandleModelChange,\n\t\thandleModelSelectorChange,\n\t};\n}\n",
76
+ "import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useAgentDetails } from './useAgents';\nimport { useAllModels, useConfig } from './useConfig';\nimport { useSession, useUpdateSession } from './useSessions';\nimport type { UpdateSessionRequest } from '../types/api';\n\nexport interface UseChatComposerOptions {\n\t/** When set, composer state hydrates from the session and persists changes to it. */\n\tsessionId?: string;\n\t/** Initial agent override for the new-session (no sessionId) case. */\n\tdefaultAgent?: string;\n}\n\n/**\n * Shared controller state for the chat input composer.\n *\n * Owns agent/provider/model selection for both the existing-session input\n * (hydrates from the session row, persists via session PATCH) and the\n * new-session input (hydrates from config defaults + agent overrides,\n * local-only until the session is created).\n */\nexport function useChatComposer({\n\tsessionId,\n\tdefaultAgent,\n}: UseChatComposerOptions = {}) {\n\tconst { data: config } = useConfig();\n\tconst { data: allModels } = useAllModels();\n\tconst { data: agentDetails } = useAgentDetails({ enabled: true });\n\tconst session = useSession(sessionId ?? '');\n\tconst updateSession = useUpdateSession(sessionId ?? '');\n\n\tconst [agent, setAgent] = useState('');\n\tconst [provider, setProvider] = useState('');\n\tconst [model, setModel] = useState('');\n\tconst initializedRef = useRef(false);\n\n\tuseEffect(() => {\n\t\tif (!sessionId || !session) return;\n\t\tsetAgent(session.agent);\n\t\tsetProvider(session.provider);\n\t\tsetModel(session.model);\n\t}, [sessionId, session]);\n\n\tuseEffect(() => {\n\t\tif (sessionId || initializedRef.current) return;\n\t\tif (!config?.defaults || !agentDetails?.agents.length) return;\n\t\tinitializedRef.current = true;\n\t\tconst initialAgent = defaultAgent || config.defaults.agent || 'general';\n\t\tconst selectedAgent = agentDetails.agents.find(\n\t\t\t(agentDetail) => agentDetail.name === initialAgent,\n\t\t);\n\t\tsetAgent(initialAgent);\n\t\tsetProvider(selectedAgent?.provider ?? config.defaults.provider ?? '');\n\t\tsetModel(selectedAgent?.model ?? config.defaults.model ?? '');\n\t}, [sessionId, agentDetails?.agents, config, defaultAgent]);\n\n\tconst agentNames = useMemo(\n\t\t() =>\n\t\t\t(agentDetails?.agents.length\n\t\t\t\t? agentDetails.agents.map((agentDetail) => agentDetail.name)\n\t\t\t\t: (config?.agents ?? [])\n\t\t\t).filter((name) => name !== 'otto'),\n\t\t[agentDetails?.agents, config?.agents],\n\t);\n\n\tconst selectedModel = useMemo(\n\t\t() => allModels?.[provider]?.models?.find((m) => m.id === model),\n\t\t[allModels, provider, model],\n\t);\n\n\tconst persist = useCallback(\n\t\tasync (update: UpdateSessionRequest) => {\n\t\t\tif (!sessionId) return;\n\t\t\ttry {\n\t\t\t\tawait updateSession.mutateAsync(update);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Failed to update session:', error);\n\t\t\t}\n\t\t},\n\t\t[sessionId, updateSession],\n\t);\n\n\tconst handleAgentChange = useCallback(\n\t\tasync (value: string) => {\n\t\t\tsetAgent(value);\n\t\t\tconst selectedAgent = agentDetails?.agents.find(\n\t\t\t\t(agentDetail) => agentDetail.name === value,\n\t\t\t);\n\t\t\tif (!selectedAgent) {\n\t\t\t\tawait persist({ agent: value });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst nextProvider =\n\t\t\t\tselectedAgent.provider ?? config?.defaults?.provider ?? provider;\n\t\t\tconst nextModel = selectedAgent.model ?? config?.defaults?.model ?? model;\n\t\t\tsetProvider(nextProvider);\n\t\t\tsetModel(nextModel);\n\t\t\tawait persist({\n\t\t\t\tagent: value,\n\t\t\t\tprovider: nextProvider,\n\t\t\t\tmodel: nextModel,\n\t\t\t});\n\t\t},\n\t\t[\n\t\t\tagentDetails?.agents,\n\t\t\tconfig?.defaults?.model,\n\t\t\tconfig?.defaults?.provider,\n\t\t\tmodel,\n\t\t\tprovider,\n\t\t\tpersist,\n\t\t],\n\t);\n\n\tconst handlePlanModeToggle = useCallback(\n\t\tasync (isPlanMode: boolean) => {\n\t\t\tawait handleAgentChange(isPlanMode ? 'plan' : 'build');\n\t\t},\n\t\t[handleAgentChange],\n\t);\n\n\tconst handleModelSelectorChange = useCallback(\n\t\tasync (newProvider: string, newModel: string) => {\n\t\t\tsetProvider(newProvider);\n\t\t\tsetModel(newModel);\n\t\t\tawait persist({ provider: newProvider, model: newModel });\n\t\t},\n\t\t[persist],\n\t);\n\n\tconst handleProviderChange = useCallback(\n\t\tasync (newProvider: string) => {\n\t\t\tsetProvider(newProvider);\n\t\t\tif (model) {\n\t\t\t\tawait persist({ provider: newProvider, model });\n\t\t\t}\n\t\t},\n\t\t[model, persist],\n\t);\n\n\tconst handleModelChange = useCallback(\n\t\tasync (newModel: string) => {\n\t\t\tsetModel(newModel);\n\t\t\tawait persist({ provider, model: newModel });\n\t\t},\n\t\t[provider, persist],\n\t);\n\n\treturn {\n\t\tconfig,\n\t\tallModels,\n\t\tagent,\n\t\tprovider,\n\t\tmodel,\n\t\tagentNames,\n\t\tisPlanMode: agent === 'plan',\n\t\tmodelSupportsReasoning: selectedModel?.reasoningText,\n\t\tmodelSupportsVision: selectedModel?.vision,\n\t\tmodelSupportsAttachment: selectedModel?.attachment,\n\t\tmodelIsFree: selectedModel?.free,\n\t\tproviderAuthType: allModels?.[provider]?.authType,\n\t\tisCustomProvider:\n\t\t\tallModels?.[provider]?.label?.includes('(custom)') ?? false,\n\t\thandleAgentChange,\n\t\thandlePlanModeToggle,\n\t\thandleProviderChange,\n\t\thandleModelChange,\n\t\thandleModelSelectorChange,\n\t};\n}\n",
77
77
  "import { useCallback, useState } from 'react';\n\nexport type ConfigFocusTarget = 'agent' | 'model' | null;\n\n/**\n * Shared open/close + focus-target state for the chat ConfigModal.\n * Used by both the existing-session input and the new-session landing.\n */\nexport function useConfigModalControls() {\n\tconst [isConfigOpen, setIsConfigOpen] = useState(false);\n\tconst [configFocusTarget, setConfigFocusTarget] =\n\t\tuseState<ConfigFocusTarget>(null);\n\n\tconst openConfig = useCallback((target: ConfigFocusTarget) => {\n\t\tsetConfigFocusTarget(target);\n\t\tsetIsConfigOpen(true);\n\t}, []);\n\n\tconst toggleConfig = useCallback(() => {\n\t\tsetIsConfigOpen((prev) => !prev);\n\t}, []);\n\n\tconst closeConfig = useCallback(() => {\n\t\tsetIsConfigOpen(false);\n\t\tsetConfigFocusTarget(null);\n\t}, []);\n\n\tconst openModelConfig = useCallback(() => {\n\t\topenConfig('model');\n\t}, [openConfig]);\n\n\tconst openAgentConfig = useCallback(() => {\n\t\topenConfig('agent');\n\t}, [openConfig]);\n\n\treturn {\n\t\tisConfigOpen,\n\t\tconfigFocusTarget,\n\t\topenConfig,\n\t\ttoggleConfig,\n\t\tcloseConfig,\n\t\topenModelConfig,\n\t\topenAgentConfig,\n\t};\n}\n",
78
78
  "import { useEffect, useState, type RefObject } from 'react';\n\n/**\n * Tracks the inline (width) size of the element referenced by `ref` via a\n * ResizeObserver. Returns 0 until the first measurement.\n */\nexport function useContainerWidth(ref: RefObject<HTMLElement | null>): number {\n\tconst [width, setWidth] = useState(0);\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tif (!el) return;\n\n\t\tconst update = () => setWidth(el.clientWidth);\n\t\tupdate();\n\n\t\tconst observer = new ResizeObserver(() => update());\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [ref]);\n\n\treturn width;\n}\n",
79
+ "import { useEffect, useRef, useState } from 'react';\n\nconst HOVER_SHOW_DELAY_MS = 260;\nconst HOVER_HIDE_DELAY_MS = 120;\n\ninterface UseEdgeHoverOptions {\n\t/** Which window edge triggers the reveal. */\n\tside: 'left' | 'right';\n\t/** Master switch — usually `preferences.smartEdges && collapsed`. */\n\tenabled: boolean;\n\t/** Fraction of window width that counts as the hover zone. */\n\thoverRatio: number;\n\t/**\n\t * Width (px) the revealed surface occupies; the hover zone expands to\n\t * this while visible so the surface doesn't dismiss under the cursor.\n\t */\n\tactiveWidth?: number;\n\t/** Elements matching this selector suppress the edge reveal. */\n\tignoreSelector?: string;\n}\n\n/**\n * Smart-edges behavior: reveals a hidden edge surface (sidebar/rail) when\n * the cursor lingers near a window edge, and hides it shortly after the\n * cursor leaves. Mirrors the desktop app's hover-show/hide delays.\n */\nexport function useEdgeHover({\n\tside,\n\tenabled,\n\thoverRatio,\n\tactiveWidth,\n\tignoreSelector,\n}: UseEdgeHoverOptions) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isHoverPending, setIsHoverPending] = useState(false);\n\tconst isVisibleRef = useRef(false);\n\tconst showTimeoutRef = useRef<number | null>(null);\n\tconst hideTimeoutRef = useRef<number | null>(null);\n\n\tuseEffect(() => {\n\t\tconst setVisible = (visible: boolean) => {\n\t\t\tisVisibleRef.current = visible;\n\t\t\tsetIsVisible(visible);\n\t\t};\n\n\t\tconst clearHoverTimeouts = () => {\n\t\t\tif (showTimeoutRef.current !== null) {\n\t\t\t\twindow.clearTimeout(showTimeoutRef.current);\n\t\t\t\tshowTimeoutRef.current = null;\n\t\t\t}\n\t\t\tif (hideTimeoutRef.current !== null) {\n\t\t\t\twindow.clearTimeout(hideTimeoutRef.current);\n\t\t\t\thideTimeoutRef.current = null;\n\t\t\t}\n\t\t};\n\n\t\tconst scheduleVisible = (visible: boolean) => {\n\t\t\tif (isVisibleRef.current === visible) {\n\t\t\t\tsetIsHoverPending(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetIsHoverPending(visible);\n\t\t\tconst delay = visible ? HOVER_SHOW_DELAY_MS : HOVER_HIDE_DELAY_MS;\n\t\t\tconst targetRef = visible ? showTimeoutRef : hideTimeoutRef;\n\t\t\tconst oppositeRef = visible ? hideTimeoutRef : showTimeoutRef;\n\n\t\t\tif (oppositeRef.current !== null) {\n\t\t\t\twindow.clearTimeout(oppositeRef.current);\n\t\t\t\toppositeRef.current = null;\n\t\t\t}\n\n\t\t\tif (targetRef.current !== null) return;\n\n\t\t\ttargetRef.current = window.setTimeout(() => {\n\t\t\t\tsetVisible(visible);\n\t\t\t\tsetIsHoverPending(false);\n\t\t\t\ttargetRef.current = null;\n\t\t\t}, delay);\n\t\t};\n\n\t\tif (!enabled) {\n\t\t\tclearHoverTimeouts();\n\t\t\tsetIsHoverPending(false);\n\t\t\tsetVisible(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleMouseMove = (event: MouseEvent) => {\n\t\t\tconst target = event.target;\n\t\t\tif (\n\t\t\t\tignoreSelector &&\n\t\t\t\ttarget instanceof Element &&\n\t\t\t\ttarget.closest(ignoreSelector)\n\t\t\t) {\n\t\t\t\tclearHoverTimeouts();\n\t\t\t\tsetIsHoverPending(false);\n\t\t\t\tsetVisible(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst triggerWidth = window.innerWidth * hoverRatio;\n\t\t\tconst zoneWidth =\n\t\t\t\tisVisibleRef.current && activeWidth\n\t\t\t\t\t? Math.max(triggerWidth, activeWidth)\n\t\t\t\t\t: triggerWidth;\n\t\t\tconst distance =\n\t\t\t\tside === 'left' ? event.clientX : window.innerWidth - event.clientX;\n\t\t\tscheduleVisible(distance <= zoneWidth);\n\t\t};\n\t\tconst handleMouseLeave = () => {\n\t\t\tclearHoverTimeouts();\n\t\t\tsetIsHoverPending(false);\n\t\t\tsetVisible(false);\n\t\t};\n\t\tconst handleMouseOut = (event: MouseEvent) => {\n\t\t\tif (!event.relatedTarget) {\n\t\t\t\thandleMouseLeave();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener('mousemove', handleMouseMove);\n\t\twindow.addEventListener('mouseout', handleMouseOut);\n\t\twindow.addEventListener('blur', handleMouseLeave);\n\t\tdocument.documentElement.addEventListener('mouseleave', handleMouseLeave);\n\t\treturn () => {\n\t\t\tclearHoverTimeouts();\n\t\t\twindow.removeEventListener('mousemove', handleMouseMove);\n\t\t\twindow.removeEventListener('mouseout', handleMouseOut);\n\t\t\twindow.removeEventListener('blur', handleMouseLeave);\n\t\t\tdocument.documentElement.removeEventListener(\n\t\t\t\t'mouseleave',\n\t\t\t\thandleMouseLeave,\n\t\t\t);\n\t\t};\n\t}, [enabled, hoverRatio, activeWidth, ignoreSelector, side]);\n\n\treturn { isVisible, isHoverPending };\n}\n",
79
80
  "import { useCallback, useEffect, useRef, useState } from 'react';\nimport { apiClient } from '../lib/api-client';\n\nconst TARGET_SAMPLE_RATE = 16000;\nconst PCM_FRAME_BYTES = 3200; // 100ms of 16 kHz mono pcm_s16le\n\ntype DictationServerEvent =\n\t| {\n\t\t\ttype: 'ready';\n\t\t\tsessionId: string;\n\t\t\tmodel: string;\n\t }\n\t| {\n\t\t\ttype: 'recording';\n\t\t\treceivedMs: number;\n\t\t\treceivedBytes: number;\n\t }\n\t| {\n\t\t\ttype: 'final';\n\t\t\ttext: string;\n\t\t\tlanguage: string;\n\t\t\tmodel: string;\n\t\t\tdurationMs: number;\n\t }\n\t| {\n\t\t\ttype: 'error';\n\t\t\tcode: string;\n\t\t\tmessage: string;\n\t };\n\ninterface UseVoiceInputOptions {\n\t/** Called when local dictation returns transcript text. */\n\tonTranscript?: (transcript: string, isFinal: boolean) => void;\n\tonError?: (message: string) => void;\n\tonNeedsInstall?: () => void;\n\tlang?: string;\n}\n\ninterface UseVoiceInputResult {\n\tisListening: boolean;\n\tisTranscribing: boolean;\n\tisSupported: boolean;\n\tanalyser: AnalyserNode | null;\n\terror: string | null;\n\tstart: () => Promise<void>;\n\tstop: () => void;\n}\n\ntype ScriptProcessorNodeLike = ScriptProcessorNode & {\n\tonaudioprocess: ((event: AudioProcessingEvent) => void) | null;\n};\n\nfunction getAudioContextConstructor(): typeof AudioContext | null {\n\tif (typeof window === 'undefined') return null;\n\treturn (\n\t\twindow.AudioContext ||\n\t\t(window as unknown as { webkitAudioContext?: typeof AudioContext })\n\t\t\t.webkitAudioContext ||\n\t\tnull\n\t);\n}\n\nfunction toLanguageCode(lang: string): string {\n\treturn lang.split('-', 1)[0]?.toLowerCase() || 'en';\n}\n\nfunction parseServerEvent(raw: string): DictationServerEvent | null {\n\ttry {\n\t\tconst value = JSON.parse(raw) as DictationServerEvent;\n\t\tif (!value || typeof value.type !== 'string') return null;\n\t\treturn value;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction resampleLinear(\n\tinput: Float32Array,\n\tinputSampleRate: number,\n\toutputSampleRate: number,\n): Float32Array {\n\tif (inputSampleRate === outputSampleRate) return input;\n\tconst ratio = inputSampleRate / outputSampleRate;\n\tconst outputLength = Math.max(1, Math.floor(input.length / ratio));\n\tconst output = new Float32Array(outputLength);\n\tfor (let i = 0; i < outputLength; i++) {\n\t\tconst inputIndex = i * ratio;\n\t\tconst before = Math.floor(inputIndex);\n\t\tconst after = Math.min(before + 1, input.length - 1);\n\t\tconst weight = inputIndex - before;\n\t\toutput[i] = input[before] * (1 - weight) + input[after] * weight;\n\t}\n\treturn output;\n}\n\nfunction floatToPcm16(samples: Float32Array): ArrayBuffer {\n\tconst buffer = new ArrayBuffer(samples.length * 2);\n\tconst view = new DataView(buffer);\n\tfor (let i = 0; i < samples.length; i++) {\n\t\tconst sample = Math.max(-1, Math.min(1, samples[i]));\n\t\tview.setInt16(i * 2, sample < 0 ? sample * 0x8000 : sample * 0x7fff, true);\n\t}\n\treturn buffer;\n}\n\nfunction appendBuffer(\n\ta: Uint8Array<ArrayBufferLike>,\n\tb: Uint8Array<ArrayBufferLike>,\n): Uint8Array<ArrayBufferLike> {\n\tconst next = new Uint8Array(a.byteLength + b.byteLength);\n\tnext.set(a, 0);\n\tnext.set(b, a.byteLength);\n\treturn next;\n}\n\n/**\n * Owns local streaming dictation: getUserMedia + AudioContext for waveform and\n * PCM frame capture, plus a WebSocket session to the local otto server.\n *\n * The returned `analyser` is intended to be passed to <LiveWaveform>.\n */\nexport function useVoiceInput({\n\tonTranscript,\n\tonError,\n\tonNeedsInstall,\n\tlang = 'en-US',\n}: UseVoiceInputOptions = {}): UseVoiceInputResult {\n\tconst [isListening, setIsListening] = useState(false);\n\tconst [isTranscribing, setIsTranscribing] = useState(false);\n\tconst [analyser, setAnalyser] = useState<AnalyserNode | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\n\tconst streamRef = useRef<MediaStream | null>(null);\n\tconst audioContextRef = useRef<AudioContext | null>(null);\n\tconst processorRef = useRef<ScriptProcessorNodeLike | null>(null);\n\tconst sourceRef = useRef<MediaStreamAudioSourceNode | null>(null);\n\tconst socketRef = useRef<WebSocket | null>(null);\n\tconst frameBufferRef = useRef<Uint8Array<ArrayBufferLike>>(new Uint8Array(0));\n\tconst stoppingRef = useRef(false);\n\tconst sessionIdRef = useRef<string | null>(null);\n\n\tconst onTranscriptRef = useRef(onTranscript);\n\tconst onErrorRef = useRef(onError);\n\tconst onNeedsInstallRef = useRef(onNeedsInstall);\n\tuseEffect(() => {\n\t\tonTranscriptRef.current = onTranscript;\n\t\tonErrorRef.current = onError;\n\t\tonNeedsInstallRef.current = onNeedsInstall;\n\t}, [onTranscript, onError, onNeedsInstall]);\n\n\tconst isSupported =\n\t\ttypeof window !== 'undefined' &&\n\t\t!!navigator.mediaDevices?.getUserMedia &&\n\t\t!!getAudioContextConstructor() &&\n\t\ttypeof WebSocket !== 'undefined';\n\n\tconst emitError = useCallback((message: string) => {\n\t\tsetError(message);\n\t\tonErrorRef.current?.(message);\n\t}, []);\n\n\tconst handleMissingModel = useCallback(() => {\n\t\tif (onNeedsInstallRef.current) {\n\t\t\tonNeedsInstallRef.current();\n\t\t\treturn;\n\t\t}\n\t\temitError(\n\t\t\t'Install a local dictation model from Settings before recording.',\n\t\t);\n\t}, [emitError]);\n\n\tconst cleanupAudio = useCallback(() => {\n\t\tif (processorRef.current) {\n\t\t\tprocessorRef.current.onaudioprocess = null;\n\t\t\tprocessorRef.current.disconnect();\n\t\t\tprocessorRef.current = null;\n\t\t}\n\t\tif (sourceRef.current) {\n\t\t\tsourceRef.current.disconnect();\n\t\t\tsourceRef.current = null;\n\t\t}\n\t\tif (streamRef.current) {\n\t\t\tfor (const track of streamRef.current.getTracks()) track.stop();\n\t\t\tstreamRef.current = null;\n\t\t}\n\t\tif (audioContextRef.current && audioContextRef.current.state !== 'closed') {\n\t\t\taudioContextRef.current.close().catch(() => {});\n\t\t}\n\t\taudioContextRef.current = null;\n\t\tframeBufferRef.current = new Uint8Array(0);\n\t\tsetAnalyser(null);\n\t}, []);\n\n\tconst cleanup = useCallback(() => {\n\t\tcleanupAudio();\n\t\tif (socketRef.current) {\n\t\t\tconst socket = socketRef.current;\n\t\t\tsocket.onopen = null;\n\t\t\tsocket.onmessage = null;\n\t\t\tsocket.onerror = null;\n\t\t\tsocket.onclose = null;\n\t\t\tif (socket.readyState === WebSocket.OPEN) {\n\t\t\t\tsocket.close(1000, 'Dictation cleanup');\n\t\t\t}\n\t\t\tsocketRef.current = null;\n\t\t}\n\t\tsessionIdRef.current = null;\n\t\tstoppingRef.current = false;\n\t\tsetIsListening(false);\n\t\tsetIsTranscribing(false);\n\t}, [cleanupAudio]);\n\n\tconst flushFrameBuffer = useCallback((force = false) => {\n\t\tconst socket = socketRef.current;\n\t\tif (!socket || socket.readyState !== WebSocket.OPEN) return;\n\t\tlet buffer = frameBufferRef.current;\n\t\twhile (buffer.byteLength >= PCM_FRAME_BYTES) {\n\t\t\tconst frame = buffer.slice(0, PCM_FRAME_BYTES);\n\t\t\tsocket.send(frame);\n\t\t\tbuffer = buffer.slice(PCM_FRAME_BYTES);\n\t\t}\n\t\tif (force && buffer.byteLength > 0) {\n\t\t\tsocket.send(buffer);\n\t\t\tbuffer = new Uint8Array(0);\n\t\t}\n\t\tframeBufferRef.current = buffer;\n\t}, []);\n\n\tconst handleAudioProcess = useCallback(\n\t\t(event: AudioProcessingEvent) => {\n\t\t\tconst audioContext = audioContextRef.current;\n\t\t\tconst socket = socketRef.current;\n\t\t\tif (\n\t\t\t\t!audioContext ||\n\t\t\t\t!socket ||\n\t\t\t\tsocket.readyState !== WebSocket.OPEN ||\n\t\t\t\tstoppingRef.current\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst input = event.inputBuffer.getChannelData(0);\n\t\t\tconst resampled = resampleLinear(\n\t\t\t\tinput,\n\t\t\t\taudioContext.sampleRate,\n\t\t\t\tTARGET_SAMPLE_RATE,\n\t\t\t);\n\t\t\tframeBufferRef.current = appendBuffer(\n\t\t\t\tframeBufferRef.current,\n\t\t\t\tnew Uint8Array(floatToPcm16(resampled)),\n\t\t\t);\n\t\t\tflushFrameBuffer(false);\n\t\t},\n\t\t[flushFrameBuffer],\n\t);\n\n\tconst stop = useCallback(() => {\n\t\tstoppingRef.current = true;\n\t\tflushFrameBuffer(true);\n\t\tcleanupAudio();\n\t\tconst socket = socketRef.current;\n\t\tif (socket?.readyState === WebSocket.OPEN) {\n\t\t\tsetIsListening(false);\n\t\t\tsetIsTranscribing(true);\n\t\t\tsocket.send(JSON.stringify({ type: 'stop' }));\n\t\t} else {\n\t\t\tsetIsListening(false);\n\t\t\tsetIsTranscribing(false);\n\t\t}\n\t}, [cleanupAudio, flushFrameBuffer]);\n\n\tconst start = useCallback(async () => {\n\t\tif (!isSupported) {\n\t\t\temitError('Voice input is not supported in this browser');\n\t\t\treturn;\n\t\t}\n\n\t\tcleanup();\n\t\tsetError(null);\n\t\tsetIsTranscribing(false);\n\t\tstoppingRef.current = false;\n\n\t\ttry {\n\t\t\tconst status = await apiClient.getDictationStatus();\n\t\t\tconst model = status.models.find(\n\t\t\t\t(item) => item.id === status.defaultModel,\n\t\t\t);\n\t\t\tif (!model?.installed) {\n\t\t\t\thandleMissingModel();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst session = await apiClient.createDictationSession({\n\t\t\t\tmodel: status.defaultModel,\n\t\t\t\tlanguage: toLanguageCode(lang),\n\t\t\t});\n\t\t\tif (!session.modelInstalled) {\n\t\t\t\thandleMissingModel();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst socket = new WebSocket(session.wsUrl);\n\t\t\tsocket.binaryType = 'arraybuffer';\n\t\t\tsocketRef.current = socket;\n\t\t\tsessionIdRef.current = session.id;\n\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\tconst timeout = window.setTimeout(() => {\n\t\t\t\t\treject(new Error('Timed out connecting to local dictation'));\n\t\t\t\t}, 5000);\n\n\t\t\t\tsocket.onopen = () => {\n\t\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t\t\tsocket.send(\n\t\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t\ttype: 'start',\n\t\t\t\t\t\t\tmodel: session.model,\n\t\t\t\t\t\t\tlanguage: toLanguageCode(lang),\n\t\t\t\t\t\t\tformat: {\n\t\t\t\t\t\t\t\tencoding: 'pcm_s16le',\n\t\t\t\t\t\t\t\tsampleRate: TARGET_SAMPLE_RATE,\n\t\t\t\t\t\t\t\tchannels: 1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpartialResults: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\n\t\t\t\tsocket.onerror = () => {\n\t\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t\t\treject(new Error('Could not connect to local dictation'));\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tsocket.onmessage = (event) => {\n\t\t\t\tif (typeof event.data !== 'string') return;\n\t\t\t\tconst payload = parseServerEvent(event.data);\n\t\t\t\tif (!payload) return;\n\t\t\t\tif (payload.type === 'final') {\n\t\t\t\t\tonTranscriptRef.current?.(payload.text.trim(), true);\n\t\t\t\t\tcleanup();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (payload.type === 'error') {\n\t\t\t\t\temitError(payload.message);\n\t\t\t\t\tcleanup();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tsocket.onclose = () => {\n\t\t\t\tif (!stoppingRef.current) setIsListening(false);\n\t\t\t\tsetIsTranscribing(false);\n\t\t\t};\n\n\t\t\tconst stream = await navigator.mediaDevices.getUserMedia({\n\t\t\t\taudio: {\n\t\t\t\t\techoCancellation: true,\n\t\t\t\t\tnoiseSuppression: true,\n\t\t\t\t\tautoGainControl: true,\n\t\t\t\t},\n\t\t\t});\n\t\t\tstreamRef.current = stream;\n\n\t\t\tconst AudioContextCtor = getAudioContextConstructor();\n\t\t\tif (!AudioContextCtor) throw new Error('AudioContext is unavailable');\n\t\t\tconst audioContext = new AudioContextCtor();\n\t\t\tconst source = audioContext.createMediaStreamSource(stream);\n\t\t\tconst analyserNode = audioContext.createAnalyser();\n\t\t\tanalyserNode.fftSize = 256;\n\t\t\tanalyserNode.smoothingTimeConstant = 0.55;\n\n\t\t\tconst processor = audioContext.createScriptProcessor(\n\t\t\t\t4096,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t) as ScriptProcessorNodeLike;\n\t\t\tprocessor.onaudioprocess = handleAudioProcess;\n\t\t\tsource.connect(analyserNode);\n\t\t\tsource.connect(processor);\n\t\t\tprocessor.connect(audioContext.destination);\n\n\t\t\taudioContextRef.current = audioContext;\n\t\t\tsourceRef.current = source;\n\t\t\tprocessorRef.current = processor;\n\t\t\tsetAnalyser(analyserNode);\n\t\t\tsetIsListening(true);\n\t\t} catch (err) {\n\t\t\tconst name = err instanceof Error ? err.name : '';\n\t\t\tconst msg =\n\t\t\t\tname === 'NotAllowedError'\n\t\t\t\t\t? 'Microphone permission denied'\n\t\t\t\t\t: err instanceof Error\n\t\t\t\t\t\t? err.message\n\t\t\t\t\t\t: 'Could not start voice input';\n\t\t\temitError(msg);\n\t\t\tcleanup();\n\t\t}\n\t}, [\n\t\tcleanup,\n\t\temitError,\n\t\thandleAudioProcess,\n\t\thandleMissingModel,\n\t\tisSupported,\n\t\tlang,\n\t]);\n\n\tuseEffect(() => cleanup, [cleanup]);\n\n\treturn {\n\t\tisListening,\n\t\tisTranscribing,\n\t\tisSupported,\n\t\tanalyser,\n\t\terror,\n\t\tstart,\n\t\tstop,\n\t};\n}\n",
80
81
  "import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../lib/api-client';\nimport type {\n\tDictationModelInstallEvent,\n\tDictationModelState,\n\tDictationStatusResponse,\n} from '../lib/api-client';\n\nconst DICTATION_STATUS_QUERY_KEY = ['dictation', 'status'] as const;\n\nfunction mergeModelState(\n\tcurrent: DictationStatusResponse | undefined,\n\tmodel: DictationModelState,\n): DictationStatusResponse | undefined {\n\tif (!current) return current;\n\treturn {\n\t\t...current,\n\t\tmodels: current.models.map((item) => (item.id === model.id ? model : item)),\n\t};\n}\n\nfunction parseInstallEvent(raw: string): DictationModelInstallEvent | null {\n\ttry {\n\t\tconst value = JSON.parse(raw) as Partial<DictationModelInstallEvent>;\n\t\tif (value.type !== 'model' || !value.model) return null;\n\t\treturn value as DictationModelInstallEvent;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function useDictationModels() {\n\tconst queryClient = useQueryClient();\n\tconst eventSourceRef = useRef<EventSource | null>(null);\n\tconst [activeInstallModelId, setActiveInstallModelId] = useState<\n\t\tstring | null\n\t>(null);\n\tconst [installProgress, setInstallProgress] =\n\t\tuseState<DictationModelState | null>(null);\n\tconst [installStreamError, setInstallStreamError] = useState<string | null>(\n\t\tnull,\n\t);\n\n\tconst statusQuery = useQuery({\n\t\tqueryKey: DICTATION_STATUS_QUERY_KEY,\n\t\tqueryFn: () => apiClient.getDictationStatus(),\n\t\trefetchInterval: (query) =>\n\t\t\tquery.state.data?.models.some((model) => model.installing) ? 1000 : 30000,\n\t});\n\n\tconst closeInstallStream = useCallback(() => {\n\t\tif (eventSourceRef.current) {\n\t\t\teventSourceRef.current.close();\n\t\t\teventSourceRef.current = null;\n\t\t}\n\t}, []);\n\n\tconst openInstallStream = useCallback(\n\t\t(modelId: string) => {\n\t\t\tif (typeof EventSource === 'undefined') return;\n\t\t\tcloseInstallStream();\n\t\t\tsetActiveInstallModelId(modelId);\n\t\t\tsetInstallStreamError(null);\n\n\t\t\tconst eventSource = new EventSource(\n\t\t\t\tapiClient.getDictationModelInstallEventsUrl(modelId),\n\t\t\t);\n\t\t\teventSourceRef.current = eventSource;\n\n\t\t\teventSource.onmessage = (event) => {\n\t\t\t\tconst payload = parseInstallEvent(event.data);\n\t\t\t\tif (!payload) return;\n\t\t\t\tsetInstallProgress(payload.model);\n\t\t\t\tqueryClient.setQueryData<DictationStatusResponse | undefined>(\n\t\t\t\t\tDICTATION_STATUS_QUERY_KEY,\n\t\t\t\t\t(current) => mergeModelState(current, payload.model),\n\t\t\t\t);\n\t\t\t\tif (!payload.model.installing) {\n\t\t\t\t\tcloseInstallStream();\n\t\t\t\t\tsetActiveInstallModelId(null);\n\t\t\t\t\tvoid queryClient.invalidateQueries({\n\t\t\t\t\t\tqueryKey: DICTATION_STATUS_QUERY_KEY,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\teventSource.onerror = () => {\n\t\t\t\tsetInstallStreamError('Lost dictation model install progress stream');\n\t\t\t\tcloseInstallStream();\n\t\t\t\tsetActiveInstallModelId(null);\n\t\t\t\tvoid queryClient.invalidateQueries({\n\t\t\t\t\tqueryKey: DICTATION_STATUS_QUERY_KEY,\n\t\t\t\t});\n\t\t\t};\n\t\t},\n\t\t[closeInstallStream, queryClient],\n\t);\n\n\tuseEffect(() => closeInstallStream, [closeInstallStream]);\n\n\tconst installMutation = useMutation({\n\t\tmutationFn: (input: { model: string; force?: boolean }) =>\n\t\t\tapiClient.installDictationModel(input),\n\t\tonSuccess: (data) => {\n\t\t\tsetInstallProgress(data.model);\n\t\t\tqueryClient.setQueryData<DictationStatusResponse | undefined>(\n\t\t\t\tDICTATION_STATUS_QUERY_KEY,\n\t\t\t\t(current) => mergeModelState(current, data.model),\n\t\t\t);\n\t\t\tif (data.model.installing) {\n\t\t\t\topenInstallStream(data.model.id);\n\t\t\t} else {\n\t\t\t\tcloseInstallStream();\n\t\t\t\tsetActiveInstallModelId(null);\n\t\t\t\tvoid queryClient.invalidateQueries({\n\t\t\t\t\tqueryKey: DICTATION_STATUS_QUERY_KEY,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t});\n\n\tconst removeMutation = useMutation({\n\t\tmutationFn: (model: string) => apiClient.removeDictationModel(model),\n\t\tonSuccess: (data) => {\n\t\t\tqueryClient.setQueryData<DictationStatusResponse | undefined>(\n\t\t\t\tDICTATION_STATUS_QUERY_KEY,\n\t\t\t\t(current) => mergeModelState(current, data.model),\n\t\t\t);\n\t\t\tvoid queryClient.invalidateQueries({\n\t\t\t\tqueryKey: DICTATION_STATUS_QUERY_KEY,\n\t\t\t});\n\t\t},\n\t});\n\n\tconst installModel = useCallback(\n\t\t(model: string, options: { force?: boolean } = {}) =>\n\t\t\tinstallMutation.mutateAsync({ model, force: options.force }),\n\t\t[installMutation],\n\t);\n\n\tconst removeModel = useCallback(\n\t\t(model: string) => removeMutation.mutateAsync(model),\n\t\t[removeMutation],\n\t);\n\n\treturn {\n\t\tstatusQuery,\n\t\tstatus: statusQuery.data,\n\t\tmodels: statusQuery.data?.models ?? [],\n\t\tdefaultModel: statusQuery.data?.defaultModel ?? null,\n\t\tisAvailable: statusQuery.data?.available ?? false,\n\t\tactiveInstallModelId,\n\t\tinstallProgress,\n\t\tinstallStreamError,\n\t\tinstallModel,\n\t\tremoveModel,\n\t\tinstallMutation,\n\t\tremoveMutation,\n\t\topenInstallStream,\n\t\tcloseInstallStream,\n\t};\n}\n"
81
82
  ],
82
- "mappings": "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",
83
- "debugId": "37EDDE4EE625A54D64756E2164756E21",
83
+ "mappings": ";AAAA;;;ACAA;AAAA,mBACC;AAAA,kBACA;AAAA,gBACA;AAAA,kBACA;AAAA,mBACA;AAAA,kBACA;AAAA,mBACA;AAAA,uBACA;AAAA,mBACA;AAAA,qBACA;AAAA,qBACA;AAAA,kBACA;AAAA,0BACA;AAAA,0BACA;AAAA;AAAA;;;ACdD;;;ACkBA,SAAS,iBAAiB,GAA8B;AAAA,EACvD,IAAI,OAAO,WAAW;AAAA,IAAa,OAAO;AAAA,EAC1C,OAAO;AAAA;AAGD,SAAS,eAAe,CAAC,KAAsB;AAAA,EACrD,MAAM,MAAM,kBAAkB;AAAA,EAC9B,IAAI,CAAC,KAAK;AAAA,IAAe,OAAO;AAAA,EAC3B,IAAI,cAAc,GAAG;AAAA,EAC1B,OAAO;AAAA;AAGD,SAAS,wBAAwB,CACvC,cACU;AAAA,EACV,MAAM,MAAM,kBAAkB;AAAA,EAC9B,IAAI,CAAC,KAAK;AAAA,IAAwB,OAAO;AAAA,EACpC,IAAI,uBAAuB,YAAY;AAAA,EAC5C,OAAO;AAAA;AAGD,SAAS,uBAAuB,GAA6B;AAAA,EACnE,MAAM,MAAM,kBAAkB;AAAA,EAC9B,IAAI,CAAC,KAAK;AAAA,IAAwB,OAAO;AAAA,EACzC,OAAO,IAAI,uBAAuB;AAAA;AAG5B,SAAS,+BAA+B,CAAC,YAA6B;AAAA,EAC5E,MAAM,MAAM,kBAAkB;AAAA,EAC9B,IAAI,CAAC,KAAK;AAAA,IAAuB,OAAO;AAAA,EACnC,IAAI,sBAAsB,UAAU;AAAA,EACzC,OAAO;AAAA;AAGD,SAAS,mBAAmB,CAAC,WAA4B;AAAA,EAC/D,MAAM,MAAM,kBAAkB;AAAA,EAC9B,IAAI,CAAC,KAAK;AAAA,IAAmB,OAAO;AAAA,EAC/B,IAAI,kBAAkB,SAAS;AAAA,EACpC,OAAO;AAAA;AAGD,SAAS,wBAAwB,GAAmB;AAAA,EAC1D,MAAM,MAAM,kBAAkB;AAAA,EAC9B,IAAI,CAAC,KAAK;AAAA,IAAwB,OAAO;AAAA,EACzC,OAAO,IAAI,uBAAuB;AAAA;AAG5B,SAAS,kBAAkB,GAAY;AAAA,EAC7C,OAAO,CAAC,CAAC,kBAAkB,GAAG;AAAA;AAGxB,SAAS,sBAAsB,GAAY;AAAA,EACjD,OAAO,CAAC,CAAC,kBAAkB,GAAG;AAAA;AAGxB,SAAS,iBAAiB,GAAY;AAAA,EAC5C,IAAI,OAAO,WAAW;AAAA,IAAa,OAAO;AAAA,EAC1C,IAAI;AAAA,IACH,OACC,eAAe,UACf,yBAAyB,UACzB,wBAAwB;AAAA,IAExB,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;;;AC1EF,IAAM,mCAAmC;AAEzC,SAAS,mBAAmB,CAAC,OAAuB;AAAA,EAC1D,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,IAAI,CAAC,SAAS;AAAA,IACb,MAAM,IAAI,MAAM,2BAA2B;AAAA,EAC5C;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACH,MAAM,IAAI,IAAI,OAAO;AAAA,IACpB,MAAM;AAAA,IACP,MAAM,IAAI,MAAM,mDAAmD;AAAA;AAAA,EAGpE,IAAI,IAAI,aAAa,WAAW,IAAI,aAAa,UAAU;AAAA,IAC1D,MAAM,IAAI,MAAM,iDAAiD;AAAA,EAClE;AAAA,EAEA,IAAI,OAAO;AAAA,EACX,IAAI,WAAW,IAAI,SAAS,QAAQ,QAAQ,EAAE,KAAK;AAAA,EACnD,OAAO,IAAI,SAAS,EAAE,QAAQ,QAAQ,EAAE;AAAA;AAGzC,SAAS,mBAAmB,GAAuB;AAAA,EAClD,IAAI,OAAO,WAAW;AAAA,IAAa;AAAA,EACnC,IAAI,kBAAkB;AAAA,IAAG;AAAA,EACzB,IAAI;AAAA,IACH,OACC,OAAO,aAAa,QAAQ,gCAAgC,KAAK;AAAA,IAEjE,MAAM;AAAA,IACP;AAAA;AAAA;AAIK,SAAS,8BAA8B,GAAuB;AAAA,EACpE,IAAI,OAAO,WAAW;AAAA,IAAa;AAAA,EAEnC,MAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAAA,EACzD,MAAM,WAAW,OAAO,IAAI,KAAK;AAAA,EACjC,IAAI;AAAA,IAAU,OAAO,oBAAoB,QAAQ;AAAA,EAEjD,MAAM,MAAM;AAAA,EACZ,IAAI,IAAI;AAAA,IAAiB,OAAO,oBAAoB,IAAI,eAAe;AAAA,EACvE,IAAI,IAAI;AAAA,IAAkB,OAAO,oBAAoB,IAAI,gBAAgB;AAAA,EAEzE,MAAM,YAAY,oBAAoB;AAAA,EACtC,IAAI;AAAA,IAAW,OAAO,oBAAoB,SAAS;AAAA,EAEnD;AAAA;AAGM,SAAS,8BAA8B,GAAY;AAAA,EACzD,OAAO,QAAQ,+BAA+B,CAAC;AAAA;AAGzC,SAAS,oBAAoB,CAAC,OAAuB;AAAA,EAC3D,MAAM,UAAU,oBAAoB,KAAK;AAAA,EACzC,IAAI,OAAO,WAAW,aAAa;AAAA,IAClC,MAAM,MAAM;AAAA,IACZ,IAAI,kBAAkB;AAAA,IACtB,IAAI,CAAC,kBAAkB,GAAG;AAAA,MACzB,IAAI;AAAA,QACH,OAAO,aAAa,QAAQ,kCAAkC,OAAO;AAAA,QACpE,MAAM;AAAA,IAGT;AAAA,EACD;AAAA,EACA,OAAO;AAAA;AAGD,SAAS,sBAAsB,GAAG;AAAA,EACxC,IAAI,OAAO,WAAW;AAAA,IAAa;AAAA,EACnC,MAAM,MAAM;AAAA,EACZ,OAAO,IAAI;AAAA,EACX,OAAO,IAAI;AAAA,EACX,IAAI;AAAA,IACH,OAAO,aAAa,WAAW,gCAAgC;AAAA,IAC9D,MAAM;AAAA;AAMT,SAAS,iBAAiB,GAAW;AAAA,EACpC,MAAM,aAAa,+BAA+B;AAAA,EAClD,IAAI,YAAY;AAAA,IACf,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,SAAS,YAAY,KAAK;AAAA,EAChC,IAAI;AAAA,IAAQ,OAAO,oBAAoB,MAAM;AAAA,EAG7C,OAAO;AAAA;AAGD,SAAS,oBAAoB,GAAW;AAAA,EAC9C,OAAO,kBAAkB;AAAA;AAGnB,IAAM,eAAe,kBAAkB;AAEvC,IAAM,SAAS;AAAA,EACrB,YAAY;AACb;;;AF/FA,SAAS,gBAAgB,GAAwB;AAAA,EAChD,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,UAAU,YAAY;AAAA,IACxE,OAAO;AAAA,EACR;AAAA,EACA;AAAA;AAGM,SAAS,mBAAmB,CAAC,OAAwB;AAAA,EAC3D,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,IAAI,SAAS,OAAO,UAAU,UAAU;AAAA,IACvC,MAAM,SAAS;AAAA,IACf,IAAI,OAAO,SAAS,OAAO,OAAO,UAAU,UAAU;AAAA,MACrD,MAAM,aAAa,OAAO;AAAA,MAC1B,IAAI,OAAO,WAAW,YAAY;AAAA,QAAU,OAAO,WAAW;AAAA,IAC/D;AAAA,IACA,IAAI,OAAO,OAAO,UAAU;AAAA,MAAU,OAAO,OAAO;AAAA,IACpD,IAAI,OAAO,OAAO,YAAY;AAAA,MAAU,OAAO,OAAO;AAAA,IACtD,IAAI;AAAA,MACH,OAAO,KAAK,UAAU,KAAK;AAAA,MAC1B,MAAM;AAAA,MACP,OAAO;AAAA;AAAA,EAET;AAAA,EACA,OAAO;AAAA;AAGD,SAAS,kBAAkB,GAAG;AAAA,EACpC,MAAM,UAAU,qBAAqB;AAAA,EACrC,OAAO,UAAU;AAAA,IAChB;AAAA,IACA,SAAS,iBAAiB;AAAA,EAC3B,CAAC;AAAA;AAGF,mBAAmB;AAEZ,SAAS,UAAU,GAAW;AAAA,EACpC,OAAO,qBAAqB;AAAA;AAStB,SAAS,cAAc,CAAC,YAAiC;AAAA,EAC/D,OAAO;AAAA,OACH;AAAA,IACH,OAAO,WAAW,SAAS;AAAA,IAC3B,WACC,OAAO,WAAW,cAAc,WAC7B,IAAI,KAAK,WAAW,SAAS,EAAE,QAAQ,IACvC,WAAW;AAAA,IACf,cACC,OAAO,WAAW,iBAAiB,WAChC,IAAI,KAAK,WAAW,YAAY,EAAE,QAAQ,IAC1C,WAAW;AAAA,IACf,cACC,OAAO,WAAW,iBAAiB,WAChC,IAAI,KAAK,WAAW,YAAY,EAAE,QAAQ,IAC1C,WAAW;AAAA,IACf,UACC,OAAO,WAAW,aAAa,WAC5B,IAAI,KAAK,WAAW,QAAQ,EAAE,QAAQ,IACtC,WAAW;AAAA,EAChB;AAAA;AAGM,SAAS,cAAc,CAAC,YAAiC;AAAA,EAC/D,OAAO;AAAA,OACH;AAAA,IACH,WACC,OAAO,WAAW,cAAc,WAC7B,IAAI,KAAK,WAAW,SAAS,EAAE,QAAQ,IACvC,WAAW;AAAA,IACf,aAAa,WAAW,cACrB,OAAO,WAAW,gBAAgB,WACjC,IAAI,KAAK,WAAW,WAAW,EAAE,QAAQ,IACzC,WAAW,cACZ;AAAA,EACJ;AAAA;;;ADjEM,IAAM,gBAAgB;AAAA,OACtB,YAAW,GAAuB;AAAA,IACvC,MAAM,OAAO,MAAM,KAAK,gBAAgB,EAAE,OAAO,IAAI,CAAC;AAAA,IACtD,OAAO,KAAK;AAAA;AAAA,OAGP,gBAAe,CACpB,SAAoE,CAAC,GAC7C;AAAA,IACxB,QAAQ,QAAQ,IAAI,SAAS,GAAG,gBAAgB;AAAA,IAChD,MAAM,WAAW,MAAM,gBAAgB;AAAA,MACtC,OAAO,cAAc,EAAE,OAAO,QAAQ,YAAY,IAAI,EAAE,OAAO,OAAO;AAAA,IACvE,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,MAAM,OAAO,SAAS;AAAA,IACtB,OAAO;AAAA,MACN,QAAQ,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,eAAe,CAAe,CAAC;AAAA,MACrE,SAAS,MAAM,WAAW;AAAA,MAC1B,YAAY,MAAM,cAAc;AAAA,IACjC;AAAA;AAAA,OAGK,cAAa,CAAC,MAA8C;AAAA,IACjE,MAAM,WAAW,MAAM,iBAAiB;AAAA,MACvC,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,IAAI,CAAC,SAAS;AAAA,MAAM,MAAM,IAAI,MAAM,sCAAsC;AAAA,IAC1E,OAAO,eAAe,SAAS,IAAkB;AAAA;AAAA,OAG5C,WAAU,CAAC,WAAqC;AAAA,IACrD,MAAM,WAAW,MAAM,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IAC5D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,eAAe,SAAS,IAAkB;AAAA;AAAA,OAG5C,cAAa,CAClB,WACA,MACmB;AAAA,IACnB,MAAM,WAAW,MAAM,iBAAiB;AAAA,MACvC,MAAM,EAAE,UAAU;AAAA,MAElB,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,eAAe,SAAS,IAAkB;AAAA;AAAA,OAG5C,kBAAiB,CAAC,WAAqC;AAAA,IAC5D,MAAM,WAAW,MAAM,qBAAqB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IACnE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,eAAe,SAAS,IAAkB;AAAA;AAAA,OAG5C,cAAa,CAAC,WAAkD;AAAA,IACrE,MAAM,WAAW,MAAM,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IAC/D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,cAAa,CAAC,WAKjB;AAAA,IACF,MAAM,WAAW,MAAM,wBAAwB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IACtE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,MAAM,OAAO,SAAS;AAAA,IACtB,IAAI,CAAC,MAAM,WAAW,CAAC,MAAM,WAAW;AAAA,MACvC,MAAM,IAAI,MAAM,+BAA+B;AAAA,IAChD;AAAA,IACA,OAAO;AAAA,MACN,SAAS,eAAe,KAAK,OAAqB;AAAA,MAClD,WAAW,OAAO,KAAK,SAAS;AAAA,MAChC,iBAAiB,OAAO,KAAK,eAAe;AAAA,MAC5C,SAAS,OAAO,KAAK,WAAW,EAAE;AAAA,IACnC;AAAA;AAAA,OAGK,aAAY,CAAC,WAAkD;AAAA,IACpE,MAAM,WAAW,MAAM,gBAAgB;AAAA,MACtC,MAAM,EAAE,UAAU;AAAA,MAClB,MAAM,CAAC;AAAA,IACR,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,aAAY,CACjB,WACA,YACwE;AAAA,IACxE,MAAM,WAAW,MAAM,gBAAgB;AAAA,MACtC,MAAM,EAAE,UAAU;AAAA,MAClB,MAAM,CAAC;AAAA,IACR,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,yBAAyB;AAAA,IAC7D,OAAO,SAAS;AAAA;AAAA,OAOX,cAAa,CAAC,WAIjB;AAAA,IACF,MAAM,WAAW,MAAM,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IACjE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,2BAA2B;AAAA,IAE/D,OAAO,SAAS;AAAA;AAAA,OAGX,gBAAe,CACpB,WACA,WAME;AAAA,IACF,MAAM,WAAW,MAAM,mBAAmB;AAAA,MACzC,MAAM,EAAE,WAAW,UAAU;AAAA,IAC9B,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,6BAA6B;AAAA,IAEjE,OAAO,SAAS;AAAA;AAAA,OAGX,qBAAoB,CACzB,WACA,WAOE;AAAA,IACF,MAAM,WAAW,MAAM,wBAAwB;AAAA,MAC9C,MAAM,EAAE,WAAW,UAAU;AAAA,IAC9B,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OASX,YAAW,CAAC,WAAuC;AAAA,IACxD,MAAM,WAAW,MAAM,gBAAgB,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;AAAA,IAClE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,QAAQ,SAAS,QAAQ,CAAC,GAAG,IAAI,cAAc;AAAA;AAAA,OAG1C,YAAW,CAChB,WACA,MAC+B;AAAA,IAC/B,MAAM,WAAW,MAAM,iBAAiB;AAAA,MACvC,MAAM,EAAE,IAAI,UAAU;AAAA,MACtB,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,EAGjB,YAAY,CAAC,WAA2B;AAAA,IACvC,OAAO,sBAAsB,EAAE,SAAS,WAAW,GAAG,UAAU,CAAC;AAAA;AAAA,OAG5D,aAAY,CACjB,WACA,WACmD;AAAA,IACnD,MAAM,WAAW,MAAM,gBAAgB;AAAA,MACtC,MAAM,EAAE,WAAW,UAAU;AAAA,IAC9B,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAElB;;;AIpOA;AAAA,kBACC;AAAA,gBACA;AAAA,kBACA;AAAA,gBACA;AAAA,kBACA;AAAA,kBACA;AAAA,iBACA;AAAA,mBACA;AAAA,2BACA;AAAA,iBACA;AAAA,iBACA;AAAA,4BACA;AAAA,iBACA;AAAA,mBACA;AAAA,kBACA;AAAA,qBACA;AAAA,qBACA;AAAA,uBACA;AAAA,qBACA;AAAA;AAkBM,IAAM,WAAW;AAAA,OACjB,YAAW,GAAoD;AAAA,IACpE,MAAM,WAAW,MAAM,eAAe;AAAA,MACrC,MAAM,CAAC;AAAA,IACR,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,aAAY,GAA+B;AAAA,IAChD,MAAM,WAAW,MAAM,gBAAgB;AAAA,IACvC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,WAAU,CACf,MACA,SAAkB,OACS;AAAA,IAC3B,MAAM,WAAW,MAAM,cAAc;AAAA,MACpC,OAAO,EAAE,MAAM,QAAQ,SAAS,SAAS,QAAQ;AAAA,IAClD,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,mBAAkB,CACvB,MACA,SAAS,OACkB;AAAA,IAC3B,MAAM,WAAW,MAAM,cAAc;AAAA,MACpC,OAAO;AAAA,QACN;AAAA,QACA,QAAQ,SAAS,SAAS;AAAA,QAC1B,UAAU;AAAA,MACX;AAAA,IACD,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,sBAAqB,CAC1B,WAC4C;AAAA,IAC5C,MAAM,WAAW,MAAM,yBAAyB;AAAA,MAC/C,MAAM,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,IACpC,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,WAAU,CAAC,OAA4C;AAAA,IAC5D,MAAM,WAAW,MAAM,cAAc;AAAA,MAEpC,MAAM,EAAE,MAAM;AAAA,IACf,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,aAAY,CAAC,OAA8C;AAAA,IAChE,MAAM,WAAW,MAAM,gBAAgB;AAAA,MAEtC,MAAM,EAAE,MAAM;AAAA,IACf,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,aAAY,CAAC,OAAkD;AAAA,IACpE,MAAM,WAAW,MAAM,gBAAgB;AAAA,MAEtC,MAAM,EAAE,MAAM;AAAA,IACf,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,YAAW,CAAC,OAAiD;AAAA,IAClE,MAAM,WAAW,MAAM,eAAe;AAAA,MAErC,MAAM,EAAE,MAAM;AAAA,IACf,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,cAAa,CAAC,SAA6C;AAAA,IAChE,MAAM,WAAW,MAAM,iBAAiB;AAAA,MAEvC,MAAM,EAAE,QAAQ;AAAA,IACjB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,aAAY,GAA2B;AAAA,IAC5C,MAAM,WAAW,MAAM,gBAAgB;AAAA,IACvC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,YAAW,GAA6B;AAAA,IAC7C,MAAM,WAAW,MAAM,eAAe;AAAA,MAErC,MAAM,CAAC;AAAA,IACR,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,YAAW,GAA6B;AAAA,IAC7C,MAAM,WAAW,MAAM,eAAe;AAAA,MAErC,MAAM,CAAC;AAAA,IACR,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,oBAAmB,CACxB,QACmC;AAAA,IACnC,MAAM,WAAW,MAAM,0BAA0B;AAAA,MAChD,MAAM,EAAE,OAAO;AAAA,IAChB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,WAAU,GAA6B;AAAA,IAC5C,MAAM,WAAW,MAAM,iBAAiB;AAAA,IACxC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc,MAAM;AAAA;AAAA,OAGhC,UAAS,CACd,MACA,KACyC;AAAA,IACzC,MAAM,WAAW,MAAM,gBAAgB;AAAA,MAEtC,MAAM,EAAE,MAAM,IAAI;AAAA,IACnB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,aAAY,CAAC,MAA4C;AAAA,IAC9D,MAAM,WAAW,MAAM,mBAAmB;AAAA,MAEzC,MAAM,EAAE,KAAK;AAAA,IACd,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,gBAAe,GAAmC;AAAA,IACvD,MAAM,WAAW,MAAM,mBAAmB;AAAA,IAC1C,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,eAAc,CAAC,QAA6C;AAAA,IACjE,MAAM,WAAW,MAAM,qBAAqB;AAAA,MAE3C,MAAM,EAAE,OAAO;AAAA,IAChB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAAA,OAG1B,gBAAe,CACpB,MACA,SACmD;AAAA,IACnD,MAAM,WAAW,MAAM,mBAAmB;AAAA,MACzC,MAAM;AAAA,QACL;AAAA,WACI,SAAS,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,WAC5D,SAAS,aAAa,YACvB,EAAE,UAAU,QAAQ,SAAS,IAC7B,CAAC;AAAA,MAEL;AAAA,IACD,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAQ,SAAS,MAAc;AAAA;AAKjC;;;ACzPA;AAAA,eACC;AAAA,uBACA;AAAA,kBACA;AAAA,qBACA;AAAA,cACA;AAAA,oBACA;AAAA,iBACA;AAAA,iBACA;AAAA,4BACA;AAAA,oBACA;AAAA,4BACA;AAAA,4BACA;AAAA;AA6CM,IAAM,cAAc;AAAA,OACpB,UAAS,GAqBZ;AAAA,IACF,MAAM,WAAW,MAAM,aAAa;AAAA,IACpC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,gBAAe,GAAqC;AAAA,IACzD,MAAM,WAAW,MAAM,mBAAmB;AAAA,IAC1C,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,SAAQ,CAAC,MAAyC;AAAA,IACvD,MAAM,WAAW,MAAM,YAAY,EAAE,MAAM,EAAE,OAAO,KAAK,EAAE,CAAC;AAAA,IAC5D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,eAAc,GAAoC;AAAA,IACvD,MAAM,WAAW,MAAM,kBAAkB;AAAA,IACzC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,YAAW,CAChB,MACA,OAC+B;AAAA,IAC/B,MAAM,WAAW,MAAM,eAAe;AAAA,MACrC,MAAM,EAAE,OAAO,KAAK;AAAA,MACpB,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,YAAW,CAChB,MACA,QAA4B,SACG;AAAA,IAC/B,MAAM,WAAW,MAAM,eAAe;AAAA,MACrC,MAAM,EAAE,OAAO,KAAK;AAAA,MACpB,OAAO,EAAE,MAAM;AAAA,IAChB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,UAAS,CAAC,YAkBb;AAAA,IACF,MAAM,WAAW,MAAM,qBAAqB;AAAA,MAE3C,MAAM,EAAE,UAAU,WAAkB;AAAA,IACrC,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,aAAY,GAA+B;AAAA,IAChD,MAAM,WAAW,MAAM,gBAAgB;AAAA,IACvC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,uBAAsB,CAAC,MAS1B;AAAA,IACF,MAAM,WAAW,MAAM,0BAA0B;AAAA,MAChD,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAQX,uBAAsB,CAC3B,UACA,MAUkD;AAAA,IAClD,MAAM,WAAW,MAAM,0BAA0B;AAAA,MAEhD,MAAM,EAAE,SAA0B;AAAA,MAElC,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,uBAAsB,CAC3B,UACkD;AAAA,IAClD,MAAM,WAAW,MAAM,0BAA0B;AAAA,MAEhD,MAAM,EAAE,SAA0B;AAAA,IACnC,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,eAAc,CAAC,MAsClB;AAAA,IACF,MAAM,WAAW,MAAM,kBAAkB;AAAA,MAExC,MAAM,EAAE,OAAO,aAAa,KAAK;AAAA,IAClC,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAElB;;;AC3QA;AAAA,eACC;AAAA,iBACA;AAAA,iBACA;AAAA,cACA;AAAA,qBACA;AAAA;AAKM,IAAM,aAAa;AAAA,OACnB,UAAS,GAAG;AAAA,IACjB,MAAM,WAAW,MAAM,aAAa;AAAA,IACpC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAQX,YAAW,CAAC,QAAQ,IAAI;AAAA,IAC7B,MAAM,WAAW,MAAM,eAAe,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AAAA,IAC7D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAQX,YAAW,CAAC,UAAU,KAWzB;AAAA,IACF,MAAM,WAAW,MAAM,eAAe;AAAA,MACrC,OAAO,EAAE,MAAM,QAAQ;AAAA,IACxB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,gBAAe,CAAC,UAKnB;AAAA,IACF,MAAM,WAAW,MAAM,YAAY;AAAA,MAClC,OAAO,EAAE,MAAM,SAAS;AAAA,IACzB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,gBAAe,CAAC,WAAkD;AAAA,IACvE,MAAM,WAAW,MAAM,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IACjE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAElB;;;ACxEA;AAAA,kBACC;AAAA,kBACA;AAAA,sBACA;AAAA,oBACA;AAAA,kBACA;AAAA,eACA;AAAA;AAaM,IAAM,gBAAgB;AAAA,OACtB,aAAY,CACjB,WACA,MACwB;AAAA,IACxB,MAAM,WAAW,MAAM,gBAAgB;AAAA,MACtC,MAAM,EAAE,UAAU;AAAA,MAElB,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,aAAY,CAAC,WAAkD;AAAA,IACpE,MAAM,WAAW,MAAM,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IAC9D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,iBAAgB,CAAC,WAAmD;AAAA,IACzE,MAAM,WAAW,MAAM,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IAClE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,eAAc,CAAC,WAAyC;AAAA,IAC7D,MAAM,WAAW,MAAM,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IAChE,IAAI,SAAS;AAAA,MAAO,OAAO,EAAE,QAAQ,MAAM;AAAA,IAC3C,OAAO,SAAS;AAAA;AAAA,OAGX,aAAY,CAAC,WAAkD;AAAA,IACpE,MAAM,WAAW,MAAM,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IAC9D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,YAAW,CAAC,WAAiD;AAAA,IAClE,MAAM,WAAW,MAAM,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IAC3D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAElB;;;AC9DA;AAAA,oBACC;AAAA,uBACA;AAAA,eACA;AAAA,gBACA;AAAA,kBACA;AAAA,oBACA;AAAA,oBACA;AAAA,eACA;AAAA,0BACA;AAAA;AAqDM,IAAM,aAAa;AAAA,OACnB,UAAS,GAA+B;AAAA,IAC7C,MAAM,WAAW,MAAM,aAAa;AAAA,IACpC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,eAAc,CAAC,WAAmD;AAAA,IACvE,MAAM,WAAW,MAAM,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,IAChE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,kBAAiB,CACtB,WACA,MAC0B;AAAA,IAC1B,MAAM,WAAW,MAAM,qBAAqB;AAAA,MAC3C,MAAM,EAAE,UAAU;AAAA,MAClB,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,WAAU,CACf,QACA,MAC0B;AAAA,IAC1B,MAAM,WAAW,MAAM,cAAc;AAAA,MACpC,MAAM,EAAE,OAAO;AAAA,MACf,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,aAAY,CAAC,QAAgB,OAA0C;AAAA,IAC5E,MAAM,WAAW,MAAM,gBAAgB;AAAA,MACtC,MAAM,EAAE,OAAO;AAAA,MACf,MAAM,EAAE,MAAM;AAAA,IACf,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,eAAc,CACnB,QACA,QACA,MAK8B;AAAA,IAC9B,MAAM,WAAW,MAAM,kBAAkB;AAAA,MACxC,MAAM,EAAE,QAAQ,OAAO;AAAA,MACvB,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,eAAc,CACnB,QACA,QAC0B;AAAA,IAC1B,MAAM,WAAW,MAAM,kBAAkB,EAAE,MAAM,EAAE,QAAQ,OAAO,EAAE,CAAC;AAAA,IACrE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,UAAS,CAAC,QAAyC;AAAA,IACxD,MAAM,WAAW,MAAM,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAAA,IACxD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,qBAAoB,CACzB,WACA,QACqC;AAAA,IACrC,MAAM,WAAW,MAAM,wBAAwB;AAAA,MAC9C,MAAM,EAAE,UAAU;AAAA,MAClB,OAAO,SAAS,EAAE,OAAO,IAAI;AAAA,IAC9B,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAElB;;;ACvJA;AAAA,qBACC;AAAA,yBACA;AAAA;AAGM,IAAM,gBAAgB;AAAA,OACtB,gBAAe,CACpB,WACA,QACA,UAC8D;AAAA,IAC9D,MAAM,WAAW,MAAM,mBAAmB;AAAA,MAEzC,MAAM,EAAE,IAAI,UAAU;AAAA,MAEtB,MAAM,EAAE,QAAQ,UAAU,UAAU;AAAA,IACrC,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,8BAA8B;AAAA,IAElE,OAAO,SAAS;AAAA;AAAA,OAGX,oBAAmB,CAAC,WASvB;AAAA,IACF,MAAM,WAAW,MAAM,uBAAuB;AAAA,MAE7C,MAAM,EAAE,IAAI,UAAU;AAAA,IACvB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,OAAO,EAAE,IAAI,OAAO,SAAS,CAAC,EAAE;AAAA,IAEpD,OAAO,SAAS;AAAA;AAElB;;;ACxCA;AAAA,0BACC;AAAA,yBACA;AAAA,8BACA;AAAA,yBACA;AAAA,2BACA;AAAA,yBACA;AAAA,8BACA;AAAA,yBACA;AAAA,2BACA;AAAA,uBACA;AAAA,iBACA;AAAA,qBACA;AAAA;AAIM,IAAM,kBAAkB;AAAA,OACxB,qBAAoB,GAiDhB;AAAA,IACT,IAAI;AAAA,MACH,MAAM,WAAW,MAAM,wBAAwB;AAAA,MAC/C,IAAI,SAAS;AAAA,QAAO,OAAO;AAAA,MAE3B,OAAO,SAAS;AAAA,MACf,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA,OAIH,oBAAmB,GAItB;AAAA,IACF,IAAI;AAAA,MACH,MAAM,WAAW,MAAM,uBAAuB;AAAA,MAC9C,IAAI,SAAS;AAAA,QAAO,OAAO,EAAE,YAAY,MAAM;AAAA,MAE/C,OAAO,SAAS;AAAA,MACf,MAAM;AAAA,MACP,OAAO,EAAE,YAAY,MAAM;AAAA;AAAA;AAAA,OAIvB,yBAAwB,CAC7B,UAAgC,WAKvB;AAAA,IACT,IAAI;AAAA,MACH,MAAM,WAAW,MAAM,4BAA4B;AAAA,QAClD,OAAO,EAAE,QAAQ;AAAA,MAClB,CAAC;AAAA,MACD,IAAI,SAAS;AAAA,QAAO,OAAO;AAAA,MAE3B,OAAO,SAAS;AAAA,MACf,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA,OAIH,sBAAqB,CAAC,QASlB;AAAA,IACT,IAAI;AAAA,MACH,MAAM,WAAW,MAAM,yBAAyB;AAAA,QAC/C,OAAO,EAAE,OAAO;AAAA,MACjB,CAAC;AAAA,MACD,IAAI,SAAS;AAAA,QAAO,OAAO;AAAA,MAE3B,OAAO,SAAS;AAAA,MACf,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA,OAIH,oBAAmB,CACxB,QACA,YAQE;AAAA,IACF,MAAM,WAAW,MAAM,uBAAuB;AAAA,MAC7C,MAAM,EAAE,QAAQ,WAAW;AAAA,IAC5B,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,kBAAiB,CACtB,WACA,QACgD;AAAA,IAChD,MAAM,WAAW,MAAM,qBAAqB;AAAA,MAC3C,MAAM,EAAE,WAAW,OAAO;AAAA,IAC3B,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,YAAW,CAChB,WACA,QACgC;AAAA,IAChC,MAAM,WAAW,MAAM,eAAe;AAAA,MACrC,MAAM,EAAE,WAAW,OAAO;AAAA,IAC3B,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,gBAAe,CAAC,WAOnB;AAAA,IACF,IAAI;AAAA,MACH,MAAM,WAAW,MAAM,mBAAmB;AAAA,QACzC,OAAO,EAAE,UAAU;AAAA,MACpB,CAAC;AAAA,MACD,IAAI,SAAS;AAAA,QAAO,OAAO,EAAE,YAAY,MAAM;AAAA,MAE/C,OAAO,SAAS;AAAA,MACf,MAAM;AAAA,MACP,OAAO,EAAE,YAAY,MAAM;AAAA;AAAA;AAAA,OAIvB,oBAAmB,CAAC,YAKhB;AAAA,IACT,IAAI;AAAA,MACH,MAAM,WAAW,MAAM,uBAAuB;AAAA,QAC7C,OAAO,EAAE,WAAW;AAAA,MACrB,CAAC;AAAA,MACD,IAAI,SAAS;AAAA,QAAO,OAAO;AAAA,MAE3B,OAAO,SAAS;AAAA,MACf,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA,OAIH,yBAAwB,CAAC,QAMrB;AAAA,IACT,IAAI;AAAA,MACH,MAAM,WAAW,MAAM,4BAA4B;AAAA,QAClD,OAAO,EAAE,OAAO;AAAA,MACjB,CAAC;AAAA,MACD,IAAI,SAAS;AAAA,QAAO,OAAO;AAAA,MAE3B,OAAO,SAAS;AAAA,MACf,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA,OAIH,oBAAmB,CAAC,QAOvB;AAAA,IACF,MAAM,WAAW,MAAM,uBAAuB;AAAA,MAC7C,MAAM,EAAE,OAAO;AAAA,IAChB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,sBAAqB,CAAC,QAQzB;AAAA,IACF,MAAM,WAAW,MAAM,yBAAyB;AAAA,MAC/C,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAElB;;;ACzQA;AAAA,mBACC;AAAA,2BACA;AAAA,4BACA;AAAA,4BACA;AAAA,uBACA;AAAA,oBACA;AAAA,wBACA;AAAA,iBACA;AAAA,uBACA;AAAA,2BACA;AAAA,0BACA;AAAA,4BACA;AAAA,2BACA;AAAA,yBACA;AAAA,wBACA;AAAA,2BACA;AAAA,sBACA;AAAA,8BACA;AAAA,2BACA;AAAA,sBACA;AAAA;AAKM,IAAM,YAAY;AAAA,OAClB,cAAa,GAuBhB;AAAA,IACF,MAAM,WAAW,MAAM,iBAAiB;AAAA,IACxC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,sBAAqB,GAIxB;AAAA,IACF,MAAM,WAAW,MAAM,yBAAyB;AAAA,IAChD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,uBAAsB,CAAC,YAG1B;AAAA,IACF,MAAM,WAAW,MAAM,0BAA0B;AAAA,MAChD,MAAM,EAAE,WAAW;AAAA,IACpB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,uBAAsB,GAIzB;AAAA,IACF,MAAM,WAAW,MAAM,0BAA0B;AAAA,IACjD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,YAAW,CAChB,UACA,QACkD;AAAA,IAClD,MAAM,WAAW,MAAM,qBAAqB;AAAA,MAC3C,MAAM,EAAE,SAAS;AAAA,MACjB,MAAM,EAAE,OAAO;AAAA,IAChB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,eAAc,CACnB,UACkD;AAAA,IAClD,MAAM,WAAW,MAAM,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAAA,IAC/D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,mBAAkB,GAAkC;AAAA,IACzD,MAAM,WAAW,MAAM,sBAAsB;AAAA,IAC7C,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,EAGjB,gBAAgB,CAAC,UAAkB,MAAuB;AAAA,IACzD,MAAM,UAAU,GAAG,WAAW,aAAa;AAAA,IAC3C,IAAI;AAAA,MAAM,OAAO,GAAG,gBAAgB;AAAA,IACpC,OAAO;AAAA;AAAA,OAGF,YAAW,CAChB,UACA,MACgE;AAAA,IAChE,MAAM,WAAW,MAAM,eAAe;AAAA,MACrC,MAAM,EAAE,SAAS;AAAA,MAEjB,MAAM,EAAE,KAAK;AAAA,IACd,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,kBAAiB,CACtB,UACA,MACA,WACkD;AAAA,IAClD,MAAM,WAAW,MAAM,qBAAqB;AAAA,MAC3C,MAAM,EAAE,SAAS;AAAA,MACjB,MAAM,EAAE,MAAM,UAAU;AAAA,IACzB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,sBAAqB,GAKxB;AAAA,IACF,MAAM,WAAW,MAAM,yBAAyB;AAAA,IAChD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,qBAAoB,CACzB,WACwE;AAAA,IACxE,MAAM,WAAW,MAAM,wBAAwB;AAAA,MAC9C,MAAM,EAAE,UAAU;AAAA,IACnB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,uBAAsB,GAKzB;AAAA,IACF,MAAM,WAAW,MAAM,0BAA0B;AAAA,IACjD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,sBAAqB,CAC1B,WACwE;AAAA,IACxE,MAAM,WAAW,MAAM,yBAAyB;AAAA,MAC/C,MAAM,EAAE,UAAU;AAAA,IACnB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,oBAAmB,GAKtB;AAAA,IACF,MAAM,WAAW,MAAM,uBAAuB;AAAA,IAC9C,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,mBAAkB,CACvB,WACwE;AAAA,IACxE,MAAM,WAAW,MAAM,sBAAsB;AAAA,MAC5C,MAAM,EAAE,UAAU;AAAA,IACnB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,sBAAqB,GAIxB;AAAA,IACF,MAAM,WAAW,MAAM,yBAAyB;AAAA,IAChD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,iBAAgB,CAAC,OAOpB;AAAA,IACF,MAAM,WAAW,MAAM,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAAA,IAC9D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,yBAAwB,GAO3B;AAAA,IACF,MAAM,WAAW,MAAM,4BAA4B;AAAA,IACnD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,sBAAqB,GAiBxB;AAAA,IACF,MAAM,WAAW,MAAM,yBAAyB;AAAA,IAChD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IAEvE,OAAO,SAAS;AAAA;AAAA,OAGX,iBAAgB,CAAC,UAAkD;AAAA,IACxE,MAAM,WAAW,MAAM,oBAAoB;AAAA,MAE1C,MAAM,EAAE,SAAS;AAAA,IAClB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAElB;;;ACrSA;AAAA,qBACC;AAAA,wBACA;AAAA,gBACA;AAAA,cACA;AAAA,oBACA;AAAA,kBACA;AAAA;AAoCM,IAAM,cAAc;AAAA,OACpB,WAAU,GAAwC;AAAA,IACvD,MAAM,WAAW,MAAM,cAAc;AAAA,IACrC,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,SAAQ,CAAC,MAAoC;AAAA,IAClD,MAAM,WAAW,MAAM,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,IACrD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,cAAa,CAAC,MAAmD;AAAA,IACtE,MAAM,WAAW,MAAM,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,IAC3D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,oBAAmB,CACxB,MACA,UAC6C;AAAA,IAC7C,MAAM,WAAW,MAAM,gBAAgB;AAAA,MACtC,MAAM,EAAE,MAAM,SAAS;AAAA,IACxB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,gBAAe,GAAkC;AAAA,IACtD,MAAM,WAAW,MAAM,mBAAmB;AAAA,IAC1C,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,OAGX,mBAAkB,CAAC,OAIS;AAAA,IACjC,MAAM,WAAW,MAAM,sBAAsB,EAAE,MAAM,MAAM,CAAC;AAAA,IAC5D,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAElB;;;ACvFA;AAAA,mBACC;AAAA,yBACA;AAAA;AAiBM,IAAM,aAAa;AAAA,OACnB,cAAa,GAAwB;AAAA,IAC1C,QAAQ,MAAM,UAAU,MAAM,iBAAiB;AAAA,IAC/C,IAAI;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,KAAK,CAAC;AAAA,IACrD,IAAI,CAAC;AAAA,MAAM,MAAM,IAAI,MAAM,qCAAqC;AAAA,IAChE,OAAO;AAAA;AAAA,OAEF,oBAAmB,GAAwB;AAAA,IAChD,QAAQ,MAAM,UAAU,MAAM,uBAAuB;AAAA,IACrD,IAAI;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,KAAK,CAAC;AAAA,IACrD,IAAI,CAAC;AAAA,MAAM,MAAM,IAAI,MAAM,4CAA4C;AAAA,IACvE,OAAO;AAAA;AAET;;;AChCA;AAAA,wBACC;AAAA,2BACA;AAAA,yBACA;AAAA,0BACA;AAAA,4BACA;AAAA;AAkFD,SAAS,gBAAgB,CAAC,OAAqC;AAAA,EAC9D,OAAO;AAAA;AAGR,SAAS,YAAY,CAAC,OAAuC;AAAA,EAC5D,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,gBAAgB,IAAI,CAAC;AAAA;AAG9D,SAAS,qBAAqB,CAAC,OAAuB;AAAA,EACrD,MAAM,UAAU,WAAW,EAAE,QAAQ,QAAQ,EAAE;AAAA,EAC/C,OAAO,GAAG,+BAA+B,mBAAmB,KAAK;AAAA;AAG3D,IAAM,iBAAiB;AAAA,OACvB,mBAAkB,GAAqC;AAAA,IAC5D,MAAM,WAAW,MAAM,sBAAsB;AAAA,IAC7C,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,MAAM,OAAO,SAAS;AAAA,IAGtB,OAAO;AAAA,SACH;AAAA,MACH,QAAQ,aAAa,KAAK,MAAM;AAAA,IACjC;AAAA;AAAA,OAGK,oBAAmB,GAAqC;AAAA,IAC7D,MAAM,WAAW,MAAM,uBAAuB;AAAA,IAC9C,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,MAAM,OAAO,SAAS;AAAA,IACtB,OAAO,EAAE,QAAQ,aAAa,KAAK,MAAM,EAAE;AAAA;AAAA,OAGtC,sBAAqB;AAAA,IAC1B;AAAA,IACA;AAAA,KACsE;AAAA,IACtE,MAAM,WAAW,MAAM,yBAAyB;AAAA,MAC/C,MAAM,EAAE,MAAM;AAAA,MACd,MAAM,EAAE,MAAM;AAAA,IACf,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,MAAM,OAAO,SAAS;AAAA,IACtB,OAAO,EAAE,OAAO,iBAAiB,KAAK,KAAK,EAAE;AAAA;AAAA,OAGxC,qBAAoB,CACzB,OACwC;AAAA,IACxC,MAAM,WAAW,MAAM,wBAAwB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAAA,IAClE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,MAAM,OAAO,SAAS;AAAA,IACtB,OAAO;AAAA,MACN,SAAS,KAAK;AAAA,MACd,OAAO,iBAAiB,KAAK,KAAK;AAAA,IACnC;AAAA;AAAA,OAGK,uBAAsB,CAC3B,QAAqC,CAAC,GACI;AAAA,IAC1C,MAAM,WAAW,MAAM,0BAA0B,EAAE,MAAM,MAAM,CAAC;AAAA,IAChE,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,IACvE,OAAO,SAAS;AAAA;AAAA,EAGjB,mCAAmC;AACpC;;;AC1JA;AAAA,6BACC;AAAA,wBACA;AAAA;AAGM,IAAM,mBAAmB;AAAA,OACzB,kBAAiB,CACtB,WACA,UACA,OACiE;AAAA,IACjE,MAAM,WAAW,MAAM,sBAAsB;AAAA,MAC5C,MAAM,EAAE,IAAI,UAAU;AAAA,MACtB,MAAM,EAAE,UAAU,MAAM;AAAA,IACzB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,+BAA+B;AAAA,IACnE,OAAO,SAAS;AAAA;AAAA,OAGX,kBAAiB,CACtB,WACA,UACiE;AAAA,IACjE,MAAM,WAAW,MAAM,sBAAsB;AAAA,MAC5C,MAAM,EAAE,IAAI,UAAU;AAAA,MACtB,MAAM,EAAE,UAAU,WAAW,KAAK;AAAA,IACnC,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,+BAA+B;AAAA,IACnE,OAAO,SAAS;AAAA;AAAA,OAGX,uBAAsB,CAAC,WAU1B;AAAA,IACF,MAAM,WAAW,MAAM,2BAA2B;AAAA,MACjD,MAAM,EAAE,IAAI,UAAU;AAAA,IACvB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,qCAAqC;AAAA,IACzE,OAAO,SAAS;AAAA;AAElB;;;ACZA,MAAM,UAAU;AAAA,EACf,cAAc,cAAc;AAAA,EAC5B,kBAAkB,cAAc;AAAA,EAChC,gBAAgB,cAAc;AAAA,EAC9B,aAAa,cAAc;AAAA,EAC3B,gBAAgB,cAAc;AAAA,EAC9B,oBAAoB,cAAc;AAAA,EAClC,gBAAgB,cAAc;AAAA,EAC9B,gBAAgB,cAAc;AAAA,EAC9B,eAAe,cAAc;AAAA,EAC7B,eAAe,cAAc;AAAA,EAC7B,gBAAgB,cAAc;AAAA,EAC9B,kBAAkB,cAAc;AAAA,EAChC,uBAAuB,cAAc;AAAA,EACrC,cAAc,cAAc;AAAA,EAC5B,cAAc,cAAc;AAAA,EAC5B,eAAe,cAAc;AAAA,EAC7B,eAAe,cAAc;AAAA,EAE7B,cAAc,SAAS;AAAA,EACvB,eAAe,SAAS;AAAA,EACxB,aAAa,SAAS;AAAA,EACtB,qBAAqB,SAAS;AAAA,EAC9B,wBAAwB,SAAS;AAAA,EACjC,aAAa,SAAS;AAAA,EACtB,eAAe,SAAS;AAAA,EACxB,eAAe,SAAS;AAAA,EACxB,cAAc,SAAS;AAAA,EACvB,gBAAgB,SAAS;AAAA,EACzB,eAAe,SAAS;AAAA,EACxB,cAAc,SAAS;AAAA,EACvB,cAAc,SAAS;AAAA,EACvB,sBAAsB,SAAS;AAAA,EAC/B,aAAa,SAAS;AAAA,EACtB,YAAY,SAAS;AAAA,EACrB,eAAe,SAAS;AAAA,EACxB,kBAAkB,SAAS;AAAA,EAC3B,iBAAiB,SAAS;AAAA,EAC1B,kBAAkB,SAAS;AAAA,EAE3B,YAAY,YAAY;AAAA,EACxB,kBAAkB,YAAY;AAAA,EAC9B,WAAW,YAAY;AAAA,EACvB,iBAAiB,YAAY;AAAA,EAC7B,cAAc,YAAY;AAAA,EAC1B,cAAc,YAAY;AAAA,EAC1B,YAAY,YAAY;AAAA,EACxB,eAAe,YAAY;AAAA,EAC3B,yBAAyB,YAAY;AAAA,EACrC,yBAAyB,YAAY;AAAA,EACrC,yBAAyB,YAAY;AAAA,EACrC,iBAAiB,YAAY;AAAA,EAE7B,YAAY,WAAW;AAAA,EACvB,cAAc,WAAW;AAAA,EACzB,cAAc,WAAW;AAAA,EACzB,kBAAkB,WAAW;AAAA,EAC7B,kBAAkB,WAAW;AAAA,EAE7B,eAAe,cAAc;AAAA,EAC7B,eAAe,cAAc;AAAA,EAC7B,mBAAmB,cAAc;AAAA,EACjC,iBAAiB,cAAc;AAAA,EAC/B,eAAe,cAAc;AAAA,EAC7B,cAAc,cAAc;AAAA,EAE5B,iBAAiB,WAAW;AAAA,EAC5B,YAAY,WAAW;AAAA,EACvB,oBAAoB,WAAW;AAAA,EAC/B,aAAa,WAAW;AAAA,EACxB,eAAe,WAAW;AAAA,EAC1B,iBAAiB,WAAW;AAAA,EAC5B,iBAAiB,WAAW;AAAA,EAC5B,YAAY,WAAW;AAAA,EACvB,uBAAuB,WAAW;AAAA,EAElC,kBAAkB,cAAc;AAAA,EAChC,sBAAsB,cAAc;AAAA,EACpC,oBAAoB,iBAAiB;AAAA,EACrC,oBAAoB,iBAAiB;AAAA,EACrC,yBAAyB,iBAAiB;AAAA,EAE1C,uBAAuB,gBAAgB;AAAA,EACvC,sBAAsB,gBAAgB;AAAA,EACtC,2BAA2B,gBAAgB;AAAA,EAC3C,wBAAwB,gBAAgB;AAAA,EACxC,sBAAsB,gBAAgB;AAAA,EACtC,oBAAoB,gBAAgB;AAAA,EACpC,cAAc,gBAAgB;AAAA,EAC9B,kBAAkB,gBAAgB;AAAA,EAClC,sBAAsB,gBAAgB;AAAA,EACtC,2BAA2B,gBAAgB;AAAA,EAC3C,sBAAsB,gBAAgB;AAAA,EACtC,wBAAwB,gBAAgB;AAAA,EAExC,gBAAgB,UAAU;AAAA,EAC1B,wBAAwB,UAAU;AAAA,EAClC,yBAAyB,UAAU;AAAA,EACnC,yBAAyB,UAAU;AAAA,EACnC,cAAc,UAAU;AAAA,EACxB,iBAAiB,UAAU;AAAA,EAC3B,qBAAqB,UAAU;AAAA,EAC/B,mBAAmB,UAAU;AAAA,EAC7B,cAAc,UAAU;AAAA,EACxB,oBAAoB,UAAU;AAAA,EAC9B,wBAAwB,UAAU;AAAA,EAClC,uBAAuB,UAAU;AAAA,EACjC,yBAAyB,UAAU;AAAA,EACnC,wBAAwB,UAAU;AAAA,EAClC,sBAAsB,UAAU;AAAA,EAChC,qBAAqB,UAAU;AAAA,EAC/B,wBAAwB,UAAU;AAAA,EAClC,mBAAmB,UAAU;AAAA,EAC7B,2BAA2B,UAAU;AAAA,EACrC,wBAAwB,UAAU;AAAA,EAClC,mBAAmB,UAAU;AAAA,EAE7B,aAAa,YAAY;AAAA,EACzB,WAAW,YAAY;AAAA,EACvB,gBAAgB,YAAY;AAAA,EAC5B,sBAAsB,YAAY;AAAA,EAClC,kBAAkB,YAAY;AAAA,EAC9B,qBAAqB,YAAY;AAAA,EAEjC,gBAAgB,WAAW;AAAA,EAC3B,sBAAsB,WAAW;AAAA,EAEjC,qBAAqB,eAAe;AAAA,EACpC,sBAAsB,eAAe;AAAA,EACrC,wBAAwB,eAAe;AAAA,EACvC,uBAAuB,eAAe;AAAA,EACtC,yBAAyB,eAAe;AAAA,EACxC,oCACC,eAAe;AACjB;AAEO,IAAM,YAAY,IAAI;;;AjBvKtB,SAAS,SAAS,GAAG;AAAA,EAC3B,OAAO,SAAS;AAAA,IACf,UAAU,CAAC,QAAQ;AAAA,IACnB,SAAS,MAAM,UAAU,UAAU;AAAA,IACnC,WAAW;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,SAAS,CAAC,UAAmB;AAAA,EAC5C,OAAO,SAAS;AAAA,IACf,UAAU,CAAC,UAAU,QAAQ;AAAA,IAC7B,SAAS,MAAO,WAAW,UAAU,UAAU,QAAQ,IAAI;AAAA,IAC3D,SAAS,CAAC,CAAC;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,YAAY,GAAG;AAAA,EAC9B,OAAO,SAAS;AAAA,IACf,UAAU,CAAC,UAAU,KAAK;AAAA,IAC1B,SAAS,MAAM,UAAU,aAAa;AAAA,EACvC,CAAC;AAAA;AAGK,SAAS,iBAAiB,GAAG;AAAA,EACnC,MAAM,cAAc,eAAe;AAAA,EAEnC,OAAO,YAAY;AAAA,IAClB,YAAY,CAAC,SAkBP,UAAU,eAAe,IAAI;AAAA,IACnC,UAAU,OAAO,SAAS;AAAA,MACzB,MAAM,YAAY,cAAc,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAAA,MAExD,MAAM,iBAAiB,YAAY,aAAyB,CAAC,QAAQ,CAAC;AAAA,MACtE,IAAI,gBAAgB;AAAA,QACnB,MAAM,iBAAiB,OAAO,YAC7B,OAAO,QAAQ,IAAI,EAAE,OACpB,EAAE,KAAK,WAAW,QAAQ,WAAW,UAAU,SAChD,CACD;AAAA,QAEA,YAAY,aAAyB,CAAC,QAAQ,GAAG;AAAA,aAC7C;AAAA,UACH,UAAU;AAAA,eACN,eAAe;AAAA,eACf;AAAA,UACJ;AAAA,QACD,CAAC;AAAA,MACF;AAAA,MAEA,OAAO,EAAE,eAAe;AAAA;AAAA,IAEzB,SAAS,CAAC,QAAQ,OAAO,YAAY;AAAA,MACpC,IAAI,SAAS,gBAAgB;AAAA,QAC5B,YAAY,aAAa,CAAC,QAAQ,GAAG,QAAQ,cAAc;AAAA,MAC5D;AAAA;AAAA,IAED,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAAA;AAAA,EAExD,CAAC;AAAA;;AkBjFF;AAaA,IAAM,sBAAsB;AAC5B,IAAM,sBAAmC;AAAA,EACxC,SAAS;AAAA,EACT,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,kBAAkB;AACnB;AAEA,SAAS,aAAa,CAAC,YAA4B;AAAA,EAClD,MAAM,UAAU,WAAW,KAAK;AAAA,EAChC,IAAI,CAAC,WAAW,YAAY,qBAAqB;AAAA,IAChD,OAAO,IAAI;AAAA,EACZ;AAAA,EACA,OAAO,IAAI,QAAQ,WAAW,KAAK,MAAK,QAAQ;AAAA;AAGjD,SAAS,eAAe,CAAC,YAAoB;AAAA,EAC5C,IAAI,OAAO,aAAa,aAAa;AAAA,IACpC;AAAA,EACD;AAAA,EACA,SAAS,gBAAgB,MAAM,YAC9B,sBACA,cAAc,UAAU,CACzB;AAAA,EACA,SAAS,gBAAgB,QAAQ,iBAAiB;AAAA,EAClD,IAAI,gCAAgC,UAAU,GAAG;AAAA,IAChD;AAAA,EACD;AAAA,EACA,IAAI,OAAO,SAAS,OAAO,KAAK;AAAA,IAC/B,OAAO,OAAO,YACb,EAAE,MAAM,4BAA4B,WAAW,GAC/C,GACD;AAAA,EACD;AAAA;AAGM,SAAS,cAAc,GAAG;AAAA,EAChC,QAAQ,MAAM,YAAW,UAAU;AAAA,EACnC,MAAM,iBAAiB,kBAAkB;AAAA,EAEzC,MAAM,sBAAsB,QAC3B,OAAO;AAAA,IACN,SAAS,SAAQ,UAAU,WAAW,oBAAoB;AAAA,IAC1D,eACC,SAAQ,UAAU,iBAAiB,oBAAoB;AAAA,IACxD,YACC,SAAQ,UAAU,YAAY,KAAK,KAAK,oBAAoB;AAAA,IAC7D,YACC,SAAQ,UAAU,cAAc,oBAAoB;AAAA,IACrD,eACC,SAAQ,UAAU,iBAAiB,oBAAoB;AAAA,IACxD,kBACC,SAAQ,UAAU,oBAClB,oBAAoB;AAAA,EACtB,IACA;AAAA,IACC,SAAQ,UAAU;AAAA,IAClB,SAAQ,UAAU;AAAA,IAClB,SAAQ,UAAU;AAAA,IAClB,SAAQ,UAAU;AAAA,IAClB,SAAQ,UAAU;AAAA,IAClB,SAAQ,UAAU;AAAA,EACnB,CACD;AAAA,EAEA,UAAU,MAAM;AAAA,IACf,gBAAgB,oBAAoB,UAAU;AAAA,KAC5C,CAAC,oBAAoB,UAAU,CAAC;AAAA,EAEnC,MAAM,oBAAoB,YACzB,CAAC,YAAkC;AAAA,IAClC,MAAM,cAAoC,CAAC;AAAA,IAE3C,IAAI,QAAQ,YAAY,WAAW;AAAA,MAClC,YAAY,UAAU,QAAQ;AAAA,IAC/B;AAAA,IACA,IAAI,QAAQ,kBAAkB,WAAW;AAAA,MACxC,YAAY,gBAAgB,QAAQ;AAAA,IACrC;AAAA,IACA,IAAI,QAAQ,eAAe,WAAW;AAAA,MACrC,YAAY,aACX,QAAQ,WAAW,KAAK,KAAK;AAAA,IAC/B;AAAA,IACA,IAAI,QAAQ,eAAe,WAAW;AAAA,MACrC,YAAY,aAAa,QAAQ;AAAA,IAClC;AAAA,IACA,IAAI,QAAQ,kBAAkB,WAAW;AAAA,MACxC,YAAY,gBAAgB,QAAQ;AAAA,IACrC;AAAA,IACA,IAAI,QAAQ,qBAAqB,WAAW;AAAA,MAC3C,YAAY,mBAAmB,QAAQ;AAAA,IACxC;AAAA,IAEA,IAAI,OAAO,KAAK,WAAW,EAAE,WAAW,GAAG;AAAA,MAC1C;AAAA,IACD;AAAA,IAEA,eAAe,OAAO,KAAK,aAAa,OAAO,SAAS,CAAC;AAAA,KAE1D,CAAC,cAAc,CAChB;AAAA,EAEA,OAAO,QACN,OAAO,EAAE,aAAa,qBAAqB,kBAAkB,IAC7D,CAAC,qBAAqB,iBAAiB,CACxC;AAAA;;ACxHD,qBAAS;AAGF,SAAS,QAAQ,CAAC,UAAiD,CAAC,GAAG;AAAA,EAC7E,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,SAAS,QAAQ,SAAS,EAAE;AAAA,IACvC,SAAS,YAAY;AAAA,MACpB,MAAM,SAAS,MAAM,UAAU,YAAY,QAAQ,SAAS,EAAE;AAAA,MAC9D,OAAO;AAAA;AAAA,IAER,SAAS,QAAQ,WAAW;AAAA,IAC5B,WAAW;AAAA,IACX,sBAAsB;AAAA,IACtB,OAAO;AAAA,EACR,CAAC;AAAA;;ACdF,qBAAS,0BAAU,gCAAa;;;ACAhC,mBAAS;;;ACAT,mBAAS;;;ACAT,mBAAS;;;ACAT,mBAAS;;;ACAT,mBAAS;;;ACAT,mBAAS;;;ACAT,mBAAS;;;ACAT,mBAAS;;;ACAT;AAsKA,SAAS,aAAa,CAAC,MAAsB;AAAA,EAC5C,OAAO,KAAK,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA;AAGjC,SAAS,mBAAmB,CAAC,MAAsB;AAAA,EAClD,OAAO,KACL,KAAK,EACL,QAAQ,QAAQ,EAAE,EAClB,QAAQ,QAAQ,EAAE,EAClB,QAAQ,SAAS,EAAE,EACnB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,QAAQ,EAAE;AAAA;AAGrB,SAAS,gBAAgB,CAAC,MAAc,OAAwB;AAAA,EAC/D,MAAM,iBAAiB,oBAAoB,IAAI;AAAA,EAC/C,MAAM,kBAAkB,oBAAoB,KAAK;AAAA,EACjD,OACC,mBAAmB,mBACnB,eAAe,SAAS,IAAI,iBAAiB,KAC7C,gBAAgB,SAAS,IAAI,gBAAgB;AAAA;AAI/C,SAAS,SAAS,CAAC,MAAsB;AAAA,EACxC,OAAO,QAAQ,oBAAoB,IAAI;AAAA;AAGxC,SAAS,YAAY,CAAC,MAAuC;AAAA,EAC5D,OAAO,WAAW;AAAA;AAGnB,SAAS,eAAe,GAAW;AAAA,EAClC,OAAO,mBAAmB,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAAA;AAG3E,SAAS,UAAU,CAAC,KAA4B;AAAA,EAC/C,OAAO,IAAI,SAAS,YAAY,YAAY;AAAA;AAG7C,SAAS,iBAAiB,CACzB,MACA,MACA,cACgB;AAAA,EAChB,MAAM,OAAO,KAAK,MAAM,YAAY,EAAE,KAAK,CAAC,QAAQ,WAAW,GAAG,MAAM,IAAI;AAAA,EAC5E,IAAI;AAAA,IAAM,OAAO,KAAK;AAAA,EACtB,MAAM,WAAW,CAAC,GAAG,IAAI,EACvB,MAAM,GAAG,YAAY,EACrB,QAAQ,EACR,KAAK,CAAC,QAAQ,WAAW,GAAG,MAAM,IAAI;AAAA,EACxC,OAAO,UAAU,MAAM;AAAA;AAGxB,SAAS,qBAAqB,CAC7B,OACA,UACS;AAAA,EACT,OAAO,MAAM,eAAe,aAAa,MAAM,qBAC5C,MAAM,qBACN;AAAA;AAGJ,SAAS,SAAS,CAAC,MAAmB,KAA6B;AAAA,EAClE,MAAM,gBAAgB,KAAK,UAAU,CAAC,SAAS,KAAK,OAAO,IAAI,EAAE;AAAA,EACjE,IAAI,kBAAkB,IAAI;AAAA,IACzB,OAAO,CAAC,GAAG,MAAM,GAAG;AAAA,EACrB;AAAA,EAEA,MAAM,OAAO,CAAC,GAAG,IAAI;AAAA,EACrB,KAAK,iBAAiB;AAAA,EACtB,OAAO;AAAA;AAGR,SAAS,kBAAkB,CAC1B,UACmC;AAAA,EACnC,OACC,aAAa,iBACb,aAAa,UACb,aAAa;AAAA;AAIf,SAAS,eAAe,CACvB,UACA,SACU;AAAA,EACV,IAAI,CAAC;AAAA,IAAU,OAAO;AAAA,EACtB,IAAI,QAAQ,UAAU,SAAS,QAAQ;AAAA,IACtC,OAAO,QAAQ,QAAQ,UAAU,SAAS,WAAW,QAAQ,MAAM;AAAA,EACpE;AAAA,EACA,IAAI,QAAQ,WAAW,eAAe,SAAS,WAAW,aAAa;AAAA,IACtE,OAAO;AAAA,EACR;AAAA,EACA,IAAI,CAAC,QAAQ,SAAS,CAAC,SAAS;AAAA,IAAO,OAAO,SAAS,WAAW;AAAA,EAClE,OACC,QAAQ,UAAU,SAAS,SAC3B,QAAQ,MAAM,WAAW,SAAS,KAAK,KACvC,SAAS,MAAM,WAAW,QAAQ,KAAK;AAAA;AAIzC,SAAS,iBAAiB,CACzB,UACA,UACuB;AAAA,EACvB,IAAI,CAAC,UAAU;AAAA,IAAQ,OAAO;AAAA,EAC9B,IAAI,CAAC,UAAU;AAAA,IAAQ,OAAO;AAAA,EAC9B,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA;AAGrE,SAAS,iBAAiB,CAAC,SAAyB;AAAA,EACnD,OAAO,QAAQ,WAAW,IAAI,IAAI,QAAQ,MAAM;AAAA,CAAI,EAAE;AAAA;AAGvD,SAAS,YAAY,CACpB,SACA,YACS;AAAA,EACT,OAAO,GAAG,QAAQ,YAAY,QAAQ,UAAU,GAAG,oBAAoB,UAAU,KAAK,QAAQ,SAAS,QAAQ,WAAW;AAAA;AAG3H,SAAS,eAAe,CACvB,SACA,YACA,UACqC;AAAA,EACrC,IAAI,QAAQ,WAAW;AAAA,IAAS,OAAO;AAAA,EACvC,MAAM,KAAK,aAAa,SAAS,UAAU;AAAA,EAC3C,IAAI,QAAQ,aAAa,SAAS;AAAA,IACjC,MAAM,UAAU,QAAQ;AAAA,IACxB,IAAI,YAAY;AAAA,MAAW,OAAO;AAAA,IAClC,OAAO;AAAA,MACN;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA,MAChB,WAAW,MAAM,KAChB,EAAE,QAAQ,kBAAkB,OAAO,EAAE,GACrC,CAAC,GAAG,UAAU,CAAC,QAAQ,GAAG,KAAc,CACzC;AAAA,MACA,WAAW,UAAU,aAAa,KAAK,IAAI;AAAA,IAC5C;AAAA,EACD;AAAA,EAEA,MAAM,YAA2D,QAC/D,kBAAkB,SACjB,QAAQ,mBACR,QAAQ,cAAc,SACrB,QAAQ,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAChD,UAAU;AAAA,EACd,IAAI,CAAC,WAAW;AAAA,IAAQ,OAAO;AAAA,EAC/B,OAAO;AAAA,IACN;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ,QAAQ;AAAA,IAChB,QAAQ,QAAQ;AAAA,IAChB;AAAA,IACA,WAAW,UAAU,aAAa,KAAK,IAAI;AAAA,EAC5C;AAAA;AAGD,SAAS,gBAAgB,CACxB,aACA,YACuC;AAAA,EACvC,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EACxB,MAAM,WAAW,eAAe,CAAC;AAAA,EACjC,MAAM,QAAQ,SAAS,UAAU,CAAC,SAAS,KAAK,OAAO,WAAW,EAAE;AAAA,EACpE,IAAI,UAAU;AAAA,IAAI,OAAO,CAAC,GAAG,UAAU,UAAU;AAAA,EACjD,MAAM,OAAO,CAAC,GAAG,QAAQ;AAAA,EACzB,KAAK,SAAS;AAAA,EACd,OAAO;AAAA;AAGD,IAAM,qBAAqB,OAAwB,CAAC,SAAS;AAAA,EACnE,MAAM,CAAC;AAAA,EACP,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EAEpB,0BAA0B,MACzB,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,MAAM,mBAAmB,EAAE;AAAA,EAEnE,uBAAuB,CAAC,YAAY,IAAI,EAAE,oBAAoB,QAAQ,CAAC;AAAA,EAEvE,eAAe,CAAC,SACf,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,cACL,SAAS,YAAY,MAAM,qBAAqB,MAAM;AAAA,IACvD,OAAO;AAAA,MACN,YAAY;AAAA,MACZ,aAAa,eAAe;AAAA,IAC7B;AAAA,GACA;AAAA,EAEF,gBAAgB,CAAC,MAAM,WAAW;AAAA,IACjC,MAAM,KAAK,YAAY,SAAS,WAAW,cAAc;AAAA,IACzD,IAAI,CAAC,WAAW;AAAA,MACf,MAAM,UAAU,MAAM,MAAM;AAAA,QAC3B;AAAA,QACA,MAAM;AAAA,QACN,OAAO,cAAc,IAAI;AAAA,QACzB;AAAA,QACA;AAAA,MACD,CAAC;AAAA,MACD,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACd,EAAE;AAAA;AAAA,EAGH,wBAAwB,CAAC,MAAM,eAAe;AAAA,IAC7C,MAAM,KAAK,qBAAqB;AAAA,IAChC,IAAI,CAAC,WAAW;AAAA,MACf,MAAM,UAAU,MAAM,MAAM;AAAA,QAC3B;AAAA,QACA,MAAM;AAAA,QACN,OAAO,cAAc,IAAI;AAAA,QACzB;AAAA,QACA;AAAA,QACA,wBAAwB,KAAK,IAAI,GAAG,WAAW,SAAS,CAAC;AAAA,MAC1D,CAAC;AAAA,MACD,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACd,EAAE;AAAA;AAAA,EAGH,aAAa,CAAC,SAAS;AAAA,IACtB,MAAM,KAAK,UAAU,IAAI;AAAA,IACzB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,mBAAmB,MAAM,KAAK,OACnC,CAAC,QACA,IAAI,SAAS,UAAU,iBAAiB,IAAI,MAAM,IAAI,CACxD;AAAA,MACA,MAAM,eACL,iBAAiB,KAAK,CAAC,QAAQ,IAAI,OAAO,MAAM,WAAW,KAC3D,iBAAiB;AAAA,MAClB,MAAM,WAAW,cAAc,MAAM;AAAA,MACrC,MAAM,aAAa,cAAc,QAAQ;AAAA,MACzC,MAAM,OAAO,MAAM,KAAK,OACvB,CAAC,QACA,GACE,IAAI,SAAS,kBAAkB,IAAI,SAAS,WAC7C,IAAI,OAAO,YACX,iBAAiB,IAAI,MAAM,IAAI,EAElC;AAAA,MACA,OAAO;AAAA,QACN,MAAM,UAAU,MAAM;AAAA,UACrB,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,OAAO,cAAc,SAAS,cAAc,UAAU;AAAA,UACtD,MAAM;AAAA,UACN,WAAW,cAAc;AAAA,UACzB,aAAa,cAAc;AAAA,UAC3B,cAAc,cAAc;AAAA,UAC5B,cAAc,cAAc;AAAA,QAC7B,CAAC;AAAA,QACD,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACd;AAAA,KACA;AAAA;AAAA,EAGF,iBAAiB,CAAC,MAAM,cAAc;AAAA,IACrC,MAAM,KAAK,UAAU,IAAI;AAAA,IACzB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,mBAAmB,MAAM,KAAK,OACnC,CAAC,QACA,IAAI,SAAS,UAAU,iBAAiB,IAAI,MAAM,IAAI,CACxD;AAAA,MACA,MAAM,eACL,iBAAiB,KAAK,CAAC,QAAQ,IAAI,OAAO,MAAM,WAAW,KAC3D,iBAAiB;AAAA,MAClB,MAAM,WAAW,cAAc,MAAM;AAAA,MACrC,MAAM,aAAa,cAAc,QAAQ;AAAA,MACzC,MAAM,OAAO,MAAM,KAAK,OACvB,CAAC,QACA,GACE,IAAI,SAAS,kBAAkB,IAAI,SAAS,WAC7C,IAAI,OAAO,YACX,iBAAiB,IAAI,MAAM,IAAI,EAElC;AAAA,MACA,OAAO;AAAA,QACN,MAAM,UAAU,MAAM;AAAA,UACrB,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,OAAO,cAAc,SAAS,cAAc,UAAU;AAAA,UACtD,MAAM;AAAA,UACN;AAAA,UACA,aAAa,cAAc;AAAA,UAC3B,cAAc;AAAA,UACd,cAAc;AAAA,QACf,CAAC;AAAA,QACD,iBAAiB;AAAA,QACjB,aAAa,sBAAsB,OAAO,QAAQ;AAAA,MACnD;AAAA,KACA;AAAA;AAAA,EAGF,oBAAoB,CAAC,YAAY;AAAA,IAChC,MAAM,KAAK,UAAU,QAAQ,IAAI;AAAA,IACjC,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,mBAAmB,MAAM,KAAK,OACnC,CAAC,QACA,IAAI,SAAS,UAAU,iBAAiB,IAAI,MAAM,QAAQ,IAAI,CAChE;AAAA,MACA,MAAM,eACL,iBAAiB,KAAK,CAAC,QAAQ,IAAI,OAAO,MAAM,WAAW,KAC3D,iBAAiB;AAAA,MAClB,MAAM,WAAW,cAAc,MAAM;AAAA,MACrC,MAAM,aAAa,cAAc,QAAQ,QAAQ;AAAA,MACjD,MAAM,WAAW,MAAM,KAAK,KAC3B,CAAC,QACA,IAAI,SAAS,kBACb,iBAAiB,IAAI,MAAM,QAAQ,IAAI,CACzC;AAAA,MACA,MAAM,OAAO,MAAM,KAAK,OACvB,CAAC,QACA,GACE,IAAI,SAAS,kBAAkB,IAAI,SAAS,WAC7C,IAAI,OAAO,aACV,iBAAiB,IAAI,MAAM,QAAQ,IAAI,KACvC,QACC,QAAQ,UACP,cAAc,OACd,IAAI,WAAW,QAAQ,MACzB,GAEJ;AAAA,MACA,IAAI,mBAAmB,QAAQ,QAAQ,GAAG;AAAA,QACzC,MAAM,uBACL,cAAc,iBACb,YAAY,mBAAmB,SAAS,QAAQ,IAC9C,WACA;AAAA,QACJ,MAAM,gBAAgB,gBAAgB,sBAAsB,OAAO;AAAA,QACnE,MAAM,cACL,QAAQ,gBACP,gBACE,sBAAsB,cACrB,sBAAsB,iBACxB,sBAAsB;AAAA,QACzB,MAAM,eAAe,gBACjB,QAAQ,gBAAgB,sBAAsB,eAC/C,kBACA,sBAAsB,cACtB,QAAQ,YACT;AAAA,QACF,MAAM,oBAAoB;AAAA,aACtB;AAAA,UACH,cAAc,QAAQ;AAAA,QACvB;AAAA,QACA,MAAM,qBAAqB,cAAc,aAAa,KACrD,CAAC,gBACA,YAAW,OAAO,aAAa,mBAAmB,UAAU,CAC9D;AAAA,QACA,MAAM,cAAc,iBACnB,cAAc,aACd,gBAAgB,mBAAmB,YAAY,kBAAkB,CAClE;AAAA,QACA,OAAO;AAAA,UACN,MAAM,UAAU,MAAM;AAAA,YACrB,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,OAAO,cAAc,SAAS,cAAc,UAAU;AAAA,YACtD,MAAM;AAAA,YACN,WAAW;AAAA,YACX;AAAA,YACA,cAAc;AAAA,YACd,cAAc;AAAA,cACb,MAAM;AAAA,cACN,UAAU,QAAQ;AAAA,cAClB,QAAQ,QAAQ,UAAU,sBAAsB;AAAA,cAChD;AAAA,cACA,OAAO,QAAQ,SAAS,sBAAsB;AAAA,cAC9C;AAAA,cACA,gBACC,QAAQ,mBACP,gBACE,sBAAsB,iBACtB;AAAA,cACJ,eACC,QAAQ,kBACP,gBACE,sBAAsB,gBACtB;AAAA,cACJ,kBACC,QAAQ,qBACP,gBACE,sBAAsB,mBACtB;AAAA,cACJ,kBACC,QAAQ,qBACP,gBACE,sBAAsB,mBACtB;AAAA,cACJ,mBACC,QAAQ,sBACP,gBACE,sBAAsB,oBACtB;AAAA,cACJ,QAAQ,QAAQ;AAAA,cAChB,OAAO,QAAQ,SAAS,sBAAsB;AAAA,YAC/C;AAAA,UACD,CAAC;AAAA,UACD,iBAAiB;AAAA,UACjB,aAAa,sBAAsB,OAAO,QAAQ;AAAA,QACnD;AAAA,MACD;AAAA,MACA,IAAI,cAAc;AAAA,QACjB,MAAM,uBAAuB,aAAa;AAAA,QAC1C,MAAM,qBAAqB,aAAa,aAAa,KACpD,CAAC,gBAAe,YAAW,OAAO,aAAa,SAAS,UAAU,CACnE;AAAA,QACA,MAAM,cAAc,iBACnB,aAAa,aACb,gBAAgB,SAAS,YAAY,kBAAkB,CACxD;AAAA,QACA,OAAO;AAAA,UACN,MAAM,UAAU,MAAM;AAAA,eAClB;AAAA,YACH,WAAW;AAAA,YACX;AAAA,YACA,cAAc;AAAA,YACd,cAAc;AAAA,cACb,MAAM;AAAA,cACN,UAAU;AAAA,cACV,QAAQ,QAAQ,UAAU,sBAAsB;AAAA,cAChD,SAAS,QAAQ,WAAW,sBAAsB;AAAA,cAClD,aACC,QAAQ,eAAe,sBAAsB;AAAA,cAC9C,QAAQ,QAAQ;AAAA,cAChB,OAAO,QAAQ,SAAS,sBAAsB;AAAA,YAC/C;AAAA,UACD,CAAC;AAAA,UACD,iBAAiB;AAAA,UACjB,aAAa,sBAAsB,OAAO,QAAQ;AAAA,QACnD;AAAA,MACD;AAAA,MACA,MAAM,gBACL,UAAU,aAAa,UAAU,WAAW;AAAA,MAC7C,MAAM,aAAa,gBAAgB,SAAS,QAAQ,IAAI;AAAA,MACxD,OAAO;AAAA,QACN,MAAM,UAAU,MAAM;AAAA,UACrB;AAAA,UACA,MAAM;AAAA,UACN,OAAO,cAAc,QAAQ,IAAI;AAAA,UACjC,MAAM,QAAQ;AAAA,UACd,WAAW;AAAA,UACX,aAAa,aAAa,CAAC,UAAU,IAAI;AAAA,UACzC,cAAc;AAAA,UACd,cAAc;AAAA,YACb,MAAM,QAAQ;AAAA,YACd,UAAU;AAAA,YACV,QAAQ,QAAQ;AAAA,YAChB,SAAS,QAAQ,WAAW,eAAe;AAAA,YAC3C,aAAa,QAAQ,eAAe,eAAe;AAAA,YACnD,QAAQ,QAAQ;AAAA,YAChB,OAAO,QAAQ,SAAS,eAAe;AAAA,UACxC;AAAA,QACD,CAAC;AAAA,QACD,iBAAiB;AAAA,QACjB,aAAa,sBAAsB,OAAO,EAAE;AAAA,MAC7C;AAAA,KACA;AAAA;AAAA,EAGF,kBAAkB,CAAC,OAAO,SAAS;AAAA,IAClC,MAAM,cAAc,QAAQ;AAAA,IAC5B,MAAM,KAAK,cAAc,SAAS;AAAA,IAClC,IAAI,CAAC,WAAW;AAAA,MACf,MAAM,UAAU,MAAM,MAAM;AAAA,QAC3B;AAAA,QACA,MAAM;AAAA,QACN,OAAO,cAAc,WAAW;AAAA,QAChC;AAAA,QACA;AAAA,MACD,CAAC;AAAA,MACD,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACd,EAAE;AAAA;AAAA,EAGH,gBAAgB,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM;AAAA,IAC3C,MAAM,OAAO,QAAQ,QAAQ;AAAA,IAC7B,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,eAAe,SAAS,aAAa,QAAQ,WAAW;AAAA,MAC9D,MAAM,KAAK,eAAe,gBAAgB,IAAI,aAAa,IAAI;AAAA,MAC/D,MAAM,WAAW,MAAM,KAAK,KAC3B,CAAC,QACA,CAAC,gBAAgB,IAAI,SAAS,aAAa,IAAI,OAAO,EACxD;AAAA,MACA,OAAO;AAAA,QACN,MAAM,UAAU,MAAM,MAAM;AAAA,UAC3B;AAAA,UACA,MAAM;AAAA,UACN,OAAO,QAAQ,SAAS,UAAU,SAAS;AAAA,UAC3C,KAAK,OAAO,UAAU,OAAO;AAAA,UAC7B;AAAA,UACA,WAAW,UAAU,aAAa;AAAA,QACnC,CAAC;AAAA,QACD,YAAY;AAAA,QACZ,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACd;AAAA,KACA;AAAA;AAAA,EAGF,qBAAqB,CAAC,IAAI,QACzB,IAAI,CAAC,WAAW;AAAA,IACf,MAAM,MAAM,KAAK,IAAI,CAAC,QACrB,IAAI,OAAO,MAAM,IAAI,SAAS,YAC3B;AAAA,SACG;AAAA,MACH;AAAA,MACA,OAAO,IAAI,SAAS,cAAc,cAAc;AAAA,IACjD,IACC,GACJ;AAAA,EACD,EAAE;AAAA,EAEH,kBAAkB,CAAC,OAClB,IAAI,CAAC,WAAW;AAAA,IACf,MAAM,MAAM,KAAK,IAAI,CAAC,QACrB,IAAI,OAAO,MAAM,IAAI,SAAS,YAC3B,KAAK,KAAK,WAAW,IAAI,YAAY,EAAE,IACvC,GACJ;AAAA,EACD,EAAE;AAAA,EAEH,cAAc,CAAC,OACd,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,MAAM,MAAM,KAAK,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE;AAAA,IACpD,MAAM,OAAO,MAAM,WAAW,GAAG,IAAI,MAAM;AAAA,IAC3C,OAAO;AAAA,MACN,YAAY;AAAA,MACZ,iBAAiB,SAAS,SAAS,KAAK,MAAM;AAAA,MAC9C,oBAAoB,SAAS,YAAY,KAAK,MAAM;AAAA,MACpD,aAAa;AAAA,IACd;AAAA,GACA;AAAA,EAEF,UAAU,CAAC,OACV,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,eAAe,MAAM,KAAK,UAAU,CAAC,QAAQ,IAAI,OAAO,EAAE;AAAA,IAChE,MAAM,aAAa,MAAM,KAAK;AAAA,IAC9B,MAAM,OAAO,MAAM,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,EAAE;AAAA,IACrD,IAAI,aAAa,MAAM;AAAA,IACvB,IAAI,kBAAkB,MAAM;AAAA,IAC5B,IAAI,qBAAqB,MAAM;AAAA,IAE/B,IACC,cACA,WAAW,UAAU,MAAM,UAC3B,oBAAoB,IACnB;AAAA,MACD,kBAAkB,kBAAkB,MAAM,QAAQ,YAAY;AAAA,IAC/D;AAAA,IAEA,IACC,cACA,WAAW,UAAU,MAAM,aAC3B,uBAAuB,IACtB;AAAA,MACD,qBAAqB,kBAAkB,MAAM,WAAW,YAAY;AAAA,IACrE;AAAA,IAEA,IAAI,eAAe,UAAU,CAAC,mBAAmB,oBAAoB;AAAA,MACpE,aAAa;AAAA,IACd;AAAA,IAEA,IAAI,eAAe,aAAa,CAAC,sBAAsB,iBAAiB;AAAA,MACvE,aAAa;AAAA,IACd;AAAA,IAEA,OAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aACC,eAAe,YAAY,qBAAqB;AAAA,IAClD;AAAA,GACA;AAAA,EAEF,iCAAiC,CAAC,IAAI,UACrC,IAAI,CAAC,WAAW;AAAA,IACf,MAAM,MAAM,KAAK,IAAI,CAAC,QACrB,IAAI,OAAO,MAAM,IAAI,SAAS,sBAC3B,KAAK,KAAK,wBAAwB,MAAM,IACxC,GACJ;AAAA,EACD,EAAE;AAAA,EAEH,cAAc,MACb,IAAI;AAAA,IACH,MAAM,CAAC;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,EACrB,CAAC;AACH,EAAE;;;AD7tBK,IAAM,iBAAiB,QAAoB,CAAC,KAAK,SAAS;AAAA,EAChE,YAAY;AAAA,EACZ,QAAQ,CAAC;AAAA,EACT,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,aAAa;AAAA,EAEb,eAAe,MAAM;AAAA,IACpB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,cAAc,CAAC,MAAM;AAAA,MAC3B,IAAI,aAAa;AAAA,QAChB,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,QAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,QAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,QAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,MACxC;AAAA,MACA,OAAO,EAAE,YAAY,YAAY;AAAA,KACjC;AAAA;AAAA,EAGF,eAAe,MAAM;AAAA,IACpB,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,IAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,IAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA;AAAA,EAGzB,iBAAiB,MAAM,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EAEhD,WAAW,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AAAA,EACrC,iBAAiB,GAAG,QAAQ,eAAe,YAAY,mBACtD,IAAI,EAAE,QAAQ,eAAe,YAAY,aAAa,CAAC;AAAA,EAExD,aAAa,CAAC,SAAS;AAAA,IACtB,IAAI,MAAM;AAAA,MACT,mBAAmB,SAAS,EAAE,iBAAiB,MAAM,IAAI;AAAA,MACzD,IAAI,EAAE,eAAe,MAAM,cAAc,MAAM,aAAa,KAAK,CAAC;AAAA,MAClE;AAAA,IACD;AAAA,IACA,IAAI,EAAE,eAAe,MAAM,cAAc,OAAO,aAAa,KAAK,CAAC;AAAA;AAAA,EAGpE,YAAY,CAAC,SAAS;AAAA,IACrB,MAAM,gBAAgB,IAAI,EAAE;AAAA,IAC5B,IAAI,eAAe;AAAA,MAClB,mBAAmB,SAAS,EAAE,iBAAiB,eAAe,IAAI;AAAA,IACnE;AAAA,IACA,IAAI,EAAE,cAAc,MAAM,aAAa,KAAK,CAAC;AAAA;AAAA,EAG9C,aAAa,MAAM,IAAI,EAAE,cAAc,OAAO,aAAa,KAAK,CAAC;AAClE,EAAE;;;ADtDK,IAAM,cAAc,QAAiB,CAAC,SAAS;AAAA,EACrD,YAAY;AAAA,EACZ,SAAS,CAAC;AAAA,EACV,SAAS,IAAI;AAAA,EACb,UAAU,IAAI;AAAA,EACd,eAAe;AAAA,EAEf,eAAe,MAAM;AAAA,IACpB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,cAAc,CAAC,MAAM;AAAA,MAC3B,IAAI,aAAa;AAAA,QAChB,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,QAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,QAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,QAC/C,eAAe,SAAS,EAAE,gBAAgB;AAAA,MAC3C;AAAA,MACA,OAAO,EAAE,YAAY,YAAY;AAAA,KACjC;AAAA;AAAA,EAGF,eAAe,MAAM;AAAA,IACpB,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,IAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,IAC/C,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA;AAAA,EAGzB,iBAAiB,MAAM,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EAEhD,YAAY,CAAC,YAAY,IAAI,EAAE,QAAQ,CAAC;AAAA,EAExC,YAAY,CAAC,MAAM,YAClB,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,OAAO,IAAI,IAAI,MAAM,OAAO;AAAA,IAClC,IAAI;AAAA,MAAS,KAAK,IAAI,IAAI;AAAA,IACrB;AAAA,WAAK,OAAO,IAAI;AAAA,IACrB,OAAO,EAAE,SAAS,KAAK;AAAA,GACvB;AAAA,EAEF,cAAc,CAAC,MAAM,YACpB,IAAI,CAAC,WAAW;AAAA,IACf,SAAS,MAAM,QAAQ,IAAI,CAAC,MAC3B,EAAE,SAAS,OAAO,KAAK,MAAM,QAAQ,IAAI,CAC1C;AAAA,EACD,EAAE;AAAA,EAEH,YAAY,CAAC,MAAM,QAClB,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,OAAO,IAAI,IAAI,MAAM,QAAQ;AAAA,IACnC,IAAI;AAAA,MAAK,KAAK,IAAI,MAAM,GAAG;AAAA,IACtB;AAAA,WAAK,OAAO,IAAI;AAAA,IACrB,OAAO,EAAE,UAAU,KAAK;AAAA,GACxB;AAAA,EAEF,kBAAkB,CAAC,SAAS,IAAI,EAAE,eAAe,KAAK,CAAC;AACxD,EAAE;;;ADxFF,SAAS,eAAe,CAAC,MAAwB;AAAA,EAChD,MAAM,iBAAiB,KAAK,QAAQ,OAAO,GAAG,EAAE,QAAQ,SAAS,EAAE;AAAA,EACnE,MAAM,QAAQ,eAAe,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,EACtD,OAAO,MACL,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,GAAG,UAAU,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA;AAGxD,SAAS,eAAe,CAAC,OAAyB,MAAc;AAAA,EAC/D,MAAM,eAAe,IAAI,IAAI,MAAM,YAAY;AAAA,EAC/C,WAAW,OAAO,gBAAgB,IAAI,GAAG;AAAA,IACxC,aAAa,IAAI,GAAG;AAAA,EACrB;AAAA,EAEA,OAAO;AAAA,IACN,cAAc;AAAA,IACd;AAAA,EACD;AAAA;AAGM,IAAM,sBAAsB,QAAyB,CAAC,SAAS;AAAA,EACrE,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc,IAAI;AAAA,EAElB,eAAe,MAAM;AAAA,IACpB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,cAAc,CAAC,MAAM;AAAA,MAC3B,IAAI,aAAa;AAAA,QAChB,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,QAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,QAC1C,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,MAC3C;AAAA,MACA,OAAO,EAAE,YAAY,YAAY;AAAA,KACjC;AAAA;AAAA,EAEF,eAAe,MAAM;AAAA,IACpB,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,IAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA;AAAA,EAEzB,iBAAiB,MAChB,IAAI;AAAA,IACH,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,cAAc;AAAA,EACf,CAAC;AAAA,EACF,UAAU,CAAC,SAAS;AAAA,IACnB,mBAAmB,SAAS,EAAE,YAAY,IAAI;AAAA,IAC9C,IAAI,CAAC,WAAW;AAAA,SACZ,gBAAgB,OAAO,IAAI;AAAA,MAC9B,cAAc;AAAA,IACf,EAAE;AAAA;AAAA,EAEH,YAAY,CAAC,SAAS,IAAI,CAAC,UAAU,gBAAgB,OAAO,IAAI,CAAC;AAAA,EACjE,aAAa,MACZ,IAAI;AAAA,IACH,cAAc;AAAA,IACd,cAAc;AAAA,EACf,CAAC;AAAA,EACF,WAAW,CAAC,SACX,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,OAAO,IAAI,IAAI,MAAM,YAAY;AAAA,IACvC,IAAI,KAAK,IAAI,IAAI,GAAG;AAAA,MACnB,KAAK,OAAO,IAAI;AAAA,IACjB,EAAO;AAAA,MACN,KAAK,IAAI,IAAI;AAAA;AAAA,IAEd,OAAO,EAAE,cAAc,KAAK;AAAA,GAC5B;AACH,EAAE;;;AD3EK,IAAM,iBAAiB,QAAoB,CAAC,SAAS;AAAA,EAC3D,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EAEV,eAAe,MAAM;AAAA,IACpB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,cAAc,CAAC,MAAM;AAAA,MAC3B,IAAI,aAAa;AAAA,QAChB,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,QAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,QAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,MAC3C;AAAA,MACA,OAAO,EAAE,YAAY,YAAY;AAAA,KACjC;AAAA;AAAA,EAGF,eAAe,MAAM;AAAA,IACpB,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,IAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,IAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA;AAAA,EAGzB,iBAAiB,MAAM,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EAEhD,WAAW,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AAAA,EACrC,QAAQ,CAAC,QAAQ,IAAI,EAAE,IAAI,CAAC;AAAA,EAC5B,WAAW,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AAAA,EACrC,UAAU,CAAC,UAAU,IAAI,EAAE,MAAM,CAAC;AAAA,EAClC,aAAa,CAAC,aAAa,IAAI,EAAE,SAAS,CAAC;AAAA,EAE3C,OAAO,MACN,IAAI;AAAA,IACH,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,EACX,CAAC;AACH,EAAE;;;ADjEK,IAAM,mBAAmB,QAAsB,CAAC,SAAS;AAAA,EAC/D,YAAY;AAAA,EAEZ,eAAe,MAAM;AAAA,IACpB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,cAAc,CAAC,MAAM;AAAA,MAC3B,IAAI,aAAa;AAAA,QAChB,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,QAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,QAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,QAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,MAC3C;AAAA,MACA,OAAO,EAAE,YAAY,YAAY;AAAA,KACjC;AAAA;AAAA,EAEF,eAAe,MAAM,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EAC7C,iBAAiB,MAAM,IAAI,EAAE,YAAY,MAAM,CAAC;AACjD,EAAE;;;ADdK,IAAM,mBAAmB,QAAsB,CAAC,KAAK,SAAS;AAAA,EACpE,YAAY;AAAA,EACZ,yBAAyB;AAAA,EACzB,iBAAiB;AAAA,EAEjB,eAAe,MAAM;AAAA,IACpB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,cAAc,CAAC,MAAM;AAAA,MAC3B,IAAI,aAAa;AAAA,QAChB,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,QAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,QAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,QAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,MAC3C;AAAA,MACA,OAAO,EAAE,YAAY,YAAY;AAAA,KACjC;AAAA;AAAA,EAGF,eAAe,MAAM;AAAA,IACpB,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,IAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,IAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA;AAAA,EAGzB,iBAAiB,MAAM,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EAEhD,uBAAuB,CAAC,OAAO,IAAI,EAAE,yBAAyB,GAAG,CAAC;AAAA,EAElE,oBAAoB,CAAC,OAAO;AAAA,IAC3B,MAAM,kBAAkB,IAAI,EAAE;AAAA,IAC9B,IAAI,oBAAoB,IAAI;AAAA,MAC3B,IAAI;AAAA,QACH,iBAAiB;AAAA,QACjB,yBAAyB;AAAA,MAC1B,CAAC;AAAA,IACF;AAAA;AAAA,EAGD,OAAO,MACN,IAAI;AAAA,IACH,yBAAyB;AAAA,IACzB,iBAAiB;AAAA,EAClB,CAAC;AACH,EAAE;;;AD/CK,IAAM,uBAAuB,QAA0B,CAAC,SAAS;AAAA,EACvE,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,eAAe,CAAC;AAAA,EAChB,wBAAwB;AAAA,EACxB,YAAY;AAAA,EAEZ,eAAe,MAAM;AAAA,IACpB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,cAAc,CAAC,MAAM;AAAA,MAC3B,IAAI,aAAa;AAAA,QAChB,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,QAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,QAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,MAC3C;AAAA,MACA,OAAO,EAAE,YAAY,YAAY;AAAA,KACjC;AAAA;AAAA,EAEF,eAAe,MAAM;AAAA,IACpB,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,IAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,IAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,IACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,IAC1C,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA;AAAA,EAEzB,iBAAiB,MAChB,IAAI;AAAA,IACH,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,eAAe,CAAC;AAAA,IAChB,wBAAwB;AAAA,EACzB,CAAC;AAAA,EACF,UAAU,CAAC,MAAM,eAAe;AAAA,IAC/B,mBAAmB,SAAS,EAAE,uBAAuB,MAAM,UAAU;AAAA,IACrE,IAAI;AAAA,MACH,cAAc;AAAA,MACd,eAAe;AAAA,MACf,wBAAwB,WAAW,SAAS;AAAA,MAC5C,YAAY;AAAA,MACZ,YAAY;AAAA,IACb,CAAC;AAAA;AAAA,EAEF,iBAAiB,CAAC,UAAU,IAAI,EAAE,wBAAwB,MAAM,CAAC;AAAA,EACjE,WAAW,MACV,IAAI;AAAA,IACH,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,eAAe,CAAC;AAAA,IAChB,wBAAwB;AAAA,EACzB,CAAC;AACH,EAAE;;;AD/DF,IAAM,yBAAyB,CAAC,aAAa,UAAU,SAAS;AAEhE,SAAS,mBAAmB,CAC3B,OAAqB,CAAC,GACtB,QAAsB,CAAC,GACtB;AAAA,EACD,IAAI,KAAK,WAAW,MAAM;AAAA,IAAQ,OAAO;AAAA,EAEzC,OAAO,KAAK,MAAM,CAAC,KAAK,UAAU;AAAA,IACjC,MAAM,QAAQ,MAAM;AAAA,IACpB,OACC,IAAI,OAAO,MAAM,MACjB,IAAI,SAAS,MAAM,QACnB,IAAI,SAAS,MAAM,QACnB,IAAI,WAAW,MAAM,UACrB,IAAI,WAAW,MAAM,UACrB,IAAI,YAAY,WAAW,MAAM,YAAY,UAC7C,IAAI,YAAY,MACf,CAAC,MAAM,cAAc,SAAS,MAAM,YAAY,UACjD;AAAA,GAED;AAAA;AAgDK,IAAM,cAAc,QAAiB,CAAC,SAAS;AAAA,EAErD,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,qBAAqB,CAAC;AAAA,EACtB,wBAAwB,CAAC;AAAA,EACzB,iBAAiB,CAAC;AAAA,EAClB,aAAa,CAAC;AAAA,EAGd,eAAe,MAAM;AAAA,IACpB,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,cAAc,CAAC,MAAM;AAAA,MAC3B,IAAI,aAAa;AAAA,QAChB,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,QAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,QAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,QAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,QAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,QACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA,MAC3C;AAAA,MACA,OAAO,EAAE,YAAY,YAAY;AAAA,KACjC;AAAA;AAAA,EAEF,eAAe,MAAM,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EAC7C,iBAAiB,MAChB,IAAI,EAAE,YAAY,OAAO,YAAY,OAAO,cAAc,KAAK,CAAC;AAAA,EAGjE,UAAU,CAAC,MAAM,WAAW;AAAA,IAC3B,mBAAmB,SAAS,EAAE,eAAe,MAAM,MAAM;AAAA,IACzD,IAAI;AAAA,MACH,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,YAAY;AAAA,MACZ,YAAY;AAAA,IACb,CAAC;AAAA;AAAA,EAEF,WAAW,MACV,IAAI;AAAA,IACH,YAAY;AAAA,IACZ,cAAc;AAAA,EACf,CAAC;AAAA,EACF,YAAY,CAAC,MAAM,WAClB,IAAI;AAAA,IACH,cAAc;AAAA,IACd,oBAAoB;AAAA,EACrB,CAAC;AAAA,EAGF,iBAAiB,MAChB,IAAI,CAAC,WAAW;AAAA,IACf,mBAAmB;AAAA,IACnB,iBAAiB,MAAM;AAAA,EACxB,EAAE;AAAA,EACH,2BAA2B,CAAC,cAC3B,IAAI,EAAE,mBAAmB,MAAM,iBAAiB,UAAU,CAAC;AAAA,EAC5D,kBAAkB,MACjB,IAAI,EAAE,mBAAmB,OAAO,iBAAiB,KAAK,CAAC;AAAA,EAGxD,oBAAoB,CAAC,cAAc,IAAI,EAAE,iBAAiB,UAAU,CAAC;AAAA,EACrE,yBAAyB,CAAC,cACzB,IAAI,EAAE,yBAAyB,UAAU,CAAC;AAAA,EAC3C,oBAAoB,CAAC,WAAW,UAC/B,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,eAAe,MAAM,oBAAoB,cAAc,IAAI;AAAA,IACjE,MAAM,kBACL,MAAM,uBAAuB,cAAc,IAAI;AAAA,IAChD,IAAI,UAAU;AAAA,IACd,MAAM,mBAAmB,IAAI,IAAI,YAAY;AAAA,IAC7C,MAAM,sBAAsB,IAAI,IAAI,eAAe;AAAA,IAEnD,WAAW,QAAQ,OAAO;AAAA,MACzB,IAAI,CAAC,iBAAiB,IAAI,IAAI,GAAG;AAAA,QAChC,iBAAiB,IAAI,IAAI;AAAA,QACzB,oBAAoB,IAAI,IAAI;AAAA,QAC5B,UAAU;AAAA,MACX;AAAA,IACD;AAAA,IAEA,IAAI,CAAC;AAAA,MAAS,OAAO;AAAA,IAErB,OAAO;AAAA,MACN,qBAAqB;AAAA,WACjB,MAAM;AAAA,SACR,YAAY;AAAA,MACd;AAAA,MACA,wBAAwB;AAAA,WACpB,MAAM;AAAA,SACR,YAAY;AAAA,MACd;AAAA,IACD;AAAA,GACA;AAAA,EACF,qBAAqB,CAAC,WAAW,SAChC,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,kBACL,MAAM,uBAAuB,cAAc,IAAI;AAAA,IAChD,MAAM,sBAAsB,IAAI,IAAI,eAAe;AAAA,IAEnD,IAAI,oBAAoB,IAAI,IAAI;AAAA,MAAG,oBAAoB,OAAO,IAAI;AAAA,IAC7D;AAAA,0BAAoB,IAAI,IAAI;AAAA,IAEjC,OAAO;AAAA,MACN,wBAAwB;AAAA,WACpB,MAAM;AAAA,SACR,YAAY;AAAA,MACd;AAAA,IACD;AAAA,GACA;AAAA,EACF,uBAAuB,CAAC,WAAW,SAClC,IAAI,CAAC,UAAU;AAAA,IACd,IAAI,oBAAoB,MAAM,gBAAgB,YAAY,IAAI,GAAG;AAAA,MAChE,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,kBAAkB;AAAA,SACpB,MAAM;AAAA,OACR,YAAY;AAAA,IACd;AAAA,IACA,MAAM,cAAc,uBAAuB,QAC1C,CAAC,OAAO,gBAAgB,OAAO,CAAC,CACjC;AAAA,IAEA,OAAO,EAAE,iBAAiB,YAAY;AAAA,GACtC;AACH,EAAE;;;AD3NK,SAAS,YAAY,GAAG;AAAA,EAC9B,MAAM,aAAa,YAAY,CAAC,UAAU,MAAM,UAAU;AAAA,EAE1D,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,OAAO,QAAQ;AAAA,IAC1B,SAAS,MAAM,UAAU,aAAa;AAAA,IAGtC,iBAAiB,aAAa,OAAO;AAAA,IACrC,OAAO;AAAA,IAEP,WAAW;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,UAAU,CAAC,MAAqB,SAAS,OAAO;AAAA,EAC/D,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,OAAO,QAAQ,MAAM,MAAM;AAAA,IACtC,SAAS,MAAO,OAAO,UAAU,WAAW,MAAM,MAAM,IAAI;AAAA,IAC5D,SAAS,CAAC,CAAC;AAAA,IACX,OAAO;AAAA,IAEP,iBAAiB;AAAA,EAClB,CAAC;AAAA;AAGK,SAAS,YAAY,GAAG;AAAA,EAC9B,MAAM,aAAa,YAAY,CAAC,UAAU,MAAM,UAAU;AAAA,EAE1D,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,OAAO,QAAQ;AAAA,IAC1B,SAAS,MAAM,UAAU,aAAa;AAAA,IAEtC,iBAAiB,aAAa,MAAQ;AAAA,IACtC,OAAO;AAAA,IACP,WAAW;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,wBAAwB,CAAC,WAA2B;AAAA,EACnE,OAAO,aAAY;AAAA,IAClB,YAAY,MAAM,UAAU,sBAAsB,aAAa,SAAS;AAAA,EACzE,CAAC;AAAA;AAGK,SAAS,aAAa,GAAG;AAAA,EAC/B,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UAAoB,UAAU,WAAW,KAAK;AAAA,IAC3D,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,eAAe,GAAG;AAAA,EACjC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UAAoB,UAAU,aAAa,KAAK;AAAA,IAC7D,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,eAAe,GAAG;AAAA,EACjC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UAAoB,UAAU,aAAa,KAAK;AAAA,IAC7D,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,cAAc,GAAG;AAAA,EAChC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UAAoB,UAAU,YAAY,KAAK;AAAA,IAC5D,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,gBAAgB,GAAG;AAAA,EAClC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,YAAoB,UAAU,cAAc,OAAO;AAAA,IAChE,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC7D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,cAAc,GAAG;AAAA,EAChC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,MAAM,UAAU,YAAY;AAAA,IACxC,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC7D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,cAAc,GAAG;AAAA,EAChC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,MAAM,UAAU,YAAY;AAAA,IACxC,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC7D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,kBAAkB,GAAG;AAAA,EACpC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,WACZ,UAAU,oBAAoB,MAAM;AAAA,IACrC,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC7D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,UAAU,GAAG;AAAA,EAC5B,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,MAAM,UAAU,YAAY;AAAA,IACxC,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC7D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,aAAa,GAAG;AAAA,EAC/B,MAAM,aAAa,YAAY,CAAC,UAAU,MAAM,UAAU;AAAA,EAE1D,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,OAAO,SAAS;AAAA,IAC3B,SAAS,MAAM,UAAU,WAAW;AAAA,IACpC,SAAS;AAAA,IACT,OAAO;AAAA,IACP,WAAW;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,YAAY,GAAG;AAAA,EAC9B,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,GAAG,MAAM,UACpB,UAAU,UAAU,MAAM,GAAG;AAAA,IAC9B,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA,MAC9D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,eAAe,GAAG;AAAA,EACjC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,SAAiB,UAAU,aAAa,IAAI;AAAA,IACzD,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA,MAC9D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE/D,CAAC;AAAA;AAGK,SAAS,cAAc,CAAC,UAAU,MAAM;AAAA,EAC9C,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,OAAO,UAAU;AAAA,IAC5B,SAAS,MAAM,UAAU,gBAAgB;AAAA,IACzC;AAAA,IACA,OAAO;AAAA,IACP,WAAW;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,iBAAiB,GAAG;AAAA,EACnC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,WAAmB,UAAU,eAAe,MAAM;AAAA,IAC/D,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC7D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC7D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,UAAU,EAAE,CAAC;AAAA;AAAA,EAEjE,CAAC;AAAA;AAGK,SAAS,kBAAkB,GAAG;AAAA,EACpC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,UAKK,UAAU,gBAAgB,MAAM,EAAE,YAAY,SAAS,CAAC;AAAA,IAC9D,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC7D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC7D,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,UAAU,EAAE,CAAC;AAAA;AAAA,EAEjE,CAAC;AAAA;;AUxOF,qBAAS,0BAAU,gCAAa;;;ACAhC,qBAAS;AAUT,IAAM,oBAAgC;AAAA,EACrC,kBAAkB;AAAA,EAClB,gBAAgB,CAAC;AAAA,EACjB,aAAa;AAAA,EACb,WAAW;AACZ;AAEO,SAAS,mBAAmB,CAAC,OAIrB;AAAA,EACd,MAAM,YAAY,MAAM,aAAa,QAAQ,MAAM,gBAAgB;AAAA,EACnE,MAAM,mBAAmB,YAAY,MAAM,mBAAmB;AAAA,EAC9D,MAAM,gBAAgB,QAAQ,gBAAgB;AAAA,EAC9C,MAAM,iBAAiB,gBAAgB,MAAM,iBAAiB,CAAC;AAAA,EAE/D,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,aAAa,eAAe;AAAA,IAC5B,WAAW;AAAA,EACZ;AAAA;AAGM,SAAS,0BAA0B,CACzC,aACA,WACA,WACC;AAAA,EACD,YAAY,aAAyB,CAAC,cAAc,SAAS,GAAG,CAAC,YAAY;AAAA,IAC5E,IAAI,CAAC;AAAA,MAAS,OAAO;AAAA,IACrB,IAAI,CAAC,QAAQ,aAAa,CAAC,QAAQ;AAAA,MAAkB,OAAO;AAAA,IAC5D,IAAI,QAAQ,qBAAqB;AAAA,MAAW,OAAO;AAAA,IACnD,IAAI,QAAQ,eAAe,KAAK,CAAC,SAAS,KAAK,cAAc,SAAS,GAAG;AAAA,MACxE,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,iBAAiB;AAAA,MACtB,GAAG,QAAQ;AAAA,MACX,EAAE,WAAW,UAAU,QAAQ,eAAe,OAAO;AAAA,IACtD;AAAA,IACA,OAAO;AAAA,SACH;AAAA,MACH;AAAA,MACA,aAAa,eAAe;AAAA,IAC7B;AAAA,GACA;AAAA;AAGK,SAAS,aAAa,CAAC,WAA2C;AAAA,EACxE,QAAQ,SAAS,UAAqB;AAAA,IACrC,UAAU,CAAC,cAAc,SAAS;AAAA,IAClC,SAAS,YAAY;AAAA,MACpB,IAAI,CAAC;AAAA,QAAW,OAAO;AAAA,MACvB,MAAM,aAAa,MAAM,UAAU,cAAc,SAAS;AAAA,MAC1D,OAAO,oBAAoB,UAAU;AAAA;AAAA,IAEtC,SAAS,CAAC,CAAC;AAAA,IACX,iBAAiB;AAAA,IACjB,WAAW;AAAA,EACZ,CAAC;AAAA,EAED,OAAO,QAAQ;AAAA;AAGT,SAAS,uBAAuB,CACtC,WACA,WACqE;AAAA,EACrE,MAAM,aAAa,cAAc,SAAS;AAAA,EAE1C,IAAI,CAAC,aAAa,CAAC,YAAY;AAAA,IAC9B,OAAO,EAAE,UAAU,OAAO,WAAW,OAAO,UAAU,KAAK;AAAA,EAC5D;AAAA,EAEA,IAAI,WAAW,qBAAqB,WAAW;AAAA,IAC9C,OAAO,EAAE,UAAU,OAAO,WAAW,MAAM,UAAU,KAAK;AAAA,EAC3D;AAAA,EAEA,MAAM,aAAa,WAAW,eAAe,KAC5C,CAAC,SAAS,KAAK,cAAc,SAC9B;AAAA,EAEA,IAAI,YAAY;AAAA,IACf,OAAO,EAAE,UAAU,MAAM,WAAW,OAAO,UAAU,WAAW,SAAS;AAAA,EAC1E;AAAA,EAEA,OAAO,EAAE,UAAU,OAAO,WAAW,OAAO,UAAU,KAAK;AAAA;;;AClG5D;AAAA;AAAA,iBAEC;AAAA,cACA;AAAA,oBACA;AAAA;AAED,oBAAS;AAST,IAAM,qBAAqB;AAEpB,IAAM,mBAAmB,CAAC,YAAY,MAAM;AAI5C,SAAS,mBAAmB,CAAC,aAAiC;AAAA,EACpE,OAAO,iBAAiB;AAAA,IACvB,UAAU,cACN,CAAC,GAAG,kBAAkB,WAAW,IAClC;AAAA,IACH,SAAS,GAAG,YAAY,QACvB,UAAU,gBAAgB;AAAA,MACzB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,IACD,CAAC;AAAA,IACF,kBAAkB,CAAC,aAAa,SAAS,cAAc;AAAA,IACvD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,EACvB,CAAC;AAAA;AAGK,SAAS,WAAW,CAAC,aAAiC;AAAA,EAC5D,MAAM,QAAQ,oBAAoB,WAAW;AAAA,EAC7C,MAAM,OAAO,SAAmB,MAAM;AAAA,IACrC,IAAI,CAAC,MAAM,MAAM;AAAA,MAAO,OAAO,CAAC;AAAA,IAChC,OAAO,MAAM,KAAK,MAAM,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAAA,KAClD,CAAC,MAAM,IAAI,CAAC;AAAA,EAEf,OAAO;AAAA,IACN;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,IACb,aAAa,MAAM;AAAA,IACnB,eAAe,MAAM;AAAA,IACrB,oBAAoB,MAAM;AAAA,EAC3B;AAAA;AASM,SAAS,UAAU,CAAC,WAAmB;AAAA,EAC7C,QAAQ,MAAM,aAAa,YAAY;AAAA,EACvC,MAAM,SAAS,UAAU,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS;AAAA,EACvD,QAAQ,MAAM,WAAW,UAAS;AAAA,IACjC,UAAU,CAAC,WAAW,SAAS;AAAA,IAC/B,SAAS,MAAM,UAAU,WAAW,SAAS;AAAA,IAC7C,SAAS,QAAQ,SAAS,KAAK,CAAC;AAAA,IAChC,WAAW;AAAA,EACZ,CAAC;AAAA,EACD,OAAO,UAAU;AAAA;AAGX,SAAS,gBAAgB,GAAG;AAAA,EAClC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,SAA+B,UAAU,cAAc,IAAI;AAAA,IACxE,WAAW,CAAC,eAAe;AAAA,MAC1B,YAAY,aACX,kBACA,CAAC,QAAQ;AAAA,QACR,IAAI,CAAC;AAAA,UAAK,OAAO;AAAA,QACjB,MAAM,YAAY,IAAI,MAAM;AAAA,QAC5B,IAAI,CAAC;AAAA,UAAW,OAAO;AAAA,QACvB,OAAO;AAAA,aACH;AAAA,UACH,OAAO;AAAA,YACN,KAAK,WAAW,OAAO,CAAC,YAAY,GAAG,UAAU,KAAK,EAAE;AAAA,YACxD,GAAG,IAAI,MAAM,MAAM,CAAC;AAAA,UACrB;AAAA,QACD;AAAA,OAEF;AAAA,MACA,YAAY,kBAAkB,EAAE,UAAU,iBAAiB,CAAC;AAAA;AAAA,EAE9D,CAAC;AAAA;AAGK,SAAS,gBAAgB,CAAC,WAAmB;AAAA,EACnD,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,SACZ,UAAU,cAAc,WAAW,IAAI;AAAA,IACxC,WAAW,YAAY;AAAA,MACtB,MAAM,YAAY,kBAAkB,EAAE,UAAU,iBAAiB,CAAC;AAAA,MAClE,MAAM,YAAY,kBAAkB,EAAE,UAAU,CAAC,WAAW,SAAS,EAAE,CAAC;AAAA;AAAA,EAE1E,CAAC;AAAA;AAGK,SAAS,mBAAmB,GAAG;AAAA,EACrC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY;AAAA,MACX;AAAA,MACA;AAAA,UAIK,UAAU,cAAc,WAAW,EAAE,SAAS,CAAC;AAAA,IACrD,WAAW,OAAO,mBAAmB;AAAA,MACpC,YAAY,aACX,kBACA,CAAC,QAAQ;AAAA,QACR,IAAI,CAAC;AAAA,UAAK,OAAO;AAAA,QACjB,OAAO;AAAA,aACH;AAAA,UACH,OAAO,IAAI,MAAM,IAAI,CAAC,UAAU;AAAA,eAC5B;AAAA,YACH,OAAO,KAAK,MAAM,IAAI,CAAC,YACtB,QAAQ,OAAO,eAAe,KAC3B,KAAK,YAAY,eAAe,IAChC,OACJ;AAAA,UACD,EAAE;AAAA,QACH;AAAA,OAEF;AAAA,MACA,MAAM,YAAY,kBAAkB,EAAE,UAAU,iBAAiB,CAAC;AAAA,MAClE,MAAM,YAAY,kBAAkB;AAAA,QACnC,UAAU,CAAC,WAAW,eAAe,EAAE;AAAA,MACxC,CAAC;AAAA;AAAA,EAEH,CAAC;AAAA;AAGK,SAAS,oBAAoB,GAAG;AAAA,EACtC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,cAAsB,UAAU,kBAAkB,SAAS;AAAA,IACxE,WAAW,CAAC,mBAAmB;AAAA,MAC9B,YAAY,aACX,kBACA,CAAC,QAAQ;AAAA,QACR,IAAI,CAAC;AAAA,UAAK,OAAO;AAAA,QACjB,OAAO;AAAA,aACH;AAAA,UACH,OAAO,IAAI,MAAM,IAAI,CAAC,UAAU;AAAA,eAC5B;AAAA,YACH,OAAO,KAAK,MAAM,IAAI,CAAC,YACtB,QAAQ,OAAO,eAAe,KAC3B,KAAK,YAAY,eAAe,IAChC,OACJ;AAAA,UACD,EAAE;AAAA,QACH;AAAA,OAEF;AAAA;AAAA,EAEF,CAAC;AAAA;AAGK,SAAS,gBAAgB,GAAG;AAAA,EAClC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,cAAsB,UAAU,cAAc,SAAS;AAAA,IACpE,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,iBAAiB,CAAC;AAAA;AAAA,EAE9D,CAAC;AAAA;;;AFhLK,SAAS,WAAW,CAC1B,WACA,UAA8B,CAAC,GAC9B;AAAA,EACD,QAAQ,UAAU,MAAM,YAAY,UAAW;AAAA,EAE/C,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,YAAY,SAAS;AAAA,IAChC,SAAS,MAAM;AAAA,MACd,IAAI,CAAC,WAAW;AAAA,QACf,MAAM,IAAI,MAAM,wBAAwB;AAAA,MACzC;AAAA,MACA,OAAO,UAAU,YAAY,SAAS;AAAA;AAAA,IAEvC,SAAS,CAAC,CAAC,aAAa;AAAA,IACxB;AAAA,IACA,sBAAsB;AAAA,EACvB,CAAC;AAAA;AAGK,SAAS,cAAc,CAAC,WAAmB;AAAA,EACjD,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,OAAO,SAA6B;AAAA,MAC/C,MAAM,UAAU,kBAAkB,SAAS,EAAE,MAAM,MAAG;AAAA,QAAG;AAAA,OAAS;AAAA,MAClE,OAAO,UAAU,YAAY,WAAW,IAAI;AAAA;AAAA,IAE7C,WAAW,CAAC,WAAW;AAAA,MACtB,2BAA2B,aAAa,WAAW,OAAO,SAAS;AAAA,MACnE,YAAY,kBAAkB,EAAE,UAAU,CAAC,YAAY,SAAS,EAAE,CAAC;AAAA,MACnE,YAAY,kBAAkB,EAAE,UAAU,iBAAiB,CAAC;AAAA;AAAA,EAE9D,CAAC;AAAA;;AG5CF,sBAAS;AACT,2BAAS;;;ACGF,MAAM,UAAU;AAAA,EACd,kBAA0C;AAAA,EAC1C,WAA8C,IAAI;AAAA,EAClD,UAAU;AAAA,OAEZ,QAAO,CAAC,KAAa;AAAA,IAC1B,IAAI,KAAK,iBAAiB;AAAA,MACzB,KAAK,gBAAgB,MAAM;AAAA,IAC5B;AAAA,IAEA,KAAK,kBAAkB,IAAI;AAAA,IAC3B,KAAK,UAAU;AAAA,IAEf,MAAM,WAAW,CAAC,IAAI,SAAS,WAAW,KAAK,CAAC,IAAI,SAAS,WAAW;AAAA,IAExE,IAAI;AAAA,MACH,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QACjC,QAAQ,WAAW,SAAS;AAAA,QAC5B,SAAS,EAAE,QAAQ,oBAAoB;AAAA,QACvC,QAAQ,KAAK,gBAAgB;AAAA,MAC9B,CAAC;AAAA,MAED,IAAI,CAAC,SAAS,IAAI;AAAA,QACjB,QAAQ,MAAM,4BAA4B,SAAS,MAAM;AAAA,QACzD;AAAA,MACD;AAAA,MAEA,MAAM,SAAS,SAAS,MAAM,UAAU;AAAA,MACxC,IAAI,CAAC,QAAQ;AAAA,QACZ,QAAQ,MAAM,wBAAwB;AAAA,QACtC;AAAA,MACD;AAAA,MAEA,MAAM,UAAU,IAAI;AAAA,MACpB,IAAI,SAAS;AAAA,MAEb,OAAO,KAAK,SAAS;AAAA,QACpB,QAAQ,MAAM,UAAU,MAAM,OAAO,KAAK;AAAA,QAC1C,IAAI;AAAA,UAAM;AAAA,QAEV,UAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAAA,QAChD,IAAI,MAAM,OAAO,QAAQ;AAAA;AAAA,CAAM;AAAA,QAE/B,OAAO,QAAQ,IAAI;AAAA,UAClB,MAAM,MAAM,OAAO,MAAM,GAAG,GAAG;AAAA,UAC/B,SAAS,OAAO,MAAM,MAAM,CAAC;AAAA,UAC7B,MAAM,QAAQ,IAAI,MAAM;AAAA,CAAI;AAAA,UAE5B,IAAI,YAAY;AAAA,UAChB,IAAI,OAAO;AAAA,UAEX,WAAW,QAAQ,OAAO;AAAA,YACzB,IAAI,KAAK,WAAW,SAAS,GAAG;AAAA,cAC/B,YAAY,KAAK,MAAM,CAAC,EAAE,KAAK;AAAA,YAChC,EAAO,SAAI,KAAK,WAAW,QAAQ,GAAG;AAAA,cACrC,SAAS,OAAO;AAAA,IAAO,MAAM,KAAK,MAAM,CAAC;AAAA,YAC1C,EAAO,SAAI,KAAK,WAAW,GAAG,GAAG,CACjC;AAAA,UACD;AAAA,UAEA,IAAI,MAAM;AAAA,YACT,IAAI;AAAA,cACH,MAAM,UAAU,KAAK,MAAM,IAAI;AAAA,cAC/B,KAAK,KAAK,EAAE,MAAM,WAAW,QAAQ,CAAC;AAAA,cACrC,OAAO,OAAO;AAAA,cACf,QAAQ,MAAM,yBAAyB,cAAc,KAAK;AAAA;AAAA,UAE5D;AAAA,UAEA,MAAM,OAAO,QAAQ;AAAA;AAAA,CAAM;AAAA,QAC5B;AAAA,MACD;AAAA,MACC,OAAO,OAAO;AAAA,MACf,IAAI,iBAAiB,SAAS,MAAM,SAAS,cAAc,CAC3D,EAAO,SACN,iBAAiB,aACjB,MAAM,YAAY,eACjB,CACF,EAAO;AAAA,QACN,QAAQ,MAAM,2BAA2B,KAAK;AAAA;AAAA;AAAA;AAAA,EAKjD,UAAU,GAAG;AAAA,IACZ,KAAK,UAAU;AAAA,IACf,IAAI,KAAK,iBAAiB;AAAA,MACzB,KAAK,gBAAgB,MAAM;AAAA,MAC3B,KAAK,kBAAkB;AAAA,IACxB;AAAA;AAAA,EAGD,EAAE,CAAC,WAAmB,SAA0B;AAAA,IAC/C,IAAI,CAAC,KAAK,SAAS,IAAI,SAAS,GAAG;AAAA,MAClC,KAAK,SAAS,IAAI,WAAW,IAAI,GAAK;AAAA,IACvC;AAAA,IACA,KAAK,SAAS,IAAI,SAAS,GAAG,IAAI,OAAO;AAAA,IAEzC,OAAO,MAAM;AAAA,MACZ,KAAK,IAAI,WAAW,OAAO;AAAA;AAAA;AAAA,EAI7B,GAAG,CAAC,WAAmB,SAA0B;AAAA,IAChD,MAAM,WAAW,KAAK,SAAS,IAAI,SAAS;AAAA,IAC5C,IAAI,UAAU;AAAA,MACb,SAAS,OAAO,OAAO;AAAA,MACvB,IAAI,SAAS,SAAS,GAAG;AAAA,QACxB,KAAK,SAAS,OAAO,SAAS;AAAA,MAC/B;AAAA,IACD;AAAA;AAAA,EAGO,IAAI,CAAC,OAAiB;AAAA,IAC7B,MAAM,WAAW,KAAK,SAAS,IAAI,MAAM,IAAI;AAAA,IAC7C,IAAI,UAAU;AAAA,MACb,WAAW,WAAW,UAAU;AAAA,QAC/B,QAAQ,KAAK;AAAA,MACd;AAAA,IACD;AAAA,IAEA,MAAM,cAAc,KAAK,SAAS,IAAI,GAAG;AAAA,IACzC,IAAI,aAAa;AAAA,MAChB,WAAW,WAAW,aAAa;AAAA,QAClC,QAAQ,KAAK;AAAA,MACd;AAAA,IACD;AAAA;AAEF;;;ACpIA,mBAAS;AAmBF,IAAM,uBAAuB,SAA0B,CAAC,SAAS;AAAA,EACvE,kBAAkB,CAAC;AAAA,EAEnB,oBAAoB,CAAC,aACpB,IAAI,CAAC,WAAW;AAAA,IACf,kBAAkB,CAAC,GAAG,MAAM,kBAAkB,QAAQ;AAAA,EACvD,EAAE;AAAA,EAEH,uBAAuB,CAAC,WACvB,IAAI,CAAC,WAAW;AAAA,IACf,kBAAkB,MAAM,iBAAiB,OACxC,CAAC,MAAM,EAAE,WAAW,MACrB;AAAA,EACD,EAAE;AAAA,EAEH,uBAAuB,CAAC,QAAQ,SAC/B,IAAI,CAAC,WAAW;AAAA,IACf,kBAAkB,MAAM,iBAAiB,IAAI,CAAC,MAC7C,EAAE,WAAW,SAAS,KAAK,GAAG,KAAK,IAAI,CACxC;AAAA,EACD,EAAE;AAAA,EAEH,uBAAuB,MAAM,IAAI,EAAE,kBAAkB,CAAC,EAAE,CAAC;AAAA,EAEzD,qBAAqB,CAAC,cAAc,IAAI,EAAE,kBAAkB,UAAU,CAAC;AACxE,EAAE;;;AC5CF,mBAAS;AAmBF,IAAM,sBAAsB,SAAyB,CAAC,SAAS;AAAA,EACrE,eAAe,CAAC;AAAA,EAChB,iBAAiB,CAAC,UACjB,IAAI,CAAC,WAAW;AAAA,IACf,eAAe;AAAA,MACd,GAAG,MAAM,cAAc,OACtB,CAAC,SAAS,KAAK,aAAa,MAAM,QACnC;AAAA,MACA;AAAA,IACD;AAAA,EACD,EAAE;AAAA,EACH,oBAAoB,CAAC,aACpB,IAAI,CAAC,WAAW;AAAA,IACf,eAAe,MAAM,cAAc,OAClC,CAAC,UAAU,MAAM,aAAa,QAC/B;AAAA,EACD,EAAE;AAAA,EACH,kBAAkB,CAAC,WAAW,IAAI,EAAE,eAAe,OAAO,CAAC;AAAA,EAC3D,oBAAoB,MAAM,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;AACpD,EAAE;;;AHxBF,IAAM,2BAA2B;AACjC,IAAM,kCAAkC;AACxC,IAAM,wCAAwC;AAC9C,IAAM,wCAAwC;AAC9C,IAAM,qCAAqC;AAC3C,IAAM,qCAAqC;AAC3C,IAAM,kCAAkC;AACxC,IAAM,kCAAkC;AACxC,IAAM,qCAAqC;AAEpC,SAAS,gBAAgB,CAC/B,WACA,UAAU,MACT;AAAA,EACD,MAAM,cAAc,gBAAe;AAAA,EACnC,MAAM,YAAY,OAAyB,IAAI;AAAA,EAC/C,MAAM,wBAAwB,OAAsB,IAAI;AAAA,EACxD,MAAM,sBAAsB,OAA4B,IAAI,GAAK;AAAA,EACjE,MAAM,qBAAqB,OAKzB,IAAI,GAAK;AAAA,EACX,MAAM,qBAAqB,OAA4B,IAAI,GAAK;AAAA,EAEhE;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACG,qBAAqB;AAAA,EACzB,QAAQ,iBAAiB,oBAAoB,qBAC5C,oBAAoB;AAAA,EAErB,WAAU,MAAM;AAAA,IACf,IAAI,CAAC,aAAa,CAAC,SAAS;AAAA,MAC3B;AAAA,IACD;AAAA,IAEA,sBAAsB,UAAU;AAAA,IAChC,oBAAoB,QAAQ,MAAM;AAAA,IAClC,mBAAmB,QAAQ,MAAM;AAAA,IACjC,mBAAmB,QAAQ,MAAM;AAAA,IACjC,IAAI,0BAA0B;AAAA,IAG9B,UACE,oBAAoB,SAAS,EAC7B,KAAK,CAAC,WAAW;AAAA,MACjB,IAAI,OAAO,MAAM,OAAO,QAAQ,SAAS,GAAG;AAAA,QAC3C,oBAAoB,OAAO,OAAO;AAAA,MACnC,EAAO;AAAA,QACN,oBAAoB,CAAC,CAAC;AAAA;AAAA,KAEvB,EACA,MAAM,MAAM;AAAA,MACZ,oBAAoB,CAAC,CAAC;AAAA,KACtB;AAAA,IAEF,UACE,uBAAuB,SAAS,EAChC,KAAK,CAAC,WAAW;AAAA,MACjB,IAAI,OAAO,MAAM,OAAO,QAAQ,SAAS,GAAG;AAAA,QAC3C,iBAAiB,OAAO,OAAO;AAAA,MAChC,EAAO;AAAA,QACN,iBAAiB,CAAC,CAAC;AAAA;AAAA,KAEpB,EACA,MAAM,MAAM;AAAA,MACZ,iBAAiB,CAAC,CAAC;AAAA,KACnB;AAAA,IAEF,MAAM,UAAS,IAAI;AAAA,IACnB,UAAU,UAAU;AAAA,IAEpB,MAAM,MAAM,UAAU,aAAa,SAAS;AAAA,IAC5C,QAAQ,IAAI,4CAA4C,GAAG;AAAA,IAC3D,QAAO,QAAQ,GAAG;AAAA,IAElB,MAAM,8BAA8B,CAAC,aAAgC;AAAA,MACpE,IAAI,sBAAsB,SAAS;AAAA,QAClC,MAAM,OAAO,SAAS,UACrB,CAAC,YAAY,QAAQ,OAAO,sBAAsB,OACnD;AAAA,QACA,IAAI,SAAS;AAAA,UAAI,OAAO;AAAA,MACzB;AAAA,MACA,SAAS,IAAI,SAAS,SAAS,EAAG,KAAK,GAAG,KAAK,GAAG;AAAA,QACjD,MAAM,YAAY,SAAS;AAAA,QAC3B,IAAI,UAAU,SAAS,eAAe,UAAU,WAAW,WAAW;AAAA,UACrE,OAAO;AAAA,QACR;AAAA,MACD;AAAA,MACA,OAAO;AAAA;AAAA,IAGR,MAAM,cAAc,CAAC,SAA8B;AAAA,MAClD,IACC,KAAK,eACL,OAAO,KAAK,gBAAgB,YAC5B,CAAC,MAAM,QAAQ,KAAK,WAAW,KAC/B,UAAU,KAAK,aACd;AAAA,QACD,OAAO,OAAQ,KAAK,YAAwC,QAAQ,EAAE;AAAA,MACvE;AAAA,MACA,IAAI,OAAO,KAAK,YAAY,UAAU;AAAA,QACrC,IAAI;AAAA,UACH,MAAM,SAAS,KAAK,MAAM,KAAK,OAAO;AAAA,UACtC,IAAI,UAAU,OAAO,OAAO,SAAS;AAAA,YAAU,OAAO,OAAO;AAAA,UAC5D,MAAM;AAAA,QACR,OAAO,KAAK;AAAA,MACb;AAAA,MACA,OAAO;AAAA;AAAA,IAGR,MAAM,qBAAqB,CAC1B,YACmB;AAAA,MACnB,IAAI,OAAO,SAAS,WAAW;AAAA,QAAU,OAAO,QAAQ;AAAA,MACxD,OAAO,OAAO,SAAS,eAAe,WACnC,QAAQ,aACR;AAAA;AAAA,IAGJ,MAAM,mBAAmB,CACxB,YACmB;AAAA,MACnB,IAAI,OAAO,SAAS,SAAS;AAAA,QAAU,OAAO,QAAQ;AAAA,MACtD,OAAO,OAAO,SAAS,aAAa,WAAW,QAAQ,WAAW;AAAA;AAAA,IAGnE,MAAM,mBAAmB,CACxB,YACa,SAAS,QAAQ,SAAS;AAAA,IAExC,MAAM,qBAAqB,CAC1B,YACa,SAAS,UAAU,SAAS;AAAA,IAE1C,MAAM,mBAAmB,CACxB,YACmB;AAAA,MACnB,MAAM,SAAS,mBAAmB,OAAO;AAAA,MACzC,IAAI;AAAA,QAAQ,OAAO;AAAA,MACnB,MAAM,OAAO,iBAAiB,OAAO;AAAA,MACrC,OAAO,OAAO,QAAQ,SAAS;AAAA;AAAA,IAGhC,MAAM,kBAAkB,CACvB,UACoC;AAAA,MACpC,IAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,QAChE,OAAO;AAAA,MACR;AAAA,MAEA,IAAI,OAAO,UAAU;AAAA,QAAU,OAAO;AAAA,MAEtC,IAAI;AAAA,QACH,MAAM,SAAS,KAAK,MAAM,KAAK;AAAA,QAC/B,OAAO,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,IAChE,SACD;AAAA,QACF,MAAM;AAAA,QACP,OAAO;AAAA;AAAA;AAAA,IAIT,MAAM,sBAAsB,CAAC,UAAuC;AAAA,MACnE,MAAM,SACL,OAAO,UAAU,WACd,QACA,OAAO,UAAU,WAChB,OAAO,SAAS,OAAO,EAAE,IACzB,OAAO;AAAA,MACZ,OAAO,OAAO,SAAS,MAAM,KAAK,SAAS,IACxC,KAAK,MAAM,MAAM,IACjB;AAAA;AAAA,IAGJ,MAAM,iBAAiB,CACtB,UAC8C;AAAA,MAC9C,IAAI,OAAO,UAAU;AAAA,QAAU,OAAO,CAAC;AAAA,MACvC,MAAM,QAAQ,MAAM,MAAM,mBAAmB;AAAA,MAC7C,IAAI,CAAC;AAAA,QAAO,OAAO,CAAC;AAAA,MACpB,OAAO;AAAA,QACN,WAAW,oBAAoB,MAAM,EAAE;AAAA,QACvC,SAAS,oBAAoB,MAAM,MAAM,MAAM,EAAE;AAAA,MAClD;AAAA;AAAA,IAGD,MAAM,+BAA+B,CAAC,UAA0B;AAAA,MAC/D,MAAM,YACL,kCAAkC;AAAA,MACnC,IAAI,MAAM,UAAU;AAAA,QAAW,OAAO;AAAA,MACtC,OAAO,GAAG,MAAM,MACf,GACA,+BACD;AAAA;AAAA,EAA8D,MAAM,MACnE,CAAC,+BACF;AAAA;AAAA,IAGD,MAAM,uBAAuB,CAC5B,SACA,UACoC;AAAA,MACpC,MAAM,OAAO,gBAAgB,iBAAiB,OAAO,CAAC;AAAA,MACtD,IAAI;AAAA,QAAM,OAAO;AAAA,MAEjB,MAAM,MAAM,iBAAiB,OAAO;AAAA,MACpC,IAAI,CAAC;AAAA,QAAK,OAAO;AAAA,MAEjB,MAAM,WAAW,oBAAoB,QAAQ,IAAI,GAAG,KAAK;AAAA,MACzD,IAAI,CAAC;AAAA,QAAO,OAAO,gBAAgB,QAAQ;AAAA,MAE3C,MAAM,OAAO,6BAA6B,GAAG,WAAW,OAAO;AAAA,MAC/D,oBAAoB,QAAQ,IAAI,KAAK,IAAI;AAAA,MACzC,OAAO,gBAAgB,IAAI;AAAA;AAAA,IAG5B,MAAM,+BAA+B,CAAC,UAA0B;AAAA,MAC/D,IAAI;AAAA,QACH,OAAO,KAAK,MAAM,IAAI,MAAM,QAAQ,OAAO,EAAE,IAAI;AAAA,QAChD,MAAM;AAAA,QACP,OAAO,MACL,QAAQ,QAAQ;AAAA,CAAI,EACpB,QAAQ,QAAQ,IAAI,EACpB,QAAQ,QAAQ,IAAI,EACpB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,SAAS,IAAI;AAAA;AAAA;AAAA,IAIzB,MAAM,yBAAyB,CAC9B,MACA,OACA,gBAAgB,UACQ;AAAA,MACxB,MAAM,SAAS,IAAI;AAAA,MACnB,MAAM,cAAc,KAAK,QAAQ,MAAM;AAAA,MACvC,IAAI,gBAAgB;AAAA,QAAI;AAAA,MAExB,MAAM,aAAa,KAAK,QAAQ,KAAK,cAAc,OAAO,MAAM;AAAA,MAChE,IAAI,eAAe;AAAA,QAAI;AAAA,MAEvB,MAAM,aAAa,KAAK,QAAQ,KAAK,aAAa,CAAC;AAAA,MACnD,IAAI,eAAe;AAAA,QAAI;AAAA,MAEvB,IAAI,UAAU;AAAA,MACd,IAAI,WAAW;AAAA,MACf,IAAI,SAAS;AAAA,MACb,SAAS,IAAI,aAAa,EAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AAAA,QACrD,MAAM,OAAO,KAAK;AAAA,QAClB,IAAI,UAAU;AAAA,UACb,WAAW,KAAK;AAAA,UAChB,WAAW;AAAA,UACX;AAAA,QACD;AAAA,QAEA,IAAI,SAAS,MAAM;AAAA,UAClB,WAAW;AAAA,UACX;AAAA,QACD;AAAA,QAEA,IAAI,SAAS,KAAK;AAAA,UACjB,SAAS;AAAA,UACT;AAAA,QACD;AAAA,QACA,WAAW;AAAA,MACZ;AAAA,MAEA,IAAI,iBAAiB,CAAC;AAAA,QAAQ;AAAA,MAE9B,OAAO,6BAA6B,OAAO;AAAA;AAAA,IAG5C,MAAM,uBAAuB,CAC5B,YACY;AAAA,MACZ,MAAM,MAAM,iBAAiB,OAAO;AAAA,MACpC,OAAO,MAAO,oBAAoB,QAAQ,IAAI,GAAG,KAAK,KAAM;AAAA;AAAA,IAG7D,MAAM,eAAe,CACpB,MACA,QACA,OACA,gBAAgB,UACQ;AAAA,MACxB,MAAM,QAAQ,OAAO;AAAA,MACrB,IAAI,OAAO,UAAU;AAAA,QAAU,OAAO;AAAA,MACtC,OAAO,uBAAuB,QAAQ,OAAO,aAAa;AAAA;AAAA,IAG3D,MAAM,kCAAkC,CACvC,MACA,WACwB;AAAA,MACxB,MAAM,aAAa,MAAM;AAAA,MACzB,IAAI,OAAO,eAAe,UAAU;AAAA,QACnC,IAAI,WAAW,UAAU,uCAAuC;AAAA,UAC/D,OAAO;AAAA,QACR;AAAA,QAEA,OAAO;AAAA,EAA4C,WAAW,MAC7D,CAAC,qCACF;AAAA,MACD;AAAA,MAEA,MAAM,SAAS;AAAA,MACf,MAAM,cAAc,OAAO,QAAQ,MAAM;AAAA,MACzC,IAAI,gBAAgB;AAAA,QAAI;AAAA,MAExB,MAAM,aAAa,OAAO,QAAQ,KAAK,cAAc,OAAO,MAAM;AAAA,MAClE,IAAI,eAAe;AAAA,QAAI;AAAA,MAEvB,MAAM,aAAa,OAAO,QAAQ,KAAK,aAAa,CAAC;AAAA,MACrD,IAAI,eAAe;AAAA,QAAI;AAAA,MAEvB,MAAM,aAAa,aAAa;AAAA,MAChC,IAAI,OAAO,SAAS,cAAc,uCAAuC;AAAA,QACxE,OAAO,uBAAuB,QAAQ,SAAS;AAAA,MAChD;AAAA,MAEA,MAAM,UAAU,OAAO,MACtB,KAAK,IACJ,YACA,OAAO,SAAS,qCACjB,CACD;AAAA,MACA,OAAO;AAAA,EAA4C,6BAClD,OACD;AAAA;AAAA,IAGD,MAAM,kCAAkC,CACvC,MACA,WACwB;AAAA,MACxB,MAAM,WAAW,MAAM;AAAA,MACvB,IAAI,OAAO,aAAa,UAAU;AAAA,QACjC,IACC,SAAS,UACT,qCACC,oCACA;AAAA,UACD,OAAO;AAAA,QACR;AAAA,QAEA,OAAO,GAAG,SAAS,MAClB,GACA,kCACD;AAAA;AAAA,EAAkD,SAAS,MAC1D,CAAC,kCACF;AAAA,MACD;AAAA,MAEA,MAAM,SAAS;AAAA,MACf,MAAM,cAAc,OAAO,QAAQ,MAAM;AAAA,MACzC,IAAI,gBAAgB;AAAA,QAAI;AAAA,MAExB,MAAM,aAAa,OAAO,QAAQ,KAAK,cAAc,OAAO,MAAM;AAAA,MAClE,IAAI,eAAe;AAAA,QAAI;AAAA,MAEvB,MAAM,aAAa,OAAO,QAAQ,KAAK,aAAa,CAAC;AAAA,MACrD,IAAI,eAAe;AAAA,QAAI;AAAA,MAEvB,MAAM,aAAa,aAAa;AAAA,MAChC,MAAM,YAAY,OAAO,SAAS;AAAA,MAClC,IACC,aACA,qCAAqC,oCACpC;AAAA,QACD,OAAO,uBAAuB,QAAQ,OAAO;AAAA,MAC9C;AAAA,MAEA,MAAM,UAAU,OAAO,MACtB,YACA,aAAa,kCACd;AAAA,MACA,MAAM,UAAU,OAAO,MAAM,CAAC,kCAAkC;AAAA,MAChE,OAAO,GAAG,6BACT,OACD;AAAA;AAAA,EAAkD,6BACjD,OACD;AAAA;AAAA,IAGD,MAAM,kBAAkB,CACvB,YAEA,SAAS,UACT,OAAO,QAAQ,WAAW,YAC1B,CAAC,MAAM,QAAQ,QAAQ,MAAM,IACzB,QAAQ,SACT;AAAA,IAEJ,MAAM,oBAAoB,CACzB,YACoC;AAAA,MACpC,IACC,SAAS,YACT,OAAO,QAAQ,aAAa,YAC5B,CAAC,MAAM,QAAQ,QAAQ,QAAQ,GAC9B;AAAA,QACD,OAAO,QAAQ;AAAA,MAChB;AAAA,MAEA,MAAM,SAAS,gBAAgB,OAAO;AAAA,MACtC,OAAO,QAAQ,YACd,OAAO,OAAO,aAAa,YAC3B,CAAC,MAAM,QAAQ,OAAO,QAAQ,IAC3B,OAAO,WACR;AAAA;AAAA,IAGJ,MAAM,uBAAsB,CAC3B,YACwB;AAAA,MACxB,MAAM,SAAS,gBAAgB,OAAO;AAAA,MACtC,IAAI,OAAO,SAAS,UAAU;AAAA,QAAU,OAAO,QAAQ;AAAA,MACvD,OAAO,OAAO,QAAQ,UAAU,WAAW,OAAO,QAAQ;AAAA;AAAA,IAG3D,MAAM,qBAAqB,CAAC,SAC3B,KAAK,QAAQ,QAAQ,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,KAAK;AAAA,IAEnD,MAAM,mBAAmB,CACxB,WACA,eACa;AAAA,MACb,MAAM,kBAAkB,mBAAmB,SAAS;AAAA,MACpD,MAAM,mBAAmB,mBAAmB,UAAU;AAAA,MACtD,OACC,oBAAoB,oBACpB,gBAAgB,SAAS,IAAI,kBAAkB,KAC/C,iBAAiB,SAAS,IAAI,iBAAiB;AAAA;AAAA,IAIjD,MAAM,4BAA4B,CACjC,WACA,eACa;AAAA,MACb,MAAM,kBAAkB,mBAAmB,SAAS,EAAE,QAAQ,QAAQ,EAAE;AAAA,MACxE,MAAM,mBAAmB,mBAAmB,UAAU;AAAA,MACtD,IAAI,CAAC;AAAA,QAAiB,OAAO;AAAA,MAC7B,OACC,iBAAiB,WAAW,UAAU,KACtC,iBAAiB,WAAW,GAAG,kBAAkB;AAAA;AAAA,IAInD,MAAM,4BAA4B,CAAC,SAA0B;AAAA,MAC5D,MAAM,aAAa,mBAAmB,IAAI;AAAA,MAC1C,IAAI,CAAC,cAAc,WAAW,SAAS,GAAG;AAAA,QAAG,OAAO;AAAA,MACpD,MAAM,OAAO,WAAW,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA,MAC5C,OAAO,KAAK,SAAS,GAAG;AAAA;AAAA,IAGzB,MAAM,uCAAuC,CAC5C,UACwB;AAAA,MACxB,MAAM,cAAc,MAAM,SAAS;AAAA,CAAI,IACpC,QACA,MAAM,MAAM,GAAG,MAAM,YAAY;AAAA,CAAI,IAAI,CAAC;AAAA,MAC7C,IAAI,CAAC;AAAA,QAAa;AAAA,MAElB,IAAI,cAAc;AAAA,MAClB,IAAI,qBAAqB;AAAA,MACzB,IAAI,qBAAqB;AAAA,MACzB,WAAW,QAAQ,YAAY,MAAM;AAAA,CAAI,GAAG;AAAA,QAC3C,IACE,KAAK,WAAW,GAAG,KAAK,CAAC,KAAK,WAAW,KAAK,KAC9C,KAAK,WAAW,GAAG,KAAK,CAAC,KAAK,WAAW,KAAK,GAC9C;AAAA,UACD,eAAe;AAAA,UACf,sBAAsB,KAAK;AAAA,QAC5B,EAAO,SACN,kFAAkF,KACjF,IACD,KACA,KAAK,WAAW,YAAY,KAC5B,KAAK,WAAW,WAAW,KAC3B,KAAK,WAAW,WAAW,GAC1B;AAAA,UACD,sBAAsB;AAAA,QACvB;AAAA,MACD;AAAA,MAEA,IAAI,cAAc;AAAA,QAAG,OAAO,GAAG,eAAe;AAAA,MAC9C,OAAO,qBAAqB,IACzB,SAAS,sBAAsB,YAAY,WAC3C;AAAA;AAAA,IAGJ,MAAM,wBAAwB,CAAC,UAA4B;AAAA,MAC1D,MAAM,QAAQ,IAAI;AAAA,MAClB,WAAW,QAAQ,MAAM,MAAM;AAAA,CAAI,GAAG;AAAA,QACrC,MAAM,YAAY,KAAK,MACtB,2CACD;AAAA,QACA,MAAM,mBAAmB,KAAK,MAAM,2BAA2B;AAAA,QAC/D,MAAM,gBAAgB,KAAK,MAC1B,sFACD;AAAA,QACA,MAAM,OACL,YAAY,MAAM,mBAAmB,MAAM,gBAAgB;AAAA,QAC5D,IAAI,MAAM;AAAA,UACT,MAAM,IAAI,KAAK,KAAK,CAAC;AAAA,UACrB;AAAA,QACD;AAAA,QAEA,MAAM,UAAU,KAAK,MAAM,uBAAuB;AAAA,QAClD,IAAI,UAAU,MAAM,QAAQ,OAAO,aAAa;AAAA,UAC/C,MAAM,IAAI,QAAQ,GAAG,KAAK,CAAC;AAAA,QAC5B;AAAA,MACD;AAAA,MAEA,OAAO,CAAC,GAAG,KAAK;AAAA;AAAA,IAUjB,MAAM,eAAe,CAAC,SACrB,KAAK,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY,KAAK;AAAA,IAEzC,MAAM,yBAAyB,CAAC,MAAc,YAAoB;AAAA,MACjE,YAAY,aAA+B,CAAC,SAAS,QAAQ,IAAI,GAAG;AAAA,QACnE;AAAA,QACA;AAAA,QACA,WAAW,aAAa,IAAI;AAAA,QAC5B,WAAW,QAAQ,MAAM;AAAA,CAAI,EAAE;AAAA,MAChC,CAAC;AAAA;AAAA,IAGF,MAAM,+BAA+B,CACpC,MACA,QACA,WACA,YACI;AAAA,MACJ,IAAI,OAAO,QAAQ,YAAY;AAAA,QAAU;AAAA,MACzC,MAAM,cAAc,OAAO;AAAA,MAC3B,IAAI,CAAC,aAAa,CAAC,SAAS;AAAA,QAC3B,uBAAuB,MAAM,WAAW;AAAA,QACxC;AAAA,MACD;AAAA,MAEA,YAAY,aACX,CAAC,SAAS,QAAQ,IAAI,GACtB,CAAC,YAAY;AAAA,QACZ,IAAI,CAAC,SAAS;AAAA,UAAS,OAAO;AAAA,QAC9B,MAAM,QAAQ,QAAQ,QAAQ,MAAM;AAAA,CAAI;AAAA,QACxC,IAAI,MAAM,GAAG,EAAE,MAAM;AAAA,UAAI,MAAM,IAAI;AAAA,QACnC,MAAM,YAAY,YAAY,MAAM;AAAA,CAAI;AAAA,QACxC,MAAM,OAAO,YAAY,GAAG,UAAU,YAAY,GAAG,GAAG,SAAS;AAAA,QACjE,MAAM,UAAU,GAAG,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,QAClC,OAAO;AAAA,aACH;AAAA,UACH;AAAA,UACA,WACC,OAAO,OAAO,eAAe,WAC1B,OAAO,aACP,MAAM;AAAA,QACX;AAAA,OAEF;AAAA;AAAA,IAGD,MAAM,6BAA6B,CAAC,SAAiB;AAAA,MAC/C,YAAY,kBAAkB,EAAE,UAAU,CAAC,SAAS,QAAQ,IAAI,EAAE,CAAC;AAAA;AAAA,IAGzE,MAAM,yBAAyB,CAC9B,QACA,SAC0B;AAAA,MAC1B,MAAM,UAAU,MAAM,QAAQ,QAAQ,OAAO,IAAI,OAAO,UAAU,CAAC;AAAA,MACnE,MAAM,QAAQ,IAAI;AAAA,MAElB,WAAW,UAAU,SAAS;AAAA,QAC7B,IAAI,CAAC,UAAU,OAAO,WAAW;AAAA,UAAU;AAAA,QAC3C,MAAM,SAAS;AAAA,QACf,IAAI,OAAO,OAAO,aAAa;AAAA,UAAU;AAAA,QACzC,IAAI,CAAC,iBAAiB,OAAO,UAAU,IAAI;AAAA,UAAG;AAAA,QAC9C,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAK;AAAA,UAAG;AAAA,QAElC,WAAW,QAAQ,OAAO,OAAO;AAAA,UAChC,IAAI,CAAC,QAAQ,OAAO,SAAS;AAAA,YAAU;AAAA,UACvC,MAAM,aAAa;AAAA,UACnB,MAAM,WACL,OAAO,WAAW,aAAa,WAC5B,WAAW,WACX;AAAA,UACJ,MAAM,WACL,OAAO,WAAW,aAAa,WAC5B,WAAW,WACX;AAAA,UACJ,IAAI,CAAC,YAAY,CAAC;AAAA,YAAU;AAAA,UAE5B,SAAS,OAAO,SAAU,OAAO,WAAW,UAAU,QAAQ,GAAG;AAAA,YAChE,MAAM,IAAI,IAAI;AAAA,UACf;AAAA,QACD;AAAA,MACD;AAAA,MAEA,OAAO,MAAM,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI;AAAA;AAAA,IAUtC,MAAM,oBAAoB,CAAC,UAA4B;AAAA,MACtD,IAAI,MAAM,WAAW;AAAA,QAAG,OAAO,CAAC;AAAA,MAChC,MAAM,QAAQ,MAAM,MAAM;AAAA,CAAI;AAAA,MAC9B,IAAI,MAAM,SAAS;AAAA,CAAI;AAAA,QAAG,MAAM,IAAI;AAAA,MACpC,OAAO;AAAA;AAAA,IAGR,MAAM,4BAA4B,CACjC,OACA,SACI;AAAA,MACJ,MAAM,KAAK,IAAI;AAAA,MACf,WAAW,QAAQ,kBAAkB,KAAK,SAAS,GAAG;AAAA,QACrD,MAAM,KAAK,IAAI,MAAM;AAAA,MACtB;AAAA,MACA,WAAW,QAAQ,kBAAkB,KAAK,SAAS,GAAG;AAAA,QACrD,MAAM,KAAK,IAAI,MAAM;AAAA,MACtB;AAAA;AAAA,IAGD,MAAM,8BAA8B,CACnC,MACA,UACwB;AAAA,MACxB,MAAM,aAAa,MAAM,OACxB,CAAC,SAAS,KAAK,UAAU,SAAS,KAAK,KAAK,UAAU,SAAS,CAChE;AAAA,MACA,IAAI,WAAW,WAAW;AAAA,QAAG;AAAA,MAE7B,MAAM,QAAQ,CAAC,mBAAmB,oBAAoB,MAAM;AAAA,MAC5D,WAAW,QAAQ;AAAA,QAAY,0BAA0B,OAAO,IAAI;AAAA,MACpE,MAAM,KAAK,iBAAiB,EAAE;AAAA,MAC9B,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA,IAGvB,MAAM,2BAA2B,CAChC,SACyB;AAAA,MACzB,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,IAAI,KAAK,QAAQ,CAAC;AAAA,MACzD,OAAO,MAAM,QAAQ,CAAC,SAAS;AAAA,QAC9B,IAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI;AAAA,UAAG,OAAO,CAAC;AAAA,QACtE,MAAM,SAAS;AAAA,QACf,OAAO,OAAO,OAAO,cAAc,YAClC,OAAO,OAAO,cAAc,WAC1B,CAAC,EAAE,WAAW,OAAO,WAAW,WAAW,OAAO,UAAU,CAAC,IAC7D,CAAC;AAAA,OACJ;AAAA;AAAA,IAGF,MAAM,sBAAsB,CAC3B,UACA,MACA,MACA,QACA,aACwB;AAAA,MACxB,IAAI,OAAO,UAAU,UAAU;AAAA,QAAU,OAAO,SAAS;AAAA,MAEzD,IAAI,aAAa,QAAQ;AAAA,QACxB,MAAM,YAAY,aAAa,MAAM,QAAQ,WAAW;AAAA,QACxD,MAAM,YAAY,aAAa,MAAM,QAAQ,WAAW;AAAA,QACxD,OAAO,cAAc,aAAa,cAAc,YAC7C,4BAA4B,MAAM,CAAC,EAAE,WAAW,UAAU,CAAC,CAAC,IAC5D;AAAA,MACJ;AAAA,MAEA,MAAM,QAAQ,yBAAyB,IAAI;AAAA,MAC3C,OAAO,4BAA4B,MAAM,KAAK;AAAA;AAAA,IAG/C,MAAM,yBAAyB,CAC9B,WACA,SACA,UACI;AAAA,MACJ,MAAM,OAAO,iBAAiB,OAAO;AAAA,MACrC,IAAI,SAAS;AAAA,QAAQ;AAAA,MAErB,MAAM,OAAO,qBAAqB,SAAS,KAAK;AAAA,MAChD,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,KAAK,OAAO;AAAA,MAC1D,IAAI,CAAC;AAAA,QAAM;AAAA,MAEX,MAAM,SACL,SAAS,UACT,OAAO,QAAQ,WAAW,YAC1B,CAAC,MAAM,QAAQ,QAAQ,MAAM,IACzB,QAAQ,SACT;AAAA,MACJ,MAAM,kBAAkB,eAAe,QAAQ,SAAS;AAAA,MACxD,MAAM,YACL,oBAAoB,KAAK,SAAS,KAClC,oBAAoB,KAAK,UAAU,KACnC,gBAAgB;AAAA,MACjB,MAAM,UACL,oBAAoB,KAAK,OAAO,KAChC,oBAAoB,KAAK,QAAQ,KACjC,gBAAgB,WAChB;AAAA,MACD,MAAM,SAAS,QAAQ,OAAO,SAAS,cAAc;AAAA,MACrD,IAAI,cAAc,iBAAiB,CAAC,QAAQ;AAAA,QAC3C,6BAA6B,MAAM,QAAQ,WAAW,OAAO;AAAA,MAC9D;AAAA,MAEA,MAAM,cAAc,mBAAmB,SAAS;AAAA,MAChD,IAAI,CAAC,YAAY;AAAA,QAAoB;AAAA,MAErC,YAAY,gBAAgB,MAAM;AAAA,QACjC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ,mBAAmB,OAAO,KAAK;AAAA,QACvC,QAAQ,SACL,UACA,cAAc,gBACb,YACA;AAAA,MACL,CAAC;AAAA;AAAA,IAGF,MAAM,0BAA0B,CAC/B,WACA,SACA,UACI;AAAA,MACJ,MAAM,OAAO,iBAAiB,OAAO;AAAA,MACrC,IAAI,SAAS;AAAA,QAAS;AAAA,MAEtB,MAAM,OAAO,qBAAqB,SAAS,KAAK;AAAA,MAChD,MAAM,SAAS,qBAAqB,OAAO;AAAA,MAC3C,MAAM,SAAS,gBAAgB,OAAO;AAAA,MACtC,MAAM,QACJ,OAAO,QAAQ,SAAS,WAAW,OAAO,OAAO,cAClD,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,MACxC,IAAI,CAAC;AAAA,QAAM;AAAA,MAEX,MAAM,SAAS,QAAQ,OAAO,SAAS,cAAc;AAAA,MACrD,MAAM,SAAS,mBAAmB,OAAO,KAAK;AAAA,MAC9C,MAAM,SAAS,SACZ,UACA,cAAc,gBACb,YACA;AAAA,MACJ,MAAM,UACL,WAAW,cACR,gCAAgC,MAAM,MAAM,IAC5C,aAAa,MAAM,QAAQ,SAAS;AAAA,MACxC,MAAM,UACL,QAAQ,WAAW,OAAO,OAAO,YAAY,WACzC,OAAO,UACR;AAAA,MACJ,MAAM,cACL,OAAO,SAAS,cAAc,YAC9B,OAAO,QAAQ,cAAc,WAC1B;AAAA,QACA,WAAW,QAAQ;AAAA,QACnB,UAAU,QAAQ;AAAA,MACnB,IACC;AAAA,MACJ,IAAI,WAAW,WAAW;AAAA,QACzB,IAAI,YAAY;AAAA,UAAW,uBAAuB,MAAM,OAAO;AAAA,QAC1D;AAAA,qCAA2B,IAAI;AAAA,MACrC;AAAA,MAEA,MAAM,cAAc,mBAAmB,SAAS;AAAA,MAChD,IAAI,CAAC,YAAY;AAAA,QAAoB;AAAA,MAErC,IACC,WAAW,eACX,YAAY,aACZ,QAAQ,UAAU,iCACjB;AAAA,QACD,MAAM,aAAa,UAAU;AAAA,QAC7B,MAAM,MAAM,KAAK,IAAI;AAAA,QACrB,MAAM,OAAO,mBAAmB,QAAQ,IAAI,UAAU;AAAA,QACtD,MAAM,eAAe,KAAK,IACzB,QAAQ,UAAU,MAAM,iBAAiB,EAC1C;AAAA,QACA,IACC,QACA,MAAM,KAAK,YAAY,4BACvB,eAAe,uCACd;AAAA,UACD;AAAA,QACD;AAAA,QAEA,mBAAmB,QAAQ,IAAI,YAAY;AAAA,UAC1C,WAAW;AAAA,UACX,eAAe,QAAQ;AAAA,QACxB,CAAC;AAAA,MACF;AAAA,MAEA,YAAY,mBAAmB;AAAA,QAC9B;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,qBAAoB,OAAO;AAAA,MACnC,CAAC;AAAA;AAAA,IAGF,MAAM,+BAA+B,CACpC,WACA,SACA,UACI;AAAA,MACJ,MAAM,OAAO,iBAAiB,OAAO;AAAA,MACrC,IAAI,SAAS;AAAA,QAAe;AAAA,MAE5B,MAAM,OAAO,qBAAqB,SAAS,KAAK;AAAA,MAChD,MAAM,SAAS,qBAAqB,OAAO;AAAA,MAC3C,MAAM,WAAW,kBAAkB,OAAO;AAAA,MAC1C,MAAM,SAAS,gBAAgB,OAAO;AAAA,MACtC,MAAM,SAAS,QAAQ,OAAO,SAAS,cAAc;AAAA,MACrD,MAAM,SAAS,SACZ,UACA,cAAc,gBACb,YACA;AAAA,MACJ,MAAM,SAAS,mBAAmB,OAAO,KAAK;AAAA,MAE9C,MAAM,SACJ,OAAO,UAAU,UAAU,WAAW,SAAS,QAAQ,eACvD,WAAW,cACT,gCAAgC,MAAM,MAAM,IAC5C,aAAa,MAAM,QAAQ,OAAO;AAAA,MACtC,IAAI,CAAC;AAAA,QAAO;AAAA,MAEZ,MAAM,aAAa,UAAU;AAAA,MAC7B,MAAM,gBACL,WAAW,cACR,qCAAqC,KAAK,IAC1C;AAAA,MACJ,IAAI,WAAW,aAAa;AAAA,QAC3B,MAAM,OAAO,mBAAmB,QAAQ,IAAI,UAAU;AAAA,QACtD,IAAI,MAAM,kBAAkB;AAAA,UAAe;AAAA,MAC5C;AAAA,MAEA,MAAM,aAAa,sBAAsB,KAAK;AAAA,MAC9C,IAAI,WAAW,WAAW;AAAA,QAAG;AAAA,MAC7B,IAAI,WAAW,WAAW;AAAA,QACzB,WAAW,QAAQ;AAAA,UAAY,2BAA2B,IAAI;AAAA,MAC/D;AAAA,MAEA,MAAM,cAAc,mBAAmB,SAAS;AAAA,MAChD,IAAI,CAAC,YAAY;AAAA,QAAoB;AAAA,MAErC,MAAM,mBAAmB,YAAY,KAAK,OACzC,CACC,QAKA,IAAI,SAAS,UACb,WAAW,KAAK,CAAC,SAAS,0BAA0B,MAAM,IAAI,IAAI,CAAC,CACrE;AAAA,MACA,MAAM,wBAAwB,iBAAiB,KAC9C,CAAC,QAAQ,IAAI,OAAO,YAAY,WACjC;AAAA,MACA,MAAM,eAAe,WAAW,KAAK,yBAAyB;AAAA,MAC9D,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,MAAM,CAAC;AAAA,QACtD;AAAA,MACD,MAAM,aACL,uBAAuB,QACvB,iBAAiB,IAAI,QACrB;AAAA,MACD,IAAI,CAAC;AAAA,QAAY;AAAA,MAEjB,YAAY,mBAAmB;AAAA,QAC9B,MAAM;AAAA,QACN,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,cAAc,uBAAuB,QAAQ,UAAU;AAAA,QACvD;AAAA,QACA,OAAO,qBAAoB,OAAO;AAAA,MACnC,CAAC;AAAA,MAED,IAAI,WAAW,aAAa;AAAA,QAC3B,mBAAmB,QAAQ,IAAI,YAAY;AAAA,UAC1C,WAAW,KAAK,IAAI;AAAA,UACpB,eAAe,OAAO;AAAA,UACtB;AAAA,QACD,CAAC;AAAA,MACF;AAAA;AAAA,IAGD,MAAM,yBAAyB,CAC9B,WACA,SACA,UACI;AAAA,MACJ,MAAM,OAAO,iBAAiB,OAAO;AAAA,MACrC,IAAI,SAAS,UAAU,SAAS;AAAA,QAAa;AAAA,MAE7C,MAAM,OAAO,qBAAqB,SAAS,KAAK;AAAA,MAChD,MAAM,SAAS,qBAAqB,OAAO;AAAA,MAC3C,MAAM,WAAW,kBAAkB,OAAO;AAAA,MAC1C,MAAM,SAAS,gBAAgB,OAAO;AAAA,MACtC,MAAM,QACJ,OAAO,QAAQ,SAAS,WAAW,OAAO,OAAO,cAClD,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,MACxC,IAAI,CAAC;AAAA,QAAM;AAAA,MAEX,MAAM,SAAS,QAAQ,OAAO,SAAS,cAAc;AAAA,MACrD,MAAM,SAAS,SACZ,UACA,cAAc,gBACb,YACA;AAAA,MACJ,MAAM,SAAS,mBAAmB,OAAO,KAAK;AAAA,MAC9C,MAAM,QAAQ,oBAAoB,MAAM,MAAM,MAAM,QAAQ,QAAQ;AAAA,MACpE,IAAI,WAAW;AAAA,QAAW,2BAA2B,IAAI;AAAA,MACzD,IAAI,CAAC;AAAA,QAAO;AAAA,MAEZ,MAAM,aAAa,UAAU,GAAG,QAAQ;AAAA,MACxC,MAAM,gBACL,WAAW,cACR,qCAAqC,KAAK,IAC1C;AAAA,MACJ,IAAI,WAAW,aAAa;AAAA,QAC3B,MAAM,OAAO,mBAAmB,QAAQ,IAAI,UAAU;AAAA,QACtD,IAAI,MAAM,kBAAkB;AAAA,UAAe;AAAA,MAC5C;AAAA,MAEA,MAAM,cAAc,mBAAmB,SAAS;AAAA,MAChD,IAAI,CAAC,YAAY;AAAA,QAAoB;AAAA,MAErC,YAAY,mBAAmB;AAAA,QAC9B;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,qBAAoB,OAAO;AAAA,MACnC,CAAC;AAAA,MAED,IAAI,WAAW,aAAa;AAAA,QAC3B,mBAAmB,QAAQ,IAAI,YAAY;AAAA,UAC1C,WAAW,KAAK,IAAI;AAAA,UACpB,eAAe,OAAO;AAAA,UACtB;AAAA,QACD,CAAC;AAAA,MACF;AAAA;AAAA,IAGD,MAAM,8BAA8B,CACnC,WACA,YACI;AAAA,MACJ,IAAI,cAAc;AAAA,QAAe;AAAA,MACjC,MAAM,SAAS,mBAAmB,OAAO;AAAA,MACzC,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM;AAAA,QAChE;AAAA,MACD,MAAM,eAAe;AAAA,MACrB,MAAM,cAAc,MAAM,QAAQ,aAAa,OAAO,IACnD,aAAa,QAAQ,KACrB;AAAA,MACH,MAAM,SAAS,aAAa,UAAU;AAAA,MACtC,MAAM,aAAa,aAAa;AAAA,MAChC,IAAI,OAAO,eAAe,YAAY,WAAW,KAAK,GAAG;AAAA,QACxD,mBAAmB,SAAS,EAAE,eAAe,YAAY;AAAA,UACxD,MAAM;AAAA,UACN,OAAO;AAAA,QACR,CAAC;AAAA,QACD;AAAA,MACD;AAAA,MACA,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM;AAAA,QAChE;AAAA,MAED,mBAAmB,SAAS,EAAE,eAAe,yBAAyB;AAAA,QACrE,MAAM;AAAA,QACN,OAAO;AAAA,MACR,CAAC;AAAA;AAAA,IAGF,MAAM,gCAAgC,CACrC,WACA,SACA,UACI;AAAA,MACJ,MAAM,OAAO,iBAAiB,OAAO;AAAA,MACrC,IAAI,SAAS;AAAA,QAAQ,uBAAuB,WAAW,SAAS,KAAK;AAAA,MACrE,IAAI,SAAS;AAAA,QAAS,wBAAwB,WAAW,SAAS,KAAK;AAAA,MACvE,IAAI,SAAS,UAAU,SAAS,aAAa;AAAA,QAC5C,uBAAuB,WAAW,SAAS,KAAK;AAAA,MACjD;AAAA,MACA,IAAI,SAAS,eAAe;AAAA,QAC3B,6BAA6B,WAAW,SAAS,KAAK;AAAA,MACvD;AAAA,MACA,IAAI,SAAS,aAAa;AAAA,QACzB,4BAA4B,WAAW,OAAO;AAAA,MAC/C;AAAA;AAAA,IAGD,MAAM,oBAAoB,CACzB,YACmB;AAAA,MACnB,IAAI,OAAO,SAAS,UAAU;AAAA,QAAU,OAAO,QAAQ;AAAA,MACvD,OAAO,OAAO,SAAS,mBAAmB,WACvC,QAAQ,iBACR;AAAA;AAAA,IAGJ,MAAM,qBAAqB,CAC1B,YACmB;AAAA,MACnB,IAAI,OAAO,SAAS,UAAU;AAAA,QAAU,OAAO,QAAQ;AAAA,MACvD,OAAO,OAAO,SAAS,oBAAoB,WACxC,QAAQ,kBACR;AAAA;AAAA,IAGJ,MAAM,yBAAyB,CAC9B,OACA,eACY;AAAA,MACZ,MAAM,UAAU,MACd,IAAI,CAAC,SAAS,KAAK,KAAK,EACxB,OAAO,CAAC,UAA2B,OAAO,SAAS,KAAK,CAAC;AAAA,MAC3D,OAAO,QAAQ,SAAS,IAAI,KAAK,IAAI,GAAG,OAAO,IAAI,QAAQ;AAAA;AAAA,IAG5D,MAAM,sBAAsB,CAC3B,YACI;AAAA,MACJ,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,MAC9D,MAAM,SACL,OAAO,SAAS,WAAW,WAAW,QAAQ,SAAS;AAAA,MACxD,MAAM,QAAQ,OAAO,SAAS,UAAU,WAAW,QAAQ,QAAQ;AAAA,MACnE,IAAI,CAAC,aAAa,CAAC,UAAU,UAAU;AAAA,QAAM;AAAA,MAC7C,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,MAAM,eAAe,CAAC,GAAG,WAAW;AAAA,QACpC,MAAM,eAAe,aAAa,UACjC,CAAC,YAAY,QAAQ,OAAO,SAC7B;AAAA,QACA,IAAI,iBAAiB;AAAA,UAAI,OAAO;AAAA,QAChC,MAAM,gBAAgB,aAAa;AAAA,QACnC,MAAM,QAAQ,cAAc,QAAQ,CAAC,GAAG,cAAc,KAAK,IAAI,CAAC;AAAA,QAChE,IAAI,YAAY,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,MAAM;AAAA,QAC5D,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,QAC9D,IAAI,cAAc,IAAI;AAAA,UACrB,MAAM,UAAuB;AAAA,YAC5B,IAAI;AAAA,YACJ;AAAA,YACA,OAAO,uBAAuB,OAAO,SAAS;AAAA,YAC9C;AAAA,YACA,MAAM;AAAA,YACN,SAAS,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAAA,YACvC,aAAa,EAAE,MAAM,MAAM;AAAA,YAC3B,OAAO,cAAc;AAAA,YACrB,UAAU,cAAc;AAAA,YACxB,OAAO,cAAc;AAAA,YACrB,WAAW,KAAK,IAAI;AAAA,YACpB,aAAa;AAAA,YACb,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,gBAAgB;AAAA,UACjB;AAAA,UACA,MAAM,KAAK,OAAO;AAAA,UAClB,YAAY,MAAM,SAAS;AAAA,QAC5B,EAAO;AAAA,UACN,MAAM,WAAW,MAAM;AAAA,UACvB,MAAM,WAAW,YAAY,QAAQ;AAAA,UACrC,MAAM,WAAW,GAAG,WAAW;AAAA,UAC/B,MAAM,aAAa;AAAA,eACf;AAAA,YACH,SAAS,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAAA,YAC1C,aAAa,EAAE,MAAM,SAAS;AAAA,YAC9B,WAAW,aAAa,SAAS,aAAa;AAAA,YAC9C,aAAa;AAAA,UACd;AAAA;AAAA,QAED,aAAa,gBAAgB,KAAK,eAAe,MAAM;AAAA,QACvD,OAAO;AAAA,OAET;AAAA;AAAA,IAGD,MAAM,oBAAoB,CACzB,YACI;AAAA,MACJ,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,MAC9D,MAAM,SACL,OAAO,SAAS,WAAW,WAAW,QAAQ,SAAS;AAAA,MACxD,MAAM,cACL,OAAO,SAAS,SAAS,WAAW,QAAQ,OAAO;AAAA,MACpD,IAAI,gBAAgB,SAAS;AAAA,QAC5B,gBAAgB,OAAO;AAAA,QACvB;AAAA,MACD;AAAA,MACA,MAAM,QAAQ,OAAO,SAAS,UAAU,WAAW,QAAQ,QAAQ;AAAA,MACnE,IAAI,CAAC,aAAa,CAAC,UAAU,UAAU;AAAA,QAAM;AAAA,MAC7C,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,MAAM,eAAe,CAAC,GAAG,WAAW;AAAA,QACpC,MAAM,eAAe,aAAa,UACjC,CAAC,YAAY,QAAQ,OAAO,SAC7B;AAAA,QACA,IAAI,iBAAiB;AAAA,UAAI,OAAO;AAAA,QAChC,MAAM,gBAAgB,aAAa;AAAA,QACnC,MAAM,QAAQ,cAAc,QAAQ,CAAC,GAAG,cAAc,KAAK,IAAI,CAAC;AAAA,QAChE,IAAI,YAAY,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,MAAM;AAAA,QAC5D,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,QAC9D,IAAI,cAAc,IAAI;AAAA,UACrB,MAAM,UAAuB;AAAA,YAC5B,IAAI;AAAA,YACJ;AAAA,YACA,OAAO,uBAAuB,OAAO,SAAS;AAAA,YAC9C;AAAA,YACA,MAAM;AAAA,YACN,SAAS,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAAA,YACvC,aAAa,EAAE,MAAM,MAAM;AAAA,YAC3B,OAAO,cAAc;AAAA,YACrB,UAAU,cAAc;AAAA,YACxB,OAAO,cAAc;AAAA,YACrB,WAAW,KAAK,IAAI;AAAA,YACpB,aAAa;AAAA,YACb,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,gBAAgB;AAAA,UACjB;AAAA,UACA,MAAM,KAAK,OAAO;AAAA,UAClB,YAAY,MAAM,SAAS;AAAA,QAC5B,EAAO;AAAA,UACN,MAAM,WAAW,MAAM;AAAA,UACvB,MAAM,WAAW,YAAY,QAAQ;AAAA,UACrC,MAAM,WAAW,GAAG,WAAW;AAAA,UAC/B,MAAM,aAAa;AAAA,eACf;AAAA,YACH,SAAS,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAAA,YAC1C,aAAa,EAAE,MAAM,SAAS;AAAA,YAC9B,WAAW,aAAa,SAAS,aAAa;AAAA,YAC9C,aAAa;AAAA,UACd;AAAA;AAAA,QAED,aAAa,gBAAgB,KAAK,eAAe,MAAM;AAAA,QACvD,OAAO;AAAA,OAET;AAAA;AAAA,IAGD,MAAM,WAAW,CAAC,UAAmD;AAAA,MACpE,IAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,QAChE,OAAO;AAAA,MACR;AAAA,MACA,OAAO;AAAA;AAAA,IAGR,MAAM,oBAAoB,CACzB,YAC6B;AAAA,MAC7B,MAAM,gBAAgB,SAAS,QAAQ,OAAO;AAAA,MAC9C,IAAI;AAAA,QAAe,OAAO;AAAA,MAE1B,IAAI,OAAO,QAAQ,YAAY,UAAU;AAAA,QACxC,IAAI;AAAA,UACH,MAAM,SAAS,KAAK,MAAM,QAAQ,OAAO;AAAA,UACzC,MAAM,eAAe,SAAS,MAAM;AAAA,UACpC,IAAI;AAAA,YAAc,OAAO;AAAA,UACxB,MAAM;AAAA,MACT;AAAA,MAEA,MAAM,UACL,OAAO,QAAQ,UAAU,WACtB,QAAQ,QACR,OAAO,QAAQ,YAAY,WAC1B,QAAQ,UACR;AAAA,MACL,OAAO;AAAA,QACN;AAAA,QACA,MACC,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY;AAAA,QAC7D,SAAS,SAAS,QAAQ,OAAO,KAAK;AAAA,QACtC,WAAW,QAAQ,cAAc;AAAA,QACjC,eAAe,QAAQ,kBAAkB;AAAA,MAC1C;AAAA;AAAA,IAGD,MAAM,kBAAkB,CAAC,YAAiD;AAAA,MACzE,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,MAC9D,IAAI,CAAC,WAAW,CAAC;AAAA,QAAW;AAAA,MAE5B,MAAM,cAAc,kBAAkB,OAAO;AAAA,MAC7C,MAAM,UAAU,KAAK,UAAU,WAAW;AAAA,MAC1C,MAAM,eACL,OAAO,YAAY,YAAY,WAC5B,YAAY,UACZ,OAAO,QAAQ,UAAU,WACxB,QAAQ,QACR;AAAA,MACL,MAAM,YACL,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY;AAAA,MAC7D,MAAM,SACL,OAAO,QAAQ,WAAW,WACvB,QAAQ,SACR,SAAS;AAAA,MAEb,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,MAAM,eAAe,CAAC,GAAG,WAAW;AAAA,QACpC,MAAM,eAAe,aAAa,UACjC,CAAC,YAAY,QAAQ,OAAO,SAC7B;AAAA,QACA,IAAI,iBAAiB;AAAA,UAAI,OAAO;AAAA,QAChC,MAAM,gBAAgB,aAAa;AAAA,QACnC,MAAM,QAAQ,cAAc,QAAQ,CAAC,GAAG,cAAc,KAAK,IAAI,CAAC;AAAA,QAChE,MAAM,YAAY,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,MAAM;AAAA,QAC9D,IAAI,cAAc,IAAI;AAAA,UACrB,MAAM,UAAuB;AAAA,YAC5B,IAAI;AAAA,YACJ;AAAA,YACA,OAAO,uBAAuB,OAAO,SAAS;AAAA,YAC9C;AAAA,YACA,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA,OAAO,cAAc;AAAA,YACrB,UAAU,cAAc;AAAA,YACxB,OAAO,cAAc;AAAA,YACrB,WAAW,KAAK,IAAI;AAAA,YACpB,aAAa,KAAK,IAAI;AAAA,YACtB,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,gBAAgB;AAAA,UACjB;AAAA,UACA,MAAM,KAAK,OAAO;AAAA,QACnB,EAAO;AAAA,UACN,MAAM,aAAa;AAAA,eACf,MAAM;AAAA,YACT;AAAA,YACA;AAAA,YACA,WAAW,aAAa,MAAM,WAAW,aAAa;AAAA,YACtD,aAAa,KAAK,IAAI;AAAA,UACvB;AAAA;AAAA,QAED,aAAa,gBAAgB;AAAA,aACzB;AAAA,UACH,QAAQ;AAAA,UACR,aAAa,cAAc,eAAe,KAAK,IAAI;AAAA,UACnD,OAAO;AAAA,UACP;AAAA,QACD;AAAA,QACA,OAAO;AAAA,OAET;AAAA;AAAA,IAGD,MAAM,0BAA0B,CAC/B,YACI;AAAA,MACJ,IAAI,CAAC;AAAA,QAAS;AAAA,MACd,MAAM,SAAS,mBAAmB,OAAO;AAAA,MACzC,MAAM,OAAO,iBAAiB,OAAO;AAAA,MACrC,IAAI,CAAC;AAAA,QAAM;AAAA,MAEX,IAAI,SAAS,WAAW,SAAS,eAAe;AAAA,QAC/C,MAAM,YAAY,iBAAiB,OAAO;AAAA,QAC1C,MAAM,iBAAiB,YACnB,oBAAoB,QAAQ,IAAI,SAAS,GAAG,UAAU,IACvD;AAAA,QACH,IAAI,kBAAkB,iCAAiC;AAAA,UACtD,MAAM,UAAU,UAAU,QAAQ;AAAA,UAClC,MAAM,MAAM,KAAK,IAAI;AAAA,UACrB,MAAM,OAAO,mBAAmB,QAAQ,IAAI,OAAO,KAAK;AAAA,UACxD,IAAI,MAAM,OAAO;AAAA,YAAoC;AAAA,UACrD,mBAAmB,QAAQ,IAAI,SAAS,GAAG;AAAA,QAC5C;AAAA,MACD;AAAA,MAEA,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,MAAM,eAAe,CAAC,GAAG,WAAW;AAAA,QACpC,IAAI,cAAc,4BAA4B,YAAY;AAAA,QAC1D,IAAI,OAAO,QAAQ,cAAc,UAAU;AAAA,UAC1C,MAAM,gBAAgB,aAAa,UAClC,CAAC,YAAY,QAAQ,OAAO,QAAQ,SACrC;AAAA,UACA,IAAI,kBAAkB;AAAA,YAAI,cAAc;AAAA,QACzC;AAAA,QACA,IAAI,gBAAgB;AAAA,UAAI,OAAO;AAAA,QAC/B,MAAM,gBAAgB,aAAa;AAAA,QACnC,MAAM,QAAQ,cAAc,QAAQ,CAAC,GAAG,cAAc,KAAK,IAAI,CAAC;AAAA,QAChE,IAAI,YAAY;AAAA,QAChB,IAAI,QAAQ;AAAA,UACX,YAAY,MAAM,UACjB,CAAC,SAAS,KAAK,eAAe,UAAU,KAAK,SAC9C;AAAA,QACD;AAAA,QAEA,IAAI,cAAc,MAAM,CAAC,QAAQ;AAAA,UAChC,YAAY,MAAM,UACjB,CAAC,SAAS,KAAK,aAAa,KAAK,aAAa,IAC/C;AAAA,QACD;AAAA,QACA,MAAM,OAAO,iBAAiB,OAAO;AAAA,QACrC,MAAM,YACL,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY;AAAA,QAC7D,MAAM,kBAA2C,EAAE,KAAK;AAAA,QACxD,IAAI;AAAA,UAAQ,gBAAgB,SAAS;AAAA,QACrC,IAAI,SAAS;AAAA,UAAW,gBAAgB,OAAO;AAAA,QAC/C,IAAI,cAAc,IAAI;AAAA,UACrB,MAAM,UAAuB;AAAA,YAC5B,IAAI,SACD,uBAAuB,WACvB,uBAAuB,QAAQ,KAAK,IAAI;AAAA,YAC3C,WAAW,cAAc;AAAA,YACzB,OAAO,uBAAuB,OAAO,SAAS;AAAA,YAC9C;AAAA,YACA,MAAM;AAAA,YACN,SAAS,KAAK,UAAU,eAAe;AAAA,YACvC,aAAa;AAAA,YACb,OAAO,cAAc;AAAA,YACrB,UAAU,cAAc;AAAA,YACxB,OAAO,cAAc;AAAA,YACrB,WAAW,KAAK,IAAI;AAAA,YACpB,aAAa;AAAA,YACb,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,WAAW;AAAA,UACZ;AAAA,UACA,MAAM,KAAK,OAAO;AAAA,QACnB,EAAO;AAAA,UACN,MAAM,WAAW,MAAM;AAAA,UACvB,MAAM,kBAA2C;AAAA,eAC5C,OAAO,SAAS,gBAAgB,YACpC,CAAC,MAAM,QAAQ,SAAS,WAAW,IAC/B,SAAS,cACV,CAAC;AAAA,YACJ;AAAA,UACD;AAAA,UACA,IAAI;AAAA,YAAQ,gBAAgB,SAAS;AAAA,UACrC,IAAI,SAAS;AAAA,YAAW,gBAAgB,OAAO;AAAA,UAC/C,MAAM,aAAa;AAAA,eACf;AAAA,YACH,SAAS,KAAK,UAAU,eAAe;AAAA,YACvC,aAAa;AAAA,YACb,WAAW,aAAa,SAAS,aAAa;AAAA,YAC9C,YAAY,UAAU,SAAS;AAAA,YAC/B,UAAU;AAAA,UACX;AAAA;AAAA,QAED,aAAa,eAAe,KAAK,eAAe,MAAM;AAAA,QACtD,OAAO;AAAA,OAET;AAAA;AAAA,IAGD,MAAM,2BAA2B,CAChC,SACA,UACI;AAAA,MACJ,IAAI,CAAC;AAAA,QAAS;AAAA,MACd,MAAM,SAAS,mBAAmB,OAAO;AAAA,MACzC,MAAM,OAAO,iBAAiB,OAAO;AAAA,MACrC,IAAI,CAAC;AAAA,QAAM;AAAA,MACX,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,MAAM,eAAe,CAAC,GAAG,WAAW;AAAA,QACpC,IAAI,cAAc,4BAA4B,YAAY;AAAA,QAC1D,IAAI,OAAO,QAAQ,cAAc,UAAU;AAAA,UAC1C,MAAM,gBAAgB,aAAa,UAClC,CAAC,YAAY,QAAQ,OAAO,QAAQ,SACrC;AAAA,UACA,IAAI,kBAAkB;AAAA,YAAI,cAAc;AAAA,QACzC;AAAA,QACA,IAAI,gBAAgB;AAAA,UAAI,OAAO;AAAA,QAC/B,MAAM,gBAAgB,aAAa;AAAA,QACnC,MAAM,QAAQ,cAAc,QAAQ,CAAC,GAAG,cAAc,KAAK,IAAI,CAAC;AAAA,QAChE,IAAI,YAAY;AAAA,QAChB,IAAI,QAAQ;AAAA,UACX,YAAY,MAAM,UACjB,CAAC,SAAS,KAAK,eAAe,UAAU,KAAK,SAC9C;AAAA,QACD;AAAA,QACA,IAAI,cAAc,MAAM,CAAC,QAAQ;AAAA,UAChC,YAAY,MAAM,UACjB,CAAC,SAAS,KAAK,aAAa,KAAK,aAAa,IAC/C;AAAA,QACD;AAAA,QACA,MAAM,YACL,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY;AAAA,QAC7D,IAAI,cAAc,IAAI;AAAA,UACrB,MAAM,kBAA2C;AAAA,YAChD;AAAA,YACA,gBAAgB,6BAA6B,KAAK;AAAA,UACnD;AAAA,UACA,IAAI;AAAA,YAAQ,gBAAgB,SAAS;AAAA,UACrC,MAAM,UAAuB;AAAA,YAC5B,IAAI,SACD,uBAAuB,WACvB,uBAAuB,QAAQ,KAAK,IAAI;AAAA,YAC3C,WAAW,cAAc;AAAA,YACzB,OAAO,uBAAuB,OAAO,SAAS;AAAA,YAC9C;AAAA,YACA,MAAM;AAAA,YACN,SAAS,KAAK,UAAU,eAAe;AAAA,YACvC,aAAa;AAAA,YACb,OAAO,cAAc;AAAA,YACrB,UAAU,cAAc;AAAA,YACxB,OAAO,cAAc;AAAA,YACrB,WAAW,KAAK,IAAI;AAAA,YACpB,aAAa;AAAA,YACb,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,WAAW;AAAA,UACZ;AAAA,UACA,MAAM,KAAK,OAAO;AAAA,QACnB,EAAO;AAAA,UACN,MAAM,WAAW,MAAM;AAAA,UACvB,MAAM,OACL,OAAQ,SAAS,aACd,mBAAmB,WACjB,SAAS,YACV,iBACD;AAAA,UACJ,MAAM,kBAA2C;AAAA,eAC5C,OAAO,SAAS,gBAAgB,YACpC,CAAC,MAAM,QAAQ,SAAS,WAAW,IAC/B,SAAS,cACV,CAAC;AAAA,YACJ,gBAAgB,6BAA6B,OAAO,KAAK;AAAA,UAC1D;AAAA,UACA,MAAM,aAAa;AAAA,eACf;AAAA,YACH,SAAS,KAAK,UAAU,eAAe;AAAA,YACvC,aAAa;AAAA,YACb,WAAW,aAAa,SAAS,aAAa;AAAA,UAC/C;AAAA;AAAA,QAED,aAAa,eAAe,KAAK,eAAe,MAAM;AAAA,QACtD,OAAO;AAAA,OAET;AAAA;AAAA,IAGD,MAAM,4BAA4B,CACjC,SACA,UACI;AAAA,MACJ,IAAI,CAAC;AAAA,QAAS;AAAA,MACd,MAAM,SAAS,mBAAmB,OAAO;AAAA,MACzC,MAAM,OAAO,iBAAiB,OAAO;AAAA,MACrC,IAAI,CAAC;AAAA,QAAM;AAAA,MACX,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,MAAM,eAAe,CAAC,GAAG,WAAW;AAAA,QACpC,IAAI,cAAc,4BAA4B,YAAY;AAAA,QAC1D,IAAI,OAAO,QAAQ,cAAc,UAAU;AAAA,UAC1C,MAAM,gBAAgB,aAAa,UAClC,CAAC,YAAY,QAAQ,OAAO,QAAQ,SACrC;AAAA,UACA,IAAI,kBAAkB;AAAA,YAAI,cAAc;AAAA,QACzC;AAAA,QACA,IAAI,gBAAgB;AAAA,UAAI,OAAO;AAAA,QAC/B,MAAM,gBAAgB,aAAa;AAAA,QACnC,MAAM,QAAQ,cAAc,QAAQ,CAAC,GAAG,cAAc,KAAK,IAAI,CAAC;AAAA,QAChE,IAAI,YAAY;AAAA,QAChB,IAAI,QAAQ;AAAA,UACX,YAAY,MAAM,UACjB,CAAC,SAAS,KAAK,eAAe,UAAU,KAAK,SAC9C;AAAA,QACD;AAAA,QACA,IAAI,cAAc,MAAM,CAAC,QAAQ;AAAA,UAChC,YAAY,MAAM,UACjB,CAAC,SAAS,KAAK,aAAa,KAAK,aAAa,IAC/C;AAAA,QACD;AAAA,QACA,MAAM,YACL,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY;AAAA,QAC7D,IAAI,cAAc,IAAI;AAAA,UACrB,MAAM,kBAA2C;AAAA,YAChD;AAAA,YACA,iBAAiB;AAAA,UAClB;AAAA,UACA,IAAI;AAAA,YAAQ,gBAAgB,SAAS;AAAA,UACrC,MAAM,UAAuB;AAAA,YAC5B,IAAI,SACD,uBAAuB,WACvB,uBAAuB,QAAQ,KAAK,IAAI;AAAA,YAC3C,WAAW,cAAc;AAAA,YACzB,OAAO,uBAAuB,OAAO,SAAS;AAAA,YAC9C;AAAA,YACA,MAAM;AAAA,YACN,SAAS,KAAK,UAAU,eAAe;AAAA,YACvC,aAAa;AAAA,YACb,OAAO,cAAc;AAAA,YACrB,UAAU,cAAc;AAAA,YACxB,OAAO,cAAc;AAAA,YACrB,WAAW,KAAK,IAAI;AAAA,YACpB,aAAa;AAAA,YACb,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,WAAW;AAAA,UACZ;AAAA,UACA,MAAM,KAAK,OAAO;AAAA,QACnB,EAAO;AAAA,UACN,MAAM,WAAW,MAAM;AAAA,UACvB,MAAM,OACL,OAAQ,SAAS,aACd,oBAAoB,WAClB,SAAS,YACV,kBACD;AAAA,UACJ,MAAM,kBAA2C;AAAA,eAC5C,OAAO,SAAS,gBAAgB,YACpC,CAAC,MAAM,QAAQ,SAAS,WAAW,IAC/B,SAAS,cACV,CAAC;AAAA,YACJ,iBAAiB,OAAO;AAAA,UACzB;AAAA,UACA,MAAM,aAAa;AAAA,eACf;AAAA,YACH,SAAS,KAAK,UAAU,eAAe;AAAA,YACvC,aAAa;AAAA,YACb,WAAW,aAAa,SAAS,aAAa;AAAA,UAC/C;AAAA;AAAA,QAED,aAAa,eAAe,KAAK,eAAe,MAAM;AAAA,QACtD,OAAO;AAAA,OAET;AAAA;AAAA,IAGD,MAAM,2BAA2B,CAChC,YACI;AAAA,MACJ,MAAM,SAAS,mBAAmB,OAAO;AAAA,MACzC,IAAI,CAAC;AAAA,QAAQ;AAAA,MACb,MAAM,cAAc,iBAAiB,OAAO;AAAA,MAC5C,MAAM,mBACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,MAC9D,MAAM,mBACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,MAC9D,MAAM,gBAAgB,SAAS;AAAA,MAC/B,MAAM,kBAAkB,SAAS;AAAA,MACjC,MAAM,cAAc,iBAAiB,OAAO;AAAA,MAC5C,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,IAAI,UAAU;AAAA,QACd,MAAM,MAAM,KAAK,IAAI;AAAA,QACrB,MAAM,eAAe,YAAY,IAAI,CAAC,YAAY;AAAA,UACjD,IAAI,oBAAoB,QAAQ,OAAO,kBAAkB;AAAA,YACxD,OAAO;AAAA,UACR;AAAA,UACA,IAAI,CAAC,QAAQ,OAAO;AAAA,YAAQ,OAAO;AAAA,UACnC,IAAI,iBAAiB;AAAA,UACrB,MAAM,eAAe,QAAQ,MAAM,IAAI,CAAC,SAAS;AAAA,YAChD,IAAI,EAAE,KAAK,aAAa,KAAK,eAAe,SAAS;AAAA,cACpD,OAAO;AAAA,YACR;AAAA,YACA,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,MAAM,kBAA2C;AAAA,iBAC5C,OAAO,KAAK,gBAAgB,YAChC,CAAC,MAAM,QAAQ,KAAK,WAAW,IAC3B,KAAK,cACN,CAAC;AAAA,cACJ,MAAM,eAAe,KAAK,YAAY;AAAA,cACtC;AAAA,YACD;AAAA,YACA,IAAI,gBAAgB;AAAA,cAAW,gBAAgB,OAAO;AAAA,YACtD,IAAI,kBAAkB;AAAA,cACrB,gBAAgB,SAAS;AAAA,YAC1B,IAAI,oBAAoB;AAAA,cACvB,gBAAgB,WAAW;AAAA,YAC5B,MAAM,aACL,KAAK,aAAa,OAAO,SAAS,KAAK,SAAS,IAC7C,KAAK,IAAI,GAAG,MAAM,KAAK,SAAS,IAChC,KAAK;AAAA,YACT,MAAM,eAA4B;AAAA,iBAC9B;AAAA,cACH,MAAM;AAAA,cACN,SAAS,KAAK,UAAU,eAAe;AAAA,cACvC,aAAa;AAAA,cACb,WAAW,oBAAoB,KAAK,aAAa;AAAA,cACjD,aAAa;AAAA,cACb,UAAU,eAAe,KAAK;AAAA,cAC9B,gBAAgB,cAAc;AAAA,YAC/B;AAAA,YACA,OAAO;AAAA,WACP;AAAA,UACD,IAAI,CAAC;AAAA,YAAgB,OAAO;AAAA,UAC5B,OAAO,KAAK,SAAS,OAAO,aAAa;AAAA,SACzC;AAAA,QACD,OAAO,UAAU,eAAe;AAAA,OAElC;AAAA;AAAA,IAGD,MAAM,0BAA0B,CAC/B,YACI;AAAA,MACJ,MAAM,SAAS,mBAAmB,OAAO;AAAA,MACzC,IAAI,CAAC;AAAA,QAAQ;AAAA,MACb,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,IAAI,UAAU;AAAA,QACd,MAAM,eAAe,YAAY,IAAI,CAAC,YAAY;AAAA,UACjD,IAAI,CAAC,QAAQ,OAAO;AAAA,YAAQ,OAAO;AAAA,UACnC,MAAM,WAAW,QAAQ,MAAM,OAC9B,CAAC,SAAS,EAAE,KAAK,aAAa,KAAK,eAAe,OACnD;AAAA,UACA,IAAI,SAAS,WAAW,QAAQ,MAAM;AAAA,YAAQ,OAAO;AAAA,UACrD,UAAU;AAAA,UACV,OAAO,KAAK,SAAS,OAAO,SAAS;AAAA,SACrC;AAAA,QACD,OAAO,UAAU,eAAe;AAAA,OAElC;AAAA;AAAA,IAGD,MAAM,2BAA2B,CAAC,cAA6B;AAAA,MAC9D,IAAI,CAAC;AAAA,QAAW;AAAA,MAChB,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,MAAM,cAAc,YAAY,UAC/B,CAAC,YAAY,QAAQ,OAAO,SAC7B;AAAA,QACA,IAAI,gBAAgB;AAAA,UAAI,OAAO;AAAA,QAC/B,MAAM,SAAS,YAAY;AAAA,QAC3B,IACC,CAAC,OAAO,OAAO,KACd,CAAC,SAAS,KAAK,aAAa,KAAK,SAAS,WAC3C;AAAA,UAEA,OAAO;AAAA,QACR,MAAM,eAAe,CAAC,GAAG,WAAW;AAAA,QACpC,aAAa,eAAe;AAAA,aACxB;AAAA,UACH,OACC,OAAO,OAAO,OACb,CAAC,SAAS,EAAE,KAAK,aAAa,KAAK,SAAS,YAC7C,KAAK,CAAC;AAAA,QACR;AAAA,QACA,OAAO;AAAA,OAET;AAAA;AAAA,IAGD,MAAM,uBAAuB,CAC5B,YACI;AAAA,MACJ,MAAM,KAAK,OAAO,SAAS,OAAO,WAAW,QAAQ,KAAK;AAAA,MAC1D,IAAI,CAAC;AAAA,QAAI;AAAA,MACT,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,QAChB,IAAI,CAAC;AAAA,UAAa,OAAO;AAAA,QACzB,MAAM,eAAe,CAAC,GAAG,WAAW;AAAA,QACpC,MAAM,eAAe,aAAa,UACjC,CAAC,YAAY,QAAQ,OAAO,EAC7B;AAAA,QACA,IAAI,iBAAiB;AAAA,UAAI,OAAO;AAAA,QAChC,MAAM,WAAW,aAAa;AAAA,QAC9B,aAAa,gBAAgB;AAAA,aACzB;AAAA,UACH,QAAQ;AAAA,UACR,aAAa,KAAK,IAAI;AAAA,QACvB;AAAA,QACA,OAAO;AAAA,OAET;AAAA;AAAA,IAGD,MAAM,cAAc,QAAO,GAAG,KAAK,CAAC,UAAU;AAAA,MAE7C,MAAM,UAAU,MAAM;AAAA,MAEtB,QAAQ,MAAM;AAAA,aACR,mBAAmB;AAAA,UACvB,MAAM,OAAO,OAAO,SAAS,SAAS,WAAW,QAAQ,OAAO;AAAA,UAChE,MAAM,KAAK,OAAO,SAAS,OAAO,WAAW,QAAQ,KAAK;AAAA,UAC1D,IAAI,SAAS,eAAe,IAAI;AAAA,YAC/B,sBAAsB,UAAU;AAAA,YAChC,2BAA2B,aAAa,WAAW,EAAE;AAAA,UACtD;AAAA,UACA,IAAI,MAAM,MAAM;AAAA,YACf,MAAM,QACL,OAAO,SAAS,UAAU,WAAW,QAAQ,QAAQ;AAAA,YACtD,MAAM,WACL,OAAO,SAAS,aAAa,WAAW,QAAQ,WAAW;AAAA,YAC5D,MAAM,QACL,OAAO,SAAS,UAAU,WAAW,QAAQ,QAAQ;AAAA,YACtD,MAAM,UACL,OAAO,SAAS,YAAY,WAAW,QAAQ,UAAU;AAAA,YAC1D,MAAM,YACL,SAAS,UAAU,UAChB;AAAA,cACA;AAAA,gBACC,IAAI,GAAG;AAAA,gBACP,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,WAAW;AAAA,gBACX,MAAM;AAAA,gBACN,SAAS,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAAA,gBACzC,aAAa,EAAE,MAAM,QAAQ;AAAA,gBAC7B;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,WAAW,KAAK,IAAI;AAAA,gBACpB,aAAa,KAAK,IAAI;AAAA,gBACtB,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,gBAAgB;AAAA,cACjB;AAAA,YACD,IACC,CAAC;AAAA,YACL,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,cAChB,IAAI,CAAC;AAAA,gBAAa,OAAO;AAAA,cACzB,IAAI,YAAY,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,gBAAG,OAAO;AAAA,cACjD,MAAM,aAAsB;AAAA,gBAC3B;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,QAAQ,SAAS,SAAS,aAAa;AAAA,gBACvC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,WAAW,KAAK,IAAI;AAAA,gBACpB,aAAa;AAAA,gBACb,WAAW;AAAA,gBACX,cAAc;AAAA,gBACd,kBAAkB;AAAA,gBAClB,aAAa;AAAA,gBACb,OAAO;AAAA,gBACP,OAAO;AAAA,cACR;AAAA,cACA,MAAM,OAAO,CAAC,GAAG,aAAa,UAAU;AAAA,cACxC,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;AAAA,cAC7C,OAAO;AAAA,aAET;AAAA,UACD;AAAA,UACA;AAAA,QACD;AAAA,aACK,sBAAsB;AAAA,UAC1B,kBAAkB,OAAO;AAAA,UACzB;AAAA,QACD;AAAA,aACK,mBAAmB;AAAA,UACvB,oBAAoB,OAAO;AAAA,UAC3B;AAAA,QACD;AAAA,aACK,qBAAqB;AAAA,UACzB,MAAM,KAAK,OAAO,SAAS,OAAO,WAAW,QAAQ,KAAK;AAAA,UAC1D,IAAI,MAAM,sBAAsB,YAAY,IAAI;AAAA,YAC/C,sBAAsB,UAAU;AAAA,UACjC;AAAA,UACA,qBAAqB,OAAO;AAAA,UAC5B,yBAAyB,EAAE;AAAA,UAC3B,IAAI,IAAI;AAAA,YACP,YAAY,aACX,CAAC,cAAc,SAAS,GACxB,CAAC,YAAY;AAAA,cACZ,IAAI,CAAC,WAAW,QAAQ,qBAAqB;AAAA,gBAAI,OAAO;AAAA,cACxD,OAAO,oBAAoB;AAAA,gBAC1B,kBAAkB;AAAA,gBAClB,gBAAgB,CAAC;AAAA,gBACjB,WAAW;AAAA,cACZ,CAAC;AAAA,aAEH;AAAA,UACD;AAAA,UACA,YAAY,kBAAkB,EAAE,UAAU,CAAC,YAAY,SAAS,EAAE,CAAC;AAAA,UACnE,YAAY,kBAAkB,EAAE,UAAU,iBAAiB,CAAC;AAAA,UAC5D,YAAY,kBAAkB,EAAE,UAAU,CAAC,WAAW,SAAS,EAAE,CAAC;AAAA,UAClE,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,SAAS,EAAE,CAAC;AAAA,UAC/D,YAAY,kBAAkB,EAAE,UAAU,CAAC,SAAS,SAAS,EAAE,CAAC;AAAA,UAChE,YAAY,kBAAkB,EAAE,UAAU,CAAC,aAAa,SAAS,EAAE,CAAC;AAAA,UACpE;AAAA,QACD;AAAA,aACK,cAAc;AAAA,UAClB,MAAM,UACL,OAAO,SAAS,YAAY,WAAW,QAAQ,UAAU;AAAA,UAC1D,MAAM,QACL,YAAY,WACT,mBAAmB,OAAO,IAC1B,kBAAkB,OAAO;AAAA,UAC7B,IAAI,YAAY,WAAY,WAAW,QAAQ,OAAQ;AAAA,YACtD,IAAI,OAAO;AAAA,cACV,yBAAyB,SAAS,KAAK;AAAA,cACvC,8BAA8B,cAAc,SAAS,KAAK;AAAA,YAC3D,EAAO;AAAA,cACN,wBAAwB,OAAO;AAAA,cAC/B,8BAA8B,cAAc,OAAO;AAAA;AAAA,UAErD,EAAO,SAAI,YAAY,YAAY,OAAO;AAAA,YACzC,0BAA0B,SAAS,KAAK;AAAA,UACzC;AAAA,UACA;AAAA,QACD;AAAA,aACK,aAAa;AAAA,UACjB,wBAAwB,OAAO;AAAA,UAC/B,8BAA8B,aAAa,OAAO;AAAA,UAClD;AAAA,QACD;AAAA,aACK,eAAe;AAAA,UACnB,yBAAyB,OAAO;AAAA,UAChC,8BAA8B,eAAe,OAAO;AAAA,UACpD,MAAM,MAAM,iBAAiB,OAAO;AAAA,UACpC,IAAI;AAAA,YAAK,oBAAoB,QAAQ,OAAO,GAAG;AAAA,UAC/C;AAAA,QACD;AAAA,aACK,0BAA0B;AAAA,UAC9B,MAAM,SACL,OAAO,SAAS,WAAW,WAAW,QAAQ,SAAS;AAAA,UACxD,MAAM,WACL,OAAO,SAAS,aAAa,WAAW,QAAQ,WAAW;AAAA,UAC5D,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,UAC9D,MAAM,OAAO,SAAS;AAAA,UACtB,IAAI,UAAU,YAAY,WAAW;AAAA,YACpC,mBAAmB;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,WAAW,KAAK,IAAI;AAAA,YACrB,CAAC;AAAA,UACF;AAAA,UACA;AAAA,QACD;AAAA,aACK,0BAA0B;AAAA,UAC9B,MAAM,SACL,OAAO,SAAS,WAAW,WAAW,QAAQ,SAAS;AAAA,UACxD,IAAI,QAAQ;AAAA,YACX,sBAAsB,MAAM;AAAA,UAC7B;AAAA,UACA;AAAA,QACD;AAAA,aACK,yBAAyB;AAAA,UAC7B,MAAM,SACL,OAAO,SAAS,WAAW,WAAW,QAAQ,SAAS;AAAA,UACxD,MAAM,OAAO,SAAS;AAAA,UACtB,IAAI,QAAQ;AAAA,YACX,sBAAsB,QAAQ,IAAI;AAAA,UACnC;AAAA,UACA;AAAA,QACD;AAAA,aACK,+BAA+B;AAAA,UACnC,MAAM,WACL,OAAO,SAAS,aAAa,WAAW,QAAQ,WAAW;AAAA,UAC5D,MAAM,SACL,OAAO,SAAS,WAAW,WAAW,QAAQ,SAAS;AAAA,UACxD,IAAI,YAAY,QAAQ;AAAA,YACvB,gBAAgB;AAAA,cACf;AAAA,cACA;AAAA,cACA,WACC,OAAO,SAAS,cAAc,WAC3B,QAAQ,YACR;AAAA,cACJ,QACC,OAAO,SAAS,WAAW,WACxB,QAAQ,SACR;AAAA,cACJ,WAAW;AAAA,cACX,WAAW,KAAK,IAAI;AAAA,YACrB,CAAC;AAAA,UACF;AAAA,UACA;AAAA,QACD;AAAA,aACK,+BAA+B;AAAA,UACnC,MAAM,WACL,OAAO,SAAS,aAAa,WAAW,QAAQ,WAAW;AAAA,UAC5D,IAAI,UAAU;AAAA,YACb,mBAAmB,QAAQ;AAAA,UAC5B;AAAA,UACA;AAAA,QACD;AAAA,aACK,SAAS;AAAA,UACb,8BAA8B,SAAS,OAAO;AAAA,UAC9C,wBAAwB,OAAO;AAAA,UAC/B,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,UAC9D,IAAI,WAAW;AAAA,YACd,IAAI,sBAAsB,YAAY,WAAW;AAAA,cAChD,sBAAsB,UAAU;AAAA,YACjC;AAAA,YACA,yBAAyB,SAAS;AAAA,YAClC,gBAAgB,OAAO;AAAA,UACxB;AAAA,UACA,YAAY,kBAAkB,EAAE,UAAU,CAAC,YAAY,SAAS,EAAE,CAAC;AAAA,UACnE;AAAA,QACD;AAAA,aACK,mBAAmB;AAAA,UACvB,MAAM,KAAK,OAAO,SAAS,OAAO,WAAW,QAAQ,KAAK;AAAA,UAC1D,MAAM,SACL,OAAO,SAAS,WAAW,WAAW,QAAQ,SAAS;AAAA,UACxD,IAAI,MAAM,QAAQ;AAAA,YACjB,IAAI,WAAW,aAAa,sBAAsB,YAAY,IAAI;AAAA,cACjE,sBAAsB,UAAU;AAAA,YACjC;AAAA,YACA,IAAI,WAAW,WAAW;AAAA,cACzB,yBAAyB,EAAE;AAAA,YAC5B;AAAA,YACA,MAAM,QACL,OAAO,SAAS,UAAU,WAAW,QAAQ,QAAQ;AAAA,YACtD,YAAY,aACX,CAAC,YAAY,SAAS,GACtB,CAAC,gBAAgB;AAAA,cAChB,IAAI,CAAC;AAAA,gBAAa,OAAO;AAAA,cACzB,MAAM,MAAM,YAAY,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,cACpD,IAAI,QAAQ;AAAA,gBAAI,OAAO;AAAA,cACvB,MAAM,OAAO,CAAC,GAAG,WAAW;AAAA,cAC5B,KAAK,OAAO;AAAA,mBACR,KAAK;AAAA,gBACR;AAAA,gBACA,aACC,WAAW,YACR,KAAK,KAAK,cACT,KAAK,KAAK,eAAe,KAAK,IAAI;AAAA,gBACvC,OAAO,SAAS,KAAK,KAAK;AAAA,cAC3B;AAAA,cACA,OAAO;AAAA,aAET;AAAA,UACD;AAAA,UACA;AAAA,QACD;AAAA,aACK,gBAAgB;AAAA,UACpB,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,SAAS,EAAE,CAAC;AAAA,UAC/D,YAAY,kBAAkB,EAAE,UAAU,CAAC,SAAS,SAAS,EAAE,CAAC;AAAA,UAChE,YAAY,kBAAkB;AAAA,YAC7B,UAAU,CAAC,aAAa,SAAS;AAAA,UAClC,CAAC;AAAA,UACD;AAAA,QACD;AAAA,aACK,iBAAiB;AAAA,UACrB,MAAM,aAAa,oBAAoB;AAAA,YACtC,kBAAkB,SAAS;AAAA,YAC3B,gBAAiB,SAAS,kBAAkB,CAAC;AAAA,YAI7C,WACC,OAAO,SAAS,cAAc,YAC3B,QAAQ,YACR;AAAA,UACL,CAAC;AAAA,UACD,YAAY,aAAa,CAAC,cAAc,SAAS,GAAG,UAAU;AAAA,UAC9D;AAAA,QACD;AAAA;AAAA,UAEC;AAAA;AAAA,MAGF,IAAI,MAAM,SAAS,eAAe;AAAA,QACjC,MAAM,MAAM,KAAK,IAAI;AAAA,QACrB,IAAI,MAAM,2BAA2B,MAAM;AAAA,UAC1C,0BAA0B;AAAA,UAC1B,YAAY,kBAAkB,EAAE,UAAU,iBAAiB,CAAC;AAAA,UAC5D,YAAY,kBAAkB,EAAE,UAAU,CAAC,WAAW,SAAS,EAAE,CAAC;AAAA,QACnE;AAAA,MACD;AAAA,KACA;AAAA,IAED,OAAO,MAAM;AAAA,MACZ,YAAY;AAAA,MACZ,QAAO,WAAW;AAAA;AAAA,KAEjB;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA;;AIz/DF,sBAAS,sBAAW;AACpB,2BAAS;AACT;AAAA;AAAA;AAAA;;;ACFA,mBAAS;AA0BT,IAAI,UAAU;AAEP,IAAM,gBAAgB,SAAmB,CAAC,SAAS;AAAA,EACzD,QAAQ,CAAC;AAAA,EACT,UAAU,CAAC,UAAU;AAAA,IACpB,MAAM,KAAK,SAAS,EAAE;AAAA,IACtB,IAAI,CAAC,WAAW;AAAA,MACf,QAAQ,CAAC,GAAG,MAAM,QAAQ,KAAK,OAAO,GAAG,CAAC;AAAA,IAC3C,EAAE;AAAA,IACF,OAAO;AAAA;AAAA,EAER,aAAa,CAAC,OACb,IAAI,CAAC,WAAW;AAAA,IACf,QAAQ,MAAM,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,EAC/C,EAAE;AAAA,EACH,aAAa,CAAC,IAAI,YACjB,IAAI,CAAC,WAAW;AAAA,IACf,QAAQ,MAAM,OAAO,IAAI,CAAC,MAAO,EAAE,OAAO,KAAK,KAAK,MAAM,QAAQ,IAAI,CAAE;AAAA,EACzE,EAAE;AAAA,EACH,aAAa,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;AACtC,EAAE;AAEK,SAAS,KAAK,CACpB,SACA,OAAkB,WAClB,WAAW,MACV;AAAA,EACD,MAAM,KAAK,cAAc,SAAS,EAAE,SAAS,EAAE,SAAS,MAAM,SAAS,CAAC;AAAA,EACxE,IAAI,WAAW,GAAG;AAAA,IACjB,WAAW,MAAM;AAAA,MAChB,cAAc,SAAS,EAAE,YAAY,EAAE;AAAA,OACrC,QAAQ;AAAA,EACZ;AAAA,EACA,OAAO;AAAA;AAGR,MAAM,UAAU,CAAC,SAAiB,WAAW,SAC5C,MAAM,SAAS,WAAW,QAAQ;AACnC,MAAM,QAAQ,CAAC,SAAiB,WAAW,SAC1C,MAAM,SAAS,SAAS,QAAQ;AACjC,MAAM,OAAO,CAAC,SAAiB,WAAW,SACzC,MAAM,SAAS,WAAW,QAAQ;AACnC,MAAM,UAAU,CAAC,YAAoB,MAAM,SAAS,WAAW,CAAC;AAEhE,MAAM,oBAAoB,CACzB,SACA,QAKA,WAAW,SACP;AAAA,EACJ,MAAM,KAAK,cAAc,SAAS,EAAE,SAAS;AAAA,IAC5C;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,IAAI,WAAW,GAAG;AAAA,IACjB,WAAW,MAAM;AAAA,MAChB,cAAc,SAAS,EAAE,YAAY,EAAE;AAAA,OACrC,QAAQ;AAAA,EACZ;AAAA,EACA,OAAO;AAAA;;;ACxFD,SAAS,OAAO,CAAC,KAAa;AAAA,EACpC,IAAI,gBAAgB,GAAG,GAAG;AAAA,IACzB;AAAA,EACD;AAAA,EAEA,IAAI,OAAO,SAAS,OAAO,KAAK;AAAA,IAC/B,OAAO,OAAO,YAAY,EAAE,MAAM,iBAAiB,IAAI,GAAG,GAAG;AAAA,EAC9D,EAAO;AAAA,IACN,OAAO,KAAK,KAAK,UAAU,qBAAqB;AAAA;AAAA;;;AFelD,SAAS,iBAAiB,CAAC,OAAmC;AAAA,EAC7D,IAAI,UAAU;AAAA,IAAW,OAAO;AAAA,EAChC,IAAI,UAAU;AAAA,IAAS,OAAO;AAAA,EAC9B,OAAO;AAAA;AAGR,SAAS,sBAAsB,CAAC,cAAiC;AAAA,EAChE,OACC,aAAa,QAAQ,SACpB,aAAa,YACX,aAAa,mBAAmB,aAAa,SAAS,MACtD;AAAA;AAIL,SAAS,sBAAsB,CAAC,cAAiC;AAAA,EAChE,MAAM,OAAO,uBAAuB,YAAY;AAAA,EAChD,IAAI,CAAC,QAAQ,OAAO,WAAW;AAAA,IAAa;AAAA,EAE5C,IAAI,aAAa,aAAa,oBAAoB,aAAa,SAAS,GAAG;AAAA,IAC1E;AAAA,EACD;AAAA,EAEA,IAAI,KAAK,WAAW,GAAG,GAAG;AAAA,IACzB,OAAO,SAAS,OAAO;AAAA,IACvB;AAAA,EACD;AAAA,EAEA,QAAQ,IAAI;AAAA;AAGb,SAAS,6BAA6B,GAAG;AAAA,EACxC,OAAO,IAAI,QAAgC,CAAC,YAAY;AAAA,IACvD,IAAI,UAAU;AAAA,IACd,IAAI,mBAAmB;AAAA,IACvB,MAAM,SAAS,CAAC,eAAwC;AAAA,MACvD,IAAI;AAAA,QAAS;AAAA,MACb,UAAU;AAAA,MACV,WAAW,MAAM,QAAQ,cAAc,aAAa,UAAU,GAAG,GAAG;AAAA;AAAA,IAGrE,IAAI;AAAA,MACH,MAAM,SAAS,aAAa,kBAAkB,MAAM;AAAA,MACpD,IAAI,UAAU,OAAO,OAAO,SAAS,YAAY;AAAA,QAChD,mBAAmB;AAAA,QACnB,OAAO,KAAK,MAAM,EAAE,MAAM,MAAM,OAAO,CAAC;AAAA,MACzC;AAAA,MACC,MAAM;AAAA,MACP,OAAO;AAAA;AAAA,IAGR,IAAI,CAAC,kBAAkB;AAAA,MACtB,WAAW,MAAM,OAAO,GAAG,KAAM;AAAA,IAClC;AAAA,GACA;AAAA;AAGF,SAAS,qBAAqB,CAAC,cAAiC;AAAA,EAC/D,MAAM,UAAU,aAAa,OAC1B,GAAG,aAAa,UAAU,aAAa,SACvC,aAAa;AAAA,EAChB,MAAM,aAAa,uBAAuB,YAAY;AAAA,EAEtD,IAAI,YAAY;AAAA,IACf,MAAM,KAAK,MAAM,SAAS,kBAAkB,aAAa,KAAK,GAAG,IAAI;AAAA,IACrE,cAAc,SAAS,EAAE,YAAY,IAAI;AAAA,MACxC,uBAAuB;AAAA,MACvB,QAAQ,aAAa,SAClB;AAAA,WACG,aAAa;AAAA,QAChB,SAAS,MAAM,uBAAuB,YAAY;AAAA,MACnD,IACC;AAAA,QACA,OAAO;AAAA,QACP,SAAS,MAAM,uBAAuB,YAAY;AAAA,MACnD;AAAA,IACH,CAAC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,SAAS,kBAAkB,aAAa,KAAK,GAAG,IAAI;AAAA;AAG3D,SAAS,uBAAuB,CAAC,cAAiC;AAAA,EACjE,IAAI,OAAO,WAAW;AAAA,IAAa,OAAO;AAAA,EAC1C,IAAI,yBAAyB,YAAY;AAAA,IAAG,OAAO;AAAA,EAEnD,IAAI,OAAO,UAAU,OAAO,WAAW,QAAQ;AAAA,IAC9C,MAAM,UAAsC;AAAA,MAC3C,MAAM;AAAA,MACN;AAAA,IACD;AAAA,IACA,OAAO,OAAO,YAAY,SAAS,GAAG;AAAA,IACtC,OAAO;AAAA,EACR;AAAA,EAEA,IAAI,EAAE,kBAAkB,WAAW,aAAa,eAAe;AAAA,IAC9D,OAAO;AAAA,EAER,MAAM,sBAAsB,IAAI,aAAa,aAAa,OAAO;AAAA,IAChE,MAAM,aAAa;AAAA,IACnB,KAAK,aAAa;AAAA,IAClB,MAAM,EAAE,MAAM,uBAAuB,YAAY,EAAE;AAAA,EACpD,CAAC;AAAA,EACD,oBAAoB,UAAU,MAAM;AAAA,IACnC,OAAO,MAAM;AAAA,IACb,uBAAuB,YAAY;AAAA,IACnC,oBAAoB,MAAM;AAAA;AAAA,EAE3B,OAAO;AAAA;AAGR,SAAS,eAAe,GAAG;AAAA,EAC1B,OAAO,yBAAyB,KAAK,SAAS,oBAAoB;AAAA;AAGnE,SAAS,0BAA0B,CAClC,aACA,QACC;AAAA,EACD,YAAY,aACX,kBACA,CAAC,QAAQ;AAAA,IACR,IAAI,CAAC;AAAA,MAAK,OAAO;AAAA,IACjB,OAAO;AAAA,SACH;AAAA,MACH,OAAO,IAAI,MAAM,IAAI,CAAC,UAAU;AAAA,WAC5B;AAAA,QACH,OAAO,KAAK,MAAM,IAAI,CAAC,YACtB,QAAQ,OAAO,OAAO,YACnB;AAAA,aACG;AAAA,UACH,WAAW,OAAO,WAAW;AAAA,QAC9B,IACC,OACJ;AAAA,MACD,EAAE;AAAA,IACH;AAAA,GAEF;AAAA;AAGD,SAAS,aAAa,CAAC,SAAiB;AAAA,EACvC,IAAI;AAAA,IACH,QAAQ,aAAa,IAAI,IAAI,OAAO;AAAA,IACpC,OACC,aAAa,eACb,aAAa,eACb,SAAS,WAAW,UAAU,KAC9B,SAAS,WAAW,KAAK,KACzB,6BAA6B,KAAK,QAAQ;AAAA,IAE1C,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,eAAe,sBAAsB,CAAC,SAAiB;AAAA,EACtD,MAAM,WAAW,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,GAAG;AAAA,IAC/D,OAAO;AAAA,IACP,aAAa;AAAA,EACd,CAAC;AAAA,EACD,IAAI,CAAC,SAAS,IAAI;AAAA,IACjB,MAAM,IAAI,MAAM,sBAAsB,SAAS,QAAQ;AAAA,EACxD;AAAA;AAGD,IAAM,sBAAsB,IAAI;AAChC,IAAM,4BAA4B,IAAI;AAEtC,SAAS,qBAAqB,CAAC,SAAiB;AAAA,EAC/C,OAAO,+BAA+B;AAAA;AAGvC,SAAS,uBAAuB,CAAC,SAAiB;AAAA,EACjD,IAAI;AAAA,IACH,OAAO,OAAO,aAAa,QAAQ,sBAAsB,OAAO,CAAC,MAAM;AAAA,IACtE,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,SAAS,wBAAwB,CAAC,SAAiB;AAAA,EAClD,IAAI;AAAA,IACH,OAAO,aAAa,QAAQ,sBAAsB,OAAO,GAAG,GAAG;AAAA,IAC9D,MAAM;AAAA;AAKT,eAAe,yBAAyB,CAAC,SAAiB;AAAA,EACzD,IAAI,mBAAmB;AAAA,IAAG;AAAA,EAC1B,IAAI,CAAC,cAAc,OAAO,KAAK,wBAAwB,OAAO;AAAA,IAAG;AAAA,EACjE,IACC,oBAAoB,IAAI,OAAO,KAC/B,0BAA0B,IAAI,OAAO,GACpC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,0BAA0B,IAAI,OAAO;AAAA,EACrC,IAAI;AAAA,IACH,MAAM,uBAAuB,OAAO;AAAA,IACpC,yBAAyB,OAAO;AAAA,IAChC;AAAA,IACC,MAAM,WAEN;AAAA,IACD,0BAA0B,OAAO,OAAO;AAAA;AAAA,EAGzC,IAAI,oBAAoB,IAAI,OAAO;AAAA,IAAG;AAAA,EACtC,MAAM,KAAK,MACV,+DACA,WACA,CACD;AAAA,EACA,oBAAoB,IAAI,SAAS,EAAE;AAAA,EACnC,cAAc,SAAS,EAAE,YAAY,IAAI;AAAA,IACxC,QAAQ;AAAA,MACP,OAAO;AAAA,MACP,SAAS,YAAY;AAAA,QACpB,MAAM,uBAAuB,OAAO;AAAA,QACpC,yBAAyB,OAAO;AAAA,QAChC,cAAc,SAAS,EAAE,YAAY,EAAE;AAAA,QACvC,oBAAoB,OAAO,OAAO;AAAA,QAClC,MAAM,QAAQ,qCAAqC;AAAA;AAAA,IAErD;AAAA,EACD,CAAC;AAAA;AAGK,SAAS,eAAe,CAAC,iBAA0B;AAAA,EACzD,MAAM,cAAc,gBAAe;AAAA,EACnC,MAAM,qBAAqB,QAAO,eAAe;AAAA,EAEjD,WAAU,MAAM;AAAA,IACf,mBAAmB,UAAU;AAAA,KAC3B,CAAC,eAAe,CAAC;AAAA,EAEpB,WAAU,MAAM;AAAA,IACf,IAAI,OAAO,WAAW,eAAe,OAAO,WAAW;AAAA,MAAQ;AAAA,IAC/D,IAAI,EAAE,kBAAkB;AAAA,MAAS;AAAA,IACjC,IAAI,aAAa,eAAe;AAAA,MAAW;AAAA,IAC3C,IAAI,OAAO,aAAa,QAAQ,uCAAuC,GAAG;AAAA,MACzE;AAAA,IACD;AAAA,IAEA,OAAO,aAAa,QAAQ,yCAAyC,GAAG;AAAA,IACxE,MAAM,KAAK,MACV,gEACA,WACA,CACD;AAAA,IACA,cAAc,SAAS,EAAE,YAAY,IAAI;AAAA,MACxC,QAAQ;AAAA,QACP,OAAO;AAAA,QACP,SAAS,YAAY;AAAA,UACpB,MAAM,aAAa,MAAM,8BAA8B;AAAA,UACvD,MAAM,oBAAoB,aAAa;AAAA,UACvC,IAAI,eAAe,aAAa,sBAAsB,WAAW;AAAA,YAChE,MAAM,QAAQ,gCAAgC;AAAA,UAC/C,EAAO,SACN,eAAe,aACf,sBAAsB,WACrB;AAAA,YACD;AAAA,UACD,EAAO;AAAA,YACN,MAAM,KAAK,yCAAyC;AAAA;AAAA;AAAA,MAGvD;AAAA,IACD,CAAC;AAAA,KACC,CAAC,CAAC;AAAA,EAEL,WAAU,MAAM;AAAA,IACf,MAAM,aAAa,IAAI;AAAA,IACvB,MAAM,UAAU,WAAW;AAAA,IAEtB,yBACJ;AAAA,MACC;AAAA,MACA,SAAS,CAAC,UAAU;AAAA,QACnB,IAAI,MAAM,UAAU;AAAA,UAAa;AAAA,QAEjC,IAAI;AAAA,QACJ,IAAI;AAAA,UACH,UAAU,KAAK,MAAM,MAAM,IAAI;AAAA,UAC9B,OAAO,OAAO;AAAA,UACf,QAAQ,MAAM,0CAA0C,KAAK;AAAA,UAC7D;AAAA;AAAA,QAGD,IAAI,MAAM,UAAU,kBAAkB;AAAA,UACrC,MAAM,SAAS;AAAA,UACf,2BAA2B,aAAa,MAAM;AAAA,UAC9C,IAAI,OAAO,WAAW,WAAW;AAAA,YAC3B,YAAY,kBAAkB;AAAA,cAClC,UAAU;AAAA,YACX,CAAC;AAAA,UACF;AAAA,UACA;AAAA,QACD;AAAA,QAEA,IAAI,MAAM,UAAU,gBAAgB;AAAA,UACnC,MAAM,eAAe;AAAA,UACrB,MAAM,yBACL,aAAa,cAAc,mBAAmB,WAC9C,gBAAgB;AAAA,UACjB,MAAM,wBACL,aAAa,WAAW,aAAa,CAAC,CAAC,aAAa;AAAA,UACrD,IAAI,yBAAyB;AAAA,UAC7B,IAAI,CAAC,wBAAwB;AAAA,YAC5B,yBAAyB,wBAAwB,YAAY;AAAA,UAC9D;AAAA,UAEA,IACC,CAAC,yBACA,CAAC,0BAA0B,CAAC,wBAC5B;AAAA,YACD,sBAAsB,YAAY;AAAA,UACnC;AAAA,QACD;AAAA;AAAA,MAED,SAAS,CAAC,UAAU;AAAA,QACnB,IAAI,CAAC,WAAW,OAAO,SAAS;AAAA,UAC/B,QAAQ,MAAM,iCAAiC,KAAK;AAAA,UAC/C,0BAA0B,OAAO;AAAA,QACvC;AAAA;AAAA,IAEF,GACA,WAAW,MACZ;AAAA,IAEA,OAAO,MAAM,WAAW,MAAM;AAAA,KAC5B,CAAC,WAAW,CAAC;AAAA,EAEhB,OAAO,2BAA2B,EAAE,SAAS,WAAW,EAAE,CAAC;AAAA;;AG1W5D,wBAAS,2BAAa,uBAAW;AAKjC,SAAS,cAAc,CAAC,OAAkC;AAAA,EACzD,OAAO,UAAU,UAAU,UAAU;AAAA;AAG/B,SAAS,QAAQ,GAAG;AAAA,EAC1B,QAAQ,MAAM,YAAW,UAAU;AAAA,EACnC,MAAM,iBAAiB,kBAAkB;AAAA,EACzC,MAAM,cAAc,eAAe,SAAQ,UAAU,KAAK;AAAA,EAC1D,OAAO,iBAAiB,sBAAsB,SAAuB,IAAI;AAAA,EACzE,MAAM,QAAQ,mBAAmB;AAAA,EAEjC,WAAU,MAAM;AAAA,IACf,IAAI,oBAAoB,aAAa;AAAA,MACpC,mBAAmB,IAAI;AAAA,IACxB;AAAA,KACE,CAAC,aAAa,eAAe,CAAC;AAAA,EAEjC,WAAU,MAAM;AAAA,IACf,IAAI,OAAO,aAAa;AAAA,MAAa;AAAA,IAErC,MAAM,OAAO,SAAS;AAAA,IACtB,IAAI,UAAU,QAAQ;AAAA,MACrB,KAAK,UAAU,IAAI,MAAM;AAAA,IAC1B,EAAO;AAAA,MACN,KAAK,UAAU,OAAO,MAAM;AAAA;AAAA,IAG7B,IAAI,OAAO,UAAU,OAAO,WAAW,QAAQ;AAAA,MAC9C,OAAO,OAAO,YAAY,EAAE,MAAM,kBAAkB,MAAM,GAAG,GAAG;AAAA,IACjE;AAAA,KACE,CAAC,KAAK,CAAC;AAAA,EAEV,MAAM,WAAW,aAChB,CAAC,cAAqB;AAAA,IACrB,mBAAmB,SAAS;AAAA,IAC5B,eAAe,OACd,EAAE,OAAO,WAAW,OAAO,SAAS,GACpC;AAAA,MACC,SAAS,MAAM;AAAA,QACd,mBAAmB,CAAC,iBACnB,iBAAiB,YAAY,OAAO,YACrC;AAAA;AAAA,IAEF,CACD;AAAA,KAED,CAAC,cAAc,CAChB;AAAA,EAEA,MAAM,cAAc,aAAY,MAAM;AAAA,IACrC,SAAS,UAAU,SAAS,UAAU,MAAM;AAAA,KAC1C,CAAC,UAAU,KAAK,CAAC;AAAA,EAEpB,OAAO,SACN,OAAO,EAAE,OAAO,UAAU,YAAY,IACtC,CAAC,OAAO,UAAU,WAAW,CAC9B;AAAA;;AC7DD,sBAAS,wBAAW;AACpB;AAQO,SAAS,mBAAmB,GAAG;AAAA,EACrC,OAAO,SAAS,cAAc,UAAwB,IAAI;AAAA,EAE1D,WAAU,MAAM;AAAA,IACf,MAAM,wBAAwB,YAAY;AAAA,MACzC,IAAI;AAAA,QACH,MAAM,WAAW,MAAM,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;AAAA,QACvD,IAAI,SAAS,OAAO;AAAA,UACnB,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,QAC/C;AAAA,QAEA,MAAM,OAAO,SAAS;AAAA,QACtB,QAAQ,IAAI,kCAAkC,IAAI;AAAA,QAElD,IAAI,KAAK,SAAS;AAAA,UACjB,QAAQ,IAAI,2CAA2C,KAAK,OAAO;AAAA,UACnE,WAAW,KAAK,OAAO;AAAA,UACvB,SAAS,QAAQ,KAAK;AAAA,QACvB;AAAA,QACC,OAAO,OAAO;AAAA,QACf,QAAQ,MAAM,gCAAgC,KAAK;AAAA,QACnD,SAAS,QAAQ;AAAA;AAAA;AAAA,IAInB,sBAAsB;AAAA,KACpB,CAAC,CAAC;AAAA,EAEL,OAAO;AAAA;;ACrCR,sBAAS,2BAAW;;;ACApB,mBAAS;AAgBF,IAAM,gBAAgB,SAAmB,CAAC,SAAS;AAAA,EACzD,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EAEd,UAAU,CAAC,SAAS,IAAI,EAAE,cAAc,KAAK,CAAC;AAAA,EAC9C,iBAAiB,CAAC,UAAU,IAAI,EAAE,cAAc,MAAM,CAAC;AAAA,EACvD,iBAAiB,CAAC,UAAU,IAAI,EAAE,cAAc,MAAM,CAAC;AAAA,EACvD,mBAAmB,MAAM,IAAI,EAAE,cAAc,EAAE,CAAC;AAAA,EAChD,mBAAmB,MAAM,IAAI,EAAE,cAAc,EAAE,CAAC;AACjD,EAAE;;;AC1BF,mBAAS;AACT;AAQO,IAAM,kBAAkB,SAAqB,EACnD,QACC,CAAC,SAAS;AAAA,EACT,aAAa;AAAA,EACb,gBAAgB,MACf,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,YAAY,EAAE;AAAA,EACrD,cAAc,CAAC,cAAc,IAAI,EAAE,aAAa,UAAU,CAAC;AAC5D,IACA;AAAA,EACC,MAAM;AACP,CACD,CACD;;;ACrBA,mBAAS;AASF,IAAM,qBAAqB,SAAwB,CAAC,SAAS;AAAA,EACnE,QAAQ;AAAA,EACR,MAAM,MAAM,IAAI,EAAE,QAAQ,KAAK,CAAC;AAAA,EAChC,OAAO,MAAM,IAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,EAClC,QAAQ,MAAM,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,OAAO,EAAE;AACzD,EAAE;;;ACdF,mBAAS;AA8BT,IAAM,iBAAiB;AACvB,IAAM,aAAa;AAEZ,IAAM,mBAAmB,SAAsB,CAAC,SAAS;AAAA,EAC/D,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,MAET,UAAU,GAAG;AAAA,IAChB,OAAO,KAAK;AAAA;AAAA,MAET,kBAAkB,GAAG;AAAA,IACxB,OAAO,KAAK;AAAA;AAAA,EAGb,WAAW,MAAM,IAAI,EAAE,QAAQ,KAAK,CAAC;AAAA,EACrC,YAAY,MAAM,IAAI,EAAE,QAAQ,OAAO,aAAa,MAAM,CAAC;AAAA,EAC3D,aAAa,MACZ,IAAI,CAAC,OAAO;AAAA,IACX,QAAQ,CAAC,EAAE;AAAA,IACX,aAAa,CAAC,EAAE,SAAS,EAAE,cAAc;AAAA,EAC1C,EAAE;AAAA,EACH,gBAAgB,CAAC,WAChB,IAAI,EAAE,aAAa,KAAK,IAAI,YAAY,MAAM,EAAE,CAAC;AAAA,EAClD,WAAW,CAAC,OAAO,IAAI,EAAE,aAAa,IAAI,QAAQ,KAAK,CAAC;AAAA,EACxD,gBAAgB,MAAM,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE;AAAA,EAElE,eAAe,MAAM,IAAI,EAAE,QAAQ,KAAK,CAAC;AAAA,EACzC,iBAAiB,MAChB,IAAI,EAAE,QAAQ,OAAO,aAAa,MAAM,aAAa,MAAM,CAAC;AAAA,EAC7D,eAAe,MACd,IAAI,CAAC,OAAO;AAAA,IACX,QAAQ,CAAC,EAAE;AAAA,IACX,aAAa,CAAC,EAAE,SAAS,EAAE,cAAc;AAAA,EAC1C,EAAE;AAAA,EACH,gBAAgB,CAAC,OAAO,IAAI,EAAE,aAAa,IAAI,QAAQ,KAAK,CAAC;AAC9D,EAAE;;;AJpCK,SAAS,oBAAoB;AAAA,EACnC,aAAa,CAAC;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAC+B;AAAA,EAC/B;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACG,cAAc;AAAA,EAClB;AAAA,IACC,cAAc;AAAA,IACd,gBAAgB;AAAA,MACb,gBAAgB;AAAA,EACpB,QAAQ,YAAY,eAAe,eAAe,cAAc,YAAY;AAAA,EAC5E,MAAM,YAAY,YAAY,CAAC,UAAU,MAAM,SAAS;AAAA,EACxD,MAAM,cAAc,YAAY,CAAC,UAAU,MAAM,WAAW;AAAA,EAC5D,MAAM,qBAAqB,qBAC1B,CAAC,UAAU,MAAM,aAClB;AAAA,EACA,MAAM,oBAAoB,oBAAoB,CAAC,UAAU,MAAM,aAAa;AAAA,EAC5E,MAAM,eAAe,eAAe,CAAC,UAAU,MAAM,aAAa;AAAA,EAClE,MAAM,YAAY,YAAY,CAAC,UAAU,MAAM,aAAa;AAAA,EAC5D,MAAM,eAAe,eAAe,CAAC,UAAU,MAAM,aAAa;AAAA,EAClE,MAAM,iBAAiB,iBAAiB,CAAC,UAAU,MAAM,aAAa;AAAA,EACtE,MAAM,iBAAiB,iBAAiB,CAAC,UAAU,MAAM,aAAa;AAAA,EACtE,MAAM,sBAAsB,iBAAiB,CAAC,UAAU,MAAM,WAAW;AAAA,EAEzE,MAAM,gBAAgB,aACrB,CAAC,MAAqB;AAAA,IACrB,MAAM,SAAS,EAAE;AAAA,IACjB,MAAM,YACL,OAAO,YAAY,WACnB,OAAO,YAAY,cACnB,OAAO;AAAA,IACR,MAAM,eAAe,CAAC,CAAC,OAAO,QAAQ,wBAAwB;AAAA,IAC9D,MAAM,4BAA4B,EAAE,WAAW,EAAE;AAAA,IACjD,MAAM,mBAAmB,gBAAgB,KAAK;AAAA,IAC9C,MAAM,sBAAsB,iBAAiB,QAC5C,mBAAmB,EACpB;AAAA,IAEA,IACC,6BACA,CAAC,EAAE,YACH,CAAC,EAAE,UACH,EAAE,OAAO,OACT,EAAE,OAAO,KACR;AAAA,MACD,EAAE,eAAe;AAAA,MAEjB,QAAQ,EAAE;AAAA,aACJ;AAAA,UACJ,UAAU;AAAA,UACV,IAAI,iBAAiB,iBAAiB,OAAO;AAAA,YAC5C,SAAS,OAAO;AAAA,UACjB,EAAO;AAAA,YACN,SAAS,KAAK;AAAA,YACd,kBAAkB;AAAA;AAAA,UAEnB;AAAA,aACI;AAAA,UACJ,mBAAmB;AAAA,UACnB,SAAS,OAAO;AAAA,UAChB;AAAA,aACI;AAAA,UACJ,kBAAkB;AAAA,UAClB,SAAS,OAAO;AAAA,UAChB;AAAA,aACI;AAAA,UACJ,aAAa;AAAA,UACb,SAAS,OAAO;AAAA,UAChB;AAAA,aACI;AAAA,UACJ,UAAU;AAAA,UACV,SAAS,OAAO;AAAA,UAChB;AAAA,aACI;AAAA,UACJ,aAAa;AAAA,UACb,SAAS,OAAO;AAAA,UAChB;AAAA,aACI;AAAA,UACJ,eAAe;AAAA,UACf,SAAS,OAAO;AAAA,UAChB;AAAA;AAAA,MAGF;AAAA,IACD;AAAA,IAEA,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAAA,MAC9C,EAAE,eAAe;AAAA,MAGjB,IAAI,iBAAiB,YAAY;AAAA,QAE/B,SAAS,eAA+B,KAAK;AAAA,QAC9C,SAAS,OAAO;AAAA,QAChB,wBAAwB,IAAI;AAAA,QAE5B,WAAW,MAAM,kBAAkB,GAAG,EAAE;AAAA,MACzC,EAAO,SAAI,iBAAiB,OAAO;AAAA,QAEjC,SAAS,eAA+B,KAAK;AAAA,QAC9C,SAAS,OAAO;AAAA,QAChB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,WAAW,MAAM,kBAAkB,GAAG,EAAE;AAAA,MACzC,EAAO;AAAA,QAEL,SAAS,eAA+B,KAAK;AAAA,QAC9C,SAAS,UAAU;AAAA,QACnB,wBAAwB,KAAK;AAAA,QAC7B,IAAI,uBAAuB,GAAG;AAAA,UAC7B,gBAAgB,mBAAmB;AAAA,QACpC;AAAA;AAAA,MAED;AAAA,IACD;AAAA,IAEA,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,YAAY,EAAE,QAAQ,KAAK;AAAA,MAC7D,EAAE,eAAe;AAAA,MAGjB,IAAI,iBAAiB,OAAO;AAAA,QAE1B,SAAS,eAA+B,KAAK;AAAA,QAC9C,SAAS,OAAO;AAAA,QAChB,UAAU;AAAA,QACV,UAAU;AAAA,QAEV,WAAW,MAAM,kBAAkB,GAAG,EAAE;AAAA,MACzC,EAAO,SAAI,iBAAiB,YAAY;AAAA,QAEtC,SAAS,eAA+B,KAAK;AAAA,QAC9C,SAAS,OAAO;AAAA,QAChB,wBAAwB,IAAI;AAAA,QAC5B,WAAW,MAAM,kBAAkB,GAAG,EAAE;AAAA,MACzC,EAAO;AAAA,QAEL,SAAS,eAA+B,KAAK;AAAA,QAC9C,IAAI,CAAC,eAAe;AAAA,UACnB,UAAU;AAAA,QACX;AAAA,QACA,SAAS,KAAK;AAAA,QACd,kBAAkB;AAAA;AAAA,MAEnB;AAAA,IACD;AAAA,IAEA,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAAA,MAC9C,EAAE,eAAe;AAAA,MACjB,kBAAkB;AAAA,MAClB;AAAA,IACD;AAAA,IAEA,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,MAAM;AAAA,MAC/C,EAAE,eAAe;AAAA,MACjB,UAAU;AAAA,MACV;AAAA,IACD;AAAA,IAEA,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAAA,MAC9C,EAAE,eAAe;AAAA,MACjB,oBAAoB;AAAA,MACpB;AAAA,IACD;AAAA,IAEA,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,KAAK;AAAA,MAC5D,EAAE,eAAe;AAAA,MACjB,eAAe;AAAA,MACf;AAAA,IACD;AAAA,IAEA,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAAA,MAC9C,EAAE,eAAe;AAAA,MACjB,aAAa;AAAA,MACb;AAAA,IACD;AAAA,IAEA,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAAA,MAC9C,EAAE,eAAe;AAAA,MACjB,mBAAmB,SAAS,EAAE,OAAO;AAAA,MACrC;AAAA,IACD;AAAA,IAGA,IACE,EAAE,QAAQ,YAAY,CAAC,gBACvB,EAAE,QAAQ,OACV,CAAC,cACA,iBAAiB,cAAc,iBAAiB,QACjD;AAAA,MACD,EAAE,eAAe;AAAA,MAEjB,IAAI,iBAAiB,YAAY;AAAA,QAChC,wBAAwB,IAAI;AAAA,MAC7B,EAAO,SAAI,iBAAiB,OAAO;AAAA,QAClC,UAAU;AAAA,QACV,UAAU;AAAA,MACX;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,kBAAkB;AAAA,MAClB;AAAA,IACD;AAAA,IAEA,IAAI,iBAAiB,cAAc,CAAC,WAAW;AAAA,MAC9C,IAAI,EAAE,QAAQ,OAAO,iBAAiB,SAAS,GAAG;AAAA,QACjD,EAAE,eAAe;AAAA,QACjB,MAAM,YAAY,KAAK,IACtB,eAAe,GACf,iBAAiB,SAAS,CAC3B;AAAA,QACA,gBAAgB,SAAS;AAAA,QACzB;AAAA,MACD;AAAA,MAEA,IAAI,EAAE,QAAQ,OAAO,iBAAiB,SAAS,GAAG;AAAA,QACjD,EAAE,eAAe;AAAA,QACjB,MAAM,YAAY,KAAK,IAAI,eAAe,GAAG,CAAC;AAAA,QAC9C,gBAAgB,SAAS;AAAA,QACzB;AAAA,MACD;AAAA,MAEA,IAAI,EAAE,QAAQ,WAAW,iBAAiB,eAAe;AAAA,QACxD,EAAE,eAAe;AAAA,QACjB,gBAAgB,iBAAiB,aAAa;AAAA,QAC9C,SAAS,OAAO;AAAA,QAChB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,IAAI,iBAAiB,SAAS,CAAC,WAAW;AAAA,MACzC,MAAM,gBAAgB,YAAY;AAAA,MAElC,IAAI,EAAE,QAAQ,OAAO,YAAY,SAAS,GAAG;AAAA,QAC5C,EAAE,eAAe;AAAA,QACjB,MAAM,YAAY,KAAK,IAAI,eAAe,GAAG,YAAY,SAAS,CAAC;AAAA,QACnE,gBAAgB,SAAS;AAAA,QACzB;AAAA,MACD;AAAA,MAEA,IAAI,EAAE,QAAQ,OAAO,YAAY,SAAS,GAAG;AAAA,QAC5C,EAAE,eAAe;AAAA,QACjB,MAAM,YAAY,KAAK,IAAI,eAAe,GAAG,CAAC;AAAA,QAC9C,gBAAgB,SAAS;AAAA,QACzB;AAAA,MACD;AAAA,MAEA,IAAI,EAAE,QAAQ,OAAO,eAAe;AAAA,QACnC,EAAE,eAAe;AAAA,QACjB,IAAI,cAAc,QAAQ;AAAA,UACzB,gBAAgB,cAAc,WAAW;AAAA,QAC1C,EAAO;AAAA,UACN,cAAc,cAAc,WAAW;AAAA;AAAA,QAExC;AAAA,MACD;AAAA,MAEA,IAAI,EAAE,QAAQ,KAAK;AAAA,QAClB,EAAE,eAAe;AAAA,QACjB,aAAa;AAAA,QACb;AAAA,MACD;AAAA,MAEA,IAAI,EAAE,QAAQ,KAAK;AAAA,QAClB,EAAE,eAAe;AAAA,QACjB,eAAe;AAAA,QACf;AAAA,MACD;AAAA,MAEA,IAAI,EAAE,QAAQ,OAAO,eAAe,SAAS,QAAQ;AAAA,QACpD,EAAE,eAAe;AAAA,QAEjB,MAAM,aACL,CAAC,cAAc,UACf,cAAc,WAAW,eACzB,cAAc,WAAW;AAAA,QAC1B,IAAI,YAAY;AAAA,UACf,gBAAgB,cAAc,IAAI;AAAA,QACnC;AAAA,QACA;AAAA,MACD;AAAA,MAGA,IAAK,EAAE,YAAY,EAAE,QAAQ,OAAQ,EAAE,QAAQ,aAAa;AAAA,QAC3D,EAAE,eAAe;AAAA,QACjB,IACC,eAAe,SAAS,UACxB,CAAC,cAAc,UACf,cAAc,WAAW,aACxB;AAAA,UACD,eAAe,cAAc,IAAI;AAAA,QAClC;AAAA,QACA;AAAA,MACD;AAAA,MAEA,IAAI,EAAE,QAAQ,KAAK;AAAA,QAClB,EAAE,eAAe;AAAA,QACjB,oBAAoB;AAAA,QACpB;AAAA,MACD;AAAA,MAEA,IAAI,EAAE,QAAQ,WAAW,eAAe;AAAA,QACvC,EAAE,eAAe;AAAA,QACjB,IAAI,cAAc,SAAS,UAAU;AAAA,UACpC,cAAc,iBAAiB;AAAA,QAChC,EAAO;AAAA,UACN,cAAc,OAAO;AAAA,UACrB,aAAa,cAAc,MAAM,cAAc,MAAM;AAAA;AAAA,QAEtD;AAAA,MACD;AAAA,IACD;AAAA,KAED;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CACD;AAAA,EAEA,WAAU,MAAM;AAAA,IACf,OAAO,iBAAiB,WAAW,eAAe,IAAI;AAAA,IACtD,OAAO,MAAM,OAAO,oBAAoB,WAAW,eAAe,IAAI;AAAA,KACpE,CAAC,aAAa,CAAC;AAAA,EAElB,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;;AKzZD;AAAA,cACC;AAAA,iBACA;AAAA,eACA;AAAA;AAaD,IAAM,kBAAkB,CAAC,aAAa,cAAc,aAAa,YAAY;AAE7E,SAAS,UAAU,GAAW;AAAA,EAC7B,OAAO,OAAO,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC;AAAA;AAGlE,eAAe,YAAY,CAAC,MAA6B;AAAA,EACxD,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,IACvC,MAAM,SAAS,IAAI;AAAA,IACnB,OAAO,SAAS,MAAM;AAAA,MACrB,MAAM,SAAS,OAAO;AAAA,MACtB,MAAM,SAAS,OAAO,MAAM,GAAG,EAAE;AAAA,MACjC,QAAQ,MAAM;AAAA;AAAA,IAEf,OAAO,UAAU;AAAA,IACjB,OAAO,cAAc,IAAI;AAAA,GACzB;AAAA;AAGF,eAAe,aAAa,CAAC,MAA6B;AAAA,EACzD,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,IACvC,MAAM,SAAS,IAAI;AAAA,IACnB,OAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AAAA,IACrD,OAAO,UAAU;AAAA,IACjB,OAAO,cAAc,IAAI;AAAA,GACzB;AAAA;AASK,SAAS,cAAc,CAAC,UAAiC,CAAC,GAAG;AAAA,EACnE,QAAQ,YAAY,GAAG,YAAY,GAAG,WAAW,SAAS;AAAA,EAE1D,OAAO,QAAQ,aAAa,UAA4B,CAAC,CAAC;AAAA,EAC1D,OAAO,YAAY,iBAAiB,UAAS,KAAK;AAAA,EAClD,OAAO,OAAO,YAAY,UAAwB,IAAI;AAAA,EAEtD,MAAM,eAAe,YAAY,OAAO;AAAA,EAExC,MAAM,eAAe,aACpB,CAAC,SAA8B;AAAA,IAC9B,IAAI,CAAC,gBAAgB,SAAS,KAAK,IAAI,GAAG;AAAA,MACzC,OAAO,0BAA0B,KAAK;AAAA,IACvC;AAAA,IACA,IAAI,KAAK,OAAO,cAAc;AAAA,MAC7B,OAAO,oBAAoB,KAAK,OAAO,OAAO,MAAM,QAAQ,CAAC,aAAa;AAAA,IAC3E;AAAA,IACA,OAAO;AAAA,KAER,CAAC,cAAc,SAAS,CACzB;AAAA,EAEA,MAAM,YAAY,aACjB,OAAO,UAA6B;AAAA,IACnC,SAAS,IAAI;AAAA,IACb,MAAM,YAAY,MAAM,KAAK,KAAK;AAAA,IAClC,MAAM,YAAY,YAAY,OAAO;AAAA,IAErC,IAAI,aAAa,GAAG;AAAA,MACnB,SAAS,WAAW,0BAA0B;AAAA,MAC9C;AAAA,IACD;AAAA,IAEA,MAAM,aAAa,UAAU,MAAM,GAAG,SAAS;AAAA,IAC/C,MAAM,YAA+B,CAAC;AAAA,IAEtC,WAAW,QAAQ,YAAY;AAAA,MAC9B,MAAM,kBAAkB,aAAa,IAAI;AAAA,MACzC,IAAI,iBAAiB;AAAA,QACpB,SAAS,eAAe;AAAA,QACxB;AAAA,MACD;AAAA,MAEA,IAAI;AAAA,QACH,OAAO,SAAS,QAAQ,MAAM,QAAQ,IAAI;AAAA,UACzC,cAAc,IAAI;AAAA,UAClB,aAAa,IAAI;AAAA,QAClB,CAAC;AAAA,QAED,UAAU,KAAK;AAAA,UACd,IAAI,WAAW;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW,KAAK;AAAA,QACjB,CAAC;AAAA,QACA,MAAM;AAAA,QACP,SAAS,yBAAyB;AAAA;AAAA,IAEpC;AAAA,IAEA,IAAI,UAAU,SAAS,GAAG;AAAA,MACzB,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;AAAA,IAC5C;AAAA,KAED,CAAC,OAAO,QAAQ,WAAW,YAAY,CACxC;AAAA,EAEA,MAAM,cAAc,aAAY,CAAC,OAAe;AAAA,IAC/C,UAAU,CAAC,SAAS,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,IACvD,SAAS,IAAI;AAAA,KACX,CAAC,CAAC;AAAA,EAEL,MAAM,cAAc,aAAY,MAAM;AAAA,IACrC,UAAU,CAAC,CAAC;AAAA,IACZ,SAAS,IAAI;AAAA,KACX,CAAC,CAAC;AAAA,EAEL,MAAM,kBAAkB,aAAY,CAAC,MAAiB;AAAA,IACrD,EAAE,eAAe;AAAA,IACjB,EAAE,gBAAgB;AAAA,IAClB,IAAI,EAAE,aAAa,MAAM,SAAS,OAAO,GAAG;AAAA,MAC3C,cAAc,IAAI;AAAA,IACnB;AAAA,KACE,CAAC,CAAC;AAAA,EAEL,MAAM,kBAAkB,aAAY,CAAC,MAAiB;AAAA,IACrD,EAAE,eAAe;AAAA,IACjB,EAAE,gBAAgB;AAAA,IAClB,MAAM,OAAQ,EAAE,cAA8B,sBAAsB;AAAA,IACpE,MAAM,IAAI,EAAE;AAAA,IACZ,MAAM,IAAI,EAAE;AAAA,IACZ,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,SAAS,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ;AAAA,MACvE,cAAc,KAAK;AAAA,IACpB;AAAA,KACE,CAAC,CAAC;AAAA,EAEL,MAAM,iBAAiB,aAAY,CAAC,MAAiB;AAAA,IACpD,EAAE,eAAe;AAAA,IACjB,EAAE,gBAAgB;AAAA,KAChB,CAAC,CAAC;AAAA,EAEL,MAAM,aAAa,aAClB,CAAC,MAAiB;AAAA,IACjB,EAAE,eAAe;AAAA,IACjB,EAAE,gBAAgB;AAAA,IAClB,cAAc,KAAK;AAAA,IAEnB,MAAM,QAAQ,EAAE,aAAa;AAAA,IAC7B,IAAI,MAAM,SAAS,GAAG;AAAA,MACrB,MAAM,aAAa,MAAM,KAAK,KAAK,EAAE,OAAO,CAAC,MAC5C,EAAE,KAAK,WAAW,QAAQ,CAC3B;AAAA,MACA,IAAI,WAAW,SAAS,GAAG;AAAA,QAC1B,UAAU,UAAU;AAAA,MACrB;AAAA,IACD;AAAA,KAED,CAAC,SAAS,CACX;AAAA,EAEA,MAAM,cAAc,aACnB,CAAC,MAAsB;AAAA,IACtB,MAAM,QAAQ,EAAE,eAAe;AAAA,IAC/B,IAAI,CAAC;AAAA,MAAO;AAAA,IAEZ,MAAM,aAAqB,CAAC;AAAA,IAC5B,WAAW,QAAQ,MAAM,KAAK,KAAK,GAAG;AAAA,MACrC,IAAI,KAAK,KAAK,WAAW,QAAQ,GAAG;AAAA,QACnC,MAAM,OAAO,KAAK,UAAU;AAAA,QAC5B,IAAI,MAAM;AAAA,UACT,WAAW,KAAK,IAAI;AAAA,QACrB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,IAAI,WAAW,SAAS,GAAG;AAAA,MAC1B,EAAE,eAAe;AAAA,MACjB,UAAU,UAAU;AAAA,IACrB;AAAA,KAED,CAAC,SAAS,CACX;AAAA,EAEA,WAAU,MAAM;AAAA,IACf,IAAI,CAAC;AAAA,MAAU;AAAA,IAEf,IAAI,cAAc;AAAA,IAElB,MAAM,cAAc,CAAC,MAA4B;AAAA,MAChD,EAAE,eAAe;AAAA,MACjB,IAAI,EAAE,cAAc,MAAM,SAAS,OAAO,GAAG;AAAA,QAC5C;AAAA,QACA,IAAI,gBAAgB,GAAG;AAAA,UACtB,cAAc,IAAI;AAAA,QACnB;AAAA,MACD;AAAA;AAAA,IAGD,MAAM,cAAc,CAAC,MAA4B;AAAA,MAChD,EAAE,eAAe;AAAA,MACjB;AAAA,MACA,IAAI,gBAAgB,GAAG;AAAA,QACtB,cAAc,KAAK;AAAA,MACpB;AAAA;AAAA,IAGD,MAAM,aAAa,CAAC,MAA4B;AAAA,MAC/C,EAAE,eAAe;AAAA;AAAA,IAGlB,MAAM,SAAS,CAAC,MAA4B;AAAA,MAC3C,EAAE,eAAe;AAAA,MACjB,cAAc;AAAA,MACd,cAAc,KAAK;AAAA,MAEnB,MAAM,QAAQ,EAAE,cAAc;AAAA,MAC9B,IAAI,SAAS,MAAM,SAAS,GAAG;AAAA,QAC9B,MAAM,aAAa,MAAM,KAAK,KAAK,EAAE,OAAO,CAAC,MAC5C,EAAE,KAAK,WAAW,QAAQ,CAC3B;AAAA,QACA,IAAI,WAAW,SAAS,GAAG;AAAA,UAC1B,UAAU,UAAU;AAAA,QACrB;AAAA,MACD;AAAA;AAAA,IAGD,SAAS,iBAAiB,aAAa,WAAW;AAAA,IAClD,SAAS,iBAAiB,aAAa,WAAW;AAAA,IAClD,SAAS,iBAAiB,YAAY,UAAU;AAAA,IAChD,SAAS,iBAAiB,QAAQ,MAAM;AAAA,IAExC,OAAO,MAAM;AAAA,MACZ,SAAS,oBAAoB,aAAa,WAAW;AAAA,MACrD,SAAS,oBAAoB,aAAa,WAAW;AAAA,MACrD,SAAS,oBAAoB,YAAY,UAAU;AAAA,MACnD,SAAS,oBAAoB,QAAQ,MAAM;AAAA;AAAA,KAE1C,CAAC,UAAU,SAAS,CAAC;AAAA,EAExB,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;;ACtQD;AAAA,cACC;AAAA,iBACA;AAAA,eACA;AAAA;AAID;AAiCA,IAAM,cAAc,CAAC,aAAa,cAAc,aAAa,YAAY;AACzE,IAAM,YAAY,CAAC,iBAAiB;AACpC,IAAM,aAAa;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AACA,IAAM,kBAAkB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEA,SAAS,WAAU,GAAW;AAAA,EAC7B,OAAO,QAAQ,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC;AAAA;AAGnE,SAAS,YAAY,CAAC,MAAoB;AAAA,EACzC,MAAM,QAAQ,KAAK,KAAK,YAAY,GAAG;AAAA,EACvC,OAAO,SAAS,IAAI,KAAK,KAAK,YAAY,EAAE,MAAM,KAAK,IAAI;AAAA;AAG5D,SAAS,WAAW,CAAC,MAAgC;AAAA,EACpD,IAAI,YAAY,SAAS,KAAK,IAAI;AAAA,IAAG,OAAO;AAAA,EAC5C,IAAI,UAAU,SAAS,KAAK,IAAI;AAAA,IAAG,OAAO;AAAA,EAC1C,IAAI,WAAW,SAAS,KAAK,IAAI;AAAA,IAAG,OAAO;AAAA,EAC3C,IAAI,gBAAgB,SAAS,aAAa,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACzD,OAAO;AAAA;AAGR,eAAe,aAAY,CAAC,MAA6B;AAAA,EACxD,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,IACvC,MAAM,SAAS,IAAI;AAAA,IACnB,OAAO,SAAS,MAAM;AAAA,MACrB,MAAM,SAAS,OAAO;AAAA,MACtB,MAAM,SAAS,OAAO,MAAM,GAAG,EAAE;AAAA,MACjC,QAAQ,MAAM;AAAA;AAAA,IAEf,OAAO,UAAU;AAAA,IACjB,OAAO,cAAc,IAAI;AAAA,GACzB;AAAA;AAGF,eAAe,UAAU,CAAC,MAA6B;AAAA,EACtD,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,IACvC,MAAM,SAAS,IAAI;AAAA,IACnB,OAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AAAA,IACrD,OAAO,UAAU;AAAA,IACjB,OAAO,WAAW,IAAI;AAAA,GACtB;AAAA;AAGF,eAAe,cAAa,CAAC,MAA6B;AAAA,EACzD,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,IACvC,MAAM,SAAS,IAAI;AAAA,IACnB,OAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AAAA,IACrD,OAAO,UAAU;AAAA,IACjB,OAAO,cAAc,IAAI;AAAA,GACzB;AAAA;AAGF,eAAe,kBAAkB,CAChC,MACA,WAC8B;AAAA,EAC9B,MAAM,WAAW,MAAM,iBAAiB;AAAA,IACvC,MAAM;AAAA,MACL;AAAA,SACI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,IAClC;AAAA,EACD,CAAC;AAAA,EACD,IAAI,SAAS,OAAO;AAAA,IACnB,MAAM,IAAI,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAAA,EACpD;AAAA,EACA,OAAO,SAAS;AAAA;AAaV,SAAS,aAAa,CAAC,UAAgC,CAAC,GAAG;AAAA,EACjE;AAAA,IACC,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,0BAA0B;AAAA,IAC1B;AAAA,IACA;AAAA,MACG;AAAA,EAEJ,OAAO,OAAO,YAAY,UAA2B,CAAC,CAAC;AAAA,EACvD,OAAO,YAAY,iBAAiB,UAAS,KAAK;AAAA,EAClD,OAAO,OAAO,YAAY,UAAwB,IAAI;AAAA,EAEtD,MAAM,eAAe,YAAY,OAAO;AAAA,EAExC,MAAM,eAAe,aACpB,CAAC,SAA8B;AAAA,IAC9B,IAAI,KAAK,OAAO,cAAc;AAAA,MAC7B,OAAO,oBAAoB,KAAK,OAAO,OAAO,MAAM,QAAQ,CAAC,aAAa;AAAA,IAC3E;AAAA,IACA,OAAO;AAAA,KAER,CAAC,cAAc,SAAS,CACzB;AAAA,EAEA,MAAM,WAAW,aAChB,OAAO,eAAkC;AAAA,IACxC,SAAS,IAAI;AAAA,IACb,MAAM,YAAY,MAAM,KAAK,UAAU;AAAA,IACvC,MAAM,YAAY,WAAW,MAAM;AAAA,IAEnC,IAAI,aAAa,GAAG;AAAA,MACnB,MAAM,MAAM,WAAW;AAAA,MACvB,SAAS,GAAG;AAAA,MACZ,UAAU,GAAG;AAAA,MACb;AAAA,IACD;AAAA,IAEA,MAAM,aAAa,UAAU,MAAM,GAAG,SAAS;AAAA,IAC/C,MAAM,WAA6B,CAAC;AAAA,IAEpC,WAAW,QAAQ,YAAY;AAAA,MAC9B,MAAM,kBAAkB,aAAa,IAAI;AAAA,MACzC,IAAI,iBAAiB;AAAA,QACpB,SAAS,eAAe;AAAA,QACxB,UAAU,eAAe;AAAA,QACzB;AAAA,MACD;AAAA,MAEA,MAAM,WAAW,YAAY,IAAI;AAAA,MAEjC,IAAI;AAAA,QACH,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI,YAAY,KAAK,QAAQ;AAAA,QAE7B,IAAI,aAAa,SAAS;AAAA,UACzB,IAAI,gBAAgB;AAAA,YACnB,CAAC,SAAS,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,cACnC,eAAc,IAAI;AAAA,cAClB,cAAa,IAAI;AAAA,YAClB,CAAC;AAAA,UACF,EAAO;AAAA,YACN,UAAU,MAAM,eAAc,IAAI;AAAA;AAAA,QAEpC,EAAO,SAAI,aAAa,OAAO;AAAA,UAC9B,YAAY;AAAA,UACZ,IAAI,yBAAyB;AAAA,YAC5B,OAAO,MAAM,cAAa,IAAI;AAAA,UAC/B;AAAA,QACD,EAAO,SAAI,aAAa,QAAQ;AAAA,UAC/B,cAAc,MAAM,WAAW,IAAI;AAAA,UACnC,OAAO;AAAA,UACP,IAAI,CAAC,KAAK,MAAM;AAAA,YACf,MAAM,MAAM,KAAK,KAAK,YAAY;AAAA,YAClC,YACC,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,WAAW,IAC5C,kBACA;AAAA,UACL;AAAA,QACD;AAAA,QAEA,MAAM,KAAK,YAAW;AAAA,QACtB,SAAS,KAAK;AAAA,UACb;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc;AAAA,QACf,CAAC;AAAA,QACA,MAAM;AAAA,QACP,MAAM,MAAM,2BAA2B,KAAK;AAAA,QAC5C,SAAS,GAAG;AAAA,QACZ,UAAU,GAAG;AAAA;AAAA,IAEf;AAAA,IAEA,IAAI,SAAS,SAAS,GAAG;AAAA,MACxB,SAAS,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;AAAA,MACzC,WAAW,QAAQ,UAAU;AAAA,QACvB,mBAAmB,KAAK,MAAM,SAAS,EAC1C,KAAK,CAAC,uBAAuB;AAAA,UAC7B,SAAS,CAAC,SACT,KAAK,IAAI,CAAC,aACT,SAAS,OAAO,KAAK,KAClB;AAAA,eACG;AAAA,YACH,cAAc;AAAA,YACd;AAAA,YACA,aAAa;AAAA,UACd,IACC,QACJ,CACD;AAAA,SACA,EACA,MAAM,CAAC,gBAAyB;AAAA,UAChC,MAAM,MACL,uBAAuB,QACpB,YAAY,UACZ,oBAAoB,KAAK;AAAA,UAC7B,SAAS,CAAC,SACT,KAAK,IAAI,CAAC,aACT,SAAS,OAAO,KAAK,KAClB;AAAA,eACG;AAAA,YACH,cAAc;AAAA,YACd,aAAa;AAAA,UACd,IACC,QACJ,CACD;AAAA,UACA,UAAU,GAAG;AAAA,SACb;AAAA,MACH;AAAA,IACD;AAAA,KAED;AAAA,IACC,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CACD;AAAA,EAEA,MAAM,aAAa,aAAY,CAAC,OAAe;AAAA,IAC9C,SAAS,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAAA,IAClD,SAAS,IAAI;AAAA,KACX,CAAC,CAAC;AAAA,EAEL,MAAM,aAAa,aAAY,MAAM;AAAA,IACpC,SAAS,CAAC,CAAC;AAAA,IACX,SAAS,IAAI;AAAA,KACX,CAAC,CAAC;AAAA,EAEL,MAAM,kBAAkB,aAAY,CAAC,MAAiB;AAAA,IACrD,EAAE,eAAe;AAAA,IACjB,EAAE,gBAAgB;AAAA,IAClB,IAAI,EAAE,aAAa,MAAM,SAAS,OAAO,GAAG;AAAA,MAC3C,cAAc,IAAI;AAAA,IACnB;AAAA,KACE,CAAC,CAAC;AAAA,EAEL,MAAM,kBAAkB,aAAY,CAAC,MAAiB;AAAA,IACrD,EAAE,eAAe;AAAA,IACjB,EAAE,gBAAgB;AAAA,IAClB,MAAM,OAAQ,EAAE,cAA8B,sBAAsB;AAAA,IACpE,MAAM,IAAI,EAAE;AAAA,IACZ,MAAM,IAAI,EAAE;AAAA,IACZ,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,SAAS,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ;AAAA,MACvE,cAAc,KAAK;AAAA,IACpB;AAAA,KACE,CAAC,CAAC;AAAA,EAEL,MAAM,iBAAiB,aAAY,CAAC,MAAiB;AAAA,IACpD,EAAE,eAAe;AAAA,IACjB,EAAE,gBAAgB;AAAA,KAChB,CAAC,CAAC;AAAA,EAEL,MAAM,aAAa,aAClB,CAAC,MAAiB;AAAA,IACjB,EAAE,eAAe;AAAA,IACjB,EAAE,gBAAgB;AAAA,IAClB,cAAc,KAAK;AAAA,IAEnB,MAAM,eAAe,EAAE,aAAa;AAAA,IACpC,IAAI,aAAa,SAAS,GAAG;AAAA,MAC5B,SAAS,MAAM,KAAK,YAAY,CAAC;AAAA,IAClC;AAAA,KAED,CAAC,QAAQ,CACV;AAAA,EAEA,MAAM,cAAc,aACnB,CAAC,MAAsB;AAAA,IACtB,MAAM,QAAQ,EAAE,eAAe;AAAA,IAC/B,IAAI,CAAC;AAAA,MAAO;AAAA,IAEZ,MAAM,cAAsB,CAAC;AAAA,IAC7B,WAAW,QAAQ,MAAM,KAAK,KAAK,GAAG;AAAA,MACrC,IAAI,KAAK,SAAS,QAAQ;AAAA,QACzB,MAAM,OAAO,KAAK,UAAU;AAAA,QAC5B,IAAI,MAAM;AAAA,UACT,YAAY,KAAK,IAAI;AAAA,QACtB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,IAAI,YAAY,SAAS,GAAG;AAAA,MAC3B,EAAE,eAAe;AAAA,MACjB,SAAS,WAAW;AAAA,IACrB;AAAA,KAED,CAAC,QAAQ,CACV;AAAA,EAEA,WAAU,MAAM;AAAA,IACf,IAAI,CAAC;AAAA,MAAU;AAAA,IAEf,IAAI,cAAc;AAAA,IAElB,MAAM,cAAc,CAAC,MAA4B;AAAA,MAChD,EAAE,eAAe;AAAA,MACjB,IAAI,EAAE,cAAc,MAAM,SAAS,OAAO,GAAG;AAAA,QAC5C;AAAA,QACA,IAAI,gBAAgB,GAAG;AAAA,UACtB,cAAc,IAAI;AAAA,QACnB;AAAA,MACD;AAAA;AAAA,IAGD,MAAM,cAAc,CAAC,MAA4B;AAAA,MAChD,EAAE,eAAe;AAAA,MACjB;AAAA,MACA,IAAI,gBAAgB,GAAG;AAAA,QACtB,cAAc,KAAK;AAAA,MACpB;AAAA;AAAA,IAGD,MAAM,aAAa,CAAC,MAA4B;AAAA,MAC/C,EAAE,eAAe;AAAA;AAAA,IAGlB,MAAM,SAAS,CAAC,MAA4B;AAAA,MAC3C,EAAE,eAAe;AAAA,MACjB,cAAc;AAAA,MACd,cAAc,KAAK;AAAA,MAEnB,MAAM,eAAe,EAAE,cAAc;AAAA,MACrC,IAAI,gBAAgB,aAAa,SAAS,GAAG;AAAA,QAC5C,SAAS,MAAM,KAAK,YAAY,CAAC;AAAA,MAClC;AAAA;AAAA,IAGD,SAAS,iBAAiB,aAAa,WAAW;AAAA,IAClD,SAAS,iBAAiB,aAAa,WAAW;AAAA,IAClD,SAAS,iBAAiB,YAAY,UAAU;AAAA,IAChD,SAAS,iBAAiB,QAAQ,MAAM;AAAA,IAExC,OAAO,MAAM;AAAA,MACZ,SAAS,oBAAoB,aAAa,WAAW;AAAA,MACrD,SAAS,oBAAoB,aAAa,WAAW;AAAA,MACrD,SAAS,oBAAoB,YAAY,UAAU;AAAA,MACnD,SAAS,oBAAoB,QAAQ,MAAM;AAAA;AAAA,KAE1C,CAAC,UAAU,QAAQ,CAAC;AAAA,EAEvB,MAAM,SAAS,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO;AAAA,EACrD,MAAM,YAAY,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO;AAAA,EAExD,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;;ACjdD,qBAAS;AAIF,SAAS,eAAe,CAAC,WAA+B,UAAU,MAAM;AAAA,EAC9E,MAAM,aAAa,qBAAqB,CAAC,UAAU,MAAM,UAAU;AAAA,EAEnE,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,WAAW,WAAW,OAAO;AAAA,IACxC,SAAS,MAAO,YAAY,UAAU,gBAAgB,SAAS,IAAI;AAAA,IACnE,SAAS,CAAC,CAAC,aAAa;AAAA,IACxB,iBAAiB,cAAc,UAAU,OAAO;AAAA,IAChD,OAAO;AAAA,IACP,WAAW;AAAA,EACZ,CAAC;AAAA;;ACdF,qBAAS,0BAAU,gCAAa;AAKzB,SAAS,eAAe,CAAC,WAA+B;AAAA,EAC9D,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,SAA8B;AAAA,MAC1C,IAAI,CAAC;AAAA,QAAW,MAAM,IAAI,MAAM,eAAe;AAAA,MAC/C,OAAO,UAAU,aAAa,WAAW,IAAI;AAAA;AAAA,IAE9C,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,iBAAiB,CAAC;AAAA,MAC5D,IAAI,WAAW;AAAA,QACd,YAAY,kBAAkB;AAAA,UAC7B,UAAU,CAAC,YAAY,SAAS;AAAA,QACjC,CAAC;AAAA,MACF;AAAA;AAAA,EAEF,CAAC;AAAA;AAGK,SAAS,WAAW,CAAC,WAA+B;AAAA,EAC1D,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,YAAY,SAAS;AAAA,IAChC,SAAS,MAAM;AAAA,MACd,IAAI,CAAC;AAAA,QAAW,MAAM,IAAI,MAAM,eAAe;AAAA,MAC/C,OAAO,UAAU,aAAa,SAAS;AAAA;AAAA,IAExC,SAAS,QAAQ,SAAS;AAAA,EAC3B,CAAC;AAAA;AAGK,SAAS,gBAAgB,CAAC,WAA+B;AAAA,EAC/D,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,iBAAiB,SAAS;AAAA,IACrC,SAAS,MAAM;AAAA,MACd,IAAI,CAAC;AAAA,QAAW,MAAM,IAAI,MAAM,eAAe;AAAA,MAC/C,OAAO,UAAU,iBAAiB,SAAS;AAAA;AAAA,IAE5C,SAAS,QAAQ,SAAS;AAAA,EAC3B,CAAC;AAAA;;AC3CF,wBAAS,0BAAa,6BAAU;AAUzB,IAAM,eAAe,CAAC,cAAkC;AAAA,EAC9D;AAAA,EACA;AACD;AACO,IAAM,uBAAuB,CAAC,SAAS,SAAS;AAChD,IAAM,oBAAoB,CAAC,cAAkC;AAAA,EACnE;AAAA,EACA;AACD;AAEO,SAAS,cAAc,GAAY;AAAA,EACzC,QAAQ,MAAM,YAAW,UAAU;AAAA,EACnC,OAAO,SAAQ,UAAU,eAAe;AAAA;AAOlC,SAAS,eAAe,GAAG;AAAA,EACjC,MAAM,cAAc,eAAe;AAAA,EACnC,OAAO,UAAS;AAAA,IACf,UAAU;AAAA,IACV,SAAS,MAAM,UAAU,UAAU;AAAA,IACnC,SAAS;AAAA,IACT,iBAAiB;AAAA,EAClB,CAAC;AAAA;AAGF,SAAS,uBAAuB,CAC/B,aACA,MACC;AAAA,EACD,YAAY,aAAgC,sBAAsB,CAAC,QAClE,MAAM,EAAE,OAAO,IAAI,MAAM,IAAI,CAAC,MAAO,EAAE,OAAO,KAAK,KAAK,OAAO,CAAE,EAAE,IAAI,GACxE;AAAA,EACA,YAAY,kBAAkB,EAAE,UAAU,qBAAqB,CAAC;AAAA;AAO1D,SAAS,sBAAsB,GAAG;AAAA,EACxC,MAAM,cAAc,gBAAe;AAAA,EACnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UACZ,UAAU,aAAa,MAAM,QAAQ,MAAM,KAAK;AAAA,IACjD,WAAW,GAAG,WAAW,wBAAwB,aAAa,IAAI;AAAA,EACnE,CAAC;AAAA;AAOK,SAAS,wBAAwB,GAAG;AAAA,EAC1C,MAAM,cAAc,gBAAe;AAAA,EACnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UACZ,UAAU,eAAe,MAAM,QAAQ,MAAM,MAAM;AAAA,IACpD,WAAW,GAAG,WAAW,wBAAwB,aAAa,IAAI;AAAA,EACnE,CAAC;AAAA;AAGK,SAAS,cAAc,CAAC,WAA+B;AAAA,EAC7D,MAAM,cAAc,eAAe;AAAA,EACnC,OAAO,UAAS;AAAA,IACf,UAAU,aAAa,SAAS;AAAA,IAChC,SAAS,MAAM;AAAA,MACd,IAAI,CAAC;AAAA,QAAW,MAAM,IAAI,MAAM,eAAe;AAAA,MAC/C,OAAO,UAAU,eAAe,SAAS;AAAA;AAAA,IAE1C,SAAS,QAAQ,SAAS,KAAK;AAAA,IAC/B,iBAAiB;AAAA,EAClB,CAAC;AAAA;AAGK,SAAS,oBAAoB,CAAC,WAA+B;AAAA,EACnE,MAAM,cAAc,gBAAe;AAAA,EACnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,SAA8C;AAAA,MAC1D,IAAI,CAAC;AAAA,QAAW,MAAM,IAAI,MAAM,eAAe;AAAA,MAC/C,OAAO,UAAU,kBAAkB,WAAW,IAAI;AAAA;AAAA,IAEnD,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,aAAa,SAAS,EAAE,CAAC;AAAA;AAAA,EAErE,CAAC;AAAA;AAGK,SAAS,aAAa,CAAC,WAA+B;AAAA,EAC5D,MAAM,cAAc,gBAAe;AAAA,EACnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UAKZ,UAAU,WAAW,MAAM,QAAQ;AAAA,MAClC,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IACf,CAAC;AAAA,IACF,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,aAAa,SAAS,EAAE,CAAC;AAAA,MACnE,YAAY,kBAAkB,EAAE,UAAU,qBAAqB,CAAC;AAAA;AAAA,EAElE,CAAC;AAAA;AAGK,SAAS,eAAe,CAAC,WAA+B;AAAA,EAC9D,MAAM,cAAc,gBAAe;AAAA,EACnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UACZ,UAAU,aAAa,MAAM,QAAQ,MAAM,KAAK;AAAA,IACjD,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,aAAa,SAAS,EAAE,CAAC;AAAA,MACnE,YAAY,kBAAkB,EAAE,UAAU,qBAAqB,CAAC;AAAA;AAAA,EAElE,CAAC;AAAA;AAGK,SAAS,iBAAiB,CAAC,WAA+B;AAAA,EAChE,MAAM,cAAc,gBAAe;AAAA,EACnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UAOZ,UAAU,eAAe,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACpD,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,MACd,MAAM,MAAM;AAAA,IACb,CAAC;AAAA,IACF,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,aAAa,SAAS,EAAE,CAAC;AAAA,MACnE,YAAY,kBAAkB,EAAE,UAAU,qBAAqB,CAAC;AAAA;AAAA,EAElE,CAAC;AAAA;AAGK,SAAS,mBAAmB,CAClC,WACA,QACC;AAAA,EACD,OAAO,UAAS;AAAA,IACf,UAAU,CAAC,GAAG,kBAAkB,SAAS,GAAG,UAAU,KAAK;AAAA,IAC3D,SAAS,MAAM;AAAA,MACd,IAAI,CAAC;AAAA,QAAW,MAAM,IAAI,MAAM,eAAe;AAAA,MAC/C,OAAO,UAAU,qBAAqB,WAAW,MAAM;AAAA;AAAA,IAExD,SAAS,QAAQ,SAAS;AAAA,IAC1B,iBAAiB,CAAC,UAAU;AAAA,MAC3B,MAAM,aAAa,MAAM,MAAM,MAAM,UAAU,KAC9C,CAAC,WAAW,OAAO,WAAW,SAC/B;AAAA,MACA,OAAO,aAAa,OAAO;AAAA;AAAA,EAE7B,CAAC;AAAA;AAOK,SAAS,YAAY,CAAC,WAA+B;AAAA,EAC3D,MAAM,cAAc,gBAAe;AAAA,EACnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,UACZ,UAAU,UAAU,MAAM,MAAM;AAAA,IACjC,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,aAAa,SAAS,EAAE,CAAC;AAAA,MACnE,YAAY,kBAAkB,EAAE,UAAU,qBAAqB,CAAC;AAAA,MAChE,YAAY,kBAAkB,EAAE,UAAU,CAAC,YAAY,MAAM,EAAE,CAAC;AAAA,MAChE,IAAI,WAAW;AAAA,QACd,YAAY,kBAAkB,EAAE,UAAU,CAAC,YAAY,SAAS,EAAE,CAAC;AAAA,MACpE;AAAA;AAAA,EAEF,CAAC;AAAA;;AC/LF,qBAAS,2BAAU,gCAAa;AAChC;AAAA,2BACC;AAAA,2BACA;AAAA,2BACA;AAAA,2BACA;AAAA,0BACA;AAAA;;;ACND,mBAAS;AAqBF,IAAM,0BAA0B,SACtC,CAAC,KAAK,SAAS;AAAA,EACd,iBAAiB,IAAI;AAAA,EAErB,YAAY,CAAC,iBAAiB,YAAY;AAAA,IACzC,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,SAAS,IAAI,IAAI,MAAM,eAAe;AAAA,MAC5C,MAAM,WAAW,OAAO,IAAI,eAAe,KAAK,CAAC;AAAA,MACjD,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ,EAAE,GAAG;AAAA,QAC/C,OAAO,IAAI,iBAAiB,CAAC,GAAG,UAAU,OAAO,CAAC;AAAA,MACnD;AAAA,MACA,OAAO,EAAE,iBAAiB,OAAO;AAAA,KACjC;AAAA;AAAA,EAGF,eAAe,CAAC,iBAAiB,cAAc;AAAA,IAC9C,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,SAAS,IAAI,IAAI,MAAM,eAAe;AAAA,MAC5C,MAAM,WAAW,OAAO,IAAI,eAAe,KAAK,CAAC;AAAA,MACjD,OAAO,IACN,iBACA,SAAS,OAAO,CAAC,MAAM,EAAE,OAAO,SAAS,CAC1C;AAAA,MACA,OAAO,EAAE,iBAAiB,OAAO;AAAA,KACjC;AAAA;AAAA,EAGF,aAAa,CAAC,oBAAoB;AAAA,IACjC,OAAO,IAAI,EAAE,gBAAgB,IAAI,eAAe,KAAK,CAAC;AAAA;AAAA,EAGvD,eAAe,CAAC,oBAAoB;AAAA,IACnC,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,SAAS,IAAI,IAAI,MAAM,eAAe;AAAA,MAC5C,OAAO,OAAO,eAAe;AAAA,MAC7B,OAAO,EAAE,iBAAiB,OAAO;AAAA,KACjC;AAAA;AAAA,EAGF,iBAAiB,CAAC,oBAAoB;AAAA,IACrC,MAAM,WAAW,IAAI,EAAE,YAAY,eAAe;AAAA,IAClD,IAAI,EAAE,cAAc,eAAe;AAAA,IACnC,OAAO;AAAA;AAET,EACD;;;ADjBA,MAAM,kBAAkB;AAAA,OACjB,qBAAoB,CACzB,iBACoC;AAAA,IACpC,MAAM,WAAW,MAAM,wBAAwB;AAAA,MAC9C,MAAM,EAAE,UAAU,gBAAgB;AAAA,IACnC,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,IAClE,OAAO,SAAS;AAAA;AAAA,OAGX,sBAAqB,CAC1B,iBACA,MACkC;AAAA,IAClC,MAAM,WAAW,MAAM,yBAAyB;AAAA,MAC/C,MAAM,EAAE,UAAU,gBAAgB;AAAA,MAClC,MAAM;AAAA,IACP,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,IAClE,OAAO,SAAS;AAAA;AAAA,OAGX,sBAAqB,CAC1B,YACgC;AAAA,IAChC,MAAM,WAAW,MAAM,yBAAyB;AAAA,MAC/C,MAAM,EAAE,WAAW;AAAA,IACpB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,IAClE,OAAO,SAAS;AAAA;AAAA,OAGX,cAAa,CAClB,iBACA,mBACA,OACiC;AAAA,IACjC,MAAM,WAAW,MAAM,yBAAyB;AAAA,MAC/C,MAAM,EAAE,UAAU,gBAAgB;AAAA,MAClC,MAAM,EAAE,mBAAmB,MAAM;AAAA,IAClC,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,IAClE,OAAO,SAAS;AAAA;AAAA,OAGX,mBAAkB,CACvB,YACA,MACmC;AAAA,IACnC,MAAM,WAAW,MAAM,yBAAyB;AAAA,MAC/C,MAAM,EAAE,WAAW;AAAA,MACnB,MAAM,QAAQ,CAAC;AAAA,IAChB,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAO,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,IAClE,OAAO,SAAS;AAAA;AAElB;AAEA,IAAM,cAAc,IAAI;AAEjB,SAAS,mBAAmB,CAClC,iBACA,UAAU,MACT;AAAA,EACD,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,YAAY,YAAY,eAAe;AAAA,IAClD,SAAS,MAAM,YAAY,qBAAqB,eAAyB;AAAA,IACzE,SAAS,CAAC,CAAC,mBAAmB;AAAA,IAC9B,WAAW;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,wBAAwB,GAAG;AAAA,EAC1C,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY;AAAA,MACX;AAAA,MACA;AAAA,UAIK,YAAY,sBAAsB,iBAAiB,QAAQ,CAAC,CAAC;AAAA,IACnE,WAAW,CAAC,KAAK,sBAAsB;AAAA,MACtC,YAAY,kBAAkB;AAAA,QAC7B,UAAU,CAAC,YAAY,YAAY,eAAe;AAAA,MACnD,CAAC;AAAA;AAAA,EAEH,CAAC;AAAA;AAGK,SAAS,wBAAwB,GAAG;AAAA,EAC1C,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,CAAC,eACZ,YAAY,sBAAsB,UAAU;AAAA,IAC7C,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,YAAY,UAAU,EAAE,CAAC;AAAA;AAAA,EAEtE,CAAC;AAAA;AAGK,SAAS,gBAAgB,GAAG;AAAA,EAClC,MAAM,aAAa,wBAAwB,CAAC,UAAU,MAAM,UAAU;AAAA,EAEtE,OAAO,aAAY;AAAA,IAClB,YAAY;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,UAKK,YAAY,cAAc,iBAAiB,mBAAmB,KAAK;AAAA,IACzE,WAAW,CAAC,QAAQ,sBAAsB;AAAA,MACzC,WAAW,iBAAiB;AAAA,QAC3B,IAAI,KAAK;AAAA,QACT,WAAW,KAAK;AAAA,QAChB,OAAO,KAAK;AAAA,QACZ,SAAS,KAAK;AAAA,MACf,CAAC;AAAA;AAAA,EAEH,CAAC;AAAA;AAGK,SAAS,kBAAkB,GAAG;AAAA,EACpC,MAAM,cAAc,gBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY;AAAA,MACX;AAAA,MACA;AAAA,UAIK,YAAY,mBAAmB,YAAY,IAAI;AAAA,IACrD,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,iBAAiB,CAAC;AAAA;AAAA,EAE9D,CAAC;AAAA;;AE/LF,sBAAS,sBAAW;;;ACApB,mBAAS;AAwEF,IAAM,qBAAqB,SAAwB,CAAC,SAAS;AAAA,EACnE,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,YAAY,CAAC,YAAY,IAAI,EAAE,QAAQ,CAAC;AAAA,EACxC,gBAAgB,CAAC,gBAAgB,IAAI,EAAE,YAAY,CAAC;AAAA,EACpD,YAAY,CAAC,YAAY,IAAI,EAAE,QAAQ,CAAC;AAAA,EACxC,mBAAmB,CAAC,qBAAqB,IAAI,EAAE,iBAAiB,CAAC;AAAA,EACjE,sBAAsB,CAAC,sBAAsB,IAAI,EAAE,kBAAkB,CAAC;AAAA,EACtE,kBAAkB,CAAC,kBAAkB,IAAI,EAAE,cAAc,CAAC;AAAA,EAC1D,YAAY,CAAC,cAAc,IAAI,EAAE,UAAU,CAAC;AAAA,EAC5C,gBAAgB,MAAM,IAAI,EAAE,kBAAkB,KAAK,CAAC;AAAA,EACpD,iBAAiB,MAAM,IAAI,EAAE,kBAAkB,MAAM,CAAC;AAAA,EACtD,UAAU,CAAC,UAAU,IAAI,EAAE,MAAM,CAAC;AAAA,EAClC,SAAS,CAAC,SAAS,IAAI,EAAE,KAAK,CAAC;AAAA,EAC/B,iBAAiB,CAAC,iBAAiB,IAAI,EAAE,aAAa,CAAC;AAAA,EACvD,WAAW,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AACtC,EAAE;;;AClGF,mBAAS;AAqBF,IAAM,wBAAwB,SAA2B,CAAC,SAAS;AAAA,EACzE,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,iBAAiB,CAAC,iBACjB,IAAI,EAAE,cAAc,cAAc,OAAO,gBAAgB,KAAK,CAAC;AAAA,EAChE,eAAe,CAAC,iBAAiB,IAAI,EAAE,aAAa,CAAC;AAAA,EACrD,mBAAmB,CAAC,mBAAmB,IAAI,EAAE,eAAe,CAAC;AAAA,EAC7D,mBAAmB,MAClB,IAAI,EAAE,cAAc,MAAM,cAAc,OAAO,gBAAgB,KAAK,CAAC;AACvE,EAAE;;;AFxBK,SAAS,qBAAqB,CAAC,WAA+B;AAAA,EACpE,MAAM,YAAY,QAAyB,IAAI;AAAA,EAC/C,MAAM,oBAAoB,QAAsB,IAAI;AAAA,EACpD,MAAM,aAAa,mBAAmB,CAAC,MAAM,EAAE,UAAU;AAAA,EACzD,MAAM,oBAAoB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB;AAAA,EACvE,MAAM,cAAc,cAAc,CAAC,MAAM,EAAE,WAAW;AAAA,EACtD,MAAM,cAAc,cAAc,CAAC,MAAM,EAAE,WAAW;AAAA,EACtD,MAAM,kBAAkB,sBAAsB,CAAC,MAAM,EAAE,eAAe;AAAA,EACtE,MAAM,oBAAoB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB;AAAA,EAE1E,WAAU,MAAM;AAAA,IACf,IAAI,CAAC;AAAA,MAAW;AAAA,IAEhB,MAAM,UAAS,IAAI;AAAA,IACnB,UAAU,UAAU;AAAA,IAEpB,MAAM,MAAM,UAAU,aAAa,SAAS;AAAA,IAC5C,QAAO,QAAQ,GAAG;AAAA,IAElB,MAAM,cAAc,QAAO,GAAG,KAAK,CAAC,UAAU;AAAA,MAC7C,MAAM,UAAU,MAAM;AAAA,MAEtB,QAAQ,MAAM;AAAA,aACR,6BAA6B;AAAA,UACjC,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,UAC9D,MAAM,iBACL,OAAO,SAAS,mBAAmB,WAChC,QAAQ,iBACR;AAAA,UACJ,MAAM,cACL,OAAO,SAAS,gBAAgB,WAAW,QAAQ,cAAc;AAAA,UAClE,MAAM,oBACL,OAAO,SAAS,sBAAsB,WACnC,QAAQ,oBACR;AAAA,UACJ,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,UAE9D,gBAAgB;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,UACD;AAAA,QACD;AAAA,aAEK,oCAAoC;AAAA,UACxC,MAAM,SAAS,SAAS;AAAA,UACxB,IAAI,WAAW,UAAU;AAAA,YACxB,kBAAkB,IAAI;AAAA,YACtB,kBAAkB,UAAU,MAAM,QACjC,2CACD;AAAA,UACD;AAAA,UACA;AAAA,QACD;AAAA,aAEK,8BAA8B;AAAA,UAClC,kBAAkB;AAAA,UAClB,MAAM,SACL,OAAO,SAAS,WAAW,WACxB,QAAQ,SACR;AAAA,UACJ,MAAM,MAAK,QAAQ;AAAA,UACnB;AAAA,QACD;AAAA,aAEK,+BAA+B;AAAA,UACnC,MAAM,YACL,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY;AAAA,UAC9D,kBAAkB,IAAI;AAAA,UACtB,IAAI,CAAC,kBAAkB,SAAS;AAAA,YAC/B,kBAAkB,UAAU,MAAM,QACjC,mCAAwB,UAAU,QAAQ,CAAC,GAC5C;AAAA,UACD;AAAA,UACA;AAAA,QACD;AAAA,aAEK,8BAA8B;AAAA,UAClC,IAAI,kBAAkB,SAAS;AAAA,YAC9B,YAAY,kBAAkB,SAAS;AAAA,cACtC,SAAS;AAAA,YACV,CAAC;AAAA,UACF,EAAO;AAAA,YACN,kBAAkB,UAAU,MAAM,QACjC,2BACD;AAAA;AAAA,UAED;AAAA,QACD;AAAA,aAEK,+BAA+B;AAAA,UACnC,kBAAkB;AAAA,UAClB,MAAM,YAAY,SAAS;AAAA,UAC3B,MAAM,aAAa,SAAS;AAAA,UAC5B,MAAM,gBACL,OAAO,SAAS,kBAAkB,WAC/B,QAAQ,gBACR;AAAA,UACJ,MAAM,YACL,OAAO,cAAc,WAClB,YACA,OAAO,cAAc,WACpB,WAAW,SAAS,IACpB;AAAA,UACL,MAAM,aACL,OAAO,eAAe,WACnB,aACA,OAAO,eAAe,WACrB,WAAW,UAAU,IACrB;AAAA,UACL,WAAW,UAAU;AAAA,UACrB,kBAAkB,KAAK;AAAA,UACvB,IAAI,kBAAkB,SAAS;AAAA,YAC9B,YAAY,kBAAkB,OAAO;AAAA,YACrC,kBAAkB,UAAU;AAAA,UAC7B;AAAA,UACA,MAAM,UAAU,WAAU,UAAU,QAAQ,CAAC;AAAA,UAC7C,IAAI,eAAe;AAAA,YAClB,MAAM,kBAAkB,SAAS;AAAA,cAChC,OAAO;AAAA,cACP,MAAM,4BAA4B;AAAA,YACnC,CAAC;AAAA,UACF,EAAO;AAAA,YACN,MAAM,QAAQ,OAAO;AAAA;AAAA,UAEtB;AAAA,QACD;AAAA,aAEK,oCAAoC;AAAA,UACxC,kBAAkB;AAAA,UAClB,kBAAkB,KAAK;AAAA,UACvB,IAAI,kBAAkB,SAAS;AAAA,YAC9B,YAAY,kBAAkB,OAAO;AAAA,YACrC,kBAAkB,UAAU;AAAA,UAC7B;AAAA,UAGA,MAAM,QAAQ,wDAA6C;AAAA,UAC3D;AAAA,QACD;AAAA,aAEK,8BAA8B;AAAA,UAClC,MAAM,aAAa,SAAS;AAAA,UAC5B,MAAM,aACL,OAAO,eAAe,WACnB,aACA,OAAO,eAAe,WACrB,WAAW,UAAU,IACrB;AAAA,UACL,IAAI,eAAe,QAAQ,CAAC,OAAO,MAAM,UAAU,GAAG;AAAA,YACrD,WAAW,UAAU;AAAA,UACtB;AAAA,UACA;AAAA,QACD;AAAA,aAEK,4BAA4B;AAAA,UAChC,kBAAkB;AAAA,UAClB,MAAM,QACL,OAAO,SAAS,UAAU,WACvB,QAAQ,QACR;AAAA,UACJ,kBAAkB,KAAK;AAAA,UACvB,IAAI,kBAAkB,SAAS;AAAA,YAC9B,YAAY,kBAAkB,OAAO;AAAA,YACrC,kBAAkB,UAAU;AAAA,UAC7B;AAAA,UACA,MAAM,MAAM,KAAI,OAAO;AAAA,UACvB;AAAA,QACD;AAAA;AAAA,UAGC;AAAA;AAAA,KAEF;AAAA,IAED,OAAO,MAAM;AAAA,MACZ,YAAY;AAAA,MACZ,QAAO,WAAW;AAAA;AAAA,KAEjB;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA;;AGxMF,sBAAS,4BAAW;;;ACApB,mBAAS;AAgBF,IAAM,gBAAgB,SAAmB,CAAC,SAAS;AAAA,EACzD,OAAO,CAAC;AAAA,EACR,WAAW,CAAC;AAAA,EACZ,aAAa,CAAC;AAAA,EACd,aAAa;AAAA,EACb,eAAe;AAAA,EACf,UAAU,CAAC,UAAU,SACpB,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,EAAE,QAAQ,WAAW,KAAK,EAAE,EAAE;AAAA,EACzD,YAAY,CAAC,UAAU,YACtB,IAAI,CAAC,OAAO,EAAE,WAAW,KAAK,EAAE,YAAY,WAAW,QAAQ,EAAE,EAAE;AAAA,EACpE,gBAAgB,CAAC,UAAU,SAC1B,IAAI,CAAC,OAAO,EAAE,aAAa,KAAK,EAAE,cAAc,WAAW,KAAK,EAAE,EAAE;AAAA,EACrE,WAAW,CAAC,aAAa,IAAI,EAAE,aAAa,MAAM,eAAe,SAAS,CAAC;AAAA,EAC3E,YAAY,MAAM,IAAI,EAAE,aAAa,OAAO,eAAe,KAAK,CAAC;AAClE,EAAE;;;ADzBK,SAAS,oBAAoB,CAAC,cAAkC;AAAA,EACtE,MAAM,aAAa,mBAAmB,CAAC,MAAM,EAAE,UAAU;AAAA,EACzD,MAAM,iBAAiB,mBAAmB,CAAC,MAAM,EAAE,cAAc;AAAA,EACjE,MAAM,mBAAmB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB;AAAA,EACrE,MAAM,aAAa,mBAAmB,CAAC,MAAM,EAAE,UAAU;AAAA,EACzD,MAAM,WAAW,mBAAmB,CAAC,MAAM,EAAE,QAAQ;AAAA,EACrD,MAAM,UAAU,mBAAmB,CAAC,MAAM,EAAE,OAAO;AAAA,EACnD,MAAM,kBAAkB,mBAAmB,CAAC,MAAM,EAAE,eAAe;AAAA,EACnE,MAAM,YAAY,mBAAmB,CAAC,MAAM,EAAE,SAAS;AAAA,EACvD,MAAM,WAAW,cAAc,CAAC,MAAM,EAAE,QAAQ;AAAA,EAChD,MAAM,UAAU,mBAAmB,CAAC,MAAM,EAAE,OAAO;AAAA,EACnD,MAAM,cAAc,mBAAmB,CAAC,MAAM,EAAE,WAAW;AAAA,EAC3D,MAAM,eAAe,mBAAmB,CAAC,MAAM,EAAE,YAAY;AAAA,EAC7D,MAAM,UAAU,mBAAmB,CAAC,MAAM,EAAE,OAAO;AAAA,EAEnD,MAAM,eAAe,aAAY,YAAY;AAAA,IAC5C,IAAI,iBAAiB,cAAc;AAAA,MAClC;AAAA,IACD;AAAA,IAEA,WAAW,IAAI;AAAA,IACf,IAAI;AAAA,MACH,OAAO,gBAAgB,UAAU,cAAc,MAAM,QAAQ,IAAI;AAAA,QAChE,UAAU,qBAAqB;AAAA,QAC/B,UAAU,yBAAyB,OAAO;AAAA,QAC1C,UAAU,oBAAoB;AAAA,MAC/B,CAAC;AAAA,MAED,IAAI,gBAAgB;AAAA,QACnB,WAAW,eAAe,OAAO;AAAA,QACjC,iBAAiB,eAAe,aAAa;AAAA,QAC7C,SAAS,eAAe,SAAS,IAAI;AAAA,QACrC,QAAQ,eAAe,QAAQ,IAAI;AAAA,QACnC,gBAAgB,eAAe,gBAAgB,IAAI;AAAA,QACnD,UAAU,eAAe,UAAU,IAAI;AAAA,QAEvC,MAAM,MAAM,eAAe;AAAA,QAC3B,IAAI,KAAK,UAAU,IAAI,cAAc;AAAA,UACpC,SAAS,cAAc;AAAA,YACtB,UAAU;AAAA,YACV,eAAe;AAAA,cACd,aAAa,IAAI,aAAa,SAAS;AAAA,cACvC,eAAe;AAAA,cACf,UAAU;AAAA,YACX;AAAA,YACA,iBAAiB;AAAA,cAChB,aAAa,IAAI,aAAa,OAAO;AAAA,cACrC,eAAe;AAAA,cACf,UAAU;AAAA,YACX;AAAA,YACA,cAAc;AAAA,YACd,UAAU,IAAI,YAAY;AAAA,UAC3B,CAAC;AAAA,QACF;AAAA,MACD,EAAO,SAAI,YAAY,cAAc,WAAW,WAAW;AAAA,QAC1D,iBAAiB,WAAW,SAAS;AAAA,MACtC;AAAA,MAEA,IAAI,UAAU;AAAA,QACb,eAAe,SAAS,WAAW;AAAA,QACnC,IAAI,CAAC,kBAAkB,SAAS,eAAe;AAAA,UAC9C,iBAAiB,SAAS,aAAa;AAAA,QACxC;AAAA,MACD;AAAA,MACC,MAAM,WACN;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAEf;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EAED,MAAM,oBAAoB,cAAc,UAAU,CAAC,aAAa;AAAA,EAEhE,YAAU,MAAM;AAAA,IACf,IACC,iBAAiB,iBAChB,YAAY,QAAQ,gBAAgB,QAAQ,oBAC5C;AAAA,MACD,aAAa;AAAA,IACd;AAAA,KACE,CAAC,cAAc,SAAS,aAAa,mBAAmB,YAAY,CAAC;AAAA,EAExE,OAAO;AAAA,IACN;AAAA,EACD;AAAA;;AEpGD,qBAAS;AAIF,SAAS,cAAc,CAAC,WAI7B;AAAA,EACD,QAAQ,MAAM,WAAW,UAAU,WAAS;AAAA,IAC3C,UAAU,CAAC,gBAAgB,SAAS;AAAA,IACpC,SAAS,MAAM,UAAU,eAAe,SAAmB;AAAA,IAC3D,SAAS,CAAC,CAAC;AAAA,IACX,WAAW;AAAA,EACZ,CAAC;AAAA,EAED,OAAO,EAAE,MAAM,WAAW,MAA6B;AAAA;;AChBxD,sBAAS,4BAAW;AAab,SAAS,wBAAwB,CAAC,WAA+B;AAAA,EACvE,QAAQ,kBAAkB,0BAA0B,qBAAqB;AAAA,EAKzE,MAAM,0BAA0B;AAAA,EAEhC,MAAM,gBAAgB,aACrB,OAAO,WAAmB;AAAA,IACzB,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,IAAI;AAAA,MACH,MAAM,UAAU,gBAAgB,WAAW,QAAQ,IAAI;AAAA,MACvD,sBAAsB,MAAM;AAAA,MAC3B,OAAO,OAAO;AAAA,MACf,QAAQ,MAAM,gCAAgC,KAAK;AAAA;AAAA,KAGrD,CAAC,WAAW,qBAAqB,CAClC;AAAA,EAEA,MAAM,eAAe,aACpB,OAAO,WAAmB;AAAA,IACzB,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,IAAI;AAAA,MACH,MAAM,UAAU,gBAAgB,WAAW,QAAQ,KAAK;AAAA,MACxD,sBAAsB,MAAM;AAAA,MAC3B,OAAO,OAAO;AAAA,MACf,QAAQ,MAAM,+BAA+B,KAAK;AAAA;AAAA,KAGpD,CAAC,WAAW,qBAAqB,CAClC;AAAA,EAEA,MAAM,mBAAmB,aAAY,YAAY;AAAA,IAChD,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,IAAI;AAAA,MACH,MAAM,QAAQ,IACb,wBAAwB,IAAI,CAAC,MAC5B,UAAU,gBAAgB,WAAW,EAAE,QAAQ,IAAI,CACpD,CACD;AAAA,MACA,WAAW,KAAK,yBAAyB;AAAA,QACxC,sBAAsB,EAAE,MAAM;AAAA,MAC/B;AAAA,MACC,OAAO,OAAO;AAAA,MACf,QAAQ,MAAM,qCAAqC,KAAK;AAAA;AAAA,KAEvD,CAAC,WAAW,yBAAyB,qBAAqB,CAAC;AAAA,EAE9D,YAAU,MAAM;AAAA,IACf,IAAI,CAAC,aAAa,wBAAwB,WAAW;AAAA,MAAG;AAAA,IAExD,MAAM,gBAAgB,CAAC,MAAqB;AAAA,MAE3C,IACC,EAAE,kBAAkB,oBACpB,EAAE,kBAAkB,uBACnB,EAAE,QAAwB,mBAC1B;AAAA,QACD;AAAA,MACD;AAAA,MAEA,MAAM,eAAe,wBAAwB;AAAA,MAE7C,IAAI,EAAE,QAAQ,OAAO,EAAE,QAAQ,KAAK;AAAA,QACnC,EAAE,eAAe;AAAA,QACjB,cAAc,aAAa,MAAM;AAAA,MAClC,EAAO,SAAI,EAAE,QAAQ,OAAO,EAAE,QAAQ,OAAO,EAAE,QAAQ,UAAU;AAAA,QAChE,EAAE,eAAe;AAAA,QACjB,aAAa,aAAa,MAAM;AAAA,MACjC,EAAO,SAAI,EAAE,QAAQ,OAAO,EAAE,QAAQ,KAAK;AAAA,QAC1C,EAAE,eAAe;AAAA,QACjB,iBAAiB;AAAA,MAClB;AAAA;AAAA,IAGD,OAAO,iBAAiB,WAAW,aAAa;AAAA,IAChD,OAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,KAC9D;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA;;AClGF,sBAAS,uBAAW;AAKpB,IAAM,cAAc;AAEb,SAAS,gBAAgB,GAAG;AAAA,EAClC,MAAM,aAAa,QAAO,KAAK;AAAA,EAC/B,MAAM,iBAAiB,QAAsB,IAAI;AAAA,EACjD,MAAM,aAAa,mBAAmB,CAAC,MAAM,EAAE,UAAU;AAAA,EACzD,MAAM,cAAc,cAAc,CAAC,MAAM,EAAE,WAAW;AAAA,EAEtD,YAAU,MAAM;AAAA,IACf,IAAI,WAAW;AAAA,MAAS;AAAA,IAExB,MAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAAA,IACzD,MAAM,cAAc,OAAO,IAAI,OAAO;AAAA,IAEtC,MAAM,oBAAoB,aAAa,QAAQ,WAAW;AAAA,IAE1D,IAAI,gBAAgB,aAAa,mBAAmB;AAAA,MACnD,WAAW,UAAU;AAAA,MAErB,MAAM,MAAM,IAAI,IAAI,OAAO,SAAS,IAAI;AAAA,MACxC,IAAI,aAAa,OAAO,OAAO;AAAA,MAC/B,OAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC;AAAA,MAElD,IAAI,CAAC,mBAAmB;AAAA,QACvB,MAAM,KAAK,2BAA2B;AAAA,QACtC;AAAA,MACD;AAAA,MAEA,eAAe,UAAU,MAAM,QAAQ,qBAAqB;AAAA,MAE5D,IAAI,WAAW;AAAA,MACf,MAAM,cAAc;AAAA,MACpB,MAAM,UAAU;AAAA,MAEhB,MAAM,iBAAiB,MAAM;AAAA,QAC5B,IAAI,eAAe,SAAS;AAAA,UAC3B,YAAY,eAAe,OAAO;AAAA,UAClC,eAAe,UAAU;AAAA,QAC1B;AAAA;AAAA,MAGD,MAAM,cAAc,YAAY;AAAA,QAC/B;AAAA,QACA,IAAI;AAAA,UACH,MAAM,SAAS,MAAM,UAAU,oBAAoB,iBAAiB;AAAA,UAEpE,IAAI,QAAQ,WAAW;AAAA,YACtB,aAAa,WAAW,WAAW;AAAA,YACnC,eAAe;AAAA,YAEf,MAAM,cAAc,MAAM,UAAU,qBAAqB;AAAA,YACzD,IAAI,aAAa,YAAY,WAAW;AAAA,cACvC,WAAW,YAAY,OAAO;AAAA,YAC/B;AAAA,YAEA,MAAM,QACL,uBAAuB,OAAO,WAAW,QAAQ,CAAC,YACnD;AAAA,YACA;AAAA,UACD;AAAA,UAEA,IAAI,WAAW,aAAa;AAAA,YAC3B,WAAW,aAAa,OAAO;AAAA,UAChC,EAAO;AAAA,YACN,aAAa,WAAW,WAAW;AAAA,YACnC,eAAe;AAAA,YACf,MAAM,KACL,gEACD;AAAA;AAAA,UAEA,MAAM;AAAA,UACP,IAAI,WAAW,aAAa;AAAA,YAC3B,WAAW,aAAa,OAAO;AAAA,UAChC,EAAO;AAAA,YACN,aAAa,WAAW,WAAW;AAAA,YACnC,eAAe;AAAA,YACf,MAAM,MAAM,qDAAqD;AAAA;AAAA;AAAA;AAAA,MAKpE,WAAW,aAAa,IAAI;AAAA,IAC7B;AAAA,KACE,CAAC,YAAY,WAAW,CAAC;AAAA;;ACxF7B,sBAAS,4BAAW,0BAAa,qBAAU;AAC3C,2BAAS;;;ACDT,mBAAS;AA8CT,IAAM,QAA0B,CAAC,UAAU,UAAU;AAE9C,IAAM,qBAAqB,SAAwB,CAAC,KAAK,SAAS;AAAA,EACxE,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,SAAS,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AAAA,EACnC,SAAS,CAAC,gBAAgB,IAAI,EAAE,YAAY,CAAC;AAAA,EAC7C,eAAe,CAAC,eAAe,IAAI,EAAE,WAAW,CAAC;AAAA,EACjD,YAAY,CAAC,cAAc,IAAI,EAAE,UAAU,CAAC;AAAA,EAC5C,UAAU,CAAC,UAAU,IAAI,EAAE,MAAM,CAAC;AAAA,EAClC,eAAe,CAAC,eAAe,IAAI,EAAE,WAAW,CAAC;AAAA,EACjD,UAAU,MAAM;AAAA,IACf,QAAQ,gBAAgB,IAAI;AAAA,IAC5B,MAAM,eAAe,MAAM,QAAQ,WAAW;AAAA,IAC9C,IAAI,eAAe,MAAM,SAAS,GAAG;AAAA,MACpC,IAAI,EAAE,aAAa,MAAM,eAAe,GAAG,CAAC;AAAA,IAC7C;AAAA;AAAA,EAED,UAAU,MAAM;AAAA,IACf,QAAQ,gBAAgB,IAAI;AAAA,IAC5B,MAAM,eAAe,MAAM,QAAQ,WAAW;AAAA,IAC9C,IAAI,eAAe,GAAG;AAAA,MACrB,IAAI,EAAE,aAAa,MAAM,eAAe,GAAG,CAAC;AAAA,IAC7C;AAAA;AAAA,EAED,OAAO,MACN,IAAI;AAAA,IACH,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,OAAO;AAAA,EACR,CAAC;AACH,EAAE;;;AD7EF,IAAM,aAAa,OAAO,WAAW,eAAe,OAAO,SAAS,OAAO;AAEpE,SAAS,aAAa,GAAG;AAAA,EAC/B,MAAM,gBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa;AAAA,EAC/D,MAAM,UAAU,mBAAmB,CAAC,MAAM,EAAE,OAAO;AAAA,EACnD,MAAM,aAAa,mBAAmB,CAAC,MAAM,EAAE,UAAU;AAAA,EACzD,MAAM,WAAW,mBAAmB,CAAC,MAAM,EAAE,QAAQ;AAAA,EACrD,MAAM,aAAa,mBAAmB,CAAC,MAAM,EAAE,UAAU;AAAA,EACzD,MAAM,SAAS,mBAAmB,CAAC,MAAM,EAAE,MAAM;AAAA,EACjD,MAAM,cAAc,iBAAe;AAAA,EAEnC,OAAO,aAAa,kBAAkB,UAAS,KAAK;AAAA,EACpD,OAAO,cAAc,mBAAmB,UAAS,KAAK;AAAA,EACtD,MAAM,kBAAkB,QAA8C,IAAI;AAAA,EAC1E,MAAM,uBAAuB,QAAoB,IAAI,GAAK;AAAA,EAE1D,MAAM,kBAAkB,aAAY,YAAY;AAAA,IAC/C,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,UAAU,cAAc;AAAA,MAC7C,cAAc,MAAM;AAAA,MACpB,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAAA,MACtD,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAAA,MACtD,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACb,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU;AAAA,MACrD,SAAS,OAAO;AAAA,MAChB,OAAO;AAAA,cACN;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAEf,CAAC,eAAe,YAAY,UAAU,WAAW,CAAC;AAAA,EAErD,MAAM,kBAAkB,aAAY,YAAY;AAAA,IAC/C,MAAM,SAAS,MAAM,gBAAgB;AAAA,IACrC,IAAI,QAAQ;AAAA,MACX,MAAM,iBAAiB,OAAO,OAAO,OAAO,SAAS,EAAE,KACtD,CAAC,MAAM,EAAE,UACV;AAAA,MACA,MAAM,kBACL,CAAC,OAAO,sBACR,CAAC,kBACD,CAAC,OAAO,WAAW;AAAA,MACpB,IAAI,iBAAiB;AAAA,QACpB,QAAQ,IAAI;AAAA,MACb;AAAA,IACD;AAAA,IACA,eAAe,IAAI;AAAA,KACjB,CAAC,iBAAiB,OAAO,CAAC;AAAA,EAE7B,MAAM,cAAc,aAAY,YAAY;AAAA,IAC3C,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,UAAU,sBAAsB;AAAA,MACrD,MAAM,gBAAgB;AAAA,MACtB,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACb,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU;AAAA,MACrD,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,cACL;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAEf,CAAC,iBAAiB,YAAY,QAAQ,CAAC;AAAA,EAE1C,MAAM,eAAe,aACpB,OAAO,eAAuB;AAAA,IAC7B,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,UAAU,uBAAuB,UAAU;AAAA,MAChE,MAAM,gBAAgB;AAAA,MACtB,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACb,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU;AAAA,MACrD,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,cACL;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAGlB,CAAC,iBAAiB,YAAY,QAAQ,CACvC;AAAA,EAEA,MAAM,cAAc,aACnB,OAAO,UAAkB,WAAmB;AAAA,IAC3C,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,UAAU,YAAY,UAAU,MAAM;AAAA,MAC3D,MAAM,gBAAgB;AAAA,MACtB,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACb,MAAM,UACL,eAAe,QAAQ,IAAI,UAAU;AAAA,MACtC,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,cACL;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAGlB,CAAC,iBAAiB,YAAY,QAAQ,CACvC;AAAA,EAEA,MAAM,oBAAoB,aACzB,OAAO,SAcD;AAAA,IACL,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,UAAU,uBAAuB,KAAK,IAAI;AAAA,QAC9D,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO,KAAK;AAAA,QACZ,SAAS,KAAK;AAAA,WACV,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC;AAAA,QAC7C,eAAe,KAAK;AAAA,QACpB,QAAQ,KAAK;AAAA,QACb,eAAe,KAAK;AAAA,MACrB,CAAC;AAAA,MACD,MAAM,gBAAgB;AAAA,MACtB,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACb,MAAM,UACL,eAAe,QAAQ,IAAI,UAAU;AAAA,MACtC,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,cACL;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAGlB,CAAC,iBAAiB,YAAY,QAAQ,CACvC;AAAA,EAEA,MAAM,iBAAiB,aACtB,OAAO,aAAqB;AAAA,IAC3B,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,mBACL,mBAAmB,SAAS,EAAE,YAAY,UAAU,WAAW;AAAA,MAChE,MAAM,SAAS,mBACZ,MAAM,UAAU,uBAAuB,QAAQ,IAC/C,MAAM,UAAU,eAAe,QAAQ;AAAA,MAC1C,MAAM,gBAAgB;AAAA,MACtB,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACb,MAAM,UACL,eAAe,QAAQ,IAAI,UAAU;AAAA,MACtC,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,cACL;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAGlB,CAAC,iBAAiB,YAAY,QAAQ,CACvC;AAAA,EAEA,MAAM,qBAAqB,aAAY,YAAY;AAAA,IAClD,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,UAAU,mBAAmB;AAAA,MACnC,MAAM,gBAAgB;AAAA,MACtB,QAAQ,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACb,MAAM,UACL,eAAe,QAAQ,IAAI,UAAU;AAAA,MACtC,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,cACL;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAEf,CAAC,iBAAiB,YAAY,UAAU,OAAO,CAAC;AAAA,EAEnD,MAAM,8BAA8B,aAAY,MAAM;AAAA,IACrD,MAAM,SAAS,mBAAmB,SAAS,EAAE;AAAA,IAC7C,IAAI,QAAQ;AAAA,MACX,qBAAqB,UAAU,IAAI,IAClC,OAAO,QAAQ,OAAO,SAAS,EAC7B,OAAO,IAAI,OAAO,EAAE,UAAU,EAC9B,IAAI,EAAE,QAAQ,EAAE,CACnB;AAAA,IACD;AAAA,KACE,CAAC,CAAC;AAAA,EAEL,MAAM,aAAa,aAClB,CAAC,UAAkB,SAAkB;AAAA,IACpC,MAAM,MAAM,UAAU,iBAAiB,UAAU,IAAI;AAAA,IACrD,IAAI,gBAAgB,GAAG,GAAG;AAAA,MACzB,4BAA4B;AAAA,MAC5B,gBAAgB,IAAI;AAAA,MACpB,OAAO;AAAA,IACR;AAAA,IACA,IAAI,YAAY;AAAA,MACf,4BAA4B;AAAA,MAC5B,OAAO,OAAO,YAAY,EAAE,MAAM,iBAAiB,IAAI,GAAG,GAAG;AAAA,MAC7D,gBAAgB,IAAI;AAAA,MACpB,OAAO;AAAA,IACR;AAAA,IACA,MAAM,QAAQ;AAAA,IACd,MAAM,SAAS;AAAA,IACf,MAAM,OAAO,OAAO,WAAW,OAAO,aAAa,SAAS;AAAA,IAC5D,MAAM,MAAM,OAAO,WAAW,OAAO,cAAc,UAAU;AAAA,IAC7D,MAAM,QAAQ,OAAO,KACpB,KACA,eACA,SAAS,gBAAgB,eAAe,YAAY,2BACrD;AAAA,IACA,OAAO;AAAA,KAER,CAAC,2BAA2B,CAC7B;AAAA,EAEA,MAAM,mBAAmB,aACxB,OAAO,UAAkB,SAAkB;AAAA,IAC1C,QAAQ,KAAK,cAAc,MAAM,UAAU,YAAY,UAAU,IAAI;AAAA,IAErE,IAAI,gBAAgB,GAAG,GAAG;AAAA,MACzB,4BAA4B;AAAA,MAC5B,gBAAgB,IAAI;AAAA,MACpB,OAAO,EAAE,OAAO,MAAM,UAAU;AAAA,IACjC;AAAA,IAEA,IAAI,YAAY;AAAA,MACf,4BAA4B;AAAA,MAC5B,OAAO,OAAO,YAAY,EAAE,MAAM,iBAAiB,IAAI,GAAG,GAAG;AAAA,MAC7D,gBAAgB,IAAI;AAAA,MACpB,OAAO,EAAE,OAAO,MAAM,UAAU;AAAA,IACjC;AAAA,IAEA,MAAM,QAAQ;AAAA,IACd,MAAM,SAAS;AAAA,IACf,MAAM,OAAO,OAAO,WAAW,OAAO,aAAa,SAAS;AAAA,IAC5D,MAAM,MAAM,OAAO,WAAW,OAAO,cAAc,UAAU;AAAA,IAC7D,MAAM,QAAQ,OAAO,KACpB,KACA,eACA,SAAS,gBAAgB,eAAe,YAAY,2BACrD;AAAA,IACA,OAAO,EAAE,OAAO,UAAU;AAAA,KAE3B,CAAC,2BAA2B,CAC7B;AAAA,EAEA,MAAM,oBAAoB,aACzB,OAAO,UAAkB,MAAc,cAAsB;AAAA,IAC5D,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,UAAU,kBAAkB,UAAU,MAAM,SAAS;AAAA,MAC3D,MAAM,gBAAgB;AAAA,MACtB,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACb,MAAM,UACL,eAAe,QAAQ,IAAI,UAAU;AAAA,MACtC,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,cACL;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAGlB,CAAC,iBAAiB,YAAY,QAAQ,CACvC;AAAA,EAEA,YAAU,MAAM;AAAA,IACf,IAAI,CAAC,gBAAgB,CAAC;AAAA,MAAY;AAAA,IAClC,gBAAgB,UAAU,YAAY,MAAM;AAAA,MAC3C,gBAAgB;AAAA,OACd,IAAI;AAAA,IACP,MAAM,UAAU,WAAW,MAAM;AAAA,MAChC,gBAAgB,KAAK;AAAA,OACnB,MAAM;AAAA,IACT,OAAO,MAAM;AAAA,MACZ,cAAc,gBAAgB,OAAO;AAAA,MACrC,aAAa,OAAO;AAAA;AAAA,KAEnB,CAAC,cAAc,eAAe,CAAC;AAAA,EAElC,YAAU,MAAM;AAAA,IACf,IAAI,CAAC,gBAAgB,CAAC;AAAA,MAAY;AAAA,IAClC,MAAM,oBAAoB,OAAO,QAAQ,WAAW,SAAS,EAAE,OAC9D,IAAI,OAAO,EAAE,UACd;AAAA,IACA,MAAM,iBAAiB,kBAAkB,KACxC,EAAE,QAAQ,CAAC,qBAAqB,QAAQ,IAAI,EAAE,CAC/C;AAAA,IACA,IAAI,gBAAgB;AAAA,MACnB,gBAAgB,KAAK;AAAA,IACtB;AAAA,KACE,CAAC,YAAY,YAAY,CAAC;AAAA,EAE7B,YAAU,MAAM;AAAA,IACf,MAAM,qBAAqB,CAAC,UAAwB;AAAA,MACnD,IAAI,MAAM,MAAM,SAAS,iBAAiB;AAAA,QACzC,gBAAgB;AAAA,MACjB;AAAA;AAAA,IAGD,OAAO,iBAAiB,WAAW,kBAAkB;AAAA,IACrD,OAAO,MAAM,OAAO,oBAAoB,WAAW,kBAAkB;AAAA,KACnE,CAAC,eAAe,CAAC;AAAA,EAEpB,MAAM,wBAAwB,aAC7B,OAAO,cAAsB;AAAA,IAC5B,MAAM,SAAS,MAAM,UAAU,sBAAsB,SAAS;AAAA,IAC9D,IAAI,OAAO,WAAW,YAAY;AAAA,MACjC,MAAM,gBAAgB;AAAA,IACvB;AAAA,IACA,OAAO;AAAA,KAER,CAAC,eAAe,CACjB;AAAA,EAEA,MAAM,uBAAuB,aAC5B,OAAO,cAAsB;AAAA,IAC5B,MAAM,SAAS,MAAM,UAAU,qBAAqB,SAAS;AAAA,IAC7D,IAAI,OAAO,WAAW,YAAY;AAAA,MACjC,MAAM,gBAAgB;AAAA,IACvB;AAAA,IACA,OAAO;AAAA,KAER,CAAC,eAAe,CACjB;AAAA,EAEA,MAAM,qBAAqB,aAC1B,OAAO,cAAsB;AAAA,IAC5B,MAAM,SAAS,MAAM,UAAU,mBAAmB,SAAS;AAAA,IAC3D,IAAI,OAAO,WAAW,YAAY;AAAA,MACjC,MAAM,gBAAgB;AAAA,IACvB;AAAA,IACA,OAAO;AAAA,KAER,CAAC,eAAe,CACjB;AAAA,EAEA,MAAM,mBAAmB,aACxB,OAAO,UAAkB;AAAA,IACxB,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,UAAU,iBAAiB,KAAK;AAAA,MACrD,MAAM,gBAAgB;AAAA,MACtB,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACb,MAAM,UACL,eAAe,QAAQ,IAAI,UAAU;AAAA,MACtC,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,cACL;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAGlB,CAAC,iBAAiB,YAAY,QAAQ,CACvC;AAAA,EAEA,MAAM,2BAA2B,aAAY,YAAY;AAAA,IACxD,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,UAAU,yBAAyB;AAAA,MACxD,MAAM,gBAAgB;AAAA,MACtB,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACb,MAAM,UACL,eAAe,QACZ,IAAI,UACJ;AAAA,MACJ,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,cACL;AAAA,MACD,WAAW,KAAK;AAAA;AAAA,KAEf,CAAC,iBAAiB,YAAY,QAAQ,CAAC;AAAA,EAE1C,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB,UAAU,sBAAsB,KAAK,SAAS;AAAA,IACrE;AAAA,IACA,wBAAwB,UAAU,uBAAuB,KAAK,SAAS;AAAA,IACvE;AAAA,IACA,qBAAqB,UAAU,oBAAoB,KAAK,SAAS;AAAA,IACjE;AAAA,IACA,uBAAuB,UAAU,sBAAsB,KAAK,SAAS;AAAA,IACrE;AAAA,IACA;AAAA,IACA,uBAAuB,UAAU,sBAAsB,KAAK,SAAS;AAAA,EACtE;AAAA;;AEraD,qBAAS,2BAAU,gCAAa;AAChC,sBAAS,4BAAW,wBAAa;AACjC;AAAA,YACC;AAAA;AAAA;AAAA,iBAGA;AAAA,gBACA;AAAA;AA2BD,SAAS,qBAAqB,CAAC,MAII;AAAA,EAClC,IAAI,KAAK,aAAa,KAAK;AAAA,IAAK,OAAO;AAAA,EACvC,IAAI,KAAK,aAAa,KAAK,WAAW;AAAA,IAAQ,OAAO;AAAA,EACrD,IAAI,KAAK,WAAW,eAAe,CAAC,KAAK;AAAA,IAAK,OAAO;AAAA,EACrD,OAAO,KAAK;AAAA;AAGb,eAAe,iBAAiB,GAAkC;AAAA,EACjE,MAAM,WAAW,MAAM,gBAAgB;AAAA,EACvC,IAAI,SAAS;AAAA,IAAO,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,EAClE,OAAO,SAAS;AAAA;AAGjB,eAAe,WAAW,GAAiC;AAAA,EAE1D,MAAM,WAAW,MAAM,eAAe;AAAA,IACrC,MAAM,CAAC;AAAA,EACR,CAAC;AAAA,EACD,IAAI,SAAS;AAAA,IAAO,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,EAClE,OAAO,SAAS;AAAA;AAGjB,eAAe,UAAU,GAItB;AAAA,EACF,MAAM,WAAW,MAAM,cAAc;AAAA,EACrC,IAAI,SAAS;AAAA,IAAO,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,EAClE,OAAO,SAAS;AAAA;AAGjB,eAAe,aAAa,GAA8B;AAAA,EACzD,MAAM,WAAW,MAAM,YAAY;AAAA,EACnC,IAAI,SAAS;AAAA,IAAO,MAAM,IAAI,MAAM,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,EAClE,OAAO,SAAS;AAAA;AAGV,SAAS,eAAe,GAAG;AAAA,EACjC,MAAM,YAAY,eAAe,CAAC,MAAM,EAAE,SAAS;AAAA,EACnD,MAAM,SAAS,eAAe,CAAC,MAAM,EAAE,MAAM;AAAA,EAC7C,MAAM,WAAW,eAAe,CAAC,MAAM,EAAE,QAAQ;AAAA,EAEjD,MAAM,QAAQ,WAA+B;AAAA,IAC5C,UAAU,CAAC,UAAU,QAAQ;AAAA,IAC7B,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,EACjB,CAAC;AAAA,EAED,YAAU,MAAM;AAAA,IACf,IAAI,MAAM,MAAM;AAAA,MACf,UAAU,sBAAsB,MAAM,IAAI,CAAC;AAAA,MAC3C,OAAO,MAAM,KAAK,GAAG;AAAA,MACrB,SAAS,MAAM,KAAK,KAAK;AAAA,IAC1B;AAAA,KACE,CAAC,MAAM,MAAM,WAAW,QAAQ,QAAQ,CAAC;AAAA,EAE5C,OAAO;AAAA;AAGD,SAAS,cAAc,GAAG;AAAA,EAChC,MAAM,cAAc,iBAAe;AAAA,EACnC,MAAM,YAAY,eAAe,CAAC,MAAM,EAAE,SAAS;AAAA,EACnD,MAAM,SAAS,eAAe,CAAC,MAAM,EAAE,MAAM;AAAA,EAC7C,MAAM,WAAW,eAAe,CAAC,MAAM,EAAE,QAAQ;AAAA,EACjD,MAAM,cAAc,eAAe,CAAC,MAAM,EAAE,WAAW;AAAA,EAEvD,OAAO,aAA8C;AAAA,IACpD,YAAY,MAAM,YAAY;AAAA,IAC9B,UAAU,MAAM;AAAA,MACf,UAAU,UAAU;AAAA,MACpB,YAAY,eAAe;AAAA,MAC3B,SAAS,IAAI;AAAA;AAAA,IAEd,WAAW,CAAC,SAAS;AAAA,MACpB,IAAI,KAAK,IAAI;AAAA,QACZ,IAAI,KAAK,KAAK;AAAA,UACb,UAAU,WAAW;AAAA,UACrB,OAAO,KAAK,GAAG;AAAA,QAChB;AAAA,QACA,YAAY,IAAI;AAAA,MACjB,EAAO;AAAA,QACN,UAAU,OAAO;AAAA,QACjB,SAAS,KAAK,SAAS,wBAAwB;AAAA,QAC/C,YAAY,IAAI;AAAA;AAAA,MAEjB,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAAA;AAAA,IAEvD,SAAS,CAAC,UAAU;AAAA,MACnB,UAAU,OAAO;AAAA,MACjB,SAAS,MAAM,OAAO;AAAA,MACtB,YAAY,IAAI;AAAA;AAAA,EAElB,CAAC;AAAA;AAGK,SAAS,aAAa,GAAG;AAAA,EAC/B,MAAM,cAAc,iBAAe;AAAA,EACnC,MAAM,QAAQ,eAAe,CAAC,MAAM,EAAE,KAAK;AAAA,EAE3C,OAAO,aAAY;AAAA,IAClB,YAAY;AAAA,IACZ,WAAW,MAAM;AAAA,MAChB,MAAM;AAAA,MACN,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAAA;AAAA,EAExD,CAAC;AAAA;AAGK,SAAS,WAAW,GAAG;AAAA,EAC7B,MAAM,MAAM,eAAe,CAAC,MAAM,EAAE,GAAG;AAAA,EACvC,MAAM,YAAY,eAAe,CAAC,MAAM,EAAE,SAAS;AAAA,EAEnD,MAAM,QAAQ,WAA2B;AAAA,IACxC,UAAU,CAAC,UAAU,MAAM,GAAG;AAAA,IAC9B,SAAS;AAAA,IACT,SAAS,CAAC,CAAC;AAAA,EACZ,CAAC;AAAA,EAED,YAAU,MAAM;AAAA,IACf,IAAI,MAAM,MAAM,MAAM,MAAM,KAAK,QAAQ;AAAA,MACxC,UAAU,MAAM,KAAK,MAAM;AAAA,IAC5B;AAAA,KACE,CAAC,MAAM,MAAM,SAAS,CAAC;AAAA,EAE1B,OAAO;AAAA;AAGD,SAAS,eAAe,GAAG;AAAA,EACjC,MAAM,YAAY,eAAe,CAAC,MAAM,EAAE,SAAS;AAAA,EACnD,MAAM,SAAS,eAAe,CAAC,MAAM,EAAE,MAAM;AAAA,EAC7C,MAAM,WAAW,eAAe,CAAC,MAAM,EAAE,QAAQ;AAAA,EACjD,MAAM,cAAc,eAAe,CAAC,MAAM,EAAE,WAAW;AAAA,EACvD,MAAM,aAAa,eAAe,CAAC,MAAM,EAAE,UAAU;AAAA,EACrD,MAAM,iBAAiB,QAA2B,IAAI;AAAA,EAEtD,MAAM,UAAU,aAAY,MAAM;AAAA,IACjC,IAAI,eAAe,SAAS;AAAA,MAC3B,eAAe,QAAQ,MAAM;AAAA,IAC9B;AAAA,IAEA,MAAM,KAAK,IAAI,YACd,QAAO,SAAS,EAAE,SAAS,cAAc,KAAK,oBAAoB,CAAC,CACpE;AAAA,IACA,eAAe,UAAU;AAAA,IAEzB,GAAG,YAAY,CAAC,UAAU;AAAA,MACzB,IAAI;AAAA,QACH,MAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAAA,QAClC,IAAI,KAAK,SAAS,UAAU;AAAA,UAC3B,UAAU,sBAAsB,IAAI,CAAC;AAAA,UACrC,OAAO,KAAK,GAAG;AAAA,UACf,SAAS,KAAK,KAAK;AAAA,UACnB,YAAY,KAAK,QAAQ;AAAA,QAC1B;AAAA,QACC,MAAM;AAAA;AAAA,IAKT,GAAG,UAAU,MAAM;AAAA,MAClB,GAAG,MAAM;AAAA,MACT,eAAe,UAAU;AAAA;AAAA,IAG1B,OAAO,MAAM;AAAA,MACZ,GAAG,MAAM;AAAA,MACT,eAAe,UAAU;AAAA;AAAA,KAExB,CAAC,WAAW,QAAQ,UAAU,WAAW,CAAC;AAAA,EAE7C,YAAU,MAAM;AAAA,IACf,IAAI,YAAY;AAAA,MACf,MAAM,UAAU,QAAQ;AAAA,MACxB,OAAO;AAAA,IACR;AAAA,IACA,OAAO,MAAM;AAAA,MACZ,IAAI,eAAe,SAAS;AAAA,QAC3B,eAAe,QAAQ,MAAM;AAAA,QAC7B,eAAe,UAAU;AAAA,MAC1B;AAAA;AAAA,KAEC,CAAC,YAAY,OAAO,CAAC;AAAA,EAExB,OAAO,EAAE,QAAQ;AAAA;;AC/NlB,sBAAS,4BAAW,yBAAa;AAIjC,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AAExB,IAAM,WAAW,IAAI;AAEd,SAAS,gBAAgB,CAC/B,UACA,UACC;AAAA,EACD,MAAM,WAAW,cAAc,CAAC,MAAM,EAAE,QAAQ;AAAA,EAChD,MAAM,aAAa,cAAc,CAAC,MAAM,EAAE,UAAU;AAAA,EACpD,MAAM,iBAAiB,cAAc,CAAC,MAAM,EAAE,cAAc;AAAA,EAC5D,MAAM,cAAc,cAAc,CAAC,MAAM,EAAE,WAAW;AAAA,EACtD,MAAM,gBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa;AAAA,EAC1D,MAAM,QAAQ,cAAc,CAAC,MAC5B,WAAW,EAAE,MAAM,YAAY,SAChC;AAAA,EAEA,MAAM,kBACL,aAAa,YACZ,aAAa,eAAe,aAAa,YAAY,aAAa;AAAA,EAEpE,MAAM,aAAa,cAClB,OAAO,QAAQ,UAAU;AAAA,IACxB,IAAI,CAAC,YAAY,CAAC;AAAA,MAAiB;AAAA,IACnC,IAAI,SAAS,IAAI,QAAQ;AAAA,MAAG;AAAA,IAE5B,MAAM,OAAO,cAAc,SAAS,EAAE,YAAY,aAAa;AAAA,IAC/D,IAAI,CAAC,SAAS,QAAQ,KAAK,IAAI,IAAI,OAAO;AAAA,MAAiB;AAAA,IAE3D,SAAS,IAAI,QAAQ;AAAA,IACrB,WAAW,UAAU,IAAI;AAAA,IACzB,IAAI;AAAA,MACH,MAAM,OAAO,MAAM,UAAU,iBAAiB,QAAQ;AAAA,MACtD,SAAS,UAAU,IAAI;AAAA,MACvB,eAAe,UAAU,KAAK,IAAI,CAAC;AAAA,MAClC,MAAM,WACN;AAAA,MACD,WAAW,UAAU,KAAK;AAAA,MAC1B,SAAS,OAAO,QAAQ;AAAA;AAAA,KAG1B,CAAC,UAAU,iBAAiB,UAAU,YAAY,cAAc,CACjE;AAAA,EAEA,MAAM,WAAW,QAAO,UAAU;AAAA,EAClC,SAAS,UAAU;AAAA,EAEnB,YAAU,MAAM;AAAA,IACf,IAAI,CAAC,YAAY,CAAC;AAAA,MAAiB;AAAA,IAEnC,SAAS,QAAQ;AAAA,KACf,CAAC,iBAAiB,QAAQ,CAAC;AAAA,EAE9B,YAAU,MAAM;AAAA,IACf,IACC,CAAC,YACD,CAAC,mBACD,CAAC,eACD,kBAAkB,UACjB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,SAAS,QAAQ,IAAI;AAAA,IAErB,MAAM,WAAW,YAAY,MAAM,SAAS,QAAQ,GAAG,aAAa;AAAA,IACpE,OAAO,MAAM,cAAc,QAAQ;AAAA,KACjC,CAAC,aAAa,iBAAiB,eAAe,QAAQ,CAAC;AAAA,EAE1D,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;;AC9ED,qBAAS;AAGF,SAAS,WAAW,CAAC,SAAiB,UAAU,MAAM;AAAA,EAC5D,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,SAAS,QAAQ,OAAO;AAAA,IACnC,SAAS,MAAM,UAAU,YAAY,OAAO;AAAA,IAC5C;AAAA,IACA,WAAW;AAAA,IACX,OAAO;AAAA,EACR,CAAC;AAAA;AAGK,SAAS,cAAc,CAAC,UAAyB;AAAA,EACvD,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,SAAS,QAAQ,QAAQ;AAAA,IACpC,SAAS,MAAO,WAAW,UAAU,gBAAgB,QAAQ,IAAI;AAAA,IACjE,SAAS,CAAC,CAAC;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,EACR,CAAC;AAAA;AAGK,SAAS,kBAAkB,CACjC,MACA,SAAS,OACT,UAAU,OACT;AAAA,EACD,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,OAAO,QAAQ,YAAY,MAAM,MAAM;AAAA,IAClD,SAAS,MAAO,OAAO,UAAU,mBAAmB,MAAM,MAAM,IAAI;AAAA,IACpE,SAAS,WAAW,CAAC,CAAC;AAAA,IACtB,OAAO;AAAA,IACP,iBAAiB;AAAA,EAClB,CAAC;AAAA;;AClCF,qBAAS,2BAAU,gCAAa;AAEhC,sBAAS,uBAAW,wBAAQ;AAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBO,SAAS,aAAa,GAAG;AAAA,EAC/B,MAAM,aAAa,YAAY,CAAC,MAAM,EAAE,UAAU;AAAA,EAElD,MAAM,QAAQ,WAAS;AAAA,IACtB,UAAU,CAAC,OAAO,SAAS;AAAA,IAC3B,SAAS,YAAY;AAAA,MACpB,QAAQ,SAAS,MAAM,eAAe;AAAA,MACtC,OAAO;AAAA;AAAA,IAER,iBAAiB;AAAA,EAClB,CAAC;AAAA,EAED,YAAU,MAAM;AAAA,IACf,IAAI,MAAM,MAAM,SAAS;AAAA,MACxB,WAAW,MAAM,KAAK,OAAO;AAAA,IAC9B;AAAA,KACE,CAAC,MAAM,MAAM,UAAU,CAAC;AAAA,EAE3B,OAAO;AAAA;AAGD,SAAS,iBAAiB,GAAG;AAAA,EACnC,MAAM,cAAc,iBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,OAAO,SAAiB;AAAA,MACnC,QAAQ,MAAM,UAAU,MAAM,eAAe;AAAA,QAC5C,MAAM,EAAE,KAAK;AAAA,MACd,CAAC;AAAA,MACD,IAAI;AAAA,QAAO,MAAM,IAAI,MAAM,wBAAwB;AAAA,MACnD,MAAM,SAAS;AAAA,MAaf,IAAI,CAAC,OAAO;AAAA,QAAI,MAAM,IAAI,MAAM,OAAO,SAAS,wBAAwB;AAAA,MACxE,OAAO;AAAA;AAAA,IAER,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA;AAAA,EAEhE,CAAC;AAAA;AAGK,SAAS,gBAAgB,GAAG;AAAA,EAClC,MAAM,cAAc,iBAAe;AAAA,EACnC,MAAM,aAAa,YAAY,CAAC,MAAM,EAAE,UAAU;AAAA,EAElD,OAAO,aAAY;AAAA,IAClB,YAAY,OAAO,SAAiB;AAAA,MACnC,WAAW,MAAM,IAAI;AAAA,MACrB,QAAQ,MAAM,UAAU,MAAM,cAAc;AAAA,QAC3C,MAAM,EAAE,KAAK;AAAA,MACd,CAAC;AAAA,MACD,IAAI;AAAA,QAAO,MAAM,IAAI,MAAM,uBAAuB;AAAA,MAClD,MAAM,SAAS;AAAA,MACf,IAAI,CAAC,OAAO;AAAA,QAAI,MAAM,IAAI,MAAM,OAAO,SAAS,uBAAuB;AAAA,MACvE,OAAO;AAAA;AAAA,IAER,WAAW,CAAC,OAAO,QAAQ,SAAS;AAAA,MACnC,WAAW,MAAM,KAAK;AAAA,MACtB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA;AAAA,EAEhE,CAAC;AAAA;AAeK,SAAS,eAAe,GAAG;AAAA,EACjC,MAAM,cAAc,iBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,OAAO,WAA+B;AAAA,MACjD,QAAQ,MAAM,UAAU,MAAM,aAAa;AAAA,QAC1C,MAAM;AAAA,MACP,CAAC;AAAA,MACD,IAAI;AAAA,QAAO,MAAM,IAAI,MAAM,0BAA0B;AAAA,MACrD,MAAM,SAAS;AAAA,MACf,IAAI,CAAC,OAAO;AAAA,QACX,MAAM,IAAI,MAAM,OAAO,SAAS,0BAA0B;AAAA,MAC3D,OAAO;AAAA;AAAA,IAER,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA;AAAA,EAEhE,CAAC;AAAA;AAGK,SAAS,kBAAkB,GAAG;AAAA,EACpC,MAAM,cAAc,iBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,OAAO,SAAiB;AAAA,MACnC,QAAQ,MAAM,UAAU,MAAM,gBAAgB;AAAA,QAC7C,MAAM,EAAE,KAAK;AAAA,MACd,CAAC;AAAA,MACD,IAAI;AAAA,QAAO,MAAM,IAAI,MAAM,6BAA6B;AAAA,MACxD,MAAM,SAAS;AAAA,MACf,IAAI,CAAC,OAAO;AAAA,QACX,MAAM,IAAI,MAAM,OAAO,SAAS,6BAA6B;AAAA,MAC9D,OAAO;AAAA;AAAA,IAER,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA;AAAA,EAEhE,CAAC;AAAA;AAGK,SAAS,wBAAwB,GAAG;AAAA,EAC1C,MAAM,cAAc,iBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,OAAO,SAAiB;AAAA,MACnC,QAAQ,MAAM,UAAU,MAAM,gBAAgB;AAAA,QAC7C,MAAM,EAAE,KAAK;AAAA,MACd,CAAC;AAAA,MACD,IAAI;AAAA,QAAO,MAAM,IAAI,MAAM,yBAAyB;AAAA,MACpD,MAAM,SAAS;AAAA,MAYf,IAAI,CAAC,OAAO;AAAA,QACX,MAAM,IAAI,MAAM,OAAO,SAAS,yBAAyB;AAAA,MAC1D,OAAO;AAAA;AAAA,IAER,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA;AAAA,EAEhE,CAAC;AAAA;AAGK,SAAS,gBAAgB,GAAG;AAAA,EAClC,MAAM,cAAc,iBAAe;AAAA,EAEnC,OAAO,aAAY;AAAA,IAClB,YAAY,OAAO,SAAiB;AAAA,MACnC,QAAQ,MAAM,UAAU,MAAM,cAAc;AAAA,QAC3C,MAAM,EAAE,KAAK;AAAA,MACd,CAAC;AAAA,MACD,IAAI;AAAA,QAAO,MAAM,IAAI,MAAM,uBAAuB;AAAA,MAClD,MAAM,SAAS;AAAA,MACf,IAAI,CAAC,OAAO;AAAA,QAAI,MAAM,IAAI,MAAM,OAAO,SAAS,uBAAuB;AAAA,MACvE,OAAO;AAAA;AAAA,IAER,WAAW,MAAM;AAAA,MAChB,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA;AAAA,EAEhE,CAAC;AAAA;AAGK,SAAS,gBAAgB,CAAC,MAAqB;AAAA,EACrD,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,OAAO,QAAQ,IAAI;AAAA,IAC9B,SAAS,YAAY;AAAA,MACpB,IAAI,CAAC;AAAA,QAAM,OAAO,EAAE,eAAe,MAAM;AAAA,MACzC,QAAQ,SAAS,MAAM,iBAAiB;AAAA,QACvC,MAAM,EAAE,KAAK;AAAA,MACd,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,IAKR,SAAS,CAAC,CAAC;AAAA,IACX,iBAAiB;AAAA,EAClB,CAAC;AAAA;AAGK,SAAS,sBAAsB,GAAG;AAAA,EACxC,MAAM,gBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa;AAAA,EACxD,MAAM,mBAAmB,YAAY,CAAC,MAAM,EAAE,gBAAgB;AAAA,EAC9D,MAAM,aAAa,YAAY,CAAC,MAAM,EAAE,UAAU;AAAA,EAClD,MAAM,cAAc,iBAAe;AAAA,EACnC,MAAM,WAAW,QAA8C,IAAI;AAAA,EAEnE,MAAM,cAAc,cAAY,MAAM;AAAA,IACrC,IAAI,SAAS,SAAS;AAAA,MACrB,cAAc,SAAS,OAAO;AAAA,MAC9B,SAAS,UAAU;AAAA,IACpB;AAAA,KACE,CAAC,CAAC;AAAA,EAEL,YAAU,MAAM;AAAA,IACf,IAAI,CAAC,eAAe;AAAA,MACnB,YAAY;AAAA,MACZ;AAAA,IACD;AAAA,IAEA,QAAQ,WAAW,YAAY,aAAa;AAAA,IAC5C,MAAM,UAAU,YAAY,KAAK,OAAO;AAAA,IAExC,SAAS,UAAU,YAAY,YAAY;AAAA,MAC1C,IAAI;AAAA,QACH,QAAQ,SAAS,MAAM,gBAAgB;AAAA,UACtC,MAAM,EAAE,MAAM,WAAW;AAAA,UACzB,MAAM,EAAE,UAAU;AAAA,QACnB,CAAC;AAAA,QAED,MAAM,SAAS;AAAA,QAMf,IAAI,QAAQ,WAAW,YAAY;AAAA,UAClC,YAAY;AAAA,UACZ,iBAAiB,IAAI;AAAA,UACrB,WAAW,YAAY,KAAK;AAAA,UAC5B,YAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA,QAC/D,EAAO,SAAI,QAAQ,WAAW,SAAS;AAAA,UACtC,YAAY;AAAA,UACZ,iBAAiB,IAAI;AAAA,UACrB,WAAW,YAAY,KAAK;AAAA,QAC7B;AAAA,QACC,MAAM;AAAA,QACP,YAAY;AAAA,QACZ,iBAAiB,IAAI;AAAA,QACrB,WAAW,YAAY,KAAK;AAAA;AAAA,OAE3B,MAAM;AAAA,IAET,OAAO;AAAA,KACL,CAAC,eAAe,kBAAkB,YAAY,aAAa,WAAW,CAAC;AAAA,EAE1E,OAAO;AAAA;;AC7QR,wBAAS,2BAAa,8BAAU;AAEhC,sBAAS;AAOF,SAAS,SAAS,CAAC,UAA4B,CAAC,GAAG;AAAA,EACzD,MAAM,UAAU,QAAQ,WAAW;AAAA,EACnC,MAAM,kBAAkB,eAAe,CAAC,MAAM,EAAE,eAAe;AAAA,EAE/D,MAAM,QAAQ,WAAS;AAAA,IACtB,UAAU,CAAC,QAAQ;AAAA,IACnB,SAAS,YAAY;AAAA,MACpB,OAAO,UAAU,gBAAgB;AAAA;AAAA,IAElC;AAAA,IACA,iBAAiB;AAAA,EAClB,CAAC;AAAA,EAED,YAAU,MAAM;AAAA,IACf,IAAI,MAAM,MAAM,OAAO;AAAA,MACtB,gBAAgB;AAAA,QACf,QAAQ,MAAM,KAAK;AAAA,QACnB,eAAe,MAAM,KAAK;AAAA,QAC1B,YAAY,MAAM,KAAK;AAAA,QACvB,cAAc,MAAM,KAAK;AAAA,MAC1B,CAAC;AAAA,IACF;AAAA,KACE,CAAC,MAAM,MAAM,eAAe,CAAC;AAAA,EAEhC,OAAO;AAAA;AAGD,SAAS,qBAAqB,GAAG;AAAA,EACvC,MAAM,cAAc,iBAAe;AAAA,EACnC,MAAM,kBAAkB,eAAe,CAAC,MAAM,EAAE,eAAe;AAAA,EAE/D,OAAO,cAAY;AAAA,IAClB,YAAY,CAAC,UAIP,UAAU,mBAAmB,KAAK;AAAA,IACxC,WAAW,CAAC,SAAS;AAAA,MACpB,gBAAgB;AAAA,QACf,QAAQ,KAAK;AAAA,QACb,eAAe,KAAK;AAAA,QACpB,YAAY,KAAK;AAAA,QACjB,cAAc,KAAK;AAAA,MACpB,CAAC;AAAA,MACD,YAAY,aAAa,CAAC,QAAQ,GAAG,IAAI;AAAA;AAAA,EAE3C,CAAC;AAAA;AAGK,SAAS,cAAc,CAAC,MAAqB;AAAA,EACnD,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,UAAU,IAAI;AAAA,IACzB,SAAS,YAAY;AAAA,MACpB,IAAI,CAAC;AAAA,QAAM,OAAO;AAAA,MAClB,OAAO,UAAU,SAAS,IAAI;AAAA;AAAA,IAE/B,SAAS,CAAC,CAAC;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,aAAa,CAAC,MAAqB;AAAA,EAClD,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,UAAU,MAAM,OAAO;AAAA,IAClC,SAAS,YAAY;AAAA,MACpB,IAAI,CAAC;AAAA,QAAM,OAAO;AAAA,MAClB,OAAO,UAAU,cAAc,IAAI;AAAA;AAAA,IAEpC,SAAS,CAAC,CAAC;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,mBAAmB,CAClC,MACA,UACC;AAAA,EACD,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,UAAU,MAAM,SAAS,QAAQ;AAAA,IAC5C,SAAS,YAAY;AAAA,MACpB,IAAI,CAAC,QAAQ,CAAC;AAAA,QAAU,OAAO;AAAA,MAC/B,OAAO,UAAU,oBAAoB,MAAM,QAAQ;AAAA;AAAA,IAEpD,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;AAAA,EACtB,CAAC;AAAA;;AC3FF,sBAAS;AACT,wBAAS,2BAAa,8BAAU;;;ACDhC,mBAAS;AAqCT,SAAS,wBAAwB,GAAG;AAAA,EACnC,YAAY,SAAS,EAAE,gBAAgB;AAAA,EACvC,qBAAqB,SAAS,EAAE,gBAAgB;AAAA,EAChD,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,EAC5C,iBAAiB,SAAS,EAAE,gBAAgB;AAAA,EAC5C,eAAe,SAAS,EAAE,gBAAgB;AAAA,EAC1C,oBAAoB,SAAS,EAAE,gBAAgB;AAAA,EAC/C,YAAY,SAAS,EAAE,gBAAgB;AAAA,EACvC,eAAe,SAAS,EAAE,gBAAgB;AAAA;AAGpC,IAAM,iBAAiB,SAAoB,CAAC,SAAS;AAAA,EAC3D,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,QAAQ,CAAC;AAAA,EACT,cAAc;AAAA,EACd,eAAe;AAAA,EACf,mBAAmB;AAAA,EAEnB,gBAAgB,CAAC,SAAS,IAAI,EAAE,aAAa,KAAK,CAAC;AAAA,EAEnD,aAAa,MAAM;AAAA,IAClB,yBAAyB;AAAA,IACzB,IAAI,EAAE,eAAe,MAAM,YAAY,MAAM,aAAa,UAAU,CAAC;AAAA;AAAA,EAGtE,cAAc,MACb,IAAI;AAAA,IACH,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,YAAY;AAAA,EACb,CAAC;AAAA,EAEF,eAAe,MAAM;AAAA,IACpB,MAAM,OAAO,eAAe,SAAS,EAAE;AAAA,IACvC,IAAI,MAAM;AAAA,MACT,eAAe,SAAS,EAAE,aAAa;AAAA,IACxC,EAAO;AAAA,MACN,eAAe,SAAS,EAAE,YAAY;AAAA;AAAA;AAAA,EAIxC,WAAW,CAAC,QAAQ,iBACnB,IAAI,CAAC,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA,eACC,MAAM,iBACN,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,aAAa,IAC9C,MAAM,gBACL,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY,GAAG,QAC/C,OAAO,IAAI,QACX;AAAA,EACJ,EAAE;AAAA,EAEH,aAAa,CAAC,UAAU,IAAI,EAAE,eAAe,MAAM,CAAC;AAAA,EAEpD,YAAY,MAAM,IAAI,EAAE,eAAe,MAAM,YAAY,WAAW,CAAC;AAAA,EAErE,oBAAoB,CAAC,UACpB,IAAI;AAAA,IACH,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACpB,CAAC;AAAA,EAEF,eAAe,CAAC,SAAS,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EAEjD,iBAAiB,MAChB,IAAI,EAAE,eAAe,MAAM,YAAY,MAAM,mBAAmB,KAAK,CAAC;AAAA,EAEvE,kBAAkB,MACjB,IAAI;AAAA,IACH,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,YAAY;AAAA,EACb,CAAC;AACH,EAAE;;;ADzGK,SAAS,eAAe,CAAC,UAA4B,CAAC,GAAG;AAAA,EAC/D,MAAM,cAAc,eAAe,CAAC,MAAM,EAAE,aAAa;AAAA,EACzD,MAAM,aAAa,eAAe,CAAC,MAAM,EAAE,iBAAiB;AAAA,EAC5D,MAAM,UAAU,QAAQ,YAAY,eAAe;AAAA,EACnD,MAAM,YAAY,eAAe,CAAC,MAAM,EAAE,SAAS;AAAA,EACnD,MAAM,gBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa;AAAA,EAC3D,MAAM,cAAc,eAAe,CAAC,MAAM,EAAE,WAAW;AAAA,EAEvD,MAAM,QAAQ,WAAS;AAAA,IACtB,UAAU,CAAC,UAAU,QAAQ;AAAA,IAC7B,SAAS,MAAM,UAAU,gBAAgB;AAAA,IACzC;AAAA,IACA,WAAW;AAAA,EACZ,CAAC;AAAA,EAED,YAAU,MAAM;AAAA,IACf,IAAI,CAAC,MAAM;AAAA,MAAM;AAAA,IACjB,UAAU,MAAM,KAAK,QAAQ,MAAM,KAAK,OAAO;AAAA,IAC/C,IAAI,CAAC,iBAAiB,MAAM,KAAK,OAAO,SAAS,GAAG;AAAA,MACnD,MAAM,eAAe,MAAM,KAAK,OAAO,KACtC,CAAC,UAAU,MAAM,SAAS,MAAM,KAAK,OACtC;AAAA,MACA,YAAY,cAAc,QAAQ,MAAM,KAAK,OAAO,GAAG,IAAI;AAAA,IAC5D;AAAA,KACE,CAAC,MAAM,MAAM,aAAa,eAAe,SAAS,CAAC;AAAA,EAEtD,OAAO;AAAA;AAGD,SAAS,QAAQ,CAAC,WAA0B;AAAA,EAClD,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,UAAU,UAAU,SAAS;AAAA,IACxC,SAAS,YAAY;AAAA,MACpB,IAAI,CAAC;AAAA,QAAW,OAAO;AAAA,MACvB,OAAO,UAAU,SAAS,SAAS;AAAA;AAAA,IAEpC,SAAS,QAAQ,SAAS;AAAA,IAC1B,WAAW;AAAA,EACZ,CAAC;AAAA;AAOK,SAAS,gBAAgB,CAAC,UAA4B,CAAC,GAAG;AAAA,EAChE,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,UAAU,QAAQ;AAAA,IAC7B,SAAS,MAAM,UAAU,gBAAgB;AAAA,IACzC,SAAS,QAAQ,WAAW;AAAA,IAC5B,WAAW;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,cAAc,CAAC,UAA4B,CAAC,GAAG;AAAA,EAC9D,MAAM,cAAc,eAAe,CAAC,MAAM,EAAE,aAAa;AAAA,EACzD,MAAM,aAAa,eAAe,CAAC,MAAM,EAAE,iBAAiB;AAAA,EAC5D,MAAM,UAAU,QAAQ,YAAY,eAAe;AAAA,EACnD,OAAO,WAAS;AAAA,IACf,UAAU,CAAC,UAAU,OAAO;AAAA,IAC5B,SAAS,MAAM,UAAU,eAAe;AAAA,IACxC;AAAA,IACA,WAAW;AAAA,EACZ,CAAC;AAAA;AAGK,SAAS,cAAc,GAAG;AAAA,EAChC,MAAM,cAAc,iBAAe;AAAA,EACnC,OAAO,cAAY;AAAA,IAClB,YAAY,GAAG,MAAM,YACpB,UAAU,YAAY,MAAM,KAAK;AAAA,IAClC,WAAW,CAAC,MAAM,cAAc;AAAA,MAC/B,YAAY,aAAa,CAAC,UAAU,UAAU,UAAU,IAAI,GAAG,IAAI;AAAA,MAC9D,YAAY,kBAAkB,EAAE,UAAU,CAAC,UAAU,QAAQ,EAAE,CAAC;AAAA,MAChE,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE7D,CAAC;AAAA;AAGK,SAAS,cAAc,GAAG;AAAA,EAChC,MAAM,cAAc,iBAAe;AAAA,EACnC,MAAM,YAAY,eAAe,CAAC,MAAM,EAAE,SAAS;AAAA,EACnD,MAAM,cAAc,eAAe,CAAC,MAAM,EAAE,WAAW;AAAA,EACvD,OAAO,cAAY;AAAA,IAClB,YAAY;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,UAIH,UAAU,YAAY,MAAM,KAAK;AAAA,IACvC,WAAW,OAAO,OAAO,cAAc;AAAA,MACtC,MAAM,YAAY,kBAAkB,EAAE,UAAU,CAAC,UAAU,QAAQ,EAAE,CAAC;AAAA,MACtE,MAAM,YAAY,MAAM,YAAY,WAAW;AAAA,QAC9C,UAAU,CAAC,UAAU,QAAQ;AAAA,QAC7B,SAAS,MAAM,UAAU,gBAAgB;AAAA,MAC1C,CAAC;AAAA,MACD,UAAU,UAAU,QAAQ,UAAU,OAAO;AAAA,MAC7C,IAAI,UAAU,SAAS,eAAe,SAAS,EAAE,eAAe;AAAA,QAC/D,MAAM,OACL,UAAU,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU,OAAO,GAAG,QAC5D,UAAU,OAAO,IAAI,QACrB;AAAA,QACD,YAAY,IAAI;AAAA,MACjB;AAAA,MACK,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE7D,CAAC;AAAA;AAGK,SAAS,kBAAkB,GAAG;AAAA,EACpC,MAAM,cAAc,iBAAe;AAAA,EACnC,OAAO,cAAY;AAAA,IAClB,YAAY,CAAC,SACZ,UAAU,eAAe,EAAE,OAAO,MAAM,OAAO,SAAS,CAAC;AAAA,IAC1D,WAAW,MAAM;AAAA,MACX,YAAY,kBAAkB,EAAE,UAAU,CAAC,UAAU,QAAQ,EAAE,CAAC;AAAA,MAChE,YAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAAA;AAAA,EAE7D,CAAC;AAAA;AAGK,SAAS,iBAAiB,CAChC,OACS;AAAA,EACT,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,OAAO,MAAM,KACZ,IAAI,IAAI;AAAA,IACP,GAAI,MAAM,WAAW,cAAc,CAAC;AAAA,IACpC,GAAI,MAAM,WAAW,YAAY,CAAC;AAAA,EACnC,CAAC,CACF,EAAE;AAAA;;AEnJH,wBAAS,4BAAa,wBAAW,oBAAS,qBAAQ;AAqB3C,SAAS,eAAe;AAAA,EAC9B;AAAA,EACA;AAAA,IAC2B,CAAC,GAAG;AAAA,EAC/B,QAAQ,MAAM,YAAW,UAAU;AAAA,EACnC,QAAQ,MAAM,cAAc,aAAa;AAAA,EACzC,QAAQ,MAAM,iBAAiB,gBAAgB,EAAE,SAAS,KAAK,CAAC;AAAA,EAChE,MAAM,UAAU,WAAW,aAAa,EAAE;AAAA,EAC1C,MAAM,gBAAgB,iBAAiB,aAAa,EAAE;AAAA,EAEtD,OAAO,OAAO,YAAY,UAAS,EAAE;AAAA,EACrC,OAAO,UAAU,eAAe,UAAS,EAAE;AAAA,EAC3C,OAAO,OAAO,YAAY,UAAS,EAAE;AAAA,EACrC,MAAM,iBAAiB,QAAO,KAAK;AAAA,EAEnC,YAAU,MAAM;AAAA,IACf,IAAI,CAAC,aAAa,CAAC;AAAA,MAAS;AAAA,IAC5B,SAAS,QAAQ,KAAK;AAAA,IACtB,YAAY,QAAQ,QAAQ;AAAA,IAC5B,SAAS,QAAQ,KAAK;AAAA,KACpB,CAAC,WAAW,OAAO,CAAC;AAAA,EAEvB,YAAU,MAAM;AAAA,IACf,IAAI,aAAa,eAAe;AAAA,MAAS;AAAA,IACzC,IAAI,CAAC,SAAQ,YAAY,CAAC,cAAc,OAAO;AAAA,MAAQ;AAAA,IACvD,eAAe,UAAU;AAAA,IACzB,MAAM,eAAe,gBAAgB,QAAO,SAAS,SAAS;AAAA,IAC9D,MAAM,gBAAgB,aAAa,OAAO,KACzC,CAAC,gBAAgB,YAAY,SAAS,YACvC;AAAA,IACA,SAAS,YAAY;AAAA,IACrB,YAAY,eAAe,YAAY,QAAO,SAAS,YAAY,EAAE;AAAA,IACrE,SAAS,eAAe,SAAS,QAAO,SAAS,SAAS,EAAE;AAAA,KAC1D,CAAC,WAAW,cAAc,QAAQ,SAAQ,YAAY,CAAC;AAAA,EAE1D,MAAM,aAAa,SAClB,QACE,cAAc,OAAO,UACnB,aAAa,OAAO,IAAI,CAAC,gBAAgB,YAAY,IAAI,IACxD,SAAQ,UAAU,CAAC,GACrB,OAAO,CAAC,SAAS,SAAS,MAAM,GACnC,CAAC,cAAc,QAAQ,SAAQ,MAAM,CACtC;AAAA,EAEA,MAAM,gBAAgB,SACrB,MAAM,YAAY,WAAW,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,GAC/D,CAAC,WAAW,UAAU,KAAK,CAC5B;AAAA,EAEA,MAAM,WAAU,cACf,OAAO,WAAiC;AAAA,IACvC,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,IAAI;AAAA,MACH,MAAM,cAAc,YAAY,MAAM;AAAA,MACrC,OAAO,OAAO;AAAA,MACf,QAAQ,MAAM,6BAA6B,KAAK;AAAA;AAAA,KAGlD,CAAC,WAAW,aAAa,CAC1B;AAAA,EAEA,MAAM,oBAAoB,cACzB,OAAO,UAAkB;AAAA,IACxB,SAAS,KAAK;AAAA,IACd,MAAM,gBAAgB,cAAc,OAAO,KAC1C,CAAC,gBAAgB,YAAY,SAAS,KACvC;AAAA,IACA,IAAI,CAAC,eAAe;AAAA,MACnB,MAAM,SAAQ,EAAE,OAAO,MAAM,CAAC;AAAA,MAC9B;AAAA,IACD;AAAA,IACA,MAAM,eACL,cAAc,YAAY,SAAQ,UAAU,YAAY;AAAA,IACzD,MAAM,YAAY,cAAc,SAAS,SAAQ,UAAU,SAAS;AAAA,IACpE,YAAY,YAAY;AAAA,IACxB,SAAS,SAAS;AAAA,IAClB,MAAM,SAAQ;AAAA,MACb,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,IACR,CAAC;AAAA,KAEF;AAAA,IACC,cAAc;AAAA,IACd,SAAQ,UAAU;AAAA,IAClB,SAAQ,UAAU;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACD,CACD;AAAA,EAEA,MAAM,uBAAuB,cAC5B,OAAO,eAAwB;AAAA,IAC9B,MAAM,kBAAkB,aAAa,SAAS,OAAO;AAAA,KAEtD,CAAC,iBAAiB,CACnB;AAAA,EAEA,MAAM,4BAA4B,cACjC,OAAO,aAAqB,aAAqB;AAAA,IAChD,YAAY,WAAW;AAAA,IACvB,SAAS,QAAQ;AAAA,IACjB,MAAM,SAAQ,EAAE,UAAU,aAAa,OAAO,SAAS,CAAC;AAAA,KAEzD,CAAC,QAAO,CACT;AAAA,EAEA,MAAM,uBAAuB,cAC5B,OAAO,gBAAwB;AAAA,IAC9B,YAAY,WAAW;AAAA,IACvB,IAAI,OAAO;AAAA,MACV,MAAM,SAAQ,EAAE,UAAU,aAAa,MAAM,CAAC;AAAA,IAC/C;AAAA,KAED,CAAC,OAAO,QAAO,CAChB;AAAA,EAEA,MAAM,oBAAoB,cACzB,OAAO,aAAqB;AAAA,IAC3B,SAAS,QAAQ;AAAA,IACjB,MAAM,SAAQ,EAAE,UAAU,OAAO,SAAS,CAAC;AAAA,KAE5C,CAAC,UAAU,QAAO,CACnB;AAAA,EAEA,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,UAAU;AAAA,IACtB,wBAAwB,eAAe;AAAA,IACvC,qBAAqB,eAAe;AAAA,IACpC,yBAAyB,eAAe;AAAA,IACxC,aAAa,eAAe;AAAA,IAC5B,kBAAkB,YAAY,WAAW;AAAA,IACzC,kBACC,YAAY,WAAW,OAAO,SAAS,UAAU,KAAK;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;;ACvKD,wBAAS,2BAAa;AAQf,SAAS,sBAAsB,GAAG;AAAA,EACxC,OAAO,cAAc,mBAAmB,UAAS,KAAK;AAAA,EACtD,OAAO,mBAAmB,wBACzB,UAA4B,IAAI;AAAA,EAEjC,MAAM,aAAa,cAAY,CAAC,WAA8B;AAAA,IAC7D,qBAAqB,MAAM;AAAA,IAC3B,gBAAgB,IAAI;AAAA,KAClB,CAAC,CAAC;AAAA,EAEL,MAAM,eAAe,cAAY,MAAM;AAAA,IACtC,gBAAgB,CAAC,SAAS,CAAC,IAAI;AAAA,KAC7B,CAAC,CAAC;AAAA,EAEL,MAAM,cAAc,cAAY,MAAM;AAAA,IACrC,gBAAgB,KAAK;AAAA,IACrB,qBAAqB,IAAI;AAAA,KACvB,CAAC,CAAC;AAAA,EAEL,MAAM,kBAAkB,cAAY,MAAM;AAAA,IACzC,WAAW,OAAO;AAAA,KAChB,CAAC,UAAU,CAAC;AAAA,EAEf,MAAM,kBAAkB,cAAY,MAAM;AAAA,IACzC,WAAW,OAAO;AAAA,KAChB,CAAC,UAAU,CAAC;AAAA,EAEf,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;;AC3CD,sBAAS,yBAAW;AAMb,SAAS,iBAAiB,CAAC,KAA4C;AAAA,EAC7E,OAAO,OAAO,YAAY,UAAS,CAAC;AAAA,EAEpC,YAAU,MAAM;AAAA,IACf,MAAM,KAAK,IAAI;AAAA,IACf,IAAI,CAAC;AAAA,MAAI;AAAA,IAET,MAAM,SAAS,MAAM,SAAS,GAAG,WAAW;AAAA,IAC5C,OAAO;AAAA,IAEP,MAAM,WAAW,IAAI,eAAe,MAAM,OAAO,CAAC;AAAA,IAClD,SAAS,QAAQ,EAAE;AAAA,IACnB,OAAO,MAAM,SAAS,WAAW;AAAA,KAC/B,CAAC,GAAG,CAAC;AAAA,EAER,OAAO;AAAA;;ACrBR,sBAAS,uBAAW,sBAAQ;AAE5B,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;AAuBrB,SAAS,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GACuB;AAAA,EACvB,OAAO,WAAW,gBAAgB,UAAS,KAAK;AAAA,EAChD,OAAO,gBAAgB,qBAAqB,UAAS,KAAK;AAAA,EAC1D,MAAM,eAAe,SAAO,KAAK;AAAA,EACjC,MAAM,iBAAiB,SAAsB,IAAI;AAAA,EACjD,MAAM,iBAAiB,SAAsB,IAAI;AAAA,EAEjD,YAAU,MAAM;AAAA,IACf,MAAM,aAAa,CAAC,YAAqB;AAAA,MACxC,aAAa,UAAU;AAAA,MACvB,aAAa,OAAO;AAAA;AAAA,IAGrB,MAAM,qBAAqB,MAAM;AAAA,MAChC,IAAI,eAAe,YAAY,MAAM;AAAA,QACpC,OAAO,aAAa,eAAe,OAAO;AAAA,QAC1C,eAAe,UAAU;AAAA,MAC1B;AAAA,MACA,IAAI,eAAe,YAAY,MAAM;AAAA,QACpC,OAAO,aAAa,eAAe,OAAO;AAAA,QAC1C,eAAe,UAAU;AAAA,MAC1B;AAAA;AAAA,IAGD,MAAM,kBAAkB,CAAC,YAAqB;AAAA,MAC7C,IAAI,aAAa,YAAY,SAAS;AAAA,QACrC,kBAAkB,KAAK;AAAA,QACvB;AAAA,MACD;AAAA,MAEA,kBAAkB,OAAO;AAAA,MACzB,MAAM,QAAQ,UAAU,sBAAsB;AAAA,MAC9C,MAAM,YAAY,UAAU,iBAAiB;AAAA,MAC7C,MAAM,cAAc,UAAU,iBAAiB;AAAA,MAE/C,IAAI,YAAY,YAAY,MAAM;AAAA,QACjC,OAAO,aAAa,YAAY,OAAO;AAAA,QACvC,YAAY,UAAU;AAAA,MACvB;AAAA,MAEA,IAAI,UAAU,YAAY;AAAA,QAAM;AAAA,MAEhC,UAAU,UAAU,OAAO,WAAW,MAAM;AAAA,QAC3C,WAAW,OAAO;AAAA,QAClB,kBAAkB,KAAK;AAAA,QACvB,UAAU,UAAU;AAAA,SAClB,KAAK;AAAA;AAAA,IAGT,IAAI,CAAC,SAAS;AAAA,MACb,mBAAmB;AAAA,MACnB,kBAAkB,KAAK;AAAA,MACvB,WAAW,KAAK;AAAA,MAChB;AAAA,IACD;AAAA,IAEA,MAAM,kBAAkB,CAAC,UAAsB;AAAA,MAC9C,MAAM,SAAS,MAAM;AAAA,MACrB,IACC,kBACA,kBAAkB,WAClB,OAAO,QAAQ,cAAc,GAC5B;AAAA,QACD,mBAAmB;AAAA,QACnB,kBAAkB,KAAK;AAAA,QACvB,WAAW,KAAK;AAAA,QAChB;AAAA,MACD;AAAA,MAEA,MAAM,eAAe,OAAO,aAAa;AAAA,MACzC,MAAM,YACL,aAAa,WAAW,cACrB,KAAK,IAAI,cAAc,WAAW,IAClC;AAAA,MACJ,MAAM,WACL,SAAS,SAAS,MAAM,UAAU,OAAO,aAAa,MAAM;AAAA,MAC7D,gBAAgB,YAAY,SAAS;AAAA;AAAA,IAEtC,MAAM,mBAAmB,MAAM;AAAA,MAC9B,mBAAmB;AAAA,MACnB,kBAAkB,KAAK;AAAA,MACvB,WAAW,KAAK;AAAA;AAAA,IAEjB,MAAM,iBAAiB,CAAC,UAAsB;AAAA,MAC7C,IAAI,CAAC,MAAM,eAAe;AAAA,QACzB,iBAAiB;AAAA,MAClB;AAAA;AAAA,IAGD,OAAO,iBAAiB,aAAa,eAAe;AAAA,IACpD,OAAO,iBAAiB,YAAY,cAAc;AAAA,IAClD,OAAO,iBAAiB,QAAQ,gBAAgB;AAAA,IAChD,SAAS,gBAAgB,iBAAiB,cAAc,gBAAgB;AAAA,IACxE,OAAO,MAAM;AAAA,MACZ,mBAAmB;AAAA,MACnB,OAAO,oBAAoB,aAAa,eAAe;AAAA,MACvD,OAAO,oBAAoB,YAAY,cAAc;AAAA,MACrD,OAAO,oBAAoB,QAAQ,gBAAgB;AAAA,MACnD,SAAS,gBAAgB,oBACxB,cACA,gBACD;AAAA;AAAA,KAEC,CAAC,SAAS,YAAY,aAAa,gBAAgB,IAAI,CAAC;AAAA,EAE3D,OAAO,EAAE,WAAW,eAAe;AAAA;;ACzIpC,wBAAS,4BAAa,uBAAW,sBAAQ;AAGzC,IAAM,qBAAqB;AAC3B,IAAM,kBAAkB;AAgDxB,SAAS,0BAA0B,GAA+B;AAAA,EACjE,IAAI,OAAO,WAAW;AAAA,IAAa,OAAO;AAAA,EAC1C,OACC,OAAO,gBACN,OACC,sBACF;AAAA;AAIF,SAAS,cAAc,CAAC,MAAsB;AAAA,EAC7C,OAAO,KAAK,MAAM,KAAK,CAAC,EAAE,IAAI,YAAY,KAAK;AAAA;AAGhD,SAAS,gBAAgB,CAAC,KAA0C;AAAA,EACnE,IAAI;AAAA,IACH,MAAM,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC5B,IAAI,CAAC,SAAS,OAAO,MAAM,SAAS;AAAA,MAAU,OAAO;AAAA,IACrD,OAAO;AAAA,IACN,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,SAAS,cAAc,CACtB,OACA,iBACA,kBACe;AAAA,EACf,IAAI,oBAAoB;AAAA,IAAkB,OAAO;AAAA,EACjD,MAAM,QAAQ,kBAAkB;AAAA,EAChC,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,EACjE,MAAM,SAAS,IAAI,aAAa,YAAY;AAAA,EAC5C,SAAS,IAAI,EAAG,IAAI,cAAc,KAAK;AAAA,IACtC,MAAM,aAAa,IAAI;AAAA,IACvB,MAAM,SAAS,KAAK,MAAM,UAAU;AAAA,IACpC,MAAM,QAAQ,KAAK,IAAI,SAAS,GAAG,MAAM,SAAS,CAAC;AAAA,IACnD,MAAM,SAAS,aAAa;AAAA,IAC5B,OAAO,KAAK,MAAM,WAAW,IAAI,UAAU,MAAM,SAAS;AAAA,EAC3D;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,YAAY,CAAC,SAAoC;AAAA,EACzD,MAAM,SAAS,IAAI,YAAY,QAAQ,SAAS,CAAC;AAAA,EACjD,MAAM,OAAO,IAAI,SAAS,MAAM;AAAA,EAChC,SAAS,IAAI,EAAG,IAAI,QAAQ,QAAQ,KAAK;AAAA,IACxC,MAAM,SAAS,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,QAAQ,EAAE,CAAC;AAAA,IACnD,KAAK,SAAS,IAAI,GAAG,SAAS,IAAI,SAAS,QAAS,SAAS,OAAQ,IAAI;AAAA,EAC1E;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,YAAY,CACpB,GACA,GAC8B;AAAA,EAC9B,MAAM,OAAO,IAAI,WAAW,EAAE,aAAa,EAAE,UAAU;AAAA,EACvD,KAAK,IAAI,GAAG,CAAC;AAAA,EACb,KAAK,IAAI,GAAG,EAAE,UAAU;AAAA,EACxB,OAAO;AAAA;AASD,SAAS,aAAa;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,IACkB,CAAC,GAAwB;AAAA,EAClD,OAAO,aAAa,kBAAkB,WAAS,KAAK;AAAA,EACpD,OAAO,gBAAgB,qBAAqB,WAAS,KAAK;AAAA,EAC1D,OAAO,UAAU,eAAe,WAA8B,IAAI;AAAA,EAClE,OAAO,OAAO,YAAY,WAAwB,IAAI;AAAA,EAEtD,MAAM,YAAY,SAA2B,IAAI;AAAA,EACjD,MAAM,kBAAkB,SAA4B,IAAI;AAAA,EACxD,MAAM,eAAe,SAAuC,IAAI;AAAA,EAChE,MAAM,YAAY,SAA0C,IAAI;AAAA,EAChE,MAAM,YAAY,SAAyB,IAAI;AAAA,EAC/C,MAAM,iBAAiB,SAAoC,IAAI,WAAW,CAAC,CAAC;AAAA,EAC5E,MAAM,cAAc,SAAO,KAAK;AAAA,EAChC,MAAM,eAAe,SAAsB,IAAI;AAAA,EAE/C,MAAM,kBAAkB,SAAO,YAAY;AAAA,EAC3C,MAAM,aAAa,SAAO,OAAO;AAAA,EACjC,MAAM,oBAAoB,SAAO,cAAc;AAAA,EAC/C,YAAU,MAAM;AAAA,IACf,gBAAgB,UAAU;AAAA,IAC1B,WAAW,UAAU;AAAA,IACrB,kBAAkB,UAAU;AAAA,KAC1B,CAAC,cAAc,SAAS,cAAc,CAAC;AAAA,EAE1C,MAAM,cACL,OAAO,WAAW,eAClB,CAAC,CAAC,UAAU,cAAc,gBAC1B,CAAC,CAAC,2BAA2B,KAC7B,OAAO,cAAc;AAAA,EAEtB,MAAM,YAAY,cAAY,CAAC,YAAoB;AAAA,IAClD,SAAS,OAAO;AAAA,IAChB,WAAW,UAAU,OAAO;AAAA,KAC1B,CAAC,CAAC;AAAA,EAEL,MAAM,qBAAqB,cAAY,MAAM;AAAA,IAC5C,IAAI,kBAAkB,SAAS;AAAA,MAC9B,kBAAkB,QAAQ;AAAA,MAC1B;AAAA,IACD;AAAA,IACA,UACC,iEACD;AAAA,KACE,CAAC,SAAS,CAAC;AAAA,EAEd,MAAM,eAAe,cAAY,MAAM;AAAA,IACtC,IAAI,aAAa,SAAS;AAAA,MACzB,aAAa,QAAQ,iBAAiB;AAAA,MACtC,aAAa,QAAQ,WAAW;AAAA,MAChC,aAAa,UAAU;AAAA,IACxB;AAAA,IACA,IAAI,UAAU,SAAS;AAAA,MACtB,UAAU,QAAQ,WAAW;AAAA,MAC7B,UAAU,UAAU;AAAA,IACrB;AAAA,IACA,IAAI,UAAU,SAAS;AAAA,MACtB,WAAW,SAAS,UAAU,QAAQ,UAAU;AAAA,QAAG,MAAM,KAAK;AAAA,MAC9D,UAAU,UAAU;AAAA,IACrB;AAAA,IACA,IAAI,gBAAgB,WAAW,gBAAgB,QAAQ,UAAU,UAAU;AAAA,MAC1E,gBAAgB,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE;AAAA,IAC/C;AAAA,IACA,gBAAgB,UAAU;AAAA,IAC1B,eAAe,UAAU,IAAI,WAAW,CAAC;AAAA,IACzC,YAAY,IAAI;AAAA,KACd,CAAC,CAAC;AAAA,EAEL,MAAM,UAAU,cAAY,MAAM;AAAA,IACjC,aAAa;AAAA,IACb,IAAI,UAAU,SAAS;AAAA,MACtB,MAAM,SAAS,UAAU;AAAA,MACzB,OAAO,SAAS;AAAA,MAChB,OAAO,YAAY;AAAA,MACnB,OAAO,UAAU;AAAA,MACjB,OAAO,UAAU;AAAA,MACjB,IAAI,OAAO,eAAe,UAAU,MAAM;AAAA,QACzC,OAAO,MAAM,MAAM,mBAAmB;AAAA,MACvC;AAAA,MACA,UAAU,UAAU;AAAA,IACrB;AAAA,IACA,aAAa,UAAU;AAAA,IACvB,YAAY,UAAU;AAAA,IACtB,eAAe,KAAK;AAAA,IACpB,kBAAkB,KAAK;AAAA,KACrB,CAAC,YAAY,CAAC;AAAA,EAEjB,MAAM,mBAAmB,cAAY,CAAC,QAAQ,UAAU;AAAA,IACvD,MAAM,SAAS,UAAU;AAAA,IACzB,IAAI,CAAC,UAAU,OAAO,eAAe,UAAU;AAAA,MAAM;AAAA,IACrD,IAAI,SAAS,eAAe;AAAA,IAC5B,OAAO,OAAO,cAAc,iBAAiB;AAAA,MAC5C,MAAM,QAAQ,OAAO,MAAM,GAAG,eAAe;AAAA,MAC7C,OAAO,KAAK,KAAK;AAAA,MACjB,SAAS,OAAO,MAAM,eAAe;AAAA,IACtC;AAAA,IACA,IAAI,SAAS,OAAO,aAAa,GAAG;AAAA,MACnC,OAAO,KAAK,MAAM;AAAA,MAClB,SAAS,IAAI,WAAW,CAAC;AAAA,IAC1B;AAAA,IACA,eAAe,UAAU;AAAA,KACvB,CAAC,CAAC;AAAA,EAEL,MAAM,qBAAqB,cAC1B,CAAC,UAAgC;AAAA,IAChC,MAAM,eAAe,gBAAgB;AAAA,IACrC,MAAM,SAAS,UAAU;AAAA,IACzB,IACC,CAAC,gBACD,CAAC,UACD,OAAO,eAAe,UAAU,QAChC,YAAY,SACX;AAAA,MACD;AAAA,IACD;AAAA,IACA,MAAM,QAAQ,MAAM,YAAY,eAAe,CAAC;AAAA,IAChD,MAAM,YAAY,eACjB,OACA,aAAa,YACb,kBACD;AAAA,IACA,eAAe,UAAU,aACxB,eAAe,SACf,IAAI,WAAW,aAAa,SAAS,CAAC,CACvC;AAAA,IACA,iBAAiB,KAAK;AAAA,KAEvB,CAAC,gBAAgB,CAClB;AAAA,EAEA,MAAM,OAAO,cAAY,MAAM;AAAA,IAC9B,YAAY,UAAU;AAAA,IACtB,iBAAiB,IAAI;AAAA,IACrB,aAAa;AAAA,IACb,MAAM,SAAS,UAAU;AAAA,IACzB,IAAI,QAAQ,eAAe,UAAU,MAAM;AAAA,MAC1C,eAAe,KAAK;AAAA,MACpB,kBAAkB,IAAI;AAAA,MACtB,OAAO,KAAK,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC;AAAA,IAC7C,EAAO;AAAA,MACN,eAAe,KAAK;AAAA,MACpB,kBAAkB,KAAK;AAAA;AAAA,KAEtB,CAAC,cAAc,gBAAgB,CAAC;AAAA,EAEnC,MAAM,QAAQ,cAAY,YAAY;AAAA,IACrC,IAAI,CAAC,aAAa;AAAA,MACjB,UAAU,8CAA8C;AAAA,MACxD;AAAA,IACD;AAAA,IAEA,QAAQ;AAAA,IACR,SAAS,IAAI;AAAA,IACb,kBAAkB,KAAK;AAAA,IACvB,YAAY,UAAU;AAAA,IAEtB,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,UAAU,mBAAmB;AAAA,MAClD,MAAM,QAAQ,OAAO,OAAO,KAC3B,CAAC,SAAS,KAAK,OAAO,OAAO,YAC9B;AAAA,MACA,IAAI,CAAC,OAAO,WAAW;AAAA,QACtB,mBAAmB;AAAA,QACnB;AAAA,MACD;AAAA,MAEA,MAAM,UAAU,MAAM,UAAU,uBAAuB;AAAA,QACtD,OAAO,OAAO;AAAA,QACd,UAAU,eAAe,IAAI;AAAA,MAC9B,CAAC;AAAA,MACD,IAAI,CAAC,QAAQ,gBAAgB;AAAA,QAC5B,mBAAmB;AAAA,QACnB;AAAA,MACD;AAAA,MAEA,MAAM,SAAS,IAAI,UAAU,QAAQ,KAAK;AAAA,MAC1C,OAAO,aAAa;AAAA,MACpB,UAAU,UAAU;AAAA,MACpB,aAAa,UAAU,QAAQ;AAAA,MAE/B,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,QAC5C,MAAM,UAAU,OAAO,WAAW,MAAM;AAAA,UACvC,OAAO,IAAI,MAAM,yCAAyC,CAAC;AAAA,WACzD,IAAI;AAAA,QAEP,OAAO,SAAS,MAAM;AAAA,UACrB,OAAO,aAAa,OAAO;AAAA,UAC3B,OAAO,KACN,KAAK,UAAU;AAAA,YACd,MAAM;AAAA,YACN,OAAO,QAAQ;AAAA,YACf,UAAU,eAAe,IAAI;AAAA,YAC7B,QAAQ;AAAA,cACP,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,UAAU;AAAA,YACX;AAAA,YACA,gBAAgB;AAAA,UACjB,CAAC,CACF;AAAA,UACA,QAAQ;AAAA;AAAA,QAGT,OAAO,UAAU,MAAM;AAAA,UACtB,OAAO,aAAa,OAAO;AAAA,UAC3B,OAAO,IAAI,MAAM,sCAAsC,CAAC;AAAA;AAAA,OAEzD;AAAA,MAED,OAAO,YAAY,CAAC,UAAU;AAAA,QAC7B,IAAI,OAAO,MAAM,SAAS;AAAA,UAAU;AAAA,QACpC,MAAM,UAAU,iBAAiB,MAAM,IAAI;AAAA,QAC3C,IAAI,CAAC;AAAA,UAAS;AAAA,QACd,IAAI,QAAQ,SAAS,SAAS;AAAA,UAC7B,gBAAgB,UAAU,QAAQ,KAAK,KAAK,GAAG,IAAI;AAAA,UACnD,QAAQ;AAAA,UACR;AAAA,QACD;AAAA,QACA,IAAI,QAAQ,SAAS,SAAS;AAAA,UAC7B,UAAU,QAAQ,OAAO;AAAA,UACzB,QAAQ;AAAA,QACT;AAAA;AAAA,MAGD,OAAO,UAAU,MAAM;AAAA,QACtB,IAAI,CAAC,YAAY;AAAA,UAAS,eAAe,KAAK;AAAA,QAC9C,kBAAkB,KAAK;AAAA;AAAA,MAGxB,MAAM,SAAS,MAAM,UAAU,aAAa,aAAa;AAAA,QACxD,OAAO;AAAA,UACN,kBAAkB;AAAA,UAClB,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,QAClB;AAAA,MACD,CAAC;AAAA,MACD,UAAU,UAAU;AAAA,MAEpB,MAAM,mBAAmB,2BAA2B;AAAA,MACpD,IAAI,CAAC;AAAA,QAAkB,MAAM,IAAI,MAAM,6BAA6B;AAAA,MACpE,MAAM,eAAe,IAAI;AAAA,MACzB,MAAM,SAAS,aAAa,wBAAwB,MAAM;AAAA,MAC1D,MAAM,eAAe,aAAa,eAAe;AAAA,MACjD,aAAa,UAAU;AAAA,MACvB,aAAa,wBAAwB;AAAA,MAErC,MAAM,YAAY,aAAa,sBAC9B,MACA,GACA,CACD;AAAA,MACA,UAAU,iBAAiB;AAAA,MAC3B,OAAO,QAAQ,YAAY;AAAA,MAC3B,OAAO,QAAQ,SAAS;AAAA,MACxB,UAAU,QAAQ,aAAa,WAAW;AAAA,MAE1C,gBAAgB,UAAU;AAAA,MAC1B,UAAU,UAAU;AAAA,MACpB,aAAa,UAAU;AAAA,MACvB,YAAY,YAAY;AAAA,MACxB,eAAe,IAAI;AAAA,MAClB,OAAO,KAAK;AAAA,MACb,MAAM,OAAO,eAAe,QAAQ,IAAI,OAAO;AAAA,MAC/C,MAAM,MACL,SAAS,oBACN,iCACA,eAAe,QACd,IAAI,UACJ;AAAA,MACL,UAAU,GAAG;AAAA,MACb,QAAQ;AAAA;AAAA,KAEP;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EAED,YAAU,MAAM,SAAS,CAAC,OAAO,CAAC;AAAA,EAElC,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;;AChaD,wBAAS,4BAAa,uBAAW,sBAAQ;AACzC,wBAAS,2BAAa,8BAAU;AAQhC,IAAM,6BAA6B,CAAC,aAAa,QAAQ;AAEzD,SAAS,eAAe,CACvB,SACA,OACsC;AAAA,EACtC,IAAI,CAAC;AAAA,IAAS,OAAO;AAAA,EACrB,OAAO;AAAA,OACH;AAAA,IACH,QAAQ,QAAQ,OAAO,IAAI,CAAC,SAAU,KAAK,OAAO,MAAM,KAAK,QAAQ,IAAK;AAAA,EAC3E;AAAA;AAGD,SAAS,iBAAiB,CAAC,KAAgD;AAAA,EAC1E,IAAI;AAAA,IACH,MAAM,QAAQ,KAAK,MAAM,GAAG;AAAA,IAC5B,IAAI,MAAM,SAAS,WAAW,CAAC,MAAM;AAAA,MAAO,OAAO;AAAA,IACnD,OAAO;AAAA,IACN,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIF,SAAS,kBAAkB,GAAG;AAAA,EACpC,MAAM,cAAc,iBAAe;AAAA,EACnC,MAAM,iBAAiB,SAA2B,IAAI;AAAA,EACtD,OAAO,sBAAsB,2BAA2B,WAEtD,IAAI;AAAA,EACN,OAAO,iBAAiB,sBACvB,WAAqC,IAAI;AAAA,EAC1C,OAAO,oBAAoB,yBAAyB,WACnD,IACD;AAAA,EAEA,MAAM,cAAc,WAAS;AAAA,IAC5B,UAAU;AAAA,IACV,SAAS,MAAM,UAAU,mBAAmB;AAAA,IAC5C,iBAAiB,CAAC,UACjB,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,UAAU,IAAI,OAAO;AAAA,EACtE,CAAC;AAAA,EAED,MAAM,qBAAqB,cAAY,MAAM;AAAA,IAC5C,IAAI,eAAe,SAAS;AAAA,MAC3B,eAAe,QAAQ,MAAM;AAAA,MAC7B,eAAe,UAAU;AAAA,IAC1B;AAAA,KACE,CAAC,CAAC;AAAA,EAEL,MAAM,oBAAoB,cACzB,CAAC,YAAoB;AAAA,IACpB,IAAI,OAAO,gBAAgB;AAAA,MAAa;AAAA,IACxC,mBAAmB;AAAA,IACnB,wBAAwB,OAAO;AAAA,IAC/B,sBAAsB,IAAI;AAAA,IAE1B,MAAM,cAAc,IAAI,YACvB,UAAU,kCAAkC,OAAO,CACpD;AAAA,IACA,eAAe,UAAU;AAAA,IAEzB,YAAY,YAAY,CAAC,UAAU;AAAA,MAClC,MAAM,UAAU,kBAAkB,MAAM,IAAI;AAAA,MAC5C,IAAI,CAAC;AAAA,QAAS;AAAA,MACd,mBAAmB,QAAQ,KAAK;AAAA,MAChC,YAAY,aACX,4BACA,CAAC,YAAY,gBAAgB,SAAS,QAAQ,KAAK,CACpD;AAAA,MACA,IAAI,CAAC,QAAQ,MAAM,YAAY;AAAA,QAC9B,mBAAmB;AAAA,QACnB,wBAAwB,IAAI;AAAA,QACvB,YAAY,kBAAkB;AAAA,UAClC,UAAU;AAAA,QACX,CAAC;AAAA,MACF;AAAA;AAAA,IAGD,YAAY,UAAU,MAAM;AAAA,MAC3B,sBAAsB,8CAA8C;AAAA,MACpE,mBAAmB;AAAA,MACnB,wBAAwB,IAAI;AAAA,MACvB,YAAY,kBAAkB;AAAA,QAClC,UAAU;AAAA,MACX,CAAC;AAAA;AAAA,KAGH,CAAC,oBAAoB,WAAW,CACjC;AAAA,EAEA,YAAU,MAAM,oBAAoB,CAAC,kBAAkB,CAAC;AAAA,EAExD,MAAM,kBAAkB,cAAY;AAAA,IACnC,YAAY,CAAC,UACZ,UAAU,sBAAsB,KAAK;AAAA,IACtC,WAAW,CAAC,SAAS;AAAA,MACpB,mBAAmB,KAAK,KAAK;AAAA,MAC7B,YAAY,aACX,4BACA,CAAC,YAAY,gBAAgB,SAAS,KAAK,KAAK,CACjD;AAAA,MACA,IAAI,KAAK,MAAM,YAAY;AAAA,QAC1B,kBAAkB,KAAK,MAAM,EAAE;AAAA,MAChC,EAAO;AAAA,QACN,mBAAmB;AAAA,QACnB,wBAAwB,IAAI;AAAA,QACvB,YAAY,kBAAkB;AAAA,UAClC,UAAU;AAAA,QACX,CAAC;AAAA;AAAA;AAAA,EAGJ,CAAC;AAAA,EAED,MAAM,iBAAiB,cAAY;AAAA,IAClC,YAAY,CAAC,UAAkB,UAAU,qBAAqB,KAAK;AAAA,IACnE,WAAW,CAAC,SAAS;AAAA,MACpB,YAAY,aACX,4BACA,CAAC,YAAY,gBAAgB,SAAS,KAAK,KAAK,CACjD;AAAA,MACK,YAAY,kBAAkB;AAAA,QAClC,UAAU;AAAA,MACX,CAAC;AAAA;AAAA,EAEH,CAAC;AAAA,EAED,MAAM,eAAe,cACpB,CAAC,OAAe,UAA+B,CAAC,MAC/C,gBAAgB,YAAY,EAAE,OAAO,OAAO,QAAQ,MAAM,CAAC,GAC5D,CAAC,eAAe,CACjB;AAAA,EAEA,MAAM,cAAc,cACnB,CAAC,UAAkB,eAAe,YAAY,KAAK,GACnD,CAAC,cAAc,CAChB;AAAA,EAEA,OAAO;AAAA,IACN;AAAA,IACA,QAAQ,YAAY;AAAA,IACpB,QAAQ,YAAY,MAAM,UAAU,CAAC;AAAA,IACrC,cAAc,YAAY,MAAM,gBAAgB;AAAA,IAChD,aAAa,YAAY,MAAM,aAAa;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;",
84
+ "debugId": "FCCD29FAF084571164756E2164756E21",
84
85
  "names": []
85
86
  }