@adminide-stack/yantra-mobile 12.0.142 → 12.0.145-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/attachments/displayUserMessageText.js +2 -2
- package/lib/features/attachments/displayUserMessageText.js.map +1 -1
- package/lib/features/devices/readings.js.map +1 -1
- package/lib/features/devices/session.js +2 -22
- package/lib/features/devices/session.js.map +1 -1
- package/lib/features/notion/NotionAgentPanel.js +987 -0
- package/lib/features/notion/NotionAgentPanel.js.map +1 -0
- package/lib/features/notion/NotionAskAiSheet.js +362 -0
- package/lib/features/notion/NotionAskAiSheet.js.map +1 -0
- package/lib/features/notion/NotionBlockView.js +4 -3
- package/lib/features/notion/NotionBlockView.js.map +1 -1
- package/lib/features/notion/NotionConnectionsSheet.js +47 -13
- package/lib/features/notion/NotionConnectionsSheet.js.map +1 -1
- package/lib/features/notion/NotionPageView.js +68 -8
- package/lib/features/notion/NotionPageView.js.map +1 -1
- package/lib/features/notion/NotionSidebarSections.js +1 -1
- package/lib/features/notion/NotionSidebarSections.js.map +1 -1
- package/lib/features/notion/NotionWorkspaceView.js +14 -9
- package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
- package/lib/features/notion/database/DatabaseCells.js +3 -1
- package/lib/features/notion/database/DatabaseCells.js.map +1 -1
- package/lib/features/notion/database/DatabaseDateLayouts.js +1 -1
- package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -1
- package/lib/features/notion/database/NotionDatabaseView.js +1 -1
- package/lib/features/notion/database/NotionDatabaseView.js.map +1 -1
- package/lib/features/notion/notionAgentRunStatus.js +2 -2
- package/lib/features/notion/notionAgentRunStatus.js.map +1 -1
- package/lib/features/notion/notionAgentRuns.js +57 -0
- package/lib/features/notion/notionAgentRuns.js.map +1 -0
- package/lib/features/notion/notionAiContext.js +91 -0
- package/lib/features/notion/notionAiContext.js.map +1 -0
- package/lib/features/notion/notionConnections.js +42 -4
- package/lib/features/notion/notionConnections.js.map +1 -1
- package/lib/features/notion/notionDocuments.js +61 -1
- package/lib/features/notion/notionDocuments.js.map +1 -1
- package/lib/features/notion/notionNotesAgent.js +173 -3
- package/lib/features/notion/notionNotesAgent.js.map +1 -1
- package/lib/features/notion/notionPageKinds.js +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +229 -97
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +33 -7
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/buildJob.js +2 -2
- package/lib/features/webbuilder/buildJob.js.map +1 -1
- package/lib/features/webbuilder/codeFiles.js +18 -1
- package/lib/features/webbuilder/codeFiles.js.map +1 -1
- package/lib/features/webbuilder/components/BottomTabs.js.map +1 -1
- package/lib/features/webbuilder/components/CodeView.js +134 -56
- package/lib/features/webbuilder/components/CodeView.js.map +1 -1
- package/lib/features/webbuilder/components/Composer.js +2 -2
- package/lib/features/webbuilder/components/Composer.js.map +1 -1
- package/lib/features/webbuilder/components/PreviewFrame.js +19 -3
- package/lib/features/webbuilder/components/PreviewFrame.js.map +1 -1
- package/lib/features/webbuilder/components/PreviewScreen.js +310 -46
- package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
- package/lib/features/webbuilder/components/ProjectChat.js +141 -12
- package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
- package/lib/features/webbuilder/components/ProjectSheets.js +792 -0
- package/lib/features/webbuilder/components/ProjectSheets.js.map +1 -0
- package/lib/features/webbuilder/components/ProjectsScreen.js +14 -2
- package/lib/features/webbuilder/components/ProjectsScreen.js.map +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js +914 -58
- package/lib/features/webbuilder/components/PublishSheet.js.map +1 -1
- package/lib/features/webbuilder/components/TemplateCard.js +9 -6
- package/lib/features/webbuilder/components/TemplateCard.js.map +1 -1
- package/lib/features/webbuilder/components/TemplatesSheet.js +5 -17
- package/lib/features/webbuilder/components/TemplatesSheet.js.map +1 -1
- package/lib/features/webbuilder/connectorTemplates.js +171 -0
- package/lib/features/webbuilder/connectorTemplates.js.map +1 -0
- package/lib/features/webbuilder/fileTree.js +163 -0
- package/lib/features/webbuilder/fileTree.js.map +1 -0
- package/lib/features/webbuilder/followUps.js +67 -0
- package/lib/features/webbuilder/followUps.js.map +1 -0
- package/lib/features/webbuilder/previewProbe.js +49 -0
- package/lib/features/webbuilder/previewProbe.js.map +1 -0
- package/lib/features/webbuilder/previewRoutes.js +156 -0
- package/lib/features/webbuilder/previewRoutes.js.map +1 -0
- package/lib/features/webbuilder/projectTools.js +341 -0
- package/lib/features/webbuilder/projectTools.js.map +1 -0
- package/lib/features/webbuilder/publishTools.js +475 -0
- package/lib/features/webbuilder/publishTools.js.map +1 -0
- package/lib/features/webbuilder/sleepNotice.js +13 -0
- package/lib/features/webbuilder/sleepNotice.js.map +1 -0
- package/lib/features/webbuilder/stepLabels.js +37 -7
- package/lib/features/webbuilder/stepLabels.js.map +1 -1
- package/lib/features/webbuilder/studioCatalog.js +5 -1
- package/lib/features/webbuilder/studioCatalog.js.map +1 -1
- package/lib/features/webbuilder/templateCatalog.js +140 -0
- package/lib/features/webbuilder/templateCatalog.js.map +1 -0
- package/lib/features/webbuilder/webbuilderPrompts.js +31 -5
- package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
- package/lib/features/webbuilder/workflow.js +8 -4
- package/lib/features/webbuilder/workflow.js.map +1 -1
- package/lib/screens/Devices/index.js +3 -205
- package/lib/screens/Devices/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +9 -6
- package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -1
- package/lib/screens/WebBuilderNative/index.js +1 -1
- package/lib/screens/WebBuilderNative/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/keepAlive.js +53 -3
- package/lib/screens/WebBuilderNative/keepAlive.js.map +1 -1
- package/lib/screens/WebBuilderNative/unreachableRetry.js +23 -0
- package/lib/screens/WebBuilderNative/unreachableRetry.js.map +1 -0
- package/lib/screens/WebBuilderNative/useConnectorTemplates.js +37 -0
- package/lib/screens/WebBuilderNative/useConnectorTemplates.js.map +1 -0
- package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js +6 -0
- package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +302 -40
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderJobs.js +2 -2
- package/lib/screens/WebBuilderNative/useWebBuilderJobs.js.map +1 -1
- package/lib/screens/WebBuilderNative/versionUndo.js +1 -1
- package/lib/screens/WebBuilderNative/versionUndo.js.map +1 -1
- package/lib/screens/WebBuilderNative/webbuilderTransport.js +147 -77
- package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
- package/package.json +4 -4
- package/lib/features/devices/bodyComposition.js +0 -116
- package/lib/features/devices/bodyComposition.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotionPageView.js","sources":["../../../src/features/notion/NotionPageView.tsx"],"sourcesContent":["/**\n * Native Notion page editor (browser `/notion/page/:blockId`).\n *\n * Title and text blocks are TextInputs. Edits land in a local model\n * (notionEditorModel) at once and are written in the background on the same\n * mutations the web editor uses: updateBlock (debounced, with `baseTitle` so a\n * concurrent web edit merges), appendChildren (Return → new block after this\n * one), transformBlock (toolbar \"turn into\"), deleteBlock (Backspace on an\n * empty block). Writes are chained per block so a block is created before it\n * is edited. Sub-pages and databases open in another editor; block types\n * native does not draw yet (embeds, tables, media) show as a placeholder.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n Clipboard,\n Keyboard,\n KeyboardAvoidingView,\n Platform,\n Pressable,\n RefreshControl,\n ScrollView,\n Share,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { StackActions, useNavigation } from '@react-navigation/native';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport { RowPropertiesPanel } from './database/RowPropertiesPanel';\nimport { NEW_DATABASE_PROPERTIES } from './database/useNotionDatabase';\nimport { notionPalette, type NotionPalette } from './notionTheme';\nimport {\n NATIVE_NOTION_APPEND_CHILDREN,\n NATIVE_NOTION_BACKLINKS,\n NATIVE_NOTION_BLOCK,\n NATIVE_NOTION_DELETE_BLOCK,\n NATIVE_NOTION_DUPLICATE_BLOCK,\n NATIVE_NOTION_EXPORT_MARKDOWN,\n NATIVE_NOTION_IMPORT_MARKDOWN,\n NATIVE_NOTION_PAGE_TREE,\n NATIVE_NOTION_REORDER_CHILDREN,\n NATIVE_NOTION_RESTORE_BLOCK,\n NATIVE_NOTION_TRANSFORM_BLOCK,\n NATIVE_NOTION_UPDATE_BLOCK,\n} from './notionDocuments';\nimport {\n blockIcon,\n blockTitle,\n editedLabel,\n isPageBlock,\n pageTitle,\n richTextToPlain,\n toTitleProperty,\n type NotionBlock,\n type NotionBlockTree,\n} from './notionBlocks';\nimport {\n TURN_INTO,\n emptyBlock,\n flattenModel,\n insertAfter,\n isTextType,\n modelFromTree,\n moveAmongSiblings,\n newBlockId,\n nextTypeAfter,\n patchBlock,\n previousLineId,\n removeBlock,\n restoreSubtree,\n snapshotSubtree,\n toEditorBlock,\n columnLayout,\n firstTextId,\n insertTree,\n treeInput,\n type NewBlockTree,\n type EditorBlock,\n type EditorLine,\n type EditorModel,\n type SubtreeSnapshot,\n} from './notionEditorModel';\nimport {\n applyFormatRange,\n applyFormatToAll,\n applyInlineMarkdown,\n applyPlainTextEdit,\n linkAt,\n rangeHasFormat,\n replaceRange,\n runsText,\n runsToTitleProperty,\n type RichRun,\n} from './notionRichTitle';\nimport { markdownShortcutFor } from './notionMarkdownShortcuts';\nimport { blockColorParts, textColorOf, washColorOf } from './notionRichText';\nimport { languageLabel } from './notionCodeLanguages';\nimport { ColorSheet, LanguageSheet, type ColorChoice } from './NotionBlockSheets';\nimport { PageActionsSheet, type MenuAction } from './NotionPageMenu';\nimport { pageLinkUrl } from './notionPageActions';\nimport { webOrigin } from './usePageActions';\nimport { MEDIA_TYPES, MediaBlock } from './NotionMediaBlocks';\nimport { MentionSheet } from './NotionMentionSheet';\nimport { recordRecent } from './notionRecents';\nimport { CommentsSheet, usePageComments } from './NotionCommentsSheet';\nimport { ShareSheet } from './NotionShareSheet';\nimport { HistorySheet } from './NotionHistorySheet';\n\nimport { fontFamilyOf, TextPromptDialog } from './NotionPageMenu';\nimport { pageFontPatch, pageSettingsPatch, readPageSettings, serverErrorText, wordCount } from './notionPageActions';\nimport { usePageActions, type PageMenuExtras } from './usePageActions';\nimport { useNotionWorkspace } from './useNotionWorkspace';\n\ntype Palette = NotionPalette;\n\n/** Page look from pageSettings: font family, Small text (~12% smaller, web), Lock page. */\ninterface PageLook {\n fontFamily?: string;\n small: boolean;\n locked: boolean;\n}\n\n/** Scale a text style for Small text (web: 14px vs 16px). */\nfunction scaled(style: object, small: boolean): object {\n if (!small) return style;\n const s = style as { fontSize?: number; lineHeight?: number };\n return {\n ...style,\n ...(s.fontSize ? { fontSize: Math.round(s.fontSize * 0.875) } : {}),\n ...(s.lineHeight ? { lineHeight: Math.round(s.lineHeight * 0.875) } : {}),\n };\n}\ntype SaveState = 'idle' | 'saving' | 'saved' | 'error';\ntype PendingSave = { cancel: () => void; flush: () => void };\n\nconst SAVE_DELAY_MS = 500;\nconst PAGE_EMOJIS = ['📄', '📝', '📌', '💡', '🎯', '🚀', '📚', '✅', '🗓️', '💼', '🏠', '❤️', '⭐', '🔥', '🧠', '🎨'];\n\nconst PLACEHOLDER: Record<string, string> = {\n heading_1: 'Heading 1',\n heading_2: 'Heading 2',\n heading_3: 'Heading 3',\n bulleted_list: 'List',\n numbered_list: 'List',\n todo: 'To-do',\n toggle: 'Toggle',\n quote: 'Quote',\n callout: 'Callout',\n code: 'Code',\n};\n\nconst TEXT_STYLE: Record<string, object> = {\n heading_1: { fontSize: 26, lineHeight: 32, fontWeight: '800' },\n heading_2: { fontSize: 21, lineHeight: 28, fontWeight: '700' },\n heading_3: { fontSize: 18, lineHeight: 25, fontWeight: '700' },\n};\n\nfunction saveLabelOf(save: SaveState, lastEdited: string | null | undefined): string {\n if (save === 'saving') return 'Saving…';\n if (save === 'error') return 'Not saved — check your connection';\n if (save === 'saved') return 'Saved';\n return editedLabel(lastEdited);\n}\n\nexport function NotionPageView({\n orgName,\n blockId,\n isDark,\n}: {\n orgName: string | null;\n blockId: string | null;\n isDark: boolean;\n}) {\n const palette = notionPalette(isDark);\n const navigation = useNavigation<any>();\n const client = useApolloClient();\n const insets = useSafeAreaInsets();\n\n const { data, loading, error, refetch } = useQuery<{ getBlockTree?: NotionBlockTree | null }>(\n NATIVE_NOTION_PAGE_TREE,\n {\n variables: { input: { blockId: blockId ?? '', includeChildren: true, maxDepth: 5 } },\n skip: !blockId,\n fetchPolicy: 'network-only',\n },\n );\n const tree = data?.getBlockTree ?? null;\n // The page block itself comes from getBlock, like the web editor (PageEditor.xstate): the\n // tree's root came back without its title / edit time on device, so it only feeds the body.\n const pageQuery = useQuery<{ getBlock?: NotionBlock | null }>(NATIVE_NOTION_BLOCK, {\n variables: { input: { blockId: blockId ?? '' } },\n skip: !blockId,\n fetchPolicy: 'network-only',\n });\n const page = pageQuery.data?.getBlock ?? null;\n\n const [model, setModel] = useState<EditorModel | null>(null);\n const [title, setTitle] = useState('');\n const [icon, setIcon] = useState<string | null>(null);\n const [focusedId, setFocusedId] = useState<string | null>(null);\n const [pendingFocus, setPendingFocus] = useState<string | null>(null);\n const [save, setSave] = useState<SaveState>('idle');\n const [iconPicker, setIconPicker] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n const [keyboardShown, setKeyboardShown] = useState(false);\n useEffect(() => {\n const show = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow', () =>\n setKeyboardShown(true),\n );\n const hide = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide', () =>\n setKeyboardShown(false),\n );\n return () => {\n show.remove();\n hide.remove();\n };\n }, []);\n const [pageProps, setPageProps] = useState<Record<string, unknown>>({});\n const [importOpen, setImportOpen] = useState(false);\n const [showBacklinks, setShowBacklinks] = useState(false);\n const settings = readPageSettings(pageProps);\n const look: PageLook = {\n fontFamily: fontFamilyOf(settings.font),\n small: settings.smallText,\n locked: settings.locked,\n };\n\n const modelRef = useRef<EditorModel | null>(null);\n modelRef.current = model;\n const inputs = useRef(new Map<string, TextInput | null>());\n const pending = useRef(new Map<string, PendingSave>());\n const chains = useRef(new Map<string, Promise<unknown>>());\n const savedTitles = useRef(new Map<string, string>());\n const inFlight = useRef(0);\n\n /** Load the server page (title, icon) and its tree (blocks) into the editor. */\n const applyTree = useCallback((next: NotionBlockTree, pageBlock: NotionBlock) => {\n const seededModel = modelFromTree(next, pageBlock.id);\n setModel(seededModel);\n setCollapsed(\n new Set(\n Object.values(seededModel.blocks)\n .filter((b) => b.type === 'toggle')\n .map((b) => b.id),\n ),\n );\n const t = blockTitle(pageBlock);\n setTitle(t);\n setIcon(blockIcon(pageBlock));\n setPageProps((pageBlock.properties ?? {}) as Record<string, unknown>);\n savedTitles.current.set(pageBlock.id, t);\n const remember = (node: NotionBlockTree) => {\n savedTitles.current.set(node.block.id, blockTitle(node.block));\n (node.children ?? []).forEach(remember);\n };\n (next.children ?? []).forEach(remember);\n }, []);\n\n // The server tree seeds the editor ONCE. After that the local model is the truth:\n // every mutation result is normalised into the Apollo cache and changes `tree`, and\n // re-seeding from it would drop blocks added here (they are not in the cached\n // tree's children) - the page would go blank while saying \"Saved\".\n const seeded = useRef(false);\n useEffect(() => {\n if (!tree || !page || seeded.current) return;\n seeded.current = true;\n applyTree(tree, page);\n recordRecent(page.workspaceId, { id: page.id, title: blockTitle(page), icon: blockIcon(page) });\n }, [tree, page, applyTree]);\n\n useEffect(() => {\n if (!pendingFocus) return undefined;\n const id = pendingFocus;\n const handle = setTimeout(() => {\n inputs.current.get(id)?.focus();\n setPendingFocus(null);\n }, 30);\n return () => clearTimeout(handle);\n }, [pendingFocus, model]);\n\n /** A mutation that fails loudly: GraphQL errors throw even if the client defaults to errorPolicy 'all'. */\n const write = useCallback(\n async (options: Parameters<typeof client.mutate>[0]) => {\n const res = await client.mutate({ ...options, errorPolicy: 'none' });\n if (res.errors?.length) throw new Error(res.errors[0].message);\n if (!res.data) throw new Error('The server returned no data');\n return res;\n },\n [client],\n );\n\n /** Writes that failed, in order, so Retry can send exactly those again. */\n const failed = useRef<Array<{ id: string; op: () => Promise<unknown> }>>([]);\n const [saveError, setSaveError] = useState<string | null>(null);\n\n /** Run `op` after every earlier write to the same block (create → edit → delete order). */\n const enqueue = useCallback((id: string, op: () => Promise<unknown>) => {\n inFlight.current += 1;\n setSave('saving');\n const prev = chains.current.get(id) ?? Promise.resolve();\n const next = prev\n .catch(() => undefined)\n .then(op)\n .then(\n () => {\n inFlight.current -= 1;\n if (!inFlight.current && !pending.current.size && !failed.current.length) setSave('saved');\n },\n (err) => {\n inFlight.current -= 1;\n failed.current.push({ id, op });\n setSaveError(serverErrorText(err));\n setSave('error');\n if (__DEV__) console.warn('[NotionPage] save failed', serverErrorText(err), err);\n },\n );\n chains.current.set(id, next);\n return next;\n }, []);\n\n const retryFailed = useCallback(() => {\n const again = failed.current;\n failed.current = [];\n setSaveError(null);\n again.forEach(({ id, op }) => enqueue(id, op));\n }, [enqueue]);\n\n /** Save a title: block text keeps its formatting (runs), the page title is plain. */\n const writeTitle = useCallback(\n (id: string, text: string, runs?: RichRun[]) => {\n const baseTitle = savedTitles.current.get(id) ?? '';\n savedTitles.current.set(id, text);\n const title = runs ? runsToTitleProperty(runs) : toTitleProperty(text);\n return enqueue(id, () =>\n write({\n mutation: NATIVE_NOTION_UPDATE_BLOCK,\n variables: { input: { id, properties: { title }, baseTitle } },\n }),\n );\n },\n [write, enqueue],\n );\n\n /** Debounce a title write per block. */\n const scheduleTitle = useCallback(\n (id: string, text: string, runs?: RichRun[]) => {\n pending.current.get(id)?.cancel();\n setSave('saving');\n const handle = setTimeout(() => {\n pending.current.delete(id);\n writeTitle(id, text, runs);\n }, SAVE_DELAY_MS);\n const cancel = () => {\n clearTimeout(handle);\n pending.current.delete(id);\n };\n pending.current.set(id, {\n cancel,\n flush: () => {\n cancel();\n writeTitle(id, text, runs);\n },\n });\n },\n [writeTitle],\n );\n\n // ---- Undo / redo (web ⌘Z / ⌘⇧Z): every local edit records how to reverse it ----\n type HistoryEntry = { undo: () => void; redo: () => void; key?: string; at: number };\n const undoStack = useRef<HistoryEntry[]>([]);\n const redoStack = useRef<HistoryEntry[]>([]);\n const [, setHistoryTick] = useState(0);\n /** Typing in one block within 1.5 s is one undo step (like the web). */\n const record = useCallback((entry: Omit<HistoryEntry, 'at'>) => {\n const top = undoStack.current[undoStack.current.length - 1];\n if (entry.key && top?.key === entry.key && Date.now() - top.at < 1500) {\n top.redo = entry.redo;\n top.at = Date.now();\n } else {\n undoStack.current.push({ ...entry, at: Date.now() });\n if (undoStack.current.length > 100) undoStack.current.shift();\n }\n redoStack.current = [];\n setHistoryTick((t) => t + 1);\n }, []);\n const undo = () => {\n const entry = undoStack.current.pop();\n if (!entry) return;\n entry.undo();\n redoStack.current.push(entry);\n setHistoryTick((t) => t + 1);\n };\n const redo = () => {\n const entry = redoStack.current.pop();\n if (!entry) return;\n entry.redo();\n undoStack.current.push({ ...entry, at: 0 });\n setHistoryTick((t) => t + 1);\n };\n\n /** Show and save new runs for a text block. */\n const setRuns = useCallback(\n (id: string, runs: RichRun[]) => {\n const text = runsText(runs);\n setModel((m) => (m ? patchBlock(m, id, { runs, text }) : m));\n scheduleTitle(id, text, runs);\n },\n [scheduleTitle],\n );\n\n /** Change a block's runs as one undoable step. */\n const commitRuns = useCallback(\n (id: string, before: RichRun[], after: RichRun[], key?: string) => {\n setRuns(id, after);\n record({ key, undo: () => setRuns(id, before), redo: () => setRuns(id, after) });\n },\n [record, setRuns],\n );\n\n // Leaving the page writes whatever is still waiting on the debounce, and refreshes its\n // \"Recently visited\" entry with the title / icon it has now.\n const latest = useRef({ title: '', icon: null as string | null, workspaceId: null as string | null | undefined });\n useEffect(\n () => () => {\n [...pending.current.values()].forEach((p) => p.flush());\n if (blockId && latest.current.workspaceId) {\n recordRecent(latest.current.workspaceId, {\n id: blockId,\n title: latest.current.title,\n icon: latest.current.icon,\n });\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const updateProps = useCallback(\n (id: string, properties: Record<string, unknown>) =>\n enqueue(id, () =>\n write({ mutation: NATIVE_NOTION_UPDATE_BLOCK, variables: { input: { id, properties } } }),\n ),\n [write, enqueue],\n );\n\n /** Take a block (and its subtree) out locally and on the server; returns what Undo needs. */\n const removeLocal = useCallback(\n (id: string): SubtreeSnapshot | null => {\n const m = modelRef.current;\n if (!m) return null;\n const snap = snapshotSubtree(m, id);\n pending.current.get(id)?.cancel();\n setModel((cur) => (cur ? removeBlock(cur, id) : cur));\n enqueue(id, () => write({ mutation: NATIVE_NOTION_DELETE_BLOCK, variables: { blockId: id } }));\n return snap;\n },\n [write, enqueue],\n );\n\n /** Put a removed block back (Undo of a delete / Redo of an add): restoreBlock brings its subtree. */\n const bringBack = useCallback(\n (snap: SubtreeSnapshot | null) => {\n if (!snap) return;\n setModel((cur) => (cur ? restoreSubtree(cur, snap) : cur));\n enqueue(snap.id, () => write({ mutation: NATIVE_NOTION_RESTORE_BLOCK, variables: { blockId: snap.id } }));\n },\n [write, enqueue],\n );\n\n /** New block under `parentId` after `afterId` (end when null); focuses it when it is text. */\n const addBlock = useCallback(\n (parentId: string, afterId: string | null, type: string, extra: Record<string, unknown> = {}) => {\n if (!parentId) {\n setSaveError('This page has no id yet. Pull down to reload it.');\n setSave('error');\n return '';\n }\n const id = newBlockId();\n const properties: Record<string, unknown> = {\n ...(isTextType(type) || type === 'page' ? { title: [] } : {}),\n ...(type === 'todo' ? { checked: false } : {}),\n ...extra,\n };\n const block: EditorBlock = emptyBlock(id, type, parentId, properties);\n setModel((m) => (m ? insertAfter(m, block, afterId) : m));\n savedTitles.current.set(id, '');\n if (isTextType(type)) setPendingFocus(id);\n enqueue(id, () =>\n write({\n mutation: NATIVE_NOTION_APPEND_CHILDREN,\n variables: {\n input: {\n parentId,\n ...(afterId ? { after: afterId } : {}),\n children: [{ id, type, parent: { type: 'block', id: parentId }, properties }],\n },\n },\n }),\n );\n let snap: SubtreeSnapshot | null = null;\n record({\n undo: () => {\n snap = removeLocal(id);\n },\n redo: () => bringBack(snap),\n });\n return id;\n },\n [write, enqueue, record, removeLocal, bringBack],\n );\n\n /** Change a block's type (+ properties the new type needs), undoable. */\n const turnInto = useCallback(\n (id: string, type: string, extraProps?: Record<string, unknown>, opts: { record?: boolean } = {}) => {\n const block = modelRef.current?.blocks[id];\n if (!block || block.type === type) return;\n const fromType = block.type;\n const props = { ...(type === 'todo' ? { checked: false } : {}), ...(extraProps ?? {}) };\n setModel((cur) =>\n cur ? patchBlock(cur, id, { type, properties: { ...block.properties, ...props } }) : cur,\n );\n enqueue(id, async () => {\n await write({ mutation: NATIVE_NOTION_TRANSFORM_BLOCK, variables: { blockId: id, newType: type } });\n if (Object.keys(props).length) {\n await write({\n mutation: NATIVE_NOTION_UPDATE_BLOCK,\n variables: { input: { id, properties: props } },\n });\n }\n });\n if (opts.record !== false) {\n record({\n undo: () => turnInto(id, fromType, undefined, { record: false }),\n redo: () => turnInto(id, type, extraProps, { record: false }),\n });\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [write, enqueue, record],\n );\n\n const deleteLine = useCallback(\n (id: string) => {\n const m = modelRef.current;\n if (!m) return;\n const prev = previousLineId(m, id);\n const snap = removeLocal(id);\n if (prev) setPendingFocus(prev);\n else setFocusedId(null);\n record({ undo: () => bringBack(snap), redo: () => removeLocal(id) });\n },\n [record, removeLocal, bringBack],\n );\n\n const openPage = useCallback(\n (id: string) => navigation.dispatch(StackActions.push('MainStack.NotionPage', { orgName, blockId: id })),\n [navigation, orgName],\n );\n\n // ---- page-level -------------------------------------------------------\n\n const onTitle = (text: string) => {\n setTitle(text);\n if (blockId) scheduleTitle(blockId, text);\n };\n\n const pickIcon = (emoji: string | null) => {\n setIconPicker(false);\n setIcon(emoji);\n if (blockId) updateProps(blockId, { icon: emoji ? { type: 'emoji', emoji } : null });\n };\n\n const notion = useNotionWorkspace();\n const menuExtras = useRef<() => PageMenuExtras>(() => ({}));\n const pageActions = usePageActions({\n notion,\n palette,\n onOpenPage: openPage,\n onTrashed: () => navigation.goBack(),\n extrasFor: () => menuExtras.current(),\n onRenamed: (id, newTitle) => {\n if (id !== blockId) return;\n pending.current.get(id)?.cancel();\n savedTitles.current.set(id, newTitle);\n setTitle(newTitle);\n },\n });\n const backlinksQuery = useQuery<{ getBacklinks?: NotionBlock[] | null }>(NATIVE_NOTION_BACKLINKS, {\n variables: { blockId: blockId ?? '', limit: 50 },\n skip: !blockId,\n fetchPolicy: 'cache-and-network',\n });\n const backlinks = (backlinksQuery.data?.getBacklinks ?? []).filter((b) => !b.inTrash && b.id !== blockId);\n\n /** Page ••• settings write `properties.pageSettings` (the server merges it; title/icon untouched). */\n const pagePropsRef = useRef(pageProps);\n pagePropsRef.current = pageProps;\n const patchPage = (patch: Record<string, unknown>) => {\n if (!blockId) return;\n pagePropsRef.current = { ...pagePropsRef.current, ...patch };\n setPageProps(pagePropsRef.current);\n updateProps(blockId, patch);\n };\n\n const exportMarkdown = async () => {\n if (!blockId) return;\n try {\n const res = await client.query<{ exportNotionPageMarkdown?: string | null }>({\n query: NATIVE_NOTION_EXPORT_MARKDOWN,\n variables: { blockId },\n fetchPolicy: 'network-only',\n });\n const md = res.data?.exportNotionPageMarkdown ?? '';\n await Share.share({ title: title.trim() || 'Untitled', message: md || `# ${title.trim() || 'Untitled'}` });\n } catch (err) {\n pageActions.showToast({ message: `Couldn't export. ${err instanceof Error ? err.message : ''}`.trim() });\n }\n };\n\n const importMarkdown = async (markdown: string) => {\n if (!blockId) return;\n await write({ mutation: NATIVE_NOTION_IMPORT_MARKDOWN, variables: { parentBlockId: blockId, markdown } });\n // Imported blocks come from the server: reload the body once nothing local is pending.\n const [res, pageRes] = await Promise.all([refetch(), pageQuery.refetch()]);\n const next = res.data?.getBlockTree;\n const nextPage = pageRes.data?.getBlock;\n if (next && nextPage && !pending.current.size && !inFlight.current) applyTree(next, nextPage);\n pageActions.showToast({ message: 'Imported' });\n };\n\n latest.current = { title, icon, workspaceId: page?.workspaceId };\n\n // Rebuilt every render: the open sheet shows the current settings and word count.\n menuExtras.current = () => {\n const words = wordCount(title, modelRef.current);\n return {\n subtitle: page ? editedLabel(page.lastEditedTime) || undefined : undefined,\n pageSettings: {\n settings,\n onToggle: (key) => patchPage(pageSettingsPatch(pagePropsRef.current, key)),\n onFont: (font) => patchPage(pageFontPatch(pagePropsRef.current, font)),\n footer: `${words} ${words === 1 ? 'word' : 'words'}`,\n },\n groups: [\n [\n { key: 'export', label: 'Export as Markdown…', icon: 'share-outline', onPress: exportMarkdown },\n {\n key: 'history',\n label: 'Page history',\n icon: 'time-outline',\n onPress: () => setHistoryOpen(true),\n },\n {\n key: 'import',\n label: 'Import Markdown…',\n icon: 'download-outline',\n onPress: () => setImportOpen(true),\n },\n ],\n ],\n };\n };\n\n const openPageMenu = () => {\n if (!page) return;\n Keyboard.dismiss();\n pageActions.open({ ...page, properties: { ...pageProps, title: toTitleProperty(title) } });\n };\n\n // ---- blocks -----------------------------------------------------------\n\n /** Selection per block (formatting applies to it; collapsed = the whole block). */\n const selections = useRef(new Map<string, { start: number; end: number }>());\n\n const onChangeText = (id: string, text: string) => {\n const block = modelRef.current?.blocks[id];\n if (!block) return;\n const before = block.runs;\n // \"/\" on an empty line opens the insert menu for this line (web slash menu).\n if (text === '/' && !block.text && block.type !== 'code') {\n setInsertFor({ mode: 'replace', id });\n return;\n }\n // \"@\" typed at a word start opens the mention picker (web MentionPicker).\n if (block.type !== 'code' && text.length === block.text.length + 1) {\n let at = 0;\n while (at < block.text.length && text[at] === block.text[at]) at += 1;\n if (\n text[at] === '@' &&\n (at === 0 || /\\s/.test(text[at - 1])) &&\n text.slice(at + 1) === block.text.slice(at)\n ) {\n commitRuns(id, before, applyPlainTextEdit(before, text), `text:${id}`);\n Keyboard.dismiss();\n setMentionFor({ id, at });\n return;\n }\n }\n if (block.type !== 'code') {\n // Markdown block shortcuts typed at the start, then Space (web markdownShortcuts).\n const sp = text.indexOf(' ');\n if (\n sp > 0 &&\n text.length === block.text.length + 1 &&\n text.slice(0, sp) === block.text.slice(0, sp) &&\n text.slice(sp + 1) === block.text.slice(sp)\n ) {\n const shortcut = markdownShortcutFor(text.slice(0, sp), block.type);\n if (shortcut) {\n setRuns(id, applyPlainTextEdit(before, text.slice(sp + 1)));\n turnInto(id, shortcut.type, shortcut.properties);\n return;\n }\n }\n // ``` -> code, --- / *** / ___ -> divider (no Space needed, web handleDraftTextChange).\n if (text === '```') {\n setRuns(id, []);\n turnInto(id, 'code');\n return;\n }\n if (\n (text === '---' || text === '***' || text === '___') &&\n (block.type === 'paragraph' || block.type === 'text')\n ) {\n setRuns(id, []);\n turnInto(id, 'divider');\n addBlock(block.parentId, id, 'paragraph');\n return;\n }\n }\n let runs = applyPlainTextEdit(before, text);\n if (block.type !== 'code') {\n // Inline **bold**, *italic*, `code`, ~~strike~~ right before the caret.\n let suffix = 0;\n const old = block.text;\n while (\n suffix < old.length &&\n suffix < text.length &&\n old[old.length - 1 - suffix] === text[text.length - 1 - suffix]\n ) {\n suffix += 1;\n }\n const md = applyInlineMarkdown(runs, text.length - suffix);\n if (md) runs = md.runs;\n }\n commitRuns(id, before, runs, `text:${id}`);\n };\n\n // ---- format bar ---------------------------------------------------------\n const [colorFor, setColorFor] = useState<{ mode: 'inline' | 'block'; id: string } | null>(null);\n const [linkFor, setLinkFor] = useState<{ id: string; start: number; end: number; current: string } | null>(null);\n const [languageFor, setLanguageFor] = useState<string | null>(null);\n const [blockMenuFor, setBlockMenuFor] = useState<string | null>(null);\n const [insertFor, setInsertFor] = useState<{ mode: 'after' | 'replace'; id: string | null } | null>(null);\n const [mentionFor, setMentionFor] = useState<{ id: string; at: number } | null>(null);\n const [captionFor, setCaptionFor] = useState<string | null>(null);\n const [commentsFor, setCommentsFor] = useState<{ blockId: string | null } | null>(null);\n const [shareOpen, setShareOpen] = useState(false);\n const [historyOpen, setHistoryOpen] = useState(false);\n const comments = usePageComments(blockId);\n const openComments = [...comments.openCounts.values()].reduce((n, c) => n + c, 0);\n\n /** Insert a nested block tree (columns) after `afterId`; one appendChildren, undoable. */\n const addTree = (tree: NewBlockTree, parentId: string, afterId: string | null) => {\n setModel((m) => (m ? insertTree(m, tree, parentId, afterId) : m));\n enqueue(tree.id, () =>\n write({\n mutation: NATIVE_NOTION_APPEND_CHILDREN,\n variables: {\n input: { parentId, ...(afterId ? { after: afterId } : {}), children: [treeInput(tree, parentId)] },\n },\n }),\n );\n const focus = firstTextId(tree);\n if (focus) setPendingFocus(focus);\n let snap: SubtreeSnapshot | null = null;\n record({\n undo: () => {\n snap = removeLocal(tree.id);\n },\n redo: () => bringBack(snap),\n });\n };\n\n /** The web slash menu's blocks (Basic types are on the toolbar's turn-into row). */\n const insertGroups = (target: { mode: 'after' | 'replace'; id: string | null }): MenuAction[][] => {\n const m = modelRef.current;\n if (!m) return [];\n const anchor = target.id ? m.blocks[target.id] : null;\n const parentId = anchor?.parentId ?? m.rootId;\n const put =\n (type: string, props: Record<string, unknown> = {}) =>\n () => {\n if (type === 'page') {\n addSubPage();\n return;\n }\n // A database is its own block (opens in the database view), never a turned line.\n if (target.mode === 'replace' && anchor && !anchor.text && type !== 'database') {\n setRuns(anchor.id, []);\n turnInto(anchor.id, type, props);\n if (!isTextType(type)) setFocusedId(null);\n return;\n }\n addBlock(parentId, anchor?.id ?? lastTopId(m), type, props);\n };\n const columns = (n: number) => () => addTree(columnLayout(n), parentId, anchor?.id ?? lastTopId(m));\n return [\n [\n { key: 'image', label: 'Image', icon: 'image-outline', onPress: put('image') },\n { key: 'video', label: 'Video', icon: 'videocam-outline', onPress: put('video') },\n { key: 'audio', label: 'Audio', icon: 'musical-notes-outline', onPress: put('audio') },\n { key: 'file', label: 'File', icon: 'document-attach-outline', onPress: put('file') },\n { key: 'bookmark', label: 'Bookmark', icon: 'bookmark-outline', onPress: put('bookmark') },\n { key: 'embed', label: 'Embed', icon: 'globe-outline', onPress: put('embed', { embedType: 'url' }) },\n ],\n [\n {\n key: 'table',\n label: 'Table',\n icon: 'grid-outline',\n onPress: put('table', {\n rows: [\n ['', ''],\n ['', ''],\n ],\n hasHeaderRow: false,\n }),\n },\n { key: 'col2', label: '2 columns', icon: 'pause-outline', onPress: columns(2) },\n { key: 'col3', label: '3 columns', icon: 'reorder-three-outline', onPress: columns(3) },\n {\n key: 'equation',\n label: 'Block equation',\n icon: 'calculator-outline',\n onPress: put('equation', { expression: '' }),\n },\n { key: 'toc', label: 'Table of contents', icon: 'list-outline', onPress: put('table_of_contents') },\n { key: 'divider', label: 'Divider', icon: 'remove-outline', onPress: put('divider') },\n { key: 'page', label: 'Sub-page', icon: 'document-text-outline', onPress: put('page') },\n {\n key: 'database',\n label: 'Database',\n icon: 'server-outline',\n onPress: put('database', NEW_DATABASE_PROPERTIES),\n },\n ],\n [\n { key: 'todo', label: 'To-do list', icon: 'checkbox-outline', onPress: put('todo') },\n { key: 'toggle', label: 'Toggle list', icon: 'caret-forward-outline', onPress: put('toggle') },\n {\n key: 'callout',\n label: 'Callout',\n icon: 'bulb-outline',\n onPress: put('callout', { icon: { emoji: '💡' } }),\n },\n { key: 'quote', label: 'Quote', icon: 'chatbox-ellipses-outline', onPress: put('quote') },\n { key: 'code', label: 'Code', icon: 'code-slash-outline', onPress: put('code') },\n ],\n ];\n };\n\n const insertMention = (run: RichRun) => {\n const target = mentionFor;\n const block = target ? modelRef.current?.blocks[target.id] : null;\n if (!target || !block) return;\n const runs = replaceRange(block.runs, target.at, target.at + 1, [run, { content: ' ' }]);\n commitRuns(target.id, block.runs, runs);\n setPendingFocus(target.id);\n };\n\n /** Names already mentioned on this page (offered under People, like the web). */\n const mentionedPeople = (): string[] => {\n const out = new Set<string>();\n Object.values(modelRef.current?.blocks ?? {}).forEach((b) =>\n b.runs.forEach((r) => {\n if (r.mention?.type === 'user' && r.mention.name) out.add(r.mention.name);\n }),\n );\n return [...out];\n };\n\n const rangeOf = (id: string, block: EditorBlock) => {\n const sel = selections.current.get(id);\n const ranged = !!sel && sel.end > sel.start;\n return ranged ? { start: sel.start, end: sel.end, ranged } : { start: 0, end: block.text.length, ranged };\n };\n\n /** Bold / italic / underline / strikethrough / code on the selection (or the whole block). */\n const toggleMark = (key: 'bold' | 'italic' | 'underline' | 'strikethrough' | 'code') => {\n const id = focusedId;\n const block = id ? modelRef.current?.blocks[id] : null;\n if (!id || !block || !block.text) return;\n const r = rangeOf(id, block);\n const on = !rangeHasFormat(block.runs, r.start, r.end, key);\n const runs = r.ranged\n ? applyFormatRange(block.runs, r.start, r.end, { [key]: on })\n : applyFormatToAll(block.runs, { [key]: on });\n commitRuns(id, block.runs, runs);\n };\n\n const pickColor = (choice: ColorChoice) => {\n const target = colorFor;\n const block = target ? modelRef.current?.blocks[target.id] : null;\n if (!target || !block) return;\n if (target.mode === 'inline') {\n const r = rangeOf(target.id, block);\n const update = choice.kind === 'text' ? { color: choice.value } : { highlight: choice.value };\n const runs = r.ranged\n ? applyFormatRange(block.runs, r.start, r.end, update)\n : applyFormatToAll(block.runs, update);\n commitRuns(target.id, block.runs, runs);\n return;\n }\n // Whole block: `properties.color` = 'red' | 'red_background' | null (web block colour).\n const value = choice.value\n ? choice.kind === 'background'\n ? `${choice.value}_background`\n : choice.value\n : null;\n setBlockProps(target.id, { color: value });\n };\n\n /** Patch one block's properties locally + on the server, undoable. */\n const setBlockProps = (id: string, patch: Record<string, unknown>, opts: { record?: boolean } = {}) => {\n const block = modelRef.current?.blocks[id];\n if (!block) return;\n const beforeProps: Record<string, unknown> = {};\n Object.keys(patch).forEach((k) => {\n beforeProps[k] = block.properties[k] ?? null;\n });\n setModel((m) => (m ? patchBlock(m, id, { properties: { ...block.properties, ...patch } }) : m));\n updateProps(id, patch);\n if (opts.record !== false) {\n record({\n undo: () => setBlockProps(id, beforeProps, { record: false }),\n redo: () => setBlockProps(id, patch, { record: false }),\n });\n }\n };\n\n const openLink = () => {\n const id = focusedId;\n const block = id ? modelRef.current?.blocks[id] : null;\n if (!id || !block || !block.text) return;\n const r = rangeOf(id, block);\n setLinkFor({ id, start: r.start, end: r.end, current: linkAt(block.runs, r.start, r.end) ?? '' });\n };\n\n const applyLink = (url: string) => {\n const target = linkFor;\n const block = target ? modelRef.current?.blocks[target.id] : null;\n if (!target || !block) return;\n const href = url.trim() ? (/^[a-z]+:/i.test(url.trim()) ? url.trim() : `https://${url.trim()}`) : null;\n const runs =\n target.end > target.start\n ? applyFormatRange(block.runs, target.start, target.end, { href })\n : applyFormatToAll(block.runs, { href });\n commitRuns(target.id, block.runs, runs);\n };\n\n // ---- block menu ---------------------------------------------------------\n const duplicateLine = (id: string) => {\n const block = modelRef.current?.blocks[id];\n if (!block) return;\n enqueue(id, async () => {\n const res = await write({\n mutation: NATIVE_NOTION_DUPLICATE_BLOCK,\n variables: { blockId: id, includeChildren: true },\n });\n const copy = (res.data as { duplicateBlock?: NotionBlock } | null)?.duplicateBlock;\n if (!copy?.id) return;\n setModel((m) => (m ? insertAfter(m, toEditorBlock(copy, block.parentId), id) : m));\n savedTitles.current.set(copy.id, blockTitle(copy));\n let snap: SubtreeSnapshot | null = null;\n record({\n undo: () => {\n snap = removeLocal(copy.id);\n },\n redo: () => bringBack(snap),\n });\n });\n };\n\n const moveLine = (id: string, direction: -1 | 1, opts: { record?: boolean } = {}) => {\n const m = modelRef.current;\n if (!m) return;\n const moved = moveAmongSiblings(m, id, direction);\n if (!moved) return;\n setModel(moved.model);\n enqueue(moved.parentId, () =>\n write({\n mutation: NATIVE_NOTION_REORDER_CHILDREN,\n variables: { blockId: moved.parentId, childIds: moved.order },\n }),\n );\n if (opts.record !== false) {\n record({\n undo: () => moveLine(id, direction === 1 ? -1 : 1, { record: false }),\n redo: () => moveLine(id, direction, { record: false }),\n });\n }\n };\n\n const blockMenuGroups = (id: string): MenuAction[][] => {\n const block = modelRef.current?.blocks[id];\n if (!block) return [];\n const colorable = isTextType(block.type) && block.type !== 'code';\n return [\n [\n ...(colorable\n ? [\n {\n key: 'color',\n label: 'Color…',\n icon: 'color-palette-outline' as const,\n onPress: () => setColorFor({ mode: 'block', id }),\n },\n ]\n : []),\n ...(block.type === 'code'\n ? [\n {\n key: 'language',\n label: 'Language…',\n icon: 'code-slash-outline' as const,\n detail: languageLabel(block.properties.language),\n onPress: () => setLanguageFor(id),\n },\n ]\n : []),\n {\n key: 'comment',\n label: 'Comment',\n icon: 'chatbubble-outline',\n onPress: () => setCommentsFor({ blockId: id }),\n },\n { key: 'duplicate', label: 'Duplicate', icon: 'copy-outline', onPress: () => duplicateLine(id) },\n { key: 'up', label: 'Move up', icon: 'arrow-up', onPress: () => moveLine(id, -1) },\n { key: 'down', label: 'Move down', icon: 'arrow-down', onPress: () => moveLine(id, 1) },\n {\n key: 'link',\n label: 'Copy link to block',\n icon: 'link-outline',\n onPress: () => {\n if (!blockId) return;\n Clipboard.setString(`${pageLinkUrl(webOrigin(), blockId)}?block=${encodeURIComponent(id)}`);\n pageActions.showToast({ message: 'Link copied' });\n },\n },\n ],\n [\n {\n key: 'delete',\n label: 'Delete',\n icon: 'trash-outline',\n destructive: true,\n onPress: () => deleteLine(id),\n },\n ],\n ];\n };\n\n // ---- toggles ------------------------------------------------------------\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set());\n const toggleCollapsed = (id: string) =>\n setCollapsed((cur) => {\n const next = new Set(cur);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n\n const onSubmit = (line: EditorLine) => {\n const { block } = line;\n const m = modelRef.current;\n if (\n block.type === 'toggle' &&\n m &&\n !collapsed.has(block.id) &&\n !(m.children[block.id] ?? []).length &&\n block.text\n ) {\n addBlock(block.id, null, 'paragraph');\n return;\n }\n // Return on an empty list item ends the list (Notion behaviour).\n if (!block.text && block.type !== 'paragraph' && nextTypeAfter(block.type) === block.type) {\n turnInto(block.id, 'paragraph');\n return;\n }\n addBlock(block.parentId, block.id, nextTypeAfter(block.type));\n };\n\n const onBackspace = (line: EditorLine) => {\n const { block } = line;\n if (block.text) return;\n // First Backspace turns a styled empty block back into text, the next removes it.\n if (block.type !== 'paragraph' && block.type !== 'text') turnInto(block.id, 'paragraph');\n else deleteLine(block.id);\n };\n\n const toggleTodo = (block: EditorBlock) => setBlockProps(block.id, { checked: block.properties.checked !== true });\n\n const addSubPage = () => {\n const m = modelRef.current;\n if (!m) return;\n const anchor = focusedId ? m.blocks[focusedId] : null;\n const id = addBlock(anchor?.parentId ?? m.rootId, anchor?.id ?? null, 'page');\n Keyboard.dismiss();\n // Open once the create has landed so the new editor finds the page.\n chains.current.get(id)?.then(() => openPage(id));\n };\n\n const appendAtEnd = () => {\n const m = modelRef.current;\n if (!m) return;\n const top = m.children[m.rootId] ?? [];\n const last = top.length ? m.blocks[top[top.length - 1]] : null;\n if (last && isTextType(last.type) && !last.text) setPendingFocus(last.id);\n else addBlock(m.rootId, null, 'paragraph');\n };\n\n const lines = useMemo(() => (model ? flattenModel(model, collapsed) : []), [model, collapsed]);\n const headings = useMemo(\n () =>\n lines\n .filter((l) => l.block.type.startsWith('heading_') && l.block.text.trim())\n .map((l) => ({ id: l.block.id, text: l.block.text.trim(), level: Number(l.block.type.slice(-1)) })),\n [lines],\n );\n const focused = focusedId && model ? (model.blocks[focusedId] ?? null) : null;\n\n if (!model || !tree || !page) {\n return (\n <View style={[styles.center, { backgroundColor: palette.card }]}>\n {loading || pageQuery.loading || !blockId ? (\n <ActivityIndicator color={palette.primary} />\n ) : (\n <>\n <Text\n style={[\n styles.muted,\n { color: error || pageQuery.error ? palette.danger : palette.textMuted },\n ]}\n >\n {error || pageQuery.error ? \"Couldn't load this page.\" : 'This page was not found.'}\n </Text>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n refetch();\n pageQuery.refetch();\n }}\n style={styles.retry}\n >\n <Text style={{ color: palette.primary, fontWeight: '600' }}>Try again</Text>\n </Pressable>\n </>\n )}\n </View>\n );\n }\n\n return (\n <KeyboardAvoidingView\n style={[styles.flex, { backgroundColor: palette.card }]}\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n keyboardVerticalOffset={Platform.OS === 'ios' ? insets.top + 56 : 0}\n >\n <ScrollView\n style={styles.flex}\n contentContainerStyle={styles.content}\n keyboardShouldPersistTaps=\"handled\"\n refreshControl={\n <RefreshControl\n refreshing={refreshing}\n onRefresh={async () => {\n setRefreshing(true);\n try {\n const [res, pageRes] = await Promise.all([refetch(), pageQuery.refetch()]);\n const next = res.data?.getBlockTree;\n const nextPage = pageRes.data?.getBlock;\n if (next && nextPage && !pending.current.size && !inFlight.current) {\n applyTree(next, nextPage);\n }\n } finally {\n setRefreshing(false);\n }\n }}\n />\n }\n >\n <View style={styles.pageActions}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={icon ? 'Change icon' : 'Add icon'}\n onPress={() => !settings.locked && setIconPicker((v) => !v)}\n style={({ pressed }) => [styles.pageAction, pressed && { backgroundColor: palette.pressed }]}\n >\n {icon ? (\n <Text style={styles.pageEmoji}>{icon}</Text>\n ) : (\n <>\n <Ionicons name=\"happy-outline\" size={16} color={palette.textMuted} />\n <Text style={[styles.pageActionLabel, { color: palette.textMuted }]}>Add icon</Text>\n </>\n )}\n </Pressable>\n <View style={styles.flex} />\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Share\"\n onPress={() => {\n Keyboard.dismiss();\n setShareOpen(true);\n }}\n hitSlop={8}\n style={({ pressed }) => [styles.pageAction, pressed && { backgroundColor: palette.pressed }]}\n >\n <Text style={[styles.shareLabel, { color: palette.text }]}>Share</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={openComments ? `Comments, ${openComments} open` : 'Comments'}\n onPress={() => {\n Keyboard.dismiss();\n setCommentsFor({ blockId: null });\n }}\n hitSlop={8}\n style={({ pressed }) => [styles.pageAction, pressed && { backgroundColor: palette.pressed }]}\n >\n <Ionicons name=\"chatbubble-outline\" size={18} color={palette.textMuted} />\n {openComments ? (\n <Text style={[styles.commentCount, { color: palette.textMuted }]}>{openComments}</Text>\n ) : null}\n </Pressable>\n {blockId ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n notion.favoriteIds.includes(blockId) ? 'Remove from Favorites' : 'Add to Favorites'\n }\n onPress={() =>\n notion\n .toggleFavoritePage(blockId)\n .catch(() => pageActions.showToast({ message: \"Couldn't update Favorites\" }))\n }\n hitSlop={8}\n style={({ pressed }) => [\n styles.pageAction,\n pressed && { backgroundColor: palette.pressed },\n ]}\n >\n <Ionicons\n name={notion.favoriteIds.includes(blockId) ? 'star' : 'star-outline'}\n size={19}\n color={notion.favoriteIds.includes(blockId) ? '#eab308' : palette.textMuted}\n />\n </Pressable>\n ) : null}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Page actions\"\n onPress={openPageMenu}\n hitSlop={8}\n style={({ pressed }) => [styles.pageAction, pressed && { backgroundColor: palette.pressed }]}\n >\n <Ionicons name=\"ellipsis-horizontal\" size={20} color={palette.textMuted} />\n </Pressable>\n </View>\n {settings.locked ? (\n <View style={[styles.lockBanner, { backgroundColor: palette.fill }]}>\n <Ionicons name=\"lock-closed\" size={15} color={palette.textMuted} />\n <Text style={[styles.lockText, { color: palette.textMuted }]}>This page is locked</Text>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => patchPage(pageSettingsPatch(pageProps, 'locked', false))}\n hitSlop={8}\n >\n <Text style={[styles.lockUnlock, { color: palette.primary }]}>Unlock</Text>\n </Pressable>\n </View>\n ) : null}\n {iconPicker ? (\n <View style={[styles.emojiGrid, { backgroundColor: palette.fill }]}>\n {PAGE_EMOJIS.map((e) => (\n <Pressable\n key={e}\n accessibilityRole=\"button\"\n onPress={() => pickIcon(e)}\n style={styles.emojiCell}\n >\n <Text style={styles.emoji}>{e}</Text>\n </Pressable>\n ))}\n {icon ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => pickIcon(null)}\n style={styles.emojiRemove}\n >\n <Text style={{ color: palette.danger, fontWeight: '600' }}>Remove icon</Text>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n\n <TextInput\n value={title}\n onChangeText={onTitle}\n placeholder=\"Untitled\"\n placeholderTextColor={palette.textFaint}\n multiline\n scrollEnabled={false}\n submitBehavior=\"submit\"\n returnKeyType=\"next\"\n onSubmitEditing={() => {\n const first = lines.find((l) => isTextType(l.block.type));\n if (first) setPendingFocus(first.block.id);\n else addBlock(model.rootId, null, 'paragraph');\n }}\n onFocus={() => setFocusedId(null)}\n editable={!settings.locked}\n style={[scaled(styles.title, look.small), { color: palette.text, fontFamily: look.fontFamily }]}\n />\n <Text style={[styles.meta, { color: save === 'error' ? palette.danger : palette.textMuted }]}>\n {save === 'error' && saveError\n ? `Not saved — ${saveError}`\n : saveLabelOf(save, page.lastEditedTime)}\n </Text>\n {save === 'error' ? (\n <Pressable accessibilityRole=\"button\" onPress={retryFailed} hitSlop={8} style={styles.retryRow}>\n <Ionicons name=\"refresh\" size={14} color={palette.primary} />\n <Text style={[styles.retryLabel, { color: palette.primary }]}>Retry</Text>\n </Pressable>\n ) : null}\n {page.type === 'database_row' && page.parent?.type === 'database' && page.parent.id ? (\n <RowPropertiesPanel\n rowId={page.id}\n databaseId={page.parent.id}\n properties={pageProps}\n meta={{ createdTime: page.createdTime, lastEditedTime: page.lastEditedTime }}\n isDark={isDark}\n palette={palette}\n onError={(message) => pageActions.showToast({ message: `Couldn't save. ${message}` })}\n />\n ) : null}\n {backlinks.length ? (\n <View style={styles.backlinks}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: showBacklinks }}\n onPress={() => setShowBacklinks((v) => !v)}\n hitSlop={6}\n style={styles.backlinksToggle}\n >\n <Ionicons name=\"link-outline\" size={14} color={palette.textMuted} />\n <Text style={[styles.backlinksLabel, { color: palette.textMuted }]}>\n {`${backlinks.length} ${backlinks.length === 1 ? 'backlink' : 'backlinks'}`}\n </Text>\n <Ionicons\n name={showBacklinks ? 'chevron-up' : 'chevron-down'}\n size={13}\n color={palette.textMuted}\n />\n </Pressable>\n {showBacklinks\n ? backlinks.map((b) => (\n <Pressable\n key={b.id}\n accessibilityRole=\"link\"\n onPress={() => openPage(b.rootPageId || b.id)}\n style={styles.backlinkRow}\n >\n <Text style={styles.inlineEmoji}>{blockIcon(b) ?? '📄'}</Text>\n <Text\n numberOfLines={1}\n style={[\n styles.text,\n styles.link,\n { color: palette.text, borderBottomColor: palette.hairline },\n ]}\n >\n {pageTitle(b)}\n </Text>\n </Pressable>\n ))\n : null}\n </View>\n ) : null}\n\n <View style={styles.body}>\n {lines.map((line) => (\n <BlockLine\n key={line.block.id}\n line={line}\n palette={palette}\n focused={line.block.id === focusedId}\n registerInput={(input) => inputs.current.set(line.block.id, input)}\n onFocus={() => setFocusedId(line.block.id)}\n onChangeText={(t) => onChangeText(line.block.id, t)}\n onSubmit={() => onSubmit(line)}\n onBackspace={() => onBackspace(line)}\n onToggleTodo={() => toggleTodo(line.block)}\n onOpenPage={openPage}\n onDelete={() => deleteLine(line.block.id)}\n onSelection={(sel) => selections.current.set(line.block.id, sel)}\n onMenu={() => {\n Keyboard.dismiss();\n setBlockMenuFor(line.block.id);\n }}\n collapsed={collapsed.has(line.block.id)}\n onToggleCollapsed={() => toggleCollapsed(line.block.id)}\n onLanguage={() => setLanguageFor(line.block.id)}\n onPatch={(patch) => setBlockProps(line.block.id, patch)}\n onCaption={() => setCaptionFor(line.block.id)}\n headings={headings}\n onJump={(id) => setPendingFocus(id)}\n commentCount={comments.openCounts.get(line.block.id) ?? 0}\n onComments={() => setCommentsFor({ blockId: line.block.id })}\n isDark={isDark}\n look={look}\n />\n ))}\n </View>\n\n {/* Tap below the last block to keep writing (Notion's click-to-append area). */}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Add a block\"\n onPress={settings.locked ? undefined : appendAtEnd}\n disabled={settings.locked}\n style={styles.appendArea}\n >\n {lines.length === 0 && !settings.locked ? (\n <Text style={[styles.startHint, { color: palette.textFaint }]}>Tap here to start writing…</Text>\n ) : null}\n </Pressable>\n </ScrollView>\n\n {focused && !settings.locked ? (\n <EditorToolbar\n palette={palette}\n bottomInset={keyboardShown ? 0 : insets.bottom}\n block={focused}\n onTurnInto={(type) => turnInto(focused.id, type)}\n onDivider={() => {\n addBlock(focused.parentId, focused.id, 'divider');\n }}\n onSubPage={addSubPage}\n onDelete={() => deleteLine(focused.id)}\n onMark={toggleMark}\n onColor={() => setColorFor({ mode: 'inline', id: focused.id })}\n onLink={openLink}\n onMenu={() => setBlockMenuFor(focused.id)}\n onInsert={() => {\n Keyboard.dismiss();\n setInsertFor({ mode: 'after', id: focused.id });\n }}\n canUndo={undoStack.current.length > 0}\n canRedo={redoStack.current.length > 0}\n onUndo={undo}\n onRedo={redo}\n onDone={() => {\n Keyboard.dismiss();\n setFocusedId(null);\n }}\n />\n ) : null}\n {pageActions.element}\n <PageActionsSheet\n visible={Boolean(blockMenuFor)}\n palette={palette}\n title={blockMenuFor ? blockMenuTitle(model.blocks[blockMenuFor]) : ''}\n groups={blockMenuFor ? blockMenuGroups(blockMenuFor) : []}\n onClose={() => setBlockMenuFor(null)}\n />\n {blockId ? (\n <HistorySheet\n visible={historyOpen}\n palette={palette}\n pageId={blockId}\n createdTime={page.createdTime}\n locked={settings.locked}\n onRestored={async () => {\n // A restore rewrote the page on the server: load it again once nothing local is pending.\n const [res, pageRes] = await Promise.all([refetch(), pageQuery.refetch()]);\n const next = res.data?.getBlockTree;\n const nextPage = pageRes.data?.getBlock;\n if (next && nextPage && !pending.current.size && !inFlight.current) applyTree(next, nextPage);\n }}\n onClose={() => setHistoryOpen(false)}\n />\n ) : null}\n {blockId ? (\n <ShareSheet\n visible={shareOpen}\n palette={palette}\n pageId={blockId}\n pageTitle={title.trim() || 'Untitled'}\n onClose={() => setShareOpen(false)}\n />\n ) : null}\n {blockId ? (\n <CommentsSheet\n visible={Boolean(commentsFor)}\n palette={palette}\n pageId={blockId}\n blockId={commentsFor?.blockId ?? null}\n blockLabel={\n commentsFor?.blockId ? model.blocks[commentsFor.blockId]?.text.slice(0, 120) : undefined\n }\n onClose={() => {\n setCommentsFor(null);\n comments.refetch().catch(() => undefined);\n }}\n />\n ) : null}\n <PageActionsSheet\n visible={Boolean(insertFor)}\n palette={palette}\n title=\"Insert\"\n subtitle=\"Text styles are on the toolbar's second row\"\n groups={insertFor ? insertGroups(insertFor) : []}\n onClose={() => setInsertFor(null)}\n />\n <MentionSheet\n visible={Boolean(mentionFor)}\n palette={palette}\n pages={notion.pages}\n workspaceId={notion.workspace?.id ?? null}\n people={mentionFor ? mentionedPeople() : []}\n onPick={insertMention}\n onClose={() => setMentionFor(null)}\n />\n <TextPromptDialog\n visible={Boolean(captionFor)}\n palette={palette}\n title=\"Caption\"\n initial={captionFor ? (model.blocks[captionFor]?.text ?? '') : ''}\n placeholder=\"Write a caption\"\n confirmLabel=\"Save\"\n allowEmpty\n onClose={() => setCaptionFor(null)}\n onConfirm={(caption) => {\n const block = captionFor ? modelRef.current?.blocks[captionFor] : null;\n if (block) commitRuns(block.id, block.runs, caption.trim() ? [{ content: caption.trim() }] : []);\n }}\n />\n <ColorSheet\n visible={Boolean(colorFor)}\n palette={palette}\n isDark={isDark}\n title={colorFor?.mode === 'inline' ? 'Text color' : 'Block color'}\n currentText={colorCurrent(colorFor, model).text}\n currentBackground={colorCurrent(colorFor, model).background}\n onPick={pickColor}\n onClose={() => setColorFor(null)}\n />\n <LanguageSheet\n visible={Boolean(languageFor)}\n palette={palette}\n current={languageFor ? model.blocks[languageFor]?.properties.language : undefined}\n onPick={(language) => languageFor && setBlockProps(languageFor, { language })}\n onClose={() => setLanguageFor(null)}\n />\n <TextPromptDialog\n visible={Boolean(linkFor)}\n palette={palette}\n title={linkFor?.current ? 'Edit link' : 'Add link'}\n message={linkFor?.current ? 'Leave empty to remove the link.' : undefined}\n initial={linkFor?.current ?? ''}\n placeholder=\"https://\"\n confirmLabel=\"Save\"\n allowEmpty\n onClose={() => setLinkFor(null)}\n onConfirm={applyLink}\n />\n <TextPromptDialog\n visible={importOpen}\n palette={palette}\n title=\"Import Markdown\"\n message=\"Paste Markdown. Headings, lists, to-dos, quotes and code become blocks at the end of this page.\"\n placeholder={'# Heading\\n- item\\n- [ ] to-do'}\n confirmLabel=\"Import\"\n multiline\n onClose={() => setImportOpen(false)}\n onConfirm={importMarkdown}\n />\n </KeyboardAvoidingView>\n );\n}\n\n/** The last top-level block (insert at the end when nothing is focused). */\nfunction lastTopId(model: EditorModel): string | null {\n const top = model.children[model.rootId] ?? [];\n return top.length ? top[top.length - 1] : null;\n}\n\nfunction blockMenuTitle(block: EditorBlock | undefined): string {\n if (!block) return '';\n const label = TURN_INTO.find((t) => t.type === block.type)?.label ?? block.type.replace(/_/g, ' ');\n return block.text.trim() ? `${label} · ${block.text.trim().slice(0, 40)}` : label;\n}\n\n/** Current colours shown as selected in the colour sheet. */\nfunction colorCurrent(\n target: { mode: 'inline' | 'block'; id: string } | null,\n model: EditorModel,\n): { text?: string; background?: string } {\n const block = target ? model.blocks[target.id] : null;\n if (!target || !block) return {};\n if (target.mode === 'block') return blockColorParts(block.properties.color);\n const first = block.runs[0]?.annotations ?? {};\n return { text: (first.color as string) || '', background: (first.highlight as string) || '' };\n}\n\n/** Text style of one formatted run (web RichTextField rendering). */\nfunction runStyle(run: RichRun, palette: Palette, isDark: boolean, mono?: string) {\n const a = (run.annotations ?? {}) as Record<string, unknown>;\n const lines = [a.underline || run.href ? 'underline' : '', a.strikethrough ? 'line-through' : '']\n .filter(Boolean)\n .join(' ') as 'underline' | 'line-through' | 'underline line-through' | '';\n return {\n ...(a.bold ? { fontWeight: '700' as const } : {}),\n ...(a.italic ? { fontStyle: 'italic' as const } : {}),\n ...(lines ? { textDecorationLine: lines } : {}),\n ...(a.code ? { fontFamily: mono, backgroundColor: palette.fill, color: palette.danger } : {}),\n ...(textColorOf(a.color, isDark) ? { color: textColorOf(a.color, isDark) } : {}),\n ...(washColorOf(a.highlight, isDark) ? { backgroundColor: washColorOf(a.highlight, isDark) } : {}),\n ...(run.href ? { color: palette.primary } : {}),\n ...(run.mention ? { color: palette.primary, fontWeight: '600' as const } : {}),\n };\n}\n\nconst MONO = Platform.OS === 'ios' ? 'Menlo' : 'monospace';\n\nfunction BlockLine({\n line,\n palette,\n isDark,\n focused,\n collapsed,\n registerInput,\n onFocus,\n onChangeText,\n onSubmit,\n onBackspace,\n onToggleTodo,\n onToggleCollapsed,\n onOpenPage,\n onDelete,\n onSelection,\n onMenu,\n onLanguage,\n onPatch,\n onCaption,\n headings,\n onJump,\n commentCount,\n onComments,\n look,\n}: {\n commentCount: number;\n onComments: () => void;\n onPatch: (patch: Record<string, unknown>) => void;\n onCaption: () => void;\n headings: Array<{ id: string; text: string; level: number }>;\n onJump: (id: string) => void;\n look: PageLook;\n line: EditorLine;\n palette: Palette;\n isDark: boolean;\n focused: boolean;\n collapsed: boolean;\n registerInput: (input: TextInput | null) => void;\n onFocus: () => void;\n onChangeText: (text: string) => void;\n onSubmit: () => void;\n onBackspace: () => void;\n onToggleTodo: () => void;\n onToggleCollapsed: () => void;\n onOpenPage: (id: string) => void;\n onDelete: () => void;\n onSelection: (sel: { start: number; end: number }) => void;\n onMenu: () => void;\n onLanguage: () => void;\n}) {\n const { block, depth, number } = line;\n const indent = { marginLeft: depth * 22 };\n const menu = look.locked ? undefined : onMenu;\n\n if (isPageBlock(block)) {\n const emoji = blockIcon(block);\n return (\n <Pressable\n accessibilityRole=\"link\"\n onPress={() => onOpenPage(block.id)}\n onLongPress={menu}\n style={({ pressed }) => [\n styles.row,\n styles.linkRow,\n indent,\n pressed && { backgroundColor: palette.pressed },\n ]}\n >\n {emoji ? (\n <Text style={styles.inlineEmoji}>{emoji}</Text>\n ) : (\n <Ionicons\n name={block.type === 'database' ? 'grid-outline' : 'document-text-outline'}\n size={18}\n color={palette.textMuted}\n />\n )}\n <Text style={[styles.text, styles.link, { color: palette.text, borderBottomColor: palette.hairline }]}>\n {block.text.trim() || pageTitle({ properties: block.properties })}\n </Text>\n </Pressable>\n );\n }\n\n if (block.type === 'divider') {\n return (\n <Pressable onLongPress={menu} style={[styles.dividerHit, indent]}>\n <View style={[styles.divider, { backgroundColor: palette.hairline }]} />\n </Pressable>\n );\n }\n\n if (MEDIA_TYPES.includes(block.type)) {\n return (\n <View style={[indent, styles.mediaRow]}>\n <MediaBlock\n block={block}\n palette={palette}\n locked={look.locked}\n onPatch={onPatch}\n onCaption={onCaption}\n onMenu={menu}\n />\n </View>\n );\n }\n\n if (block.type === 'table_of_contents') {\n return (\n <Pressable onLongPress={menu} style={[indent, styles.toc, { borderLeftColor: palette.hairline }]}>\n {headings.length ? (\n headings.map((h) => (\n <Pressable key={h.id} accessibilityRole=\"link\" onPress={() => onJump(h.id)} hitSlop={4}>\n <Text\n numberOfLines={1}\n style={[styles.tocItem, { color: palette.textMuted, marginLeft: (h.level - 1) * 14 }]}\n >\n {h.text}\n </Text>\n </Pressable>\n ))\n ) : (\n <Text style={[styles.tocItem, { color: palette.textFaint }]}>\n Add headings to build a table of contents\n </Text>\n )}\n </Pressable>\n );\n }\n\n if (!isTextType(block.type)) {\n const caption = block.text || richTextToPlain(block.properties.caption) || block.type.replace(/_/g, ' ');\n return (\n <Pressable\n onLongPress={menu ?? (look.locked ? undefined : onDelete)}\n style={[styles.row, styles.unsupported, { borderColor: palette.hairline }, indent]}\n >\n <Ionicons name=\"cube-outline\" size={16} color={palette.textMuted} />\n <Text style={[styles.unsupportedText, { color: palette.textMuted }]} numberOfLines={2}>\n {caption}\n </Text>\n <Text style={[styles.webOnly, { color: palette.textFaint }]}>Web</Text>\n </Pressable>\n );\n }\n\n const checked = block.properties.checked === true;\n const colors = blockColorParts(block.properties.color);\n const blockText = textColorOf(colors.text, isDark);\n const blockWash = washColorOf(colors.background, isDark);\n let gutter: React.ReactNode = null;\n if (block.type === 'bulleted_list') {\n gutter = <Text style={[styles.text, styles.marker, { color: palette.text }]}>•</Text>;\n } else if (block.type === 'numbered_list') {\n gutter = <Text style={[styles.text, styles.marker, { color: palette.text }]}>{`${number ?? 1}.`}</Text>;\n } else if (block.type === 'todo') {\n gutter = (\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked }}\n onPress={look.locked ? undefined : onToggleTodo}\n hitSlop={8}\n style={styles.check}\n >\n <Ionicons\n name={checked ? 'checkbox' : 'square-outline'}\n size={21}\n color={checked ? palette.primary : palette.textMuted}\n />\n </Pressable>\n );\n } else if (block.type === 'toggle') {\n gutter = (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={collapsed ? 'Expand toggle' : 'Collapse toggle'}\n accessibilityState={{ expanded: !collapsed }}\n onPress={onToggleCollapsed}\n hitSlop={10}\n style={styles.caretHit}\n >\n <Ionicons name={collapsed ? 'caret-forward' : 'caret-down'} size={14} color={palette.textMuted} />\n </Pressable>\n );\n } else if (block.type === 'callout') {\n gutter = <Text style={styles.inlineEmoji}>{blockIcon({ properties: block.properties }) ?? '💡'}</Text>;\n }\n\n const baseText = [\n styles.input,\n scaled(TEXT_STYLE[block.type] ?? styles.text, look.small),\n { color: blockText ?? palette.text, fontFamily: look.fontFamily },\n block.type === 'todo' && checked && styles.done,\n block.type === 'todo' && checked && { color: palette.textMuted },\n block.type === 'code' && styles.codeText,\n ];\n\n return (\n <Pressable\n onLongPress={menu}\n delayLongPress={350}\n style={[\n styles.row,\n indent,\n block.type === 'quote' && [styles.quote, { borderLeftColor: palette.text }],\n block.type === 'callout' && [styles.callout, { backgroundColor: blockWash ?? palette.fill }],\n block.type === 'code' && [styles.code, { backgroundColor: palette.fill }],\n block.type.startsWith('heading') && styles.headingRow,\n blockWash && block.type !== 'callout' ? [styles.wash, { backgroundColor: blockWash }] : null,\n ]}\n >\n {gutter}\n <View style={styles.flex}>\n {block.type === 'code' ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Code language\"\n onPress={look.locked ? undefined : onLanguage}\n hitSlop={6}\n style={[styles.langPill, { backgroundColor: palette.card }]}\n >\n <Text style={[styles.langPillText, { color: palette.textMuted }]}>\n {languageLabel(block.properties.language)}\n </Text>\n {!look.locked ? <Ionicons name=\"chevron-down\" size={11} color={palette.textMuted} /> : null}\n </Pressable>\n ) : null}\n {/* Formatted runs are TextInput children (no `value`): bold / colour / links stay visible while editing. */}\n <TextInput\n ref={registerInput}\n onChangeText={onChangeText}\n onFocus={onFocus}\n onSelectionChange={(e) => onSelection(e.nativeEvent.selection)}\n editable={!look.locked}\n multiline\n scrollEnabled={false}\n submitBehavior={block.type === 'code' ? 'newline' : 'submit'}\n onSubmitEditing={block.type === 'code' ? undefined : onSubmit}\n onKeyPress={(e) => {\n if (e.nativeEvent.key === 'Backspace') onBackspace();\n }}\n autoCorrect={block.type !== 'code'}\n autoCapitalize={block.type === 'code' ? 'none' : 'sentences'}\n placeholder={focused ? (PLACEHOLDER[block.type] ?? 'Type something…') : PLACEHOLDER[block.type]}\n placeholderTextColor={palette.textFaint}\n style={baseText}\n textAlignVertical=\"top\"\n >\n {block.runs.map((run, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <Text key={i} style={runStyle(run, palette, isDark, MONO)}>\n {run.content}\n </Text>\n ))}\n </TextInput>\n </View>\n {commentCount ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`${commentCount} comments`}\n onPress={onComments}\n hitSlop={8}\n style={[styles.commentBubble, { backgroundColor: palette.fill }]}\n >\n <Ionicons name=\"chatbubble\" size={11} color={palette.textMuted} />\n <Text style={[styles.commentBubbleText, { color: palette.textMuted }]}>{commentCount}</Text>\n </Pressable>\n ) : null}\n </Pressable>\n );\n}\n\ntype Mark = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'code';\n\nfunction EditorToolbar({\n bottomInset,\n palette,\n block,\n onTurnInto,\n onDivider,\n onSubPage,\n onDelete,\n onDone,\n onMark,\n onColor,\n onLink,\n onMenu,\n onInsert,\n canUndo,\n canRedo,\n onUndo,\n onRedo,\n}: {\n onInsert: () => void;\n bottomInset: number;\n palette: Palette;\n block: EditorBlock;\n onTurnInto: (type: string) => void;\n onDivider: () => void;\n onSubPage: () => void;\n onDelete: () => void;\n onDone: () => void;\n onMark: (mark: Mark) => void;\n onColor: () => void;\n onLink: () => void;\n onMenu: () => void;\n canUndo: boolean;\n canRedo: boolean;\n onUndo: () => void;\n onRedo: () => void;\n}) {\n const marks: Array<{ key: Mark; label: string; style: object }> = [\n { key: 'bold', label: 'B', style: { fontWeight: '800' } },\n { key: 'italic', label: 'I', style: { fontStyle: 'italic', fontWeight: '600' } },\n { key: 'underline', label: 'U', style: { textDecorationLine: 'underline', fontWeight: '600' } },\n { key: 'strikethrough', label: 'S', style: { textDecorationLine: 'line-through', fontWeight: '600' } },\n { key: 'code', label: '</>', style: { fontFamily: MONO, fontSize: 13 } },\n ];\n const formattable = block.type !== 'code';\n const tool = (key: string, label: string, onPress: () => void, child: React.ReactNode, disabled?: boolean) => (\n <Pressable\n key={key}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n onPress={onPress}\n disabled={disabled}\n style={[styles.tool, { backgroundColor: palette.fill }, disabled && styles.toolDisabled]}\n >\n {child}\n </Pressable>\n );\n return (\n <View\n style={[\n styles.toolbar,\n { backgroundColor: palette.card, borderTopColor: palette.hairline, paddingBottom: 6 + bottomInset },\n ]}\n >\n <View style={styles.toolbarRow}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n keyboardShouldPersistTaps=\"always\"\n contentContainerStyle={styles.toolbarContent}\n >\n {tool(\n 'insert',\n 'Insert block',\n onInsert,\n <Ionicons name=\"add\" size={20} color={palette.primary} />,\n )}\n {tool(\n 'undo',\n 'Undo',\n onUndo,\n <Ionicons name=\"arrow-undo\" size={17} color={palette.text} />,\n !canUndo,\n )}\n {tool(\n 'redo',\n 'Redo',\n onRedo,\n <Ionicons name=\"arrow-redo\" size={17} color={palette.text} />,\n !canRedo,\n )}\n {formattable\n ? marks.map((m) =>\n tool(\n m.key,\n m.key,\n () => onMark(m.key),\n <Text style={[styles.toolLabel, { color: palette.text }, m.style]}>{m.label}</Text>,\n ),\n )\n : null}\n {formattable\n ? tool(\n 'color',\n 'Text color',\n onColor,\n <Ionicons name=\"color-palette-outline\" size={17} color={palette.text} />,\n )\n : null}\n {formattable\n ? tool('link', 'Link', onLink, <Ionicons name=\"link\" size={17} color={palette.text} />)\n : null}\n {tool(\n 'menu',\n 'Block actions',\n onMenu,\n <Ionicons name=\"ellipsis-horizontal\" size={17} color={palette.text} />,\n )}\n </ScrollView>\n </View>\n <View style={styles.toolbarRow}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n keyboardShouldPersistTaps=\"always\"\n contentContainerStyle={styles.toolbarContent}\n >\n {TURN_INTO.map((t) => {\n const active = t.type === block.type || (t.type === 'paragraph' && block.type === 'text');\n return (\n <Pressable\n key={t.type}\n accessibilityRole=\"button\"\n accessibilityLabel={`Turn into ${t.label}`}\n accessibilityState={{ selected: active }}\n onPress={() => onTurnInto(t.type)}\n style={[styles.tool, { backgroundColor: active ? palette.primarySoft : palette.fill }]}\n >\n <Text style={[styles.toolLabel, { color: active ? palette.primary : palette.text }]}>\n {t.short}\n </Text>\n </Pressable>\n );\n })}\n {tool(\n 'divider',\n 'Insert divider',\n onDivider,\n <Ionicons name=\"remove-outline\" size={18} color={palette.text} />,\n )}\n {tool(\n 'subpage',\n 'Insert sub-page',\n onSubPage,\n <Ionicons name=\"document-text-outline\" size={17} color={palette.text} />,\n )}\n {tool(\n 'delete',\n 'Delete block',\n onDelete,\n <Ionicons name=\"trash-outline\" size={17} color={palette.danger} />,\n )}\n </ScrollView>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Done editing\"\n onPress={onDone}\n style={styles.toolDone}\n hitSlop={6}\n >\n <Ionicons name=\"chevron-down\" size={22} color={palette.text} />\n </Pressable>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n flex: { flex: 1 },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n content: { paddingHorizontal: 20, paddingTop: 12, paddingBottom: 40 },\n muted: { fontSize: 15, textAlign: 'center' },\n retry: { marginTop: 12, padding: 8 },\n\n pageActions: { flexDirection: 'row', alignItems: 'center', marginBottom: 4 },\n pageAction: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingHorizontal: 8,\n paddingVertical: 6,\n borderRadius: 8,\n },\n pageActionLabel: { fontSize: 14, fontWeight: '500' },\n pageEmoji: { fontSize: 40 },\n emojiGrid: { flexDirection: 'row', flexWrap: 'wrap', padding: 8, borderRadius: 14, marginBottom: 8 },\n emojiCell: { width: '12.5%', aspectRatio: 1, alignItems: 'center', justifyContent: 'center' },\n emoji: { fontSize: 24 },\n emojiRemove: { width: '100%', alignItems: 'center', paddingVertical: 8 },\n\n title: { fontSize: 32, fontWeight: '800', lineHeight: 38, padding: 0, letterSpacing: -0.5 },\n meta: { fontSize: 12, marginTop: 6 },\n body: { marginTop: 16, gap: 2 },\n\n row: { flexDirection: 'row', alignItems: 'flex-start', gap: 8, borderRadius: 6 },\n headingRow: { marginTop: 10 },\n linkRow: { alignItems: 'center', paddingVertical: 6 },\n input: { flex: 1, padding: 0, paddingVertical: 3, margin: 0, minHeight: 30 },\n text: { fontSize: 16, lineHeight: 24 },\n done: { textDecorationLine: 'line-through' },\n marker: { minWidth: 18, paddingTop: 3 },\n check: { paddingTop: 4 },\n caret: { paddingTop: 9 },\n link: { fontWeight: '600', borderBottomWidth: 1, flexShrink: 1 },\n quote: { borderLeftWidth: 3, paddingLeft: 12 },\n callout: { padding: 12, borderRadius: mobileTokens.radius.sm },\n inlineEmoji: { fontSize: 18, lineHeight: 30 },\n code: { padding: 12, borderRadius: mobileTokens.radius.sm },\n codeText: { fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace', fontSize: 13, lineHeight: 19 },\n dividerHit: { paddingVertical: 10 },\n divider: { height: StyleSheet.hairlineWidth },\n unsupported: { borderWidth: 1, borderStyle: 'dashed', padding: 10, alignItems: 'center', marginVertical: 2 },\n unsupportedText: { flex: 1, fontSize: 14, textTransform: 'capitalize' },\n webOnly: { fontSize: 12, fontWeight: '600' },\n\n retryRow: { flexDirection: 'row', alignItems: 'center', gap: 4, alignSelf: 'flex-start', marginTop: 4 },\n retryLabel: { fontSize: 13, fontWeight: '700' },\n lockBanner: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n borderRadius: 12,\n marginBottom: 10,\n },\n lockText: { flex: 1, fontSize: 14, fontWeight: '500' },\n lockUnlock: { fontSize: 14, fontWeight: '700' },\n backlinks: { marginTop: 8 },\n backlinksToggle: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 5,\n alignSelf: 'flex-start',\n paddingVertical: 4,\n },\n backlinksLabel: { fontSize: 13, fontWeight: '600' },\n backlinkRow: { flexDirection: 'row', alignItems: 'center', gap: 8, paddingVertical: 4, paddingLeft: 4 },\n appendArea: { minHeight: 160, paddingTop: 8 },\n startHint: { fontSize: 16 },\n\n commentCount: { fontSize: 13, fontWeight: '600' },\n shareLabel: { fontSize: 15, fontWeight: '600' },\n commentBubble: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 3,\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 999,\n marginTop: 4,\n },\n commentBubbleText: { fontSize: 11, fontWeight: '700' },\n mediaRow: { marginVertical: 4 },\n toc: { borderLeftWidth: 2, paddingLeft: 12, paddingVertical: 4, gap: 6 },\n tocItem: { fontSize: 14, textDecorationLine: 'underline' },\n toolbarRow: { flexDirection: 'row', alignItems: 'center' },\n toolDisabled: { opacity: 0.35 },\n caretHit: { paddingTop: 8, width: 18, alignItems: 'center' },\n wash: { paddingHorizontal: 6, borderRadius: 6 },\n langPill: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 3,\n alignSelf: 'flex-end',\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 999,\n marginBottom: 6,\n },\n langPillText: { fontSize: 11, fontWeight: '700' },\n toolbar: {\n flexDirection: 'row',\n alignItems: 'center',\n borderTopWidth: StyleSheet.hairlineWidth,\n paddingVertical: 6,\n },\n toolbarContent: { gap: 6, paddingHorizontal: 10, alignItems: 'center' },\n tool: {\n minWidth: 40,\n height: 36,\n paddingHorizontal: 10,\n borderRadius: 10,\n alignItems: 'center',\n justifyContent: 'center',\n },\n toolLabel: { fontSize: 15, fontWeight: '700' },\n toolDone: { paddingHorizontal: 12, height: 36, justifyContent: 'center' },\n});\n"],"names":["_a","_b","title","tree","_c"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NotionPageView.js","sources":["../../../src/features/notion/NotionPageView.tsx"],"sourcesContent":["/**\n * Native Notion page editor (browser `/notion/page/:blockId`).\n *\n * Title and text blocks are TextInputs. Edits land in a local model\n * (notionEditorModel) at once and are written in the background on the same\n * mutations the web editor uses: updateBlock (debounced, with `baseTitle` so a\n * concurrent web edit merges), appendChildren (Return → new block after this\n * one), transformBlock (toolbar \"turn into\"), deleteBlock (Backspace on an\n * empty block). Writes are chained per block so a block is created before it\n * is edited. Sub-pages and databases open in another editor; block types\n * native does not draw yet (embeds, tables, media) show as a placeholder.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n Clipboard,\n Keyboard,\n KeyboardAvoidingView,\n Platform,\n Pressable,\n RefreshControl,\n ScrollView,\n Share,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { StackActions, useNavigation } from '@react-navigation/native';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport { RowPropertiesPanel } from './database/RowPropertiesPanel';\nimport { useNotionAskAi } from './NotionAskAiSheet';\nimport { NotionAgentPanel } from './NotionAgentPanel';\nimport { pageKindOf } from './notionPageKinds';\nimport { blocksToInstructions } from './notionNotesAgent';\nimport { NEW_DATABASE_PROPERTIES } from './database/useNotionDatabase';\nimport { notionPalette, type NotionPalette } from './notionTheme';\nimport {\n NATIVE_NOTION_APPEND_CHILDREN,\n NATIVE_NOTION_BACKLINKS,\n NATIVE_NOTION_BLOCK,\n NATIVE_NOTION_DELETE_BLOCK,\n NATIVE_NOTION_DUPLICATE_BLOCK,\n NATIVE_NOTION_EXPORT_MARKDOWN,\n NATIVE_NOTION_IMPORT_MARKDOWN,\n NATIVE_NOTION_PAGE_TREE,\n NATIVE_NOTION_REORDER_CHILDREN,\n NATIVE_NOTION_RESTORE_BLOCK,\n NATIVE_NOTION_TRANSFORM_BLOCK,\n NATIVE_NOTION_UPDATE_BLOCK,\n} from './notionDocuments';\nimport {\n blockIcon,\n blockTitle,\n editedLabel,\n isPageBlock,\n pageTitle,\n richTextToPlain,\n toTitleProperty,\n type NotionBlock,\n type NotionBlockTree,\n} from './notionBlocks';\nimport {\n TURN_INTO,\n emptyBlock,\n flattenModel,\n insertAfter,\n isTextType,\n modelFromTree,\n moveAmongSiblings,\n newBlockId,\n nextTypeAfter,\n patchBlock,\n previousLineId,\n removeBlock,\n restoreSubtree,\n snapshotSubtree,\n toEditorBlock,\n columnLayout,\n firstTextId,\n insertTree,\n treeInput,\n type NewBlockTree,\n type EditorBlock,\n type EditorLine,\n type EditorModel,\n type SubtreeSnapshot,\n} from './notionEditorModel';\nimport {\n applyFormatRange,\n applyFormatToAll,\n applyInlineMarkdown,\n applyPlainTextEdit,\n linkAt,\n rangeHasFormat,\n replaceRange,\n runsText,\n runsToTitleProperty,\n type RichRun,\n} from './notionRichTitle';\nimport { markdownShortcutFor } from './notionMarkdownShortcuts';\nimport { blockColorParts, textColorOf, washColorOf } from './notionRichText';\nimport { languageLabel } from './notionCodeLanguages';\nimport { ColorSheet, LanguageSheet, type ColorChoice } from './NotionBlockSheets';\nimport { PageActionsSheet, type MenuAction } from './NotionPageMenu';\nimport { pageLinkUrl } from './notionPageActions';\nimport { webOrigin } from './usePageActions';\nimport { MEDIA_TYPES, MediaBlock } from './NotionMediaBlocks';\nimport { MentionSheet } from './NotionMentionSheet';\nimport { recordRecent } from './notionRecents';\nimport { CommentsSheet, usePageComments } from './NotionCommentsSheet';\nimport { ShareSheet } from './NotionShareSheet';\nimport { HistorySheet } from './NotionHistorySheet';\n\nimport { fontFamilyOf, TextPromptDialog } from './NotionPageMenu';\nimport { pageFontPatch, pageSettingsPatch, readPageSettings, serverErrorText, wordCount } from './notionPageActions';\nimport { usePageActions, type PageMenuExtras } from './usePageActions';\nimport { useNotionWorkspace } from './useNotionWorkspace';\n\ntype Palette = NotionPalette;\n\n/** Page look from pageSettings: font family, Small text (~12% smaller, web), Lock page. */\ninterface PageLook {\n fontFamily?: string;\n small: boolean;\n locked: boolean;\n}\n\n/** Scale a text style for Small text (web: 14px vs 16px). */\nfunction scaled(style: object, small: boolean): object {\n if (!small) return style;\n const s = style as { fontSize?: number; lineHeight?: number };\n return {\n ...style,\n ...(s.fontSize ? { fontSize: Math.round(s.fontSize * 0.875) } : {}),\n ...(s.lineHeight ? { lineHeight: Math.round(s.lineHeight * 0.875) } : {}),\n };\n}\ntype SaveState = 'idle' | 'saving' | 'saved' | 'error';\ntype PendingSave = { cancel: () => void; flush: () => void };\n\nconst SAVE_DELAY_MS = 500;\nconst PAGE_EMOJIS = ['📄', '📝', '📌', '💡', '🎯', '🚀', '📚', '✅', '🗓️', '💼', '🏠', '❤️', '⭐', '🔥', '🧠', '🎨'];\n\nconst PLACEHOLDER: Record<string, string> = {\n heading_1: 'Heading 1',\n heading_2: 'Heading 2',\n heading_3: 'Heading 3',\n bulleted_list: 'List',\n numbered_list: 'List',\n todo: 'To-do',\n toggle: 'Toggle',\n quote: 'Quote',\n callout: 'Callout',\n code: 'Code',\n};\n\nconst TEXT_STYLE: Record<string, object> = {\n heading_1: { fontSize: 26, lineHeight: 32, fontWeight: '800' },\n heading_2: { fontSize: 21, lineHeight: 28, fontWeight: '700' },\n heading_3: { fontSize: 18, lineHeight: 25, fontWeight: '700' },\n};\n\nfunction saveLabelOf(save: SaveState, lastEdited: string | null | undefined): string {\n if (save === 'saving') return 'Saving…';\n if (save === 'error') return 'Not saved — check your connection';\n if (save === 'saved') return 'Saved';\n return editedLabel(lastEdited);\n}\n\nexport function NotionPageView({\n orgName,\n blockId,\n isDark,\n}: {\n orgName: string | null;\n blockId: string | null;\n isDark: boolean;\n}) {\n const palette = notionPalette(isDark);\n const navigation = useNavigation<any>();\n const client = useApolloClient();\n const insets = useSafeAreaInsets();\n\n const { data, loading, error, refetch } = useQuery<{ getBlockTree?: NotionBlockTree | null }>(\n NATIVE_NOTION_PAGE_TREE,\n {\n variables: { input: { blockId: blockId ?? '', includeChildren: true, maxDepth: 5 } },\n skip: !blockId,\n fetchPolicy: 'network-only',\n },\n );\n const tree = data?.getBlockTree ?? null;\n // The page block itself comes from getBlock, like the web editor (PageEditor.xstate): the\n // tree's root came back without its title / edit time on device, so it only feeds the body.\n const pageQuery = useQuery<{ getBlock?: NotionBlock | null }>(NATIVE_NOTION_BLOCK, {\n variables: { input: { blockId: blockId ?? '' } },\n skip: !blockId,\n fetchPolicy: 'network-only',\n });\n const page = pageQuery.data?.getBlock ?? null;\n\n const [model, setModel] = useState<EditorModel | null>(null);\n const [title, setTitle] = useState('');\n const [icon, setIcon] = useState<string | null>(null);\n const [focusedId, setFocusedId] = useState<string | null>(null);\n const [pendingFocus, setPendingFocus] = useState<string | null>(null);\n const [save, setSave] = useState<SaveState>('idle');\n const [iconPicker, setIconPicker] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n const [keyboardShown, setKeyboardShown] = useState(false);\n useEffect(() => {\n const show = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow', () =>\n setKeyboardShown(true),\n );\n const hide = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide', () =>\n setKeyboardShown(false),\n );\n return () => {\n show.remove();\n hide.remove();\n };\n }, []);\n const [pageProps, setPageProps] = useState<Record<string, unknown>>({});\n const [importOpen, setImportOpen] = useState(false);\n const [showBacklinks, setShowBacklinks] = useState(false);\n const settings = readPageSettings(pageProps);\n const look: PageLook = {\n fontFamily: fontFamilyOf(settings.font),\n small: settings.smallText,\n locked: settings.locked,\n };\n\n const modelRef = useRef<EditorModel | null>(null);\n modelRef.current = model;\n const inputs = useRef(new Map<string, TextInput | null>());\n const pending = useRef(new Map<string, PendingSave>());\n const chains = useRef(new Map<string, Promise<unknown>>());\n const savedTitles = useRef(new Map<string, string>());\n const inFlight = useRef(0);\n\n /** Load the server page (title, icon) and its tree (blocks) into the editor. */\n const applyTree = useCallback((next: NotionBlockTree, pageBlock: NotionBlock) => {\n const seededModel = modelFromTree(next, pageBlock.id);\n setModel(seededModel);\n setCollapsed(\n new Set(\n Object.values(seededModel.blocks)\n .filter((b) => b.type === 'toggle')\n .map((b) => b.id),\n ),\n );\n const t = blockTitle(pageBlock);\n setTitle(t);\n setIcon(blockIcon(pageBlock));\n setPageProps((pageBlock.properties ?? {}) as Record<string, unknown>);\n savedTitles.current.set(pageBlock.id, t);\n const remember = (node: NotionBlockTree) => {\n savedTitles.current.set(node.block.id, blockTitle(node.block));\n (node.children ?? []).forEach(remember);\n };\n (next.children ?? []).forEach(remember);\n }, []);\n\n // The server tree seeds the editor ONCE. After that the local model is the truth:\n // every mutation result is normalised into the Apollo cache and changes `tree`, and\n // re-seeding from it would drop blocks added here (they are not in the cached\n // tree's children) - the page would go blank while saying \"Saved\".\n const seeded = useRef(false);\n useEffect(() => {\n if (!tree || !page || seeded.current) return;\n seeded.current = true;\n applyTree(tree, page);\n recordRecent(page.workspaceId, { id: page.id, title: blockTitle(page), icon: blockIcon(page) });\n }, [tree, page, applyTree]);\n\n useEffect(() => {\n if (!pendingFocus) return undefined;\n const id = pendingFocus;\n const handle = setTimeout(() => {\n inputs.current.get(id)?.focus();\n setPendingFocus(null);\n }, 30);\n return () => clearTimeout(handle);\n }, [pendingFocus, model]);\n\n /** A mutation that fails loudly: GraphQL errors throw even if the client defaults to errorPolicy 'all'. */\n const write = useCallback(\n async (options: Parameters<typeof client.mutate>[0]) => {\n const res = await client.mutate({ ...options, errorPolicy: 'none' });\n if (res.errors?.length) throw new Error(res.errors[0].message);\n if (!res.data) throw new Error('The server returned no data');\n return res;\n },\n [client],\n );\n\n /** Writes that failed, in order, so Retry can send exactly those again. */\n const failed = useRef<Array<{ id: string; op: () => Promise<unknown> }>>([]);\n const [saveError, setSaveError] = useState<string | null>(null);\n\n /** Run `op` after every earlier write to the same block (create → edit → delete order). */\n const enqueue = useCallback((id: string, op: () => Promise<unknown>) => {\n inFlight.current += 1;\n setSave('saving');\n const prev = chains.current.get(id) ?? Promise.resolve();\n const next = prev\n .catch(() => undefined)\n .then(op)\n .then(\n () => {\n inFlight.current -= 1;\n if (!inFlight.current && !pending.current.size && !failed.current.length) setSave('saved');\n },\n (err) => {\n inFlight.current -= 1;\n failed.current.push({ id, op });\n setSaveError(serverErrorText(err));\n setSave('error');\n if (__DEV__) console.warn('[NotionPage] save failed', serverErrorText(err), err);\n },\n );\n chains.current.set(id, next);\n return next;\n }, []);\n\n const retryFailed = useCallback(() => {\n const again = failed.current;\n failed.current = [];\n setSaveError(null);\n again.forEach(({ id, op }) => enqueue(id, op));\n }, [enqueue]);\n\n /** Save a title: block text keeps its formatting (runs), the page title is plain. */\n const writeTitle = useCallback(\n (id: string, text: string, runs?: RichRun[]) => {\n const baseTitle = savedTitles.current.get(id) ?? '';\n savedTitles.current.set(id, text);\n const title = runs ? runsToTitleProperty(runs) : toTitleProperty(text);\n return enqueue(id, () =>\n write({\n mutation: NATIVE_NOTION_UPDATE_BLOCK,\n variables: { input: { id, properties: { title }, baseTitle } },\n }),\n );\n },\n [write, enqueue],\n );\n\n /** Debounce a title write per block. */\n const scheduleTitle = useCallback(\n (id: string, text: string, runs?: RichRun[]) => {\n pending.current.get(id)?.cancel();\n setSave('saving');\n const handle = setTimeout(() => {\n pending.current.delete(id);\n writeTitle(id, text, runs);\n }, SAVE_DELAY_MS);\n const cancel = () => {\n clearTimeout(handle);\n pending.current.delete(id);\n };\n pending.current.set(id, {\n cancel,\n flush: () => {\n cancel();\n writeTitle(id, text, runs);\n },\n });\n },\n [writeTitle],\n );\n\n // ---- Undo / redo (web ⌘Z / ⌘⇧Z): every local edit records how to reverse it ----\n type HistoryEntry = { undo: () => void; redo: () => void; key?: string; at: number };\n const undoStack = useRef<HistoryEntry[]>([]);\n const redoStack = useRef<HistoryEntry[]>([]);\n const [, setHistoryTick] = useState(0);\n /** Typing in one block within 1.5 s is one undo step (like the web). */\n const record = useCallback((entry: Omit<HistoryEntry, 'at'>) => {\n const top = undoStack.current[undoStack.current.length - 1];\n if (entry.key && top?.key === entry.key && Date.now() - top.at < 1500) {\n top.redo = entry.redo;\n top.at = Date.now();\n } else {\n undoStack.current.push({ ...entry, at: Date.now() });\n if (undoStack.current.length > 100) undoStack.current.shift();\n }\n redoStack.current = [];\n setHistoryTick((t) => t + 1);\n }, []);\n const undo = () => {\n const entry = undoStack.current.pop();\n if (!entry) return;\n entry.undo();\n redoStack.current.push(entry);\n setHistoryTick((t) => t + 1);\n };\n const redo = () => {\n const entry = redoStack.current.pop();\n if (!entry) return;\n entry.redo();\n undoStack.current.push({ ...entry, at: 0 });\n setHistoryTick((t) => t + 1);\n };\n\n /** Show and save new runs for a text block. */\n const setRuns = useCallback(\n (id: string, runs: RichRun[]) => {\n const text = runsText(runs);\n setModel((m) => (m ? patchBlock(m, id, { runs, text }) : m));\n scheduleTitle(id, text, runs);\n },\n [scheduleTitle],\n );\n\n /** Change a block's runs as one undoable step. */\n const commitRuns = useCallback(\n (id: string, before: RichRun[], after: RichRun[], key?: string) => {\n setRuns(id, after);\n record({ key, undo: () => setRuns(id, before), redo: () => setRuns(id, after) });\n },\n [record, setRuns],\n );\n\n // Leaving the page writes whatever is still waiting on the debounce, and refreshes its\n // \"Recently visited\" entry with the title / icon it has now.\n const latest = useRef({ title: '', icon: null as string | null, workspaceId: null as string | null | undefined });\n useEffect(\n () => () => {\n [...pending.current.values()].forEach((p) => p.flush());\n if (blockId && latest.current.workspaceId) {\n recordRecent(latest.current.workspaceId, {\n id: blockId,\n title: latest.current.title,\n icon: latest.current.icon,\n });\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const updateProps = useCallback(\n (id: string, properties: Record<string, unknown>) =>\n enqueue(id, () =>\n write({ mutation: NATIVE_NOTION_UPDATE_BLOCK, variables: { input: { id, properties } } }),\n ),\n [write, enqueue],\n );\n\n /** Take a block (and its subtree) out locally and on the server; returns what Undo needs. */\n const removeLocal = useCallback(\n (id: string): SubtreeSnapshot | null => {\n const m = modelRef.current;\n if (!m) return null;\n const snap = snapshotSubtree(m, id);\n pending.current.get(id)?.cancel();\n setModel((cur) => (cur ? removeBlock(cur, id) : cur));\n enqueue(id, () => write({ mutation: NATIVE_NOTION_DELETE_BLOCK, variables: { blockId: id } }));\n return snap;\n },\n [write, enqueue],\n );\n\n /** Put a removed block back (Undo of a delete / Redo of an add): restoreBlock brings its subtree. */\n const bringBack = useCallback(\n (snap: SubtreeSnapshot | null) => {\n if (!snap) return;\n setModel((cur) => (cur ? restoreSubtree(cur, snap) : cur));\n enqueue(snap.id, () => write({ mutation: NATIVE_NOTION_RESTORE_BLOCK, variables: { blockId: snap.id } }));\n },\n [write, enqueue],\n );\n\n /** New block under `parentId` after `afterId` (end when null); focuses it when it is text. */\n const addBlock = useCallback(\n (parentId: string, afterId: string | null, type: string, extra: Record<string, unknown> = {}) => {\n if (!parentId) {\n setSaveError('This page has no id yet. Pull down to reload it.');\n setSave('error');\n return '';\n }\n const id = newBlockId();\n const properties: Record<string, unknown> = {\n ...(isTextType(type) || type === 'page' ? { title: [] } : {}),\n ...(type === 'todo' ? { checked: false } : {}),\n ...extra,\n };\n const block: EditorBlock = emptyBlock(id, type, parentId, properties);\n setModel((m) => (m ? insertAfter(m, block, afterId) : m));\n savedTitles.current.set(id, '');\n if (isTextType(type)) setPendingFocus(id);\n enqueue(id, () =>\n write({\n mutation: NATIVE_NOTION_APPEND_CHILDREN,\n variables: {\n input: {\n parentId,\n ...(afterId ? { after: afterId } : {}),\n children: [{ id, type, parent: { type: 'block', id: parentId }, properties }],\n },\n },\n }),\n );\n let snap: SubtreeSnapshot | null = null;\n record({\n undo: () => {\n snap = removeLocal(id);\n },\n redo: () => bringBack(snap),\n });\n return id;\n },\n [write, enqueue, record, removeLocal, bringBack],\n );\n\n /** Change a block's type (+ properties the new type needs), undoable. */\n const turnInto = useCallback(\n (id: string, type: string, extraProps?: Record<string, unknown>, opts: { record?: boolean } = {}) => {\n const block = modelRef.current?.blocks[id];\n if (!block || block.type === type) return;\n const fromType = block.type;\n const props = { ...(type === 'todo' ? { checked: false } : {}), ...(extraProps ?? {}) };\n setModel((cur) =>\n cur ? patchBlock(cur, id, { type, properties: { ...block.properties, ...props } }) : cur,\n );\n enqueue(id, async () => {\n await write({ mutation: NATIVE_NOTION_TRANSFORM_BLOCK, variables: { blockId: id, newType: type } });\n if (Object.keys(props).length) {\n await write({\n mutation: NATIVE_NOTION_UPDATE_BLOCK,\n variables: { input: { id, properties: props } },\n });\n }\n });\n if (opts.record !== false) {\n record({\n undo: () => turnInto(id, fromType, undefined, { record: false }),\n redo: () => turnInto(id, type, extraProps, { record: false }),\n });\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [write, enqueue, record],\n );\n\n const deleteLine = useCallback(\n (id: string) => {\n const m = modelRef.current;\n if (!m) return;\n const prev = previousLineId(m, id);\n const snap = removeLocal(id);\n if (prev) setPendingFocus(prev);\n else setFocusedId(null);\n record({ undo: () => bringBack(snap), redo: () => removeLocal(id) });\n },\n [record, removeLocal, bringBack],\n );\n\n const openPage = useCallback(\n (id: string) => navigation.dispatch(StackActions.push('MainStack.NotionPage', { orgName, blockId: id })),\n [navigation, orgName],\n );\n\n // ---- page-level -------------------------------------------------------\n\n const onTitle = (text: string) => {\n setTitle(text);\n if (blockId) scheduleTitle(blockId, text);\n };\n\n const pickIcon = (emoji: string | null) => {\n setIconPicker(false);\n setIcon(emoji);\n if (blockId) updateProps(blockId, { icon: emoji ? { type: 'emoji', emoji } : null });\n };\n\n const notion = useNotionWorkspace();\n const menuExtras = useRef<() => PageMenuExtras>(() => ({}));\n const pageActions = usePageActions({\n notion,\n palette,\n onOpenPage: openPage,\n onTrashed: () => navigation.goBack(),\n extrasFor: () => menuExtras.current(),\n onRenamed: (id, newTitle) => {\n if (id !== blockId) return;\n pending.current.get(id)?.cancel();\n savedTitles.current.set(id, newTitle);\n setTitle(newTitle);\n },\n });\n const backlinksQuery = useQuery<{ getBacklinks?: NotionBlock[] | null }>(NATIVE_NOTION_BACKLINKS, {\n variables: { blockId: blockId ?? '', limit: 50 },\n skip: !blockId,\n fetchPolicy: 'cache-and-network',\n });\n const backlinks = (backlinksQuery.data?.getBacklinks ?? []).filter((b) => !b.inTrash && b.id !== blockId);\n\n /** Page ••• settings write `properties.pageSettings` (the server merges it; title/icon untouched). */\n const pagePropsRef = useRef(pageProps);\n pagePropsRef.current = pageProps;\n const patchPage = (patch: Record<string, unknown>) => {\n if (!blockId) return;\n pagePropsRef.current = { ...pagePropsRef.current, ...patch };\n setPageProps(pagePropsRef.current);\n updateProps(blockId, patch);\n };\n\n const exportMarkdown = async () => {\n if (!blockId) return;\n try {\n const res = await client.query<{ exportNotionPageMarkdown?: string | null }>({\n query: NATIVE_NOTION_EXPORT_MARKDOWN,\n variables: { blockId },\n fetchPolicy: 'network-only',\n });\n const md = res.data?.exportNotionPageMarkdown ?? '';\n await Share.share({ title: title.trim() || 'Untitled', message: md || `# ${title.trim() || 'Untitled'}` });\n } catch (err) {\n pageActions.showToast({ message: `Couldn't export. ${err instanceof Error ? err.message : ''}`.trim() });\n }\n };\n\n const importMarkdown = async (markdown: string) => {\n if (!blockId) return;\n await write({ mutation: NATIVE_NOTION_IMPORT_MARKDOWN, variables: { parentBlockId: blockId, markdown } });\n // Imported blocks come from the server: reload the body once nothing local is pending.\n const [res, pageRes] = await Promise.all([refetch(), pageQuery.refetch()]);\n const next = res.data?.getBlockTree;\n const nextPage = pageRes.data?.getBlock;\n if (next && nextPage && !pending.current.size && !inFlight.current) applyTree(next, nextPage);\n pageActions.showToast({ message: 'Imported' });\n };\n\n latest.current = { title, icon, workspaceId: page?.workspaceId };\n\n // Yantra AI on this page (web page menu AI actions + the header \"Ask AI about this page\").\n const askAi = useNotionAskAi({\n orgName,\n workspace: page?.workspaceId ? { id: page.workspaceId } : null,\n page: page ? { id: page.id, title: title.trim() || 'Untitled' } : null,\n palette,\n });\n\n // Rebuilt every render: the open sheet shows the current settings and word count.\n menuExtras.current = () => {\n const words = wordCount(title, modelRef.current);\n return {\n subtitle: page ? editedLabel(page.lastEditedTime) || undefined : undefined,\n pageSettings: {\n settings,\n onToggle: (key) => patchPage(pageSettingsPatch(pagePropsRef.current, key)),\n onFont: (font) => patchPage(pageFontPatch(pagePropsRef.current, font)),\n footer: `${words} ${words === 1 ? 'word' : 'words'}`,\n },\n groups: [\n [\n {\n key: 'ai-summarize',\n label: 'Summarize this page',\n icon: 'sparkles-outline',\n onPress: () => askAi.run('summarize'),\n },\n {\n key: 'ai-continue',\n label: 'Continue writing',\n icon: 'create-outline',\n onPress: () => askAi.run('continueWriting'),\n },\n {\n key: 'ai-actions',\n label: 'Find action items',\n icon: 'checkbox-outline',\n onPress: () => askAi.run('actionItems'),\n },\n {\n key: 'ai-ask',\n label: 'Ask about this page…',\n icon: 'chatbubble-ellipses-outline',\n onPress: () => askAi.run('askAbout'),\n },\n ],\n [\n { key: 'export', label: 'Export as Markdown…', icon: 'share-outline', onPress: exportMarkdown },\n {\n key: 'history',\n label: 'Page history',\n icon: 'time-outline',\n onPress: () => setHistoryOpen(true),\n },\n {\n key: 'import',\n label: 'Import Markdown…',\n icon: 'download-outline',\n onPress: () => setImportOpen(true),\n },\n ],\n ],\n };\n };\n\n const openPageMenu = () => {\n if (!page) return;\n Keyboard.dismiss();\n pageActions.open({ ...page, properties: { ...pageProps, title: toTitleProperty(title) } });\n };\n\n // ---- blocks -----------------------------------------------------------\n\n /** Selection per block (formatting applies to it; collapsed = the whole block). */\n const selections = useRef(new Map<string, { start: number; end: number }>());\n\n const onChangeText = (id: string, text: string) => {\n const block = modelRef.current?.blocks[id];\n if (!block) return;\n const before = block.runs;\n // \"/\" on an empty line opens the insert menu for this line (web slash menu).\n if (text === '/' && !block.text && block.type !== 'code') {\n setInsertFor({ mode: 'replace', id });\n return;\n }\n // \"@\" typed at a word start opens the mention picker (web MentionPicker).\n if (block.type !== 'code' && text.length === block.text.length + 1) {\n let at = 0;\n while (at < block.text.length && text[at] === block.text[at]) at += 1;\n if (\n text[at] === '@' &&\n (at === 0 || /\\s/.test(text[at - 1])) &&\n text.slice(at + 1) === block.text.slice(at)\n ) {\n commitRuns(id, before, applyPlainTextEdit(before, text), `text:${id}`);\n Keyboard.dismiss();\n setMentionFor({ id, at });\n return;\n }\n }\n if (block.type !== 'code') {\n // Markdown block shortcuts typed at the start, then Space (web markdownShortcuts).\n const sp = text.indexOf(' ');\n if (\n sp > 0 &&\n text.length === block.text.length + 1 &&\n text.slice(0, sp) === block.text.slice(0, sp) &&\n text.slice(sp + 1) === block.text.slice(sp)\n ) {\n const shortcut = markdownShortcutFor(text.slice(0, sp), block.type);\n if (shortcut) {\n setRuns(id, applyPlainTextEdit(before, text.slice(sp + 1)));\n turnInto(id, shortcut.type, shortcut.properties);\n return;\n }\n }\n // ``` -> code, --- / *** / ___ -> divider (no Space needed, web handleDraftTextChange).\n if (text === '```') {\n setRuns(id, []);\n turnInto(id, 'code');\n return;\n }\n if (\n (text === '---' || text === '***' || text === '___') &&\n (block.type === 'paragraph' || block.type === 'text')\n ) {\n setRuns(id, []);\n turnInto(id, 'divider');\n addBlock(block.parentId, id, 'paragraph');\n return;\n }\n }\n let runs = applyPlainTextEdit(before, text);\n if (block.type !== 'code') {\n // Inline **bold**, *italic*, `code`, ~~strike~~ right before the caret.\n let suffix = 0;\n const old = block.text;\n while (\n suffix < old.length &&\n suffix < text.length &&\n old[old.length - 1 - suffix] === text[text.length - 1 - suffix]\n ) {\n suffix += 1;\n }\n const md = applyInlineMarkdown(runs, text.length - suffix);\n if (md) runs = md.runs;\n }\n commitRuns(id, before, runs, `text:${id}`);\n };\n\n // ---- format bar ---------------------------------------------------------\n const [colorFor, setColorFor] = useState<{ mode: 'inline' | 'block'; id: string } | null>(null);\n const [linkFor, setLinkFor] = useState<{ id: string; start: number; end: number; current: string } | null>(null);\n const [languageFor, setLanguageFor] = useState<string | null>(null);\n const [blockMenuFor, setBlockMenuFor] = useState<string | null>(null);\n const [insertFor, setInsertFor] = useState<{ mode: 'after' | 'replace'; id: string | null } | null>(null);\n const [mentionFor, setMentionFor] = useState<{ id: string; at: number } | null>(null);\n const [captionFor, setCaptionFor] = useState<string | null>(null);\n const [commentsFor, setCommentsFor] = useState<{ blockId: string | null } | null>(null);\n const [shareOpen, setShareOpen] = useState(false);\n const [historyOpen, setHistoryOpen] = useState(false);\n const comments = usePageComments(blockId);\n const openComments = [...comments.openCounts.values()].reduce((n, c) => n + c, 0);\n\n /** Insert a nested block tree (columns) after `afterId`; one appendChildren, undoable. */\n const addTree = (tree: NewBlockTree, parentId: string, afterId: string | null) => {\n setModel((m) => (m ? insertTree(m, tree, parentId, afterId) : m));\n enqueue(tree.id, () =>\n write({\n mutation: NATIVE_NOTION_APPEND_CHILDREN,\n variables: {\n input: { parentId, ...(afterId ? { after: afterId } : {}), children: [treeInput(tree, parentId)] },\n },\n }),\n );\n const focus = firstTextId(tree);\n if (focus) setPendingFocus(focus);\n let snap: SubtreeSnapshot | null = null;\n record({\n undo: () => {\n snap = removeLocal(tree.id);\n },\n redo: () => bringBack(snap),\n });\n };\n\n /** The web slash menu's blocks (Basic types are on the toolbar's turn-into row). */\n const insertGroups = (target: { mode: 'after' | 'replace'; id: string | null }): MenuAction[][] => {\n const m = modelRef.current;\n if (!m) return [];\n const anchor = target.id ? m.blocks[target.id] : null;\n const parentId = anchor?.parentId ?? m.rootId;\n const put =\n (type: string, props: Record<string, unknown> = {}) =>\n () => {\n if (type === 'page') {\n addSubPage();\n return;\n }\n // A database is its own block (opens in the database view), never a turned line.\n if (target.mode === 'replace' && anchor && !anchor.text && type !== 'database') {\n setRuns(anchor.id, []);\n turnInto(anchor.id, type, props);\n if (!isTextType(type)) setFocusedId(null);\n return;\n }\n addBlock(parentId, anchor?.id ?? lastTopId(m), type, props);\n };\n const columns = (n: number) => () => addTree(columnLayout(n), parentId, anchor?.id ?? lastTopId(m));\n return [\n [\n { key: 'image', label: 'Image', icon: 'image-outline', onPress: put('image') },\n { key: 'video', label: 'Video', icon: 'videocam-outline', onPress: put('video') },\n { key: 'audio', label: 'Audio', icon: 'musical-notes-outline', onPress: put('audio') },\n { key: 'file', label: 'File', icon: 'document-attach-outline', onPress: put('file') },\n { key: 'bookmark', label: 'Bookmark', icon: 'bookmark-outline', onPress: put('bookmark') },\n { key: 'embed', label: 'Embed', icon: 'globe-outline', onPress: put('embed', { embedType: 'url' }) },\n ],\n [\n {\n key: 'table',\n label: 'Table',\n icon: 'grid-outline',\n onPress: put('table', {\n rows: [\n ['', ''],\n ['', ''],\n ],\n hasHeaderRow: false,\n }),\n },\n { key: 'col2', label: '2 columns', icon: 'pause-outline', onPress: columns(2) },\n { key: 'col3', label: '3 columns', icon: 'reorder-three-outline', onPress: columns(3) },\n {\n key: 'equation',\n label: 'Block equation',\n icon: 'calculator-outline',\n onPress: put('equation', { expression: '' }),\n },\n { key: 'toc', label: 'Table of contents', icon: 'list-outline', onPress: put('table_of_contents') },\n { key: 'divider', label: 'Divider', icon: 'remove-outline', onPress: put('divider') },\n { key: 'page', label: 'Sub-page', icon: 'document-text-outline', onPress: put('page') },\n {\n key: 'database',\n label: 'Database',\n icon: 'server-outline',\n onPress: put('database', NEW_DATABASE_PROPERTIES),\n },\n ],\n [\n { key: 'todo', label: 'To-do list', icon: 'checkbox-outline', onPress: put('todo') },\n { key: 'toggle', label: 'Toggle list', icon: 'caret-forward-outline', onPress: put('toggle') },\n {\n key: 'callout',\n label: 'Callout',\n icon: 'bulb-outline',\n onPress: put('callout', { icon: { emoji: '💡' } }),\n },\n { key: 'quote', label: 'Quote', icon: 'chatbox-ellipses-outline', onPress: put('quote') },\n { key: 'code', label: 'Code', icon: 'code-slash-outline', onPress: put('code') },\n ],\n ];\n };\n\n const insertMention = (run: RichRun) => {\n const target = mentionFor;\n const block = target ? modelRef.current?.blocks[target.id] : null;\n if (!target || !block) return;\n const runs = replaceRange(block.runs, target.at, target.at + 1, [run, { content: ' ' }]);\n commitRuns(target.id, block.runs, runs);\n setPendingFocus(target.id);\n };\n\n /** Names already mentioned on this page (offered under People, like the web). */\n const mentionedPeople = (): string[] => {\n const out = new Set<string>();\n Object.values(modelRef.current?.blocks ?? {}).forEach((b) =>\n b.runs.forEach((r) => {\n if (r.mention?.type === 'user' && r.mention.name) out.add(r.mention.name);\n }),\n );\n return [...out];\n };\n\n const rangeOf = (id: string, block: EditorBlock) => {\n const sel = selections.current.get(id);\n const ranged = !!sel && sel.end > sel.start;\n return ranged ? { start: sel.start, end: sel.end, ranged } : { start: 0, end: block.text.length, ranged };\n };\n\n /** Bold / italic / underline / strikethrough / code on the selection (or the whole block). */\n const toggleMark = (key: 'bold' | 'italic' | 'underline' | 'strikethrough' | 'code') => {\n const id = focusedId;\n const block = id ? modelRef.current?.blocks[id] : null;\n if (!id || !block || !block.text) return;\n const r = rangeOf(id, block);\n const on = !rangeHasFormat(block.runs, r.start, r.end, key);\n const runs = r.ranged\n ? applyFormatRange(block.runs, r.start, r.end, { [key]: on })\n : applyFormatToAll(block.runs, { [key]: on });\n commitRuns(id, block.runs, runs);\n };\n\n const pickColor = (choice: ColorChoice) => {\n const target = colorFor;\n const block = target ? modelRef.current?.blocks[target.id] : null;\n if (!target || !block) return;\n if (target.mode === 'inline') {\n const r = rangeOf(target.id, block);\n const update = choice.kind === 'text' ? { color: choice.value } : { highlight: choice.value };\n const runs = r.ranged\n ? applyFormatRange(block.runs, r.start, r.end, update)\n : applyFormatToAll(block.runs, update);\n commitRuns(target.id, block.runs, runs);\n return;\n }\n // Whole block: `properties.color` = 'red' | 'red_background' | null (web block colour).\n const value = choice.value\n ? choice.kind === 'background'\n ? `${choice.value}_background`\n : choice.value\n : null;\n setBlockProps(target.id, { color: value });\n };\n\n /** Patch one block's properties locally + on the server, undoable. */\n const setBlockProps = (id: string, patch: Record<string, unknown>, opts: { record?: boolean } = {}) => {\n const block = modelRef.current?.blocks[id];\n if (!block) return;\n const beforeProps: Record<string, unknown> = {};\n Object.keys(patch).forEach((k) => {\n beforeProps[k] = block.properties[k] ?? null;\n });\n setModel((m) => (m ? patchBlock(m, id, { properties: { ...block.properties, ...patch } }) : m));\n updateProps(id, patch);\n if (opts.record !== false) {\n record({\n undo: () => setBlockProps(id, beforeProps, { record: false }),\n redo: () => setBlockProps(id, patch, { record: false }),\n });\n }\n };\n\n const openLink = () => {\n const id = focusedId;\n const block = id ? modelRef.current?.blocks[id] : null;\n if (!id || !block || !block.text) return;\n const r = rangeOf(id, block);\n setLinkFor({ id, start: r.start, end: r.end, current: linkAt(block.runs, r.start, r.end) ?? '' });\n };\n\n const applyLink = (url: string) => {\n const target = linkFor;\n const block = target ? modelRef.current?.blocks[target.id] : null;\n if (!target || !block) return;\n const href = url.trim() ? (/^[a-z]+:/i.test(url.trim()) ? url.trim() : `https://${url.trim()}`) : null;\n const runs =\n target.end > target.start\n ? applyFormatRange(block.runs, target.start, target.end, { href })\n : applyFormatToAll(block.runs, { href });\n commitRuns(target.id, block.runs, runs);\n };\n\n // ---- block menu ---------------------------------------------------------\n const duplicateLine = (id: string) => {\n const block = modelRef.current?.blocks[id];\n if (!block) return;\n enqueue(id, async () => {\n const res = await write({\n mutation: NATIVE_NOTION_DUPLICATE_BLOCK,\n variables: { blockId: id, includeChildren: true },\n });\n const copy = (res.data as { duplicateBlock?: NotionBlock } | null)?.duplicateBlock;\n if (!copy?.id) return;\n setModel((m) => (m ? insertAfter(m, toEditorBlock(copy, block.parentId), id) : m));\n savedTitles.current.set(copy.id, blockTitle(copy));\n let snap: SubtreeSnapshot | null = null;\n record({\n undo: () => {\n snap = removeLocal(copy.id);\n },\n redo: () => bringBack(snap),\n });\n });\n };\n\n const moveLine = (id: string, direction: -1 | 1, opts: { record?: boolean } = {}) => {\n const m = modelRef.current;\n if (!m) return;\n const moved = moveAmongSiblings(m, id, direction);\n if (!moved) return;\n setModel(moved.model);\n enqueue(moved.parentId, () =>\n write({\n mutation: NATIVE_NOTION_REORDER_CHILDREN,\n variables: { blockId: moved.parentId, childIds: moved.order },\n }),\n );\n if (opts.record !== false) {\n record({\n undo: () => moveLine(id, direction === 1 ? -1 : 1, { record: false }),\n redo: () => moveLine(id, direction, { record: false }),\n });\n }\n };\n\n const blockMenuGroups = (id: string): MenuAction[][] => {\n const block = modelRef.current?.blocks[id];\n if (!block) return [];\n const colorable = isTextType(block.type) && block.type !== 'code';\n return [\n [\n ...(colorable\n ? [\n {\n key: 'color',\n label: 'Color…',\n icon: 'color-palette-outline' as const,\n onPress: () => setColorFor({ mode: 'block', id }),\n },\n ]\n : []),\n ...(block.type === 'code'\n ? [\n {\n key: 'language',\n label: 'Language…',\n icon: 'code-slash-outline' as const,\n detail: languageLabel(block.properties.language),\n onPress: () => setLanguageFor(id),\n },\n ]\n : []),\n {\n key: 'comment',\n label: 'Comment',\n icon: 'chatbubble-outline',\n onPress: () => setCommentsFor({ blockId: id }),\n },\n { key: 'duplicate', label: 'Duplicate', icon: 'copy-outline', onPress: () => duplicateLine(id) },\n { key: 'up', label: 'Move up', icon: 'arrow-up', onPress: () => moveLine(id, -1) },\n { key: 'down', label: 'Move down', icon: 'arrow-down', onPress: () => moveLine(id, 1) },\n {\n key: 'link',\n label: 'Copy link to block',\n icon: 'link-outline',\n onPress: () => {\n if (!blockId) return;\n Clipboard.setString(`${pageLinkUrl(webOrigin(), blockId)}?block=${encodeURIComponent(id)}`);\n pageActions.showToast({ message: 'Link copied' });\n },\n },\n ],\n [\n {\n key: 'delete',\n label: 'Delete',\n icon: 'trash-outline',\n destructive: true,\n onPress: () => deleteLine(id),\n },\n ],\n ];\n };\n\n // ---- toggles ------------------------------------------------------------\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set());\n const toggleCollapsed = (id: string) =>\n setCollapsed((cur) => {\n const next = new Set(cur);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n\n const onSubmit = (line: EditorLine) => {\n const { block } = line;\n const m = modelRef.current;\n if (\n block.type === 'toggle' &&\n m &&\n !collapsed.has(block.id) &&\n !(m.children[block.id] ?? []).length &&\n block.text\n ) {\n addBlock(block.id, null, 'paragraph');\n return;\n }\n // Return on an empty list item ends the list (Notion behaviour).\n if (!block.text && block.type !== 'paragraph' && nextTypeAfter(block.type) === block.type) {\n turnInto(block.id, 'paragraph');\n return;\n }\n addBlock(block.parentId, block.id, nextTypeAfter(block.type));\n };\n\n const onBackspace = (line: EditorLine) => {\n const { block } = line;\n if (block.text) return;\n // First Backspace turns a styled empty block back into text, the next removes it.\n if (block.type !== 'paragraph' && block.type !== 'text') turnInto(block.id, 'paragraph');\n else deleteLine(block.id);\n };\n\n const toggleTodo = (block: EditorBlock) => setBlockProps(block.id, { checked: block.properties.checked !== true });\n\n const addSubPage = () => {\n const m = modelRef.current;\n if (!m) return;\n const anchor = focusedId ? m.blocks[focusedId] : null;\n const id = addBlock(anchor?.parentId ?? m.rootId, anchor?.id ?? null, 'page');\n Keyboard.dismiss();\n // Open once the create has landed so the new editor finds the page.\n chains.current.get(id)?.then(() => openPage(id));\n };\n\n const appendAtEnd = () => {\n const m = modelRef.current;\n if (!m) return;\n const top = m.children[m.rootId] ?? [];\n const last = top.length ? m.blocks[top[top.length - 1]] : null;\n if (last && isTextType(last.type) && !last.text) setPendingFocus(last.id);\n else addBlock(m.rootId, null, 'paragraph');\n };\n\n const lines = useMemo(() => (model ? flattenModel(model, collapsed) : []), [model, collapsed]);\n const headings = useMemo(\n () =>\n lines\n .filter((l) => l.block.type.startsWith('heading_') && l.block.text.trim())\n .map((l) => ({ id: l.block.id, text: l.block.text.trim(), level: Number(l.block.type.slice(-1)) })),\n [lines],\n );\n const focused = focusedId && model ? (model.blocks[focusedId] ?? null) : null;\n\n if (!model || !tree || !page) {\n return (\n <View style={[styles.center, { backgroundColor: palette.card }]}>\n {loading || pageQuery.loading || !blockId ? (\n <ActivityIndicator color={palette.primary} />\n ) : (\n <>\n <Text\n style={[\n styles.muted,\n { color: error || pageQuery.error ? palette.danger : palette.textMuted },\n ]}\n >\n {error || pageQuery.error ? \"Couldn't load this page.\" : 'This page was not found.'}\n </Text>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n refetch();\n pageQuery.refetch();\n }}\n style={styles.retry}\n >\n <Text style={{ color: palette.primary, fontWeight: '600' }}>Try again</Text>\n </Pressable>\n </>\n )}\n </View>\n );\n }\n\n return (\n <KeyboardAvoidingView\n style={[styles.flex, { backgroundColor: palette.card }]}\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n keyboardVerticalOffset={Platform.OS === 'ios' ? insets.top + 56 : 0}\n >\n <ScrollView\n style={styles.flex}\n contentContainerStyle={styles.content}\n keyboardShouldPersistTaps=\"handled\"\n refreshControl={\n <RefreshControl\n refreshing={refreshing}\n onRefresh={async () => {\n setRefreshing(true);\n try {\n const [res, pageRes] = await Promise.all([refetch(), pageQuery.refetch()]);\n const next = res.data?.getBlockTree;\n const nextPage = pageRes.data?.getBlock;\n if (next && nextPage && !pending.current.size && !inFlight.current) {\n applyTree(next, nextPage);\n }\n } finally {\n setRefreshing(false);\n }\n }}\n />\n }\n >\n <View style={styles.pageActions}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={icon ? 'Change icon' : 'Add icon'}\n onPress={() => !settings.locked && setIconPicker((v) => !v)}\n style={({ pressed }) => [styles.pageAction, pressed && { backgroundColor: palette.pressed }]}\n >\n {icon ? (\n <Text style={styles.pageEmoji}>{icon}</Text>\n ) : (\n <>\n <Ionicons name=\"happy-outline\" size={16} color={palette.textMuted} />\n <Text style={[styles.pageActionLabel, { color: palette.textMuted }]}>Add icon</Text>\n </>\n )}\n </Pressable>\n <View style={styles.flex} />\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Ask AI about this page\"\n onPress={() => {\n Keyboard.dismiss();\n askAi.run('askAbout');\n }}\n hitSlop={8}\n style={({ pressed }) => [styles.pageAction, pressed && { backgroundColor: palette.pressed }]}\n >\n <Ionicons name=\"sparkles\" size={17} color={palette.primary} />\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Share\"\n onPress={() => {\n Keyboard.dismiss();\n setShareOpen(true);\n }}\n hitSlop={8}\n style={({ pressed }) => [styles.pageAction, pressed && { backgroundColor: palette.pressed }]}\n >\n <Text style={[styles.shareLabel, { color: palette.text }]}>Share</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={openComments ? `Comments, ${openComments} open` : 'Comments'}\n onPress={() => {\n Keyboard.dismiss();\n setCommentsFor({ blockId: null });\n }}\n hitSlop={8}\n style={({ pressed }) => [styles.pageAction, pressed && { backgroundColor: palette.pressed }]}\n >\n <Ionicons name=\"chatbubble-outline\" size={18} color={palette.textMuted} />\n {openComments ? (\n <Text style={[styles.commentCount, { color: palette.textMuted }]}>{openComments}</Text>\n ) : null}\n </Pressable>\n {blockId ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n notion.favoriteIds.includes(blockId) ? 'Remove from Favorites' : 'Add to Favorites'\n }\n onPress={() =>\n notion\n .toggleFavoritePage(blockId)\n .catch(() => pageActions.showToast({ message: \"Couldn't update Favorites\" }))\n }\n hitSlop={8}\n style={({ pressed }) => [\n styles.pageAction,\n pressed && { backgroundColor: palette.pressed },\n ]}\n >\n <Ionicons\n name={notion.favoriteIds.includes(blockId) ? 'star' : 'star-outline'}\n size={19}\n color={notion.favoriteIds.includes(blockId) ? '#eab308' : palette.textMuted}\n />\n </Pressable>\n ) : null}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Page actions\"\n onPress={openPageMenu}\n hitSlop={8}\n style={({ pressed }) => [styles.pageAction, pressed && { backgroundColor: palette.pressed }]}\n >\n <Ionicons name=\"ellipsis-horizontal\" size={20} color={palette.textMuted} />\n </Pressable>\n </View>\n {settings.locked ? (\n <View style={[styles.lockBanner, { backgroundColor: palette.fill }]}>\n <Ionicons name=\"lock-closed\" size={15} color={palette.textMuted} />\n <Text style={[styles.lockText, { color: palette.textMuted }]}>This page is locked</Text>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => patchPage(pageSettingsPatch(pageProps, 'locked', false))}\n hitSlop={8}\n >\n <Text style={[styles.lockUnlock, { color: palette.primary }]}>Unlock</Text>\n </Pressable>\n </View>\n ) : null}\n {iconPicker ? (\n <View style={[styles.emojiGrid, { backgroundColor: palette.fill }]}>\n {PAGE_EMOJIS.map((e) => (\n <Pressable\n key={e}\n accessibilityRole=\"button\"\n onPress={() => pickIcon(e)}\n style={styles.emojiCell}\n >\n <Text style={styles.emoji}>{e}</Text>\n </Pressable>\n ))}\n {icon ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => pickIcon(null)}\n style={styles.emojiRemove}\n >\n <Text style={{ color: palette.danger, fontWeight: '600' }}>Remove icon</Text>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n\n <TextInput\n value={title}\n onChangeText={onTitle}\n placeholder=\"Untitled\"\n placeholderTextColor={palette.textFaint}\n multiline\n scrollEnabled={false}\n submitBehavior=\"submit\"\n returnKeyType=\"next\"\n onSubmitEditing={() => {\n const first = lines.find((l) => isTextType(l.block.type));\n if (first) setPendingFocus(first.block.id);\n else addBlock(model.rootId, null, 'paragraph');\n }}\n onFocus={() => setFocusedId(null)}\n editable={!settings.locked}\n style={[scaled(styles.title, look.small), { color: palette.text, fontFamily: look.fontFamily }]}\n />\n <Text style={[styles.meta, { color: save === 'error' ? palette.danger : palette.textMuted }]}>\n {save === 'error' && saveError\n ? `Not saved — ${saveError}`\n : saveLabelOf(save, page.lastEditedTime)}\n </Text>\n {save === 'error' ? (\n <Pressable accessibilityRole=\"button\" onPress={retryFailed} hitSlop={8} style={styles.retryRow}>\n <Ionicons name=\"refresh\" size={14} color={palette.primary} />\n <Text style={[styles.retryLabel, { color: palette.primary }]}>Retry</Text>\n </Pressable>\n ) : null}\n {pageKindOf(pageProps) === 'agent' ? (\n <NotionAgentPanel\n pageId={page.id}\n workspaceId={page.workspaceId ?? null}\n name={title.trim()}\n properties={pageProps}\n instructions={() => {\n const m = modelRef.current;\n if (!m) return '';\n return blocksToInstructions(\n (m.children[m.rootId] ?? []).map((id) => {\n const b = m.blocks[id];\n return {\n id,\n type: b?.type,\n properties: { ...b?.properties, title: [{ plainText: b?.text ?? '' }] },\n };\n }),\n );\n }}\n isDark={isDark}\n palette={palette}\n onPatch={patchPage}\n onRunInChat={(prompt) => askAi.startRawChat(prompt, `Run: ${title.trim() || 'Untitled agent'}`)}\n onToast={(message) => pageActions.showToast({ message })}\n />\n ) : null}\n {page.type === 'database_row' && page.parent?.type === 'database' && page.parent.id ? (\n <RowPropertiesPanel\n rowId={page.id}\n databaseId={page.parent.id}\n properties={pageProps}\n meta={{ createdTime: page.createdTime, lastEditedTime: page.lastEditedTime }}\n isDark={isDark}\n palette={palette}\n onError={(message) => pageActions.showToast({ message: `Couldn't save. ${message}` })}\n />\n ) : null}\n {backlinks.length ? (\n <View style={styles.backlinks}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: showBacklinks }}\n onPress={() => setShowBacklinks((v) => !v)}\n hitSlop={6}\n style={styles.backlinksToggle}\n >\n <Ionicons name=\"link-outline\" size={14} color={palette.textMuted} />\n <Text style={[styles.backlinksLabel, { color: palette.textMuted }]}>\n {`${backlinks.length} ${backlinks.length === 1 ? 'backlink' : 'backlinks'}`}\n </Text>\n <Ionicons\n name={showBacklinks ? 'chevron-up' : 'chevron-down'}\n size={13}\n color={palette.textMuted}\n />\n </Pressable>\n {showBacklinks\n ? backlinks.map((b) => (\n <Pressable\n key={b.id}\n accessibilityRole=\"link\"\n onPress={() => openPage(b.rootPageId || b.id)}\n style={styles.backlinkRow}\n >\n <Text style={styles.inlineEmoji}>{blockIcon(b) ?? '📄'}</Text>\n <Text\n numberOfLines={1}\n style={[\n styles.text,\n styles.link,\n { color: palette.text, borderBottomColor: palette.hairline },\n ]}\n >\n {pageTitle(b)}\n </Text>\n </Pressable>\n ))\n : null}\n </View>\n ) : null}\n\n <View style={styles.body}>\n {lines.map((line) => (\n <BlockLine\n key={line.block.id}\n line={line}\n palette={palette}\n focused={line.block.id === focusedId}\n registerInput={(input) => inputs.current.set(line.block.id, input)}\n onFocus={() => setFocusedId(line.block.id)}\n onChangeText={(t) => onChangeText(line.block.id, t)}\n onSubmit={() => onSubmit(line)}\n onBackspace={() => onBackspace(line)}\n onToggleTodo={() => toggleTodo(line.block)}\n onOpenPage={openPage}\n onDelete={() => deleteLine(line.block.id)}\n onSelection={(sel) => selections.current.set(line.block.id, sel)}\n onMenu={() => {\n Keyboard.dismiss();\n setBlockMenuFor(line.block.id);\n }}\n collapsed={collapsed.has(line.block.id)}\n onToggleCollapsed={() => toggleCollapsed(line.block.id)}\n onLanguage={() => setLanguageFor(line.block.id)}\n onPatch={(patch) => setBlockProps(line.block.id, patch)}\n onCaption={() => setCaptionFor(line.block.id)}\n headings={headings}\n onJump={(id) => setPendingFocus(id)}\n commentCount={comments.openCounts.get(line.block.id) ?? 0}\n onComments={() => setCommentsFor({ blockId: line.block.id })}\n isDark={isDark}\n look={look}\n />\n ))}\n </View>\n\n {/* Tap below the last block to keep writing (Notion's click-to-append area). */}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Add a block\"\n onPress={settings.locked ? undefined : appendAtEnd}\n disabled={settings.locked}\n style={styles.appendArea}\n >\n {lines.length === 0 && !settings.locked ? (\n <Text style={[styles.startHint, { color: palette.textFaint }]}>Tap here to start writing…</Text>\n ) : null}\n </Pressable>\n </ScrollView>\n\n {focused && !settings.locked ? (\n <EditorToolbar\n palette={palette}\n bottomInset={keyboardShown ? 0 : insets.bottom}\n block={focused}\n onTurnInto={(type) => turnInto(focused.id, type)}\n onDivider={() => {\n addBlock(focused.parentId, focused.id, 'divider');\n }}\n onSubPage={addSubPage}\n onDelete={() => deleteLine(focused.id)}\n onMark={toggleMark}\n onColor={() => setColorFor({ mode: 'inline', id: focused.id })}\n onLink={openLink}\n onMenu={() => setBlockMenuFor(focused.id)}\n onInsert={() => {\n Keyboard.dismiss();\n setInsertFor({ mode: 'after', id: focused.id });\n }}\n canUndo={undoStack.current.length > 0}\n canRedo={redoStack.current.length > 0}\n onUndo={undo}\n onRedo={redo}\n onDone={() => {\n Keyboard.dismiss();\n setFocusedId(null);\n }}\n />\n ) : null}\n {pageActions.element}\n <PageActionsSheet\n visible={Boolean(blockMenuFor)}\n palette={palette}\n title={blockMenuFor ? blockMenuTitle(model.blocks[blockMenuFor]) : ''}\n groups={blockMenuFor ? blockMenuGroups(blockMenuFor) : []}\n onClose={() => setBlockMenuFor(null)}\n />\n {askAi.element}\n {blockId ? (\n <HistorySheet\n visible={historyOpen}\n palette={palette}\n pageId={blockId}\n createdTime={page.createdTime}\n locked={settings.locked}\n onRestored={async () => {\n // A restore rewrote the page on the server: load it again once nothing local is pending.\n const [res, pageRes] = await Promise.all([refetch(), pageQuery.refetch()]);\n const next = res.data?.getBlockTree;\n const nextPage = pageRes.data?.getBlock;\n if (next && nextPage && !pending.current.size && !inFlight.current) applyTree(next, nextPage);\n }}\n onClose={() => setHistoryOpen(false)}\n />\n ) : null}\n {blockId ? (\n <ShareSheet\n visible={shareOpen}\n palette={palette}\n pageId={blockId}\n pageTitle={title.trim() || 'Untitled'}\n onClose={() => setShareOpen(false)}\n />\n ) : null}\n {blockId ? (\n <CommentsSheet\n visible={Boolean(commentsFor)}\n palette={palette}\n pageId={blockId}\n blockId={commentsFor?.blockId ?? null}\n blockLabel={\n commentsFor?.blockId ? model.blocks[commentsFor.blockId]?.text.slice(0, 120) : undefined\n }\n onClose={() => {\n setCommentsFor(null);\n comments.refetch().catch(() => undefined);\n }}\n />\n ) : null}\n <PageActionsSheet\n visible={Boolean(insertFor)}\n palette={palette}\n title=\"Insert\"\n subtitle=\"Text styles are on the toolbar's second row\"\n groups={insertFor ? insertGroups(insertFor) : []}\n onClose={() => setInsertFor(null)}\n />\n <MentionSheet\n visible={Boolean(mentionFor)}\n palette={palette}\n pages={notion.pages}\n workspaceId={notion.workspace?.id ?? null}\n people={mentionFor ? mentionedPeople() : []}\n onPick={insertMention}\n onClose={() => setMentionFor(null)}\n />\n <TextPromptDialog\n visible={Boolean(captionFor)}\n palette={palette}\n title=\"Caption\"\n initial={captionFor ? (model.blocks[captionFor]?.text ?? '') : ''}\n placeholder=\"Write a caption\"\n confirmLabel=\"Save\"\n allowEmpty\n onClose={() => setCaptionFor(null)}\n onConfirm={(caption) => {\n const block = captionFor ? modelRef.current?.blocks[captionFor] : null;\n if (block) commitRuns(block.id, block.runs, caption.trim() ? [{ content: caption.trim() }] : []);\n }}\n />\n <ColorSheet\n visible={Boolean(colorFor)}\n palette={palette}\n isDark={isDark}\n title={colorFor?.mode === 'inline' ? 'Text color' : 'Block color'}\n currentText={colorCurrent(colorFor, model).text}\n currentBackground={colorCurrent(colorFor, model).background}\n onPick={pickColor}\n onClose={() => setColorFor(null)}\n />\n <LanguageSheet\n visible={Boolean(languageFor)}\n palette={palette}\n current={languageFor ? model.blocks[languageFor]?.properties.language : undefined}\n onPick={(language) => languageFor && setBlockProps(languageFor, { language })}\n onClose={() => setLanguageFor(null)}\n />\n <TextPromptDialog\n visible={Boolean(linkFor)}\n palette={palette}\n title={linkFor?.current ? 'Edit link' : 'Add link'}\n message={linkFor?.current ? 'Leave empty to remove the link.' : undefined}\n initial={linkFor?.current ?? ''}\n placeholder=\"https://\"\n confirmLabel=\"Save\"\n allowEmpty\n onClose={() => setLinkFor(null)}\n onConfirm={applyLink}\n />\n <TextPromptDialog\n visible={importOpen}\n palette={palette}\n title=\"Import Markdown\"\n message=\"Paste Markdown. Headings, lists, to-dos, quotes and code become blocks at the end of this page.\"\n placeholder={'# Heading\\n- item\\n- [ ] to-do'}\n confirmLabel=\"Import\"\n multiline\n onClose={() => setImportOpen(false)}\n onConfirm={importMarkdown}\n />\n </KeyboardAvoidingView>\n );\n}\n\n/** The last top-level block (insert at the end when nothing is focused). */\nfunction lastTopId(model: EditorModel): string | null {\n const top = model.children[model.rootId] ?? [];\n return top.length ? top[top.length - 1] : null;\n}\n\nfunction blockMenuTitle(block: EditorBlock | undefined): string {\n if (!block) return '';\n const label = TURN_INTO.find((t) => t.type === block.type)?.label ?? block.type.replace(/_/g, ' ');\n return block.text.trim() ? `${label} · ${block.text.trim().slice(0, 40)}` : label;\n}\n\n/** Current colours shown as selected in the colour sheet. */\nfunction colorCurrent(\n target: { mode: 'inline' | 'block'; id: string } | null,\n model: EditorModel,\n): { text?: string; background?: string } {\n const block = target ? model.blocks[target.id] : null;\n if (!target || !block) return {};\n if (target.mode === 'block') return blockColorParts(block.properties.color);\n const first = block.runs[0]?.annotations ?? {};\n return { text: (first.color as string) || '', background: (first.highlight as string) || '' };\n}\n\n/** Text style of one formatted run (web RichTextField rendering). */\nfunction runStyle(run: RichRun, palette: Palette, isDark: boolean, mono?: string) {\n const a = (run.annotations ?? {}) as Record<string, unknown>;\n const lines = [a.underline || run.href ? 'underline' : '', a.strikethrough ? 'line-through' : '']\n .filter(Boolean)\n .join(' ') as 'underline' | 'line-through' | 'underline line-through' | '';\n return {\n ...(a.bold ? { fontWeight: '700' as const } : {}),\n ...(a.italic ? { fontStyle: 'italic' as const } : {}),\n ...(lines ? { textDecorationLine: lines } : {}),\n ...(a.code ? { fontFamily: mono, backgroundColor: palette.fill, color: palette.danger } : {}),\n ...(textColorOf(a.color, isDark) ? { color: textColorOf(a.color, isDark) } : {}),\n ...(washColorOf(a.highlight, isDark) ? { backgroundColor: washColorOf(a.highlight, isDark) } : {}),\n ...(run.href ? { color: palette.primary } : {}),\n ...(run.mention ? { color: palette.primary, fontWeight: '600' as const } : {}),\n };\n}\n\nconst MONO = Platform.OS === 'ios' ? 'Menlo' : 'monospace';\n\nfunction BlockLine({\n line,\n palette,\n isDark,\n focused,\n collapsed,\n registerInput,\n onFocus,\n onChangeText,\n onSubmit,\n onBackspace,\n onToggleTodo,\n onToggleCollapsed,\n onOpenPage,\n onDelete,\n onSelection,\n onMenu,\n onLanguage,\n onPatch,\n onCaption,\n headings,\n onJump,\n commentCount,\n onComments,\n look,\n}: {\n commentCount: number;\n onComments: () => void;\n onPatch: (patch: Record<string, unknown>) => void;\n onCaption: () => void;\n headings: Array<{ id: string; text: string; level: number }>;\n onJump: (id: string) => void;\n look: PageLook;\n line: EditorLine;\n palette: Palette;\n isDark: boolean;\n focused: boolean;\n collapsed: boolean;\n registerInput: (input: TextInput | null) => void;\n onFocus: () => void;\n onChangeText: (text: string) => void;\n onSubmit: () => void;\n onBackspace: () => void;\n onToggleTodo: () => void;\n onToggleCollapsed: () => void;\n onOpenPage: (id: string) => void;\n onDelete: () => void;\n onSelection: (sel: { start: number; end: number }) => void;\n onMenu: () => void;\n onLanguage: () => void;\n}) {\n const { block, depth, number } = line;\n const indent = { marginLeft: depth * 22 };\n const menu = look.locked ? undefined : onMenu;\n\n if (isPageBlock(block)) {\n const emoji = blockIcon(block);\n return (\n <Pressable\n accessibilityRole=\"link\"\n onPress={() => onOpenPage(block.id)}\n onLongPress={menu}\n style={({ pressed }) => [\n styles.row,\n styles.linkRow,\n indent,\n pressed && { backgroundColor: palette.pressed },\n ]}\n >\n {emoji ? (\n <Text style={styles.inlineEmoji}>{emoji}</Text>\n ) : (\n <Ionicons\n name={block.type === 'database' ? 'grid-outline' : 'document-text-outline'}\n size={18}\n color={palette.textMuted}\n />\n )}\n <Text style={[styles.text, styles.link, { color: palette.text, borderBottomColor: palette.hairline }]}>\n {block.text.trim() || pageTitle({ properties: block.properties })}\n </Text>\n </Pressable>\n );\n }\n\n if (block.type === 'divider') {\n return (\n <Pressable onLongPress={menu} style={[styles.dividerHit, indent]}>\n <View style={[styles.divider, { backgroundColor: palette.hairline }]} />\n </Pressable>\n );\n }\n\n if (MEDIA_TYPES.includes(block.type)) {\n return (\n <View style={[indent, styles.mediaRow]}>\n <MediaBlock\n block={block}\n palette={palette}\n locked={look.locked}\n onPatch={onPatch}\n onCaption={onCaption}\n onMenu={menu}\n />\n </View>\n );\n }\n\n if (block.type === 'table_of_contents') {\n return (\n <Pressable onLongPress={menu} style={[indent, styles.toc, { borderLeftColor: palette.hairline }]}>\n {headings.length ? (\n headings.map((h) => (\n <Pressable key={h.id} accessibilityRole=\"link\" onPress={() => onJump(h.id)} hitSlop={4}>\n <Text\n numberOfLines={1}\n style={[styles.tocItem, { color: palette.textMuted, marginLeft: (h.level - 1) * 14 }]}\n >\n {h.text}\n </Text>\n </Pressable>\n ))\n ) : (\n <Text style={[styles.tocItem, { color: palette.textFaint }]}>\n Add headings to build a table of contents\n </Text>\n )}\n </Pressable>\n );\n }\n\n if (!isTextType(block.type)) {\n const caption = block.text || richTextToPlain(block.properties.caption) || block.type.replace(/_/g, ' ');\n return (\n <Pressable\n onLongPress={menu ?? (look.locked ? undefined : onDelete)}\n style={[styles.row, styles.unsupported, { borderColor: palette.hairline }, indent]}\n >\n <Ionicons name=\"cube-outline\" size={16} color={palette.textMuted} />\n <Text style={[styles.unsupportedText, { color: palette.textMuted }]} numberOfLines={2}>\n {caption}\n </Text>\n <Text style={[styles.webOnly, { color: palette.textFaint }]}>Web</Text>\n </Pressable>\n );\n }\n\n const checked = block.properties.checked === true;\n const colors = blockColorParts(block.properties.color);\n const blockText = textColorOf(colors.text, isDark);\n const blockWash = washColorOf(colors.background, isDark);\n let gutter: React.ReactNode = null;\n if (block.type === 'bulleted_list') {\n gutter = <Text style={[styles.text, styles.marker, { color: palette.text }]}>•</Text>;\n } else if (block.type === 'numbered_list') {\n gutter = <Text style={[styles.text, styles.marker, { color: palette.text }]}>{`${number ?? 1}.`}</Text>;\n } else if (block.type === 'todo') {\n gutter = (\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked }}\n onPress={look.locked ? undefined : onToggleTodo}\n hitSlop={8}\n style={styles.check}\n >\n <Ionicons\n name={checked ? 'checkbox' : 'square-outline'}\n size={21}\n color={checked ? palette.primary : palette.textMuted}\n />\n </Pressable>\n );\n } else if (block.type === 'toggle') {\n gutter = (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={collapsed ? 'Expand toggle' : 'Collapse toggle'}\n accessibilityState={{ expanded: !collapsed }}\n onPress={onToggleCollapsed}\n hitSlop={10}\n style={styles.caretHit}\n >\n <Ionicons name={collapsed ? 'caret-forward' : 'caret-down'} size={14} color={palette.textMuted} />\n </Pressable>\n );\n } else if (block.type === 'callout') {\n gutter = <Text style={styles.inlineEmoji}>{blockIcon({ properties: block.properties }) ?? '💡'}</Text>;\n }\n\n const baseText = [\n styles.input,\n scaled(TEXT_STYLE[block.type] ?? styles.text, look.small),\n { color: blockText ?? palette.text, fontFamily: look.fontFamily },\n block.type === 'todo' && checked && styles.done,\n block.type === 'todo' && checked && { color: palette.textMuted },\n block.type === 'code' && styles.codeText,\n ];\n\n return (\n <Pressable\n onLongPress={menu}\n delayLongPress={350}\n style={[\n styles.row,\n indent,\n block.type === 'quote' && [styles.quote, { borderLeftColor: palette.text }],\n block.type === 'callout' && [styles.callout, { backgroundColor: blockWash ?? palette.fill }],\n block.type === 'code' && [styles.code, { backgroundColor: palette.fill }],\n block.type.startsWith('heading') && styles.headingRow,\n blockWash && block.type !== 'callout' ? [styles.wash, { backgroundColor: blockWash }] : null,\n ]}\n >\n {gutter}\n <View style={styles.flex}>\n {block.type === 'code' ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Code language\"\n onPress={look.locked ? undefined : onLanguage}\n hitSlop={6}\n style={[styles.langPill, { backgroundColor: palette.card }]}\n >\n <Text style={[styles.langPillText, { color: palette.textMuted }]}>\n {languageLabel(block.properties.language)}\n </Text>\n {!look.locked ? <Ionicons name=\"chevron-down\" size={11} color={palette.textMuted} /> : null}\n </Pressable>\n ) : null}\n {/* Formatted runs are TextInput children (no `value`): bold / colour / links stay visible while editing. */}\n <TextInput\n ref={registerInput}\n onChangeText={onChangeText}\n onFocus={onFocus}\n onSelectionChange={(e) => onSelection(e.nativeEvent.selection)}\n editable={!look.locked}\n multiline\n scrollEnabled={false}\n submitBehavior={block.type === 'code' ? 'newline' : 'submit'}\n onSubmitEditing={block.type === 'code' ? undefined : onSubmit}\n onKeyPress={(e) => {\n if (e.nativeEvent.key === 'Backspace') onBackspace();\n }}\n autoCorrect={block.type !== 'code'}\n autoCapitalize={block.type === 'code' ? 'none' : 'sentences'}\n placeholder={focused ? (PLACEHOLDER[block.type] ?? 'Type something…') : PLACEHOLDER[block.type]}\n placeholderTextColor={palette.textFaint}\n style={baseText}\n textAlignVertical=\"top\"\n >\n {block.runs.map((run, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <Text key={i} style={runStyle(run, palette, isDark, MONO)}>\n {run.content}\n </Text>\n ))}\n </TextInput>\n </View>\n {commentCount ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`${commentCount} comments`}\n onPress={onComments}\n hitSlop={8}\n style={[styles.commentBubble, { backgroundColor: palette.fill }]}\n >\n <Ionicons name=\"chatbubble\" size={11} color={palette.textMuted} />\n <Text style={[styles.commentBubbleText, { color: palette.textMuted }]}>{commentCount}</Text>\n </Pressable>\n ) : null}\n </Pressable>\n );\n}\n\ntype Mark = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'code';\n\nfunction EditorToolbar({\n bottomInset,\n palette,\n block,\n onTurnInto,\n onDivider,\n onSubPage,\n onDelete,\n onDone,\n onMark,\n onColor,\n onLink,\n onMenu,\n onInsert,\n canUndo,\n canRedo,\n onUndo,\n onRedo,\n}: {\n onInsert: () => void;\n bottomInset: number;\n palette: Palette;\n block: EditorBlock;\n onTurnInto: (type: string) => void;\n onDivider: () => void;\n onSubPage: () => void;\n onDelete: () => void;\n onDone: () => void;\n onMark: (mark: Mark) => void;\n onColor: () => void;\n onLink: () => void;\n onMenu: () => void;\n canUndo: boolean;\n canRedo: boolean;\n onUndo: () => void;\n onRedo: () => void;\n}) {\n const marks: Array<{ key: Mark; label: string; style: object }> = [\n { key: 'bold', label: 'B', style: { fontWeight: '800' } },\n { key: 'italic', label: 'I', style: { fontStyle: 'italic', fontWeight: '600' } },\n { key: 'underline', label: 'U', style: { textDecorationLine: 'underline', fontWeight: '600' } },\n { key: 'strikethrough', label: 'S', style: { textDecorationLine: 'line-through', fontWeight: '600' } },\n { key: 'code', label: '</>', style: { fontFamily: MONO, fontSize: 13 } },\n ];\n const formattable = block.type !== 'code';\n const tool = (key: string, label: string, onPress: () => void, child: React.ReactNode, disabled?: boolean) => (\n <Pressable\n key={key}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n onPress={onPress}\n disabled={disabled}\n style={[styles.tool, { backgroundColor: palette.fill }, disabled && styles.toolDisabled]}\n >\n {child}\n </Pressable>\n );\n return (\n <View\n style={[\n styles.toolbar,\n { backgroundColor: palette.card, borderTopColor: palette.hairline, paddingBottom: 6 + bottomInset },\n ]}\n >\n <View style={styles.toolbarRow}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n keyboardShouldPersistTaps=\"always\"\n contentContainerStyle={styles.toolbarContent}\n >\n {tool(\n 'insert',\n 'Insert block',\n onInsert,\n <Ionicons name=\"add\" size={20} color={palette.primary} />,\n )}\n {tool(\n 'undo',\n 'Undo',\n onUndo,\n <Ionicons name=\"arrow-undo\" size={17} color={palette.text} />,\n !canUndo,\n )}\n {tool(\n 'redo',\n 'Redo',\n onRedo,\n <Ionicons name=\"arrow-redo\" size={17} color={palette.text} />,\n !canRedo,\n )}\n {formattable\n ? marks.map((m) =>\n tool(\n m.key,\n m.key,\n () => onMark(m.key),\n <Text style={[styles.toolLabel, { color: palette.text }, m.style]}>{m.label}</Text>,\n ),\n )\n : null}\n {formattable\n ? tool(\n 'color',\n 'Text color',\n onColor,\n <Ionicons name=\"color-palette-outline\" size={17} color={palette.text} />,\n )\n : null}\n {formattable\n ? tool('link', 'Link', onLink, <Ionicons name=\"link\" size={17} color={palette.text} />)\n : null}\n {tool(\n 'menu',\n 'Block actions',\n onMenu,\n <Ionicons name=\"ellipsis-horizontal\" size={17} color={palette.text} />,\n )}\n </ScrollView>\n </View>\n <View style={styles.toolbarRow}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n keyboardShouldPersistTaps=\"always\"\n contentContainerStyle={styles.toolbarContent}\n >\n {TURN_INTO.map((t) => {\n const active = t.type === block.type || (t.type === 'paragraph' && block.type === 'text');\n return (\n <Pressable\n key={t.type}\n accessibilityRole=\"button\"\n accessibilityLabel={`Turn into ${t.label}`}\n accessibilityState={{ selected: active }}\n onPress={() => onTurnInto(t.type)}\n style={[styles.tool, { backgroundColor: active ? palette.primarySoft : palette.fill }]}\n >\n <Text style={[styles.toolLabel, { color: active ? palette.primary : palette.text }]}>\n {t.short}\n </Text>\n </Pressable>\n );\n })}\n {tool(\n 'divider',\n 'Insert divider',\n onDivider,\n <Ionicons name=\"remove-outline\" size={18} color={palette.text} />,\n )}\n {tool(\n 'subpage',\n 'Insert sub-page',\n onSubPage,\n <Ionicons name=\"document-text-outline\" size={17} color={palette.text} />,\n )}\n {tool(\n 'delete',\n 'Delete block',\n onDelete,\n <Ionicons name=\"trash-outline\" size={17} color={palette.danger} />,\n )}\n </ScrollView>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Done editing\"\n onPress={onDone}\n style={styles.toolDone}\n hitSlop={6}\n >\n <Ionicons name=\"chevron-down\" size={22} color={palette.text} />\n </Pressable>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n flex: { flex: 1 },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n content: { paddingHorizontal: 20, paddingTop: 12, paddingBottom: 40 },\n muted: { fontSize: 15, textAlign: 'center' },\n retry: { marginTop: 12, padding: 8 },\n\n pageActions: { flexDirection: 'row', alignItems: 'center', marginBottom: 4 },\n pageAction: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingHorizontal: 8,\n paddingVertical: 6,\n borderRadius: 8,\n },\n pageActionLabel: { fontSize: 14, fontWeight: '500' },\n pageEmoji: { fontSize: 40 },\n emojiGrid: { flexDirection: 'row', flexWrap: 'wrap', padding: 8, borderRadius: 14, marginBottom: 8 },\n emojiCell: { width: '12.5%', aspectRatio: 1, alignItems: 'center', justifyContent: 'center' },\n emoji: { fontSize: 24 },\n emojiRemove: { width: '100%', alignItems: 'center', paddingVertical: 8 },\n\n title: { fontSize: 32, fontWeight: '800', lineHeight: 38, padding: 0, letterSpacing: -0.5 },\n meta: { fontSize: 12, marginTop: 6 },\n body: { marginTop: 16, gap: 2 },\n\n row: { flexDirection: 'row', alignItems: 'flex-start', gap: 8, borderRadius: 6 },\n headingRow: { marginTop: 10 },\n linkRow: { alignItems: 'center', paddingVertical: 6 },\n input: { flex: 1, padding: 0, paddingVertical: 3, margin: 0, minHeight: 30 },\n text: { fontSize: 16, lineHeight: 24 },\n done: { textDecorationLine: 'line-through' },\n marker: { minWidth: 18, paddingTop: 3 },\n check: { paddingTop: 4 },\n caret: { paddingTop: 9 },\n link: { fontWeight: '600', borderBottomWidth: 1, flexShrink: 1 },\n quote: { borderLeftWidth: 3, paddingLeft: 12 },\n callout: { padding: 12, borderRadius: mobileTokens.radius.sm },\n inlineEmoji: { fontSize: 18, lineHeight: 30 },\n code: { padding: 12, borderRadius: mobileTokens.radius.sm },\n codeText: { fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace', fontSize: 13, lineHeight: 19 },\n dividerHit: { paddingVertical: 10 },\n divider: { height: StyleSheet.hairlineWidth },\n unsupported: { borderWidth: 1, borderStyle: 'dashed', padding: 10, alignItems: 'center', marginVertical: 2 },\n unsupportedText: { flex: 1, fontSize: 14, textTransform: 'capitalize' },\n webOnly: { fontSize: 12, fontWeight: '600' },\n\n retryRow: { flexDirection: 'row', alignItems: 'center', gap: 4, alignSelf: 'flex-start', marginTop: 4 },\n retryLabel: { fontSize: 13, fontWeight: '700' },\n lockBanner: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n borderRadius: 12,\n marginBottom: 10,\n },\n lockText: { flex: 1, fontSize: 14, fontWeight: '500' },\n lockUnlock: { fontSize: 14, fontWeight: '700' },\n backlinks: { marginTop: 8 },\n backlinksToggle: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 5,\n alignSelf: 'flex-start',\n paddingVertical: 4,\n },\n backlinksLabel: { fontSize: 13, fontWeight: '600' },\n backlinkRow: { flexDirection: 'row', alignItems: 'center', gap: 8, paddingVertical: 4, paddingLeft: 4 },\n appendArea: { minHeight: 160, paddingTop: 8 },\n startHint: { fontSize: 16 },\n\n commentCount: { fontSize: 13, fontWeight: '600' },\n shareLabel: { fontSize: 15, fontWeight: '600' },\n commentBubble: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 3,\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 999,\n marginTop: 4,\n },\n commentBubbleText: { fontSize: 11, fontWeight: '700' },\n mediaRow: { marginVertical: 4 },\n toc: { borderLeftWidth: 2, paddingLeft: 12, paddingVertical: 4, gap: 6 },\n tocItem: { fontSize: 14, textDecorationLine: 'underline' },\n toolbarRow: { flexDirection: 'row', alignItems: 'center' },\n toolDisabled: { opacity: 0.35 },\n caretHit: { paddingTop: 8, width: 18, alignItems: 'center' },\n wash: { paddingHorizontal: 6, borderRadius: 6 },\n langPill: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 3,\n alignSelf: 'flex-end',\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 999,\n marginBottom: 6,\n },\n langPillText: { fontSize: 11, fontWeight: '700' },\n toolbar: {\n flexDirection: 'row',\n alignItems: 'center',\n borderTopWidth: StyleSheet.hairlineWidth,\n paddingVertical: 6,\n },\n toolbarContent: { gap: 6, paddingHorizontal: 10, alignItems: 'center' },\n tool: {\n minWidth: 40,\n height: 36,\n paddingHorizontal: 10,\n borderRadius: 10,\n alignItems: 'center',\n justifyContent: 'center',\n },\n toolLabel: { fontSize: 15, fontWeight: '700' },\n toolDone: { paddingHorizontal: 12, height: 36, justifyContent: 'center' },\n});\n"],"names":["_a","_b","title","tree","_c"],"mappings":";;;;;;;;;;;;;;;;;;;AAyDA,SAAS,MAAA,CAAO,OAAe,KAAwB,EAAA;AACrD,EAAI,IAAA,CAAC,OAAc,OAAA,KAAA;AACnB,EAAA,MAAM,CAAI,GAAA,KAAA;AAIV,EAAO,OAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EACF,KACC,CAAA,EAAA,CAAA,CAAE,QAAW,GAAA;AAAA,IACf,QAAU,EAAA,IAAA,CAAK,KAAM,CAAA,CAAA,CAAE,WAAW,KAAK;AAAA,GACrC,GAAA,EACA,CAAA,EAAA,CAAA,CAAE,UAAa,GAAA;AAAA,IACjB,UAAY,EAAA,IAAA,CAAK,KAAM,CAAA,CAAA,CAAE,aAAa,KAAK;AAAA,MACzC,EAAC,CAAA;AAET;AAMA,MAAM,aAAgB,GAAA,GAAA;AACtB,MAAM,cAAc,CAAC,WAAA,EAAM,WAAM,EAAA,WAAA,EAAM,aAAM,WAAM,EAAA,WAAA,EAAM,WAAM,EAAA,QAAA,EAAK,mBAAO,WAAM,EAAA,WAAA,EAAM,gBAAM,QAAK,EAAA,WAAA,EAAM,aAAM,WAAI,CAAA;AAClH,MAAM,WAAsC,GAAA;AAAA,EAC1C,SAAW,EAAA,WAAA;AAAA,EACX,SAAW,EAAA,WAAA;AAAA,EACX,SAAW,EAAA,WAAA;AAAA,EACX,aAAe,EAAA,MAAA;AAAA,EACf,aAAe,EAAA,MAAA;AAAA,EACf,IAAM,EAAA,OAAA;AAAA,EACN,MAAQ,EAAA,QAAA;AAAA,EACR,KAAO,EAAA,OAAA;AAAA,EACP,OAAS,EAAA,SAAA;AAAA,EACT,IAAM,EAAA;AACR,CAAA;AACA,MAAM,UAAqC,GAAA;AAAA,EACzC,SAAW,EAAA;AAAA,IACT,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,EAAA;AAAA,IACZ,UAAY,EAAA;AAAA,GACd;AAAA,EACA,SAAW,EAAA;AAAA,IACT,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,EAAA;AAAA,IACZ,UAAY,EAAA;AAAA,GACd;AAAA,EACA,SAAW,EAAA;AAAA,IACT,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,EAAA;AAAA,IACZ,UAAY,EAAA;AAAA;AAEhB,CAAA;AACA,SAAS,WAAA,CAAY,MAAiB,UAA+C,EAAA;AACnF,EAAI,IAAA,IAAA,KAAS,UAAiB,OAAA,cAAA;AAC9B,EAAI,IAAA,IAAA,KAAS,SAAgB,OAAA,wCAAA;AAC7B,EAAI,IAAA,IAAA,KAAS,SAAgB,OAAA,OAAA;AAC7B,EAAA,OAAO,YAAY,UAAU,CAAA;AAC/B;AACO,SAAS,cAAe,CAAA;AAAA,EAC7B,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAIG,EAAA;AA3HH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA4HE,EAAM,MAAA,OAAA,GAAU,cAAc,MAAM,CAAA;AACpC,EAAA,MAAM,aAAa,aAAmB,EAAA;AACtC,EAAA,MAAM,SAAS,eAAgB,EAAA;AAC/B,EAAA,MAAM,SAAS,iBAAkB,EAAA;AACjC,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,GAAI,SAED,uBAAyB,EAAA;AAAA,IAC1B,SAAW,EAAA;AAAA,MACT,KAAO,EAAA;AAAA,QACL,SAAS,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA,EAAA;AAAA,QACpB,eAAiB,EAAA,IAAA;AAAA,QACjB,QAAU,EAAA;AAAA;AACZ,KACF;AAAA,IACA,MAAM,CAAC,OAAA;AAAA,IACP,WAAa,EAAA;AAAA,GACd,CAAA;AACD,EAAM,MAAA,IAAA,GAAA,CAAO,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,YAAA,KAAN,IAAsB,GAAA,EAAA,GAAA,IAAA;AAGnC,EAAM,MAAA,SAAA,GAAY,SAEf,mBAAqB,EAAA;AAAA,IACtB,SAAW,EAAA;AAAA,MACT,KAAO,EAAA;AAAA,QACL,SAAS,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA;AAAA;AACtB,KACF;AAAA,IACA,MAAM,CAAC,OAAA;AAAA,IACP,WAAa,EAAA;AAAA,GACd,CAAA;AACD,EAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,IAAV,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,aAAhB,IAA4B,GAAA,EAAA,GAAA,IAAA;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAA6B,IAAI,CAAA;AAC3D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAoB,MAAM,CAAA;AAClD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,IAAA,GAAO,QAAS,CAAA,WAAA,CAAY,QAAS,CAAA,EAAA,KAAO,KAAQ,GAAA,kBAAA,GAAqB,iBAAmB,EAAA,MAAM,gBAAiB,CAAA,IAAI,CAAC,CAAA;AAC9H,IAAM,MAAA,IAAA,GAAO,QAAS,CAAA,WAAA,CAAY,QAAS,CAAA,EAAA,KAAO,KAAQ,GAAA,kBAAA,GAAqB,iBAAmB,EAAA,MAAM,gBAAiB,CAAA,KAAK,CAAC,CAAA;AAC/H,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,MAAO,EAAA;AACZ,MAAA,IAAA,CAAK,MAAO,EAAA;AAAA,KACd;AAAA,GACF,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,CAAC,SAAW,EAAA,YAAY,CAAI,GAAA,QAAA,CAAkC,EAAE,CAAA;AACtE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAM,MAAA,QAAA,GAAW,iBAAiB,SAAS,CAAA;AAC3C,EAAA,MAAM,IAAiB,GAAA;AAAA,IACrB,UAAA,EAAY,YAAa,CAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACtC,OAAO,QAAS,CAAA,SAAA;AAAA,IAChB,QAAQ,QAAS,CAAA;AAAA,GACnB;AACA,EAAM,MAAA,QAAA,GAAW,OAA2B,IAAI,CAAA;AAChD,EAAA,QAAA,CAAS,OAAU,GAAA,KAAA;AACnB,EAAA,MAAM,MAAS,GAAA,MAAA,iBAAW,IAAA,GAAA,EAA+B,CAAA;AACzD,EAAA,MAAM,OAAU,GAAA,MAAA,iBAAW,IAAA,GAAA,EAA0B,CAAA;AACrD,EAAA,MAAM,MAAS,GAAA,MAAA,iBAAW,IAAA,GAAA,EAA+B,CAAA;AACzD,EAAA,MAAM,WAAc,GAAA,MAAA,iBAAW,IAAA,GAAA,EAAqB,CAAA;AACpD,EAAM,MAAA,QAAA,GAAW,OAAO,CAAC,CAAA;AAGzB,EAAA,MAAM,SAAY,GAAA,WAAA,CAAY,CAAC,IAAA,EAAuB,SAA2B,KAAA;AApMnF,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AAqMI,IAAA,MAAM,WAAc,GAAA,aAAA,CAAc,IAAM,EAAA,SAAA,CAAU,EAAE,CAAA;AACpD,IAAA,QAAA,CAAS,WAAW,CAAA;AACpB,IAAA,YAAA,CAAa,IAAI,GAAI,CAAA,MAAA,CAAO,OAAO,WAAY,CAAA,MAAM,EAAE,MAAO,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,IAAA,KAAS,QAAQ,CAAE,CAAA,GAAA,CAAI,OAAK,CAAE,CAAA,EAAE,CAAC,CAAC,CAAA;AACvG,IAAM,MAAA,CAAA,GAAI,WAAW,SAAS,CAAA;AAC9B,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAQ,OAAA,CAAA,SAAA,CAAU,SAAS,CAAC,CAAA;AAC5B,IAAA,YAAA,CAAA,CAAcD,MAAA,SAAU,CAAA,UAAA,KAAV,IAAAA,GAAAA,GAAAA,GAAwB,EAA8B,CAAA;AACpE,IAAA,WAAA,CAAY,OAAQ,CAAA,GAAA,CAAI,SAAU,CAAA,EAAA,EAAI,CAAC,CAAA;AACvC,IAAM,MAAA,QAAA,GAAW,CAAC,IAA0B,KAAA;AA7MhD,MAAAA,IAAAA,GAAAA;AA8MM,MAAY,WAAA,CAAA,OAAA,CAAQ,IAAI,IAAK,CAAA,KAAA,CAAM,IAAI,UAAW,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAC7D,MAACA,CAAAA,CAAAA,GAAAA,GAAA,KAAK,QAAL,KAAA,IAAA,GAAAA,MAAiB,EAAC,EAAG,QAAQ,QAAQ,CAAA;AAAA,KACxC;AACA,IAACC,CAAAA,CAAAA,GAAAA,GAAA,KAAK,QAAL,KAAA,IAAA,GAAAA,MAAiB,EAAC,EAAG,QAAQ,QAAQ,CAAA;AAAA,GACxC,EAAG,EAAE,CAAA;AAML,EAAM,MAAA,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,IAAQ,OAAO,OAAS,EAAA;AACtC,IAAA,MAAA,CAAO,OAAU,GAAA,IAAA;AACjB,IAAA,SAAA,CAAU,MAAM,IAAI,CAAA;AACpB,IAAA,YAAA,CAAa,KAAK,WAAa,EAAA;AAAA,MAC7B,IAAI,IAAK,CAAA,EAAA;AAAA,MACT,KAAA,EAAO,WAAW,IAAI,CAAA;AAAA,MACtB,IAAA,EAAM,UAAU,IAAI;AAAA,KACrB,CAAA;AAAA,GACA,EAAA,CAAC,IAAM,EAAA,IAAA,EAAM,SAAS,CAAC,CAAA;AAC1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,CAAC,cAAqB,OAAA,MAAA;AAC1B,IAAA,MAAM,EAAK,GAAA,YAAA;AACX,IAAM,MAAA,MAAA,GAAS,WAAW,MAAM;AAtOpC,MAAAD,IAAAA,GAAAA;AAuOM,MAAA,CAAAA,MAAA,MAAO,CAAA,OAAA,CAAQ,IAAI,EAAE,CAAA,KAArB,gBAAAA,GAAwB,CAAA,KAAA,EAAA;AACxB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,OACnB,EAAE,CAAA;AACL,IAAO,OAAA,MAAM,aAAa,MAAM,CAAA;AAAA,GAC/B,EAAA,CAAC,YAAc,EAAA,KAAK,CAAC,CAAA;AAGxB,EAAM,MAAA,KAAA,GAAQ,WAAY,CAAA,OAAO,OAAiD,KAAA;AA9OpF,IAAAA,IAAAA,GAAAA;AA+OI,IAAA,MAAM,GAAM,GAAA,MAAM,MAAO,CAAA,MAAA,CAAO,iCAC3B,OAD2B,CAAA,EAAA;AAAA,MAE9B,WAAa,EAAA;AAAA,KACd,CAAA,CAAA;AACD,IAAA,IAAA,CAAIA,GAAA,GAAA,GAAA,CAAI,MAAJ,KAAA,IAAA,GAAA,MAAA,GAAAA,GAAY,CAAA,MAAA,EAAc,MAAA,IAAI,KAAM,CAAA,GAAA,CAAI,MAAO,CAAA,CAAC,EAAE,OAAO,CAAA;AAC7D,IAAA,IAAI,CAAC,GAAI,CAAA,IAAA,EAAY,MAAA,IAAI,MAAM,6BAA6B,CAAA;AAC5D,IAAO,OAAA,GAAA;AAAA,GACT,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAM,MAAA,MAAA,GAAS,MAGX,CAAA,EAAE,CAAA;AACN,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAwB,IAAI,CAAA;AAG9D,EAAA,MAAM,OAAU,GAAA,WAAA,CAAY,CAAC,EAAA,EAAY,EAA+B,KAAA;AAhQ1E,IAAAA,IAAAA,GAAAA;AAiQI,IAAA,QAAA,CAAS,OAAW,IAAA,CAAA;AACpB,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,IAAM,MAAA,IAAA,GAAA,CAAOA,GAAA,GAAA,MAAA,CAAO,OAAQ,CAAA,GAAA,CAAI,EAAE,CAArB,KAAA,IAAA,GAAAA,GAA0B,GAAA,OAAA,CAAQ,OAAQ,EAAA;AACvD,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,KAAA,CAAM,MAAM,MAAS,EAAE,IAAK,CAAA,EAAE,CAAE,CAAA,IAAA,CAAK,MAAM;AAC3D,MAAA,QAAA,CAAS,OAAW,IAAA,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,CAAS,OAAW,IAAA,CAAC,OAAQ,CAAA,OAAA,CAAQ,IAAQ,IAAA,CAAC,MAAO,CAAA,OAAA,CAAQ,MAAQ,EAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,OACxF,CAAO,GAAA,KAAA;AACR,MAAA,QAAA,CAAS,OAAW,IAAA,CAAA;AACpB,MAAA,MAAA,CAAO,QAAQ,IAAK,CAAA;AAAA,QAClB,EAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAa,YAAA,CAAA,eAAA,CAAgB,GAAG,CAAC,CAAA;AACjC,MAAA,OAAA,CAAQ,OAAO,CAAA;AACf,MAAA,IAAI,SAAiB,OAAA,CAAA,IAAA,CAAK,4BAA4B,eAAgB,CAAA,GAAG,GAAG,GAAG,CAAA;AAAA,KAChF,CAAA;AACD,IAAO,MAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,EAAA,EAAI,IAAI,CAAA;AAC3B,IAAO,OAAA,IAAA;AAAA,GACT,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,MAAM,QAAQ,MAAO,CAAA,OAAA;AACrB,IAAA,MAAA,CAAO,UAAU,EAAC;AAClB,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,KAAA,CAAM,QAAQ,CAAC;AAAA,MACb,EAAA;AAAA,MACA;AAAA,KACI,KAAA,OAAA,CAAQ,EAAI,EAAA,EAAE,CAAC,CAAA;AAAA,GACvB,EAAG,CAAC,OAAO,CAAC,CAAA;AAGZ,EAAA,MAAM,UAAa,GAAA,WAAA,CAAY,CAAC,EAAA,EAAY,MAAc,IAAqB,KAAA;AA/RjF,IAAAA,IAAAA,GAAAA;AAgSI,IAAM,MAAA,SAAA,GAAA,CAAYA,MAAA,WAAY,CAAA,OAAA,CAAQ,IAAI,EAAE,CAAA,KAA1B,OAAAA,GAA+B,GAAA,EAAA;AACjD,IAAY,WAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,EAAA,EAAI,IAAI,CAAA;AAChC,IAAA,MAAME,SAAQ,IAAO,GAAA,mBAAA,CAAoB,IAAI,CAAA,GAAI,gBAAgB,IAAI,CAAA;AACrE,IAAO,OAAA,OAAA,CAAQ,EAAI,EAAA,MAAM,KAAM,CAAA;AAAA,MAC7B,QAAU,EAAA,0BAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,KAAO,EAAA;AAAA,UACL,EAAA;AAAA,UACA,UAAY,EAAA;AAAA,YACV,KAAAA,EAAAA;AAAA,WACF;AAAA,UACA;AAAA;AACF;AACF,KACD,CAAC,CAAA;AAAA,GACD,EAAA,CAAC,KAAO,EAAA,OAAO,CAAC,CAAA;AAGnB,EAAA,MAAM,aAAgB,GAAA,WAAA,CAAY,CAAC,EAAA,EAAY,MAAc,IAAqB,KAAA;AAlTpF,IAAAF,IAAAA,GAAAA;AAmTI,IAAA,CAAAA,MAAA,OAAQ,CAAA,OAAA,CAAQ,IAAI,EAAE,CAAA,KAAtB,gBAAAA,GAAyB,CAAA,MAAA,EAAA;AACzB,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,IAAM,MAAA,MAAA,GAAS,WAAW,MAAM;AAC9B,MAAQ,OAAA,CAAA,OAAA,CAAQ,OAAO,EAAE,CAAA;AACzB,MAAW,UAAA,CAAA,EAAA,EAAI,MAAM,IAAI,CAAA;AAAA,OACxB,aAAa,CAAA;AAChB,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,YAAA,CAAa,MAAM,CAAA;AACnB,MAAQ,OAAA,CAAA,OAAA,CAAQ,OAAO,EAAE,CAAA;AAAA,KAC3B;AACA,IAAQ,OAAA,CAAA,OAAA,CAAQ,IAAI,EAAI,EAAA;AAAA,MACtB,MAAA;AAAA,MACA,OAAO,MAAM;AACX,QAAO,MAAA,EAAA;AACP,QAAW,UAAA,CAAA,EAAA,EAAI,MAAM,IAAI,CAAA;AAAA;AAC3B,KACD,CAAA;AAAA,GACH,EAAG,CAAC,UAAU,CAAC,CAAA;AASf,EAAM,MAAA,SAAA,GAAY,MAAuB,CAAA,EAAE,CAAA;AAC3C,EAAM,MAAA,SAAA,GAAY,MAAuB,CAAA,EAAE,CAAA;AAC3C,EAAA,MAAM,GAAG,cAAc,CAAA,GAAI,SAAS,CAAC,CAAA;AAErC,EAAM,MAAA,MAAA,GAAS,WAAY,CAAA,CAAC,KAAoC,KAAA;AAC9D,IAAA,MAAM,MAAM,SAAU,CAAA,OAAA,CAAQ,SAAU,CAAA,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC1D,IAAI,IAAA,KAAA,CAAM,GAAO,IAAA,CAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,GAAQ,MAAA,KAAA,CAAM,GAAO,IAAA,IAAA,CAAK,GAAI,EAAA,GAAI,GAAI,CAAA,EAAA,GAAK,IAAM,EAAA;AACrE,MAAA,GAAA,CAAI,OAAO,KAAM,CAAA,IAAA;AACjB,MAAI,GAAA,CAAA,EAAA,GAAK,KAAK,GAAI,EAAA;AAAA,KACb,MAAA;AACL,MAAU,SAAA,CAAA,OAAA,CAAQ,IAAK,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAClB,KADkB,CAAA,EAAA;AAAA,QAErB,EAAA,EAAI,KAAK,GAAI;AAAA,OACd,CAAA,CAAA;AACD,MAAA,IAAI,UAAU,OAAQ,CAAA,MAAA,GAAS,GAAK,EAAA,SAAA,CAAU,QAAQ,KAAM,EAAA;AAAA;AAE9D,IAAA,SAAA,CAAU,UAAU,EAAC;AACrB,IAAe,cAAA,CAAA,CAAA,CAAA,KAAK,IAAI,CAAC,CAAA;AAAA,GAC3B,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,OAAO,MAAM;AACjB,IAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,OAAA,CAAQ,GAAI,EAAA;AACpC,IAAA,IAAI,CAAC,KAAO,EAAA;AACZ,IAAA,KAAA,CAAM,IAAK,EAAA;AACX,IAAU,SAAA,CAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAC5B,IAAe,cAAA,CAAA,CAAA,CAAA,KAAK,IAAI,CAAC,CAAA;AAAA,GAC3B;AACA,EAAA,MAAM,OAAO,MAAM;AACjB,IAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,OAAA,CAAQ,GAAI,EAAA;AACpC,IAAA,IAAI,CAAC,KAAO,EAAA;AACZ,IAAA,KAAA,CAAM,IAAK,EAAA;AACX,IAAU,SAAA,CAAA,OAAA,CAAQ,IAAK,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAClB,KADkB,CAAA,EAAA;AAAA,MAErB,EAAI,EAAA;AAAA,KACL,CAAA,CAAA;AACD,IAAe,cAAA,CAAA,CAAA,CAAA,KAAK,IAAI,CAAC,CAAA;AAAA,GAC3B;AAGA,EAAA,MAAM,OAAU,GAAA,WAAA,CAAY,CAAC,EAAA,EAAY,IAAoB,KAAA;AAC3D,IAAM,MAAA,IAAA,GAAO,SAAS,IAAI,CAAA;AAC1B,IAAA,QAAA,CAAS,CAAK,CAAA,KAAA,CAAA,GAAI,UAAW,CAAA,CAAA,EAAG,EAAI,EAAA;AAAA,MAClC,IAAA;AAAA,MACA;AAAA,KACD,IAAI,CAAC,CAAA;AACN,IAAc,aAAA,CAAA,EAAA,EAAI,MAAM,IAAI,CAAA;AAAA,GAC9B,EAAG,CAAC,aAAa,CAAC,CAAA;AAGlB,EAAA,MAAM,aAAa,WAAY,CAAA,CAAC,EAAY,EAAA,MAAA,EAAmB,OAAkB,GAAiB,KAAA;AAChG,IAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AACjB,IAAO,MAAA,CAAA;AAAA,MACL,GAAA;AAAA,MACA,IAAM,EAAA,MAAM,OAAQ,CAAA,EAAA,EAAI,MAAM,CAAA;AAAA,MAC9B,IAAM,EAAA,MAAM,OAAQ,CAAA,EAAA,EAAI,KAAK;AAAA,KAC9B,CAAA;AAAA,GACA,EAAA,CAAC,MAAQ,EAAA,OAAO,CAAC,CAAA;AAIpB,EAAA,MAAM,SAAS,MAAO,CAAA;AAAA,IACpB,KAAO,EAAA,EAAA;AAAA,IACP,IAAM,EAAA,IAAA;AAAA,IACN,WAAa,EAAA;AAAA,GACd,CAAA;AACD,EAAA,SAAA;AAAA,IAAU,MAAM,MAAM;AACpB,MAAC,CAAA,GAAG,OAAQ,CAAA,OAAA,CAAQ,MAAO,EAAC,EAAE,OAAQ,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,KAAA,EAAO,CAAA;AACpD,MAAI,IAAA,OAAA,IAAW,MAAO,CAAA,OAAA,CAAQ,WAAa,EAAA;AACzC,QAAa,YAAA,CAAA,MAAA,CAAO,QAAQ,WAAa,EAAA;AAAA,UACvC,EAAI,EAAA,OAAA;AAAA,UACJ,KAAA,EAAO,OAAO,OAAQ,CAAA,KAAA;AAAA,UACtB,IAAA,EAAM,OAAO,OAAQ,CAAA;AAAA,SACtB,CAAA;AAAA;AACH,KACF;AAAA;AAAA,IAEA;AAAC,GAAC;AACF,EAAM,MAAA,WAAA,GAAc,YAAY,CAAC,EAAA,EAAY,eAAwC,OAAQ,CAAA,EAAA,EAAI,MAAM,KAAM,CAAA;AAAA,IAC3G,QAAU,EAAA,0BAAA;AAAA,IACV,SAAW,EAAA;AAAA,MACT,KAAO,EAAA;AAAA,QACL,EAAA;AAAA,QACA;AAAA;AACF;AACF,GACD,CAAC,CAAA,EAAG,CAAC,KAAA,EAAO,OAAO,CAAC,CAAA;AAGrB,EAAM,MAAA,WAAA,GAAc,WAAY,CAAA,CAAC,EAAuC,KAAA;AApa1E,IAAAA,IAAAA,GAAAA;AAqaI,IAAA,MAAM,IAAI,QAAS,CAAA,OAAA;AACnB,IAAI,IAAA,CAAC,GAAU,OAAA,IAAA;AACf,IAAM,MAAA,IAAA,GAAO,eAAgB,CAAA,CAAA,EAAG,EAAE,CAAA;AAClC,IAAA,CAAAA,MAAA,OAAQ,CAAA,OAAA,CAAQ,IAAI,EAAE,CAAA,KAAtB,gBAAAA,GAAyB,CAAA,MAAA,EAAA;AACzB,IAAA,QAAA,CAAS,SAAO,GAAM,GAAA,WAAA,CAAY,GAAK,EAAA,EAAE,IAAI,GAAG,CAAA;AAChD,IAAQ,OAAA,CAAA,EAAA,EAAI,MAAM,KAAM,CAAA;AAAA,MACtB,QAAU,EAAA,0BAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,OAAS,EAAA;AAAA;AACX,KACD,CAAC,CAAA;AACF,IAAO,OAAA,IAAA;AAAA,GACN,EAAA,CAAC,KAAO,EAAA,OAAO,CAAC,CAAA;AAGnB,EAAM,MAAA,SAAA,GAAY,WAAY,CAAA,CAAC,IAAiC,KAAA;AAC9D,IAAA,IAAI,CAAC,IAAM,EAAA;AACX,IAAA,QAAA,CAAS,SAAO,GAAM,GAAA,cAAA,CAAe,GAAK,EAAA,IAAI,IAAI,GAAG,CAAA;AACrD,IAAQ,OAAA,CAAA,IAAA,CAAK,EAAI,EAAA,MAAM,KAAM,CAAA;AAAA,MAC3B,QAAU,EAAA,2BAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA;AAChB,KACD,CAAC,CAAA;AAAA,GACD,EAAA,CAAC,KAAO,EAAA,OAAO,CAAC,CAAA;AAGnB,EAAM,MAAA,QAAA,GAAW,YAAY,CAAC,QAAA,EAAkB,SAAwB,IAAc,EAAA,KAAA,GAAiC,EAAO,KAAA;AAC5H,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,YAAA,CAAa,kDAAkD,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,CAAA;AACf,MAAO,OAAA,EAAA;AAAA;AAET,IAAA,MAAM,KAAK,UAAW,EAAA;AACtB,IAAA,MAAM,aAAsC,cACtC,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EAAA,UAAA,CAAW,IAAI,CAAA,IAAK,SAAS,MAAS,GAAA;AAAA,MACxC,OAAO;AAAC,KACN,GAAA,EACA,CAAA,EAAA,IAAA,KAAS,MAAS,GAAA;AAAA,MACpB,OAAS,EAAA;AAAA,KACX,GAAI,EACD,CAAA,EAAA,KAAA,CAAA;AAEL,IAAA,MAAM,KAAqB,GAAA,UAAA,CAAW,EAAI,EAAA,IAAA,EAAM,UAAU,UAAU,CAAA;AACpE,IAAA,QAAA,CAAS,OAAK,CAAI,GAAA,WAAA,CAAY,GAAG,KAAO,EAAA,OAAO,IAAI,CAAC,CAAA;AACpD,IAAY,WAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,EAAA,EAAI,EAAE,CAAA;AAC9B,IAAA,IAAI,UAAW,CAAA,IAAI,CAAG,EAAA,eAAA,CAAgB,EAAE,CAAA;AACxC,IAAQ,OAAA,CAAA,EAAA,EAAI,MAAM,KAAM,CAAA;AAAA,MACtB,QAAU,EAAA,6BAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,KAAO,EAAA,aAAA,CAAA,cAAA,CAAA;AAAA,UACL;AAAA,SAAA,EACI,OAAU,GAAA;AAAA,UACZ,KAAO,EAAA;AAAA,SACT,GAAI,EAJC,CAAA,EAAA;AAAA,UAKL,UAAU,CAAC;AAAA,YACT,EAAA;AAAA,YACA,IAAA;AAAA,YACA,MAAQ,EAAA;AAAA,cACN,IAAM,EAAA,OAAA;AAAA,cACN,EAAI,EAAA;AAAA,aACN;AAAA,YACA;AAAA,WACD;AAAA,SACH;AAAA;AACF,KACD,CAAC,CAAA;AACF,IAAA,IAAI,IAA+B,GAAA,IAAA;AACnC,IAAO,MAAA,CAAA;AAAA,MACL,MAAM,MAAM;AACV,QAAA,IAAA,GAAO,YAAY,EAAE,CAAA;AAAA,OACvB;AAAA,MACA,IAAA,EAAM,MAAM,SAAA,CAAU,IAAI;AAAA,KAC3B,CAAA;AACD,IAAO,OAAA,EAAA;AAAA,KACN,CAAC,KAAA,EAAO,SAAS,MAAQ,EAAA,WAAA,EAAa,SAAS,CAAC,CAAA;AAGnD,EAAA,MAAM,QAAW,GAAA,WAAA;AAAA,IAAY,CAAC,EAAY,EAAA,IAAA,EAAc,UAAsC,EAAA,IAAA,GAE1F,EAAO,KAAA;AArfb,MAAAA,IAAAA,GAAAA;AAsfI,MAAA,MAAM,SAAQA,GAAA,GAAA,QAAA,CAAS,OAAT,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAkB,MAAO,CAAA,EAAA,CAAA;AACvC,MAAA,IAAI,CAAC,KAAA,IAAS,KAAM,CAAA,IAAA,KAAS,IAAM,EAAA;AACnC,MAAA,MAAM,WAAW,KAAM,CAAA,IAAA;AACvB,MAAM,MAAA,KAAA,GAAQ,cACR,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,KAAS,MAAS,GAAA;AAAA,QACpB,OAAS,EAAA;AAAA,OACP,GAAA,EACA,CAAA,EAAA,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,EAAC,CAAA;AAErB,MAAA,QAAA,CAAS,CAAO,GAAA,KAAA,GAAA,GAAM,UAAW,CAAA,GAAA,EAAK,EAAI,EAAA;AAAA,QACxC,IAAA;AAAA,QACA,UAAA,EAAY,cACP,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,UACN,CAAA,EAAA,KAAA;AAAA,OAEN,IAAI,GAAG,CAAA;AACR,MAAA,OAAA,CAAQ,IAAI,YAAY;AACtB,QAAA,MAAM,KAAM,CAAA;AAAA,UACV,QAAU,EAAA,6BAAA;AAAA,UACV,SAAW,EAAA;AAAA,YACT,OAAS,EAAA,EAAA;AAAA,YACT,OAAS,EAAA;AAAA;AACX,SACD,CAAA;AACD,QAAA,IAAI,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA,CAAE,MAAQ,EAAA;AAC7B,UAAA,MAAM,KAAM,CAAA;AAAA,YACV,QAAU,EAAA,0BAAA;AAAA,YACV,SAAW,EAAA;AAAA,cACT,KAAO,EAAA;AAAA,gBACL,EAAA;AAAA,gBACA,UAAY,EAAA;AAAA;AACd;AACF,WACD,CAAA;AAAA;AACH,OACD,CAAA;AACD,MAAI,IAAA,IAAA,CAAK,WAAW,KAAO,EAAA;AACzB,QAAO,MAAA,CAAA;AAAA,UACL,IAAM,EAAA,MAAM,QAAS,CAAA,EAAA,EAAI,UAAU,MAAW,EAAA;AAAA,YAC5C,MAAQ,EAAA;AAAA,WACT,CAAA;AAAA,UACD,IAAM,EAAA,MAAM,QAAS,CAAA,EAAA,EAAI,MAAM,UAAY,EAAA;AAAA,YACzC,MAAQ,EAAA;AAAA,WACT;AAAA,SACF,CAAA;AAAA;AACH,KACF;AAAA;AAAA,IAEA,CAAC,KAAO,EAAA,OAAA,EAAS,MAAM;AAAA,GAAC;AACxB,EAAM,MAAA,UAAA,GAAa,WAAY,CAAA,CAAC,EAAe,KAAA;AAC7C,IAAA,MAAM,IAAI,QAAS,CAAA,OAAA;AACnB,IAAA,IAAI,CAAC,CAAG,EAAA;AACR,IAAM,MAAA,IAAA,GAAO,cAAe,CAAA,CAAA,EAAG,EAAE,CAAA;AACjC,IAAM,MAAA,IAAA,GAAO,YAAY,EAAE,CAAA;AAC3B,IAAI,IAAA,IAAA,kBAAsB,IAAI,CAAA;AAAA,sBAAoB,IAAI,CAAA;AACtD,IAAO,MAAA,CAAA;AAAA,MACL,IAAA,EAAM,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,MAC1B,IAAA,EAAM,MAAM,WAAA,CAAY,EAAE;AAAA,KAC3B,CAAA;AAAA,GACA,EAAA,CAAC,MAAQ,EAAA,WAAA,EAAa,SAAS,CAAC,CAAA;AACnC,EAAM,MAAA,QAAA,GAAW,YAAY,CAAC,EAAA,KAAe,WAAW,QAAS,CAAA,YAAA,CAAa,KAAK,sBAAwB,EAAA;AAAA,IACzG,OAAA;AAAA,IACA,OAAS,EAAA;AAAA,GACV,CAAC,CAAA,EAAG,CAAC,UAAA,EAAY,OAAO,CAAC,CAAA;AAI1B,EAAM,MAAA,OAAA,GAAU,CAAC,IAAiB,KAAA;AAChC,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAI,IAAA,OAAA,EAAuB,aAAA,CAAA,OAAA,EAAS,IAAI,CAAA;AAAA,GAC1C;AACA,EAAM,MAAA,QAAA,GAAW,CAAC,KAAyB,KAAA;AACzC,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAI,IAAA,OAAA,cAAqB,OAAS,EAAA;AAAA,MAChC,MAAM,KAAQ,GAAA;AAAA,QACZ,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACE,GAAA;AAAA,KACL,CAAA;AAAA,GACH;AACA,EAAA,MAAM,SAAS,kBAAmB,EAAA;AAClC,EAAA,MAAM,UAAa,GAAA,MAAA,CAA6B,OAAO,EAAG,CAAA,CAAA;AAC1D,EAAA,MAAM,cAAc,cAAe,CAAA;AAAA,IACjC,MAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAY,EAAA,QAAA;AAAA,IACZ,SAAA,EAAW,MAAM,UAAA,CAAW,MAAO,EAAA;AAAA,IACnC,SAAA,EAAW,MAAM,UAAA,CAAW,OAAQ,EAAA;AAAA,IACpC,SAAA,EAAW,CAAC,EAAA,EAAI,QAAa,KAAA;AA/kBjC,MAAAA,IAAAA,GAAAA;AAglBM,MAAA,IAAI,OAAO,OAAS,EAAA;AACpB,MAAA,CAAAA,MAAA,OAAQ,CAAA,OAAA,CAAQ,IAAI,EAAE,CAAA,KAAtB,gBAAAA,GAAyB,CAAA,MAAA,EAAA;AACzB,MAAY,WAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,EAAA,EAAI,QAAQ,CAAA;AACpC,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA;AACnB,GACD,CAAA;AACD,EAAM,MAAA,cAAA,GAAiB,SAEpB,uBAAyB,EAAA;AAAA,IAC1B,SAAW,EAAA;AAAA,MACT,SAAS,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA,EAAA;AAAA,MACpB,KAAO,EAAA;AAAA,KACT;AAAA,IACA,MAAM,CAAC,OAAA;AAAA,IACP,WAAa,EAAA;AAAA,GACd,CAAA;AACD,EAAA,MAAM,SAAa,GAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,cAAA,CAAe,IAAf,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,iBAArB,IAAqC,GAAA,EAAA,GAAA,EAAI,EAAA,MAAA,CAAO,OAAK,CAAC,CAAA,CAAE,OAAW,IAAA,CAAA,CAAE,OAAO,OAAO,CAAA;AAGtG,EAAM,MAAA,YAAA,GAAe,OAAO,SAAS,CAAA;AACrC,EAAA,YAAA,CAAa,OAAU,GAAA,SAAA;AACvB,EAAM,MAAA,SAAA,GAAY,CAAC,KAAmC,KAAA;AACpD,IAAA,IAAI,CAAC,OAAS,EAAA;AACd,IAAa,YAAA,CAAA,OAAA,GAAU,cAClB,CAAA,cAAA,CAAA,EAAA,EAAA,YAAA,CAAa,OACb,CAAA,EAAA,KAAA,CAAA;AAEL,IAAA,YAAA,CAAa,aAAa,OAAO,CAAA;AACjC,IAAA,WAAA,CAAY,SAAS,KAAK,CAAA;AAAA,GAC5B;AACA,EAAA,MAAM,iBAAiB,YAAY;AA9mBrC,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AA+mBI,IAAA,IAAI,CAAC,OAAS,EAAA;AACd,IAAI,IAAA;AACF,MAAM,MAAA,GAAA,GAAM,MAAM,MAAA,CAAO,KAEtB,CAAA;AAAA,QACD,KAAO,EAAA,6BAAA;AAAA,QACP,SAAW,EAAA;AAAA,UACT;AAAA,SACF;AAAA,QACA,WAAa,EAAA;AAAA,OACd,CAAA;AACD,MAAM,MAAA,EAAA,GAAA,CAAKA,OAAAD,GAAA,GAAA,GAAA,CAAI,SAAJ,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAU,wBAAV,KAAA,IAAA,GAAAC,GAAsC,GAAA,EAAA;AACjD,MAAA,MAAM,MAAM,KAAM,CAAA;AAAA,QAChB,KAAA,EAAO,KAAM,CAAA,IAAA,EAAU,IAAA,UAAA;AAAA,QACvB,SAAS,EAAM,IAAA,CAAA,EAAA,EAAK,KAAM,CAAA,IAAA,MAAU,UAAU,CAAA;AAAA,OAC/C,CAAA;AAAA,aACM,GAAK,EAAA;AACZ,MAAA,WAAA,CAAY,SAAU,CAAA;AAAA,QACpB,OAAA,EAAS,oBAAoB,GAAe,YAAA,KAAA,GAAQ,IAAI,OAAU,GAAA,EAAE,GAAG,IAAK;AAAA,OAC7E,CAAA;AAAA;AACH,GACF;AACA,EAAM,MAAA,cAAA,GAAiB,OAAO,QAAqB,KAAA;AAroBrD,IAAA,IAAAD,GAAAC,EAAAA,GAAAA;AAsoBI,IAAA,IAAI,CAAC,OAAS,EAAA;AACd,IAAA,MAAM,KAAM,CAAA;AAAA,MACV,QAAU,EAAA,6BAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,aAAe,EAAA,OAAA;AAAA,QACf;AAAA;AACF,KACD,CAAA;AAED,IAAA,MAAM,CAAC,GAAA,EAAK,OAAO,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAI,CAAA,CAAC,OAAQ,EAAA,EAAG,SAAU,CAAA,OAAA,EAAS,CAAC,CAAA;AACzE,IAAA,MAAM,IAAOD,GAAAA,CAAAA,GAAAA,GAAA,GAAI,CAAA,IAAA,KAAJ,gBAAAA,GAAU,CAAA,YAAA;AACvB,IAAA,MAAM,QAAWC,GAAAA,CAAAA,GAAAA,GAAA,OAAQ,CAAA,IAAA,KAAR,gBAAAA,GAAc,CAAA,QAAA;AAC/B,IAAI,IAAA,IAAA,IAAQ,QAAY,IAAA,CAAC,OAAQ,CAAA,OAAA,CAAQ,IAAQ,IAAA,CAAC,QAAS,CAAA,OAAA,EAAmB,SAAA,CAAA,IAAA,EAAM,QAAQ,CAAA;AAC5F,IAAA,WAAA,CAAY,SAAU,CAAA;AAAA,MACpB,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,GACH;AACA,EAAA,MAAA,CAAO,OAAU,GAAA;AAAA,IACf,KAAA;AAAA,IACA,IAAA;AAAA,IACA,aAAa,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA;AAAA,GACrB;AAGA,EAAA,MAAM,QAAQ,cAAe,CAAA;AAAA,IAC3B,OAAA;AAAA,IACA,SAAA,EAAA,CAAW,6BAAM,WAAc,IAAA;AAAA,MAC7B,IAAI,IAAK,CAAA;AAAA,KACP,GAAA,IAAA;AAAA,IACJ,MAAM,IAAO,GAAA;AAAA,MACX,IAAI,IAAK,CAAA,EAAA;AAAA,MACT,KAAA,EAAO,KAAM,CAAA,IAAA,EAAU,IAAA;AAAA,KACrB,GAAA,IAAA;AAAA,IACJ;AAAA,GACD,CAAA;AAGD,EAAA,UAAA,CAAW,UAAU,MAAM;AACzB,IAAA,MAAM,KAAQ,GAAA,SAAA,CAAU,KAAO,EAAA,QAAA,CAAS,OAAO,CAAA;AAC/C,IAAO,OAAA;AAAA,MACL,UAAU,IAAO,GAAA,WAAA,CAAY,IAAK,CAAA,cAAc,KAAK,MAAY,GAAA,MAAA;AAAA,MACjE,YAAc,EAAA;AAAA,QACZ,QAAA;AAAA,QACA,UAAU,CAAO,GAAA,KAAA,SAAA,CAAU,kBAAkB,YAAa,CAAA,OAAA,EAAS,GAAG,CAAC,CAAA;AAAA,QACvE,QAAQ,CAAQ,IAAA,KAAA,SAAA,CAAU,cAAc,YAAa,CAAA,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,QACnE,QAAQ,CAAG,EAAA,KAAK,IAAI,KAAU,KAAA,CAAA,GAAI,SAAS,OAAO,CAAA;AAAA,OACpD;AAAA,MACA,MAAA,EAAQ,CAAC,CAAC;AAAA,QACR,GAAK,EAAA,cAAA;AAAA,QACL,KAAO,EAAA,qBAAA;AAAA,QACP,IAAM,EAAA,kBAAA;AAAA,QACN,OAAS,EAAA,MAAM,KAAM,CAAA,GAAA,CAAI,WAAW;AAAA,OACnC,EAAA;AAAA,QACD,GAAK,EAAA,aAAA;AAAA,QACL,KAAO,EAAA,kBAAA;AAAA,QACP,IAAM,EAAA,gBAAA;AAAA,QACN,OAAS,EAAA,MAAM,KAAM,CAAA,GAAA,CAAI,iBAAiB;AAAA,OACzC,EAAA;AAAA,QACD,GAAK,EAAA,YAAA;AAAA,QACL,KAAO,EAAA,mBAAA;AAAA,QACP,IAAM,EAAA,kBAAA;AAAA,QACN,OAAS,EAAA,MAAM,KAAM,CAAA,GAAA,CAAI,aAAa;AAAA,OACrC,EAAA;AAAA,QACD,GAAK,EAAA,QAAA;AAAA,QACL,KAAO,EAAA,2BAAA;AAAA,QACP,IAAM,EAAA,6BAAA;AAAA,QACN,OAAS,EAAA,MAAM,KAAM,CAAA,GAAA,CAAI,UAAU;AAAA,OACpC,GAAG,CAAC;AAAA,QACH,GAAK,EAAA,QAAA;AAAA,QACL,KAAO,EAAA,0BAAA;AAAA,QACP,IAAM,EAAA,eAAA;AAAA,QACN,OAAS,EAAA;AAAA,OACR,EAAA;AAAA,QACD,GAAK,EAAA,SAAA;AAAA,QACL,KAAO,EAAA,cAAA;AAAA,QACP,IAAM,EAAA,cAAA;AAAA,QACN,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI;AAAA,OACjC,EAAA;AAAA,QACD,GAAK,EAAA,QAAA;AAAA,QACL,KAAO,EAAA,uBAAA;AAAA,QACP,IAAM,EAAA,kBAAA;AAAA,QACN,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI;AAAA,OAClC,CAAC;AAAA,KACJ;AAAA,GACF;AACA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,CAAC,IAAM,EAAA;AACX,IAAA,QAAA,CAAS,OAAQ,EAAA;AACjB,IAAY,WAAA,CAAA,IAAA,CAAK,iCACZ,IADY,CAAA,EAAA;AAAA,MAEf,UAAA,EAAY,iCACP,SADO,CAAA,EAAA;AAAA,QAEV,KAAA,EAAO,gBAAgB,KAAK;AAAA,OAC9B;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAKA,EAAA,MAAM,UAAa,GAAA,MAAA,iBAAW,IAAA,GAAA,EAG1B,CAAA;AACJ,EAAM,MAAA,YAAA,GAAe,CAAC,EAAA,EAAY,IAAiB,KAAA;AA9uBrD,IAAAD,IAAAA,GAAAA;AA+uBI,IAAA,MAAM,SAAQA,GAAA,GAAA,QAAA,CAAS,OAAT,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAkB,MAAO,CAAA,EAAA,CAAA;AACvC,IAAA,IAAI,CAAC,KAAO,EAAA;AACZ,IAAA,MAAM,SAAS,KAAM,CAAA,IAAA;AAErB,IAAA,IAAI,SAAS,GAAO,IAAA,CAAC,MAAM,IAAQ,IAAA,KAAA,CAAM,SAAS,MAAQ,EAAA;AACxD,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,SAAA;AAAA,QACN;AAAA,OACD,CAAA;AACD,MAAA;AAAA;AAGF,IAAI,IAAA,KAAA,CAAM,SAAS,MAAU,IAAA,IAAA,CAAK,WAAW,KAAM,CAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AAClE,MAAA,IAAI,EAAK,GAAA,CAAA;AACT,MAAO,OAAA,EAAA,GAAK,KAAM,CAAA,IAAA,CAAK,MAAU,IAAA,IAAA,CAAK,EAAE,CAAA,KAAM,KAAM,CAAA,IAAA,CAAK,EAAE,CAAA,EAAS,EAAA,IAAA,CAAA;AACpE,MAAI,IAAA,IAAA,CAAK,EAAE,CAAM,KAAA,GAAA,KAAQ,OAAO,CAAK,IAAA,IAAA,CAAK,IAAK,CAAA,IAAA,CAAK,EAAK,GAAA,CAAC,CAAC,CAAM,CAAA,IAAA,IAAA,CAAK,MAAM,EAAK,GAAA,CAAC,MAAM,KAAM,CAAA,IAAA,CAAK,KAAM,CAAA,EAAE,CAAG,EAAA;AAC5G,QAAW,UAAA,CAAA,EAAA,EAAI,QAAQ,kBAAmB,CAAA,MAAA,EAAQ,IAAI,CAAG,EAAA,CAAA,KAAA,EAAQ,EAAE,CAAE,CAAA,CAAA;AACrE,QAAA,QAAA,CAAS,OAAQ,EAAA;AACjB,QAAc,aAAA,CAAA;AAAA,UACZ,EAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA;AAAA;AACF;AAEF,IAAI,IAAA,KAAA,CAAM,SAAS,MAAQ,EAAA;AAEzB,MAAM,MAAA,EAAA,GAAK,IAAK,CAAA,OAAA,CAAQ,GAAG,CAAA;AAC3B,MAAA,IAAI,EAAK,GAAA,CAAA,IAAK,IAAK,CAAA,MAAA,KAAW,KAAM,CAAA,IAAA,CAAK,MAAS,GAAA,CAAA,IAAK,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,EAAE,CAAM,KAAA,KAAA,CAAM,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,EAAE,CAAK,IAAA,IAAA,CAAK,KAAM,CAAA,EAAA,GAAK,CAAC,CAAA,KAAM,KAAM,CAAA,IAAA,CAAK,KAAM,CAAA,EAAE,CAAG,EAAA;AACnJ,QAAM,MAAA,QAAA,GAAW,oBAAoB,IAAK,CAAA,KAAA,CAAM,GAAG,EAAE,CAAA,EAAG,MAAM,IAAI,CAAA;AAClE,QAAA,IAAI,QAAU,EAAA;AACZ,UAAQ,OAAA,CAAA,EAAA,EAAI,mBAAmB,MAAQ,EAAA,IAAA,CAAK,MAAM,EAAK,GAAA,CAAC,CAAC,CAAC,CAAA;AAC1D,UAAA,QAAA,CAAS,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,QAAA,CAAS,UAAU,CAAA;AAC/C,UAAA;AAAA;AACF;AAGF,MAAA,IAAI,SAAS,KAAO,EAAA;AAClB,QAAQ,OAAA,CAAA,EAAA,EAAI,EAAE,CAAA;AACd,QAAA,QAAA,CAAS,IAAI,MAAM,CAAA;AACnB,QAAA;AAAA;AAEF,MAAK,IAAA,CAAA,IAAA,KAAS,KAAS,IAAA,IAAA,KAAS,KAAS,IAAA,IAAA,KAAS,KAAW,MAAA,KAAA,CAAM,IAAS,KAAA,WAAA,IAAe,KAAM,CAAA,IAAA,KAAS,MAAS,CAAA,EAAA;AACjH,QAAQ,OAAA,CAAA,EAAA,EAAI,EAAE,CAAA;AACd,QAAA,QAAA,CAAS,IAAI,SAAS,CAAA;AACtB,QAAS,QAAA,CAAA,KAAA,CAAM,QAAU,EAAA,EAAA,EAAI,WAAW,CAAA;AACxC,QAAA;AAAA;AACF;AAEF,IAAI,IAAA,IAAA,GAAO,kBAAmB,CAAA,MAAA,EAAQ,IAAI,CAAA;AAC1C,IAAI,IAAA,KAAA,CAAM,SAAS,MAAQ,EAAA;AAEzB,MAAA,IAAI,MAAS,GAAA,CAAA;AACb,MAAA,MAAM,MAAM,KAAM,CAAA,IAAA;AAClB,MAAA,OAAO,SAAS,GAAI,CAAA,MAAA,IAAU,MAAS,GAAA,IAAA,CAAK,UAAU,GAAI,CAAA,GAAA,CAAI,MAAS,GAAA,CAAA,GAAI,MAAM,CAAM,KAAA,IAAA,CAAK,KAAK,MAAS,GAAA,CAAA,GAAI,MAAM,CAAG,EAAA;AACrH,QAAU,MAAA,IAAA,CAAA;AAAA;AAEZ,MAAA,MAAM,EAAK,GAAA,mBAAA,CAAoB,IAAM,EAAA,IAAA,CAAK,SAAS,MAAM,CAAA;AACzD,MAAI,IAAA,EAAA,SAAW,EAAG,CAAA,IAAA;AAAA;AAEpB,IAAA,UAAA,CAAW,EAAI,EAAA,MAAA,EAAQ,IAAM,EAAA,CAAA,KAAA,EAAQ,EAAE,CAAE,CAAA,CAAA;AAAA,GAC3C;AAGA,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAGtB,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAKpB,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAGxB,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAG1B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAE5B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AACpD,EAAM,MAAA,QAAA,GAAW,gBAAgB,OAAO,CAAA;AACxC,EAAA,MAAM,YAAe,GAAA,CAAC,GAAG,QAAA,CAAS,WAAW,MAAO,EAAC,CAAE,CAAA,MAAA,CAAO,CAAC,CAAA,EAAG,CAAM,KAAA,CAAA,GAAI,GAAG,CAAC,CAAA;AAGhF,EAAA,MAAM,OAAU,GAAA,CAACG,KAAoB,EAAA,QAAA,EAAkB,OAA2B,KAAA;AAChF,IAAS,QAAA,CAAA,CAAA,CAAA,KAAK,IAAI,UAAW,CAAA,CAAA,EAAGA,OAAM,QAAU,EAAA,OAAO,IAAI,CAAC,CAAA;AAC5D,IAAQA,OAAAA,CAAAA,KAAAA,CAAK,EAAI,EAAA,MAAM,KAAM,CAAA;AAAA,MAC3B,QAAU,EAAA,6BAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,KAAO,EAAA,aAAA,CAAA,cAAA,CAAA;AAAA,UACL;AAAA,SAAA,EACI,OAAU,GAAA;AAAA,UACZ,KAAO,EAAA;AAAA,SACT,GAAI,EAJC,CAAA,EAAA;AAAA,UAKL,QAAU,EAAA,CAAC,SAAUA,CAAAA,KAAAA,EAAM,QAAQ,CAAC;AAAA,SACtC;AAAA;AACF,KACD,CAAC,CAAA;AACF,IAAM,MAAA,KAAA,GAAQ,YAAYA,KAAI,CAAA;AAC9B,IAAI,IAAA,KAAA,kBAAuB,KAAK,CAAA;AAChC,IAAA,IAAI,IAA+B,GAAA,IAAA;AACnC,IAAO,MAAA,CAAA;AAAA,MACL,MAAM,MAAM;AACV,QAAO,IAAA,GAAA,WAAA,CAAYA,MAAK,EAAE,CAAA;AAAA,OAC5B;AAAA,MACA,IAAA,EAAM,MAAM,SAAA,CAAU,IAAI;AAAA,KAC3B,CAAA;AAAA,GACH;AAGA,EAAM,MAAA,YAAA,GAAe,CAAC,MAGA,KAAA;AA12BxB,IAAAH,IAAAA,GAAAA;AA22BI,IAAA,MAAM,IAAI,QAAS,CAAA,OAAA;AACnB,IAAI,IAAA,CAAC,CAAG,EAAA,OAAO,EAAC;AAChB,IAAA,MAAM,SAAS,MAAO,CAAA,EAAA,GAAK,EAAE,MAAO,CAAA,MAAA,CAAO,EAAE,CAAI,GAAA,IAAA;AACjD,IAAA,MAAM,YAAWA,GAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,QAAR,KAAA,IAAA,GAAAA,MAAoB,CAAE,CAAA,MAAA;AACvC,IAAA,MAAM,MAAM,CAAC,IAAA,EAAc,KAAiC,GAAA,OAAO,MAAM;AA/2B7E,MAAAA,IAAAA,GAAAA;AAg3BM,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAW,UAAA,EAAA;AACX,QAAA;AAAA;AAGF,MAAI,IAAA,MAAA,CAAO,SAAS,SAAa,IAAA,MAAA,IAAU,CAAC,MAAO,CAAA,IAAA,IAAQ,SAAS,UAAY,EAAA;AAC9E,QAAQ,OAAA,CAAA,MAAA,CAAO,EAAI,EAAA,EAAE,CAAA;AACrB,QAAS,QAAA,CAAA,MAAA,CAAO,EAAI,EAAA,IAAA,EAAM,KAAK,CAAA;AAC/B,QAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,eAAgB,IAAI,CAAA;AACxC,QAAA;AAAA;AAEF,MAAS,QAAA,CAAA,QAAA,EAAA,CAAUA,GAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,EAAR,KAAA,IAAA,GAAAA,MAAc,SAAU,CAAA,CAAC,CAAG,EAAA,IAAA,EAAM,KAAK,CAAA;AAAA,KAC5D;AACA,IAAM,MAAA,OAAA,GAAU,CAAC,CAAA,KAAc,MAAG;AA73BtC,MAAAA,IAAAA,GAAAA;AA63ByC,MAAQ,OAAA,OAAA,CAAA,YAAA,CAAa,CAAC,CAAA,EAAG,QAAUA,EAAAA,CAAAA,GAAAA,GAAA,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,EAAA,KAAR,IAAAA,GAAAA,GAAAA,GAAc,SAAU,CAAA,CAAC,CAAC,CAAA;AAAA,KAAA;AAClG,IAAA,OAAO,CAAC,CAAC;AAAA,MACP,GAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,eAAA;AAAA,MACN,OAAA,EAAS,IAAI,OAAO;AAAA,KACnB,EAAA;AAAA,MACD,GAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,kBAAA;AAAA,MACN,OAAA,EAAS,IAAI,OAAO;AAAA,KACnB,EAAA;AAAA,MACD,GAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,uBAAA;AAAA,MACN,OAAA,EAAS,IAAI,OAAO;AAAA,KACnB,EAAA;AAAA,MACD,GAAK,EAAA,MAAA;AAAA,MACL,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,yBAAA;AAAA,MACN,OAAA,EAAS,IAAI,MAAM;AAAA,KAClB,EAAA;AAAA,MACD,GAAK,EAAA,UAAA;AAAA,MACL,KAAO,EAAA,UAAA;AAAA,MACP,IAAM,EAAA,kBAAA;AAAA,MACN,OAAA,EAAS,IAAI,UAAU;AAAA,KACtB,EAAA;AAAA,MACD,GAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,eAAA;AAAA,MACN,OAAA,EAAS,IAAI,OAAS,EAAA;AAAA,QACpB,SAAW,EAAA;AAAA,OACZ;AAAA,KACF,GAAG,CAAC;AAAA,MACH,GAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,cAAA;AAAA,MACN,OAAA,EAAS,IAAI,OAAS,EAAA;AAAA,QACpB,IAAA,EAAM,CAAC,CAAC,EAAA,EAAI,EAAE,CAAG,EAAA,CAAC,EAAI,EAAA,EAAE,CAAC,CAAA;AAAA,QACzB,YAAc,EAAA;AAAA,OACf;AAAA,KACA,EAAA;AAAA,MACD,GAAK,EAAA,MAAA;AAAA,MACL,KAAO,EAAA,WAAA;AAAA,MACP,IAAM,EAAA,eAAA;AAAA,MACN,OAAA,EAAS,QAAQ,CAAC;AAAA,KACjB,EAAA;AAAA,MACD,GAAK,EAAA,MAAA;AAAA,MACL,KAAO,EAAA,WAAA;AAAA,MACP,IAAM,EAAA,uBAAA;AAAA,MACN,OAAA,EAAS,QAAQ,CAAC;AAAA,KACjB,EAAA;AAAA,MACD,GAAK,EAAA,UAAA;AAAA,MACL,KAAO,EAAA,gBAAA;AAAA,MACP,IAAM,EAAA,oBAAA;AAAA,MACN,OAAA,EAAS,IAAI,UAAY,EAAA;AAAA,QACvB,UAAY,EAAA;AAAA,OACb;AAAA,KACA,EAAA;AAAA,MACD,GAAK,EAAA,KAAA;AAAA,MACL,KAAO,EAAA,mBAAA;AAAA,MACP,IAAM,EAAA,cAAA;AAAA,MACN,OAAA,EAAS,IAAI,mBAAmB;AAAA,KAC/B,EAAA;AAAA,MACD,GAAK,EAAA,SAAA;AAAA,MACL,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,gBAAA;AAAA,MACN,OAAA,EAAS,IAAI,SAAS;AAAA,KACrB,EAAA;AAAA,MACD,GAAK,EAAA,MAAA;AAAA,MACL,KAAO,EAAA,UAAA;AAAA,MACP,IAAM,EAAA,uBAAA;AAAA,MACN,OAAA,EAAS,IAAI,MAAM;AAAA,KAClB,EAAA;AAAA,MACD,GAAK,EAAA,UAAA;AAAA,MACL,KAAO,EAAA,UAAA;AAAA,MACP,IAAM,EAAA,gBAAA;AAAA,MACN,OAAA,EAAS,GAAI,CAAA,UAAA,EAAY,uBAAuB;AAAA,KACjD,GAAG,CAAC;AAAA,MACH,GAAK,EAAA,MAAA;AAAA,MACL,KAAO,EAAA,YAAA;AAAA,MACP,IAAM,EAAA,kBAAA;AAAA,MACN,OAAA,EAAS,IAAI,MAAM;AAAA,KAClB,EAAA;AAAA,MACD,GAAK,EAAA,QAAA;AAAA,MACL,KAAO,EAAA,aAAA;AAAA,MACP,IAAM,EAAA,uBAAA;AAAA,MACN,OAAA,EAAS,IAAI,QAAQ;AAAA,KACpB,EAAA;AAAA,MACD,GAAK,EAAA,SAAA;AAAA,MACL,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,cAAA;AAAA,MACN,OAAA,EAAS,IAAI,SAAW,EAAA;AAAA,QACtB,IAAM,EAAA;AAAA,UACJ,KAAO,EAAA;AAAA;AACT,OACD;AAAA,KACA,EAAA;AAAA,MACD,GAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,0BAAA;AAAA,MACN,OAAA,EAAS,IAAI,OAAO;AAAA,KACnB,EAAA;AAAA,MACD,GAAK,EAAA,MAAA;AAAA,MACL,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,oBAAA;AAAA,MACN,OAAA,EAAS,IAAI,MAAM;AAAA,KACpB,CAAC,CAAA;AAAA,GACJ;AACA,EAAM,MAAA,aAAA,GAAgB,CAAC,GAAiB,KAAA;AA1+B1C,IAAAA,IAAAA,GAAAA;AA2+BI,IAAA,MAAM,MAAS,GAAA,UAAA;AACf,IAAM,MAAA,KAAA,GAAQ,UAASA,GAAA,GAAA,QAAA,CAAS,YAAT,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAkB,MAAO,CAAA,MAAA,CAAO,EAAM,CAAA,GAAA,IAAA;AAC7D,IAAI,IAAA,CAAC,MAAU,IAAA,CAAC,KAAO,EAAA;AACvB,IAAM,MAAA,IAAA,GAAO,YAAa,CAAA,KAAA,CAAM,IAAM,EAAA,MAAA,CAAO,IAAI,MAAO,CAAA,EAAA,GAAK,CAAG,EAAA,CAAC,GAAK,EAAA;AAAA,MACpE,OAAS,EAAA;AAAA,KACV,CAAC,CAAA;AACF,IAAA,UAAA,CAAW,MAAO,CAAA,EAAA,EAAI,KAAM,CAAA,IAAA,EAAM,IAAI,CAAA;AACtC,IAAA,eAAA,CAAgB,OAAO,EAAE,CAAA;AAAA,GAC3B;AAGA,EAAA,MAAM,kBAAkB,MAAgB;AAt/B1C,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AAu/BI,IAAM,MAAA,GAAA,uBAAU,GAAY,EAAA;AAC5B,IAAA,MAAA,CAAO,QAAOA,GAAAD,GAAAA,CAAAA,GAAAA,GAAA,SAAS,OAAT,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAkB,MAAlB,KAAA,IAAA,GAAAC,GAA4B,GAAA,EAAE,CAAE,CAAA,OAAA,CAAQ,OAAK,CAAE,CAAA,IAAA,CAAK,QAAQ,CAAK,CAAA,KAAA;AAx/BnF,MAAAD,IAAAA,GAAAA;AAy/BM,MAAA,IAAA,CAAA,CAAIA,GAAA,GAAA,CAAA,CAAE,OAAF,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAW,IAAS,MAAA,MAAA,IAAU,CAAE,CAAA,OAAA,CAAQ,IAAM,EAAA,GAAA,CAAI,GAAI,CAAA,CAAA,CAAE,QAAQ,IAAI,CAAA;AAAA,KACzE,CAAC,CAAA;AACF,IAAO,OAAA,CAAC,GAAG,GAAG,CAAA;AAAA,GAChB;AACA,EAAM,MAAA,OAAA,GAAU,CAAC,EAAA,EAAY,KAAuB,KAAA;AAClD,IAAA,MAAM,GAAM,GAAA,UAAA,CAAW,OAAQ,CAAA,GAAA,CAAI,EAAE,CAAA;AACrC,IAAA,MAAM,SAAS,CAAC,CAAC,GAAO,IAAA,GAAA,CAAI,MAAM,GAAI,CAAA,KAAA;AACtC,IAAA,OAAO,MAAS,GAAA;AAAA,MACd,OAAO,GAAI,CAAA,KAAA;AAAA,MACX,KAAK,GAAI,CAAA,GAAA;AAAA,MACT;AAAA,KACE,GAAA;AAAA,MACF,KAAO,EAAA,CAAA;AAAA,MACP,GAAA,EAAK,MAAM,IAAK,CAAA,MAAA;AAAA,MAChB;AAAA,KACF;AAAA,GACF;AAGA,EAAM,MAAA,UAAA,GAAa,CAAC,GAAoE,KAAA;AA5gC1F,IAAAA,IAAAA,GAAAA;AA6gCI,IAAA,MAAM,EAAK,GAAA,SAAA;AACX,IAAM,MAAA,KAAA,GAAQ,MAAKA,GAAA,GAAA,QAAA,CAAS,YAAT,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAkB,OAAO,EAAM,CAAA,GAAA,IAAA;AAClD,IAAA,IAAI,CAAC,EAAM,IAAA,CAAC,KAAS,IAAA,CAAC,MAAM,IAAM,EAAA;AAClC,IAAM,MAAA,CAAA,GAAI,OAAQ,CAAA,EAAA,EAAI,KAAK,CAAA;AAC3B,IAAM,MAAA,EAAA,GAAK,CAAC,cAAe,CAAA,KAAA,CAAM,MAAM,CAAE,CAAA,KAAA,EAAO,CAAE,CAAA,GAAA,EAAK,GAAG,CAAA;AAC1D,IAAM,MAAA,IAAA,GAAO,EAAE,MAAS,GAAA,gBAAA,CAAiB,MAAM,IAAM,EAAA,CAAA,CAAE,KAAO,EAAA,CAAA,CAAE,GAAK,EAAA;AAAA,MACnE,CAAC,GAAG,GAAG;AAAA,KACR,CAAA,GAAI,gBAAiB,CAAA,KAAA,CAAM,IAAM,EAAA;AAAA,MAChC,CAAC,GAAG,GAAG;AAAA,KACR,CAAA;AACD,IAAW,UAAA,CAAA,EAAA,EAAI,KAAM,CAAA,IAAA,EAAM,IAAI,CAAA;AAAA,GACjC;AACA,EAAM,MAAA,SAAA,GAAY,CAAC,MAAwB,KAAA;AAzhC7C,IAAAA,IAAAA,GAAAA;AA0hCI,IAAA,MAAM,MAAS,GAAA,QAAA;AACf,IAAM,MAAA,KAAA,GAAQ,UAASA,GAAA,GAAA,QAAA,CAAS,YAAT,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAkB,MAAO,CAAA,MAAA,CAAO,EAAM,CAAA,GAAA,IAAA;AAC7D,IAAI,IAAA,CAAC,MAAU,IAAA,CAAC,KAAO,EAAA;AACvB,IAAI,IAAA,MAAA,CAAO,SAAS,QAAU,EAAA;AAC5B,MAAA,MAAM,CAAI,GAAA,OAAA,CAAQ,MAAO,CAAA,EAAA,EAAI,KAAK,CAAA;AAClC,MAAM,MAAA,MAAA,GAAS,MAAO,CAAA,IAAA,KAAS,MAAS,GAAA;AAAA,QACtC,OAAO,MAAO,CAAA;AAAA,OACZ,GAAA;AAAA,QACF,WAAW,MAAO,CAAA;AAAA,OACpB;AACA,MAAA,MAAM,IAAO,GAAA,CAAA,CAAE,MAAS,GAAA,gBAAA,CAAiB,MAAM,IAAM,EAAA,CAAA,CAAE,KAAO,EAAA,CAAA,CAAE,KAAK,MAAM,CAAA,GAAI,gBAAiB,CAAA,KAAA,CAAM,MAAM,MAAM,CAAA;AAClH,MAAA,UAAA,CAAW,MAAO,CAAA,EAAA,EAAI,KAAM,CAAA,IAAA,EAAM,IAAI,CAAA;AACtC,MAAA;AAAA;AAGF,IAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,GAAQ,MAAO,CAAA,IAAA,KAAS,YAAe,GAAA,CAAA,EAAG,MAAO,CAAA,KAAK,CAAgB,WAAA,CAAA,GAAA,MAAA,CAAO,KAAQ,GAAA,IAAA;AAC1G,IAAA,aAAA,CAAc,OAAO,EAAI,EAAA;AAAA,MACvB,KAAO,EAAA;AAAA,KACR,CAAA;AAAA,GACH;AAGA,EAAA,MAAM,gBAAgB,CAAC,EAAA,EAAY,KAAgC,EAAA,IAAA,GAE/D,EAAO,KAAA;AAljCb,IAAAA,IAAAA,GAAAA;AAmjCI,IAAA,MAAM,SAAQA,GAAA,GAAA,QAAA,CAAS,OAAT,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAkB,MAAO,CAAA,EAAA,CAAA;AACvC,IAAA,IAAI,CAAC,KAAO,EAAA;AACZ,IAAA,MAAM,cAAuC,EAAC;AAC9C,IAAA,MAAA,CAAO,IAAK,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,CAAK,CAAA,KAAA;AAtjCpC,MAAAA,IAAAA,GAAAA;AAujCM,MAAY,WAAA,CAAA,CAAC,KAAIA,GAAA,GAAA,KAAA,CAAM,WAAW,CAAC,CAAA,KAAlB,OAAAA,GAAuB,GAAA,IAAA;AAAA,KACzC,CAAA;AACD,IAAA,QAAA,CAAS,CAAK,CAAA,KAAA,CAAA,GAAI,UAAW,CAAA,CAAA,EAAG,EAAI,EAAA;AAAA,MAClC,UAAA,EAAY,cACP,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,UACN,CAAA,EAAA,KAAA;AAAA,KAEN,IAAI,CAAC,CAAA;AACN,IAAA,WAAA,CAAY,IAAI,KAAK,CAAA;AACrB,IAAI,IAAA,IAAA,CAAK,WAAW,KAAO,EAAA;AACzB,MAAO,MAAA,CAAA;AAAA,QACL,IAAM,EAAA,MAAM,aAAc,CAAA,EAAA,EAAI,WAAa,EAAA;AAAA,UACzC,MAAQ,EAAA;AAAA,SACT,CAAA;AAAA,QACD,IAAM,EAAA,MAAM,aAAc,CAAA,EAAA,EAAI,KAAO,EAAA;AAAA,UACnC,MAAQ,EAAA;AAAA,SACT;AAAA,OACF,CAAA;AAAA;AACH,GACF;AACA,EAAA,MAAM,WAAW,MAAM;AA3kCzB,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AA4kCI,IAAA,MAAM,EAAK,GAAA,SAAA;AACX,IAAM,MAAA,KAAA,GAAQ,MAAKD,GAAA,GAAA,QAAA,CAAS,YAAT,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAkB,OAAO,EAAM,CAAA,GAAA,IAAA;AAClD,IAAA,IAAI,CAAC,EAAM,IAAA,CAAC,KAAS,IAAA,CAAC,MAAM,IAAM,EAAA;AAClC,IAAM,MAAA,CAAA,GAAI,OAAQ,CAAA,EAAA,EAAI,KAAK,CAAA;AAC3B,IAAW,UAAA,CAAA;AAAA,MACT,EAAA;AAAA,MACA,OAAO,CAAE,CAAA,KAAA;AAAA,MACT,KAAK,CAAE,CAAA,GAAA;AAAA,MACP,OAAA,EAAA,CAASC,GAAA,GAAA,MAAA,CAAO,KAAM,CAAA,IAAA,EAAM,CAAE,CAAA,KAAA,EAAO,CAAE,CAAA,GAAG,CAAjC,KAAA,IAAA,GAAAA,GAAsC,GAAA;AAAA,KAChD,CAAA;AAAA,GACH;AACA,EAAM,MAAA,SAAA,GAAY,CAAC,GAAgB,KAAA;AAvlCrC,IAAAD,IAAAA,GAAAA;AAwlCI,IAAA,MAAM,MAAS,GAAA,OAAA;AACf,IAAM,MAAA,KAAA,GAAQ,UAASA,GAAA,GAAA,QAAA,CAAS,YAAT,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAkB,MAAO,CAAA,MAAA,CAAO,EAAM,CAAA,GAAA,IAAA;AAC7D,IAAI,IAAA,CAAC,MAAU,IAAA,CAAC,KAAO,EAAA;AACvB,IAAA,MAAM,OAAO,GAAI,CAAA,IAAA,EAAS,GAAA,WAAA,CAAY,KAAK,GAAI,CAAA,IAAA,EAAM,CAAA,GAAI,IAAI,IAAK,EAAA,GAAI,WAAW,GAAI,CAAA,IAAA,EAAM,CAAK,CAAA,GAAA,IAAA;AAChG,IAAM,MAAA,IAAA,GAAO,MAAO,CAAA,GAAA,GAAM,MAAO,CAAA,KAAA,GAAQ,gBAAiB,CAAA,KAAA,CAAM,IAAM,EAAA,MAAA,CAAO,KAAO,EAAA,MAAA,CAAO,GAAK,EAAA;AAAA,MAC9F;AAAA,KACD,CAAA,GAAI,gBAAiB,CAAA,KAAA,CAAM,IAAM,EAAA;AAAA,MAChC;AAAA,KACD,CAAA;AACD,IAAA,UAAA,CAAW,MAAO,CAAA,EAAA,EAAI,KAAM,CAAA,IAAA,EAAM,IAAI,CAAA;AAAA,GACxC;AAGA,EAAM,MAAA,aAAA,GAAgB,CAAC,EAAe,KAAA;AArmCxC,IAAAA,IAAAA,GAAAA;AAsmCI,IAAA,MAAM,SAAQA,GAAA,GAAA,QAAA,CAAS,OAAT,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAkB,MAAO,CAAA,EAAA,CAAA;AACvC,IAAA,IAAI,CAAC,KAAO,EAAA;AACZ,IAAA,OAAA,CAAQ,IAAI,YAAY;AAxmC5B,MAAAA,IAAAA,GAAAA;AAymCM,MAAM,MAAA,GAAA,GAAM,MAAM,KAAM,CAAA;AAAA,QACtB,QAAU,EAAA,6BAAA;AAAA,QACV,SAAW,EAAA;AAAA,UACT,OAAS,EAAA,EAAA;AAAA,UACT,eAAiB,EAAA;AAAA;AACnB,OACD,CAAA;AACD,MAAA,MAAM,IAAQA,GAAAA,CAAAA,GAAAA,GAAA,GAAI,CAAA,IAAA,KAAJ,gBAAAA,GAEH,CAAA,cAAA;AACX,MAAI,IAAA,EAAC,6BAAM,EAAI,CAAA,EAAA;AACf,MAAS,QAAA,CAAA,CAAA,CAAA,KAAK,CAAI,GAAA,WAAA,CAAY,CAAG,EAAA,aAAA,CAAc,IAAM,EAAA,KAAA,CAAM,QAAQ,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA;AAC7E,MAAA,WAAA,CAAY,QAAQ,GAAI,CAAA,IAAA,CAAK,EAAI,EAAA,UAAA,CAAW,IAAI,CAAC,CAAA;AACjD,MAAA,IAAI,IAA+B,GAAA,IAAA;AACnC,MAAO,MAAA,CAAA;AAAA,QACL,MAAM,MAAM;AACV,UAAO,IAAA,GAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,SAC5B;AAAA,QACA,IAAA,EAAM,MAAM,SAAA,CAAU,IAAI;AAAA,OAC3B,CAAA;AAAA,KACF,CAAA;AAAA,GACH;AACA,EAAA,MAAM,WAAW,CAAC,EAAA,EAAY,SAAmB,EAAA,IAAA,GAE7C,EAAO,KAAA;AACT,IAAA,MAAM,IAAI,QAAS,CAAA,OAAA;AACnB,IAAA,IAAI,CAAC,CAAG,EAAA;AACR,IAAA,MAAM,KAAQ,GAAA,iBAAA,CAAkB,CAAG,EAAA,EAAA,EAAI,SAAS,CAAA;AAChD,IAAA,IAAI,CAAC,KAAO,EAAA;AACZ,IAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AACpB,IAAQ,OAAA,CAAA,KAAA,CAAM,QAAU,EAAA,MAAM,KAAM,CAAA;AAAA,MAClC,QAAU,EAAA,8BAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,SAAS,KAAM,CAAA,QAAA;AAAA,QACf,UAAU,KAAM,CAAA;AAAA;AAClB,KACD,CAAC,CAAA;AACF,IAAI,IAAA,IAAA,CAAK,WAAW,KAAO,EAAA;AACzB,MAAO,MAAA,CAAA;AAAA,QACL,MAAM,MAAM,QAAA,CAAS,IAAI,SAAc,KAAA,CAAA,GAAI,KAAK,CAAG,EAAA;AAAA,UACjD,MAAQ,EAAA;AAAA,SACT,CAAA;AAAA,QACD,IAAM,EAAA,MAAM,QAAS,CAAA,EAAA,EAAI,SAAW,EAAA;AAAA,UAClC,MAAQ,EAAA;AAAA,SACT;AAAA,OACF,CAAA;AAAA;AACH,GACF;AACA,EAAM,MAAA,eAAA,GAAkB,CAAC,EAA+B,KAAA;AAzpC1D,IAAAA,IAAAA,GAAAA;AA0pCI,IAAA,MAAM,SAAQA,GAAA,GAAA,QAAA,CAAS,OAAT,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAkB,MAAO,CAAA,EAAA,CAAA;AACvC,IAAI,IAAA,CAAC,KAAO,EAAA,OAAO,EAAC;AACpB,IAAA,MAAM,YAAY,UAAW,CAAA,KAAA,CAAM,IAAI,CAAA,IAAK,MAAM,IAAS,KAAA,MAAA;AAC3D,IAAA,OAAO,CAAC,CAAC,GAAI,SAAA,GAAY,CAAC;AAAA,MACxB,GAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,aAAA;AAAA,MACP,IAAM,EAAA,uBAAA;AAAA,MACN,OAAA,EAAS,MAAM,WAAY,CAAA;AAAA,QACzB,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACD;AAAA,KACF,IAAI,EAAC,EAAI,GAAI,KAAM,CAAA,IAAA,KAAS,SAAS,CAAC;AAAA,MACrC,GAAK,EAAA,UAAA;AAAA,MACL,KAAO,EAAA,gBAAA;AAAA,MACP,IAAM,EAAA,oBAAA;AAAA,MACN,MAAQ,EAAA,aAAA,CAAc,KAAM,CAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,MAC/C,OAAA,EAAS,MAAM,cAAA,CAAe,EAAE;AAAA,KACjC,CAAI,GAAA,EAAK,EAAA;AAAA,MACR,GAAK,EAAA,SAAA;AAAA,MACL,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,oBAAA;AAAA,MACN,OAAA,EAAS,MAAM,cAAe,CAAA;AAAA,QAC5B,OAAS,EAAA;AAAA,OACV;AAAA,KACA,EAAA;AAAA,MACD,GAAK,EAAA,WAAA;AAAA,MACL,KAAO,EAAA,WAAA;AAAA,MACP,IAAM,EAAA,cAAA;AAAA,MACN,OAAA,EAAS,MAAM,aAAA,CAAc,EAAE;AAAA,KAC9B,EAAA;AAAA,MACD,GAAK,EAAA,IAAA;AAAA,MACL,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,UAAA;AAAA,MACN,OAAS,EAAA,MAAM,QAAS,CAAA,EAAA,EAAI,EAAE;AAAA,KAC7B,EAAA;AAAA,MACD,GAAK,EAAA,MAAA;AAAA,MACL,KAAO,EAAA,WAAA;AAAA,MACP,IAAM,EAAA,YAAA;AAAA,MACN,OAAS,EAAA,MAAM,QAAS,CAAA,EAAA,EAAI,CAAC;AAAA,KAC5B,EAAA;AAAA,MACD,GAAK,EAAA,MAAA;AAAA,MACL,KAAO,EAAA,oBAAA;AAAA,MACP,IAAM,EAAA,cAAA;AAAA,MACN,SAAS,MAAM;AACb,QAAA,IAAI,CAAC,OAAS,EAAA;AACd,QAAU,SAAA,CAAA,SAAA,CAAU,CAAG,EAAA,WAAA,CAAY,SAAU,EAAA,EAAG,OAAO,CAAC,CAAU,OAAA,EAAA,kBAAA,CAAmB,EAAE,CAAC,CAAE,CAAA,CAAA;AAC1F,QAAA,WAAA,CAAY,SAAU,CAAA;AAAA,UACpB,OAAS,EAAA;AAAA,SACV,CAAA;AAAA;AACH,KACD,GAAG,CAAC;AAAA,MACH,GAAK,EAAA,QAAA;AAAA,MACL,KAAO,EAAA,QAAA;AAAA,MACP,IAAM,EAAA,eAAA;AAAA,MACN,WAAa,EAAA,IAAA;AAAA,MACb,OAAA,EAAS,MAAM,UAAA,CAAW,EAAE;AAAA,KAC7B,CAAC,CAAA;AAAA,GACJ;AAGA,EAAA,MAAM,CAAC,SAAW,EAAA,YAAY,IAAI,QAAsB,iBAAA,IAAI,KAAK,CAAA;AACjE,EAAA,MAAM,eAAkB,GAAA,CAAC,EAAe,KAAA,YAAA,CAAa,CAAO,GAAA,KAAA;AAC1D,IAAM,MAAA,IAAA,GAAO,IAAI,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,IAAI,KAAK,GAAI,CAAA,EAAE,CAAG,EAAA,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,SAAO,IAAA,CAAK,IAAI,EAAE,CAAA;AAClD,IAAO,OAAA,IAAA;AAAA,GACR,CAAA;AACD,EAAM,MAAA,QAAA,GAAW,CAAC,IAAqB,KAAA;AA5tCzC,IAAAA,IAAAA,GAAAA;AA6tCI,IAAM,MAAA;AAAA,MACJ;AAAA,KACE,GAAA,IAAA;AACJ,IAAA,MAAM,IAAI,QAAS,CAAA,OAAA;AACnB,IAAI,IAAA,KAAA,CAAM,SAAS,QAAY,IAAA,CAAA,IAAK,CAAC,SAAU,CAAA,GAAA,CAAI,KAAM,CAAA,EAAE,CAAK,IAAA,CAAA,CAAA,CAAEA,MAAA,CAAE,CAAA,QAAA,CAAS,KAAM,CAAA,EAAE,CAAnB,KAAA,IAAA,GAAAA,MAAwB,EAAC,EAAG,MAAU,IAAA,KAAA,CAAM,IAAM,EAAA;AAClH,MAAS,QAAA,CAAA,KAAA,CAAM,EAAI,EAAA,IAAA,EAAM,WAAW,CAAA;AACpC,MAAA;AAAA;AAGF,IAAI,IAAA,CAAC,KAAM,CAAA,IAAA,IAAQ,KAAM,CAAA,IAAA,KAAS,WAAe,IAAA,aAAA,CAAc,KAAM,CAAA,IAAI,CAAM,KAAA,KAAA,CAAM,IAAM,EAAA;AACzF,MAAS,QAAA,CAAA,KAAA,CAAM,IAAI,WAAW,CAAA;AAC9B,MAAA;AAAA;AAEF,IAAA,QAAA,CAAS,MAAM,QAAU,EAAA,KAAA,CAAM,IAAI,aAAc,CAAA,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,GAC9D;AACA,EAAM,MAAA,WAAA,GAAc,CAAC,IAAqB,KAAA;AACxC,IAAM,MAAA;AAAA,MACJ;AAAA,KACE,GAAA,IAAA;AACJ,IAAA,IAAI,MAAM,IAAM,EAAA;AAEhB,IAAI,IAAA,KAAA,CAAM,SAAS,WAAe,IAAA,KAAA,CAAM,SAAS,MAAQ,EAAA,QAAA,CAAS,KAAM,CAAA,EAAA,EAAI,WAAW,CAAA;AAAA,SAAO,UAAA,CAAW,MAAM,EAAE,CAAA;AAAA,GACnH;AACA,EAAA,MAAM,UAAa,GAAA,CAAC,KAAuB,KAAA,aAAA,CAAc,MAAM,EAAI,EAAA;AAAA,IACjE,OAAA,EAAS,KAAM,CAAA,UAAA,CAAW,OAAY,KAAA;AAAA,GACvC,CAAA;AACD,EAAA,MAAM,aAAa,MAAM;AAvvC3B,IAAA,IAAAA,KAAAC,GAAAG,EAAAA,GAAAA;AAwvCI,IAAA,MAAM,IAAI,QAAS,CAAA,OAAA;AACnB,IAAA,IAAI,CAAC,CAAG,EAAA;AACR,IAAA,MAAM,MAAS,GAAA,SAAA,GAAY,CAAE,CAAA,MAAA,CAAO,SAAS,CAAI,GAAA,IAAA;AACjD,IAAA,MAAM,EAAK,GAAA,QAAA,CAAA,CAASJ,GAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,aAAR,IAAAA,GAAAA,GAAAA,GAAoB,CAAE,CAAA,MAAA,EAAA,CAAQC,MAAA,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,EAAA,KAAR,IAAAA,GAAAA,GAAAA,GAAc,MAAM,MAAM,CAAA;AAC5E,IAAA,QAAA,CAAS,OAAQ,EAAA;AAEjB,IAAAG,CAAAA,GAAAA,GAAA,MAAO,CAAA,OAAA,CAAQ,GAAI,CAAA,EAAE,CAArB,KAAA,IAAA,GAAA,MAAA,GAAAA,GAAwB,CAAA,IAAA,CAAK,MAAM,QAAA,CAAS,EAAE,CAAA,CAAA;AAAA,GAChD;AACA,EAAA,MAAM,cAAc,MAAM;AAhwC5B,IAAAJ,IAAAA,GAAAA;AAiwCI,IAAA,MAAM,IAAI,QAAS,CAAA,OAAA;AACnB,IAAA,IAAI,CAAC,CAAG,EAAA;AACR,IAAM,MAAA,GAAA,GAAA,CAAMA,MAAA,CAAE,CAAA,QAAA,CAAS,EAAE,MAAM,CAAA,KAAnB,IAAAA,GAAAA,GAAAA,GAAwB,EAAC;AACrC,IAAM,MAAA,IAAA,GAAO,GAAI,CAAA,MAAA,GAAS,CAAE,CAAA,MAAA,CAAO,IAAI,GAAI,CAAA,MAAA,GAAS,CAAC,CAAC,CAAI,GAAA,IAAA;AAC1D,IAAI,IAAA,IAAA,IAAQ,UAAW,CAAA,IAAA,CAAK,IAAI,CAAA,IAAK,CAAC,IAAK,CAAA,IAAA,EAAsB,eAAA,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,SAAgB,QAAA,CAAA,CAAA,CAAE,MAAQ,EAAA,IAAA,EAAM,WAAW,CAAA;AAAA,GACrH;AACA,EAAA,MAAM,KAAQ,GAAA,OAAA,CAAQ,MAAM,KAAA,GAAQ,YAAa,CAAA,KAAA,EAAO,SAAS,CAAA,GAAI,EAAC,EAAG,CAAC,KAAA,EAAO,SAAS,CAAC,CAAA;AAC3F,EAAA,MAAM,WAAW,OAAQ,CAAA,MAAM,MAAM,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,KAAM,CAAA,IAAA,CAAK,WAAW,UAAU,CAAA,IAAK,EAAE,KAAM,CAAA,IAAA,CAAK,MAAM,CAAA,CAAE,IAAI,CAAM,CAAA,MAAA;AAAA,IACrH,EAAA,EAAI,EAAE,KAAM,CAAA,EAAA;AAAA,IACZ,IAAM,EAAA,CAAA,CAAE,KAAM,CAAA,IAAA,CAAK,IAAK,EAAA;AAAA,IACxB,OAAO,MAAO,CAAA,CAAA,CAAE,MAAM,IAAK,CAAA,KAAA,CAAM,EAAE,CAAC;AAAA,GACpC,CAAA,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACZ,EAAM,MAAA,OAAA,GAAU,aAAa,KAAQ,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAO,SAAS,CAAA,KAAtB,YAA2B,IAAO,GAAA,IAAA;AACvE,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,IAAA,IAAQ,CAAC,IAAM,EAAA;AAC5B,IAAA,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,MAAQ,EAAA;AAAA,MAClC,iBAAiB,OAAQ,CAAA;AAAA,KAC1B,CAAA,EACY,QAAW,EAAA,OAAA,IAAA,SAAA,CAAU,OAAW,IAAA,CAAC,OAAU,mBAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,KAAA,EAAO,OAAQ,CAAA,OAAA,EAAS,oBAC/E,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,KAAO,EAAA;AAAA,QAC1C,OAAO,KAAS,IAAA,SAAA,CAAU,KAAQ,GAAA,OAAA,CAAQ,SAAS,OAAQ,CAAA;AAAA,OAC5D,CACoB,EAAA,QAAA,EAAA,KAAA,IAAS,SAAU,CAAA,KAAA,GAAQ,6BAA6B,0BAC7D,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,SAAA,EAAA,EAAU,iBAAkB,EAAA,QAAA,EAAS,SAAS,MAAM;AACnE,QAAQ,OAAA,EAAA;AACR,QAAA,SAAA,CAAU,OAAQ,EAAA;AAAA,SACjB,KAAO,EAAA,MAAA,CAAO,KACG,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAK,KAAO,EAAA;AAAA,QAC7B,OAAO,OAAQ,CAAA,OAAA;AAAA,QACf,UAAY,EAAA;AAAA,OACd,EAAG,uBAAS,CACE,EAAA;AAAA,KAAA,EACJ,CACR,EAAA,CAAA;AAAA;AAEV,EAAA,uBAAQ,IAAA,CAAA,oBAAA,EAAA,EAAqB,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,IAChD,iBAAiB,OAAQ,CAAA;AAAA,GAC1B,CAAA,EAAG,QAAU,EAAA,QAAA,CAAS,OAAO,KAAQ,GAAA,SAAA,GAAY,MAAW,EAAA,sBAAA,EAAwB,SAAS,EAAO,KAAA,KAAA,GAAQ,MAAO,CAAA,GAAA,GAAM,KAAK,CACrH,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,IAAA,EAAM,uBAAuB,MAAO,CAAA,OAAA,EAAS,yBAA0B,EAAA,SAAA,EAAU,cAAgB,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,UAAA,EAAwB,WAAW,YAAY;AAvyCtM,MAAA,IAAAA,GAAAC,EAAAA,GAAAA;AAwyCM,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAI,IAAA;AACF,QAAA,MAAM,CAAC,GAAA,EAAK,OAAO,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAI,CAAA,CAAC,OAAQ,EAAA,EAAG,SAAU,CAAA,OAAA,EAAS,CAAC,CAAA;AACzE,QAAA,MAAM,IAAOD,GAAAA,CAAAA,GAAAA,GAAA,GAAI,CAAA,IAAA,KAAJ,gBAAAA,GAAU,CAAA,YAAA;AACvB,QAAA,MAAM,QAAWC,GAAAA,CAAAA,GAAAA,GAAA,OAAQ,CAAA,IAAA,KAAR,gBAAAA,GAAc,CAAA,QAAA;AAC/B,QAAI,IAAA,IAAA,IAAQ,YAAY,CAAC,OAAA,CAAQ,QAAQ,IAAQ,IAAA,CAAC,SAAS,OAAS,EAAA;AAClE,UAAA,SAAA,CAAU,MAAM,QAAQ,CAAA;AAAA;AAC1B,OACA,SAAA;AACA,QAAA,aAAA,CAAc,KAAK,CAAA;AAAA;AACrB,OACC,CACS,EAAA,QAAA,EAAA;AAAA,sBAAC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,WAChB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,aAAU,iBAAkB,EAAA,QAAA,EAAS,oBAAoB,IAAO,GAAA,aAAA,GAAgB,YAAY,OAAS,EAAA,MAAM,CAAC,QAAA,CAAS,UAAU,aAAc,CAAA,CAAA,CAAA,KAAK,CAAC,CAAC,CAAA,EAAG,OAAO,CAAC;AAAA,UAC1K;AAAA,SACI,KAAA,CAAC,MAAO,CAAA,UAAA,EAAY,OAAW,IAAA;AAAA,UACnC,iBAAiB,OAAQ,CAAA;AAAA,SAC1B,CACgB,EAAA,QAAA,EAAA,IAAA,mBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,MAAO,CAAA,SAAA,EAAY,QAAK,EAAA,IAAA,EAAA,CAAA,mBACrC,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,YAAS,IAAK,EAAA,eAAA,EAAgB,MAAM,EAAI,EAAA,KAAA,EAAO,QAAQ,SAAW,EAAA,CAAA;AAAA,0BAClE,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,eAAiB,EAAA;AAAA,YACxD,OAAO,OAAQ,CAAA;AAAA,WAChB,GAAG,QAAQ,EAAA,UAAA,EAAA;AAAA,SAAA,EACI,CACR,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,IAAM,EAAA,CAAA;AAAA,4BACzB,SAAU,EAAA,EAAA,iBAAA,EAAkB,UAAS,kBAAmB,EAAA,wBAAA,EAAyB,SAAS,MAAM;AAC3G,UAAA,QAAA,CAAS,OAAQ,EAAA;AACjB,UAAA,KAAA,CAAM,IAAI,UAAU,CAAA;AAAA,SACnB,EAAA,OAAA,EAAS,CAAG,EAAA,KAAA,EAAO,CAAC;AAAA,UACrB;AAAA,SACI,KAAA,CAAC,MAAO,CAAA,UAAA,EAAY,OAAW,IAAA;AAAA,UACnC,iBAAiB,OAAQ,CAAA;AAAA,SAC1B,CACe,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAK,UAAW,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAO,OAAQ,CAAA,OAAA,EAAS,CAChE,EAAA,CAAA;AAAA,4BACC,SAAU,EAAA,EAAA,iBAAA,EAAkB,UAAS,kBAAmB,EAAA,OAAA,EAAQ,SAAS,MAAM;AAC1F,UAAA,QAAA,CAAS,OAAQ,EAAA;AACjB,UAAA,YAAA,CAAa,IAAI,CAAA;AAAA,SAChB,EAAA,OAAA,EAAS,CAAG,EAAA,KAAA,EAAO,CAAC;AAAA,UACrB;AAAA,SACI,KAAA,CAAC,MAAO,CAAA,UAAA,EAAY,OAAW,IAAA;AAAA,UACnC,iBAAiB,OAAQ,CAAA;AAAA,SAC1B,CACe,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,UAC7C,OAAO,OAAQ,CAAA;AAAA,SAChB,CAAG,EAAA,QAAA,EAAA,OAAA,EAAK,CACC,EAAA,CAAA;AAAA,wBACA,IAAA,CAAC,SAAU,EAAA,EAAA,iBAAA,EAAkB,QAAS,EAAA,kBAAA,EAAoB,YAAe,GAAA,CAAA,UAAA,EAAa,YAAY,CAAA,KAAA,CAAA,GAAU,UAAY,EAAA,OAAA,EAAS,MAAM;AACjJ,UAAA,QAAA,CAAS,OAAQ,EAAA;AACjB,UAAe,cAAA,CAAA;AAAA,YACb,OAAS,EAAA;AAAA,WACV,CAAA;AAAA,SACA,EAAA,OAAA,EAAS,CAAG,EAAA,KAAA,EAAO,CAAC;AAAA,UACrB;AAAA,SACI,KAAA,CAAC,MAAO,CAAA,UAAA,EAAY,OAAW,IAAA;AAAA,UACnC,iBAAiB,OAAQ,CAAA;AAAA,SAC1B,CACe,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,YAAS,IAAK,EAAA,oBAAA,EAAqB,MAAM,EAAI,EAAA,KAAA,EAAO,QAAQ,SAAW,EAAA,CAAA;AAAA,UACvE,+BAAgB,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,YAAc,EAAA;AAAA,YAC/D,OAAO,OAAQ,CAAA;AAAA,WAChB,CAAI,EAAA,QAAA,EAAA,YAAA,EAAa,CAAU,GAAA;AAAA,SAClB,EAAA,CAAA;AAAA,QACC,OAAA,uBAAW,SAAU,EAAA,EAAA,iBAAA,EAAkB,UAAS,kBAAoB,EAAA,MAAA,CAAO,WAAY,CAAA,QAAA,CAAS,OAAO,CAAA,GAAI,0BAA0B,kBAAoB,EAAA,OAAA,EAAS,MAAM,MAAO,CAAA,kBAAA,CAAmB,OAAO,CAAE,CAAA,KAAA,CAAM,MAAM,WAAA,CAAY,SAAU,CAAA;AAAA,UACxP,OAAS,EAAA;AAAA,SACV,CAAC,CAAA,EAAG,OAAS,EAAA,CAAA,EAAG,OAAO,CAAC;AAAA,UACvB;AAAA,SACI,KAAA,CAAC,MAAO,CAAA,UAAA,EAAY,OAAW,IAAA;AAAA,UACnC,iBAAiB,OAAQ,CAAA;AAAA,SAC1B,CACmB,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAM,OAAO,WAAY,CAAA,QAAA,CAAS,OAAO,CAAA,GAAI,MAAS,GAAA,cAAA,EAAgB,MAAM,EAAI,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,CAAY,QAAS,CAAA,OAAO,IAAI,SAAY,GAAA,OAAA,CAAQ,SAAW,EAAA,CAAA,EAC3K,CAAe,GAAA,IAAA;AAAA,wBACnB,GAAA,CAAC,SAAU,EAAA,EAAA,iBAAA,EAAkB,QAAS,EAAA,kBAAA,EAAmB,cAAe,EAAA,OAAA,EAAS,YAAc,EAAA,OAAA,EAAS,CAAG,EAAA,KAAA,EAAO,CAAC;AAAA,UAC7H;AAAA,SACI,KAAA,CAAC,MAAO,CAAA,UAAA,EAAY,OAAW,IAAA;AAAA,UACnC,iBAAiB,OAAQ,CAAA;AAAA,SAC1B,CACe,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAK,qBAAsB,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAO,OAAQ,CAAA,SAAA,EAAW,CAC7E,EAAA;AAAA,OACJ,EAAA,CAAA;AAAA,MACC,SAAS,MAAS,mBAAA,IAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,QAC5D,iBAAiB,OAAQ,CAAA;AAAA,OAC1B,CACiB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAS,IAAK,EAAA,aAAA,EAAc,MAAM,EAAI,EAAA,KAAA,EAAO,QAAQ,SAAW,EAAA,CAAA;AAAA,wBAChE,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,UAC7C,OAAO,OAAQ,CAAA;AAAA,SAChB,GAAG,QAAmB,EAAA,qBAAA,EAAA,CAAA;AAAA,wBACP,GAAA,CAAC,aAAU,iBAAkB,EAAA,QAAA,EAAS,SAAS,MAAM,SAAA,CAAU,kBAAkB,SAAW,EAAA,QAAA,EAAU,KAAK,CAAC,CAAA,EAAG,SAAS,CACpH,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,UACjD,OAAO,OAAQ,CAAA;AAAA,SAChB,CAAG,EAAA,QAAA,EAAA,QAAA,EAAM,CACI,EAAA;AAAA,OAAA,EACJ,CAAU,GAAA,IAAA;AAAA,MACb,6BAAc,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,SAAW,EAAA;AAAA,QACtD,iBAAiB,OAAQ,CAAA;AAAA,OAC1B,CACkB,EAAA,QAAA,EAAA;AAAA,QAAY,WAAA,CAAA,GAAA,CAAI,uBAAM,GAAA,CAAA,SAAA,EAAA,EAAkB,mBAAkB,QAAS,EAAA,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,CAAA,EAAG,OAAO,MAAO,CAAA,SAAA,EACtG,8BAAC,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,KAAQ,EAAA,QAAA,EAAA,CAAA,EAAE,CADA,EAAA,EAAA,CAElC,CAAY,CAAA;AAAA,QACf,IAAO,mBAAA,GAAA,CAAC,SAAU,EAAA,EAAA,iBAAA,EAAkB,UAAS,OAAS,EAAA,MAAM,QAAS,CAAA,IAAI,GAAG,KAAO,EAAA,MAAA,CAAO,WACnF,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAK,KAAO,EAAA;AAAA,UACjC,OAAO,OAAQ,CAAA,MAAA;AAAA,UACf,UAAY,EAAA;AAAA,SACd,EAAG,QAAW,EAAA,aAAA,EAAA,CAAA,EACI,CAAe,GAAA;AAAA,OAAA,EACvB,CAAU,GAAA,IAAA;AAAA,sBAEd,GAAA,CAAC,aAAU,KAAO,EAAA,KAAA,EAAO,cAAc,OAAS,EAAA,WAAA,EAAY,YAAW,oBAAsB,EAAA,OAAA,CAAQ,WAAW,SAAS,EAAA,IAAA,EAAC,eAAe,KAAO,EAAA,cAAA,EAAe,UAAS,aAAc,EAAA,MAAA,EAAO,iBAAiB,MAAM;AAC5N,QAAM,MAAA,KAAA,GAAQ,MAAM,IAAK,CAAA,CAAA,CAAA,KAAK,WAAW,CAAE,CAAA,KAAA,CAAM,IAAI,CAAC,CAAA;AACtD,QAAA,IAAI,KAAO,EAAA,eAAA,CAAgB,KAAM,CAAA,KAAA,CAAM,EAAE,CAAA;AAAA,aAAgB,QAAA,CAAA,KAAA,CAAM,MAAQ,EAAA,IAAA,EAAM,WAAW,CAAA;AAAA,SACvF,OAAS,EAAA,MAAM,YAAa,CAAA,IAAI,GAAG,QAAU,EAAA,CAAC,QAAS,CAAA,MAAA,EAAQ,OAAO,CAAC,MAAA,CAAO,OAAO,KAAO,EAAA,IAAA,CAAK,KAAK,CAAG,EAAA;AAAA,QAC1G,OAAO,OAAQ,CAAA,IAAA;AAAA,QACf,YAAY,IAAK,CAAA;AAAA,OAClB,CAAG,EAAA,CAAA;AAAA,sBACO,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,QACnC,KAAO,EAAA,IAAA,KAAS,OAAU,GAAA,OAAA,CAAQ,SAAS,OAAQ,CAAA;AAAA,OACpD,CAAA,EACc,QAAS,EAAA,IAAA,KAAA,OAAA,IAAW,SAAY,GAAA,CAAA,iBAAA,EAAe,SAAS,CAAA,CAAA,GAAK,WAAY,CAAA,IAAA,EAAM,IAAK,CAAA,cAAc,CACvG,EAAA,CAAA;AAAA,MACC,IAAS,KAAA,OAAA,mBAAW,IAAA,CAAA,SAAA,EAAA,EAAU,iBAAkB,EAAA,QAAA,EAAS,OAAS,EAAA,WAAA,EAAa,OAAS,EAAA,CAAA,EAAG,KAAO,EAAA,MAAA,CAAO,QAClG,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAS,IAAK,EAAA,SAAA,EAAU,MAAM,EAAI,EAAA,KAAA,EAAO,QAAQ,OAAS,EAAA,CAAA;AAAA,wBAC1D,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,UAC/C,OAAO,OAAQ,CAAA;AAAA,SAChB,GAAG,QAAK,EAAA,OAAA,EAAA;AAAA,OAAA,EACG,CAAe,GAAA,IAAA;AAAA,MAClB,UAAA,CAAW,SAAS,CAAM,KAAA,OAAA,uBAAW,gBAAiB,EAAA,EAAA,MAAA,EAAQ,KAAK,EAAI,EAAA,WAAA,EAAA,CAAa,UAAK,WAAL,KAAA,IAAA,GAAA,EAAA,GAAoB,MAAM,IAAM,EAAA,KAAA,CAAM,MAAQ,EAAA,UAAA,EAAY,SAAW,EAAA,YAAA,EAAc,MAAM;AAr6C9L,QAAAD,IAAAA,GAAAA;AAs6CQ,QAAA,MAAM,IAAI,QAAS,CAAA,OAAA;AACnB,QAAI,IAAA,CAAC,GAAU,OAAA,EAAA;AACf,QAAA,OAAO,oBAAsBA,CAAAA,CAAAA,CAAAA,GAAAA,GAAA,CAAE,CAAA,QAAA,CAAS,CAAE,CAAA,MAAM,CAAnB,KAAA,IAAA,GAAAA,GAAwB,GAAA,EAAI,EAAA,GAAA,CAAI,CAAM,EAAA,KAAA;AAx6C3E,UAAAA,IAAAA,GAAAA;AAy6CU,UAAM,MAAA,CAAA,GAAI,CAAE,CAAA,MAAA,CAAO,EAAE,CAAA;AACrB,UAAO,OAAA;AAAA,YACL,EAAA;AAAA,YACA,MAAM,CAAG,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAA,IAAA;AAAA,YACT,UAAA,EAAY,aACP,CAAA,cAAA,CAAA,EAAA,EAAA,CAAA,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAG,UADI,CAAA,EAAA;AAAA,cAEV,OAAO,CAAC;AAAA,gBACN,SAAWA,EAAAA,CAAAA,GAAAA,GAAA,CAAG,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAA,IAAA,KAAH,OAAAA,GAAW,GAAA;AAAA,eACvB;AAAA,aACH;AAAA,WACF;AAAA,SACD,CAAC,CAAA;AAAA,OACJ,EAAG,QAAgB,OAAkB,EAAA,OAAA,EAAS,WAAW,WAAa,EAAA,CAAA,MAAA,KAAU,MAAM,YAAa,CAAA,MAAA,EAAQ,QAAQ,KAAM,CAAA,IAAA,MAAU,gBAAgB,CAAA,CAAE,GAAG,OAAS,EAAA,CAAA,OAAA,KAAW,YAAY,SAAU,CAAA;AAAA,QAChM;AAAA,OACD,GAAG,CAAK,GAAA,IAAA;AAAA,MACE,IAAA,CAAK,SAAS,cAAkB,IAAA,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,WAAL,IAAa,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAS,UAAc,IAAA,IAAA,CAAK,MAAO,CAAA,EAAA,uBAAM,kBAAmB,EAAA,EAAA,KAAA,EAAO,KAAK,EAAI,EAAA,UAAA,EAAY,KAAK,MAAO,CAAA,EAAA,EAAI,UAAY,EAAA,SAAA,EAAW,IAAM,EAAA;AAAA,QAC3L,aAAa,IAAK,CAAA,WAAA;AAAA,QAClB,gBAAgB,IAAK,CAAA;AAAA,SACpB,MAAgB,EAAA,OAAA,EAAkB,OAAS,EAAA,CAAA,OAAA,KAAW,YAAY,SAAU,CAAA;AAAA,QAC7E,OAAA,EAAS,kBAAkB,OAAO,CAAA;AAAA,OACnC,GAAG,CAAK,GAAA,IAAA;AAAA,MACE,UAAU,MAAS,mBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,SAChC,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,SAAA,EAAA,EAAU,iBAAkB,EAAA,QAAA,EAAS,kBAAoB,EAAA;AAAA,UACxE,QAAU,EAAA;AAAA,SACT,EAAA,OAAA,EAAS,MAAM,gBAAA,CAAiB,CAAK,CAAA,KAAA,CAAC,CAAC,CAAA,EAAG,OAAS,EAAA,CAAA,EAAG,KAAO,EAAA,MAAA,CAAO,eACnD,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,YAAS,IAAK,EAAA,cAAA,EAAe,MAAM,EAAI,EAAA,KAAA,EAAO,QAAQ,SAAW,EAAA,CAAA;AAAA,0BACjE,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,cAAgB,EAAA;AAAA,YACrD,OAAO,OAAQ,CAAA;AAAA,WAChB,CACsB,EAAA,QAAA,EAAA,CAAA,EAAG,SAAU,CAAA,MAAM,CAAI,CAAA,EAAA,SAAA,CAAU,MAAW,KAAA,CAAA,GAAI,UAAa,GAAA,WAAW,CAC7E,CAAA,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAM,aAAgB,GAAA,YAAA,GAAe,gBAAgB,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,OAAA,CAAQ,SAAW,EAAA;AAAA,SACvG,EAAA,CAAA;AAAA,QACC,aAAA,GAAgB,SAAU,CAAA,GAAA,CAAI,CAAE,CAAA,KAAA;AA18CzD,UAAAA,IAAAA,GAAAA;AA08C4D,UAAA,uBAAA,IAAA,CAAC,SAAqB,EAAA,EAAA,iBAAA,EAAkB,MAAO,EAAA,OAAA,EAAS,MAAM,QAAA,CAAS,CAAE,CAAA,UAAA,IAAc,CAAE,CAAA,EAAE,CAAG,EAAA,KAAA,EAAO,OAAO,WAClI,EAAA,QAAA,EAAA;AAAA,4BAAC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,WAAc,EAAA,QAAA,EAAA,CAAAA,GAAA,GAAA,SAAA,CAAU,CAAC,CAAA,KAAX,IAAAA,GAAAA,GAAAA,GAAgB,WAAK,EAAA,CAAA;AAAA,4BACvD,GAAA,CAAC,QAAK,aAAe,EAAA,CAAA,EAAG,OAAO,CAAC,MAAA,CAAO,IAAM,EAAA,MAAA,CAAO,IAAM,EAAA;AAAA,cACpF,OAAO,OAAQ,CAAA,IAAA;AAAA,cACf,mBAAmB,OAAQ,CAAA;AAAA,aAC5B,CAAA,EACgC,QAAU,EAAA,SAAA,CAAA,CAAC,CAChB,EAAA;AAAA,WAAA,EAAA,EAPsC,EAAE,EAQ5C,CAAA;AAAA,SAAY,CAAI,GAAA;AAAA,OAAA,EAC9B,CAAU,GAAA,IAAA;AAAA,0BAEb,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,IACf,EAAA,QAAA,EAAA,KAAA,CAAM,IAAI,CAAK,IAAA,KAAA;AAt9CpC,QAAAA,IAAAA,GAAAA;AAs9CuC,QAAA,uBAAA,GAAA,CAAC,SAA8B,EAAA,EAAA,IAAA,EAAY,OAAkB,EAAA,OAAA,EAAS,KAAK,KAAM,CAAA,EAAA,KAAO,SAAW,EAAA,aAAA,EAAe,CAAS,KAAA,KAAA,MAAA,CAAO,OAAQ,CAAA,GAAA,CAAI,KAAK,KAAM,CAAA,EAAA,EAAI,KAAK,CAAA,EAAG,OAAS,EAAA,MAAM,YAAa,CAAA,IAAA,CAAK,MAAM,EAAE,CAAA,EAAG,YAAc,EAAA,CAAA,CAAA,KAAK,YAAa,CAAA,IAAA,CAAK,KAAM,CAAA,EAAA,EAAI,CAAC,CAAG,EAAA,QAAA,EAAU,MAAM,QAAA,CAAS,IAAI,CAAA,EAAG,WAAa,EAAA,MAAM,YAAY,IAAI,CAAA,EAAG,YAAc,EAAA,MAAM,UAAW,CAAA,IAAA,CAAK,KAAK,CAAA,EAAG,YAAY,QAAU,EAAA,QAAA,EAAU,MAAM,UAAA,CAAW,IAAK,CAAA,KAAA,CAAM,EAAE,CAAA,EAAG,aAAa,CAAO,GAAA,KAAA,UAAA,CAAW,OAAQ,CAAA,GAAA,CAAI,KAAK,KAAM,CAAA,EAAA,EAAI,GAAG,CAAA,EAAG,QAAQ,MAAM;AACliB,UAAA,QAAA,CAAS,OAAQ,EAAA;AACjB,UAAgB,eAAA,CAAA,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA,SAC/B,EAAG,SAAW,EAAA,SAAA,CAAU,GAAI,CAAA,IAAA,CAAK,KAAM,CAAA,EAAE,CAAG,EAAA,iBAAA,EAAmB,MAAM,eAAA,CAAgB,IAAK,CAAA,KAAA,CAAM,EAAE,CAAG,EAAA,UAAA,EAAY,MAAM,cAAA,CAAe,IAAK,CAAA,KAAA,CAAM,EAAE,CAAA,EAAG,OAAS,EAAA,CAAA,KAAA,KAAS,aAAc,CAAA,IAAA,CAAK,KAAM,CAAA,EAAA,EAAI,KAAK,CAAG,EAAA,SAAA,EAAW,MAAM,aAAA,CAAc,IAAK,CAAA,KAAA,CAAM,EAAE,CAAA,EAAG,QAAoB,EAAA,MAAA,EAAQ,CAAM,EAAA,KAAA,eAAA,CAAgB,EAAE,CAAA,EAAG,YAAcA,EAAAA,CAAAA,GAAAA,GAAA,QAAS,CAAA,UAAA,CAAW,GAAI,CAAA,IAAA,CAAK,KAAM,CAAA,EAAE,CAArC,KAAA,IAAA,GAAAA,GAA0C,GAAA,CAAA,EAAG,UAAY,EAAA,MAAM,cAAe,CAAA;AAAA,UAC7Y,OAAA,EAAS,KAAK,KAAM,CAAA;AAAA,SACrB,CAAG,EAAA,MAAA,EAAgB,IAL2B,EAAA,EAAA,IAAA,CAAK,MAAM,EAK1B,CAAA;AAAA,OAAE,CAC1B,EAAA,CAAA;AAAA,sBAGC,GAAA,CAAA,SAAA,EAAA,EAAU,iBAAkB,EAAA,QAAA,EAAS,kBAAmB,EAAA,aAAA,EAAc,OAAS,EAAA,QAAA,CAAS,MAAS,GAAA,MAAA,GAAY,WAAa,EAAA,QAAA,EAAU,QAAS,CAAA,MAAA,EAAQ,KAAO,EAAA,MAAA,CAAO,UAC/J,EAAA,QAAA,EAAA,KAAA,CAAM,MAAW,KAAA,CAAA,IAAK,CAAC,QAAA,CAAS,MAAS,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,SAAW,EAAA;AAAA,QACpF,OAAO,OAAQ,CAAA;AAAA,OAChB,CAAA,EAAG,QAA0B,EAAA,iCAAA,EAAA,CAAA,GAAU,IAChC,EAAA;AAAA,KACJ,EAAA,CAAA;AAAA,IAEC,OAAA,IAAW,CAAC,QAAS,CAAA,MAAA,uBAAU,aAAc,EAAA,EAAA,OAAA,EAAkB,WAAa,EAAA,aAAA,GAAgB,CAAI,GAAA,MAAA,CAAO,QAAQ,KAAO,EAAA,OAAA,EAAS,YAAY,CAAQ,IAAA,KAAA,QAAA,CAAS,QAAQ,EAAI,EAAA,IAAI,CAAG,EAAA,SAAA,EAAW,MAAM;AACvM,MAAA,QAAA,CAAS,OAAQ,CAAA,QAAA,EAAU,OAAQ,CAAA,EAAA,EAAI,SAAS,CAAA;AAAA,KAC/C,EAAA,SAAA,EAAW,UAAY,EAAA,QAAA,EAAU,MAAM,UAAA,CAAW,OAAQ,CAAA,EAAE,CAAG,EAAA,MAAA,EAAQ,UAAY,EAAA,OAAA,EAAS,MAAM,WAAY,CAAA;AAAA,MAC/G,IAAM,EAAA,QAAA;AAAA,MACN,IAAI,OAAQ,CAAA;AAAA,KACb,CAAG,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,eAAA,CAAgB,OAAQ,CAAA,EAAE,CAAG,EAAA,QAAA,EAAU,MAAM;AAC/E,MAAA,QAAA,CAAS,OAAQ,EAAA;AACjB,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN,IAAI,OAAQ,CAAA;AAAA,OACb,CAAA;AAAA,OACA,OAAS,EAAA,SAAA,CAAU,OAAQ,CAAA,MAAA,GAAS,GAAG,OAAS,EAAA,SAAA,CAAU,OAAQ,CAAA,MAAA,GAAS,GAAG,MAAQ,EAAA,IAAA,EAAM,MAAQ,EAAA,IAAA,EAAM,QAAQ,MAAM;AACzH,MAAA,QAAA,CAAS,OAAQ,EAAA;AACjB,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,OAChB,CAAK,GAAA,IAAA;AAAA,IACC,WAAY,CAAA,OAAA;AAAA,oBACb,GAAA,CAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,OAAQ,CAAA,YAAY,CAAG,EAAA,OAAA,EAAkB,KAAO,EAAA,YAAA,GAAe,cAAe,CAAA,KAAA,CAAM,MAAO,CAAA,YAAY,CAAC,CAAA,GAAI,EAAI,EAAA,MAAA,EAAQ,YAAe,GAAA,eAAA,CAAgB,YAAY,CAAA,GAAI,EAAC,EAAG,OAAS,EAAA,MAAM,eAAgB,CAAA,IAAI,CAAG,EAAA,CAAA;AAAA,IAC3O,KAAM,CAAA,OAAA;AAAA,IACN,OAAU,mBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,OAAA,EAAS,aAAa,OAAkB,EAAA,MAAA,EAAQ,OAAS,EAAA,WAAA,EAAa,KAAK,WAAa,EAAA,MAAA,EAAQ,QAAS,CAAA,MAAA,EAAQ,YAAY,YAAY;AAx/C9K,MAAA,IAAAA,GAAAC,EAAAA,GAAAA;AA0/CM,MAAA,MAAM,CAAC,GAAA,EAAK,OAAO,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAI,CAAA,CAAC,OAAQ,EAAA,EAAG,SAAU,CAAA,OAAA,EAAS,CAAC,CAAA;AACzE,MAAA,MAAM,IAAOD,GAAAA,CAAAA,GAAAA,GAAA,GAAI,CAAA,IAAA,KAAJ,gBAAAA,GAAU,CAAA,YAAA;AACvB,MAAA,MAAM,QAAWC,GAAAA,CAAAA,GAAAA,GAAA,OAAQ,CAAA,IAAA,KAAR,gBAAAA,GAAc,CAAA,QAAA;AAC/B,MAAI,IAAA,IAAA,IAAQ,QAAY,IAAA,CAAC,OAAQ,CAAA,OAAA,CAAQ,IAAQ,IAAA,CAAC,QAAS,CAAA,OAAA,EAAmB,SAAA,CAAA,IAAA,EAAM,QAAQ,CAAA;AAAA,OAC3F,OAAS,EAAA,MAAM,cAAe,CAAA,KAAK,GAAG,CAAK,GAAA,IAAA;AAAA,IACrC,0BAAW,GAAA,CAAA,UAAA,EAAA,EAAW,SAAS,SAAW,EAAA,OAAA,EAAkB,QAAQ,OAAS,EAAA,SAAA,EAAW,KAAM,CAAA,IAAA,MAAU,UAAY,EAAA,OAAA,EAAS,MAAM,YAAa,CAAA,KAAK,GAAG,CAAK,GAAA,IAAA;AAAA,IAC7J,OAAU,mBAAA,GAAA,CAAC,aAAc,EAAA,EAAA,OAAA,EAAS,OAAQ,CAAA,WAAW,CAAG,EAAA,OAAA,EAAkB,MAAQ,EAAA,OAAA,EAAS,OAAS,EAAA,CAAA,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,YAAb,IAAwB,GAAA,EAAA,GAAA,IAAA,EAAM,UAAY,EAAA,CAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,OAAU,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAO,CAAA,WAAA,CAAY,OAAO,CAAA,KAAhC,IAAmC,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,GAAO,CAAA,GAAA,MAAA,EAAW,SAAS,MAAM;AAC9P,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,QAAA,CAAS,OAAQ,EAAA,CAAE,KAAM,CAAA,MAAM,MAAS,CAAA;AAAA,OACvC,CAAK,GAAA,IAAA;AAAA,oBACA,GAAA,CAAC,oBAAiB,OAAS,EAAA,OAAA,CAAQ,SAAS,CAAG,EAAA,OAAA,EAAkB,KAAM,EAAA,QAAA,EAAS,QAAS,EAAA,6CAAA,EAA8C,QAAQ,SAAY,GAAA,YAAA,CAAa,SAAS,CAAI,GAAA,IAAI,OAAS,EAAA,MAAM,YAAa,CAAA,IAAI,CAAG,EAAA,CAAA;AAAA,oBAC3N,GAAA,CAAA,YAAA,EAAA,EAAa,OAAS,EAAA,OAAA,CAAQ,UAAU,CAAA,EAAG,OAAkB,EAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EAAO,WAAa,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,SAAP,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,EAAlB,KAAA,IAAA,GAAA,EAAA,GAAwB,IAAM,EAAA,MAAA,EAAQ,UAAa,GAAA,eAAA,EAAoB,GAAA,EAAI,EAAA,MAAA,EAAQ,aAAe,EAAA,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAG,EAAA,CAAA;AAAA,oBACrO,GAAA,CAAA,gBAAA,EAAA,EAAiB,OAAS,EAAA,OAAA,CAAQ,UAAU,CAAG,EAAA,OAAA,EAAkB,KAAM,EAAA,SAAA,EAAU,OAAS,EAAA,UAAA,GAAA,CAAa,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAO,UAAU,CAAvB,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,IAA1B,KAAA,IAAA,GAAA,EAAA,GAAkC,EAAK,GAAA,EAAA,EAAI,WAAY,EAAA,iBAAA,EAAkB,cAAa,MAAO,EAAA,UAAA,EAAU,IAAC,EAAA,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAA,EAAG,WAAW,CAAW,OAAA,KAAA;AAtgDtR,MAAAD,IAAAA,GAAAA;AAugDM,MAAM,MAAA,KAAA,GAAQ,cAAaA,GAAA,GAAA,QAAA,CAAS,YAAT,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAkB,OAAO,UAAc,CAAA,GAAA,IAAA;AAClE,MAAI,IAAA,KAAA,aAAkB,KAAM,CAAA,EAAA,EAAI,MAAM,IAAM,EAAA,OAAA,CAAQ,IAAK,EAAA,GAAI,CAAC;AAAA,QAC5D,OAAA,EAAS,QAAQ,IAAK;AAAA,OACvB,CAAI,GAAA,EAAE,CAAA;AAAA,KACN,EAAA,CAAA;AAAA,oBACM,GAAA,CAAA,UAAA,EAAA,EAAW,OAAS,EAAA,OAAA,CAAQ,QAAQ,CAAG,EAAA,OAAA,EAAkB,MAAgB,EAAA,KAAA,EAAA,CAAO,QAAU,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,IAAA,MAAS,QAAW,GAAA,YAAA,GAAe,eAAe,WAAa,EAAA,YAAA,CAAa,QAAU,EAAA,KAAK,CAAE,CAAA,IAAA,EAAM,iBAAmB,EAAA,YAAA,CAAa,UAAU,KAAK,CAAA,CAAE,UAAY,EAAA,MAAA,EAAQ,SAAW,EAAA,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAG,EAAA,CAAA;AAAA,oBAChT,GAAA,CAAC,iBAAc,OAAS,EAAA,OAAA,CAAQ,WAAW,CAAG,EAAA,OAAA,EAAkB,SAAS,WAAc,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAO,WAAW,CAAA,KAAxB,mBAA2B,UAAW,CAAA,QAAA,GAAW,QAAW,MAAQ,EAAA,CAAA,QAAA,KAAY,WAAe,IAAA,aAAA,CAAc,WAAa,EAAA;AAAA,MACvN;AAAA,KACD,CAAG,EAAA,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAG,EAAA,CAAA;AAAA,oBAChC,GAAA,CAAA,gBAAA,EAAA,EAAiB,OAAS,EAAA,OAAA,CAAQ,OAAO,CAAG,EAAA,OAAA,EAAkB,KAAO,EAAA,CAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,WAAU,WAAc,GAAA,UAAA,EAAY,OAAS,EAAA,CAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,WAAU,iCAAoC,GAAA,MAAA,EAAW,OAAS,EAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,OAAT,KAAA,IAAA,GAAA,EAAA,GAAoB,EAAI,EAAA,WAAA,EAAY,YAAW,YAAa,EAAA,MAAA,EAAO,UAAU,EAAA,IAAA,EAAC,SAAS,MAAM,UAAA,CAAW,IAAI,CAAA,EAAG,WAAW,SAAW,EAAA,CAAA;AAAA,oBAC5U,GAAA,CAAC,oBAAiB,OAAS,EAAA,UAAA,EAAY,SAAkB,KAAM,EAAA,iBAAA,EAAkB,SAAQ,iGAAkG,EAAA,WAAA,EAAa,kCAAkC,YAAa,EAAA,QAAA,EAAS,WAAS,IAAC,EAAA,OAAA,EAAS,MAAM,aAAc,CAAA,KAAK,CAAG,EAAA,SAAA,EAAW,cAAgB,EAAA;AAAA,GAC9U,EAAA,CAAA;AACR;AAGA,SAAS,UAAU,KAAmC,EAAA;AAthDtD,EAAA,IAAA,EAAA;AAuhDE,EAAA,MAAM,OAAM,EAAM,GAAA,KAAA,CAAA,QAAA,CAAS,MAAM,MAAM,CAAA,KAA3B,YAAgC,EAAC;AAC7C,EAAA,OAAO,IAAI,MAAS,GAAA,GAAA,CAAI,GAAI,CAAA,MAAA,GAAS,CAAC,CAAI,GAAA,IAAA;AAC5C;AACA,SAAS,eAAe,KAAwC,EAAA;AA1hDhE,EAAA,IAAA,EAAA,EAAA,EAAA;AA2hDE,EAAI,IAAA,CAAC,OAAc,OAAA,EAAA;AACnB,EAAA,MAAM,SAAQ,EAAU,GAAA,CAAA,EAAA,GAAA,SAAA,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,KAAM,CAAA,IAAI,CAAzC,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAA4C,UAA5C,IAAqD,GAAA,EAAA,GAAA,KAAA,CAAM,IAAK,CAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC/F,EAAA,OAAO,KAAM,CAAA,IAAA,CAAK,IAAK,EAAA,GAAI,GAAG,KAAK,CAAA,MAAA,EAAM,KAAM,CAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,CAAG,EAAA,EAAE,CAAC,CAAK,CAAA,GAAA,KAAA;AAC9E;AAGA,SAAS,YAAA,CAAa,QAGZ,KAGR,EAAA;AAviDF,EAAA,IAAA,EAAA,EAAA,EAAA;AAwiDE,EAAA,MAAM,QAAQ,MAAS,GAAA,KAAA,CAAM,MAAO,CAAA,MAAA,CAAO,EAAE,CAAI,GAAA,IAAA;AACjD,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,KAAA,SAAc,EAAC;AAC/B,EAAA,IAAI,OAAO,IAAS,KAAA,OAAA,SAAgB,eAAgB,CAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAC1E,EAAM,MAAA,KAAA,GAAA,CAAQ,iBAAM,IAAK,CAAA,CAAC,MAAZ,IAAe,GAAA,MAAA,GAAA,EAAA,CAAA,WAAA,KAAf,YAA8B,EAAC;AAC7C,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,MAAM,KAAmB,IAAA,EAAA;AAAA,IAC/B,UAAA,EAAY,MAAM,SAAuB,IAAA;AAAA,GAC3C;AACF;AAGA,SAAS,QAAS,CAAA,GAAA,EAAc,OAAkB,EAAA,MAAA,EAAiB,IAAe,EAAA;AAnjDlF,EAAA,IAAA,EAAA;AAojDE,EAAA,MAAM,CAAK,GAAA,CAAA,EAAA,GAAA,GAAA,CAAI,WAAJ,KAAA,IAAA,GAAA,EAAA,GAAmB,EAAC;AAC/B,EAAA,MAAM,QAAQ,CAAC,CAAA,CAAE,SAAa,IAAA,GAAA,CAAI,OAAO,WAAc,GAAA,EAAA,EAAI,CAAE,CAAA,aAAA,GAAgB,iBAAiB,EAAE,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAC1H,EAAO,OAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EACD,EAAE,IAAO,GAAA;AAAA,IACX,UAAY,EAAA;AAAA,GACV,GAAA,EACA,CAAA,EAAA,CAAA,CAAE,MAAS,GAAA;AAAA,IACb,SAAW,EAAA;AAAA,GACb,GAAI,EAAC,CAAA,EACD,KAAQ,GAAA;AAAA,IACV,kBAAoB,EAAA;AAAA,GAClB,GAAA,EACA,CAAA,EAAA,CAAA,CAAE,IAAO,GAAA;AAAA,IACX,UAAY,EAAA,IAAA;AAAA,IACZ,iBAAiB,OAAQ,CAAA,IAAA;AAAA,IACzB,OAAO,OAAQ,CAAA;AAAA,MACb,EAAC,CAAA,EACD,YAAY,CAAE,CAAA,KAAA,EAAO,MAAM,CAAI,GAAA;AAAA,IACjC,KAAO,EAAA,WAAA,CAAY,CAAE,CAAA,KAAA,EAAO,MAAM;AAAA,MAChC,EAAC,CAAA,EACD,YAAY,CAAE,CAAA,SAAA,EAAW,MAAM,CAAI,GAAA;AAAA,IACrC,eAAiB,EAAA,WAAA,CAAY,CAAE,CAAA,SAAA,EAAW,MAAM;AAAA,GAC9C,GAAA,EACA,CAAA,EAAA,GAAA,CAAI,IAAO,GAAA;AAAA,IACb,OAAO,OAAQ,CAAA;AAAA,GACb,GAAA,EACA,CAAA,EAAA,GAAA,CAAI,OAAU,GAAA;AAAA,IAChB,OAAO,OAAQ,CAAA,OAAA;AAAA,IACf,UAAY,EAAA;AAAA,MACV,EAAC,CAAA;AAET;AACA,MAAM,IAAO,GAAA,QAAA,CAAS,EAAO,KAAA,KAAA,GAAQ,OAAU,GAAA,WAAA;AAC/C,SAAS,SAAU,CAAA;AAAA,EACjB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAgCG,EAAA;AA9oDH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA+oDE,EAAM,MAAA;AAAA,IACJ,KAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACE,GAAA,IAAA;AACJ,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,YAAY,KAAQ,GAAA;AAAA,GACtB;AACA,EAAM,MAAA,IAAA,GAAO,IAAK,CAAA,MAAA,GAAS,MAAY,GAAA,MAAA;AACvC,EAAI,IAAA,WAAA,CAAY,KAAK,CAAG,EAAA;AACtB,IAAM,MAAA,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,IAAA,uBAAQ,IAAA,CAAA,SAAA,EAAA,EAAU,iBAAkB,EAAA,MAAA,EAAO,OAAS,EAAA,MAAM,UAAW,CAAA,KAAA,CAAM,EAAE,CAAA,EAAG,WAAa,EAAA,IAAA,EAAM,OAAO,CAAC;AAAA,MACzG;AAAA,UACI,CAAC,MAAA,CAAO,KAAK,MAAO,CAAA,OAAA,EAAS,QAAQ,OAAW,IAAA;AAAA,MACpD,iBAAiB,OAAQ,CAAA;AAAA,KAC1B,CACY,EAAA,QAAA,EAAA;AAAA,MAAA,KAAA,uBAAS,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,WAAc,EAAA,QAAA,EAAA,KAAA,EAAM,oBAAW,GAAA,CAAA,QAAA,EAAA,EAAS,MAAM,KAAM,CAAA,IAAA,KAAS,aAAa,cAAiB,GAAA,uBAAA,EAAyB,MAAM,EAAI,EAAA,KAAA,EAAO,QAAQ,SAAW,EAAA,CAAA;AAAA,0BACpL,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAO,CAAA,IAAA,EAAM,OAAO,IAAM,EAAA;AAAA,QAChD,OAAO,OAAQ,CAAA,IAAA;AAAA,QACf,mBAAmB,OAAQ,CAAA;AAAA,OAC5B,CACc,EAAA,QAAA,EAAA,KAAA,CAAM,IAAK,CAAA,IAAA,MAAU,SAAU,CAAA;AAAA,QAC1C,YAAY,KAAM,CAAA;AAAA,OACnB,CACO,EAAA;AAAA,KACJ,EAAA,CAAA;AAAA;AAEV,EAAI,IAAA,KAAA,CAAM,SAAS,SAAW,EAAA;AAC5B,IAAA,uBAAQ,GAAA,CAAA,SAAA,EAAA,EAAU,WAAa,EAAA,IAAA,EAAM,OAAO,CAAC,MAAA,CAAO,UAAY,EAAA,MAAM,GAC1D,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA;AAAA,MACtC,iBAAiB,OAAQ,CAAA;AAAA,KAC1B,GAAG,CACE,EAAA,CAAA;AAAA;AAEV,EAAA,IAAI,WAAY,CAAA,QAAA,CAAS,KAAM,CAAA,IAAI,CAAG,EAAA;AACpC,IAAA,2BAAQ,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAQ,EAAA,MAAA,CAAO,QAAQ,CAChC,EAAA,QAAA,kBAAA,GAAA,CAAC,cAAW,KAAc,EAAA,OAAA,EAAkB,QAAQ,IAAK,CAAA,MAAA,EAAQ,SAAkB,SAAsB,EAAA,MAAA,EAAQ,MAAM,CAC3H,EAAA,CAAA;AAAA;AAEV,EAAI,IAAA,KAAA,CAAM,SAAS,mBAAqB,EAAA;AACtC,IAAO,uBAAA,GAAA,CAAC,aAAU,WAAa,EAAA,IAAA,EAAM,OAAO,CAAC,MAAA,EAAQ,OAAO,GAAK,EAAA;AAAA,MAC/D,iBAAiB,OAAQ,CAAA;AAAA,KAC1B,CACY,EAAA,QAAA,EAAA,QAAA,CAAS,MAAS,GAAA,QAAA,CAAS,GAAI,CAAA,CAAA,CAAA,qBAAM,GAAA,CAAA,SAAA,EAAA,EAAqB,iBAAkB,EAAA,MAAA,EAAO,OAAS,EAAA,MAAM,OAAO,CAAE,CAAA,EAAE,CAAG,EAAA,OAAA,EAAS,CAC9G,EAAA,QAAA,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,aAAA,EAAe,CAAG,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,OAAS,EAAA;AAAA,MAClE,OAAO,OAAQ,CAAA,SAAA;AAAA,MACf,UAAA,EAAA,CAAa,CAAE,CAAA,KAAA,GAAQ,CAAK,IAAA;AAAA,KAC7B,CAAA,EACwB,QAAE,EAAA,CAAA,CAAA,IAAA,EACP,KANyC,CAAE,CAAA,EAO/C,CAAY,CAAA,mBAAK,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA;AAAA,MAC9D,OAAO,OAAQ,CAAA;AAAA,KAChB,CAAG,EAAA,QAAA,EAAA,2CAAA,EAEU,CACR,EAAA,CAAA;AAAA;AAEV,EAAA,IAAI,CAAC,UAAA,CAAW,KAAM,CAAA,IAAI,CAAG,EAAA;AAC3B,IAAA,MAAM,OAAU,GAAA,KAAA,CAAM,IAAQ,IAAA,eAAA,CAAgB,KAAM,CAAA,UAAA,CAAW,OAAO,CAAA,IAAK,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,IAAA,EAAM,GAAG,CAAA;AACvG,IAAA,uBAAQ,IAAA,CAAA,SAAA,EAAA,EAAU,WAAa,EAAA,IAAA,IAAA,IAAA,GAAA,IAAA,GAAS,IAAK,CAAA,MAAA,GAAS,MAAY,GAAA,QAAA,EAAW,KAAO,EAAA,CAAC,MAAO,CAAA,GAAA,EAAK,OAAO,WAAa,EAAA;AAAA,MACnH,aAAa,OAAQ,CAAA;AAAA,KACvB,EAAG,MAAM,CACG,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,YAAS,IAAK,EAAA,cAAA,EAAe,MAAM,EAAI,EAAA,KAAA,EAAO,QAAQ,SAAW,EAAA,CAAA;AAAA,sBACjE,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,eAAiB,EAAA;AAAA,QAC9C,OAAO,OAAQ,CAAA;AAAA,OAChB,CAAA,EAAG,aAAe,EAAA,CAAA,EACJ,QACL,EAAA,OAAA,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA;AAAA,QACtC,OAAO,OAAQ,CAAA;AAAA,OAChB,GAAG,QAAG,EAAA,KAAA,EAAA;AAAA,KACD,EAAA,CAAA;AAAA;AAEV,EAAM,MAAA,OAAA,GAAU,KAAM,CAAA,UAAA,CAAW,OAAY,KAAA,IAAA;AAC7C,EAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,KAAM,CAAA,UAAA,CAAW,KAAK,CAAA;AACrD,EAAA,MAAM,SAAY,GAAA,WAAA,CAAY,MAAO,CAAA,IAAA,EAAM,MAAM,CAAA;AACjD,EAAA,MAAM,SAAY,GAAA,WAAA,CAAY,MAAO,CAAA,UAAA,EAAY,MAAM,CAAA;AACvD,EAAA,IAAI,MAA0B,GAAA,IAAA;AAC9B,EAAI,IAAA,KAAA,CAAM,SAAS,eAAiB,EAAA;AAClC,IAAA,MAAA,uBAAU,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAO,CAAA,IAAA,EAAM,OAAO,MAAQ,EAAA;AAAA,MACjD,OAAO,OAAQ,CAAA;AAAA,KAChB,GAAG,QAAC,EAAA,QAAA,EAAA,CAAA;AAAA,GACP,MAAA,IAAW,KAAM,CAAA,IAAA,KAAS,eAAiB,EAAA;AACzC,IAAA,MAAA,uBAAU,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAO,CAAA,IAAA,EAAM,OAAO,MAAQ,EAAA;AAAA,MACjD,OAAO,OAAQ,CAAA;AAAA,KAChB,CAAA,EAAI,QAAG,EAAA,CAAA,EAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAU,CAAC,CAAI,CAAA,CAAA,EAAA,CAAA;AAAA,GACzB,MAAA,IAAW,KAAM,CAAA,IAAA,KAAS,MAAQ,EAAA;AAChC,IAAA,MAAA,mBAAU,GAAA,CAAA,SAAA,EAAA,EAAU,iBAAkB,EAAA,UAAA,EAAW,kBAAoB,EAAA;AAAA,MACnE;AAAA,KACF,EAAG,OAAS,EAAA,IAAA,CAAK,MAAS,GAAA,MAAA,GAAY,cAAc,OAAS,EAAA,CAAA,EAAG,KAAO,EAAA,MAAA,CAAO,KAClE,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,IAAM,EAAA,OAAA,GAAU,UAAa,GAAA,gBAAA,EAAkB,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,OAAA,GAAU,OAAQ,CAAA,OAAA,GAAU,OAAQ,CAAA,SAAA,EAAW,CAC7H,EAAA,CAAA;AAAA,GACV,MAAA,IAAW,KAAM,CAAA,IAAA,KAAS,QAAU,EAAA;AAClC,IAAS,MAAA,mBAAA,GAAA,CAAC,aAAU,iBAAkB,EAAA,QAAA,EAAS,oBAAoB,SAAY,GAAA,eAAA,GAAkB,mBAAmB,kBAAoB,EAAA;AAAA,MACtI,UAAU,CAAC;AAAA,OACV,OAAS,EAAA,iBAAA,EAAmB,SAAS,EAAI,EAAA,KAAA,EAAO,OAAO,QAC9C,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,IAAM,EAAA,SAAA,GAAY,kBAAkB,YAAc,EAAA,IAAA,EAAM,IAAI,KAAO,EAAA,OAAA,CAAQ,WAAW,CACpG,EAAA,CAAA;AAAA,GACV,MAAA,IAAW,KAAM,CAAA,IAAA,KAAS,SAAW,EAAA;AACnC,IAAA,MAAA,mBAAU,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,aAAc,QAAU,EAAA,CAAA,EAAA,GAAA,SAAA,CAAA;AAAA,MACjD,YAAY,KAAM,CAAA;AAAA,KACnB,CAFwC,KAAA,IAAA,GAAA,EAAA,GAEnC,WAAK,EAAA,CAAA;AAAA;AAEf,EAAA,MAAM,QAAW,GAAA,CAAC,MAAO,CAAA,KAAA,EAAO,QAAO,EAAW,GAAA,UAAA,CAAA,KAAA,CAAM,IAAI,CAAA,KAArB,IAA0B,GAAA,EAAA,GAAA,MAAA,CAAO,IAAM,EAAA,IAAA,CAAK,KAAK,CAAG,EAAA;AAAA,IACzF,KAAA,EAAO,gCAAa,OAAQ,CAAA,IAAA;AAAA,IAC5B,YAAY,IAAK,CAAA;AAAA,GACnB,EAAG,KAAM,CAAA,IAAA,KAAS,MAAU,IAAA,OAAA,IAAW,OAAO,IAAM,EAAA,KAAA,CAAM,IAAS,KAAA,MAAA,IAAU,OAAW,IAAA;AAAA,IACtF,OAAO,OAAQ,CAAA;AAAA,GACd,EAAA,KAAA,CAAM,IAAS,KAAA,MAAA,IAAU,OAAO,QAAQ,CAAA;AAC3C,EAAA,4BAAQ,SAAU,EAAA,EAAA,WAAA,EAAa,IAAM,EAAA,cAAA,EAAgB,KAAK,KAAO,EAAA,CAAC,MAAO,CAAA,GAAA,EAAK,QAAQ,KAAM,CAAA,IAAA,KAAS,OAAW,IAAA,CAAC,OAAO,KAAO,EAAA;AAAA,IAC7H,iBAAiB,OAAQ,CAAA;AAAA,GAC1B,CAAG,EAAA,KAAA,CAAM,SAAS,SAAa,IAAA,CAAC,OAAO,OAAS,EAAA;AAAA,IAC/C,eAAA,EAAiB,gCAAa,OAAQ,CAAA;AAAA,GACvC,CAAG,EAAA,KAAA,CAAM,SAAS,MAAU,IAAA,CAAC,OAAO,IAAM,EAAA;AAAA,IACzC,iBAAiB,OAAQ,CAAA;AAAA,GAC1B,CAAA,EAAG,KAAM,CAAA,IAAA,CAAK,WAAW,SAAS,CAAA,IAAK,MAAO,CAAA,UAAA,EAAY,aAAa,KAAM,CAAA,IAAA,KAAS,SAAY,GAAA,CAAC,OAAO,IAAM,EAAA;AAAA,IAC/G,eAAiB,EAAA;AAAA,GAClB,CAAI,GAAA,IAAI,CACE,EAAA,QAAA,EAAA;AAAA,IAAA,MAAA;AAAA,oBACA,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,IACf,EAAA,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,SAAS,MAAS,mBAAA,IAAA,CAAC,aAAU,iBAAkB,EAAA,QAAA,EAAS,oBAAmB,eAAgB,EAAA,OAAA,EAAS,IAAK,CAAA,MAAA,GAAS,SAAY,UAAY,EAAA,OAAA,EAAS,GAAG,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,QAC9L,iBAAiB,OAAQ,CAAA;AAAA,OAC1B,CACiB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,YAAc,EAAA;AAAA,UACjD,OAAO,OAAQ,CAAA;AAAA,SAChB,CACoB,EAAA,QAAA,EAAA,aAAA,CAAc,KAAM,CAAA,UAAA,CAAW,QAAQ,CAC5C,EAAA,CAAA;AAAA,QACC,CAAC,IAAA,CAAK,MAAS,mBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAK,cAAe,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAO,OAAQ,CAAA,SAAA,EAAW,CAAK,GAAA;AAAA,OAAA,EAC3F,CAAe,GAAA,IAAA;AAAA,sBAElB,GAAA,CAAA,SAAA,EAAA,EAAU,GAAK,EAAA,aAAA,EAAe,cAA4B,OAAkB,EAAA,iBAAA,EAAmB,CAAK,CAAA,KAAA,WAAA,CAAY,EAAE,WAAY,CAAA,SAAS,CAAG,EAAA,QAAA,EAAU,CAAC,IAAK,CAAA,MAAA,EAAQ,SAAS,EAAA,IAAA,EAAC,aAAe,EAAA,KAAA,EAAO,cAAgB,EAAA,KAAA,CAAM,SAAS,MAAS,GAAA,SAAA,GAAY,QAAU,EAAA,eAAA,EAAiB,MAAM,IAAS,KAAA,MAAA,GAAS,MAAY,GAAA,QAAA,EAAU,YAAY,CAAK,CAAA,KAAA;AACzV,QAAA,IAAI,CAAE,CAAA,WAAA,CAAY,GAAQ,KAAA,WAAA,EAAyB,WAAA,EAAA;AAAA,OAClD,EAAA,WAAA,EAAa,KAAM,CAAA,IAAA,KAAS,QAAQ,cAAgB,EAAA,KAAA,CAAM,IAAS,KAAA,MAAA,GAAS,SAAS,WAAa,EAAA,WAAA,EAAa,OAAU,GAAA,CAAA,EAAA,GAAA,WAAA,CAAY,MAAM,IAAI,CAAA,KAAtB,IAA2B,GAAA,EAAA,GAAA,sBAAA,GAAoB,WAAY,CAAA,KAAA,CAAM,IAAI,CAAA,EAAG,sBAAsB,OAAQ,CAAA,SAAA,EAAW,KAAO,EAAA,QAAA,EAAU,mBAAkB,KACjQ,EAAA,QAAA,EAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,GAAK,EAAA,CAAA;AAAA;AAAA,wBAElC,GAAA,CAAC,IAAa,EAAA,EAAA,KAAA,EAAO,QAAS,CAAA,GAAA,EAAK,OAAS,EAAA,MAAA,EAAQ,IAAI,CAAA,EACnC,QAAI,EAAA,GAAA,CAAA,OAAA,EAAA,EADd,CAEK;AAAA,OAAO,CACf,EAAA;AAAA,KACJ,EAAA,CAAA;AAAA,IACC,+BAAgB,IAAA,CAAA,SAAA,EAAA,EAAU,iBAAkB,EAAA,QAAA,EAAS,oBAAoB,CAAG,EAAA,YAAY,CAAa,SAAA,CAAA,EAAA,OAAA,EAAS,YAAY,OAAS,EAAA,CAAA,EAAG,KAAO,EAAA,CAAC,OAAO,aAAe,EAAA;AAAA,MAC3K,iBAAiB,OAAQ,CAAA;AAAA,KAC1B,CACe,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,YAAS,IAAK,EAAA,YAAA,EAAa,MAAM,EAAI,EAAA,KAAA,EAAO,QAAQ,SAAW,EAAA,CAAA;AAAA,sBAC/D,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,iBAAmB,EAAA;AAAA,QACpD,OAAO,OAAQ,CAAA;AAAA,OAChB,GAAI,QAAa,EAAA,YAAA,EAAA;AAAA,KAAA,EACR,CAAe,GAAA;AAAA,GACvB,EAAA,CAAA;AACR;AAEA,SAAS,aAAc,CAAA;AAAA,EACrB,WAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAkBG,EAAA;AACD,EAAA,MAAM,QAID,CAAC;AAAA,IACJ,GAAK,EAAA,MAAA;AAAA,IACL,KAAO,EAAA,GAAA;AAAA,IACP,KAAO,EAAA;AAAA,MACL,UAAY,EAAA;AAAA;AACd,GACC,EAAA;AAAA,IACD,GAAK,EAAA,QAAA;AAAA,IACL,KAAO,EAAA,GAAA;AAAA,IACP,KAAO,EAAA;AAAA,MACL,SAAW,EAAA,QAAA;AAAA,MACX,UAAY,EAAA;AAAA;AACd,GACC,EAAA;AAAA,IACD,GAAK,EAAA,WAAA;AAAA,IACL,KAAO,EAAA,GAAA;AAAA,IACP,KAAO,EAAA;AAAA,MACL,kBAAoB,EAAA,WAAA;AAAA,MACpB,UAAY,EAAA;AAAA;AACd,GACC,EAAA;AAAA,IACD,GAAK,EAAA,eAAA;AAAA,IACL,KAAO,EAAA,GAAA;AAAA,IACP,KAAO,EAAA;AAAA,MACL,kBAAoB,EAAA,cAAA;AAAA,MACpB,UAAY,EAAA;AAAA;AACd,GACC,EAAA;AAAA,IACD,GAAK,EAAA,MAAA;AAAA,IACL,KAAO,EAAA,KAAA;AAAA,IACP,KAAO,EAAA;AAAA,MACL,UAAY,EAAA,IAAA;AAAA,MACZ,QAAU,EAAA;AAAA;AACZ,GACD,CAAA;AACD,EAAM,MAAA,WAAA,GAAc,MAAM,IAAS,KAAA,MAAA;AACnC,EAAA,MAAM,OAAO,CAAC,GAAA,EAAa,OAAe,OAAqB,EAAA,KAAA,EAAwB,6BAAwB,GAAA,CAAA,SAAA,EAAA,EAAoB,iBAAkB,EAAA,QAAA,EAAS,oBAAoB,KAAO,EAAA,OAAA,EAAkB,UAAoB,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,IAClP,iBAAiB,OAAQ,CAAA;AAAA,KACxB,QAAY,IAAA,MAAA,CAAO,YAAY,CAAA,EACvB,mBAHmH,GAIxH,CAAA;AACN,EAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA;AAAA,IACnC,iBAAiB,OAAQ,CAAA,IAAA;AAAA,IACzB,gBAAgB,OAAQ,CAAA,QAAA;AAAA,IACxB,eAAe,CAAI,GAAA;AAAA,GACpB,CACS,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,UAAA,EAChB,+BAAC,UAAW,EAAA,EAAA,UAAA,EAAU,IAAC,EAAA,8BAAA,EAAgC,KAAO,EAAA,yBAAA,EAA0B,QAAS,EAAA,qBAAA,EAAuB,OAAO,cAC1H,EAAA,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,QAAU,EAAA,cAAA,EAAgB,QAAU,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAK,KAAM,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAO,OAAQ,CAAA,OAAA,EAAS,CAAE,CAAA;AAAA,MAClG,IAAK,CAAA,MAAA,EAAQ,MAAQ,EAAA,MAAA,sBAAS,QAAS,EAAA,EAAA,IAAA,EAAK,YAAa,EAAA,IAAA,EAAM,IAAI,KAAO,EAAA,OAAA,CAAQ,IAAM,EAAA,CAAA,EAAI,CAAC,OAAO,CAAA;AAAA,MACpG,IAAK,CAAA,MAAA,EAAQ,MAAQ,EAAA,MAAA,sBAAS,QAAS,EAAA,EAAA,IAAA,EAAK,YAAa,EAAA,IAAA,EAAM,IAAI,KAAO,EAAA,OAAA,CAAQ,IAAM,EAAA,CAAA,EAAI,CAAC,OAAO,CAAA;AAAA,MACpG,cAAc,KAAM,CAAA,GAAA,CAAI,OAAK,IAAK,CAAA,CAAA,CAAE,KAAK,CAAE,CAAA,GAAA,EAAK,MAAM,MAAO,CAAA,CAAA,CAAE,GAAG,CAAG,kBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,SAAW,EAAA;AAAA,QAChH,OAAO,OAAQ,CAAA;AAAA,OACjB,EAAG,EAAE,KAAK,CAAA,EAAI,YAAE,KAAM,EAAA,CAAO,CAAC,CAAI,GAAA,IAAA;AAAA,MACrB,WAAc,GAAA,IAAA,CAAK,OAAS,EAAA,YAAA,EAAc,yBAAU,GAAA,CAAA,QAAA,EAAA,EAAS,IAAK,EAAA,uBAAA,EAAwB,MAAM,EAAI,EAAA,KAAA,EAAO,OAAQ,CAAA,IAAA,EAAM,CAAE,CAAI,GAAA,IAAA;AAAA,MAC/H,WAAc,GAAA,IAAA,CAAK,MAAQ,EAAA,MAAA,EAAQ,wBAAS,GAAA,CAAA,QAAA,EAAA,EAAS,IAAK,EAAA,MAAA,EAAO,MAAM,EAAI,EAAA,KAAA,EAAO,OAAQ,CAAA,IAAA,EAAM,CAAE,CAAI,GAAA,IAAA;AAAA,MACtG,IAAK,CAAA,MAAA,EAAQ,eAAiB,EAAA,MAAA,kBAAS,GAAA,CAAA,QAAA,EAAA,EAAS,IAAK,EAAA,qBAAA,EAAsB,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,OAAA,CAAQ,MAAM,CAAE;AAAA,KAAA,EACjH,CACJ,EAAA,CAAA;AAAA,oBACC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,UAChB,EAAA,QAAA,EAAA;AAAA,sBAAC,IAAA,CAAA,UAAA,EAAA,EAAW,YAAU,IAAC,EAAA,8BAAA,EAAgC,OAAO,yBAA0B,EAAA,QAAA,EAAS,qBAAuB,EAAA,MAAA,CAAO,cAC1H,EAAA,QAAA,EAAA;AAAA,QAAA,SAAA,CAAU,IAAI,CAAK,CAAA,KAAA;AAC9B,UAAM,MAAA,MAAA,GAAS,EAAE,IAAS,KAAA,KAAA,CAAM,QAAQ,CAAE,CAAA,IAAA,KAAS,WAAe,IAAA,KAAA,CAAM,IAAS,KAAA,MAAA;AACjF,UAAO,uBAAA,GAAA,CAAC,aAAuB,iBAAkB,EAAA,QAAA,EAAS,oBAAoB,CAAa,UAAA,EAAA,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,kBAAoB,EAAA;AAAA,YACxH,QAAU,EAAA;AAAA,WACZ,EAAG,OAAS,EAAA,MAAM,UAAW,CAAA,CAAA,CAAE,IAAI,CAAG,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,IAAM,EAAA;AAAA,YACzD,eAAiB,EAAA,MAAA,GAAS,OAAQ,CAAA,WAAA,GAAc,OAAQ,CAAA;AAAA,WACzD,CACqB,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,SAAW,EAAA;AAAA,YAClD,KAAO,EAAA,MAAA,GAAS,OAAQ,CAAA,OAAA,GAAU,OAAQ,CAAA;AAAA,WAC3C,CACwB,EAAA,QAAA,EAAA,CAAA,CAAE,KACP,EAAA,CAAA,EAAA,EATC,EAAE,IAUP,CAAA;AAAA,SACnB,CAAA;AAAA,QACY,IAAK,CAAA,SAAA,EAAW,gBAAkB,EAAA,SAAA,kBAAY,GAAA,CAAA,QAAA,EAAA,EAAS,IAAK,EAAA,gBAAA,EAAiB,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,OAAA,CAAQ,MAAM,CAAE,CAAA;AAAA,QAC9G,IAAK,CAAA,SAAA,EAAW,iBAAmB,EAAA,SAAA,kBAAY,GAAA,CAAA,QAAA,EAAA,EAAS,IAAK,EAAA,uBAAA,EAAwB,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,OAAA,CAAQ,MAAM,CAAE,CAAA;AAAA,QACtH,IAAK,CAAA,QAAA,EAAU,cAAgB,EAAA,QAAA,kBAAW,GAAA,CAAA,QAAA,EAAA,EAAS,IAAK,EAAA,eAAA,EAAgB,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,OAAA,CAAQ,QAAQ,CAAE;AAAA,OAChH,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,aAAU,iBAAkB,EAAA,QAAA,EAAS,oBAAmB,cAAe,EAAA,OAAA,EAAS,MAAQ,EAAA,KAAA,EAAO,MAAO,CAAA,QAAA,EAAU,SAAS,CACtH,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,IAAK,EAAA,cAAA,EAAe,MAAM,EAAI,EAAA,KAAA,EAAO,OAAQ,CAAA,IAAA,EAAM,CACjE,EAAA;AAAA,KACJ,EAAA;AAAA,GACJ,EAAA,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,CAAA;AAAA,IACN,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACX;AAAA,EACA,OAAS,EAAA;AAAA,IACP,iBAAmB,EAAA,EAAA;AAAA,IACnB,UAAY,EAAA,EAAA;AAAA,IACZ,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,KAAO,EAAA;AAAA,IACL,QAAU,EAAA,EAAA;AAAA,IACV,SAAW,EAAA;AAAA,GACb;AAAA,EACA,KAAO,EAAA;AAAA,IACL,SAAW,EAAA,EAAA;AAAA,IACX,OAAS,EAAA;AAAA,GACX;AAAA,EACA,WAAa,EAAA;AAAA,IACX,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,iBAAmB,EAAA,CAAA;AAAA,IACnB,eAAiB,EAAA,CAAA;AAAA,IACjB,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,SAAW,EAAA;AAAA,IACT,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,SAAW,EAAA;AAAA,IACT,aAAe,EAAA,KAAA;AAAA,IACf,QAAU,EAAA,MAAA;AAAA,IACV,OAAS,EAAA,CAAA;AAAA,IACT,YAAc,EAAA,EAAA;AAAA,IACd,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA,OAAA;AAAA,IACP,WAAa,EAAA,CAAA;AAAA,IACb,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,KAAO,EAAA;AAAA,IACL,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,WAAa,EAAA;AAAA,IACX,KAAO,EAAA,MAAA;AAAA,IACP,UAAY,EAAA,QAAA;AAAA,IACZ,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,KAAO,EAAA;AAAA,IACL,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,UAAY,EAAA,EAAA;AAAA,IACZ,OAAS,EAAA,CAAA;AAAA,IACT,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,QAAU,EAAA,EAAA;AAAA,IACV,SAAW,EAAA;AAAA,GACb;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,SAAW,EAAA,EAAA;AAAA,IACX,GAAK,EAAA;AAAA,GACP;AAAA,EACA,GAAK,EAAA;AAAA,IACH,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,YAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,SAAW,EAAA;AAAA,GACb;AAAA,EACA,OAAS,EAAA;AAAA,IACP,UAAY,EAAA,QAAA;AAAA,IACZ,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,CAAA;AAAA,IACN,OAAS,EAAA,CAAA;AAAA,IACT,eAAiB,EAAA,CAAA;AAAA,IACjB,MAAQ,EAAA,CAAA;AAAA,IACR,SAAW,EAAA;AAAA,GACb;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,kBAAoB,EAAA;AAAA,GACtB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,KAAO,EAAA;AAAA,IACL,UAAY,EAAA;AAAA,GACd;AAAA,EACA,KAAO,EAAA;AAAA,IACL,UAAY,EAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,UAAY,EAAA,KAAA;AAAA,IACZ,iBAAmB,EAAA,CAAA;AAAA,IACnB,UAAY,EAAA;AAAA,GACd;AAAA,EACA,KAAO,EAAA;AAAA,IACL,eAAiB,EAAA,CAAA;AAAA,IACjB,WAAa,EAAA;AAAA,GACf;AAAA,EACA,OAAS,EAAA;AAAA,IACP,OAAS,EAAA,EAAA;AAAA,IACT,YAAA,EAAc,aAAa,MAAO,CAAA;AAAA,GACpC;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,OAAS,EAAA,EAAA;AAAA,IACT,YAAA,EAAc,aAAa,MAAO,CAAA;AAAA,GACpC;AAAA,EACA,QAAU,EAAA;AAAA,IACR,UAAY,EAAA,QAAA,CAAS,EAAO,KAAA,KAAA,GAAQ,OAAU,GAAA,WAAA;AAAA,IAC9C,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,UAAY,EAAA;AAAA,IACV,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,OAAS,EAAA;AAAA,IACP,QAAQ,UAAW,CAAA;AAAA,GACrB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,WAAa,EAAA,CAAA;AAAA,IACb,WAAa,EAAA,QAAA;AAAA,IACb,OAAS,EAAA,EAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,OAAS,EAAA;AAAA,IACP,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,QAAU,EAAA;AAAA,IACR,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,SAAW,EAAA,YAAA;AAAA,IACX,SAAW,EAAA;AAAA,GACb;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,UAAY,EAAA;AAAA,IACV,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,SAAW,EAAA;AAAA,IACT,SAAW,EAAA;AAAA,GACb;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,SAAW,EAAA,YAAA;AAAA,IACX,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,WAAa,EAAA;AAAA,IACX,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,eAAiB,EAAA,CAAA;AAAA,IACjB,WAAa,EAAA;AAAA,GACf;AAAA,EACA,UAAY,EAAA;AAAA,IACV,SAAW,EAAA,GAAA;AAAA,IACX,UAAY,EAAA;AAAA,GACd;AAAA,EACA,SAAW,EAAA;AAAA,IACT,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,aAAe,EAAA;AAAA,IACb,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,iBAAmB,EAAA,CAAA;AAAA,IACnB,eAAiB,EAAA,CAAA;AAAA,IACjB,YAAc,EAAA,GAAA;AAAA,IACd,SAAW,EAAA;AAAA,GACb;AAAA,EACA,iBAAmB,EAAA;AAAA,IACjB,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,QAAU,EAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,GAAK,EAAA;AAAA,IACH,eAAiB,EAAA,CAAA;AAAA,IACjB,WAAa,EAAA,EAAA;AAAA,IACb,eAAiB,EAAA,CAAA;AAAA,IACjB,GAAK,EAAA;AAAA,GACP;AAAA,EACA,OAAS,EAAA;AAAA,IACP,QAAU,EAAA,EAAA;AAAA,IACV,kBAAoB,EAAA;AAAA,GACtB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA;AAAA,GACd;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,OAAS,EAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,UAAY,EAAA,CAAA;AAAA,IACZ,KAAO,EAAA,EAAA;AAAA,IACP,UAAY,EAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,iBAAmB,EAAA,CAAA;AAAA,IACnB,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,QAAU,EAAA;AAAA,IACR,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,SAAW,EAAA,UAAA;AAAA,IACX,iBAAmB,EAAA,CAAA;AAAA,IACnB,eAAiB,EAAA,CAAA;AAAA,IACjB,YAAc,EAAA,GAAA;AAAA,IACd,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,OAAS,EAAA;AAAA,IACP,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,gBAAgB,UAAW,CAAA,aAAA;AAAA,IAC3B,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,GAAK,EAAA,CAAA;AAAA,IACL,iBAAmB,EAAA,EAAA;AAAA,IACnB,UAAY,EAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,QAAU,EAAA,EAAA;AAAA,IACV,MAAQ,EAAA,EAAA;AAAA,IACR,iBAAmB,EAAA,EAAA;AAAA,IACnB,YAAc,EAAA,EAAA;AAAA,IACd,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,QAAU,EAAA;AAAA,IACR,iBAAmB,EAAA,EAAA;AAAA,IACnB,MAAQ,EAAA,EAAA;AAAA,IACR,cAAgB,EAAA;AAAA;AAEpB,CAAC,CAAA"}
|