@syntrologie/adapt-chatbot 2.25.1 → 2.26.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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../chat/src/SyntroChat.ts", "../../../chat/src/rendering/ChatInput.ts", "../../../chat/src/rendering/MessageList.ts", "../../../chat/src/fingerprint.ts", "../../../chat/src/rendering/MessageBubble.ts", "../../../chat/src/markdown.ts", "../../../chat/src/rendering/ActionBar.ts", "../../../chat/src/rendering/ToolCallCard.ts", "../../../chat/src/rendering/TypingIndicator.ts", "../../../chat/src/styles.ts", "../../../chat/src/types.ts", "../../../chat/src/index.ts", "../../../../node_modules/dompurify/src/utils.ts", "../../../../node_modules/dompurify/src/tags.ts", "../../../../node_modules/dompurify/src/attrs.ts", "../../../../node_modules/dompurify/src/regexp.ts", "../../../../node_modules/dompurify/src/purify.ts", "../../../../node_modules/marked/src/defaults.ts", "../../../../node_modules/marked/src/rules.ts", "../../../../node_modules/marked/src/helpers.ts", "../../../../node_modules/marked/src/Tokenizer.ts", "../../../../node_modules/marked/src/Lexer.ts", "../../../../node_modules/marked/src/Renderer.ts", "../../../../node_modules/marked/src/TextRenderer.ts", "../../../../node_modules/marked/src/Parser.ts", "../../../../node_modules/marked/src/Hooks.ts", "../../../../node_modules/marked/src/Instance.ts", "../../../../node_modules/marked/src/marked.ts", "../../../../node_modules/@ag-ui/client/node_modules/uuid/dist/esm-browser/stringify.js", "../../../../node_modules/@ag-ui/client/node_modules/uuid/dist/esm-browser/rng.js", "../../../../node_modules/@ag-ui/client/node_modules/uuid/dist/esm-browser/native.js", "../../../../node_modules/@ag-ui/client/node_modules/uuid/dist/esm-browser/v4.js", "../../../../node_modules/@ag-ui/core/src/types.ts", "../../../../node_modules/@ag-ui/core/src/capabilities.ts", "../../../../node_modules/@ag-ui/core/src/events.ts", "../../../../node_modules/fast-json-patch/module/core.mjs", "../../../../node_modules/fast-json-patch/module/helpers.mjs", "../../../../node_modules/fast-json-patch/module/duplex.mjs", "../../../../node_modules/fast-json-patch/index.mjs", "../../../../node_modules/tslib/tslib.es6.mjs", "../../../../node_modules/rxjs/src/internal/util/isFunction.ts", "../../../../node_modules/rxjs/src/internal/util/createErrorClass.ts", "../../../../node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "../../../../node_modules/rxjs/src/internal/util/arrRemove.ts", "../../../../node_modules/rxjs/src/internal/Subscription.ts", "../../../../node_modules/rxjs/src/internal/config.ts", "../../../../node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "../../../../node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "../../../../node_modules/rxjs/src/internal/util/noop.ts", "../../../../node_modules/rxjs/src/internal/NotificationFactories.ts", "../../../../node_modules/rxjs/src/internal/util/errorContext.ts", "../../../../node_modules/rxjs/src/internal/Subscriber.ts", "../../../../node_modules/rxjs/src/internal/symbol/observable.ts", "../../../../node_modules/rxjs/src/internal/util/identity.ts", "../../../../node_modules/rxjs/src/internal/util/pipe.ts", "../../../../node_modules/rxjs/src/internal/Observable.ts", "../../../../node_modules/rxjs/src/internal/util/lift.ts", "../../../../node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "../../../../node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "../../../../node_modules/rxjs/src/internal/Subject.ts", "../../../../node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "../../../../node_modules/rxjs/src/internal/ReplaySubject.ts", "../../../../node_modules/rxjs/src/internal/observable/empty.ts", "../../../../node_modules/rxjs/src/internal/util/isScheduler.ts", "../../../../node_modules/rxjs/src/internal/util/args.ts", "../../../../node_modules/rxjs/src/internal/util/isArrayLike.ts", "../../../../node_modules/rxjs/src/internal/util/isPromise.ts", "../../../../node_modules/rxjs/src/internal/util/isInteropObservable.ts", "../../../../node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "../../../../node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "../../../../node_modules/rxjs/src/internal/symbol/iterator.ts", "../../../../node_modules/rxjs/src/internal/util/isIterable.ts", "../../../../node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "../../../../node_modules/rxjs/src/internal/observable/innerFrom.ts", "../../../../node_modules/rxjs/src/internal/util/executeSchedule.ts", "../../../../node_modules/rxjs/src/internal/operators/observeOn.ts", "../../../../node_modules/rxjs/src/internal/operators/subscribeOn.ts", "../../../../node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "../../../../node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "../../../../node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "../../../../node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "../../../../node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "../../../../node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "../../../../node_modules/rxjs/src/internal/scheduled/scheduled.ts", "../../../../node_modules/rxjs/src/internal/observable/from.ts", "../../../../node_modules/rxjs/src/internal/observable/of.ts", "../../../../node_modules/rxjs/src/internal/observable/throwError.ts", "../../../../node_modules/rxjs/src/internal/util/EmptyError.ts", "../../../../node_modules/rxjs/src/internal/lastValueFrom.ts", "../../../../node_modules/rxjs/src/internal/operators/map.ts", "../../../../node_modules/rxjs/src/internal/operators/mergeInternals.ts", "../../../../node_modules/rxjs/src/internal/operators/mergeMap.ts", "../../../../node_modules/rxjs/src/internal/operators/mergeAll.ts", "../../../../node_modules/rxjs/src/internal/observable/defer.ts", "../../../../node_modules/rxjs/src/internal/operators/catchError.ts", "../../../../node_modules/rxjs/src/internal/operators/concatMap.ts", "../../../../node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "../../../../node_modules/rxjs/src/internal/operators/finalize.ts", "../../../../node_modules/rxjs/src/internal/operators/switchMap.ts", "../../../../node_modules/rxjs/src/internal/operators/takeUntil.ts", "../../../../node_modules/rxjs/src/internal/operators/tap.ts", "../../../../node_modules/untruncate-json/src/index.ts", "../../../../node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js", "../../../../node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js", "../../../../node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js", "../../../../node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js", "../../../../node_modules/@ag-ui/proto/src/generated/google/protobuf/struct.ts", "../../../../node_modules/@ag-ui/proto/src/generated/patch.ts", "../../../../node_modules/@ag-ui/proto/src/generated/types.ts", "../../../../node_modules/@ag-ui/proto/src/generated/events.ts", "../../../../node_modules/@ag-ui/proto/src/proto.ts", "../../../../node_modules/@ag-ui/proto/src/index.ts", "../../../../node_modules/compare-versions/src/utils.ts", "../../../../node_modules/compare-versions/src/compareVersions.ts", "../../../../node_modules/@ag-ui/client/src/utils.ts", "../../../../node_modules/@ag-ui/client/src/agent/subscriber.ts", "../../../../node_modules/@ag-ui/client/src/agent/types.ts", "../../../../node_modules/@ag-ui/client/src/debug-logger.ts", "../../../../node_modules/@ag-ui/client/src/apply/default.ts", "../../../../node_modules/@ag-ui/client/src/verify/verify.ts", "../../../../node_modules/@ag-ui/client/src/run/http-request.ts", "../../../../node_modules/@ag-ui/client/src/transform/sse.ts", "../../../../node_modules/@ag-ui/client/src/transform/proto.ts", "../../../../node_modules/@ag-ui/client/src/transform/http.ts", "../../../../node_modules/@ag-ui/client/src/legacy/types.ts", "../../../../node_modules/@ag-ui/client/src/legacy/convert.ts", "../../../../node_modules/@ag-ui/client/src/chunks/transform.ts", "../../../../node_modules/@ag-ui/client/src/middleware/middleware.ts", "../../../../node_modules/@ag-ui/client/src/middleware/filter-tool-calls.ts", "../../../../node_modules/@ag-ui/client/src/middleware/backward-compatibility-0-0-39.ts", "../../../../node_modules/@ag-ui/client/src/middleware/backward-compatibility-0-0-45.ts", "../../../../node_modules/@ag-ui/client/package.json", "../../../../node_modules/@ag-ui/client/src/agent/agent.ts", "../../../../node_modules/@ag-ui/client/src/agent/http.ts", "../../../../node_modules/@ag-ui/client/src/compact/compact.ts", "../../../chat/src/transport/agui.ts", "../../../sdk-contracts/dist/mount-plumbing.js", "../../../sdk-contracts/dist/schemas.js", "../src/ChatAssistantLit.ts"],
4
+ "sourcesContent": ["import type { TemplateResult } from 'lit';\nimport { html, LitElement, nothing } from 'lit';\n\nimport { renderChatInput } from './rendering/ChatInput.js';\nimport type { ToolRenderer } from './rendering/MessageBubble.js';\nimport { renderMessageList } from './rendering/MessageList.js';\nimport type { ChatSlots } from './slots.js';\nimport { injectChatStyles } from './styles.js';\nimport type { ServerEvent, SessionTransport } from './transport/types.js';\nimport type { ChatMessage } from './types.js';\n\nexport class SyntroChat extends LitElement {\n static override properties = {\n transport: { attribute: false },\n greeting: { type: String },\n suggestions: { attribute: false },\n toolLabels: { attribute: false },\n toolRenderers: { attribute: false },\n autoExecTools: { attribute: false },\n slots: { attribute: false },\n _messages: { state: true },\n _isTyping: { state: true },\n _isConnected: { state: true },\n _sessionId: { state: true },\n _inputValue: { state: true },\n _isComposing: { state: true },\n _isStreaming: { state: true },\n _userScrolledUp: { state: true },\n _errorMessage: { state: true },\n };\n\n transport!: SessionTransport;\n greeting?: string;\n suggestions?: string[];\n toolLabels?: Record<string, string>;\n toolRenderers?: Record<string, ToolRenderer>;\n autoExecTools?: Set<string>;\n slots?: ChatSlots;\n\n private _messages: ChatMessage[] = [];\n private _isTyping = false;\n private _isConnected = false;\n private _sessionId: string | null = null;\n private _inputValue = '';\n private _isComposing = false;\n private _isStreaming = false;\n private _unsubscribe: (() => void) | null = null;\n private _scrollContainer: HTMLElement | null = null;\n private _userScrolledUp = false;\n private _errorMessage: string | null = null;\n\n override createRenderRoot(): HTMLElement {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n injectChatStyles();\n if (this.transport) {\n this._unsubscribe = this.transport.subscribe(this._handleEvent);\n this.transport.connect();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._unsubscribe?.();\n this._unsubscribe = null;\n this.transport?.disconnect();\n }\n\n override firstUpdated(): void {\n this._scrollContainer = this.querySelector('[data-sc-scroll-area]');\n this._scrollContainer?.addEventListener('scroll', this._handleScroll);\n }\n\n override updated(): void {\n this._injectCodeCopyButtons();\n }\n\n private _injectCodeCopyButtons(): void {\n const blocks = this.querySelectorAll('[data-sc-code-block]:not(:has([data-sc-copy-btn]))');\n for (const block of blocks) {\n const btn = document.createElement('button');\n btn.setAttribute('data-sc-copy-btn', '');\n btn.textContent = 'Copy';\n btn.addEventListener('click', () => {\n const code = block.querySelector('code');\n if (code) navigator.clipboard?.writeText(code.textContent ?? '');\n btn.textContent = 'Copied!';\n setTimeout(() => {\n btn.textContent = 'Copy';\n }, 1500);\n });\n block.appendChild(btn);\n }\n }\n\n private _handleScroll = (): void => {\n if (!this._scrollContainer) return;\n const { scrollTop, scrollHeight, clientHeight } = this._scrollContainer;\n this._userScrolledUp = scrollHeight - scrollTop - clientHeight > 50;\n };\n\n private _scrollToBottom(): void {\n if (this._userScrolledUp) return;\n requestAnimationFrame(() => {\n if (this._scrollContainer?.scrollTo) {\n this._scrollContainer.scrollTo({\n top: this._scrollContainer.scrollHeight,\n behavior: 'smooth',\n });\n }\n });\n }\n\n private _handleEvent = (event: ServerEvent): void => {\n switch (event.type) {\n case 'session-ready':\n this._sessionId = event.sessionId;\n this._isConnected = true;\n break;\n\n case 'messages-snapshot':\n this._messages = [...event.messages];\n this._isStreaming = event.messages.some((m) => m.status === 'streaming');\n this._scrollToBottom();\n break;\n\n case 'message-append':\n if (!this._messages.some((m) => m.id === event.message.id)) {\n this._messages = [...this._messages, event.message];\n }\n this._isStreaming = event.message.status === 'streaming';\n this._scrollToBottom();\n break;\n\n case 'message-delta': {\n this._messages = this._messages.map((m) =>\n m.id === event.messageId ? { ...m, content: m.content + event.delta } : m\n );\n this._scrollToBottom();\n break;\n }\n\n case 'message-complete':\n this._messages = this._messages.map((m) =>\n m.id === event.messageId ? { ...m, status: 'complete' as const } : m\n );\n this._isStreaming = false;\n break;\n\n case 'typing':\n this._isTyping = event.isTyping;\n if (event.isTyping) this._scrollToBottom();\n break;\n\n case 'tool-call': {\n this._messages = this._messages.map((m) => {\n if (m.id !== event.messageId) return m;\n const existing = (m.toolCalls ?? []).findIndex((tc) => tc.id === event.toolCall.id);\n if (existing >= 0) {\n const toolCalls = [...(m.toolCalls ?? [])];\n toolCalls[existing] = event.toolCall;\n return { ...m, toolCalls };\n }\n return { ...m, toolCalls: [...(m.toolCalls ?? []), event.toolCall] };\n });\n if (this.autoExecTools?.has(event.toolCall.name) && event.toolCall.status === 'pending') {\n this._markToolDone(event.toolCall.id);\n this.transport.send({\n type: 'tool-result',\n toolCallId: event.toolCall.id,\n result: null,\n approved: true,\n });\n }\n break;\n }\n\n case 'tool-call-args-delta': {\n this._messages = this._messages.map((m) => {\n if (!m.toolCalls) return m;\n const toolCalls = m.toolCalls.map((tc) =>\n tc.id === event.toolCallId ? { ...tc, argsBuffer: tc.argsBuffer + event.delta } : tc\n );\n return { ...m, toolCalls };\n });\n break;\n }\n\n case 'tool-call-done': {\n this._messages = this._messages.map((m) => {\n if (!m.toolCalls) return m;\n const toolCalls = m.toolCalls.map((tc) => {\n if (tc.id !== event.toolCallId) return tc;\n let args: Record<string, unknown> | undefined;\n try {\n args = JSON.parse(tc.argsBuffer);\n } catch {\n args = undefined;\n }\n return { ...tc, status: 'done' as const, args };\n });\n return { ...m, toolCalls };\n });\n break;\n }\n\n case 'error':\n this._errorMessage = event.message;\n break;\n\n case 'a2ui':\n break;\n }\n };\n\n private _onInput = (e: Event): void => {\n this._inputValue = (e.target as HTMLTextAreaElement).value;\n };\n\n private _appendUserMessage(text: string): void {\n const msg: ChatMessage = {\n id: `user-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\n role: 'user',\n content: text,\n timestamp: Date.now(),\n status: 'complete',\n };\n this._messages = [...this._messages, msg];\n this._scrollToBottom();\n }\n\n private _onSend = (): void => {\n const text = this._inputValue.trim();\n if (!text) return;\n this._appendUserMessage(text);\n this.transport.send({ type: 'user-message', text });\n this._inputValue = '';\n };\n\n private _onStop = (): void => {\n this.transport.send({ type: 'stop-generation' });\n };\n\n private _onKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter' && !e.shiftKey && !this._isComposing) {\n e.preventDefault();\n if (this._isStreaming) {\n this._onStop();\n } else {\n this._onSend();\n }\n }\n };\n\n private _onCopy = (content: string): void => {\n navigator.clipboard?.writeText(content);\n };\n\n private _onRegenerate = (messageId: string): void => {\n this.transport.send({ type: 'regenerate', messageId });\n };\n\n private _onToolApprove = (toolCallId: string): void => {\n this._markToolDone(toolCallId);\n this.transport.send({\n type: 'tool-result',\n toolCallId,\n result: null,\n approved: true,\n });\n };\n\n private _onToolDeny = (toolCallId: string): void => {\n this._markToolDone(toolCallId);\n this.transport.send({\n type: 'tool-result',\n toolCallId,\n result: null,\n approved: false,\n });\n };\n\n private _markToolDone(toolCallId: string): void {\n this._messages = this._messages.map((m) => {\n if (!m.toolCalls) return m;\n const toolCalls = m.toolCalls.map((tc) =>\n tc.id === toolCallId ? { ...tc, status: 'done' as const } : tc\n );\n return { ...m, toolCalls };\n });\n }\n\n private _onCompositionStart = (): void => {\n this._isComposing = true;\n };\n\n private _onCompositionEnd = (): void => {\n this._isComposing = false;\n };\n\n private _onSuggestion = (text: string): void => {\n this._appendUserMessage(text);\n this.transport.send({ type: 'user-message', text });\n };\n\n override render(): TemplateResult {\n const headerSlot = this.slots?.header;\n const emptyState =\n this.slots?.emptyState ??\n (this.greeting\n ? html`<div style=\"padding:24px;text-align:center;color:var(--sc-content-text-secondary-color,#87919f)\">${this.greeting}</div>`\n : undefined);\n\n return html`\n <div data-sc-chat style=\"display:flex;flex-direction:column;height:100%;position:relative;\">\n ${\n headerSlot && typeof headerSlot === 'object' && 'values' in headerSlot\n ? headerSlot\n : nothing\n }\n <div data-sc-scroll-area style=\"flex:1;overflow-y:auto;\">\n ${renderMessageList({\n messages: this._messages,\n isTyping: this._isTyping,\n toolLabels: this.toolLabels,\n toolRenderers: this.toolRenderers,\n onCopy: this._onCopy,\n onRegenerate: this._onRegenerate,\n onToolApprove: this._onToolApprove,\n onToolDeny: this._onToolDeny,\n emptyStateSlot: emptyState as TemplateResult | undefined,\n typingIndicatorSlot: this.slots?.typingIndicator as TemplateResult | undefined,\n })}\n </div>\n ${\n this._userScrolledUp\n ? html`<button data-sc-scroll-btn @click=${() => {\n this._userScrolledUp = false;\n this._scrollToBottom();\n }} aria-label=\"Scroll to bottom\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>`\n : nothing\n }\n ${\n this._errorMessage\n ? html`<div data-sc-error role=\"alert\">${this._errorMessage}</div>`\n : nothing\n }\n ${renderChatInput({\n value: this._inputValue,\n isStreaming: this._isStreaming || this._isTyping,\n isComposing: this._isComposing,\n onInput: this._onInput,\n onSend: this._onSend,\n onStop: this._onStop,\n onKeyDown: this._onKeyDown,\n onCompositionStart: this._onCompositionStart,\n onCompositionEnd: this._onCompositionEnd,\n suggestions: this._messages.length === 0 ? this.suggestions : undefined,\n onSuggestion: this._onSuggestion,\n inputActionsSlot: this.slots?.inputActions as TemplateResult | undefined,\n beforeInputSlot: this.slots?.beforeInput as TemplateResult | undefined,\n })}\n </div>\n `;\n }\n}\n", "import { html, nothing, type TemplateResult } from 'lit';\n\nexport interface ChatInputProps {\n value: string;\n isStreaming: boolean;\n isComposing: boolean;\n onInput: (e: Event) => void;\n onSend: () => void;\n onStop: () => void;\n onKeyDown: (e: KeyboardEvent) => void;\n onCompositionStart?: () => void;\n onCompositionEnd?: () => void;\n suggestions?: string[];\n onSuggestion?: (text: string) => void;\n inputActionsSlot?: TemplateResult;\n beforeInputSlot?: TemplateResult;\n}\n\nconst sendIcon = html`<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M8 14V2M8 2L3 7M8 2L13 7\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n\nconst stopIcon = html`<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><rect x=\"1\" y=\"1\" width=\"12\" height=\"12\" rx=\"2\" fill=\"currentColor\"/></svg>`;\n\nfunction autoResize(e: Event): void {\n const el = e.target as HTMLTextAreaElement;\n el.style.height = 'auto';\n el.style.height = `${Math.min(el.scrollHeight, 150)}px`;\n}\n\nexport function renderChatInput(props: ChatInputProps): TemplateResult {\n const canSend = props.value.trim().length > 0 && !props.isStreaming;\n const buttonLabel = props.isStreaming ? 'Stop generation' : 'Send message';\n const buttonAction = props.isStreaming ? props.onStop : props.onSend;\n\n const handleInput = (e: Event) => {\n autoResize(e);\n props.onInput(e);\n };\n\n return html`\n ${\n props.suggestions?.length && !props.isStreaming\n ? html`<div data-sc-suggestions>\n ${props.suggestions.map(\n (s) => html`<button @click=${() => props.onSuggestion?.(s)}>${s}</button>`\n )}\n </div>`\n : nothing\n }\n ${props.beforeInputSlot ?? nothing}\n <div data-sc-chat-input>\n <textarea\n rows=\"1\"\n placeholder=\"Type a message...\"\n .value=${props.value}\n @input=${handleInput}\n @keydown=${props.onKeyDown}\n @compositionstart=${props.onCompositionStart}\n @compositionend=${props.onCompositionEnd}\n aria-label=\"Message input\"\n ></textarea>\n ${props.inputActionsSlot ?? nothing}\n <button\n data-sc-send-btn\n ?disabled=${!canSend && !props.isStreaming}\n @click=${buttonAction}\n aria-label=${buttonLabel}\n >${props.isStreaming ? stopIcon : sendIcon}</button>\n </div>\n `;\n}\n", "import { html, nothing, type TemplateResult } from 'lit';\nimport { guard } from 'lit/directives/guard.js';\nimport { repeat } from 'lit/directives/repeat.js';\n\nimport { fingerprint } from '../fingerprint.js';\nimport type { ChatMessage } from '../types.js';\nimport type { ToolRenderer } from './MessageBubble.js';\nimport { renderMessageBubble } from './MessageBubble.js';\nimport { renderTypingIndicator } from './TypingIndicator.js';\n\nexport interface MessageListProps {\n messages: ChatMessage[];\n isTyping: boolean;\n toolLabels?: Record<string, string>;\n toolRenderers?: Record<string, ToolRenderer>;\n onCopy: (content: string) => void;\n onRegenerate?: (messageId: string) => void;\n onToolApprove: (toolCallId: string) => void;\n onToolDeny: (toolCallId: string) => void;\n emptyStateSlot?: TemplateResult;\n typingIndicatorSlot?: TemplateResult;\n}\n\nexport function renderMessageList(props: MessageListProps): TemplateResult {\n if (props.messages.length === 0 && !props.isTyping) {\n return html`<div role=\"log\" aria-live=\"polite\" aria-label=\"Chat messages\">\n ${props.emptyStateSlot ?? nothing}\n </div>`;\n }\n\n return html`\n <div role=\"log\" aria-live=\"polite\" aria-label=\"Chat messages\" data-sc-msg-list>\n ${repeat(\n props.messages,\n (msg) => msg.id,\n (msg) =>\n guard([fingerprint(msg)], () =>\n renderMessageBubble({\n message: msg,\n toolLabels: props.toolLabels,\n toolRenderers: props.toolRenderers,\n onCopy: props.onCopy,\n onRegenerate: props.onRegenerate,\n onToolApprove: props.onToolApprove,\n onToolDeny: props.onToolDeny,\n })\n )\n )}\n ${props.isTyping ? (props.typingIndicatorSlot ?? renderTypingIndicator()) : nothing}\n </div>\n `;\n}\n", "import type { ChatMessage } from './types.js';\n\nexport function fingerprint(msg: ChatMessage): string {\n const tcIds = msg.toolCalls?.map((tc) => `${tc.id}:${tc.status}`).join(',') ?? '';\n return `${msg.id}:${msg.role}:${msg.content.length}:${msg.status}:${tcIds}`;\n}\n", "import { html, nothing, type TemplateResult } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\n\nimport { renderMarkdown } from '../markdown.js';\nimport type { ChatMessage, ToolCall } from '../types.js';\nimport { renderActionBar } from './ActionBar.js';\nimport { renderToolCallCard } from './ToolCallCard.js';\n\nexport interface ToolRenderer {\n render(props: ToolRenderProps): TemplateResult;\n}\n\nexport interface ToolRenderProps {\n toolCall: ToolCall;\n phase: ToolCall['status'];\n approve: () => void;\n deny: () => void;\n}\n\nexport interface MessageBubbleProps {\n message: ChatMessage;\n toolLabels?: Record<string, string>;\n toolRenderers?: Record<string, ToolRenderer>;\n onCopy: (content: string) => void;\n onRegenerate?: (messageId: string) => void;\n onToolApprove: (toolCallId: string) => void;\n onToolDeny: (toolCallId: string) => void;\n}\n\nconst assistantIcon = html`<svg data-sc-avatar width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"><circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"var(--sc-color-primary, #6a59ce)\"/><path d=\"M12 4l1.4 3.6L17 9l-3.6 1.4L12 14l-1.4-3.6L7 9l3.6-1.4L12 4z\" fill=\"#fff\"/><path d=\"M16.5 13l.7 1.8 1.8.7-1.8.7-.7 1.8-.7-1.8-1.8-.7 1.8-.7.5-1.8z\" fill=\"#fff\" opacity=\"0.7\"/></svg>`;\n\nfunction renderBubbleContent(message: ChatMessage): TemplateResult {\n if (message.role === 'user') {\n return html`<div data-sc-msg-user>${message.content}</div>`;\n }\n return html`<div data-sc-msg-assistant>${unsafeHTML(renderMarkdown(message.content))}</div>`;\n}\n\nexport function renderMessageBubble(props: MessageBubbleProps): TemplateResult {\n const { message, toolLabels, toolRenderers } = props;\n const isUser = message.role === 'user';\n\n const toolCards = message.toolCalls?.map((tc) => {\n const approve = () => props.onToolApprove(tc.id);\n const deny = () => props.onToolDeny(tc.id);\n const customRenderer = toolRenderers?.[tc.name];\n if (customRenderer) {\n return customRenderer.render({\n toolCall: tc,\n phase: tc.status,\n approve,\n deny,\n });\n }\n return renderToolCallCard({\n toolCall: tc,\n toolLabel: toolLabels?.[tc.name],\n approve,\n deny,\n });\n });\n\n return html`\n <div data-sc-msg-row data-sc-role=${message.role}>\n ${!isUser ? assistantIcon : nothing}\n <div data-sc-msg-content>\n ${renderBubbleContent(message)}\n ${message.status === 'error' ? html`<div data-sc-msg-error>Failed to send</div>` : nothing}\n ${toolCards ?? nothing}\n ${renderActionBar({\n messageId: message.id,\n content: message.content,\n role: message.role,\n onCopy: props.onCopy,\n onRegenerate: isUser ? undefined : props.onRegenerate,\n })}\n </div>\n </div>\n `;\n}\n", "import DOMPurify from 'dompurify';\nimport { Marked } from 'marked';\n\nconst marked = new Marked({ async: false, gfm: true, breaks: true });\n\nfunction escapeAttr(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\nconst codeRenderer = {\n code({ text, lang }: { text: string; lang?: string }): string {\n const safeLang = lang ? escapeAttr(lang) : '';\n const langAttr = safeLang ? ` class=\"language-${safeLang}\"` : '';\n return (\n `<div data-sc-code-block${safeLang ? ` data-lang=\"${safeLang}\"` : ''}>` +\n `<pre><code${langAttr}>${text}</code></pre>` +\n `</div>\\n`\n );\n },\n};\n\nmarked.use({ renderer: codeRenderer });\n\nexport function renderMarkdown(text: string): string {\n if (!text) return '';\n const raw = marked.parse(text) as string;\n if (typeof window === 'undefined') return raw;\n return DOMPurify.sanitize(raw, {\n ADD_ATTR: ['data-sc-code-block', 'data-lang', 'data-sc-copy-btn'],\n });\n}\n", "import { html, type TemplateResult } from 'lit';\n\nexport interface ActionBarProps {\n messageId: string;\n content: string;\n role: string;\n onCopy: (content: string) => void;\n onRegenerate?: (messageId: string) => void;\n}\n\nconst copyIcon = html`<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><rect x=\"4.5\" y=\"0.5\" width=\"9\" height=\"9\" rx=\"1.5\" stroke=\"currentColor\"/><rect x=\"0.5\" y=\"4.5\" width=\"9\" height=\"9\" rx=\"1.5\" stroke=\"currentColor\" fill=\"var(--sc-chat-action-bar-bg, rgba(0,0,0,0.05))\"/></svg>`;\n\nconst regenerateIcon = html`<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M1.5 7a5.5 5.5 0 0 1 9.9-3.3M12.5 7a5.5 5.5 0 0 1-9.9 3.3\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"/><path d=\"M11.5 1v3h-3M2.5 13v-3h3\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n\nexport function renderActionBar(props: ActionBarProps): TemplateResult {\n const showRegenerate = props.role === 'assistant' && props.onRegenerate;\n return html`\n <div data-sc-action-bar>\n <button\n @click=${() => props.onCopy(props.content)}\n aria-label=\"Copy message\"\n title=\"Copy\"\n >${copyIcon}</button>\n ${\n showRegenerate\n ? html`<button\n @click=${() => props.onRegenerate!(props.messageId)}\n aria-label=\"Regenerate response\"\n title=\"Regenerate\"\n >${regenerateIcon}</button>`\n : ''\n }\n </div>\n `;\n}\n", "import { html, nothing, type TemplateResult } from 'lit';\n\nimport type { ToolCall } from '../types.js';\n\nexport interface ToolCallCardProps {\n toolCall: ToolCall;\n toolLabel?: string;\n approve: () => void;\n deny: () => void;\n}\n\nconst spinnerIcon = html`<svg data-sc-spinner width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><circle cx=\"7\" cy=\"7\" r=\"5.5\" stroke=\"currentColor\" stroke-width=\"1.5\" opacity=\"0.2\"/><path d=\"M12.5 7a5.5 5.5 0 0 0-5.5-5.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>`;\n\nconst checkIcon = html`<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M3 7.5L6 10.5L11 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n\nconst errorIcon = html`<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.3\"/><path d=\"M5 5l4 4M9 5l-4 4\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"/></svg>`;\n\nconst toolIcon = html`<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M8.5 2.5l3 3-7.5 7.5H1v-3l7.5-7.5z\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n\nfunction statusIcon(status: string): TemplateResult {\n switch (status) {\n case 'args-streaming':\n case 'running':\n return spinnerIcon;\n case 'done':\n return checkIcon;\n case 'error':\n return errorIcon;\n default:\n return toolIcon;\n }\n}\n\nexport function renderToolCallCard(props: ToolCallCardProps): TemplateResult {\n const { toolCall, toolLabel, approve, deny } = props;\n const displayName = toolLabel ?? toolCall.name;\n const isActive = toolCall.status === 'args-streaming' || toolCall.status === 'running';\n\n return html`\n <div data-sc-tool-card ?data-sc-active=${isActive}>\n <div data-sc-tool-header>\n <span data-sc-tool-icon data-sc-status=${toolCall.status}>${statusIcon(toolCall.status)}</span>\n <span data-sc-tool-name>${displayName}</span>\n </div>\n ${\n toolCall.status === 'error' && toolCall.error\n ? html`<div data-sc-tool-error>${toolCall.error}</div>`\n : nothing\n }\n ${\n toolCall.status === 'pending'\n ? html`<div data-sc-tool-actions>\n <button data-sc-approve @click=${approve} aria-label=\"Approve ${displayName}\">Approve</button>\n <button data-sc-deny @click=${deny} aria-label=\"Deny ${displayName}\">Deny</button>\n </div>`\n : nothing\n }\n </div>\n `;\n}\n", "import { html, type TemplateResult } from 'lit';\n\nexport function renderTypingIndicator(): TemplateResult {\n return html`\n <div data-sc-typing aria-label=\"Assistant is typing\">\n <span></span><span></span><span></span>\n </div>\n `;\n}\n", "const STYLE_ID = 'sc-chat-styles';\n\nconst STYLE_RULES = `\n@keyframes sc-fade-in {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes sc-typing-bounce {\n 0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }\n 40% { transform: scale(1); opacity: 1; }\n}\n\n@keyframes sc-spin {\n to { transform: rotate(360deg); }\n}\n\n[data-sc-chat] {\n font-family: var(--sc-font-family, system-ui, -apple-system, sans-serif);\n color: var(--sc-content-text-color, #1a1a2e);\n line-height: 1.5;\n font-size: 0.9375rem;\n}\n\n/* \u2500\u2500 Message list \u2500\u2500 */\n[data-sc-chat] [data-sc-msg-list] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 16px 16px 8px;\n}\n\n/* \u2500\u2500 Message row (avatar + content) \u2500\u2500 */\n[data-sc-chat] [data-sc-msg-row] {\n display: flex;\n gap: 10px;\n align-items: flex-start;\n animation: sc-fade-in 0.25s ease-out;\n}\n\n[data-sc-chat] [data-sc-msg-row][data-sc-role=\"user\"] {\n flex-direction: row-reverse;\n}\n\n[data-sc-chat] [data-sc-msg-content] {\n min-width: 0;\n max-width: 80%;\n}\n\n[data-sc-chat] [data-sc-msg-row][data-sc-role=\"user\"] [data-sc-msg-content] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n\n/* \u2500\u2500 Avatar \u2500\u2500 */\n[data-sc-chat] [data-sc-avatar] {\n flex-shrink: 0;\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Bubbles \u2500\u2500 */\n[data-sc-chat] [data-sc-msg-user] {\n background: var(--sc-color-primary, #6a59ce);\n color: var(--sc-color-primary-text, #ffffff);\n border-radius: 18px 18px 4px 18px;\n padding: 10px 16px;\n word-break: break-word;\n}\n\n[data-sc-chat] [data-sc-msg-assistant] {\n background: var(--sc-chat-assistant-bubble-bg, #f4f4f8);\n color: var(--sc-content-text-color, #1a1a2e);\n border-radius: 18px 18px 18px 4px;\n padding: 10px 16px;\n word-break: break-word;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n}\n\n[data-sc-chat] [data-sc-msg-assistant] > :first-child { margin-top: 0; }\n[data-sc-chat] [data-sc-msg-assistant] > :last-child { margin-bottom: 0; }\n\n[data-sc-chat] [data-sc-msg-assistant] p,\n[data-sc-chat] [data-sc-msg-assistant] ul,\n[data-sc-chat] [data-sc-msg-assistant] ol,\n[data-sc-chat] [data-sc-msg-assistant] pre,\n[data-sc-chat] [data-sc-msg-assistant] blockquote {\n margin: 0.25em 0;\n}\n\n[data-sc-chat] [data-sc-msg-assistant] code:not(pre code) {\n background: rgba(0, 0, 0, 0.06);\n padding: 1px 5px;\n border-radius: 4px;\n font-size: 0.85em;\n}\n\n[data-sc-chat] [data-sc-msg-assistant] ul,\n[data-sc-chat] [data-sc-msg-assistant] ol {\n padding-left: 1.2em;\n}\n\n[data-sc-chat] [data-sc-msg-assistant] h1,\n[data-sc-chat] [data-sc-msg-assistant] h2,\n[data-sc-chat] [data-sc-msg-assistant] h3 {\n margin: 0.5rem 0 0.25rem;\n color: var(--sc-content-heading-color, #1a1a2e);\n}\n\n/* \u2500\u2500 Code blocks \u2500\u2500 */\n[data-sc-chat] [data-sc-code-block] {\n position: relative;\n margin: 0.5rem 0;\n}\n\n[data-sc-chat] [data-sc-code-block]::before {\n content: attr(data-lang);\n position: absolute;\n top: 0;\n right: 0;\n padding: 2px 10px;\n font-size: 0.7rem;\n color: rgba(255, 255, 255, 0.4);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n[data-sc-chat] [data-sc-code-block] pre {\n background: var(--sc-chat-code-bg, #1e1e2e);\n color: #e0e0e0;\n border-radius: 10px;\n padding: 14px;\n overflow-x: auto;\n font-size: 0.825em;\n margin: 0;\n line-height: 1.6;\n}\n\n[data-sc-chat] [data-sc-code-block] [data-sc-copy-btn] {\n position: absolute;\n top: 8px;\n right: 8px;\n background: rgba(255, 255, 255, 0.08);\n border: none;\n color: rgba(255, 255, 255, 0.5);\n border-radius: 6px;\n padding: 4px 10px;\n cursor: pointer;\n font-size: 0.7rem;\n opacity: 0;\n transition: opacity 0.15s, background 0.15s;\n}\n\n[data-sc-chat] [data-sc-code-block]:hover [data-sc-copy-btn] {\n opacity: 1;\n}\n\n[data-sc-chat] [data-sc-code-block] [data-sc-copy-btn]:hover {\n background: rgba(255, 255, 255, 0.16);\n color: rgba(255, 255, 255, 0.8);\n}\n\n/* \u2500\u2500 Scrollbar \u2500\u2500 */\n[data-sc-chat] [data-sc-scroll-area]::-webkit-scrollbar {\n width: 4px;\n}\n[data-sc-chat] [data-sc-scroll-area]::-webkit-scrollbar-track {\n background: transparent;\n}\n[data-sc-chat] [data-sc-scroll-area]::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n}\n[data-sc-chat] [data-sc-scroll-area]::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.2);\n}\n\n[data-sc-chat] [data-sc-code-block] pre::-webkit-scrollbar {\n height: 4px;\n}\n[data-sc-chat] [data-sc-code-block] pre::-webkit-scrollbar-track {\n background: transparent;\n}\n[data-sc-chat] [data-sc-code-block] pre::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.15);\n border-radius: 4px;\n}\n\n/* \u2500\u2500 Chat input area \u2500\u2500 */\n[data-sc-chat] [data-sc-chat-input] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--sc-content-border-color, #e8e8ee);\n background: var(--sc-chat-input-bg, #ffffff);\n}\n\n[data-sc-chat] [data-sc-chat-input] textarea {\n flex: 1;\n border: 1px solid var(--sc-content-border-color, #e8e8ee);\n border-radius: 14px;\n padding: 10px 16px;\n font-family: inherit;\n font-size: 0.9rem;\n resize: none;\n outline: none;\n background: var(--sc-chat-input-bg, #ffffff);\n color: var(--sc-content-text-color, #1a1a2e);\n min-height: 42px;\n max-height: 150px;\n line-height: 1.4;\n transition: border-color 0.2s, box-shadow 0.2s;\n overflow-y: auto;\n}\n\n[data-sc-chat] [data-sc-chat-input] textarea:focus {\n border-color: var(--sc-color-primary, #6a59ce);\n box-shadow: 0 0 0 3px rgba(106, 89, 206, 0.1);\n}\n\n[data-sc-chat] [data-sc-send-btn] {\n background: var(--sc-color-primary, #6a59ce);\n color: var(--sc-color-primary-text, #ffffff);\n border: none;\n border-radius: 50%;\n width: 38px;\n height: 38px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: background 0.2s, transform 0.15s, opacity 0.2s;\n}\n\n[data-sc-chat] [data-sc-send-btn]:hover:not(:disabled) {\n background: var(--sc-color-primary-hover, #5a49be);\n transform: scale(1.05);\n}\n\n[data-sc-chat] [data-sc-send-btn]:active:not(:disabled) {\n transform: scale(0.95);\n}\n\n[data-sc-chat] [data-sc-send-btn]:disabled {\n background: var(--sc-content-border-color, #e8e8ee);\n color: var(--sc-content-text-secondary-color, #87919f);\n cursor: default;\n}\n\n[data-sc-chat] [data-sc-send-btn] svg {\n display: block;\n}\n\n/* \u2500\u2500 Typing indicator \u2500\u2500 */\n[data-sc-chat] [data-sc-typing] {\n display: flex;\n gap: 4px;\n padding: 12px 16px;\n background: var(--sc-chat-loading-bg, #f4f4f8);\n border-radius: 18px 18px 18px 4px;\n width: fit-content;\n margin-left: 34px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n}\n\n[data-sc-chat] [data-sc-typing] span {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--sc-content-text-secondary-color, #87919f);\n animation: sc-typing-bounce 1.4s infinite ease-in-out both;\n}\n\n[data-sc-chat] [data-sc-typing] span:nth-child(2) { animation-delay: 0.16s; }\n[data-sc-chat] [data-sc-typing] span:nth-child(3) { animation-delay: 0.32s; }\n\n/* \u2500\u2500 Suggestion chips \u2500\u2500 */\n[data-sc-chat] [data-sc-suggestions] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 8px 16px;\n}\n\n[data-sc-chat] [data-sc-suggestions] button {\n background: transparent;\n border: 1px solid var(--sc-content-border-color, #e8e8ee);\n border-radius: 20px;\n padding: 7px 16px;\n font-size: 0.84rem;\n cursor: pointer;\n color: var(--sc-content-text-color, #1a1a2e);\n transition: all 0.2s;\n}\n\n[data-sc-chat] [data-sc-suggestions] button:hover {\n background: var(--sc-chat-assistant-bubble-bg, #f4f4f8);\n border-color: var(--sc-color-primary, #6a59ce);\n color: var(--sc-color-primary, #6a59ce);\n transform: translateY(-1px);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);\n}\n\n/* \u2500\u2500 Action bar \u2500\u2500 */\n[data-sc-chat] [data-sc-action-bar] {\n display: none;\n gap: 2px;\n padding-top: 2px;\n}\n\n[data-sc-chat] [data-sc-msg-row]:hover [data-sc-action-bar] {\n display: flex;\n}\n\n[data-sc-chat] [data-sc-action-bar] button {\n background: transparent;\n border: none;\n border-radius: 6px;\n padding: 5px;\n cursor: pointer;\n color: var(--sc-content-text-secondary-color, #87919f);\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n transition: background 0.15s, color 0.15s;\n}\n\n[data-sc-chat] [data-sc-action-bar] button:hover {\n background: var(--sc-chat-action-bar-bg, rgba(0, 0, 0, 0.06));\n color: var(--sc-content-text-color, #1a1a2e);\n}\n\n/* \u2500\u2500 Tool call cards \u2500\u2500 */\n[data-sc-chat] [data-sc-tool-card] {\n border: 1px solid var(--sc-content-border-color, #e8e8ee);\n border-left: 3px solid var(--sc-color-primary, #6a59ce);\n border-radius: 4px 10px 10px 4px;\n padding: 10px 14px;\n margin-top: 8px;\n font-size: 0.84rem;\n background: var(--sc-chat-assistant-bubble-bg, #f4f4f8);\n transition: border-color 0.2s;\n}\n\n[data-sc-chat] [data-sc-tool-card][data-sc-active] {\n border-left-color: #3b82f6;\n}\n\n[data-sc-chat] [data-sc-tool-header] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n[data-sc-chat] [data-sc-tool-icon] {\n display: flex;\n color: var(--sc-color-primary, #6a59ce);\n}\n\n[data-sc-chat] [data-sc-tool-icon][data-sc-status=\"done\"] {\n color: #22c55e;\n}\n\n[data-sc-chat] [data-sc-tool-icon][data-sc-status=\"error\"] {\n color: #ef4444;\n}\n\n[data-sc-chat] [data-sc-tool-icon][data-sc-status=\"running\"],\n[data-sc-chat] [data-sc-tool-icon][data-sc-status=\"args-streaming\"] {\n color: #3b82f6;\n}\n\n[data-sc-chat] [data-sc-spinner] {\n animation: sc-spin 0.8s linear infinite;\n}\n\n[data-sc-chat] [data-sc-tool-name] {\n font-weight: 500;\n}\n\n[data-sc-chat] [data-sc-tool-error] {\n color: #ef4444;\n font-size: 0.8rem;\n margin-top: 6px;\n}\n\n[data-sc-chat] [data-sc-tool-actions] {\n display: flex;\n gap: 8px;\n margin-top: 10px;\n}\n\n[data-sc-chat] [data-sc-tool-actions] button {\n padding: 5px 14px;\n border-radius: 8px;\n font-size: 0.8rem;\n cursor: pointer;\n border: 1px solid var(--sc-content-border-color, #e8e8ee);\n background: transparent;\n transition: all 0.15s;\n}\n\n[data-sc-chat] [data-sc-tool-actions] [data-sc-approve] {\n background: var(--sc-color-primary, #6a59ce);\n color: var(--sc-color-primary-text, #ffffff);\n border-color: transparent;\n}\n\n[data-sc-chat] [data-sc-tool-actions] [data-sc-approve]:hover {\n filter: brightness(1.1);\n}\n\n[data-sc-chat] [data-sc-tool-actions] [data-sc-deny] {\n color: var(--sc-content-text-secondary-color, #87919f);\n}\n\n[data-sc-chat] [data-sc-tool-actions] [data-sc-deny]:hover {\n border-color: #ef4444;\n color: #ef4444;\n}\n\n/* \u2500\u2500 Error banner \u2500\u2500 */\n[data-sc-chat] [data-sc-error] {\n background: #fef2f2;\n border-left: 3px solid #ef4444;\n padding: 8px 12px;\n border-radius: 0 8px 8px 0;\n font-size: 0.84rem;\n color: #dc2626;\n}\n\n[data-sc-chat] [data-sc-msg-error] {\n font-size: 0.8rem;\n color: #ef4444;\n margin-top: 4px;\n}\n\n/* \u2500\u2500 Scroll-to-bottom \u2500\u2500 */\n[data-sc-chat] [data-sc-scroll-btn] {\n position: absolute;\n bottom: 80px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--sc-chat-assistant-bubble-bg, #f4f4f8);\n color: var(--sc-content-text-color, #1a1a2e);\n border: 1px solid var(--sc-content-border-color, #e8e8ee);\n border-radius: 50%;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n z-index: 1;\n transition: box-shadow 0.2s;\n}\n\n[data-sc-chat] [data-sc-scroll-btn]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\n[data-sc-chat] [data-sc-scroll-btn] svg {\n display: block;\n}\n`.trim();\n\nexport function injectChatStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = STYLE_RULES;\n document.head.appendChild(style);\n}\n", "export interface ChatMessage {\n id: string;\n role: 'user' | 'assistant' | 'system';\n content: string;\n timestamp: number;\n status: MessageStatus;\n toolCalls?: ToolCall[];\n metadata?: Record<string, unknown>;\n}\n\nexport type MessageStatus = 'complete' | 'streaming' | 'error';\n\nexport interface ToolCall {\n id: string;\n name: string;\n args: Record<string, unknown> | undefined;\n argsBuffer: string;\n status: ToolCallStatus;\n error?: string;\n}\n\nexport type ToolCallStatus = 'args-streaming' | 'pending' | 'running' | 'done' | 'error';\n\nexport function isStreamingMessage(msg: ChatMessage): boolean {\n return msg.status === 'streaming';\n}\n\nexport function isToolCallPending(tc: ToolCall): boolean {\n return tc.status === 'pending';\n}\n", "import { SyntroChat } from './SyntroChat.js';\n\nexport { fingerprint } from './fingerprint.js';\nexport { renderMarkdown } from './markdown.js';\nexport type { ToolRenderer, ToolRenderProps } from './rendering/MessageBubble.js';\nexport { SyntroChat } from './SyntroChat.js';\n\nexport type { ChatSlots, SlotValue } from './slots.js';\nexport type {\n A2UIEventCallback,\n A2UIPassthroughEvent,\n ClientAction,\n ServerEvent,\n SessionTransport,\n SsePostTransportOptions,\n} from './transport/types.js';\nexport type { ChatMessage, MessageStatus, ToolCall, ToolCallStatus } from './types.js';\nexport { isStreamingMessage, isToolCallPending } from './types.js';\n\nif (!customElements.get('syntro-chat')) {\n customElements.define('syntro-chat', SyntroChat);\n}\n", "const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!freeze) {\n freeze = function <T>(x: T): T {\n return x;\n };\n}\n\nif (!seal) {\n seal = function <T>(x: T): T {\n return x;\n };\n}\n\nif (!apply) {\n apply = function <T>(\n func: (thisArg: any, ...args: any[]) => T,\n thisArg: any,\n ...args: any[]\n ): T {\n return func.apply(thisArg, args);\n };\n}\n\nif (!construct) {\n construct = function <T>(Func: new (...args: any[]) => T, ...args: any[]): T {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\nconst arraySplice = unapply(Array.prototype.splice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply<T>(\n func: (thisArg: any, ...args: any[]) => T\n): (thisArg: any, ...args: any[]) => T {\n return (thisArg: any, ...args: any[]): T => {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n\n return apply(func, thisArg, args);\n };\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct<T>(\n Func: new (...args: any[]) => T\n): (...args: any[]) => T {\n return (...args: any[]): T => construct(Func, args);\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(\n set: Record<string, any>,\n array: readonly any[],\n transformCaseFunc: ReturnType<typeof unapply<string>> = stringToLowerCase\n): Record<string, any> {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n (array as any[])[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray<T>(array: T[]): Array<T | null> {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n\n return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone<T extends Record<string, any>>(object: T): T {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (\n value &&\n typeof value === 'object' &&\n value.constructor === Object\n ) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n\n return newObject;\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter<T extends Record<string, any>>(\n object: T,\n prop: string\n): ReturnType<typeof unapply<any>> | (() => null) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(): null {\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n arraySplice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n clone,\n create,\n objectHasOwnProperty,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n addToSet,\n // Reflect\n unapply,\n unconstruct,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'search',\n 'section',\n 'select',\n 'shadow',\n 'slot',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n] as const);\n\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'enterkeyhint',\n 'exportparts',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'inputmode',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'part',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n] as const);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n] as const);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n] as const);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts',\n] as const);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n] as const);\n\nexport const text = freeze(['#text'] as const);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'exportparts',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inert',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'part',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'popover',\n 'popovertarget',\n 'popovertargetaction',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'slot',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'wrap',\n 'xmlns',\n 'slot',\n] as const);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'amplitude',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'exponent',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'mask-type',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'tablevalues',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n] as const);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n] as const);\n", "import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n", "/* eslint-disable @typescript-eslint/indent */\n\nimport type {\n TrustedHTML,\n TrustedTypesWindow,\n} from 'trusted-types/lib/index.js';\nimport type { Config, UseProfilesConfig } from './config';\nimport * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n arrayForEach,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySplice,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n create,\n objectHasOwnProperty,\n} from './utils.js';\n\nexport type { Config } from './config';\n\ndeclare const VERSION: string;\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5, // Deprecated\n entityNode: 6, // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12, // Deprecated\n};\n\nconst getGlobal = function (): WindowLike {\n return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function (\n trustedTypes: TrustedTypePolicyFactory,\n purifyHostElement: HTMLScriptElement\n) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nconst _createHooksMap = function (): HooksMap {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: [],\n };\n};\n\nfunction createDOMPurify(window: WindowLike = getGlobal()): DOMPurify {\n const DOMPurify: DOMPurify = (root: WindowLike) => createDOMPurify(root);\n\n DOMPurify.version = VERSION;\n\n DOMPurify.removed = [];\n\n if (\n !window ||\n !window.document ||\n window.document.nodeType !== NODE_TYPE.document ||\n !window.Element\n ) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n let { document } = window;\n\n const originalDocument = document;\n const currentScript: HTMLScriptElement =\n originalDocument.currentScript as HTMLScriptElement;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || (window as any).MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n let trustedTypesPolicy;\n let emptyHTML = '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = _createHooksMap();\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n implementation.createHTMLDocument !== undefined;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n })\n );\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES: UseProfilesConfig | false = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n {},\n [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n stringToString\n );\n\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE: null | DOMParserSupportedType = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc: null | Parameters<typeof addToSet>[2] = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG: Config | null = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (\n testValue: unknown\n ): testValue is Function | RegExp {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg: Config = {}): void {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? DEFAULT_PARSER_MEDIA_TYPE\n : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? stringToString\n : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS')\n ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR')\n ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES')\n ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR')\n ? addToSet(\n clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n cfg.ADD_URI_SAFE_ATTR,\n transformCaseFunc\n )\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS')\n ? addToSet(\n clone(DEFAULT_DATA_URI_TAGS),\n cfg.ADD_DATA_URI_TAGS,\n transformCaseFunc\n )\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS')\n ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS')\n ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR')\n ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES')\n ? cfg.USE_PROFILES\n : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || EXPRESSIONS.IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS =\n cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS =\n cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, TAGS.text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.'\n );\n }\n\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.'\n );\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n currentScript\n );\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.svgDisallowed,\n ]);\n const ALL_MATHML_TAGS = addToSet({}, [\n ...TAGS.mathMl,\n ...TAGS.mathMlDisallowed,\n ]);\n\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element: Element): boolean {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n ALLOWED_NAMESPACES[element.namespaceURI]\n ) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function (node: Node): void {\n arrayPush(DOMPurify.removed, { element: node });\n\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function (name: string, element: Element): void {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element,\n });\n }\n\n element.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty: string): Document {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n NAMESPACE === HTML_NAMESPACE\n ) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty =\n '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' +\n dirty +\n '</body></html>';\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT\n ? emptyHTML\n : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(\n doc,\n WHOLE_DOCUMENT ? 'html' : 'body'\n )[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function (root: Node): NodeIterator {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT |\n NodeFilter.SHOW_COMMENT |\n NodeFilter.SHOW_TEXT |\n NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n NodeFilter.SHOW_CDATA_SECTION,\n null\n );\n };\n\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function (element: Element): boolean {\n return (\n element instanceof HTMLFormElement &&\n (typeof element.nodeName !== 'string' ||\n typeof element.textContent !== 'string' ||\n typeof element.removeChild !== 'function' ||\n !(element.attributes instanceof NamedNodeMap) ||\n typeof element.removeAttribute !== 'function' ||\n typeof element.setAttribute !== 'function' ||\n typeof element.namespaceURI !== 'string' ||\n typeof element.insertBefore !== 'function' ||\n typeof element.hasChildNodes !== 'function')\n );\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function (value: unknown): value is Node {\n return typeof Node === 'function' && value instanceof Node;\n };\n\n function _executeHooks<T extends HookFunction>(\n hooks: HookFunction[],\n currentNode: Parameters<T>[0],\n data: Parameters<T>[1]\n ): void {\n arrayForEach(hooks, (hook: T) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode: any): boolean {\n let content = null;\n\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n SAFE_FOR_XML &&\n currentNode.hasChildNodes() &&\n !_isNode(currentNode.firstElementChild) &&\n regExpTest(/<[/\\w!]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w!]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (\n SAFE_FOR_XML &&\n currentNode.nodeType === NODE_TYPE.comment &&\n regExpTest(/<[/\\w]/g, currentNode.data)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (\n !(\n EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function &&\n EXTRA_ELEMENT_HANDLING.tagCheck(tagName)\n ) &&\n (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])\n ) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n ) {\n return false;\n }\n\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n ) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if (\n (tagName === 'noscript' ||\n tagName === 'noembed' ||\n tagName === 'noframes') &&\n regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n content = stringReplace(content, expr, ' ');\n });\n\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function (\n lcTag: string,\n lcName: string,\n value: string\n ): boolean {\n /* Make sure attribute cannot clobber */\n if (\n SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in document || value in formElement)\n ) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (\n ALLOW_DATA_ATTR &&\n !FORBID_ATTR[lcName] &&\n regExpTest(DATA_ATTR, lcName)\n ) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n // This attribute is safe\n /* Check if ADD_ATTR function allows this attribute */\n } else if (\n EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function &&\n EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)\n ) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n (_isBasicCustomElement(lcTag) &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)))) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n (lcName === 'is' &&\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n ) {\n // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n } else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (\n regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if (\n (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n lcTag !== 'script' &&\n stringIndexOf(value, 'data:') === 0 &&\n DATA_URI_TAGS[lcTag]\n ) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Check for binary attributes */\n } else if (value) {\n return false;\n } else {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n }\n\n return true;\n };\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function (tagName: string): RegExpMatchArray {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function (currentNode: Element): void {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n\n const { attributes } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined,\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const { name, namespaceURI, value: attrValue } = attr;\n const lcName = transformCaseFunc(name);\n\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Work around a security issue with comments inside attributes */\n if (\n SAFE_FOR_XML &&\n regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)\n ) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Handle attributes that require Trusted Types */\n if (\n trustedTypesPolicy &&\n typeof trustedTypes === 'object' &&\n typeof trustedTypes.getAttributeType === 'function'\n ) {\n if (namespaceURI) {\n /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n } else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML': {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n\n case 'TrustedScriptURL': {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n\n default: {\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function (fragment: DocumentFragment): void {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n\n while ((shadowNode = shadowIterator.nextNode())) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg = {}) {\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if ((dirty as Node).nodeName) {\n const tagName = transformCaseFunc((dirty as Node).nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate(\n 'root node is forbidden and cannot be sanitized in-place'\n );\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (\n importedNode.nodeType === NODE_TYPE.element &&\n importedNode.nodeName === 'BODY'\n ) {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (\n !RETURN_DOM &&\n !SAFE_FOR_TEMPLATES &&\n !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1\n ) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while ((currentNode = nodeIterator.nextNode())) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (\n WHOLE_DOCUMENT &&\n ALLOWED_TAGS['!doctype'] &&\n body.ownerDocument &&\n body.ownerDocument.doctype &&\n body.ownerDocument.doctype.name &&\n regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n ) {\n serializedHTML =\n '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(serializedHTML)\n : serializedHTML;\n };\n\n DOMPurify.setConfig = function (cfg = {}) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n DOMPurify.addHook = function (\n entryPoint: keyof HooksMap,\n hookFunction: HookFunction\n ) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n DOMPurify.removeHook = function (\n entryPoint: keyof HooksMap,\n hookFunction: HookFunction\n ) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n\n return index === -1\n ? undefined\n : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n\n return arrayPop(hooks[entryPoint]);\n };\n\n DOMPurify.removeHooks = function (entryPoint: keyof HooksMap) {\n hooks[entryPoint] = [];\n };\n\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n\n return DOMPurify;\n}\n\nexport default createDOMPurify();\n\nexport interface DOMPurify {\n /**\n * Creates a DOMPurify instance using the given window-like object. Defaults to `window`.\n */\n (root?: WindowLike): DOMPurify;\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n version: string;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n removed: Array<RemovedElement | RemovedAttribute>;\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n isSupported: boolean;\n\n /**\n * Set the configuration once.\n *\n * @param cfg configuration object\n */\n setConfig(cfg?: Config): void;\n\n /**\n * Removes the configuration.\n */\n clearConfig(): void;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized TrustedHTML.\n */\n sanitize(\n dirty: string | Node,\n cfg: Config & { RETURN_TRUSTED_TYPE: true }\n ): TrustedHTML;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty DOM node\n * @param cfg object\n * @returns Sanitized DOM node.\n */\n sanitize(dirty: Node, cfg: Config & { IN_PLACE: true }): Node;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized DOM node.\n */\n sanitize(dirty: string | Node, cfg: Config & { RETURN_DOM: true }): Node;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized document fragment.\n */\n sanitize(\n dirty: string | Node,\n cfg: Config & { RETURN_DOM_FRAGMENT: true }\n ): DocumentFragment;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized string.\n */\n sanitize(dirty: string | Node, cfg?: Config): string;\n\n /**\n * Checks if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n *\n * @param tag Tag name of containing element.\n * @param attr Attribute name.\n * @param value Attribute value.\n * @returns Returns true if `value` is valid. Otherwise, returns false.\n */\n isValidAttribute(tag: string, attr: string, value: string): boolean;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(entryPoint: BasicHookName, hookFunction: NodeHook): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(entryPoint: ElementHookName, hookFunction: ElementHook): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: DocumentFragmentHookName,\n hookFunction: DocumentFragmentHook\n ): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: 'uponSanitizeElement',\n hookFunction: UponSanitizeElementHook\n ): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: 'uponSanitizeAttribute',\n hookFunction: UponSanitizeAttributeHook\n ): void;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: BasicHookName,\n hookFunction?: NodeHook\n ): NodeHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: ElementHookName,\n hookFunction?: ElementHook\n ): ElementHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: DocumentFragmentHookName,\n hookFunction?: DocumentFragmentHook\n ): DocumentFragmentHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: 'uponSanitizeElement',\n hookFunction?: UponSanitizeElementHook\n ): UponSanitizeElementHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: 'uponSanitizeAttribute',\n hookFunction?: UponSanitizeAttributeHook\n ): UponSanitizeAttributeHook | undefined;\n\n /**\n * Removes all DOMPurify hooks at a given entryPoint\n *\n * @param entryPoint entry point for the hooks to remove\n */\n removeHooks(entryPoint: HookName): void;\n\n /**\n * Removes all DOMPurify hooks.\n */\n removeAllHooks(): void;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedElement {\n /**\n * The element that was removed.\n */\n element: Node;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedAttribute {\n /**\n * The attribute that was removed.\n */\n attribute: Attr | null;\n\n /**\n * The element that the attribute was removed.\n */\n from: Node;\n}\n\ntype BasicHookName =\n | 'beforeSanitizeElements'\n | 'afterSanitizeElements'\n | 'uponSanitizeShadowNode';\ntype ElementHookName = 'beforeSanitizeAttributes' | 'afterSanitizeAttributes';\ntype DocumentFragmentHookName =\n | 'beforeSanitizeShadowDOM'\n | 'afterSanitizeShadowDOM';\ntype UponSanitizeElementHookName = 'uponSanitizeElement';\ntype UponSanitizeAttributeHookName = 'uponSanitizeAttribute';\n\ninterface HooksMap {\n beforeSanitizeElements: NodeHook[];\n afterSanitizeElements: NodeHook[];\n beforeSanitizeShadowDOM: DocumentFragmentHook[];\n uponSanitizeShadowNode: NodeHook[];\n afterSanitizeShadowDOM: DocumentFragmentHook[];\n beforeSanitizeAttributes: ElementHook[];\n afterSanitizeAttributes: ElementHook[];\n uponSanitizeElement: UponSanitizeElementHook[];\n uponSanitizeAttribute: UponSanitizeAttributeHook[];\n}\n\ntype ArrayElement<T> = T extends Array<infer U> ? U : never;\n\ntype HookFunction = ArrayElement<HooksMap[keyof HooksMap]>;\n\nexport type HookName =\n | BasicHookName\n | ElementHookName\n | DocumentFragmentHookName\n | UponSanitizeElementHookName\n | UponSanitizeAttributeHookName;\n\nexport type NodeHook = (\n this: DOMPurify,\n currentNode: Node,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type ElementHook = (\n this: DOMPurify,\n currentNode: Element,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type DocumentFragmentHook = (\n this: DOMPurify,\n currentNode: DocumentFragment,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type UponSanitizeElementHook = (\n this: DOMPurify,\n currentNode: Node,\n hookEvent: UponSanitizeElementHookEvent,\n config: Config\n) => void;\n\nexport type UponSanitizeAttributeHook = (\n this: DOMPurify,\n currentNode: Element,\n hookEvent: UponSanitizeAttributeHookEvent,\n config: Config\n) => void;\n\nexport interface UponSanitizeElementHookEvent {\n tagName: string;\n allowedTags: Record<string, boolean>;\n}\n\nexport interface UponSanitizeAttributeHookEvent {\n attrName: string;\n attrValue: string;\n keepAttr: boolean;\n allowedAttributes: Record<string, boolean>;\n forceKeepAttr: boolean | undefined;\n}\n\n/**\n * A `Window`-like object containing the properties and types that DOMPurify requires.\n */\nexport type WindowLike = Pick<\n typeof globalThis,\n | 'DocumentFragment'\n | 'HTMLTemplateElement'\n | 'Node'\n | 'Element'\n | 'NodeFilter'\n | 'NamedNodeMap'\n | 'HTMLFormElement'\n | 'DOMParser'\n> & {\n document?: Document;\n MozNamedAttrMap?: typeof window.NamedNodeMap;\n} & Pick<TrustedTypesWindow, 'trustedTypes'>;\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\nconst supportsLookbehind = (() => {\ntry {\n // eslint-disable-next-line prefer-regex-literals\n return !!new RegExp('(?<=1)(?<!1)');\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] +\\S/,\n listReplaceTask: /^\\[[ xX]\\] +/,\n listTaskCheckbox: /\\[[ xX]\\]/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n blockquoteBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}>`),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = / {0,3}(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^(bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// GFM allows * and _ inside strikethrough\nconst _punctuationGfmDel = /(?![*_])[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmDel = /(?![*_])[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmDel = /(?:[^\\s\\p{P}\\p{S}]|[*_])/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde left delimiter for strikethrough (similar to emStrongLDelim for asterisk)\nconst delLDelim = edit(/^~~?(?:((?!~)punct)|[^\\s~])/, 'u')\n .replace(/punct/g, _punctuationGfmDel)\n .getRegex();\n\n// Tilde delimiter patterns for strikethrough (similar to asterisk)\nconst delRDelimCore =\n '^[^~]+(?=[^~])' // Consume to delim\n+ '|(?!~)punct(~~?)(?=[\\\\s]|$)' // (1) #~~ can only be a Right Delimiter\n+ '|notPunctSpace(~~?)(?!~)(?=punctSpace|$)' // (2) a~~#, a~~ can only be a Right Delimiter\n+ '|(?!~)punctSpace(~~?)(?=notPunctSpace)' // (3) #~~a, ~~a can only be Left Delimiter\n+ '|[\\\\s](~~?)(?!~)(?=punct)' // (4) ~~# can only be Left Delimiter\n+ '|(?!~)punct(~~?)(?!~)(?=punct)' // (5) #~~# can be either Left or Right Delimiter\n+ '|notPunctSpace(~~?)(?=notPunctSpace)'; // (6) a~~a can be either Left or Right Delimiter\n\nconst delRDelim = edit(delRDelimCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmDel)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmDel)\n .replace(/punct/g, _punctuationGfmDel)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n delLDelim: noopTest,\n delRDelim: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n delLDelim,\n delRDelim,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escapeHtmlEntities(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n\nexport function expandTabs(line: string, indent = 0) {\n let col = indent;\n let expanded = '';\n for (const char of line) {\n if (char === '\\t') {\n const added = 4 - (col % 4);\n expanded += ' '.repeat(added);\n col += added;\n } else {\n expanded += char;\n col++;\n }\n }\n\n return expanded;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n expandTabs,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = expandTabs(cap[2].split('\\n', 1)[0], cap[1].length);\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = line.search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n const blockquoteBeginRegex = this.rules.other.blockquoteBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of blockquote\n if (blockquoteBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n blankLine = !nextLine.trim();\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (const item of list.items) {\n this.lexer.state.top = false;\n item.tokens = this.lexer.blockTokens(item.text, []);\n if (item.task) {\n // Remove checkbox markdown from item tokens\n item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n if (item.tokens[0]?.type === 'text' || item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].raw = item.tokens[0].raw.replace(this.rules.other.listReplaceTask, '');\n item.tokens[0].text = item.tokens[0].text.replace(this.rules.other.listReplaceTask, '');\n for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n break;\n }\n }\n }\n\n const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n if (taskRaw) {\n const checkboxToken: Tokens.Checkbox = {\n type: 'checkbox',\n raw: taskRaw[0] + ' ',\n checked: taskRaw[0] !== '[ ]',\n };\n item.checked = checkboxToken.checked;\n if (list.loose) {\n if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n item.tokens[0].tokens.unshift(checkboxToken);\n } else {\n item.tokens.unshift({\n type: 'paragraph',\n raw: checkboxToken.raw,\n text: checkboxToken.raw,\n tokens: [checkboxToken],\n });\n }\n } else {\n item.tokens.unshift(checkboxToken);\n }\n }\n }\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = item.tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (const item of list.items) {\n item.loose = true;\n for (const token of item.tokens) {\n if (token.type === 'text') {\n token.type = 'paragraph';\n }\n }\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string, maskedSrc: string, prevChar = ''): Tokens.Del | undefined {\n let match = this.rules.inline.delLDelim.exec(src);\n if (!match) return;\n\n const nextChar = match[1] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength;\n\n const endReg = this.rules.inline.delRDelim;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue;\n\n rLength = [...rDelim].length;\n\n if (rLength !== lLength) continue;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters\n rLength = Math.min(rLength, rLength + delimTotal);\n // char length can be >1 for unicode characters\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create del token - only single ~ or double ~~ supported\n const text = raw.slice(lLength, -lLength);\n return {\n type: 'del',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n public inlineQueue: { src: string, tokens: Token[] }[];\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n while (src) {\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escapeHtmlEntities,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escapeHtmlEntities(langString)\n + '\">'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escapeHtmlEntities(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escapeHtmlEntities(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escapeHtmlEntities(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${escapeHtmlEntities(text)}\"`;\n if (title) {\n out += ` title=\"${escapeHtmlEntities(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escapeHtmlEntities(token.text) as RendererOutput);\n }\n}\n", "import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n\n checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n return raw as RendererOutput;\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[]): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n break;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n break;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n break;\n }\n case 'code': {\n out += this.renderer.code(token);\n break;\n }\n case 'table': {\n out += this.renderer.table(token);\n break;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n break;\n }\n case 'list': {\n out += this.renderer.list(token);\n break;\n }\n case 'checkbox': {\n out += this.renderer.checkbox(token);\n break;\n }\n case 'html': {\n out += this.renderer.html(token);\n break;\n }\n case 'def': {\n out += this.renderer.def(token);\n break;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n break;\n }\n case 'text': {\n out += this.renderer.text(token);\n break;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'checkbox': {\n out += renderer.checkbox(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escapeHtmlEntities } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escapeHtmlEntities(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n", "let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n", "const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n", "import { z } from \"zod\";\n\nexport const FunctionCallSchema = z.object({\n name: z.string(),\n arguments: z.string(),\n});\n\nexport const ToolCallSchema = z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n function: FunctionCallSchema,\n encryptedValue: z.string().optional(),\n});\n\nexport const BaseMessageSchema = z.object({\n id: z.string(),\n role: z.string(),\n content: z.string().optional(),\n name: z.string().optional(),\n encryptedValue: z.string().optional(),\n});\n\nexport const TextInputContentSchema = z.object({\n type: z.literal(\"text\"),\n text: z.string(),\n});\n\nexport const InputContentDataSourceSchema = z.object({\n type: z.literal(\"data\"),\n value: z.string(),\n mimeType: z.string(),\n});\n\nexport const InputContentUrlSourceSchema = z.object({\n type: z.literal(\"url\"),\n value: z.string(),\n mimeType: z.string().optional(),\n});\n\nexport const InputContentSourceSchema = z.discriminatedUnion(\"type\", [\n InputContentDataSourceSchema,\n InputContentUrlSourceSchema,\n]);\n\nexport const ImageInputContentSchema = z.object({\n type: z.literal(\"image\"),\n source: InputContentSourceSchema,\n metadata: z.unknown().optional(),\n});\n\nexport const AudioInputContentSchema = z.object({\n type: z.literal(\"audio\"),\n source: InputContentSourceSchema,\n metadata: z.unknown().optional(),\n});\n\nexport const VideoInputContentSchema = z.object({\n type: z.literal(\"video\"),\n source: InputContentSourceSchema,\n metadata: z.unknown().optional(),\n});\n\nexport const DocumentInputContentSchema = z.object({\n type: z.literal(\"document\"),\n source: InputContentSourceSchema,\n metadata: z.unknown().optional(),\n});\n\nexport const ImageInputPartSchema = ImageInputContentSchema;\nexport const AudioInputPartSchema = AudioInputContentSchema;\nexport const VideoInputPartSchema = VideoInputContentSchema;\nexport const DocumentInputPartSchema = DocumentInputContentSchema;\n\nconst LegacyBinaryInputContentObjectSchema = z.object({\n type: z.literal(\"binary\"),\n mimeType: z.string(),\n id: z.string().optional(),\n url: z.string().optional(),\n data: z.string().optional(),\n filename: z.string().optional(),\n});\n\nconst ensureBinaryPayload = (\n value: { id?: string; url?: string; data?: string },\n ctx: z.RefinementCtx,\n) => {\n if (!value.id && !value.url && !value.data) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"BinaryInputContent requires at least one of id, url, or data.\",\n path: [\"id\"],\n });\n }\n};\n\nexport const BinaryInputContentSchema = LegacyBinaryInputContentObjectSchema.superRefine(\n (value, ctx) => {\n ensureBinaryPayload(value, ctx);\n },\n);\n\nconst InputContentBaseSchema = z.discriminatedUnion(\"type\", [\n TextInputContentSchema,\n ImageInputContentSchema,\n AudioInputContentSchema,\n VideoInputContentSchema,\n DocumentInputContentSchema,\n LegacyBinaryInputContentObjectSchema,\n]);\n\nexport const InputContentSchema = InputContentBaseSchema.superRefine((value, ctx) => {\n if (value.type === \"binary\") {\n ensureBinaryPayload(value, ctx);\n }\n});\n\nexport const DeveloperMessageSchema = BaseMessageSchema.extend({\n role: z.literal(\"developer\"),\n content: z.string(),\n});\n\nexport const SystemMessageSchema = BaseMessageSchema.extend({\n role: z.literal(\"system\"),\n content: z.string(),\n});\n\nexport const AssistantMessageSchema = BaseMessageSchema.extend({\n role: z.literal(\"assistant\"),\n content: z.string().optional(),\n toolCalls: z.array(ToolCallSchema).optional(),\n});\n\nexport const UserMessageSchema = BaseMessageSchema.extend({\n role: z.literal(\"user\"),\n content: z.union([z.string(), z.array(InputContentSchema)]),\n});\n\nexport const ToolMessageSchema = z.object({\n id: z.string(),\n content: z.string(),\n role: z.literal(\"tool\"),\n toolCallId: z.string(),\n error: z.string().optional(),\n encryptedValue: z.string().optional(),\n});\n\nexport const ActivityMessageSchema = z.object({\n id: z.string(),\n role: z.literal(\"activity\"),\n activityType: z.string(),\n content: z.record(z.any()),\n});\n\nexport const ReasoningMessageSchema = z.object({\n id: z.string(),\n role: z.literal(\"reasoning\"),\n content: z.string(),\n encryptedValue: z.string().optional(),\n});\n\nexport const MessageSchema = z.discriminatedUnion(\"role\", [\n DeveloperMessageSchema,\n SystemMessageSchema,\n AssistantMessageSchema,\n UserMessageSchema,\n ToolMessageSchema,\n ActivityMessageSchema,\n ReasoningMessageSchema,\n]);\n\nexport const RoleSchema = z.union([\n z.literal(\"developer\"),\n z.literal(\"system\"),\n z.literal(\"assistant\"),\n z.literal(\"user\"),\n z.literal(\"tool\"),\n z.literal(\"activity\"),\n z.literal(\"reasoning\"),\n]);\n\nexport const ContextSchema = z.object({\n description: z.string(),\n value: z.string(),\n});\n\nexport const ToolSchema = z.object({\n name: z.string(),\n description: z.string(),\n parameters: z.any(), // JSON Schema for the tool parameters\n});\n\nexport const RunAgentInputSchema = z.object({\n threadId: z.string(),\n runId: z.string(),\n parentRunId: z.string().optional(),\n state: z.any(),\n messages: z.array(MessageSchema),\n tools: z.array(ToolSchema),\n context: z.array(ContextSchema),\n forwardedProps: z.any(),\n});\n\nexport const StateSchema = z.any();\n\nexport type ToolCall = z.infer<typeof ToolCallSchema>;\nexport type FunctionCall = z.infer<typeof FunctionCallSchema>;\nexport type TextInputContent = z.infer<typeof TextInputContentSchema>;\nexport type InputContentDataSource = z.infer<typeof InputContentDataSourceSchema>;\nexport type InputContentUrlSource = z.infer<typeof InputContentUrlSourceSchema>;\nexport type InputContentSource = z.infer<typeof InputContentSourceSchema>;\nexport type ImageInputContent = z.infer<typeof ImageInputContentSchema>;\nexport type AudioInputContent = z.infer<typeof AudioInputContentSchema>;\nexport type VideoInputContent = z.infer<typeof VideoInputContentSchema>;\nexport type DocumentInputContent = z.infer<typeof DocumentInputContentSchema>;\nexport type ImageInputPart = ImageInputContent;\nexport type AudioInputPart = AudioInputContent;\nexport type VideoInputPart = VideoInputContent;\nexport type DocumentInputPart = DocumentInputContent;\nexport type BinaryInputContent = z.infer<typeof BinaryInputContentSchema>;\nexport type InputContent = z.infer<typeof InputContentSchema>;\nexport type InputContentPart = z.infer<typeof InputContentSchema>;\nexport type DeveloperMessage = z.infer<typeof DeveloperMessageSchema>;\nexport type SystemMessage = z.infer<typeof SystemMessageSchema>;\nexport type AssistantMessage = z.infer<typeof AssistantMessageSchema>;\nexport type UserMessage = z.infer<typeof UserMessageSchema>;\nexport type ToolMessage = z.infer<typeof ToolMessageSchema>;\nexport type ActivityMessage = z.infer<typeof ActivityMessageSchema>;\nexport type ReasoningMessage = z.infer<typeof ReasoningMessageSchema>;\nexport type Message = z.infer<typeof MessageSchema>;\nexport type Context = z.infer<typeof ContextSchema>;\nexport type Tool = z.infer<typeof ToolSchema>;\nexport type RunAgentInput = z.infer<typeof RunAgentInputSchema>;\nexport type State = z.infer<typeof StateSchema>;\nexport type Role = z.infer<typeof RoleSchema>;\n\nexport class AGUIError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport class AGUIConnectNotImplementedError extends AGUIError {\n constructor() {\n super(\"Connect not implemented. This method is not supported by the current agent.\");\n }\n}\n", "import { z } from \"zod\";\nimport { ToolSchema } from \"./types\";\n\n/** Describes a sub-agent that can be invoked by a parent agent. */\nexport const SubAgentInfoSchema = z.object({\n /** Unique name or identifier of the sub-agent. */\n name: z.string(),\n /** What this sub-agent specializes in. Helps clients build agent selection UIs. */\n description: z.string().optional(),\n});\n\n/**\n * Basic metadata about the agent. Useful for discovery UIs, agent marketplaces,\n * and debugging. Set these when you want clients to display agent information\n * or when multiple agents are available and users need to pick one.\n */\nexport const IdentityCapabilitiesSchema = z.object({\n /** Human-readable name shown in UIs and agent selectors. */\n name: z.string().optional(),\n /** The framework or platform powering this agent (e.g., \"langgraph\", \"mastra\", \"crewai\"). */\n type: z.string().optional(),\n /** What this agent does — helps users and routing logic decide when to use it. */\n description: z.string().optional(),\n /** Semantic version of the agent (e.g., \"1.2.0\"). Useful for compatibility checks. */\n version: z.string().optional(),\n /** Organization or team that maintains this agent. */\n provider: z.string().optional(),\n /** URL to the agent's documentation or homepage. */\n documentationUrl: z.string().optional(),\n /** Arbitrary key-value pairs for integration-specific identity info. */\n metadata: z.record(z.unknown()).optional(),\n});\n\n/**\n * Declares which transport mechanisms the agent supports. Clients use this\n * to pick the best connection strategy. Only set flags to `true` for transports\n * your agent actually handles — omit or set `false` for unsupported ones.\n */\nexport const TransportCapabilitiesSchema = z.object({\n /** Set `true` if the agent streams responses via SSE. Most agents enable this. */\n streaming: z.boolean().optional(),\n /** Set `true` if the agent accepts persistent WebSocket connections. */\n websocket: z.boolean().optional(),\n /** Set `true` if the agent supports the AG-UI binary protocol (protobuf over HTTP). */\n httpBinary: z.boolean().optional(),\n /** Set `true` if the agent can send async updates via webhooks after a run finishes. */\n pushNotifications: z.boolean().optional(),\n /** Set `true` if the agent supports resuming interrupted streams via sequence numbers. */\n resumable: z.boolean().optional(),\n});\n\n/**\n * Tool calling capabilities. Distinguishes between tools the agent itself provides\n * (listed in `items`) and tools the client passes at runtime via `RunAgentInput.tools`.\n * Enable this when your agent can call functions, search the web, execute code, etc.\n */\nexport const ToolsCapabilitiesSchema = z.object({\n /** Set `true` if the agent can make tool calls at all. Set `false` to explicitly\n * signal tool calling is disabled even if items are present. */\n supported: z.boolean().optional(),\n /** The tools this agent provides on its own (full JSON Schema definitions).\n * These are distinct from client-provided tools passed in `RunAgentInput.tools`. */\n items: z.array(ToolSchema).optional(),\n /** Set `true` if the agent can invoke multiple tools concurrently within a single step. */\n parallelCalls: z.boolean().optional(),\n /** Set `true` if the agent accepts and uses tools provided by the client at runtime. */\n clientProvided: z.boolean().optional(),\n});\n\n/**\n * Output format support. Enable `structuredOutput` when your agent can return\n * responses conforming to a JSON schema, which is useful for programmatic consumption.\n */\nexport const OutputCapabilitiesSchema = z.object({\n /** Set `true` if the agent can produce structured JSON output matching a provided schema. */\n structuredOutput: z.boolean().optional(),\n /** MIME types the agent can produce (e.g., `[\"text/plain\", \"application/json\"]`).\n * Omit if the agent only produces plain text. */\n supportedMimeTypes: z.array(z.string()).optional(),\n});\n\n/**\n * State and memory management capabilities. These tell the client how the agent\n * handles shared state and whether conversation context persists across runs.\n */\nexport const StateCapabilitiesSchema = z.object({\n /** Set `true` if the agent emits `STATE_SNAPSHOT` events (full state replacement). */\n snapshots: z.boolean().optional(),\n /** Set `true` if the agent emits `STATE_DELTA` events (JSON Patch incremental updates). */\n deltas: z.boolean().optional(),\n /** Set `true` if the agent has long-term memory beyond the current thread\n * (e.g., vector store, knowledge base, or cross-session recall). */\n memory: z.boolean().optional(),\n /** Set `true` if state is preserved across multiple runs within the same thread.\n * When `false`, state resets on each run. */\n persistentState: z.boolean().optional(),\n});\n\n/**\n * Multi-agent coordination capabilities. Enable these when your agent can\n * orchestrate or hand off work to other agents.\n */\nexport const MultiAgentCapabilitiesSchema = z.object({\n /** Set `true` if the agent participates in any form of multi-agent coordination. */\n supported: z.boolean().optional(),\n /** Set `true` if the agent can delegate subtasks to other agents while retaining control. */\n delegation: z.boolean().optional(),\n /** Set `true` if the agent can transfer the conversation entirely to another agent. */\n handoffs: z.boolean().optional(),\n /** List of sub-agents this agent can invoke. Helps clients build agent selection UIs. */\n subAgents: z.array(SubAgentInfoSchema).optional(),\n});\n\n/**\n * Reasoning and thinking capabilities. Enable these when your agent exposes its\n * internal thought process (e.g., chain-of-thought, extended thinking).\n */\nexport const ReasoningCapabilitiesSchema = z.object({\n /** Set `true` if the agent produces reasoning/thinking tokens visible to the client. */\n supported: z.boolean().optional(),\n /** Set `true` if reasoning tokens are streamed incrementally (vs. returned all at once). */\n streaming: z.boolean().optional(),\n /** Set `true` if reasoning content is encrypted (zero-data-retention mode).\n * Clients should expect opaque `encryptedValue` fields instead of readable content. */\n encrypted: z.boolean().optional(),\n});\n\n/**\n * Modalities the agent can accept as input. Clients use this to show/hide\n * file upload buttons, audio recorders, image pickers, etc.\n */\nexport const MultimodalInputCapabilitiesSchema = z.object({\n /** Set `true` if the agent can process image inputs (e.g., screenshots, photos). */\n image: z.boolean().optional(),\n /** Set `true` if the agent can process audio inputs (speech, recordings). */\n audio: z.boolean().optional(),\n /** Set `true` if the agent can process video inputs. */\n video: z.boolean().optional(),\n /** Set `true` if the agent can process PDF documents. */\n pdf: z.boolean().optional(),\n /** Set `true` if the agent can process arbitrary file uploads. */\n file: z.boolean().optional(),\n});\n\n/**\n * Modalities the agent can produce as output. Clients use this to anticipate\n * rich content in the agent's response.\n */\nexport const MultimodalOutputCapabilitiesSchema = z.object({\n /** Set `true` if the agent can generate images as part of its response. */\n image: z.boolean().optional(),\n /** Set `true` if the agent can produce audio output (text-to-speech, audio files). */\n audio: z.boolean().optional(),\n});\n\n/**\n * Multimodal input and output support. Organized into `input` and `output`\n * sub-objects so clients can independently query what the agent accepts\n * versus what it produces.\n */\nexport const MultimodalCapabilitiesSchema = z.object({\n /** Modalities the agent can accept as input (images, audio, video, PDFs, files). */\n input: MultimodalInputCapabilitiesSchema.optional(),\n /** Modalities the agent can produce as output (images, audio). */\n output: MultimodalOutputCapabilitiesSchema.optional(),\n});\n\n/**\n * Execution control and limits. Declare these so clients can set expectations\n * about how long or how many steps an agent run might take.\n */\nexport const ExecutionCapabilitiesSchema = z.object({\n /** Set `true` if the agent can execute code (e.g., Python, JavaScript) during a run. */\n codeExecution: z.boolean().optional(),\n /** Set `true` if code execution happens in a sandboxed/isolated environment.\n * Only meaningful when `codeExecution` is `true`. */\n sandboxed: z.boolean().optional(),\n /** Maximum number of tool-call/reasoning iterations the agent will perform per run.\n * Helps clients display progress or set timeout expectations. */\n maxIterations: z.number().optional(),\n /** Maximum wall-clock time (in milliseconds) the agent will run before timing out. */\n maxExecutionTime: z.number().optional(),\n});\n\n/**\n * Human-in-the-loop interaction support. Enable these when your agent can pause\n * execution to request human input, approval, or feedback before continuing.\n */\nexport const HumanInTheLoopCapabilitiesSchema = z.object({\n /** Set `true` if the agent supports any form of human-in-the-loop interaction. */\n supported: z.boolean().optional(),\n /** Set `true` if the agent can pause and request explicit approval before\n * performing sensitive actions (e.g., sending emails, deleting data). */\n approvals: z.boolean().optional(),\n /** Set `true` if the agent allows humans to intervene and modify its plan mid-execution. */\n interventions: z.boolean().optional(),\n /** Set `true` if the agent can incorporate user feedback (thumbs up/down, corrections)\n * to improve its behavior within the current session. */\n feedback: z.boolean().optional(),\n});\n\n/**\n * A typed, categorized snapshot of an agent's current capabilities.\n * Returned by `getCapabilities()` on `AbstractAgent`.\n *\n * All fields are optional — agents only declare what they support.\n * Omitted fields mean the capability is not declared (unknown), not that\n * it's unsupported.\n *\n * The `custom` field is an escape hatch for integration-specific capabilities\n * that don't fit into the standard categories.\n */\nexport const AgentCapabilitiesSchema = z.object({\n /** Agent identity and metadata. */\n identity: IdentityCapabilitiesSchema.optional(),\n /** Supported transport mechanisms (SSE, WebSocket, binary, etc.). */\n transport: TransportCapabilitiesSchema.optional(),\n /** Tools the agent provides and tool calling configuration. */\n tools: ToolsCapabilitiesSchema.optional(),\n /** Output format support (structured output, MIME types). */\n output: OutputCapabilitiesSchema.optional(),\n /** State and memory management (snapshots, deltas, persistence). */\n state: StateCapabilitiesSchema.optional(),\n /** Multi-agent coordination (delegation, handoffs, sub-agents). */\n multiAgent: MultiAgentCapabilitiesSchema.optional(),\n /** Reasoning and thinking support (chain-of-thought, encrypted thinking). */\n reasoning: ReasoningCapabilitiesSchema.optional(),\n /** Multimodal input/output support (images, audio, video, files). */\n multimodal: MultimodalCapabilitiesSchema.optional(),\n /** Execution control and limits (code execution, timeouts, iteration caps). */\n execution: ExecutionCapabilitiesSchema.optional(),\n /** Human-in-the-loop support (approvals, interventions, feedback). */\n humanInTheLoop: HumanInTheLoopCapabilitiesSchema.optional(),\n /** Integration-specific capabilities not covered by the standard categories. */\n custom: z.record(z.unknown()).optional(),\n});\n\n/** Describes a sub-agent that can be invoked by a parent agent. */\nexport type SubAgentInfo = z.infer<typeof SubAgentInfoSchema>;\n/** Agent identity and metadata for discovery UIs, marketplaces, and debugging. */\nexport type IdentityCapabilities = z.infer<typeof IdentityCapabilitiesSchema>;\n/** Supported transport mechanisms (SSE, WebSocket, binary protocol, push notifications). */\nexport type TransportCapabilities = z.infer<typeof TransportCapabilitiesSchema>;\n/** Tool calling support and agent-provided tool definitions. */\nexport type ToolsCapabilities = z.infer<typeof ToolsCapabilitiesSchema>;\n/** Output format support (structured output, MIME types). */\nexport type OutputCapabilities = z.infer<typeof OutputCapabilitiesSchema>;\n/** State and memory management (snapshots, deltas, persistence, long-term memory). */\nexport type StateCapabilities = z.infer<typeof StateCapabilitiesSchema>;\n/** Multi-agent coordination (delegation, handoffs, sub-agent orchestration). */\nexport type MultiAgentCapabilities = z.infer<typeof MultiAgentCapabilitiesSchema>;\n/** Reasoning and thinking visibility (streaming, encrypted chain-of-thought). */\nexport type ReasoningCapabilities = z.infer<typeof ReasoningCapabilitiesSchema>;\n/** Modalities the agent can accept as input (images, audio, video, PDFs, files). */\nexport type MultimodalInputCapabilities = z.infer<typeof MultimodalInputCapabilitiesSchema>;\n/** Modalities the agent can produce as output (images, audio). */\nexport type MultimodalOutputCapabilities = z.infer<typeof MultimodalOutputCapabilitiesSchema>;\n/** Multimodal input/output support (images, audio, video, PDFs, file uploads). */\nexport type MultimodalCapabilities = z.infer<typeof MultimodalCapabilitiesSchema>;\n/** Execution control and limits (code execution, sandboxing, iteration caps, timeouts). */\nexport type ExecutionCapabilities = z.infer<typeof ExecutionCapabilitiesSchema>;\n/** Human-in-the-loop interaction support (approvals, interventions, feedback). */\nexport type HumanInTheLoopCapabilities = z.infer<typeof HumanInTheLoopCapabilitiesSchema>;\n/** A typed, categorized snapshot of an agent's current capabilities. Returned by `getCapabilities()`. */\nexport type AgentCapabilities = z.infer<typeof AgentCapabilitiesSchema>;\n", "import { z } from \"zod\";\nimport { MessageSchema, StateSchema, RunAgentInputSchema } from \"./types\";\n\n// Text messages can have any role except \"tool\"\nconst TextMessageRoleSchema = z.union([\n z.literal(\"developer\"),\n z.literal(\"system\"),\n z.literal(\"assistant\"),\n z.literal(\"user\"),\n]);\n\nexport enum EventType {\n TEXT_MESSAGE_START = \"TEXT_MESSAGE_START\",\n TEXT_MESSAGE_CONTENT = \"TEXT_MESSAGE_CONTENT\",\n TEXT_MESSAGE_END = \"TEXT_MESSAGE_END\",\n TEXT_MESSAGE_CHUNK = \"TEXT_MESSAGE_CHUNK\",\n TOOL_CALL_START = \"TOOL_CALL_START\",\n TOOL_CALL_ARGS = \"TOOL_CALL_ARGS\",\n TOOL_CALL_END = \"TOOL_CALL_END\",\n TOOL_CALL_CHUNK = \"TOOL_CALL_CHUNK\",\n TOOL_CALL_RESULT = \"TOOL_CALL_RESULT\",\n /**\n * @deprecated Use REASONING_START instead. Will be removed in 1.0.0.\n */\n THINKING_START = \"THINKING_START\",\n /**\n * @deprecated Use REASONING_END instead. Will be removed in 1.0.0.\n */\n THINKING_END = \"THINKING_END\",\n /**\n * @deprecated Use REASONING_MESSAGE_START instead. Will be removed in 1.0.0.\n */\n THINKING_TEXT_MESSAGE_START = \"THINKING_TEXT_MESSAGE_START\",\n /**\n * @deprecated Use REASONING_MESSAGE_CONTENT instead. Will be removed in 1.0.0.\n */\n THINKING_TEXT_MESSAGE_CONTENT = \"THINKING_TEXT_MESSAGE_CONTENT\",\n /**\n * @deprecated Use REASONING_MESSAGE_END instead. Will be removed in 1.0.0.\n */\n THINKING_TEXT_MESSAGE_END = \"THINKING_TEXT_MESSAGE_END\",\n STATE_SNAPSHOT = \"STATE_SNAPSHOT\",\n STATE_DELTA = \"STATE_DELTA\",\n MESSAGES_SNAPSHOT = \"MESSAGES_SNAPSHOT\",\n ACTIVITY_SNAPSHOT = \"ACTIVITY_SNAPSHOT\",\n ACTIVITY_DELTA = \"ACTIVITY_DELTA\",\n RAW = \"RAW\",\n CUSTOM = \"CUSTOM\",\n RUN_STARTED = \"RUN_STARTED\",\n RUN_FINISHED = \"RUN_FINISHED\",\n RUN_ERROR = \"RUN_ERROR\",\n STEP_STARTED = \"STEP_STARTED\",\n STEP_FINISHED = \"STEP_FINISHED\",\n REASONING_START = \"REASONING_START\",\n REASONING_MESSAGE_START = \"REASONING_MESSAGE_START\",\n REASONING_MESSAGE_CONTENT = \"REASONING_MESSAGE_CONTENT\",\n REASONING_MESSAGE_END = \"REASONING_MESSAGE_END\",\n REASONING_MESSAGE_CHUNK = \"REASONING_MESSAGE_CHUNK\",\n REASONING_END = \"REASONING_END\",\n REASONING_ENCRYPTED_VALUE = \"REASONING_ENCRYPTED_VALUE\",\n}\n\nexport const BaseEventSchema = z\n .object({\n type: z.nativeEnum(EventType),\n timestamp: z.number().optional(),\n rawEvent: z.any().optional(),\n })\n .passthrough();\n\nexport const TextMessageStartEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.TEXT_MESSAGE_START),\n messageId: z.string(),\n role: TextMessageRoleSchema.default(\"assistant\"),\n name: z.string().optional(),\n});\n\nexport const TextMessageContentEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.TEXT_MESSAGE_CONTENT),\n messageId: z.string(),\n delta: z.string(),\n});\n\nexport const TextMessageEndEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.TEXT_MESSAGE_END),\n messageId: z.string(),\n});\n\nexport const TextMessageChunkEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.TEXT_MESSAGE_CHUNK),\n messageId: z.string().optional(),\n role: TextMessageRoleSchema.optional(),\n delta: z.string().optional(),\n name: z.string().optional(),\n});\n\n/**\n * @deprecated Use ReasoningMessageStartEventSchema instead. Will be removed in 1.0.0.\n */\nexport const ThinkingTextMessageStartEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.THINKING_TEXT_MESSAGE_START),\n});\n\n/**\n * @deprecated Use ReasoningMessageContentEventSchema instead. Will be removed in 1.0.0.\n */\nexport const ThinkingTextMessageContentEventSchema = TextMessageContentEventSchema.omit({\n messageId: true,\n type: true,\n}).extend({\n type: z.literal(EventType.THINKING_TEXT_MESSAGE_CONTENT),\n});\n\n/**\n * @deprecated Use ReasoningMessageEndEventSchema instead. Will be removed in 1.0.0.\n */\nexport const ThinkingTextMessageEndEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.THINKING_TEXT_MESSAGE_END),\n});\n\nexport const ToolCallStartEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.TOOL_CALL_START),\n toolCallId: z.string(),\n toolCallName: z.string(),\n parentMessageId: z.string().optional(),\n});\n\nexport const ToolCallArgsEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.TOOL_CALL_ARGS),\n toolCallId: z.string(),\n delta: z.string(),\n});\n\nexport const ToolCallEndEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.TOOL_CALL_END),\n toolCallId: z.string(),\n});\n\nexport const ToolCallResultEventSchema = BaseEventSchema.extend({\n messageId: z.string(),\n type: z.literal(EventType.TOOL_CALL_RESULT),\n toolCallId: z.string(),\n content: z.string(),\n role: z.literal(\"tool\").optional(),\n});\n\nexport const ToolCallChunkEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.TOOL_CALL_CHUNK),\n toolCallId: z.string().optional(),\n toolCallName: z.string().optional(),\n parentMessageId: z.string().optional(),\n delta: z.string().optional(),\n});\n\n/**\n * @deprecated Use ReasoningStartEventSchema instead. Will be removed in 1.0.0.\n */\nexport const ThinkingStartEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.THINKING_START),\n title: z.string().optional(),\n});\n\n/**\n * @deprecated Use ReasoningEndEventSchema instead. Will be removed in 1.0.0.\n */\nexport const ThinkingEndEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.THINKING_END),\n});\n\nexport const StateSnapshotEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.STATE_SNAPSHOT),\n snapshot: StateSchema,\n});\n\nexport const StateDeltaEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.STATE_DELTA),\n delta: z.array(z.any()), // JSON Patch (RFC 6902)\n});\n\nexport const MessagesSnapshotEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.MESSAGES_SNAPSHOT),\n messages: z.array(MessageSchema),\n});\n\nexport const ActivitySnapshotEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.ACTIVITY_SNAPSHOT),\n messageId: z.string(),\n activityType: z.string(),\n content: z.record(z.any()),\n replace: z.boolean().optional().default(true),\n});\n\nexport const ActivityDeltaEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.ACTIVITY_DELTA),\n messageId: z.string(),\n activityType: z.string(),\n patch: z.array(z.any()),\n});\n\nexport const RawEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.RAW),\n event: z.any(),\n source: z.string().optional(),\n});\n\nexport const CustomEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.CUSTOM),\n name: z.string(),\n value: z.any(),\n});\n\nexport const RunStartedEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.RUN_STARTED),\n threadId: z.string(),\n runId: z.string(),\n parentRunId: z.string().optional(),\n input: RunAgentInputSchema.optional(),\n});\n\nexport const RunFinishedEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.RUN_FINISHED),\n threadId: z.string(),\n runId: z.string(),\n result: z.any().optional(),\n});\n\nexport const RunErrorEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.RUN_ERROR),\n message: z.string(),\n code: z.string().optional(),\n});\n\nexport const StepStartedEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.STEP_STARTED),\n stepName: z.string(),\n});\n\nexport const StepFinishedEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.STEP_FINISHED),\n stepName: z.string(),\n});\n\n// Schema for the encrypted signature subtype\nexport const ReasoningEncryptedValueSubtypeSchema = z.union([\n z.literal(\"tool-call\"),\n z.literal(\"message\"),\n]);\n\nexport const ReasoningStartEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.REASONING_START),\n messageId: z.string(),\n});\n\nexport const ReasoningMessageStartEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.REASONING_MESSAGE_START),\n messageId: z.string(),\n role: z.literal(\"reasoning\"),\n});\n\nexport const ReasoningMessageContentEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.REASONING_MESSAGE_CONTENT),\n messageId: z.string(),\n delta: z.string(),\n});\n\nexport const ReasoningMessageEndEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.REASONING_MESSAGE_END),\n messageId: z.string(),\n});\n\nexport const ReasoningMessageChunkEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.REASONING_MESSAGE_CHUNK),\n messageId: z.string().optional(),\n delta: z.string().optional(),\n});\n\nexport const ReasoningEndEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.REASONING_END),\n messageId: z.string(),\n});\n\nexport const ReasoningEncryptedValueEventSchema = BaseEventSchema.extend({\n type: z.literal(EventType.REASONING_ENCRYPTED_VALUE),\n subtype: ReasoningEncryptedValueSubtypeSchema,\n entityId: z.string(),\n encryptedValue: z.string(),\n});\n\nexport const EventSchemas = z.discriminatedUnion(\"type\", [\n TextMessageStartEventSchema,\n TextMessageContentEventSchema,\n TextMessageEndEventSchema,\n TextMessageChunkEventSchema,\n ThinkingStartEventSchema,\n ThinkingEndEventSchema,\n ThinkingTextMessageStartEventSchema,\n ThinkingTextMessageContentEventSchema,\n ThinkingTextMessageEndEventSchema,\n ToolCallStartEventSchema,\n ToolCallArgsEventSchema,\n ToolCallEndEventSchema,\n ToolCallChunkEventSchema,\n ToolCallResultEventSchema,\n StateSnapshotEventSchema,\n StateDeltaEventSchema,\n MessagesSnapshotEventSchema,\n ActivitySnapshotEventSchema,\n ActivityDeltaEventSchema,\n RawEventSchema,\n CustomEventSchema,\n RunStartedEventSchema,\n RunFinishedEventSchema,\n RunErrorEventSchema,\n StepStartedEventSchema,\n StepFinishedEventSchema,\n ReasoningStartEventSchema,\n ReasoningMessageStartEventSchema,\n ReasoningMessageContentEventSchema,\n ReasoningMessageEndEventSchema,\n ReasoningMessageChunkEventSchema,\n ReasoningEndEventSchema,\n ReasoningEncryptedValueEventSchema,\n]);\n\nexport type BaseEvent = z.infer<typeof BaseEventSchema>;\nexport type AGUIEvent = z.infer<typeof EventSchemas>;\nexport type BaseEventFields = z.infer<typeof BaseEventSchema>;\nexport type AGUIEventByType = {\n [EventType.TEXT_MESSAGE_START]: TextMessageStartEvent;\n [EventType.TEXT_MESSAGE_CONTENT]: TextMessageContentEvent;\n [EventType.TEXT_MESSAGE_END]: TextMessageEndEvent;\n [EventType.TEXT_MESSAGE_CHUNK]: TextMessageChunkEvent;\n [EventType.THINKING_TEXT_MESSAGE_START]: ThinkingTextMessageStartEvent;\n [EventType.THINKING_TEXT_MESSAGE_CONTENT]: ThinkingTextMessageContentEvent;\n [EventType.THINKING_TEXT_MESSAGE_END]: ThinkingTextMessageEndEvent;\n [EventType.TOOL_CALL_START]: ToolCallStartEvent;\n [EventType.TOOL_CALL_ARGS]: ToolCallArgsEvent;\n [EventType.TOOL_CALL_END]: ToolCallEndEvent;\n [EventType.TOOL_CALL_CHUNK]: ToolCallChunkEvent;\n [EventType.TOOL_CALL_RESULT]: ToolCallResultEvent;\n [EventType.THINKING_START]: ThinkingStartEvent;\n [EventType.THINKING_END]: ThinkingEndEvent;\n [EventType.STATE_SNAPSHOT]: StateSnapshotEvent;\n [EventType.STATE_DELTA]: StateDeltaEvent;\n [EventType.MESSAGES_SNAPSHOT]: MessagesSnapshotEvent;\n [EventType.ACTIVITY_SNAPSHOT]: ActivitySnapshotEvent;\n [EventType.ACTIVITY_DELTA]: ActivityDeltaEvent;\n [EventType.RAW]: RawEvent;\n [EventType.CUSTOM]: CustomEvent;\n [EventType.RUN_STARTED]: RunStartedEvent;\n [EventType.RUN_FINISHED]: RunFinishedEvent;\n [EventType.RUN_ERROR]: RunErrorEvent;\n [EventType.STEP_STARTED]: StepStartedEvent;\n [EventType.STEP_FINISHED]: StepFinishedEvent;\n [EventType.REASONING_START]: ReasoningStartEvent;\n [EventType.REASONING_MESSAGE_START]: ReasoningMessageStartEvent;\n [EventType.REASONING_MESSAGE_CONTENT]: ReasoningMessageContentEvent;\n [EventType.REASONING_MESSAGE_END]: ReasoningMessageEndEvent;\n [EventType.REASONING_MESSAGE_CHUNK]: ReasoningMessageChunkEvent;\n [EventType.REASONING_END]: ReasoningEndEvent;\n [EventType.REASONING_ENCRYPTED_VALUE]: ReasoningEncryptedValueEvent;\n};\nexport type AGUIEventOf<T extends EventType> = AGUIEventByType[T];\nexport type EventPayloadOf<T extends EventType> = Omit<AGUIEventOf<T>, keyof BaseEventFields>;\n\ntype EventProps<Schema extends z.ZodTypeAny> = Omit<z.input<Schema>, \"type\">;\n\nexport type BaseEventProps = EventProps<typeof BaseEventSchema>;\n\nexport type TextMessageStartEventProps = EventProps<typeof TextMessageStartEventSchema>;\nexport type TextMessageContentEventProps = EventProps<typeof TextMessageContentEventSchema>;\nexport type TextMessageEndEventProps = EventProps<typeof TextMessageEndEventSchema>;\nexport type TextMessageChunkEventProps = EventProps<typeof TextMessageChunkEventSchema>;\nexport type ThinkingTextMessageStartEventProps = EventProps<\n typeof ThinkingTextMessageStartEventSchema\n>;\nexport type ThinkingTextMessageContentEventProps = EventProps<\n typeof ThinkingTextMessageContentEventSchema\n>;\nexport type ThinkingTextMessageEndEventProps = EventProps<typeof ThinkingTextMessageEndEventSchema>;\nexport type ToolCallStartEventProps = EventProps<typeof ToolCallStartEventSchema>;\nexport type ToolCallArgsEventProps = EventProps<typeof ToolCallArgsEventSchema>;\nexport type ToolCallEndEventProps = EventProps<typeof ToolCallEndEventSchema>;\nexport type ToolCallChunkEventProps = EventProps<typeof ToolCallChunkEventSchema>;\nexport type ToolCallResultEventProps = EventProps<typeof ToolCallResultEventSchema>;\nexport type ThinkingStartEventProps = EventProps<typeof ThinkingStartEventSchema>;\nexport type ThinkingEndEventProps = EventProps<typeof ThinkingEndEventSchema>;\nexport type StateSnapshotEventProps = EventProps<typeof StateSnapshotEventSchema>;\nexport type StateDeltaEventProps = EventProps<typeof StateDeltaEventSchema>;\nexport type MessagesSnapshotEventProps = EventProps<typeof MessagesSnapshotEventSchema>;\nexport type ActivitySnapshotEventProps = EventProps<typeof ActivitySnapshotEventSchema>;\nexport type ActivityDeltaEventProps = EventProps<typeof ActivityDeltaEventSchema>;\nexport type RawEventProps = EventProps<typeof RawEventSchema>;\nexport type CustomEventProps = EventProps<typeof CustomEventSchema>;\nexport type RunStartedEventProps = EventProps<typeof RunStartedEventSchema>;\nexport type RunFinishedEventProps = EventProps<typeof RunFinishedEventSchema>;\nexport type RunErrorEventProps = EventProps<typeof RunErrorEventSchema>;\nexport type StepStartedEventProps = EventProps<typeof StepStartedEventSchema>;\nexport type StepFinishedEventProps = EventProps<typeof StepFinishedEventSchema>;\nexport type ReasoningStartEventProps = EventProps<typeof ReasoningStartEventSchema>;\nexport type ReasoningMessageStartEventProps = EventProps<typeof ReasoningMessageStartEventSchema>;\nexport type ReasoningMessageContentEventProps = EventProps<\n typeof ReasoningMessageContentEventSchema\n>;\nexport type ReasoningMessageEndEventProps = EventProps<typeof ReasoningMessageEndEventSchema>;\nexport type ReasoningMessageChunkEventProps = EventProps<typeof ReasoningMessageChunkEventSchema>;\nexport type ReasoningEndEventProps = EventProps<typeof ReasoningEndEventSchema>;\nexport type ReasoningEncryptedValueEventProps = EventProps<\n typeof ReasoningEncryptedValueEventSchema\n>;\n\nexport type TextMessageStartEvent = z.infer<typeof TextMessageStartEventSchema>;\nexport type TextMessageContentEvent = z.infer<typeof TextMessageContentEventSchema>;\nexport type TextMessageEndEvent = z.infer<typeof TextMessageEndEventSchema>;\nexport type TextMessageChunkEvent = z.infer<typeof TextMessageChunkEventSchema>;\nexport type ThinkingTextMessageStartEvent = z.infer<typeof ThinkingTextMessageStartEventSchema>;\nexport type ThinkingTextMessageContentEvent = z.infer<typeof ThinkingTextMessageContentEventSchema>;\nexport type ThinkingTextMessageEndEvent = z.infer<typeof ThinkingTextMessageEndEventSchema>;\nexport type ToolCallStartEvent = z.infer<typeof ToolCallStartEventSchema>;\nexport type ToolCallArgsEvent = z.infer<typeof ToolCallArgsEventSchema>;\nexport type ToolCallEndEvent = z.infer<typeof ToolCallEndEventSchema>;\nexport type ToolCallChunkEvent = z.infer<typeof ToolCallChunkEventSchema>;\nexport type ToolCallResultEvent = z.infer<typeof ToolCallResultEventSchema>;\nexport type ThinkingStartEvent = z.infer<typeof ThinkingStartEventSchema>;\nexport type ThinkingEndEvent = z.infer<typeof ThinkingEndEventSchema>;\nexport type StateSnapshotEvent = z.infer<typeof StateSnapshotEventSchema>;\nexport type StateDeltaEvent = z.infer<typeof StateDeltaEventSchema>;\nexport type MessagesSnapshotEvent = z.infer<typeof MessagesSnapshotEventSchema>;\nexport type ActivitySnapshotEvent = z.infer<typeof ActivitySnapshotEventSchema>;\nexport type ActivityDeltaEvent = z.infer<typeof ActivityDeltaEventSchema>;\nexport type RawEvent = z.infer<typeof RawEventSchema>;\nexport type CustomEvent = z.infer<typeof CustomEventSchema>;\nexport type RunStartedEvent = z.infer<typeof RunStartedEventSchema>;\nexport type RunFinishedEvent = z.infer<typeof RunFinishedEventSchema>;\nexport type RunErrorEvent = z.infer<typeof RunErrorEventSchema>;\nexport type StepStartedEvent = z.infer<typeof StepStartedEventSchema>;\nexport type StepFinishedEvent = z.infer<typeof StepFinishedEventSchema>;\nexport type ReasoningStartEvent = z.infer<typeof ReasoningStartEventSchema>;\nexport type ReasoningMessageStartEvent = z.infer<typeof ReasoningMessageStartEventSchema>;\nexport type ReasoningMessageContentEvent = z.infer<typeof ReasoningMessageContentEventSchema>;\nexport type ReasoningMessageEndEvent = z.infer<typeof ReasoningMessageEndEventSchema>;\nexport type ReasoningMessageChunkEvent = z.infer<typeof ReasoningMessageChunkEventSchema>;\nexport type ReasoningEndEvent = z.infer<typeof ReasoningEndEventSchema>;\nexport type ReasoningEncryptedValueEvent = z.infer<typeof ReasoningEncryptedValueEventSchema>;\nexport type ReasoningEncryptedValueSubtype = z.infer<typeof ReasoningEncryptedValueSubtypeSchema>;\n", "import { PatchError, _deepClone, isInteger, unescapePathComponent, hasUndefined } from './helpers.mjs';\nexport var JsonPatchError = PatchError;\nexport var deepClone = _deepClone;\n/* We use a Javascript hash to store each\n function. Each hash entry (property) uses\n the operation identifiers specified in rfc6902.\n In this way, we can map each patch operation\n to its dedicated function in efficient way.\n */\n/* The operations applicable to an object */\nvar objOps = {\n add: function (obj, key, document) {\n obj[key] = this.value;\n return { newDocument: document };\n },\n remove: function (obj, key, document) {\n var removed = obj[key];\n delete obj[key];\n return { newDocument: document, removed: removed };\n },\n replace: function (obj, key, document) {\n var removed = obj[key];\n obj[key] = this.value;\n return { newDocument: document, removed: removed };\n },\n move: function (obj, key, document) {\n /* in case move target overwrites an existing value,\n return the removed value, this can be taxing performance-wise,\n and is potentially unneeded */\n var removed = getValueByPointer(document, this.path);\n if (removed) {\n removed = _deepClone(removed);\n }\n var originalValue = applyOperation(document, { op: \"remove\", path: this.from }).removed;\n applyOperation(document, { op: \"add\", path: this.path, value: originalValue });\n return { newDocument: document, removed: removed };\n },\n copy: function (obj, key, document) {\n var valueToCopy = getValueByPointer(document, this.from);\n // enforce copy by value so further operations don't affect source (see issue #177)\n applyOperation(document, { op: \"add\", path: this.path, value: _deepClone(valueToCopy) });\n return { newDocument: document };\n },\n test: function (obj, key, document) {\n return { newDocument: document, test: _areEquals(obj[key], this.value) };\n },\n _get: function (obj, key, document) {\n this.value = obj[key];\n return { newDocument: document };\n }\n};\n/* The operations applicable to an array. Many are the same as for the object */\nvar arrOps = {\n add: function (arr, i, document) {\n if (isInteger(i)) {\n arr.splice(i, 0, this.value);\n }\n else { // array props\n arr[i] = this.value;\n }\n // this may be needed when using '-' in an array\n return { newDocument: document, index: i };\n },\n remove: function (arr, i, document) {\n var removedList = arr.splice(i, 1);\n return { newDocument: document, removed: removedList[0] };\n },\n replace: function (arr, i, document) {\n var removed = arr[i];\n arr[i] = this.value;\n return { newDocument: document, removed: removed };\n },\n move: objOps.move,\n copy: objOps.copy,\n test: objOps.test,\n _get: objOps._get\n};\n/**\n * Retrieves a value from a JSON document by a JSON pointer.\n * Returns the value.\n *\n * @param document The document to get the value from\n * @param pointer an escaped JSON pointer\n * @return The retrieved value\n */\nexport function getValueByPointer(document, pointer) {\n if (pointer == '') {\n return document;\n }\n var getOriginalDestination = { op: \"_get\", path: pointer };\n applyOperation(document, getOriginalDestination);\n return getOriginalDestination.value;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the {newDocument, result} of the operation.\n * It modifies the `document` and `operation` objects - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyOperation(document, jsonpatch._deepClone(operation))`.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return `{newDocument, result}` after the operation\n */\nexport function applyOperation(document, operation, validateOperation, mutateDocument, banPrototypeModifications, index) {\n if (validateOperation === void 0) { validateOperation = false; }\n if (mutateDocument === void 0) { mutateDocument = true; }\n if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n if (index === void 0) { index = 0; }\n if (validateOperation) {\n if (typeof validateOperation == 'function') {\n validateOperation(operation, 0, document, operation.path);\n }\n else {\n validator(operation, 0);\n }\n }\n /* ROOT OPERATIONS */\n if (operation.path === \"\") {\n var returnValue = { newDocument: document };\n if (operation.op === 'add') {\n returnValue.newDocument = operation.value;\n return returnValue;\n }\n else if (operation.op === 'replace') {\n returnValue.newDocument = operation.value;\n returnValue.removed = document; //document we removed\n return returnValue;\n }\n else if (operation.op === 'move' || operation.op === 'copy') { // it's a move or copy to root\n returnValue.newDocument = getValueByPointer(document, operation.from); // get the value by json-pointer in `from` field\n if (operation.op === 'move') { // report removed item\n returnValue.removed = document;\n }\n return returnValue;\n }\n else if (operation.op === 'test') {\n returnValue.test = _areEquals(document, operation.value);\n if (returnValue.test === false) {\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n returnValue.newDocument = document;\n return returnValue;\n }\n else if (operation.op === 'remove') { // a remove on root\n returnValue.removed = document;\n returnValue.newDocument = null;\n return returnValue;\n }\n else if (operation.op === '_get') {\n operation.value = document;\n return returnValue;\n }\n else { /* bad operation */\n if (validateOperation) {\n throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n }\n else {\n return returnValue;\n }\n }\n } /* END ROOT OPERATIONS */\n else {\n if (!mutateDocument) {\n document = _deepClone(document);\n }\n var path = operation.path || \"\";\n var keys = path.split('/');\n var obj = document;\n var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift\n var len = keys.length;\n var existingPathFragment = undefined;\n var key = void 0;\n var validateFunction = void 0;\n if (typeof validateOperation == 'function') {\n validateFunction = validateOperation;\n }\n else {\n validateFunction = validator;\n }\n while (true) {\n key = keys[t];\n if (key && key.indexOf('~') != -1) {\n key = unescapePathComponent(key);\n }\n if (banPrototypeModifications &&\n (key == '__proto__' ||\n (key == 'prototype' && t > 0 && keys[t - 1] == 'constructor'))) {\n throw new TypeError('JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README');\n }\n if (validateOperation) {\n if (existingPathFragment === undefined) {\n if (obj[key] === undefined) {\n existingPathFragment = keys.slice(0, t).join('/');\n }\n else if (t == len - 1) {\n existingPathFragment = operation.path;\n }\n if (existingPathFragment !== undefined) {\n validateFunction(operation, 0, document, existingPathFragment);\n }\n }\n }\n t++;\n if (Array.isArray(obj)) {\n if (key === '-') {\n key = obj.length;\n }\n else {\n if (validateOperation && !isInteger(key)) {\n throw new JsonPatchError(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\", \"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\", index, operation, document);\n } // only parse key when it's an integer for `arr.prop` to work\n else if (isInteger(key)) {\n key = ~~key;\n }\n }\n if (t >= len) {\n if (validateOperation && operation.op === \"add\" && key > obj.length) {\n throw new JsonPatchError(\"The specified index MUST NOT be greater than the number of elements in the array\", \"OPERATION_VALUE_OUT_OF_BOUNDS\", index, operation, document);\n }\n var returnValue = arrOps[operation.op].call(operation, obj, key, document); // Apply patch\n if (returnValue.test === false) {\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n return returnValue;\n }\n }\n else {\n if (t >= len) {\n var returnValue = objOps[operation.op].call(operation, obj, key, document); // Apply patch\n if (returnValue.test === false) {\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n return returnValue;\n }\n }\n obj = obj[key];\n // If we have more keys in the path, but the next value isn't a non-null object,\n // throw an OPERATION_PATH_UNRESOLVABLE error instead of iterating again.\n if (validateOperation && t < len && (!obj || typeof obj !== \"object\")) {\n throw new JsonPatchError('Cannot perform operation at the desired path', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n }\n }\n }\n}\n/**\n * Apply a full JSON Patch array on a JSON document.\n * Returns the {newDocument, result} of the patch.\n * It modifies the `document` object and `patch` - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyPatch(document, jsonpatch._deepClone(patch))`.\n *\n * @param document The document to patch\n * @param patch The patch to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return An array of `{newDocument, result}` after the patch\n */\nexport function applyPatch(document, patch, validateOperation, mutateDocument, banPrototypeModifications) {\n if (mutateDocument === void 0) { mutateDocument = true; }\n if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n if (validateOperation) {\n if (!Array.isArray(patch)) {\n throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n }\n }\n if (!mutateDocument) {\n document = _deepClone(document);\n }\n var results = new Array(patch.length);\n for (var i = 0, length_1 = patch.length; i < length_1; i++) {\n // we don't need to pass mutateDocument argument because if it was true, we already deep cloned the object, we'll just pass `true`\n results[i] = applyOperation(document, patch[i], validateOperation, true, banPrototypeModifications, i);\n document = results[i].newDocument; // in case root was replaced\n }\n results.newDocument = document;\n return results;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the updated document.\n * Suitable as a reducer.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @return The updated document\n */\nexport function applyReducer(document, operation, index) {\n var operationResult = applyOperation(document, operation);\n if (operationResult.test === false) { // failed test\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n return operationResult.newDocument;\n}\n/**\n * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error.\n * @param {object} operation - operation object (patch)\n * @param {number} index - index of operation in the sequence\n * @param {object} [document] - object where the operation is supposed to be applied\n * @param {string} [existingPathFragment] - comes along with `document`\n */\nexport function validator(operation, index, document, existingPathFragment) {\n if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) {\n throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, document);\n }\n else if (!objOps[operation.op]) {\n throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n }\n else if (typeof operation.path !== 'string') {\n throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, document);\n }\n else if (operation.path.indexOf('/') !== 0 && operation.path.length > 0) {\n // paths that aren't empty string should start with \"/\"\n throw new JsonPatchError('Operation `path` property must start with \"/\"', 'OPERATION_PATH_INVALID', index, operation, document);\n }\n else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') {\n throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, document);\n }\n else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) {\n throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, document);\n }\n else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) {\n throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, document);\n }\n else if (document) {\n if (operation.op == \"add\") {\n var pathLen = operation.path.split(\"/\").length;\n var existingPathLen = existingPathFragment.split(\"/\").length;\n if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) {\n throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, document);\n }\n }\n else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') {\n if (operation.path !== existingPathFragment) {\n throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n }\n }\n else if (operation.op === 'move' || operation.op === 'copy') {\n var existingValue = { op: \"_get\", path: operation.from, value: undefined };\n var error = validate([existingValue], document);\n if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') {\n throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, document);\n }\n }\n }\n}\n/**\n * Validates a sequence of operations. If `document` parameter is provided, the sequence is additionally validated against the object document.\n * If error is encountered, returns a JsonPatchError object\n * @param sequence\n * @param document\n * @returns {JsonPatchError|undefined}\n */\nexport function validate(sequence, document, externalValidator) {\n try {\n if (!Array.isArray(sequence)) {\n throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n }\n if (document) {\n //clone document and sequence so that we can safely try applying operations\n applyPatch(_deepClone(document), _deepClone(sequence), externalValidator || true);\n }\n else {\n externalValidator = externalValidator || validator;\n for (var i = 0; i < sequence.length; i++) {\n externalValidator(sequence[i], i, document, undefined);\n }\n }\n }\n catch (e) {\n if (e instanceof JsonPatchError) {\n return e;\n }\n else {\n throw e;\n }\n }\n}\n// based on https://github.com/epoberezkin/fast-deep-equal\n// MIT License\n// Copyright (c) 2017 Evgeny Poberezkin\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\nexport function _areEquals(a, b) {\n if (a === b)\n return true;\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n var arrA = Array.isArray(a), arrB = Array.isArray(b), i, length, key;\n if (arrA && arrB) {\n length = a.length;\n if (length != b.length)\n return false;\n for (i = length; i-- !== 0;)\n if (!_areEquals(a[i], b[i]))\n return false;\n return true;\n }\n if (arrA != arrB)\n return false;\n var keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length)\n return false;\n for (i = length; i-- !== 0;)\n if (!b.hasOwnProperty(keys[i]))\n return false;\n for (i = length; i-- !== 0;) {\n key = keys[i];\n if (!_areEquals(a[key], b[key]))\n return false;\n }\n return true;\n }\n return a !== a && b !== b;\n}\n;\n", "/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017-2022 Joachim Wester\n * MIT licensed\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function hasOwnProperty(obj, key) {\n return _hasOwnProperty.call(obj, key);\n}\nexport function _objectKeys(obj) {\n if (Array.isArray(obj)) {\n var keys_1 = new Array(obj.length);\n for (var k = 0; k < keys_1.length; k++) {\n keys_1[k] = \"\" + k;\n }\n return keys_1;\n }\n if (Object.keys) {\n return Object.keys(obj);\n }\n var keys = [];\n for (var i in obj) {\n if (hasOwnProperty(obj, i)) {\n keys.push(i);\n }\n }\n return keys;\n}\n;\n/**\n* Deeply clone the object.\n* https://jsperf.com/deep-copy-vs-json-stringify-json-parse/25 (recursiveDeepCopy)\n* @param {any} obj value to clone\n* @return {any} cloned obj\n*/\nexport function _deepClone(obj) {\n switch (typeof obj) {\n case \"object\":\n return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5\n case \"undefined\":\n return null; //this is how JSON.stringify behaves for array items\n default:\n return obj; //no need to clone primitives\n }\n}\n//3x faster than cached /^\\d+$/.test(str)\nexport function isInteger(str) {\n var i = 0;\n var len = str.length;\n var charCode;\n while (i < len) {\n charCode = str.charCodeAt(i);\n if (charCode >= 48 && charCode <= 57) {\n i++;\n continue;\n }\n return false;\n }\n return true;\n}\n/**\n* Escapes a json pointer path\n* @param path The raw pointer\n* @return the Escaped path\n*/\nexport function escapePathComponent(path) {\n if (path.indexOf('/') === -1 && path.indexOf('~') === -1)\n return path;\n return path.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n/**\n * Unescapes a json pointer path\n * @param path The escaped pointer\n * @return The unescaped path\n */\nexport function unescapePathComponent(path) {\n return path.replace(/~1/g, '/').replace(/~0/g, '~');\n}\nexport function _getPathRecursive(root, obj) {\n var found;\n for (var key in root) {\n if (hasOwnProperty(root, key)) {\n if (root[key] === obj) {\n return escapePathComponent(key) + '/';\n }\n else if (typeof root[key] === 'object') {\n found = _getPathRecursive(root[key], obj);\n if (found != '') {\n return escapePathComponent(key) + '/' + found;\n }\n }\n }\n }\n return '';\n}\nexport function getPath(root, obj) {\n if (root === obj) {\n return '/';\n }\n var path = _getPathRecursive(root, obj);\n if (path === '') {\n throw new Error(\"Object not found in root\");\n }\n return \"/\" + path;\n}\n/**\n* Recursively checks whether an object has any undefined values inside.\n*/\nexport function hasUndefined(obj) {\n if (obj === undefined) {\n return true;\n }\n if (obj) {\n if (Array.isArray(obj)) {\n for (var i_1 = 0, len = obj.length; i_1 < len; i_1++) {\n if (hasUndefined(obj[i_1])) {\n return true;\n }\n }\n }\n else if (typeof obj === \"object\") {\n var objKeys = _objectKeys(obj);\n var objKeysLength = objKeys.length;\n for (var i = 0; i < objKeysLength; i++) {\n if (hasUndefined(obj[objKeys[i]])) {\n return true;\n }\n }\n }\n }\n return false;\n}\nfunction patchErrorMessageFormatter(message, args) {\n var messageParts = [message];\n for (var key in args) {\n var value = typeof args[key] === 'object' ? JSON.stringify(args[key], null, 2) : args[key]; // pretty print\n if (typeof value !== 'undefined') {\n messageParts.push(key + \": \" + value);\n }\n }\n return messageParts.join('\\n');\n}\nvar PatchError = /** @class */ (function (_super) {\n __extends(PatchError, _super);\n function PatchError(message, name, index, operation, tree) {\n var _newTarget = this.constructor;\n var _this = _super.call(this, patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree })) || this;\n _this.name = name;\n _this.index = index;\n _this.operation = operation;\n _this.tree = tree;\n Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain, see https://stackoverflow.com/a/48342359\n _this.message = patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree });\n return _this;\n }\n return PatchError;\n}(Error));\nexport { PatchError };\n", "/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017-2021 Joachim Wester\n * MIT license\n */\nimport { _deepClone, _objectKeys, escapePathComponent, hasOwnProperty } from './helpers.mjs';\nimport { applyPatch } from './core.mjs';\nvar beforeDict = new WeakMap();\nvar Mirror = /** @class */ (function () {\n function Mirror(obj) {\n this.observers = new Map();\n this.obj = obj;\n }\n return Mirror;\n}());\nvar ObserverInfo = /** @class */ (function () {\n function ObserverInfo(callback, observer) {\n this.callback = callback;\n this.observer = observer;\n }\n return ObserverInfo;\n}());\nfunction getMirror(obj) {\n return beforeDict.get(obj);\n}\nfunction getObserverFromMirror(mirror, callback) {\n return mirror.observers.get(callback);\n}\nfunction removeObserverFromMirror(mirror, observer) {\n mirror.observers.delete(observer.callback);\n}\n/**\n * Detach an observer from an object\n */\nexport function unobserve(root, observer) {\n observer.unobserve();\n}\n/**\n * Observes changes made to an object, which can then be retrieved using generate\n */\nexport function observe(obj, callback) {\n var patches = [];\n var observer;\n var mirror = getMirror(obj);\n if (!mirror) {\n mirror = new Mirror(obj);\n beforeDict.set(obj, mirror);\n }\n else {\n var observerInfo = getObserverFromMirror(mirror, callback);\n observer = observerInfo && observerInfo.observer;\n }\n if (observer) {\n return observer;\n }\n observer = {};\n mirror.value = _deepClone(obj);\n if (callback) {\n observer.callback = callback;\n observer.next = null;\n var dirtyCheck = function () {\n generate(observer);\n };\n var fastCheck = function () {\n clearTimeout(observer.next);\n observer.next = setTimeout(dirtyCheck);\n };\n if (typeof window !== 'undefined') { //not Node\n window.addEventListener('mouseup', fastCheck);\n window.addEventListener('keyup', fastCheck);\n window.addEventListener('mousedown', fastCheck);\n window.addEventListener('keydown', fastCheck);\n window.addEventListener('change', fastCheck);\n }\n }\n observer.patches = patches;\n observer.object = obj;\n observer.unobserve = function () {\n generate(observer);\n clearTimeout(observer.next);\n removeObserverFromMirror(mirror, observer);\n if (typeof window !== 'undefined') {\n window.removeEventListener('mouseup', fastCheck);\n window.removeEventListener('keyup', fastCheck);\n window.removeEventListener('mousedown', fastCheck);\n window.removeEventListener('keydown', fastCheck);\n window.removeEventListener('change', fastCheck);\n }\n };\n mirror.observers.set(callback, new ObserverInfo(callback, observer));\n return observer;\n}\n/**\n * Generate an array of patches from an observer\n */\nexport function generate(observer, invertible) {\n if (invertible === void 0) { invertible = false; }\n var mirror = beforeDict.get(observer.object);\n _generate(mirror.value, observer.object, observer.patches, \"\", invertible);\n if (observer.patches.length) {\n applyPatch(mirror.value, observer.patches);\n }\n var temp = observer.patches;\n if (temp.length > 0) {\n observer.patches = [];\n if (observer.callback) {\n observer.callback(temp);\n }\n }\n return temp;\n}\n// Dirty check if obj is different from mirror, generate patches and update mirror\nfunction _generate(mirror, obj, patches, path, invertible) {\n if (obj === mirror) {\n return;\n }\n if (typeof obj.toJSON === \"function\") {\n obj = obj.toJSON();\n }\n var newKeys = _objectKeys(obj);\n var oldKeys = _objectKeys(mirror);\n var changed = false;\n var deleted = false;\n //if ever \"move\" operation is implemented here, make sure this test runs OK: \"should not generate the same patch twice (move)\"\n for (var t = oldKeys.length - 1; t >= 0; t--) {\n var key = oldKeys[t];\n var oldVal = mirror[key];\n if (hasOwnProperty(obj, key) && !(obj[key] === undefined && oldVal !== undefined && Array.isArray(obj) === false)) {\n var newVal = obj[key];\n if (typeof oldVal == \"object\" && oldVal != null && typeof newVal == \"object\" && newVal != null && Array.isArray(oldVal) === Array.isArray(newVal)) {\n _generate(oldVal, newVal, patches, path + \"/\" + escapePathComponent(key), invertible);\n }\n else {\n if (oldVal !== newVal) {\n changed = true;\n if (invertible) {\n patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n }\n patches.push({ op: \"replace\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(newVal) });\n }\n }\n }\n else if (Array.isArray(mirror) === Array.isArray(obj)) {\n if (invertible) {\n patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n }\n patches.push({ op: \"remove\", path: path + \"/\" + escapePathComponent(key) });\n deleted = true; // property has been deleted\n }\n else {\n if (invertible) {\n patches.push({ op: \"test\", path: path, value: mirror });\n }\n patches.push({ op: \"replace\", path: path, value: obj });\n changed = true;\n }\n }\n if (!deleted && newKeys.length == oldKeys.length) {\n return;\n }\n for (var t = 0; t < newKeys.length; t++) {\n var key = newKeys[t];\n if (!hasOwnProperty(mirror, key) && obj[key] !== undefined) {\n patches.push({ op: \"add\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(obj[key]) });\n }\n }\n}\n/**\n * Create an array of patches from the differences in two objects\n */\nexport function compare(tree1, tree2, invertible) {\n if (invertible === void 0) { invertible = false; }\n var patches = [];\n _generate(tree1, tree2, patches, '', invertible);\n return patches;\n}\n", "export * from './module/core.mjs';\nexport * from './module/duplex.mjs';\nexport {\n PatchError as JsonPatchError,\n _deepClone as deepClone,\n escapePathComponent,\n unescapePathComponent\n} from './module/helpers.mjs';\n\n\n/**\n * Default export for backwards compat\n */\n\nimport * as core from './module/core.mjs';\nimport * as duplex from './module/duplex.mjs';\nimport {\n PatchError as JsonPatchError,\n _deepClone as deepClone,\n escapePathComponent,\n unescapePathComponent\n} from './module/helpers.mjs';\n\nexport default Object.assign({}, core, duplex, {\n JsonPatchError,\n deepClone,\n escapePathComponent,\n unescapePathComponent\n});", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n", "/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n", "/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass<T>(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n", "/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove<T>(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements SubscriptionLike {\n /** @nocollapse */\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered finalizers to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _finalizers: Exclude<TeardownLogic, void>[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the finalization\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a finalizer to this subscription, so that finalization will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever finalizer is passed to it\n * will automatically be executed (unless the finalizer itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as finalizers to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The finalization logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the finalizer if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever finalizer is handed to it automatically.\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = this._finalizers ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a finalizer from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same finalizer instance of a function or an unsubscribable object to a `Subscription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All finalizer instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The finalizer to remove from this subscription\n */\n remove(teardown: Exclude<TeardownLogic, void>): void {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execFinalizer(finalizer: Unsubscribable | (() => void)) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n", "import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification<any>, subscriber: Subscriber<any>) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearTimeoutFunction = (handle: TimerHandle) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(handler: () => void, timeout?: number, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate?.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle as any);\n },\n delegate: undefined,\n};\n", "import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\n\n/**\n * Handles an error on another job either with the user-configured {@link onUnhandledError},\n * or by throwing it on that new job so it can be picked up by `window.onerror`, `process.on('error')`, etc.\n *\n * This should be called whenever there is an error that is out-of-band with the subscription\n * or when an error hits a terminal boundary of the subscription and no error handler was provided.\n *\n * @param err the error to report\n */\nexport function reportUnhandledError(err: any) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n // Execute the user-configured error handler.\n onUnhandledError(err);\n } else {\n // Throw so it is picked up by the runtime's uncaught error mechanism.\n throw err;\n }\n });\n}\n", "/* tslint:disable:no-empty */\nexport function noop() { }\n", "import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification<T>(value: T) {\n return createNotification('N', value, undefined) as NextNotification<T>;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n", "import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber<T>\n */\nexport class Subscriber<T> extends Subscription implements Observer<T> {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @nocollapse\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create<T>(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber<T> {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber<any> | Observer<any>; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber<any> | Observer<any>) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value?: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\n/**\n * This bind is captured here because we want to be able to have\n * compatibility with monoid libraries that tend to use a method named\n * `bind`. In particular, a library called Monio requires this.\n */\nconst _bind = Function.prototype.bind;\n\nfunction bind<Fn extends (...args: any[]) => any>(fn: Fn, thisArg: any): Fn {\n return _bind.call(fn, thisArg);\n}\n\n/**\n * Internal optimization only, DO NOT EXPOSE.\n * @internal\n */\nclass ConsumerObserver<T> implements Observer<T> {\n constructor(private partialObserver: Partial<Observer<T>>) {}\n\n next(value: T): void {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n\n error(err: any): void {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n\n complete(): void {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\n\nexport class SafeSubscriber<T> extends Subscriber<T> {\n constructor(\n observerOrNext?: Partial<Observer<T>> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let partialObserver: Partial<Observer<T>>;\n if (isFunction(observerOrNext) || !observerOrNext) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n partialObserver = {\n next: (observerOrNext ?? undefined) as (((value: T) => void) | undefined),\n error: error ?? undefined,\n complete: complete ?? undefined,\n };\n } else {\n // The first argument is a partial observer.\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n } else {\n // The \"normal\" path. Just use the partial observer directly.\n partialObserver = observerOrNext;\n }\n }\n\n // Wrap the partial observer to ensure it's a full observer, and\n // make sure proper error handling is accounted for.\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\n\nfunction handleUnhandledError(error: any) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(error);\n }\n}\n\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent\n * @param subscriber The stopped subscriber\n */\nfunction handleStoppedNotification(notification: ObservableNotification<any>, subscriber: Subscriber<any>) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly<Observer<any>> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n", "/**\n * Symbol.observable or a string \"@@observable\". Used for interop\n *\n * @deprecated We will no longer be exporting this symbol in upcoming versions of RxJS.\n * Instead polyfill and use Symbol.observable directly *or* use https://www.npmjs.com/package/symbol-observable\n */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n", "/**\n * This function takes one parameter and just returns it. Simply put,\n * this is like `<T>(x: T): T => x`.\n *\n * ## Examples\n *\n * This is useful in some cases when using things like `mergeMap`\n *\n * ```ts\n * import { interval, take, map, range, mergeMap, identity } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(5));\n *\n * const result$ = source$.pipe(\n * map(i => range(i)),\n * mergeMap(identity) // same as mergeMap(x => x)\n * );\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * Or when you want to selectively apply an operator\n *\n * ```ts\n * import { interval, take, identity } from 'rxjs';\n *\n * const shouldLimit = () => Math.random() < 0.5;\n *\n * const source$ = interval(1000);\n *\n * const result$ = source$.pipe(shouldLimit() ? take(5) : identity);\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * @param x Any value that is returned by this function\n * @returns The value passed as the first parameter to this function\n */\nexport function identity<T>(x: T): T {\n return x;\n}\n", "import { identity } from './identity';\nimport { UnaryFunction } from '../types';\n\nexport function pipe(): typeof identity;\nexport function pipe<T, A>(fn1: UnaryFunction<T, A>): UnaryFunction<T, A>;\nexport function pipe<T, A, B>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>): UnaryFunction<T, B>;\nexport function pipe<T, A, B, C>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>): UnaryFunction<T, C>;\nexport function pipe<T, A, B, C, D>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>\n): UnaryFunction<T, D>;\nexport function pipe<T, A, B, C, D, E>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>\n): UnaryFunction<T, E>;\nexport function pipe<T, A, B, C, D, E, F>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>\n): UnaryFunction<T, F>;\nexport function pipe<T, A, B, C, D, E, F, G>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>,\n fn7: UnaryFunction<F, G>\n): UnaryFunction<T, G>;\nexport function pipe<T, A, B, C, D, E, F, G, H>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>,\n fn7: UnaryFunction<F, G>,\n fn8: UnaryFunction<G, H>\n): UnaryFunction<T, H>;\nexport function pipe<T, A, B, C, D, E, F, G, H, I>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>,\n fn7: UnaryFunction<F, G>,\n fn8: UnaryFunction<G, H>,\n fn9: UnaryFunction<H, I>\n): UnaryFunction<T, I>;\nexport function pipe<T, A, B, C, D, E, F, G, H, I>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>,\n fn7: UnaryFunction<F, G>,\n fn8: UnaryFunction<G, H>,\n fn9: UnaryFunction<H, I>,\n ...fns: UnaryFunction<any, any>[]\n): UnaryFunction<T, unknown>;\n\n/**\n * pipe() can be called on one or more functions, each of which can take one argument (\"UnaryFunction\")\n * and uses it to return a value.\n * It returns a function that takes one argument, passes it to the first UnaryFunction, and then\n * passes the result to the next one, passes that result to the next one, and so on. \n */\nexport function pipe(...fns: Array<UnaryFunction<any, any>>): UnaryFunction<any, any> {\n return pipeFromArray(fns);\n}\n\n/** @internal */\nexport function pipeFromArray<T, R>(fns: Array<UnaryFunction<T, R>>): UnaryFunction<T, R> {\n if (fns.length === 0) {\n return identity as UnaryFunction<any, any>;\n }\n\n if (fns.length === 1) {\n return fns[0];\n }\n\n return function piped(input: T): R {\n return fns.reduce((prev: any, fn: UnaryFunction<T, R>) => fn(prev), input as any);\n };\n}\n", "import { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable<T>\n */\nexport class Observable<T> implements Subscribable<T> {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable<any> | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator<any, T> | undefined;\n\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable<T>, subscriber: Subscriber<T>) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new observable\n * @nocollapse\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = <T>(subscribe?: (subscriber: Subscriber<T>) => TeardownLogic) => {\n return new Observable<T>(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param operator the operator defining the operation to take on the observable\n * @return a new observable with the Operator applied\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift<R>(operator?: Operator<T, R>): Observable<R> {\n const observable = new Observable<R>();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observerOrNext?: Partial<Observer<T>> | ((value: T) => void)): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * <span class=\"informal\">Use it when you have all these Observables, but still nothing is happening.</span>\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * #### Examples\n *\n * Subscribe with an {@link guide/observer Observer}\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Subscribe with functions ({@link deprecations/subscribe-arguments deprecated})\n *\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Cancel a subscription\n *\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 'unsubscribed!' after 2.5s\n * ```\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {Subscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(\n observerOrNext?: Partial<Observer<T>> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber<T>): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * #### Example\n *\n * ```ts\n * import { interval, take } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ' + value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total: ' + total)\n * );\n *\n * // Expected:\n * // 'observable -> 0'\n * // 'observable -> 1'\n * // 'observable -> 2'\n * // 'observable -> 3'\n * // 'Total: 6'\n * ```\n *\n * @param next a handler for each value emitted by the observable\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next: (value: T) => void): Promise<void>;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise<void>;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise<void> {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor<void>((resolve, reject) => {\n const subscriber = new SafeSubscriber<T>({\n next: (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n }) as Promise<void>;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber<any>): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable<T>;\n pipe<A>(op1: OperatorFunction<T, A>): Observable<A>;\n pipe<A, B>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>): Observable<B>;\n pipe<A, B, C>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>): Observable<C>;\n pipe<A, B, C, D>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>\n ): Observable<D>;\n pipe<A, B, C, D, E>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>\n ): Observable<E>;\n pipe<A, B, C, D, E, F>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>\n ): Observable<F>;\n pipe<A, B, C, D, E, F, G>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>,\n op7: OperatorFunction<F, G>\n ): Observable<G>;\n pipe<A, B, C, D, E, F, G, H>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>,\n op7: OperatorFunction<F, G>,\n op8: OperatorFunction<G, H>\n ): Observable<H>;\n pipe<A, B, C, D, E, F, G, H, I>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>,\n op7: OperatorFunction<F, G>,\n op8: OperatorFunction<G, H>,\n op9: OperatorFunction<H, I>\n ): Observable<I>;\n pipe<A, B, C, D, E, F, G, H, I>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>,\n op7: OperatorFunction<F, G>,\n op8: OperatorFunction<G, H>,\n op9: OperatorFunction<H, I>,\n ...operations: OperatorFunction<any, any>[]\n ): Observable<unknown>;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * ## Example\n *\n * ```ts\n * import { interval, filter, map, scan } from 'rxjs';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x));\n * ```\n */\n pipe(...operations: OperatorFunction<any, any>[]): Observable<any> {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise<T | undefined>;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise<T | undefined>;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise<T | undefined>;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @method toPromise\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise<T | undefined> {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise<T | undefined>;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver<T>(value: any): value is Observer<T> {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber<T>(value: any): value is Subscriber<T> {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction } from '../types';\nimport { isFunction } from './isFunction';\n\n/**\n * Used to determine if an object is an Observable with a lift function.\n */\nexport function hasLift(source: any): source is { lift: InstanceType<typeof Observable>['lift'] } {\n return isFunction(source?.lift);\n}\n\n/**\n * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way.\n * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription.\n */\nexport function operate<T, R>(\n init: (liftedSource: Observable<T>, subscriber: Subscriber<R>) => (() => void) | void\n): OperatorFunction<T, R> {\n return (source: Observable<T>) => {\n if (hasLift(source)) {\n return source.lift(function (this: Subscriber<R>, liftedSource: Observable<T>) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n", "import { Subscriber } from '../Subscriber';\n\n/**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\nexport function createOperatorSubscriber<T>(\n destination: Subscriber<any>,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n onFinalize?: () => void\n): Subscriber<T> {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber<T> extends Subscriber<T> {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional finalization logic here. This will only be called on finalization if the\n * subscriber itself is not already closed. This is called after all other finalization logic is executed.\n * @param shouldUnsubscribe An optional check to see if an unsubscribe call should truly unsubscribe.\n * NOTE: This currently **ONLY** exists to support the strange behavior of {@link groupBy}, where unsubscription\n * to the resulting observable does not actually disconnect from the source if there are active subscriptions\n * to any grouped observable. (DO NOT EXPOSE OR USE EXTERNALLY!!!)\n */\n constructor(\n destination: Subscriber<any>,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void,\n private shouldUnsubscribe?: () => boolean\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber<T>, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber<T>, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber<T>) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n }\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n", "import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject<T> extends Observable<T> implements SubscriptionLike {\n closed = false;\n\n private currentObservers: Observer<T>[] | null = null;\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer<T>[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @nocollapse\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = <T>(destination: Observer<T>, source: Observable<T>): AnonymousSubject<T> => {\n return new AnonymousSubject<T>(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift<R>(operator: Operator<T, R>): Observable<R> {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber<T>): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber<T>): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber<any>) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber<any>) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create custom Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return {Observable} Observable that the Subject casts to\n */\n asObservable(): Observable<T> {\n const observable: any = new Observable<T>();\n observable.source = this;\n return observable;\n }\n}\n\n/**\n * @class AnonymousSubject<T>\n */\nexport class AnonymousSubject<T> extends Subject<T> {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer<T>,\n source?: Observable<T>\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber<T>): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n", "import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n", "import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple of exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject<T> extends Subject<T> {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param bufferSize The size of the buffer to replay on subscription\n * @param windowTime The amount of time the buffered items will stay buffered\n * @param timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber<T>): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * A simple Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * <span class=\"informal\">Just emits 'complete', and nothing else.</span>\n *\n * ![](empty.png)\n *\n * A simple Observable that only emits the complete notification. It can be used\n * for composing with other Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n *\n * Emit the number 7, then complete\n *\n * ```ts\n * import { EMPTY, startWith } from 'rxjs';\n *\n * const result = EMPTY.pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * Map and flatten only odd numbers to the sequence `'a'`, `'b'`, `'c'`\n *\n * ```ts\n * import { interval, mergeMap, of, EMPTY } from 'rxjs';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : EMPTY),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link NEVER}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const EMPTY = new Observable<never>((subscriber) => subscriber.complete());\n\n/**\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable<never>((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport function isScheduler(value: any): value is SchedulerLike {\n return value && isFunction(value.schedule);\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last<T>(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n", "export const isArrayLike = (<T>(x: any): x is ArrayLike<T> => x && typeof x.length === 'number' && typeof x !== 'function');", "import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike<any> {\n return isFunction(value?.then);\n}\n", "import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable<any> {\n return isFunction(input[Symbol_observable]);\n}\n", "import { isFunction } from './isFunction';\n\nexport function isAsyncIterable<T>(obj: any): obj is AsyncIterable<T> {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n", "/**\n * Creates the TypeError to throw if an invalid object is passed to `from` or `scheduled`.\n * @param input The object that was passed.\n */\nexport function createInvalidObservableTypeError(input: any) {\n // TODO: We should create error codes that can be looked up, so this can be less verbose.\n return new TypeError(\n `You provided ${\n input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`\n } where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`\n );\n}\n", "export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n", "import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable<any> {\n return isFunction(input?.[Symbol_iterator]);\n}\n", "import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator<T>(readableStream: ReadableStreamLike<T>): AsyncGenerator<T> {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike<T>(obj: any): obj is ReadableStreamLike<T> {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an <iframe>.\n return isFunction(obj?.getReader);\n}\n", "import { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { ObservableInput, ObservedValueOf, ReadableStreamLike } from '../types';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { Subscriber } from '../Subscriber';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\n\nexport function innerFrom<O extends ObservableInput<any>>(input: O): Observable<ObservedValueOf<O>>;\nexport function innerFrom<T>(input: ObservableInput<T>): Observable<T> {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n\n throw createInvalidObservableTypeError(input);\n}\n\n/**\n * Creates an RxJS Observable from an object that implements `Symbol.observable`.\n * @param obj An object that properly implements `Symbol.observable`.\n */\nexport function fromInteropObservable<T>(obj: any) {\n return new Observable((subscriber: Subscriber<T>) => {\n const obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n // Should be caught by observable subscribe function error handling.\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\n\n/**\n * Synchronously emits the values of an array like and completes.\n * This is exported because there are creation functions and operators that need to\n * make direct use of the same logic, and there's no reason to make them run through\n * `from` conditionals because we *know* they're dealing with an array.\n * @param array The array to emit values from\n */\nexport function fromArrayLike<T>(array: ArrayLike<T>) {\n return new Observable((subscriber: Subscriber<T>) => {\n // Loop over the array and emit each value. Note two things here:\n // 1. We're making sure that the subscriber is not closed on each loop.\n // This is so we don't continue looping over a very large array after\n // something like a `take`, `takeWhile`, or other synchronous unsubscription\n // has already unsubscribed.\n // 2. In this form, reentrant code can alter that array we're looping over.\n // This is a known issue, but considered an edge case. The alternative would\n // be to copy the array before executing the loop, but this has\n // performance implications.\n for (let i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\n\nexport function fromPromise<T>(promise: PromiseLike<T>) {\n return new Observable((subscriber: Subscriber<T>) => {\n promise\n .then(\n (value) => {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n },\n (err: any) => subscriber.error(err)\n )\n .then(null, reportUnhandledError);\n });\n}\n\nexport function fromIterable<T>(iterable: Iterable<T>) {\n return new Observable((subscriber: Subscriber<T>) => {\n for (const value of iterable) {\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n });\n}\n\nexport function fromAsyncIterable<T>(asyncIterable: AsyncIterable<T>) {\n return new Observable((subscriber: Subscriber<T>) => {\n process(asyncIterable, subscriber).catch((err) => subscriber.error(err));\n });\n}\n\nexport function fromReadableStreamLike<T>(readableStream: ReadableStreamLike<T>) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\n\nasync function process<T>(asyncIterable: AsyncIterable<T>, subscriber: Subscriber<T>) {\n for await (const value of asyncIterable) {\n subscriber.next(value);\n // A side-effect may have closed our subscriber,\n // check before the next iteration.\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n}\n", "import { Subscription } from '../Subscription';\nimport { SchedulerAction, SchedulerLike } from '../types';\n\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay: number,\n repeat: true\n): void;\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay?: number,\n repeat?: false\n): Subscription;\n\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay = 0,\n repeat = false\n): Subscription | void {\n const scheduleSubscription = scheduler.schedule(function (this: SchedulerAction<any>) {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n } else {\n this.unsubscribe();\n }\n }, delay);\n\n parentSubscription.add(scheduleSubscription);\n\n if (!repeat) {\n // Because user-land scheduler implementations are unlikely to properly reuse\n // Actions for repeat scheduling, we can't trust that the returned subscription\n // will control repeat subscription scenarios. So we're trying to avoid using them\n // incorrectly within this library.\n return scheduleSubscription;\n }\n}\n", "/** @prettier */\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Re-emits all notifications from source Observable with specified scheduler.\n *\n * <span class=\"informal\">Ensure a specific scheduler is used, from outside of an Observable.</span>\n *\n * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule\n * notifications emitted by the source Observable. It might be useful, if you do not have control over\n * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.\n *\n * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,\n * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal\n * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits\n * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.\n * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split\n * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source\n * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a\n * little bit more, to ensure that they are emitted at expected moments.\n *\n * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications\n * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`\n * will delay all notifications - including error notifications - while `delay` will pass through error\n * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator\n * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used\n * for notification emissions in general.\n *\n * ## Example\n *\n * Ensure values in subscribe are called just before browser repaint\n *\n * ```ts\n * import { interval, observeOn, animationFrameScheduler } from 'rxjs';\n *\n * const someDiv = document.createElement('div');\n * someDiv.style.cssText = 'width: 200px;background: #09c';\n * document.body.appendChild(someDiv);\n * const intervals = interval(10); // Intervals are scheduled\n * // with async scheduler by default...\n * intervals.pipe(\n * observeOn(animationFrameScheduler) // ...but we will observe on animationFrame\n * ) // scheduler to ensure smooth animation.\n * .subscribe(val => {\n * someDiv.style.height = val + 'px';\n * });\n * ```\n *\n * @see {@link delay}\n *\n * @param scheduler Scheduler that will be used to reschedule notifications from source Observable.\n * @param delay Number of milliseconds that states with what delay every notification should be rescheduled.\n * @return A function that returns an Observable that emits the same\n * notifications as the source Observable, but with provided scheduler.\n */\nexport function observeOn<T>(scheduler: SchedulerLike, delay = 0): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => executeSchedule(subscriber, scheduler, () => subscriber.next(value), delay),\n () => executeSchedule(subscriber, scheduler, () => subscriber.complete(), delay),\n (err) => executeSchedule(subscriber, scheduler, () => subscriber.error(err), delay)\n )\n );\n });\n}\n", "import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\n\n/**\n * Asynchronously subscribes Observers to this Observable on the specified {@link SchedulerLike}.\n *\n * With `subscribeOn` you can decide what type of scheduler a specific Observable will be using when it is subscribed to.\n *\n * Schedulers control the speed and order of emissions to observers from an Observable stream.\n *\n * ![](subscribeOn.png)\n *\n * ## Example\n *\n * Given the following code:\n *\n * ```ts\n * import { of, merge } from 'rxjs';\n *\n * const a = of(1, 2, 3);\n * const b = of(4, 5, 6);\n *\n * merge(a, b).subscribe(console.log);\n *\n * // Outputs\n * // 1\n * // 2\n * // 3\n * // 4\n * // 5\n * // 6\n * ```\n *\n * Both Observable `a` and `b` will emit their values directly and synchronously once they are subscribed to.\n *\n * If we instead use the `subscribeOn` operator declaring that we want to use the {@link asyncScheduler} for values emitted by Observable `a`:\n *\n * ```ts\n * import { of, subscribeOn, asyncScheduler, merge } from 'rxjs';\n *\n * const a = of(1, 2, 3).pipe(subscribeOn(asyncScheduler));\n * const b = of(4, 5, 6);\n *\n * merge(a, b).subscribe(console.log);\n *\n * // Outputs\n * // 4\n * // 5\n * // 6\n * // 1\n * // 2\n * // 3\n * ```\n *\n * The reason for this is that Observable `b` emits its values directly and synchronously like before\n * but the emissions from `a` are scheduled on the event loop because we are now using the {@link asyncScheduler} for that specific Observable.\n *\n * @param scheduler The {@link SchedulerLike} to perform subscription actions on.\n * @param delay A delay to pass to the scheduler to delay subscriptions\n * @return A function that returns an Observable modified so that its\n * subscriptions happen on the specified {@link SchedulerLike}.\n */\nexport function subscribeOn<T>(scheduler: SchedulerLike, delay: number = 0): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n subscriber.add(scheduler.schedule(() => source.subscribe(subscriber), delay));\n });\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { InteropObservable, SchedulerLike } from '../types';\n\nexport function scheduleObservable<T>(input: InteropObservable<T>, scheduler: SchedulerLike) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { SchedulerLike } from '../types';\n\nexport function schedulePromise<T>(input: PromiseLike<T>, scheduler: SchedulerLike) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\nexport function scheduleArray<T>(input: ArrayLike<T>, scheduler: SchedulerLike) {\n return new Observable<T>((subscriber) => {\n // The current array index.\n let i = 0;\n // Start iterating over the array like on a schedule.\n return scheduler.schedule(function () {\n if (i === input.length) {\n // If we have hit the end of the array like in the\n // previous job, we can complete.\n subscriber.complete();\n } else {\n // Otherwise let's next the value at the current index,\n // then increment our index.\n subscriber.next(input[i++]);\n // If the last emission didn't cause us to close the subscriber\n // (via take or some side effect), reschedule the job and we'll\n // make another pass.\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\n\n/**\n * Used in {@link scheduled} to create an observable from an Iterable.\n * @param input The iterable to create an observable from\n * @param scheduler The scheduler to use\n */\nexport function scheduleIterable<T>(input: Iterable<T>, scheduler: SchedulerLike) {\n return new Observable<T>((subscriber) => {\n let iterator: Iterator<T, T>;\n\n // Schedule the initial creation of the iterator from\n // the iterable. This is so the code in the iterable is\n // not called until the scheduled job fires.\n executeSchedule(subscriber, scheduler, () => {\n // Create the iterator.\n iterator = (input as any)[Symbol_iterator]();\n\n executeSchedule(\n subscriber,\n scheduler,\n () => {\n let value: T;\n let done: boolean | undefined;\n try {\n // Pull the value out of the iterator\n ({ value, done } = iterator.next());\n } catch (err) {\n // We got an error while pulling from the iterator\n subscriber.error(err);\n return;\n }\n\n if (done) {\n // If it is \"done\" we just complete. This mimics the\n // behavior of JavaScript's `for..of` consumption of\n // iterables, which will not emit the value from an iterator\n // result of `{ done: true: value: 'here' }`.\n subscriber.complete();\n } else {\n // The iterable is not done, emit the value.\n subscriber.next(value);\n }\n },\n 0,\n true\n );\n });\n\n // During finalization, if we see this iterator has a `return` method,\n // then we know it is a Generator, and not just an Iterator. So we call\n // the `return()` function. This will ensure that any `finally { }` blocks\n // inside of the generator we can hit will be hit properly.\n return () => isFunction(iterator?.return) && iterator.return();\n });\n}\n", "import { SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\n\nexport function scheduleAsyncIterable<T>(input: AsyncIterable<T>, scheduler: SchedulerLike) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable<T>((subscriber) => {\n executeSchedule(subscriber, scheduler, () => {\n const iterator = input[Symbol.asyncIterator]();\n executeSchedule(\n subscriber,\n scheduler,\n () => {\n iterator.next().then((result) => {\n if (result.done) {\n // This will remove the subscriptions from\n // the parent subscription.\n subscriber.complete();\n } else {\n subscriber.next(result.value);\n }\n });\n },\n 0,\n true\n );\n });\n });\n}\n", "import { SchedulerLike, ReadableStreamLike } from '../types';\nimport { Observable } from '../Observable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\n\nexport function scheduleReadableStreamLike<T>(input: ReadableStreamLike<T>, scheduler: SchedulerLike): Observable<T> {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n", "import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\n\n/**\n * Converts from a common {@link ObservableInput} type to an observable where subscription and emissions\n * are scheduled on the provided scheduler.\n *\n * @see {@link from}\n * @see {@link of}\n *\n * @param input The observable, array, promise, iterable, etc you would like to schedule\n * @param scheduler The scheduler to use to schedule the subscription and emissions from\n * the returned observable.\n */\nexport function scheduled<T>(input: ObservableInput<T>, scheduler: SchedulerLike): Observable<T> {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n", "import { Observable } from '../Observable';\nimport { ObservableInput, SchedulerLike, ObservedValueOf } from '../types';\nimport { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\n\nexport function from<O extends ObservableInput<any>>(input: O): Observable<ObservedValueOf<O>>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function from<O extends ObservableInput<any>>(input: O, scheduler: SchedulerLike | undefined): Observable<ObservedValueOf<O>>;\n\n/**\n * Creates an Observable from an Array, an array-like object, a Promise, an iterable object, or an Observable-like object.\n *\n * <span class=\"informal\">Converts almost anything to an Observable.</span>\n *\n * ![](from.png)\n *\n * `from` converts various other objects and data types into Observables. It also converts a Promise, an array-like, or an\n * <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable\" target=\"_blank\">iterable</a>\n * object into an Observable that emits the items in that promise, array, or iterable. A String, in this context, is treated\n * as an array of characters. Observable-like objects (contains a function named with the ES2015 Symbol for Observable) can also be\n * converted through this operator.\n *\n * ## Examples\n *\n * Converts an array to an Observable\n *\n * ```ts\n * import { from } from 'rxjs';\n *\n * const array = [10, 20, 30];\n * const result = from(array);\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 10\n * // 20\n * // 30\n * ```\n *\n * Convert an infinite iterable (from a generator) to an Observable\n *\n * ```ts\n * import { from, take } from 'rxjs';\n *\n * function* generateDoubles(seed) {\n * let i = seed;\n * while (true) {\n * yield i;\n * i = 2 * i; // double it\n * }\n * }\n *\n * const iterator = generateDoubles(3);\n * const result = from(iterator).pipe(take(10));\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 3\n * // 6\n * // 12\n * // 24\n * // 48\n * // 96\n * // 192\n * // 384\n * // 768\n * // 1536\n * ```\n *\n * With `asyncScheduler`\n *\n * ```ts\n * import { from, asyncScheduler } from 'rxjs';\n *\n * console.log('start');\n *\n * const array = [10, 20, 30];\n * const result = from(array, asyncScheduler);\n *\n * result.subscribe(x => console.log(x));\n *\n * console.log('end');\n *\n * // Logs:\n * // 'start'\n * // 'end'\n * // 10\n * // 20\n * // 30\n * ```\n *\n * @see {@link fromEvent}\n * @see {@link fromEventPattern}\n *\n * @param {ObservableInput<T>} A subscription object, a Promise, an Observable-like,\n * an Array, an iterable, or an array-like object to be converted.\n * @param {SchedulerLike} An optional {@link SchedulerLike} on which to schedule the emission of values.\n * @return {Observable<T>}\n */\nexport function from<T>(input: ObservableInput<T>, scheduler?: SchedulerLike): Observable<T> {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n", "import { SchedulerLike, ValueFromArray } from '../types';\nimport { Observable } from '../Observable';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\n\n// Devs are more likely to pass null or undefined than they are a scheduler\n// without accompanying values. To make things easier for (naughty) devs who\n// use the `strictNullChecks: false` TypeScript compiler option, these\n// overloads with explicit null and undefined values are included.\n\nexport function of(value: null): Observable<null>;\nexport function of(value: undefined): Observable<undefined>;\n\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function of(scheduler: SchedulerLike): Observable<never>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function of<A extends readonly unknown[]>(...valuesAndScheduler: [...A, SchedulerLike]): Observable<ValueFromArray<A>>;\n\nexport function of(): Observable<never>;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function of<T>(): Observable<T>;\nexport function of<T>(value: T): Observable<T>;\nexport function of<A extends readonly unknown[]>(...values: A): Observable<ValueFromArray<A>>;\n\n/**\n * Converts the arguments to an observable sequence.\n *\n * <span class=\"informal\">Each argument becomes a `next` notification.</span>\n *\n * ![](of.png)\n *\n * Unlike {@link from}, it does not do any flattening and emits each argument in whole\n * as a separate `next` notification.\n *\n * ## Examples\n *\n * Emit the values `10, 20, 30`\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * of(10, 20, 30)\n * .subscribe({\n * next: value => console.log('next:', value),\n * error: err => console.log('error:', err),\n * complete: () => console.log('the end'),\n * });\n *\n * // Outputs\n * // next: 10\n * // next: 20\n * // next: 30\n * // the end\n * ```\n *\n * Emit the array `[1, 2, 3]`\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * of([1, 2, 3])\n * .subscribe({\n * next: value => console.log('next:', value),\n * error: err => console.log('error:', err),\n * complete: () => console.log('the end'),\n * });\n *\n * // Outputs\n * // next: [1, 2, 3]\n * // the end\n * ```\n *\n * @see {@link from}\n * @see {@link range}\n *\n * @param {...T} values A comma separated list of arguments you want to be emitted\n * @return {Observable} An Observable that emits the arguments\n * described above and then completes.\n */\nexport function of<T>(...args: Array<T | SchedulerLike>): Observable<T> {\n const scheduler = popScheduler(args);\n return from(args as T[], scheduler);\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { SchedulerLike } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * Creates an observable that will create an error instance and push it to the consumer as an error\n * immediately upon subscription.\n *\n * <span class=\"informal\">Just errors and does nothing else</span>\n *\n * ![](throw.png)\n *\n * This creation function is useful for creating an observable that will create an error and error every\n * time it is subscribed to. Generally, inside of most operators when you might want to return an errored\n * observable, this is unnecessary. In most cases, such as in the inner return of {@link concatMap},\n * {@link mergeMap}, {@link defer}, and many others, you can simply throw the error, and RxJS will pick\n * that up and notify the consumer of the error.\n *\n * ## Example\n *\n * Create a simple observable that will create a new error with a timestamp and log it\n * and the message every time you subscribe to it\n *\n * ```ts\n * import { throwError } from 'rxjs';\n *\n * let errorCount = 0;\n *\n * const errorWithTimestamp$ = throwError(() => {\n * const error: any = new Error(`This is error number ${ ++errorCount }`);\n * error.timestamp = Date.now();\n * return error;\n * });\n *\n * errorWithTimestamp$.subscribe({\n * error: err => console.log(err.timestamp, err.message)\n * });\n *\n * errorWithTimestamp$.subscribe({\n * error: err => console.log(err.timestamp, err.message)\n * });\n *\n * // Logs the timestamp and a new error message for each subscription\n * ```\n *\n * ### Unnecessary usage\n *\n * Using `throwError` inside of an operator or creation function\n * with a callback, is usually not necessary\n *\n * ```ts\n * import { of, concatMap, timer, throwError } from 'rxjs';\n *\n * const delays$ = of(1000, 2000, Infinity, 3000);\n *\n * delays$.pipe(\n * concatMap(ms => {\n * if (ms < 10000) {\n * return timer(ms);\n * } else {\n * // This is probably overkill.\n * return throwError(() => new Error(`Invalid time ${ ms }`));\n * }\n * })\n * )\n * .subscribe({\n * next: console.log,\n * error: console.error\n * });\n * ```\n *\n * You can just throw the error instead\n *\n * ```ts\n * import { of, concatMap, timer } from 'rxjs';\n *\n * const delays$ = of(1000, 2000, Infinity, 3000);\n *\n * delays$.pipe(\n * concatMap(ms => {\n * if (ms < 10000) {\n * return timer(ms);\n * } else {\n * // Cleaner and easier to read for most folks.\n * throw new Error(`Invalid time ${ ms }`);\n * }\n * })\n * )\n * .subscribe({\n * next: console.log,\n * error: console.error\n * });\n * ```\n *\n * @param errorFactory A factory function that will create the error instance that is pushed.\n */\nexport function throwError(errorFactory: () => any): Observable<never>;\n\n/**\n * Returns an observable that will error with the specified error immediately upon subscription.\n *\n * @param error The error instance to emit\n * @deprecated Support for passing an error value will be removed in v8. Instead, pass a factory function to `throwError(() => new Error('test'))`. This is\n * because it will create the error at the moment it should be created and capture a more appropriate stack trace. If\n * for some reason you need to create the error ahead of time, you can still do that: `const err = new Error('test'); throwError(() => err);`.\n */\nexport function throwError(error: any): Observable<never>;\n\n/**\n * Notifies the consumer of an error using a given scheduler by scheduling it at delay `0` upon subscription.\n *\n * @param errorOrErrorFactory An error instance or error factory\n * @param scheduler A scheduler to use to schedule the error notification\n * @deprecated The `scheduler` parameter will be removed in v8.\n * Use `throwError` in combination with {@link observeOn}: `throwError(() => new Error('test')).pipe(observeOn(scheduler));`.\n * Details: https://rxjs.dev/deprecations/scheduler-argument\n */\nexport function throwError(errorOrErrorFactory: any, scheduler: SchedulerLike): Observable<never>;\n\nexport function throwError(errorOrErrorFactory: any, scheduler?: SchedulerLike): Observable<never> {\n const errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : () => errorOrErrorFactory;\n const init = (subscriber: Subscriber<never>) => subscriber.error(errorFactory());\n return new Observable(scheduler ? (subscriber) => scheduler.schedule(init as any, 0, subscriber) : init);\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface EmptyError extends Error {}\n\nexport interface EmptyErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): EmptyError;\n}\n\n/**\n * An error thrown when an Observable or a sequence was queried but has no\n * elements.\n *\n * @see {@link first}\n * @see {@link last}\n * @see {@link single}\n * @see {@link firstValueFrom}\n * @see {@link lastValueFrom}\n *\n * @class EmptyError\n */\nexport const EmptyError: EmptyErrorCtor = createErrorClass((_super) => function EmptyErrorImpl(this: any) {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n});\n", "import { Observable } from './Observable';\nimport { EmptyError } from './util/EmptyError';\n\nexport interface LastValueFromConfig<T> {\n defaultValue: T;\n}\n\nexport function lastValueFrom<T, D>(source: Observable<T>, config: LastValueFromConfig<D>): Promise<T | D>;\nexport function lastValueFrom<T>(source: Observable<T>): Promise<T>;\n\n/**\n * Converts an observable to a promise by subscribing to the observable,\n * waiting for it to complete, and resolving the returned promise with the\n * last value from the observed stream.\n *\n * If the observable stream completes before any values were emitted, the\n * returned promise will reject with {@link EmptyError} or will resolve\n * with the default value if a default was specified.\n *\n * If the observable stream emits an error, the returned promise will reject\n * with that error.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * ## Example\n *\n * Wait for the last value from a stream and emit it from a promise in\n * an async function\n *\n * ```ts\n * import { interval, take, lastValueFrom } from 'rxjs';\n *\n * async function execute() {\n * const source$ = interval(2000).pipe(take(10));\n * const finalNumber = await lastValueFrom(source$);\n * console.log(`The final number is ${ finalNumber }`);\n * }\n *\n * execute();\n *\n * // Expected output:\n * // 'The final number is 9'\n * ```\n *\n * @see {@link firstValueFrom}\n *\n * @param source the observable to convert to a promise\n * @param config a configuration object to define the `defaultValue` to use if the source completes without emitting a value\n */\nexport function lastValueFrom<T, D>(source: Observable<T>, config?: LastValueFromConfig<D>): Promise<T | D> {\n const hasConfig = typeof config === 'object';\n return new Promise<T | D>((resolve, reject) => {\n let _hasValue = false;\n let _value: T;\n source.subscribe({\n next: (value) => {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: () => {\n if (_hasValue) {\n resolve(_value);\n } else if (hasConfig) {\n resolve(config!.defaultValue);\n } else {\n reject(new EmptyError());\n }\n },\n });\n });\n}\n", "import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\nexport function map<T, R>(project: (value: T, index: number) => R): OperatorFunction<T, R>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function map<T, R, A>(project: (this: A, value: T, index: number) => R, thisArg: A): OperatorFunction<T, R>;\n\n/**\n * Applies a given `project` function to each value emitted by the source\n * Observable, and emits the resulting values as an Observable.\n *\n * <span class=\"informal\">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),\n * it passes each source value through a transformation function to get\n * corresponding output values.</span>\n *\n * ![](map.png)\n *\n * Similar to the well known `Array.prototype.map` function, this operator\n * applies a projection to each value and emits that projection in the output\n * Observable.\n *\n * ## Example\n *\n * Map every click to the `clientX` position of that click\n *\n * ```ts\n * import { fromEvent, map } from 'rxjs';\n *\n * const clicks = fromEvent<PointerEvent>(document, 'click');\n * const positions = clicks.pipe(map(ev => ev.clientX));\n *\n * positions.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link mapTo}\n * @see {@link pluck}\n *\n * @param {function(value: T, index: number): R} project The function to apply\n * to each `value` emitted by the source Observable. The `index` parameter is\n * the number `i` for the i-th emission that has happened since the\n * subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to define what `this` is in the\n * `project` function.\n * @return A function that returns an Observable that emits the values from the\n * source Observable transformed by the given `project` function.\n */\nexport function map<T, R>(project: (value: T, index: number) => R, thisArg?: any): OperatorFunction<T, R> {\n return operate((source, subscriber) => {\n // The index of the value from the source. Used with projection.\n let index = 0;\n // Subscribe to the source, all errors and completions are sent along\n // to the consumer.\n source.subscribe(\n createOperatorSubscriber(subscriber, (value: T) => {\n // Call the projection function with the appropriate this context,\n // and send the resulting value to the consumer.\n subscriber.next(project.call(thisArg, value, index++));\n })\n );\n });\n}\n", "import { Observable } from '../Observable';\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subscriber } from '../Subscriber';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * A process embodying the general \"merge\" strategy. This is used in\n * `mergeMap` and `mergeScan` because the logic is otherwise nearly identical.\n * @param source The original source observable\n * @param subscriber The consumer subscriber\n * @param project The projection function to get our inner sources\n * @param concurrent The number of concurrent inner subscriptions\n * @param onBeforeNext Additional logic to apply before nexting to our consumer\n * @param expand If `true` this will perform an \"expand\" strategy, which differs only\n * in that it recurses, and the inner subscription must be schedule-able.\n * @param innerSubScheduler A scheduler to use to schedule inner subscriptions,\n * this is to support the expand strategy, mostly, and should be deprecated\n */\nexport function mergeInternals<T, R>(\n source: Observable<T>,\n subscriber: Subscriber<R>,\n project: (value: T, index: number) => ObservableInput<R>,\n concurrent: number,\n onBeforeNext?: (innerValue: R) => void,\n expand?: boolean,\n innerSubScheduler?: SchedulerLike,\n additionalFinalizer?: () => void\n) {\n // Buffered values, in the event of going over our concurrency limit\n const buffer: T[] = [];\n // The number of active inner subscriptions.\n let active = 0;\n // An index to pass to our accumulator function\n let index = 0;\n // Whether or not the outer source has completed.\n let isComplete = false;\n\n /**\n * Checks to see if we can complete our result or not.\n */\n const checkComplete = () => {\n // If the outer has completed, and nothing is left in the buffer,\n // and we don't have any active inner subscriptions, then we can\n // Emit the state and complete.\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n\n // If we're under our concurrency limit, just start the inner subscription, otherwise buffer and wait.\n const outerNext = (value: T) => (active < concurrent ? doInnerSub(value) : buffer.push(value));\n\n const doInnerSub = (value: T) => {\n // If we're expanding, we need to emit the outer values and the inner values\n // as the inners will \"become outers\" in a way as they are recursively fed\n // back to the projection mechanism.\n expand && subscriber.next(value as any);\n\n // Increment the number of active subscriptions so we can track it\n // against our concurrency limit later.\n active++;\n\n // A flag used to show that the inner observable completed.\n // This is checked during finalization to see if we should\n // move to the next item in the buffer, if there is on.\n let innerComplete = false;\n\n // Start our inner subscription.\n innerFrom(project(value, index++)).subscribe(\n createOperatorSubscriber(\n subscriber,\n (innerValue) => {\n // `mergeScan` has additional handling here. For example\n // taking the inner value and updating state.\n onBeforeNext?.(innerValue);\n\n if (expand) {\n // If we're expanding, then just recurse back to our outer\n // handler. It will emit the value first thing.\n outerNext(innerValue as any);\n } else {\n // Otherwise, emit the inner value.\n subscriber.next(innerValue);\n }\n },\n () => {\n // Flag that we have completed, so we know to check the buffer\n // during finalization.\n innerComplete = true;\n },\n // Errors are passed to the destination.\n undefined,\n () => {\n // During finalization, if the inner completed (it wasn't errored or\n // cancelled), then we want to try the next item in the buffer if\n // there is one.\n if (innerComplete) {\n // We have to wrap this in a try/catch because it happens during\n // finalization, possibly asynchronously, and we want to pass\n // any errors that happen (like in a projection function) to\n // the outer Subscriber.\n try {\n // INNER SOURCE COMPLETE\n // Decrement the active count to ensure that the next time\n // we try to call `doInnerSub`, the number is accurate.\n active--;\n // If we have more values in the buffer, try to process those\n // Note that this call will increment `active` ahead of the\n // next conditional, if there were any more inner subscriptions\n // to start.\n while (buffer.length && active < concurrent) {\n const bufferedValue = buffer.shift()!;\n // Particularly for `expand`, we need to check to see if a scheduler was provided\n // for when we want to start our inner subscription. Otherwise, we just start\n // are next inner subscription.\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));\n } else {\n doInnerSub(bufferedValue);\n }\n }\n // Check to see if we can complete, and complete if so.\n checkComplete();\n } catch (err) {\n subscriber.error(err);\n }\n }\n }\n )\n );\n };\n\n // Subscribe to our source observable.\n source.subscribe(\n createOperatorSubscriber(subscriber, outerNext, () => {\n // Outer completed, make a note of it, and check to see if we can complete everything.\n isComplete = true;\n checkComplete();\n })\n );\n\n // Additional finalization (for when the destination is torn down).\n // Other finalization is added implicitly via subscription above.\n return () => {\n additionalFinalizer?.();\n };\n}\n", "import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function mergeMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n concurrent?: number\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: undefined,\n concurrent?: number\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R,\n concurrent?: number\n): OperatorFunction<T, R>;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link mergeAll}.</span>\n *\n * ![](mergeMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger.\n *\n * ## Example\n *\n * Map and flatten each letter to an Observable ticking every 1 second\n *\n * ```ts\n * import { of, mergeMap, interval, map } from 'rxjs';\n *\n * const letters = of('a', 'b', 'c');\n * const result = letters.pipe(\n * mergeMap(x => interval(1000).pipe(map(i => x + i)))\n * );\n *\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // a0\n * // b0\n * // c0\n * // a1\n * // b1\n * // c1\n * // continues to list a, b, c every second with respective ascending integers\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and merging\n * the results of the Observables obtained from this transformation.\n */\nexport function mergeMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector?: ((outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R) | number,\n concurrent: number = Infinity\n): OperatorFunction<T, ObservedValueOf<O> | R> {\n if (isFunction(resultSelector)) {\n // DEPRECATED PATH\n return mergeMap((a, i) => map((b: any, ii: number) => resultSelector(a, b, i, ii))(innerFrom(project(a, i))), concurrent);\n } else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n\n return operate((source, subscriber) => mergeInternals(source, subscriber, project, concurrent));\n}\n", "import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nimport { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\n\n/**\n * Converts a higher-order Observable into a first-order Observable which\n * concurrently delivers all values that are emitted on the inner Observables.\n *\n * <span class=\"informal\">Flattens an Observable-of-Observables.</span>\n *\n * ![](mergeAll.png)\n *\n * `mergeAll` subscribes to an Observable that emits Observables, also known as\n * a higher-order Observable. Each time it observes one of these emitted inner\n * Observables, it subscribes to that and delivers all the values from the\n * inner Observable on the output Observable. The output Observable only\n * completes once all inner Observables have completed. Any error delivered by\n * a inner Observable will be immediately emitted on the output Observable.\n *\n * ## Examples\n *\n * Spawn a new interval Observable for each click event, and blend their outputs as one Observable\n *\n * ```ts\n * import { fromEvent, map, interval, mergeAll } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(map(() => interval(1000)));\n * const firstOrder = higherOrder.pipe(mergeAll());\n *\n * firstOrder.subscribe(x => console.log(x));\n * ```\n *\n * Count from 0 to 9 every second for each click, but only allow 2 concurrent timers\n *\n * ```ts\n * import { fromEvent, map, interval, take, mergeAll } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map(() => interval(1000).pipe(take(10)))\n * );\n * const firstOrder = higherOrder.pipe(mergeAll(2));\n *\n * firstOrder.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concatAll}\n * @see {@link exhaustAll}\n * @see {@link merge}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link zipAll}\n *\n * @param {number} [concurrent=Infinity] Maximum number of inner\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits values coming from\n * all the inner Observables emitted by the source Observable.\n */\nexport function mergeAll<O extends ObservableInput<any>>(concurrent: number = Infinity): OperatorFunction<O, ObservedValueOf<O>> {\n return mergeMap(identity, concurrent);\n}\n", "import { Observable } from '../Observable';\nimport { ObservedValueOf, ObservableInput } from '../types';\nimport { innerFrom } from './innerFrom';\n\n/**\n * Creates an Observable that, on subscribe, calls an Observable factory to\n * make an Observable for each new Observer.\n *\n * <span class=\"informal\">Creates the Observable lazily, that is, only when it\n * is subscribed.\n * </span>\n *\n * ![](defer.png)\n *\n * `defer` allows you to create an Observable only when the Observer\n * subscribes. It waits until an Observer subscribes to it, calls the given\n * factory function to get an Observable -- where a factory function typically\n * generates a new Observable -- and subscribes the Observer to this Observable.\n * In case the factory function returns a falsy value, then EMPTY is used as\n * Observable instead. Last but not least, an exception during the factory\n * function call is transferred to the Observer by calling `error`.\n *\n * ## Example\n *\n * Subscribe to either an Observable of clicks or an Observable of interval, at random\n *\n * ```ts\n * import { defer, fromEvent, interval } from 'rxjs';\n *\n * const clicksOrInterval = defer(() => {\n * return Math.random() > 0.5\n * ? fromEvent(document, 'click')\n * : interval(1000);\n * });\n * clicksOrInterval.subscribe(x => console.log(x));\n *\n * // Results in the following behavior:\n * // If the result of Math.random() is greater than 0.5 it will listen\n * // for clicks anywhere on the \"document\"; when document is clicked it\n * // will log a MouseEvent object to the console. If the result is less\n * // than 0.5 it will emit ascending numbers, one every second(1000ms).\n * ```\n *\n * @see {@link Observable}\n *\n * @param {function(): ObservableInput} observableFactory The Observable\n * factory function to invoke for each Observer that subscribes to the output\n * Observable. May also return a Promise, which will be converted on the fly\n * to an Observable.\n * @return {Observable} An Observable whose Observers' subscriptions trigger\n * an invocation of the given Observable factory function.\n */\nexport function defer<R extends ObservableInput<any>>(observableFactory: () => R): Observable<ObservedValueOf<R>> {\n return new Observable<ObservedValueOf<R>>((subscriber) => {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n", "import { Observable } from '../Observable';\n\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { Subscription } from '../Subscription';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\n\n/* tslint:disable:max-line-length */\nexport function catchError<T, O extends ObservableInput<any>>(\n selector: (err: any, caught: Observable<T>) => O\n): OperatorFunction<T, T | ObservedValueOf<O>>;\n/* tslint:enable:max-line-length */\n\n/**\n * Catches errors on the observable to be handled by returning a new observable or throwing an error.\n *\n * <span class=\"informal\">\n * It only listens to the error channel and ignores notifications.\n * Handles errors from the source observable, and maps them to a new observable.\n * The error may also be rethrown, or a new error can be thrown to emit an error from the result.\n * </span>\n *\n * ![](catch.png)\n *\n * This operator handles errors, but forwards along all other events to the resulting observable.\n * If the source observable terminates with an error, it will map that error to a new observable,\n * subscribe to it, and forward all of its events to the resulting observable.\n *\n * ## Examples\n *\n * Continue with a different Observable when there's an error\n *\n * ```ts\n * import { of, map, catchError } from 'rxjs';\n *\n * of(1, 2, 3, 4, 5)\n * .pipe(\n * map(n => {\n * if (n === 4) {\n * throw 'four!';\n * }\n * return n;\n * }),\n * catchError(err => of('I', 'II', 'III', 'IV', 'V'))\n * )\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, I, II, III, IV, V\n * ```\n *\n * Retry the caught source Observable again in case of error, similar to `retry()` operator\n *\n * ```ts\n * import { of, map, catchError, take } from 'rxjs';\n *\n * of(1, 2, 3, 4, 5)\n * .pipe(\n * map(n => {\n * if (n === 4) {\n * throw 'four!';\n * }\n * return n;\n * }),\n * catchError((err, caught) => caught),\n * take(30)\n * )\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, 1, 2, 3, ...\n * ```\n *\n * Throw a new error when the source Observable throws an error\n *\n * ```ts\n * import { of, map, catchError } from 'rxjs';\n *\n * of(1, 2, 3, 4, 5)\n * .pipe(\n * map(n => {\n * if (n === 4) {\n * throw 'four!';\n * }\n * return n;\n * }),\n * catchError(err => {\n * throw 'error in source. Details: ' + err;\n * })\n * )\n * .subscribe({\n * next: x => console.log(x),\n * error: err => console.log(err)\n * });\n * // 1, 2, 3, error in source. Details: four!\n * ```\n *\n * @see {@link onErrorResumeNext}\n * @see {@link repeat}\n * @see {@link repeatWhen}\n * @see {@link retry }\n * @see {@link retryWhen}\n *\n * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which\n * is the source observable, in case you'd like to \"retry\" that observable by returning it again. Whatever observable\n * is returned by the `selector` will be used to continue the observable chain.\n * @return A function that returns an Observable that originates from either\n * the source or the Observable returned by the `selector` function.\n */\nexport function catchError<T, O extends ObservableInput<any>>(\n selector: (err: any, caught: Observable<T>) => O\n): OperatorFunction<T, T | ObservedValueOf<O>> {\n return operate((source, subscriber) => {\n let innerSub: Subscription | null = null;\n let syncUnsub = false;\n let handledResult: Observable<ObservedValueOf<O>>;\n\n innerSub = source.subscribe(\n createOperatorSubscriber(subscriber, undefined, undefined, (err) => {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n } else {\n // We don't have an innerSub yet, that means the error was synchronous\n // because the subscribe call hasn't returned yet.\n syncUnsub = true;\n }\n })\n );\n\n if (syncUnsub) {\n // We have a synchronous error, we need to make sure to\n // finalize right away. This ensures that callbacks in the `finalize` operator are called\n // at the right time, and that finalization occurs at the expected\n // time between the source error and the subscription to the\n // next observable.\n innerSub.unsubscribe();\n innerSub = null;\n handledResult!.subscribe(subscriber);\n }\n });\n}\n", "import { mergeMap } from './mergeMap';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function concatMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: undefined\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R\n): OperatorFunction<T, R>;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, in a serialized fashion waiting for each one to complete before\n * merging the next.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link concatAll}.</span>\n *\n * ![](concatMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each new inner Observable is\n * concatenated with the previous inner Observable.\n *\n * __Warning:__ if source values arrive endlessly and faster than their\n * corresponding inner Observables can complete, it will result in memory issues\n * as inner Observables amass in an unbounded buffer waiting for their turn to\n * be subscribed to.\n *\n * Note: `concatMap` is equivalent to `mergeMap` with concurrency parameter set\n * to `1`.\n *\n * ## Example\n *\n * For each click event, tick every second from 0 to 3, with no concurrency\n *\n * ```ts\n * import { fromEvent, concatMap, interval, take } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * concatMap(ev => interval(1000).pipe(take(4)))\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n * ```\n *\n * @see {@link concat}\n * @see {@link concatAll}\n * @see {@link concatMapTo}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and taking\n * values from each projected inner Observable sequentially.\n */\nexport function concatMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R\n): OperatorFunction<T, ObservedValueOf<O> | R> {\n return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);\n}\n", "import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits a given value if the source Observable completes without emitting any\n * `next` value, otherwise mirrors the source Observable.\n *\n * <span class=\"informal\">If the source Observable turns out to be empty, then\n * this operator will emit a default value.</span>\n *\n * ![](defaultIfEmpty.png)\n *\n * `defaultIfEmpty` emits the values emitted by the source Observable or a\n * specified default value if the source Observable is empty (completes without\n * having emitted any `next` value).\n *\n * ## Example\n *\n * If no clicks happen in 5 seconds, then emit 'no clicks'\n *\n * ```ts\n * import { fromEvent, takeUntil, interval, defaultIfEmpty } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const clicksBeforeFive = clicks.pipe(takeUntil(interval(5000)));\n * const result = clicksBeforeFive.pipe(defaultIfEmpty('no clicks'));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link empty}\n * @see {@link last}\n *\n * @param defaultValue The default value used if the source\n * Observable is empty.\n * @return A function that returns an Observable that emits either the\n * specified `defaultValue` if the source Observable emits no items, or the\n * values emitted by the source Observable.\n */\nexport function defaultIfEmpty<T, R>(defaultValue: R): OperatorFunction<T, T | R> {\n return operate((source, subscriber) => {\n let hasValue = false;\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n hasValue = true;\n subscriber.next(value);\n },\n () => {\n if (!hasValue) {\n subscriber.next(defaultValue!);\n }\n subscriber.complete();\n }\n )\n );\n });\n}\n", "import { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\n\n/**\n * Returns an Observable that mirrors the source Observable, but will call a specified function when\n * the source terminates on complete or error.\n * The specified function will also be called when the subscriber explicitly unsubscribes.\n *\n * ## Examples\n *\n * Execute callback function when the observable completes\n *\n * ```ts\n * import { interval, take, finalize } from 'rxjs';\n *\n * // emit value in sequence every 1 second\n * const source = interval(1000);\n * const example = source.pipe(\n * take(5), //take only the first 5 values\n * finalize(() => console.log('Sequence complete')) // Execute when the observable completes\n * );\n * const subscribe = example.subscribe(val => console.log(val));\n *\n * // results:\n * // 0\n * // 1\n * // 2\n * // 3\n * // 4\n * // 'Sequence complete'\n * ```\n *\n * Execute callback function when the subscriber explicitly unsubscribes\n *\n * ```ts\n * import { interval, finalize, tap, noop, timer } from 'rxjs';\n *\n * const source = interval(100).pipe(\n * finalize(() => console.log('[finalize] Called')),\n * tap({\n * next: () => console.log('[next] Called'),\n * error: () => console.log('[error] Not called'),\n * complete: () => console.log('[tap complete] Not called')\n * })\n * );\n *\n * const sub = source.subscribe({\n * next: x => console.log(x),\n * error: noop,\n * complete: () => console.log('[complete] Not called')\n * });\n *\n * timer(150).subscribe(() => sub.unsubscribe());\n *\n * // results:\n * // '[next] Called'\n * // 0\n * // '[finalize] Called'\n * ```\n *\n * @param {function} callback Function to be called when source terminates.\n * @return A function that returns an Observable that mirrors the source, but\n * will call the specified function on termination.\n */\nexport function finalize<T>(callback: () => void): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n // TODO: This try/finally was only added for `useDeprecatedSynchronousErrorHandling`.\n // REMOVE THIS WHEN THAT HOT GARBAGE IS REMOVED IN V8.\n try {\n source.subscribe(subscriber);\n } finally {\n subscriber.add(callback);\n }\n });\n}\n", "import { Subscriber } from '../Subscriber';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/* tslint:disable:max-line-length */\nexport function switchMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: undefined\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R\n): OperatorFunction<T, R>;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, emitting values only from the most recently projected Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link switchAll}.</span>\n *\n * ![](switchMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each time it observes one of these\n * inner Observables, the output Observable begins emitting the items emitted by\n * that inner Observable. When a new inner Observable is emitted, `switchMap`\n * stops emitting items from the earlier-emitted inner Observable and begins\n * emitting items from the new one. It continues to behave like this for\n * subsequent inner Observables.\n *\n * ## Example\n *\n * Generate new Observable according to source Observable values\n *\n * ```ts\n * import { of, switchMap } from 'rxjs';\n *\n * const switched = of(1, 2, 3).pipe(switchMap(x => of(x, x ** 2, x ** 3)));\n * switched.subscribe(x => console.log(x));\n * // outputs\n * // 1\n * // 1\n * // 1\n * // 2\n * // 4\n * // 8\n * // 3\n * // 9\n * // 27\n * ```\n *\n * Restart an interval Observable on every click event\n *\n * ```ts\n * import { fromEvent, switchMap, interval } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(switchMap(() => interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switchAll}\n * @see {@link switchMapTo}\n *\n * @param {function(value: T, index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and taking\n * only the values from the most recently projected inner Observable.\n */\nexport function switchMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R\n): OperatorFunction<T, ObservedValueOf<O> | R> {\n return operate((source, subscriber) => {\n let innerSubscriber: Subscriber<ObservedValueOf<O>> | null = null;\n let index = 0;\n // Whether or not the source subscription has completed\n let isComplete = false;\n\n // We only complete the result if the source is complete AND we don't have an active inner subscription.\n // This is called both when the source completes and when the inners complete.\n const checkComplete = () => isComplete && !innerSubscriber && subscriber.complete();\n\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n // Cancel the previous inner subscription if there was one\n innerSubscriber?.unsubscribe();\n let innerIndex = 0;\n const outerIndex = index++;\n // Start the next inner subscription\n innerFrom(project(value, outerIndex)).subscribe(\n (innerSubscriber = createOperatorSubscriber(\n subscriber,\n // When we get a new inner value, next it through. Note that this is\n // handling the deprecate result selector here. This is because with this architecture\n // it ends up being smaller than using the map operator.\n (innerValue) => subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue),\n () => {\n // The inner has completed. Null out the inner subscriber to\n // free up memory and to signal that we have no inner subscription\n // currently.\n innerSubscriber = null!;\n checkComplete();\n }\n ))\n );\n },\n () => {\n isComplete = true;\n checkComplete();\n }\n )\n );\n });\n}\n", "import { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\n\n/**\n * Emits the values emitted by the source Observable until a `notifier`\n * Observable emits a value.\n *\n * <span class=\"informal\">Lets values pass until a second Observable,\n * `notifier`, emits a value. Then, it completes.</span>\n *\n * ![](takeUntil.png)\n *\n * `takeUntil` subscribes and begins mirroring the source Observable. It also\n * monitors a second Observable, `notifier` that you provide. If the `notifier`\n * emits a value, the output Observable stops mirroring the source Observable\n * and completes. If the `notifier` doesn't emit any value and completes\n * then `takeUntil` will pass all values.\n *\n * ## Example\n *\n * Tick every second until the first click happens\n *\n * ```ts\n * import { interval, fromEvent, takeUntil } from 'rxjs';\n *\n * const source = interval(1000);\n * const clicks = fromEvent(document, 'click');\n * const result = source.pipe(takeUntil(clicks));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link take}\n * @see {@link takeLast}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param {Observable} notifier The Observable whose first emitted value will\n * cause the output Observable of `takeUntil` to stop emitting values from the\n * source Observable.\n * @return A function that returns an Observable that emits the values from the\n * source Observable until `notifier` emits its first value.\n */\nexport function takeUntil<T>(notifier: ObservableInput<any>): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, () => subscriber.complete(), noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n", "import { MonoTypeOperatorFunction, Observer } from '../types';\nimport { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\n\n/**\n * An extension to the {@link Observer} interface used only by the {@link tap} operator.\n *\n * It provides a useful set of callbacks a user can register to do side-effects in\n * cases other than what the usual {@link Observer} callbacks are\n * ({@link guide/glossary-and-semantics#next next},\n * {@link guide/glossary-and-semantics#error error} and/or\n * {@link guide/glossary-and-semantics#complete complete}).\n *\n * ## Example\n *\n * ```ts\n * import { fromEvent, switchMap, tap, interval, take } from 'rxjs';\n *\n * const source$ = fromEvent(document, 'click');\n * const result$ = source$.pipe(\n * switchMap((_, i) => i % 2 === 0\n * ? fromEvent(document, 'mousemove').pipe(\n * tap({\n * subscribe: () => console.log('Subscribed to the mouse move events after click #' + i),\n * unsubscribe: () => console.log('Mouse move events #' + i + ' unsubscribed'),\n * finalize: () => console.log('Mouse move events #' + i + ' finalized')\n * })\n * )\n * : interval(1_000).pipe(\n * take(5),\n * tap({\n * subscribe: () => console.log('Subscribed to the 1-second interval events after click #' + i),\n * unsubscribe: () => console.log('1-second interval events #' + i + ' unsubscribed'),\n * finalize: () => console.log('1-second interval events #' + i + ' finalized')\n * })\n * )\n * )\n * );\n *\n * const subscription = result$.subscribe({\n * next: console.log\n * });\n *\n * setTimeout(() => {\n * console.log('Unsubscribe after 60 seconds');\n * subscription.unsubscribe();\n * }, 60_000);\n * ```\n */\nexport interface TapObserver<T> extends Observer<T> {\n /**\n * The callback that `tap` operator invokes at the moment when the source Observable\n * gets subscribed to.\n */\n subscribe: () => void;\n /**\n * The callback that `tap` operator invokes when an explicit\n * {@link guide/glossary-and-semantics#unsubscription unsubscribe} happens. It won't get invoked on\n * `error` or `complete` events.\n */\n unsubscribe: () => void;\n /**\n * The callback that `tap` operator invokes when any kind of\n * {@link guide/glossary-and-semantics#finalization finalization} happens - either when\n * the source Observable `error`s or `complete`s or when it gets explicitly unsubscribed\n * by the user. There is no difference in using this callback or the {@link finalize}\n * operator, but if you're already using `tap` operator, you can use this callback\n * instead. You'd get the same result in either case.\n */\n finalize: () => void;\n}\nexport function tap<T>(observerOrNext?: Partial<TapObserver<T>> | ((value: T) => void)): MonoTypeOperatorFunction<T>;\n/** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\nexport function tap<T>(\n next?: ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n): MonoTypeOperatorFunction<T>;\n\n/**\n * Used to perform side-effects for notifications from the source observable\n *\n * <span class=\"informal\">Used when you want to affect outside state with a notification without altering the notification</span>\n *\n * ![](tap.png)\n *\n * Tap is designed to allow the developer a designated place to perform side effects. While you _could_ perform side-effects\n * inside of a `map` or a `mergeMap`, that would make their mapping functions impure, which isn't always a big deal, but will\n * make it so you can't do things like memoize those functions. The `tap` operator is designed solely for such side-effects to\n * help you remove side-effects from other operations.\n *\n * For any notification, next, error, or complete, `tap` will call the appropriate callback you have provided to it, via a function\n * reference, or a partial observer, then pass that notification down the stream.\n *\n * The observable returned by `tap` is an exact mirror of the source, with one exception: Any error that occurs -- synchronously -- in a handler\n * provided to `tap` will be emitted as an error from the returned observable.\n *\n * > Be careful! You can mutate objects as they pass through the `tap` operator's handlers.\n *\n * The most common use of `tap` is actually for debugging. You can place a `tap(console.log)` anywhere\n * in your observable `pipe`, log out the notifications as they are emitted by the source returned by the previous\n * operation.\n *\n * ## Examples\n *\n * Check a random number before it is handled. Below is an observable that will use a random number between 0 and 1,\n * and emit `'big'` or `'small'` depending on the size of that number. But we wanted to log what the original number\n * was, so we have added a `tap(console.log)`.\n *\n * ```ts\n * import { of, tap, map } from 'rxjs';\n *\n * of(Math.random()).pipe(\n * tap(console.log),\n * map(n => n > 0.5 ? 'big' : 'small')\n * ).subscribe(console.log);\n * ```\n *\n * Using `tap` to analyze a value and force an error. Below is an observable where in our system we only\n * want to emit numbers 3 or less we get from another source. We can force our observable to error\n * using `tap`.\n *\n * ```ts\n * import { of, tap } from 'rxjs';\n *\n * const source = of(1, 2, 3, 4, 5);\n *\n * source.pipe(\n * tap(n => {\n * if (n > 3) {\n * throw new TypeError(`Value ${ n } is greater than 3`);\n * }\n * })\n * )\n * .subscribe({ next: console.log, error: err => console.log(err.message) });\n * ```\n *\n * We want to know when an observable completes before moving on to the next observable. The system\n * below will emit a random series of `'X'` characters from 3 different observables in sequence. The\n * only way we know when one observable completes and moves to the next one, in this case, is because\n * we have added a `tap` with the side effect of logging to console.\n *\n * ```ts\n * import { of, concatMap, interval, take, map, tap } from 'rxjs';\n *\n * of(1, 2, 3).pipe(\n * concatMap(n => interval(1000).pipe(\n * take(Math.round(Math.random() * 10)),\n * map(() => 'X'),\n * tap({ complete: () => console.log(`Done with ${ n }`) })\n * ))\n * )\n * .subscribe(console.log);\n * ```\n *\n * @see {@link finalize}\n * @see {@link TapObserver}\n *\n * @param observerOrNext A next handler or partial observer\n * @param error An error handler\n * @param complete A completion handler\n * @return A function that returns an Observable identical to the source, but\n * runs the specified Observer or callback(s) for each item.\n */\nexport function tap<T>(\n observerOrNext?: Partial<TapObserver<T>> | ((value: T) => void) | null,\n error?: ((e: any) => void) | null,\n complete?: (() => void) | null\n): MonoTypeOperatorFunction<T> {\n // We have to check to see not only if next is a function,\n // but if error or complete were passed. This is because someone\n // could technically call tap like `tap(null, fn)` or `tap(null, null, fn)`.\n const tapObserver =\n isFunction(observerOrNext) || error || complete\n ? // tslint:disable-next-line: no-object-literal-type-assertion\n ({ next: observerOrNext as Exclude<typeof observerOrNext, Partial<TapObserver<T>>>, error, complete } as Partial<TapObserver<T>>)\n : observerOrNext;\n\n return tapObserver\n ? operate((source, subscriber) => {\n tapObserver.subscribe?.();\n let isUnsub = true;\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n tapObserver.next?.(value);\n subscriber.next(value);\n },\n () => {\n isUnsub = false;\n tapObserver.complete?.();\n subscriber.complete();\n },\n (err) => {\n isUnsub = false;\n tapObserver.error?.(err);\n subscriber.error(err);\n },\n () => {\n if (isUnsub) {\n tapObserver.unsubscribe?.();\n }\n tapObserver.finalize?.();\n }\n )\n );\n })\n : // Tap was called with no valid tap observer or handler\n // (e.g. `tap(null, null, null)` or `tap(null)` or `tap()`)\n // so we're going to just mirror the source.\n identity;\n}\n", "const enum ContextType {\n TOP_LEVEL = \"topLevel\",\n STRING = \"string\",\n STRING_ESCAPED = \"stringEscaped\",\n STRING_UNICODE = \"stringUnicode\",\n NUMBER = \"number\",\n NUMBER_NEEDS_DIGIT = \"numberNeedsDigit\",\n NUMBER_NEEDS_EXPONENT = \"numberNeedsExponent\",\n TRUE = \"true\",\n FALSE = \"false\",\n NULL = \"null\",\n ARRAY_NEEDS_VALUE = \"arrayNeedsValue\",\n ARRAY_NEEDS_COMMA = \"arrayNeedsComma\",\n OBJECT_NEEDS_KEY = \"objectNeedsKey\",\n OBJECT_NEEDS_COLON = \"objectNeedsColon\",\n OBJECT_NEEDS_VALUE = \"objectNeedsValue\",\n OBJECT_NEEDS_COMMA = \"objectNeedsComma\",\n}\n\nconst enum RespawnReason {\n STRING_ESCAPE = \"stringEscape\",\n COLLECTION_ITEM = \"collectionItem\",\n}\n\nfunction isWhitespace(char: string): boolean {\n return \"\\u0020\\u000D\\u000A\\u0009\".indexOf(char) >= 0;\n}\n\nexport default function untruncateJson(json: string): string {\n const contextStack: ContextType[] = [ContextType.TOP_LEVEL];\n let position = 0;\n let respawnPosition: number | undefined;\n let respawnStackLength: number | undefined;\n let respawnReason: RespawnReason | undefined;\n\n const push = (context: ContextType) => contextStack.push(context);\n const replace = (context: ContextType) =>\n (contextStack[contextStack.length - 1] = context);\n const setRespawn = (reason: RespawnReason) => {\n if (respawnPosition == null) {\n respawnPosition = position;\n respawnStackLength = contextStack.length;\n respawnReason = reason;\n }\n };\n const clearRespawn = (reason: RespawnReason) => {\n if (reason === respawnReason) {\n respawnPosition = undefined;\n respawnStackLength = undefined;\n respawnReason = undefined;\n }\n };\n const pop = () => contextStack.pop();\n const dontConsumeCharacter = () => position--;\n\n const startAny = (char: string) => {\n if (\"0\" <= char && char <= \"9\") {\n push(ContextType.NUMBER);\n return;\n }\n switch (char) {\n case '\"':\n push(ContextType.STRING);\n return;\n case \"-\":\n push(ContextType.NUMBER_NEEDS_DIGIT);\n return;\n case \"t\":\n push(ContextType.TRUE);\n return;\n case \"f\":\n push(ContextType.FALSE);\n return;\n case \"n\":\n push(ContextType.NULL);\n return;\n case \"[\":\n push(ContextType.ARRAY_NEEDS_VALUE);\n return;\n case \"{\":\n push(ContextType.OBJECT_NEEDS_KEY);\n return;\n }\n };\n\n for (const { length } = json; position < length; position++) {\n const char = json[position];\n switch (contextStack[contextStack.length - 1]) {\n case ContextType.TOP_LEVEL:\n startAny(char);\n break;\n case ContextType.STRING:\n switch (char) {\n case '\"':\n pop();\n break;\n case \"\\\\\":\n setRespawn(RespawnReason.STRING_ESCAPE);\n push(ContextType.STRING_ESCAPED);\n break;\n }\n break;\n case ContextType.STRING_ESCAPED:\n if (char === \"u\") {\n push(ContextType.STRING_UNICODE);\n } else {\n clearRespawn(RespawnReason.STRING_ESCAPE);\n pop();\n }\n break;\n case ContextType.STRING_UNICODE:\n if (position - json.lastIndexOf(\"u\", position) === 4) {\n clearRespawn(RespawnReason.STRING_ESCAPE);\n pop();\n }\n break;\n case ContextType.NUMBER:\n if (char === \".\") {\n replace(ContextType.NUMBER_NEEDS_DIGIT);\n } else if (char === \"e\" || char === \"E\") {\n replace(ContextType.NUMBER_NEEDS_EXPONENT);\n } else if (char < \"0\" || char > \"9\") {\n dontConsumeCharacter();\n pop();\n }\n break;\n case ContextType.NUMBER_NEEDS_DIGIT:\n replace(ContextType.NUMBER);\n break;\n case ContextType.NUMBER_NEEDS_EXPONENT:\n if (char === \"+\" || char === \"-\") {\n replace(ContextType.NUMBER_NEEDS_DIGIT);\n } else {\n replace(ContextType.NUMBER);\n }\n break;\n case ContextType.TRUE:\n case ContextType.FALSE:\n case ContextType.NULL:\n if (char < \"a\" || char > \"z\") {\n dontConsumeCharacter();\n pop();\n }\n break;\n case ContextType.ARRAY_NEEDS_VALUE:\n if (char === \"]\") {\n pop();\n } else if (!isWhitespace(char)) {\n clearRespawn(RespawnReason.COLLECTION_ITEM);\n replace(ContextType.ARRAY_NEEDS_COMMA);\n startAny(char);\n }\n break;\n case ContextType.ARRAY_NEEDS_COMMA:\n if (char === \"]\") {\n pop();\n } else if (char === \",\") {\n setRespawn(RespawnReason.COLLECTION_ITEM);\n replace(ContextType.ARRAY_NEEDS_VALUE);\n }\n break;\n case ContextType.OBJECT_NEEDS_KEY:\n if (char === \"}\") {\n pop();\n } else if (char === '\"') {\n setRespawn(RespawnReason.COLLECTION_ITEM);\n replace(ContextType.OBJECT_NEEDS_COLON);\n push(ContextType.STRING);\n }\n break;\n case ContextType.OBJECT_NEEDS_COLON:\n if (char === \":\") {\n replace(ContextType.OBJECT_NEEDS_VALUE);\n }\n break;\n case ContextType.OBJECT_NEEDS_VALUE:\n if (!isWhitespace(char)) {\n clearRespawn(RespawnReason.COLLECTION_ITEM);\n replace(ContextType.OBJECT_NEEDS_COMMA);\n startAny(char);\n }\n break;\n case ContextType.OBJECT_NEEDS_COMMA:\n if (char === \"}\") {\n pop();\n } else if (char === \",\") {\n setRespawn(RespawnReason.COLLECTION_ITEM);\n replace(ContextType.OBJECT_NEEDS_KEY);\n }\n break;\n }\n }\n\n if (respawnStackLength != null) {\n contextStack.length = respawnStackLength;\n }\n const result = [\n respawnPosition != null ? json.slice(0, respawnPosition) : json,\n ];\n const finishWord = (word: string) =>\n result.push(word.slice(json.length - json.lastIndexOf(word[0])));\n for (let i = contextStack.length - 1; i >= 0; i--) {\n switch (contextStack[i]) {\n case ContextType.STRING:\n result.push('\"');\n break;\n case ContextType.NUMBER_NEEDS_DIGIT:\n case ContextType.NUMBER_NEEDS_EXPONENT:\n result.push(\"0\");\n break;\n case ContextType.TRUE:\n finishWord(\"true\");\n break;\n case ContextType.FALSE:\n finishWord(\"false\");\n break;\n case ContextType.NULL:\n finishWord(\"null\");\n break;\n case ContextType.ARRAY_NEEDS_VALUE:\n case ContextType.ARRAY_NEEDS_COMMA:\n result.push(\"]\");\n break;\n case ContextType.OBJECT_NEEDS_KEY:\n case ContextType.OBJECT_NEEDS_COLON:\n case ContextType.OBJECT_NEEDS_VALUE:\n case ContextType.OBJECT_NEEDS_COMMA:\n result.push(\"}\");\n break;\n }\n }\n return result.join(\"\");\n}\n", "// Copyright 2008 Google Inc. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Code generated by the Protocol Buffer compiler is owned by the owner\n// of the input file used when generating it. This code is not\n// standalone and requires a support library to be linked with it. This\n// support library is itself covered by the above license.\n/**\n * Read a 64 bit varint as two JS numbers.\n *\n * Returns tuple:\n * [0]: low bits\n * [1]: high bits\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175\n */\nexport function varint64read() {\n let lowBits = 0;\n let highBits = 0;\n for (let shift = 0; shift < 28; shift += 7) {\n let b = this.buf[this.pos++];\n lowBits |= (b & 0x7f) << shift;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n let middleByte = this.buf[this.pos++];\n // last four bits of the first 32 bit number\n lowBits |= (middleByte & 0x0f) << 28;\n // 3 upper bits are part of the next 32 bit number\n highBits = (middleByte & 0x70) >> 4;\n if ((middleByte & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n for (let shift = 3; shift <= 31; shift += 7) {\n let b = this.buf[this.pos++];\n highBits |= (b & 0x7f) << shift;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n throw new Error(\"invalid varint\");\n}\n/**\n * Write a 64 bit varint, given as two JS numbers, to the given bytes array.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344\n */\nexport function varint64write(lo, hi, bytes) {\n for (let i = 0; i < 28; i = i + 7) {\n const shift = lo >>> i;\n const hasNext = !(shift >>> 7 == 0 && hi == 0);\n const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n const splitBits = ((lo >>> 28) & 0x0f) | ((hi & 0x07) << 4);\n const hasMoreBits = !(hi >> 3 == 0);\n bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xff);\n if (!hasMoreBits) {\n return;\n }\n for (let i = 3; i < 31; i = i + 7) {\n const shift = hi >>> i;\n const hasNext = !(shift >>> 7 == 0);\n const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n bytes.push((hi >>> 31) & 0x01);\n}\n// constants for binary math\nconst TWO_PWR_32_DBL = 0x100000000;\n/**\n * Parse decimal string of 64 bit integer value as two JS numbers.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function int64FromString(dec) {\n // Check for minus sign.\n const minus = dec[0] === \"-\";\n if (minus) {\n dec = dec.slice(1);\n }\n // Work 6 decimal digits at a time, acting like we're converting base 1e6\n // digits to binary. This is safe to do with floating point math because\n // Number.isSafeInteger(ALL_32_BITS * 1e6) == true.\n const base = 1e6;\n let lowBits = 0;\n let highBits = 0;\n function add1e6digit(begin, end) {\n // Note: Number('') is 0.\n const digit1e6 = Number(dec.slice(begin, end));\n highBits *= base;\n lowBits = lowBits * base + digit1e6;\n // Carry bits from lowBits to\n if (lowBits >= TWO_PWR_32_DBL) {\n highBits = highBits + ((lowBits / TWO_PWR_32_DBL) | 0);\n lowBits = lowBits % TWO_PWR_32_DBL;\n }\n }\n add1e6digit(-24, -18);\n add1e6digit(-18, -12);\n add1e6digit(-12, -6);\n add1e6digit(-6);\n return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);\n}\n/**\n * Losslessly converts a 64-bit signed integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function int64ToString(lo, hi) {\n let bits = newBits(lo, hi);\n // If we're treating the input as a signed value and the high bit is set, do\n // a manual two's complement conversion before the decimal conversion.\n const negative = bits.hi & 0x80000000;\n if (negative) {\n bits = negate(bits.lo, bits.hi);\n }\n const result = uInt64ToString(bits.lo, bits.hi);\n return negative ? \"-\" + result : result;\n}\n/**\n * Losslessly converts a 64-bit unsigned integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function uInt64ToString(lo, hi) {\n ({ lo, hi } = toUnsigned(lo, hi));\n // Skip the expensive conversion if the number is small enough to use the\n // built-in conversions.\n // Number.MAX_SAFE_INTEGER = 0x001FFFFF FFFFFFFF, thus any number with\n // highBits <= 0x1FFFFF can be safely expressed with a double and retain\n // integer precision.\n // Proven by: Number.isSafeInteger(0x1FFFFF * 2**32 + 0xFFFFFFFF) == true.\n if (hi <= 0x1fffff) {\n return String(TWO_PWR_32_DBL * hi + lo);\n }\n // What this code is doing is essentially converting the input number from\n // base-2 to base-1e7, which allows us to represent the 64-bit range with\n // only 3 (very large) digits. Those digits are then trivial to convert to\n // a base-10 string.\n // The magic numbers used here are -\n // 2^24 = 16777216 = (1,6777216) in base-1e7.\n // 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.\n // Split 32:32 representation into 16:24:24 representation so our\n // intermediate digits don't overflow.\n const low = lo & 0xffffff;\n const mid = ((lo >>> 24) | (hi << 8)) & 0xffffff;\n const high = (hi >> 16) & 0xffff;\n // Assemble our three base-1e7 digits, ignoring carries. The maximum\n // value in a digit at this step is representable as a 48-bit integer, which\n // can be stored in a 64-bit floating point number.\n let digitA = low + mid * 6777216 + high * 6710656;\n let digitB = mid + high * 8147497;\n let digitC = high * 2;\n // Apply carries from A to B and from B to C.\n const base = 10000000;\n if (digitA >= base) {\n digitB += Math.floor(digitA / base);\n digitA %= base;\n }\n if (digitB >= base) {\n digitC += Math.floor(digitB / base);\n digitB %= base;\n }\n // If digitC is 0, then we should have returned in the trivial code path\n // at the top for non-safe integers. Given this, we can assume both digitB\n // and digitA need leading zeros.\n return (digitC.toString() +\n decimalFrom1e7WithLeadingZeros(digitB) +\n decimalFrom1e7WithLeadingZeros(digitA));\n}\nfunction toUnsigned(lo, hi) {\n return { lo: lo >>> 0, hi: hi >>> 0 };\n}\nfunction newBits(lo, hi) {\n return { lo: lo | 0, hi: hi | 0 };\n}\n/**\n * Returns two's compliment negation of input.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Signed_32-bit_integers\n */\nfunction negate(lowBits, highBits) {\n highBits = ~highBits;\n if (lowBits) {\n lowBits = ~lowBits + 1;\n }\n else {\n // If lowBits is 0, then bitwise-not is 0xFFFFFFFF,\n // adding 1 to that, results in 0x100000000, which leaves\n // the low bits 0x0 and simply adds one to the high bits.\n highBits += 1;\n }\n return newBits(lowBits, highBits);\n}\n/**\n * Returns decimal representation of digit1e7 with leading zeros.\n */\nconst decimalFrom1e7WithLeadingZeros = (digit1e7) => {\n const partial = String(digit1e7);\n return \"0000000\".slice(partial.length) + partial;\n};\n/**\n * Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144\n */\nexport function varint32write(value, bytes) {\n if (value >= 0) {\n // write value as varint 32\n while (value > 0x7f) {\n bytes.push((value & 0x7f) | 0x80);\n value = value >>> 7;\n }\n bytes.push(value);\n }\n else {\n for (let i = 0; i < 9; i++) {\n bytes.push((value & 127) | 128);\n value = value >> 7;\n }\n bytes.push(1);\n }\n}\n/**\n * Read an unsigned 32 bit varint.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220\n */\nexport function varint32read() {\n let b = this.buf[this.pos++];\n let result = b & 0x7f;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7f) << 7;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7f) << 14;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7f) << 21;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n // Extract only last 4 bits\n b = this.buf[this.pos++];\n result |= (b & 0x0f) << 28;\n for (let readBytes = 5; (b & 0x80) !== 0 && readBytes < 10; readBytes++)\n b = this.buf[this.pos++];\n if ((b & 0x80) != 0)\n throw new Error(\"invalid varint\");\n this.assertBounds();\n // Result can have 32 bits, convert it to unsigned\n return result >>> 0;\n}\n", "// Copyright 2021-2026 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { int64FromString, int64ToString, uInt64ToString, } from \"./wire/varint.js\";\n/**\n * Int64Support for the current environment.\n */\nexport const protoInt64 = /*@__PURE__*/ makeInt64Support();\nfunction makeInt64Support() {\n const dv = new DataView(new ArrayBuffer(8));\n // note that Safari 14 implements BigInt, but not the DataView methods\n const ok = typeof BigInt === \"function\" &&\n typeof dv.getBigInt64 === \"function\" &&\n typeof dv.getBigUint64 === \"function\" &&\n typeof dv.setBigInt64 === \"function\" &&\n typeof dv.setBigUint64 === \"function\" &&\n (!!globalThis.Deno ||\n typeof process != \"object\" ||\n typeof process.env != \"object\" ||\n process.env.BUF_BIGINT_DISABLE !== \"1\");\n if (ok) {\n const MIN = BigInt(\"-9223372036854775808\");\n const MAX = BigInt(\"9223372036854775807\");\n const UMIN = BigInt(\"0\");\n const UMAX = BigInt(\"18446744073709551615\");\n return {\n zero: BigInt(0),\n supported: true,\n parse(value) {\n const bi = typeof value == \"bigint\" ? value : BigInt(value);\n if (bi > MAX || bi < MIN) {\n throw new Error(`invalid int64: ${value}`);\n }\n return bi;\n },\n uParse(value) {\n const bi = typeof value == \"bigint\" ? value : BigInt(value);\n if (bi > UMAX || bi < UMIN) {\n throw new Error(`invalid uint64: ${value}`);\n }\n return bi;\n },\n enc(value) {\n dv.setBigInt64(0, this.parse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true),\n };\n },\n uEnc(value) {\n dv.setBigInt64(0, this.uParse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true),\n };\n },\n dec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigInt64(0, true);\n },\n uDec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigUint64(0, true);\n },\n };\n }\n return {\n zero: \"0\",\n supported: false,\n parse(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertInt64String(value);\n return value;\n },\n uParse(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertUInt64String(value);\n return value;\n },\n enc(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertInt64String(value);\n return int64FromString(value);\n },\n uEnc(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertUInt64String(value);\n return int64FromString(value);\n },\n dec(lo, hi) {\n return int64ToString(lo, hi);\n },\n uDec(lo, hi) {\n return uInt64ToString(lo, hi);\n },\n };\n}\nfunction assertInt64String(value) {\n if (!/^-?[0-9]+$/.test(value)) {\n throw new Error(\"invalid int64: \" + value);\n }\n}\nfunction assertUInt64String(value) {\n if (!/^[0-9]+$/.test(value)) {\n throw new Error(\"invalid uint64: \" + value);\n }\n}\n", "// Copyright 2021-2026 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nconst symbol = Symbol.for(\"@bufbuild/protobuf/text-encoding\");\n/**\n * Protobuf-ES requires the Text Encoding API to convert UTF-8 from and to\n * binary. This WHATWG API is widely available, but it is not part of the\n * ECMAScript standard. On runtimes where it is not available, use this\n * function to provide your own implementation.\n *\n * Note that the Text Encoding API does not provide a way to validate UTF-8.\n * Our implementation falls back to use encodeURIComponent().\n */\nexport function configureTextEncoding(textEncoding) {\n globalThis[symbol] = textEncoding;\n}\nexport function getTextEncoding() {\n if (globalThis[symbol] == undefined) {\n const te = new globalThis.TextEncoder();\n const td = new globalThis.TextDecoder();\n globalThis[symbol] = {\n encodeUtf8(text) {\n return te.encode(text);\n },\n decodeUtf8(bytes) {\n return td.decode(bytes);\n },\n checkUtf8(text) {\n try {\n encodeURIComponent(text);\n return true;\n }\n catch (_) {\n return false;\n }\n },\n };\n }\n return globalThis[symbol];\n}\n", "// Copyright 2021-2026 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { varint32read, varint32write, varint64read, varint64write, } from \"./varint.js\";\nimport { protoInt64 } from \"../proto-int64.js\";\nimport { getTextEncoding } from \"./text-encoding.js\";\n/**\n * Protobuf binary format wire types.\n *\n * A wire type provides just enough information to find the length of the\n * following value.\n *\n * See https://developers.google.com/protocol-buffers/docs/encoding#structure\n */\nexport var WireType;\n(function (WireType) {\n /**\n * Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum\n */\n WireType[WireType[\"Varint\"] = 0] = \"Varint\";\n /**\n * Used for fixed64, sfixed64, double.\n * Always 8 bytes with little-endian byte order.\n */\n WireType[WireType[\"Bit64\"] = 1] = \"Bit64\";\n /**\n * Used for string, bytes, embedded messages, packed repeated fields\n *\n * Only repeated numeric types (types which use the varint, 32-bit,\n * or 64-bit wire types) can be packed. In proto3, such fields are\n * packed by default.\n */\n WireType[WireType[\"LengthDelimited\"] = 2] = \"LengthDelimited\";\n /**\n * Start of a tag-delimited aggregate, such as a proto2 group, or a message\n * in editions with message_encoding = DELIMITED.\n */\n WireType[WireType[\"StartGroup\"] = 3] = \"StartGroup\";\n /**\n * End of a tag-delimited aggregate.\n */\n WireType[WireType[\"EndGroup\"] = 4] = \"EndGroup\";\n /**\n * Used for fixed32, sfixed32, float.\n * Always 4 bytes with little-endian byte order.\n */\n WireType[WireType[\"Bit32\"] = 5] = \"Bit32\";\n})(WireType || (WireType = {}));\n/**\n * Maximum value for a 32-bit floating point value (Protobuf FLOAT).\n */\nexport const FLOAT32_MAX = 3.4028234663852886e38;\n/**\n * Minimum value for a 32-bit floating point value (Protobuf FLOAT).\n */\nexport const FLOAT32_MIN = -3.4028234663852886e38;\n/**\n * Maximum value for an unsigned 32-bit integer (Protobuf UINT32, FIXED32).\n */\nexport const UINT32_MAX = 0xffffffff;\n/**\n * Maximum value for a signed 32-bit integer (Protobuf INT32, SFIXED32, SINT32).\n */\nexport const INT32_MAX = 0x7fffffff;\n/**\n * Minimum value for a signed 32-bit integer (Protobuf INT32, SFIXED32, SINT32).\n */\nexport const INT32_MIN = -0x80000000;\nexport class BinaryWriter {\n constructor(encodeUtf8 = getTextEncoding().encodeUtf8) {\n this.encodeUtf8 = encodeUtf8;\n /**\n * Previous fork states.\n */\n this.stack = [];\n this.chunks = [];\n this.buf = [];\n }\n /**\n * Return all bytes written and reset this writer.\n */\n finish() {\n if (this.buf.length) {\n this.chunks.push(new Uint8Array(this.buf)); // flush the buffer\n this.buf = [];\n }\n let len = 0;\n for (let i = 0; i < this.chunks.length; i++)\n len += this.chunks[i].length;\n let bytes = new Uint8Array(len);\n let offset = 0;\n for (let i = 0; i < this.chunks.length; i++) {\n bytes.set(this.chunks[i], offset);\n offset += this.chunks[i].length;\n }\n this.chunks = [];\n return bytes;\n }\n /**\n * Start a new fork for length-delimited data like a message\n * or a packed repeated field.\n *\n * Must be joined later with `join()`.\n */\n fork() {\n this.stack.push({ chunks: this.chunks, buf: this.buf });\n this.chunks = [];\n this.buf = [];\n return this;\n }\n /**\n * Join the last fork. Write its length and bytes, then\n * return to the previous state.\n */\n join() {\n // get chunk of fork\n let chunk = this.finish();\n // restore previous state\n let prev = this.stack.pop();\n if (!prev)\n throw new Error(\"invalid state, fork stack empty\");\n this.chunks = prev.chunks;\n this.buf = prev.buf;\n // write length of chunk as varint\n this.uint32(chunk.byteLength);\n return this.raw(chunk);\n }\n /**\n * Writes a tag (field number and wire type).\n *\n * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n *\n * Generated code should compute the tag ahead of time and call `uint32()`.\n */\n tag(fieldNo, type) {\n return this.uint32(((fieldNo << 3) | type) >>> 0);\n }\n /**\n * Write a chunk of raw bytes.\n */\n raw(chunk) {\n if (this.buf.length) {\n this.chunks.push(new Uint8Array(this.buf));\n this.buf = [];\n }\n this.chunks.push(chunk);\n return this;\n }\n /**\n * Write a `uint32` value, an unsigned 32 bit varint.\n */\n uint32(value) {\n assertUInt32(value);\n // write value as varint 32, inlined for speed\n while (value > 0x7f) {\n this.buf.push((value & 0x7f) | 0x80);\n value = value >>> 7;\n }\n this.buf.push(value);\n return this;\n }\n /**\n * Write a `int32` value, a signed 32 bit varint.\n */\n int32(value) {\n assertInt32(value);\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `bool` value, a variant.\n */\n bool(value) {\n this.buf.push(value ? 1 : 0);\n return this;\n }\n /**\n * Write a `bytes` value, length-delimited arbitrary data.\n */\n bytes(value) {\n this.uint32(value.byteLength); // write length of chunk as varint\n return this.raw(value);\n }\n /**\n * Write a `string` value, length-delimited data converted to UTF-8 text.\n */\n string(value) {\n let chunk = this.encodeUtf8(value);\n this.uint32(chunk.byteLength); // write length of chunk as varint\n return this.raw(chunk);\n }\n /**\n * Write a `float` value, 32-bit floating point number.\n */\n float(value) {\n assertFloat32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setFloat32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `double` value, a 64-bit floating point number.\n */\n double(value) {\n let chunk = new Uint8Array(8);\n new DataView(chunk.buffer).setFloat64(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n */\n fixed32(value) {\n assertUInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setUint32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n */\n sfixed32(value) {\n assertInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setInt32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n */\n sint32(value) {\n assertInt32(value);\n // zigzag encode\n value = ((value << 1) ^ (value >> 31)) >>> 0;\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `fixed64` value, a signed, fixed-length 64-bit integer.\n */\n sfixed64(value) {\n let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.enc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n */\n fixed64(value) {\n let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.uEnc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `int64` value, a signed 64-bit varint.\n */\n int64(value) {\n let tc = protoInt64.enc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n /**\n * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64(value) {\n const tc = protoInt64.enc(value), \n // zigzag encode\n sign = tc.hi >> 31, lo = (tc.lo << 1) ^ sign, hi = ((tc.hi << 1) | (tc.lo >>> 31)) ^ sign;\n varint64write(lo, hi, this.buf);\n return this;\n }\n /**\n * Write a `uint64` value, an unsigned 64-bit varint.\n */\n uint64(value) {\n const tc = protoInt64.uEnc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n}\nexport class BinaryReader {\n constructor(buf, decodeUtf8 = getTextEncoding().decodeUtf8) {\n this.decodeUtf8 = decodeUtf8;\n this.varint64 = varint64read; // dirty cast for `this`\n /**\n * Read a `uint32` field, an unsigned 32 bit varint.\n */\n this.uint32 = varint32read;\n this.buf = buf;\n this.len = buf.length;\n this.pos = 0;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n /**\n * Reads a tag - field number and wire type.\n */\n tag() {\n let tag = this.uint32(), fieldNo = tag >>> 3, wireType = tag & 7;\n if (fieldNo <= 0 || wireType < 0 || wireType > 5)\n throw new Error(\"illegal tag: field no \" + fieldNo + \" wire type \" + wireType);\n return [fieldNo, wireType];\n }\n /**\n * Skip one element and return the skipped data.\n *\n * When skipping StartGroup, provide the tags field number to check for\n * matching field number in the EndGroup tag.\n */\n skip(wireType, fieldNo) {\n let start = this.pos;\n switch (wireType) {\n case WireType.Varint:\n while (this.buf[this.pos++] & 0x80) {\n // ignore\n }\n break;\n // @ts-ignore TS7029: Fallthrough case in switch -- ignore instead of expect-error for compiler settings without noFallthroughCasesInSwitch: true\n case WireType.Bit64:\n this.pos += 4;\n case WireType.Bit32:\n this.pos += 4;\n break;\n case WireType.LengthDelimited:\n let len = this.uint32();\n this.pos += len;\n break;\n case WireType.StartGroup:\n for (;;) {\n const [fn, wt] = this.tag();\n if (wt === WireType.EndGroup) {\n if (fieldNo !== undefined && fn !== fieldNo) {\n throw new Error(\"invalid end group tag\");\n }\n break;\n }\n this.skip(wt, fn);\n }\n break;\n default:\n throw new Error(\"cant skip wire type \" + wireType);\n }\n this.assertBounds();\n return this.buf.subarray(start, this.pos);\n }\n /**\n * Throws error if position in byte array is out of range.\n */\n assertBounds() {\n if (this.pos > this.len)\n throw new RangeError(\"premature EOF\");\n }\n /**\n * Read a `int32` field, a signed 32 bit varint.\n */\n int32() {\n return this.uint32() | 0;\n }\n /**\n * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n */\n sint32() {\n let zze = this.uint32();\n // decode zigzag\n return (zze >>> 1) ^ -(zze & 1);\n }\n /**\n * Read a `int64` field, a signed 64-bit varint.\n */\n int64() {\n return protoInt64.dec(...this.varint64());\n }\n /**\n * Read a `uint64` field, an unsigned 64-bit varint.\n */\n uint64() {\n return protoInt64.uDec(...this.varint64());\n }\n /**\n * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64() {\n let [lo, hi] = this.varint64();\n // decode zig zag\n let s = -(lo & 1);\n lo = ((lo >>> 1) | ((hi & 1) << 31)) ^ s;\n hi = (hi >>> 1) ^ s;\n return protoInt64.dec(lo, hi);\n }\n /**\n * Read a `bool` field, a variant.\n */\n bool() {\n let [lo, hi] = this.varint64();\n return lo !== 0 || hi !== 0;\n }\n /**\n * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n */\n fixed32() {\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n return this.view.getUint32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n */\n sfixed32() {\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n return this.view.getInt32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n */\n fixed64() {\n return protoInt64.uDec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n */\n sfixed64() {\n return protoInt64.dec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `float` field, 32-bit floating point number.\n */\n float() {\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n return this.view.getFloat32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `double` field, a 64-bit floating point number.\n */\n double() {\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n return this.view.getFloat64((this.pos += 8) - 8, true);\n }\n /**\n * Read a `bytes` field, length-delimited arbitrary data.\n */\n bytes() {\n let len = this.uint32(), start = this.pos;\n this.pos += len;\n this.assertBounds();\n return this.buf.subarray(start, start + len);\n }\n /**\n * Read a `string` field, length-delimited data converted to UTF-8 text.\n */\n string() {\n return this.decodeUtf8(this.bytes());\n }\n}\n/**\n * Assert a valid signed protobuf 32-bit integer as a number or string.\n */\nfunction assertInt32(arg) {\n if (typeof arg == \"string\") {\n arg = Number(arg);\n }\n else if (typeof arg != \"number\") {\n throw new Error(\"invalid int32: \" + typeof arg);\n }\n if (!Number.isInteger(arg) ||\n arg > INT32_MAX ||\n arg < INT32_MIN)\n throw new Error(\"invalid int32: \" + arg);\n}\n/**\n * Assert a valid unsigned protobuf 32-bit integer as a number or string.\n */\nfunction assertUInt32(arg) {\n if (typeof arg == \"string\") {\n arg = Number(arg);\n }\n else if (typeof arg != \"number\") {\n throw new Error(\"invalid uint32: \" + typeof arg);\n }\n if (!Number.isInteger(arg) ||\n arg > UINT32_MAX ||\n arg < 0)\n throw new Error(\"invalid uint32: \" + arg);\n}\n/**\n * Assert a valid protobuf float value as a number or string.\n */\nfunction assertFloat32(arg) {\n if (typeof arg == \"string\") {\n const o = arg;\n arg = Number(arg);\n if (Number.isNaN(arg) && o !== \"NaN\") {\n throw new Error(\"invalid float32: \" + o);\n }\n }\n else if (typeof arg != \"number\") {\n throw new Error(\"invalid float32: \" + typeof arg);\n }\n if (Number.isFinite(arg) &&\n (arg > FLOAT32_MAX || arg < FLOAT32_MIN))\n throw new Error(\"invalid float32: \" + arg);\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.7.7\n// protoc v5.29.3\n// source: google/protobuf/struct.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"google.protobuf\";\n\n/**\n * `NullValue` is a singleton enumeration to represent the null value for the\n * `Value` type union.\n *\n * The JSON representation for `NullValue` is JSON `null`.\n */\nexport enum NullValue {\n /** NULL_VALUE - Null value. */\n NULL_VALUE = 0,\n UNRECOGNIZED = -1,\n}\n\n/**\n * `Struct` represents a structured data value, consisting of fields\n * which map to dynamically typed values. In some languages, `Struct`\n * might be supported by a native representation. For example, in\n * scripting languages like JS a struct is represented as an\n * object. The details of that representation are described together\n * with the proto support for the language.\n *\n * The JSON representation for `Struct` is JSON object.\n */\nexport interface Struct {\n /** Unordered map of dynamically typed values. */\n fields: { [key: string]: any | undefined };\n}\n\nexport interface Struct_FieldsEntry {\n key: string;\n value: any | undefined;\n}\n\n/**\n * `Value` represents a dynamically typed value which can be either\n * null, a number, a string, a boolean, a recursive struct value, or a\n * list of values. A producer of value is expected to set one of these\n * variants. Absence of any variant indicates an error.\n *\n * The JSON representation for `Value` is JSON value.\n */\nexport interface Value {\n /** Represents a null value. */\n nullValue?:\n | NullValue\n | undefined;\n /** Represents a double value. */\n numberValue?:\n | number\n | undefined;\n /** Represents a string value. */\n stringValue?:\n | string\n | undefined;\n /** Represents a boolean value. */\n boolValue?:\n | boolean\n | undefined;\n /** Represents a structured value. */\n structValue?:\n | { [key: string]: any }\n | undefined;\n /** Represents a repeated `Value`. */\n listValue?: Array<any> | undefined;\n}\n\n/**\n * `ListValue` is a wrapper around a repeated field of values.\n *\n * The JSON representation for `ListValue` is JSON array.\n */\nexport interface ListValue {\n /** Repeated field of dynamically typed values. */\n values: any[];\n}\n\nfunction createBaseStruct(): Struct {\n return { fields: {} };\n}\n\nexport const Struct: MessageFns<Struct> & StructWrapperFns = {\n encode(message: Struct, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.fields).forEach(([key, value]) => {\n if (value !== undefined) {\n Struct_FieldsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n }\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Struct {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStruct();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n const entry1 = Struct_FieldsEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.fields[entry1.key] = entry1.value;\n }\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<Struct>, I>>(base?: I): Struct {\n return Struct.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<Struct>, I>>(object: I): Struct {\n const message = createBaseStruct();\n message.fields = Object.entries(object.fields ?? {}).reduce<{ [key: string]: any | undefined }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = value;\n }\n return acc;\n },\n {},\n );\n return message;\n },\n\n wrap(object: { [key: string]: any } | undefined): Struct {\n const struct = createBaseStruct();\n\n if (object !== undefined) {\n for (const key of Object.keys(object)) {\n struct.fields[key] = object[key];\n }\n }\n return struct;\n },\n\n unwrap(message: Struct): { [key: string]: any } {\n const object: { [key: string]: any } = {};\n if (message.fields) {\n for (const key of Object.keys(message.fields)) {\n object[key] = message.fields[key];\n }\n }\n return object;\n },\n};\n\nfunction createBaseStruct_FieldsEntry(): Struct_FieldsEntry {\n return { key: \"\", value: undefined };\n}\n\nexport const Struct_FieldsEntry: MessageFns<Struct_FieldsEntry> = {\n encode(message: Struct_FieldsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n Value.encode(Value.wrap(message.value), writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Struct_FieldsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStruct_FieldsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.value = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<Struct_FieldsEntry>, I>>(base?: I): Struct_FieldsEntry {\n return Struct_FieldsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<Struct_FieldsEntry>, I>>(object: I): Struct_FieldsEntry {\n const message = createBaseStruct_FieldsEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? undefined;\n return message;\n },\n};\n\nfunction createBaseValue(): Value {\n return {\n nullValue: undefined,\n numberValue: undefined,\n stringValue: undefined,\n boolValue: undefined,\n structValue: undefined,\n listValue: undefined,\n };\n}\n\nexport const Value: MessageFns<Value> & AnyValueWrapperFns = {\n encode(message: Value, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.nullValue !== undefined) {\n writer.uint32(8).int32(message.nullValue);\n }\n if (message.numberValue !== undefined) {\n writer.uint32(17).double(message.numberValue);\n }\n if (message.stringValue !== undefined) {\n writer.uint32(26).string(message.stringValue);\n }\n if (message.boolValue !== undefined) {\n writer.uint32(32).bool(message.boolValue);\n }\n if (message.structValue !== undefined) {\n Struct.encode(Struct.wrap(message.structValue), writer.uint32(42).fork()).join();\n }\n if (message.listValue !== undefined) {\n ListValue.encode(ListValue.wrap(message.listValue), writer.uint32(50).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Value {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseValue();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.nullValue = reader.int32() as any;\n continue;\n }\n case 2: {\n if (tag !== 17) {\n break;\n }\n\n message.numberValue = reader.double();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.stringValue = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 32) {\n break;\n }\n\n message.boolValue = reader.bool();\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.structValue = Struct.unwrap(Struct.decode(reader, reader.uint32()));\n continue;\n }\n case 6: {\n if (tag !== 50) {\n break;\n }\n\n message.listValue = ListValue.unwrap(ListValue.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<Value>, I>>(base?: I): Value {\n return Value.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<Value>, I>>(object: I): Value {\n const message = createBaseValue();\n message.nullValue = object.nullValue ?? undefined;\n message.numberValue = object.numberValue ?? undefined;\n message.stringValue = object.stringValue ?? undefined;\n message.boolValue = object.boolValue ?? undefined;\n message.structValue = object.structValue ?? undefined;\n message.listValue = object.listValue ?? undefined;\n return message;\n },\n\n wrap(value: any): Value {\n const result = createBaseValue();\n if (value === null) {\n result.nullValue = NullValue.NULL_VALUE;\n } else if (typeof value === \"boolean\") {\n result.boolValue = value;\n } else if (typeof value === \"number\") {\n result.numberValue = value;\n } else if (typeof value === \"string\") {\n result.stringValue = value;\n } else if (globalThis.Array.isArray(value)) {\n result.listValue = value;\n } else if (typeof value === \"object\") {\n result.structValue = value;\n } else if (typeof value !== \"undefined\") {\n throw new globalThis.Error(\"Unsupported any value type: \" + typeof value);\n }\n return result;\n },\n\n unwrap(message: any): string | number | boolean | Object | null | Array<any> | undefined {\n if (message.stringValue !== undefined) {\n return message.stringValue;\n } else if (message?.numberValue !== undefined) {\n return message.numberValue;\n } else if (message?.boolValue !== undefined) {\n return message.boolValue;\n } else if (message?.structValue !== undefined) {\n return message.structValue as any;\n } else if (message?.listValue !== undefined) {\n return message.listValue;\n } else if (message?.nullValue !== undefined) {\n return null;\n }\n return undefined;\n },\n};\n\nfunction createBaseListValue(): ListValue {\n return { values: [] };\n}\n\nexport const ListValue: MessageFns<ListValue> & ListValueWrapperFns = {\n encode(message: ListValue, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.values) {\n Value.encode(Value.wrap(v!), writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListValue {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListValue();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.values.push(Value.unwrap(Value.decode(reader, reader.uint32())));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<ListValue>, I>>(base?: I): ListValue {\n return ListValue.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<ListValue>, I>>(object: I): ListValue {\n const message = createBaseListValue();\n message.values = object.values?.map((e) => e) || [];\n return message;\n },\n\n wrap(array: Array<any> | undefined): ListValue {\n const result = createBaseListValue();\n result.values = array ?? [];\n return result;\n },\n\n unwrap(message: ListValue): Array<any> {\n if (message?.hasOwnProperty(\"values\") && globalThis.Array.isArray(message.values)) {\n return message.values;\n } else {\n return message as any;\n }\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin ? T\n : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>\n : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & { [K in Exclude<keyof I, KeysOfUnion<P>>]: never };\n\nexport interface MessageFns<T> {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;\n fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;\n}\n\nexport interface StructWrapperFns {\n wrap(object: { [key: string]: any } | undefined): Struct;\n unwrap(message: Struct): { [key: string]: any };\n}\n\nexport interface AnyValueWrapperFns {\n wrap(value: any): Value;\n unwrap(message: any): string | number | boolean | Object | null | Array<any> | undefined;\n}\n\nexport interface ListValueWrapperFns {\n wrap(array: Array<any> | undefined): ListValue;\n unwrap(message: ListValue): Array<any>;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.7.7\n// protoc v5.29.3\n// source: patch.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Value } from \"./google/protobuf/struct\";\n\nexport const protobufPackage = \"ag_ui\";\n\nexport enum JsonPatchOperationType {\n ADD = 0,\n REMOVE = 1,\n REPLACE = 2,\n MOVE = 3,\n COPY = 4,\n TEST = 5,\n UNRECOGNIZED = -1,\n}\n\nexport interface JsonPatchOperation {\n op: JsonPatchOperationType;\n path: string;\n from?: string | undefined;\n value?: any | undefined;\n}\n\nfunction createBaseJsonPatchOperation(): JsonPatchOperation {\n return { op: 0, path: \"\", from: undefined, value: undefined };\n}\n\nexport const JsonPatchOperation: MessageFns<JsonPatchOperation> = {\n encode(message: JsonPatchOperation, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.op !== 0) {\n writer.uint32(8).int32(message.op);\n }\n if (message.path !== \"\") {\n writer.uint32(18).string(message.path);\n }\n if (message.from !== undefined) {\n writer.uint32(26).string(message.from);\n }\n if (message.value !== undefined) {\n Value.encode(Value.wrap(message.value), writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): JsonPatchOperation {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseJsonPatchOperation();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.op = reader.int32() as any;\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.path = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.from = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.value = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<JsonPatchOperation>, I>>(base?: I): JsonPatchOperation {\n return JsonPatchOperation.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<JsonPatchOperation>, I>>(object: I): JsonPatchOperation {\n const message = createBaseJsonPatchOperation();\n message.op = object.op ?? 0;\n message.path = object.path ?? \"\";\n message.from = object.from ?? undefined;\n message.value = object.value ?? undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin ? T\n : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>\n : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & { [K in Exclude<keyof I, KeysOfUnion<P>>]: never };\n\nexport interface MessageFns<T> {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;\n fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.7.7\n// protoc v5.29.3\n// source: types.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Value } from \"./google/protobuf/struct\";\n\nexport const protobufPackage = \"ag_ui\";\n\nexport interface ToolCall {\n id: string;\n type: string;\n function: ToolCall_Function | undefined;\n}\n\nexport interface ToolCall_Function {\n name: string;\n arguments: string;\n}\n\nexport interface InputContentDataSource {\n value: string;\n mimeType: string;\n}\n\nexport interface InputContentUrlSource {\n value: string;\n mimeType?: string | undefined;\n}\n\nexport interface InputContentSource {\n data?: InputContentDataSource | undefined;\n url?: InputContentUrlSource | undefined;\n}\n\nexport interface TextInputPart {\n text: string;\n}\n\nexport interface ImageInputPart {\n source: InputContentSource | undefined;\n metadata?: any | undefined;\n}\n\nexport interface AudioInputPart {\n source: InputContentSource | undefined;\n metadata?: any | undefined;\n}\n\nexport interface VideoInputPart {\n source: InputContentSource | undefined;\n metadata?: any | undefined;\n}\n\nexport interface DocumentInputPart {\n source: InputContentSource | undefined;\n metadata?: any | undefined;\n}\n\nexport interface InputContent {\n text?: TextInputPart | undefined;\n image?: ImageInputPart | undefined;\n audio?: AudioInputPart | undefined;\n video?: VideoInputPart | undefined;\n document?: DocumentInputPart | undefined;\n}\n\nexport interface Message {\n id: string;\n role: string;\n content?: string | undefined;\n name?: string | undefined;\n toolCalls: ToolCall[];\n toolCallId?: string | undefined;\n error?: string | undefined;\n contentParts: InputContent[];\n}\n\nfunction createBaseToolCall(): ToolCall {\n return { id: \"\", type: \"\", function: undefined };\n}\n\nexport const ToolCall: MessageFns<ToolCall> = {\n encode(message: ToolCall, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.type !== \"\") {\n writer.uint32(18).string(message.type);\n }\n if (message.function !== undefined) {\n ToolCall_Function.encode(message.function, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ToolCall {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseToolCall();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.type = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.function = ToolCall_Function.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<ToolCall>, I>>(base?: I): ToolCall {\n return ToolCall.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<ToolCall>, I>>(object: I): ToolCall {\n const message = createBaseToolCall();\n message.id = object.id ?? \"\";\n message.type = object.type ?? \"\";\n message.function = (object.function !== undefined && object.function !== null)\n ? ToolCall_Function.fromPartial(object.function)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseToolCall_Function(): ToolCall_Function {\n return { name: \"\", arguments: \"\" };\n}\n\nexport const ToolCall_Function: MessageFns<ToolCall_Function> = {\n encode(message: ToolCall_Function, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.arguments !== \"\") {\n writer.uint32(18).string(message.arguments);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ToolCall_Function {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseToolCall_Function();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.name = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.arguments = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<ToolCall_Function>, I>>(base?: I): ToolCall_Function {\n return ToolCall_Function.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<ToolCall_Function>, I>>(object: I): ToolCall_Function {\n const message = createBaseToolCall_Function();\n message.name = object.name ?? \"\";\n message.arguments = object.arguments ?? \"\";\n return message;\n },\n};\n\nfunction createBaseInputContentDataSource(): InputContentDataSource {\n return { value: \"\", mimeType: \"\" };\n}\n\nexport const InputContentDataSource: MessageFns<InputContentDataSource> = {\n encode(message: InputContentDataSource, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.value !== \"\") {\n writer.uint32(10).string(message.value);\n }\n if (message.mimeType !== \"\") {\n writer.uint32(18).string(message.mimeType);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): InputContentDataSource {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseInputContentDataSource();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.mimeType = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<InputContentDataSource>, I>>(base?: I): InputContentDataSource {\n return InputContentDataSource.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<InputContentDataSource>, I>>(object: I): InputContentDataSource {\n const message = createBaseInputContentDataSource();\n message.value = object.value ?? \"\";\n message.mimeType = object.mimeType ?? \"\";\n return message;\n },\n};\n\nfunction createBaseInputContentUrlSource(): InputContentUrlSource {\n return { value: \"\", mimeType: undefined };\n}\n\nexport const InputContentUrlSource: MessageFns<InputContentUrlSource> = {\n encode(message: InputContentUrlSource, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.value !== \"\") {\n writer.uint32(10).string(message.value);\n }\n if (message.mimeType !== undefined) {\n writer.uint32(18).string(message.mimeType);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): InputContentUrlSource {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseInputContentUrlSource();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.mimeType = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<InputContentUrlSource>, I>>(base?: I): InputContentUrlSource {\n return InputContentUrlSource.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<InputContentUrlSource>, I>>(object: I): InputContentUrlSource {\n const message = createBaseInputContentUrlSource();\n message.value = object.value ?? \"\";\n message.mimeType = object.mimeType ?? undefined;\n return message;\n },\n};\n\nfunction createBaseInputContentSource(): InputContentSource {\n return { data: undefined, url: undefined };\n}\n\nexport const InputContentSource: MessageFns<InputContentSource> = {\n encode(message: InputContentSource, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.data !== undefined) {\n InputContentDataSource.encode(message.data, writer.uint32(10).fork()).join();\n }\n if (message.url !== undefined) {\n InputContentUrlSource.encode(message.url, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): InputContentSource {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseInputContentSource();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.data = InputContentDataSource.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.url = InputContentUrlSource.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<InputContentSource>, I>>(base?: I): InputContentSource {\n return InputContentSource.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<InputContentSource>, I>>(object: I): InputContentSource {\n const message = createBaseInputContentSource();\n message.data = (object.data !== undefined && object.data !== null)\n ? InputContentDataSource.fromPartial(object.data)\n : undefined;\n message.url = (object.url !== undefined && object.url !== null)\n ? InputContentUrlSource.fromPartial(object.url)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseTextInputPart(): TextInputPart {\n return { text: \"\" };\n}\n\nexport const TextInputPart: MessageFns<TextInputPart> = {\n encode(message: TextInputPart, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.text !== \"\") {\n writer.uint32(10).string(message.text);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TextInputPart {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTextInputPart();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.text = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<TextInputPart>, I>>(base?: I): TextInputPart {\n return TextInputPart.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<TextInputPart>, I>>(object: I): TextInputPart {\n const message = createBaseTextInputPart();\n message.text = object.text ?? \"\";\n return message;\n },\n};\n\nfunction createBaseImageInputPart(): ImageInputPart {\n return { source: undefined, metadata: undefined };\n}\n\nexport const ImageInputPart: MessageFns<ImageInputPart> = {\n encode(message: ImageInputPart, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.source !== undefined) {\n InputContentSource.encode(message.source, writer.uint32(10).fork()).join();\n }\n if (message.metadata !== undefined) {\n Value.encode(Value.wrap(message.metadata), writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ImageInputPart {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImageInputPart();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.source = InputContentSource.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.metadata = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<ImageInputPart>, I>>(base?: I): ImageInputPart {\n return ImageInputPart.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<ImageInputPart>, I>>(object: I): ImageInputPart {\n const message = createBaseImageInputPart();\n message.source = (object.source !== undefined && object.source !== null)\n ? InputContentSource.fromPartial(object.source)\n : undefined;\n message.metadata = object.metadata ?? undefined;\n return message;\n },\n};\n\nfunction createBaseAudioInputPart(): AudioInputPart {\n return { source: undefined, metadata: undefined };\n}\n\nexport const AudioInputPart: MessageFns<AudioInputPart> = {\n encode(message: AudioInputPart, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.source !== undefined) {\n InputContentSource.encode(message.source, writer.uint32(10).fork()).join();\n }\n if (message.metadata !== undefined) {\n Value.encode(Value.wrap(message.metadata), writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AudioInputPart {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAudioInputPart();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.source = InputContentSource.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.metadata = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<AudioInputPart>, I>>(base?: I): AudioInputPart {\n return AudioInputPart.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<AudioInputPart>, I>>(object: I): AudioInputPart {\n const message = createBaseAudioInputPart();\n message.source = (object.source !== undefined && object.source !== null)\n ? InputContentSource.fromPartial(object.source)\n : undefined;\n message.metadata = object.metadata ?? undefined;\n return message;\n },\n};\n\nfunction createBaseVideoInputPart(): VideoInputPart {\n return { source: undefined, metadata: undefined };\n}\n\nexport const VideoInputPart: MessageFns<VideoInputPart> = {\n encode(message: VideoInputPart, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.source !== undefined) {\n InputContentSource.encode(message.source, writer.uint32(10).fork()).join();\n }\n if (message.metadata !== undefined) {\n Value.encode(Value.wrap(message.metadata), writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): VideoInputPart {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVideoInputPart();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.source = InputContentSource.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.metadata = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<VideoInputPart>, I>>(base?: I): VideoInputPart {\n return VideoInputPart.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<VideoInputPart>, I>>(object: I): VideoInputPart {\n const message = createBaseVideoInputPart();\n message.source = (object.source !== undefined && object.source !== null)\n ? InputContentSource.fromPartial(object.source)\n : undefined;\n message.metadata = object.metadata ?? undefined;\n return message;\n },\n};\n\nfunction createBaseDocumentInputPart(): DocumentInputPart {\n return { source: undefined, metadata: undefined };\n}\n\nexport const DocumentInputPart: MessageFns<DocumentInputPart> = {\n encode(message: DocumentInputPart, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.source !== undefined) {\n InputContentSource.encode(message.source, writer.uint32(10).fork()).join();\n }\n if (message.metadata !== undefined) {\n Value.encode(Value.wrap(message.metadata), writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DocumentInputPart {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDocumentInputPart();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.source = InputContentSource.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.metadata = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<DocumentInputPart>, I>>(base?: I): DocumentInputPart {\n return DocumentInputPart.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<DocumentInputPart>, I>>(object: I): DocumentInputPart {\n const message = createBaseDocumentInputPart();\n message.source = (object.source !== undefined && object.source !== null)\n ? InputContentSource.fromPartial(object.source)\n : undefined;\n message.metadata = object.metadata ?? undefined;\n return message;\n },\n};\n\nfunction createBaseInputContent(): InputContent {\n return { text: undefined, image: undefined, audio: undefined, video: undefined, document: undefined };\n}\n\nexport const InputContent: MessageFns<InputContent> = {\n encode(message: InputContent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.text !== undefined) {\n TextInputPart.encode(message.text, writer.uint32(10).fork()).join();\n }\n if (message.image !== undefined) {\n ImageInputPart.encode(message.image, writer.uint32(18).fork()).join();\n }\n if (message.audio !== undefined) {\n AudioInputPart.encode(message.audio, writer.uint32(26).fork()).join();\n }\n if (message.video !== undefined) {\n VideoInputPart.encode(message.video, writer.uint32(34).fork()).join();\n }\n if (message.document !== undefined) {\n DocumentInputPart.encode(message.document, writer.uint32(42).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): InputContent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseInputContent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.text = TextInputPart.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.image = ImageInputPart.decode(reader, reader.uint32());\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.audio = AudioInputPart.decode(reader, reader.uint32());\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.video = VideoInputPart.decode(reader, reader.uint32());\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.document = DocumentInputPart.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<InputContent>, I>>(base?: I): InputContent {\n return InputContent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<InputContent>, I>>(object: I): InputContent {\n const message = createBaseInputContent();\n message.text = (object.text !== undefined && object.text !== null)\n ? TextInputPart.fromPartial(object.text)\n : undefined;\n message.image = (object.image !== undefined && object.image !== null)\n ? ImageInputPart.fromPartial(object.image)\n : undefined;\n message.audio = (object.audio !== undefined && object.audio !== null)\n ? AudioInputPart.fromPartial(object.audio)\n : undefined;\n message.video = (object.video !== undefined && object.video !== null)\n ? VideoInputPart.fromPartial(object.video)\n : undefined;\n message.document = (object.document !== undefined && object.document !== null)\n ? DocumentInputPart.fromPartial(object.document)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseMessage(): Message {\n return {\n id: \"\",\n role: \"\",\n content: undefined,\n name: undefined,\n toolCalls: [],\n toolCallId: undefined,\n error: undefined,\n contentParts: [],\n };\n}\n\nexport const Message: MessageFns<Message> = {\n encode(message: Message, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.role !== \"\") {\n writer.uint32(18).string(message.role);\n }\n if (message.content !== undefined) {\n writer.uint32(26).string(message.content);\n }\n if (message.name !== undefined) {\n writer.uint32(34).string(message.name);\n }\n for (const v of message.toolCalls) {\n ToolCall.encode(v!, writer.uint32(42).fork()).join();\n }\n if (message.toolCallId !== undefined) {\n writer.uint32(50).string(message.toolCallId);\n }\n if (message.error !== undefined) {\n writer.uint32(58).string(message.error);\n }\n for (const v of message.contentParts) {\n InputContent.encode(v!, writer.uint32(66).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Message {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.role = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.content = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.name = reader.string();\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.toolCalls.push(ToolCall.decode(reader, reader.uint32()));\n continue;\n }\n case 6: {\n if (tag !== 50) {\n break;\n }\n\n message.toolCallId = reader.string();\n continue;\n }\n case 7: {\n if (tag !== 58) {\n break;\n }\n\n message.error = reader.string();\n continue;\n }\n case 8: {\n if (tag !== 66) {\n break;\n }\n\n message.contentParts.push(InputContent.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<Message>, I>>(base?: I): Message {\n return Message.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<Message>, I>>(object: I): Message {\n const message = createBaseMessage();\n message.id = object.id ?? \"\";\n message.role = object.role ?? \"\";\n message.content = object.content ?? undefined;\n message.name = object.name ?? undefined;\n message.toolCalls = object.toolCalls?.map((e) => ToolCall.fromPartial(e)) || [];\n message.toolCallId = object.toolCallId ?? undefined;\n message.error = object.error ?? undefined;\n message.contentParts = object.contentParts?.map((e) => InputContent.fromPartial(e)) || [];\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin ? T\n : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>\n : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & { [K in Exclude<keyof I, KeysOfUnion<P>>]: never };\n\nexport interface MessageFns<T> {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;\n fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.7.7\n// protoc v5.29.3\n// source: events.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Value } from \"./google/protobuf/struct\";\nimport { JsonPatchOperation } from \"./patch\";\nimport { Message } from \"./types\";\n\nexport const protobufPackage = \"ag_ui\";\n\nexport enum EventType {\n TEXT_MESSAGE_START = 0,\n TEXT_MESSAGE_CONTENT = 1,\n TEXT_MESSAGE_END = 2,\n TOOL_CALL_START = 3,\n TOOL_CALL_ARGS = 4,\n TOOL_CALL_END = 5,\n STATE_SNAPSHOT = 6,\n STATE_DELTA = 7,\n MESSAGES_SNAPSHOT = 8,\n RAW = 9,\n CUSTOM = 10,\n RUN_STARTED = 11,\n RUN_FINISHED = 12,\n RUN_ERROR = 13,\n STEP_STARTED = 14,\n STEP_FINISHED = 15,\n UNRECOGNIZED = -1,\n}\n\nexport interface BaseEvent {\n type: EventType;\n timestamp?: number | undefined;\n rawEvent?: any | undefined;\n}\n\nexport interface TextMessageStartEvent {\n baseEvent: BaseEvent | undefined;\n messageId: string;\n role?: string | undefined;\n name?: string | undefined;\n}\n\nexport interface TextMessageContentEvent {\n baseEvent: BaseEvent | undefined;\n messageId: string;\n delta: string;\n}\n\nexport interface TextMessageEndEvent {\n baseEvent: BaseEvent | undefined;\n messageId: string;\n}\n\nexport interface ToolCallStartEvent {\n baseEvent: BaseEvent | undefined;\n toolCallId: string;\n toolCallName: string;\n parentMessageId?: string | undefined;\n}\n\nexport interface ToolCallArgsEvent {\n baseEvent: BaseEvent | undefined;\n toolCallId: string;\n delta: string;\n}\n\nexport interface ToolCallEndEvent {\n baseEvent: BaseEvent | undefined;\n toolCallId: string;\n}\n\nexport interface StateSnapshotEvent {\n baseEvent: BaseEvent | undefined;\n snapshot: any | undefined;\n}\n\nexport interface StateDeltaEvent {\n baseEvent: BaseEvent | undefined;\n delta: JsonPatchOperation[];\n}\n\nexport interface MessagesSnapshotEvent {\n baseEvent: BaseEvent | undefined;\n messages: Message[];\n}\n\nexport interface RawEvent {\n baseEvent: BaseEvent | undefined;\n event: any | undefined;\n source?: string | undefined;\n}\n\nexport interface CustomEvent {\n baseEvent: BaseEvent | undefined;\n name: string;\n value?: any | undefined;\n}\n\nexport interface RunStartedEvent {\n baseEvent: BaseEvent | undefined;\n threadId: string;\n runId: string;\n}\n\nexport interface RunFinishedEvent {\n baseEvent: BaseEvent | undefined;\n threadId: string;\n runId: string;\n result?: any | undefined;\n}\n\nexport interface RunErrorEvent {\n baseEvent: BaseEvent | undefined;\n code?: string | undefined;\n message: string;\n}\n\nexport interface StepStartedEvent {\n baseEvent: BaseEvent | undefined;\n stepName: string;\n}\n\nexport interface StepFinishedEvent {\n baseEvent: BaseEvent | undefined;\n stepName: string;\n}\n\nexport interface TextMessageChunkEvent {\n baseEvent: BaseEvent | undefined;\n messageId?: string | undefined;\n role?: string | undefined;\n delta?: string | undefined;\n name?: string | undefined;\n}\n\nexport interface ToolCallChunkEvent {\n baseEvent: BaseEvent | undefined;\n toolCallId?: string | undefined;\n toolCallName?: string | undefined;\n parentMessageId?: string | undefined;\n delta?: string | undefined;\n}\n\nexport interface Event {\n textMessageStart?: TextMessageStartEvent | undefined;\n textMessageContent?: TextMessageContentEvent | undefined;\n textMessageEnd?: TextMessageEndEvent | undefined;\n toolCallStart?: ToolCallStartEvent | undefined;\n toolCallArgs?: ToolCallArgsEvent | undefined;\n toolCallEnd?: ToolCallEndEvent | undefined;\n stateSnapshot?: StateSnapshotEvent | undefined;\n stateDelta?: StateDeltaEvent | undefined;\n messagesSnapshot?: MessagesSnapshotEvent | undefined;\n raw?: RawEvent | undefined;\n custom?: CustomEvent | undefined;\n runStarted?: RunStartedEvent | undefined;\n runFinished?: RunFinishedEvent | undefined;\n runError?: RunErrorEvent | undefined;\n stepStarted?: StepStartedEvent | undefined;\n stepFinished?: StepFinishedEvent | undefined;\n textMessageChunk?: TextMessageChunkEvent | undefined;\n toolCallChunk?: ToolCallChunkEvent | undefined;\n}\n\nfunction createBaseBaseEvent(): BaseEvent {\n return { type: 0, timestamp: undefined, rawEvent: undefined };\n}\n\nexport const BaseEvent: MessageFns<BaseEvent> = {\n encode(message: BaseEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.type !== 0) {\n writer.uint32(8).int32(message.type);\n }\n if (message.timestamp !== undefined) {\n writer.uint32(16).int64(message.timestamp);\n }\n if (message.rawEvent !== undefined) {\n Value.encode(Value.wrap(message.rawEvent), writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BaseEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBaseEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.type = reader.int32() as any;\n continue;\n }\n case 2: {\n if (tag !== 16) {\n break;\n }\n\n message.timestamp = longToNumber(reader.int64());\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.rawEvent = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<BaseEvent>, I>>(base?: I): BaseEvent {\n return BaseEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<BaseEvent>, I>>(object: I): BaseEvent {\n const message = createBaseBaseEvent();\n message.type = object.type ?? 0;\n message.timestamp = object.timestamp ?? undefined;\n message.rawEvent = object.rawEvent ?? undefined;\n return message;\n },\n};\n\nfunction createBaseTextMessageStartEvent(): TextMessageStartEvent {\n return { baseEvent: undefined, messageId: \"\", role: undefined, name: undefined };\n}\n\nexport const TextMessageStartEvent: MessageFns<TextMessageStartEvent> = {\n encode(message: TextMessageStartEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.messageId !== \"\") {\n writer.uint32(18).string(message.messageId);\n }\n if (message.role !== undefined) {\n writer.uint32(26).string(message.role);\n }\n if (message.name !== undefined) {\n writer.uint32(34).string(message.name);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TextMessageStartEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTextMessageStartEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.messageId = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.role = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.name = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<TextMessageStartEvent>, I>>(base?: I): TextMessageStartEvent {\n return TextMessageStartEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<TextMessageStartEvent>, I>>(object: I): TextMessageStartEvent {\n const message = createBaseTextMessageStartEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.messageId = object.messageId ?? \"\";\n message.role = object.role ?? undefined;\n message.name = object.name ?? undefined;\n return message;\n },\n};\n\nfunction createBaseTextMessageContentEvent(): TextMessageContentEvent {\n return { baseEvent: undefined, messageId: \"\", delta: \"\" };\n}\n\nexport const TextMessageContentEvent: MessageFns<TextMessageContentEvent> = {\n encode(message: TextMessageContentEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.messageId !== \"\") {\n writer.uint32(18).string(message.messageId);\n }\n if (message.delta !== \"\") {\n writer.uint32(26).string(message.delta);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TextMessageContentEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTextMessageContentEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.messageId = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.delta = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<TextMessageContentEvent>, I>>(base?: I): TextMessageContentEvent {\n return TextMessageContentEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<TextMessageContentEvent>, I>>(object: I): TextMessageContentEvent {\n const message = createBaseTextMessageContentEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.messageId = object.messageId ?? \"\";\n message.delta = object.delta ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTextMessageEndEvent(): TextMessageEndEvent {\n return { baseEvent: undefined, messageId: \"\" };\n}\n\nexport const TextMessageEndEvent: MessageFns<TextMessageEndEvent> = {\n encode(message: TextMessageEndEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.messageId !== \"\") {\n writer.uint32(18).string(message.messageId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TextMessageEndEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTextMessageEndEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.messageId = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<TextMessageEndEvent>, I>>(base?: I): TextMessageEndEvent {\n return TextMessageEndEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<TextMessageEndEvent>, I>>(object: I): TextMessageEndEvent {\n const message = createBaseTextMessageEndEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.messageId = object.messageId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseToolCallStartEvent(): ToolCallStartEvent {\n return { baseEvent: undefined, toolCallId: \"\", toolCallName: \"\", parentMessageId: undefined };\n}\n\nexport const ToolCallStartEvent: MessageFns<ToolCallStartEvent> = {\n encode(message: ToolCallStartEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.toolCallId !== \"\") {\n writer.uint32(18).string(message.toolCallId);\n }\n if (message.toolCallName !== \"\") {\n writer.uint32(26).string(message.toolCallName);\n }\n if (message.parentMessageId !== undefined) {\n writer.uint32(34).string(message.parentMessageId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ToolCallStartEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseToolCallStartEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.toolCallId = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.toolCallName = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.parentMessageId = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<ToolCallStartEvent>, I>>(base?: I): ToolCallStartEvent {\n return ToolCallStartEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<ToolCallStartEvent>, I>>(object: I): ToolCallStartEvent {\n const message = createBaseToolCallStartEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.toolCallId = object.toolCallId ?? \"\";\n message.toolCallName = object.toolCallName ?? \"\";\n message.parentMessageId = object.parentMessageId ?? undefined;\n return message;\n },\n};\n\nfunction createBaseToolCallArgsEvent(): ToolCallArgsEvent {\n return { baseEvent: undefined, toolCallId: \"\", delta: \"\" };\n}\n\nexport const ToolCallArgsEvent: MessageFns<ToolCallArgsEvent> = {\n encode(message: ToolCallArgsEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.toolCallId !== \"\") {\n writer.uint32(18).string(message.toolCallId);\n }\n if (message.delta !== \"\") {\n writer.uint32(26).string(message.delta);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ToolCallArgsEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseToolCallArgsEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.toolCallId = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.delta = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<ToolCallArgsEvent>, I>>(base?: I): ToolCallArgsEvent {\n return ToolCallArgsEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<ToolCallArgsEvent>, I>>(object: I): ToolCallArgsEvent {\n const message = createBaseToolCallArgsEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.toolCallId = object.toolCallId ?? \"\";\n message.delta = object.delta ?? \"\";\n return message;\n },\n};\n\nfunction createBaseToolCallEndEvent(): ToolCallEndEvent {\n return { baseEvent: undefined, toolCallId: \"\" };\n}\n\nexport const ToolCallEndEvent: MessageFns<ToolCallEndEvent> = {\n encode(message: ToolCallEndEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.toolCallId !== \"\") {\n writer.uint32(18).string(message.toolCallId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ToolCallEndEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseToolCallEndEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.toolCallId = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<ToolCallEndEvent>, I>>(base?: I): ToolCallEndEvent {\n return ToolCallEndEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<ToolCallEndEvent>, I>>(object: I): ToolCallEndEvent {\n const message = createBaseToolCallEndEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.toolCallId = object.toolCallId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseStateSnapshotEvent(): StateSnapshotEvent {\n return { baseEvent: undefined, snapshot: undefined };\n}\n\nexport const StateSnapshotEvent: MessageFns<StateSnapshotEvent> = {\n encode(message: StateSnapshotEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.snapshot !== undefined) {\n Value.encode(Value.wrap(message.snapshot), writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StateSnapshotEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStateSnapshotEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.snapshot = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<StateSnapshotEvent>, I>>(base?: I): StateSnapshotEvent {\n return StateSnapshotEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<StateSnapshotEvent>, I>>(object: I): StateSnapshotEvent {\n const message = createBaseStateSnapshotEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.snapshot = object.snapshot ?? undefined;\n return message;\n },\n};\n\nfunction createBaseStateDeltaEvent(): StateDeltaEvent {\n return { baseEvent: undefined, delta: [] };\n}\n\nexport const StateDeltaEvent: MessageFns<StateDeltaEvent> = {\n encode(message: StateDeltaEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n for (const v of message.delta) {\n JsonPatchOperation.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StateDeltaEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStateDeltaEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.delta.push(JsonPatchOperation.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<StateDeltaEvent>, I>>(base?: I): StateDeltaEvent {\n return StateDeltaEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<StateDeltaEvent>, I>>(object: I): StateDeltaEvent {\n const message = createBaseStateDeltaEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.delta = object.delta?.map((e) => JsonPatchOperation.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseMessagesSnapshotEvent(): MessagesSnapshotEvent {\n return { baseEvent: undefined, messages: [] };\n}\n\nexport const MessagesSnapshotEvent: MessageFns<MessagesSnapshotEvent> = {\n encode(message: MessagesSnapshotEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n for (const v of message.messages) {\n Message.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MessagesSnapshotEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessagesSnapshotEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.messages.push(Message.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<MessagesSnapshotEvent>, I>>(base?: I): MessagesSnapshotEvent {\n return MessagesSnapshotEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<MessagesSnapshotEvent>, I>>(object: I): MessagesSnapshotEvent {\n const message = createBaseMessagesSnapshotEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.messages = object.messages?.map((e) => Message.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseRawEvent(): RawEvent {\n return { baseEvent: undefined, event: undefined, source: undefined };\n}\n\nexport const RawEvent: MessageFns<RawEvent> = {\n encode(message: RawEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.event !== undefined) {\n Value.encode(Value.wrap(message.event), writer.uint32(18).fork()).join();\n }\n if (message.source !== undefined) {\n writer.uint32(26).string(message.source);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RawEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRawEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.event = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.source = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<RawEvent>, I>>(base?: I): RawEvent {\n return RawEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<RawEvent>, I>>(object: I): RawEvent {\n const message = createBaseRawEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.event = object.event ?? undefined;\n message.source = object.source ?? undefined;\n return message;\n },\n};\n\nfunction createBaseCustomEvent(): CustomEvent {\n return { baseEvent: undefined, name: \"\", value: undefined };\n}\n\nexport const CustomEvent: MessageFns<CustomEvent> = {\n encode(message: CustomEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n if (message.value !== undefined) {\n Value.encode(Value.wrap(message.value), writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CustomEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCustomEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.value = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<CustomEvent>, I>>(base?: I): CustomEvent {\n return CustomEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<CustomEvent>, I>>(object: I): CustomEvent {\n const message = createBaseCustomEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.name = object.name ?? \"\";\n message.value = object.value ?? undefined;\n return message;\n },\n};\n\nfunction createBaseRunStartedEvent(): RunStartedEvent {\n return { baseEvent: undefined, threadId: \"\", runId: \"\" };\n}\n\nexport const RunStartedEvent: MessageFns<RunStartedEvent> = {\n encode(message: RunStartedEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.threadId !== \"\") {\n writer.uint32(18).string(message.threadId);\n }\n if (message.runId !== \"\") {\n writer.uint32(26).string(message.runId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RunStartedEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRunStartedEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.threadId = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.runId = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<RunStartedEvent>, I>>(base?: I): RunStartedEvent {\n return RunStartedEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<RunStartedEvent>, I>>(object: I): RunStartedEvent {\n const message = createBaseRunStartedEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.threadId = object.threadId ?? \"\";\n message.runId = object.runId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseRunFinishedEvent(): RunFinishedEvent {\n return { baseEvent: undefined, threadId: \"\", runId: \"\", result: undefined };\n}\n\nexport const RunFinishedEvent: MessageFns<RunFinishedEvent> = {\n encode(message: RunFinishedEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.threadId !== \"\") {\n writer.uint32(18).string(message.threadId);\n }\n if (message.runId !== \"\") {\n writer.uint32(26).string(message.runId);\n }\n if (message.result !== undefined) {\n Value.encode(Value.wrap(message.result), writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RunFinishedEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRunFinishedEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.threadId = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.runId = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.result = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<RunFinishedEvent>, I>>(base?: I): RunFinishedEvent {\n return RunFinishedEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<RunFinishedEvent>, I>>(object: I): RunFinishedEvent {\n const message = createBaseRunFinishedEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.threadId = object.threadId ?? \"\";\n message.runId = object.runId ?? \"\";\n message.result = object.result ?? undefined;\n return message;\n },\n};\n\nfunction createBaseRunErrorEvent(): RunErrorEvent {\n return { baseEvent: undefined, code: undefined, message: \"\" };\n}\n\nexport const RunErrorEvent: MessageFns<RunErrorEvent> = {\n encode(message: RunErrorEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.code !== undefined) {\n writer.uint32(18).string(message.code);\n }\n if (message.message !== \"\") {\n writer.uint32(26).string(message.message);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RunErrorEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRunErrorEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.code = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.message = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<RunErrorEvent>, I>>(base?: I): RunErrorEvent {\n return RunErrorEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<RunErrorEvent>, I>>(object: I): RunErrorEvent {\n const message = createBaseRunErrorEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.code = object.code ?? undefined;\n message.message = object.message ?? \"\";\n return message;\n },\n};\n\nfunction createBaseStepStartedEvent(): StepStartedEvent {\n return { baseEvent: undefined, stepName: \"\" };\n}\n\nexport const StepStartedEvent: MessageFns<StepStartedEvent> = {\n encode(message: StepStartedEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.stepName !== \"\") {\n writer.uint32(18).string(message.stepName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StepStartedEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStepStartedEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.stepName = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<StepStartedEvent>, I>>(base?: I): StepStartedEvent {\n return StepStartedEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<StepStartedEvent>, I>>(object: I): StepStartedEvent {\n const message = createBaseStepStartedEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.stepName = object.stepName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseStepFinishedEvent(): StepFinishedEvent {\n return { baseEvent: undefined, stepName: \"\" };\n}\n\nexport const StepFinishedEvent: MessageFns<StepFinishedEvent> = {\n encode(message: StepFinishedEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.stepName !== \"\") {\n writer.uint32(18).string(message.stepName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StepFinishedEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStepFinishedEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.stepName = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<StepFinishedEvent>, I>>(base?: I): StepFinishedEvent {\n return StepFinishedEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<StepFinishedEvent>, I>>(object: I): StepFinishedEvent {\n const message = createBaseStepFinishedEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.stepName = object.stepName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTextMessageChunkEvent(): TextMessageChunkEvent {\n return { baseEvent: undefined, messageId: undefined, role: undefined, delta: undefined, name: undefined };\n}\n\nexport const TextMessageChunkEvent: MessageFns<TextMessageChunkEvent> = {\n encode(message: TextMessageChunkEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.messageId !== undefined) {\n writer.uint32(18).string(message.messageId);\n }\n if (message.role !== undefined) {\n writer.uint32(26).string(message.role);\n }\n if (message.delta !== undefined) {\n writer.uint32(34).string(message.delta);\n }\n if (message.name !== undefined) {\n writer.uint32(42).string(message.name);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TextMessageChunkEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTextMessageChunkEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.messageId = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.role = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.delta = reader.string();\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.name = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<TextMessageChunkEvent>, I>>(base?: I): TextMessageChunkEvent {\n return TextMessageChunkEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<TextMessageChunkEvent>, I>>(object: I): TextMessageChunkEvent {\n const message = createBaseTextMessageChunkEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.messageId = object.messageId ?? undefined;\n message.role = object.role ?? undefined;\n message.delta = object.delta ?? undefined;\n message.name = object.name ?? undefined;\n return message;\n },\n};\n\nfunction createBaseToolCallChunkEvent(): ToolCallChunkEvent {\n return {\n baseEvent: undefined,\n toolCallId: undefined,\n toolCallName: undefined,\n parentMessageId: undefined,\n delta: undefined,\n };\n}\n\nexport const ToolCallChunkEvent: MessageFns<ToolCallChunkEvent> = {\n encode(message: ToolCallChunkEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.baseEvent !== undefined) {\n BaseEvent.encode(message.baseEvent, writer.uint32(10).fork()).join();\n }\n if (message.toolCallId !== undefined) {\n writer.uint32(18).string(message.toolCallId);\n }\n if (message.toolCallName !== undefined) {\n writer.uint32(26).string(message.toolCallName);\n }\n if (message.parentMessageId !== undefined) {\n writer.uint32(34).string(message.parentMessageId);\n }\n if (message.delta !== undefined) {\n writer.uint32(42).string(message.delta);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ToolCallChunkEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseToolCallChunkEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.baseEvent = BaseEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.toolCallId = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.toolCallName = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.parentMessageId = reader.string();\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.delta = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<ToolCallChunkEvent>, I>>(base?: I): ToolCallChunkEvent {\n return ToolCallChunkEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<ToolCallChunkEvent>, I>>(object: I): ToolCallChunkEvent {\n const message = createBaseToolCallChunkEvent();\n message.baseEvent = (object.baseEvent !== undefined && object.baseEvent !== null)\n ? BaseEvent.fromPartial(object.baseEvent)\n : undefined;\n message.toolCallId = object.toolCallId ?? undefined;\n message.toolCallName = object.toolCallName ?? undefined;\n message.parentMessageId = object.parentMessageId ?? undefined;\n message.delta = object.delta ?? undefined;\n return message;\n },\n};\n\nfunction createBaseEvent(): Event {\n return {\n textMessageStart: undefined,\n textMessageContent: undefined,\n textMessageEnd: undefined,\n toolCallStart: undefined,\n toolCallArgs: undefined,\n toolCallEnd: undefined,\n stateSnapshot: undefined,\n stateDelta: undefined,\n messagesSnapshot: undefined,\n raw: undefined,\n custom: undefined,\n runStarted: undefined,\n runFinished: undefined,\n runError: undefined,\n stepStarted: undefined,\n stepFinished: undefined,\n textMessageChunk: undefined,\n toolCallChunk: undefined,\n };\n}\n\nexport const Event: MessageFns<Event> = {\n encode(message: Event, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.textMessageStart !== undefined) {\n TextMessageStartEvent.encode(message.textMessageStart, writer.uint32(10).fork()).join();\n }\n if (message.textMessageContent !== undefined) {\n TextMessageContentEvent.encode(message.textMessageContent, writer.uint32(18).fork()).join();\n }\n if (message.textMessageEnd !== undefined) {\n TextMessageEndEvent.encode(message.textMessageEnd, writer.uint32(26).fork()).join();\n }\n if (message.toolCallStart !== undefined) {\n ToolCallStartEvent.encode(message.toolCallStart, writer.uint32(34).fork()).join();\n }\n if (message.toolCallArgs !== undefined) {\n ToolCallArgsEvent.encode(message.toolCallArgs, writer.uint32(42).fork()).join();\n }\n if (message.toolCallEnd !== undefined) {\n ToolCallEndEvent.encode(message.toolCallEnd, writer.uint32(50).fork()).join();\n }\n if (message.stateSnapshot !== undefined) {\n StateSnapshotEvent.encode(message.stateSnapshot, writer.uint32(58).fork()).join();\n }\n if (message.stateDelta !== undefined) {\n StateDeltaEvent.encode(message.stateDelta, writer.uint32(66).fork()).join();\n }\n if (message.messagesSnapshot !== undefined) {\n MessagesSnapshotEvent.encode(message.messagesSnapshot, writer.uint32(74).fork()).join();\n }\n if (message.raw !== undefined) {\n RawEvent.encode(message.raw, writer.uint32(82).fork()).join();\n }\n if (message.custom !== undefined) {\n CustomEvent.encode(message.custom, writer.uint32(90).fork()).join();\n }\n if (message.runStarted !== undefined) {\n RunStartedEvent.encode(message.runStarted, writer.uint32(98).fork()).join();\n }\n if (message.runFinished !== undefined) {\n RunFinishedEvent.encode(message.runFinished, writer.uint32(106).fork()).join();\n }\n if (message.runError !== undefined) {\n RunErrorEvent.encode(message.runError, writer.uint32(114).fork()).join();\n }\n if (message.stepStarted !== undefined) {\n StepStartedEvent.encode(message.stepStarted, writer.uint32(122).fork()).join();\n }\n if (message.stepFinished !== undefined) {\n StepFinishedEvent.encode(message.stepFinished, writer.uint32(130).fork()).join();\n }\n if (message.textMessageChunk !== undefined) {\n TextMessageChunkEvent.encode(message.textMessageChunk, writer.uint32(138).fork()).join();\n }\n if (message.toolCallChunk !== undefined) {\n ToolCallChunkEvent.encode(message.toolCallChunk, writer.uint32(146).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Event {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n const end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.textMessageStart = TextMessageStartEvent.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.textMessageContent = TextMessageContentEvent.decode(reader, reader.uint32());\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.textMessageEnd = TextMessageEndEvent.decode(reader, reader.uint32());\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.toolCallStart = ToolCallStartEvent.decode(reader, reader.uint32());\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.toolCallArgs = ToolCallArgsEvent.decode(reader, reader.uint32());\n continue;\n }\n case 6: {\n if (tag !== 50) {\n break;\n }\n\n message.toolCallEnd = ToolCallEndEvent.decode(reader, reader.uint32());\n continue;\n }\n case 7: {\n if (tag !== 58) {\n break;\n }\n\n message.stateSnapshot = StateSnapshotEvent.decode(reader, reader.uint32());\n continue;\n }\n case 8: {\n if (tag !== 66) {\n break;\n }\n\n message.stateDelta = StateDeltaEvent.decode(reader, reader.uint32());\n continue;\n }\n case 9: {\n if (tag !== 74) {\n break;\n }\n\n message.messagesSnapshot = MessagesSnapshotEvent.decode(reader, reader.uint32());\n continue;\n }\n case 10: {\n if (tag !== 82) {\n break;\n }\n\n message.raw = RawEvent.decode(reader, reader.uint32());\n continue;\n }\n case 11: {\n if (tag !== 90) {\n break;\n }\n\n message.custom = CustomEvent.decode(reader, reader.uint32());\n continue;\n }\n case 12: {\n if (tag !== 98) {\n break;\n }\n\n message.runStarted = RunStartedEvent.decode(reader, reader.uint32());\n continue;\n }\n case 13: {\n if (tag !== 106) {\n break;\n }\n\n message.runFinished = RunFinishedEvent.decode(reader, reader.uint32());\n continue;\n }\n case 14: {\n if (tag !== 114) {\n break;\n }\n\n message.runError = RunErrorEvent.decode(reader, reader.uint32());\n continue;\n }\n case 15: {\n if (tag !== 122) {\n break;\n }\n\n message.stepStarted = StepStartedEvent.decode(reader, reader.uint32());\n continue;\n }\n case 16: {\n if (tag !== 130) {\n break;\n }\n\n message.stepFinished = StepFinishedEvent.decode(reader, reader.uint32());\n continue;\n }\n case 17: {\n if (tag !== 138) {\n break;\n }\n\n message.textMessageChunk = TextMessageChunkEvent.decode(reader, reader.uint32());\n continue;\n }\n case 18: {\n if (tag !== 146) {\n break;\n }\n\n message.toolCallChunk = ToolCallChunkEvent.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n create<I extends Exact<DeepPartial<Event>, I>>(base?: I): Event {\n return Event.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<Event>, I>>(object: I): Event {\n const message = createBaseEvent();\n message.textMessageStart = (object.textMessageStart !== undefined && object.textMessageStart !== null)\n ? TextMessageStartEvent.fromPartial(object.textMessageStart)\n : undefined;\n message.textMessageContent = (object.textMessageContent !== undefined && object.textMessageContent !== null)\n ? TextMessageContentEvent.fromPartial(object.textMessageContent)\n : undefined;\n message.textMessageEnd = (object.textMessageEnd !== undefined && object.textMessageEnd !== null)\n ? TextMessageEndEvent.fromPartial(object.textMessageEnd)\n : undefined;\n message.toolCallStart = (object.toolCallStart !== undefined && object.toolCallStart !== null)\n ? ToolCallStartEvent.fromPartial(object.toolCallStart)\n : undefined;\n message.toolCallArgs = (object.toolCallArgs !== undefined && object.toolCallArgs !== null)\n ? ToolCallArgsEvent.fromPartial(object.toolCallArgs)\n : undefined;\n message.toolCallEnd = (object.toolCallEnd !== undefined && object.toolCallEnd !== null)\n ? ToolCallEndEvent.fromPartial(object.toolCallEnd)\n : undefined;\n message.stateSnapshot = (object.stateSnapshot !== undefined && object.stateSnapshot !== null)\n ? StateSnapshotEvent.fromPartial(object.stateSnapshot)\n : undefined;\n message.stateDelta = (object.stateDelta !== undefined && object.stateDelta !== null)\n ? StateDeltaEvent.fromPartial(object.stateDelta)\n : undefined;\n message.messagesSnapshot = (object.messagesSnapshot !== undefined && object.messagesSnapshot !== null)\n ? MessagesSnapshotEvent.fromPartial(object.messagesSnapshot)\n : undefined;\n message.raw = (object.raw !== undefined && object.raw !== null) ? RawEvent.fromPartial(object.raw) : undefined;\n message.custom = (object.custom !== undefined && object.custom !== null)\n ? CustomEvent.fromPartial(object.custom)\n : undefined;\n message.runStarted = (object.runStarted !== undefined && object.runStarted !== null)\n ? RunStartedEvent.fromPartial(object.runStarted)\n : undefined;\n message.runFinished = (object.runFinished !== undefined && object.runFinished !== null)\n ? RunFinishedEvent.fromPartial(object.runFinished)\n : undefined;\n message.runError = (object.runError !== undefined && object.runError !== null)\n ? RunErrorEvent.fromPartial(object.runError)\n : undefined;\n message.stepStarted = (object.stepStarted !== undefined && object.stepStarted !== null)\n ? StepStartedEvent.fromPartial(object.stepStarted)\n : undefined;\n message.stepFinished = (object.stepFinished !== undefined && object.stepFinished !== null)\n ? StepFinishedEvent.fromPartial(object.stepFinished)\n : undefined;\n message.textMessageChunk = (object.textMessageChunk !== undefined && object.textMessageChunk !== null)\n ? TextMessageChunkEvent.fromPartial(object.textMessageChunk)\n : undefined;\n message.toolCallChunk = (object.toolCallChunk !== undefined && object.toolCallChunk !== null)\n ? ToolCallChunkEvent.fromPartial(object.toolCallChunk)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin ? T\n : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>\n : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & { [K in Exclude<keyof I, KeysOfUnion<P>>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nexport interface MessageFns<T> {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;\n fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;\n}\n", "import { BaseEvent, AGUIEvent, EventSchemas, EventType, Message } from \"@ag-ui/core\";\nimport * as protoEvents from \"./generated/events\";\nimport * as protoPatch from \"./generated/patch\";\n\nconst toProtoSource = (source: any): any => {\n if (!source || typeof source !== \"object\") {\n return undefined;\n }\n\n if (source.type === \"data\") {\n return {\n data: {\n value: source.value,\n mimeType: source.mimeType,\n },\n };\n }\n\n if (source.type === \"url\") {\n return {\n url: {\n value: source.value,\n mimeType: source.mimeType,\n },\n };\n }\n\n return undefined;\n};\n\nconst toProtoContentPart = (part: any): any => {\n if (!part || typeof part !== \"object\") {\n return undefined;\n }\n\n switch (part.type) {\n case \"text\":\n return {\n text: {\n text: part.text,\n },\n };\n case \"image\":\n return {\n image: {\n source: toProtoSource(part.source),\n metadata: part.metadata,\n },\n };\n case \"audio\":\n return {\n audio: {\n source: toProtoSource(part.source),\n metadata: part.metadata,\n },\n };\n case \"video\":\n return {\n video: {\n source: toProtoSource(part.source),\n metadata: part.metadata,\n },\n };\n case \"document\":\n return {\n document: {\n source: toProtoSource(part.source),\n metadata: part.metadata,\n },\n };\n case \"binary\": {\n const source = part.data\n ? { data: { value: part.data, mimeType: part.mimeType } }\n : part.url\n ? { url: { value: part.url, mimeType: part.mimeType } }\n : part.id\n ? { url: { value: part.id, mimeType: part.mimeType } }\n : undefined;\n\n if (!source) {\n return undefined;\n }\n\n return {\n document: {\n source,\n metadata: {\n legacyBinary: true,\n filename: part.filename,\n id: part.id,\n },\n },\n };\n }\n default:\n return undefined;\n }\n};\n\nconst fromProtoSource = (source: any): any => {\n if (!source || typeof source !== \"object\") {\n return undefined;\n }\n\n if (source.data) {\n return {\n type: \"data\",\n value: source.data.value,\n mimeType: source.data.mimeType,\n };\n }\n\n if (source.url) {\n return {\n type: \"url\",\n value: source.url.value,\n mimeType: source.url.mimeType,\n };\n }\n\n return undefined;\n};\n\nconst fromProtoContentPart = (part: any): any => {\n if (!part || typeof part !== \"object\") {\n return undefined;\n }\n\n if (part.text) {\n return {\n type: \"text\",\n text: part.text.text,\n };\n }\n\n if (part.image) {\n return {\n type: \"image\",\n source: fromProtoSource(part.image.source),\n metadata: part.image.metadata,\n };\n }\n\n if (part.audio) {\n return {\n type: \"audio\",\n source: fromProtoSource(part.audio.source),\n metadata: part.audio.metadata,\n };\n }\n\n if (part.video) {\n return {\n type: \"video\",\n source: fromProtoSource(part.video.source),\n metadata: part.video.metadata,\n };\n }\n\n if (part.document) {\n return {\n type: \"document\",\n source: fromProtoSource(part.document.source),\n metadata: part.document.metadata,\n };\n }\n\n return undefined;\n};\n\nfunction toCamelCase(str: string): string {\n return str.toLowerCase().replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\n/**\n * Encodes an event message to a protocol buffer binary format.\n */\nexport function encode(event: BaseEvent): Uint8Array {\n /**\n * In previous versions of AG-UI, we didn't really validate the events\n * against a schema. With stronger types for events and Zod schemas, we\n * can now validate.\n *\n * However, I don't want to break compatibility with existing clients\n * even if they are encoding invalid events. This surfaces a warning\n * to them in those situations.\n *\n * @author mikeryandev\n */\n let validatedEvent: AGUIEvent | BaseEvent;\n try {\n validatedEvent = EventSchemas.parse(event) as AGUIEvent;\n } catch (err) {\n console.warn(\n \"[ag-ui][proto.encode] Malformed devent detected, falling back to unvalidated event\",\n err,\n event,\n );\n validatedEvent = event;\n }\n const oneofField = toCamelCase(validatedEvent.type);\n const { type, timestamp, rawEvent, ...rest } = validatedEvent as AGUIEvent as Record<string, any>;\n\n // since protobuf does not support optional arrays, we need to ensure that the toolCalls array is always present\n if (type === EventType.MESSAGES_SNAPSHOT && Array.isArray(rest.messages)) {\n rest.messages = (rest.messages as Message[]).map((message) => {\n const untypedMessage = message as any;\n const normalizedMessage: any = { ...untypedMessage, contentParts: [] };\n\n if (Array.isArray(untypedMessage.content)) {\n const contentParts = untypedMessage.content\n .map((part: any) => toProtoContentPart(part))\n .filter((part: any) => part !== undefined);\n\n normalizedMessage.contentParts = contentParts;\n normalizedMessage.content = undefined;\n }\n\n if (untypedMessage.toolCalls === undefined) {\n normalizedMessage.toolCalls = [];\n }\n\n return normalizedMessage;\n });\n }\n\n // custom mapping for json patch operations\n if (type === EventType.STATE_DELTA && Array.isArray(rest.delta)) {\n rest.delta = (rest.delta as any[]).map((operation: any) => ({\n ...operation,\n op: protoPatch.JsonPatchOperationType[operation.op.toUpperCase()],\n }));\n }\n\n const eventMessage = {\n [oneofField]: {\n baseEvent: {\n type: protoEvents.EventType[event.type as keyof typeof protoEvents.EventType],\n timestamp,\n rawEvent,\n },\n ...rest,\n },\n };\n return protoEvents.Event.encode(eventMessage).finish();\n}\n\n/**\n * Decodes a protocol buffer binary format to an event message.\n * The format includes a 4-byte length prefix followed by the message.\n */\nexport function decode(data: Uint8Array): BaseEvent {\n const event = protoEvents.Event.decode(data);\n const decoded = Object.values(event).find((value) => value !== undefined);\n if (!decoded) {\n throw new Error(\"Invalid event\");\n }\n decoded.type = protoEvents.EventType[decoded.baseEvent.type];\n decoded.timestamp = decoded.baseEvent.timestamp;\n decoded.rawEvent = decoded.baseEvent.rawEvent;\n\n // we want tool calls to be optional, so we need to remove them if they are empty\n if (decoded.type === EventType.MESSAGES_SNAPSHOT) {\n for (const message of (decoded as any).messages as Message[]) {\n const untypedMessage = message as any;\n\n if (untypedMessage.role === \"user\" && Array.isArray(untypedMessage.contentParts)) {\n const contentParts = untypedMessage.contentParts\n .map((part: any) => fromProtoContentPart(part))\n .filter((part: any) => part !== undefined);\n\n if (contentParts.length > 0) {\n untypedMessage.content = contentParts;\n }\n }\n\n if (Array.isArray(untypedMessage.contentParts) && untypedMessage.contentParts.length === 0) {\n untypedMessage.contentParts = undefined;\n }\n\n if (untypedMessage.toolCalls?.length === 0) {\n untypedMessage.toolCalls = undefined;\n }\n }\n }\n\n // custom mapping for json patch operations\n if (decoded.type === EventType.STATE_DELTA) {\n for (const operation of (decoded as any).delta) {\n operation.op = protoPatch.JsonPatchOperationType[operation.op].toLowerCase();\n Object.keys(operation).forEach((key) => {\n if (operation[key] === undefined) {\n delete operation[key];\n }\n });\n }\n }\n\n Object.keys(decoded).forEach((key) => {\n if (decoded[key] === undefined) {\n delete decoded[key];\n }\n });\n\n return EventSchemas.parse(decoded);\n}\n", "export { encode, decode } from \"./proto\";\n\nexport const AGUI_MEDIA_TYPE = \"application/vnd.ag-ui.event+proto\";\n", "/**\n * Allowed arithmetic operators\n */\nexport type CompareOperator = '>' | '>=' | '=' | '<' | '<=' | '!=';\n\nexport const semver =\n /^[v^~<>=]*?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i;\n\nexport const validateAndParse = (version: string) => {\n if (typeof version !== 'string') {\n throw new TypeError('Invalid argument expected string');\n }\n const match = version.match(semver);\n if (!match) {\n throw new Error(\n `Invalid argument not valid semver ('${version}' received)`\n );\n }\n match.shift();\n return match;\n};\n\nconst isWildcard = (s: string) => s === '*' || s === 'x' || s === 'X';\n\nconst tryParse = (v: string) => {\n const n = parseInt(v, 10);\n return isNaN(n) ? v : n;\n};\n\nconst forceType = (a: string | number, b: string | number) =>\n typeof a !== typeof b ? [String(a), String(b)] : [a, b];\n\nconst compareStrings = (a: string, b: string) => {\n if (isWildcard(a) || isWildcard(b)) return 0;\n const [ap, bp] = forceType(tryParse(a), tryParse(b));\n if (ap > bp) return 1;\n if (ap < bp) return -1;\n return 0;\n};\n\nexport const compareSegments = (\n a: string | string[] | RegExpMatchArray,\n b: string | string[] | RegExpMatchArray\n) => {\n for (let i = 0; i < Math.max(a.length, b.length); i++) {\n const r = compareStrings(a[i] || '0', b[i] || '0');\n if (r !== 0) return r;\n }\n return 0;\n};\n", "import { compareSegments, validateAndParse } from './utils.js';\n\n/**\n * Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.\n * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.\n * @param v1 - First version to compare\n * @param v2 - Second version to compare\n * @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).\n */\nexport const compareVersions = (v1: string, v2: string) => {\n // validate input and split into segments\n const n1 = validateAndParse(v1);\n const n2 = validateAndParse(v2);\n\n // pop off the patch\n const p1 = n1.pop();\n const p2 = n2.pop();\n\n // validate numbers\n const r = compareSegments(n1, n2);\n if (r !== 0) return r;\n\n // validate pre-release\n if (p1 && p2) {\n return compareSegments(p1.split('.'), p2.split('.'));\n } else if (p1 || p2) {\n return p1 ? -1 : 1;\n }\n\n return 0;\n};\n", "import { v4 as uuidv4 } from \"uuid\";\n\nexport const structuredClone_ = <T>(obj: T): T => {\n if (typeof structuredClone === \"function\") {\n return structuredClone(obj);\n }\n\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch (err) {\n // Preserve array vs object type in shallow fallback\n if (Array.isArray(obj)) {\n return [...obj] as unknown as T;\n }\n return { ...obj } as T;\n }\n};\n\n/**\n * Generate a random UUID v4\n * Cross-platform compatible (Node.js, browsers, React Native)\n */\nexport function randomUUID(): string {\n return uuidv4();\n}\n\n// Note: semver helpers were removed in favor of using\n// the external `compare-versions` library directly at call sites.\n\n/**\n * Parses a semantic version string into its numeric components.\n * Supports incomplete versions (e.g. \"1\", \"1.2\") by defaulting missing segments to zero.\n *\n * @throws If the version string is not a valid semantic version.\n */\n// (Intentionally left minimal.)\n", "import {\n BaseEvent,\n Message,\n RunAgentInput,\n RunErrorEvent,\n RunFinishedEvent,\n RunStartedEvent,\n State,\n StateDeltaEvent,\n StateSnapshotEvent,\n StepFinishedEvent,\n StepStartedEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n ToolCallStartEvent,\n MessagesSnapshotEvent,\n RawEvent,\n CustomEvent,\n ToolCall,\n ActivitySnapshotEvent,\n ActivityDeltaEvent,\n ActivityMessage,\n ReasoningStartEvent,\n ReasoningMessageStartEvent,\n ReasoningMessageContentEvent,\n ReasoningMessageEndEvent,\n ReasoningEndEvent,\n ReasoningEncryptedValueEvent,\n} from \"@ag-ui/core\";\nimport { AbstractAgent } from \"./agent\";\nimport { structuredClone_ } from \"@/utils\";\n\nexport interface AgentStateMutation {\n messages?: Message[];\n state?: State;\n stopPropagation?: boolean;\n}\n\nexport interface AgentSubscriberParams {\n messages: ReadonlyArray<Readonly<Message>>;\n // NOTE: State resolves to `any` at the type level (z.infer<typeof z.any()>), so Readonly<State>\n // provides no compile-time mutation protection. Runtime enforcement via deepFreeze in\n // dev/test mode is the only guard against in-place mutation of state.\n state: Readonly<State>;\n agent: AbstractAgent;\n input: RunAgentInput;\n}\n\n// Utility type to allow callbacks to be implemented either synchronously or asynchronously.\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport interface AgentSubscriber {\n // Request lifecycle\n onRunInitialized?(\n params: AgentSubscriberParams,\n ): MaybePromise<Omit<AgentStateMutation, \"stopPropagation\"> | void>;\n onRunFailed?(\n params: { error: Error } & AgentSubscriberParams,\n ): MaybePromise<Omit<AgentStateMutation, \"stopPropagation\"> | void>;\n onRunFinalized?(\n params: AgentSubscriberParams,\n ): MaybePromise<Omit<AgentStateMutation, \"stopPropagation\"> | void>;\n\n // Events\n onEvent?(\n params: { event: BaseEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onRunStartedEvent?(\n params: { event: RunStartedEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n onRunFinishedEvent?(\n params: { event: RunFinishedEvent; result?: any } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n onRunErrorEvent?(\n params: { event: RunErrorEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onStepStartedEvent?(\n params: { event: StepStartedEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n onStepFinishedEvent?(\n params: { event: StepFinishedEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onTextMessageStartEvent?(\n params: { event: TextMessageStartEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n onTextMessageContentEvent?(\n params: {\n event: TextMessageContentEvent;\n textMessageBuffer: string;\n } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n onTextMessageEndEvent?(\n params: { event: TextMessageEndEvent; textMessageBuffer: string } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onToolCallStartEvent?(\n params: { event: ToolCallStartEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n onToolCallArgsEvent?(\n params: {\n event: ToolCallArgsEvent;\n toolCallBuffer: string;\n toolCallName: string;\n partialToolCallArgs: Record<string, any>;\n } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n onToolCallEndEvent?(\n params: {\n event: ToolCallEndEvent;\n toolCallName: string;\n toolCallArgs: Record<string, any>;\n } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onToolCallResultEvent?(\n params: { event: ToolCallResultEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onStateSnapshotEvent?(\n params: { event: StateSnapshotEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onStateDeltaEvent?(\n params: { event: StateDeltaEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onMessagesSnapshotEvent?(\n params: { event: MessagesSnapshotEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onActivitySnapshotEvent?(\n params: {\n event: ActivitySnapshotEvent;\n activityMessage?: ActivityMessage;\n existingMessage?: Message;\n } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onActivityDeltaEvent?(\n params: {\n event: ActivityDeltaEvent;\n activityMessage?: ActivityMessage;\n } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onRawEvent?(\n params: { event: RawEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onCustomEvent?(\n params: { event: CustomEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n // Reasoning events\n onReasoningStartEvent?(\n params: { event: ReasoningStartEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onReasoningMessageStartEvent?(\n params: { event: ReasoningMessageStartEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onReasoningMessageContentEvent?(\n params: {\n event: ReasoningMessageContentEvent;\n reasoningMessageBuffer: string;\n } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onReasoningMessageEndEvent?(\n params: {\n event: ReasoningMessageEndEvent;\n reasoningMessageBuffer: string;\n } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onReasoningEndEvent?(\n params: { event: ReasoningEndEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n onReasoningEncryptedValueEvent?(\n params: { event: ReasoningEncryptedValueEvent } & AgentSubscriberParams,\n ): MaybePromise<AgentStateMutation | void>;\n\n // State changes\n onMessagesChanged?(\n params: Omit<AgentSubscriberParams, \"input\"> & { input?: RunAgentInput },\n ): MaybePromise<void>;\n onStateChanged?(\n params: Omit<AgentSubscriberParams, \"input\"> & { input?: RunAgentInput },\n ): MaybePromise<void>;\n onNewMessage?(\n params: { message: Message } & Omit<AgentSubscriberParams, \"input\"> & {\n input?: RunAgentInput;\n },\n ): MaybePromise<void>;\n onNewToolCall?(\n params: { toolCall: ToolCall } & Omit<AgentSubscriberParams, \"input\"> & {\n input?: RunAgentInput;\n },\n ): MaybePromise<void>;\n}\n\nfunction deepFreeze<T>(obj: T): T {\n Object.freeze(obj);\n if (obj !== null && typeof obj === \"object\") {\n for (const value of Object.values(obj)) {\n if (value !== null && typeof value === \"object\" && !Object.isFrozen(value)) {\n deepFreeze(value);\n }\n }\n }\n return obj;\n}\n\nexport async function runSubscribersWithMutation(\n subscribers: AgentSubscriber[],\n initialMessages: Message[],\n initialState: State,\n executor: (\n subscriber: AgentSubscriber,\n messages: ReadonlyArray<Readonly<Message>>,\n state: Readonly<State>,\n ) => MaybePromise<AgentStateMutation | void>,\n): Promise<AgentStateMutation> {\n const isTestEnvironment =\n process.env.NODE_ENV === \"test\" || Boolean(process.env.VITEST_WORKER_ID);\n const isDev =\n process.env.NODE_ENV === \"development\" ||\n process.env.NODE_ENV === \"test\" ||\n Boolean(process.env.VITEST_WORKER_ID);\n const baselineMessages = structuredClone_(initialMessages);\n const baselineState = structuredClone_(initialState);\n let messages: Message[] = baselineMessages;\n let state: State = baselineState;\n\n let stopPropagation: boolean | undefined = undefined;\n\n for (const subscriber of subscribers) {\n try {\n // Subscribers receive shared references and must not mutate them in-place.\n // Mutations should only be communicated via the return value.\n // In dev/test mode only: deep-freeze inputs so accidental in-place mutations surface\n // as TypeErrors immediately. In production, enforcement is type-level only.\n if (isDev) {\n deepFreeze(messages);\n deepFreeze(state);\n }\n const mutation = await executor(subscriber, messages, state);\n\n if (mutation === undefined) {\n // Nothing returned – keep going\n continue;\n }\n\n // Replace with a defensive copy of the subscriber's mutation,\n // but skip if the subscriber returned the same reference (no-op).\n if (mutation.messages !== undefined && mutation.messages !== messages) {\n messages = structuredClone_(mutation.messages);\n }\n\n if (mutation.state !== undefined && mutation.state !== state) {\n state = structuredClone_(mutation.state);\n }\n\n stopPropagation = mutation.stopPropagation;\n\n if (stopPropagation === true) {\n break;\n }\n } catch (error) {\n if (isDev && error instanceof TypeError) {\n // Likely a freeze violation: subscriber attempted to mutate frozen inputs in-place.\n // In test environments, re-throw so tests fail fast and the violation is visible.\n // In development (non-test), log a specific message to distinguish freeze violations\n // from ordinary subscriber errors.\n if (isTestEnvironment) {\n throw error;\n }\n console.error(\n \"AG-UI: Subscriber attempted to mutate frozen inputs in-place. \" +\n \"Return mutations via AgentStateMutation instead of mutating directly.\",\n error,\n );\n } else if (!isTestEnvironment) {\n console.error(\"Subscriber error:\", error);\n }\n // Skip this subscriber's mutation and continue\n continue;\n }\n }\n\n // In dev/test mode, the canonical messages/state references may have been\n // frozen in-place (for subscriber mutation detection). Clone them before\n // returning so callers receive a mutable copy, not a frozen one.\n return {\n ...(messages !== baselineMessages\n ? { messages: isDev && Object.isFrozen(messages) ? structuredClone_(messages) : messages }\n : {}),\n ...(state !== baselineState\n ? { state: isDev && Object.isFrozen(state) ? structuredClone_(state) : state }\n : {}),\n ...(stopPropagation !== undefined ? { stopPropagation } : {}),\n };\n}\n", "import { Message, RunAgentInput, State } from \"@ag-ui/core\";\n\n/** Normalized debug configuration for the AG-UI agent. */\nexport interface ResolvedAgentDebugConfig {\n enabled: boolean;\n events: boolean;\n lifecycle: boolean;\n verbose: boolean;\n}\n\n/** Debug input — boolean shorthand or granular config. */\nexport type AgentDebugConfig =\n | boolean\n | {\n events?: boolean;\n lifecycle?: boolean;\n verbose?: boolean;\n };\n\n/** Resolves an AgentDebugConfig into a normalized ResolvedAgentDebugConfig. */\nexport function resolveAgentDebugConfig(\n debug: AgentDebugConfig | undefined,\n): ResolvedAgentDebugConfig {\n if (!debug) return { enabled: false, events: false, lifecycle: false, verbose: false };\n if (debug === true) return { enabled: true, events: true, lifecycle: true, verbose: true };\n\n const events = debug.events ?? true;\n const lifecycle = debug.lifecycle ?? true;\n const verbose = debug.verbose ?? false;\n return { enabled: events || lifecycle, events, lifecycle, verbose };\n}\n\nexport interface AgentConfig {\n agentId?: string;\n description?: string;\n threadId?: string;\n initialMessages?: Message[];\n initialState?: State;\n debug?: AgentDebugConfig;\n}\n\nexport interface HttpAgentConfig extends AgentConfig {\n url: string;\n headers?: Record<string, string>;\n}\n\nexport type RunAgentParameters = Partial<\n Pick<RunAgentInput, \"runId\" | \"tools\" | \"context\" | \"forwardedProps\">\n>;\n", "import { ResolvedAgentDebugConfig, resolveAgentDebugConfig } from \"@/agent/types\";\n\n/** Accepted input wherever a debug logger can be provided. */\nexport type DebugLoggerInput = DebugLogger | boolean | null | undefined;\n\n/**\n * Resolves a DebugLoggerInput into a DebugLogger or undefined.\n * - `true` → creates a new DebugLogger with all logging enabled\n * - `DebugLogger` instance → returned as-is\n * - `false`, `null`, `undefined` → returns undefined\n */\nexport function resolveDebugLogger(input: DebugLoggerInput): DebugLogger | undefined {\n if (input instanceof DebugLogger) return input;\n if (input === true) return new DebugLogger(resolveAgentDebugConfig(true));\n return undefined;\n}\n\n/**\n * Centralized debug logger for the AG-UI event pipeline.\n * Handles verbose vs summary output based on config.\n */\nexport class DebugLogger {\n constructor(private config: ResolvedAgentDebugConfig) {}\n\n /**\n * Log an event-level debug message.\n * Only logs when `config.events` is enabled.\n * In verbose mode, logs the full data; otherwise logs the summary.\n */\n event(prefix: string, label: string, data: unknown, summary?: Record<string, unknown>): void {\n if (!this.config.events) return;\n if (this.config.verbose) {\n console.debug(`[${prefix}] ${label}`, typeof data === \"string\" ? data : JSON.stringify(data));\n } else {\n console.debug(`[${prefix}] ${label}`, summary ?? data);\n }\n }\n\n /**\n * Log a lifecycle-level debug message.\n * Only logs when `config.lifecycle` is enabled.\n */\n lifecycle(prefix: string, label: string, data?: Record<string, unknown>): void {\n if (!this.config.lifecycle) return;\n if (data) {\n console.debug(`[${prefix}] ${label}`, data);\n } else {\n console.debug(`[${prefix}] ${label}`);\n }\n }\n\n /** Whether event-level logging is enabled. */\n get eventsEnabled(): boolean {\n return this.config.events;\n }\n\n /** Whether lifecycle-level logging is enabled. */\n get lifecycleEnabled(): boolean {\n return this.config.lifecycle;\n }\n\n /** Whether any logging is enabled. */\n get enabled(): boolean {\n return this.config.enabled;\n }\n}\n\n/**\n * Creates a DebugLogger if debug is enabled, otherwise returns undefined.\n * This allows consumers to pass it around cheaply when debug is off.\n */\nexport function createDebugLogger(config: ResolvedAgentDebugConfig): DebugLogger | undefined {\n return config.enabled ? new DebugLogger(config) : undefined;\n}\n", "import type { AbstractAgent } from \"@/agent/agent\";\nimport {\n type AgentStateMutation,\n type AgentSubscriber,\n runSubscribersWithMutation,\n} from \"@/agent/subscriber\";\nimport {\n type ActivityDeltaEvent,\n type ActivityMessage,\n type ActivitySnapshotEvent,\n type AssistantMessage,\n type BaseEvent,\n type CustomEvent,\n DeveloperMessage,\n EventType,\n type Message,\n type MessagesSnapshotEvent,\n type RawEvent,\n type ReasoningEncryptedValueEvent,\n type ReasoningEndEvent,\n type ReasoningMessage,\n type ReasoningMessageContentEvent,\n type ReasoningMessageEndEvent,\n type ReasoningMessageStartEvent,\n type ReasoningStartEvent,\n type RunAgentInput,\n type RunErrorEvent,\n type RunFinishedEvent,\n type RunStartedEvent,\n type StateDeltaEvent,\n type StateSnapshotEvent,\n type StepFinishedEvent,\n type StepStartedEvent,\n SystemMessage,\n type TextMessageContentEvent,\n type TextMessageEndEvent,\n type TextMessageStartEvent,\n type ToolCallArgsEvent,\n type ToolCallEndEvent,\n type ToolCallResultEvent,\n type ToolCallStartEvent,\n type ToolMessage,\n UserMessage,\n} from \"@ag-ui/core\";\nimport * as jsonpatch from \"fast-json-patch\";\nimport { EMPTY, of } from \"rxjs\";\nimport type { Observable } from \"rxjs\";\nimport { concatMap, defaultIfEmpty, mergeAll, mergeMap } from \"rxjs/operators\";\nimport untruncateJson from \"untruncate-json\";\nimport { structuredClone_ } from \"../utils\";\nimport { type DebugLoggerInput, resolveDebugLogger } from \"@/debug-logger\";\n\nexport const defaultApplyEvents = (\n input: RunAgentInput,\n events$: Observable<BaseEvent>,\n agent: AbstractAgent,\n subscribers: AgentSubscriber[],\n debugLogger?: DebugLoggerInput,\n): Observable<AgentStateMutation> => {\n const log = resolveDebugLogger(debugLogger);\n let messages = structuredClone_(agent.messages);\n let state = structuredClone_(input.state);\n let currentMutation: AgentStateMutation = {};\n\n const applyMutation = (mutation: AgentStateMutation) => {\n if (mutation.messages !== undefined) {\n messages = mutation.messages;\n currentMutation.messages = mutation.messages;\n }\n if (mutation.state !== undefined) {\n state = mutation.state;\n currentMutation.state = mutation.state;\n }\n };\n\n const emitUpdates = () => {\n const result = structuredClone_(currentMutation) as AgentStateMutation;\n currentMutation = {};\n if (result.messages !== undefined || result.state !== undefined) {\n return of(result);\n }\n return EMPTY;\n };\n\n return events$.pipe(\n concatMap(async (event) => {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onEvent?.({ event, agent, input, messages, state }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation === true) {\n log?.event(\"APPLY\", \"Event dropped:\", event, {\n type: event.type,\n reason: \"stopPropagation by subscriber\",\n });\n } else {\n log?.event(\"APPLY\", \"Event applied:\", event, {\n type: event.type,\n subscribers: subscribers.length,\n });\n }\n\n if (mutation.stopPropagation === true) {\n return emitUpdates();\n }\n\n switch (event.type) {\n case EventType.TEXT_MESSAGE_START: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onTextMessageStartEvent?.({\n event: event as TextMessageStartEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n const { messageId, role = \"assistant\", name } = event as TextMessageStartEvent;\n\n // Check if a message with this ID already exists (e.g., created by TOOL_CALL_START\n // with the same parentMessageId)\n const existingMessage = messages.find((m) => m.id === messageId);\n\n if (!existingMessage) {\n // Create a new message using properties from the event\n // Text messages can be developer, system, assistant, or user (not tool)\n const newMessage: Message = {\n id: messageId,\n role: role,\n content: \"\",\n ...(name !== undefined && { name }),\n };\n\n // Add the new message to the messages array\n messages.push(newMessage);\n applyMutation({ messages });\n }\n // If message already exists, we don't need to create a new one\n // The TEXT_MESSAGE_CONTENT events will update the existing message's content\n }\n return emitUpdates();\n }\n\n case EventType.TEXT_MESSAGE_CONTENT: {\n const { messageId, delta } = event as TextMessageContentEvent;\n\n // Find the target message by ID\n const targetMessage = messages.find((m) => m.id === messageId);\n if (!targetMessage) {\n console.warn(`TEXT_MESSAGE_CONTENT: No message found with ID '${messageId}'`);\n return emitUpdates();\n }\n\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onTextMessageContentEvent?.({\n event: event as TextMessageContentEvent,\n messages,\n state,\n agent,\n input,\n textMessageBuffer:\n typeof targetMessage.content === \"string\" ? targetMessage.content : \"\",\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n // Append content to the correct message by ID\n const existingContent =\n typeof targetMessage.content === \"string\" ? targetMessage.content : \"\";\n targetMessage.content = `${existingContent}${delta}`;\n applyMutation({ messages });\n }\n\n return emitUpdates();\n }\n\n case EventType.TEXT_MESSAGE_END: {\n const { messageId } = event as TextMessageEndEvent;\n\n // Find the target message by ID\n const targetMessage = messages.find((m) => m.id === messageId);\n if (!targetMessage) {\n console.warn(`TEXT_MESSAGE_END: No message found with ID '${messageId}'`);\n return emitUpdates();\n }\n\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onTextMessageEndEvent?.({\n event: event as TextMessageEndEvent,\n messages,\n state,\n agent,\n input,\n textMessageBuffer:\n typeof targetMessage.content === \"string\" ? targetMessage.content : \"\",\n }),\n );\n applyMutation(mutation);\n\n await Promise.all(\n subscribers.map((subscriber) => {\n subscriber.onNewMessage?.({\n message: targetMessage,\n messages,\n state,\n agent,\n input,\n });\n }),\n );\n\n return emitUpdates();\n }\n\n case EventType.TOOL_CALL_START: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onToolCallStartEvent?.({\n event: event as ToolCallStartEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n const { toolCallId, toolCallName, parentMessageId } = event as ToolCallStartEvent;\n\n let targetMessage: AssistantMessage;\n\n // Use last message if parentMessageId exists, we have messages, and the parentMessageId matches the last message's id\n if (\n parentMessageId &&\n messages.length > 0 &&\n messages[messages.length - 1].id === parentMessageId\n ) {\n targetMessage = messages[messages.length - 1] as AssistantMessage;\n } else {\n // Create a new message otherwise\n targetMessage = {\n id: parentMessageId || toolCallId,\n role: \"assistant\",\n toolCalls: [],\n };\n messages.push(targetMessage);\n }\n\n targetMessage.toolCalls ??= [];\n\n // Add the new tool call\n targetMessage.toolCalls.push({\n id: toolCallId,\n type: \"function\",\n function: {\n name: toolCallName,\n arguments: \"\",\n },\n });\n\n applyMutation({ messages });\n }\n\n return emitUpdates();\n }\n\n case EventType.TOOL_CALL_ARGS: {\n const { toolCallId, delta } = event as ToolCallArgsEvent;\n\n // Find the message containing this tool call\n const targetMessage = messages.find((m) =>\n (m as AssistantMessage).toolCalls?.some((tc) => tc.id === toolCallId),\n ) as AssistantMessage;\n\n if (!targetMessage) {\n console.warn(\n `TOOL_CALL_ARGS: No message found containing tool call with ID '${toolCallId}'`,\n );\n return emitUpdates();\n }\n\n // Find the specific tool call\n const targetToolCall = targetMessage.toolCalls?.find((tc) => tc.id === toolCallId);\n if (!targetToolCall) {\n console.warn(`TOOL_CALL_ARGS: No tool call found with ID '${toolCallId}'`);\n return emitUpdates();\n }\n\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) => {\n const toolCallBuffer = targetToolCall.function.arguments;\n const toolCallName = targetToolCall.function.name;\n let partialToolCallArgs = {};\n try {\n // Parse from toolCallBuffer only (before current delta is applied)\n partialToolCallArgs = untruncateJson(toolCallBuffer);\n } catch (error) {}\n\n return subscriber.onToolCallArgsEvent?.({\n event: event as ToolCallArgsEvent,\n messages,\n state,\n agent,\n input,\n toolCallBuffer,\n toolCallName,\n partialToolCallArgs,\n });\n },\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n // Append the arguments to the correct tool call by ID\n targetToolCall.function.arguments += delta;\n applyMutation({ messages });\n }\n\n return emitUpdates();\n }\n\n case EventType.TOOL_CALL_END: {\n const { toolCallId } = event as ToolCallEndEvent;\n\n // Find the message containing this tool call\n const targetMessage = messages.find((m) =>\n (m as AssistantMessage).toolCalls?.some((tc) => tc.id === toolCallId),\n ) as AssistantMessage;\n\n if (!targetMessage) {\n console.warn(\n `TOOL_CALL_END: No message found containing tool call with ID '${toolCallId}'`,\n );\n return emitUpdates();\n }\n\n // Find the specific tool call\n const targetToolCall = targetMessage.toolCalls?.find((tc) => tc.id === toolCallId);\n if (!targetToolCall) {\n console.warn(`TOOL_CALL_END: No tool call found with ID '${toolCallId}'`);\n return emitUpdates();\n }\n\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) => {\n const toolCallArgsString = targetToolCall.function.arguments;\n const toolCallName = targetToolCall.function.name;\n let toolCallArgs = {};\n try {\n toolCallArgs = JSON.parse(toolCallArgsString);\n } catch (error) {}\n return subscriber.onToolCallEndEvent?.({\n event: event as ToolCallEndEvent,\n messages,\n state,\n agent,\n input,\n toolCallName,\n toolCallArgs,\n });\n },\n );\n applyMutation(mutation);\n\n await Promise.all(\n subscribers.map((subscriber) => {\n subscriber.onNewToolCall?.({\n toolCall: targetToolCall,\n messages,\n state,\n agent,\n input,\n });\n }),\n );\n\n return emitUpdates();\n }\n\n case EventType.TOOL_CALL_RESULT: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onToolCallResultEvent?.({\n event: event as ToolCallResultEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n const { messageId, toolCallId, content, role } = event as ToolCallResultEvent;\n\n const toolMessage: ToolMessage = {\n id: messageId,\n toolCallId,\n role: role || \"tool\",\n content: content,\n };\n\n messages.push(toolMessage);\n\n await Promise.all(\n subscribers.map((subscriber) => {\n subscriber.onNewMessage?.({\n message: toolMessage,\n messages,\n state,\n agent,\n input,\n });\n }),\n );\n\n applyMutation({ messages });\n }\n\n return emitUpdates();\n }\n\n case EventType.STATE_SNAPSHOT: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onStateSnapshotEvent?.({\n event: event as StateSnapshotEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n const { snapshot } = event as StateSnapshotEvent;\n\n // Replace state with the literal snapshot\n state = snapshot;\n\n applyMutation({ state });\n }\n\n return emitUpdates();\n }\n\n case EventType.STATE_DELTA: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onStateDeltaEvent?.({\n event: event as StateDeltaEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n const { delta } = event as StateDeltaEvent;\n\n try {\n // Apply the JSON Patch operations to the current state without mutating the original\n const result = jsonpatch.applyPatch(state, delta, true, false);\n state = result.newDocument;\n applyMutation({ state });\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(\n `Failed to apply state patch:\\nCurrent state: ${JSON.stringify(state, null, 2)}\\nPatch operations: ${JSON.stringify(delta, null, 2)}\\nError: ${errorMessage}`,\n );\n // If patch failed, only emit updates if there were subscriber mutations\n // This prevents emitting updates when both patch fails AND no subscriber mutations\n }\n }\n\n return emitUpdates();\n }\n\n case EventType.MESSAGES_SNAPSHOT: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onMessagesSnapshotEvent?.({\n event: event as MessagesSnapshotEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n const { messages: newMessages } = event as MessagesSnapshotEvent;\n\n // Edit-based merge: update existing messages with snapshot data while\n // preserving activity and reasoning messages (which the backend\n // doesn't include in the snapshot).\n const snapshotMap = new Map(newMessages.map((m) => [m.id, m]));\n\n // Step 1 + 2: Keep activity/reasoning messages as-is, keep messages\n // present in the snapshot (replaced with snapshot version), drop\n // everything else.\n const isClientOnlyRole = (role: string) =>\n role === \"activity\" || role === \"reasoning\";\n messages = messages\n .filter((m) => isClientOnlyRole(m.role) || snapshotMap.has(m.id))\n .map((m) => (isClientOnlyRole(m.role) ? m : snapshotMap.get(m.id)!));\n\n // Step 3: Append messages from the snapshot that we don't have yet.\n const existingIds = new Set(messages.map((m) => m.id));\n for (const snapshotMsg of newMessages) {\n if (!existingIds.has(snapshotMsg.id)) {\n messages.push(snapshotMsg);\n }\n }\n\n applyMutation({ messages });\n }\n\n return emitUpdates();\n }\n\n case EventType.ACTIVITY_SNAPSHOT: {\n const activityEvent = event as ActivitySnapshotEvent;\n const existingIndex = messages.findIndex((m) => m.id === activityEvent.messageId);\n const existingMessage = existingIndex >= 0 ? messages[existingIndex] : undefined;\n const existingActivityMessage =\n existingMessage?.role === \"activity\" ? (existingMessage as ActivityMessage) : undefined;\n const replace = activityEvent.replace ?? true;\n\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onActivitySnapshotEvent?.({\n event: activityEvent,\n messages,\n state,\n agent,\n input,\n activityMessage: existingActivityMessage,\n existingMessage,\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n const activityMessage: ActivityMessage = {\n id: activityEvent.messageId,\n role: \"activity\",\n activityType: activityEvent.activityType,\n content: structuredClone_(activityEvent.content),\n };\n\n let createdMessage: ActivityMessage | undefined;\n\n if (existingIndex === -1) {\n messages.push(activityMessage);\n createdMessage = activityMessage;\n } else if (existingActivityMessage) {\n if (replace) {\n messages[existingIndex] = {\n ...existingActivityMessage,\n activityType: activityEvent.activityType,\n content: structuredClone_(activityEvent.content),\n };\n }\n } else if (replace) {\n messages[existingIndex] = activityMessage;\n createdMessage = activityMessage;\n }\n\n applyMutation({ messages });\n\n if (createdMessage) {\n await Promise.all(\n subscribers.map((subscriber) =>\n subscriber.onNewMessage?.({\n message: createdMessage,\n messages,\n state,\n agent,\n input,\n }),\n ),\n );\n }\n }\n\n return emitUpdates();\n }\n\n case EventType.ACTIVITY_DELTA: {\n const activityEvent = event as ActivityDeltaEvent;\n const existingIndex = messages.findIndex((m) => m.id === activityEvent.messageId);\n if (existingIndex === -1) {\n return emitUpdates();\n }\n\n const existingMessage = messages[existingIndex];\n if (existingMessage.role !== \"activity\") {\n console.warn(\n `ACTIVITY_DELTA: Message '${activityEvent.messageId}' is not an activity message`,\n );\n return emitUpdates();\n }\n\n const existingActivityMessage = existingMessage as ActivityMessage;\n\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onActivityDeltaEvent?.({\n event: activityEvent,\n messages,\n state,\n agent,\n input,\n activityMessage: existingActivityMessage,\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n try {\n const baseContent = structuredClone_(existingActivityMessage.content ?? {});\n\n const result = jsonpatch.applyPatch(\n baseContent,\n activityEvent.patch ?? [],\n true,\n false,\n );\n const updatedContent = result.newDocument as ActivityMessage[\"content\"];\n\n messages[existingIndex] = {\n ...existingActivityMessage,\n content: structuredClone_(updatedContent),\n activityType: activityEvent.activityType,\n };\n\n applyMutation({ messages });\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(\n `Failed to apply activity patch for '${activityEvent.messageId}': ${errorMessage}`,\n );\n }\n }\n\n return emitUpdates();\n }\n\n case EventType.RAW: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onRawEvent?.({\n event: event as RawEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n return emitUpdates();\n }\n\n case EventType.CUSTOM: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onCustomEvent?.({\n event: event as CustomEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n return emitUpdates();\n }\n\n case EventType.RUN_STARTED: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onRunStartedEvent?.({\n event: event as RunStartedEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n // Handle input.messages if present and stopPropagation is not set\n if (mutation.stopPropagation !== true) {\n const runStartedEvent = event as RunStartedEvent;\n\n // Check if the event contains input with messages\n if (runStartedEvent.input?.messages) {\n // Add messages that aren't already present (checked by ID)\n for (const message of runStartedEvent.input.messages) {\n const existingMessage = messages.find((m) => m.id === message.id);\n if (!existingMessage) {\n messages.push(message);\n }\n }\n\n // Apply mutation to emit the updated messages\n applyMutation({ messages });\n }\n }\n\n return emitUpdates();\n }\n\n case EventType.RUN_FINISHED: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onRunFinishedEvent?.({\n event: event as RunFinishedEvent,\n messages,\n state,\n agent,\n input,\n result: (event as RunFinishedEvent).result,\n }),\n );\n applyMutation(mutation);\n\n return emitUpdates();\n }\n\n case EventType.RUN_ERROR: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onRunErrorEvent?.({\n event: event as RunErrorEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n return emitUpdates();\n }\n\n case EventType.STEP_STARTED: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onStepStartedEvent?.({\n event: event as StepStartedEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n return emitUpdates();\n }\n\n case EventType.STEP_FINISHED: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onStepFinishedEvent?.({\n event: event as StepFinishedEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n return emitUpdates();\n }\n\n case EventType.TEXT_MESSAGE_CHUNK: {\n throw new Error(\"TEXT_MESSAGE_CHUNK must be tranformed before being applied\");\n }\n\n case EventType.TOOL_CALL_CHUNK: {\n throw new Error(\"TOOL_CALL_CHUNK must be tranformed before being applied\");\n }\n\n case EventType.THINKING_START: {\n return emitUpdates();\n }\n\n case EventType.THINKING_END: {\n return emitUpdates();\n }\n\n case EventType.THINKING_TEXT_MESSAGE_START: {\n return emitUpdates();\n }\n\n case EventType.THINKING_TEXT_MESSAGE_CONTENT: {\n return emitUpdates();\n }\n\n case EventType.THINKING_TEXT_MESSAGE_END: {\n return emitUpdates();\n }\n\n case EventType.REASONING_START: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onReasoningStartEvent?.({\n event: event as ReasoningStartEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n return emitUpdates();\n }\n\n case EventType.REASONING_MESSAGE_START: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onReasoningMessageStartEvent?.({\n event: event as ReasoningMessageStartEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n const { messageId } = event as ReasoningMessageStartEvent;\n const existingMessage = messages.find((m) => m.id === messageId);\n\n if (!existingMessage) {\n const newMessage: ReasoningMessage = {\n id: messageId,\n role: \"reasoning\",\n content: \"\",\n };\n messages.push(newMessage);\n applyMutation({ messages });\n }\n }\n return emitUpdates();\n }\n\n case EventType.REASONING_MESSAGE_CONTENT: {\n const { messageId, delta } = event as ReasoningMessageContentEvent;\n\n const targetMessage = messages.find((m) => m.id === messageId);\n if (!targetMessage) {\n console.warn(`REASONING_MESSAGE_CONTENT: No message found with ID '${messageId}'`);\n return emitUpdates();\n }\n\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onReasoningMessageContentEvent?.({\n event: event as ReasoningMessageContentEvent,\n messages,\n state,\n agent,\n input,\n reasoningMessageBuffer:\n typeof targetMessage.content === \"string\" ? targetMessage.content : \"\",\n }),\n );\n applyMutation(mutation);\n\n if (mutation.stopPropagation !== true) {\n const existingContent =\n typeof targetMessage.content === \"string\" ? targetMessage.content : \"\";\n targetMessage.content = `${existingContent}${delta}`;\n applyMutation({ messages });\n }\n return emitUpdates();\n }\n\n case EventType.REASONING_MESSAGE_END: {\n const { messageId } = event as ReasoningMessageEndEvent;\n\n const targetMessage = messages.find((m) => m.id === messageId);\n if (!targetMessage) {\n console.warn(`REASONING_MESSAGE_END: No message found with ID '${messageId}'`);\n return emitUpdates();\n }\n\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onReasoningMessageEndEvent?.({\n event: event as ReasoningMessageEndEvent,\n messages,\n state,\n agent,\n input,\n reasoningMessageBuffer:\n typeof targetMessage.content === \"string\" ? targetMessage.content : \"\",\n }),\n );\n applyMutation(mutation);\n\n await Promise.all(\n subscribers.map((subscriber) => {\n subscriber.onNewMessage?.({\n message: targetMessage,\n messages,\n state,\n agent,\n input,\n });\n }),\n );\n\n return emitUpdates();\n }\n\n case EventType.REASONING_MESSAGE_CHUNK: {\n throw new Error(\"REASONING_MESSAGE_CHUNK must be transformed before being applied\");\n }\n\n case EventType.REASONING_END: {\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onReasoningEndEvent?.({\n event: event as ReasoningEndEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n return emitUpdates();\n }\n\n case EventType.REASONING_ENCRYPTED_VALUE: {\n const { subtype, entityId, encryptedValue } = event as ReasoningEncryptedValueEvent;\n const mutation = await runSubscribersWithMutation(\n subscribers,\n messages,\n state,\n (subscriber, messages, state) =>\n subscriber.onReasoningEncryptedValueEvent?.({\n event: event as ReasoningEncryptedValueEvent,\n messages,\n state,\n agent,\n input,\n }),\n );\n applyMutation(mutation);\n if (mutation.stopPropagation !== true) {\n let entityUpdated = false;\n if (subtype === \"tool-call\") {\n // Find tool call by entityId and set encryptedValue\n for (const message of messages) {\n if (message.role === \"assistant\" && message.toolCalls) {\n const toolCall = message.toolCalls.find((tc) => tc.id === entityId);\n if (toolCall) {\n toolCall.encryptedValue = encryptedValue;\n entityUpdated = true;\n break;\n }\n }\n }\n } else {\n // subtype is \"message\"\n // Find message by entityId and set encryptedValue\n const message = messages.find((m) => m.id === entityId);\n // Activity messages do not have encryptedValue\n if (message?.role !== \"activity\" && message) {\n message.encryptedValue = encryptedValue;\n entityUpdated = true;\n }\n }\n if (entityUpdated) {\n currentMutation.messages = messages;\n }\n }\n return emitUpdates();\n }\n }\n\n // This makes TypeScript check that the switch is exhaustive\n // If a new EventType is added, this will cause a compile error\n const _exhaustiveCheck: never = event.type;\n return emitUpdates();\n }),\n mergeAll(),\n // Only use defaultIfEmpty when there are subscribers to avoid emitting empty updates\n // when patches fail and there are no subscribers (like in state patching test)\n subscribers.length > 0 ? defaultIfEmpty({} as AgentStateMutation) : (stream: any) => stream,\n );\n};\n", "import { BaseEvent, EventType, AGUIError } from \"@ag-ui/core\";\nimport { Observable, throwError, of } from \"rxjs\";\nimport { mergeMap } from \"rxjs/operators\";\nimport { type DebugLoggerInput, resolveDebugLogger } from \"@/debug-logger\";\n\nexport const verifyEvents =\n (debugLogger?: DebugLoggerInput) =>\n (source$: Observable<BaseEvent>): Observable<BaseEvent> => {\n const log = resolveDebugLogger(debugLogger);\n // Declare variables in closure to maintain state across events\n let activeMessages = new Map<string, boolean>(); // Map of message ID -> active status\n let activeToolCalls = new Map<string, boolean>(); // Map of tool call ID -> active status\n let runFinished = false;\n let runError = false; // New flag to track if RUN_ERROR has been sent\n // New flags to track first/last event requirements\n let firstEventReceived = false;\n // Track active steps\n let activeSteps = new Map<string, boolean>(); // Map of step name -> active status\n let activeThinkingStep = false;\n let activeThinkingStepMessage = false;\n let runStarted = false; // Track if a run has started\n\n // Function to reset state for a new run\n const resetRunState = () => {\n activeMessages.clear();\n activeToolCalls.clear();\n activeSteps.clear();\n activeThinkingStep = false;\n activeThinkingStepMessage = false;\n runFinished = false;\n runError = false;\n runStarted = true;\n };\n\n return source$.pipe(\n // Process each event through our state machine\n mergeMap((event) => {\n const eventType = event.type;\n\n log?.event(\"VERIFY\", \"Event:\", event, { type: event.type });\n\n // Check if run has errored\n if (runError) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send event type '${eventType}': The run has already errored with 'RUN_ERROR'. No further events can be sent.`,\n ),\n );\n }\n\n // Check if run has already finished (but allow new RUN_STARTED to start a new run)\n if (\n runFinished &&\n eventType !== EventType.RUN_ERROR &&\n eventType !== EventType.RUN_STARTED\n ) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send event type '${eventType}': The run has already finished with 'RUN_FINISHED'. Start a new run with 'RUN_STARTED'.`,\n ),\n );\n }\n\n // Handle first event requirement and sequential RUN_STARTED\n if (!firstEventReceived) {\n firstEventReceived = true;\n if (eventType !== EventType.RUN_STARTED && eventType !== EventType.RUN_ERROR) {\n return throwError(() => new AGUIError(`First event must be 'RUN_STARTED'`));\n }\n } else if (eventType === EventType.RUN_STARTED) {\n // Allow RUN_STARTED after RUN_FINISHED (new run), but not during an active run\n if (runStarted && !runFinished) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'RUN_STARTED' while a run is still active. The previous run must be finished with 'RUN_FINISHED' before starting a new run.`,\n ),\n );\n }\n // If we're here, it's either the first RUN_STARTED or a new run after RUN_FINISHED\n if (runFinished) {\n // This is a new run after the previous one finished, reset state\n resetRunState();\n }\n }\n\n // Validate event based on type and current state\n switch (eventType) {\n // Text message flow\n case EventType.TEXT_MESSAGE_START: {\n const messageId = (event as any).messageId;\n\n // Check if this message is already in progress\n if (activeMessages.has(messageId)) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'TEXT_MESSAGE_START' event: A text message with ID '${messageId}' is already in progress. Complete it with 'TEXT_MESSAGE_END' first.`,\n ),\n );\n }\n\n activeMessages.set(messageId, true);\n return of(event);\n }\n\n case EventType.TEXT_MESSAGE_CONTENT: {\n const messageId = (event as any).messageId;\n\n // Must be in a message with this ID\n if (!activeMessages.has(messageId)) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'TEXT_MESSAGE_CONTENT' event: No active text message found with ID '${messageId}'. Start a text message with 'TEXT_MESSAGE_START' first.`,\n ),\n );\n }\n\n return of(event);\n }\n\n case EventType.TEXT_MESSAGE_END: {\n const messageId = (event as any).messageId;\n\n // Must be in a message with this ID\n if (!activeMessages.has(messageId)) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'TEXT_MESSAGE_END' event: No active text message found with ID '${messageId}'. A 'TEXT_MESSAGE_START' event must be sent first.`,\n ),\n );\n }\n\n // Remove message from active set\n activeMessages.delete(messageId);\n return of(event);\n }\n\n // Tool call flow\n case EventType.TOOL_CALL_START: {\n const toolCallId = (event as any).toolCallId;\n\n // Check if this tool call is already in progress\n if (activeToolCalls.has(toolCallId)) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'TOOL_CALL_START' event: A tool call with ID '${toolCallId}' is already in progress. Complete it with 'TOOL_CALL_END' first.`,\n ),\n );\n }\n\n activeToolCalls.set(toolCallId, true);\n return of(event);\n }\n\n case EventType.TOOL_CALL_ARGS: {\n const toolCallId = (event as any).toolCallId;\n\n // Must be in a tool call with this ID\n if (!activeToolCalls.has(toolCallId)) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'TOOL_CALL_ARGS' event: No active tool call found with ID '${toolCallId}'. Start a tool call with 'TOOL_CALL_START' first.`,\n ),\n );\n }\n\n return of(event);\n }\n\n case EventType.TOOL_CALL_END: {\n const toolCallId = (event as any).toolCallId;\n\n // Must be in a tool call with this ID\n if (!activeToolCalls.has(toolCallId)) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'TOOL_CALL_END' event: No active tool call found with ID '${toolCallId}'. A 'TOOL_CALL_START' event must be sent first.`,\n ),\n );\n }\n\n // Remove tool call from active set\n activeToolCalls.delete(toolCallId);\n return of(event);\n }\n\n // Step flow\n case EventType.STEP_STARTED: {\n const stepName = (event as any).stepName;\n if (activeSteps.has(stepName)) {\n return throwError(\n () => new AGUIError(`Step \"${stepName}\" is already active for 'STEP_STARTED'`),\n );\n }\n activeSteps.set(stepName, true);\n return of(event);\n }\n\n case EventType.STEP_FINISHED: {\n const stepName = (event as any).stepName;\n if (!activeSteps.has(stepName)) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'STEP_FINISHED' for step \"${stepName}\" that was not started`,\n ),\n );\n }\n activeSteps.delete(stepName);\n return of(event);\n }\n\n // Run flow\n case EventType.RUN_STARTED: {\n // We've already validated this above\n runStarted = true;\n return of(event);\n }\n\n case EventType.RUN_FINISHED: {\n // Can't be the first event (already checked)\n // and can't happen after already being finished (already checked)\n\n // Check that all steps are finished before run ends\n if (activeSteps.size > 0) {\n const unfinishedSteps = Array.from(activeSteps.keys()).join(\", \");\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'RUN_FINISHED' while steps are still active: ${unfinishedSteps}`,\n ),\n );\n }\n\n // Check that all messages are finished before run ends\n if (activeMessages.size > 0) {\n const unfinishedMessages = Array.from(activeMessages.keys()).join(\", \");\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'RUN_FINISHED' while text messages are still active: ${unfinishedMessages}`,\n ),\n );\n }\n\n // Check that all tool calls are finished before run ends\n if (activeToolCalls.size > 0) {\n const unfinishedToolCalls = Array.from(activeToolCalls.keys()).join(\", \");\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'RUN_FINISHED' while tool calls are still active: ${unfinishedToolCalls}`,\n ),\n );\n }\n\n runFinished = true;\n return of(event);\n }\n\n case EventType.RUN_ERROR: {\n // RUN_ERROR can happen at any time\n runError = true; // Set flag to prevent any further events\n return of(event);\n }\n\n case EventType.CUSTOM: {\n return of(event);\n }\n\n // Text message flow\n case EventType.THINKING_TEXT_MESSAGE_START: {\n if (!activeThinkingStep) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'THINKING_TEXT_MESSAGE_START' event: A thinking step is not in progress. Create one with 'THINKING_START' first.`,\n ),\n );\n }\n // Can't start a message if one is already in progress\n if (activeThinkingStepMessage) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'THINKING_TEXT_MESSAGE_START' event: A thinking message is already in progress. Complete it with 'THINKING_TEXT_MESSAGE_END' first.`,\n ),\n );\n }\n\n activeThinkingStepMessage = true;\n return of(event);\n }\n\n case EventType.THINKING_TEXT_MESSAGE_CONTENT: {\n // Must be in a message and IDs must match\n if (!activeThinkingStepMessage) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'THINKING_TEXT_MESSAGE_CONTENT' event: No active thinking message found. Start a message with 'THINKING_TEXT_MESSAGE_START' first.`,\n ),\n );\n }\n\n return of(event);\n }\n\n case EventType.THINKING_TEXT_MESSAGE_END: {\n // Must be in a message and IDs must match\n if (!activeThinkingStepMessage) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'THINKING_TEXT_MESSAGE_END' event: No active thinking message found. A 'THINKING_TEXT_MESSAGE_START' event must be sent first.`,\n ),\n );\n }\n\n // Reset message state\n activeThinkingStepMessage = false;\n return of(event);\n }\n\n case EventType.THINKING_START: {\n if (activeThinkingStep) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'THINKING_START' event: A thinking step is already in progress. End it with 'THINKING_END' first.`,\n ),\n );\n }\n\n activeThinkingStep = true;\n return of(event);\n }\n\n case EventType.THINKING_END: {\n // Must be in a message and IDs must match\n if (!activeThinkingStep) {\n return throwError(\n () =>\n new AGUIError(\n `Cannot send 'THINKING_END' event: No active thinking step found. A 'THINKING_START' event must be sent first.`,\n ),\n );\n }\n\n // Reset message state\n activeThinkingStep = false;\n return of(event);\n }\n\n default: {\n return of(event);\n }\n }\n }),\n );\n };\n", "import { Observable, from, defer, throwError } from \"rxjs\";\nimport { mergeMap, switchMap } from \"rxjs/operators\";\n\nexport enum HttpEventType {\n HEADERS = \"headers\",\n DATA = \"data\",\n}\n\nexport interface HttpDataEvent {\n type: HttpEventType.DATA;\n data?: Uint8Array;\n}\n\nexport interface HttpHeadersEvent {\n type: HttpEventType.HEADERS;\n status: number;\n headers: Headers;\n}\n\nexport type HttpEvent = HttpDataEvent | HttpHeadersEvent;\n\nexport const runHttpRequest = (url: string, requestInit: RequestInit): Observable<HttpEvent> => {\n // Defer the fetch so that it's executed when subscribed to\n return defer(() => from(fetch(url, requestInit))).pipe(\n switchMap((response) => {\n if (!response.ok) {\n const contentType = response.headers.get(\"content-type\") || \"\";\n // Read the (small) error body once, then error the stream\n return from(response.text()).pipe(\n mergeMap((text) => {\n let payload: unknown = text;\n if (contentType.includes(\"application/json\")) {\n try { payload = JSON.parse(text); } catch {/* keep raw text */}\n }\n const err: any = new Error(\n `HTTP ${response.status}: ${typeof payload === \"string\" ? payload : JSON.stringify(payload)}`\n );\n err.status = response.status;\n err.payload = payload;\n return throwError(() => err);\n })\n );\n }\n // Emit headers event first\n const headersEvent: HttpHeadersEvent = {\n type: HttpEventType.HEADERS,\n status: response.status,\n headers: response.headers,\n };\n\n const reader = response.body?.getReader();\n if (!reader) {\n return throwError(() => new Error(\"Failed to getReader() from response\"));\n }\n\n return new Observable<HttpEvent>((subscriber) => {\n // Emit headers event first\n subscriber.next(headersEvent);\n\n (async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n // Emit data event instead of raw Uint8Array\n const dataEvent: HttpDataEvent = {\n type: HttpEventType.DATA,\n data: value,\n };\n subscriber.next(dataEvent);\n }\n subscriber.complete();\n } catch (error) {\n subscriber.error(error);\n }\n })();\n\n return () => {\n reader.cancel().catch((error) => {\n if ((error as DOMException)?.name === \"AbortError\") {\n return;\n }\n\n throw error;\n });\n };\n });\n }),\n );\n};\n", "import { Observable, Subject } from \"rxjs\";\nimport { HttpEvent, HttpEventType } from \"../run/http-request\";\nimport { type DebugLoggerInput, resolveDebugLogger } from \"@/debug-logger\";\n\n/**\n * Parses a stream of HTTP events into a stream of JSON objects using Server-Sent Events (SSE) format.\n * Strictly follows the SSE standard where:\n * - Events are separated by double newlines ('\\n\\n')\n * - Only 'data:' prefixed lines are processed\n * - Multi-line data events are supported and joined\n * - Non-data fields (event, id, retry) are ignored\n */\nexport const parseSSEStream = (\n source$: Observable<HttpEvent>,\n debugLogger?: DebugLoggerInput,\n): Observable<any> => {\n const log = resolveDebugLogger(debugLogger);\n const jsonSubject = new Subject<any>();\n // Create TextDecoder with stream option set to true to handle split UTF-8 characters\n const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n let buffer = \"\";\n\n // Subscribe to the source once and multicast to all subscribers\n source$.subscribe({\n next: (event: HttpEvent) => {\n if (event.type === HttpEventType.HEADERS) {\n return;\n }\n\n if (event.type === HttpEventType.DATA && event.data) {\n // Decode chunk carefully to handle UTF-8\n const text = decoder.decode(event.data, { stream: true });\n buffer += text;\n\n // Process complete events (separated by double newlines)\n const events = buffer.split(/\\n\\n/);\n // Keep the last potentially incomplete event in buffer\n buffer = events.pop() || \"\";\n\n for (const event of events) {\n processSSEEvent(event);\n }\n }\n },\n error: (err) => jsonSubject.error(err),\n complete: () => {\n // Use the final call to decoder.decode() to flush any remaining bytes\n if (buffer) {\n buffer += decoder.decode();\n // Process any remaining SSE event data\n processSSEEvent(buffer);\n }\n jsonSubject.complete();\n },\n });\n\n /**\n * Helper function to process an SSE event.\n * Extracts and joins data lines, then parses the result as JSON.\n *\n * Follows the SSE spec by processing lines starting with 'data:',\n * ignoring a single space if it is present after the colon.\n *\n * @param eventText The raw event text to process\n */\n function processSSEEvent(eventText: string) {\n const lines = eventText.split(\"\\n\");\n const dataLines: string[] = [];\n\n for (const line of lines) {\n if (line.startsWith(\"data:\")) {\n // Remove 'data:' prefix, and optionally a single space afterwards\n dataLines.push(line.slice(5).replace(/^ /, \"\"));\n }\n }\n\n // Only process if we have data lines\n if (dataLines.length > 0) {\n try {\n // Join multi-line data and parse JSON\n const jsonStr = dataLines.join(\"\\n\");\n const json = JSON.parse(jsonStr);\n log?.event(\"SSE\", \"Event received:\", json, { type: json.type });\n jsonSubject.next(json);\n } catch (err) {\n jsonSubject.error(err);\n }\n }\n }\n\n return jsonSubject.asObservable();\n};\n", "import { Observable, Subject } from \"rxjs\";\nimport { HttpEvent, HttpEventType } from \"../run/http-request\";\nimport { BaseEvent } from \"@ag-ui/core\";\nimport * as proto from \"@ag-ui/proto\";\n\n/**\n * Parses a stream of HTTP events into a stream of BaseEvent objects using Protocol Buffer format.\n * Each message is prefixed with a 4-byte length header (uint32 in big-endian format)\n * followed by the protocol buffer encoded message.\n */\nexport const parseProtoStream = (source$: Observable<HttpEvent>): Observable<BaseEvent> => {\n const eventSubject = new Subject<BaseEvent>();\n let buffer = new Uint8Array(0);\n\n source$.subscribe({\n next: (event: HttpEvent) => {\n if (event.type === HttpEventType.HEADERS) {\n return;\n }\n\n if (event.type === HttpEventType.DATA && event.data) {\n // Append the new data to our buffer\n const newBuffer = new Uint8Array(buffer.length + event.data.length);\n newBuffer.set(buffer, 0);\n newBuffer.set(event.data, buffer.length);\n buffer = newBuffer;\n\n // Process as many complete messages as possible\n processBuffer();\n }\n },\n error: (err) => eventSubject.error(err),\n complete: () => {\n // Try to process any remaining data in the buffer\n if (buffer.length > 0) {\n try {\n processBuffer();\n } catch (error: unknown) {\n console.warn(\"Incomplete or invalid protocol buffer data at stream end\");\n }\n }\n eventSubject.complete();\n },\n });\n\n /**\n * Process as many complete messages as possible from the buffer\n */\n function processBuffer() {\n // Keep processing while we have enough data for at least a header (4 bytes)\n while (buffer.length >= 4) {\n // Read message length from the first 4 bytes (big-endian uint32)\n const view = new DataView(buffer.buffer, buffer.byteOffset, 4);\n const messageLength = view.getUint32(0, false); // false = big-endian\n\n // Check if we have the complete message (header + message body)\n const totalLength = 4 + messageLength;\n if (buffer.length < totalLength) {\n // Not enough data yet, wait for more\n break;\n }\n\n try {\n // Extract the message (skipping the 4-byte header)\n const message = buffer.slice(4, totalLength);\n\n // Decode the protocol buffer message using the imported decode function\n const event = proto.decode(message);\n\n // Emit the parsed event\n eventSubject.next(event);\n\n // Remove the processed message from the buffer\n buffer = buffer.slice(totalLength);\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n eventSubject.error(new Error(`Failed to decode protocol buffer message: ${errorMessage}`));\n return;\n }\n }\n }\n\n return eventSubject.asObservable();\n};\n", "import { BaseEvent, EventSchemas } from \"@ag-ui/core\";\nimport { Subject, ReplaySubject, Observable } from \"rxjs\";\nimport { HttpEvent, HttpEventType } from \"../run/http-request\";\nimport { parseSSEStream } from \"./sse\";\nimport { parseProtoStream } from \"./proto\";\nimport * as proto from \"@ag-ui/proto\";\nimport { EventType } from \"@ag-ui/core\";\nimport { type DebugLoggerInput, resolveDebugLogger } from \"@/debug-logger\";\n\n/**\n * Transforms HTTP events into BaseEvents using the appropriate format parser based on content type.\n */\nexport const transformHttpEventStream = (\n source$: Observable<HttpEvent>,\n debugLogger?: DebugLoggerInput,\n): Observable<BaseEvent> => {\n const log = resolveDebugLogger(debugLogger);\n const eventSubject = new Subject<BaseEvent>();\n\n // Use ReplaySubject to buffer events until we decide on the parser\n const bufferSubject = new ReplaySubject<HttpEvent>();\n\n // Flag to track whether we've set up the parser\n let parserInitialized = false;\n\n // Subscribe to source and buffer events while we determine the content type\n source$.subscribe({\n next: (event: HttpEvent) => {\n // Forward event to buffer\n bufferSubject.next(event);\n\n // If we get headers and haven't initialized a parser yet, check content type\n if (event.type === HttpEventType.HEADERS && !parserInitialized) {\n parserInitialized = true;\n const contentType = event.headers.get(\"content-type\");\n\n log?.lifecycle(\"HTTP\", \"Stream format detected:\", {\n contentType,\n parser: contentType === proto.AGUI_MEDIA_TYPE ? \"protobuf\" : \"sse\",\n });\n\n // Choose parser based on content type\n if (contentType === proto.AGUI_MEDIA_TYPE) {\n // Use protocol buffer parser\n parseProtoStream(bufferSubject).subscribe({\n next: (event) => eventSubject.next(event),\n error: (err) => eventSubject.error(err),\n complete: () => eventSubject.complete(),\n });\n } else {\n // Use SSE JSON parser for all other cases\n parseSSEStream(bufferSubject, log).subscribe({\n next: (json) => {\n try {\n const parsedEvent = EventSchemas.parse(json);\n log?.event(\"HTTP\", \"Event validated:\", parsedEvent, {\n type: parsedEvent.type,\n valid: true,\n });\n eventSubject.next(parsedEvent as BaseEvent);\n } catch (err) {\n log?.event(\"HTTP\", \"Event invalid:\", { json, error: String(err) });\n eventSubject.error(err);\n }\n },\n error: (err) => {\n if ((err as DOMException)?.name === \"AbortError\") {\n eventSubject.next({\n type: EventType.RUN_ERROR,\n message: (err as DOMException).message || \"Request aborted\",\n code: \"abort\",\n rawEvent: err,\n });\n eventSubject.complete();\n return;\n }\n return eventSubject.error(err);\n },\n complete: () => eventSubject.complete(),\n });\n }\n } else if (!parserInitialized) {\n eventSubject.error(new Error(\"No headers event received before data events\"));\n }\n },\n error: (err) => {\n bufferSubject.error(err);\n eventSubject.error(err);\n },\n complete: () => {\n bufferSubject.complete();\n },\n });\n\n return eventSubject.asObservable();\n};\n", "import { z } from \"zod\";\n\n// Protocol Events\nexport const LegacyRuntimeEventTypes = z.enum([\n \"TextMessageStart\",\n \"TextMessageContent\",\n \"TextMessageEnd\",\n \"ActionExecutionStart\",\n \"ActionExecutionArgs\",\n \"ActionExecutionEnd\",\n \"ActionExecutionResult\",\n \"AgentStateMessage\",\n \"MetaEvent\",\n \"RunStarted\",\n \"RunFinished\",\n \"RunError\",\n \"NodeStarted\",\n \"NodeFinished\",\n]);\n\nexport const LegacyRuntimeMetaEventName = z.enum([\n \"LangGraphInterruptEvent\",\n \"PredictState\",\n \"Exit\",\n]);\n\nexport const LegacyTextMessageStart = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.TextMessageStart),\n messageId: z.string(),\n parentMessageId: z.string().optional(),\n role: z.string().optional(),\n});\n\nexport const LegacyTextMessageContent = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.TextMessageContent),\n messageId: z.string(),\n content: z.string(),\n});\n\nexport const LegacyTextMessageEnd = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.TextMessageEnd),\n messageId: z.string(),\n});\n\nexport const LegacyActionExecutionStart = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.ActionExecutionStart),\n actionExecutionId: z.string(),\n actionName: z.string(),\n parentMessageId: z.string().optional(),\n});\n\nexport const LegacyActionExecutionArgs = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.ActionExecutionArgs),\n actionExecutionId: z.string(),\n args: z.string(),\n});\n\nexport const LegacyActionExecutionEnd = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.ActionExecutionEnd),\n actionExecutionId: z.string(),\n});\n\nexport const LegacyActionExecutionResult = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.ActionExecutionResult),\n actionName: z.string(),\n actionExecutionId: z.string(),\n result: z.string(),\n});\n\nexport const LegacyAgentStateMessage = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.AgentStateMessage),\n threadId: z.string(),\n agentName: z.string(),\n nodeName: z.string(),\n runId: z.string(),\n active: z.boolean(),\n role: z.string(),\n state: z.string(),\n running: z.boolean(),\n});\n\nexport const LegacyMetaEvent = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.MetaEvent),\n name: LegacyRuntimeMetaEventName,\n value: z.any(),\n});\n\n\nexport const LegacyRunError = z.object({\n type: z.literal(LegacyRuntimeEventTypes.enum.RunError),\n message: z.string(),\n code: z.string().optional(),\n});\n\nexport const LegacyRuntimeProtocolEvent = z.discriminatedUnion(\"type\", [\n LegacyTextMessageStart,\n LegacyTextMessageContent,\n LegacyTextMessageEnd,\n LegacyActionExecutionStart,\n LegacyActionExecutionArgs,\n LegacyActionExecutionEnd,\n LegacyActionExecutionResult,\n LegacyAgentStateMessage,\n LegacyMetaEvent,\n LegacyRunError,\n]);\n\n// Protocol Event type exports\nexport type RuntimeEventTypes = z.infer<typeof LegacyRuntimeEventTypes>;\nexport type RuntimeMetaEventName = z.infer<typeof LegacyRuntimeMetaEventName>;\nexport type LegacyTextMessageStart = z.infer<typeof LegacyTextMessageStart>;\nexport type LegacyTextMessageContent = z.infer<typeof LegacyTextMessageContent>;\nexport type LegacyTextMessageEnd = z.infer<typeof LegacyTextMessageEnd>;\nexport type LegacyActionExecutionStart = z.infer<typeof LegacyActionExecutionStart>;\nexport type LegacyActionExecutionArgs = z.infer<typeof LegacyActionExecutionArgs>;\nexport type LegacyActionExecutionEnd = z.infer<typeof LegacyActionExecutionEnd>;\nexport type LegacyActionExecutionResult = z.infer<typeof LegacyActionExecutionResult>;\nexport type LegacyAgentStateMessage = z.infer<typeof LegacyAgentStateMessage>;\nexport type LegacyMetaEvent = z.infer<typeof LegacyMetaEvent>;\nexport type LegacyRuntimeProtocolEvent = z.infer<typeof LegacyRuntimeProtocolEvent>;\nexport type LegacyRunError = z.infer<typeof LegacyRunError>;\n\n// Message schemas (with kind discriminator)\nexport const LegacyTextMessageSchema = z.object({\n id: z.string(),\n role: z.string(),\n content: z.string(),\n parentMessageId: z.string().optional(),\n});\n\nexport const LegacyActionExecutionMessageSchema = z.object({\n id: z.string(),\n name: z.string(),\n arguments: z.any(),\n parentMessageId: z.string().optional(),\n});\n\nexport const LegacyResultMessageSchema = z.object({\n id: z.string(),\n result: z.any(),\n actionExecutionId: z.string(),\n actionName: z.string(),\n});\n\n// Message type exports\nexport type LegacyTextMessage = z.infer<typeof LegacyTextMessageSchema>;\nexport type LegacyActionExecutionMessage = z.infer<typeof LegacyActionExecutionMessageSchema>;\nexport type LegacyResultMessage = z.infer<typeof LegacyResultMessageSchema>;\nexport type LegacyMessage = LegacyTextMessage | LegacyActionExecutionMessage | LegacyResultMessage;\n", "import { mergeMap } from \"rxjs/operators\";\nimport * as jsonpatch from \"fast-json-patch\";\n\nimport {\n BaseEvent,\n EventType,\n TextMessageStartEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n CustomEvent,\n StateSnapshotEvent,\n StepStartedEvent,\n Message,\n StateDeltaEvent,\n MessagesSnapshotEvent,\n ToolCall,\n RunErrorEvent,\n} from \"@ag-ui/core\";\nimport { Observable } from \"rxjs\";\nimport {\n LegacyTextMessageStart,\n LegacyTextMessageContent,\n LegacyTextMessageEnd,\n LegacyActionExecutionStart,\n LegacyActionExecutionArgs,\n LegacyActionExecutionEnd,\n LegacyRuntimeEventTypes,\n LegacyRuntimeProtocolEvent,\n LegacyMetaEvent,\n LegacyAgentStateMessage,\n LegacyMessage,\n LegacyTextMessage,\n LegacyActionExecutionMessage,\n LegacyResultMessage,\n LegacyActionExecutionResult,\n LegacyRunError\n} from \"./types\";\nimport untruncateJson from \"untruncate-json\";\n\nconst flattenMessageContentToText = (content: Message[\"content\"]) => {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (!Array.isArray(content)) {\n return undefined;\n }\n\n const textParts = content\n .filter((part): part is { type: \"text\"; text: string } => part.type === \"text\")\n .map((part) => part.text)\n .filter((text) => text.length > 0);\n\n if (textParts.length === 0) {\n return undefined;\n }\n\n return textParts.join(\"\\n\");\n};\n\ninterface PredictStateValue {\n state_key: string;\n tool: string;\n tool_argument: string;\n}\n\nexport const convertToLegacyEvents =\n (threadId: string, runId: string, agentName: string) =>\n (events$: Observable<BaseEvent>): Observable<LegacyRuntimeProtocolEvent> => {\n let currentState: any = {};\n let running = true;\n let active = true;\n let nodeName = \"\";\n let syncedMessages: Message[] | null = null;\n let predictState: PredictStateValue[] | null = null;\n let currentToolCalls: ToolCall[] = [];\n let toolCallNames: Record<string, string> = {};\n\n const updateCurrentState = (newState: any) => {\n // the legacy protocol will only support object state\n if (typeof newState === \"object\" && newState !== null) {\n if (\"messages\" in newState) {\n delete newState.messages;\n }\n currentState = newState;\n }\n };\n\n return events$.pipe(\n mergeMap((event) => {\n switch (event.type) {\n case EventType.TEXT_MESSAGE_START: {\n const startEvent = event as TextMessageStartEvent;\n return [\n {\n type: LegacyRuntimeEventTypes.enum.TextMessageStart,\n messageId: startEvent.messageId,\n role: startEvent.role,\n } as LegacyTextMessageStart,\n ];\n }\n case EventType.TEXT_MESSAGE_CONTENT: {\n const contentEvent = event as TextMessageContentEvent;\n return [\n {\n type: LegacyRuntimeEventTypes.enum.TextMessageContent,\n messageId: contentEvent.messageId,\n content: contentEvent.delta,\n } as LegacyTextMessageContent,\n ];\n }\n case EventType.TEXT_MESSAGE_END: {\n const endEvent = event as TextMessageEndEvent;\n return [\n {\n type: LegacyRuntimeEventTypes.enum.TextMessageEnd,\n messageId: endEvent.messageId,\n } as LegacyTextMessageEnd,\n ];\n }\n case EventType.TOOL_CALL_START: {\n const startEvent = event as ToolCallStartEvent;\n\n currentToolCalls.push({\n id: startEvent.toolCallId,\n type: \"function\",\n function: {\n name: startEvent.toolCallName,\n arguments: \"\",\n },\n });\n\n active = true;\n toolCallNames[startEvent.toolCallId] = startEvent.toolCallName;\n\n return [\n {\n type: LegacyRuntimeEventTypes.enum.ActionExecutionStart,\n actionExecutionId: startEvent.toolCallId,\n actionName: startEvent.toolCallName,\n parentMessageId: startEvent.parentMessageId,\n } as LegacyActionExecutionStart,\n ];\n }\n case EventType.TOOL_CALL_ARGS: {\n const argsEvent = event as ToolCallArgsEvent;\n\n // Find the tool call by ID instead of using the last one\n const currentToolCall = currentToolCalls.find((tc) => tc.id === argsEvent.toolCallId);\n if (!currentToolCall) {\n console.warn(`TOOL_CALL_ARGS: No tool call found with ID '${argsEvent.toolCallId}'`);\n return [];\n }\n\n currentToolCall.function.arguments += argsEvent.delta;\n let didUpdateState = false;\n\n if (predictState) {\n let currentPredictState = predictState.find(\n (s) => s.tool == currentToolCall.function.name,\n );\n\n if (currentPredictState) {\n try {\n const currentArgs = JSON.parse(\n untruncateJson(currentToolCall.function.arguments),\n );\n if (\n currentPredictState.tool_argument &&\n currentPredictState.tool_argument in currentArgs\n ) {\n updateCurrentState({\n ...currentState,\n [currentPredictState.state_key]:\n currentArgs[currentPredictState.tool_argument],\n });\n didUpdateState = true;\n } else if (!currentPredictState.tool_argument) {\n updateCurrentState({\n ...currentState,\n [currentPredictState.state_key]: currentArgs,\n });\n didUpdateState = true;\n }\n } catch (e) {}\n }\n }\n\n return [\n {\n type: LegacyRuntimeEventTypes.enum.ActionExecutionArgs,\n actionExecutionId: argsEvent.toolCallId,\n args: argsEvent.delta,\n } as LegacyActionExecutionArgs,\n ...(didUpdateState\n ? [\n {\n type: LegacyRuntimeEventTypes.enum.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n running,\n role: \"assistant\",\n state: JSON.stringify(currentState),\n active,\n },\n ]\n : []),\n ];\n }\n case EventType.TOOL_CALL_END: {\n const endEvent = event as ToolCallEndEvent;\n return [\n {\n type: LegacyRuntimeEventTypes.enum.ActionExecutionEnd,\n actionExecutionId: endEvent.toolCallId,\n } as LegacyActionExecutionEnd,\n ];\n }\n case EventType.TOOL_CALL_RESULT: {\n const resultEvent = event as ToolCallResultEvent;\n return [\n {\n type: LegacyRuntimeEventTypes.enum.ActionExecutionResult,\n actionExecutionId: resultEvent.toolCallId,\n result: resultEvent.content,\n actionName: toolCallNames[resultEvent.toolCallId] || \"unknown\",\n } as LegacyActionExecutionResult,\n ];\n }\n case EventType.RAW: {\n // The legacy protocol doesn't support raw events\n return [];\n }\n case EventType.CUSTOM: {\n const customEvent = event as CustomEvent;\n switch (customEvent.name) {\n case \"Exit\":\n running = false;\n break;\n case \"PredictState\":\n predictState = customEvent.value as PredictStateValue[];\n break;\n }\n\n return [\n {\n type: LegacyRuntimeEventTypes.enum.MetaEvent,\n name: customEvent.name,\n value: customEvent.value,\n } as LegacyMetaEvent,\n ];\n }\n case EventType.STATE_SNAPSHOT: {\n const stateEvent = event as StateSnapshotEvent;\n updateCurrentState(stateEvent.snapshot);\n\n return [\n {\n type: LegacyRuntimeEventTypes.enum.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n running,\n role: \"assistant\",\n state: JSON.stringify(currentState),\n active,\n } as LegacyAgentStateMessage,\n ];\n }\n case EventType.STATE_DELTA: {\n const deltaEvent = event as StateDeltaEvent;\n const result = jsonpatch.applyPatch(currentState, deltaEvent.delta, true, false);\n if (!result) {\n return [];\n }\n updateCurrentState(result.newDocument);\n\n return [\n {\n type: LegacyRuntimeEventTypes.enum.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n running,\n role: \"assistant\",\n state: JSON.stringify(currentState),\n active,\n } as LegacyAgentStateMessage,\n ];\n }\n case EventType.MESSAGES_SNAPSHOT: {\n const messagesSnapshot = event as MessagesSnapshotEvent;\n syncedMessages = messagesSnapshot.messages;\n return [\n {\n type: LegacyRuntimeEventTypes.enum.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n running,\n role: \"assistant\",\n state: JSON.stringify({\n ...currentState,\n ...(syncedMessages ? { messages: syncedMessages } : {}),\n }),\n active: true,\n } as LegacyAgentStateMessage,\n ];\n }\n case EventType.RUN_STARTED: {\n // There is nothing to do in the legacy protocol\n return [];\n }\n case EventType.RUN_FINISHED: {\n if (syncedMessages) {\n currentState.messages = syncedMessages;\n }\n\n // Only do an update if state is not empty\n if (Object.keys(currentState).length === 0) {\n return [];\n }\n\n return [\n {\n type: LegacyRuntimeEventTypes.enum.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n running,\n role: \"assistant\",\n state: JSON.stringify({\n ...currentState,\n ...(syncedMessages\n ? {\n messages: convertMessagesToLegacyFormat(syncedMessages),\n }\n : {}),\n }),\n active: false,\n } as LegacyAgentStateMessage,\n ];\n }\n case EventType.RUN_ERROR: {\n const errorEvent = event as RunErrorEvent;\n return [\n {\n type: LegacyRuntimeEventTypes.enum.RunError,\n message: errorEvent.message,\n code: errorEvent.code,\n } as LegacyRunError,\n ];\n }\n case EventType.STEP_STARTED: {\n const stepStarted = event as StepStartedEvent;\n nodeName = stepStarted.stepName;\n\n currentToolCalls = [];\n predictState = null;\n\n return [\n {\n type: LegacyRuntimeEventTypes.enum.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n running,\n role: \"assistant\",\n state: JSON.stringify(currentState),\n active: true,\n } as LegacyAgentStateMessage,\n ];\n }\n case EventType.STEP_FINISHED: {\n currentToolCalls = [];\n predictState = null;\n\n return [\n {\n type: LegacyRuntimeEventTypes.enum.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n running,\n role: \"assistant\",\n state: JSON.stringify(currentState),\n active: false,\n } as LegacyAgentStateMessage,\n ];\n }\n default: {\n return [];\n }\n }\n }),\n );\n };\n\nexport function convertMessagesToLegacyFormat(messages: Message[]): LegacyMessage[] {\n const result: LegacyMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"assistant\" || message.role === \"user\" || message.role === \"system\") {\n const textContent = flattenMessageContentToText(message.content);\n if (textContent) {\n const textMessage: LegacyTextMessage = {\n id: message.id,\n role: message.role,\n content: textContent,\n };\n result.push(textMessage);\n }\n if (message.role === \"assistant\" && message.toolCalls && message.toolCalls.length > 0) {\n for (const toolCall of message.toolCalls) {\n const actionExecutionMessage: LegacyActionExecutionMessage = {\n id: toolCall.id,\n name: toolCall.function.name,\n arguments: JSON.parse(toolCall.function.arguments),\n parentMessageId: message.id,\n };\n result.push(actionExecutionMessage);\n }\n }\n } else if (message.role === \"tool\") {\n let actionName = \"unknown\";\n for (const m of messages) {\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n for (const toolCall of m.toolCalls) {\n if (toolCall.id === message.toolCallId) {\n actionName = toolCall.function.name;\n break;\n }\n }\n }\n }\n const toolMessage: LegacyResultMessage = {\n id: message.id,\n result: message.content,\n actionExecutionId: message.toolCallId,\n actionName,\n };\n result.push(toolMessage);\n }\n }\n\n return result;\n}\n", "import { mergeMap, Observable, finalize } from \"rxjs\";\nimport {\n BaseEvent,\n TextMessageChunkEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallChunkEvent,\n ToolCallEndEvent,\n ToolCallStartEvent,\n ReasoningMessageChunkEvent,\n ReasoningMessageContentEvent,\n ReasoningMessageEndEvent,\n ReasoningMessageStartEvent,\n} from \"@ag-ui/core\";\nimport { EventType } from \"@ag-ui/core\";\nimport { type DebugLoggerInput, resolveDebugLogger } from \"@/debug-logger\";\n\ninterface TextMessageFields {\n messageId: string;\n name?: string;\n}\n\ninterface ToolCallFields {\n toolCallId: string;\n toolCallName: string;\n parentMessageId?: string;\n}\n\ninterface ReasoningMessageFields {\n messageId: string;\n}\n\nexport const transformChunks =\n (debugLogger?: DebugLoggerInput) =>\n (events$: Observable<BaseEvent>): Observable<BaseEvent> => {\n const log = resolveDebugLogger(debugLogger);\n let textMessageFields: TextMessageFields | undefined;\n let toolCallFields: ToolCallFields | undefined;\n let reasoningMessageFields: ReasoningMessageFields | undefined;\n let mode: \"text\" | \"tool\" | \"reasoning\" | undefined;\n\n const closeTextMessage = () => {\n if (!textMessageFields || mode !== \"text\") {\n throw new Error(\"No text message to close\");\n }\n const event = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: textMessageFields.messageId,\n } as TextMessageEndEvent;\n mode = undefined;\n textMessageFields = undefined;\n\n log?.event(\"TRANSFORM\", \"TEXT_MESSAGE_END\", event, {\n messageId: event.messageId,\n });\n\n return event;\n };\n\n const closeToolCall = () => {\n if (!toolCallFields || mode !== \"tool\") {\n throw new Error(\"No tool call to close\");\n }\n const event = {\n type: EventType.TOOL_CALL_END,\n toolCallId: toolCallFields.toolCallId,\n } as ToolCallEndEvent;\n mode = undefined;\n toolCallFields = undefined;\n\n log?.event(\"TRANSFORM\", \"TOOL_CALL_END\", event, {\n toolCallId: event.toolCallId,\n });\n\n return event;\n };\n\n const closeReasoningMessage = () => {\n if (!reasoningMessageFields || mode !== \"reasoning\") {\n throw new Error(\"No reasoning message to close\");\n }\n const event = {\n type: EventType.REASONING_MESSAGE_END,\n messageId: reasoningMessageFields.messageId,\n } as ReasoningMessageEndEvent;\n mode = undefined;\n reasoningMessageFields = undefined;\n\n log?.event(\"TRANSFORM\", \"REASONING_MESSAGE_END\", event, {\n messageId: event.messageId,\n });\n\n return event;\n };\n\n const closePendingEvent = () => {\n if (mode === \"text\") {\n return [closeTextMessage()];\n }\n if (mode === \"tool\") {\n return [closeToolCall()];\n }\n if (mode === \"reasoning\") {\n return [closeReasoningMessage()];\n }\n return [];\n };\n\n return events$.pipe(\n mergeMap((event) => {\n switch (event.type) {\n case EventType.TEXT_MESSAGE_START:\n case EventType.TEXT_MESSAGE_CONTENT:\n case EventType.TEXT_MESSAGE_END:\n case EventType.TOOL_CALL_START:\n case EventType.TOOL_CALL_ARGS:\n case EventType.TOOL_CALL_END:\n case EventType.TOOL_CALL_RESULT:\n case EventType.STATE_SNAPSHOT:\n case EventType.STATE_DELTA:\n case EventType.MESSAGES_SNAPSHOT:\n case EventType.CUSTOM:\n case EventType.RUN_STARTED:\n case EventType.RUN_FINISHED:\n case EventType.RUN_ERROR:\n case EventType.STEP_STARTED:\n case EventType.STEP_FINISHED:\n case EventType.THINKING_START:\n case EventType.THINKING_END:\n case EventType.THINKING_TEXT_MESSAGE_START:\n case EventType.THINKING_TEXT_MESSAGE_CONTENT:\n case EventType.THINKING_TEXT_MESSAGE_END:\n case EventType.REASONING_START:\n case EventType.REASONING_MESSAGE_START:\n case EventType.REASONING_MESSAGE_CONTENT:\n case EventType.REASONING_MESSAGE_END:\n case EventType.REASONING_END:\n return [...closePendingEvent(), event];\n case EventType.RAW:\n case EventType.ACTIVITY_SNAPSHOT:\n case EventType.ACTIVITY_DELTA:\n case EventType.REASONING_ENCRYPTED_VALUE:\n return [event];\n case EventType.TEXT_MESSAGE_CHUNK:\n const messageChunkEvent = event as TextMessageChunkEvent;\n const textMessageResult = [];\n if (\n // we are not in a text message\n mode !== \"text\" ||\n // or the message id is different\n (messageChunkEvent.messageId !== undefined &&\n messageChunkEvent.messageId !== textMessageFields?.messageId)\n ) {\n // close the current message if any\n textMessageResult.push(...closePendingEvent());\n }\n\n // we are not in a text message, start a new one\n if (mode !== \"text\") {\n if (messageChunkEvent.messageId === undefined) {\n throw new Error(\"First TEXT_MESSAGE_CHUNK must have a messageId\");\n }\n\n textMessageFields = {\n messageId: messageChunkEvent.messageId,\n name: messageChunkEvent.name,\n };\n mode = \"text\";\n\n const textMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: messageChunkEvent.messageId,\n role: messageChunkEvent.role || \"assistant\",\n ...(messageChunkEvent.name !== undefined && { name: messageChunkEvent.name }),\n } as TextMessageStartEvent;\n\n textMessageResult.push(textMessageStartEvent);\n\n log?.event(\"TRANSFORM\", \"TEXT_MESSAGE_START\", textMessageStartEvent, {\n messageId: messageChunkEvent.messageId,\n });\n }\n\n if (messageChunkEvent.delta !== undefined) {\n const textMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: textMessageFields!.messageId,\n delta: messageChunkEvent.delta,\n } as TextMessageContentEvent;\n\n textMessageResult.push(textMessageContentEvent);\n\n log?.event(\"TRANSFORM\", \"TEXT_MESSAGE_CONTENT\", textMessageContentEvent, {\n messageId: textMessageFields!.messageId,\n });\n }\n\n return textMessageResult;\n case EventType.TOOL_CALL_CHUNK:\n const toolCallChunkEvent = event as ToolCallChunkEvent;\n const toolMessageResult = [];\n if (\n // we are not in a text message\n mode !== \"tool\" ||\n // or the tool call id is different\n (toolCallChunkEvent.toolCallId !== undefined &&\n toolCallChunkEvent.toolCallId !== toolCallFields?.toolCallId)\n ) {\n // close the current message if any\n toolMessageResult.push(...closePendingEvent());\n }\n\n if (mode !== \"tool\") {\n if (toolCallChunkEvent.toolCallId === undefined) {\n throw new Error(\"First TOOL_CALL_CHUNK must have a toolCallId\");\n }\n if (toolCallChunkEvent.toolCallName === undefined) {\n throw new Error(\"First TOOL_CALL_CHUNK must have a toolCallName\");\n }\n toolCallFields = {\n toolCallId: toolCallChunkEvent.toolCallId,\n toolCallName: toolCallChunkEvent.toolCallName,\n parentMessageId: toolCallChunkEvent.parentMessageId,\n };\n mode = \"tool\";\n\n const toolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId: toolCallChunkEvent.toolCallId,\n toolCallName: toolCallChunkEvent.toolCallName,\n parentMessageId: toolCallChunkEvent.parentMessageId,\n } as ToolCallStartEvent;\n\n toolMessageResult.push(toolCallStartEvent);\n\n log?.event(\"TRANSFORM\", \"TOOL_CALL_START\", toolCallStartEvent, {\n toolCallId: toolCallChunkEvent.toolCallId,\n toolCallName: toolCallChunkEvent.toolCallName,\n });\n }\n\n if (toolCallChunkEvent.delta !== undefined) {\n const toolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallFields!.toolCallId,\n delta: toolCallChunkEvent.delta,\n } as ToolCallArgsEvent;\n\n toolMessageResult.push(toolCallArgsEvent);\n\n log?.event(\"TRANSFORM\", \"TOOL_CALL_ARGS\", toolCallArgsEvent, {\n toolCallId: toolCallFields!.toolCallId,\n });\n }\n\n return toolMessageResult;\n case EventType.REASONING_MESSAGE_CHUNK:\n const reasoningChunkEvent = event as ReasoningMessageChunkEvent;\n const reasoningMessageResult = [];\n if (\n // we are not in a reasoning message\n mode !== \"reasoning\" ||\n // or the message id is different\n (reasoningChunkEvent.messageId &&\n reasoningChunkEvent.messageId !== reasoningMessageFields?.messageId)\n ) {\n // close the current message if any\n reasoningMessageResult.push(...closePendingEvent());\n }\n\n // we are not in a reasoning message, start a new one\n if (mode !== \"reasoning\") {\n if (reasoningChunkEvent.messageId === undefined) {\n throw new Error(\"First REASONING_MESSAGE_CHUNK must have a messageId\");\n }\n\n reasoningMessageFields = {\n messageId: reasoningChunkEvent.messageId,\n };\n mode = \"reasoning\";\n\n const reasoningMessageStartEvent = {\n type: EventType.REASONING_MESSAGE_START,\n messageId: reasoningChunkEvent.messageId,\n } as ReasoningMessageStartEvent;\n reasoningMessageResult.push(reasoningMessageStartEvent);\n\n log?.event(\"TRANSFORM\", \"REASONING_MESSAGE_START\", reasoningMessageStartEvent, {\n messageId: reasoningChunkEvent.messageId,\n });\n }\n\n if (reasoningChunkEvent.delta !== undefined) {\n const reasoningMessageContentEvent = {\n type: EventType.REASONING_MESSAGE_CONTENT,\n messageId: reasoningMessageFields!.messageId,\n delta: reasoningChunkEvent.delta,\n } as ReasoningMessageContentEvent;\n\n reasoningMessageResult.push(reasoningMessageContentEvent);\n\n log?.event(\"TRANSFORM\", \"REASONING_MESSAGE_CONTENT\", reasoningMessageContentEvent, {\n messageId: reasoningMessageFields!.messageId,\n });\n }\n\n return reasoningMessageResult;\n }\n const _exhaustiveCheck: never = event.type;\n return [];\n }),\n finalize(() => {\n // This ensures that we close any pending events when the source observable completes\n closePendingEvent();\n }),\n );\n };\n", "import { AbstractAgent } from \"@/agent\";\nimport { RunAgentInput, BaseEvent, Message } from \"@ag-ui/core\";\nimport { Observable, ReplaySubject } from \"rxjs\";\nimport { concatMap } from \"rxjs/operators\";\nimport { transformChunks } from \"@/chunks\";\nimport { defaultApplyEvents } from \"@/apply\";\nimport { structuredClone_ } from \"@/utils\";\n\nexport type MiddlewareFunction = (\n input: RunAgentInput,\n next: AbstractAgent,\n) => Observable<BaseEvent>;\n\nexport interface EventWithState {\n event: BaseEvent;\n messages: Message[];\n state: any;\n}\n\nexport abstract class Middleware {\n abstract run(input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent>;\n\n /**\n * Runs the next agent in the chain with automatic chunk transformation.\n */\n protected runNext(input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> {\n return next.run(input).pipe(\n transformChunks(false), // Always transform chunks to full events\n );\n }\n\n /**\n * Runs the next agent and tracks state, providing current messages and state with each event.\n * The messages and state represent the state AFTER the event has been applied.\n */\n protected runNextWithState(\n input: RunAgentInput,\n next: AbstractAgent,\n ): Observable<EventWithState> {\n let currentMessages = structuredClone_(input.messages || []);\n let currentState = structuredClone_(input.state || {});\n\n // Use a ReplaySubject to feed events one by one\n const eventSubject = new ReplaySubject<BaseEvent>();\n\n // Set up defaultApplyEvents to process events\n const mutations$ = defaultApplyEvents(input, eventSubject, next, []);\n\n // Subscribe to track state changes\n mutations$.subscribe((mutation) => {\n if (mutation.messages !== undefined) {\n currentMessages = mutation.messages;\n }\n if (mutation.state !== undefined) {\n currentState = mutation.state;\n }\n });\n\n return this.runNext(input, next).pipe(\n concatMap(async (event) => {\n // Feed the event to defaultApplyEvents and wait for it to process\n eventSubject.next(event);\n\n // Give defaultApplyEvents a chance to process\n await new Promise((resolve) => setTimeout(resolve, 0));\n\n // Return event with current state\n return {\n event,\n messages: structuredClone_(currentMessages),\n state: structuredClone_(currentState),\n };\n }),\n );\n }\n}\n\n// Wrapper class to convert a function into a Middleware instance\nexport class FunctionMiddleware extends Middleware {\n constructor(private fn: MiddlewareFunction) {\n super();\n }\n\n run(input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> {\n return this.fn(input, next);\n }\n}\n", "import { Middleware } from \"./middleware\";\nimport { AbstractAgent } from \"@/agent\";\nimport {\n RunAgentInput,\n BaseEvent,\n EventType,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n} from \"@ag-ui/core\";\nimport { Observable } from \"rxjs\";\nimport { filter } from \"rxjs/operators\";\n\ntype FilterToolCallsConfig =\n | { allowedToolCalls: string[]; disallowedToolCalls?: never }\n | { disallowedToolCalls: string[]; allowedToolCalls?: never };\n\nexport class FilterToolCallsMiddleware extends Middleware {\n private blockedToolCallIds = new Set<string>();\n private readonly allowedTools?: Set<string>;\n private readonly disallowedTools?: Set<string>;\n\n constructor(config: FilterToolCallsConfig) {\n super();\n\n // Runtime validation (belt and suspenders approach)\n if (config.allowedToolCalls && config.disallowedToolCalls) {\n throw new Error(\"Cannot specify both allowedToolCalls and disallowedToolCalls\");\n }\n\n if (!config.allowedToolCalls && !config.disallowedToolCalls) {\n throw new Error(\"Must specify either allowedToolCalls or disallowedToolCalls\");\n }\n\n if (config.allowedToolCalls) {\n this.allowedTools = new Set(config.allowedToolCalls);\n } else if (config.disallowedToolCalls) {\n this.disallowedTools = new Set(config.disallowedToolCalls);\n }\n }\n\n run(input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> {\n // Use runNext which already includes transformChunks\n return this.runNext(input, next).pipe(\n filter((event) => {\n // Handle TOOL_CALL_START events\n if (event.type === EventType.TOOL_CALL_START) {\n const toolCallStartEvent = event as ToolCallStartEvent;\n const shouldFilter = this.shouldFilterTool(toolCallStartEvent.toolCallName);\n\n if (shouldFilter) {\n // Track this tool call ID as blocked\n this.blockedToolCallIds.add(toolCallStartEvent.toolCallId);\n return false; // Filter out this event\n }\n\n return true; // Allow this event\n }\n\n // Handle TOOL_CALL_ARGS events\n if (event.type === EventType.TOOL_CALL_ARGS) {\n const toolCallArgsEvent = event as ToolCallArgsEvent;\n return !this.blockedToolCallIds.has(toolCallArgsEvent.toolCallId);\n }\n\n // Handle TOOL_CALL_END events\n if (event.type === EventType.TOOL_CALL_END) {\n const toolCallEndEvent = event as ToolCallEndEvent;\n return !this.blockedToolCallIds.has(toolCallEndEvent.toolCallId);\n }\n\n // Handle TOOL_CALL_RESULT events\n if (event.type === EventType.TOOL_CALL_RESULT) {\n const toolCallResultEvent = event as ToolCallResultEvent;\n const isBlocked = this.blockedToolCallIds.has(toolCallResultEvent.toolCallId);\n\n if (isBlocked) {\n // Clean up the blocked ID after the last event\n this.blockedToolCallIds.delete(toolCallResultEvent.toolCallId);\n return false;\n }\n\n return true;\n }\n\n // Allow all other events through\n return true;\n }),\n );\n }\n\n private shouldFilterTool(toolName: string): boolean {\n if (this.allowedTools) {\n // If using allowed list, filter out tools NOT in the list\n return !this.allowedTools.has(toolName);\n } else if (this.disallowedTools) {\n // If using disallowed list, filter out tools IN the list\n return this.disallowedTools.has(toolName);\n }\n\n return false;\n }\n}\n", "import { Middleware } from \"./middleware\";\nimport { AbstractAgent } from \"@/agent\";\nimport type { RunAgentInput, BaseEvent } from \"@ag-ui/core\";\nimport type { Observable } from \"rxjs\";\n\ntype InputMessage = RunAgentInput[\"messages\"][number];\n\nfunction sanitizeMessageContent(message: InputMessage): InputMessage {\n const rawContent = (message as { content?: unknown }).content;\n\n if (Array.isArray(rawContent)) {\n const concatenatedContent = rawContent\n .filter(\n (part): part is { type: \"text\"; text: string } =>\n typeof part === \"object\" &&\n part !== null &&\n \"type\" in part &&\n (part as { type: unknown }).type === \"text\" &&\n typeof (part as { text?: unknown }).text === \"string\",\n )\n .map((part) => part.text)\n .join(\"\");\n\n return {\n ...message,\n content: concatenatedContent,\n } as InputMessage;\n }\n\n if (typeof rawContent === \"string\") {\n return message;\n }\n\n return {\n ...message,\n content: \"\",\n } as InputMessage;\n}\n\n/**\n * Middleware placeholder that maintains compatibility with AG-UI 0.0.39 flows.\n * Currently it simply forwards all events to the next middleware/agent.\n */\nexport class BackwardCompatibility_0_0_39 extends Middleware {\n override run(input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> {\n const { parentRunId: _parentRunId, ...rest } = input;\n const sanitizedInput: RunAgentInput = {\n ...rest,\n messages: rest.messages.map(sanitizeMessageContent),\n } as RunAgentInput;\n\n return this.runNext(sanitizedInput, next);\n }\n}\n", "import { Middleware } from \"./middleware\";\nimport { AbstractAgent } from \"@/agent\";\nimport type { RunAgentInput, BaseEvent } from \"@ag-ui/core\";\nimport { EventType } from \"@ag-ui/core\";\nimport type { Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport { randomUUID } from \"@/utils\";\n\n// Event type strings for THINKING events (deprecated)\nconst THINKING_START = \"THINKING_START\";\nconst THINKING_END = \"THINKING_END\";\nconst THINKING_TEXT_MESSAGE_START = \"THINKING_TEXT_MESSAGE_START\";\nconst THINKING_TEXT_MESSAGE_CONTENT = \"THINKING_TEXT_MESSAGE_CONTENT\";\nconst THINKING_TEXT_MESSAGE_END = \"THINKING_TEXT_MESSAGE_END\";\n\n/**\n * Middleware that maps deprecated THINKING events to the new REASONING events.\n *\n * This ensures backward compatibility for agents that still emit legacy THINKING\n * events (THINKING_START, THINKING_END, THINKING_TEXT_MESSAGE_START, etc.)\n * by transforming them into the corresponding REASONING events.\n *\n * Event mapping:\n * - THINKING_START → REASONING_START\n * - THINKING_TEXT_MESSAGE_START → REASONING_MESSAGE_START\n * - THINKING_TEXT_MESSAGE_CONTENT → REASONING_MESSAGE_CONTENT\n * - THINKING_TEXT_MESSAGE_END → REASONING_MESSAGE_END\n * - THINKING_END → REASONING_END\n *\n */\nexport class BackwardCompatibility_0_0_45 extends Middleware {\n private currentReasoningId: string | null = null;\n private currentMessageId: string | null = null;\n\n private warnAboutTransformation(from: string, to: string) {\n if (process.env.SUPPRESS_TRANSFORMATION_WARNINGS) return;\n console.warn(\n `AG-UI is converting ${from} to ${to}. To remove this warning, upgrade your AG-UI integration package (e.g. @ag-ui/langgraph). To surpress it, set SUPPRESS_TRANSFORMATION_WARNINGS=true in your .env file.`,\n );\n }\n override run(input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> {\n // Reset state for each run\n this.currentReasoningId = null;\n this.currentMessageId = null;\n\n return this.runNext(input, next).pipe(map((event) => this.transformEvent(event)));\n }\n\n private transformEvent(event: BaseEvent): BaseEvent {\n const eventType = event.type as string;\n\n switch (eventType) {\n case THINKING_START: {\n this.currentReasoningId = randomUUID();\n const { title, ...rest } = event as BaseEvent & { title?: string };\n this.warnAboutTransformation(THINKING_START, EventType.REASONING_START);\n return {\n ...rest,\n type: EventType.REASONING_START,\n messageId: this.currentReasoningId,\n };\n }\n\n case THINKING_TEXT_MESSAGE_START: {\n this.currentMessageId = randomUUID();\n this.warnAboutTransformation(\n THINKING_TEXT_MESSAGE_START,\n EventType.REASONING_MESSAGE_START,\n );\n return {\n ...event,\n type: EventType.REASONING_MESSAGE_START,\n messageId: this.currentMessageId,\n role: \"assistant\" as const,\n };\n }\n\n case THINKING_TEXT_MESSAGE_CONTENT: {\n const { delta, ...rest } = event as BaseEvent & { delta: string };\n this.warnAboutTransformation(\n THINKING_TEXT_MESSAGE_CONTENT,\n EventType.REASONING_MESSAGE_CONTENT,\n );\n return {\n ...rest,\n type: EventType.REASONING_MESSAGE_CONTENT,\n messageId: this.currentMessageId ?? randomUUID(),\n delta,\n };\n }\n\n case THINKING_TEXT_MESSAGE_END: {\n const messageId = this.currentMessageId ?? randomUUID();\n this.warnAboutTransformation(THINKING_TEXT_MESSAGE_END, EventType.REASONING_MESSAGE_END);\n return {\n ...event,\n type: EventType.REASONING_MESSAGE_END,\n messageId,\n };\n }\n\n case THINKING_END: {\n const reasoningId = this.currentReasoningId ?? randomUUID();\n this.warnAboutTransformation(THINKING_END, EventType.REASONING_END);\n return {\n ...event,\n type: EventType.REASONING_END,\n messageId: reasoningId,\n };\n }\n\n default:\n return event;\n }\n }\n}\n", "", "import { defaultApplyEvents } from \"@/apply/default\";\nimport {\n Message,\n State,\n RunAgentInput,\n BaseEvent,\n ToolCall,\n AssistantMessage,\n AgentCapabilities,\n} from \"@ag-ui/core\";\n\nimport {\n AgentConfig,\n AgentDebugConfig,\n RunAgentParameters,\n ResolvedAgentDebugConfig,\n resolveAgentDebugConfig,\n} from \"./types\";\nimport { DebugLogger, createDebugLogger } from \"@/debug-logger\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { structuredClone_ } from \"@/utils\";\nimport { compareVersions } from \"compare-versions\";\nimport { catchError, map, tap } from \"rxjs/operators\";\nimport { finalize } from \"rxjs/operators\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { pipe, Observable, from, of, EMPTY, Subject, defer } from \"rxjs\";\nimport { verifyEvents } from \"@/verify\";\nimport { convertToLegacyEvents } from \"@/legacy/convert\";\nimport { LegacyRuntimeProtocolEvent } from \"@/legacy/types\";\nimport { lastValueFrom } from \"rxjs\";\nimport { transformChunks } from \"@/chunks\";\nimport { AgentStateMutation, AgentSubscriber, runSubscribersWithMutation } from \"./subscriber\";\nimport { AGUIConnectNotImplementedError } from \"@ag-ui/core\";\nimport {\n Middleware,\n MiddlewareFunction,\n FunctionMiddleware,\n BackwardCompatibility_0_0_39,\n BackwardCompatibility_0_0_45,\n} from \"@/middleware\";\nimport packageJson from \"../../package.json\";\n\nexport interface RunAgentResult {\n result: any;\n newMessages: Message[];\n}\n\nexport abstract class AbstractAgent {\n public agentId?: string;\n public description: string;\n public threadId: string;\n public messages: Message[];\n public state: State;\n private _debug: ResolvedAgentDebugConfig;\n private _debugLogger: DebugLogger | undefined;\n public subscribers: AgentSubscriber[] = [];\n public isRunning: boolean = false;\n private middlewares: Middleware[] = [];\n // Emits to immediately detach from the active run (stop processing its stream)\n private activeRunDetach$?: Subject<void>;\n private activeRunCompletionPromise?: Promise<void>;\n\n get maxVersion() {\n return packageJson.version;\n }\n\n get debug(): ResolvedAgentDebugConfig {\n return this._debug;\n }\n\n set debug(value: AgentDebugConfig | ResolvedAgentDebugConfig) {\n this._debug = resolveAgentDebugConfig(value as AgentDebugConfig);\n this._debugLogger = createDebugLogger(this._debug);\n }\n\n get debugLogger(): DebugLogger | undefined {\n return this._debugLogger;\n }\n\n set debugLogger(value: DebugLogger | boolean | undefined) {\n if (typeof value === \"boolean\") {\n this._debugLogger = value\n ? createDebugLogger(resolveAgentDebugConfig(true))\n : undefined;\n } else {\n this._debugLogger = value;\n }\n }\n\n constructor({\n agentId,\n description,\n threadId,\n initialMessages,\n initialState,\n debug,\n }: AgentConfig = {}) {\n this.agentId = agentId;\n this.description = description ?? \"\";\n this.threadId = threadId ?? uuidv4();\n this.messages = structuredClone_(initialMessages ?? []);\n this.state = structuredClone_(initialState ?? {});\n this._debug = resolveAgentDebugConfig(debug);\n this._debugLogger = createDebugLogger(this._debug);\n\n if (compareVersions(this.maxVersion, \"0.0.39\") <= 0) {\n this.middlewares.unshift(new BackwardCompatibility_0_0_39());\n }\n\n // Auto-insert BackwardCompatibility_0_0_45 for backward compatibility\n // with legacy THINKING events (deprecated, will be removed in 1.0.0)\n if (compareVersions(this.maxVersion, \"0.0.45\") <= 0) {\n this.middlewares.unshift(new BackwardCompatibility_0_0_45());\n }\n }\n\n public subscribe(subscriber: AgentSubscriber) {\n this.subscribers.push(subscriber);\n return {\n unsubscribe: () => {\n this.subscribers = this.subscribers.filter((s) => s !== subscriber);\n },\n };\n }\n\n abstract run(input: RunAgentInput): Observable<BaseEvent>;\n\n /**\n * Returns the agent's current capabilities.\n * Optional — subclasses implement this to advertise what they support.\n */\n getCapabilities?(): Promise<AgentCapabilities>;\n\n public use(...middlewares: (Middleware | MiddlewareFunction)[]): this {\n const normalizedMiddlewares = middlewares.map((middleware) =>\n typeof middleware === \"function\" ? new FunctionMiddleware(middleware) : middleware,\n );\n this.middlewares.push(...normalizedMiddlewares);\n return this;\n }\n\n public async runAgent(\n parameters?: RunAgentParameters,\n subscriber?: AgentSubscriber,\n ): Promise<RunAgentResult> {\n try {\n this.isRunning = true;\n this.agentId = this.agentId ?? uuidv4();\n const input = this.prepareRunAgentInput(parameters);\n\n this.debugLogger?.lifecycle(\"LIFECYCLE\", \"Run started:\", {\n agentId: this.agentId,\n threadId: this.threadId,\n });\n\n let result: any = undefined;\n const currentMessageIds = new Set(this.messages.map((message) => message.id));\n\n const subscribers: AgentSubscriber[] = [\n {\n onRunFinishedEvent: (params) => {\n result = params.result;\n },\n },\n ...this.subscribers,\n subscriber ?? {},\n ];\n\n await this.onInitialize(input, subscribers);\n\n // Per-run detachment signal + completion promise\n this.activeRunDetach$ = new Subject<void>();\n let resolveActiveRunCompletion: (() => void) | undefined;\n this.activeRunCompletionPromise = new Promise<void>((resolve) => {\n resolveActiveRunCompletion = resolve;\n });\n\n const pipeline = pipe(\n () => {\n // Build middleware chain using reduceRight so middlewares can intercept runs.\n if (this.middlewares.length === 0) {\n return this.run(input);\n }\n\n const chainedAgent = this.middlewares.reduceRight(\n (nextAgent: AbstractAgent, middleware) =>\n ({\n run: (i: RunAgentInput) => middleware.run(i, nextAgent),\n get messages() {\n return nextAgent.messages;\n },\n get state() {\n return nextAgent.state;\n },\n }) as AbstractAgent,\n this, // Original agent is the final 'next'\n );\n\n return chainedAgent.run(input);\n },\n transformChunks(this.debugLogger),\n verifyEvents(this.debugLogger),\n // Stop processing immediately when this run is detached\n (source$) => source$.pipe(takeUntil(this.activeRunDetach$!)),\n (source$) => this.apply(input, source$, subscribers),\n (source$) => this.processApplyEvents(input, source$, subscribers),\n catchError((error) => {\n this.debugLogger?.lifecycle(\"LIFECYCLE\", \"Run errored:\", {\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n });\n this.isRunning = false;\n return this.onError(input, error, subscribers);\n }),\n finalize(() => {\n this.debugLogger?.lifecycle(\"LIFECYCLE\", \"Run finished:\", {\n agentId: this.agentId,\n threadId: this.threadId,\n });\n this.isRunning = false;\n void this.onFinalize(input, subscribers);\n resolveActiveRunCompletion?.();\n resolveActiveRunCompletion = undefined;\n this.activeRunCompletionPromise = undefined;\n this.activeRunDetach$ = undefined;\n }),\n );\n\n await lastValueFrom(pipeline(of(null)));\n const newMessages = structuredClone_(this.messages).filter(\n (message: Message) => !currentMessageIds.has(message.id),\n );\n return { result, newMessages };\n } finally {\n this.isRunning = false;\n }\n }\n\n protected connect(input: RunAgentInput): Observable<BaseEvent> {\n throw new AGUIConnectNotImplementedError();\n }\n public async connectAgent(\n parameters?: RunAgentParameters,\n subscriber?: AgentSubscriber,\n ): Promise<RunAgentResult> {\n try {\n this.isRunning = true;\n this.agentId = this.agentId ?? uuidv4();\n const input = this.prepareRunAgentInput(parameters);\n let result: any = undefined;\n const currentMessageIds = new Set(this.messages.map((message) => message.id));\n\n const subscribers: AgentSubscriber[] = [\n {\n onRunFinishedEvent: (params) => {\n result = params.result;\n },\n },\n ...this.subscribers,\n subscriber ?? {},\n ];\n\n await this.onInitialize(input, subscribers);\n\n // Per-run detachment signal + completion promise\n this.activeRunDetach$ = new Subject<void>();\n let resolveActiveRunCompletion: (() => void) | undefined;\n this.activeRunCompletionPromise = new Promise<void>((resolve) => {\n resolveActiveRunCompletion = resolve;\n });\n\n const pipeline = pipe(\n () => defer(() => this.connect(input)),\n transformChunks(this.debugLogger),\n verifyEvents(this.debugLogger),\n // Stop processing immediately when this run is detached\n (source$) => source$.pipe(takeUntil(this.activeRunDetach$!)),\n (source$) => this.apply(input, source$, subscribers),\n (source$) => this.processApplyEvents(input, source$, subscribers),\n catchError((error) => {\n this.isRunning = false;\n if (!(error instanceof AGUIConnectNotImplementedError)) {\n return this.onError(input, error, subscribers);\n }\n return EMPTY;\n }),\n finalize(() => {\n this.isRunning = false;\n void this.onFinalize(input, subscribers);\n resolveActiveRunCompletion?.();\n resolveActiveRunCompletion = undefined;\n this.activeRunCompletionPromise = undefined;\n this.activeRunDetach$ = undefined;\n }),\n );\n\n // defaultValue prevents EmptyError when catchError returns EMPTY\n // (e.g. ConnectNotImplementedError path)\n await lastValueFrom(pipeline(of(null)), { defaultValue: undefined });\n const newMessages = structuredClone_(this.messages).filter(\n (message: Message) => !currentMessageIds.has(message.id),\n );\n return { result, newMessages };\n } finally {\n this.isRunning = false;\n }\n }\n\n public abortRun() {}\n\n public async detachActiveRun(): Promise<void> {\n if (!this.activeRunDetach$) {\n return;\n }\n const completion = this.activeRunCompletionPromise ?? Promise.resolve();\n this.activeRunDetach$.next();\n this.activeRunDetach$?.complete();\n await completion;\n }\n\n protected apply(\n input: RunAgentInput,\n events$: Observable<BaseEvent>,\n subscribers: AgentSubscriber[],\n ): Observable<AgentStateMutation> {\n return defaultApplyEvents(input, events$, this, subscribers, this.debugLogger);\n }\n\n protected processApplyEvents(\n input: RunAgentInput,\n events$: Observable<AgentStateMutation>,\n subscribers: AgentSubscriber[],\n ): Observable<AgentStateMutation> {\n return events$.pipe(\n tap((event) => {\n if (event.messages) {\n this.messages = event.messages;\n subscribers.forEach((subscriber) => {\n subscriber.onMessagesChanged?.({\n messages: this.messages,\n state: this.state,\n agent: this,\n input,\n });\n });\n }\n if (event.state) {\n this.state = event.state;\n subscribers.forEach((subscriber) => {\n subscriber.onStateChanged?.({\n state: this.state,\n messages: this.messages,\n agent: this,\n input,\n });\n });\n }\n }),\n );\n }\n\n protected prepareRunAgentInput(parameters?: RunAgentParameters): RunAgentInput {\n const clonedMessages = structuredClone_(this.messages) as Message[];\n const messagesWithoutActivity = clonedMessages.filter((message) => message.role !== \"activity\");\n\n return {\n threadId: this.threadId,\n runId: parameters?.runId || uuidv4(),\n tools: structuredClone_(parameters?.tools ?? []),\n context: structuredClone_(parameters?.context ?? []),\n forwardedProps: structuredClone_(parameters?.forwardedProps ?? {}),\n state: structuredClone_(this.state),\n messages: messagesWithoutActivity,\n };\n }\n\n protected async onInitialize(input: RunAgentInput, subscribers: AgentSubscriber[]) {\n const onRunInitializedMutation = await runSubscribersWithMutation(\n subscribers,\n this.messages,\n this.state,\n (subscriber, messages, state) =>\n subscriber.onRunInitialized?.({ messages, state, agent: this, input }),\n );\n if (\n onRunInitializedMutation.messages !== undefined ||\n onRunInitializedMutation.state !== undefined\n ) {\n if (onRunInitializedMutation.messages) {\n this.messages = onRunInitializedMutation.messages;\n input.messages = onRunInitializedMutation.messages;\n subscribers.forEach((subscriber) => {\n subscriber.onMessagesChanged?.({\n messages: this.messages,\n state: this.state,\n agent: this,\n input,\n });\n });\n }\n if (onRunInitializedMutation.state) {\n this.state = onRunInitializedMutation.state;\n input.state = onRunInitializedMutation.state;\n subscribers.forEach((subscriber) => {\n subscriber.onStateChanged?.({\n state: this.state,\n messages: this.messages,\n agent: this,\n input,\n });\n });\n }\n }\n }\n\n protected onError(input: RunAgentInput, error: Error, subscribers: AgentSubscriber[]) {\n return from(\n runSubscribersWithMutation(\n subscribers,\n this.messages,\n this.state,\n (subscriber, messages, state) =>\n subscriber.onRunFailed?.({ error, messages, state, agent: this, input }),\n ),\n ).pipe(\n map((onRunFailedMutation) => {\n const mutation = onRunFailedMutation as AgentStateMutation;\n if (mutation.messages !== undefined || mutation.state !== undefined) {\n if (mutation.messages !== undefined) {\n this.messages = mutation.messages;\n subscribers.forEach((subscriber) => {\n subscriber.onMessagesChanged?.({\n messages: this.messages,\n state: this.state,\n agent: this,\n input,\n });\n });\n }\n if (mutation.state !== undefined) {\n this.state = mutation.state;\n subscribers.forEach((subscriber) => {\n subscriber.onStateChanged?.({\n state: this.state,\n messages: this.messages,\n agent: this,\n input,\n });\n });\n }\n }\n\n if (mutation.stopPropagation !== true) {\n console.error(\"Agent execution failed:\", error);\n throw error;\n }\n\n // Return an empty mutation instead of null to prevent EmptyError\n return {} as AgentStateMutation;\n }),\n );\n }\n\n protected async onFinalize(input: RunAgentInput, subscribers: AgentSubscriber[]) {\n const onRunFinalizedMutation = await runSubscribersWithMutation(\n subscribers,\n this.messages,\n this.state,\n (subscriber, messages, state) =>\n subscriber.onRunFinalized?.({ messages, state, agent: this, input }),\n );\n\n if (\n onRunFinalizedMutation.messages !== undefined ||\n onRunFinalizedMutation.state !== undefined\n ) {\n if (onRunFinalizedMutation.messages !== undefined) {\n this.messages = onRunFinalizedMutation.messages;\n subscribers.forEach((subscriber) => {\n subscriber.onMessagesChanged?.({\n messages: this.messages,\n state: this.state,\n agent: this,\n input,\n });\n });\n }\n if (onRunFinalizedMutation.state !== undefined) {\n this.state = onRunFinalizedMutation.state;\n subscribers.forEach((subscriber) => {\n subscriber.onStateChanged?.({\n state: this.state,\n messages: this.messages,\n agent: this,\n input,\n });\n });\n }\n }\n }\n\n public clone() {\n const cloned = Object.create(Object.getPrototypeOf(this));\n\n cloned.agentId = this.agentId;\n cloned.description = this.description;\n cloned.threadId = this.threadId;\n cloned.messages = structuredClone_(this.messages);\n cloned.state = structuredClone_(this.state);\n cloned._debug = this._debug;\n cloned._debugLogger = this._debugLogger;\n cloned.isRunning = this.isRunning;\n cloned.subscribers = [...this.subscribers];\n cloned.middlewares = [...this.middlewares];\n\n return cloned;\n }\n\n public addMessage(message: Message) {\n // Add message to the messages array\n this.messages.push(message);\n\n // Notify subscribers sequentially in the background\n (async () => {\n // Fire onNewMessage sequentially\n for (const subscriber of this.subscribers) {\n await subscriber.onNewMessage?.({\n message,\n messages: this.messages,\n state: this.state,\n agent: this,\n });\n }\n\n // Fire onNewToolCall if the message is from assistant and contains tool calls\n if (message.role === \"assistant\" && message.toolCalls) {\n for (const toolCall of message.toolCalls) {\n for (const subscriber of this.subscribers) {\n await subscriber.onNewToolCall?.({\n toolCall,\n messages: this.messages,\n state: this.state,\n agent: this,\n });\n }\n }\n }\n\n // Fire onMessagesChanged sequentially\n for (const subscriber of this.subscribers) {\n await subscriber.onMessagesChanged?.({\n messages: this.messages,\n state: this.state,\n agent: this,\n });\n }\n })();\n }\n\n public addMessages(messages: Message[]) {\n // Add all messages to the messages array\n this.messages.push(...messages);\n\n // Notify subscribers sequentially in the background\n (async () => {\n // Fire onNewMessage and onNewToolCall for each message sequentially\n for (const message of messages) {\n // Fire onNewMessage sequentially\n for (const subscriber of this.subscribers) {\n await subscriber.onNewMessage?.({\n message,\n messages: this.messages,\n state: this.state,\n agent: this,\n });\n }\n\n // Fire onNewToolCall if the message is from assistant and contains tool calls\n if (message.role === \"assistant\" && message.toolCalls) {\n for (const toolCall of message.toolCalls) {\n for (const subscriber of this.subscribers) {\n await subscriber.onNewToolCall?.({\n toolCall,\n messages: this.messages,\n state: this.state,\n agent: this,\n });\n }\n }\n }\n }\n\n // Fire onMessagesChanged once at the end sequentially\n for (const subscriber of this.subscribers) {\n await subscriber.onMessagesChanged?.({\n messages: this.messages,\n state: this.state,\n agent: this,\n });\n }\n })();\n }\n\n public setMessages(messages: Message[]) {\n // Replace the entire messages array\n this.messages = structuredClone_(messages);\n\n // Notify subscribers sequentially in the background\n (async () => {\n // Fire onMessagesChanged sequentially\n for (const subscriber of this.subscribers) {\n await subscriber.onMessagesChanged?.({\n messages: this.messages,\n state: this.state,\n agent: this,\n });\n }\n })();\n }\n\n public setState(state: State) {\n // Replace the entire state\n this.state = structuredClone_(state);\n\n // Notify subscribers sequentially in the background\n (async () => {\n // Fire onStateChanged sequentially\n for (const subscriber of this.subscribers) {\n await subscriber.onStateChanged?.({\n messages: this.messages,\n state: this.state,\n agent: this,\n });\n }\n })();\n }\n\n public legacy_to_be_removed_runAgentBridged(\n config?: RunAgentParameters,\n ): Observable<LegacyRuntimeProtocolEvent> {\n this.agentId = this.agentId ?? uuidv4();\n const input = this.prepareRunAgentInput(config);\n\n // Build middleware chain for legacy bridge\n const runObservable = (() => {\n if (this.middlewares.length === 0) {\n return this.run(input);\n }\n\n const chainedAgent = this.middlewares.reduceRight(\n (nextAgent: AbstractAgent, middleware) =>\n ({\n run: (i: RunAgentInput) => middleware.run(i, nextAgent),\n get messages() {\n return nextAgent.messages;\n },\n get state() {\n return nextAgent.state;\n },\n }) as AbstractAgent,\n this,\n );\n\n return chainedAgent.run(input);\n })();\n\n return runObservable.pipe(\n transformChunks(this.debugLogger),\n verifyEvents(this.debugLogger),\n convertToLegacyEvents(this.threadId, input.runId, this.agentId),\n (events$: Observable<LegacyRuntimeProtocolEvent>) => {\n return events$.pipe(\n map((event) => {\n this.debugLogger?.event(\"LEGACY\", \"Event:\", event, { type: event.type });\n return event;\n }),\n );\n },\n );\n }\n}\n", "import { AbstractAgent, RunAgentResult } from \"./agent\";\nimport { runHttpRequest } from \"@/run/http-request\";\nimport { HttpAgentConfig, RunAgentParameters } from \"./types\";\nimport { RunAgentInput, BaseEvent } from \"@ag-ui/core\";\nimport { structuredClone_ } from \"@/utils\";\nimport { transformHttpEventStream } from \"@/transform/http\";\nimport { Observable } from \"rxjs\";\nimport { AgentSubscriber } from \"./subscriber\";\n\ninterface RunHttpAgentConfig extends RunAgentParameters {\n abortController?: AbortController;\n}\n\nexport class HttpAgent extends AbstractAgent {\n public url: string;\n public headers: Record<string, string>;\n public abortController: AbortController = new AbortController();\n\n /**\n * Returns the fetch config for the http request.\n * Override this to customize the request.\n *\n * @returns The fetch config for the http request.\n */\n protected requestInit(input: RunAgentInput): RequestInit {\n return {\n method: \"POST\",\n headers: {\n ...this.headers,\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n },\n body: JSON.stringify(input),\n signal: this.abortController.signal,\n };\n }\n\n public runAgent(\n parameters?: RunHttpAgentConfig,\n subscriber?: AgentSubscriber,\n ): Promise<RunAgentResult> {\n this.abortController = parameters?.abortController ?? new AbortController();\n return super.runAgent(parameters, subscriber);\n }\n\n abortRun() {\n this.abortController.abort();\n super.abortRun();\n }\n\n constructor(config: HttpAgentConfig) {\n super(config);\n this.url = config.url;\n this.headers = structuredClone_(config.headers ?? {});\n }\n\n run(input: RunAgentInput): Observable<BaseEvent> {\n const httpEvents = runHttpRequest(this.url, this.requestInit(input));\n return transformHttpEventStream(httpEvents, this.debugLogger);\n }\n\n public clone(): HttpAgent {\n const cloned = super.clone() as HttpAgent;\n cloned.url = this.url;\n cloned.headers = structuredClone_(this.headers ?? {});\n\n const newController = new AbortController();\n const originalSignal = this.abortController.signal as AbortSignal & { reason?: unknown };\n if (originalSignal.aborted) {\n newController.abort(originalSignal.reason);\n }\n cloned.abortController = newController;\n\n return cloned;\n }\n}\n", "import {\n BaseEvent,\n EventType,\n TextMessageStartEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n} from \"@ag-ui/core\";\n\n/**\n * Compacts streaming events by consolidating multiple deltas into single events.\n * For text messages: multiple content deltas become one concatenated delta.\n * For tool calls: multiple args deltas become one concatenated delta.\n * Events between related streaming events are reordered to keep streaming events together.\n *\n * @param events - Array of events to compact\n * @returns Compacted array of events\n */\nexport function compactEvents(events: BaseEvent[]): BaseEvent[] {\n const compacted: BaseEvent[] = [];\n const pendingTextMessages = new Map<\n string,\n {\n start?: TextMessageStartEvent;\n contents: TextMessageContentEvent[];\n end?: TextMessageEndEvent;\n otherEvents: BaseEvent[];\n }\n >();\n const pendingToolCalls = new Map<\n string,\n {\n start?: ToolCallStartEvent;\n args: ToolCallArgsEvent[];\n end?: ToolCallEndEvent;\n otherEvents: BaseEvent[];\n }\n >();\n\n for (const event of events) {\n // Handle text message streaming events\n if (event.type === EventType.TEXT_MESSAGE_START) {\n const startEvent = event as TextMessageStartEvent;\n const messageId = startEvent.messageId;\n\n if (!pendingTextMessages.has(messageId)) {\n pendingTextMessages.set(messageId, {\n contents: [],\n otherEvents: [],\n });\n }\n\n const pending = pendingTextMessages.get(messageId)!;\n pending.start = startEvent;\n } else if (event.type === EventType.TEXT_MESSAGE_CONTENT) {\n const contentEvent = event as TextMessageContentEvent;\n const messageId = contentEvent.messageId;\n\n if (!pendingTextMessages.has(messageId)) {\n pendingTextMessages.set(messageId, {\n contents: [],\n otherEvents: [],\n });\n }\n\n const pending = pendingTextMessages.get(messageId)!;\n pending.contents.push(contentEvent);\n } else if (event.type === EventType.TEXT_MESSAGE_END) {\n const endEvent = event as TextMessageEndEvent;\n const messageId = endEvent.messageId;\n\n if (!pendingTextMessages.has(messageId)) {\n pendingTextMessages.set(messageId, {\n contents: [],\n otherEvents: [],\n });\n }\n\n const pending = pendingTextMessages.get(messageId)!;\n pending.end = endEvent;\n\n // Flush this message's events\n flushTextMessage(messageId, pending, compacted);\n pendingTextMessages.delete(messageId);\n } else if (event.type === EventType.TOOL_CALL_START) {\n const startEvent = event as ToolCallStartEvent;\n const toolCallId = startEvent.toolCallId;\n\n if (!pendingToolCalls.has(toolCallId)) {\n pendingToolCalls.set(toolCallId, {\n args: [],\n otherEvents: [],\n });\n }\n\n const pending = pendingToolCalls.get(toolCallId)!;\n pending.start = startEvent;\n } else if (event.type === EventType.TOOL_CALL_ARGS) {\n const argsEvent = event as ToolCallArgsEvent;\n const toolCallId = argsEvent.toolCallId;\n\n if (!pendingToolCalls.has(toolCallId)) {\n pendingToolCalls.set(toolCallId, {\n args: [],\n otherEvents: [],\n });\n }\n\n const pending = pendingToolCalls.get(toolCallId)!;\n pending.args.push(argsEvent);\n } else if (event.type === EventType.TOOL_CALL_END) {\n const endEvent = event as ToolCallEndEvent;\n const toolCallId = endEvent.toolCallId;\n\n if (!pendingToolCalls.has(toolCallId)) {\n pendingToolCalls.set(toolCallId, {\n args: [],\n otherEvents: [],\n });\n }\n\n const pending = pendingToolCalls.get(toolCallId)!;\n pending.end = endEvent;\n\n // Flush this tool call's events\n flushToolCall(toolCallId, pending, compacted);\n pendingToolCalls.delete(toolCallId);\n } else {\n // For non-streaming events, check if we're in the middle of any streaming sequences\n let addedToBuffer = false;\n\n // Check text messages\n for (const [messageId, pending] of pendingTextMessages) {\n // If we have a start but no end yet, this event is \"in between\"\n if (pending.start && !pending.end) {\n pending.otherEvents.push(event);\n addedToBuffer = true;\n break;\n }\n }\n\n // Check tool calls if not already buffered\n if (!addedToBuffer) {\n for (const [toolCallId, pending] of pendingToolCalls) {\n // If we have a start but no end yet, this event is \"in between\"\n if (pending.start && !pending.end) {\n pending.otherEvents.push(event);\n addedToBuffer = true;\n break;\n }\n }\n }\n\n // If not in the middle of any streaming sequence, add directly to compacted\n if (!addedToBuffer) {\n compacted.push(event);\n }\n }\n }\n\n // Flush any remaining incomplete messages\n for (const [messageId, pending] of pendingTextMessages) {\n flushTextMessage(messageId, pending, compacted);\n }\n\n // Flush any remaining incomplete tool calls\n for (const [toolCallId, pending] of pendingToolCalls) {\n flushToolCall(toolCallId, pending, compacted);\n }\n\n return compacted;\n}\n\nfunction flushTextMessage(\n messageId: string,\n pending: {\n start?: TextMessageStartEvent;\n contents: TextMessageContentEvent[];\n end?: TextMessageEndEvent;\n otherEvents: BaseEvent[];\n },\n compacted: BaseEvent[],\n): void {\n // Add start event if present\n if (pending.start) {\n compacted.push(pending.start);\n }\n\n // Compact all content events into one\n if (pending.contents.length > 0) {\n const concatenatedDelta = pending.contents.map((c) => c.delta).join(\"\");\n\n const compactedContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: messageId,\n delta: concatenatedDelta,\n };\n\n compacted.push(compactedContent);\n }\n\n // Add end event if present\n if (pending.end) {\n compacted.push(pending.end);\n }\n\n // Add any events that were in between\n for (const otherEvent of pending.otherEvents) {\n compacted.push(otherEvent);\n }\n}\n\nfunction flushToolCall(\n toolCallId: string,\n pending: {\n start?: ToolCallStartEvent;\n args: ToolCallArgsEvent[];\n end?: ToolCallEndEvent;\n otherEvents: BaseEvent[];\n },\n compacted: BaseEvent[],\n): void {\n // Add start event if present\n if (pending.start) {\n compacted.push(pending.start);\n }\n\n // Compact all args events into one\n if (pending.args.length > 0) {\n const concatenatedArgs = pending.args.map((a) => a.delta).join(\"\");\n\n const compactedArgs: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallId,\n delta: concatenatedArgs,\n };\n\n compacted.push(compactedArgs);\n }\n\n // Add end event if present\n if (pending.end) {\n compacted.push(pending.end);\n }\n\n // Add any events that were in between\n for (const otherEvent of pending.otherEvents) {\n compacted.push(otherEvent);\n }\n}\n", "import { HttpAgent } from '@ag-ui/client';\n\nimport type { ChatMessage } from '../types.js';\nimport type { ClientAction, ServerEvent, SessionTransport } from './types.js';\n\nexport interface AgUiTransportOptions {\n url: string;\n headers?: Record<string, string> | (() => Record<string, string>);\n threadId?: string;\n clientTools?: Set<string>;\n onA2UIEvent?: (payload: Record<string, unknown>) => void;\n}\n\nlet _idCounter = 0;\nfunction generateId(): string {\n return `agui-${Date.now()}-${++_idCounter}`;\n}\n\nexport class AgUiTransport implements SessionTransport {\n private _url: string;\n private _headers: Record<string, string> | (() => Record<string, string>);\n private _threadId: string | undefined;\n private _clientTools: Set<string>;\n private _onA2UIEvent?: (payload: Record<string, unknown>) => void;\n\n private _agent: HttpAgent | null = null;\n private _connected = false;\n private _handlers = new Set<(event: ServerEvent) => void>();\n private _pendingResume = false;\n private _currentAssistantMessageId: string | null = null;\n\n constructor(options: AgUiTransportOptions) {\n this._url = options.url;\n this._headers = options.headers ?? {};\n this._threadId = options.threadId;\n this._clientTools = options.clientTools ?? new Set();\n this._onA2UIEvent = options.onA2UIEvent;\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n connect(sessionId?: string): void {\n const resolvedHeaders = typeof this._headers === 'function' ? this._headers() : this._headers;\n\n this._agent = new HttpAgent({\n url: this._url,\n headers: resolvedHeaders,\n threadId: this._threadId || undefined,\n });\n\n this._connected = true;\n\n const sid = sessionId || generateId();\n this._emit({ type: 'session-ready', sessionId: sid });\n this._emit({ type: 'messages-snapshot', messages: [] });\n }\n\n disconnect(): void {\n if (this._agent?.isRunning) {\n this._agent.abortRun();\n }\n this._agent = null;\n this._connected = false;\n this._pendingResume = false;\n }\n\n send(action: ClientAction): void {\n if (!this._agent) return;\n\n switch (action.type) {\n case 'user-message':\n this._sendUserMessage(action.text);\n break;\n case 'tool-result':\n this._sendToolResult(action.toolCallId, action.result, action.approved);\n break;\n case 'stop-generation':\n this._agent.abortRun();\n break;\n default:\n break;\n }\n }\n\n subscribe(handler: (event: ServerEvent) => void): () => void {\n this._handlers.add(handler);\n return () => this._handlers.delete(handler);\n }\n\n // ---------------------------------------------------------------------------\n // Private \u2014 user message flow\n // ---------------------------------------------------------------------------\n\n private _sendUserMessage(text: string): void {\n const agent = this._agent!;\n\n agent.addMessage({\n id: generateId(),\n role: 'user' as const,\n content: text,\n });\n\n this._runAgent();\n }\n\n // ---------------------------------------------------------------------------\n // Private \u2014 tool result flow\n // ---------------------------------------------------------------------------\n\n private _sendToolResult(toolCallId: string, result: unknown, approved: boolean): void {\n const agent = this._agent!;\n\n const toolMsg = {\n id: generateId(),\n role: 'tool' as const,\n toolCallId,\n content: JSON.stringify({\n ...((result as Record<string, unknown>) ?? {}),\n confirmed: approved,\n }),\n };\n agent.addMessage(toolMsg);\n\n if (agent.isRunning) {\n this._pendingResume = true;\n return;\n }\n\n this._runAgent();\n }\n\n // ---------------------------------------------------------------------------\n // Private \u2014 run agent with subscriber\n // ---------------------------------------------------------------------------\n\n private _runAgent(): void {\n const agent = this._agent;\n if (!agent) return;\n\n this._currentAssistantMessageId = null;\n this._emit({ type: 'typing', isTyping: true });\n\n if (typeof this._headers === 'function') {\n agent.headers = this._headers();\n }\n\n agent.runAgent(undefined, this._buildSubscriber()).catch((err: unknown) => {\n const message = err instanceof Error ? err.message : 'Agent run failed';\n this._emit({ type: 'error', message });\n this._emit({ type: 'typing', isTyping: false });\n });\n }\n\n private _buildSubscriber(): Record<string, (params: any) => void> {\n return {\n onTextMessageStartEvent: (params: any) => {\n const { event } = params;\n this._currentAssistantMessageId = event.messageId;\n\n const message: ChatMessage = {\n id: event.messageId,\n role: 'assistant',\n content: '',\n timestamp: Date.now(),\n status: 'streaming',\n };\n this._emit({ type: 'message-append', message });\n },\n\n onTextMessageContentEvent: (params: any) => {\n const { event } = params;\n this._emit({\n type: 'message-delta',\n messageId: event.messageId,\n delta: event.delta,\n });\n },\n\n onTextMessageEndEvent: (params: any) => {\n const { event } = params;\n this._emit({ type: 'message-complete', messageId: event.messageId });\n },\n\n onToolCallStartEvent: (params: any) => {\n const { event } = params;\n const messageId =\n event.parentMessageId ?? this._currentAssistantMessageId ?? event.toolCallId;\n\n this._emit({\n type: 'tool-call',\n messageId,\n toolCall: {\n id: event.toolCallId,\n name: event.toolCallName,\n args: undefined,\n argsBuffer: '',\n status: 'args-streaming',\n },\n });\n },\n\n onToolCallArgsEvent: (params: any) => {\n const { event } = params;\n this._emit({\n type: 'tool-call-args-delta',\n toolCallId: event.toolCallId,\n delta: event.delta,\n });\n },\n\n onToolCallEndEvent: (params: any) => {\n const { event, toolCallName, toolCallArgs } = params;\n\n if (this._clientTools.has(toolCallName)) {\n const messageId = this._currentAssistantMessageId ?? event.toolCallId;\n this._emit({\n type: 'tool-call',\n messageId,\n toolCall: {\n id: event.toolCallId,\n name: toolCallName,\n args: toolCallArgs,\n argsBuffer: JSON.stringify(toolCallArgs),\n status: 'pending',\n },\n });\n } else {\n this._emit({\n type: 'tool-call-done',\n toolCallId: event.toolCallId,\n });\n }\n },\n\n onRunFinishedEvent: (_params: any) => {\n this._emit({ type: 'typing', isTyping: false });\n\n if (this._pendingResume) {\n this._pendingResume = false;\n this._runAgent();\n }\n },\n\n onRunErrorEvent: (params: any) => {\n const { event } = params;\n this._emit({ type: 'error', message: event.message });\n this._emit({ type: 'typing', isTyping: false });\n },\n\n onCustomEvent: (params: any) => {\n const { event } = params;\n const payload = event.value as Record<string, unknown>;\n this._onA2UIEvent?.(payload);\n this._emit({ type: 'a2ui', payload });\n },\n };\n }\n\n // ---------------------------------------------------------------------------\n // Private \u2014 emit to subscribers\n // ---------------------------------------------------------------------------\n\n private _emit(event: ServerEvent): void {\n for (const handler of this._handlers) {\n handler(event);\n }\n }\n}\n", "/**\n * Mount contract types and helper for adaptive widget mountables.\n *\n * The `WidgetRegistry` in `@syntrologie/runtime-sdk` delivers props to each\n * mountable as `{ ...tile.props, instanceId, runtime, tileId? }` spread flat\n * (see `MountableContract.test.ts` in runtime-sdk for the end-to-end lockdown).\n *\n * Adaptives that strip plumbing manually maintain private blacklists that\n * silently drift when the contract grows (PR #2234 and #2238 documented this).\n * `stripMountPlumbing` centralizes the list so adding a new plumbing key in\n * the future is a one-line change here that every adaptive picks up automatically.\n *\n * Adaptives whose widget schemas use Zod `.strict()` MUST call this before\n * validating, or strict-mode will reject the runtime-injected keys and the\n * widget will silently render its empty/error state.\n */\nexport const MOUNT_PLUMBING_KEYS = ['instanceId', 'runtime', 'tileId'];\nexport function stripMountPlumbing(config) {\n if (!config || typeof config !== 'object') {\n return {};\n }\n const out = { ...config };\n for (const key of MOUNT_PLUMBING_KEYS) {\n delete out[key];\n }\n return out;\n}\n", "/**\n * Shared Zod schemas for decision strategies, conditions, and event scoping.\n *\n * These are the canonical definitions \u2014 runtime-sdk and all adaptive packages\n * should import from here instead of duplicating.\n */\nimport { z } from 'zod';\n// =============================================================================\n// ANCHOR ID SCHEMA\n// =============================================================================\nexport const AnchorIdZ = z\n .object({\n selector: z.string(),\n route: z.union([z.string(), z.array(z.string())]),\n})\n .strict();\n// =============================================================================\n// AUTHORING FIELDS \u2014 id / title / description / validation\n//\n// Shared fields every action carries. `id` is the action identifier the\n// runtime uses to dispatch, dedupe, and drop/replace actions \u2014 it is NOT\n// stripped before serving. `title` / `description` / `validation` are\n// authoring-only metadata stripped server-side in `to_runtime_config`\n// (platform/backend/app/domains/experiments/helpers.py).\n//\n// They all appear in the JSON Schema (and therefore in the tactician's\n// prompt) because the LLM needs to know they are valid action properties \u2014\n// otherwise schema validation would reject what the prompt commands.\n//\n// Each action variant should `.extend(AuthoringFieldsZ)` alongside any\n// triggerWhen/condition extensions.\n// =============================================================================\nexport const AuthoringFieldsZ = {\n id: z.string().optional().describe('Stable action identifier (e.g. \"act_3db6a14d2ab0\").'),\n title: z\n .string()\n .max(200)\n .optional()\n .describe('Authoring-only: short label shown on the action plan dashboard. Stripped before serving to the runtime SDK.'),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe('Authoring-only: one-sentence explanation of what this action does and why. Stripped before serving to the runtime SDK.'),\n validation: z\n .array(z.string().max(500))\n .max(10)\n .optional()\n .describe('Authoring-only: ordered steps a reviewer can follow to trigger this action and visually confirm it works. Each entry is one step. Stripped before serving to the runtime SDK.'),\n};\n// =============================================================================\n// TRIGGER VOCABULARY \u2014 canonical lists of valid event names, metric keys, etc.\n// These flow through to the JSON schema as enums and are used by the LLM prompt.\n// =============================================================================\n/** Events that can be counted in event_count conditions. */\nexport const COUNTABLE_EVENTS = [\n // User interactions (from PostHog autocapture normalization)\n 'ui.click',\n 'ui.scroll',\n 'ui.input',\n 'ui.change',\n 'ui.submit',\n // Behavioral detectors (from event-processor)\n 'ui.hover',\n 'ui.idle',\n 'ui.scroll_thrash',\n 'ui.focus_bounce',\n // Navigation\n 'nav.page_view',\n 'nav.page_leave',\n // Derived behavioral signals\n 'behavior.rage_click',\n 'behavior.hesitation',\n 'behavior.confusion',\n];\nexport const CountableEventZ = z\n .enum(COUNTABLE_EVENTS)\n .describe('Event name to count. ui.* = user interactions and behavioral detectors, nav.* = page navigation, behavior.* = derived behavioral signals.');\n/** Valid session metric keys. */\nexport const SESSION_METRIC_KEYS = ['time_on_page', 'page_views', 'scroll_depth'];\nexport const SessionMetricKeyZ = z\n .enum(SESSION_METRIC_KEYS)\n .describe('Session metric key. time_on_page = seconds on current page, page_views = pages visited this session, scroll_depth = 0-100 percentage.');\n/** Element chain match field prefixes for counter filters. */\nexport const ELEMENT_MATCH_FIELDS = ['tag_name', '$el_text'];\n// Note: attr__* is a dynamic prefix (attr__data-id, attr__class, attr__href, etc.)\n// and cannot be enumerated. The match key is either one of ELEMENT_MATCH_FIELDS\n// or starts with \"attr__\".\n// =============================================================================\n// CONDITION SCHEMAS\n// =============================================================================\nexport const PageUrlConditionZ = z\n .object({\n type: z.literal('page_url'),\n url: z.string().describe('URL path to match (e.g. \"/pricing\", \"/dashboard\")'),\n})\n .describe('Fires when the current page URL matches. Use for page-specific actions. ' +\n 'Example: {\"type\": \"page_url\", \"url\": \"/pricing\"}');\nexport const RouteConditionZ = z\n .object({\n type: z.literal('route'),\n routeId: z.string().describe('Named route ID from the route filter'),\n})\n .describe('Fires when the current route matches a named route ID.');\nexport const AnchorVisibleConditionZ = z\n .object({\n type: z.literal('anchor_visible'),\n anchorId: z.string().describe('CSS selector of the anchor element'),\n state: z\n .enum(['visible', 'present', 'absent'])\n .describe('\"visible\" = in viewport, \"present\" = in DOM, \"absent\" = not in DOM'),\n})\n .describe(\"Fires based on a DOM element's visibility state. \" +\n 'Example: {\"type\": \"anchor_visible\", \"anchorId\": \"#cta-button\", \"state\": \"visible\"}');\nexport const EventOccurredConditionZ = z\n .object({\n type: z.literal('event_occurred'),\n eventName: z.string().describe('Event name (e.g. \"ui.click\", \"$pageview\")'),\n withinMs: z.number().optional().describe('Time window in ms. Omit = any time this session.'),\n})\n .describe('Fires when a specific event has occurred during this session. ' +\n 'Example: {\"type\": \"event_occurred\", \"eventName\": \"ui.click\", \"withinMs\": 5000}');\nexport const StateEqualsConditionZ = z\n .object({\n type: z.literal('state_equals'),\n key: z\n .string()\n .describe('Key in the SDK persistent state store (localStorage). Only valid for keys the host app explicitly sets via syntro.state.set().'),\n value: z.unknown().describe('Expected value to match against'),\n})\n .describe('Checks the SDK persistent state store (localStorage). ONLY for host-app state set via syntro.state.set() \u2014 ' +\n 'NOT for user attributes like region, device, or UTM params (those are handled by segment targeting). ' +\n 'Do NOT use this for targeting. If you do not know the valid state keys, do not use this condition type.');\nexport const ViewportConditionZ = z\n .object({\n type: z.literal('viewport'),\n minWidth: z.number().optional().describe('Minimum viewport width in pixels'),\n maxWidth: z.number().optional().describe('Maximum viewport width in pixels'),\n minHeight: z.number().optional().describe('Minimum viewport height in pixels'),\n maxHeight: z.number().optional().describe('Maximum viewport height in pixels'),\n})\n .describe('Fires based on viewport (screen) size. Use for responsive behavior. ' +\n 'Example: {\"type\": \"viewport\", \"minWidth\": 768} \u2014 fires on tablet and larger.');\nexport const SessionMetricConditionZ = z\n .object({\n type: z.literal('session_metric'),\n key: SessionMetricKeyZ,\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n threshold: z.number().describe('Numeric threshold to compare against'),\n})\n .describe('Fires when a session metric crosses a threshold. Valid keys: \"time_on_page\" (seconds), ' +\n '\"page_views\" (count), \"scroll_depth\" (0-100). ' +\n 'Example: {\"type\": \"session_metric\", \"key\": \"time_on_page\", \"operator\": \"gte\", \"threshold\": 30}');\nexport const DismissedConditionZ = z\n .object({\n type: z.literal('dismissed'),\n key: z.string().describe('Dismissal key (usually a tile or action ID)'),\n inverted: z\n .boolean()\n .optional()\n .describe('When true, fires if NOT dismissed (default behavior)'),\n})\n .describe('Checks if an item has been dismissed by the user. Use with inverted: true to show only if not dismissed.');\nexport const CooldownActiveConditionZ = z\n .object({\n type: z.literal('cooldown_active'),\n key: z.string().describe('Cooldown key'),\n inverted: z.boolean().optional().describe('When true, fires if cooldown is NOT active'),\n})\n .describe('Checks if a cooldown timer is currently active. Use to prevent showing the same intervention too frequently.');\nexport const FrequencyLimitConditionZ = z\n .object({\n type: z.literal('frequency_limit'),\n key: z.string().describe('Frequency counter key'),\n limit: z.number().describe('Maximum allowed count'),\n inverted: z.boolean().optional().describe('When true, fires if limit NOT reached'),\n})\n .describe('Checks if a frequency limit has been reached. Use to cap how many times an action fires per session.');\nexport const MatchOpZ = z\n .object({\n equals: z.union([z.string(), z.number(), z.boolean()]).optional(),\n contains: z.string().optional(),\n})\n .describe('Match operator for counter filters. Exactly one of equals or contains must be specified.');\nexport const CounterDefZ = z\n .object({\n events: z\n .array(CountableEventZ)\n .min(1)\n .describe('Event names to count. Use values from the countable events enum.'),\n match: z\n .record(z.string(), MatchOpZ)\n .optional()\n .describe('Property filters. Keys are event prop names or element-chain fields ' +\n '(tag_name, $el_text, attr__*). All entries AND together.'),\n})\n .describe('Defines what events to count. Registered as an accumulator predicate at config-load time.');\nexport const EventCountConditionZ = z\n .object({\n type: z.literal('event_count'),\n key: z.string().describe('Unique key for this counter (used for accumulator registration)'),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n count: z.number().int().min(0).describe('Target count threshold'),\n withinMs: z\n .number()\n .positive()\n .optional()\n .describe('Time window in ms. Omit = count across entire session.'),\n counter: CounterDefZ.optional().describe('Inline counter definition. Defines what events to count.'),\n})\n .describe('Fires when accumulated event count crosses a threshold. Most powerful trigger type. ' +\n 'Example: {\"type\": \"event_count\", \"key\": \"pricing-clicks\", \"operator\": \"gte\", \"count\": 3, ' +\n '\"counter\": {\"events\": [\"ui.click\"], \"match\": {\"attr__data-cta\": {\"contains\": \"pricing\"}}}}');\nexport const ConditionZ = z.discriminatedUnion('type', [\n PageUrlConditionZ,\n RouteConditionZ,\n AnchorVisibleConditionZ,\n EventOccurredConditionZ,\n StateEqualsConditionZ,\n ViewportConditionZ,\n SessionMetricConditionZ,\n DismissedConditionZ,\n CooldownActiveConditionZ,\n FrequencyLimitConditionZ,\n EventCountConditionZ,\n]);\n// =============================================================================\n// STRATEGY SCHEMAS\n// =============================================================================\nexport const RuleZ = z\n .object({\n conditions: z\n .array(ConditionZ)\n .describe('Array of conditions \u2014 ALL must match (AND logic) for this rule to fire.'),\n value: z\n .unknown()\n .describe('Value returned when all conditions match. For triggerWhen: true = fire the action.'),\n})\n .describe('A single rule. ALL conditions must match (AND logic). Rules in a strategy are evaluated ' +\n 'top-to-bottom \u2014 first rule where all conditions match wins and returns its value.');\nexport const RuleStrategyZ = z\n .object({\n type: z.literal('rules'),\n rules: z\n .array(RuleZ)\n .describe('Ordered list of rules. Evaluated top-to-bottom \u2014 first match wins.'),\n default: z\n .unknown()\n .describe('Fallback value when no rule matches. For triggerWhen: false = do not fire by default.'),\n})\n .describe('Rule-based strategy. Evaluates rules top-to-bottom. First rule where ALL conditions match ' +\n 'returns its value. If no rule matches, returns default. ' +\n 'For triggerWhen: set value=true on matching rules, default=false.');\nexport const ScoreStrategyZ = z\n .object({\n type: z.literal('score'),\n field: z.string(),\n threshold: z.number(),\n above: z.unknown(),\n below: z.unknown(),\n})\n .describe('Score-based strategy. Compares a field value against a threshold.');\nexport const ModelStrategyZ = z\n .object({\n type: z.literal('model'),\n modelId: z.string(),\n inputs: z.array(z.string()),\n outputMapping: z.record(z.string(), z.unknown()),\n default: z.unknown(),\n})\n .describe('ML model strategy. Sends inputs to a model and maps outputs.');\nexport const ExternalStrategyZ = z\n .object({\n type: z.literal('external'),\n endpoint: z.string(),\n method: z.enum(['GET', 'POST']).optional(),\n default: z.unknown(),\n timeoutMs: z.number().optional(),\n})\n .describe('External API strategy. Calls an endpoint to determine the value.');\nexport const DecisionStrategyZ = z.discriminatedUnion('type', [\n RuleStrategyZ,\n ScoreStrategyZ,\n ModelStrategyZ,\n ExternalStrategyZ,\n]);\n/** Canonical Zod schema for the optional triggerWhen field on actions and adaptive items. */\nexport const TriggerWhenZ = DecisionStrategyZ.nullable().optional();\n// =============================================================================\n// TRIGGER DOCUMENTATION \u2014 examples and match field docs\n// Exported as constants so the schema generator can inject them into the\n// JSON schema. The Python prompt builder reads them from the schema.\n// =============================================================================\n/** Complete triggerWhen examples showing the full rules wrapper structure. */\nexport const TRIGGER_EXAMPLES = [\n {\n name: 'Click count on a specific element',\n description: 'Fire when user clicks an element with data-id=\"hero-cta\" 2+ times',\n triggerWhen: {\n type: 'rules',\n rules: [\n {\n conditions: [\n {\n type: 'event_count',\n key: 'cta-clicks',\n operator: 'gte',\n count: 2,\n counter: {\n events: ['ui.click'],\n match: { 'attr__data-id': { equals: 'hero-cta' } },\n },\n },\n ],\n value: true,\n },\n ],\n default: false,\n },\n },\n {\n name: 'Time on page threshold',\n description: 'Fire after user spends 30+ seconds on the page',\n triggerWhen: {\n type: 'rules',\n rules: [\n {\n conditions: [\n {\n type: 'session_metric',\n key: 'time_on_page',\n operator: 'gte',\n threshold: 30,\n },\n ],\n value: true,\n },\n ],\n default: false,\n },\n },\n {\n name: 'Element visible in viewport',\n description: 'Fire when a DOM element becomes visible',\n triggerWhen: {\n type: 'rules',\n rules: [\n {\n conditions: [\n {\n type: 'anchor_visible',\n anchorId: '#pricing-section',\n state: 'visible',\n },\n ],\n value: true,\n },\n ],\n default: false,\n },\n },\n {\n name: 'No trigger (fire immediately)',\n description: 'Action fires as soon as the segment matches \u2014 no in-session condition needed',\n triggerWhen: null,\n },\n];\n/** Documentation for counter.match field keys. */\nexport const MATCH_FIELD_DOCS = {\n tag_name: 'HTML tag name (e.g. \"button\", \"a\", \"input\")',\n $el_text: 'Visible text content of the element',\n 'attr__*': 'HTML attribute prefixed with attr__. Example: attr__data-id matches the data-id attribute, ' +\n 'attr__class matches the class attribute, attr__href matches the href attribute.',\n};\n// =============================================================================\n// EVENT SCOPE SCHEMA\n// =============================================================================\n/** Scopes a widget to specific events/URLs. */\nexport const EventScopeZ = z.object({\n events: z.array(z.string()),\n urlContains: z.string().optional(),\n props: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),\n});\n// =============================================================================\n// NOTIFY SCHEMA\n// =============================================================================\n/** Toast notification config for triggerWhen transitions. */\nexport const NotifyZ = z\n .object({\n title: z.string().optional(),\n body: z.string().optional(),\n icon: z.string().optional(),\n})\n .nullable()\n .optional();\n", "/**\n * Adaptive Chatbot \u2014 Lit Mountable\n *\n * Thin wrapper that mounts <syntro-chat> from @syntrologie/chat with an\n * AgUiTransport pointed at the adaptive AG-UI streaming endpoint.\n *\n * Four pieces this mountable owns:\n *\n * 1. SDK token plumbing. The chat backend (`/api/adaptive/*`) is identified\n * by the workspace's `syn_*` SDK token. The token lives on\n * `window.__SYNTRO_CONFIG__.token` (set by runtime-config.js) \u2014 we read\n * it at mount time and forward it via `Authorization: Bearer` header.\n *\n * 2. Cloudflare Turnstile bot-check token. When `TURNSTILE_SITEKEY` is set\n * (hardcoded at the top of this file \u2014 operator updates after running\n * terraform apply on cloudflare/turnstile in the infra repo), the\n * widget dynamically loads Cloudflare's Turnstile JS, renders an\n * invisible widget, and acquires a token before the first message.\n * The token is forwarded via `CF-Turnstile-Token` header.\n * If sitekey is empty (default), this step is skipped entirely.\n *\n * 3. Fallback card. If the first agent run fails (Cloudflare Turnstile\n * bot-check failure, CORS / network error, or a server-side rejection),\n * swap the chat UI for a per-customer fallback card built from\n * `props.fallback`. The end-user is redirected to the customer's normal\n * support path instead of seeing a raw error.\n *\n * 4. A2UI passthrough. AG-UI CUSTOM events carrying A2UI payloads\n * (createSurface, updateDataModel, \u2026) get forwarded to\n * `runtime.actions.applyBatch` so tiles can render server-driven UI\n * inside the chat surface.\n */\n\n// Side-effect import: registers <syntro-chat> custom element\nimport '@syntrologie/chat';\nimport type { SyntroChat } from '@syntrologie/chat';\nimport { AgUiTransport } from '@syntrologie/chat/transport/agui';\nimport { type MountPlumbing, stripMountPlumbing } from '@syntrologie/sdk-contracts';\n\nimport type { ChatbotConfig, ChatbotFallback, ChatbotWidgetRuntime } from './types.js';\n\nexport interface ChatAssistantLitProps {\n config: ChatbotConfig;\n runtime: ChatbotWidgetRuntime;\n tileId?: string;\n}\n\n// The runtime SDK (SyntroTileCard + WidgetRegistry) delivers tile.props spread\n// flat into mountConfig, alongside `instanceId` and `runtime`. Mountables must\n// destructure flat. `config` is accepted as a legacy nested escape hatch for\n// direct callers that prefer the wrapped shape.\ntype FlatMountConfig = ChatbotConfig & {\n runtime?: ChatbotWidgetRuntime;\n instanceId?: string;\n tileId?: string;\n /** Legacy nested-config escape hatch for direct callers. */\n config?: ChatbotConfig;\n};\n\nconst ERROR_DEBOUNCE_MS = 1_500;\n\n// =====================================================================\n// Cloudflare Turnstile sitekey (build-time hardcoded)\n// =====================================================================\n//\n// Per the design decision: the sitekey ships as a hardcoded constant in\n// the SDK CDN bundle. ONE sitekey for all customers \u2014 Cloudflare's\n// allowed-domains list (configured on the widget in syntro-infra) is\n// what isolates per-customer demos. See cloudflare/turnstile/main.tf.\n//\n// To enable Turnstile enforcement:\n// 1. Operator runs `terraform apply` on cloudflare/turnstile (syntro-infra).\n// 2. Operator gets the value: `terraform output -raw turnstile_sitekey`.\n// 3. Operator updates this constant to the real value.\n// 4. Cut a new SDK Release. Customers' next page-load loads the new bundle.\n// 5. Operator populates TURNSTILE_SECRET in AWS Secrets Manager \u2192 next\n// backend pod restart, the gate is hot.\n//\n// Empty string = Turnstile disabled. The widget skips token acquisition;\n// the backend's _should_enforce() also returns false when its env var is\n// unset. Both halves must be configured for enforcement to take effect.\nconst TURNSTILE_SITEKEY = '0x4AAAAAADSzPbGWxeguF4YJ';\n\n// How long we wait for Turnstile to (a) load its JS, (b) render the\n// invisible widget, and (c) fire its success callback. Beyond this, we\n// proceed WITHOUT a token. If enforcement is on, the backend will 403 and\n// the existing fallback card path catches it.\nconst TURNSTILE_ACQUIRE_TIMEOUT_MS = 5_000;\n\nconst TURNSTILE_SCRIPT_URL =\n 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit';\n\ninterface TurnstileGlobal {\n render: (\n container: HTMLElement | string,\n options: {\n sitekey: string;\n callback: (token: string) => void;\n 'error-callback'?: () => void;\n 'timeout-callback'?: () => void;\n 'expired-callback'?: () => void;\n size?: 'normal' | 'compact' | 'invisible' | 'flexible';\n appearance?: 'always' | 'execute' | 'interaction-only';\n }\n ) => string;\n remove?: (widgetId: string) => void;\n reset?: (widgetId?: string) => void;\n execute?: (widgetId: string) => void;\n}\n\n/**\n * Idempotent script loader. Multiple chatbot tiles on the same page\n * would otherwise each inject the script tag.\n */\nfunction loadTurnstileScript(): Promise<TurnstileGlobal> {\n if (typeof window === 'undefined') {\n return Promise.reject(new Error('no window'));\n }\n const w = window as unknown as { turnstile?: TurnstileGlobal };\n if (w.turnstile) return Promise.resolve(w.turnstile);\n\n return new Promise<TurnstileGlobal>((resolve, reject) => {\n const existing = document.querySelector<HTMLScriptElement>(\n 'script[src^=\"https://challenges.cloudflare.com/turnstile/v0/api.js\"]'\n );\n const onLoad = (): void => {\n const t = (window as unknown as { turnstile?: TurnstileGlobal }).turnstile;\n if (t) resolve(t);\n else reject(new Error('turnstile global not present after load'));\n };\n const onError = (): void => reject(new Error('turnstile script failed to load'));\n if (existing) {\n existing.addEventListener('load', onLoad);\n existing.addEventListener('error', onError);\n return;\n }\n const script = document.createElement('script');\n script.src = TURNSTILE_SCRIPT_URL;\n script.async = true;\n script.defer = true;\n script.addEventListener('load', onLoad);\n script.addEventListener('error', onError);\n document.head.appendChild(script);\n });\n}\n\n/**\n * Acquire a Cloudflare Turnstile token. Returns null when:\n * \u2022 TURNSTILE_SITEKEY is empty (Turnstile disabled at build time)\n * \u2022 the script fails to load (customer CSP blocks Cloudflare, etc.)\n * \u2022 the render callback doesn't fire within TURNSTILE_ACQUIRE_TIMEOUT_MS\n * \u2022 Cloudflare returns an error-callback (e.g., rate-limited, bad sitekey)\n *\n * When null is returned, the widget proceeds WITHOUT a Turnstile token.\n * If backend enforcement is on, the request 403s and the fallback card\n * renders via the existing failure-detection path. If enforcement is off,\n * the request succeeds.\n *\n * Exported for tests; the production code path goes through `mount()`.\n */\nexport async function acquireTurnstileToken(): Promise<string | null> {\n if (!TURNSTILE_SITEKEY) return null;\n if (typeof window === 'undefined' || typeof document === 'undefined') return null;\n\n let turnstile: TurnstileGlobal;\n try {\n turnstile = await Promise.race([\n loadTurnstileScript(),\n new Promise<TurnstileGlobal>((_, reject) =>\n setTimeout(() => reject(new Error('turnstile load timeout')), TURNSTILE_ACQUIRE_TIMEOUT_MS)\n ),\n ]);\n } catch {\n return null;\n }\n\n return new Promise<string | null>((resolve) => {\n // Off-screen host for the invisible widget. Removed after the callback\n // fires (or on timeout).\n const host = document.createElement('div');\n host.style.cssText =\n 'position:absolute;top:-9999px;left:-9999px;width:0;height:0;overflow:hidden;';\n host.setAttribute('data-adaptive-chatbot-turnstile-host', 'true');\n document.body.appendChild(host);\n\n let settled = false;\n const settle = (value: string | null): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n // Defer DOM cleanup so Turnstile's in-flight callback finishes first.\n setTimeout(() => host.remove(), 0);\n resolve(value);\n };\n\n const timer = setTimeout(() => settle(null), TURNSTILE_ACQUIRE_TIMEOUT_MS);\n\n try {\n turnstile.render(host, {\n sitekey: TURNSTILE_SITEKEY,\n size: 'invisible',\n callback: (token) => settle(token),\n 'error-callback': () => settle(null),\n 'timeout-callback': () => settle(null),\n 'expired-callback': () => settle(null),\n });\n } catch {\n settle(null);\n }\n });\n}\n\ninterface SyntroGlobalConfig {\n token?: string;\n}\n\n/**\n * Read the workspace's syn_* token from runtime-config.js. We intentionally\n * touch `window.__SYNTRO_CONFIG__` directly rather than threading the token\n * through the runtime context \u2014 the SDK already establishes this global as\n * its source of truth for workspace identity, and adaptives that ship via\n * CDN have no other reliable channel. If the global is missing we return\n * undefined and the mount falls back to the unauthenticated path (which\n * will then 401 on the first request and trigger the fallback card).\n */\nfunction readSyntroToken(): string | undefined {\n if (typeof window === 'undefined') return undefined;\n const cfg = (window as unknown as { __SYNTRO_CONFIG__?: SyntroGlobalConfig }).__SYNTRO_CONFIG__;\n const token = cfg?.token;\n return typeof token === 'string' && token.startsWith('syn_') ? token : undefined;\n}\n\nconst FALLBACK_DEFAULTS = {\n title: 'Live chat is unavailable right now',\n message: \"We couldn't verify your browser. Reach our team another way and we'll get back to you.\",\n ctaLabel: 'Contact support',\n} as const;\n\n/**\n * Build the inline HTML for the fallback card. Customer-supplied copy wins;\n * everything else falls back to generic copy. The card avoids any reference\n * to Cloudflare or Turnstile so the end-user is never confronted with our\n * implementation details.\n */\nfunction renderFallbackHtml(fallback: ChatbotFallback | undefined): string {\n const title = fallback?.title ?? FALLBACK_DEFAULTS.title;\n const message = fallback?.message ?? FALLBACK_DEFAULTS.message;\n const ctaLabel = fallback?.ctaLabel ?? FALLBACK_DEFAULTS.ctaLabel;\n const ctaHref = fallback?.ctaHref;\n\n // Use the same CSS vars the rest of the chat skin reads so the card visually\n // belongs to the chat surface, not the customer's site chrome.\n const wrapperStyle = [\n 'display:flex',\n 'flex-direction:column',\n 'gap:12px',\n 'padding:20px',\n 'height:100%',\n \"background:var(--sc-content-background,'transparent')\",\n \"color:var(--sc-content-text-color,'#1a1a1a')\",\n \"font-family:var(--sc-font-family,'system-ui')\",\n ].join(';');\n\n const titleStyle = 'font-size:15px;font-weight:600;line-height:1.3;';\n const messageStyle =\n 'font-size:14px;line-height:1.5;color:var(--sc-content-text-secondary-color,#6b7280);';\n const ctaStyle = [\n 'display:inline-block',\n 'margin-top:4px',\n 'padding:10px 16px',\n \"background:var(--sc-color-primary,'#111')\",\n \"color:var(--sc-color-primary-foreground,'#fff')\",\n 'text-decoration:none',\n 'border-radius:8px',\n 'font-size:14px',\n 'font-weight:500',\n 'align-self:flex-start',\n ].join(';');\n\n const escapeHtml = (s: string): string =>\n s.replace(/[&<>\"']/g, (ch) => {\n switch (ch) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n default:\n return '&#39;';\n }\n });\n\n // Defense-in-depth: the schema's URL guard rejects bad ctaHrefs at apply\n // time, but the widget revalidates at render so a config that slips past\n // (manual DB write, schema-vendor drift) can never inject a `javascript:`\n // or other non-http(s) scheme. Pattern matches the schema's exact regex.\n const ctaHtml =\n ctaHref && /^https?:\\/\\//.test(ctaHref)\n ? `<a href=\"${escapeHtml(ctaHref)}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"${ctaStyle}\">${escapeHtml(ctaLabel)}</a>`\n : '';\n\n return `<div style=\"${wrapperStyle}\" data-adaptive-chatbot-fallback=\"true\"><div style=\"${titleStyle}\">${escapeHtml(title)}</div><div style=\"${messageStyle}\">${escapeHtml(message)}</div>${ctaHtml}</div>`;\n}\n\nexport const ChatAssistantLitMountable = {\n mount(container: HTMLElement, mountConfig?: Record<string, unknown>) {\n const incoming = (mountConfig ?? null) as\n | (Partial<FlatMountConfig> & MountPlumbing & Record<string, unknown>)\n | null;\n const runtime = incoming?.runtime as ChatbotWidgetRuntime | undefined;\n const instanceId = incoming?.instanceId;\n const tileId = incoming?.tileId;\n const nestedConfig = incoming?.config;\n\n // Strip the canonical plumbing keys, then peel off the legacy nested\n // `config` escape hatch to recover the flat ChatbotConfig shape.\n const flat = stripMountPlumbing<Record<string, unknown>>(incoming);\n if ('config' in flat) {\n delete (flat as { config?: unknown }).config;\n }\n\n const flatLooksLikeChatbotConfig =\n typeof (flat as Partial<ChatbotConfig>).backendUrl === 'string';\n const chatbotConfig: ChatbotConfig | undefined =\n nestedConfig ?? (flatLooksLikeChatbotConfig ? (flat as unknown as ChatbotConfig) : undefined);\n const resolvedTileId = tileId ?? instanceId ?? 'chatbot-widget';\n\n if (!chatbotConfig?.backendUrl || !runtime) {\n container.innerHTML =\n '<div style=\"padding:16px;color:var(--sc-content-text-secondary-color,#87919f)\">Chat widget requires config and runtime.</div>';\n return () => {\n container.innerHTML = '';\n };\n }\n\n const baseUrl = chatbotConfig.backendUrl.replace(/\\/$/, '');\n const token = readSyntroToken();\n const streamUrl = `${baseUrl}/api/adaptive/stream`;\n\n const buildHeaders = (cft: string | null): Record<string, string> => {\n const h: Record<string, string> = {};\n if (token) h.Authorization = `Bearer ${token}`;\n if (cft) h['CF-Turnstile-Token'] = cft;\n return h;\n };\n\n // Pre-instantiate the chat element so closures that reference it\n // (swapToFallback, cleanup) have a valid binding from the start.\n // Importing @syntrologie/chat registers <syntro-chat> as a side effect.\n const el = document.createElement('syntro-chat') as SyntroChat;\n el.greeting = chatbotConfig.greeting;\n if (chatbotConfig.suggestions) {\n el.suggestions = chatbotConfig.suggestions;\n }\n el.style.cssText = 'display:flex;flex-direction:column;height:100%;width:100%;';\n\n // The transport is built AFTER Turnstile acquisition resolves. Until\n // then, `transport` is null and cleanup is a no-op for the transport\n // (the chat element + Turnstile host get torn down separately).\n let transport: AgUiTransport | null = null;\n\n let hasSucceeded = false;\n let isUnmounted = false;\n let unsubscribe: (() => void) | null = null;\n let failureTimer: ReturnType<typeof setTimeout> | null = null;\n let errorDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n let fallbackRendered = false;\n\n const clearTimers = (): void => {\n if (failureTimer) {\n clearTimeout(failureTimer);\n failureTimer = null;\n }\n if (errorDebounceTimer) {\n clearTimeout(errorDebounceTimer);\n errorDebounceTimer = null;\n }\n };\n\n // Captured from the Turnstile acquisition path (null when sitekey is\n // empty, i.e. Turnstile disabled). Surfaced on telemetry + console so we\n // can distinguish \"SDK never acquired a token\" from \"backend rejected\n // the token we sent\" \u2014 those have very different root causes (Cloudflare\n // / CSP / network on the SDK side vs. siteverify on the backend side).\n let hadTurnstileToken: boolean | null = null;\n\n const swapToFallback = (reason: 'connect_failed' | 'connect_timeout'): void => {\n if (isUnmounted || hasSucceeded || fallbackRendered) return;\n fallbackRendered = true;\n clearTimers();\n const payload = {\n tileId: resolvedTileId,\n reason,\n hadTurnstileToken,\n };\n runtime.events.publish('chatbot.fallback_rendered', payload);\n // Single grep-able console line so a customer's DevTools shows what\n // happened. Keep the payload structured (not stringified) so it stays\n // expandable in the console.\n console.warn('[adaptive-chatbot] fallback rendered', payload);\n transport?.disconnect();\n el.remove();\n container.innerHTML = renderFallbackHtml(chatbotConfig.fallback);\n };\n\n const setupTransport = (cftToken: string | null): void => {\n if (isUnmounted) return;\n\n transport = new AgUiTransport({\n url: streamUrl,\n headers: buildHeaders(cftToken),\n onA2UIEvent: (payload) => {\n runtime.actions\n .applyBatch([payload as unknown as Record<string, unknown>])\n .then(() => {\n runtime.events.publish('chatbot.a2ui_applied', {\n tileId: resolvedTileId,\n });\n })\n .catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n console.error('[adaptive-chatbot] A2UI apply failed:', message);\n });\n },\n });\n\n el.transport = transport;\n\n unsubscribe = transport.subscribe((event) => {\n if (isUnmounted) return;\n if (event.type === 'error') {\n if (hasSucceeded || errorDebounceTimer) return;\n errorDebounceTimer = setTimeout(() => {\n errorDebounceTimer = null;\n if (!hasSucceeded) swapToFallback('connect_failed');\n }, ERROR_DEBOUNCE_MS);\n return;\n }\n // AgUiTransport.connect() emits session-ready + messages-snapshot\n // locally (no network request) and typing before runAgent starts.\n // Only count events from a real backend response as \"success\".\n if (event.type === 'session-ready' || event.type === 'messages-snapshot') return;\n if (event.type === 'typing') return;\n hasSucceeded = true;\n clearTimers();\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = null;\n }\n });\n\n container.appendChild(el);\n };\n\n if (TURNSTILE_SITEKEY) {\n // Async path: load Turnstile JS, render invisible widget, await token.\n // Capture whether we got a token so the fallback telemetry / console\n // warning can tell SDK-side acquisition failure apart from a backend\n // 403 on a successfully-acquired token.\n void acquireTurnstileToken().then((cft) => {\n hadTurnstileToken = cft !== null;\n if (!hadTurnstileToken) {\n // The widget will still attempt the SSE connection; if backend\n // enforcement is on it'll 403 and the fallback path takes over.\n // The warn here gives the customer's DevTools a single signal\n // tying the eventual fallback to a token-acquisition failure\n // rather than a network / CORS / backend issue.\n console.warn(\n '[adaptive-chatbot] turnstile token acquisition failed \u2014 connecting without a bot-check token; backend may 403'\n );\n }\n setupTransport(cft);\n });\n } else {\n // Sync path: no Turnstile in this build. Set up immediately.\n // hadTurnstileToken stays null to mark \"not attempted\" on telemetry.\n setupTransport(null);\n }\n\n return () => {\n isUnmounted = true;\n clearTimers();\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = null;\n }\n if (!fallbackRendered) {\n transport?.disconnect();\n el.remove();\n }\n };\n },\n};\n"],
5
+ "mappings": "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A,UACA,OACA,OACA,MACA,MACA,WACA,MACA,YACA,cACA,UACA,QACA,UACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,UACA,UACA,MACA,QACA,KACA,OACA,SACA,OACA,OACA,SACA,UACA,MACA,QACA,OACA,QACA,WACA,QACA,YACA,SACA,OACA,QACA,MACA,YACA,UACA,UACA,KACA,WACA,OACA,YACA,KACA,MACA,MACA,QACA,KACA,QACA,UACA,WACA,UACA,UACA,QACA,SACA,UACA,UACA,QACA,UACA,UACA,SACA,OACA,WACA,OACA,SACA,SACA,MACA,YACA,YACA,SACA,MACA,SACA,QACA,MACA,SACA,MACA,KACA,MACA,OACA,SACA,KAAK,CACG;AAEH,IAAM+E,QAAM/E,OAAO,CACxB,OACA,KACA,YACA,eACA,gBACA,gBACA,iBACA,oBACA,UACA,YACA,QACA,QACA,WACA,gBACA,eACA,UACA,QACA,KACA,SACA,YACA,SACA,SACA,aACA,QACA,kBACA,UACA,QACA,YACA,SACA,QACA,QACA,WACA,WACA,YACA,kBACA,QACA,QACA,SACA,UACA,UACA,QACA,YACA,SACA,QACA,SACA,QACA,OAAO,CACC;AAEH,IAAMgF,aAAahF,OAAO,CAC/B,WACA,iBACA,uBACA,eACA,oBACA,qBACA,qBACA,kBACA,gBACA,WACA,WACA,WACA,WACA,WACA,kBACA,WACA,WACA,eACA,gBACA,YACA,gBACA,sBACA,eACA,UACA,cAAc,CACN;AAMH,IAAMiF,gBAAgBjF,OAAO,CAClC,WACA,iBACA,UACA,WACA,aACA,oBACA,kBACA,iBACA,iBACA,iBACA,SACA,aACA,QACA,gBACA,aACA,WACA,iBACA,UACA,OACA,cACA,WACA,KAAK,CACG;AAEH,IAAMkF,WAASlF,OAAO,CAC3B,QACA,YACA,UACA,WACA,SACA,UACA,MACA,cACA,iBACA,MACA,MACA,SACA,WACA,YACA,SACA,QACA,MACA,UACA,SACA,UACA,QACA,QACA,WACA,UACA,OACA,SACA,OACA,UACA,cACA,aAAa,CACL;AAIH,IAAMmF,mBAAmBnF,OAAO,CACrC,WACA,eACA,cACA,YACA,aACA,WACA,WACA,UACA,UACA,SACA,aACA,cACA,kBACA,eACA,MAAM,CACE;AAEH,IAAMoF,OAAOpF,OAAO,CAAC,OAAO,CAAU;AC1RtC,IAAM8E,OAAO9E,OAAO,CACzB,UACA,UACA,SACA,OACA,kBACA,gBACA,wBACA,YACA,cACA,WACA,UACA,WACA,eACA,eACA,WACA,QACA,SACA,SACA,SACA,QACA,WACA,YACA,gBACA,UACA,eACA,YACA,YACA,WACA,OACA,YACA,2BACA,yBACA,YACA,aACA,WACA,gBACA,eACA,QACA,OACA,WACA,UACA,UACA,QACA,QACA,YACA,MACA,SACA,aACA,aACA,SACA,QACA,SACA,QACA,QACA,WACA,QACA,OACA,OACA,aACA,SACA,UACA,OACA,aACA,YACA,SACA,QACA,SACA,WACA,cACA,UACA,QACA,WACA,QACA,WACA,eACA,eACA,WACA,iBACA,uBACA,UACA,WACA,WACA,cACA,YACA,OACA,YACA,OACA,YACA,QACA,QACA,WACA,cACA,SACA,YACA,SACA,QACA,SACA,QACA,QACA,WACA,SACA,OACA,UACA,QACA,SACA,WACA,YACA,SACA,aACA,QACA,UACA,UACA,SACA,SACA,QACA,SACA,MAAM,CACE;AAEH,IAAM+E,MAAM/E,OAAO,CACxB,iBACA,cACA,YACA,sBACA,aACA,UACA,iBACA,iBACA,WACA,iBACA,kBACA,SACA,QACA,MACA,SACA,QACA,iBACA,aACA,aACA,SACA,uBACA,+BACA,iBACA,mBACA,MACA,MACA,KACA,MACA,MACA,mBACA,aACA,WACA,WACA,OACA,YACA,aACA,OACA,YACA,QACA,gBACA,aACA,UACA,eACA,eACA,iBACA,eACA,aACA,oBACA,gBACA,cACA,gBACA,eACA,MACA,MACA,MACA,MACA,cACA,YACA,iBACA,qBACA,UACA,QACA,MACA,mBACA,MACA,OACA,aACA,KACA,MACA,MACA,MACA,MACA,WACA,aACA,cACA,YACA,QACA,gBACA,kBACA,gBACA,oBACA,kBACA,SACA,cACA,cACA,gBACA,gBACA,eACA,eACA,oBACA,aACA,OACA,QACA,aACA,SACA,UACA,QACA,OACA,QACA,cACA,UACA,YACA,WACA,SACA,UACA,eACA,UACA,YACA,eACA,QACA,cACA,uBACA,oBACA,gBACA,UACA,iBACA,uBACA,kBACA,KACA,MACA,MACA,UACA,QACA,QACA,eACA,aACA,WACA,UACA,UACA,SACA,QACA,mBACA,SACA,oBACA,oBACA,gBACA,eACA,gBACA,eACA,cACA,gBACA,oBACA,qBACA,kBACA,mBACA,qBACA,kBACA,UACA,gBACA,SACA,gBACA,kBACA,YACA,eACA,WACA,WACA,aACA,oBACA,eACA,mBACA,kBACA,cACA,QACA,MACA,MACA,WACA,UACA,WACA,cACA,WACA,cACA,iBACA,iBACA,SACA,gBACA,QACA,gBACA,oBACA,oBACA,KACA,MACA,MACA,SACA,KACA,MACA,MACA,KACA,YAAY,CACJ;AAEH,IAAMkF,SAASlF,OAAO,CAC3B,UACA,eACA,SACA,YACA,SACA,gBACA,eACA,cACA,cACA,SACA,OACA,WACA,gBACA,YACA,SACA,SACA,UACA,QACA,MACA,WACA,UACA,iBACA,UACA,UACA,kBACA,aACA,YACA,eACA,WACA,WACA,iBACA,YACA,YACA,QACA,YACA,YACA,cACA,WACA,UACA,UACA,eACA,iBACA,wBACA,aACA,aACA,cACA,YACA,kBACA,kBACA,aACA,WACA,SACA,OAAO,CACR;AAEM,IAAMqF,MAAMrF,OAAO,CACxB,cACA,UACA,eACA,aACA,aAAa,CACL;ACpXH,IAAMsF,gBAAgBrF,KAAK,2BAA2B;AACtD,IAAMsF,WAAWtF,KAAK,uBAAuB;AAC7C,IAAMuF,cAAcvF,KAAK,eAAe;AACxC,IAAMwF,YAAYxF,KAAK,8BAA8B;AACrD,IAAMyF,YAAYzF,KAAK,gBAAgB;AACvC,IAAM0F,iBAAiB1F;EAC5B;;;AAEK,IAAM2F,oBAAoB3F,KAAK,uBAAuB;AACtD,IAAM4F,kBAAkB5F;EAC7B;;;AAEK,IAAM6F,eAAe7F,KAAK,SAAS;AACnC,IAAM8F,iBAAiB9F,KAAK,0BAA0B;;;;;;;;;;;;;;ACsB7D,IAAM+F,YAAY;EAChBnC,SAAS;EACToC,WAAW;EACXb,MAAM;EACNc,cAAc;EACdC,iBAAiB;;EACjBC,YAAY;;EACZC,wBAAwB;EACxBC,SAAS;EACTC,UAAU;EACVC,cAAc;EACdC,kBAAkB;EAClBC,UAAU;;;AAGZ,IAAMC,YAAY,SAAZA,aAAY;AAChB,SAAO,OAAOC,WAAW,cAAc,OAAOA;AAChD;AAUA,IAAMC,4BAA4B,SAA5BA,2BACJC,cACAC,mBAAoC;AAEpC,MACE,OAAOD,iBAAiB,YACxB,OAAOA,aAAaE,iBAAiB,YACrC;AACA,WAAO;EACT;AAKA,MAAIC,SAAS;AACb,QAAMC,YAAY;AAClB,MAAIH,qBAAqBA,kBAAkBI,aAAaD,SAAS,GAAG;AAClED,aAASF,kBAAkBK,aAAaF,SAAS;EACnD;AAEA,QAAMG,aAAa,eAAeJ,SAAS,MAAMA,SAAS;AAE1D,MAAI;AACF,WAAOH,aAAaE,aAAaK,YAAY;MAC3CC,WAAWxC,OAAI;AACb,eAAOA;;MAETyC,gBAAgBC,WAAS;AACvB,eAAOA;MACT;IACD,CAAA;WACMC,IAAG;AAIVC,YAAQC,KACN,yBAAyBN,aAAa,wBAAwB;AAEhE,WAAO;EACT;AACF;AAEA,IAAMO,kBAAkB,SAAlBA,mBAAkB;AACtB,SAAO;IACLC,yBAAyB,CAAA;IACzBC,uBAAuB,CAAA;IACvBC,wBAAwB,CAAA;IACxBC,0BAA0B,CAAA;IAC1BC,wBAAwB,CAAA;IACxBC,yBAAyB,CAAA;IACzBC,uBAAuB,CAAA;IACvBC,qBAAqB,CAAA;IACrBC,wBAAwB,CAAA;;AAE5B;AAEA,SAASC,kBAAgD;AAAA,MAAhC1B,UAAqBlG,UAAAC,SAAAD,KAAAA,UAAA6H,CAAAA,MAAAA,SAAA7H,UAAAiG,CAAAA,IAAAA,UAAS;AACrD,QAAM6B,YAAwBC,UAAqBH,gBAAgBG,IAAI;AAEvED,YAAUE,UAAUC;AAEpBH,YAAUI,UAAU,CAAA;AAEpB,MACE,CAAChC,WACD,CAACA,QAAOL,YACRK,QAAOL,SAASsC,aAAa7C,UAAUO,YACvC,CAACK,QAAOkC,SACR;AAGAN,cAAUO,cAAc;AAExB,WAAOP;EACT;AAEA,MAAI;IAAEjC,UAAAA;EAAU,IAAGK;AAEnB,QAAMoC,mBAAmBzC;AACzB,QAAM0C,gBACJD,iBAAiBC;AACnB,QAAM;IACJC;IACAC;IACAC;IACAN;IACAO;IACAC,eAAe1C,QAAO0C,gBAAiB1C,QAAe2C;IACtDC;IACAC;IACA3C;EACD,IAAGF;AAEJ,QAAM8C,mBAAmBZ,QAAQ1H;AAEjC,QAAMuI,YAAYlF,aAAaiF,kBAAkB,WAAW;AAC5D,QAAME,SAASnF,aAAaiF,kBAAkB,QAAQ;AACtD,QAAMG,iBAAiBpF,aAAaiF,kBAAkB,aAAa;AACnE,QAAMI,gBAAgBrF,aAAaiF,kBAAkB,YAAY;AACjE,QAAMK,gBAAgBtF,aAAaiF,kBAAkB,YAAY;AAQjE,MAAI,OAAOP,wBAAwB,YAAY;AAC7C,UAAMa,WAAWzD,UAAS0D,cAAc,UAAU;AAClD,QAAID,SAASE,WAAWF,SAASE,QAAQC,eAAe;AACtD5D,MAAAA,YAAWyD,SAASE,QAAQC;IAC9B;EACF;AAEA,MAAIC;AACJ,MAAIC,YAAY;AAEhB,QAAM;IACJC;IACAC;IACAC;IACAC;EAAoB,IAClBlE;AACJ,QAAM;IAAEmE;EAAY,IAAG1B;AAEvB,MAAI2B,QAAQ/C,gBAAe;AAK3BY,YAAUO,cACR,OAAOrJ,YAAY,cACnB,OAAOqK,kBAAkB,cACzBO,kBACAA,eAAeM,uBAAuBrC;AAExC,QAAM;IACJjD,eAAAA;IACAC,UAAAA;IACAC,aAAAA;IACAC,WAAAA;IACAC,WAAAA;IACAE,mBAAAA;IACAC,iBAAAA;IACAE,gBAAAA;EACD,IAAG8E;AAEJ,MAAI;IAAElF,gBAAAA;EAAgB,IAAGkF;AAQzB,MAAIC,eAAe;AACnB,QAAMC,uBAAuBvH,SAAS,CAAA,GAAI,CACxC,GAAGwH,QACH,GAAGA,OACH,GAAGA,YACH,GAAGA,UACH,GAAGA,IAAS,CACb;AAGD,MAAIC,eAAe;AACnB,QAAMC,uBAAuB1H,SAAS,CAAA,GAAI,CACxC,GAAG2H,MACH,GAAGA,KACH,GAAGA,QACH,GAAGA,GAAS,CACb;AAQD,MAAIC,0BAA0BrL,OAAOE,KACnCC,OAAO,MAAM;IACXmL,cAAc;MACZC,UAAU;MACVC,cAAc;MACdC,YAAY;MACZlH,OAAO;;IAETmH,oBAAoB;MAClBH,UAAU;MACVC,cAAc;MACdC,YAAY;MACZlH,OAAO;;IAEToH,gCAAgC;MAC9BJ,UAAU;MACVC,cAAc;MACdC,YAAY;MACZlH,OAAO;IACR;EACF,CAAA,CAAC;AAIJ,MAAIqH,cAAc;AAGlB,MAAIC,cAAc;AAGlB,QAAMC,yBAAyB9L,OAAOE,KACpCC,OAAO,MAAM;IACX4L,UAAU;MACRR,UAAU;MACVC,cAAc;MACdC,YAAY;MACZlH,OAAO;;IAETyH,gBAAgB;MACdT,UAAU;MACVC,cAAc;MACdC,YAAY;MACZlH,OAAO;IACR;EACF,CAAA,CAAC;AAIJ,MAAI0H,kBAAkB;AAGtB,MAAIC,kBAAkB;AAGtB,MAAIC,0BAA0B;AAI9B,MAAIC,2BAA2B;AAK/B,MAAIC,qBAAqB;AAKzB,MAAIC,eAAe;AAGnB,MAAIC,iBAAiB;AAGrB,MAAIC,aAAa;AAIjB,MAAIC,aAAa;AAMjB,MAAIC,aAAa;AAIjB,MAAIC,sBAAsB;AAI1B,MAAIC,sBAAsB;AAK1B,MAAIC,eAAe;AAenB,MAAIC,uBAAuB;AAC3B,QAAMC,8BAA8B;AAGpC,MAAIC,eAAe;AAInB,MAAIC,WAAW;AAGf,MAAIC,eAA0C,CAAA;AAG9C,MAAIC,kBAAkB;AACtB,QAAMC,0BAA0B3J,SAAS,CAAA,GAAI,CAC3C,kBACA,SACA,YACA,QACA,iBACA,QACA,UACA,QACA,MACA,MACA,MACA,MACA,SACA,WACA,YACA,YACA,aACA,UACA,SACA,OACA,YACA,SACA,SACA,SACA,KAAK,CACN;AAGD,MAAI4J,gBAAgB;AACpB,QAAMC,wBAAwB7J,SAAS,CAAA,GAAI,CACzC,SACA,SACA,OACA,UACA,SACA,OAAO,CACR;AAGD,MAAI8J,sBAAsB;AAC1B,QAAMC,8BAA8B/J,SAAS,CAAA,GAAI,CAC/C,OACA,SACA,OACA,MACA,SACA,QACA,WACA,eACA,QACA,WACA,SACA,SACA,SACA,OAAO,CACR;AAED,QAAMgK,mBAAmB;AACzB,QAAMC,gBAAgB;AACtB,QAAMC,iBAAiB;AAEvB,MAAIC,YAAYD;AAChB,MAAIE,iBAAiB;AAGrB,MAAIC,qBAAqB;AACzB,QAAMC,6BAA6BtK,SACjC,CAAA,GACA,CAACgK,kBAAkBC,eAAeC,cAAc,GAChDzL,cAAc;AAGhB,MAAI8L,iCAAiCvK,SAAS,CAAA,GAAI,CAChD,MACA,MACA,MACA,MACA,OAAO,CACR;AAED,MAAIwK,0BAA0BxK,SAAS,CAAA,GAAI,CAAC,gBAAgB,CAAC;AAM7D,QAAMyK,+BAA+BzK,SAAS,CAAA,GAAI,CAChD,SACA,SACA,QACA,KACA,QAAQ,CACT;AAGD,MAAI0K,oBAAmD;AACvD,QAAMC,+BAA+B,CAAC,yBAAyB,WAAW;AAC1E,QAAMC,4BAA4B;AAClC,MAAIzK,oBAA2D;AAG/D,MAAI0K,SAAwB;AAK5B,QAAMC,cAAc/H,UAAS0D,cAAc,MAAM;AAEjD,QAAMsE,oBAAoB,SAApBA,mBACJC,WAAkB;AAElB,WAAOA,qBAAqB1L,UAAU0L,qBAAqBC;;AAS7D,QAAMC,eAAe,SAAfA,gBAAyC;AAAA,QAAhBC,MAAAjO,UAAAC,SAAA,KAAAD,UAAA,CAAA,MAAA6H,SAAA7H,UAAA,CAAA,IAAc,CAAA;AAC3C,QAAI2N,UAAUA,WAAWM,KAAK;AAC5B;IACF;AAGA,QAAI,CAACA,OAAO,OAAOA,QAAQ,UAAU;AACnCA,YAAM,CAAA;IACR;AAGAA,UAAMzK,MAAMyK,GAAG;AAEfT;IAEEC,6BAA6B3L,QAAQmM,IAAIT,iBAAiB,MAAM,KAC5DE,4BACAO,IAAIT;AAGVvK,wBACEuK,sBAAsB,0BAClBjM,iBACAH;AAGNgJ,mBAAenI,qBAAqBgM,KAAK,cAAc,IACnDnL,SAAS,CAAA,GAAImL,IAAI7D,cAAcnH,iBAAiB,IAChDoH;AACJE,mBAAetI,qBAAqBgM,KAAK,cAAc,IACnDnL,SAAS,CAAA,GAAImL,IAAI1D,cAActH,iBAAiB,IAChDuH;AACJ2C,yBAAqBlL,qBAAqBgM,KAAK,oBAAoB,IAC/DnL,SAAS,CAAA,GAAImL,IAAId,oBAAoB5L,cAAc,IACnD6L;AACJR,0BAAsB3K,qBAAqBgM,KAAK,mBAAmB,IAC/DnL,SACEU,MAAMqJ,2BAA2B,GACjCoB,IAAIC,mBACJjL,iBAAiB,IAEnB4J;AACJH,oBAAgBzK,qBAAqBgM,KAAK,mBAAmB,IACzDnL,SACEU,MAAMmJ,qBAAqB,GAC3BsB,IAAIE,mBACJlL,iBAAiB,IAEnB0J;AACJH,sBAAkBvK,qBAAqBgM,KAAK,iBAAiB,IACzDnL,SAAS,CAAA,GAAImL,IAAIzB,iBAAiBvJ,iBAAiB,IACnDwJ;AACJxB,kBAAchJ,qBAAqBgM,KAAK,aAAa,IACjDnL,SAAS,CAAA,GAAImL,IAAIhD,aAAahI,iBAAiB,IAC/CO,MAAM,CAAA,CAAE;AACZ0H,kBAAcjJ,qBAAqBgM,KAAK,aAAa,IACjDnL,SAAS,CAAA,GAAImL,IAAI/C,aAAajI,iBAAiB,IAC/CO,MAAM,CAAA,CAAE;AACZ+I,mBAAetK,qBAAqBgM,KAAK,cAAc,IACnDA,IAAI1B,eACJ;AACJjB,sBAAkB2C,IAAI3C,oBAAoB;AAC1CC,sBAAkB0C,IAAI1C,oBAAoB;AAC1CC,8BAA0ByC,IAAIzC,2BAA2B;AACzDC,+BAA2BwC,IAAIxC,6BAA6B;AAC5DC,yBAAqBuC,IAAIvC,sBAAsB;AAC/CC,mBAAesC,IAAItC,iBAAiB;AACpCC,qBAAiBqC,IAAIrC,kBAAkB;AACvCG,iBAAakC,IAAIlC,cAAc;AAC/BC,0BAAsBiC,IAAIjC,uBAAuB;AACjDC,0BAAsBgC,IAAIhC,uBAAuB;AACjDH,iBAAamC,IAAInC,cAAc;AAC/BI,mBAAe+B,IAAI/B,iBAAiB;AACpCC,2BAAuB8B,IAAI9B,wBAAwB;AACnDE,mBAAe4B,IAAI5B,iBAAiB;AACpCC,eAAW2B,IAAI3B,YAAY;AAC3BrH,uBAAiBgJ,IAAIG,sBAAsBjE;AAC3C8C,gBAAYgB,IAAIhB,aAAaD;AAC7BK,qCACEY,IAAIZ,kCAAkCA;AACxCC,8BACEW,IAAIX,2BAA2BA;AAEjC5C,8BAA0BuD,IAAIvD,2BAA2B,CAAA;AACzD,QACEuD,IAAIvD,2BACJmD,kBAAkBI,IAAIvD,wBAAwBC,YAAY,GAC1D;AACAD,8BAAwBC,eACtBsD,IAAIvD,wBAAwBC;IAChC;AAEA,QACEsD,IAAIvD,2BACJmD,kBAAkBI,IAAIvD,wBAAwBK,kBAAkB,GAChE;AACAL,8BAAwBK,qBACtBkD,IAAIvD,wBAAwBK;IAChC;AAEA,QACEkD,IAAIvD,2BACJ,OAAOuD,IAAIvD,wBAAwBM,mCACjC,WACF;AACAN,8BAAwBM,iCACtBiD,IAAIvD,wBAAwBM;IAChC;AAEA,QAAIU,oBAAoB;AACtBH,wBAAkB;IACpB;AAEA,QAAIS,qBAAqB;AACvBD,mBAAa;IACf;AAGA,QAAIQ,cAAc;AAChBnC,qBAAetH,SAAS,CAAA,GAAIwH,IAAS;AACrCC,qBAAe,CAAA;AACf,UAAIgC,aAAanI,SAAS,MAAM;AAC9BtB,iBAASsH,cAAcE,MAAS;AAChCxH,iBAASyH,cAAcE,IAAU;MACnC;AAEA,UAAI8B,aAAalI,QAAQ,MAAM;AAC7BvB,iBAASsH,cAAcE,KAAQ;AAC/BxH,iBAASyH,cAAcE,GAAS;AAChC3H,iBAASyH,cAAcE,GAAS;MAClC;AAEA,UAAI8B,aAAajI,eAAe,MAAM;AACpCxB,iBAASsH,cAAcE,UAAe;AACtCxH,iBAASyH,cAAcE,GAAS;AAChC3H,iBAASyH,cAAcE,GAAS;MAClC;AAEA,UAAI8B,aAAa/H,WAAW,MAAM;AAChC1B,iBAASsH,cAAcE,QAAW;AAClCxH,iBAASyH,cAAcE,MAAY;AACnC3H,iBAASyH,cAAcE,GAAS;MAClC;IACF;AAGA,QAAIwD,IAAII,UAAU;AAChB,UAAI,OAAOJ,IAAII,aAAa,YAAY;AACtClD,+BAAuBC,WAAW6C,IAAII;MACxC,OAAO;AACL,YAAIjE,iBAAiBC,sBAAsB;AACzCD,yBAAe5G,MAAM4G,YAAY;QACnC;AAEAtH,iBAASsH,cAAc6D,IAAII,UAAUpL,iBAAiB;MACxD;IACF;AAEA,QAAIgL,IAAIK,UAAU;AAChB,UAAI,OAAOL,IAAIK,aAAa,YAAY;AACtCnD,+BAAuBE,iBAAiB4C,IAAIK;MAC9C,OAAO;AACL,YAAI/D,iBAAiBC,sBAAsB;AACzCD,yBAAe/G,MAAM+G,YAAY;QACnC;AAEAzH,iBAASyH,cAAc0D,IAAIK,UAAUrL,iBAAiB;MACxD;IACF;AAEA,QAAIgL,IAAIC,mBAAmB;AACzBpL,eAAS8J,qBAAqBqB,IAAIC,mBAAmBjL,iBAAiB;IACxE;AAEA,QAAIgL,IAAIzB,iBAAiB;AACvB,UAAIA,oBAAoBC,yBAAyB;AAC/CD,0BAAkBhJ,MAAMgJ,eAAe;MACzC;AAEA1J,eAAS0J,iBAAiByB,IAAIzB,iBAAiBvJ,iBAAiB;IAClE;AAEA,QAAIgL,IAAIM,qBAAqB;AAC3B,UAAI/B,oBAAoBC,yBAAyB;AAC/CD,0BAAkBhJ,MAAMgJ,eAAe;MACzC;AAEA1J,eAAS0J,iBAAiByB,IAAIM,qBAAqBtL,iBAAiB;IACtE;AAGA,QAAIoJ,cAAc;AAChBjC,mBAAa,OAAO,IAAI;IAC1B;AAGA,QAAIwB,gBAAgB;AAClB9I,eAASsH,cAAc,CAAC,QAAQ,QAAQ,MAAM,CAAC;IACjD;AAGA,QAAIA,aAAaoE,OAAO;AACtB1L,eAASsH,cAAc,CAAC,OAAO,CAAC;AAChC,aAAOa,YAAYwD;IACrB;AAEA,QAAIR,IAAIS,sBAAsB;AAC5B,UAAI,OAAOT,IAAIS,qBAAqB9H,eAAe,YAAY;AAC7D,cAAMtE,gBACJ,6EAA6E;MAEjF;AAEA,UAAI,OAAO2L,IAAIS,qBAAqB7H,oBAAoB,YAAY;AAClE,cAAMvE,gBACJ,kFAAkF;MAEtF;AAGAoH,2BAAqBuE,IAAIS;AAGzB/E,kBAAYD,mBAAmB9C,WAAW,EAAE;IAC9C,OAAO;AAEL,UAAI8C,uBAAuB7B,QAAW;AACpC6B,6BAAqBvD,0BACnBC,cACAmC,aAAa;MAEjB;AAGA,UAAImB,uBAAuB,QAAQ,OAAOC,cAAc,UAAU;AAChEA,oBAAYD,mBAAmB9C,WAAW,EAAE;MAC9C;IACF;AAIA,QAAItH,QAAQ;AACVA,aAAO2O,GAAG;IACZ;AAEAN,aAASM;;AAMX,QAAMU,eAAe7L,SAAS,CAAA,GAAI,CAChC,GAAGwH,OACH,GAAGA,YACH,GAAGA,aAAkB,CACtB;AACD,QAAMsE,kBAAkB9L,SAAS,CAAA,GAAI,CACnC,GAAGwH,UACH,GAAGA,gBAAqB,CACzB;AAQD,QAAMuE,uBAAuB,SAAvBA,sBAAiC1L,SAAgB;AACrD,QAAI2L,SAASzF,cAAclG,OAAO;AAIlC,QAAI,CAAC2L,UAAU,CAACA,OAAOC,SAAS;AAC9BD,eAAS;QACPE,cAAc/B;QACd8B,SAAS;;IAEb;AAEA,UAAMA,UAAU3N,kBAAkB+B,QAAQ4L,OAAO;AACjD,UAAME,gBAAgB7N,kBAAkB0N,OAAOC,OAAO;AAEtD,QAAI,CAAC5B,mBAAmBhK,QAAQ6L,YAAY,GAAG;AAC7C,aAAO;IACT;AAEA,QAAI7L,QAAQ6L,iBAAiBjC,eAAe;AAI1C,UAAI+B,OAAOE,iBAAiBhC,gBAAgB;AAC1C,eAAO+B,YAAY;MACrB;AAKA,UAAID,OAAOE,iBAAiBlC,kBAAkB;AAC5C,eACEiC,YAAY,UACXE,kBAAkB,oBACjB5B,+BAA+B4B,aAAa;MAElD;AAIA,aAAOC,QAAQP,aAAaI,OAAO,CAAC;IACtC;AAEA,QAAI5L,QAAQ6L,iBAAiBlC,kBAAkB;AAI7C,UAAIgC,OAAOE,iBAAiBhC,gBAAgB;AAC1C,eAAO+B,YAAY;MACrB;AAIA,UAAID,OAAOE,iBAAiBjC,eAAe;AACzC,eAAOgC,YAAY,UAAUzB,wBAAwB2B,aAAa;MACpE;AAIA,aAAOC,QAAQN,gBAAgBG,OAAO,CAAC;IACzC;AAEA,QAAI5L,QAAQ6L,iBAAiBhC,gBAAgB;AAI3C,UACE8B,OAAOE,iBAAiBjC,iBACxB,CAACO,wBAAwB2B,aAAa,GACtC;AACA,eAAO;MACT;AAEA,UACEH,OAAOE,iBAAiBlC,oBACxB,CAACO,+BAA+B4B,aAAa,GAC7C;AACA,eAAO;MACT;AAIA,aACE,CAACL,gBAAgBG,OAAO,MACvBxB,6BAA6BwB,OAAO,KAAK,CAACJ,aAAaI,OAAO;IAEnE;AAGA,QACEvB,sBAAsB,2BACtBL,mBAAmBhK,QAAQ6L,YAAY,GACvC;AACA,aAAO;IACT;AAMA,WAAO;;AAQT,QAAMG,eAAe,SAAfA,cAAyBC,MAAU;AACvCpO,cAAU8G,UAAUI,SAAS;MAAE/E,SAASiM;IAAM,CAAA;AAE9C,QAAI;AAEF/F,oBAAc+F,IAAI,EAAEC,YAAYD,IAAI;aAC7BrI,IAAG;AACVmC,aAAOkG,IAAI;IACb;;AASF,QAAME,mBAAmB,SAAnBA,kBAA6BC,MAAcpM,SAAgB;AAC/D,QAAI;AACFnC,gBAAU8G,UAAUI,SAAS;QAC3B3C,WAAWpC,QAAQqM,iBAAiBD,IAAI;QACxCE,MAAMtM;MACP,CAAA;aACM4D,IAAG;AACV/F,gBAAU8G,UAAUI,SAAS;QAC3B3C,WAAW;QACXkK,MAAMtM;MACP,CAAA;IACH;AAEAA,YAAQuM,gBAAgBH,IAAI;AAG5B,QAAIA,SAAS,MAAM;AACjB,UAAIxD,cAAcC,qBAAqB;AACrC,YAAI;AACFmD,uBAAahM,OAAO;QACtB,SAAS4D,IAAG;QAAA;MACd,OAAO;AACL,YAAI;AACF5D,kBAAQwM,aAAaJ,MAAM,EAAE;QAC/B,SAASxI,IAAG;QAAA;MACd;IACF;;AASF,QAAM6I,gBAAgB,SAAhBA,eAA0BC,OAAa;AAE3C,QAAIC,MAAM;AACV,QAAIC,oBAAoB;AAExB,QAAIjE,YAAY;AACd+D,cAAQ,sBAAsBA;IAChC,OAAO;AAEL,YAAMG,UAAUvO,YAAYoO,OAAO,aAAa;AAChDE,0BAAoBC,WAAWA,QAAQ,CAAC;IAC1C;AAEA,QACExC,sBAAsB,2BACtBP,cAAcD,gBACd;AAEA6C,cACE,mEACAA,QACA;IACJ;AAEA,UAAMI,eAAevG,qBACjBA,mBAAmB9C,WAAWiJ,KAAK,IACnCA;AAKJ,QAAI5C,cAAcD,gBAAgB;AAChC,UAAI;AACF8C,cAAM,IAAI/G,UAAS,EAAGmH,gBAAgBD,cAAczC,iBAAiB;MACvE,SAASzG,IAAG;MAAA;IACd;AAGA,QAAI,CAAC+I,OAAO,CAACA,IAAIK,iBAAiB;AAChCL,YAAMlG,eAAewG,eAAenD,WAAW,YAAY,IAAI;AAC/D,UAAI;AACF6C,YAAIK,gBAAgBE,YAAYnD,iBAC5BvD,YACAsG;eACGlJ,IAAG;MACV;IAEJ;AAEA,UAAMuJ,OAAOR,IAAIQ,QAAQR,IAAIK;AAE7B,QAAIN,SAASE,mBAAmB;AAC9BO,WAAKC,aACH1K,UAAS2K,eAAeT,iBAAiB,GACzCO,KAAKG,WAAW,CAAC,KAAK,IAAI;IAE9B;AAGA,QAAIxD,cAAcD,gBAAgB;AAChC,aAAOjD,qBAAqB2G,KAC1BZ,KACAlE,iBAAiB,SAAS,MAAM,EAChC,CAAC;IACL;AAEA,WAAOA,iBAAiBkE,IAAIK,kBAAkBG;;AAShD,QAAMK,sBAAsB,SAAtBA,qBAAgC5I,MAAU;AAC9C,WAAO8B,mBAAmB6G;MACxB3I,KAAK0B,iBAAiB1B;MACtBA;;MAEAY,WAAWiI,eACTjI,WAAWkI,eACXlI,WAAWmI,YACXnI,WAAWoI,8BACXpI,WAAWqI;MACb;IAAI;;AAUR,QAAMC,eAAe,SAAfA,cAAyB9N,SAAgB;AAC7C,WACEA,mBAAmB2F,oBAClB,OAAO3F,QAAQ+N,aAAa,YAC3B,OAAO/N,QAAQgO,gBAAgB,YAC/B,OAAOhO,QAAQkM,gBAAgB,cAC/B,EAAElM,QAAQiO,sBAAsBxI,iBAChC,OAAOzF,QAAQuM,oBAAoB,cACnC,OAAOvM,QAAQwM,iBAAiB,cAChC,OAAOxM,QAAQ6L,iBAAiB,YAChC,OAAO7L,QAAQoN,iBAAiB,cAChC,OAAOpN,QAAQkO,kBAAkB;;AAUvC,QAAMC,UAAU,SAAVA,SAAoB1N,OAAc;AACtC,WAAO,OAAO8E,SAAS,cAAc9E,iBAAiB8E;;AAGxD,WAAS6I,cACPtH,QACAuH,aACAC,MAAsB;AAEtBjR,iBAAayJ,QAAQyH,UAAW;AAC9BA,WAAKhB,KAAK5I,WAAW0J,aAAaC,MAAM9D,MAAM;IAChD,CAAC;EACH;AAWA,QAAMgE,oBAAoB,SAApBA,mBAA8BH,aAAgB;AAClD,QAAIhI,UAAU;AAGd+H,kBAActH,MAAM1C,wBAAwBiK,aAAa,IAAI;AAG7D,QAAIP,aAAaO,WAAW,GAAG;AAC7BrC,mBAAaqC,WAAW;AACxB,aAAO;IACT;AAGA,UAAMzC,UAAU9L,kBAAkBuO,YAAYN,QAAQ;AAGtDK,kBAActH,MAAMvC,qBAAqB8J,aAAa;MACpDzC;MACA6C,aAAaxH;IACd,CAAA;AAGD,QACEuB,gBACA6F,YAAYH,cAAa,KACzB,CAACC,QAAQE,YAAYK,iBAAiB,KACtC1P,WAAW,YAAYqP,YAAYnB,SAAS,KAC5ClO,WAAW,YAAYqP,YAAYL,WAAW,GAC9C;AACAhC,mBAAaqC,WAAW;AACxB,aAAO;IACT;AAGA,QAAIA,YAAYrJ,aAAa7C,UAAUK,wBAAwB;AAC7DwJ,mBAAaqC,WAAW;AACxB,aAAO;IACT;AAGA,QACE7F,gBACA6F,YAAYrJ,aAAa7C,UAAUM,WACnCzD,WAAW,WAAWqP,YAAYC,IAAI,GACtC;AACAtC,mBAAaqC,WAAW;AACxB,aAAO;IACT;AAGA,QACE,EACErG,uBAAuBC,oBAAoB2C,YAC3C5C,uBAAuBC,SAAS2D,OAAO,OAExC,CAAC3E,aAAa2E,OAAO,KAAK9D,YAAY8D,OAAO,IAC9C;AAEA,UAAI,CAAC9D,YAAY8D,OAAO,KAAK+C,sBAAsB/C,OAAO,GAAG;AAC3D,YACErE,wBAAwBC,wBAAwBvI,UAChDD,WAAWuI,wBAAwBC,cAAcoE,OAAO,GACxD;AACA,iBAAO;QACT;AAEA,YACErE,wBAAwBC,wBAAwBoD,YAChDrD,wBAAwBC,aAAaoE,OAAO,GAC5C;AACA,iBAAO;QACT;MACF;AAGA,UAAI1C,gBAAgB,CAACG,gBAAgBuC,OAAO,GAAG;AAC7C,cAAMgD,aAAa1I,cAAcmI,WAAW,KAAKA,YAAYO;AAC7D,cAAMtB,aAAarH,cAAcoI,WAAW,KAAKA,YAAYf;AAE7D,YAAIA,cAAcsB,YAAY;AAC5B,gBAAMC,aAAavB,WAAWxQ;AAE9B,mBAASgS,IAAID,aAAa,GAAGC,KAAK,GAAG,EAAEA,GAAG;AACxC,kBAAMC,aAAajJ,UAAUwH,WAAWwB,CAAC,GAAG,IAAI;AAChDC,uBAAWC,kBAAkBX,YAAYW,kBAAkB,KAAK;AAChEJ,uBAAWxB,aAAa2B,YAAY/I,eAAeqI,WAAW,CAAC;UACjE;QACF;MACF;AAEArC,mBAAaqC,WAAW;AACxB,aAAO;IACT;AAGA,QAAIA,uBAAuBpJ,WAAW,CAACyG,qBAAqB2C,WAAW,GAAG;AACxErC,mBAAaqC,WAAW;AACxB,aAAO;IACT;AAGA,SACGzC,YAAY,cACXA,YAAY,aACZA,YAAY,eACd5M,WAAW,+BAA+BqP,YAAYnB,SAAS,GAC/D;AACAlB,mBAAaqC,WAAW;AACxB,aAAO;IACT;AAGA,QAAI9F,sBAAsB8F,YAAYrJ,aAAa7C,UAAUZ,MAAM;AAEjE8E,gBAAUgI,YAAYL;AAEtB3Q,mBAAa,CAACoE,gBAAeC,WAAUC,YAAW,GAAIsN,UAAgB;AACpE5I,kBAAU7H,cAAc6H,SAAS4I,MAAM,GAAG;MAC5C,CAAC;AAED,UAAIZ,YAAYL,gBAAgB3H,SAAS;AACvCxI,kBAAU8G,UAAUI,SAAS;UAAE/E,SAASqO,YAAYvI,UAAS;QAAE,CAAE;AACjEuI,oBAAYL,cAAc3H;MAC5B;IACF;AAGA+H,kBAActH,MAAM7C,uBAAuBoK,aAAa,IAAI;AAE5D,WAAO;;AAYT,QAAMa,oBAAoB,SAApBA,mBACJC,OACAC,QACA3O,OAAa;AAGb,QACEsI,iBACCqG,WAAW,QAAQA,WAAW,YAC9B3O,SAASiC,aAAYjC,SAASgK,cAC/B;AACA,aAAO;IACT;AAMA,QACErC,mBACA,CAACL,YAAYqH,MAAM,KACnBpQ,WAAW4C,YAAWwN,MAAM,EAC5B;aAESjH,mBAAmBnJ,WAAW6C,YAAWuN,MAAM,EAAG;aAI3DpH,uBAAuBE,0BAA0B0C,YACjD5C,uBAAuBE,eAAekH,QAAQD,KAAK,EACnD;aAGS,CAAC/H,aAAagI,MAAM,KAAKrH,YAAYqH,MAAM,GAAG;AACvD;;;;QAIGT,sBAAsBQ,KAAK,MACxB5H,wBAAwBC,wBAAwBvI,UAChDD,WAAWuI,wBAAwBC,cAAc2H,KAAK,KACrD5H,wBAAwBC,wBAAwBoD,YAC/CrD,wBAAwBC,aAAa2H,KAAK,OAC5C5H,wBAAwBK,8BAA8B3I,UACtDD,WAAWuI,wBAAwBK,oBAAoBwH,MAAM,KAC5D7H,wBAAwBK,8BAA8BgD,YACrDrD,wBAAwBK,mBAAmBwH,QAAQD,KAAK;;QAG7DC,WAAW,QACV7H,wBAAwBM,mCACtBN,wBAAwBC,wBAAwBvI,UAChDD,WAAWuI,wBAAwBC,cAAc/G,KAAK,KACrD8G,wBAAwBC,wBAAwBoD,YAC/CrD,wBAAwBC,aAAa/G,KAAK;OAChD;WAGK;AACL,eAAO;MACT;IAEF,WAAWgJ,oBAAoB2F,MAAM,EAAG;aAKtCpQ,WAAW8C,kBAAgBtD,cAAciC,OAAOuB,kBAAiB,EAAE,CAAC,EACpE;cAKCoN,WAAW,SAASA,WAAW,gBAAgBA,WAAW,WAC3DD,UAAU,YACVzQ,cAAc+B,OAAO,OAAO,MAAM,KAClC8I,cAAc4F,KAAK,EACnB;aAMA9G,2BACA,CAACrJ,WAAW+C,oBAAmBvD,cAAciC,OAAOuB,kBAAiB,EAAE,CAAC,EACxE;aAGSvB,OAAO;AAChB,aAAO;IACT,MAAO;AAKP,WAAO;;AAWT,QAAMkO,wBAAwB,SAAxBA,uBAAkC/C,SAAe;AACrD,WAAOA,YAAY,oBAAoBtN,YAAYsN,SAAS1J,eAAc;;AAa5E,QAAMmN,sBAAsB,SAAtBA,qBAAgChB,aAAoB;AAExDD,kBAActH,MAAM3C,0BAA0BkK,aAAa,IAAI;AAE/D,UAAM;MAAEJ;IAAY,IAAGI;AAGvB,QAAI,CAACJ,cAAcH,aAAaO,WAAW,GAAG;AAC5C;IACF;AAEA,UAAMiB,YAAY;MAChBC,UAAU;MACVC,WAAW;MACXC,UAAU;MACVC,mBAAmBtI;MACnBuI,eAAejL;;AAEjB,QAAI3E,IAAIkO,WAAWnR;AAGnB,WAAOiD,KAAK;AACV,YAAM6P,OAAO3B,WAAWlO,CAAC;AACzB,YAAM;QAAEqM;QAAMP;QAAcpL,OAAO+O;MAAS,IAAKI;AACjD,YAAMR,SAAStP,kBAAkBsM,IAAI;AAErC,YAAMyD,YAAYL;AAClB,UAAI/O,QAAQ2L,SAAS,UAAUyD,YAAYjR,WAAWiR,SAAS;AAG/DP,gBAAUC,WAAWH;AACrBE,gBAAUE,YAAY/O;AACtB6O,gBAAUG,WAAW;AACrBH,gBAAUK,gBAAgBjL;AAC1B0J,oBAActH,MAAMxC,uBAAuB+J,aAAaiB,SAAS;AACjE7O,cAAQ6O,UAAUE;AAKlB,UAAIxG,yBAAyBoG,WAAW,QAAQA,WAAW,SAAS;AAElEjD,yBAAiBC,MAAMiC,WAAW;AAGlC5N,gBAAQwI,8BAA8BxI;MACxC;AAGA,UACE+H,gBACAxJ,WAAW,0CAA0CyB,KAAK,GAC1D;AACA0L,yBAAiBC,MAAMiC,WAAW;AAClC;MACF;AAGA,UAAIe,WAAW,mBAAmB9Q,YAAYmC,OAAO,MAAM,GAAG;AAC5D0L,yBAAiBC,MAAMiC,WAAW;AAClC;MACF;AAGA,UAAIiB,UAAUK,eAAe;AAC3B;MACF;AAGA,UAAI,CAACL,UAAUG,UAAU;AACvBtD,yBAAiBC,MAAMiC,WAAW;AAClC;MACF;AAGA,UAAI,CAAC/F,4BAA4BtJ,WAAW,QAAQyB,KAAK,GAAG;AAC1D0L,yBAAiBC,MAAMiC,WAAW;AAClC;MACF;AAGA,UAAI9F,oBAAoB;AACtBlL,qBAAa,CAACoE,gBAAeC,WAAUC,YAAW,GAAIsN,UAAgB;AACpExO,kBAAQjC,cAAciC,OAAOwO,MAAM,GAAG;QACxC,CAAC;MACH;AAGA,YAAME,QAAQrP,kBAAkBuO,YAAYN,QAAQ;AACpD,UAAI,CAACmB,kBAAkBC,OAAOC,QAAQ3O,KAAK,GAAG;AAC5C0L,yBAAiBC,MAAMiC,WAAW;AAClC;MACF;AAGA,UACE9H,sBACA,OAAOtD,iBAAiB,YACxB,OAAOA,aAAa6M,qBAAqB,YACzC;AACA,YAAIjE,aAAc;aAEX;AACL,kBAAQ5I,aAAa6M,iBAAiBX,OAAOC,MAAM,GAAC;YAClD,KAAK,eAAe;AAClB3O,sBAAQ8F,mBAAmB9C,WAAWhD,KAAK;AAC3C;YACF;YAEA,KAAK,oBAAoB;AACvBA,sBAAQ8F,mBAAmB7C,gBAAgBjD,KAAK;AAChD;YACF;UAKF;QACF;MACF;AAGA,UAAIA,UAAUoP,WAAW;AACvB,YAAI;AACF,cAAIhE,cAAc;AAChBwC,wBAAY0B,eAAelE,cAAcO,MAAM3L,KAAK;UACtD,OAAO;AAEL4N,wBAAY7B,aAAaJ,MAAM3L,KAAK;UACtC;AAEA,cAAIqN,aAAaO,WAAW,GAAG;AAC7BrC,yBAAaqC,WAAW;UAC1B,OAAO;AACL1Q,qBAASgH,UAAUI,OAAO;UAC5B;iBACOnB,IAAG;AACVuI,2BAAiBC,MAAMiC,WAAW;QACpC;MACF;IACF;AAGAD,kBAActH,MAAM9C,yBAAyBqK,aAAa,IAAI;;AAQhE,QAAM2B,qBAAqB,SAArBA,oBAA+BC,UAA0B;AAC7D,QAAIC,aAAa;AACjB,UAAMC,iBAAiB3C,oBAAoByC,QAAQ;AAGnD7B,kBAActH,MAAMzC,yBAAyB4L,UAAU,IAAI;AAE3D,WAAQC,aAAaC,eAAeC,SAAQ,GAAK;AAE/ChC,oBAActH,MAAMtC,wBAAwB0L,YAAY,IAAI;AAG5D1B,wBAAkB0B,UAAU;AAG5Bb,0BAAoBa,UAAU;AAG9B,UAAIA,WAAW7J,mBAAmBhB,kBAAkB;AAClD2K,QAAAA,oBAAmBE,WAAW7J,OAAO;MACvC;IACF;AAGA+H,kBAActH,MAAM5C,wBAAwB+L,UAAU,IAAI;;AAI5DtL,YAAU0L,WAAW,SAAU3D,OAAe;AAAA,QAAR5B,MAAGjO,UAAAC,SAAA,KAAAD,UAAA,CAAA,MAAA6H,SAAA7H,UAAA,CAAA,IAAG,CAAA;AAC1C,QAAIsQ,OAAO;AACX,QAAImD,eAAe;AACnB,QAAIjC,cAAc;AAClB,QAAIkC,aAAa;AAIjBxG,qBAAiB,CAAC2C;AAClB,QAAI3C,gBAAgB;AAClB2C,cAAQ;IACV;AAGA,QAAI,OAAOA,UAAU,YAAY,CAACyB,QAAQzB,KAAK,GAAG;AAChD,UAAI,OAAOA,MAAMrO,aAAa,YAAY;AACxCqO,gBAAQA,MAAMrO,SAAQ;AACtB,YAAI,OAAOqO,UAAU,UAAU;AAC7B,gBAAMvN,gBAAgB,iCAAiC;QACzD;MACF,OAAO;AACL,cAAMA,gBAAgB,4BAA4B;MACpD;IACF;AAGA,QAAI,CAACwF,UAAUO,aAAa;AAC1B,aAAOwH;IACT;AAGA,QAAI,CAAChE,YAAY;AACfmC,mBAAaC,GAAG;IAClB;AAGAnG,cAAUI,UAAU,CAAA;AAGpB,QAAI,OAAO2H,UAAU,UAAU;AAC7BvD,iBAAW;IACb;AAEA,QAAIA,UAAU;AAEZ,UAAKuD,MAAeqB,UAAU;AAC5B,cAAMnC,UAAU9L,kBAAmB4M,MAAeqB,QAAQ;AAC1D,YAAI,CAAC9G,aAAa2E,OAAO,KAAK9D,YAAY8D,OAAO,GAAG;AAClD,gBAAMzM,gBACJ,yDAAyD;QAE7D;MACF;IACF,WAAWuN,iBAAiBnH,MAAM;AAGhC4H,aAAOV,cAAc,SAAS;AAC9B6D,qBAAenD,KAAK7G,cAAcO,WAAW6F,OAAO,IAAI;AACxD,UACE4D,aAAatL,aAAa7C,UAAUnC,WACpCsQ,aAAavC,aAAa,QAC1B;AAEAZ,eAAOmD;MACT,WAAWA,aAAavC,aAAa,QAAQ;AAC3CZ,eAAOmD;MACT,OAAO;AAELnD,aAAKqD,YAAYF,YAAY;MAC/B;IACF,OAAO;AAEL,UACE,CAAC1H,cACD,CAACL,sBACD,CAACE;MAEDiE,MAAM/N,QAAQ,GAAG,MAAM,IACvB;AACA,eAAO4H,sBAAsBuC,sBACzBvC,mBAAmB9C,WAAWiJ,KAAK,IACnCA;MACN;AAGAS,aAAOV,cAAcC,KAAK;AAG1B,UAAI,CAACS,MAAM;AACT,eAAOvE,aAAa,OAAOE,sBAAsBtC,YAAY;MAC/D;IACF;AAGA,QAAI2G,QAAQxE,YAAY;AACtBqD,mBAAamB,KAAKsD,UAAU;IAC9B;AAGA,UAAMC,eAAelD,oBAAoBrE,WAAWuD,QAAQS,IAAI;AAGhE,WAAQkB,cAAcqC,aAAaN,SAAQ,GAAK;AAE9C5B,wBAAkBH,WAAW;AAG7BgB,0BAAoBhB,WAAW;AAG/B,UAAIA,YAAYhI,mBAAmBhB,kBAAkB;AACnD2K,2BAAmB3B,YAAYhI,OAAO;MACxC;IACF;AAGA,QAAI8C,UAAU;AACZ,aAAOuD;IACT;AAGA,QAAI9D,YAAY;AACd,UAAIC,qBAAqB;AACvB0H,qBAAa5J,uBAAuB4G,KAAKJ,KAAK7G,aAAa;AAE3D,eAAO6G,KAAKsD,YAAY;AAEtBF,qBAAWC,YAAYrD,KAAKsD,UAAU;QACxC;MACF,OAAO;AACLF,qBAAapD;MACf;AAEA,UAAI/F,aAAauJ,cAAcvJ,aAAawJ,gBAAgB;AAQ1DL,qBAAa1J,WAAW0G,KAAKpI,kBAAkBoL,YAAY,IAAI;MACjE;AAEA,aAAOA;IACT;AAEA,QAAIM,iBAAiBpI,iBAAiB0E,KAAK2D,YAAY3D,KAAKD;AAG5D,QACEzE,kBACAxB,aAAa,UAAU,KACvBkG,KAAK7G,iBACL6G,KAAK7G,cAAcyK,WACnB5D,KAAK7G,cAAcyK,QAAQ3E,QAC3BpN,WAAWgI,cAA0BmG,KAAK7G,cAAcyK,QAAQ3E,IAAI,GACpE;AACAyE,uBACE,eAAe1D,KAAK7G,cAAcyK,QAAQ3E,OAAO,QAAQyE;IAC7D;AAGA,QAAItI,oBAAoB;AACtBlL,mBAAa,CAACoE,gBAAeC,WAAUC,YAAW,GAAIsN,UAAgB;AACpE4B,yBAAiBrS,cAAcqS,gBAAgB5B,MAAM,GAAG;MAC1D,CAAC;IACH;AAEA,WAAO1I,sBAAsBuC,sBACzBvC,mBAAmB9C,WAAWoN,cAAc,IAC5CA;;AAGNlM,YAAUqM,YAAY,WAAkB;AAAA,QAARlG,MAAGjO,UAAAC,SAAA,KAAAD,UAAA,CAAA,MAAA6H,SAAA7H,UAAA,CAAA,IAAG,CAAA;AACpCgO,iBAAaC,GAAG;AAChBpC,iBAAa;;AAGf/D,YAAUsM,cAAc,WAAA;AACtBzG,aAAS;AACT9B,iBAAa;;AAGf/D,YAAUuM,mBAAmB,SAAUC,KAAKvB,MAAMnP,OAAK;AAErD,QAAI,CAAC+J,QAAQ;AACXK,mBAAa,CAAA,CAAE;IACjB;AAEA,UAAMsE,QAAQrP,kBAAkBqR,GAAG;AACnC,UAAM/B,SAAStP,kBAAkB8P,IAAI;AACrC,WAAOV,kBAAkBC,OAAOC,QAAQ3O,KAAK;;AAG/CkE,YAAUyM,UAAU,SAClBC,YACAC,cAA0B;AAE1B,QAAI,OAAOA,iBAAiB,YAAY;AACtC;IACF;AAEAzT,cAAUiJ,MAAMuK,UAAU,GAAGC,YAAY;;AAG3C3M,YAAU4M,aAAa,SACrBF,YACAC,cAA0B;AAE1B,QAAIA,iBAAiB5M,QAAW;AAC9B,YAAMvE,QAAQ1C,iBAAiBqJ,MAAMuK,UAAU,GAAGC,YAAY;AAE9D,aAAOnR,UAAU,KACbuE,SACA3G,YAAY+I,MAAMuK,UAAU,GAAGlR,OAAO,CAAC,EAAE,CAAC;IAChD;AAEA,WAAOxC,SAASmJ,MAAMuK,UAAU,CAAC;;AAGnC1M,YAAU6M,cAAc,SAAUH,YAA0B;AAC1DvK,UAAMuK,UAAU,IAAI,CAAA;;AAGtB1M,YAAU8M,iBAAiB,WAAA;AACzB3K,YAAQ/C,gBAAe;;AAGzB,SAAOY;AACT;AAEA,IAAA,SAAeF,gBAAe;;;AC7rDvB,SAASiN,IAA4G;AAC1H,SAAO,EACL,OAAO,OACP,QAAQ,OACR,YAAY,MACZ,KAAK,MACL,OAAO,MACP,UAAU,OACV,UAAU,MACV,QAAQ,OACR,WAAW,MACX,YAAY,KACd;AACF;AAEO,IAAIC,IAAqCD,EAAa;AAEtD,SAASE,EAA+DC,IAA0D;AACvIF,MAAYE;AACd;ACxBA,IAAMC,IAAW,EAAE,MAAM,MAAM,KAAK;AAEpC,SAASC,EAAKC,IAAwBC,IAAM,IAAI;AAC9C,MAAIC,IAAS,OAAOF,MAAU,WAAWA,KAAQA,GAAM,QACjDG,IAAM,EACV,SAAS,CAACC,GAAuBC,MAAyB;AACxD,QAAIC,IAAY,OAAOD,KAAQ,WAAWA,IAAMA,EAAI;AACpD,WAAAC,IAAYA,EAAU,QAAQC,EAAM,OAAO,IAAI,GAC/CL,IAASA,EAAO,QAAQE,GAAME,CAAS,GAChCH;EACT,GACA,UAAU,MACD,IAAI,OAAOD,GAAQD,CAAG,EAEjC;AACA,SAAOE;AACT;AAEA,IAAMK,MAAsB,MAAM;AAClC,MAAI;AAEF,WAAO,CAAC,CAAC,IAAI,OAAO,cAAc;EACpC,QAAQ;AAGN,WAAO;EACT;AACA,GAAG;AATH,IAWaD,IAAQ,EACnB,kBAAkB,0BAClB,mBAAmB,eACnB,wBAAwB,iBACxB,gBAAgB,QAChB,YAAY,MACZ,mBAAmB,MACnB,iBAAiB,MACjB,cAAc,QACd,mBAAmB,OACnB,eAAe,OACf,qBAAqB,QACrB,WAAW,YACX,iBAAiB,qBACjB,iBAAiB,YACjB,yBAAyB,kCACzB,0BAA0B,oBAC1B,oBAAoB,2BACpB,YAAY,kBACZ,iBAAiB,gBACjB,kBAAkB,aAClB,SAAS,UACT,cAAc,YACd,gBAAgB,QAChB,iBAAiB,cACjB,mBAAmB,aACnB,iBAAiB,aACjB,kBAAkB,cAClB,gBAAgB,aAChB,WAAW,SACX,SAAS,WACT,mBAAmB,kCACnB,iBAAiB,oCACjB,mBAAmB,MACnB,iBAAiB,MACjB,mBAAmB,iCACnB,qBAAqB,iBACrB,YAAY,WACZ,eAAe,YACf,oBAAoB,qDACpB,uBAAuB,sDACvB,OAAO,gBACP,eAAe,QACf,UAAU,OACV,WAAW,OACX,WAAW,SACX,gBAAgB,YAChB,WAAW,UACX,eAAe,QACf,eAAe,OACf,eAAgBE,CAAAA,OAAiB,IAAI,OAAO,WAAWA,EAAI,8BAA+B,GAC1F,iBAAkBC,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,oDAAqD,GACpI,SAAUA,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,oDAAoD,GAC3H,kBAAmBA,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,iBAAiB,GACjG,mBAAoBA,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,IAAI,GACrF,gBAAiBA,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,sBAAsB,GAAG,GACvG,sBAAuBA,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,IAAI,EAC1F;AApEA,IA0EMC,KAAU;AA1EhB,IA2EMC,KAAY;AA3ElB,IA4EMC,KAAS;AA5Ef,IA6EMC,IAAK;AA7EX,IA8EMC,KAAU;AA9EhB,IA+EMC,IAAS;AA/Ef,IAgFMC,KAAe;AAhFrB,IAiFMC,KAAWnB,EAAKkB,EAAY,EAC/B,QAAQ,SAASD,CAAM,EACvB,QAAQ,cAAc,mBAAmB,EACzC,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,eAAe,SAAS,EAChC,QAAQ,YAAY,cAAc,EAClC,QAAQ,SAAS,mBAAmB,EACpC,QAAQ,YAAY,EAAE,EACtB,SAAS;AAzFZ,IA0FMG,KAAcpB,EAAKkB,EAAY,EAClC,QAAQ,SAASD,CAAM,EACvB,QAAQ,cAAc,mBAAmB,EACzC,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,eAAe,SAAS,EAChC,QAAQ,YAAY,cAAc,EAClC,QAAQ,SAAS,mBAAmB,EACpC,QAAQ,UAAU,mCAAmC,EACrD,SAAS;AAlGZ,IAmGMI,IAAa;AAnGnB,IAoGMC,KAAY;AApGlB,IAqGMC,IAAc;AArGpB,IAsGMC,KAAMxB,EAAK,6GAA6G,EAC3H,QAAQ,SAASuB,CAAW,EAC5B,QAAQ,SAAS,8DAA8D,EAC/E,SAAS;AAzGZ,IA2GME,KAAOzB,EAAK,gCAAgC,EAC/C,QAAQ,SAASiB,CAAM,EACvB,SAAS;AA7GZ,IA+GMS,IAAO;AA/Gb,IAqHMC,IAAW;AArHjB,IAsHMC,KAAO5B,EACX,6dASK,GAAG,EACP,QAAQ,WAAW2B,CAAQ,EAC3B,QAAQ,OAAOD,CAAI,EACnB,QAAQ,aAAa,0EAA0E,EAC/F,SAAS;AApIZ,IAsIMG,KAAY7B,EAAKqB,CAAU,EAC9B,QAAQ,MAAMN,CAAE,EAChB,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,aAAa,EAAE,EACvB,QAAQ,UAAU,EAAE,EACpB,QAAQ,cAAc,SAAS,EAC/B,QAAQ,UAAU,gDAAgD,EAClE,QAAQ,QAAQ,6BAA6B,EAC7C,QAAQ,QAAQ,6DAA6D,EAC7E,QAAQ,OAAOW,CAAI,EACnB,SAAS;AAhJZ,IAkJMI,KAAa9B,EAAK,yCAAyC,EAC9D,QAAQ,aAAa6B,EAAS,EAC9B,SAAS;AApJZ,IA0JME,IAAc,EAClB,YAAAD,IACA,MAAMjB,IACN,KAAAW,IACA,QAAAV,IACA,SAAAE,IACA,IAAAD,GACA,MAAAa,IACA,UAAAT,IACA,MAAAM,IACA,SAAAb,IACA,WAAAiB,IACA,OAAO9B,GACP,MAAMuB,GACR;AAxKA,IAgLMU,KAAWhC,EACf,6JAEsF,EACrF,QAAQ,MAAMe,CAAE,EAChB,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,cAAc,SAAS,EAC/B,QAAQ,QAAQ,wBAAyB,EACzC,QAAQ,UAAU,gDAAgD,EAClE,QAAQ,QAAQ,6BAA6B,EAC7C,QAAQ,QAAQ,6DAA6D,EAC7E,QAAQ,OAAOW,CAAI,EACnB,SAAS;AA5LZ,IA8LMO,KAAsC,EAC1C,GAAGF,GACH,UAAUX,IACV,OAAOY,IACP,WAAWhC,EAAKqB,CAAU,EACvB,QAAQ,MAAMN,CAAE,EAChB,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,aAAa,EAAE,EACvB,QAAQ,SAASiB,EAAQ,EACzB,QAAQ,cAAc,SAAS,EAC/B,QAAQ,UAAU,gDAAgD,EAClE,QAAQ,QAAQ,6BAA6B,EAC7C,QAAQ,QAAQ,6DAA6D,EAC7E,QAAQ,OAAON,CAAI,EACnB,SAAS,EACd;AA7MA,IAmNMQ,KAA2C,EAC/C,GAAGH,GACH,MAAM/B,EACJ,wIAEwE,EACvE,QAAQ,WAAW2B,CAAQ,EAC3B,QAAQ,QAAQ,mKAGkB,EAClC,SAAS,GACZ,KAAK,qEACL,SAAS,0BACT,QAAQ5B,GACR,UAAU,oCACV,WAAWC,EAAKqB,CAAU,EACvB,QAAQ,MAAMN,CAAE,EAChB,QAAQ,WAAW;EAAiB,EACpC,QAAQ,YAAYI,EAAQ,EAC5B,QAAQ,UAAU,EAAE,EACpB,QAAQ,cAAc,SAAS,EAC/B,QAAQ,WAAW,EAAE,EACrB,QAAQ,SAAS,EAAE,EACnB,QAAQ,SAAS,EAAE,EACnB,QAAQ,QAAQ,EAAE,EAClB,SAAS,EACd;AA9OA,IAoPMgB,KAAS;AApPf,IAqPMC,KAAa;AArPnB,IAsPMC,KAAK;AAtPX,IAuPMC,KAAa;AAvPnB,IA0PMC,IAAe;AA1PrB,IA2PMC,IAAsB;AA3P5B,IA4PMC,KAAyB;AA5P/B,IA6PMC,KAAc1C,EAAK,yBAAyB,GAAG,EAClD,QAAQ,eAAewC,CAAmB,EAAE,SAAS;AA9PxD,IAiQMG,KAA0B;AAjQhC,IAkQMC,KAAiC;AAlQvC,IAmQMC,KAAoC;AAnQ1C,IAsQMC,KAAqB;AAtQ3B,IAuQMC,KAA4B;AAvQlC,IAwQMC,KAA+B;AAxQrC,IA2QMC,KAAYjD,EAAK,0BAA0B,GAAG,EACjD,QAAQ,QAAQ,mGAAmG,EACnH,QAAQ,YAAYS,KAAqB,aAAa,WAAW,EACjE,QAAQ,QAAQ,yBAAyB,EACzC,QAAQ,QAAQ,gBAAgB,EAChC,SAAS;AAhRZ,IAkRMyC,KAAqB;AAlR3B,IAoRMC,KAAiBnD,EAAKkD,IAAoB,GAAG,EAChD,QAAQ,UAAUX,CAAY,EAC9B,SAAS;AAtRZ,IAwRMa,KAAoBpD,EAAKkD,IAAoB,GAAG,EACnD,QAAQ,UAAUP,EAAuB,EACzC,SAAS;AA1RZ,IA4RMU,KACJ;AA7RF,IAsSMC,KAAoBtD,EAAKqD,IAAuB,IAAI,EACvD,QAAQ,kBAAkBZ,EAAsB,EAChD,QAAQ,eAAeD,CAAmB,EAC1C,QAAQ,UAAUD,CAAY,EAC9B,SAAS;AA1SZ,IA4SMgB,KAAuBvD,EAAKqD,IAAuB,IAAI,EAC1D,QAAQ,kBAAkBR,EAAiC,EAC3D,QAAQ,eAAeD,EAA8B,EACrD,QAAQ,UAAUD,EAAuB,EACzC,SAAS;AAhTZ,IAmTMa,KAAoBxD,EACxB,oNAMiC,IAAI,EACpC,QAAQ,kBAAkByC,EAAsB,EAChD,QAAQ,eAAeD,CAAmB,EAC1C,QAAQ,UAAUD,CAAY,EAC9B,SAAS;AA9TZ,IAiUMkB,KAAYzD,EAAK,+BAA+B,GAAG,EACtD,QAAQ,UAAU8C,EAAkB,EACpC,SAAS;AAnUZ,IAsUMY,KACJ;AAvUF,IA+UMC,KAAY3D,EAAK0D,IAAe,IAAI,EACvC,QAAQ,kBAAkBV,EAA4B,EACtD,QAAQ,eAAeD,EAAyB,EAChD,QAAQ,UAAUD,EAAkB,EACpC,SAAS;AAnVZ,IAqVMc,KAAiB5D,EAAK,aAAa,IAAI,EAC1C,QAAQ,UAAUuC,CAAY,EAC9B,SAAS;AAvVZ,IAyVMsB,KAAW7D,EAAK,qCAAqC,EACxD,QAAQ,UAAU,8BAA8B,EAChD,QAAQ,SAAS,8IAA8I,EAC/J,SAAS;AA5VZ,IA8VM8D,KAAiB9D,EAAK2B,CAAQ,EAAE,QAAQ,aAAa,KAAK,EAAE,SAAS;AA9V3E,IA+VMoC,KAAM/D,EACV,0JAKsC,EACrC,QAAQ,WAAW8D,EAAc,EACjC,QAAQ,aAAa,6EAA6E,EAClG,SAAS;AAxWZ,IA0WME,IAAe;AA1WrB,IA4WMC,KAAOjE,EAAK,4EAA4E,EAC3F,QAAQ,SAASgE,CAAY,EAC7B,QAAQ,QAAQ,yCAAyC,EACzD,QAAQ,SAAS,6DAA6D,EAC9E,SAAS;AAhXZ,IAkXME,KAAUlE,EAAK,yBAAyB,EAC3C,QAAQ,SAASgE,CAAY,EAC7B,QAAQ,OAAOzC,CAAW,EAC1B,SAAS;AArXZ,IAuXM4C,KAASnE,EAAK,uBAAuB,EACxC,QAAQ,OAAOuB,CAAW,EAC1B,SAAS;AAzXZ,IA2XM6C,KAAgBpE,EAAK,yBAAyB,GAAG,EACpD,QAAQ,WAAWkE,EAAO,EAC1B,QAAQ,UAAUC,EAAM,EACxB,SAAS;AA9XZ,IAgYME,KAA2B;AAhYjC,IAsYMC,IAAe,EACnB,YAAYvE,GACZ,gBAAA6D,IACA,UAAAC,IACA,WAAAZ,IACA,IAAAZ,IACA,MAAMD,IACN,KAAKrC,GACL,WAAWA,GACX,WAAWA,GACX,gBAAAoD,IACA,mBAAAG,IACA,mBAAAE,IACA,QAAArB,IACA,MAAA8B,IACA,QAAAE,IACA,aAAAzB,IACA,SAAAwB,IACA,eAAAE,IACA,KAAAL,IACA,MAAMzB,IACN,KAAKvC,EACP;AA5ZA,IAoaMwE,KAA6C,EACjD,GAAGD,GACH,MAAMtE,EAAK,yBAAyB,EACjC,QAAQ,SAASgE,CAAY,EAC7B,SAAS,GACZ,SAAShE,EAAK,+BAA+B,EAC1C,QAAQ,SAASgE,CAAY,EAC7B,SAAS,EACd;AA5aA,IAkbMQ,IAAwC,EAC5C,GAAGF,GACH,mBAAmBf,IACnB,gBAAgBH,IAChB,WAAAK,IACA,WAAAE,IACA,KAAK3D,EAAK,gEAAgE,EACvE,QAAQ,YAAYqE,EAAwB,EAC5C,QAAQ,SAAS,2EAA2E,EAC5F,SAAS,GACZ,YAAY,8EACZ,KAAK,2EACL,MAAMrE,EAAK,qNAAqN,EAC7N,QAAQ,YAAYqE,EAAwB,EAC5C,SAAS,EACd;AAjcA,IAucMI,KAA2C,EAC/C,GAAGD,GACH,IAAIxE,EAAKqC,EAAE,EAAE,QAAQ,QAAQ,GAAG,EAAE,SAAS,GAC3C,MAAMrC,EAAKwE,EAAU,IAAI,EACtB,QAAQ,QAAQ,eAAe,EAC/B,QAAQ,WAAW,GAAG,EACtB,SAAS,EACd;AA9cA,IAodaE,IAAQ,EACnB,QAAQ3C,GACR,KAAKE,IACL,UAAUC,GACZ;AAxdA,IA0dayC,IAAS,EACpB,QAAQL,GACR,KAAKE,GACL,QAAQC,IACR,UAAUF,GACZ;AC5eA,IAAMK,KAAkD,EACtD,KAAK,SACL,KAAK,QACL,KAAK,QACL,KAAK,UACL,KAAK,QACP;AANA,IAOMC,KAAwBC,CAAAA,OAAeF,GAAmBE,EAAE;AAE3D,SAASC,EAAmBnD,IAAcoD,GAAkB;AACjE,MAAIA,GAAAA;AACF,QAAIxE,EAAM,WAAW,KAAKoB,EAAI,EAC5B,QAAOA,GAAK,QAAQpB,EAAM,eAAeqE,EAAoB;EAAA,WAG3DrE,EAAM,mBAAmB,KAAKoB,EAAI,EACpC,QAAOA,GAAK,QAAQpB,EAAM,uBAAuBqE,EAAoB;AAIzE,SAAOjD;AACT;AAEO,SAASqD,EAASC,IAAc;AACrC,MAAI;AACFA,IAAAA,KAAO,UAAUA,EAAI,EAAE,QAAQ1E,EAAM,eAAe,GAAG;EACzD,QAAQ;AACN,WAAO;EACT;AACA,SAAO0E;AACT;AAEO,SAASC,EAAWC,IAAkBC,GAAgB;AAG3D,MAAMC,IAAMF,GAAS,QAAQ5E,EAAM,UAAU,CAAC+E,GAAOC,GAAQC,MAAQ;AACjE,QAAIC,IAAU,OACVC,IAAOH;AACX,WAAO,EAAEG,KAAQ,KAAKF,EAAIE,CAAI,MAAM,OAAMD,KAAU,CAACA;AACrD,WAAIA,IAGK,MAGA;EAEX,CAAC,GACDE,IAAQN,EAAI,MAAM9E,EAAM,SAAS,GAC/BqF,IAAI;AAUR,MAPKD,EAAM,CAAC,EAAE,KAAK,KACjBA,EAAM,MAAM,GAEVA,EAAM,SAAS,KAAK,CAACA,EAAM,GAAG,EAAE,GAAG,KAAK,KAC1CA,EAAM,IAAI,GAGRP,EACF,KAAIO,EAAM,SAASP,EACjBO,GAAM,OAAOP,CAAK;MAElB,QAAOO,EAAM,SAASP,IAAOO,GAAM,KAAK,EAAE;AAI9C,SAAOC,IAAID,EAAM,QAAQC,IAEvBD,GAAMC,CAAC,IAAID,EAAMC,CAAC,EAAE,KAAK,EAAE,QAAQrF,EAAM,WAAW,GAAG;AAEzD,SAAOoF;AACT;AAUO,SAASE,EAAML,IAAaM,GAAWC,GAAkB;AAC9D,MAAMC,IAAIR,GAAI;AACd,MAAIQ,MAAM,EACR,QAAO;AAIT,MAAIC,IAAU;AAGd,SAAOA,IAAUD,KAAG;AAClB,QAAME,IAAWV,GAAI,OAAOQ,IAAIC,IAAU,CAAC;AAC3C,QAAIC,MAAaJ,KAAK,CAACC,EACrBE;aACSC,MAAaJ,KAAKC,EAC3BE;QAEA;EAEJ;AAEA,SAAOT,GAAI,MAAM,GAAGQ,IAAIC,CAAO;AACjC;AAEO,SAASE,GAAmBX,IAAaY,GAAW;AACzD,MAAIZ,GAAI,QAAQY,EAAE,CAAC,CAAC,MAAM,GACxB,QAAO;AAGT,MAAIC,IAAQ;AACZ,WAAST,IAAI,GAAGA,IAAIJ,GAAI,QAAQI,IAC9B,KAAIJ,GAAII,CAAC,MAAM,KACbA;WACSJ,GAAII,CAAC,MAAMQ,EAAE,CAAC,EACvBC;WACSb,GAAII,CAAC,MAAMQ,EAAE,CAAC,MACvBC,KACIA,IAAQ,GACV,QAAOT;AAIb,SAAIS,IAAQ,IACH,KAGF;AACT;AAEO,SAASC,GAAWC,IAAc7F,IAAS,GAAG;AACnD,MAAI8F,IAAM9F,GACN+F,IAAW;AACf,WAAWC,KAAQH,GACjB,KAAIG,MAAS,KAAM;AACjB,QAAMC,IAAQ,IAAKH,IAAM;AACzBC,SAAY,IAAI,OAAOE,CAAK,GAC5BH,KAAOG;EACT,MACEF,MAAYC,GACZF;AAIJ,SAAOC;AACT;AC3IA,SAASG,GAAWC,IAAe7C,GAA2C8C,GAAaC,GAAeC,GAA0C;AAClJ,MAAM/B,IAAOjB,EAAK,MACZiD,IAAQjD,EAAK,SAAS,MACtBkD,IAAOL,GAAI,CAAC,EAAE,QAAQG,EAAM,MAAM,mBAAmB,IAAI;AAE/DD,IAAM,MAAM,SAAS;AACrB,MAAMI,IAAoC,EACxC,MAAMN,GAAI,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,UAAU,QAC3C,KAAAC,GACA,MAAA7B,GACA,OAAAgC,GACA,MAAAC,GACA,QAAQH,EAAM,aAAaG,CAAI,EACjC;AACA,SAAAH,EAAM,MAAM,SAAS,OACdI;AACT;AAEA,SAASC,GAAuBN,IAAaI,GAAcF,GAAc;AACvE,MAAMK,IAAoBP,GAAI,MAAME,EAAM,MAAM,sBAAsB;AAEtE,MAAIK,MAAsB,KACxB,QAAOH;AAGT,MAAMI,IAAeD,EAAkB,CAAC;AAExC,SAAOH,EACJ,MAAM;CAAI,EACV,IAAIK,OAAQ;AACX,QAAMC,IAAoBD,EAAK,MAAMP,EAAM,MAAM,cAAc;AAC/D,QAAIQ,MAAsB,KACxB,QAAOD;AAGT,QAAM,CAACE,CAAY,IAAID;AAEvB,WAAIC,EAAa,UAAUH,EAAa,SAC/BC,EAAK,MAAMD,EAAa,MAAM,IAGhCC;EACT,CAAC,EACA,KAAK;CAAI;AACd;AAKO,IAAMG,IAAN,MAAiE;EAKtE,YAAYC,GAAuD;AAJnE;AACA;AACA;AAGE,SAAK,UAAUA,KAAWhI;EAC5B;EAEA,MAAMiI,GAAuC;AAC3C,QAAMf,IAAM,KAAK,MAAM,MAAM,QAAQ,KAAKe,CAAG;AAC7C,QAAIf,KAAOA,EAAI,CAAC,EAAE,SAAS,EACzB,QAAO,EACL,MAAM,SACN,KAAKA,EAAI,CAAC,EACZ;EAEJ;EAEA,KAAKe,GAAsC;AACzC,QAAMf,IAAM,KAAK,MAAM,MAAM,KAAK,KAAKe,CAAG;AAC1C,QAAIf,GAAK;AACP,UAAMK,IAAOL,EAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,kBAAkB,EAAE;AACjE,aAAO,EACL,MAAM,QACN,KAAKA,EAAI,CAAC,GACV,gBAAgB,YAChB,MAAO,KAAK,QAAQ,WAEhBK,IADArB,EAAMqB,GAAM;CAAI,EAEtB;IACF;EACF;EAEA,OAAOU,GAAsC;AAC3C,QAAMf,IAAM,KAAK,MAAM,MAAM,OAAO,KAAKe,CAAG;AAC5C,QAAIf,GAAK;AACP,UAAMC,IAAMD,EAAI,CAAC,GACXK,IAAOE,GAAuBN,GAAKD,EAAI,CAAC,KAAK,IAAI,KAAK,KAAK;AAEjE,aAAO,EACL,MAAM,QACN,KAAAC,GACA,MAAMD,EAAI,CAAC,IAAIA,EAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,IAAIA,EAAI,CAAC,GACpF,MAAAK,EACF;IACF;EACF;EAEA,QAAQU,GAAyC;AAC/C,QAAMf,IAAM,KAAK,MAAM,MAAM,QAAQ,KAAKe,CAAG;AAC7C,QAAIf,GAAK;AACP,UAAIK,IAAOL,EAAI,CAAC,EAAE,KAAK;AAGvB,UAAI,KAAK,MAAM,MAAM,WAAW,KAAKK,CAAI,GAAG;AAC1C,YAAMW,IAAUhC,EAAMqB,GAAM,GAAG;AAAA,SAC3B,KAAK,QAAQ,YAEN,CAACW,KAAW,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAO,OAElEX,IAAOW,EAAQ,KAAK;MAExB;AAEA,aAAO,EACL,MAAM,WACN,KAAKhB,EAAI,CAAC,GACV,OAAOA,EAAI,CAAC,EAAE,QACd,MAAAK,GACA,QAAQ,KAAK,MAAM,OAAOA,CAAI,EAChC;IACF;EACF;EAEA,GAAGU,GAAoC;AACrC,QAAMf,IAAM,KAAK,MAAM,MAAM,GAAG,KAAKe,CAAG;AACxC,QAAIf,EACF,QAAO,EACL,MAAM,MACN,KAAKhB,EAAMgB,EAAI,CAAC,GAAG;CAAI,EACzB;EAEJ;EAEA,WAAWe,GAA4C;AACrD,QAAMf,IAAM,KAAK,MAAM,MAAM,WAAW,KAAKe,CAAG;AAChD,QAAIf,GAAK;AACP,UAAIiB,IAAQjC,EAAMgB,EAAI,CAAC,GAAG;CAAI,EAAE,MAAM;CAAI,GACtCC,IAAM,IACNI,IAAO,IACLa,IAAkB,CAAC;AAEzB,aAAOD,EAAM,SAAS,KAAG;AACvB,YAAIE,IAAe,OACbC,IAAe,CAAC,GAElBrC;AACJ,aAAKA,IAAI,GAAGA,IAAIkC,EAAM,QAAQlC,IAE5B,KAAI,KAAK,MAAM,MAAM,gBAAgB,KAAKkC,EAAMlC,CAAC,CAAC,EAChDqC,GAAa,KAAKH,EAAMlC,CAAC,CAAC,GAC1BoC,IAAe;iBACN,CAACA,EACVC,GAAa,KAAKH,EAAMlC,CAAC,CAAC;YAE1B;AAGJkC,YAAQA,EAAM,MAAMlC,CAAC;AAErB,YAAMsC,IAAaD,EAAa,KAAK;CAAI,GACnCE,IAAcD,EAEjB,QAAQ,KAAK,MAAM,MAAM,yBAAyB;OAAU,EAC5D,QAAQ,KAAK,MAAM,MAAM,0BAA0B,EAAE;AACxDpB,YAAMA,IAAM,GAAGA,CAAG;EAAKoB,CAAU,KAAKA,GACtChB,IAAOA,IAAO,GAAGA,CAAI;EAAKiB,CAAW,KAAKA;AAI1C,YAAMC,IAAM,KAAK,MAAM,MAAM;AAM7B,YALA,KAAK,MAAM,MAAM,MAAM,MACvB,KAAK,MAAM,YAAYD,GAAaJ,GAAQ,IAAI,GAChD,KAAK,MAAM,MAAM,MAAMK,GAGnBN,EAAM,WAAW,EACnB;AAGF,YAAMO,IAAYN,EAAO,GAAG,EAAE;AAE9B,YAAIM,GAAW,SAAS,OAEtB;AACK,YAAIA,GAAW,SAAS,cAAc;AAE3C,cAAMC,KAAWD,GACXE,IAAUD,GAAS,MAAM;IAAOR,EAAM,KAAK;CAAI,GAC/CU,IAAW,KAAK,WAAWD,CAAO;AACxCR,YAAOA,EAAO,SAAS,CAAC,IAAIS,GAE5B1B,IAAMA,EAAI,UAAU,GAAGA,EAAI,SAASwB,GAAS,IAAI,MAAM,IAAIE,EAAS,KACpEtB,IAAOA,EAAK,UAAU,GAAGA,EAAK,SAASoB,GAAS,KAAK,MAAM,IAAIE,EAAS;AACxE;QACF,WAAWH,GAAW,SAAS,QAAQ;AAErC,cAAMC,KAAWD,GACXE,IAAUD,GAAS,MAAM;IAAOR,EAAM,KAAK;CAAI,GAC/CU,IAAW,KAAK,KAAKD,CAAO;AAClCR,YAAOA,EAAO,SAAS,CAAC,IAAIS,GAE5B1B,IAAMA,EAAI,UAAU,GAAGA,EAAI,SAASuB,EAAU,IAAI,MAAM,IAAIG,EAAS,KACrEtB,IAAOA,EAAK,UAAU,GAAGA,EAAK,SAASoB,GAAS,IAAI,MAAM,IAAIE,EAAS,KACvEV,IAAQS,EAAQ,UAAUR,EAAO,GAAG,EAAE,EAAG,IAAI,MAAM,EAAE,MAAM;CAAI;AAC/D;QACF;MACF;AAEA,aAAO,EACL,MAAM,cACN,KAAAjB,GACA,QAAAiB,GACA,MAAAb,EACF;IACF;EACF;EAEA,KAAKU,GAAsC;AACzC,QAAIf,IAAM,KAAK,MAAM,MAAM,KAAK,KAAKe,CAAG;AACxC,QAAIf,GAAK;AACP,UAAIpG,IAAOoG,EAAI,CAAC,EAAE,KAAK,GACjB4B,IAAYhI,EAAK,SAAS,GAE1Be,IAAoB,EACxB,MAAM,QACN,KAAK,IACL,SAASiH,GACT,OAAOA,IAAY,CAAChI,EAAK,MAAM,GAAG,EAAE,IAAI,IACxC,OAAO,OACP,OAAO,CAAC,EACV;AAEAA,UAAOgI,IAAY,aAAahI,EAAK,MAAM,EAAE,CAAC,KAAK,KAAKA,CAAI,IAExD,KAAK,QAAQ,aACfA,IAAOgI,IAAYhI,IAAO;AAI5B,UAAMiI,IAAY,KAAK,MAAM,MAAM,cAAcjI,CAAI,GACjDkI,IAAoB;AAExB,aAAOf,KAAK;AACV,YAAIgB,IAAW,OACX9B,IAAM,IACN+B,IAAe;AAKnB,YAJI,EAAEhC,IAAM6B,EAAU,KAAKd,CAAG,MAI1B,KAAK,MAAM,MAAM,GAAG,KAAKA,CAAG,EAC9B;AAGFd,YAAMD,EAAI,CAAC,GACXe,IAAMA,EAAI,UAAUd,EAAI,MAAM;AAE9B,YAAIP,IAAOD,GAAWO,EAAI,CAAC,EAAE,MAAM;GAAM,CAAC,EAAE,CAAC,GAAGA,EAAI,CAAC,EAAE,MAAM,GACzDiC,IAAWlB,EAAI,MAAM;GAAM,CAAC,EAAE,CAAC,GAC/BmB,KAAY,CAACxC,EAAK,KAAK,GAEvB7F,IAAS;AAmBb,YAlBI,KAAK,QAAQ,YACfA,IAAS,GACTmI,IAAetC,EAAK,UAAU,KACrBwC,KACTrI,IAASmG,EAAI,CAAC,EAAE,SAAS,KAEzBnG,IAAS6F,EAAK,OAAO,KAAK,MAAM,MAAM,YAAY,GAClD7F,IAASA,IAAS,IAAI,IAAIA,GAC1BmI,IAAetC,EAAK,MAAM7F,CAAM,GAChCA,KAAUmG,EAAI,CAAC,EAAE,SAGfkC,MAAa,KAAK,MAAM,MAAM,UAAU,KAAKD,CAAQ,MACvDhC,KAAOgC,IAAW;GAClBlB,IAAMA,EAAI,UAAUkB,EAAS,SAAS,CAAC,GACvCF,IAAW,OAGT,CAACA,GAAU;AACb,cAAMI,IAAkB,KAAK,MAAM,MAAM,gBAAgBtI,CAAM,GACzDuI,KAAU,KAAK,MAAM,MAAM,QAAQvI,CAAM,GACzCwI,KAAmB,KAAK,MAAM,MAAM,iBAAiBxI,CAAM,GAC3DyI,KAAoB,KAAK,MAAM,MAAM,kBAAkBzI,CAAM,GAC7D0I,MAAiB,KAAK,MAAM,MAAM,eAAe1I,CAAM,GACvD2I,MAAuB,KAAK,MAAM,MAAM,qBAAqB3I,CAAM;AAGzE,iBAAOkH,KAAK;AACV,gBAAM0B,KAAU1B,EAAI,MAAM;GAAM,CAAC,EAAE,CAAC,GAChC2B;AAqCJ,gBApCAT,IAAWQ,IAGP,KAAK,QAAQ,YACfR,IAAWA,EAAS,QAAQ,KAAK,MAAM,MAAM,oBAAoB,IAAI,GACrES,KAAsBT,KAEtBS,KAAsBT,EAAS,QAAQ,KAAK,MAAM,MAAM,eAAe,MAAM,GAI3EI,GAAiB,KAAKJ,CAAQ,KAK9BK,GAAkB,KAAKL,CAAQ,KAK/BM,IAAe,KAAKN,CAAQ,KAK5BO,IAAqB,KAAKP,CAAQ,KAKlCE,EAAgB,KAAKF,CAAQ,KAK7BG,GAAQ,KAAKH,CAAQ,EACvB;AAGF,gBAAIS,GAAoB,OAAO,KAAK,MAAM,MAAM,YAAY,KAAK7I,KAAU,CAACoI,EAAS,KAAK,EACxFD,MAAgB;IAAOU,GAAoB,MAAM7I,CAAM;iBAClD;AAgBL,kBAdIqI,MAKAxC,EAAK,QAAQ,KAAK,MAAM,MAAM,eAAe,MAAM,EAAE,OAAO,KAAK,MAAM,MAAM,YAAY,KAAK,KAG9F2C,GAAiB,KAAK3C,CAAI,KAG1B4C,GAAkB,KAAK5C,CAAI,KAG3B0C,GAAQ,KAAK1C,CAAI,EACnB;AAGFsC,mBAAgB;IAAOC;YACzB;AAEAC,YAAAA,KAAY,CAACD,EAAS,KAAK,GAE3BhC,KAAOwC,KAAU;GACjB1B,IAAMA,EAAI,UAAU0B,GAAQ,SAAS,CAAC,GACtC/C,IAAOgD,GAAoB,MAAM7I,CAAM;UACzC;QACF;AAEKc,UAAK,UAEJmH,IACFnH,EAAK,QAAQ,OACJ,KAAK,MAAM,MAAM,gBAAgB,KAAKsF,CAAG,MAClD6B,IAAoB,QAIxBnH,EAAK,MAAM,KAAK,EACd,MAAM,aACN,KAAAsF,GACA,MAAM,CAAC,CAAC,KAAK,QAAQ,OAAO,KAAK,MAAM,MAAM,WAAW,KAAK+B,CAAY,GACzE,OAAO,OACP,MAAMA,GACN,QAAQ,CAAC,EACX,CAAC,GAEDrH,EAAK,OAAOsF;MACd;AAGA,UAAM0C,IAAWhI,EAAK,MAAM,GAAG,EAAE;AACjC,UAAIgI,EACFA,GAAS,MAAMA,EAAS,IAAI,QAAQ,GACpCA,EAAS,OAAOA,EAAS,KAAK,QAAQ;UAGtC;AAEFhI,QAAK,MAAMA,EAAK,IAAI,QAAQ;AAG5B,eAAWiI,KAAQjI,EAAK,OAAO;AAG7B,YAFA,KAAK,MAAM,MAAM,MAAM,OACvBiI,EAAK,SAAS,KAAK,MAAM,YAAYA,EAAK,MAAM,CAAC,CAAC,GAC9CA,EAAK,MAAM;AAGb,cADAA,EAAK,OAAOA,EAAK,KAAK,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE,GAC9DA,EAAK,OAAO,CAAC,GAAG,SAAS,UAAUA,EAAK,OAAO,CAAC,GAAG,SAAS,aAAa;AAC3EA,cAAK,OAAO,CAAC,EAAE,MAAMA,EAAK,OAAO,CAAC,EAAE,IAAI,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE,GACpFA,EAAK,OAAO,CAAC,EAAE,OAAOA,EAAK,OAAO,CAAC,EAAE,KAAK,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE;AACtF,qBAAS7D,IAAI,KAAK,MAAM,YAAY,SAAS,GAAGA,KAAK,GAAGA,IACtD,KAAI,KAAK,MAAM,MAAM,WAAW,KAAK,KAAK,MAAM,YAAYA,CAAC,EAAE,GAAG,GAAG;AACnE,mBAAK,MAAM,YAAYA,CAAC,EAAE,MAAM,KAAK,MAAM,YAAYA,CAAC,EAAE,IAAI,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE;AAC1G;YACF;UAEJ;AAEA,cAAM8D,IAAU,KAAK,MAAM,MAAM,iBAAiB,KAAKD,EAAK,GAAG;AAC/D,cAAIC,GAAS;AACX,gBAAMC,IAAiC,EACrC,MAAM,YACN,KAAKD,EAAQ,CAAC,IAAI,KAClB,SAASA,EAAQ,CAAC,MAAM,MAC1B;AACAD,cAAK,UAAUE,EAAc,SACzBnI,EAAK,QACHiI,EAAK,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,EAAE,SAASA,EAAK,OAAO,CAAC,EAAE,IAAI,KAAK,YAAYA,EAAK,OAAO,CAAC,KAAKA,EAAK,OAAO,CAAC,EAAE,UACxHA,EAAK,OAAO,CAAC,EAAE,MAAME,EAAc,MAAMF,EAAK,OAAO,CAAC,EAAE,KACxDA,EAAK,OAAO,CAAC,EAAE,OAAOE,EAAc,MAAMF,EAAK,OAAO,CAAC,EAAE,MACzDA,EAAK,OAAO,CAAC,EAAE,OAAO,QAAQE,CAAa,KAE3CF,EAAK,OAAO,QAAQ,EAClB,MAAM,aACN,KAAKE,EAAc,KACnB,MAAMA,EAAc,KACpB,QAAQ,CAACA,CAAa,EACxB,CAAC,IAGHF,EAAK,OAAO,QAAQE,CAAa;UAErC;QACF;AAEA,YAAI,CAACnI,EAAK,OAAO;AAEf,cAAMoI,IAAUH,EAAK,OAAO,OAAOI,OAAKA,EAAE,SAAS,OAAO,GACpDC,IAAwBF,EAAQ,SAAS,KAAKA,EAAQ,KAAKC,OAAK,KAAK,MAAM,MAAM,QAAQ,KAAKA,EAAE,GAAG,CAAC;AAE1GrI,YAAK,QAAQsI;QACf;MACF;AAGA,UAAItI,EAAK,MACP,UAAWiI,KAAQjI,EAAK,OAAO;AAC7BiI,UAAK,QAAQ;AACb,iBAAWtC,KAASsC,EAAK,OACnBtC,GAAM,SAAS,WACjBA,EAAM,OAAO;MAGnB;AAGF,aAAO3F;IACT;EACF;EAEA,KAAKoG,GAAsC;AACzC,QAAMf,IAAM,KAAK,MAAM,MAAM,KAAK,KAAKe,CAAG;AAC1C,QAAIf,EAQF,QAP2B,EACzB,MAAM,QACN,OAAO,MACP,KAAKA,EAAI,CAAC,GACV,KAAKA,EAAI,CAAC,MAAM,SAASA,EAAI,CAAC,MAAM,YAAYA,EAAI,CAAC,MAAM,SAC3D,MAAMA,EAAI,CAAC,EACb;EAGJ;EAEA,IAAIe,GAAqC;AACvC,QAAMf,IAAM,KAAK,MAAM,MAAM,IAAI,KAAKe,CAAG;AACzC,QAAIf,GAAK;AACP,UAAM/C,IAAM+C,EAAI,CAAC,EAAE,YAAY,EAAE,QAAQ,KAAK,MAAM,MAAM,qBAAqB,GAAG,GAC5E5B,IAAO4B,EAAI,CAAC,IAAIA,EAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,cAAc,IAAI,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,IAAI,IACtHI,IAAQJ,EAAI,CAAC,IAAIA,EAAI,CAAC,EAAE,UAAU,GAAGA,EAAI,CAAC,EAAE,SAAS,CAAC,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,IAAIA,EAAI,CAAC;AACrH,aAAO,EACL,MAAM,OACN,KAAA/C,GACA,KAAK+C,EAAI,CAAC,GACV,MAAA5B,GACA,OAAAgC,EACF;IACF;EACF;EAEA,MAAMW,GAAuC;AAC3C,QAAMf,IAAM,KAAK,MAAM,MAAM,MAAM,KAAKe,CAAG;AAK3C,QAJI,CAACf,KAID,CAAC,KAAK,MAAM,MAAM,eAAe,KAAKA,EAAI,CAAC,CAAC,EAE9C;AAGF,QAAMkD,IAAU7E,EAAW2B,EAAI,CAAC,CAAC,GAC3BmD,IAASnD,EAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE,EAAE,MAAM,GAAG,GACvEoD,IAAOpD,EAAI,CAAC,GAAG,KAAK,IAAIA,EAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,mBAAmB,EAAE,EAAE,MAAM;CAAI,IAAI,CAAC,GAE9F4C,IAAqB,EACzB,MAAM,SACN,KAAK5C,EAAI,CAAC,GACV,QAAQ,CAAC,GACT,OAAO,CAAC,GACR,MAAM,CAAC,EACT;AAEA,QAAIkD,EAAQ,WAAWC,EAAO,QAK9B;AAAA,eAAWE,KAASF,EACd,MAAK,MAAM,MAAM,gBAAgB,KAAKE,CAAK,IAC7CT,EAAK,MAAM,KAAK,OAAO,IACd,KAAK,MAAM,MAAM,iBAAiB,KAAKS,CAAK,IACrDT,EAAK,MAAM,KAAK,QAAQ,IACf,KAAK,MAAM,MAAM,eAAe,KAAKS,CAAK,IACnDT,EAAK,MAAM,KAAK,MAAM,IAEtBA,EAAK,MAAM,KAAK,IAAI;AAIxB,eAAS7D,IAAI,GAAGA,IAAImE,EAAQ,QAAQnE,IAClC6D,GAAK,OAAO,KAAK,EACf,MAAMM,EAAQnE,CAAC,GACf,QAAQ,KAAK,MAAM,OAAOmE,EAAQnE,CAAC,CAAC,GACpC,QAAQ,MACR,OAAO6D,EAAK,MAAM7D,CAAC,EACrB,CAAC;AAGH,eAAWP,KAAO4E,EAChBR,GAAK,KAAK,KAAKvE,EAAWG,GAAKoE,EAAK,OAAO,MAAM,EAAE,IAAI,CAACU,GAAMvE,OACrD,EACL,MAAMuE,GACN,QAAQ,KAAK,MAAM,OAAOA,CAAI,GAC9B,QAAQ,OACR,OAAOV,EAAK,MAAM7D,CAAC,EACrB,EACD,CAAC;AAGJ,aAAO6D;IAAAA;EACT;EAEA,SAAS7B,GAAyC;AAChD,QAAMf,IAAM,KAAK,MAAM,MAAM,SAAS,KAAKe,CAAG;AAC9C,QAAIf,EACF,QAAO,EACL,MAAM,WACN,KAAKA,EAAI,CAAC,GACV,OAAOA,EAAI,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,IAAI,GACtC,MAAMA,EAAI,CAAC,GACX,QAAQ,KAAK,MAAM,OAAOA,EAAI,CAAC,CAAC,EAClC;EAEJ;EAEA,UAAUe,GAA2C;AACnD,QAAMf,IAAM,KAAK,MAAM,MAAM,UAAU,KAAKe,CAAG;AAC/C,QAAIf,GAAK;AACP,UAAMK,IAAOL,EAAI,CAAC,EAAE,OAAOA,EAAI,CAAC,EAAE,SAAS,CAAC,MAAM;IAC9CA,EAAI,CAAC,EAAE,MAAM,GAAG,EAAE,IAClBA,EAAI,CAAC;AACT,aAAO,EACL,MAAM,aACN,KAAKA,EAAI,CAAC,GACV,MAAAK,GACA,QAAQ,KAAK,MAAM,OAAOA,CAAI,EAChC;IACF;EACF;EAEA,KAAKU,GAAsC;AACzC,QAAMf,IAAM,KAAK,MAAM,MAAM,KAAK,KAAKe,CAAG;AAC1C,QAAIf,EACF,QAAO,EACL,MAAM,QACN,KAAKA,EAAI,CAAC,GACV,MAAMA,EAAI,CAAC,GACX,QAAQ,KAAK,MAAM,OAAOA,EAAI,CAAC,CAAC,EAClC;EAEJ;EAEA,OAAOe,GAAwC;AAC7C,QAAMf,IAAM,KAAK,MAAM,OAAO,OAAO,KAAKe,CAAG;AAC7C,QAAIf,EACF,QAAO,EACL,MAAM,UACN,KAAKA,EAAI,CAAC,GACV,MAAMA,EAAI,CAAC,EACb;EAEJ;EAEA,IAAIe,GAAqC;AACvC,QAAMf,IAAM,KAAK,MAAM,OAAO,IAAI,KAAKe,CAAG;AAC1C,QAAIf,EACF,QAAI,CAAC,KAAK,MAAM,MAAM,UAAU,KAAK,MAAM,MAAM,UAAU,KAAKA,EAAI,CAAC,CAAC,IACpE,KAAK,MAAM,MAAM,SAAS,OACjB,KAAK,MAAM,MAAM,UAAU,KAAK,MAAM,MAAM,QAAQ,KAAKA,EAAI,CAAC,CAAC,MACxE,KAAK,MAAM,MAAM,SAAS,QAExB,CAAC,KAAK,MAAM,MAAM,cAAc,KAAK,MAAM,MAAM,kBAAkB,KAAKA,EAAI,CAAC,CAAC,IAChF,KAAK,MAAM,MAAM,aAAa,OACrB,KAAK,MAAM,MAAM,cAAc,KAAK,MAAM,MAAM,gBAAgB,KAAKA,EAAI,CAAC,CAAC,MACpF,KAAK,MAAM,MAAM,aAAa,QAGzB,EACL,MAAM,QACN,KAAKA,EAAI,CAAC,GACV,QAAQ,KAAK,MAAM,MAAM,QACzB,YAAY,KAAK,MAAM,MAAM,YAC7B,OAAO,OACP,MAAMA,EAAI,CAAC,EACb;EAEJ;EAEA,KAAKe,GAAqD;AACxD,QAAMf,IAAM,KAAK,MAAM,OAAO,KAAK,KAAKe,CAAG;AAC3C,QAAIf,GAAK;AACP,UAAMuD,IAAavD,EAAI,CAAC,EAAE,KAAK;AAC/B,UAAI,CAAC,KAAK,QAAQ,YAAY,KAAK,MAAM,MAAM,kBAAkB,KAAKuD,CAAU,GAAG;AAEjF,YAAI,CAAE,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAU,EACpD;AAIF,YAAMC,IAAaxE,EAAMuE,EAAW,MAAM,GAAG,EAAE,GAAG,IAAI;AACtD,aAAKA,EAAW,SAASC,EAAW,UAAU,MAAM,EAClD;MAEJ,OAAO;AAEL,YAAMC,IAAiBnE,GAAmBU,EAAI,CAAC,GAAG,IAAI;AACtD,YAAIyD,MAAmB,GAErB;AAGF,YAAIA,IAAiB,IAAI;AAEvB,cAAMC,KADQ1D,EAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,IAAI,IAAI,KACtBA,EAAI,CAAC,EAAE,SAASyD;AACxCzD,YAAI,CAAC,IAAIA,EAAI,CAAC,EAAE,UAAU,GAAGyD,CAAc,GAC3CzD,EAAI,CAAC,IAAIA,EAAI,CAAC,EAAE,UAAU,GAAG0D,CAAO,EAAE,KAAK,GAC3C1D,EAAI,CAAC,IAAI;QACX;MACF;AACA,UAAI5B,IAAO4B,EAAI,CAAC,GACZI,IAAQ;AACZ,UAAI,KAAK,QAAQ,UAAU;AAEzB,YAAMjD,IAAO,KAAK,MAAM,MAAM,kBAAkB,KAAKiB,CAAI;AAErDjB,cACFiB,IAAOjB,EAAK,CAAC,GACbiD,IAAQjD,EAAK,CAAC;MAElB,MACEiD,KAAQJ,EAAI,CAAC,IAAIA,EAAI,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI;AAGzC,aAAA5B,IAAOA,EAAK,KAAK,GACb,KAAK,MAAM,MAAM,kBAAkB,KAAKA,CAAI,MAC1C,KAAK,QAAQ,YAAY,CAAE,KAAK,MAAM,MAAM,gBAAgB,KAAKmF,CAAU,IAE7EnF,IAAOA,EAAK,MAAM,CAAC,IAEnBA,IAAOA,EAAK,MAAM,GAAG,EAAE,IAGpB2B,GAAWC,GAAK,EACrB,MAAM5B,KAAOA,EAAK,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,GAChE,OAAOgC,KAAQA,EAAM,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,EACrE,GAAGJ,EAAI,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;IACnC;EACF;EAEA,QAAQe,GAAa4C,GAAoE;AACvF,QAAI3D;AACJ,SAAKA,IAAM,KAAK,MAAM,OAAO,QAAQ,KAAKe,CAAG,OACvCf,IAAM,KAAK,MAAM,OAAO,OAAO,KAAKe,CAAG,IAAI;AAC/C,UAAM6C,KAAc5D,EAAI,CAAC,KAAKA,EAAI,CAAC,GAAG,QAAQ,KAAK,MAAM,MAAM,qBAAqB,GAAG,GACjF7C,IAAOwG,EAAMC,EAAW,YAAY,CAAC;AAC3C,UAAI,CAACzG,GAAM;AACT,YAAMkD,IAAOL,EAAI,CAAC,EAAE,OAAO,CAAC;AAC5B,eAAO,EACL,MAAM,QACN,KAAKK,GACL,MAAAA,EACF;MACF;AACA,aAAON,GAAWC,GAAK7C,GAAM6C,EAAI,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;IAC7D;EACF;EAEA,SAASe,GAAa8C,GAAmBC,IAAW,IAA2C;AAC7F,QAAIrF,IAAQ,KAAK,MAAM,OAAO,eAAe,KAAKsC,CAAG;AAIrD,QAHI,CAACtC,KAGDA,EAAM,CAAC,KAAKqF,EAAS,MAAM,KAAK,MAAM,MAAM,mBAAmB,EAAG;AAItE,QAAI,EAFarF,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAK,OAExB,CAACqF,KAAY,KAAK,MAAM,OAAO,YAAY,KAAKA,CAAQ,GAAG;AAE1E,UAAMC,IAAU,CAAC,GAAGtF,EAAM,CAAC,CAAC,EAAE,SAAS,GACnCuF,GAAQC,GAASC,IAAaH,GAASI,IAAgB,GAErDC,IAAS3F,EAAM,CAAC,EAAE,CAAC,MAAM,MAAM,KAAK,MAAM,OAAO,oBAAoB,KAAK,MAAM,OAAO;AAM7F,WALA2F,EAAO,YAAY,GAGnBP,IAAYA,EAAU,MAAM,KAAK9C,EAAI,SAASgD,CAAO,IAE7CtF,IAAQ2F,EAAO,KAAKP,CAAS,MAAM,QAAM;AAG/C,YAFAG,IAASvF,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,GAExE,CAACuF,EAAQ;AAIb,YAFAC,IAAU,CAAC,GAAGD,CAAM,EAAE,QAElBvF,EAAM,CAAC,KAAKA,EAAM,CAAC,GAAG;AACxByF,eAAcD;AACd;QACF,YAAWxF,EAAM,CAAC,KAAKA,EAAM,CAAC,MACxBsF,IAAU,KAAK,GAAGA,IAAUE,KAAW,IAAI;AAC7CE,eAAiBF;AACjB;QACF;AAKF,YAFAC,KAAcD,GAEVC,IAAa,EAAG;AAGpBD,YAAU,KAAK,IAAIA,GAASA,IAAUC,IAAaC,CAAa;AAEhE,YAAME,IAAiB,CAAC,GAAG5F,EAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAClCwB,IAAMc,EAAI,MAAM,GAAGgD,IAAUtF,EAAM,QAAQ4F,IAAiBJ,CAAO;AAGzE,YAAI,KAAK,IAAIF,GAASE,CAAO,IAAI,GAAG;AAClC,cAAM5D,IAAOJ,EAAI,MAAM,GAAG,EAAE;AAC5B,iBAAO,EACL,MAAM,MACN,KAAAA,GACA,MAAAI,GACA,QAAQ,KAAK,MAAM,aAAaA,CAAI,EACtC;QACF;AAGA,YAAMA,KAAOJ,EAAI,MAAM,GAAG,EAAE;AAC5B,eAAO,EACL,MAAM,UACN,KAAAA,GACA,MAAAI,IACA,QAAQ,KAAK,MAAM,aAAaA,EAAI,EACtC;MACF;IACF;EACF;EAEA,SAASU,GAA0C;AACjD,QAAMf,IAAM,KAAK,MAAM,OAAO,KAAK,KAAKe,CAAG;AAC3C,QAAIf,GAAK;AACP,UAAIK,IAAOL,EAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,mBAAmB,GAAG,GAC3DsE,IAAmB,KAAK,MAAM,MAAM,aAAa,KAAKjE,CAAI,GAC1DkE,IAA0B,KAAK,MAAM,MAAM,kBAAkB,KAAKlE,CAAI,KAAK,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAI;AAC3H,aAAIiE,KAAoBC,MACtBlE,IAAOA,EAAK,UAAU,GAAGA,EAAK,SAAS,CAAC,IAEnC,EACL,MAAM,YACN,KAAKL,EAAI,CAAC,GACV,MAAAK,EACF;IACF;EACF;EAEA,GAAGU,GAAoC;AACrC,QAAMf,IAAM,KAAK,MAAM,OAAO,GAAG,KAAKe,CAAG;AACzC,QAAIf,EACF,QAAO,EACL,MAAM,MACN,KAAKA,EAAI,CAAC,EACZ;EAEJ;EAEA,IAAIe,GAAa8C,GAAmBC,IAAW,IAA4B;AACzE,QAAIrF,IAAQ,KAAK,MAAM,OAAO,UAAU,KAAKsC,CAAG;AAChD,QAAI,CAACtC,EAAO;AAIZ,QAAI,EAFaA,EAAM,CAAC,KAAK,OAEZ,CAACqF,KAAY,KAAK,MAAM,OAAO,YAAY,KAAKA,CAAQ,GAAG;AAE1E,UAAMC,IAAU,CAAC,GAAGtF,EAAM,CAAC,CAAC,EAAE,SAAS,GACnCuF,GAAQC,GAASC,IAAaH,GAE5BK,IAAS,KAAK,MAAM,OAAO;AAMjC,WALAA,EAAO,YAAY,GAGnBP,IAAYA,EAAU,MAAM,KAAK9C,EAAI,SAASgD,CAAO,IAE7CtF,IAAQ2F,EAAO,KAAKP,CAAS,MAAM,QAAM;AAO/C,YANAG,IAASvF,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,GAExE,CAACuF,MAELC,IAAU,CAAC,GAAGD,CAAM,EAAE,QAElBC,MAAYF,GAAS;AAEzB,YAAItF,EAAM,CAAC,KAAKA,EAAM,CAAC,GAAG;AACxByF,eAAcD;AACd;QACF;AAIA,YAFAC,KAAcD,GAEVC,IAAa,EAAG;AAGpBD,YAAU,KAAK,IAAIA,GAASA,IAAUC,CAAU;AAEhD,YAAMG,IAAiB,CAAC,GAAG5F,EAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAClCwB,IAAMc,EAAI,MAAM,GAAGgD,IAAUtF,EAAM,QAAQ4F,IAAiBJ,CAAO,GAGnE5D,IAAOJ,EAAI,MAAM8D,GAAS,CAACA,CAAO;AACxC,eAAO,EACL,MAAM,OACN,KAAA9D,GACA,MAAAI,GACA,QAAQ,KAAK,MAAM,aAAaA,CAAI,EACtC;MACF;IACF;EACF;EAEA,SAASU,GAAsC;AAC7C,QAAMf,IAAM,KAAK,MAAM,OAAO,SAAS,KAAKe,CAAG;AAC/C,QAAIf,GAAK;AACP,UAAIK,GAAMjC;AACV,aAAI4B,EAAI,CAAC,MAAM,OACbK,IAAOL,EAAI,CAAC,GACZ5B,IAAO,YAAYiC,MAEnBA,IAAOL,EAAI,CAAC,GACZ5B,IAAOiC,IAGF,EACL,MAAM,QACN,KAAKL,EAAI,CAAC,GACV,MAAAK,GACA,MAAAjC,GACA,QAAQ,CACN,EACE,MAAM,QACN,KAAKiC,GACL,MAAAA,EACF,CACF,EACF;IACF;EACF;EAEA,IAAIU,GAAsC;AACxC,QAAIf;AACJ,QAAIA,IAAM,KAAK,MAAM,OAAO,IAAI,KAAKe,CAAG,GAAG;AACzC,UAAIV,GAAMjC;AACV,UAAI4B,EAAI,CAAC,MAAM,IACbK,KAAOL,EAAI,CAAC,GACZ5B,IAAO,YAAYiC;WACd;AAEL,YAAImE;AACJ;AACEA,cAAcxE,EAAI,CAAC,GACnBA,EAAI,CAAC,IAAI,KAAK,MAAM,OAAO,WAAW,KAAKA,EAAI,CAAC,CAAC,IAAI,CAAC,KAAK;eACpDwE,MAAgBxE,EAAI,CAAC;AAC9BK,YAAOL,EAAI,CAAC,GACRA,EAAI,CAAC,MAAM,SACb5B,IAAO,YAAY4B,EAAI,CAAC,IAExB5B,IAAO4B,EAAI,CAAC;MAEhB;AACA,aAAO,EACL,MAAM,QACN,KAAKA,EAAI,CAAC,GACV,MAAAK,GACA,MAAAjC,GACA,QAAQ,CACN,EACE,MAAM,QACN,KAAKiC,GACL,MAAAA,EACF,CACF,EACF;IACF;EACF;EAEA,WAAWU,GAAsC;AAC/C,QAAMf,IAAM,KAAK,MAAM,OAAO,KAAK,KAAKe,CAAG;AAC3C,QAAIf,GAAK;AACP,UAAMpB,IAAU,KAAK,MAAM,MAAM;AACjC,aAAO,EACL,MAAM,QACN,KAAKoB,EAAI,CAAC,GACV,MAAMA,EAAI,CAAC,GACX,SAAApB,EACF;IACF;EACF;AACF;ACl7BO,IAAM6F,IAAN,MAAMC,EAAuD;EAalE,YAAY5D,GAAuD;AAZnE;AACA;AACA;AAMO;AAEC;AAIN,SAAK,SAAS,CAAC,GACf,KAAK,OAAO,QAAQ,uBAAO,OAAO,IAAI,GACtC,KAAK,UAAUA,KAAWhI,GAC1B,KAAK,QAAQ,YAAY,KAAK,QAAQ,aAAa,IAAI+H,KACvD,KAAK,YAAY,KAAK,QAAQ,WAC9B,KAAK,UAAU,UAAU,KAAK,SAC9B,KAAK,UAAU,QAAQ,MACvB,KAAK,cAAc,CAAC,GACpB,KAAK,QAAQ,EACX,QAAQ,OACR,YAAY,OACZ,KAAK,KACP;AAEA,QAAMV,IAAQ,EACZ,OAAAzG,GACA,OAAOkE,EAAM,QACb,QAAQC,EAAO,OACjB;AAEI,SAAK,QAAQ,YACfsC,EAAM,QAAQvC,EAAM,UACpBuC,EAAM,SAAStC,EAAO,YACb,KAAK,QAAQ,QACtBsC,EAAM,QAAQvC,EAAM,KAChB,KAAK,QAAQ,SACfuC,EAAM,SAAStC,EAAO,SAEtBsC,EAAM,SAAStC,EAAO,MAG1B,KAAK,UAAU,QAAQsC;EACzB;EAKA,WAAW,QAAQ;AACjB,WAAO,EACL,OAAAvC,GACA,QAAAC,EACF;EACF;EAKA,OAAO,IAAoDkD,GAAaD,GAAuD;AAE7H,WADc,IAAI4D,EAAqC5D,CAAO,EACjD,IAAIC,CAAG;EACtB;EAKA,OAAO,UAA0DA,GAAaD,GAAuD;AAEnI,WADc,IAAI4D,EAAqC5D,CAAO,EACjD,aAAaC,CAAG;EAC/B;EAKA,IAAIA,GAAa;AACfA,QAAMA,EAAI,QAAQrH,EAAM,gBAAgB;CAAI,GAE5C,KAAK,YAAYqH,GAAK,KAAK,MAAM;AAEjC,aAAShC,IAAI,GAAGA,IAAI,KAAK,YAAY,QAAQA,KAAK;AAChD,UAAM4F,IAAO,KAAK,YAAY5F,CAAC;AAC/B,WAAK,aAAa4F,EAAK,KAAKA,EAAK,MAAM;IACzC;AACA,WAAA,KAAK,cAAc,CAAC,GAEb,KAAK;EACd;EAOA,YAAY5D,GAAaG,IAAkB,CAAC,GAAG0D,IAAuB,OAAO;AAK3E,SAJI,KAAK,QAAQ,aACf7D,IAAMA,EAAI,QAAQrH,EAAM,eAAe,MAAM,EAAE,QAAQA,EAAM,WAAW,EAAE,IAGrEqH,KAAK;AACV,UAAIT;AAEJ,UAAI,KAAK,QAAQ,YAAY,OAAO,KAAMuE,QACpCvE,IAAQuE,EAAa,KAAK,EAAE,OAAO,KAAK,GAAG9D,GAAKG,CAAM,MACxDH,IAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK,GACV,QAEF,KACR,EACC;AAIF,UAAIA,IAAQ,KAAK,UAAU,MAAMS,CAAG,GAAG;AACrCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,EAAO,GAAG,EAAE;AAC1BZ,UAAM,IAAI,WAAW,KAAKkB,MAAc,SAG1CA,EAAU,OAAO;IAEjBN,EAAO,KAAKZ,CAAK;AAEnB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,EAAO,GAAG,EAAE;AAE1BM,WAAW,SAAS,eAAeA,GAAW,SAAS,UACzDA,EAAU,QAAQA,EAAU,IAAI,SAAS;CAAI,IAAI,KAAK;KAAQlB,EAAM,KACpEkB,EAAU,QAAQ;IAAOlB,EAAM,MAC/B,KAAK,YAAY,GAAG,EAAE,EAAG,MAAMkB,EAAU,QAEzCN,EAAO,KAAKZ,CAAK;AAEnB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,OAAOS,CAAG,GAAG;AACtCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,QAAQS,CAAG,GAAG;AACvCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,GAAGS,CAAG,GAAG;AAClCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,WAAWS,CAAG,GAAG;AAC1CA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,IAAIS,CAAG,GAAG;AACnCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,EAAO,GAAG,EAAE;AAC1BM,WAAW,SAAS,eAAeA,GAAW,SAAS,UACzDA,EAAU,QAAQA,EAAU,IAAI,SAAS;CAAI,IAAI,KAAK;KAAQlB,EAAM,KACpEkB,EAAU,QAAQ;IAAOlB,EAAM,KAC/B,KAAK,YAAY,GAAG,EAAE,EAAG,MAAMkB,EAAU,QAC/B,KAAK,OAAO,MAAMlB,EAAM,GAAG,MACrC,KAAK,OAAO,MAAMA,EAAM,GAAG,IAAI,EAC7B,MAAMA,EAAM,MACZ,OAAOA,EAAM,MACf,GACAY,EAAO,KAAKZ,CAAK;AAEnB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,MAAMS,CAAG,GAAG;AACrCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,SAASS,CAAG,GAAG;AACxCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAIA,UAAIwE,IAAS/D;AACb,UAAI,KAAK,QAAQ,YAAY,YAAY;AACvC,YAAIgE,IAAa,IAAA,GACXC,IAAUjE,EAAI,MAAM,CAAC,GACvBkE;AACJ,aAAK,QAAQ,WAAW,WAAW,QAASC,OAAkB;AAC5DD,cAAYC,EAAc,KAAK,EAAE,OAAO,KAAK,GAAGF,CAAO,GACnD,OAAOC,KAAc,YAAYA,KAAa,MAChDF,IAAa,KAAK,IAAIA,GAAYE,CAAS;QAE/C,CAAC,GACGF,IAAa,IAAA,KAAYA,KAAc,MACzCD,IAAS/D,EAAI,UAAU,GAAGgE,IAAa,CAAC;MAE5C;AACA,UAAI,KAAK,MAAM,QAAQzE,IAAQ,KAAK,UAAU,UAAUwE,CAAM,IAAI;AAChE,YAAMtD,IAAYN,EAAO,GAAG,EAAE;AAC1B0D,aAAwBpD,GAAW,SAAS,eAC9CA,EAAU,QAAQA,EAAU,IAAI,SAAS;CAAI,IAAI,KAAK;KAAQlB,EAAM,KACpEkB,EAAU,QAAQ;IAAOlB,EAAM,MAC/B,KAAK,YAAY,IAAI,GACrB,KAAK,YAAY,GAAG,EAAE,EAAG,MAAMkB,EAAU,QAEzCN,EAAO,KAAKZ,CAAK,GAEnBsE,IAAuBE,EAAO,WAAW/D,EAAI,QAC7CA,IAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,EAAO,GAAG,EAAE;AAC1BM,WAAW,SAAS,UACtBA,EAAU,QAAQA,EAAU,IAAI,SAAS;CAAI,IAAI,KAAK;KAAQlB,EAAM,KACpEkB,EAAU,QAAQ;IAAOlB,EAAM,MAC/B,KAAK,YAAY,IAAI,GACrB,KAAK,YAAY,GAAG,EAAE,EAAG,MAAMkB,EAAU,QAEzCN,EAAO,KAAKZ,CAAK;AAEnB;MACF;AAEA,UAAIS,GAAK;AACP,YAAMoE,IAAS,4BAA4BpE,EAAI,WAAW,CAAC;AAC3D,YAAI,KAAK,QAAQ,QAAQ;AACvB,kBAAQ,MAAMoE,CAAM;AACpB;QACF,MACE,OAAM,IAAI,MAAMA,CAAM;MAE1B;IACF;AAEA,WAAA,KAAK,MAAM,MAAM,MACVjE;EACT;EAEA,OAAOH,GAAaG,IAAkB,CAAC,GAAG;AACxC,WAAA,KAAK,YAAY,KAAK,EAAE,KAAAH,GAAK,QAAAG,EAAO,CAAC,GAC9BA;EACT;EAKA,aAAaH,GAAaG,IAAkB,CAAC,GAAY;AAEvD,QAAI2C,IAAY9C,GACZtC,IAAgC;AAGpC,QAAI,KAAK,OAAO,OAAO;AACrB,UAAMkF,IAAQ,OAAO,KAAK,KAAK,OAAO,KAAK;AAC3C,UAAIA,EAAM,SAAS,EACjB,SAAQlF,IAAQ,KAAK,UAAU,MAAM,OAAO,cAAc,KAAKoF,CAAS,MAAM,OACxEF,GAAM,SAASlF,EAAM,CAAC,EAAE,MAAMA,EAAM,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC,MAClEoF,IAAYA,EAAU,MAAM,GAAGpF,EAAM,KAAK,IACtC,MAAM,IAAI,OAAOA,EAAM,CAAC,EAAE,SAAS,CAAC,IAAI,MACxCoF,EAAU,MAAM,KAAK,UAAU,MAAM,OAAO,cAAc,SAAS;IAI/E;AAGA,YAAQpF,IAAQ,KAAK,UAAU,MAAM,OAAO,eAAe,KAAKoF,CAAS,MAAM,OAC7EA,KAAYA,EAAU,MAAM,GAAGpF,EAAM,KAAK,IAAI,OAAOoF,EAAU,MAAM,KAAK,UAAU,MAAM,OAAO,eAAe,SAAS;AAI3H,QAAInF;AACJ,YAAQD,IAAQ,KAAK,UAAU,MAAM,OAAO,UAAU,KAAKoF,CAAS,MAAM,OACxEnF,KAASD,EAAM,CAAC,IAAIA,EAAM,CAAC,EAAE,SAAS,GACtCoF,IAAYA,EAAU,MAAM,GAAGpF,EAAM,QAAQC,CAAM,IAAI,MAAM,IAAI,OAAOD,EAAM,CAAC,EAAE,SAASC,IAAS,CAAC,IAAI,MAAMmF,EAAU,MAAM,KAAK,UAAU,MAAM,OAAO,UAAU,SAAS;AAI/KA,QAAY,KAAK,QAAQ,OAAO,cAAc,KAAK,EAAE,OAAO,KAAK,GAAGA,CAAS,KAAKA;AAElF,QAAIuB,IAAe,OACftB,IAAW;AACf,WAAO/C,KAAK;AACLqE,YACHtB,IAAW,KAEbsB,IAAe;AAEf,UAAI9E;AAGJ,UAAI,KAAK,QAAQ,YAAY,QAAQ,KAAMuE,QACrCvE,IAAQuE,EAAa,KAAK,EAAE,OAAO,KAAK,GAAG9D,GAAKG,CAAM,MACxDH,IAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK,GACV,QAEF,KACR,EACC;AAIF,UAAIA,IAAQ,KAAK,UAAU,OAAOS,CAAG,GAAG;AACtCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,IAAIS,CAAG,GAAG;AACnCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,QAAQS,GAAK,KAAK,OAAO,KAAK,GAAG;AAC1DA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,EAAO,GAAG,EAAE;AAC1BZ,UAAM,SAAS,UAAUkB,GAAW,SAAS,UAC/CA,EAAU,OAAOlB,EAAM,KACvBkB,EAAU,QAAQlB,EAAM,QAExBY,EAAO,KAAKZ,CAAK;AAEnB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,SAASS,GAAK8C,GAAWC,CAAQ,GAAG;AAC7D/C,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,SAASS,CAAG,GAAG;AACxCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,GAAGS,CAAG,GAAG;AAClCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,IAAIS,GAAK8C,GAAWC,CAAQ,GAAG;AACxD/C,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,SAASS,CAAG,GAAG;AACxCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAI,CAAC,KAAK,MAAM,WAAWA,IAAQ,KAAK,UAAU,IAAIS,CAAG,IAAI;AAC3DA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,EAAO,KAAKZ,CAAK;AACjB;MACF;AAIA,UAAIwE,IAAS/D;AACb,UAAI,KAAK,QAAQ,YAAY,aAAa;AACxC,YAAIgE,IAAa,IAAA,GACXC,IAAUjE,EAAI,MAAM,CAAC,GACvBkE;AACJ,aAAK,QAAQ,WAAW,YAAY,QAASC,OAAkB;AAC7DD,cAAYC,EAAc,KAAK,EAAE,OAAO,KAAK,GAAGF,CAAO,GACnD,OAAOC,KAAc,YAAYA,KAAa,MAChDF,IAAa,KAAK,IAAIA,GAAYE,CAAS;QAE/C,CAAC,GACGF,IAAa,IAAA,KAAYA,KAAc,MACzCD,IAAS/D,EAAI,UAAU,GAAGgE,IAAa,CAAC;MAE5C;AACA,UAAIzE,IAAQ,KAAK,UAAU,WAAWwE,CAAM,GAAG;AAC7C/D,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GAChCA,EAAM,IAAI,MAAM,EAAE,MAAM,QAC1BwD,IAAWxD,EAAM,IAAI,MAAM,EAAE,IAE/B8E,IAAe;AACf,YAAM5D,IAAYN,EAAO,GAAG,EAAE;AAC1BM,WAAW,SAAS,UACtBA,EAAU,OAAOlB,EAAM,KACvBkB,EAAU,QAAQlB,EAAM,QAExBY,EAAO,KAAKZ,CAAK;AAEnB;MACF;AAEA,UAAIS,GAAK;AACP,YAAMoE,IAAS,4BAA4BpE,EAAI,WAAW,CAAC;AAC3D,YAAI,KAAK,QAAQ,QAAQ;AACvB,kBAAQ,MAAMoE,CAAM;AACpB;QACF,MACE,OAAM,IAAI,MAAMA,CAAM;MAE1B;IACF;AAEA,WAAOjE;EACT;AACF;AC/cO,IAAMmE,IAAN,MAAgE;EAGrE,YAAYvE,GAAuD;AAFnE;AACA;AAEE,SAAK,UAAUA,KAAWhI;EAC5B;EAEA,MAAMwH,GAAqC;AACzC,WAAO;EACT;EAEA,KAAK,EAAE,MAAAD,GAAM,MAAAiF,GAAM,SAAA1G,EAAQ,GAAgC;AACzD,QAAM2G,KAAcD,KAAQ,IAAI,MAAM5L,EAAM,aAAa,IAAI,CAAC,GAExD8L,IAAOnF,EAAK,QAAQ3G,EAAM,eAAe,EAAE,IAAI;;AAErD,WAAK6L,IAME,gCACHtH,EAAmBsH,CAAU,IAC7B,QACC3G,IAAU4G,IAAOvH,EAAmBuH,GAAM,IAAI,KAC/C;IATK,iBACF5G,IAAU4G,IAAOvH,EAAmBuH,GAAM,IAAI,KAC/C;;EAQR;EAEA,WAAW,EAAE,QAAAtE,EAAO,GAAsC;AAExD,WAAO;EADM,KAAK,OAAO,MAAMA,CAAM,CACT;;EAC9B;EAEA,KAAK,EAAE,MAAAb,EAAK,GAA6C;AACvD,WAAOA;EACT;EAEA,IAAIC,GAAmC;AACrC,WAAO;EACT;EAEA,QAAQ,EAAE,QAAAY,GAAQ,OAAAuE,EAAM,GAAmC;AACzD,WAAO,KAAKA,CAAK,IAAI,KAAK,OAAO,YAAYvE,CAAM,CAAC,MAAMuE,CAAK;;EACjE;EAEA,GAAGnF,GAAkC;AACnC,WAAO;;EACT;EAEA,KAAKA,GAAoC;AACvC,QAAMoF,IAAUpF,EAAM,SAChBqF,IAAQrF,EAAM,OAEhBsF,IAAO;AACX,aAASC,IAAI,GAAGA,IAAIvF,EAAM,MAAM,QAAQuF,KAAK;AAC3C,UAAMjD,IAAOtC,EAAM,MAAMuF,CAAC;AAC1BD,WAAQ,KAAK,SAAShD,CAAI;IAC5B;AAEA,QAAMkD,IAAOJ,IAAU,OAAO,MACxBK,IAAaL,KAAWC,MAAU,IAAM,aAAaA,IAAQ,MAAO;AAC1E,WAAO,MAAMG,IAAOC,IAAY;IAAQH,IAAO,OAAOE,IAAO;;EAC/D;EAEA,SAASlD,GAAuC;AAC9C,WAAO,OAAO,KAAK,OAAO,MAAMA,EAAK,MAAM,CAAC;;EAC9C;EAEA,SAAS,EAAE,SAAAoD,EAAQ,GAAoC;AACrD,WAAO,aACFA,IAAU,gBAAgB,MAC3B;EACN;EAEA,UAAU,EAAE,QAAA9E,EAAO,GAAqC;AACtD,WAAO,MAAM,KAAK,OAAO,YAAYA,CAAM,CAAC;;EAC9C;EAEA,MAAMZ,GAAqC;AACzC,QAAI2F,IAAS,IAGT3C,IAAO;AACX,aAASuC,IAAI,GAAGA,IAAIvF,EAAM,OAAO,QAAQuF,IACvCvC,MAAQ,KAAK,UAAUhD,EAAM,OAAOuF,CAAC,CAAC;AAExCI,SAAU,KAAK,SAAS,EAAE,MAAM3C,EAAqB,CAAC;AAEtD,QAAIsC,IAAO;AACX,aAASC,IAAI,GAAGA,IAAIvF,EAAM,KAAK,QAAQuF,KAAK;AAC1C,UAAMrH,IAAM8B,EAAM,KAAKuF,CAAC;AAExBvC,UAAO;AACP,eAAS4C,IAAI,GAAGA,IAAI1H,EAAI,QAAQ0H,IAC9B5C,MAAQ,KAAK,UAAU9E,EAAI0H,CAAC,CAAC;AAG/BN,WAAQ,KAAK,SAAS,EAAE,MAAMtC,EAAqB,CAAC;IACtD;AACA,WAAIsC,MAAMA,IAAO,UAAUA,CAAI,aAExB;;IAEHK,IACA;IACAL,IACA;;EACN;EAEA,SAAS,EAAE,MAAAvF,EAAK,GAAkD;AAChE,WAAO;EAASA,CAAI;;EACtB;EAEA,UAAUC,GAAyC;AACjD,QAAM6F,IAAU,KAAK,OAAO,YAAY7F,EAAM,MAAM,GAC9CwF,IAAOxF,EAAM,SAAS,OAAO;AAInC,YAHYA,EAAM,QACd,IAAIwF,CAAI,WAAWxF,EAAM,KAAK,OAC9B,IAAIwF,CAAI,OACCK,IAAU,KAAKL,CAAI;;EAClC;EAKA,OAAO,EAAE,QAAA5E,EAAO,GAAkC;AAChD,WAAO,WAAW,KAAK,OAAO,YAAYA,CAAM,CAAC;EACnD;EAEA,GAAG,EAAE,QAAAA,EAAO,GAA8B;AACxC,WAAO,OAAO,KAAK,OAAO,YAAYA,CAAM,CAAC;EAC/C;EAEA,SAAS,EAAE,MAAAb,EAAK,GAAoC;AAClD,WAAO,SAASpC,EAAmBoC,GAAM,IAAI,CAAC;EAChD;EAEA,GAAGC,GAAkC;AACnC,WAAO;EACT;EAEA,IAAI,EAAE,QAAAY,EAAO,GAA+B;AAC1C,WAAO,QAAQ,KAAK,OAAO,YAAYA,CAAM,CAAC;EAChD;EAEA,KAAK,EAAE,MAAA9C,GAAM,OAAAgC,GAAO,QAAAc,EAAO,GAAgC;AACzD,QAAMb,IAAO,KAAK,OAAO,YAAYa,CAAM,GACrCkF,IAAYjI,EAASC,CAAI;AAC/B,QAAIgI,MAAc,KAChB,QAAO/F;AAETjC,QAAOgI;AACP,QAAIC,IAAM,cAAcjI,IAAO;AAC/B,WAAIgC,MACFiG,KAAO,aAAcpI,EAAmBmC,CAAK,IAAK,MAEpDiG,KAAO,MAAMhG,IAAO,QACbgG;EACT;EAEA,MAAM,EAAE,MAAAjI,GAAM,OAAAgC,GAAO,MAAAC,GAAM,QAAAa,EAAO,GAAiC;AAC7DA,UACFb,IAAO,KAAK,OAAO,YAAYa,GAAQ,KAAK,OAAO,YAAY;AAEjE,QAAMkF,IAAYjI,EAASC,CAAI;AAC/B,QAAIgI,MAAc,KAChB,QAAOnI,EAAmBoC,CAAI;AAEhCjC,QAAOgI;AAEP,QAAIC,IAAM,aAAajI,CAAI,UAAUH,EAAmBoC,CAAI,CAAC;AAC7D,WAAID,MACFiG,KAAO,WAAWpI,EAAmBmC,CAAK,CAAC,MAE7CiG,KAAO,KACAA;EACT;EAEA,KAAK/F,GAAoD;AACvD,WAAO,YAAYA,KAASA,EAAM,SAC9B,KAAK,OAAO,YAAYA,EAAM,MAAM,IACnC,aAAaA,KAASA,EAAM,UAAUA,EAAM,OAAyBrC,EAAmBqC,EAAM,IAAI;EACzG;AACF;AC/LO,IAAMgG,IAAN,MAA6C;EAElD,OAAO,EAAE,MAAAjG,EAAK,GAAkC;AAC9C,WAAOA;EACT;EAEA,GAAG,EAAE,MAAAA,EAAK,GAA8B;AACtC,WAAOA;EACT;EAEA,SAAS,EAAE,MAAAA,EAAK,GAAoC;AAClD,WAAOA;EACT;EAEA,IAAI,EAAE,MAAAA,EAAK,GAA+B;AACxC,WAAOA;EACT;EAEA,KAAK,EAAE,MAAAA,EAAK,GAA6C;AACvD,WAAOA;EACT;EAEA,KAAK,EAAE,MAAAA,EAAK,GAA6D;AACvE,WAAOA;EACT;EAEA,KAAK,EAAE,MAAAA,EAAK,GAAgC;AAC1C,WAAO,KAAKA;EACd;EAEA,MAAM,EAAE,MAAAA,EAAK,GAAiC;AAC5C,WAAO,KAAKA;EACd;EAEA,KAAqB;AACnB,WAAO;EACT;EAEA,SAAS,EAAE,KAAAJ,EAAI,GAAoC;AACjD,WAAOA;EACT;AACF;ACtCO,IAAMsG,IAAN,MAAMC,GAAwD;EAInE,YAAY1F,GAAuD;AAHnE;AACA;AACA;AAEE,SAAK,UAAUA,KAAWhI,GAC1B,KAAK,QAAQ,WAAW,KAAK,QAAQ,YAAY,IAAIuM,KACrD,KAAK,WAAW,KAAK,QAAQ,UAC7B,KAAK,SAAS,UAAU,KAAK,SAC7B,KAAK,SAAS,SAAS,MACvB,KAAK,eAAe,IAAIiB;EAC1B;EAKA,OAAO,MAAsDpF,GAAiBJ,GAAuD;AAEnI,WADe,IAAI0F,GAAsC1F,CAAO,EAClD,MAAMI,CAAM;EAC5B;EAKA,OAAO,YAA4DA,GAAiBJ,GAAuD;AAEzI,WADe,IAAI0F,GAAsC1F,CAAO,EAClD,YAAYI,CAAM;EAClC;EAKA,MAAMA,GAA+B;AACnC,QAAImF,IAAM;AAEV,aAAStH,IAAI,GAAGA,IAAImC,EAAO,QAAQnC,KAAK;AACtC,UAAM0H,IAAWvF,EAAOnC,CAAC;AAGzB,UAAI,KAAK,QAAQ,YAAY,YAAY0H,EAAS,IAAI,GAAG;AACvD,YAAMC,IAAeD,GACfE,IAAM,KAAK,QAAQ,WAAW,UAAUD,EAAa,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,GAAGA,CAAY;AACpG,YAAIC,MAAQ,SAAS,CAAC,CAAC,SAAS,MAAM,WAAW,QAAQ,SAAS,cAAc,QAAQ,QAAQ,OAAO,aAAa,MAAM,EAAE,SAASD,EAAa,IAAI,GAAG;AACvJL,eAAOM,KAAO;AACd;QACF;MACF;AAEA,UAAMrG,IAAQmG;AAEd,cAAQnG,EAAM,MAAM;QAClB,KAAK,SAAS;AACZ+F,eAAO,KAAK,SAAS,MAAM/F,CAAK;AAChC;QACF;QACA,KAAK,MAAM;AACT+F,eAAO,KAAK,SAAS,GAAG/F,CAAK;AAC7B;QACF;QACA,KAAK,WAAW;AACd+F,eAAO,KAAK,SAAS,QAAQ/F,CAAK;AAClC;QACF;QACA,KAAK,QAAQ;AACX+F,eAAO,KAAK,SAAS,KAAK/F,CAAK;AAC/B;QACF;QACA,KAAK,SAAS;AACZ+F,eAAO,KAAK,SAAS,MAAM/F,CAAK;AAChC;QACF;QACA,KAAK,cAAc;AACjB+F,eAAO,KAAK,SAAS,WAAW/F,CAAK;AACrC;QACF;QACA,KAAK,QAAQ;AACX+F,eAAO,KAAK,SAAS,KAAK/F,CAAK;AAC/B;QACF;QACA,KAAK,YAAY;AACf+F,eAAO,KAAK,SAAS,SAAS/F,CAAK;AACnC;QACF;QACA,KAAK,QAAQ;AACX+F,eAAO,KAAK,SAAS,KAAK/F,CAAK;AAC/B;QACF;QACA,KAAK,OAAO;AACV+F,eAAO,KAAK,SAAS,IAAI/F,CAAK;AAC9B;QACF;QACA,KAAK,aAAa;AAChB+F,eAAO,KAAK,SAAS,UAAU/F,CAAK;AACpC;QACF;QACA,KAAK,QAAQ;AACX+F,eAAO,KAAK,SAAS,KAAK/F,CAAK;AAC/B;QACF;QAEA,SAAS;AACP,cAAM6E,IAAS,iBAAiB7E,EAAM,OAAO;AAC7C,cAAI,KAAK,QAAQ,OACf,QAAA,QAAQ,MAAM6E,CAAM,GACb;AAEP,gBAAM,IAAI,MAAMA,CAAM;QAE1B;MACF;IACF;AAEA,WAAOkB;EACT;EAKA,YAAYnF,GAAiB0F,IAAoF,KAAK,UAAwB;AAC5I,QAAIP,IAAM;AAEV,aAAStH,IAAI,GAAGA,IAAImC,EAAO,QAAQnC,KAAK;AACtC,UAAM0H,IAAWvF,EAAOnC,CAAC;AAGzB,UAAI,KAAK,QAAQ,YAAY,YAAY0H,EAAS,IAAI,GAAG;AACvD,YAAME,IAAM,KAAK,QAAQ,WAAW,UAAUF,EAAS,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,GAAGA,CAAQ;AAC5F,YAAIE,MAAQ,SAAS,CAAC,CAAC,UAAU,QAAQ,QAAQ,SAAS,UAAU,MAAM,YAAY,MAAM,OAAO,MAAM,EAAE,SAASF,EAAS,IAAI,GAAG;AAClIJ,eAAOM,KAAO;AACd;QACF;MACF;AAEA,UAAMrG,IAAQmG;AAEd,cAAQnG,EAAM,MAAM;QAClB,KAAK,UAAU;AACb+F,eAAOO,EAAS,KAAKtG,CAAK;AAC1B;QACF;QACA,KAAK,QAAQ;AACX+F,eAAOO,EAAS,KAAKtG,CAAK;AAC1B;QACF;QACA,KAAK,QAAQ;AACX+F,eAAOO,EAAS,KAAKtG,CAAK;AAC1B;QACF;QACA,KAAK,SAAS;AACZ+F,eAAOO,EAAS,MAAMtG,CAAK;AAC3B;QACF;QACA,KAAK,YAAY;AACf+F,eAAOO,EAAS,SAAStG,CAAK;AAC9B;QACF;QACA,KAAK,UAAU;AACb+F,eAAOO,EAAS,OAAOtG,CAAK;AAC5B;QACF;QACA,KAAK,MAAM;AACT+F,eAAOO,EAAS,GAAGtG,CAAK;AACxB;QACF;QACA,KAAK,YAAY;AACf+F,eAAOO,EAAS,SAAStG,CAAK;AAC9B;QACF;QACA,KAAK,MAAM;AACT+F,eAAOO,EAAS,GAAGtG,CAAK;AACxB;QACF;QACA,KAAK,OAAO;AACV+F,eAAOO,EAAS,IAAItG,CAAK;AACzB;QACF;QACA,KAAK,QAAQ;AACX+F,eAAOO,EAAS,KAAKtG,CAAK;AAC1B;QACF;QACA,SAAS;AACP,cAAM6E,IAAS,iBAAiB7E,EAAM,OAAO;AAC7C,cAAI,KAAK,QAAQ,OACf,QAAA,QAAQ,MAAM6E,CAAM,GACb;AAEP,gBAAM,IAAI,MAAMA,CAAM;QAE1B;MACF;IACF;AACA,WAAOkB;EACT;AACF;;ACpMO,IAAMQ,KAAN,WAA6D;EAIlE,YAAY/F,GAAuD;AAHnE;AACA;AAGE,SAAK,UAAUA,KAAWhI;EAC5B;EAkBA,WAAWgO,GAAkB;AAC3B,WAAOA;EACT;EAKA,YAAYhM,GAAoB;AAC9B,WAAOA;EACT;EAKA,iBAAiBoG,GAA8B;AAC7C,WAAOA;EACT;EAKA,aAAaH,GAAa;AACxB,WAAOA;EACT;EAKA,eAAe;AACb,WAAO,KAAK,QAAQ0D,EAAO,MAAMA,EAAO;EAC1C;EAKA,gBAAgB;AACd,WAAO,KAAK,QAAQ8B,EAAQ,QAAsCA,EAAQ;EAC5E;AACF,GAtDE,cARK,IAQE,oBAAmB,oBAAI,IAAI,CAChC,cACA,eACA,oBACA,cACF,CAAC,IAED,cAfK,IAeE,gCAA+B,oBAAI,IAAI,CAC5C,cACA,eACA,kBACF,CAAC,IAnBI;ACUA,IAAMQ,IAAN,MAA6D;EAclE,eAAeC,GAAuD;AAbtE,oCAAWnO,EAA2C;AACtD,mCAAU,KAAK;AAEf,iCAAQ,KAAK,cAAc,IAAI;AAC/B,uCAAc,KAAK,cAAc,KAAK;AAEtC,kCAAS0N;AACT,oCAAWlB;AACX,wCAAeiB;AACf,iCAAQ7B;AACR,qCAAY5D;AACZ,iCAAQgG;AAGN,SAAK,IAAI,GAAGG,CAAI;EAClB;EAKA,WAAW9F,GAA8B+F,GAA2D;AAClG,QAAIC,IAAyB,CAAC;AAC9B,aAAW5G,KAASY,EAElB,SADAgG,IAASA,EAAO,OAAOD,EAAS,KAAK,MAAM3G,CAAK,CAAC,GACzCA,EAAM,MAAM;MAClB,KAAK,SAAS;AACZ,YAAM6G,IAAa7G;AACnB,iBAAWgD,KAAQ6D,EAAW,OAC5BD,KAASA,EAAO,OAAO,KAAK,WAAW5D,EAAK,QAAQ2D,CAAQ,CAAC;AAE/D,iBAAWzI,KAAO2I,EAAW,KAC3B,UAAW7D,KAAQ9E,EACjB0I,KAASA,EAAO,OAAO,KAAK,WAAW5D,EAAK,QAAQ2D,CAAQ,CAAC;AAGjE;MACF;MACA,KAAK,QAAQ;AACX,YAAMG,IAAY9G;AAClB4G,YAASA,EAAO,OAAO,KAAK,WAAWE,EAAU,OAAOH,CAAQ,CAAC;AACjE;MACF;MACA,SAAS;AACP,YAAMP,IAAepG;AACjB,aAAK,SAAS,YAAY,cAAcoG,EAAa,IAAI,IAC3D,KAAK,SAAS,WAAW,YAAYA,EAAa,IAAI,EAAE,QAASW,OAAgB;AAC/E,cAAMnG,IAASwF,EAAaW,CAAW,EAAE,KAAK,IAAA,CAAQ;AACtDH,cAASA,EAAO,OAAO,KAAK,WAAWhG,GAAQ+F,CAAQ,CAAC;QAC1D,CAAC,IACQP,EAAa,WACtBQ,IAASA,EAAO,OAAO,KAAK,WAAWR,EAAa,QAAQO,CAAQ,CAAC;MAEzE;IACF;AAEF,WAAOC;EACT;EAEA,OAAOF,GAAuD;AAC5D,QAAMM,IAAwE,KAAK,SAAS,cAAc,EAAE,WAAW,CAAC,GAAG,aAAa,CAAC,EAAE;AAE3I,WAAAN,EAAK,QAASO,OAAS;AAErB,UAAMC,IAAO,EAAE,GAAGD,EAAK;AA4DvB,UAzDAC,EAAK,QAAQ,KAAK,SAAS,SAASA,EAAK,SAAS,OAG9CD,EAAK,eACPA,EAAK,WAAW,QAASE,OAAQ;AAC/B,YAAI,CAACA,EAAI,KACP,OAAM,IAAI,MAAM,yBAAyB;AAE3C,YAAI,cAAcA,GAAK;AACrB,cAAMC,IAAeJ,EAAW,UAAUG,EAAI,IAAI;AAC9CC,cAEFJ,EAAW,UAAUG,EAAI,IAAI,IAAI,YAAYT,GAAM;AACjD,gBAAIL,IAAMc,EAAI,SAAS,MAAM,MAAMT,CAAI;AACvC,mBAAIL,MAAQ,UACVA,IAAMe,EAAa,MAAM,MAAMV,CAAI,IAE9BL;UACT,IAEAW,EAAW,UAAUG,EAAI,IAAI,IAAIA,EAAI;QAEzC;AACA,YAAI,eAAeA,GAAK;AACtB,cAAI,CAACA,EAAI,SAAUA,EAAI,UAAU,WAAWA,EAAI,UAAU,SACxD,OAAM,IAAI,MAAM,6CAA6C;AAE/D,cAAME,IAAWL,EAAWG,EAAI,KAAK;AACjCE,cACFA,EAAS,QAAQF,EAAI,SAAS,IAE9BH,EAAWG,EAAI,KAAK,IAAI,CAACA,EAAI,SAAS,GAEpCA,EAAI,UACFA,EAAI,UAAU,UACZH,EAAW,aACbA,EAAW,WAAW,KAAKG,EAAI,KAAK,IAEpCH,EAAW,aAAa,CAACG,EAAI,KAAK,IAE3BA,EAAI,UAAU,aACnBH,EAAW,cACbA,EAAW,YAAY,KAAKG,EAAI,KAAK,IAErCH,EAAW,cAAc,CAACG,EAAI,KAAK;QAI3C;AACI,yBAAiBA,KAAOA,EAAI,gBAC9BH,EAAW,YAAYG,EAAI,IAAI,IAAIA,EAAI;MAE3C,CAAC,GACDD,EAAK,aAAaF,IAIhBC,EAAK,UAAU;AACjB,YAAMX,IAAW,KAAK,SAAS,YAAY,IAAIvB,EAAwC,KAAK,QAAQ;AACpG,iBAAWuC,KAAQL,EAAK,UAAU;AAChC,cAAI,EAAEK,KAAQhB,GACZ,OAAM,IAAI,MAAM,aAAagB,CAAI,kBAAkB;AAErD,cAAI,CAAC,WAAW,QAAQ,EAAE,SAASA,CAAI,EAErC;AAEF,cAAMC,IAAeD,GACfE,IAAeP,EAAK,SAASM,CAAY,GACzCH,IAAed,EAASiB,CAAY;AAE1CjB,YAASiB,CAAY,IAAI,IAAIb,MAAoB;AAC/C,gBAAIL,IAAMmB,EAAa,MAAMlB,GAAUI,CAAI;AAC3C,mBAAIL,MAAQ,UACVA,IAAMe,EAAa,MAAMd,GAAUI,CAAI,IAEjCL,KAAO;UACjB;QACF;AACAa,UAAK,WAAWZ;MAClB;AACA,UAAIW,EAAK,WAAW;AAClB,YAAMQ,IAAY,KAAK,SAAS,aAAa,IAAIlH,EAAyC,KAAK,QAAQ;AACvG,iBAAW+G,KAAQL,EAAK,WAAW;AACjC,cAAI,EAAEK,KAAQG,GACZ,OAAM,IAAI,MAAM,cAAcH,CAAI,kBAAkB;AAEtD,cAAI,CAAC,WAAW,SAAS,OAAO,EAAE,SAASA,CAAI,EAE7C;AAEF,cAAMI,IAAgBJ,GAChBK,IAAgBV,EAAK,UAAUS,CAAa,GAC5CE,IAAgBH,EAAUC,CAAa;AAG7CD,YAAUC,CAAa,IAAI,IAAIhB,MAAoB;AACjD,gBAAIL,IAAMsB,EAAc,MAAMF,GAAWf,CAAI;AAC7C,mBAAIL,MAAQ,UACVA,IAAMuB,EAAc,MAAMH,GAAWf,CAAI,IAEpCL;UACT;QACF;AACAa,UAAK,YAAYO;MACnB;AAGA,UAAIR,EAAK,OAAO;AACd,YAAMY,IAAQ,KAAK,SAAS,SAAS,IAAItB;AACzC,iBAAWe,KAAQL,EAAK,OAAO;AAC7B,cAAI,EAAEK,KAAQO,GACZ,OAAM,IAAI,MAAM,SAASP,CAAI,kBAAkB;AAEjD,cAAI,CAAC,WAAW,OAAO,EAAE,SAASA,CAAI,EAEpC;AAEF,cAAMQ,IAAYR,GACZS,IAAYd,EAAK,MAAMa,CAAS,GAChCE,IAAWH,EAAMC,CAAS;AAC5BvB,YAAO,iBAAiB,IAAIe,CAAI,IAElCO,EAAMC,CAAS,IAAKG,OAAiB;AACnC,gBAAI,KAAK,SAAS,SAAS1B,EAAO,6BAA6B,IAAIe,CAAI,EACrE,SAAQ,YAAW;AACjB,kBAAMjB,IAAM,MAAM0B,EAAU,KAAKF,GAAOI,CAAG;AAC3C,qBAAOD,EAAS,KAAKH,GAAOxB,CAAG;YACjC,GAAG;AAGL,gBAAMA,IAAM0B,EAAU,KAAKF,GAAOI,CAAG;AACrC,mBAAOD,EAAS,KAAKH,GAAOxB,CAAG;UACjC,IAGAwB,EAAMC,CAAS,IAAI,IAAIpB,MAAoB;AACzC,gBAAI,KAAK,SAAS,MAChB,SAAQ,YAAW;AACjB,kBAAIL,IAAM,MAAM0B,EAAU,MAAMF,GAAOnB,CAAI;AAC3C,qBAAIL,MAAQ,UACVA,IAAM,MAAM2B,EAAS,MAAMH,GAAOnB,CAAI,IAEjCL;YACT,GAAG;AAGL,gBAAIA,IAAM0B,EAAU,MAAMF,GAAOnB,CAAI;AACrC,mBAAIL,MAAQ,UACVA,IAAM2B,EAAS,MAAMH,GAAOnB,CAAI,IAE3BL;UACT;QAEJ;AACAa,UAAK,QAAQW;MACf;AAGA,UAAIZ,EAAK,YAAY;AACnB,YAAMiB,IAAa,KAAK,SAAS,YAC3BC,IAAiBlB,EAAK;AAC5BC,UAAK,aAAa,SAASlH,GAAO;AAChC,cAAI4G,IAAyB,CAAC;AAC9B,iBAAAA,EAAO,KAAKuB,EAAe,KAAK,MAAMnI,CAAK,CAAC,GACxCkI,MACFtB,IAASA,EAAO,OAAOsB,EAAW,KAAK,MAAMlI,CAAK,CAAC,IAE9C4G;QACT;MACF;AAEA,WAAK,WAAW,EAAE,GAAG,KAAK,UAAU,GAAGM,EAAK;IAC9C,CAAC,GAEM;EACT;EAEA,WAAWpO,GAAkD;AAC3D,WAAA,KAAK,WAAW,EAAE,GAAG,KAAK,UAAU,GAAGA,EAAI,GACpC;EACT;EAEA,MAAM2H,GAAaD,GAAuD;AACxE,WAAO2D,EAAO,IAAI1D,GAAKD,KAAW,KAAK,QAAQ;EACjD;EAEA,OAAOI,GAAiBJ,GAAuD;AAC7E,WAAOyF,EAAQ,MAAoCrF,GAAQJ,KAAW,KAAK,QAAQ;EACrF;EAEQ,cAAc4H,GAAoB;AAuExC,WA/D+B,CAAC3H,GAAaD,MAAsE;AACjH,UAAM6H,IAAU,EAAE,GAAG7H,EAAQ,GACvB1H,IAAM,EAAE,GAAG,KAAK,UAAU,GAAGuP,EAAQ,GAErCC,IAAa,KAAK,QAAQ,CAAC,CAACxP,EAAI,QAAQ,CAAC,CAACA,EAAI,KAAK;AAGzD,UAAI,KAAK,SAAS,UAAU,QAAQuP,EAAQ,UAAU,MACpD,QAAOC,EAAW,IAAI,MAAM,oIAAoI,CAAC;AAInK,UAAI,OAAO7H,IAAQ,OAAeA,MAAQ,KACxC,QAAO6H,EAAW,IAAI,MAAM,gDAAgD,CAAC;AAE/E,UAAI,OAAO7H,KAAQ,SACjB,QAAO6H,EAAW,IAAI,MAAM,0CACxB,OAAO,UAAU,SAAS,KAAK7H,CAAG,IAAI,mBAAmB,CAAC;AAQhE,UALI3H,EAAI,UACNA,EAAI,MAAM,UAAUA,GACpBA,EAAI,MAAM,QAAQsP,IAGhBtP,EAAI,MACN,SAAQ,YAAW;AACjB,YAAMyP,IAAezP,EAAI,QAAQ,MAAMA,EAAI,MAAM,WAAW2H,CAAG,IAAIA,GAE7DG,IAAS,OADD9H,EAAI,QAAQ,MAAMA,EAAI,MAAM,aAAa,IAAKsP,IAAYjE,EAAO,MAAMA,EAAO,WACjEoE,GAAczP,CAAG,GACtC0P,IAAkB1P,EAAI,QAAQ,MAAMA,EAAI,MAAM,iBAAiB8H,CAAM,IAAIA;AAC3E9H,UAAI,cACN,MAAM,QAAQ,IAAI,KAAK,WAAW0P,GAAiB1P,EAAI,UAAU,CAAC;AAGpE,YAAM0B,IAAO,OADE1B,EAAI,QAAQ,MAAMA,EAAI,MAAM,cAAc,IAAKsP,IAAYnC,EAAQ,QAAQA,EAAQ,aACxEuC,GAAiB1P,CAAG;AAC9C,eAAOA,EAAI,QAAQ,MAAMA,EAAI,MAAM,YAAY0B,CAAI,IAAIA;MACzD,GAAG,EAAE,MAAM8N,CAAU;AAGvB,UAAI;AACExP,UAAI,UACN2H,IAAM3H,EAAI,MAAM,WAAW2H,CAAG;AAGhC,YAAIG,KADU9H,EAAI,QAAQA,EAAI,MAAM,aAAa,IAAKsP,IAAYjE,EAAO,MAAMA,EAAO,WACnE1D,GAAK3H,CAAG;AACvBA,UAAI,UACN8H,IAAS9H,EAAI,MAAM,iBAAiB8H,CAAM,IAExC9H,EAAI,cACN,KAAK,WAAW8H,GAAQ9H,EAAI,UAAU;AAGxC,YAAI0B,KADW1B,EAAI,QAAQA,EAAI,MAAM,cAAc,IAAKsP,IAAYnC,EAAQ,QAAQA,EAAQ,aAC1ErF,GAAQ9H,CAAG;AAC7B,eAAIA,EAAI,UACN0B,IAAO1B,EAAI,MAAM,YAAY0B,CAAI,IAE5BA;MACT,SAAQiO,GAAG;AACT,eAAOH,EAAWG,CAAU;MAC9B;IACF;EAGF;EAEQ,QAAQC,GAAiBC,GAAgB;AAC/C,WAAQF,OAAuC;AAG7C,UAFAA,EAAE,WAAW;4DAETC,GAAQ;AACV,YAAME,IAAM,mCACRjL,EAAmB8K,EAAE,UAAU,IAAI,IAAI,IACvC;AACJ,eAAIE,IACK,QAAQ,QAAQC,CAAG,IAErBA;MACT;AAEA,UAAID,EACF,QAAO,QAAQ,OAAOF,CAAC;AAEzB,YAAMA;IACR;EACF;AACF;AChWA,IAAMI,IAAiB,IAAIpC;AAqBpB,SAASqC,EAAOrI,IAAa3H,GAAsD;AACxF,SAAO+P,EAAe,MAAMpI,IAAK3H,CAAG;AACtC;AAOAgQ,EAAO,UACLA,EAAO,aAAa,SAAStI,IAAwB;AACnD,SAAAqI,EAAe,WAAWrI,EAAO,GACjCsI,EAAO,WAAWD,EAAe,UACjCpQ,EAAeqQ,EAAO,QAAQ,GACvBA;AACT;AAKFA,EAAO,cAAcvQ;AAErBuQ,EAAO,WAAWtQ;AAMlBsQ,EAAO,MAAM,YAAYpC,IAAyB;AAChD,SAAAmC,EAAe,IAAI,GAAGnC,EAAI,GAC1BoC,EAAO,WAAWD,EAAe,UACjCpQ,EAAeqQ,EAAO,QAAQ,GACvBA;AACT;AAMAA,EAAO,aAAa,SAASlI,IAA8B+F,GAA2D;AACpH,SAAOkC,EAAe,WAAWjI,IAAQ+F,CAAQ;AACnD;AASAmC,EAAO,cAAcD,EAAe;AAKpCC,EAAO,SAAS7C;AAChB6C,EAAO,SAAS7C,EAAQ;AACxB6C,EAAO,WAAW/D;AAClB+D,EAAO,eAAe9C;AACtB8C,EAAO,QAAQ3E;AACf2E,EAAO,QAAQ3E,EAAO;AACtB2E,EAAO,YAAYvI;AACnBuI,EAAO,QAAQvC;AACfuC,EAAO,QAAQA;AAER,IAAMtI,KAAUsI,EAAO;AAAvB,IACMC,KAAaD,EAAO;AAD1B,IAEME,KAAMF,EAAO;AAFnB,IAGMZ,KAAaY,EAAO;AAH1B,IAIMG,KAAcH,EAAO;AAJ3B,IAMMI,KAASC,EAAQ;AANvB,IAOMC,KAAQC,EAAO;;;ArB7G5B,SAAS,QAAAC,cAAiC;ACA1C,SAAS,QAAAA,OAAM,WAAAC,gBAAoC;ACAnD,SAAS,QAAAD,aAAiC;APkB1C,IAAM,WAAWA;AAEjB,IAAM,WAAWA;AAEjB,SAAS,WAAW,GAAgB;AAClC,QAAM,KAAK,EAAE;AACb,KAAG,MAAM,SAAS;AAClB,KAAG,MAAM,SAAS,GAAG,KAAK,IAAI,GAAG,cAAc,GAAG,CAAC;AACrD;AAEO,SAAS,gBAAgB,OAAuC;AACrE,QAAM,UAAU,MAAM,MAAM,KAAK,EAAE,SAAS,KAAK,CAAC,MAAM;AACxD,QAAM,cAAc,MAAM,cAAc,oBAAoB;AAC5D,QAAM,eAAe,MAAM,cAAc,MAAM,SAAS,MAAM;AAE9D,QAAM,cAAc,CAAC,MAAa;AAChC,eAAW,CAAC;AACZ,UAAM,QAAQ,CAAC;EACjB;AAEA,SAAOA;MAEH,MAAM,aAAa,UAAU,CAAC,MAAM,cAChCA;YACE,MAAM,YAAY;IAClB,CAAC,MAAMA,uBAAsB,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC;EACjE,CAAC;kBAED,OACN;MACE,MAAM,mBAAmB,OAAO;;;;;iBAKrB,MAAM,KAAK;iBACX,WAAW;mBACT,MAAM,SAAS;4BACN,MAAM,kBAAkB;0BAC1B,MAAM,gBAAgB;;;QAGxC,MAAM,oBAAoB,OAAO;;;oBAGrB,CAAC,WAAW,CAAC,MAAM,WAAW;iBACjC,YAAY;qBACR,WAAW;SACvB,MAAM,cAAc,WAAW,QAAQ;;;AAGhD;AEnEO,SAAS,YAAY,KAA0B;AACpD,QAAM,QAAQ,IAAI,WAAW,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,IAAI,GAAG,MAAM,EAAE,EAAE,KAAK,GAAG,KAAK;AAC/E,SAAO,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,MAAM,IAAI,IAAI,MAAM,IAAI,KAAK;AAC3E;AEFA,IAAM,SAAS,IAAI,EAAO,EAAE,OAAO,OAAO,KAAK,MAAM,QAAQ,KAAK,CAAC;AAEnE,SAAS,WAAW,GAAmB;AACrC,SAAO,EACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM;AACzB;AAEA,IAAM,eAAe;EACnB,KAAK,EAAE,MAAAE,OAAM,KAAK,GAA4C;AAC5D,UAAM,WAAW,OAAO,WAAW,IAAI,IAAI;AAC3C,UAAM,WAAW,WAAW,oBAAoB,QAAQ,MAAM;AAC9D,WACE,0BAA0B,WAAW,eAAe,QAAQ,MAAM,EAAE,cACvD,QAAQ,IAAIA,KAAI;;EAGjC;AACF;AAEA,OAAO,IAAI,EAAE,UAAU,aAAa,CAAC;AAE9B,SAAS,eAAeA,OAAsB;AACnD,MAAI,CAACA,MAAM,QAAO;AAClB,QAAM,MAAM,OAAO,MAAMA,KAAI;AAC7B,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,SAAO,OAAU,SAAS,KAAK;IAC7B,UAAU,CAAC,sBAAsB,aAAa,kBAAkB;EAClE,CAAC;AACH;ACxBA,IAAM,WAAWF;AAEjB,IAAM,iBAAiBA;AAEhB,SAAS,gBAAgB,OAAuC;AACrE,QAAM,iBAAiB,MAAM,SAAS,eAAe,MAAM;AAC3D,SAAOA;;;iBAGQ,MAAM,MAAM,OAAO,MAAM,OAAO,CAAC;;;SAGzC,QAAQ;QAET,iBACIA;qBACS,MAAM,MAAM,aAAc,MAAM,SAAS,CAAC;;;aAGlD,cAAc,cACf,EACN;;;AAGN;ACvBA,IAAM,cAAcA;AAEpB,IAAM,YAAYA;AAElB,IAAM,YAAYA;AAElB,IAAM,WAAWA;AAEjB,SAAS,WAAW,QAAgC;AAClD,UAAQ,QAAQ;IACd,KAAK;IACL,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT;AACE,aAAO;EACX;AACF;AAEO,SAAS,mBAAmB,OAA0C;AAC3E,QAAM,EAAE,UAAU,WAAW,SAAS,KAAK,IAAI;AAC/C,QAAM,cAAc,aAAa,SAAS;AAC1C,QAAM,WAAW,SAAS,WAAW,oBAAoB,SAAS,WAAW;AAE7E,SAAOA;6CACoC,QAAQ;;iDAEJ,SAAS,MAAM,IAAI,WAAW,SAAS,MAAM,CAAC;kCAC7D,WAAW;;QAGrC,SAAS,WAAW,WAAW,SAAS,QACpCA,gCAA+B,SAAS,KAAK,WAC7CC,QACN;QAEE,SAAS,WAAW,YAChBD;6CACiC,OAAO,wBAAwB,WAAW;0CAC7C,IAAI,qBAAqB,WAAW;oBAElEC,QACN;;;AAGN;AH9BA,IAAM,gBAAgBD;AAEtB,SAAS,oBAAoB,SAAsC;AACjE,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAOA,8BAA6B,QAAQ,OAAO;EACrD;AACA,SAAOA,mCAAkC,WAAW,eAAe,QAAQ,OAAO,CAAC,CAAC;AACtF;AAEO,SAAS,oBAAoB,OAA2C;AAC7E,QAAM,EAAE,SAAS,YAAY,cAAc,IAAI;AAC/C,QAAM,SAAS,QAAQ,SAAS;AAEhC,QAAM,YAAY,QAAQ,WAAW,IAAI,CAAC,OAAO;AAC/C,UAAM,UAAU,MAAM,MAAM,cAAc,GAAG,EAAE;AAC/C,UAAM,OAAO,MAAM,MAAM,WAAW,GAAG,EAAE;AACzC,UAAM,iBAAiB,gBAAgB,GAAG,IAAI;AAC9C,QAAI,gBAAgB;AAClB,aAAO,eAAe,OAAO;QAC3B,UAAU;QACV,OAAO,GAAG;QACV;QACA;MACF,CAAC;IACH;AACA,WAAO,mBAAmB;MACxB,UAAU;MACV,WAAW,aAAa,GAAG,IAAI;MAC/B;MACA;IACF,CAAC;EACH,CAAC;AAED,SAAOA;wCAC+B,QAAQ,IAAI;QAC5C,CAAC,SAAS,gBAAgBC,QAAO;;UAE/B,oBAAoB,OAAO,CAAC;UAC5B,QAAQ,WAAW,UAAUD,qDAAoDC,QAAO;UACxF,aAAaA,QAAO;UACpB,gBAAgB;IAChB,WAAW,QAAQ;IACnB,SAAS,QAAQ;IACjB,MAAM,QAAQ;IACd,QAAQ,MAAM;IACd,cAAc,SAAS,SAAY,MAAM;EAC3C,CAAC,CAAC;;;;AAIV;AI7EO,SAAS,wBAAwC;AACtD,SAAOD;;;;;AAKT;ANeO,SAAS,kBAAkB,OAAyC;AACzE,MAAI,MAAM,SAAS,WAAW,KAAK,CAAC,MAAM,UAAU;AAClD,WAAOA;QACH,MAAM,kBAAkBC,QAAO;;EAErC;AAEA,SAAOD;;QAED;IACA,MAAM;IACN,CAAC,QAAQ,IAAI;IACb,CAAC,QACC;MAAM,CAAC,YAAY,GAAG,CAAC;MAAG,MACxB,oBAAoB;QAClB,SAAS;QACT,YAAY,MAAM;QAClB,eAAe,MAAM;QACrB,QAAQ,MAAM;QACd,cAAc,MAAM;QACpB,eAAe,MAAM;QACrB,YAAY,MAAM;MACpB,CAAC;IACH;EACJ,CAAC;QACC,MAAM,WAAY,MAAM,uBAAuB,sBAAsB,IAAKC,QAAO;;;AAGzF;AOnDA,IAAM,WAAW;AAEjB,IAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmdlB,KAAK;AAEA,SAAS,mBAAyB;AACvC,MAAI,OAAO,aAAa,YAAa;AACrC,MAAI,SAAS,eAAe,QAAQ,EAAG;AACvC,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,KAAK;AACX,QAAM,cAAc;AACpB,WAAS,KAAK,YAAY,KAAK;AACjC;ATndO,IAAM,aAAN,cAAyB,WAAW;EAApC,cAAA;AAAA,UAAA,GAAA,SAAA;AA4BL,SAAQ,YAA2B,CAAC;AACpC,SAAQ,YAAY;AACpB,SAAQ,eAAe;AACvB,SAAQ,aAA4B;AACpC,SAAQ,cAAc;AACtB,SAAQ,eAAe;AACvB,SAAQ,eAAe;AACvB,SAAQ,eAAoC;AAC5C,SAAQ,mBAAuC;AAC/C,SAAQ,kBAAkB;AAC1B,SAAQ,gBAA+B;AAiDvC,SAAQ,gBAAgB,MAAY;AAClC,UAAI,CAAC,KAAK,iBAAkB;AAC5B,YAAM,EAAE,WAAW,cAAc,aAAa,IAAI,KAAK;AACvD,WAAK,kBAAkB,eAAe,YAAY,eAAe;IACnE;AAcA,SAAQ,eAAe,CAAC,UAA6B;AACnD,cAAQ,MAAM,MAAM;QAClB,KAAK;AACH,eAAK,aAAa,MAAM;AACxB,eAAK,eAAe;AACpB;QAEF,KAAK;AACH,eAAK,YAAY,CAAC,GAAG,MAAM,QAAQ;AACnC,eAAK,eAAe,MAAM,SAAS,KAAK,CAACE,OAAMA,GAAE,WAAW,WAAW;AACvE,eAAK,gBAAgB;AACrB;QAEF,KAAK;AACH,cAAI,CAAC,KAAK,UAAU,KAAK,CAACA,OAAMA,GAAE,OAAO,MAAM,QAAQ,EAAE,GAAG;AAC1D,iBAAK,YAAY,CAAC,GAAG,KAAK,WAAW,MAAM,OAAO;UACpD;AACA,eAAK,eAAe,MAAM,QAAQ,WAAW;AAC7C,eAAK,gBAAgB;AACrB;QAEF,KAAK,iBAAiB;AACpB,eAAK,YAAY,KAAK,UAAU;YAAI,CAACA,OACnCA,GAAE,OAAO,MAAM,YAAY,EAAE,GAAGA,IAAG,SAASA,GAAE,UAAU,MAAM,MAAM,IAAIA;UAC1E;AACA,eAAK,gBAAgB;AACrB;QACF;QAEA,KAAK;AACH,eAAK,YAAY,KAAK,UAAU;YAAI,CAACA,OACnCA,GAAE,OAAO,MAAM,YAAY,EAAE,GAAGA,IAAG,QAAQ,WAAoB,IAAIA;UACrE;AACA,eAAK,eAAe;AACpB;QAEF,KAAK;AACH,eAAK,YAAY,MAAM;AACvB,cAAI,MAAM,SAAU,MAAK,gBAAgB;AACzC;QAEF,KAAK,aAAa;AAChB,eAAK,YAAY,KAAK,UAAU,IAAI,CAACA,OAAM;AACzC,gBAAIA,GAAE,OAAO,MAAM,UAAW,QAAOA;AACrC,kBAAM,YAAYA,GAAE,aAAa,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,OAAO,MAAM,SAAS,EAAE;AAClF,gBAAI,YAAY,GAAG;AACjB,oBAAM,YAAY,CAAC,GAAIA,GAAE,aAAa,CAAC,CAAE;AACzC,wBAAU,QAAQ,IAAI,MAAM;AAC5B,qBAAO,EAAE,GAAGA,IAAG,UAAU;YAC3B;AACA,mBAAO,EAAE,GAAGA,IAAG,WAAW,CAAC,GAAIA,GAAE,aAAa,CAAC,GAAI,MAAM,QAAQ,EAAE;UACrE,CAAC;AACD,cAAI,KAAK,eAAe,IAAI,MAAM,SAAS,IAAI,KAAK,MAAM,SAAS,WAAW,WAAW;AACvF,iBAAK,cAAc,MAAM,SAAS,EAAE;AACpC,iBAAK,UAAU,KAAK;cAClB,MAAM;cACN,YAAY,MAAM,SAAS;cAC3B,QAAQ;cACR,UAAU;YACZ,CAAC;UACH;AACA;QACF;QAEA,KAAK,wBAAwB;AAC3B,eAAK,YAAY,KAAK,UAAU,IAAI,CAACA,OAAM;AACzC,gBAAI,CAACA,GAAE,UAAW,QAAOA;AACzB,kBAAM,YAAYA,GAAE,UAAU;cAAI,CAAC,OACjC,GAAG,OAAO,MAAM,aAAa,EAAE,GAAG,IAAI,YAAY,GAAG,aAAa,MAAM,MAAM,IAAI;YACpF;AACA,mBAAO,EAAE,GAAGA,IAAG,UAAU;UAC3B,CAAC;AACD;QACF;QAEA,KAAK,kBAAkB;AACrB,eAAK,YAAY,KAAK,UAAU,IAAI,CAACA,OAAM;AACzC,gBAAI,CAACA,GAAE,UAAW,QAAOA;AACzB,kBAAM,YAAYA,GAAE,UAAU,IAAI,CAAC,OAAO;AACxC,kBAAI,GAAG,OAAO,MAAM,WAAY,QAAO;AACvC,kBAAI;AACJ,kBAAI;AACF,uBAAO,KAAK,MAAM,GAAG,UAAU;cACjC,QAAQ;AACN,uBAAO;cACT;AACA,qBAAO,EAAE,GAAG,IAAI,QAAQ,QAAiB,KAAK;YAChD,CAAC;AACD,mBAAO,EAAE,GAAGA,IAAG,UAAU;UAC3B,CAAC;AACD;QACF;QAEA,KAAK;AACH,eAAK,gBAAgB,MAAM;AAC3B;QAEF,KAAK;AACH;MACJ;IACF;AAEA,SAAQ,WAAW,CAAC,MAAmB;AACrC,WAAK,cAAe,EAAE,OAA+B;IACvD;AAcA,SAAQ,UAAU,MAAY;AAC5B,YAAMD,QAAO,KAAK,YAAY,KAAK;AACnC,UAAI,CAACA,MAAM;AACX,WAAK,mBAAmBA,KAAI;AAC5B,WAAK,UAAU,KAAK,EAAE,MAAM,gBAAgB,MAAAA,MAAK,CAAC;AAClD,WAAK,cAAc;IACrB;AAEA,SAAQ,UAAU,MAAY;AAC5B,WAAK,UAAU,KAAK,EAAE,MAAM,kBAAkB,CAAC;IACjD;AAEA,SAAQ,aAAa,CAAC,MAA2B;AAC/C,UAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,cAAc;AAC1D,UAAE,eAAe;AACjB,YAAI,KAAK,cAAc;AACrB,eAAK,QAAQ;QACf,OAAO;AACL,eAAK,QAAQ;QACf;MACF;IACF;AAEA,SAAQ,UAAU,CAAC,YAA0B;AAC3C,gBAAU,WAAW,UAAU,OAAO;IACxC;AAEA,SAAQ,gBAAgB,CAAC,cAA4B;AACnD,WAAK,UAAU,KAAK,EAAE,MAAM,cAAc,UAAU,CAAC;IACvD;AAEA,SAAQ,iBAAiB,CAAC,eAA6B;AACrD,WAAK,cAAc,UAAU;AAC7B,WAAK,UAAU,KAAK;QAClB,MAAM;QACN;QACA,QAAQ;QACR,UAAU;MACZ,CAAC;IACH;AAEA,SAAQ,cAAc,CAAC,eAA6B;AAClD,WAAK,cAAc,UAAU;AAC7B,WAAK,UAAU,KAAK;QAClB,MAAM;QACN;QACA,QAAQ;QACR,UAAU;MACZ,CAAC;IACH;AAYA,SAAQ,sBAAsB,MAAY;AACxC,WAAK,eAAe;IACtB;AAEA,SAAQ,oBAAoB,MAAY;AACtC,WAAK,eAAe;IACtB;AAEA,SAAQ,gBAAgB,CAACA,UAAuB;AAC9C,WAAK,mBAAmBA,KAAI;AAC5B,WAAK,UAAU,KAAK,EAAE,MAAM,gBAAgB,MAAAA,MAAK,CAAC;IACpD;EAAA;EA/PS,mBAAgC;AACvC,WAAO;EACT;EAES,oBAA0B;AACjC,UAAM,kBAAkB;AACxB,qBAAiB;AACjB,QAAI,KAAK,WAAW;AAClB,WAAK,eAAe,KAAK,UAAU,UAAU,KAAK,YAAY;AAC9D,WAAK,UAAU,QAAQ;IACzB;EACF;EAES,uBAA6B;AACpC,UAAM,qBAAqB;AAC3B,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,WAAW,WAAW;EAC7B;EAES,eAAqB;AAC5B,SAAK,mBAAmB,KAAK,cAAc,uBAAuB;AAClE,SAAK,kBAAkB,iBAAiB,UAAU,KAAK,aAAa;EACtE;EAES,UAAgB;AACvB,SAAK,uBAAuB;EAC9B;EAEQ,yBAA+B;AACrC,UAAM,SAAS,KAAK,iBAAiB,oDAAoD;AACzF,eAAW,SAAS,QAAQ;AAC1B,YAAM,MAAM,SAAS,cAAc,QAAQ;AAC3C,UAAI,aAAa,oBAAoB,EAAE;AACvC,UAAI,cAAc;AAClB,UAAI,iBAAiB,SAAS,MAAM;AAClC,cAAM,OAAO,MAAM,cAAc,MAAM;AACvC,YAAI,KAAM,WAAU,WAAW,UAAU,KAAK,eAAe,EAAE;AAC/D,YAAI,cAAc;AAClB,mBAAW,MAAM;AACf,cAAI,cAAc;QACpB,GAAG,IAAI;MACT,CAAC;AACD,YAAM,YAAY,GAAG;IACvB;EACF;EAQQ,kBAAwB;AAC9B,QAAI,KAAK,gBAAiB;AAC1B,0BAAsB,MAAM;AAC1B,UAAI,KAAK,kBAAkB,UAAU;AACnC,aAAK,iBAAiB,SAAS;UAC7B,KAAK,KAAK,iBAAiB;UAC3B,UAAU;QACZ,CAAC;MACH;IACF,CAAC;EACH;EA4GQ,mBAAmBA,OAAoB;AAC7C,UAAM,MAAmB;MACvB,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;MAChE,MAAM;MACN,SAASA;MACT,WAAW,KAAK,IAAI;MACpB,QAAQ;IACV;AACA,SAAK,YAAY,CAAC,GAAG,KAAK,WAAW,GAAG;AACxC,SAAK,gBAAgB;EACvB;EAqDQ,cAAc,YAA0B;AAC9C,SAAK,YAAY,KAAK,UAAU,IAAI,CAACC,OAAM;AACzC,UAAI,CAACA,GAAE,UAAW,QAAOA;AACzB,YAAM,YAAYA,GAAE,UAAU;QAAI,CAAC,OACjC,GAAG,OAAO,aAAa,EAAE,GAAG,IAAI,QAAQ,OAAgB,IAAI;MAC9D;AACA,aAAO,EAAE,GAAGA,IAAG,UAAU;IAC3B,CAAC;EACH;EAeS,SAAyB;AAChC,UAAM,aAAa,KAAK,OAAO;AAC/B,UAAM,aACJ,KAAK,OAAO,eACX,KAAK,WACFH,yGAAwG,KAAK,QAAQ,WACrH;AAEN,WAAOA;;UAGD,cAAc,OAAO,eAAe,YAAY,YAAY,aACxD,aACAC,QACN;;YAEI,kBAAkB;MAClB,UAAU,KAAK;MACf,UAAU,KAAK;MACf,YAAY,KAAK;MACjB,eAAe,KAAK;MACpB,QAAQ,KAAK;MACb,cAAc,KAAK;MACnB,eAAe,KAAK;MACpB,YAAY,KAAK;MACjB,gBAAgB;MAChB,qBAAqB,KAAK,OAAO;IACnC,CAAC,CAAC;;UAGF,KAAK,kBACDD,0CAAyC,MAAM;AAC7C,WAAK,kBAAkB;AACvB,WAAK,gBAAgB;IACvB,CAAC,6NACDC,QACN;UAEE,KAAK,gBACDD,wCAAuC,KAAK,aAAa,WACzDC,QACN;UACE,gBAAgB;MAChB,OAAO,KAAK;MACZ,aAAa,KAAK,gBAAgB,KAAK;MACvC,aAAa,KAAK;MAClB,SAAS,KAAK;MACd,QAAQ,KAAK;MACb,QAAQ,KAAK;MACb,WAAW,KAAK;MAChB,oBAAoB,KAAK;MACzB,kBAAkB,KAAK;MACvB,aAAa,KAAK,UAAU,WAAW,IAAI,KAAK,cAAc;MAC9D,cAAc,KAAK;MACnB,kBAAkB,KAAK,OAAO;MAC9B,iBAAiB,KAAK,OAAO;IAC/B,CAAC,CAAC;;;EAGR;AACF;AArWa,WACK,aAAa;EAC3B,WAAW,EAAE,WAAW,MAAM;EAC9B,UAAU,EAAE,MAAM,OAAO;EACzB,aAAa,EAAE,WAAW,MAAM;EAChC,YAAY,EAAE,WAAW,MAAM;EAC/B,eAAe,EAAE,WAAW,MAAM;EAClC,eAAe,EAAE,WAAW,MAAM;EAClC,OAAO,EAAE,WAAW,MAAM;EAC1B,WAAW,EAAE,OAAO,KAAK;EACzB,WAAW,EAAE,OAAO,KAAK;EACzB,cAAc,EAAE,OAAO,KAAK;EAC5B,YAAY,EAAE,OAAO,KAAK;EAC1B,aAAa,EAAE,OAAO,KAAK;EAC3B,cAAc,EAAE,OAAO,KAAK;EAC5B,cAAc,EAAE,OAAO,KAAK;EAC5B,iBAAiB,EAAE,OAAO,KAAK;EAC/B,eAAe,EAAE,OAAO,KAAK;AAC/B;AWVF,IAAI,CAAC,eAAe,IAAI,aAAa,GAAG;AACtC,iBAAe,OAAO,eAAe,UAAU;AACjD;;;AiBpBA,IAAM,YAAY,CAAC;AACnB,SAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC1B,YAAU,MAAM,IAAI,KAAO,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AACpD;AACO,SAAS,gBAAgB,KAAK,SAAS,GAAG;AAC7C,UAAQ,UAAU,IAAI,SAAS,CAAC,CAAC,IAC7B,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,MACA,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,MACA,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,MACA,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,MACA,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,GAAG,YAAY;AACjD;;;AC1BA,IAAI;AACJ,IAAM,QAAQ,IAAI,WAAW,EAAE;AAChB,SAAR,MAAuB;AAC1B,MAAI,CAAC,iBAAiB;AAClB,QAAI,OAAO,WAAW,eAAe,CAAC,OAAO,iBAAiB;AAC1D,YAAM,IAAI,MAAM,0GAA0G;AAAA,IAC9H;AACA,sBAAkB,OAAO,gBAAgB,KAAK,MAAM;AAAA,EACxD;AACA,SAAO,gBAAgB,KAAK;AAChC;;;ACVA,IAAM,aAAa,OAAO,WAAW,eAAe,OAAO,cAAc,OAAO,WAAW,KAAK,MAAM;AACtG,IAAO,iBAAQ,EAAE,WAAW;;;ACE5B,SAAS,GAAG,SAAS,KAAK,QAAQ;AAC9B,MAAI,eAAO,cAAc,CAAC,OAAO,CAAC,SAAS;AACvC,WAAO,eAAO,WAAW;AAAA,EAC7B;AACA,YAAU,WAAW,CAAC;AACtB,QAAM,OAAO,QAAQ,UAAU,QAAQ,MAAM,KAAK,IAAI;AACtD,MAAI,KAAK,SAAS,IAAI;AAClB,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACvD;AACA,OAAK,CAAC,IAAK,KAAK,CAAC,IAAI,KAAQ;AAC7B,OAAK,CAAC,IAAK,KAAK,CAAC,IAAI,KAAQ;AAC7B,MAAI,KAAK;AACL,aAAS,UAAU;AACnB,QAAI,SAAS,KAAK,SAAS,KAAK,IAAI,QAAQ;AACxC,YAAM,IAAI,WAAW,mBAAmB,MAAM,IAAI,SAAS,EAAE,0BAA0B;AAAA,IAC3F;AACA,aAAS,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACzB,UAAI,SAAS,CAAC,IAAI,KAAK,CAAC;AAAA,IAC5B;AACA,WAAO;AAAA,EACX;AACA,SAAO,gBAAgB,IAAI;AAC/B;AACA,IAAO,aAAQ;;;;ACxBf,IAAa,qBAAqBG,GAAE,OAAO;EACzC,MAAMA,GAAE,OAAA;EACR,WAAWA,GAAE,OAAA;CACd;AAED,IAAa,iBAAiBA,GAAE,OAAO;EACrC,IAAIA,GAAE,OAAA;EACN,MAAMA,GAAE,QAAQ,UAAA;EAChB,UAAU;EACV,gBAAgBA,GAAE,OAAA,EAAS,SAAA;CAC5B;AAED,IAAa,oBAAoBA,GAAE,OAAO;EACxC,IAAIA,GAAE,OAAA;EACN,MAAMA,GAAE,OAAA;EACR,SAASA,GAAE,OAAA,EAAS,SAAA;EACpB,MAAMA,GAAE,OAAA,EAAS,SAAA;EACjB,gBAAgBA,GAAE,OAAA,EAAS,SAAA;CAC5B;AAED,IAAa,yBAAyBA,GAAE,OAAO;EAC7C,MAAMA,GAAE,QAAQ,MAAA;EAChB,MAAMA,GAAE,OAAA;CACT;AAED,IAAa,+BAA+BA,GAAE,OAAO;EACnD,MAAMA,GAAE,QAAQ,MAAA;EAChB,OAAOA,GAAE,OAAA;EACT,UAAUA,GAAE,OAAA;CACb;AAED,IAAa,8BAA8BA,GAAE,OAAO;EAClD,MAAMA,GAAE,QAAQ,KAAA;EAChB,OAAOA,GAAE,OAAA;EACT,UAAUA,GAAE,OAAA,EAAS,SAAA;CACtB;AAED,IAAa,2BAA2BA,GAAE,mBAAmB,QAAQ,CACnE,8BACA,2BAAA,CACD;AAED,IAAa,0BAA0BA,GAAE,OAAO;EAC9C,MAAMA,GAAE,QAAQ,OAAA;EAChB,QAAQ;EACR,UAAUA,GAAE,QAAA,EAAU,SAAA;CACvB;AAED,IAAa,0BAA0BA,GAAE,OAAO;EAC9C,MAAMA,GAAE,QAAQ,OAAA;EAChB,QAAQ;EACR,UAAUA,GAAE,QAAA,EAAU,SAAA;CACvB;AAED,IAAa,0BAA0BA,GAAE,OAAO;EAC9C,MAAMA,GAAE,QAAQ,OAAA;EAChB,QAAQ;EACR,UAAUA,GAAE,QAAA,EAAU,SAAA;CACvB;AAED,IAAa,6BAA6BA,GAAE,OAAO;EACjD,MAAMA,GAAE,QAAQ,UAAA;EAChB,QAAQ;EACR,UAAUA,GAAE,QAAA,EAAU,SAAA;CACvB;AAOD,IAAM,uCAAuCC,GAAE,OAAO;EACpD,MAAMA,GAAE,QAAQ,QAAA;EAChB,UAAUA,GAAE,OAAA;EACZ,IAAIA,GAAE,OAAA,EAAS,SAAA;EACf,KAAKA,GAAE,OAAA,EAAS,SAAA;EAChB,MAAMA,GAAE,OAAA,EAAS,SAAA;EACjB,UAAUA,GAAE,OAAA,EAAS,SAAA;CACtB;AAED,IAAM,sBAAA,CACJ,OACA,QACG;AACH,MAAI,CAAC,MAAM,MAAM,CAAC,MAAM,OAAO,CAAC,MAAM,KACpC,KAAI,SAAS;IACX,MAAMA,GAAE,aAAa;IACrB,SAAS;IACT,MAAM,CAAC,IAAA;GACR;;AAIL,IAAa,2BAA2B,qCAAqC,YAAA,CAC1E,OAAO,QAAQ;AACd,sBAAoB,OAAO,GAAA;;AAI/B,IAAM,yBAAyBA,GAAE,mBAAmB,QAAQ;EAC1D;EACA;EACA;EACA;EACA;EACA;CACD;AAED,IAAa,qBAAqB,uBAAuB,YAAA,CAAa,OAAO,QAAQ;AACnF,MAAI,MAAM,SAAS,SACjB,qBAAoB,OAAO,GAAA;;AAI/B,IAAa,yBAAyB,kBAAkB,OAAO;EAC7D,MAAMA,GAAE,QAAQ,WAAA;EAChB,SAASA,GAAE,OAAA;CACZ;AAED,IAAa,sBAAsB,kBAAkB,OAAO;EAC1D,MAAMA,GAAE,QAAQ,QAAA;EAChB,SAASA,GAAE,OAAA;CACZ;AAED,IAAa,yBAAyB,kBAAkB,OAAO;EAC7D,MAAMA,GAAE,QAAQ,WAAA;EAChB,SAASA,GAAE,OAAA,EAAS,SAAA;EACpB,WAAWA,GAAE,MAAM,cAAA,EAAgB,SAAA;CACpC;AAED,IAAa,oBAAoB,kBAAkB,OAAO;EACxD,MAAMA,GAAE,QAAQ,MAAA;EAChB,SAASA,GAAE,MAAM,CAACA,GAAE,OAAA,GAAUA,GAAE,MAAM,kBAAA,CAAmB,CAAC;CAC3D;AAED,IAAa,oBAAoBA,GAAE,OAAO;EACxC,IAAIA,GAAE,OAAA;EACN,SAASA,GAAE,OAAA;EACX,MAAMA,GAAE,QAAQ,MAAA;EAChB,YAAYA,GAAE,OAAA;EACd,OAAOA,GAAE,OAAA,EAAS,SAAA;EAClB,gBAAgBA,GAAE,OAAA,EAAS,SAAA;CAC5B;AAED,IAAa,wBAAwBA,GAAE,OAAO;EAC5C,IAAIA,GAAE,OAAA;EACN,MAAMA,GAAE,QAAQ,UAAA;EAChB,cAAcA,GAAE,OAAA;EAChB,SAASA,GAAE,OAAOA,GAAE,IAAA,CAAK;CAC1B;AAED,IAAa,yBAAyBA,GAAE,OAAO;EAC7C,IAAIA,GAAE,OAAA;EACN,MAAMA,GAAE,QAAQ,WAAA;EAChB,SAASA,GAAE,OAAA;EACX,gBAAgBA,GAAE,OAAA,EAAS,SAAA;CAC5B;AAED,IAAa,gBAAgBA,GAAE,mBAAmB,QAAQ;EACxD;EACA;EACA;EACA;EACA;EACA;EACA;CACD;AAED,IAAa,aAAaA,GAAE,MAAM;EAChCA,GAAE,QAAQ,WAAA;EACVA,GAAE,QAAQ,QAAA;EACVA,GAAE,QAAQ,WAAA;EACVA,GAAE,QAAQ,MAAA;EACVA,GAAE,QAAQ,MAAA;EACVA,GAAE,QAAQ,UAAA;EACVA,GAAE,QAAQ,WAAA;CACX;AAED,IAAa,gBAAgBA,GAAE,OAAO;EACpC,aAAaA,GAAE,OAAA;EACf,OAAOA,GAAE,OAAA;CACV;AAED,IAAa,aAAaA,GAAE,OAAO;EACjC,MAAMA,GAAE,OAAA;EACR,aAAaA,GAAE,OAAA;EACf,YAAYA,GAAE,IAAA;CACf;AAED,IAAa,sBAAsBA,GAAE,OAAO;EAC1C,UAAUA,GAAE,OAAA;EACZ,OAAOA,GAAE,OAAA;EACT,aAAaA,GAAE,OAAA,EAAS,SAAA;EACxB,OAAOA,GAAE,IAAA;EACT,UAAUA,GAAE,MAAM,aAAA;EAClB,OAAOA,GAAE,MAAM,UAAA;EACf,SAASA,GAAE,MAAM,aAAA;EACjB,gBAAgBA,GAAE,IAAA;CACnB;AAED,IAAa,cAAcA,GAAE,IAAA;AAiC7B,IAAa,YAAb,cAA+B,MAAM;EACnC,YAAY,SAAiB;AAC3B,UAAM,OAAA;;;AAIV,IAAa,iCAAb,cAAoD,UAAU;EAC5D,cAAc;AACZ,UAAM,6EAAA;;;AC/OV,IAAa,qBAAqBA,GAAE,OAAO;EAEzC,MAAMA,GAAE,OAAA;EAER,aAAaA,GAAE,OAAA,EAAS,SAAA;CACzB;AAOD,IAAa,6BAA6BA,GAAE,OAAO;EAEjD,MAAMA,GAAE,OAAA,EAAS,SAAA;EAEjB,MAAMA,GAAE,OAAA,EAAS,SAAA;EAEjB,aAAaA,GAAE,OAAA,EAAS,SAAA;EAExB,SAASA,GAAE,OAAA,EAAS,SAAA;EAEpB,UAAUA,GAAE,OAAA,EAAS,SAAA;EAErB,kBAAkBA,GAAE,OAAA,EAAS,SAAA;EAE7B,UAAUA,GAAE,OAAOA,GAAE,QAAA,CAAS,EAAE,SAAA;CACjC;AAOD,IAAa,8BAA8BA,GAAE,OAAO;EAElD,WAAWA,GAAE,QAAA,EAAU,SAAA;EAEvB,WAAWA,GAAE,QAAA,EAAU,SAAA;EAEvB,YAAYA,GAAE,QAAA,EAAU,SAAA;EAExB,mBAAmBA,GAAE,QAAA,EAAU,SAAA;EAE/B,WAAWA,GAAE,QAAA,EAAU,SAAA;CACxB;AAOD,IAAa,0BAA0BA,GAAE,OAAO;EAG9C,WAAWA,GAAE,QAAA,EAAU,SAAA;EAGvB,OAAOA,GAAE,MAAM,UAAA,EAAY,SAAA;EAE3B,eAAeA,GAAE,QAAA,EAAU,SAAA;EAE3B,gBAAgBA,GAAE,QAAA,EAAU,SAAA;CAC7B;AAMD,IAAa,2BAA2BA,GAAE,OAAO;EAE/C,kBAAkBA,GAAE,QAAA,EAAU,SAAA;EAG9B,oBAAoBA,GAAE,MAAMA,GAAE,OAAA,CAAQ,EAAE,SAAA;CACzC;AAMD,IAAa,0BAA0BA,GAAE,OAAO;EAE9C,WAAWA,GAAE,QAAA,EAAU,SAAA;EAEvB,QAAQA,GAAE,QAAA,EAAU,SAAA;EAGpB,QAAQA,GAAE,QAAA,EAAU,SAAA;EAGpB,iBAAiBA,GAAE,QAAA,EAAU,SAAA;CAC9B;AAMD,IAAa,+BAA+BA,GAAE,OAAO;EAEnD,WAAWA,GAAE,QAAA,EAAU,SAAA;EAEvB,YAAYA,GAAE,QAAA,EAAU,SAAA;EAExB,UAAUA,GAAE,QAAA,EAAU,SAAA;EAEtB,WAAWA,GAAE,MAAM,kBAAA,EAAoB,SAAA;CACxC;AAMD,IAAa,8BAA8BA,GAAE,OAAO;EAElD,WAAWA,GAAE,QAAA,EAAU,SAAA;EAEvB,WAAWA,GAAE,QAAA,EAAU,SAAA;EAGvB,WAAWA,GAAE,QAAA,EAAU,SAAA;CACxB;AAMD,IAAa,oCAAoCA,GAAE,OAAO;EAExD,OAAOA,GAAE,QAAA,EAAU,SAAA;EAEnB,OAAOA,GAAE,QAAA,EAAU,SAAA;EAEnB,OAAOA,GAAE,QAAA,EAAU,SAAA;EAEnB,KAAKA,GAAE,QAAA,EAAU,SAAA;EAEjB,MAAMA,GAAE,QAAA,EAAU,SAAA;CACnB;AAMD,IAAa,qCAAqCA,GAAE,OAAO;EAEzD,OAAOA,GAAE,QAAA,EAAU,SAAA;EAEnB,OAAOA,GAAE,QAAA,EAAU,SAAA;CACpB;AAOD,IAAa,+BAA+BA,GAAE,OAAO;EAEnD,OAAO,kCAAkC,SAAA;EAEzC,QAAQ,mCAAmC,SAAA;CAC5C;AAMD,IAAa,8BAA8BA,GAAE,OAAO;EAElD,eAAeA,GAAE,QAAA,EAAU,SAAA;EAG3B,WAAWA,GAAE,QAAA,EAAU,SAAA;EAGvB,eAAeA,GAAE,OAAA,EAAS,SAAA;EAE1B,kBAAkBA,GAAE,OAAA,EAAS,SAAA;CAC9B;AAMD,IAAa,mCAAmCA,GAAE,OAAO;EAEvD,WAAWA,GAAE,QAAA,EAAU,SAAA;EAGvB,WAAWA,GAAE,QAAA,EAAU,SAAA;EAEvB,eAAeA,GAAE,QAAA,EAAU,SAAA;EAG3B,UAAUA,GAAE,QAAA,EAAU,SAAA;CACvB;AAaD,IAAa,0BAA0BA,GAAE,OAAO;EAE9C,UAAU,2BAA2B,SAAA;EAErC,WAAW,4BAA4B,SAAA;EAEvC,OAAO,wBAAwB,SAAA;EAE/B,QAAQ,yBAAyB,SAAA;EAEjC,OAAO,wBAAwB,SAAA;EAE/B,YAAY,6BAA6B,SAAA;EAEzC,WAAW,4BAA4B,SAAA;EAEvC,YAAY,6BAA6B,SAAA;EAEzC,WAAW,4BAA4B,SAAA;EAEvC,gBAAgB,iCAAiC,SAAA;EAEjD,QAAQA,GAAE,OAAOA,GAAE,QAAA,CAAS,EAAE,SAAA;CAC/B;ACvOD,IAAM,wBAAwBA,GAAE,MAAM;EACpCA,GAAE,QAAQ,WAAA;EACVA,GAAE,QAAQ,QAAA;EACVA,GAAE,QAAQ,WAAA;EACVA,GAAE,QAAQ,MAAA;CACX;AAED,IAAY,YAAA,0BAAAC,YAAL;AACL,EAAAA,WAAA,oBAAA,IAAA;AACA,EAAAA,WAAA,sBAAA,IAAA;AACA,EAAAA,WAAA,kBAAA,IAAA;AACA,EAAAA,WAAA,oBAAA,IAAA;AACA,EAAAA,WAAA,iBAAA,IAAA;AACA,EAAAA,WAAA,gBAAA,IAAA;AACA,EAAAA,WAAA,eAAA,IAAA;AACA,EAAAA,WAAA,iBAAA,IAAA;AACA,EAAAA,WAAA,kBAAA,IAAA;AAIA,EAAAA,WAAA,gBAAA,IAAA;AAIA,EAAAA,WAAA,cAAA,IAAA;AAIA,EAAAA,WAAA,6BAAA,IAAA;AAIA,EAAAA,WAAA,+BAAA,IAAA;AAIA,EAAAA,WAAA,2BAAA,IAAA;AACA,EAAAA,WAAA,gBAAA,IAAA;AACA,EAAAA,WAAA,aAAA,IAAA;AACA,EAAAA,WAAA,mBAAA,IAAA;AACA,EAAAA,WAAA,mBAAA,IAAA;AACA,EAAAA,WAAA,gBAAA,IAAA;AACA,EAAAA,WAAA,KAAA,IAAA;AACA,EAAAA,WAAA,QAAA,IAAA;AACA,EAAAA,WAAA,aAAA,IAAA;AACA,EAAAA,WAAA,cAAA,IAAA;AACA,EAAAA,WAAA,WAAA,IAAA;AACA,EAAAA,WAAA,cAAA,IAAA;AACA,EAAAA,WAAA,eAAA,IAAA;AACA,EAAAA,WAAA,iBAAA,IAAA;AACA,EAAAA,WAAA,yBAAA,IAAA;AACA,EAAAA,WAAA,2BAAA,IAAA;AACA,EAAAA,WAAA,uBAAA,IAAA;AACA,EAAAA,WAAA,yBAAA,IAAA;AACA,EAAAA,WAAA,eAAA,IAAA;AACA,EAAAA,WAAA,2BAAA,IAAA;;;AAGF,IAAa,kBAAkBD,GAC5B,OAAO;EACN,MAAMA,GAAE,WAAW,SAAA;EACnB,WAAWA,GAAE,OAAA,EAAS,SAAA;EACtB,UAAUA,GAAE,IAAA,EAAM,SAAA;CACnB,EACA,YAAA;AAEH,IAAa,8BAA8B,gBAAgB,OAAO;EAChE,MAAMA,GAAE,QAAQ,UAAU,kBAAA;EAC1B,WAAWA,GAAE,OAAA;EACb,MAAM,sBAAsB,QAAQ,WAAA;EACpC,MAAMA,GAAE,OAAA,EAAS,SAAA;CAClB;AAED,IAAa,gCAAgC,gBAAgB,OAAO;EAClE,MAAMA,GAAE,QAAQ,UAAU,oBAAA;EAC1B,WAAWA,GAAE,OAAA;EACb,OAAOA,GAAE,OAAA;CACV;AAED,IAAa,4BAA4B,gBAAgB,OAAO;EAC9D,MAAMA,GAAE,QAAQ,UAAU,gBAAA;EAC1B,WAAWA,GAAE,OAAA;CACd;AAED,IAAa,8BAA8B,gBAAgB,OAAO;EAChE,MAAMA,GAAE,QAAQ,UAAU,kBAAA;EAC1B,WAAWA,GAAE,OAAA,EAAS,SAAA;EACtB,MAAM,sBAAsB,SAAA;EAC5B,OAAOA,GAAE,OAAA,EAAS,SAAA;EAClB,MAAMA,GAAE,OAAA,EAAS,SAAA;CAClB;AAKD,IAAa,sCAAsC,gBAAgB,OAAO,EACxE,MAAMA,GAAE,QAAQ,UAAU,2BAAA,EAA4B,CACvD;AAKD,IAAa,wCAAwC,8BAA8B,KAAK;EACtF,WAAW;EACX,MAAM;CACP,EAAE,OAAO,EACR,MAAMA,GAAE,QAAQ,UAAU,6BAAA,EAA8B,CACzD;AAKD,IAAa,oCAAoC,gBAAgB,OAAO,EACtE,MAAMA,GAAE,QAAQ,UAAU,yBAAA,EAA0B,CACrD;AAED,IAAa,2BAA2B,gBAAgB,OAAO;EAC7D,MAAMA,GAAE,QAAQ,UAAU,eAAA;EAC1B,YAAYA,GAAE,OAAA;EACd,cAAcA,GAAE,OAAA;EAChB,iBAAiBA,GAAE,OAAA,EAAS,SAAA;CAC7B;AAED,IAAa,0BAA0B,gBAAgB,OAAO;EAC5D,MAAMA,GAAE,QAAQ,UAAU,cAAA;EAC1B,YAAYA,GAAE,OAAA;EACd,OAAOA,GAAE,OAAA;CACV;AAED,IAAa,yBAAyB,gBAAgB,OAAO;EAC3D,MAAMA,GAAE,QAAQ,UAAU,aAAA;EAC1B,YAAYA,GAAE,OAAA;CACf;AAED,IAAa,4BAA4B,gBAAgB,OAAO;EAC9D,WAAWA,GAAE,OAAA;EACb,MAAMA,GAAE,QAAQ,UAAU,gBAAA;EAC1B,YAAYA,GAAE,OAAA;EACd,SAASA,GAAE,OAAA;EACX,MAAMA,GAAE,QAAQ,MAAA,EAAQ,SAAA;CACzB;AAED,IAAa,2BAA2B,gBAAgB,OAAO;EAC7D,MAAMA,GAAE,QAAQ,UAAU,eAAA;EAC1B,YAAYA,GAAE,OAAA,EAAS,SAAA;EACvB,cAAcA,GAAE,OAAA,EAAS,SAAA;EACzB,iBAAiBA,GAAE,OAAA,EAAS,SAAA;EAC5B,OAAOA,GAAE,OAAA,EAAS,SAAA;CACnB;AAKD,IAAa,2BAA2B,gBAAgB,OAAO;EAC7D,MAAMA,GAAE,QAAQ,UAAU,cAAA;EAC1B,OAAOA,GAAE,OAAA,EAAS,SAAA;CACnB;AAKD,IAAa,yBAAyB,gBAAgB,OAAO,EAC3D,MAAMA,GAAE,QAAQ,UAAU,YAAA,EAAa,CACxC;AAED,IAAa,2BAA2B,gBAAgB,OAAO;EAC7D,MAAMA,GAAE,QAAQ,UAAU,cAAA;EAC1B,UAAU;CACX;AAED,IAAa,wBAAwB,gBAAgB,OAAO;EAC1D,MAAMA,GAAE,QAAQ,UAAU,WAAA;EAC1B,OAAOA,GAAE,MAAMA,GAAE,IAAA,CAAK;CACvB;AAED,IAAa,8BAA8B,gBAAgB,OAAO;EAChE,MAAMA,GAAE,QAAQ,UAAU,iBAAA;EAC1B,UAAUA,GAAE,MAAM,aAAA;CACnB;AAED,IAAa,8BAA8B,gBAAgB,OAAO;EAChE,MAAMA,GAAE,QAAQ,UAAU,iBAAA;EAC1B,WAAWA,GAAE,OAAA;EACb,cAAcA,GAAE,OAAA;EAChB,SAASA,GAAE,OAAOA,GAAE,IAAA,CAAK;EACzB,SAASA,GAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,IAAA;CACzC;AAED,IAAa,2BAA2B,gBAAgB,OAAO;EAC7D,MAAMA,GAAE,QAAQ,UAAU,cAAA;EAC1B,WAAWA,GAAE,OAAA;EACb,cAAcA,GAAE,OAAA;EAChB,OAAOA,GAAE,MAAMA,GAAE,IAAA,CAAK;CACvB;AAED,IAAa,iBAAiB,gBAAgB,OAAO;EACnD,MAAMA,GAAE,QAAQ,UAAU,GAAA;EAC1B,OAAOA,GAAE,IAAA;EACT,QAAQA,GAAE,OAAA,EAAS,SAAA;CACpB;AAED,IAAa,oBAAoB,gBAAgB,OAAO;EACtD,MAAMA,GAAE,QAAQ,UAAU,MAAA;EAC1B,MAAMA,GAAE,OAAA;EACR,OAAOA,GAAE,IAAA;CACV;AAED,IAAa,wBAAwB,gBAAgB,OAAO;EAC1D,MAAMA,GAAE,QAAQ,UAAU,WAAA;EAC1B,UAAUA,GAAE,OAAA;EACZ,OAAOA,GAAE,OAAA;EACT,aAAaA,GAAE,OAAA,EAAS,SAAA;EACxB,OAAO,oBAAoB,SAAA;CAC5B;AAED,IAAa,yBAAyB,gBAAgB,OAAO;EAC3D,MAAMA,GAAE,QAAQ,UAAU,YAAA;EAC1B,UAAUA,GAAE,OAAA;EACZ,OAAOA,GAAE,OAAA;EACT,QAAQA,GAAE,IAAA,EAAM,SAAA;CACjB;AAED,IAAa,sBAAsB,gBAAgB,OAAO;EACxD,MAAMA,GAAE,QAAQ,UAAU,SAAA;EAC1B,SAASA,GAAE,OAAA;EACX,MAAMA,GAAE,OAAA,EAAS,SAAA;CAClB;AAED,IAAa,yBAAyB,gBAAgB,OAAO;EAC3D,MAAMA,GAAE,QAAQ,UAAU,YAAA;EAC1B,UAAUA,GAAE,OAAA;CACb;AAED,IAAa,0BAA0B,gBAAgB,OAAO;EAC5D,MAAMA,GAAE,QAAQ,UAAU,aAAA;EAC1B,UAAUA,GAAE,OAAA;CACb;AAGD,IAAa,uCAAuCA,GAAE,MAAM,CAC1DA,GAAE,QAAQ,WAAA,GACVA,GAAE,QAAQ,SAAA,CAAU,CACrB;AAED,IAAa,4BAA4B,gBAAgB,OAAO;EAC9D,MAAMA,GAAE,QAAQ,UAAU,eAAA;EAC1B,WAAWA,GAAE,OAAA;CACd;AAED,IAAa,mCAAmC,gBAAgB,OAAO;EACrE,MAAMA,GAAE,QAAQ,UAAU,uBAAA;EAC1B,WAAWA,GAAE,OAAA;EACb,MAAMA,GAAE,QAAQ,WAAA;CACjB;AAED,IAAa,qCAAqC,gBAAgB,OAAO;EACvE,MAAMA,GAAE,QAAQ,UAAU,yBAAA;EAC1B,WAAWA,GAAE,OAAA;EACb,OAAOA,GAAE,OAAA;CACV;AAED,IAAa,iCAAiC,gBAAgB,OAAO;EACnE,MAAMA,GAAE,QAAQ,UAAU,qBAAA;EAC1B,WAAWA,GAAE,OAAA;CACd;AAED,IAAa,mCAAmC,gBAAgB,OAAO;EACrE,MAAMA,GAAE,QAAQ,UAAU,uBAAA;EAC1B,WAAWA,GAAE,OAAA,EAAS,SAAA;EACtB,OAAOA,GAAE,OAAA,EAAS,SAAA;CACnB;AAED,IAAa,0BAA0B,gBAAgB,OAAO;EAC5D,MAAMA,GAAE,QAAQ,UAAU,aAAA;EAC1B,WAAWA,GAAE,OAAA;CACd;AAED,IAAa,qCAAqC,gBAAgB,OAAO;EACvE,MAAMA,GAAE,QAAQ,UAAU,yBAAA;EAC1B,SAAS;EACT,UAAUA,GAAE,OAAA;EACZ,gBAAgBA,GAAE,OAAA;CACnB;AAED,IAAa,eAAeA,GAAE,mBAAmB,QAAQ;EACvD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD;;;AClUD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKA,IAAI,YAAyC,4BAAY;AACrD,MAAIE,iBAAgB,SAAU,GAAGC,IAAG;AAChC,IAAAD,iBAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUE,IAAGD,IAAG;AAAE,MAAAC,GAAE,YAAYD;AAAA,IAAG,KAC1E,SAAUC,IAAGD,IAAG;AAAE,eAAS,KAAKA,GAAG,KAAIA,GAAE,eAAe,CAAC,EAAG,CAAAC,GAAE,CAAC,IAAID,GAAE,CAAC;AAAA,IAAG;AAC7E,WAAOD,eAAc,GAAGC,EAAC;AAAA,EAC7B;AACA,SAAO,SAAU,GAAGA,IAAG;AACnB,IAAAD,eAAc,GAAGC,EAAC;AAClB,aAAS,KAAK;AAAE,WAAK,cAAc;AAAA,IAAG;AACtC,MAAE,YAAYA,OAAM,OAAO,OAAO,OAAOA,EAAC,KAAK,GAAG,YAAYA,GAAE,WAAW,IAAI,GAAG;AAAA,EACtF;AACJ,GAAG;AACH,IAAI,kBAAkB,OAAO,UAAU;AAChC,SAAS,eAAe,KAAK,KAAK;AACrC,SAAO,gBAAgB,KAAK,KAAK,GAAG;AACxC;AACO,SAAS,YAAY,KAAK;AAC7B,MAAI,MAAM,QAAQ,GAAG,GAAG;AACpB,QAAI,SAAS,IAAI,MAAM,IAAI,MAAM;AACjC,aAASE,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK;AACpC,aAAOA,EAAC,IAAI,KAAKA;AAAA,IACrB;AACA,WAAO;AAAA,EACX;AACA,MAAI,OAAO,MAAM;AACb,WAAO,OAAO,KAAK,GAAG;AAAA,EAC1B;AACA,MAAI,OAAO,CAAC;AACZ,WAAS,KAAK,KAAK;AACf,QAAI,eAAe,KAAK,CAAC,GAAG;AACxB,WAAK,KAAK,CAAC;AAAA,IACf;AAAA,EACJ;AACA,SAAO;AACX;AAQO,SAAS,WAAW,KAAK;AAC5B,UAAQ,OAAO,KAAK;AAAA,IAChB,KAAK;AACD,aAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAAA;AAAA,IACzC,KAAK;AACD,aAAO;AAAA;AAAA,IACX;AACI,aAAO;AAAA,EACf;AACJ;AAEO,SAAS,UAAU,KAAK;AAC3B,MAAI,IAAI;AACR,MAAI,MAAM,IAAI;AACd,MAAI;AACJ,SAAO,IAAI,KAAK;AACZ,eAAW,IAAI,WAAW,CAAC;AAC3B,QAAI,YAAY,MAAM,YAAY,IAAI;AAClC;AACA;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAMO,SAAS,oBAAoB,MAAM;AACtC,MAAI,KAAK,QAAQ,GAAG,MAAM,MAAM,KAAK,QAAQ,GAAG,MAAM;AAClD,WAAO;AACX,SAAO,KAAK,QAAQ,MAAM,IAAI,EAAE,QAAQ,OAAO,IAAI;AACvD;AAMO,SAAS,sBAAsB,MAAM;AACxC,SAAO,KAAK,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG;AACtD;AA+BO,SAAS,aAAa,KAAK;AAC9B,MAAI,QAAQ,QAAW;AACnB,WAAO;AAAA,EACX;AACA,MAAI,KAAK;AACL,QAAI,MAAM,QAAQ,GAAG,GAAG;AACpB,eAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,MAAM,KAAK,OAAO;AAClD,YAAI,aAAa,IAAI,GAAG,CAAC,GAAG;AACxB,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ,WACS,OAAO,QAAQ,UAAU;AAC9B,UAAI,UAAU,YAAY,GAAG;AAC7B,UAAI,gBAAgB,QAAQ;AAC5B,eAAS,IAAI,GAAG,IAAI,eAAe,KAAK;AACpC,YAAI,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;AAC/B,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AACA,SAAS,2BAA2B,SAAS,MAAM;AAC/C,MAAI,eAAe,CAAC,OAAO;AAC3B,WAAS,OAAO,MAAM;AAClB,QAAI,QAAQ,OAAO,KAAK,GAAG,MAAM,WAAW,KAAK,UAAU,KAAK,GAAG,GAAG,MAAM,CAAC,IAAI,KAAK,GAAG;AACzF,QAAI,OAAO,UAAU,aAAa;AAC9B,mBAAa,KAAK,MAAM,OAAO,KAAK;AAAA,IACxC;AAAA,EACJ;AACA,SAAO,aAAa,KAAK,IAAI;AACjC;AACA,IAAI;AAAA;AAAA,GAA4B,SAAU,QAAQ;AAC9C,cAAUC,aAAY,MAAM;AAC5B,aAASA,YAAW,SAAS,MAAM,OAAO,WAAW,MAAM;AACvD,UAAI,aAAa,KAAK;AACtB,UAAI,QAAQ,OAAO,KAAK,MAAM,2BAA2B,SAAS,EAAE,MAAY,OAAc,WAAsB,KAAW,CAAC,CAAC,KAAK;AACtI,YAAM,OAAO;AACb,YAAM,QAAQ;AACd,YAAM,YAAY;AAClB,YAAM,OAAO;AACb,aAAO,eAAe,OAAO,WAAW,SAAS;AACjD,YAAM,UAAU,2BAA2B,SAAS,EAAE,MAAY,OAAc,WAAsB,KAAW,CAAC;AAClH,aAAO;AAAA,IACX;AACA,WAAOA;AAAA,EACX,GAAE,KAAK;AAAA;;;ADxKA,IAAI,iBAAiB;AACrB,IAAI,YAAY;AAQvB,IAAI,SAAS;AAAA,EACT,KAAK,SAAU,KAAK,KAAKC,WAAU;AAC/B,QAAI,GAAG,IAAI,KAAK;AAChB,WAAO,EAAE,aAAaA,UAAS;AAAA,EACnC;AAAA,EACA,QAAQ,SAAU,KAAK,KAAKA,WAAU;AAClC,QAAI,UAAU,IAAI,GAAG;AACrB,WAAO,IAAI,GAAG;AACd,WAAO,EAAE,aAAaA,WAAU,QAAiB;AAAA,EACrD;AAAA,EACA,SAAS,SAAU,KAAK,KAAKA,WAAU;AACnC,QAAI,UAAU,IAAI,GAAG;AACrB,QAAI,GAAG,IAAI,KAAK;AAChB,WAAO,EAAE,aAAaA,WAAU,QAAiB;AAAA,EACrD;AAAA,EACA,MAAM,SAAU,KAAK,KAAKA,WAAU;AAIhC,QAAI,UAAU,kBAAkBA,WAAU,KAAK,IAAI;AACnD,QAAI,SAAS;AACT,gBAAU,WAAW,OAAO;AAAA,IAChC;AACA,QAAI,gBAAgB,eAAeA,WAAU,EAAE,IAAI,UAAU,MAAM,KAAK,KAAK,CAAC,EAAE;AAChF,mBAAeA,WAAU,EAAE,IAAI,OAAO,MAAM,KAAK,MAAM,OAAO,cAAc,CAAC;AAC7E,WAAO,EAAE,aAAaA,WAAU,QAAiB;AAAA,EACrD;AAAA,EACA,MAAM,SAAU,KAAK,KAAKA,WAAU;AAChC,QAAI,cAAc,kBAAkBA,WAAU,KAAK,IAAI;AAEvD,mBAAeA,WAAU,EAAE,IAAI,OAAO,MAAM,KAAK,MAAM,OAAO,WAAW,WAAW,EAAE,CAAC;AACvF,WAAO,EAAE,aAAaA,UAAS;AAAA,EACnC;AAAA,EACA,MAAM,SAAU,KAAK,KAAKA,WAAU;AAChC,WAAO,EAAE,aAAaA,WAAU,MAAM,WAAW,IAAI,GAAG,GAAG,KAAK,KAAK,EAAE;AAAA,EAC3E;AAAA,EACA,MAAM,SAAU,KAAK,KAAKA,WAAU;AAChC,SAAK,QAAQ,IAAI,GAAG;AACpB,WAAO,EAAE,aAAaA,UAAS;AAAA,EACnC;AACJ;AAEA,IAAI,SAAS;AAAA,EACT,KAAK,SAAU,KAAK,GAAGA,WAAU;AAC7B,QAAI,UAAU,CAAC,GAAG;AACd,UAAI,OAAO,GAAG,GAAG,KAAK,KAAK;AAAA,IAC/B,OACK;AACD,UAAI,CAAC,IAAI,KAAK;AAAA,IAClB;AAEA,WAAO,EAAE,aAAaA,WAAU,OAAO,EAAE;AAAA,EAC7C;AAAA,EACA,QAAQ,SAAU,KAAK,GAAGA,WAAU;AAChC,QAAI,cAAc,IAAI,OAAO,GAAG,CAAC;AACjC,WAAO,EAAE,aAAaA,WAAU,SAAS,YAAY,CAAC,EAAE;AAAA,EAC5D;AAAA,EACA,SAAS,SAAU,KAAK,GAAGA,WAAU;AACjC,QAAI,UAAU,IAAI,CAAC;AACnB,QAAI,CAAC,IAAI,KAAK;AACd,WAAO,EAAE,aAAaA,WAAU,QAAiB;AAAA,EACrD;AAAA,EACA,MAAM,OAAO;AAAA,EACb,MAAM,OAAO;AAAA,EACb,MAAM,OAAO;AAAA,EACb,MAAM,OAAO;AACjB;AASO,SAAS,kBAAkBA,WAAU,SAAS;AACjD,MAAI,WAAW,IAAI;AACf,WAAOA;AAAA,EACX;AACA,MAAI,yBAAyB,EAAE,IAAI,QAAQ,MAAM,QAAQ;AACzD,iBAAeA,WAAU,sBAAsB;AAC/C,SAAO,uBAAuB;AAClC;AAeO,SAAS,eAAeA,WAAU,WAAW,mBAAmB,gBAAgB,2BAA2B,OAAO;AACrH,MAAI,sBAAsB,QAAQ;AAAE,wBAAoB;AAAA,EAAO;AAC/D,MAAI,mBAAmB,QAAQ;AAAE,qBAAiB;AAAA,EAAM;AACxD,MAAI,8BAA8B,QAAQ;AAAE,gCAA4B;AAAA,EAAM;AAC9E,MAAI,UAAU,QAAQ;AAAE,YAAQ;AAAA,EAAG;AACnC,MAAI,mBAAmB;AACnB,QAAI,OAAO,qBAAqB,YAAY;AACxC,wBAAkB,WAAW,GAAGA,WAAU,UAAU,IAAI;AAAA,IAC5D,OACK;AACD,gBAAU,WAAW,CAAC;AAAA,IAC1B;AAAA,EACJ;AAEA,MAAI,UAAU,SAAS,IAAI;AACvB,QAAI,cAAc,EAAE,aAAaA,UAAS;AAC1C,QAAI,UAAU,OAAO,OAAO;AACxB,kBAAY,cAAc,UAAU;AACpC,aAAO;AAAA,IACX,WACS,UAAU,OAAO,WAAW;AACjC,kBAAY,cAAc,UAAU;AACpC,kBAAY,UAAUA;AACtB,aAAO;AAAA,IACX,WACS,UAAU,OAAO,UAAU,UAAU,OAAO,QAAQ;AACzD,kBAAY,cAAc,kBAAkBA,WAAU,UAAU,IAAI;AACpE,UAAI,UAAU,OAAO,QAAQ;AACzB,oBAAY,UAAUA;AAAA,MAC1B;AACA,aAAO;AAAA,IACX,WACS,UAAU,OAAO,QAAQ;AAC9B,kBAAY,OAAO,WAAWA,WAAU,UAAU,KAAK;AACvD,UAAI,YAAY,SAAS,OAAO;AAC5B,cAAM,IAAI,eAAe,yBAAyB,yBAAyB,OAAO,WAAWA,SAAQ;AAAA,MACzG;AACA,kBAAY,cAAcA;AAC1B,aAAO;AAAA,IACX,WACS,UAAU,OAAO,UAAU;AAChC,kBAAY,UAAUA;AACtB,kBAAY,cAAc;AAC1B,aAAO;AAAA,IACX,WACS,UAAU,OAAO,QAAQ;AAC9B,gBAAU,QAAQA;AAClB,aAAO;AAAA,IACX,OACK;AACD,UAAI,mBAAmB;AACnB,cAAM,IAAI,eAAe,wEAAwE,wBAAwB,OAAO,WAAWA,SAAQ;AAAA,MACvJ,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ,OACK;AACD,QAAI,CAAC,gBAAgB;AACjB,MAAAA,YAAW,WAAWA,SAAQ;AAAA,IAClC;AACA,QAAI,OAAO,UAAU,QAAQ;AAC7B,QAAI,OAAO,KAAK,MAAM,GAAG;AACzB,QAAI,MAAMA;AACV,QAAI,IAAI;AACR,QAAI,MAAM,KAAK;AACf,QAAI,uBAAuB;AAC3B,QAAI,MAAM;AACV,QAAI,mBAAmB;AACvB,QAAI,OAAO,qBAAqB,YAAY;AACxC,yBAAmB;AAAA,IACvB,OACK;AACD,yBAAmB;AAAA,IACvB;AACA,WAAO,MAAM;AACT,YAAM,KAAK,CAAC;AACZ,UAAI,OAAO,IAAI,QAAQ,GAAG,KAAK,IAAI;AAC/B,cAAM,sBAAsB,GAAG;AAAA,MACnC;AACA,UAAI,8BACC,OAAO,eACH,OAAO,eAAe,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,gBAAiB;AACpE,cAAM,IAAI,UAAU,+OAA+O;AAAA,MACvQ;AACA,UAAI,mBAAmB;AACnB,YAAI,yBAAyB,QAAW;AACpC,cAAI,IAAI,GAAG,MAAM,QAAW;AACxB,mCAAuB,KAAK,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAAA,UACpD,WACS,KAAK,MAAM,GAAG;AACnB,mCAAuB,UAAU;AAAA,UACrC;AACA,cAAI,yBAAyB,QAAW;AACpC,6BAAiB,WAAW,GAAGA,WAAU,oBAAoB;AAAA,UACjE;AAAA,QACJ;AAAA,MACJ;AACA;AACA,UAAI,MAAM,QAAQ,GAAG,GAAG;AACpB,YAAI,QAAQ,KAAK;AACb,gBAAM,IAAI;AAAA,QACd,OACK;AACD,cAAI,qBAAqB,CAAC,UAAU,GAAG,GAAG;AACtC,kBAAM,IAAI,eAAe,2HAA2H,sCAAsC,OAAO,WAAWA,SAAQ;AAAA,UACxN,WACS,UAAU,GAAG,GAAG;AACrB,kBAAM,CAAC,CAAC;AAAA,UACZ;AAAA,QACJ;AACA,YAAI,KAAK,KAAK;AACV,cAAI,qBAAqB,UAAU,OAAO,SAAS,MAAM,IAAI,QAAQ;AACjE,kBAAM,IAAI,eAAe,oFAAoF,iCAAiC,OAAO,WAAWA,SAAQ;AAAA,UAC5K;AACA,cAAI,cAAc,OAAO,UAAU,EAAE,EAAE,KAAK,WAAW,KAAK,KAAKA,SAAQ;AACzE,cAAI,YAAY,SAAS,OAAO;AAC5B,kBAAM,IAAI,eAAe,yBAAyB,yBAAyB,OAAO,WAAWA,SAAQ;AAAA,UACzG;AACA,iBAAO;AAAA,QACX;AAAA,MACJ,OACK;AACD,YAAI,KAAK,KAAK;AACV,cAAI,cAAc,OAAO,UAAU,EAAE,EAAE,KAAK,WAAW,KAAK,KAAKA,SAAQ;AACzE,cAAI,YAAY,SAAS,OAAO;AAC5B,kBAAM,IAAI,eAAe,yBAAyB,yBAAyB,OAAO,WAAWA,SAAQ;AAAA,UACzG;AACA,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,YAAM,IAAI,GAAG;AAGb,UAAI,qBAAqB,IAAI,QAAQ,CAAC,OAAO,OAAO,QAAQ,WAAW;AACnE,cAAM,IAAI,eAAe,gDAAgD,+BAA+B,OAAO,WAAWA,SAAQ;AAAA,MACtI;AAAA,IACJ;AAAA,EACJ;AACJ;AAeO,SAAS,WAAWA,WAAU,OAAO,mBAAmB,gBAAgB,2BAA2B;AACtG,MAAI,mBAAmB,QAAQ;AAAE,qBAAiB;AAAA,EAAM;AACxD,MAAI,8BAA8B,QAAQ;AAAE,gCAA4B;AAAA,EAAM;AAC9E,MAAI,mBAAmB;AACnB,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,YAAM,IAAI,eAAe,mCAAmC,uBAAuB;AAAA,IACvF;AAAA,EACJ;AACA,MAAI,CAAC,gBAAgB;AACjB,IAAAA,YAAW,WAAWA,SAAQ;AAAA,EAClC;AACA,MAAI,UAAU,IAAI,MAAM,MAAM,MAAM;AACpC,WAAS,IAAI,GAAG,WAAW,MAAM,QAAQ,IAAI,UAAU,KAAK;AAExD,YAAQ,CAAC,IAAI,eAAeA,WAAU,MAAM,CAAC,GAAG,mBAAmB,MAAM,2BAA2B,CAAC;AACrG,IAAAA,YAAW,QAAQ,CAAC,EAAE;AAAA,EAC1B;AACA,UAAQ,cAAcA;AACtB,SAAO;AACX;AAUO,SAAS,aAAaA,WAAU,WAAW,OAAO;AACrD,MAAI,kBAAkB,eAAeA,WAAU,SAAS;AACxD,MAAI,gBAAgB,SAAS,OAAO;AAChC,UAAM,IAAI,eAAe,yBAAyB,yBAAyB,OAAO,WAAWA,SAAQ;AAAA,EACzG;AACA,SAAO,gBAAgB;AAC3B;AAQO,SAAS,UAAU,WAAW,OAAOA,WAAU,sBAAsB;AACxE,MAAI,OAAO,cAAc,YAAY,cAAc,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACjF,UAAM,IAAI,eAAe,8BAA8B,2BAA2B,OAAO,WAAWA,SAAQ;AAAA,EAChH,WACS,CAAC,OAAO,UAAU,EAAE,GAAG;AAC5B,UAAM,IAAI,eAAe,wEAAwE,wBAAwB,OAAO,WAAWA,SAAQ;AAAA,EACvJ,WACS,OAAO,UAAU,SAAS,UAAU;AACzC,UAAM,IAAI,eAAe,6CAA6C,0BAA0B,OAAO,WAAWA,SAAQ;AAAA,EAC9H,WACS,UAAU,KAAK,QAAQ,GAAG,MAAM,KAAK,UAAU,KAAK,SAAS,GAAG;AAErE,UAAM,IAAI,eAAe,iDAAiD,0BAA0B,OAAO,WAAWA,SAAQ;AAAA,EAClI,YACU,UAAU,OAAO,UAAU,UAAU,OAAO,WAAW,OAAO,UAAU,SAAS,UAAU;AACjG,UAAM,IAAI,eAAe,yFAAyF,2BAA2B,OAAO,WAAWA,SAAQ;AAAA,EAC3K,YACU,UAAU,OAAO,SAAS,UAAU,OAAO,aAAa,UAAU,OAAO,WAAW,UAAU,UAAU,QAAW;AACzH,UAAM,IAAI,eAAe,oGAAoG,4BAA4B,OAAO,WAAWA,SAAQ;AAAA,EACvL,YACU,UAAU,OAAO,SAAS,UAAU,OAAO,aAAa,UAAU,OAAO,WAAW,aAAa,UAAU,KAAK,GAAG;AACzH,UAAM,IAAI,eAAe,oGAAoG,4CAA4C,OAAO,WAAWA,SAAQ;AAAA,EACvM,WACSA,WAAU;AACf,QAAI,UAAU,MAAM,OAAO;AACvB,UAAI,UAAU,UAAU,KAAK,MAAM,GAAG,EAAE;AACxC,UAAI,kBAAkB,qBAAqB,MAAM,GAAG,EAAE;AACtD,UAAI,YAAY,kBAAkB,KAAK,YAAY,iBAAiB;AAChE,cAAM,IAAI,eAAe,yDAAyD,6BAA6B,OAAO,WAAWA,SAAQ;AAAA,MAC7I;AAAA,IACJ,WACS,UAAU,OAAO,aAAa,UAAU,OAAO,YAAY,UAAU,OAAO,QAAQ;AACzF,UAAI,UAAU,SAAS,sBAAsB;AACzC,cAAM,IAAI,eAAe,8DAA8D,+BAA+B,OAAO,WAAWA,SAAQ;AAAA,MACpJ;AAAA,IACJ,WACS,UAAU,OAAO,UAAU,UAAU,OAAO,QAAQ;AACzD,UAAI,gBAAgB,EAAE,IAAI,QAAQ,MAAM,UAAU,MAAM,OAAO,OAAU;AACzE,UAAI,QAAQ,SAAS,CAAC,aAAa,GAAGA,SAAQ;AAC9C,UAAI,SAAS,MAAM,SAAS,+BAA+B;AACvD,cAAM,IAAI,eAAe,gEAAgE,+BAA+B,OAAO,WAAWA,SAAQ;AAAA,MACtJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAQO,SAAS,SAAS,UAAUA,WAAU,mBAAmB;AAC5D,MAAI;AACA,QAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC1B,YAAM,IAAI,eAAe,mCAAmC,uBAAuB;AAAA,IACvF;AACA,QAAIA,WAAU;AAEV,iBAAW,WAAWA,SAAQ,GAAG,WAAW,QAAQ,GAAG,qBAAqB,IAAI;AAAA,IACpF,OACK;AACD,0BAAoB,qBAAqB;AACzC,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,0BAAkB,SAAS,CAAC,GAAG,GAAGA,WAAU,MAAS;AAAA,MACzD;AAAA,IACJ;AAAA,EACJ,SACO,GAAG;AACN,QAAI,aAAa,gBAAgB;AAC7B,aAAO;AAAA,IACX,OACK;AACD,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAmBO,SAAS,WAAW,GAAGC,IAAG;AAC7B,MAAI,MAAMA;AACN,WAAO;AACX,MAAI,KAAKA,MAAK,OAAO,KAAK,YAAY,OAAOA,MAAK,UAAU;AACxD,QAAI,OAAO,MAAM,QAAQ,CAAC,GAAG,OAAO,MAAM,QAAQA,EAAC,GAAG,GAAG,QAAQ;AACjE,QAAI,QAAQ,MAAM;AACd,eAAS,EAAE;AACX,UAAI,UAAUA,GAAE;AACZ,eAAO;AACX,WAAK,IAAI,QAAQ,QAAQ;AACrB,YAAI,CAAC,WAAW,EAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AACtB,iBAAO;AACf,aAAO;AAAA,IACX;AACA,QAAI,QAAQ;AACR,aAAO;AACX,QAAI,OAAO,OAAO,KAAK,CAAC;AACxB,aAAS,KAAK;AACd,QAAI,WAAW,OAAO,KAAKA,EAAC,EAAE;AAC1B,aAAO;AACX,SAAK,IAAI,QAAQ,QAAQ;AACrB,UAAI,CAACA,GAAE,eAAe,KAAK,CAAC,CAAC;AACzB,eAAO;AACf,SAAK,IAAI,QAAQ,QAAQ,KAAI;AACzB,YAAM,KAAK,CAAC;AACZ,UAAI,CAAC,WAAW,EAAE,GAAG,GAAGA,GAAE,GAAG,CAAC;AAC1B,eAAO;AAAA,IACf;AACA,WAAO;AAAA,EACX;AACA,SAAO,MAAM,KAAKA,OAAMA;AAC5B;;;AE/aA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,IAAI,aAAa,oBAAI,QAAQ;AAC7B,IAAI;AAAA;AAAA,EAAwB,4BAAY;AACpC,aAASC,QAAO,KAAK;AACjB,WAAK,YAAY,oBAAI,IAAI;AACzB,WAAK,MAAM;AAAA,IACf;AACA,WAAOA;AAAA,EACX,GAAE;AAAA;AACF,IAAI;AAAA;AAAA,EAA8B,4BAAY;AAC1C,aAASC,cAAa,UAAU,UAAU;AACtC,WAAK,WAAW;AAChB,WAAK,WAAW;AAAA,IACpB;AACA,WAAOA;AAAA,EACX,GAAE;AAAA;AACF,SAAS,UAAU,KAAK;AACpB,SAAO,WAAW,IAAI,GAAG;AAC7B;AACA,SAAS,sBAAsB,QAAQ,UAAU;AAC7C,SAAO,OAAO,UAAU,IAAI,QAAQ;AACxC;AACA,SAAS,yBAAyB,QAAQ,UAAU;AAChD,SAAO,UAAU,OAAO,SAAS,QAAQ;AAC7C;AAIO,SAAS,UAAU,MAAM,UAAU;AACtC,WAAS,UAAU;AACvB;AAIO,SAAS,QAAQ,KAAK,UAAU;AACnC,MAAI,UAAU,CAAC;AACf,MAAI;AACJ,MAAI,SAAS,UAAU,GAAG;AAC1B,MAAI,CAAC,QAAQ;AACT,aAAS,IAAI,OAAO,GAAG;AACvB,eAAW,IAAI,KAAK,MAAM;AAAA,EAC9B,OACK;AACD,QAAI,eAAe,sBAAsB,QAAQ,QAAQ;AACzD,eAAW,gBAAgB,aAAa;AAAA,EAC5C;AACA,MAAI,UAAU;AACV,WAAO;AAAA,EACX;AACA,aAAW,CAAC;AACZ,SAAO,QAAQ,WAAW,GAAG;AAC7B,MAAI,UAAU;AACV,aAAS,WAAW;AACpB,aAAS,OAAO;AAChB,QAAI,aAAa,WAAY;AACzB,eAAS,QAAQ;AAAA,IACrB;AACA,QAAI,YAAY,WAAY;AACxB,mBAAa,SAAS,IAAI;AAC1B,eAAS,OAAO,WAAW,UAAU;AAAA,IACzC;AACA,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAO,iBAAiB,WAAW,SAAS;AAC5C,aAAO,iBAAiB,SAAS,SAAS;AAC1C,aAAO,iBAAiB,aAAa,SAAS;AAC9C,aAAO,iBAAiB,WAAW,SAAS;AAC5C,aAAO,iBAAiB,UAAU,SAAS;AAAA,IAC/C;AAAA,EACJ;AACA,WAAS,UAAU;AACnB,WAAS,SAAS;AAClB,WAAS,YAAY,WAAY;AAC7B,aAAS,QAAQ;AACjB,iBAAa,SAAS,IAAI;AAC1B,6BAAyB,QAAQ,QAAQ;AACzC,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAO,oBAAoB,WAAW,SAAS;AAC/C,aAAO,oBAAoB,SAAS,SAAS;AAC7C,aAAO,oBAAoB,aAAa,SAAS;AACjD,aAAO,oBAAoB,WAAW,SAAS;AAC/C,aAAO,oBAAoB,UAAU,SAAS;AAAA,IAClD;AAAA,EACJ;AACA,SAAO,UAAU,IAAI,UAAU,IAAI,aAAa,UAAU,QAAQ,CAAC;AACnE,SAAO;AACX;AAIO,SAAS,SAAS,UAAU,YAAY;AAC3C,MAAI,eAAe,QAAQ;AAAE,iBAAa;AAAA,EAAO;AACjD,MAAI,SAAS,WAAW,IAAI,SAAS,MAAM;AAC3C,YAAU,OAAO,OAAO,SAAS,QAAQ,SAAS,SAAS,IAAI,UAAU;AACzE,MAAI,SAAS,QAAQ,QAAQ;AACzB,eAAW,OAAO,OAAO,SAAS,OAAO;AAAA,EAC7C;AACA,MAAI,OAAO,SAAS;AACpB,MAAI,KAAK,SAAS,GAAG;AACjB,aAAS,UAAU,CAAC;AACpB,QAAI,SAAS,UAAU;AACnB,eAAS,SAAS,IAAI;AAAA,IAC1B;AAAA,EACJ;AACA,SAAO;AACX;AAEA,SAAS,UAAU,QAAQ,KAAK,SAAS,MAAM,YAAY;AACvD,MAAI,QAAQ,QAAQ;AAChB;AAAA,EACJ;AACA,MAAI,OAAO,IAAI,WAAW,YAAY;AAClC,UAAM,IAAI,OAAO;AAAA,EACrB;AACA,MAAI,UAAU,YAAY,GAAG;AAC7B,MAAI,UAAU,YAAY,MAAM;AAChC,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,WAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,QAAI,MAAM,QAAQ,CAAC;AACnB,QAAI,SAAS,OAAO,GAAG;AACvB,QAAI,eAAe,KAAK,GAAG,KAAK,EAAE,IAAI,GAAG,MAAM,UAAa,WAAW,UAAa,MAAM,QAAQ,GAAG,MAAM,QAAQ;AAC/G,UAAI,SAAS,IAAI,GAAG;AACpB,UAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,MAAM,MAAM,MAAM,QAAQ,MAAM,GAAG;AAC/I,kBAAU,QAAQ,QAAQ,SAAS,OAAO,MAAM,oBAAoB,GAAG,GAAG,UAAU;AAAA,MACxF,OACK;AACD,YAAI,WAAW,QAAQ;AACnB,oBAAU;AACV,cAAI,YAAY;AACZ,oBAAQ,KAAK,EAAE,IAAI,QAAQ,MAAM,OAAO,MAAM,oBAAoB,GAAG,GAAG,OAAO,WAAW,MAAM,EAAE,CAAC;AAAA,UACvG;AACA,kBAAQ,KAAK,EAAE,IAAI,WAAW,MAAM,OAAO,MAAM,oBAAoB,GAAG,GAAG,OAAO,WAAW,MAAM,EAAE,CAAC;AAAA,QAC1G;AAAA,MACJ;AAAA,IACJ,WACS,MAAM,QAAQ,MAAM,MAAM,MAAM,QAAQ,GAAG,GAAG;AACnD,UAAI,YAAY;AACZ,gBAAQ,KAAK,EAAE,IAAI,QAAQ,MAAM,OAAO,MAAM,oBAAoB,GAAG,GAAG,OAAO,WAAW,MAAM,EAAE,CAAC;AAAA,MACvG;AACA,cAAQ,KAAK,EAAE,IAAI,UAAU,MAAM,OAAO,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAC1E,gBAAU;AAAA,IACd,OACK;AACD,UAAI,YAAY;AACZ,gBAAQ,KAAK,EAAE,IAAI,QAAQ,MAAY,OAAO,OAAO,CAAC;AAAA,MAC1D;AACA,cAAQ,KAAK,EAAE,IAAI,WAAW,MAAY,OAAO,IAAI,CAAC;AACtD,gBAAU;AAAA,IACd;AAAA,EACJ;AACA,MAAI,CAAC,WAAW,QAAQ,UAAU,QAAQ,QAAQ;AAC9C;AAAA,EACJ;AACA,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,QAAI,MAAM,QAAQ,CAAC;AACnB,QAAI,CAAC,eAAe,QAAQ,GAAG,KAAK,IAAI,GAAG,MAAM,QAAW;AACxD,cAAQ,KAAK,EAAE,IAAI,OAAO,MAAM,OAAO,MAAM,oBAAoB,GAAG,GAAG,OAAO,WAAW,IAAI,GAAG,CAAC,EAAE,CAAC;AAAA,IACxG;AAAA,EACJ;AACJ;AAIO,SAAS,QAAQ,OAAO,OAAO,YAAY;AAC9C,MAAI,eAAe,QAAQ;AAAE,iBAAa;AAAA,EAAO;AACjD,MAAI,UAAU,CAAC;AACf,YAAU,OAAO,OAAO,SAAS,IAAI,UAAU;AAC/C,SAAO;AACX;;;ACxJA,IAAO,0BAAQ,OAAO,OAAO,CAAC,GAAG,cAAM,gBAAQ;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;;;ACZD,IAAI,gBAAgB,SAAS,GAAGC,IAAG;AACjC,kBAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGD,IAAG;AAAE,IAAAC,GAAE,YAAYD;AAAA,EAAG,KAC1E,SAAUC,IAAGD,IAAG;AAAE,aAAS,KAAKA,GAAG,KAAI,OAAO,UAAU,eAAe,KAAKA,IAAG,CAAC,EAAG,CAAAC,GAAE,CAAC,IAAID,GAAE,CAAC;AAAA,EAAG;AACpG,SAAO,cAAc,GAAGA,EAAC;AAC3B;AAEO,SAASE,WAAU,GAAGF,IAAG;AAC9B,MAAI,OAAOA,OAAM,cAAcA,OAAM;AACjC,UAAM,IAAI,UAAU,yBAAyB,OAAOA,EAAC,IAAI,+BAA+B;AAC5F,gBAAc,GAAGA,EAAC;AAClB,WAAS,KAAK;AAAE,SAAK,cAAc;AAAA,EAAG;AACtC,IAAE,YAAYA,OAAM,OAAO,OAAO,OAAOA,EAAC,KAAK,GAAG,YAAYA,GAAE,WAAW,IAAI,GAAG;AACpF;AAqFO,SAAS,UAAU,SAAS,YAAYG,IAAG,WAAW;AAC3D,WAAS,MAAM,OAAO;AAAE,WAAO,iBAAiBA,KAAI,QAAQ,IAAIA,GAAE,SAAU,SAAS;AAAE,cAAQ,KAAK;AAAA,IAAG,CAAC;AAAA,EAAG;AAC3G,SAAO,KAAKA,OAAMA,KAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,aAAS,UAAU,OAAO;AAAE,UAAI;AAAE,aAAK,UAAU,KAAK,KAAK,CAAC;AAAA,MAAG,SAAS,GAAG;AAAE,eAAO,CAAC;AAAA,MAAG;AAAA,IAAE;AAC1F,aAAS,SAAS,OAAO;AAAE,UAAI;AAAE,aAAK,UAAU,OAAO,EAAE,KAAK,CAAC;AAAA,MAAG,SAAS,GAAG;AAAE,eAAO,CAAC;AAAA,MAAG;AAAA,IAAE;AAC7F,aAAS,KAAK,QAAQ;AAAE,aAAO,OAAO,QAAQ,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK,EAAE,KAAK,WAAW,QAAQ;AAAA,IAAG;AAC7G,UAAM,YAAY,UAAU,MAAM,SAAS,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC;AAAA,EACxE,CAAC;AACH;AAEO,SAAS,YAAY,SAAS,MAAM;AACzC,MAAIC,KAAI,EAAE,OAAO,GAAG,MAAM,WAAW;AAAE,QAAI,EAAE,CAAC,IAAI,EAAG,OAAM,EAAE,CAAC;AAAG,WAAO,EAAE,CAAC;AAAA,EAAG,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,GAAGC,IAAG,GAAGC,KAAI,OAAO,QAAQ,OAAO,aAAa,aAAa,WAAW,QAAQ,SAAS;AAC/L,SAAOA,GAAE,OAAO,KAAK,CAAC,GAAGA,GAAE,OAAO,IAAI,KAAK,CAAC,GAAGA,GAAE,QAAQ,IAAI,KAAK,CAAC,GAAG,OAAO,WAAW,eAAeA,GAAE,OAAO,QAAQ,IAAI,WAAW;AAAE,WAAO;AAAA,EAAM,IAAIA;AAC1J,WAAS,KAAK,GAAG;AAAE,WAAO,SAAUC,IAAG;AAAE,aAAO,KAAK,CAAC,GAAGA,EAAC,CAAC;AAAA,IAAG;AAAA,EAAG;AACjE,WAAS,KAAK,IAAI;AACd,QAAI,EAAG,OAAM,IAAI,UAAU,iCAAiC;AAC5D,WAAOD,OAAMA,KAAI,GAAG,GAAG,CAAC,MAAMF,KAAI,KAAKA,GAAG,KAAI;AAC1C,UAAI,IAAI,GAAGC,OAAM,IAAI,GAAG,CAAC,IAAI,IAAIA,GAAE,QAAQ,IAAI,GAAG,CAAC,IAAIA,GAAE,OAAO,OAAO,IAAIA,GAAE,QAAQ,MAAM,EAAE,KAAKA,EAAC,GAAG,KAAKA,GAAE,SAAS,EAAE,IAAI,EAAE,KAAKA,IAAG,GAAG,CAAC,CAAC,GAAG,KAAM,QAAO;AAC3J,UAAIA,KAAI,GAAG,EAAG,MAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK;AACtC,cAAQ,GAAG,CAAC,GAAG;AAAA,QACX,KAAK;AAAA,QAAG,KAAK;AAAG,cAAI;AAAI;AAAA,QACxB,KAAK;AAAG,UAAAD,GAAE;AAAS,iBAAO,EAAE,OAAO,GAAG,CAAC,GAAG,MAAM,MAAM;AAAA,QACtD,KAAK;AAAG,UAAAA,GAAE;AAAS,UAAAC,KAAI,GAAG,CAAC;AAAG,eAAK,CAAC,CAAC;AAAG;AAAA,QACxC,KAAK;AAAG,eAAKD,GAAE,IAAI,IAAI;AAAG,UAAAA,GAAE,KAAK,IAAI;AAAG;AAAA,QACxC;AACI,cAAI,EAAE,IAAIA,GAAE,MAAM,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,SAAS,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI;AAAE,YAAAA,KAAI;AAAG;AAAA,UAAU;AAC3G,cAAI,GAAG,CAAC,MAAM,MAAM,CAAC,KAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,IAAK;AAAE,YAAAA,GAAE,QAAQ,GAAG,CAAC;AAAG;AAAA,UAAO;AACrF,cAAI,GAAG,CAAC,MAAM,KAAKA,GAAE,QAAQ,EAAE,CAAC,GAAG;AAAE,YAAAA,GAAE,QAAQ,EAAE,CAAC;AAAG,gBAAI;AAAI;AAAA,UAAO;AACpE,cAAI,KAAKA,GAAE,QAAQ,EAAE,CAAC,GAAG;AAAE,YAAAA,GAAE,QAAQ,EAAE,CAAC;AAAG,YAAAA,GAAE,IAAI,KAAK,EAAE;AAAG;AAAA,UAAO;AAClE,cAAI,EAAE,CAAC,EAAG,CAAAA,GAAE,IAAI,IAAI;AACpB,UAAAA,GAAE,KAAK,IAAI;AAAG;AAAA,MACtB;AACA,WAAK,KAAK,KAAK,SAASA,EAAC;AAAA,IAC7B,SAAS,GAAG;AAAE,WAAK,CAAC,GAAG,CAAC;AAAG,MAAAC,KAAI;AAAA,IAAG,UAAE;AAAU,UAAI,IAAI;AAAA,IAAG;AACzD,QAAI,GAAG,CAAC,IAAI,EAAG,OAAM,GAAG,CAAC;AAAG,WAAO,EAAE,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,MAAM,KAAK;AAAA,EACnF;AACF;AAkBO,SAAS,SAAS,GAAG;AAC1B,MAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUG,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,MAAIA,GAAG,QAAOA,GAAE,KAAK,CAAC;AACtB,MAAI,KAAK,OAAO,EAAE,WAAW,SAAU,QAAO;AAAA,IAC1C,MAAM,WAAY;AACd,UAAI,KAAK,KAAK,EAAE,OAAQ,KAAI;AAC5B,aAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,IAC1C;AAAA,EACJ;AACA,QAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AACvF;AAEO,SAAS,OAAO,GAAG,GAAG;AAC3B,MAAIA,KAAI,OAAO,WAAW,cAAc,EAAE,OAAO,QAAQ;AACzD,MAAI,CAACA,GAAG,QAAO;AACf,MAAI,IAAIA,GAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;AAC/B,MAAI;AACA,YAAQ,MAAM,UAAU,MAAM,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,KAAM,IAAG,KAAK,EAAE,KAAK;AAAA,EAC7E,SACO,OAAO;AAAE,QAAI,EAAE,MAAa;AAAA,EAAG,UACtC;AACI,QAAI;AACA,UAAI,KAAK,CAAC,EAAE,SAASA,KAAI,EAAE,QAAQ,GAAI,CAAAA,GAAE,KAAK,CAAC;AAAA,IACnD,UACA;AAAU,UAAI,EAAG,OAAM,EAAE;AAAA,IAAO;AAAA,EACpC;AACA,SAAO;AACT;AAkBO,SAAS,cAAc,IAAIC,OAAM,MAAM;AAC5C,MAAI,QAAQ,UAAU,WAAW,EAAG,UAAS,IAAI,GAAG,IAAIA,MAAK,QAAQ,IAAI,IAAI,GAAG,KAAK;AACjF,QAAI,MAAM,EAAE,KAAKA,QAAO;AACpB,UAAI,CAAC,GAAI,MAAK,MAAM,UAAU,MAAM,KAAKA,OAAM,GAAG,CAAC;AACnD,SAAG,CAAC,IAAIA,MAAK,CAAC;AAAA,IAClB;AAAA,EACJ;AACA,SAAO,GAAG,OAAO,MAAM,MAAM,UAAU,MAAM,KAAKA,KAAI,CAAC;AACzD;AAEO,SAAS,QAAQC,IAAG;AACzB,SAAO,gBAAgB,WAAW,KAAK,IAAIA,IAAG,QAAQ,IAAI,QAAQA,EAAC;AACrE;AAEO,SAAS,iBAAiB,SAAS,YAAY,WAAW;AAC/D,MAAI,CAAC,OAAO,cAAe,OAAM,IAAI,UAAU,sCAAsC;AACrF,MAAIC,KAAI,UAAU,MAAM,SAAS,cAAc,CAAC,CAAC,GAAG,GAAGC,KAAI,CAAC;AAC5D,SAAO,IAAI,OAAO,QAAQ,OAAO,kBAAkB,aAAa,gBAAgB,QAAQ,SAAS,GAAG,KAAK,MAAM,GAAG,KAAK,OAAO,GAAG,KAAK,UAAU,WAAW,GAAG,EAAE,OAAO,aAAa,IAAI,WAAY;AAAE,WAAO;AAAA,EAAM,GAAG;AACtN,WAAS,YAAY,GAAG;AAAE,WAAO,SAAUF,IAAG;AAAE,aAAO,QAAQ,QAAQA,EAAC,EAAE,KAAK,GAAG,MAAM;AAAA,IAAG;AAAA,EAAG;AAC9F,WAAS,KAAK,GAAG,GAAG;AAAE,QAAIC,GAAE,CAAC,GAAG;AAAE,QAAE,CAAC,IAAI,SAAUD,IAAG;AAAE,eAAO,IAAI,QAAQ,SAAU,GAAGG,IAAG;AAAE,UAAAD,GAAE,KAAK,CAAC,GAAGF,IAAG,GAAGG,EAAC,CAAC,IAAI,KAAK,OAAO,GAAGH,EAAC;AAAA,QAAG,CAAC;AAAA,MAAG;AAAG,UAAI,EAAG,GAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAAA,IAAG;AAAA,EAAE;AACvK,WAAS,OAAO,GAAGA,IAAG;AAAE,QAAI;AAAE,WAAKC,GAAE,CAAC,EAAED,EAAC,CAAC;AAAA,IAAG,SAAS,GAAG;AAAE,aAAOE,GAAE,CAAC,EAAE,CAAC,GAAG,CAAC;AAAA,IAAG;AAAA,EAAE;AACjF,WAAS,KAAK,GAAG;AAAE,MAAE,iBAAiB,UAAU,QAAQ,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,SAAS,MAAM,IAAI,OAAOA,GAAE,CAAC,EAAE,CAAC,GAAG,CAAC;AAAA,EAAG;AACvH,WAAS,QAAQ,OAAO;AAAE,WAAO,QAAQ,KAAK;AAAA,EAAG;AACjD,WAAS,OAAO,OAAO;AAAE,WAAO,SAAS,KAAK;AAAA,EAAG;AACjD,WAAS,OAAO,GAAGF,IAAG;AAAE,QAAI,EAAEA,EAAC,GAAGE,GAAE,MAAM,GAAGA,GAAE,OAAQ,QAAOA,GAAE,CAAC,EAAE,CAAC,GAAGA,GAAE,CAAC,EAAE,CAAC,CAAC;AAAA,EAAG;AACnF;AAQO,SAAS,cAAc,GAAG;AAC/B,MAAI,CAAC,OAAO,cAAe,OAAM,IAAI,UAAU,sCAAsC;AACrF,MAAIE,KAAI,EAAE,OAAO,aAAa,GAAG;AACjC,SAAOA,KAAIA,GAAE,KAAK,CAAC,KAAK,IAAI,OAAO,aAAa,aAAa,SAAS,CAAC,IAAI,EAAE,OAAO,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,MAAM,GAAG,KAAK,OAAO,GAAG,KAAK,QAAQ,GAAG,EAAE,OAAO,aAAa,IAAI,WAAY;AAAE,WAAO;AAAA,EAAM,GAAG;AAC9M,WAAS,KAAK,GAAG;AAAE,MAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAUC,IAAG;AAAE,aAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,QAAAA,KAAI,EAAE,CAAC,EAAEA,EAAC,GAAG,OAAO,SAAS,QAAQA,GAAE,MAAMA,GAAE,KAAK;AAAA,MAAG,CAAC;AAAA,IAAG;AAAA,EAAG;AAC/J,WAAS,OAAO,SAAS,QAAQ,GAAGA,IAAG;AAAE,YAAQ,QAAQA,EAAC,EAAE,KAAK,SAASA,IAAG;AAAE,cAAQ,EAAE,OAAOA,IAAG,MAAM,EAAE,CAAC;AAAA,IAAG,GAAG,MAAM;AAAA,EAAG;AAC7H;;;ACxPM,SAAU,WAAW,OAAU;AACnC,SAAO,OAAO,UAAU;AAC1B;;;ACGM,SAAU,iBAAoB,YAAgC;AAClE,MAAM,SAAS,SAAC,UAAa;AAC3B,UAAM,KAAK,QAAQ;AACnB,aAAS,QAAQ,IAAI,MAAK,EAAG;EAC/B;AAEA,MAAM,WAAW,WAAW,MAAM;AAClC,WAAS,YAAY,OAAO,OAAO,MAAM,SAAS;AAClD,WAAS,UAAU,cAAc;AACjC,SAAO;AACT;;;ACDO,IAAM,sBAA+C,iBAC1D,SAAC,QAAM;AACL,SAAA,SAAS,wBAAmC,QAA0B;AACpE,WAAO,IAAI;AACX,SAAK,UAAU,SACR,OAAO,SAAM,8CACxB,OAAO,IAAI,SAAC,KAAK,GAAC;AAAK,aAAG,IAAI,IAAC,OAAK,IAAI,SAAQ;IAAzB,CAA6B,EAAE,KAAK,MAAM,IACzD;AACJ,SAAK,OAAO;AACZ,SAAK,SAAS;EAChB;AARA,CAQC;;;ACvBC,SAAU,UAAa,KAA6B,MAAO;AAC/D,MAAI,KAAK;AACP,QAAM,QAAQ,IAAI,QAAQ,IAAI;AAC9B,SAAK,SAAS,IAAI,OAAO,OAAO,CAAC;;AAErC;;;ACOA,IAAA,gBAAA,WAAA;AAyBE,WAAAC,cAAoB,iBAA4B;AAA5B,SAAA,kBAAA;AAdb,SAAA,SAAS;AAER,SAAA,aAAmD;AAMnD,SAAA,cAAqD;EAMV;AAQnD,EAAAA,cAAA,UAAA,cAAA,WAAA;;AACE,QAAI;AAEJ,QAAI,CAAC,KAAK,QAAQ;AAChB,WAAK,SAAS;AAGN,UAAA,aAAe,KAAI;AAC3B,UAAI,YAAY;AACd,aAAK,aAAa;AAClB,YAAI,MAAM,QAAQ,UAAU,GAAG;;AAC7B,qBAAqB,eAAA,SAAA,UAAU,GAAA,iBAAA,aAAA,KAAA,GAAA,CAAA,eAAA,MAAA,iBAAA,aAAA,KAAA,GAAE;AAA5B,kBAAM,WAAM,eAAA;AACf,uBAAO,OAAO,IAAI;;;;;;;;;;;eAEf;AACL,qBAAW,OAAO,IAAI;;;AAIlB,UAAiB,mBAAqB,KAAI;AAClD,UAAI,WAAW,gBAAgB,GAAG;AAChC,YAAI;AACF,2BAAgB;iBACT,GAAG;AACV,mBAAS,aAAa,sBAAsB,EAAE,SAAS,CAAC,CAAC;;;AAIrD,UAAA,cAAgB,KAAI;AAC5B,UAAI,aAAa;AACf,aAAK,cAAc;;AACnB,mBAAwB,gBAAA,SAAA,WAAW,GAAA,kBAAA,cAAA,KAAA,GAAA,CAAA,gBAAA,MAAA,kBAAA,cAAA,KAAA,GAAE;AAAhC,gBAAM,YAAS,gBAAA;AAClB,gBAAI;AACF,4BAAc,SAAS;qBAChB,KAAK;AACZ,uBAAS,WAAM,QAAN,WAAM,SAAN,SAAU,CAAA;AACnB,kBAAI,eAAe,qBAAqB;AACtC,yBAAM,cAAA,cAAA,CAAA,GAAA,OAAO,MAAM,CAAA,GAAA,OAAK,IAAI,MAAM,CAAA;qBAC7B;AACL,uBAAO,KAAK,GAAG;;;;;;;;;;;;;;AAMvB,UAAI,QAAQ;AACV,cAAM,IAAI,oBAAoB,MAAM;;;EAG1C;AAoBA,EAAAA,cAAA,UAAA,MAAA,SAAI,UAAuB;;AAGzB,QAAI,YAAY,aAAa,MAAM;AACjC,UAAI,KAAK,QAAQ;AAGf,sBAAc,QAAQ;aACjB;AACL,YAAI,oBAAoBA,eAAc;AAGpC,cAAI,SAAS,UAAU,SAAS,WAAW,IAAI,GAAG;AAChD;;AAEF,mBAAS,WAAW,IAAI;;AAE1B,SAAC,KAAK,eAAcC,MAAA,KAAK,iBAAW,QAAAA,QAAA,SAAAA,MAAI,CAAA,GAAI,KAAK,QAAQ;;;EAG/D;AAOQ,EAAAD,cAAA,UAAA,aAAR,SAAmB,QAAoB;AAC7B,QAAA,aAAe,KAAI;AAC3B,WAAO,eAAe,UAAW,MAAM,QAAQ,UAAU,KAAK,WAAW,SAAS,MAAM;EAC1F;AASQ,EAAAA,cAAA,UAAA,aAAR,SAAmB,QAAoB;AAC7B,QAAA,aAAe,KAAI;AAC3B,SAAK,aAAa,MAAM,QAAQ,UAAU,KAAK,WAAW,KAAK,MAAM,GAAG,cAAc,aAAa,CAAC,YAAY,MAAM,IAAI;EAC5H;AAMQ,EAAAA,cAAA,UAAA,gBAAR,SAAsB,QAAoB;AAChC,QAAA,aAAe,KAAI;AAC3B,QAAI,eAAe,QAAQ;AACzB,WAAK,aAAa;eACT,MAAM,QAAQ,UAAU,GAAG;AACpC,gBAAU,YAAY,MAAM;;EAEhC;AAgBA,EAAAA,cAAA,UAAA,SAAA,SAAO,UAAsC;AACnC,QAAA,cAAgB,KAAI;AAC5B,mBAAe,UAAU,aAAa,QAAQ;AAE9C,QAAI,oBAAoBA,eAAc;AACpC,eAAS,cAAc,IAAI;;EAE/B;AAlLc,EAAAA,cAAA,SAAS,WAAA;AACrB,QAAM,QAAQ,IAAIA,cAAY;AAC9B,UAAM,SAAS;AACf,WAAO;EACT,GAAE;AA+KJ,SAAAA;GArLA;AAuLO,IAAM,qBAAqB,aAAa;AAEzC,SAAU,eAAe,OAAU;AACvC,SACE,iBAAiB,gBAChB,SAAS,YAAY,SAAS,WAAW,MAAM,MAAM,KAAK,WAAW,MAAM,GAAG,KAAK,WAAW,MAAM,WAAW;AAEpH;AAEA,SAAS,cAAc,WAAwC;AAC7D,MAAI,WAAW,SAAS,GAAG;AACzB,cAAS;SACJ;AACL,cAAU,YAAW;;AAEzB;;;AChNO,IAAM,SAAuB;EAClC,kBAAkB;EAClB,uBAAuB;EACvB,SAAS;EACT,uCAAuC;EACvC,0BAA0B;;;;ACGrB,IAAM,kBAAmC;EAG9C,YAAA,SAAW,SAAqB,SAAgB;AAAE,QAAA,OAAA,CAAA;aAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAO;AAAP,WAAA,KAAA,CAAA,IAAA,UAAA,EAAA;;AACxC,QAAA,WAAa,gBAAe;AACpC,QAAI,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,YAAY;AACxB,aAAO,SAAS,WAAU,MAAnB,UAAQ,cAAA,CAAY,SAAS,OAAO,GAAA,OAAK,IAAI,CAAA,CAAA;;AAEtD,WAAO,WAAU,MAAA,QAAA,cAAA,CAAC,SAAS,OAAO,GAAA,OAAK,IAAI,CAAA,CAAA;EAC7C;EACA,cAAA,SAAa,QAAM;AACT,QAAA,WAAa,gBAAe;AACpC,aAAQ,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,iBAAgB,cAAc,MAAa;EAC/D;EACA,UAAU;;;;ACjBN,SAAU,qBAAqB,KAAQ;AAC3C,kBAAgB,WAAW,WAAA;AACjB,QAAA,mBAAqB,OAAM;AACnC,QAAI,kBAAkB;AAEpB,uBAAiB,GAAG;WACf;AAEL,YAAM;;EAEV,CAAC;AACH;;;ACtBM,SAAU,OAAI;AAAK;;;ACMlB,IAAM,yBAAyB,WAAA;AAAM,SAAA,mBAAmB,KAAK,QAAW,MAAS;AAA5C,GAAsE;AAO5G,SAAU,kBAAkB,OAAU;AAC1C,SAAO,mBAAmB,KAAK,QAAW,KAAK;AACjD;AAOM,SAAU,iBAAoB,OAAQ;AAC1C,SAAO,mBAAmB,KAAK,OAAO,MAAS;AACjD;AAQM,SAAU,mBAAmB,MAAuB,OAAY,OAAU;AAC9E,SAAO;IACL;IACA;IACA;;AAEJ;;;ACrCA,IAAI,UAAuD;AASrD,SAAU,aAAa,IAAc;AACzC,MAAI,OAAO,uCAAuC;AAChD,QAAM,SAAS,CAAC;AAChB,QAAI,QAAQ;AACV,gBAAU,EAAE,aAAa,OAAO,OAAO,KAAI;;AAE7C,OAAE;AACF,QAAI,QAAQ;AACJ,UAAAE,MAAyB,SAAvB,cAAWA,IAAA,aAAE,QAAKA,IAAA;AAC1B,gBAAU;AACV,UAAI,aAAa;AACf,cAAM;;;SAGL;AAGL,OAAE;;AAEN;AAMM,SAAU,aAAa,KAAQ;AACnC,MAAI,OAAO,yCAAyC,SAAS;AAC3D,YAAQ,cAAc;AACtB,YAAQ,QAAQ;;AAEpB;;;ACrBA,IAAA,cAAA,SAAA,QAAA;AAAmC,EAAAC,WAAAC,aAAA,MAAA;AA6BjC,WAAAA,YAAY,aAA6C;AAAzD,QAAA,QACE,OAAA,KAAA,IAAA,KAAO;AATC,UAAA,YAAqB;AAU7B,QAAI,aAAa;AACf,YAAK,cAAc;AAGnB,UAAI,eAAe,WAAW,GAAG;AAC/B,oBAAY,IAAI,KAAI;;WAEjB;AACL,YAAK,cAAc;;;EAEvB;AAzBO,EAAAA,YAAA,SAAP,SAAiB,MAAwB,OAA2B,UAAqB;AACvF,WAAO,IAAI,eAAe,MAAM,OAAO,QAAQ;EACjD;AAgCA,EAAAA,YAAA,UAAA,OAAA,SAAK,OAAS;AACZ,QAAI,KAAK,WAAW;AAClB,gCAA0B,iBAAiB,KAAK,GAAG,IAAI;WAClD;AACL,WAAK,MAAM,KAAM;;EAErB;AASA,EAAAA,YAAA,UAAA,QAAA,SAAM,KAAS;AACb,QAAI,KAAK,WAAW;AAClB,gCAA0B,kBAAkB,GAAG,GAAG,IAAI;WACjD;AACL,WAAK,YAAY;AACjB,WAAK,OAAO,GAAG;;EAEnB;AAQA,EAAAA,YAAA,UAAA,WAAA,WAAA;AACE,QAAI,KAAK,WAAW;AAClB,gCAA0B,uBAAuB,IAAI;WAChD;AACL,WAAK,YAAY;AACjB,WAAK,UAAS;;EAElB;AAEA,EAAAA,YAAA,UAAA,cAAA,WAAA;AACE,QAAI,CAAC,KAAK,QAAQ;AAChB,WAAK,YAAY;AACjB,aAAA,UAAM,YAAW,KAAA,IAAA;AACjB,WAAK,cAAc;;EAEvB;AAEU,EAAAA,YAAA,UAAA,QAAV,SAAgB,OAAQ;AACtB,SAAK,YAAY,KAAK,KAAK;EAC7B;AAEU,EAAAA,YAAA,UAAA,SAAV,SAAiB,KAAQ;AACvB,QAAI;AACF,WAAK,YAAY,MAAM,GAAG;;AAE1B,WAAK,YAAW;;EAEpB;AAEU,EAAAA,YAAA,UAAA,YAAV,WAAA;AACE,QAAI;AACF,WAAK,YAAY,SAAQ;;AAEzB,WAAK,YAAW;;EAEpB;AACF,SAAAA;AAAA,GApHmC,YAAY;AA2H/C,IAAM,QAAQ,SAAS,UAAU;AAEjC,SAAS,KAAyC,IAAQ,SAAY;AACpE,SAAO,MAAM,KAAK,IAAI,OAAO;AAC/B;AAMA,IAAA,oBAAA,WAAA;AACE,WAAAC,kBAAoB,iBAAqC;AAArC,SAAA,kBAAA;EAAwC;AAE5D,EAAAA,kBAAA,UAAA,OAAA,SAAK,OAAQ;AACH,QAAA,kBAAoB,KAAI;AAChC,QAAI,gBAAgB,MAAM;AACxB,UAAI;AACF,wBAAgB,KAAK,KAAK;eACnB,OAAO;AACd,6BAAqB,KAAK;;;EAGhC;AAEA,EAAAA,kBAAA,UAAA,QAAA,SAAM,KAAQ;AACJ,QAAA,kBAAoB,KAAI;AAChC,QAAI,gBAAgB,OAAO;AACzB,UAAI;AACF,wBAAgB,MAAM,GAAG;eAClB,OAAO;AACd,6BAAqB,KAAK;;WAEvB;AACL,2BAAqB,GAAG;;EAE5B;AAEA,EAAAA,kBAAA,UAAA,WAAA,WAAA;AACU,QAAA,kBAAoB,KAAI;AAChC,QAAI,gBAAgB,UAAU;AAC5B,UAAI;AACF,wBAAgB,SAAQ;eACjB,OAAO;AACd,6BAAqB,KAAK;;;EAGhC;AACF,SAAAA;AAAA,GArCA;AAuCA,IAAA,kBAAA,SAAA,QAAA;AAAuC,EAAAC,WAAAC,iBAAA,MAAA;AACrC,WAAAA,gBACE,gBACA,OACA,UAA8B;AAHhC,QAAA,QAKE,OAAA,KAAA,IAAA,KAAO;AAEP,QAAI;AACJ,QAAI,WAAW,cAAc,KAAK,CAAC,gBAAgB;AAGjD,wBAAkB;QAChB,MAAO,mBAAc,QAAd,mBAAc,SAAd,iBAAkB;QACzB,OAAO,UAAK,QAAL,UAAK,SAAL,QAAS;QAChB,UAAU,aAAQ,QAAR,aAAQ,SAAR,WAAY;;WAEnB;AAEL,UAAI;AACJ,UAAI,SAAQ,OAAO,0BAA0B;AAI3C,oBAAU,OAAO,OAAO,cAAc;AACtC,kBAAQ,cAAc,WAAA;AAAM,iBAAA,MAAK,YAAW;QAAhB;AAC5B,0BAAkB;UAChB,MAAM,eAAe,QAAQ,KAAK,eAAe,MAAM,SAAO;UAC9D,OAAO,eAAe,SAAS,KAAK,eAAe,OAAO,SAAO;UACjE,UAAU,eAAe,YAAY,KAAK,eAAe,UAAU,SAAO;;aAEvE;AAEL,0BAAkB;;;AAMtB,UAAK,cAAc,IAAI,iBAAiB,eAAe;;EACzD;AACF,SAAAA;AAAA,GAzCuC,UAAU;AA2CjD,SAAS,qBAAqB,OAAU;AACtC,MAAI,OAAO,uCAAuC;AAChD,iBAAa,KAAK;SACb;AAGL,yBAAqB,KAAK;;AAE9B;AAQA,SAAS,oBAAoB,KAAQ;AACnC,QAAM;AACR;AAOA,SAAS,0BAA0B,cAA2C,YAA2B;AAC/F,MAAA,wBAA0B,OAAM;AACxC,2BAAyB,gBAAgB,WAAW,WAAA;AAAM,WAAA,sBAAsB,cAAc,UAAU;EAA9C,CAA+C;AAC3G;AAOO,IAAM,iBAA6D;EACxE,QAAQ;EACR,MAAM;EACN,OAAO;EACP,UAAU;;;;AC5QL,IAAM,cAA+B,WAAA;AAAM,SAAC,OAAO,WAAW,cAAc,OAAO,cAAe;AAAvD,GAAsE;;;ACoClH,SAAU,SAAYC,IAAI;AAC9B,SAAOA;AACT;;;ACiCM,SAAU,OAAI;AAAC,MAAA,MAAA,CAAA;WAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAsC;AAAtC,QAAA,EAAA,IAAA,UAAA,EAAA;;AACnB,SAAO,cAAc,GAAG;AAC1B;AAGM,SAAU,cAAoB,KAA+B;AACjE,MAAI,IAAI,WAAW,GAAG;AACpB,WAAO;;AAGT,MAAI,IAAI,WAAW,GAAG;AACpB,WAAO,IAAI,CAAC;;AAGd,SAAO,SAAS,MAAM,OAAQ;AAC5B,WAAO,IAAI,OAAO,SAAC,MAAW,IAAuB;AAAK,aAAA,GAAG,IAAI;IAAP,GAAU,KAAY;EAClF;AACF;;;AC9EA,IAAA,cAAA,WAAA;AAkBE,WAAAC,YAAY,WAA6E;AACvF,QAAI,WAAW;AACb,WAAK,aAAa;;EAEtB;AA4BA,EAAAA,YAAA,UAAA,OAAA,SAAQ,UAAyB;AAC/B,QAAMC,cAAa,IAAID,YAAU;AACjC,IAAAC,YAAW,SAAS;AACpB,IAAAA,YAAW,WAAW;AACtB,WAAOA;EACT;AA6IA,EAAAD,YAAA,UAAA,YAAA,SACE,gBACA,OACA,UAA8B;AAHhC,QAAA,QAAA;AAKE,QAAM,aAAa,aAAa,cAAc,IAAI,iBAAiB,IAAI,eAAe,gBAAgB,OAAO,QAAQ;AAErH,iBAAa,WAAA;AACL,UAAAE,MAAuB,OAArB,WAAQA,IAAA,UAAE,SAAMA,IAAA;AACxB,iBAAW,IACT,WAGI,SAAS,KAAK,YAAY,MAAM,IAChC,SAIA,MAAK,WAAW,UAAU,IAG1B,MAAK,cAAc,UAAU,CAAC;IAEtC,CAAC;AAED,WAAO;EACT;AAGU,EAAAF,YAAA,UAAA,gBAAV,SAAwB,MAAmB;AACzC,QAAI;AACF,aAAO,KAAK,WAAW,IAAI;aACpB,KAAK;AAIZ,WAAK,MAAM,GAAG;;EAElB;AA6DA,EAAAA,YAAA,UAAA,UAAA,SAAQ,MAA0B,aAAoC;AAAtE,QAAA,QAAA;AACE,kBAAc,eAAe,WAAW;AAExC,WAAO,IAAI,YAAkB,SAAC,SAAS,QAAM;AAC3C,UAAM,aAAa,IAAI,eAAkB;QACvC,MAAM,SAAC,OAAK;AACV,cAAI;AACF,iBAAK,KAAK;mBACH,KAAK;AACZ,mBAAO,GAAG;AACV,uBAAW,YAAW;;QAE1B;QACA,OAAO;QACP,UAAU;OACX;AACD,YAAK,UAAU,UAAU;IAC3B,CAAC;EACH;AAGU,EAAAA,YAAA,UAAA,aAAV,SAAqB,YAA2B;;AAC9C,YAAOE,MAAA,KAAK,YAAM,QAAAA,QAAA,SAAA,SAAAA,IAAE,UAAU,UAAU;EAC1C;AAOA,EAAAF,YAAA,UAAC,UAAiB,IAAlB,WAAA;AACE,WAAO;EACT;AA4FA,EAAAA,YAAA,UAAA,OAAA,WAAA;AAAK,QAAA,aAAA,CAAA;aAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAA2C;AAA3C,iBAAA,EAAA,IAAA,UAAA,EAAA;;AACH,WAAO,cAAc,UAAU,EAAE,IAAI;EACvC;AA6BA,EAAAA,YAAA,UAAA,YAAA,SAAU,aAAoC;AAA9C,QAAA,QAAA;AACE,kBAAc,eAAe,WAAW;AAExC,WAAO,IAAI,YAAY,SAAC,SAAS,QAAM;AACrC,UAAI;AACJ,YAAK,UACH,SAACG,IAAI;AAAK,eAAC,QAAQA;MAAT,GACV,SAAC,KAAQ;AAAK,eAAA,OAAO,GAAG;MAAV,GACd,WAAA;AAAM,eAAA,QAAQ,KAAK;MAAb,CAAc;IAExB,CAAC;EACH;AA1aO,EAAAH,YAAA,SAAkC,SAAI,WAAwD;AACnG,WAAO,IAAIA,YAAc,SAAS;EACpC;AAyaF,SAAAA;GA9cA;AAudA,SAAS,eAAe,aAA+C;;AACrE,UAAOI,MAAA,gBAAW,QAAX,gBAAW,SAAX,cAAe,OAAO,aAAO,QAAAA,QAAA,SAAAA,MAAI;AAC1C;AAEA,SAAS,WAAc,OAAU;AAC/B,SAAO,SAAS,WAAW,MAAM,IAAI,KAAK,WAAW,MAAM,KAAK,KAAK,WAAW,MAAM,QAAQ;AAChG;AAEA,SAAS,aAAgB,OAAU;AACjC,SAAQ,SAAS,iBAAiB,cAAgB,WAAW,KAAK,KAAK,eAAe,KAAK;AAC7F;;;ACzeM,SAAU,QAAQ,QAAW;AACjC,SAAO,WAAW,WAAM,QAAN,WAAM,SAAA,SAAN,OAAQ,IAAI;AAChC;AAMM,SAAU,QACd,MAAqF;AAErF,SAAO,SAAC,QAAqB;AAC3B,QAAI,QAAQ,MAAM,GAAG;AACnB,aAAO,OAAO,KAAK,SAA+B,cAA2B;AAC3E,YAAI;AACF,iBAAO,KAAK,cAAc,IAAI;iBACvB,KAAK;AACZ,eAAK,MAAM,GAAG;;MAElB,CAAC;;AAEH,UAAM,IAAI,UAAU,wCAAwC;EAC9D;AACF;;;ACjBM,SAAU,yBACd,aACA,QACA,YACA,SACA,YAAuB;AAEvB,SAAO,IAAI,mBAAmB,aAAa,QAAQ,YAAY,SAAS,UAAU;AACpF;AAMA,IAAA,sBAAA,SAAA,QAAA;AAA2C,EAAAC,WAAAC,qBAAA,MAAA;AAiBzC,WAAAA,oBACE,aACA,QACA,YACA,SACQ,YACA,mBAAiC;AAN3C,QAAA,QAoBE,OAAA,KAAA,MAAM,WAAW,KAAC;AAfV,UAAA,aAAA;AACA,UAAA,oBAAA;AAeR,UAAK,QAAQ,SACT,SAAuC,OAAQ;AAC7C,UAAI;AACF,eAAO,KAAK;eACL,KAAK;AACZ,oBAAY,MAAM,GAAG;;IAEzB,IACA,OAAA,UAAM;AACV,UAAK,SAAS,UACV,SAAuC,KAAQ;AAC7C,UAAI;AACF,gBAAQ,GAAG;eACJC,MAAK;AAEZ,oBAAY,MAAMA,IAAG;;AAGrB,aAAK,YAAW;;IAEpB,IACA,OAAA,UAAM;AACV,UAAK,YAAY,aACb,WAAA;AACE,UAAI;AACF,mBAAU;eACH,KAAK;AAEZ,oBAAY,MAAM,GAAG;;AAGrB,aAAK,YAAW;;IAEpB,IACA,OAAA,UAAM;;EACZ;AAEA,EAAAD,oBAAA,UAAA,cAAA,WAAA;;AACE,QAAI,CAAC,KAAK,qBAAqB,KAAK,kBAAiB,GAAI;AAC/C,UAAA,WAAW,KAAI;AACvB,aAAA,UAAM,YAAW,KAAA,IAAA;AAEjB,OAAC,cAAUE,MAAA,KAAK,gBAAU,QAAAA,QAAA,SAAA,SAAAA,IAAA,KAAf,IAAI;;EAEnB;AACF,SAAAF;AAAA,GAnF2C,UAAU;;;ACP9C,IAAM,0BAAuD,iBAClE,SAAC,QAAM;AACL,SAAA,SAAS,8BAA2B;AAClC,WAAO,IAAI;AACX,SAAK,OAAO;AACZ,SAAK,UAAU;EACjB;AAJA,CAIC;;;ACXL,IAAA,WAAA,SAAA,QAAA;AAAgC,EAAAG,WAAAC,UAAA,MAAA;AAwB9B,WAAAA,WAAA;AAAA,QAAA,QAEE,OAAA,KAAA,IAAA,KAAO;AAzBT,UAAA,SAAS;AAED,UAAA,mBAAyC;AAGjD,UAAA,YAA2B,CAAA;AAE3B,UAAA,YAAY;AAEZ,UAAA,WAAW;AAEX,UAAA,cAAmB;;EAenB;AAGA,EAAAA,SAAA,UAAA,OAAA,SAAQ,UAAwB;AAC9B,QAAM,UAAU,IAAI,iBAAiB,MAAM,IAAI;AAC/C,YAAQ,WAAW;AACnB,WAAO;EACT;AAGU,EAAAA,SAAA,UAAA,iBAAV,WAAA;AACE,QAAI,KAAK,QAAQ;AACf,YAAM,IAAI,wBAAuB;;EAErC;AAEA,EAAAA,SAAA,UAAA,OAAA,SAAK,OAAQ;AAAb,QAAA,QAAA;AACE,iBAAa,WAAA;;AACX,YAAK,eAAc;AACnB,UAAI,CAAC,MAAK,WAAW;AACnB,YAAI,CAAC,MAAK,kBAAkB;AAC1B,gBAAK,mBAAmB,MAAM,KAAK,MAAK,SAAS;;;AAEnD,mBAAuB,KAAA,SAAA,MAAK,gBAAgB,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,GAAA,MAAA,KAAA,GAAA,KAAA,GAAE;AAAzC,gBAAM,WAAQ,GAAA;AACjB,qBAAS,KAAK,KAAK;;;;;;;;;;;;IAGzB,CAAC;EACH;AAEA,EAAAA,SAAA,UAAA,QAAA,SAAM,KAAQ;AAAd,QAAA,QAAA;AACE,iBAAa,WAAA;AACX,YAAK,eAAc;AACnB,UAAI,CAAC,MAAK,WAAW;AACnB,cAAK,WAAW,MAAK,YAAY;AACjC,cAAK,cAAc;AACX,YAAA,YAAc,MAAI;AAC1B,eAAO,UAAU,QAAQ;AACvB,oBAAU,MAAK,EAAI,MAAM,GAAG;;;IAGlC,CAAC;EACH;AAEA,EAAAA,SAAA,UAAA,WAAA,WAAA;AAAA,QAAA,QAAA;AACE,iBAAa,WAAA;AACX,YAAK,eAAc;AACnB,UAAI,CAAC,MAAK,WAAW;AACnB,cAAK,YAAY;AACT,YAAA,YAAc,MAAI;AAC1B,eAAO,UAAU,QAAQ;AACvB,oBAAU,MAAK,EAAI,SAAQ;;;IAGjC,CAAC;EACH;AAEA,EAAAA,SAAA,UAAA,cAAA,WAAA;AACE,SAAK,YAAY,KAAK,SAAS;AAC/B,SAAK,YAAY,KAAK,mBAAmB;EAC3C;AAEA,SAAA,eAAIA,SAAA,WAAA,YAAQ;SAAZ,WAAA;;AACE,eAAOC,MAAA,KAAK,eAAS,QAAAA,QAAA,SAAA,SAAAA,IAAE,UAAS;IAClC;;;;AAGU,EAAAD,SAAA,UAAA,gBAAV,SAAwB,YAAyB;AAC/C,SAAK,eAAc;AACnB,WAAO,OAAA,UAAM,cAAa,KAAA,MAAC,UAAU;EACvC;AAGU,EAAAA,SAAA,UAAA,aAAV,SAAqB,YAAyB;AAC5C,SAAK,eAAc;AACnB,SAAK,wBAAwB,UAAU;AACvC,WAAO,KAAK,gBAAgB,UAAU;EACxC;AAGU,EAAAA,SAAA,UAAA,kBAAV,SAA0B,YAA2B;AAArD,QAAA,QAAA;AACQ,QAAAC,MAAqC,MAAnC,WAAQA,IAAA,UAAE,YAASA,IAAA,WAAE,YAASA,IAAA;AACtC,QAAI,YAAY,WAAW;AACzB,aAAO;;AAET,SAAK,mBAAmB;AACxB,cAAU,KAAK,UAAU;AACzB,WAAO,IAAI,aAAa,WAAA;AACtB,YAAK,mBAAmB;AACxB,gBAAU,WAAW,UAAU;IACjC,CAAC;EACH;AAGU,EAAAD,SAAA,UAAA,0BAAV,SAAkC,YAA2B;AACrD,QAAAC,MAAuC,MAArC,WAAQA,IAAA,UAAE,cAAWA,IAAA,aAAE,YAASA,IAAA;AACxC,QAAI,UAAU;AACZ,iBAAW,MAAM,WAAW;eACnB,WAAW;AACpB,iBAAW,SAAQ;;EAEvB;AAQA,EAAAD,SAAA,UAAA,eAAA,WAAA;AACE,QAAME,cAAkB,IAAI,WAAU;AACtC,IAAAA,YAAW,SAAS;AACpB,WAAOA;EACT;AAxHO,EAAAF,SAAA,SAAkC,SAAI,aAA0B,QAAqB;AAC1F,WAAO,IAAI,iBAAoB,aAAa,MAAM;EACpD;AAuHF,SAAAA;GA7IgC,UAAU;AAkJ1C,IAAA,oBAAA,SAAA,QAAA;AAAyC,EAAAG,WAAAC,mBAAA,MAAA;AACvC,WAAAA,kBAES,aACP,QAAsB;AAHxB,QAAA,QAKE,OAAA,KAAA,IAAA,KAAO;AAHA,UAAA,cAAA;AAIP,UAAK,SAAS;;EAChB;AAEA,EAAAA,kBAAA,UAAA,OAAA,SAAK,OAAQ;;AACX,KAAA,MAAAC,MAAA,KAAK,iBAAW,QAAAA,QAAA,SAAA,SAAAA,IAAE,UAAI,QAAA,OAAA,SAAA,SAAA,GAAA,KAAAA,KAAG,KAAK;EAChC;AAEA,EAAAD,kBAAA,UAAA,QAAA,SAAM,KAAQ;;AACZ,KAAA,MAAAC,MAAA,KAAK,iBAAW,QAAAA,QAAA,SAAA,SAAAA,IAAE,WAAK,QAAA,OAAA,SAAA,SAAA,GAAA,KAAAA,KAAG,GAAG;EAC/B;AAEA,EAAAD,kBAAA,UAAA,WAAA,WAAA;;AACE,KAAA,MAAAC,MAAA,KAAK,iBAAW,QAAAA,QAAA,SAAA,SAAAA,IAAE,cAAQ,QAAA,OAAA,SAAA,SAAA,GAAA,KAAAA,GAAA;EAC5B;AAGU,EAAAD,kBAAA,UAAA,aAAV,SAAqB,YAAyB;;AAC5C,YAAO,MAAAC,MAAA,KAAK,YAAM,QAAAA,QAAA,SAAA,SAAAA,IAAE,UAAU,UAAU,OAAC,QAAA,OAAA,SAAA,KAAI;EAC/C;AACF,SAAAD;AAAA,GA1ByC,OAAO;;;AC5JzC,IAAM,wBAA+C;EAC1D,KAAG,WAAA;AAGD,YAAQ,sBAAsB,YAAY,MAAM,IAAG;EACrD;EACA,UAAU;;;;ACwBZ,IAAA,iBAAA,SAAA,QAAA;AAAsC,EAAAE,WAAAC,gBAAA,MAAA;AAUpC,WAAAA,eACU,aACA,aACA,oBAA6D;AAF7D,QAAA,gBAAA,QAAA;AAAA,oBAAA;IAAsB;AACtB,QAAA,gBAAA,QAAA;AAAA,oBAAA;IAAsB;AACtB,QAAA,uBAAA,QAAA;AAAA,2BAAA;IAA6D;AAHvE,QAAA,QAKE,OAAA,KAAA,IAAA,KAAO;AAJC,UAAA,cAAA;AACA,UAAA,cAAA;AACA,UAAA,qBAAA;AAZF,UAAA,UAA0B,CAAA;AAC1B,UAAA,sBAAsB;AAc5B,UAAK,sBAAsB,gBAAgB;AAC3C,UAAK,cAAc,KAAK,IAAI,GAAG,WAAW;AAC1C,UAAK,cAAc,KAAK,IAAI,GAAG,WAAW;;EAC5C;AAEA,EAAAA,eAAA,UAAA,OAAA,SAAK,OAAQ;AACL,QAAAC,MAA+E,MAA7E,YAASA,IAAA,WAAE,UAAOA,IAAA,SAAE,sBAAmBA,IAAA,qBAAE,qBAAkBA,IAAA,oBAAE,cAAWA,IAAA;AAChF,QAAI,CAAC,WAAW;AACd,cAAQ,KAAK,KAAK;AAClB,OAAC,uBAAuB,QAAQ,KAAK,mBAAmB,IAAG,IAAK,WAAW;;AAE7E,SAAK,YAAW;AAChB,WAAA,UAAM,KAAI,KAAA,MAAC,KAAK;EAClB;AAGU,EAAAD,eAAA,UAAA,aAAV,SAAqB,YAAyB;AAC5C,SAAK,eAAc;AACnB,SAAK,YAAW;AAEhB,QAAM,eAAe,KAAK,gBAAgB,UAAU;AAE9C,QAAAC,MAAmC,MAAjC,sBAAmBA,IAAA,qBAAE,UAAOA,IAAA;AAGpC,QAAM,OAAO,QAAQ,MAAK;AAC1B,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,CAAC,WAAW,QAAQ,KAAK,sBAAsB,IAAI,GAAG;AACvF,iBAAW,KAAK,KAAK,CAAC,CAAM;;AAG9B,SAAK,wBAAwB,UAAU;AAEvC,WAAO;EACT;AAEQ,EAAAD,eAAA,UAAA,cAAR,WAAA;AACQ,QAAAC,MAAoE,MAAlE,cAAWA,IAAA,aAAE,qBAAkBA,IAAA,oBAAE,UAAOA,IAAA,SAAE,sBAAmBA,IAAA;AAKrE,QAAM,sBAAsB,sBAAsB,IAAI,KAAK;AAC3D,kBAAc,YAAY,qBAAqB,QAAQ,UAAU,QAAQ,OAAO,GAAG,QAAQ,SAAS,kBAAkB;AAItH,QAAI,CAAC,qBAAqB;AACxB,UAAM,MAAM,mBAAmB,IAAG;AAClC,UAAIC,QAAO;AAGX,eAAS,IAAI,GAAG,IAAI,QAAQ,UAAW,QAAQ,CAAC,KAAgB,KAAK,KAAK,GAAG;AAC3E,QAAAA,QAAO;;AAET,MAAAA,SAAQ,QAAQ,OAAO,GAAGA,QAAO,CAAC;;EAEtC;AACF,SAAAF;AAAA,GAzEsC,OAAO;;;AC6BtC,IAAM,QAAQ,IAAI,WAAkB,SAAC,YAAU;AAAK,SAAA,WAAW,SAAQ;AAAnB,CAAqB;;;AC9D1E,SAAU,YAAY,OAAU;AACpC,SAAO,SAAS,WAAW,MAAM,QAAQ;AAC3C;;;ACDA,SAAS,KAAQ,KAAQ;AACvB,SAAO,IAAI,IAAI,SAAS,CAAC;AAC3B;AAMM,SAAU,aAAa,MAAW;AACtC,SAAO,YAAY,KAAK,IAAI,CAAC,IAAI,KAAK,IAAG,IAAK;AAChD;;;ACdO,IAAM,eAAe,SAAIG,IAAM;AAAwB,SAAAA,MAAK,OAAOA,GAAE,WAAW,YAAY,OAAOA,OAAM;AAAlD;;;ACMxD,SAAU,UAAU,OAAU;AAClC,SAAO,WAAW,UAAK,QAAL,UAAK,SAAA,SAAL,MAAO,IAAI;AAC/B;;;ACHM,SAAU,oBAAoB,OAAU;AAC5C,SAAO,WAAW,MAAM,UAAiB,CAAC;AAC5C;;;ACLM,SAAU,gBAAmB,KAAQ;AACzC,SAAO,OAAO,iBAAiB,WAAW,QAAG,QAAH,QAAG,SAAA,SAAH,IAAM,OAAO,aAAa,CAAC;AACvE;;;ACAM,SAAU,iCAAiC,OAAU;AAEzD,SAAO,IAAI,UACT,mBACE,UAAU,QAAQ,OAAO,UAAU,WAAW,sBAAsB,MAAI,QAAK,OAAG,0HACwC;AAE9H;;;ACXM,SAAU,oBAAiB;AAC/B,MAAI,OAAO,WAAW,cAAc,CAAC,OAAO,UAAU;AACpD,WAAO;;AAGT,SAAO,OAAO;AAChB;AAEO,IAAM,WAAW,kBAAiB;;;ACJnC,SAAU,WAAW,OAAU;AACnC,SAAO,WAAW,UAAK,QAAL,UAAK,SAAA,SAAL,MAAQ,QAAe,CAAC;AAC5C;;;ACHM,SAAiB,mCAAsC,gBAAqC;;;;;;AAC1F,mBAAS,eAAe,UAAS;;;;;;oBAE1B,QAAA,CAAA,GAAA,CAAA;AACe,iBAAA,CAAA,GAAA,QAAM,OAAO,KAAI,CAAE,CAAA;;AAArC,UAAAC,MAAkB,GAAA,KAAA,GAAhB,QAAKA,IAAA,OAAE,OAAIA,IAAA;eACf,KAAA,QAAA,CAAA,GAAA,CAAA;;;AACF,iBAAA,CAAA,GAAA,GAAA,KAAA,CAAA;;6BAEI,KAAM,CAAA;;AAAZ,iBAAA,CAAA,GAAA,GAAA,KAAA,CAAA;;AAAA,aAAA,KAAA;;;;;AAGF,iBAAO,YAAW;;;;;;;;AAIhB,SAAU,qBAAwB,KAAQ;AAG9C,SAAO,WAAW,QAAG,QAAH,QAAG,SAAA,SAAH,IAAK,SAAS;AAClC;;;ACPM,SAAU,UAAa,OAAyB;AACpD,MAAI,iBAAiB,YAAY;AAC/B,WAAO;;AAET,MAAI,SAAS,MAAM;AACjB,QAAI,oBAAoB,KAAK,GAAG;AAC9B,aAAO,sBAAsB,KAAK;;AAEpC,QAAI,YAAY,KAAK,GAAG;AACtB,aAAO,cAAc,KAAK;;AAE5B,QAAI,UAAU,KAAK,GAAG;AACpB,aAAO,YAAY,KAAK;;AAE1B,QAAI,gBAAgB,KAAK,GAAG;AAC1B,aAAO,kBAAkB,KAAK;;AAEhC,QAAI,WAAW,KAAK,GAAG;AACrB,aAAO,aAAa,KAAK;;AAE3B,QAAI,qBAAqB,KAAK,GAAG;AAC/B,aAAO,uBAAuB,KAAK;;;AAIvC,QAAM,iCAAiC,KAAK;AAC9C;AAMM,SAAU,sBAAyB,KAAQ;AAC/C,SAAO,IAAI,WAAW,SAAC,YAAyB;AAC9C,QAAM,MAAM,IAAI,UAAiB,EAAC;AAClC,QAAI,WAAW,IAAI,SAAS,GAAG;AAC7B,aAAO,IAAI,UAAU,UAAU;;AAGjC,UAAM,IAAI,UAAU,gEAAgE;EACtF,CAAC;AACH;AASM,SAAU,cAAiB,OAAmB;AAClD,SAAO,IAAI,WAAW,SAAC,YAAyB;AAU9C,aAAS,IAAI,GAAG,IAAI,MAAM,UAAU,CAAC,WAAW,QAAQ,KAAK;AAC3D,iBAAW,KAAK,MAAM,CAAC,CAAC;;AAE1B,eAAW,SAAQ;EACrB,CAAC;AACH;AAEM,SAAU,YAAe,SAAuB;AACpD,SAAO,IAAI,WAAW,SAAC,YAAyB;AAC9C,YACG,KACC,SAAC,OAAK;AACJ,UAAI,CAAC,WAAW,QAAQ;AACtB,mBAAW,KAAK,KAAK;AACrB,mBAAW,SAAQ;;IAEvB,GACA,SAAC,KAAQ;AAAK,aAAA,WAAW,MAAM,GAAG;IAApB,CAAqB,EAEpC,KAAK,MAAM,oBAAoB;EACpC,CAAC;AACH;AAEM,SAAU,aAAgB,UAAqB;AACnD,SAAO,IAAI,WAAW,SAAC,YAAyB;;;AAC9C,eAAoB,aAAA,SAAA,QAAQ,GAAA,eAAA,WAAA,KAAA,GAAA,CAAA,aAAA,MAAA,eAAA,WAAA,KAAA,GAAE;AAAzB,YAAM,QAAK,aAAA;AACd,mBAAW,KAAK,KAAK;AACrB,YAAI,WAAW,QAAQ;AACrB;;;;;;;;;;;;AAGJ,eAAW,SAAQ;EACrB,CAAC;AACH;AAEM,SAAU,kBAAqB,eAA+B;AAClE,SAAO,IAAI,WAAW,SAAC,YAAyB;AAC9C,IAAAC,SAAQ,eAAe,UAAU,EAAE,MAAM,SAAC,KAAG;AAAK,aAAA,WAAW,MAAM,GAAG;IAApB,CAAqB;EACzE,CAAC;AACH;AAEM,SAAU,uBAA0B,gBAAqC;AAC7E,SAAO,kBAAkB,mCAAmC,cAAc,CAAC;AAC7E;AAEA,SAAeA,SAAW,eAAiC,YAAyB;;;;;;;;;AACxD,4BAAA,cAAA,aAAa;;;;;;AAAtB,kBAAK,kBAAA;AACpB,qBAAW,KAAK,KAAK;AAGrB,cAAI,WAAW,QAAQ;AACrB,mBAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AAGJ,qBAAW,SAAQ;;;;;;;;AChHf,SAAU,gBACd,oBACA,WACA,MACA,OACAC,SAAc;AADd,MAAA,UAAA,QAAA;AAAA,YAAA;EAAS;AACT,MAAAA,YAAA,QAAA;AAAA,IAAAA,UAAA;EAAc;AAEd,MAAM,uBAAuB,UAAU,SAAS,WAAA;AAC9C,SAAI;AACJ,QAAIA,SAAQ;AACV,yBAAmB,IAAI,KAAK,SAAS,MAAM,KAAK,CAAC;WAC5C;AACL,WAAK,YAAW;;EAEpB,GAAG,KAAK;AAER,qBAAmB,IAAI,oBAAoB;AAE3C,MAAI,CAACA,SAAQ;AAKX,WAAO;;AAEX;;;ACeM,SAAU,UAAa,WAA0B,OAAS;AAAT,MAAA,UAAA,QAAA;AAAA,YAAA;EAAS;AAC9D,SAAO,QAAQ,SAAC,QAAQ,YAAU;AAChC,WAAO,UACL,yBACE,YACA,SAAC,OAAK;AAAK,aAAA,gBAAgB,YAAY,WAAW,WAAA;AAAM,eAAA,WAAW,KAAK,KAAK;MAArB,GAAwB,KAAK;IAA1E,GACX,WAAA;AAAM,aAAA,gBAAgB,YAAY,WAAW,WAAA;AAAM,eAAA,WAAW,SAAQ;MAAnB,GAAuB,KAAK;IAAzE,GACN,SAAC,KAAG;AAAK,aAAA,gBAAgB,YAAY,WAAW,WAAA;AAAM,eAAA,WAAW,MAAM,GAAG;MAApB,GAAuB,KAAK;IAAzE,CAA0E,CACpF;EAEL,CAAC;AACH;;;ACPM,SAAU,YAAe,WAA0B,OAAiB;AAAjB,MAAA,UAAA,QAAA;AAAA,YAAA;EAAiB;AACxE,SAAO,QAAQ,SAAC,QAAQ,YAAU;AAChC,eAAW,IAAI,UAAU,SAAS,WAAA;AAAM,aAAA,OAAO,UAAU,UAAU;IAA3B,GAA8B,KAAK,CAAC;EAC9E,CAAC;AACH;;;AC7DM,SAAU,mBAAsB,OAA6B,WAAwB;AACzF,SAAO,UAAU,KAAK,EAAE,KAAK,YAAY,SAAS,GAAG,UAAU,SAAS,CAAC;AAC3E;;;ACFM,SAAU,gBAAmB,OAAuB,WAAwB;AAChF,SAAO,UAAU,KAAK,EAAE,KAAK,YAAY,SAAS,GAAG,UAAU,SAAS,CAAC;AAC3E;;;ACJM,SAAU,cAAiB,OAAqB,WAAwB;AAC5E,SAAO,IAAI,WAAc,SAAC,YAAU;AAElC,QAAI,IAAI;AAER,WAAO,UAAU,SAAS,WAAA;AACxB,UAAI,MAAM,MAAM,QAAQ;AAGtB,mBAAW,SAAQ;aACd;AAGL,mBAAW,KAAK,MAAM,GAAG,CAAC;AAI1B,YAAI,CAAC,WAAW,QAAQ;AACtB,eAAK,SAAQ;;;IAGnB,CAAC;EACH,CAAC;AACH;;;ACfM,SAAU,iBAAoB,OAAoB,WAAwB;AAC9E,SAAO,IAAI,WAAc,SAAC,YAAU;AAClC,QAAIC;AAKJ,oBAAgB,YAAY,WAAW,WAAA;AAErC,MAAAA,YAAY,MAAc,QAAe,EAAC;AAE1C,sBACE,YACA,WACA,WAAA;;AACE,YAAI;AACJ,YAAI;AACJ,YAAI;AAEF,UAACC,MAAkBD,UAAS,KAAI,GAA7B,QAAKC,IAAA,OAAE,OAAIA,IAAA;iBACP,KAAK;AAEZ,qBAAW,MAAM,GAAG;AACpB;;AAGF,YAAI,MAAM;AAKR,qBAAW,SAAQ;eACd;AAEL,qBAAW,KAAK,KAAK;;MAEzB,GACA,GACA,IAAI;IAER,CAAC;AAMD,WAAO,WAAA;AAAM,aAAA,WAAWD,cAAQ,QAARA,cAAQ,SAAA,SAARA,UAAU,MAAM,KAAKA,UAAS,OAAM;IAA/C;EACf,CAAC;AACH;;;ACvDM,SAAU,sBAAyB,OAAyB,WAAwB;AACxF,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,yBAAyB;;AAE3C,SAAO,IAAI,WAAc,SAAC,YAAU;AAClC,oBAAgB,YAAY,WAAW,WAAA;AACrC,UAAME,YAAW,MAAM,OAAO,aAAa,EAAC;AAC5C,sBACE,YACA,WACA,WAAA;AACE,QAAAA,UAAS,KAAI,EAAG,KAAK,SAAC,QAAM;AAC1B,cAAI,OAAO,MAAM;AAGf,uBAAW,SAAQ;iBACd;AACL,uBAAW,KAAK,OAAO,KAAK;;QAEhC,CAAC;MACH,GACA,GACA,IAAI;IAER,CAAC;EACH,CAAC;AACH;;;ACzBM,SAAU,2BAA8B,OAA8B,WAAwB;AAClG,SAAO,sBAAsB,mCAAmC,KAAK,GAAG,SAAS;AACnF;;;ACoBM,SAAU,UAAa,OAA2B,WAAwB;AAC9E,MAAI,SAAS,MAAM;AACjB,QAAI,oBAAoB,KAAK,GAAG;AAC9B,aAAO,mBAAmB,OAAO,SAAS;;AAE5C,QAAI,YAAY,KAAK,GAAG;AACtB,aAAO,cAAc,OAAO,SAAS;;AAEvC,QAAI,UAAU,KAAK,GAAG;AACpB,aAAO,gBAAgB,OAAO,SAAS;;AAEzC,QAAI,gBAAgB,KAAK,GAAG;AAC1B,aAAO,sBAAsB,OAAO,SAAS;;AAE/C,QAAI,WAAW,KAAK,GAAG;AACrB,aAAO,iBAAiB,OAAO,SAAS;;AAE1C,QAAI,qBAAqB,KAAK,GAAG;AAC/B,aAAO,2BAA2B,OAAO,SAAS;;;AAGtD,QAAM,iCAAiC,KAAK;AAC9C;;;ACoDM,SAAU,KAAQ,OAA2B,WAAyB;AAC1E,SAAO,YAAY,UAAU,OAAO,SAAS,IAAI,UAAU,KAAK;AAClE;;;ACxBM,SAAU,KAAE;AAAI,MAAA,OAAA,CAAA;WAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAiC;AAAjC,SAAA,EAAA,IAAA,UAAA,EAAA;;AACpB,MAAM,YAAY,aAAa,IAAI;AACnC,SAAO,KAAK,MAAa,SAAS;AACpC;;;ACsCM,SAAU,WAAW,qBAA0B,WAAyB;AAC5E,MAAM,eAAe,WAAW,mBAAmB,IAAI,sBAAsB,WAAA;AAAM,WAAA;EAAA;AACnF,MAAM,OAAO,SAAC,YAA6B;AAAK,WAAA,WAAW,MAAM,aAAY,CAAE;EAA/B;AAChD,SAAO,IAAI,WAAW,YAAY,SAAC,YAAU;AAAK,WAAA,UAAU,SAAS,MAAa,GAAG,UAAU;EAA7C,IAAiD,IAAI;AACzG;;;ACpGO,IAAM,aAA6B,iBAAiB,SAAC,QAAM;AAAK,SAAA,SAAS,iBAAc;AAC5F,WAAO,IAAI;AACX,SAAK,OAAO;AACZ,SAAK,UAAU;EACjB;AAJuE,CAItE;;;ACyBK,SAAU,cAAoB,QAAuBC,SAA+B;AACxF,MAAM,YAAY,OAAOA,YAAW;AACpC,SAAO,IAAI,QAAe,SAAC,SAAS,QAAM;AACxC,QAAI,YAAY;AAChB,QAAI;AACJ,WAAO,UAAU;MACf,MAAM,SAAC,OAAK;AACV,iBAAS;AACT,oBAAY;MACd;MACA,OAAO;MACP,UAAU,WAAA;AACR,YAAI,WAAW;AACb,kBAAQ,MAAM;mBACL,WAAW;AACpB,kBAAQA,QAAQ,YAAY;eACvB;AACL,iBAAO,IAAI,WAAU,CAAE;;MAE3B;KACD;EACH,CAAC;AACH;;;AC5BM,SAAU,IAAU,SAAyC,SAAa;AAC9E,SAAO,QAAQ,SAAC,QAAQ,YAAU;AAEhC,QAAI,QAAQ;AAGZ,WAAO,UACL,yBAAyB,YAAY,SAAC,OAAQ;AAG5C,iBAAW,KAAK,QAAQ,KAAK,SAAS,OAAO,OAAO,CAAC;IACvD,CAAC,CAAC;EAEN,CAAC;AACH;;;ACzCM,SAAU,eACd,QACA,YACA,SACA,YACA,cACA,QACA,mBACA,qBAAgC;AAGhC,MAAM,SAAc,CAAA;AAEpB,MAAI,SAAS;AAEb,MAAI,QAAQ;AAEZ,MAAI,aAAa;AAKjB,MAAM,gBAAgB,WAAA;AAIpB,QAAI,cAAc,CAAC,OAAO,UAAU,CAAC,QAAQ;AAC3C,iBAAW,SAAQ;;EAEvB;AAGA,MAAM,YAAY,SAAC,OAAQ;AAAK,WAAC,SAAS,aAAa,WAAW,KAAK,IAAI,OAAO,KAAK,KAAK;EAA5D;AAEhC,MAAM,aAAa,SAAC,OAAQ;AAI1B,cAAU,WAAW,KAAK,KAAY;AAItC;AAKA,QAAI,gBAAgB;AAGpB,cAAU,QAAQ,OAAO,OAAO,CAAC,EAAE,UACjC,yBACE,YACA,SAAC,YAAU;AAGT,uBAAY,QAAZ,iBAAY,SAAA,SAAZ,aAAe,UAAU;AAEzB,UAAI,QAAQ;AAGV,kBAAU,UAAiB;aACtB;AAEL,mBAAW,KAAK,UAAU;;IAE9B,GACA,WAAA;AAGE,sBAAgB;IAClB,GAEA,QACA,WAAA;AAIE,UAAI,eAAe;AAKjB,YAAI;AAIF;;AAME,gBAAM,gBAAgB,OAAO,MAAK;AAIlC,gBAAI,mBAAmB;AACrB,8BAAgB,YAAY,mBAAmB,WAAA;AAAM,uBAAA,WAAW,aAAa;cAAxB,CAAyB;mBACzE;AACL,yBAAW,aAAa;;;AAR5B,iBAAO,OAAO,UAAU,SAAS,YAAU;;;AAY3C,wBAAa;iBACN,KAAK;AACZ,qBAAW,MAAM,GAAG;;;IAG1B,CAAC,CACF;EAEL;AAGA,SAAO,UACL,yBAAyB,YAAY,WAAW,WAAA;AAE9C,iBAAa;AACb,kBAAa;EACf,CAAC,CAAC;AAKJ,SAAO,WAAA;AACL,4BAAmB,QAAnB,wBAAmB,SAAA,SAAnB,oBAAmB;EACrB;AACF;;;AClEM,SAAU,SACd,SACA,gBACA,YAA6B;AAA7B,MAAA,eAAA,QAAA;AAAA,iBAAA;EAA6B;AAE7B,MAAI,WAAW,cAAc,GAAG;AAE9B,WAAO,SAAS,SAAC,GAAG,GAAC;AAAK,aAAA,IAAI,SAACC,IAAQ,IAAU;AAAK,eAAA,eAAe,GAAGA,IAAG,GAAG,EAAE;MAA1B,CAA2B,EAAE,UAAU,QAAQ,GAAG,CAAC,CAAC,CAAC;IAAjF,GAAoF,UAAU;aAC/G,OAAO,mBAAmB,UAAU;AAC7C,iBAAa;;AAGf,SAAO,QAAQ,SAAC,QAAQ,YAAU;AAAK,WAAA,eAAe,QAAQ,YAAY,SAAS,UAAU;EAAtD,CAAuD;AAChG;;;AChCM,SAAU,SAAyC,YAA6B;AAA7B,MAAA,eAAA,QAAA;AAAA,iBAAA;EAA6B;AACpF,SAAO,SAAS,UAAU,UAAU;AACtC;;;ACbM,SAAU,MAAsC,mBAA0B;AAC9E,SAAO,IAAI,WAA+B,SAAC,YAAU;AACnD,cAAU,kBAAiB,CAAE,EAAE,UAAU,UAAU;EACrD,CAAC;AACH;;;ACkDM,SAAU,WACd,UAAgD;AAEhD,SAAO,QAAQ,SAAC,QAAQ,YAAU;AAChC,QAAI,WAAgC;AACpC,QAAI,YAAY;AAChB,QAAI;AAEJ,eAAW,OAAO,UAChB,yBAAyB,YAAY,QAAW,QAAW,SAAC,KAAG;AAC7D,sBAAgB,UAAU,SAAS,KAAK,WAAW,QAAQ,EAAE,MAAM,CAAC,CAAC;AACrE,UAAI,UAAU;AACZ,iBAAS,YAAW;AACpB,mBAAW;AACX,sBAAc,UAAU,UAAU;aAC7B;AAGL,oBAAY;;IAEhB,CAAC,CAAC;AAGJ,QAAI,WAAW;AAMb,eAAS,YAAW;AACpB,iBAAW;AACX,oBAAe,UAAU,UAAU;;EAEvC,CAAC;AACH;;;AC9DM,SAAU,UACd,SACA,gBAA6G;AAE7G,SAAO,WAAW,cAAc,IAAI,SAAS,SAAS,gBAAgB,CAAC,IAAI,SAAS,SAAS,CAAC;AAChG;;;AC5CM,SAAU,eAAqB,cAAe;AAClD,SAAO,QAAQ,SAAC,QAAQ,YAAU;AAChC,QAAI,WAAW;AACf,WAAO,UACL,yBACE,YACA,SAAC,OAAK;AACJ,iBAAW;AACX,iBAAW,KAAK,KAAK;IACvB,GACA,WAAA;AACE,UAAI,CAAC,UAAU;AACb,mBAAW,KAAK,YAAa;;AAE/B,iBAAW,SAAQ;IACrB,CAAC,CACF;EAEL,CAAC;AACH;;;ACMM,SAAU,SAAY,UAAoB;AAC9C,SAAO,QAAQ,SAAC,QAAQ,YAAU;AAGhC,QAAI;AACF,aAAO,UAAU,UAAU;;AAE3B,iBAAW,IAAI,QAAQ;;EAE3B,CAAC;AACH;;;ACWM,SAAU,UACd,SACA,gBAA6G;AAE7G,SAAO,QAAQ,SAAC,QAAQ,YAAU;AAChC,QAAI,kBAAyD;AAC7D,QAAI,QAAQ;AAEZ,QAAI,aAAa;AAIjB,QAAM,gBAAgB,WAAA;AAAM,aAAA,cAAc,CAAC,mBAAmB,WAAW,SAAQ;IAArD;AAE5B,WAAO,UACL,yBACE,YACA,SAAC,OAAK;AAEJ,0BAAe,QAAf,oBAAe,SAAA,SAAf,gBAAiB,YAAW;AAC5B,UAAI,aAAa;AACjB,UAAM,aAAa;AAEnB,gBAAU,QAAQ,OAAO,UAAU,CAAC,EAAE,UACnC,kBAAkB,yBACjB,YAIA,SAAC,YAAU;AAAK,eAAA,WAAW,KAAK,iBAAiB,eAAe,OAAO,YAAY,YAAY,YAAY,IAAI,UAAU;MAAzG,GAChB,WAAA;AAIE,0BAAkB;AAClB,sBAAa;MACf,CAAC,CACD;IAEN,GACA,WAAA;AACE,mBAAa;AACb,oBAAa;IACf,CAAC,CACF;EAEL,CAAC;AACH;;;ACvFM,SAAU,UAAa,UAA8B;AACzD,SAAO,QAAQ,SAAC,QAAQ,YAAU;AAChC,cAAU,QAAQ,EAAE,UAAU,yBAAyB,YAAY,WAAA;AAAM,aAAA,WAAW,SAAQ;IAAnB,GAAuB,IAAI,CAAC;AACrG,KAAC,WAAW,UAAU,OAAO,UAAU,UAAU;EACnD,CAAC;AACH;;;ACoHM,SAAU,IACd,gBACA,OACA,UAA8B;AAK9B,MAAM,cACJ,WAAW,cAAc,KAAK,SAAS,WAElC,EAAE,MAAM,gBAA2E,OAAO,SAAQ,IACnG;AAEN,SAAO,cACH,QAAQ,SAAC,QAAQ,YAAU;;AACzB,KAAAC,MAAA,YAAY,eAAS,QAAAA,QAAA,SAAA,SAAAA,IAAA,KAArB,WAAW;AACX,QAAI,UAAU;AACd,WAAO,UACL,yBACE,YACA,SAAC,OAAK;;AACJ,OAAAA,MAAA,YAAY,UAAI,QAAAA,QAAA,SAAA,SAAAA,IAAA,KAAhB,aAAmB,KAAK;AACxB,iBAAW,KAAK,KAAK;IACvB,GACA,WAAA;;AACE,gBAAU;AACV,OAAAA,MAAA,YAAY,cAAQ,QAAAA,QAAA,SAAA,SAAAA,IAAA,KAApB,WAAW;AACX,iBAAW,SAAQ;IACrB,GACA,SAAC,KAAG;;AACF,gBAAU;AACV,OAAAA,MAAA,YAAY,WAAK,QAAAA,QAAA,SAAA,SAAAA,IAAA,KAAjB,aAAoB,GAAG;AACvB,iBAAW,MAAM,GAAG;IACtB,GACA,WAAA;;AACE,UAAI,SAAS;AACX,SAAAA,MAAA,YAAY,iBAAW,QAAAA,QAAA,SAAA,SAAAA,IAAA,KAAvB,WAAW;;AAEb,OAAA,KAAA,YAAY,cAAQ,QAAA,OAAA,SAAA,SAAA,GAAA,KAApB,WAAW;IACb,CAAC,CACF;EAEL,CAAC,IAID;AACN;;;AC9LA,SAAS,aAAa,MAAY;AAChC,SAAO,SAA2B,QAAQ,IAAI,KAAK;AACrD;AAEc,SAAP,eAAgC,MAAY;AACjD,MAAM,eAA8B;IAAA;;EAAA;AACpC,MAAI,WAAW;AACf,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAM,OAAO,SAACC,UAAoB;AAAK,WAAA,aAAa,KAAKA,QAAO;EAAzB;AACvC,MAAM,UAAU,SAACA,UAAoB;AACnC,WAAC,aAAa,aAAa,SAAS,CAAC,IAAIA;EAAzC;AACF,MAAM,aAAa,SAAC,QAAqB;AACvC,QAAI,mBAAmB,MAAM;AAC3B,wBAAkB;AAClB,2BAAqB,aAAa;AAClC,sBAAgB;;EAEpB;AACA,MAAM,eAAe,SAAC,QAAqB;AACzC,QAAI,WAAW,eAAe;AAC5B,wBAAkB;AAClB,2BAAqB;AACrB,sBAAgB;;EAEpB;AACA,MAAM,MAAM,WAAA;AAAM,WAAA,aAAa,IAAG;EAAhB;AAClB,MAAM,uBAAuB,WAAA;AAAM,WAAA;EAAA;AAEnC,MAAM,WAAW,SAACC,OAAY;AAC5B,QAAI,OAAOA,SAAQA,SAAQ,KAAK;AAC9B;QAAI;;MAAA;AACJ;;AAEF,YAAQA,OAAM;MACZ,KAAK;AACH;UAAI;;QAAA;AACJ;MACF,KAAK;AACH;UAAI;;QAAA;AACJ;MACF,KAAK;AACH;UAAI;;QAAA;AACJ;MACF,KAAK;AACH;UAAI;;QAAA;AACJ;MACF,KAAK;AACH;UAAI;;QAAA;AACJ;MACF,KAAK;AACH;UAAI;;QAAA;AACJ;MACF,KAAK;AACH;UAAI;;QAAA;AACJ;;EAEN;AAEA,WAAa,SAAA,KAAA,QAAiB,WAAW,QAAQ,YAAY;AAC3D,QAAM,OAAO,KAAK,QAAQ;AAC1B,YAAQ,aAAa,aAAa,SAAS,CAAC,GAAG;MAC7C,KAAA;AACE,iBAAS,IAAI;AACb;MACF,KAAA;AACE,gBAAQ,MAAM;UACZ,KAAK;AACH,gBAAG;AACH;UACF,KAAK;AACH;cAAU;;YAAA;AACV;cAAI;;YAAA;AACJ;;AAEJ;MACF,KAAA;AACE,YAAI,SAAS,KAAK;AAChB;YAAI;;UAAA;eACC;AACL;YAAY;;UAAA;AACZ,cAAG;;AAEL;MACF,KAAA;AACE,YAAI,WAAW,KAAK,YAAY,KAAK,QAAQ,MAAM,GAAG;AACpD;YAAY;;UAAA;AACZ,cAAG;;AAEL;MACF,KAAA;AACE,YAAI,SAAS,KAAK;AAChB;YAAO;;UAAA;mBACE,SAAS,OAAO,SAAS,KAAK;AACvC;YAAO;;UAAA;mBACE,OAAO,OAAO,OAAO,KAAK;AACnC,+BAAoB;AACpB,cAAG;;AAEL;MACF,KAAA;AACE;UAAO;;QAAA;AACP;MACF,KAAA;AACE,YAAI,SAAS,OAAO,SAAS,KAAK;AAChC;YAAO;;UAAA;eACF;AACL;YAAO;;UAAA;;AAET;MACF,KAAA;MACA,KAAA;MACA,KAAA;AACE,YAAI,OAAO,OAAO,OAAO,KAAK;AAC5B,+BAAoB;AACpB,cAAG;;AAEL;MACF,KAAA;AACE,YAAI,SAAS,KAAK;AAChB,cAAG;mBACM,CAAC,aAAa,IAAI,GAAG;AAC9B;YAAY;;UAAA;AACZ;YAAO;;UAAA;AACP,mBAAS,IAAI;;AAEf;MACF,KAAA;AACE,YAAI,SAAS,KAAK;AAChB,cAAG;mBACM,SAAS,KAAK;AACvB;YAAU;;UAAA;AACV;YAAO;;UAAA;;AAET;MACF,KAAA;AACE,YAAI,SAAS,KAAK;AAChB,cAAG;mBACM,SAAS,KAAK;AACvB;YAAU;;UAAA;AACV;YAAO;;UAAA;AACP;YAAI;;UAAA;;AAEN;MACF,KAAA;AACE,YAAI,SAAS,KAAK;AAChB;YAAO;;UAAA;;AAET;MACF,KAAA;AACE,YAAI,CAAC,aAAa,IAAI,GAAG;AACvB;YAAY;;UAAA;AACZ;YAAO;;UAAA;AACP,mBAAS,IAAI;;AAEf;MACF,KAAA;AACE,YAAI,SAAS,KAAK;AAChB,cAAG;mBACM,SAAS,KAAK;AACvB;YAAU;;UAAA;AACV;YAAO;;UAAA;;AAET;;;AAIN,MAAI,sBAAsB,MAAM;AAC9B,iBAAa,SAAS;;AAExB,MAAM,SAAS;IACb,mBAAmB,OAAO,KAAK,MAAM,GAAG,eAAe,IAAI;;AAE7D,MAAM,aAAa,SAAC,MAAY;AAC9B,WAAA,OAAO,KAAK,KAAK,MAAM,KAAK,SAAS,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC;EAA/D;AACF,WAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AACjD,YAAQ,aAAa,CAAC,GAAG;MACvB,KAAA;AACE,eAAO,KAAK,GAAG;AACf;MACF,KAAA;MACA,KAAA;AACE,eAAO,KAAK,GAAG;AACf;MACF,KAAA;AACE,mBAAW,MAAM;AACjB;MACF,KAAA;AACE,mBAAW,OAAO;AAClB;MACF,KAAA;AACE,mBAAW,MAAM;AACjB;MACF,KAAA;MACA,KAAA;AACE,eAAO,KAAK,GAAG;AACf;MACF,KAAA;MACA,KAAA;MACA,KAAA;MACA,KAAA;AACE,eAAO,KAAK,GAAG;AACf;;;AAGN,SAAO,OAAO,KAAK,EAAE;AACvB;;;AC7LO,SAAS,eAAe;AAC3B,MAAI,UAAU;AACd,MAAI,WAAW;AACf,WAAS,QAAQ,GAAG,QAAQ,IAAI,SAAS,GAAG;AACxC,QAAIC,KAAI,KAAK,IAAI,KAAK,KAAK;AAC3B,gBAAYA,KAAI,QAAS;AACzB,SAAKA,KAAI,QAAS,GAAG;AACjB,WAAK,aAAa;AAClB,aAAO,CAAC,SAAS,QAAQ;AAAA,IAC7B;AAAA,EACJ;AACA,MAAI,aAAa,KAAK,IAAI,KAAK,KAAK;AAEpC,cAAY,aAAa,OAAS;AAElC,cAAY,aAAa,QAAS;AAClC,OAAK,aAAa,QAAS,GAAG;AAC1B,SAAK,aAAa;AAClB,WAAO,CAAC,SAAS,QAAQ;AAAA,EAC7B;AACA,WAAS,QAAQ,GAAG,SAAS,IAAI,SAAS,GAAG;AACzC,QAAIA,KAAI,KAAK,IAAI,KAAK,KAAK;AAC3B,iBAAaA,KAAI,QAAS;AAC1B,SAAKA,KAAI,QAAS,GAAG;AACjB,WAAK,aAAa;AAClB,aAAO,CAAC,SAAS,QAAQ;AAAA,IAC7B;AAAA,EACJ;AACA,QAAM,IAAI,MAAM,gBAAgB;AACpC;AAQO,SAAS,cAAc,IAAI,IAAI,OAAO;AACzC,WAAS,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG;AAC/B,UAAM,QAAQ,OAAO;AACrB,UAAM,UAAU,EAAE,UAAU,KAAK,KAAK,MAAM;AAC5C,UAAM,QAAQ,UAAU,QAAQ,MAAO,SAAS;AAChD,UAAM,KAAK,IAAI;AACf,QAAI,CAAC,SAAS;AACV;AAAA,IACJ;AAAA,EACJ;AACA,QAAM,YAAc,OAAO,KAAM,MAAU,KAAK,MAAS;AACzD,QAAM,cAAc,EAAE,MAAM,KAAK;AACjC,QAAM,MAAM,cAAc,YAAY,MAAO,aAAa,GAAI;AAC9D,MAAI,CAAC,aAAa;AACd;AAAA,EACJ;AACA,WAAS,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG;AAC/B,UAAM,QAAQ,OAAO;AACrB,UAAM,UAAU,EAAE,UAAU,KAAK;AACjC,UAAM,QAAQ,UAAU,QAAQ,MAAO,SAAS;AAChD,UAAM,KAAK,IAAI;AACf,QAAI,CAAC,SAAS;AACV;AAAA,IACJ;AAAA,EACJ;AACA,QAAM,KAAM,OAAO,KAAM,CAAI;AACjC;AAEA,IAAM,iBAAiB;AAQhB,SAAS,gBAAgB,KAAK;AAEjC,QAAM,QAAQ,IAAI,CAAC,MAAM;AACzB,MAAI,OAAO;AACP,UAAM,IAAI,MAAM,CAAC;AAAA,EACrB;AAIA,QAAM,OAAO;AACb,MAAI,UAAU;AACd,MAAI,WAAW;AACf,WAAS,YAAY,OAAO,KAAK;AAE7B,UAAM,WAAW,OAAO,IAAI,MAAM,OAAO,GAAG,CAAC;AAC7C,gBAAY;AACZ,cAAU,UAAU,OAAO;AAE3B,QAAI,WAAW,gBAAgB;AAC3B,iBAAW,YAAa,UAAU,iBAAkB;AACpD,gBAAU,UAAU;AAAA,IACxB;AAAA,EACJ;AACA,cAAY,KAAK,GAAG;AACpB,cAAY,KAAK,GAAG;AACpB,cAAY,KAAK,EAAE;AACnB,cAAY,EAAE;AACd,SAAO,QAAQ,OAAO,SAAS,QAAQ,IAAI,QAAQ,SAAS,QAAQ;AACxE;AASO,SAAS,cAAc,IAAI,IAAI;AAClC,MAAI,OAAO,QAAQ,IAAI,EAAE;AAGzB,QAAM,WAAW,KAAK,KAAK;AAC3B,MAAI,UAAU;AACV,WAAO,OAAO,KAAK,IAAI,KAAK,EAAE;AAAA,EAClC;AACA,QAAM,SAAS,eAAe,KAAK,IAAI,KAAK,EAAE;AAC9C,SAAO,WAAW,MAAM,SAAS;AACrC;AASO,SAAS,eAAe,IAAI,IAAI;AACnC,GAAC,EAAE,IAAI,GAAG,IAAI,WAAW,IAAI,EAAE;AAO/B,MAAI,MAAM,SAAU;AAChB,WAAO,OAAO,iBAAiB,KAAK,EAAE;AAAA,EAC1C;AAUA,QAAM,MAAM,KAAK;AACjB,QAAM,OAAQ,OAAO,KAAO,MAAM,KAAM;AACxC,QAAM,OAAQ,MAAM,KAAM;AAI1B,MAAI,SAAS,MAAM,MAAM,UAAU,OAAO;AAC1C,MAAI,SAAS,MAAM,OAAO;AAC1B,MAAI,SAAS,OAAO;AAEpB,QAAM,OAAO;AACb,MAAI,UAAU,MAAM;AAChB,cAAU,KAAK,MAAM,SAAS,IAAI;AAClC,cAAU;AAAA,EACd;AACA,MAAI,UAAU,MAAM;AAChB,cAAU,KAAK,MAAM,SAAS,IAAI;AAClC,cAAU;AAAA,EACd;AAIA,SAAQ,OAAO,SAAS,IACpB,+BAA+B,MAAM,IACrC,+BAA+B,MAAM;AAC7C;AACA,SAAS,WAAW,IAAI,IAAI;AACxB,SAAO,EAAE,IAAI,OAAO,GAAG,IAAI,OAAO,EAAE;AACxC;AACA,SAAS,QAAQ,IAAI,IAAI;AACrB,SAAO,EAAE,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE;AACpC;AAKA,SAAS,OAAO,SAAS,UAAU;AAC/B,aAAW,CAAC;AACZ,MAAI,SAAS;AACT,cAAU,CAAC,UAAU;AAAA,EACzB,OACK;AAID,gBAAY;AAAA,EAChB;AACA,SAAO,QAAQ,SAAS,QAAQ;AACpC;AAIA,IAAM,iCAAiC,CAAC,aAAa;AACjD,QAAM,UAAU,OAAO,QAAQ;AAC/B,SAAO,UAAU,MAAM,QAAQ,MAAM,IAAI;AAC7C;AAQO,SAAS,cAAc,OAAO,OAAO;AACxC,MAAI,SAAS,GAAG;AAEZ,WAAO,QAAQ,KAAM;AACjB,YAAM,KAAM,QAAQ,MAAQ,GAAI;AAChC,cAAQ,UAAU;AAAA,IACtB;AACA,UAAM,KAAK,KAAK;AAAA,EACpB,OACK;AACD,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,YAAM,KAAM,QAAQ,MAAO,GAAG;AAC9B,cAAQ,SAAS;AAAA,IACrB;AACA,UAAM,KAAK,CAAC;AAAA,EAChB;AACJ;AAMO,SAAS,eAAe;AAC3B,MAAIA,KAAI,KAAK,IAAI,KAAK,KAAK;AAC3B,MAAI,SAASA,KAAI;AACjB,OAAKA,KAAI,QAAS,GAAG;AACjB,SAAK,aAAa;AAClB,WAAO;AAAA,EACX;AACA,EAAAA,KAAI,KAAK,IAAI,KAAK,KAAK;AACvB,aAAWA,KAAI,QAAS;AACxB,OAAKA,KAAI,QAAS,GAAG;AACjB,SAAK,aAAa;AAClB,WAAO;AAAA,EACX;AACA,EAAAA,KAAI,KAAK,IAAI,KAAK,KAAK;AACvB,aAAWA,KAAI,QAAS;AACxB,OAAKA,KAAI,QAAS,GAAG;AACjB,SAAK,aAAa;AAClB,WAAO;AAAA,EACX;AACA,EAAAA,KAAI,KAAK,IAAI,KAAK,KAAK;AACvB,aAAWA,KAAI,QAAS;AACxB,OAAKA,KAAI,QAAS,GAAG;AACjB,SAAK,aAAa;AAClB,WAAO;AAAA,EACX;AAEA,EAAAA,KAAI,KAAK,IAAI,KAAK,KAAK;AACvB,aAAWA,KAAI,OAAS;AACxB,WAAS,YAAY,IAAIA,KAAI,SAAU,KAAK,YAAY,IAAI;AACxD,IAAAA,KAAI,KAAK,IAAI,KAAK,KAAK;AAC3B,OAAKA,KAAI,QAAS;AACd,UAAM,IAAI,MAAM,gBAAgB;AACpC,OAAK,aAAa;AAElB,SAAO,WAAW;AACtB;;;ACvSO,IAAM,aAA2B,iCAAiB;AACzD,SAAS,mBAAmB;AACxB,QAAM,KAAK,IAAI,SAAS,IAAI,YAAY,CAAC,CAAC;AAE1C,QAAM,KAAK,OAAO,WAAW,cACzB,OAAO,GAAG,gBAAgB,cAC1B,OAAO,GAAG,iBAAiB,cAC3B,OAAO,GAAG,gBAAgB,cAC1B,OAAO,GAAG,iBAAiB,eAC1B,CAAC,CAAC,WAAW,QACV,OAAO,WAAW,YAClB,OAAO,QAAQ,OAAO,YACtB,QAAQ,IAAI,uBAAuB;AAC3C,MAAI,IAAI;AACJ,UAAM,MAAM,OAAO,sBAAsB;AACzC,UAAM,MAAM,OAAO,qBAAqB;AACxC,UAAM,OAAO,OAAO,GAAG;AACvB,UAAM,OAAO,OAAO,sBAAsB;AAC1C,WAAO;AAAA,MACH,MAAM,OAAO,CAAC;AAAA,MACd,WAAW;AAAA,MACX,MAAM,OAAO;AACT,cAAM,KAAK,OAAO,SAAS,WAAW,QAAQ,OAAO,KAAK;AAC1D,YAAI,KAAK,OAAO,KAAK,KAAK;AACtB,gBAAM,IAAI,MAAM,kBAAkB,KAAK,EAAE;AAAA,QAC7C;AACA,eAAO;AAAA,MACX;AAAA,MACA,OAAO,OAAO;AACV,cAAM,KAAK,OAAO,SAAS,WAAW,QAAQ,OAAO,KAAK;AAC1D,YAAI,KAAK,QAAQ,KAAK,MAAM;AACxB,gBAAM,IAAI,MAAM,mBAAmB,KAAK,EAAE;AAAA,QAC9C;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,OAAO;AACP,WAAG,YAAY,GAAG,KAAK,MAAM,KAAK,GAAG,IAAI;AACzC,eAAO;AAAA,UACH,IAAI,GAAG,SAAS,GAAG,IAAI;AAAA,UACvB,IAAI,GAAG,SAAS,GAAG,IAAI;AAAA,QAC3B;AAAA,MACJ;AAAA,MACA,KAAK,OAAO;AACR,WAAG,YAAY,GAAG,KAAK,OAAO,KAAK,GAAG,IAAI;AAC1C,eAAO;AAAA,UACH,IAAI,GAAG,SAAS,GAAG,IAAI;AAAA,UACvB,IAAI,GAAG,SAAS,GAAG,IAAI;AAAA,QAC3B;AAAA,MACJ;AAAA,MACA,IAAI,IAAI,IAAI;AACR,WAAG,SAAS,GAAG,IAAI,IAAI;AACvB,WAAG,SAAS,GAAG,IAAI,IAAI;AACvB,eAAO,GAAG,YAAY,GAAG,IAAI;AAAA,MACjC;AAAA,MACA,KAAK,IAAI,IAAI;AACT,WAAG,SAAS,GAAG,IAAI,IAAI;AACvB,WAAG,SAAS,GAAG,IAAI,IAAI;AACvB,eAAO,GAAG,aAAa,GAAG,IAAI;AAAA,MAClC;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AAAA,IACH,MAAM;AAAA,IACN,WAAW;AAAA,IACX,MAAM,OAAO;AACT,UAAI,OAAO,SAAS,UAAU;AAC1B,gBAAQ,MAAM,SAAS;AAAA,MAC3B;AACA,wBAAkB,KAAK;AACvB,aAAO;AAAA,IACX;AAAA,IACA,OAAO,OAAO;AACV,UAAI,OAAO,SAAS,UAAU;AAC1B,gBAAQ,MAAM,SAAS;AAAA,MAC3B;AACA,yBAAmB,KAAK;AACxB,aAAO;AAAA,IACX;AAAA,IACA,IAAI,OAAO;AACP,UAAI,OAAO,SAAS,UAAU;AAC1B,gBAAQ,MAAM,SAAS;AAAA,MAC3B;AACA,wBAAkB,KAAK;AACvB,aAAO,gBAAgB,KAAK;AAAA,IAChC;AAAA,IACA,KAAK,OAAO;AACR,UAAI,OAAO,SAAS,UAAU;AAC1B,gBAAQ,MAAM,SAAS;AAAA,MAC3B;AACA,yBAAmB,KAAK;AACxB,aAAO,gBAAgB,KAAK;AAAA,IAChC;AAAA,IACA,IAAI,IAAI,IAAI;AACR,aAAO,cAAc,IAAI,EAAE;AAAA,IAC/B;AAAA,IACA,KAAK,IAAI,IAAI;AACT,aAAO,eAAe,IAAI,EAAE;AAAA,IAChC;AAAA,EACJ;AACJ;AACA,SAAS,kBAAkB,OAAO;AAC9B,MAAI,CAAC,aAAa,KAAK,KAAK,GAAG;AAC3B,UAAM,IAAI,MAAM,oBAAoB,KAAK;AAAA,EAC7C;AACJ;AACA,SAAS,mBAAmB,OAAO;AAC/B,MAAI,CAAC,WAAW,KAAK,KAAK,GAAG;AACzB,UAAM,IAAI,MAAM,qBAAqB,KAAK;AAAA,EAC9C;AACJ;;;ACjHA,IAAM,SAAS,uBAAO,IAAI,kCAAkC;AAarD,SAAS,kBAAkB;AAC9B,MAAI,WAAW,MAAM,KAAK,QAAW;AACjC,UAAMC,MAAK,IAAI,WAAW,YAAY;AACtC,UAAM,KAAK,IAAI,WAAW,YAAY;AACtC,eAAW,MAAM,IAAI;AAAA,MACjB,WAAWC,OAAM;AACb,eAAOD,IAAG,OAAOC,KAAI;AAAA,MACzB;AAAA,MACA,WAAW,OAAO;AACd,eAAO,GAAG,OAAO,KAAK;AAAA,MAC1B;AAAA,MACA,UAAUA,OAAM;AACZ,YAAI;AACA,6BAAmBA,KAAI;AACvB,iBAAO;AAAA,QACX,SACOC,IAAG;AACN,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,SAAO,WAAW,MAAM;AAC5B;;;ACzBO,IAAI;AAAA,CACV,SAAUC,WAAU;AAIjB,EAAAA,UAASA,UAAS,QAAQ,IAAI,CAAC,IAAI;AAKnC,EAAAA,UAASA,UAAS,OAAO,IAAI,CAAC,IAAI;AAQlC,EAAAA,UAASA,UAAS,iBAAiB,IAAI,CAAC,IAAI;AAK5C,EAAAA,UAASA,UAAS,YAAY,IAAI,CAAC,IAAI;AAIvC,EAAAA,UAASA,UAAS,UAAU,IAAI,CAAC,IAAI;AAKrC,EAAAA,UAASA,UAAS,OAAO,IAAI,CAAC,IAAI;AACtC,GAAG,aAAa,WAAW,CAAC,EAAE;AAIvB,IAAM,cAAc;AAIpB,IAAM,cAAc;AAIpB,IAAM,aAAa;AAInB,IAAM,YAAY;AAIlB,IAAM,YAAY;AAClB,IAAM,eAAN,MAAmB;AAAA,EACtB,YAAY,aAAa,gBAAgB,EAAE,YAAY;AACnD,SAAK,aAAa;AAIlB,SAAK,QAAQ,CAAC;AACd,SAAK,SAAS,CAAC;AACf,SAAK,MAAM,CAAC;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,QAAI,KAAK,IAAI,QAAQ;AACjB,WAAK,OAAO,KAAK,IAAI,WAAW,KAAK,GAAG,CAAC;AACzC,WAAK,MAAM,CAAC;AAAA,IAChB;AACA,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ;AACpC,aAAO,KAAK,OAAO,CAAC,EAAE;AAC1B,QAAI,QAAQ,IAAI,WAAW,GAAG;AAC9B,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AACzC,YAAM,IAAI,KAAK,OAAO,CAAC,GAAG,MAAM;AAChC,gBAAU,KAAK,OAAO,CAAC,EAAE;AAAA,IAC7B;AACA,SAAK,SAAS,CAAC;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO;AACH,SAAK,MAAM,KAAK,EAAE,QAAQ,KAAK,QAAQ,KAAK,KAAK,IAAI,CAAC;AACtD,SAAK,SAAS,CAAC;AACf,SAAK,MAAM,CAAC;AACZ,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO;AAEH,QAAI,QAAQ,KAAK,OAAO;AAExB,QAAI,OAAO,KAAK,MAAM,IAAI;AAC1B,QAAI,CAAC;AACD,YAAM,IAAI,MAAM,iCAAiC;AACrD,SAAK,SAAS,KAAK;AACnB,SAAK,MAAM,KAAK;AAEhB,SAAK,OAAO,MAAM,UAAU;AAC5B,WAAO,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,SAAS,MAAM;AACf,WAAO,KAAK,QAAS,WAAW,IAAK,UAAU,CAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,OAAO;AACP,QAAI,KAAK,IAAI,QAAQ;AACjB,WAAK,OAAO,KAAK,IAAI,WAAW,KAAK,GAAG,CAAC;AACzC,WAAK,MAAM,CAAC;AAAA,IAChB;AACA,SAAK,OAAO,KAAK,KAAK;AACtB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,OAAO;AACV,iBAAa,KAAK;AAElB,WAAO,QAAQ,KAAM;AACjB,WAAK,IAAI,KAAM,QAAQ,MAAQ,GAAI;AACnC,cAAQ,UAAU;AAAA,IACtB;AACA,SAAK,IAAI,KAAK,KAAK;AACnB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAO;AACT,gBAAY,KAAK;AACjB,kBAAc,OAAO,KAAK,GAAG;AAC7B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK,OAAO;AACR,SAAK,IAAI,KAAK,QAAQ,IAAI,CAAC;AAC3B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAO;AACT,SAAK,OAAO,MAAM,UAAU;AAC5B,WAAO,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,OAAO;AACV,QAAI,QAAQ,KAAK,WAAW,KAAK;AACjC,SAAK,OAAO,MAAM,UAAU;AAC5B,WAAO,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAO;AACT,kBAAc,KAAK;AACnB,QAAI,QAAQ,IAAI,WAAW,CAAC;AAC5B,QAAI,SAAS,MAAM,MAAM,EAAE,WAAW,GAAG,OAAO,IAAI;AACpD,WAAO,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,OAAO;AACV,QAAI,QAAQ,IAAI,WAAW,CAAC;AAC5B,QAAI,SAAS,MAAM,MAAM,EAAE,WAAW,GAAG,OAAO,IAAI;AACpD,WAAO,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ,OAAO;AACX,iBAAa,KAAK;AAClB,QAAI,QAAQ,IAAI,WAAW,CAAC;AAC5B,QAAI,SAAS,MAAM,MAAM,EAAE,UAAU,GAAG,OAAO,IAAI;AACnD,WAAO,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS,OAAO;AACZ,gBAAY,KAAK;AACjB,QAAI,QAAQ,IAAI,WAAW,CAAC;AAC5B,QAAI,SAAS,MAAM,MAAM,EAAE,SAAS,GAAG,OAAO,IAAI;AAClD,WAAO,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,OAAO;AACV,gBAAY,KAAK;AAEjB,aAAU,SAAS,IAAM,SAAS,QAAS;AAC3C,kBAAc,OAAO,KAAK,GAAG;AAC7B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS,OAAO;AACZ,QAAI,QAAQ,IAAI,WAAW,CAAC,GAAG,OAAO,IAAI,SAAS,MAAM,MAAM,GAAG,KAAK,WAAW,IAAI,KAAK;AAC3F,SAAK,SAAS,GAAG,GAAG,IAAI,IAAI;AAC5B,SAAK,SAAS,GAAG,GAAG,IAAI,IAAI;AAC5B,WAAO,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ,OAAO;AACX,QAAI,QAAQ,IAAI,WAAW,CAAC,GAAG,OAAO,IAAI,SAAS,MAAM,MAAM,GAAG,KAAK,WAAW,KAAK,KAAK;AAC5F,SAAK,SAAS,GAAG,GAAG,IAAI,IAAI;AAC5B,SAAK,SAAS,GAAG,GAAG,IAAI,IAAI;AAC5B,WAAO,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAO;AACT,QAAI,KAAK,WAAW,IAAI,KAAK;AAC7B,kBAAc,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG;AACpC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,OAAO;AACV,UAAM,KAAK,WAAW,IAAI,KAAK,GAE/B,OAAO,GAAG,MAAM,IAAI,KAAM,GAAG,MAAM,IAAK,MAAM,MAAO,GAAG,MAAM,IAAM,GAAG,OAAO,MAAO;AACrF,kBAAc,IAAI,IAAI,KAAK,GAAG;AAC9B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,OAAO;AACV,UAAM,KAAK,WAAW,KAAK,KAAK;AAChC,kBAAc,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG;AACpC,WAAO;AAAA,EACX;AACJ;AACO,IAAM,eAAN,MAAmB;AAAA,EACtB,YAAY,KAAK,aAAa,gBAAgB,EAAE,YAAY;AACxD,SAAK,aAAa;AAClB,SAAK,WAAW;AAIhB,SAAK,SAAS;AACd,SAAK,MAAM;AACX,SAAK,MAAM,IAAI;AACf,SAAK,MAAM;AACX,SAAK,OAAO,IAAI,SAAS,IAAI,QAAQ,IAAI,YAAY,IAAI,UAAU;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM;AACF,QAAI,MAAM,KAAK,OAAO,GAAG,UAAU,QAAQ,GAAG,WAAW,MAAM;AAC/D,QAAI,WAAW,KAAK,WAAW,KAAK,WAAW;AAC3C,YAAM,IAAI,MAAM,2BAA2B,UAAU,gBAAgB,QAAQ;AACjF,WAAO,CAAC,SAAS,QAAQ;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,UAAU,SAAS;AACpB,QAAI,QAAQ,KAAK;AACjB,YAAQ,UAAU;AAAA,MACd,KAAK,SAAS;AACV,eAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAM;AAAA,QAEpC;AACA;AAAA;AAAA,MAEJ,KAAK,SAAS;AACV,aAAK,OAAO;AAAA,MAChB,KAAK,SAAS;AACV,aAAK,OAAO;AACZ;AAAA,MACJ,KAAK,SAAS;AACV,YAAI,MAAM,KAAK,OAAO;AACtB,aAAK,OAAO;AACZ;AAAA,MACJ,KAAK,SAAS;AACV,mBAAS;AACL,gBAAM,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI;AAC1B,cAAI,OAAO,SAAS,UAAU;AAC1B,gBAAI,YAAY,UAAa,OAAO,SAAS;AACzC,oBAAM,IAAI,MAAM,uBAAuB;AAAA,YAC3C;AACA;AAAA,UACJ;AACA,eAAK,KAAK,IAAI,EAAE;AAAA,QACpB;AACA;AAAA,MACJ;AACI,cAAM,IAAI,MAAM,yBAAyB,QAAQ;AAAA,IACzD;AACA,SAAK,aAAa;AAClB,WAAO,KAAK,IAAI,SAAS,OAAO,KAAK,GAAG;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAIA,eAAe;AACX,QAAI,KAAK,MAAM,KAAK;AAChB,YAAM,IAAI,WAAW,eAAe;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AACJ,WAAO,KAAK,OAAO,IAAI;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,QAAI,MAAM,KAAK,OAAO;AAEtB,WAAQ,QAAQ,IAAK,EAAE,MAAM;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AACJ,WAAO,WAAW,IAAI,GAAG,KAAK,SAAS,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,WAAO,WAAW,KAAK,GAAG,KAAK,SAAS,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,QAAI,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS;AAE7B,QAAI,IAAI,EAAE,KAAK;AACf,UAAO,OAAO,KAAO,KAAK,MAAM,MAAO;AACvC,SAAM,OAAO,IAAK;AAClB,WAAO,WAAW,IAAI,IAAI,EAAE;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO;AACH,QAAI,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS;AAC7B,WAAO,OAAO,KAAK,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU;AAEN,WAAO,KAAK,KAAK,WAAW,KAAK,OAAO,KAAK,GAAG,IAAI;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW;AAEP,WAAO,KAAK,KAAK,UAAU,KAAK,OAAO,KAAK,GAAG,IAAI;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU;AACN,WAAO,WAAW,KAAK,KAAK,SAAS,GAAG,KAAK,SAAS,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW;AACP,WAAO,WAAW,IAAI,KAAK,SAAS,GAAG,KAAK,SAAS,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AAEJ,WAAO,KAAK,KAAK,YAAY,KAAK,OAAO,KAAK,GAAG,IAAI;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AAEL,WAAO,KAAK,KAAK,YAAY,KAAK,OAAO,KAAK,GAAG,IAAI;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AACJ,QAAI,MAAM,KAAK,OAAO,GAAG,QAAQ,KAAK;AACtC,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,WAAO,KAAK,IAAI,SAAS,OAAO,QAAQ,GAAG;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,WAAO,KAAK,WAAW,KAAK,MAAM,CAAC;AAAA,EACvC;AACJ;AAIA,SAAS,YAAY,KAAK;AACtB,MAAI,OAAO,OAAO,UAAU;AACxB,UAAM,OAAO,GAAG;AAAA,EACpB,WACS,OAAO,OAAO,UAAU;AAC7B,UAAM,IAAI,MAAM,oBAAoB,OAAO,GAAG;AAAA,EAClD;AACA,MAAI,CAAC,OAAO,UAAU,GAAG,KACrB,MAAM,aACN,MAAM;AACN,UAAM,IAAI,MAAM,oBAAoB,GAAG;AAC/C;AAIA,SAAS,aAAa,KAAK;AACvB,MAAI,OAAO,OAAO,UAAU;AACxB,UAAM,OAAO,GAAG;AAAA,EACpB,WACS,OAAO,OAAO,UAAU;AAC7B,UAAM,IAAI,MAAM,qBAAqB,OAAO,GAAG;AAAA,EACnD;AACA,MAAI,CAAC,OAAO,UAAU,GAAG,KACrB,MAAM,cACN,MAAM;AACN,UAAM,IAAI,MAAM,qBAAqB,GAAG;AAChD;AAIA,SAAS,cAAc,KAAK;AACxB,MAAI,OAAO,OAAO,UAAU;AACxB,UAAM,IAAI;AACV,UAAM,OAAO,GAAG;AAChB,QAAI,OAAO,MAAM,GAAG,KAAK,MAAM,OAAO;AAClC,YAAM,IAAI,MAAM,sBAAsB,CAAC;AAAA,IAC3C;AAAA,EACJ,WACS,OAAO,OAAO,UAAU;AAC7B,UAAM,IAAI,MAAM,sBAAsB,OAAO,GAAG;AAAA,EACpD;AACA,MAAI,OAAO,SAAS,GAAG,MAClB,MAAM,eAAe,MAAM;AAC5B,UAAM,IAAI,MAAM,sBAAsB,GAAG;AACjD;;;AC5eA,IAAY,YAAA,0BAAAC,YAAL;AAEL,EAAAA,WAAAA,WAAA,YAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,cAAA,IAAA,EAAA,IAAA;;;AAkEF,SAAS,mBAA2B;AAClC,SAAO,EAAE,QAAQ,CAAA,EAAE;;AAGrB,IAAa,SAAgD;EAC3D,OAAO,SAAiB,SAAuB,IAAI,aAAA,GAA8B;AAC/E,WAAO,QAAQ,QAAQ,MAAA,EAAQ,QAAA,CAAS,CAAC,KAAK,KAAA,MAAW;AACvD,UAAI,UAAU,OACZ,oBAAmB,OAAO;QAAO;QAAY;SAAS,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;;AAGpF,WAAO;;EAGT,OAAO,OAAkC,QAAyB;AAChE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,iBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK,GAAG;AACN,cAAI,QAAQ,GACV;AAGF,gBAAM,SAAS,mBAAmB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAChE,cAAI,OAAO,UAAU,OACnB,SAAQ,OAAO,OAAO,GAAA,IAAO,OAAO;AAEtC;;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAgD,MAAkB;AAChE,WAAO,OAAO,YAAY,QAAS,CAAA,CAAE;;EAEvC,YAAqD,QAAmB;AACtE,UAAM,UAAU,iBAAA;AAChB,YAAQ,SAAS,OAAO,QAAQ,OAAO,UAAU,CAAA,CAAE,EAAE,OAAA,CAClD,KAAK,CAAC,KAAK,KAAA,MAAW;AACrB,UAAI,UAAU,OACZ,KAAI,GAAA,IAAO;AAEb,aAAO;OAET,CAAA,CAAE;AAEJ,WAAO;;EAGT,KAAK,QAAoD;AACvD,UAAM,SAAS,iBAAA;AAEf,QAAI,WAAW,OACb,YAAW,OAAO,OAAO,KAAK,MAAA,EAC5B,QAAO,OAAO,GAAA,IAAO,OAAO,GAAA;AAGhC,WAAO;;EAGT,OAAO,SAAyC;AAC9C,UAAM,SAAiC,CAAA;AACvC,QAAI,QAAQ,OACV,YAAW,OAAO,OAAO,KAAK,QAAQ,MAAA,EACpC,QAAO,GAAA,IAAO,QAAQ,OAAO,GAAA;AAGjC,WAAO;;;AAIX,SAAS,+BAAmD;AAC1D,SAAO;IAAE,KAAK;IAAI,OAAO;;;AAG3B,IAAa,qBAAqD;EAChE,OAAO,SAA6B,SAAuB,IAAI,aAAA,GAA8B;AAC3F,QAAI,QAAQ,QAAQ,GAClB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,GAAA;AAEnC,QAAI,QAAQ,UAAU,OACpB,OAAM,OAAO,MAAM,KAAK,QAAQ,KAAA,GAAQ,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEpE,WAAO;;EAGT,OAAO,OAAkC,QAAqC;AAC5E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,6BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,MAAM,OAAO,OAAA;AACrB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AAClE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA4D,MAA8B;AACxF,WAAO,mBAAmB,YAAY,QAAS,CAAA,CAAE;;EAEnD,YAAiE,QAA+B;AAC9F,UAAM,UAAU,6BAAA;AAChB,YAAQ,MAAM,OAAO,OAAO;AAC5B,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;;;AAIX,SAAS,kBAAyB;AAChC,SAAO;IACL,WAAW;IACX,aAAa;IACb,aAAa;IACb,WAAW;IACX,aAAa;IACb,WAAW;;;AAIf,IAAa,QAAgD;EAC3D,OAAO,SAAgB,SAAuB,IAAI,aAAA,GAA8B;AAC9E,QAAI,QAAQ,cAAc,OACxB,QAAO,OAAO,CAAA,EAAG,MAAM,QAAQ,SAAA;AAEjC,QAAI,QAAQ,gBAAgB,OAC1B,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,WAAA;AAEnC,QAAI,QAAQ,gBAAgB,OAC1B,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,WAAA;AAEnC,QAAI,QAAQ,cAAc,OACxB,QAAO,OAAO,EAAA,EAAI,KAAK,QAAQ,SAAA;AAEjC,QAAI,QAAQ,gBAAgB,OAC1B,QAAO,OAAO,OAAO,KAAK,QAAQ,WAAA,GAAc,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAE5E,QAAI,QAAQ,cAAc,OACxB,WAAU,OAAO,UAAU,KAAK,QAAQ,SAAA,GAAY,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhF,WAAO;;EAGT,OAAO,OAAkC,QAAwB;AAC/D,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,gBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,EACV;AAGF,kBAAQ,YAAY,OAAO,MAAA;AAC3B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,cAAc,OAAO,OAAA;AAC7B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,cAAc,OAAO,OAAA;AAC7B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAY,OAAO,KAAA;AAC3B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,cAAc,OAAO,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AAC1E;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAY,UAAU,OAAO,UAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AAC9E;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA+C,MAAiB;AAC9D,WAAO,MAAM,YAAY,QAAS,CAAA,CAAE;;EAEtC,YAAoD,QAAkB;AACpE,UAAM,UAAU,gBAAA;AAChB,YAAQ,YAAY,OAAO,aAAa;AACxC,YAAQ,cAAc,OAAO,eAAe;AAC5C,YAAQ,cAAc,OAAO,eAAe;AAC5C,YAAQ,YAAY,OAAO,aAAa;AACxC,YAAQ,cAAc,OAAO,eAAe;AAC5C,YAAQ,YAAY,OAAO,aAAa;AACxC,WAAO;;EAGT,KAAK,OAAmB;AACtB,UAAM,SAAS,gBAAA;AACf,QAAI,UAAU,KACZ,QAAO,YAAY,UAAU;aACpB,OAAO,UAAU,UAC1B,QAAO,YAAY;aACV,OAAO,UAAU,SAC1B,QAAO,cAAc;aACZ,OAAO,UAAU,SAC1B,QAAO,cAAc;aACZ,WAAW,MAAM,QAAQ,KAAA,EAClC,QAAO,YAAY;aACV,OAAO,UAAU,SAC1B,QAAO,cAAc;aACZ,OAAO,UAAU,YAC1B,OAAM,IAAI,WAAW,MAAM,iCAAiC,OAAO,KAAA;AAErE,WAAO;;EAGT,OAAO,SAAkF;AACvF,QAAI,QAAQ,gBAAgB,OAC1B,QAAO,QAAQ;aACN,SAAS,gBAAgB,OAClC,QAAO,QAAQ;aACN,SAAS,cAAc,OAChC,QAAO,QAAQ;aACN,SAAS,gBAAgB,OAClC,QAAO,QAAQ;aACN,SAAS,cAAc,OAChC,QAAO,QAAQ;aACN,SAAS,cAAc,OAChC,QAAO;;;AAMb,SAAS,sBAAiC;AACxC,SAAO,EAAE,QAAQ,CAAA,EAAE;;AAGrB,IAAa,YAAyD;EACpE,OAAO,SAAoB,SAAuB,IAAI,aAAA,GAA8B;AAClF,eAAWC,MAAK,QAAQ,OACtB,OAAM,OAAO,MAAM,KAAKA,EAAA,GAAK,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEzD,WAAO;;EAGT,OAAO,OAAkC,QAA4B;AACnE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,oBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,KAAK,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC,CAAC;AACvE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAmD,MAAqB;AACtE,WAAO,UAAU,YAAY,QAAS,CAAA,CAAE;;EAE1C,YAAwD,QAAsB;AAC5E,UAAM,UAAU,oBAAA;AAChB,YAAQ,SAAS,OAAO,QAAQ,IAAA,CAAK,MAAM,CAAA,KAAM,CAAA;AACjD,WAAO;;EAGT,KAAK,OAA0C;AAC7C,UAAM,SAAS,oBAAA;AACf,WAAO,SAAS,SAAS,CAAA;AACzB,WAAO;;EAGT,OAAO,SAAgC;AACrC,QAAI,SAAS,eAAe,QAAA,KAAa,WAAW,MAAM,QAAQ,QAAQ,MAAA,EACxE,QAAO,QAAQ;QAEf,QAAO;;;ACjab,IAAY,yBAAA,0BAAAC,yBAAL;AACL,EAAAA,wBAAAA,wBAAA,KAAA,IAAA,CAAA,IAAA;AACA,EAAAA,wBAAAA,wBAAA,QAAA,IAAA,CAAA,IAAA;AACA,EAAAA,wBAAAA,wBAAA,SAAA,IAAA,CAAA,IAAA;AACA,EAAAA,wBAAAA,wBAAA,MAAA,IAAA,CAAA,IAAA;AACA,EAAAA,wBAAAA,wBAAA,MAAA,IAAA,CAAA,IAAA;AACA,EAAAA,wBAAAA,wBAAA,MAAA,IAAA,CAAA,IAAA;AACA,EAAAA,wBAAAA,wBAAA,cAAA,IAAA,EAAA,IAAA;;;AAUF,SAAS,+BAAmD;AAC1D,SAAO;IAAE,IAAI;IAAG,MAAM;IAAI,MAAM;IAAW,OAAO;;;AAGpD,IAAa,qBAAqD;EAChE,OAAO,SAA6B,SAAuB,IAAI,aAAA,GAA8B;AAC3F,QAAI,QAAQ,OAAO,EACjB,QAAO,OAAO,CAAA,EAAG,MAAM,QAAQ,EAAA;AAEjC,QAAI,QAAQ,SAAS,GACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,QAAI,QAAQ,SAAS,OACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,QAAI,QAAQ,UAAU,OACpB,OAAM,OAAO,MAAM,KAAK,QAAQ,KAAA,GAAQ,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEpE,WAAO;;EAGT,OAAO,OAAkC,QAAqC;AAC5E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,6BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,EACV;AAGF,kBAAQ,KAAK,OAAO,MAAA;AACpB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AAClE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA4D,MAA8B;AACxF,WAAO,mBAAmB,YAAY,QAAS,CAAA,CAAE;;EAEnD,YAAiE,QAA+B;AAC9F,UAAM,UAAU,6BAAA;AAChB,YAAQ,KAAK,OAAO,MAAM;AAC1B,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;;;AC1BX,SAAS,qBAA+B;AACtC,SAAO;IAAE,IAAI;IAAI,MAAM;IAAI,UAAU;;;AAGvC,IAAa,WAAiC;EAC5C,OAAO,SAAmB,SAAuB,IAAI,aAAA,GAA8B;AACjF,QAAI,QAAQ,OAAO,GACjB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,EAAA;AAEnC,QAAI,QAAQ,SAAS,GACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,QAAI,QAAQ,aAAa,OACvB,mBAAkB,OAAO,QAAQ,UAAU,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,WAAO;;EAGT,OAAO,OAAkC,QAA2B;AAClE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,mBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,KAAK,OAAO,OAAA;AACpB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,kBAAkB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACnE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAkD,MAAoB;AACpE,WAAO,SAAS,YAAY,QAAS,CAAA,CAAE;;EAEzC,YAAuD,QAAqB;AAC1E,UAAM,UAAU,mBAAA;AAChB,YAAQ,KAAK,OAAO,MAAM;AAC1B,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,WAAY,OAAO,aAAa,UAAa,OAAO,aAAa,OACrE,kBAAkB,YAAY,OAAO,QAAA,IACrC;AACJ,WAAO;;;AAIX,SAAS,8BAAiD;AACxD,SAAO;IAAE,MAAM;IAAI,WAAW;;;AAGhC,IAAa,oBAAmD;EAC9D,OAAO,SAA4B,SAAuB,IAAI,aAAA,GAA8B;AAC1F,QAAI,QAAQ,SAAS,GACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,QAAI,QAAQ,cAAc,GACxB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,SAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAoC;AAC3E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,4BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAY,OAAO,OAAA;AAC3B;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA2D,MAA6B;AACtF,WAAO,kBAAkB,YAAY,QAAS,CAAA,CAAE;;EAElD,YAAgE,QAA8B;AAC5F,UAAM,UAAU,4BAAA;AAChB,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,YAAY,OAAO,aAAa;AACxC,WAAO;;;AAIX,SAAS,mCAA2D;AAClE,SAAO;IAAE,OAAO;IAAI,UAAU;;;AAGhC,IAAa,yBAA6D;EACxE,OAAO,SAAiC,SAAuB,IAAI,aAAA,GAA8B;AAC/F,QAAI,QAAQ,UAAU,GACpB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,KAAA;AAEnC,QAAI,QAAQ,aAAa,GACvB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,QAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAyC;AAChF,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,iCAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,OAAO,OAAA;AACvB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,OAAO,OAAA;AAC1B;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAgE,MAAkC;AAChG,WAAO,uBAAuB,YAAY,QAAS,CAAA,CAAE;;EAEvD,YAAqE,QAAmC;AACtG,UAAM,UAAU,iCAAA;AAChB,YAAQ,QAAQ,OAAO,SAAS;AAChC,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,kCAAyD;AAChE,SAAO;IAAE,OAAO;IAAI,UAAU;;;AAGhC,IAAa,wBAA2D;EACtE,OAAO,SAAgC,SAAuB,IAAI,aAAA,GAA8B;AAC9F,QAAI,QAAQ,UAAU,GACpB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,KAAA;AAEnC,QAAI,QAAQ,aAAa,OACvB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,QAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAwC;AAC/E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,gCAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,OAAO,OAAA;AACvB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,OAAO,OAAA;AAC1B;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA+D,MAAiC;AAC9F,WAAO,sBAAsB,YAAY,QAAS,CAAA,CAAE;;EAEtD,YAAoE,QAAkC;AACpG,UAAM,UAAU,gCAAA;AAChB,YAAQ,QAAQ,OAAO,SAAS;AAChC,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,+BAAmD;AAC1D,SAAO;IAAE,MAAM;IAAW,KAAK;;;AAGjC,IAAa,qBAAqD;EAChE,OAAO,SAA6B,SAAuB,IAAI,aAAA,GAA8B;AAC3F,QAAI,QAAQ,SAAS,OACnB,wBAAuB,OAAO,QAAQ,MAAM,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAExE,QAAI,QAAQ,QAAQ,OAClB,uBAAsB,OAAO,QAAQ,KAAK,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEtE,WAAO;;EAGT,OAAO,OAAkC,QAAqC;AAC5E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,6BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,uBAAuB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACpE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,MAAM,sBAAsB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAClE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA4D,MAA8B;AACxF,WAAO,mBAAmB,YAAY,QAAS,CAAA,CAAE;;EAEnD,YAAiE,QAA+B;AAC9F,UAAM,UAAU,6BAAA;AAChB,YAAQ,OAAQ,OAAO,SAAS,UAAa,OAAO,SAAS,OACzD,uBAAuB,YAAY,OAAO,IAAA,IAC1C;AACJ,YAAQ,MAAO,OAAO,QAAQ,UAAa,OAAO,QAAQ,OACtD,sBAAsB,YAAY,OAAO,GAAA,IACzC;AACJ,WAAO;;;AAIX,SAAS,0BAAyC;AAChD,SAAO,EAAE,MAAM,GAAA;;AAGjB,IAAa,gBAA2C;EACtD,OAAO,SAAwB,SAAuB,IAAI,aAAA,GAA8B;AACtF,QAAI,QAAQ,SAAS,GACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAgC;AACvE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,wBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAuD,MAAyB;AAC9E,WAAO,cAAc,YAAY,QAAS,CAAA,CAAE;;EAE9C,YAA4D,QAA0B;AACpF,UAAM,UAAU,wBAAA;AAChB,YAAQ,OAAO,OAAO,QAAQ;AAC9B,WAAO;;;AAIX,SAAS,2BAA2C;AAClD,SAAO;IAAE,QAAQ;IAAW,UAAU;;;AAGxC,IAAa,iBAA6C;EACxD,OAAO,SAAyB,SAAuB,IAAI,aAAA,GAA8B;AACvF,QAAI,QAAQ,WAAW,OACrB,oBAAmB,OAAO,QAAQ,QAAQ,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEtE,QAAI,QAAQ,aAAa,OACvB,OAAM,OAAO,MAAM,KAAK,QAAQ,QAAA,GAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,WAAO;;EAGT,OAAO,OAAkC,QAAiC;AACxE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,yBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,SAAS,mBAAmB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAClE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AACrE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAwD,MAA0B;AAChF,WAAO,eAAe,YAAY,QAAS,CAAA,CAAE;;EAE/C,YAA6D,QAA2B;AACtF,UAAM,UAAU,yBAAA;AAChB,YAAQ,SAAU,OAAO,WAAW,UAAa,OAAO,WAAW,OAC/D,mBAAmB,YAAY,OAAO,MAAA,IACtC;AACJ,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,2BAA2C;AAClD,SAAO;IAAE,QAAQ;IAAW,UAAU;;;AAGxC,IAAa,iBAA6C;EACxD,OAAO,SAAyB,SAAuB,IAAI,aAAA,GAA8B;AACvF,QAAI,QAAQ,WAAW,OACrB,oBAAmB,OAAO,QAAQ,QAAQ,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEtE,QAAI,QAAQ,aAAa,OACvB,OAAM,OAAO,MAAM,KAAK,QAAQ,QAAA,GAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,WAAO;;EAGT,OAAO,OAAkC,QAAiC;AACxE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,yBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,SAAS,mBAAmB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAClE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AACrE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAwD,MAA0B;AAChF,WAAO,eAAe,YAAY,QAAS,CAAA,CAAE;;EAE/C,YAA6D,QAA2B;AACtF,UAAM,UAAU,yBAAA;AAChB,YAAQ,SAAU,OAAO,WAAW,UAAa,OAAO,WAAW,OAC/D,mBAAmB,YAAY,OAAO,MAAA,IACtC;AACJ,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,2BAA2C;AAClD,SAAO;IAAE,QAAQ;IAAW,UAAU;;;AAGxC,IAAa,iBAA6C;EACxD,OAAO,SAAyB,SAAuB,IAAI,aAAA,GAA8B;AACvF,QAAI,QAAQ,WAAW,OACrB,oBAAmB,OAAO,QAAQ,QAAQ,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEtE,QAAI,QAAQ,aAAa,OACvB,OAAM,OAAO,MAAM,KAAK,QAAQ,QAAA,GAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,WAAO;;EAGT,OAAO,OAAkC,QAAiC;AACxE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,yBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,SAAS,mBAAmB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAClE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AACrE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAwD,MAA0B;AAChF,WAAO,eAAe,YAAY,QAAS,CAAA,CAAE;;EAE/C,YAA6D,QAA2B;AACtF,UAAM,UAAU,yBAAA;AAChB,YAAQ,SAAU,OAAO,WAAW,UAAa,OAAO,WAAW,OAC/D,mBAAmB,YAAY,OAAO,MAAA,IACtC;AACJ,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,8BAAiD;AACxD,SAAO;IAAE,QAAQ;IAAW,UAAU;;;AAGxC,IAAa,oBAAmD;EAC9D,OAAO,SAA4B,SAAuB,IAAI,aAAA,GAA8B;AAC1F,QAAI,QAAQ,WAAW,OACrB,oBAAmB,OAAO,QAAQ,QAAQ,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEtE,QAAI,QAAQ,aAAa,OACvB,OAAM,OAAO,MAAM,KAAK,QAAQ,QAAA,GAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,WAAO;;EAGT,OAAO,OAAkC,QAAoC;AAC3E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,4BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,SAAS,mBAAmB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAClE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AACrE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA2D,MAA6B;AACtF,WAAO,kBAAkB,YAAY,QAAS,CAAA,CAAE;;EAElD,YAAgE,QAA8B;AAC5F,UAAM,UAAU,4BAAA;AAChB,YAAQ,SAAU,OAAO,WAAW,UAAa,OAAO,WAAW,OAC/D,mBAAmB,YAAY,OAAO,MAAA,IACtC;AACJ,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,yBAAuC;AAC9C,SAAO;IAAE,MAAM;IAAW,OAAO;IAAW,OAAO;IAAW,OAAO;IAAW,UAAU;;;AAG5F,IAAa,eAAyC;EACpD,OAAO,SAAuB,SAAuB,IAAI,aAAA,GAA8B;AACrF,QAAI,QAAQ,SAAS,OACnB,eAAc,OAAO,QAAQ,MAAM,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAE/D,QAAI,QAAQ,UAAU,OACpB,gBAAe,OAAO,QAAQ,OAAO,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEjE,QAAI,QAAQ,UAAU,OACpB,gBAAe,OAAO,QAAQ,OAAO,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEjE,QAAI,QAAQ,UAAU,OACpB,gBAAe,OAAO,QAAQ,OAAO,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEjE,QAAI,QAAQ,aAAa,OACvB,mBAAkB,OAAO,QAAQ,UAAU,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,WAAO;;EAGT,OAAO,OAAkC,QAA+B;AACtE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,uBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,cAAc,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC3D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,eAAe,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC7D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,eAAe,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC7D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,eAAe,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC7D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,kBAAkB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACnE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAsD,MAAwB;AAC5E,WAAO,aAAa,YAAY,QAAS,CAAA,CAAE;;EAE7C,YAA2D,QAAyB;AAClF,UAAM,UAAU,uBAAA;AAChB,YAAQ,OAAQ,OAAO,SAAS,UAAa,OAAO,SAAS,OACzD,cAAc,YAAY,OAAO,IAAA,IACjC;AACJ,YAAQ,QAAS,OAAO,UAAU,UAAa,OAAO,UAAU,OAC5D,eAAe,YAAY,OAAO,KAAA,IAClC;AACJ,YAAQ,QAAS,OAAO,UAAU,UAAa,OAAO,UAAU,OAC5D,eAAe,YAAY,OAAO,KAAA,IAClC;AACJ,YAAQ,QAAS,OAAO,UAAU,UAAa,OAAO,UAAU,OAC5D,eAAe,YAAY,OAAO,KAAA,IAClC;AACJ,YAAQ,WAAY,OAAO,aAAa,UAAa,OAAO,aAAa,OACrE,kBAAkB,YAAY,OAAO,QAAA,IACrC;AACJ,WAAO;;;AAIX,SAAS,oBAA6B;AACpC,SAAO;IACL,IAAI;IACJ,MAAM;IACN,SAAS;IACT,MAAM;IACN,WAAW,CAAA;IACX,YAAY;IACZ,OAAO;IACP,cAAc,CAAA;;;AAIlB,IAAa,UAA+B;EAC1C,OAAO,SAAkB,SAAuB,IAAI,aAAA,GAA8B;AAChF,QAAI,QAAQ,OAAO,GACjB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,EAAA;AAEnC,QAAI,QAAQ,SAAS,GACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,QAAI,QAAQ,YAAY,OACtB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,OAAA;AAEnC,QAAI,QAAQ,SAAS,OACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,eAAWD,MAAK,QAAQ,UACtB,UAAS,OAAOA,IAAI,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhD,QAAI,QAAQ,eAAe,OACzB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,UAAA;AAEnC,QAAI,QAAQ,UAAU,OACpB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,KAAA;AAEnC,eAAWA,MAAK,QAAQ,aACtB,cAAa,OAAOA,IAAI,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEpD,WAAO;;EAGT,OAAO,OAAkC,QAA0B;AACjE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,kBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,KAAK,OAAO,OAAA;AACpB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,UAAU,OAAO,OAAA;AACzB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,UAAU,KAAK,SAAS,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AAC/D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,aAAa,OAAO,OAAA;AAC5B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,OAAO,OAAA;AACvB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,aAAa,KAAK,aAAa,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AACtE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAiD,MAAmB;AAClE,WAAO,QAAQ,YAAY,QAAS,CAAA,CAAE;;EAExC,YAAsD,QAAoB;AACxE,UAAM,UAAU,kBAAA;AAChB,YAAQ,KAAK,OAAO,MAAM;AAC1B,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,UAAU,OAAO,WAAW;AACpC,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,YAAY,OAAO,WAAW,IAAA,CAAK,MAAM,SAAS,YAAY,CAAA,CAAE,KAAK,CAAA;AAC7E,YAAQ,aAAa,OAAO,cAAc;AAC1C,YAAQ,QAAQ,OAAO,SAAS;AAChC,YAAQ,eAAe,OAAO,cAAc,IAAA,CAAK,MAAM,aAAa,YAAY,CAAA,CAAE,KAAK,CAAA;AACvF,WAAO;;;ACp4BX,IAAYE,cAAAA,0BAAAA,YAAL;AACL,EAAAA,WAAAA,WAAA,oBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,sBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,kBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,iBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,gBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,eAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,gBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,aAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,mBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,KAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,QAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,aAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,cAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,WAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,cAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,eAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,cAAA,IAAA,EAAA,IAAA;;;AA0IF,SAAS,sBAAiC;AACxC,SAAO;IAAE,MAAM;IAAG,WAAW;IAAW,UAAU;;;AAGpD,IAAaC,cAAmC;EAC9C,OAAO,SAAoB,SAAuB,IAAI,aAAA,GAA8B;AAClF,QAAI,QAAQ,SAAS,EACnB,QAAO,OAAO,CAAA,EAAG,MAAM,QAAQ,IAAA;AAEjC,QAAI,QAAQ,cAAc,OACxB,QAAO,OAAO,EAAA,EAAI,MAAM,QAAQ,SAAA;AAElC,QAAI,QAAQ,aAAa,OACvB,OAAM,OAAO,MAAM,KAAK,QAAQ,QAAA,GAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,WAAO;;EAGT,OAAO,OAAkC,QAA4B;AACnE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,oBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,EACV;AAGF,kBAAQ,OAAO,OAAO,MAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAY,aAAa,OAAO,MAAA,CAAO;AAC/C;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AACrE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAmD,MAAqB;AACtE,WAAOA,YAAU,YAAY,QAAS,CAAA,CAAE;;EAE1C,YAAwD,QAAsB;AAC5E,UAAM,UAAU,oBAAA;AAChB,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,YAAY,OAAO,aAAa;AACxC,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,kCAAyD;AAChE,SAAO;IAAE,WAAW;IAAW,WAAW;IAAI,MAAM;IAAW,MAAM;;;AAGvE,IAAa,wBAA2D;EACtE,OAAO,SAAgC,SAAuB,IAAI,aAAA,GAA8B;AAC9F,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,cAAc,GACxB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,SAAA;AAEnC,QAAI,QAAQ,SAAS,OACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,QAAI,QAAQ,SAAS,OACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAwC;AAC/E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,gCAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAY,OAAO,OAAA;AAC3B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA+D,MAAiC;AAC9F,WAAO,sBAAsB,YAAY,QAAS,CAAA,CAAE;;EAEtD,YAAoE,QAAkC;AACpG,UAAM,UAAU,gCAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,YAAY,OAAO,aAAa;AACxC,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,OAAO,OAAO,QAAQ;AAC9B,WAAO;;;AAIX,SAAS,oCAA6D;AACpE,SAAO;IAAE,WAAW;IAAW,WAAW;IAAI,OAAO;;;AAGvD,IAAa,0BAA+D;EAC1E,OAAO,SAAkC,SAAuB,IAAI,aAAA,GAA8B;AAChG,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,cAAc,GACxB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,SAAA;AAEnC,QAAI,QAAQ,UAAU,GACpB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,KAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAA0C;AACjF,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,kCAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAY,OAAO,OAAA;AAC3B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,OAAO,OAAA;AACvB;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAiE,MAAmC;AAClG,WAAO,wBAAwB,YAAY,QAAS,CAAA,CAAE;;EAExD,YAAsE,QAAoC;AACxG,UAAM,UAAU,kCAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,YAAY,OAAO,aAAa;AACxC,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;;;AAIX,SAAS,gCAAqD;AAC5D,SAAO;IAAE,WAAW;IAAW,WAAW;;;AAG5C,IAAa,sBAAuD;EAClE,OAAO,SAA8B,SAAuB,IAAI,aAAA,GAA8B;AAC5F,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,cAAc,GACxB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,SAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAsC;AAC7E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,8BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAY,OAAO,OAAA;AAC3B;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA6D,MAA+B;AAC1F,WAAO,oBAAoB,YAAY,QAAS,CAAA,CAAE;;EAEpD,YAAkE,QAAgC;AAChG,UAAM,UAAU,8BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,YAAY,OAAO,aAAa;AACxC,WAAO;;;AAIX,SAAS,+BAAmD;AAC1D,SAAO;IAAE,WAAW;IAAW,YAAY;IAAI,cAAc;IAAI,iBAAiB;;;AAGpF,IAAa,qBAAqD;EAChE,OAAO,SAA6B,SAAuB,IAAI,aAAA,GAA8B;AAC3F,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,eAAe,GACzB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,UAAA;AAEnC,QAAI,QAAQ,iBAAiB,GAC3B,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,YAAA;AAEnC,QAAI,QAAQ,oBAAoB,OAC9B,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,eAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAqC;AAC5E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,6BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,aAAa,OAAO,OAAA;AAC5B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,eAAe,OAAO,OAAA;AAC9B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,kBAAkB,OAAO,OAAA;AACjC;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA4D,MAA8B;AACxF,WAAO,mBAAmB,YAAY,QAAS,CAAA,CAAE;;EAEnD,YAAiE,QAA+B;AAC9F,UAAM,UAAU,6BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,aAAa,OAAO,cAAc;AAC1C,YAAQ,eAAe,OAAO,gBAAgB;AAC9C,YAAQ,kBAAkB,OAAO,mBAAmB;AACpD,WAAO;;;AAIX,SAAS,8BAAiD;AACxD,SAAO;IAAE,WAAW;IAAW,YAAY;IAAI,OAAO;;;AAGxD,IAAa,oBAAmD;EAC9D,OAAO,SAA4B,SAAuB,IAAI,aAAA,GAA8B;AAC1F,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,eAAe,GACzB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,UAAA;AAEnC,QAAI,QAAQ,UAAU,GACpB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,KAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAoC;AAC3E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,4BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,aAAa,OAAO,OAAA;AAC5B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,OAAO,OAAA;AACvB;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA2D,MAA6B;AACtF,WAAO,kBAAkB,YAAY,QAAS,CAAA,CAAE;;EAElD,YAAgE,QAA8B;AAC5F,UAAM,UAAU,4BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,aAAa,OAAO,cAAc;AAC1C,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;;;AAIX,SAAS,6BAA+C;AACtD,SAAO;IAAE,WAAW;IAAW,YAAY;;;AAG7C,IAAa,mBAAiD;EAC5D,OAAO,SAA2B,SAAuB,IAAI,aAAA,GAA8B;AACzF,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,eAAe,GACzB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,UAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAmC;AAC1E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,2BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,aAAa,OAAO,OAAA;AAC5B;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA0D,MAA4B;AACpF,WAAO,iBAAiB,YAAY,QAAS,CAAA,CAAE;;EAEjD,YAA+D,QAA6B;AAC1F,UAAM,UAAU,2BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,aAAa,OAAO,cAAc;AAC1C,WAAO;;;AAIX,SAAS,+BAAmD;AAC1D,SAAO;IAAE,WAAW;IAAW,UAAU;;;AAG3C,IAAa,qBAAqD;EAChE,OAAO,SAA6B,SAAuB,IAAI,aAAA,GAA8B;AAC3F,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,aAAa,OACvB,OAAM,OAAO,MAAM,KAAK,QAAQ,QAAA,GAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,WAAO;;EAGT,OAAO,OAAkC,QAAqC;AAC5E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,6BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AACrE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA4D,MAA8B;AACxF,WAAO,mBAAmB,YAAY,QAAS,CAAA,CAAE;;EAEnD,YAAiE,QAA+B;AAC9F,UAAM,UAAU,6BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,4BAA6C;AACpD,SAAO;IAAE,WAAW;IAAW,OAAO,CAAA;;;AAGxC,IAAa,kBAA+C;EAC1D,OAAO,SAA0B,SAAuB,IAAI,aAAA,GAA8B;AACxF,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,eAAWH,MAAK,QAAQ,MACtB,oBAAmB,OAAOA,IAAI,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAE1D,WAAO;;EAGT,OAAO,OAAkC,QAAkC;AACzE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,0BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYG,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,MAAM,KAAK,mBAAmB,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AACrE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAyD,MAA2B;AAClF,WAAO,gBAAgB,YAAY,QAAS,CAAA,CAAE;;EAEhD,YAA8D,QAA4B;AACxF,UAAM,UAAU,0BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,QAAQ,OAAO,OAAO,IAAA,CAAK,MAAM,mBAAmB,YAAY,CAAA,CAAE,KAAK,CAAA;AAC/E,WAAO;;;AAIX,SAAS,kCAAyD;AAChE,SAAO;IAAE,WAAW;IAAW,UAAU,CAAA;;;AAG3C,IAAa,wBAA2D;EACtE,OAAO,SAAgC,SAAuB,IAAI,aAAA,GAA8B;AAC9F,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,eAAWH,MAAK,QAAQ,SACtB,SAAQ,OAAOA,IAAI,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAE/C,WAAO;;EAGT,OAAO,OAAkC,QAAwC;AAC/E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,gCAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYG,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,SAAS,KAAK,QAAQ,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AAC7D;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA+D,MAAiC;AAC9F,WAAO,sBAAsB,YAAY,QAAS,CAAA,CAAE;;EAEtD,YAAoE,QAAkC;AACpG,UAAM,UAAU,gCAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,WAAW,OAAO,UAAU,IAAA,CAAK,MAAM,QAAQ,YAAY,CAAA,CAAE,KAAK,CAAA;AAC1E,WAAO;;;AAIX,SAAS,qBAA+B;AACtC,SAAO;IAAE,WAAW;IAAW,OAAO;IAAW,QAAQ;;;AAG3D,IAAa,WAAiC;EAC5C,OAAO,SAAmB,SAAuB,IAAI,aAAA,GAA8B;AACjF,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,UAAU,OACpB,OAAM,OAAO,MAAM,KAAK,QAAQ,KAAA,GAAQ,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEpE,QAAI,QAAQ,WAAW,OACrB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,MAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAA2B;AAClE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,mBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AAClE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,SAAS,OAAO,OAAA;AACxB;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAkD,MAAoB;AACpE,WAAO,SAAS,YAAY,QAAS,CAAA,CAAE;;EAEzC,YAAuD,QAAqB;AAC1E,UAAM,UAAU,mBAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,QAAQ,OAAO,SAAS;AAChC,YAAQ,SAAS,OAAO,UAAU;AAClC,WAAO;;;AAIX,SAAS,wBAAqC;AAC5C,SAAO;IAAE,WAAW;IAAW,MAAM;IAAI,OAAO;;;AAGlD,IAAa,cAAuC;EAClD,OAAO,SAAsB,SAAuB,IAAI,aAAA,GAA8B;AACpF,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,SAAS,GACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,QAAI,QAAQ,UAAU,OACpB,OAAM,OAAO,MAAM,KAAK,QAAQ,KAAA,GAAQ,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEpE,WAAO;;EAGT,OAAO,OAAkC,QAA8B;AACrE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,sBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AAClE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAqD,MAAuB;AAC1E,WAAO,YAAY,YAAY,QAAS,CAAA,CAAE;;EAE5C,YAA0D,QAAwB;AAChF,UAAM,UAAU,sBAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;;;AAIX,SAAS,4BAA6C;AACpD,SAAO;IAAE,WAAW;IAAW,UAAU;IAAI,OAAO;;;AAGtD,IAAa,kBAA+C;EAC1D,OAAO,SAA0B,SAAuB,IAAI,aAAA,GAA8B;AACxF,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,aAAa,GACvB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,QAAA;AAEnC,QAAI,QAAQ,UAAU,GACpB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,KAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAkC;AACzE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,0BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,OAAO,OAAA;AAC1B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,OAAO,OAAA;AACvB;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAyD,MAA2B;AAClF,WAAO,gBAAgB,YAAY,QAAS,CAAA,CAAE;;EAEhD,YAA8D,QAA4B;AACxF,UAAM,UAAU,0BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,WAAW,OAAO,YAAY;AACtC,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;;;AAIX,SAAS,6BAA+C;AACtD,SAAO;IAAE,WAAW;IAAW,UAAU;IAAI,OAAO;IAAI,QAAQ;;;AAGlE,IAAa,mBAAiD;EAC5D,OAAO,SAA2B,SAAuB,IAAI,aAAA,GAA8B;AACzF,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,aAAa,GACvB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,QAAA;AAEnC,QAAI,QAAQ,UAAU,GACpB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,KAAA;AAEnC,QAAI,QAAQ,WAAW,OACrB,OAAM,OAAO,MAAM,KAAK,QAAQ,MAAA,GAAS,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAErE,WAAO;;EAGT,OAAO,OAAkC,QAAmC;AAC1E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,2BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,OAAO,OAAA;AAC1B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,OAAO,OAAA;AACvB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,SAAS,MAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAA,CAAQ,CAAC;AACnE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA0D,MAA4B;AACpF,WAAO,iBAAiB,YAAY,QAAS,CAAA,CAAE;;EAEjD,YAA+D,QAA6B;AAC1F,UAAM,UAAU,2BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,WAAW,OAAO,YAAY;AACtC,YAAQ,QAAQ,OAAO,SAAS;AAChC,YAAQ,SAAS,OAAO,UAAU;AAClC,WAAO;;;AAIX,SAAS,0BAAyC;AAChD,SAAO;IAAE,WAAW;IAAW,MAAM;IAAW,SAAS;;;AAG3D,IAAa,gBAA2C;EACtD,OAAO,SAAwB,SAAuB,IAAI,aAAA,GAA8B;AACtF,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,SAAS,OACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,QAAI,QAAQ,YAAY,GACtB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,OAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAgC;AACvE,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,wBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,UAAU,OAAO,OAAA;AACzB;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAAuD,MAAyB;AAC9E,WAAO,cAAc,YAAY,QAAS,CAAA,CAAE;;EAE9C,YAA4D,QAA0B;AACpF,UAAM,UAAU,wBAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,UAAU,OAAO,WAAW;AACpC,WAAO;;;AAIX,SAAS,6BAA+C;AACtD,SAAO;IAAE,WAAW;IAAW,UAAU;;;AAG3C,IAAa,mBAAiD;EAC5D,OAAO,SAA2B,SAAuB,IAAI,aAAA,GAA8B;AACzF,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,aAAa,GACvB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,QAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAmC;AAC1E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,2BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,OAAO,OAAA;AAC1B;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA0D,MAA4B;AACpF,WAAO,iBAAiB,YAAY,QAAS,CAAA,CAAE;;EAEjD,YAA+D,QAA6B;AAC1F,UAAM,UAAU,2BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,8BAAiD;AACxD,SAAO;IAAE,WAAW;IAAW,UAAU;;;AAG3C,IAAa,oBAAmD;EAC9D,OAAO,SAA4B,SAAuB,IAAI,aAAA,GAA8B;AAC1F,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,aAAa,GACvB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,QAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAoC;AAC3E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,4BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,WAAW,OAAO,OAAA;AAC1B;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA2D,MAA6B;AACtF,WAAO,kBAAkB,YAAY,QAAS,CAAA,CAAE;;EAElD,YAAgE,QAA8B;AAC5F,UAAM,UAAU,4BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;;;AAIX,SAAS,kCAAyD;AAChE,SAAO;IAAE,WAAW;IAAW,WAAW;IAAW,MAAM;IAAW,OAAO;IAAW,MAAM;;;AAGhG,IAAa,wBAA2D;EACtE,OAAO,SAAgC,SAAuB,IAAI,aAAA,GAA8B;AAC9F,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,cAAc,OACxB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,SAAA;AAEnC,QAAI,QAAQ,SAAS,OACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,QAAI,QAAQ,UAAU,OACpB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,KAAA;AAEnC,QAAI,QAAQ,SAAS,OACnB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,IAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAwC;AAC/E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,gCAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAY,OAAO,OAAA;AAC3B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,OAAO,OAAA;AACvB;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,OAAO,OAAO,OAAA;AACtB;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA+D,MAAiC;AAC9F,WAAO,sBAAsB,YAAY,QAAS,CAAA,CAAE;;EAEtD,YAAoE,QAAkC;AACpG,UAAM,UAAU,gCAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,YAAY,OAAO,aAAa;AACxC,YAAQ,OAAO,OAAO,QAAQ;AAC9B,YAAQ,QAAQ,OAAO,SAAS;AAChC,YAAQ,OAAO,OAAO,QAAQ;AAC9B,WAAO;;;AAIX,SAAS,+BAAmD;AAC1D,SAAO;IACL,WAAW;IACX,YAAY;IACZ,cAAc;IACd,iBAAiB;IACjB,OAAO;;;AAIX,IAAa,qBAAqD;EAChE,OAAO,SAA6B,SAAuB,IAAI,aAAA,GAA8B;AAC3F,QAAI,QAAQ,cAAc,OACxB,aAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEhE,QAAI,QAAQ,eAAe,OACzB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,UAAA;AAEnC,QAAI,QAAQ,iBAAiB,OAC3B,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,YAAA;AAEnC,QAAI,QAAQ,oBAAoB,OAC9B,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,eAAA;AAEnC,QAAI,QAAQ,UAAU,OACpB,QAAO,OAAO,EAAA,EAAI,OAAO,QAAQ,KAAA;AAEnC,WAAO;;EAGT,OAAO,OAAkC,QAAqC;AAC5E,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,6BAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,YAAYA,YAAU,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC5D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,aAAa,OAAO,OAAA;AAC5B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,eAAe,OAAO,OAAA;AAC9B;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,kBAAkB,OAAO,OAAA;AACjC;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,QAAQ,OAAO,OAAA;AACvB;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA4D,MAA8B;AACxF,WAAO,mBAAmB,YAAY,QAAS,CAAA,CAAE;;EAEnD,YAAiE,QAA+B;AAC9F,UAAM,UAAU,6BAAA;AAChB,YAAQ,YAAa,OAAO,cAAc,UAAa,OAAO,cAAc,OACxEA,YAAU,YAAY,OAAO,SAAA,IAC7B;AACJ,YAAQ,aAAa,OAAO,cAAc;AAC1C,YAAQ,eAAe,OAAO,gBAAgB;AAC9C,YAAQ,kBAAkB,OAAO,mBAAmB;AACpD,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;;;AAIX,SAAS,kBAAyB;AAChC,SAAO;IACL,kBAAkB;IAClB,oBAAoB;IACpB,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,aAAa;IACb,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,KAAK;IACL,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,UAAU;IACV,aAAa;IACb,cAAc;IACd,kBAAkB;IAClB,eAAe;;;AAInB,IAAa,QAA2B;EACtC,OAAO,SAAgB,SAAuB,IAAI,aAAA,GAA8B;AAC9E,QAAI,QAAQ,qBAAqB,OAC/B,uBAAsB,OAAO,QAAQ,kBAAkB,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEnF,QAAI,QAAQ,uBAAuB,OACjC,yBAAwB,OAAO,QAAQ,oBAAoB,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvF,QAAI,QAAQ,mBAAmB,OAC7B,qBAAoB,OAAO,QAAQ,gBAAgB,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAE/E,QAAI,QAAQ,kBAAkB,OAC5B,oBAAmB,OAAO,QAAQ,eAAe,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAE7E,QAAI,QAAQ,iBAAiB,OAC3B,mBAAkB,OAAO,QAAQ,cAAc,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAE3E,QAAI,QAAQ,gBAAgB,OAC1B,kBAAiB,OAAO,QAAQ,aAAa,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEzE,QAAI,QAAQ,kBAAkB,OAC5B,oBAAmB,OAAO,QAAQ,eAAe,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAE7E,QAAI,QAAQ,eAAe,OACzB,iBAAgB,OAAO,QAAQ,YAAY,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,QAAI,QAAQ,qBAAqB,OAC/B,uBAAsB,OAAO,QAAQ,kBAAkB,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEnF,QAAI,QAAQ,QAAQ,OAClB,UAAS,OAAO,QAAQ,KAAK,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEzD,QAAI,QAAQ,WAAW,OACrB,aAAY,OAAO,QAAQ,QAAQ,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAE/D,QAAI,QAAQ,eAAe,OACzB,iBAAgB,OAAO,QAAQ,YAAY,OAAO,OAAO,EAAA,EAAI,KAAA,CAAM,EAAE,KAAA;AAEvE,QAAI,QAAQ,gBAAgB,OAC1B,kBAAiB,OAAO,QAAQ,aAAa,OAAO,OAAO,GAAA,EAAK,KAAA,CAAM,EAAE,KAAA;AAE1E,QAAI,QAAQ,aAAa,OACvB,eAAc,OAAO,QAAQ,UAAU,OAAO,OAAO,GAAA,EAAK,KAAA,CAAM,EAAE,KAAA;AAEpE,QAAI,QAAQ,gBAAgB,OAC1B,kBAAiB,OAAO,QAAQ,aAAa,OAAO,OAAO,GAAA,EAAK,KAAA,CAAM,EAAE,KAAA;AAE1E,QAAI,QAAQ,iBAAiB,OAC3B,mBAAkB,OAAO,QAAQ,cAAc,OAAO,OAAO,GAAA,EAAK,KAAA,CAAM,EAAE,KAAA;AAE5E,QAAI,QAAQ,qBAAqB,OAC/B,uBAAsB,OAAO,QAAQ,kBAAkB,OAAO,OAAO,GAAA,EAAK,KAAA,CAAM,EAAE,KAAA;AAEpF,QAAI,QAAQ,kBAAkB,OAC5B,oBAAmB,OAAO,QAAQ,eAAe,OAAO,OAAO,GAAA,EAAK,KAAA,CAAM,EAAE,KAAA;AAE9E,WAAO;;EAGT,OAAO,OAAkC,QAAwB;AAC/D,UAAM,SAAS,iBAAiB,eAAe,QAAQ,IAAI,aAAa,KAAA;AACxE,UAAM,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC7D,UAAM,UAAU,gBAAA;AAChB,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAA;AACnB,cAAQ,QAAQ,GAAhB;QACE,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,mBAAmB,sBAAsB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC/E;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,qBAAqB,wBAAwB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACnF;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,iBAAiB,oBAAoB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC3E;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,gBAAgB,mBAAmB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACzE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,eAAe,kBAAkB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACvE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,cAAc,iBAAiB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACrE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,gBAAgB,mBAAmB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACzE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,aAAa,gBAAgB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACnE;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,mBAAmB,sBAAsB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC/E;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,MAAM,SAAS,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACrD;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,SAAS,YAAY,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC3D;QAEF,KAAK;AACH,cAAI,QAAQ,GACV;AAGF,kBAAQ,aAAa,gBAAgB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACnE;QAEF,KAAK;AACH,cAAI,QAAQ,IACV;AAGF,kBAAQ,cAAc,iBAAiB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACrE;QAEF,KAAK;AACH,cAAI,QAAQ,IACV;AAGF,kBAAQ,WAAW,cAAc,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC/D;QAEF,KAAK;AACH,cAAI,QAAQ,IACV;AAGF,kBAAQ,cAAc,iBAAiB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACrE;QAEF,KAAK;AACH,cAAI,QAAQ,IACV;AAGF,kBAAQ,eAAe,kBAAkB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACvE;QAEF,KAAK;AACH,cAAI,QAAQ,IACV;AAGF,kBAAQ,mBAAmB,sBAAsB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AAC/E;QAEF,KAAK;AACH,cAAI,QAAQ,IACV;AAGF,kBAAQ,gBAAgB,mBAAmB,OAAO,QAAQ,OAAO,OAAA,CAAQ;AACzE;;AAGJ,WAAK,MAAM,OAAO,KAAK,QAAQ,EAC7B;AAEF,aAAO,KAAK,MAAM,CAAA;;AAEpB,WAAO;;EAGT,OAA+C,MAAiB;AAC9D,WAAO,MAAM,YAAY,QAAS,CAAA,CAAE;;EAEtC,YAAoD,QAAkB;AACpE,UAAM,UAAU,gBAAA;AAChB,YAAQ,mBAAoB,OAAO,qBAAqB,UAAa,OAAO,qBAAqB,OAC7F,sBAAsB,YAAY,OAAO,gBAAA,IACzC;AACJ,YAAQ,qBAAsB,OAAO,uBAAuB,UAAa,OAAO,uBAAuB,OACnG,wBAAwB,YAAY,OAAO,kBAAA,IAC3C;AACJ,YAAQ,iBAAkB,OAAO,mBAAmB,UAAa,OAAO,mBAAmB,OACvF,oBAAoB,YAAY,OAAO,cAAA,IACvC;AACJ,YAAQ,gBAAiB,OAAO,kBAAkB,UAAa,OAAO,kBAAkB,OACpF,mBAAmB,YAAY,OAAO,aAAA,IACtC;AACJ,YAAQ,eAAgB,OAAO,iBAAiB,UAAa,OAAO,iBAAiB,OACjF,kBAAkB,YAAY,OAAO,YAAA,IACrC;AACJ,YAAQ,cAAe,OAAO,gBAAgB,UAAa,OAAO,gBAAgB,OAC9E,iBAAiB,YAAY,OAAO,WAAA,IACpC;AACJ,YAAQ,gBAAiB,OAAO,kBAAkB,UAAa,OAAO,kBAAkB,OACpF,mBAAmB,YAAY,OAAO,aAAA,IACtC;AACJ,YAAQ,aAAc,OAAO,eAAe,UAAa,OAAO,eAAe,OAC3E,gBAAgB,YAAY,OAAO,UAAA,IACnC;AACJ,YAAQ,mBAAoB,OAAO,qBAAqB,UAAa,OAAO,qBAAqB,OAC7F,sBAAsB,YAAY,OAAO,gBAAA,IACzC;AACJ,YAAQ,MAAO,OAAO,QAAQ,UAAa,OAAO,QAAQ,OAAQ,SAAS,YAAY,OAAO,GAAA,IAAO;AACrG,YAAQ,SAAU,OAAO,WAAW,UAAa,OAAO,WAAW,OAC/D,YAAY,YAAY,OAAO,MAAA,IAC/B;AACJ,YAAQ,aAAc,OAAO,eAAe,UAAa,OAAO,eAAe,OAC3E,gBAAgB,YAAY,OAAO,UAAA,IACnC;AACJ,YAAQ,cAAe,OAAO,gBAAgB,UAAa,OAAO,gBAAgB,OAC9E,iBAAiB,YAAY,OAAO,WAAA,IACpC;AACJ,YAAQ,WAAY,OAAO,aAAa,UAAa,OAAO,aAAa,OACrE,cAAc,YAAY,OAAO,QAAA,IACjC;AACJ,YAAQ,cAAe,OAAO,gBAAgB,UAAa,OAAO,gBAAgB,OAC9E,iBAAiB,YAAY,OAAO,WAAA,IACpC;AACJ,YAAQ,eAAgB,OAAO,iBAAiB,UAAa,OAAO,iBAAiB,OACjF,kBAAkB,YAAY,OAAO,YAAA,IACrC;AACJ,YAAQ,mBAAoB,OAAO,qBAAqB,UAAa,OAAO,qBAAqB,OAC7F,sBAAsB,YAAY,OAAO,gBAAA,IACzC;AACJ,YAAQ,gBAAiB,OAAO,kBAAkB,UAAa,OAAO,kBAAkB,OACpF,mBAAmB,YAAY,OAAO,aAAA,IACtC;AACJ,WAAO;;;AAgBX,SAAS,aAAa,OAAuC;AAC3D,QAAM,MAAM,WAAW,OAAO,MAAM,SAAA,CAAU;AAC9C,MAAI,MAAM,WAAW,OAAO,iBAC1B,OAAM,IAAI,WAAW,MAAM,8CAAA;AAE7B,MAAI,MAAM,WAAW,OAAO,iBAC1B,OAAM,IAAI,WAAW,MAAM,+CAAA;AAE7B,SAAO;;ACruDT,IAAM,kBAAA,CAAmB,WAAqB;AAC5C,MAAI,CAAC,UAAU,OAAO,WAAW,SAC/B;AAGF,MAAI,OAAO,KACT,QAAO;IACL,MAAM;IACN,OAAO,OAAO,KAAK;IACnB,UAAU,OAAO,KAAK;;AAI1B,MAAI,OAAO,IACT,QAAO;IACL,MAAM;IACN,OAAO,OAAO,IAAI;IAClB,UAAU,OAAO,IAAI;;;AAO3B,IAAM,uBAAA,CAAwB,SAAmB;AAC/C,MAAI,CAAC,QAAQ,OAAO,SAAS,SAC3B;AAGF,MAAI,KAAK,KACP,QAAO;IACL,MAAM;IACN,MAAM,KAAK,KAAK;;AAIpB,MAAI,KAAK,MACP,QAAO;IACL,MAAM;IACN,QAAQ,gBAAgB,KAAK,MAAM,MAAA;IACnC,UAAU,KAAK,MAAM;;AAIzB,MAAI,KAAK,MACP,QAAO;IACL,MAAM;IACN,QAAQ,gBAAgB,KAAK,MAAM,MAAA;IACnC,UAAU,KAAK,MAAM;;AAIzB,MAAI,KAAK,MACP,QAAO;IACL,MAAM;IACN,QAAQ,gBAAgB,KAAK,MAAM,MAAA;IACnC,UAAU,KAAK,MAAM;;AAIzB,MAAI,KAAK,SACP,QAAO;IACL,MAAM;IACN,QAAQ,gBAAgB,KAAK,SAAS,MAAA;IACtC,UAAU,KAAK,SAAS;;;AAwF9B,SAAgB,OAAO,MAA6B;AAClD,QAAM,QAAA,MAA0B,OAAO,IAAA;AACvC,QAAM,UAAU,OAAO,OAAO,KAAA,EAAO,KAAA,CAAM,UAAU,UAAU,MAAA;AAC/D,MAAI,CAAC,QACH,OAAM,IAAI,MAAM,eAAA;AAElB,UAAQ,OAAOC,YAAsB,QAAQ,UAAU,IAAA;AACvD,UAAQ,YAAY,QAAQ,UAAU;AACtC,UAAQ,WAAW,QAAQ,UAAU;AAGrC,MAAI,QAAQ,SAAS,UAAU,kBAC7B,YAAW,WAAY,QAAgB,UAAuB;AAC5D,UAAM,iBAAiB;AAEvB,QAAI,eAAe,SAAS,UAAU,MAAM,QAAQ,eAAe,YAAA,GAAe;AAChF,YAAM,eAAe,eAAe,aACjC,IAAA,CAAK,SAAc,qBAAqB,IAAA,CAAK,EAC7C,OAAA,CAAQ,SAAc,SAAS,MAAA;AAElC,UAAI,aAAa,SAAS,EACxB,gBAAe,UAAU;;AAI7B,QAAI,MAAM,QAAQ,eAAe,YAAA,KAAiB,eAAe,aAAa,WAAW,EACvF,gBAAe,eAAe;AAGhC,QAAI,eAAe,WAAW,WAAW,EACvC,gBAAe,YAAY;;AAMjC,MAAI,QAAQ,SAAS,UAAU,YAC7B,YAAW,aAAc,QAAgB,OAAO;AAC9C,cAAU,KAAKC,uBAAkC,UAAU,EAAA,EAAI,YAAA;AAC/D,WAAO,KAAK,SAAA,EAAW,QAAA,CAAS,QAAQ;AACtC,UAAI,UAAU,GAAA,MAAS,OACrB,QAAO,UAAU,GAAA;;;AAMzB,SAAO,KAAK,OAAA,EAAS,QAAA,CAAS,QAAQ;AACpC,QAAI,QAAQ,GAAA,MAAS,OACnB,QAAO,QAAQ,GAAA;;AAInB,SAAO,aAAa,MAAM,OAAA;;AC9S5B,IAAa,kBAAkB;A;;;;;ACGxB,IAAM,SACX;AAEK,IAAM,mBAAmB,CAAC,YAAmB;AAClD,MAAI,OAAO,YAAY,UAAU;AAC/B,UAAM,IAAI,UAAU,kCAAkC;EACxD;AACA,QAAM,QAAQ,QAAQ,MAAM,MAAM;AAClC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MACR,uCAAuC,OAAO,aAAa;EAE/D;AACA,QAAM,MAAK;AACX,SAAO;AACT;AAEA,IAAM,aAAa,CAAC,MAAc,MAAM,OAAO,MAAM,OAAO,MAAM;AAElE,IAAM,WAAW,CAACC,OAAa;AAC7B,QAAM,IAAI,SAASA,IAAG,EAAE;AACxB,SAAO,MAAM,CAAC,IAAIA,KAAI;AACxB;AAEA,IAAM,YAAY,CAAC,GAAoBC,OACrC,OAAO,MAAM,OAAOA,KAAI,CAAC,OAAO,CAAC,GAAG,OAAOA,EAAC,CAAC,IAAI,CAAC,GAAGA,EAAC;AAExD,IAAM,iBAAiB,CAAC,GAAWA,OAAa;AAC9C,MAAI,WAAW,CAAC,KAAK,WAAWA,EAAC;AAAG,WAAO;AAC3C,QAAM,CAAC,IAAI,EAAE,IAAI,UAAU,SAAS,CAAC,GAAG,SAASA,EAAC,CAAC;AACnD,MAAI,KAAK;AAAI,WAAO;AACpB,MAAI,KAAK;AAAI,WAAO;AACpB,SAAO;AACT;AAEO,IAAM,kBAAkB,CAC7B,GACAA,OACE;AACF,WAAS,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE,QAAQA,GAAE,MAAM,GAAG,KAAK;AACrD,UAAM,IAAI,eAAe,EAAE,CAAC,KAAK,KAAKA,GAAE,CAAC,KAAK,GAAG;AACjD,QAAI,MAAM;AAAG,aAAO;EACtB;AACA,SAAO;AACT;;;ACxCO,IAAM,kBAAkB,CAAC,IAAY,OAAc;AAExD,QAAM,KAAK,iBAAiB,EAAE;AAC9B,QAAM,KAAK,iBAAiB,EAAE;AAG9B,QAAM,KAAK,GAAG,IAAG;AACjB,QAAM,KAAK,GAAG,IAAG;AAGjB,QAAM,IAAI,gBAAgB,IAAI,EAAE;AAChC,MAAI,MAAM;AAAG,WAAO;AAGpB,MAAI,MAAM,IAAI;AACZ,WAAO,gBAAgB,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,CAAC;EACrD,WAAW,MAAM,IAAI;AACnB,WAAO,KAAK,KAAK;EACnB;AAEA,SAAO;AACT;;;AC5BA,IAAaC,KAAuB,OAAc;AAChD,MAAI,OAAO,mBAAoB,WAC7B,QAAO,gBAAgB,CAAA;AAGzB,MAAI;AACF,WAAO,KAAK,MAAM,KAAK,UAAU,CAAA,CAAI;EAAC,QAC1B;AAKZ,WAHI,MAAM,QAAQ,CAAA,IACT,CAAC,GAAG,CAAA,IAEN,EAAE,GAAG,EAAA;EAAK;AAAA;AAQrB,SAAgBC,KAAqB;AACnC,SAAOC,WAAAA;AAAQ;AC2LjB,SAASC,GAAc,GAAW;AAEhC,MADA,OAAO,OAAO,CAAA,GACM,OAAO,KAAQ,YAA/B,EAAA,UACS,KAAS,OAAO,OAAO,CAAA,EACV,QAAO,KAAU,YAAnC,KAA+C,CAAC,OAAO,SAAS,CAAA,KAClEA,GAAW,CAAA;AAIjB,SAAO;AAAA;AAGT,eAAsBC,GACpB,GACA,GACA,GACA,GAK6B;AAC7B,MAAM,IAC+B,CAAA,CAAQ,QAAQ,IAAI,kBACnD,IACJ,MAGI,IAAmBJ,GAAiB,CAAA,GACpC,IAAgBA,GAAiB,CAAA,GACnC,IAAsB,GACtB,IAAe,GAEfK;AAEJ,WAAWC,MAAc,EACvB,KAAI;AAKE,UACFH,GAAW,CAAA,GACXA,GAAW,CAAA;AAEb,QAAMI,KAAW,MAAM,EAASD,IAAY,GAAU,CAAA;AAEtD,QAAIC,OAAa,OAEf;AAeF,QAVIA,GAAS,aAAa,UAAaA,GAAS,aAAa,MAC3D,IAAWP,GAAiBO,GAAS,QAAA,IAGnCA,GAAS,UAAU,UAAaA,GAAS,UAAU,MACrD,IAAQP,GAAiBO,GAAS,KAAA,IAGpCF,KAAkBE,GAAS,iBAEvBF,OAAoB,KACtB;EAAA,SAEKE,IAAO;AACd,QAAI,KAASA,cAAiB,WAAW;AAKvC,UAAI,EACF,OAAMA;AAER,cAAQ,MACN,uIAEAA,EAAA;IACD,MACS,MACV,QAAQ,MAAM,qBAAqBA,EAAA;AAGrC;EAAA;AAOJ,SAAO,EACL,GAAI,MAAa,IAEb,CAAA,IADA,EAAE,UAAU,KAAS,OAAO,SAAS,CAAA,IAAYP,GAAiB,CAAA,IAAY,EAAA,GAElF,GAAI,MAAU,IAEV,CAAA,IADA,EAAE,OAAO,KAAS,OAAO,SAAS,CAAA,IAASA,GAAiB,CAAA,IAAS,EAAA,GAEzE,GAAIK,OAAoB,SAAkC,CAAA,IAAtB,EAAE,iBAAAA,GAAA,EAAiB;AACxD;AClSH,SAAgBG,GACd,GAC0B;AAC1B,MAAI,CAAC,EAAO,QAAO,EAAE,SAAS,OAAO,QAAQ,OAAO,WAAW,OAAO,SAAS,MAAA;AAC/E,MAAI,MAAU,KAAM,QAAO,EAAE,SAAS,MAAM,QAAQ,MAAM,WAAW,MAAM,SAAS,KAAA;AAEpF,MAAM,IAAS,EAAM,UAAU,MACzB,IAAY,EAAM,aAAa,MAC/B,IAAU,EAAM,WAAW;AACjC,SAAO,EAAE,SAAS,KAAU,GAAW,QAAA,GAAQ,WAAA,GAAW,SAAA,EAAA;AAAS;AClBrE,SAAgBC,GAAmB,GAAkD;AACnF,MAAI,aAAiBC,GAAa,QAAO;AACzC,MAAI,MAAU,KAAM,QAAO,IAAIA,GAAYF,GAAwB,IAAA,CAAK;AAAC;AAQ3E,IAAaE,KAAb,MAAyB;EACvB,YAAY,GAA0C;AAAlC,SAAA,SAAA;EAAA;EAOpB,MAAM,GAAgB,GAAe,GAAe,GAAyC;AACtF,SAAK,OAAO,WACb,KAAK,OAAO,UACd,QAAQ,MAAM,IAAI,CAAA,KAAW,CAAA,IAAS,OAAO,KAAS,WAAW,IAAO,KAAK,UAAU,CAAA,CAAK,IAE5F,QAAQ,MAAM,IAAI,CAAA,KAAW,CAAA,IAAS,KAAW,CAAA;EAAK;EAQ1D,UAAU,GAAgB,GAAe,GAAsC;AACxE,SAAK,OAAO,cACb,IACF,QAAQ,MAAM,IAAI,CAAA,KAAW,CAAA,IAAS,CAAA,IAEtC,QAAQ,MAAM,IAAI,CAAA,KAAW,CAAA,EAAA;EAAQ;EAKzC,IAAI,gBAAyB;AAC3B,WAAO,KAAK,OAAO;EAAA;EAIrB,IAAI,mBAA4B;AAC9B,WAAO,KAAK,OAAO;EAAA;EAIrB,IAAI,UAAmB;AACrB,WAAO,KAAK,OAAO;EAAA;AAAA;AAQvB,SAAgBC,GAAkB,GAA2D;AAC3F,SAAO,EAAO,UAAU,IAAID,GAAY,CAAA,IAAU;AAAA;ACpBpD,IAAa,IAAA,CACX,GACA,GACA,GACA,GACA,MACmC;AACnC,MAAM,IAAMD,GAAmB,CAAA,GAC3B,IAAWT,GAAiB,EAAM,QAAA,GAClCK,KAAQL,GAAiB,EAAM,KAAA,GAC/B,IAAsC,CAAA,GAEpC,IAAiB,CAAAO,OAAiC;AAClD,IAAAA,GAAS,aAAa,WACxB,IAAWA,GAAS,UACpB,EAAgB,WAAWA,GAAS,WAElCA,GAAS,UAAU,WACrBF,KAAQE,GAAS,OACjB,EAAgB,QAAQA,GAAS;EAAA,GAI/B,IAAA,MAAoB;AACxB,QAAMA,KAASP,GAAiB,CAAA;AAKhC,WAJA,IAAkB,CAAA,GACdO,GAAO,aAAa,UAAaA,GAAO,UAAU,SAC7C,GAAGA,EAAA,IAEL;EAAA;AAGT,SAAO,EAAQ,KACb,UAAU,OAAOD,OAAU;AACzB,QAAM,IAAW,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAY,GAAU,MACrBA,GAAW,UAAU,EAAE,OAAAN,IAAO,OAAA,GAAO,OAAA,GAAO,UAAA,GAAU,OAAA,EAAA,CAAO,CAAC;AAgBlE,QAdA,EAAc,CAAA,GAEV,EAAS,oBAAoB,OAC/B,GAAK,MAAM,SAAS,kBAAkBA,IAAO,EAC3C,MAAMA,GAAM,MACZ,QAAQ,gCAAA,CACT,IAED,GAAK,MAAM,SAAS,kBAAkBA,IAAO,EAC3C,MAAMA,GAAM,MACZ,aAAa,EAAY,OAAA,CAC1B,GAGC,EAAS,oBAAoB,KAC/B,QAAO,EAAA;AAGT,YAAQA,GAAM,MAAd;MACE,KAAK,UAAU,oBAAoB;AACjC,YAAM,IAAW,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAU,MACrBD,GAAW,0BAA0B,EAC5B,OAAAN,IACP,UAAAO,IACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC;AAIN,YAFA,EAAc,CAAA,GAEV,EAAS,oBAAoB,MAAM;AACrC,cAAM,EAAE,WAAAN,IAAW,MAAAO,KAAO,aAAa,MAAAF,GAAA,IAASN;AAMhD,cAAI,CAFoB,EAAS,KAAM,CAAAA,OAAMA,GAAE,OAAOC,EAAA,GAEhC;AAGpB,gBAAMD,KAAsB,EAC1B,IAAIC,IACE,MAAAO,IACN,SAAS,IACT,GAAIF,OAAS,UAAa,EAAE,MAAAA,GAAA,EAAM;AAIpC,cAAS,KAAKN,EAAA,GACd,EAAc,EAAE,UAAA,EAAA,CAAU;UAAC;QAAA;AAK/B,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU,sBAAsB;AACnC,YAAM,EAAE,WAAA,GAAW,OAAA,EAAA,IAAUA,IAGvBS,KAAgB,EAAS,KAAM,CAAAR,OAAMA,GAAE,OAAO,CAAA;AACpD,YAAI,CAACQ,GAEH,QADA,QAAQ,KAAK,mDAAmD,CAAA,GAAU,GACnE,EAAA;AAGT,YAAMC,KAAW,MAAMZ,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAUI,OACrBL,GAAW,4BAA4B,EAC9B,OAAAN,IACP,UAAAO,IACA,OAAAI,IACA,OAAA,GACA,OAAA,GACA,mBACE,OAAOF,GAAc,WAAY,WAAWA,GAAc,UAAU,GAAA,CACvE,CAAC;AAYN,eAVA,EAAcC,EAAA,GAEVA,GAAS,oBAAoB,SAI/BD,GAAc,UAAU,GADtB,OAAOA,GAAc,WAAY,WAAWA,GAAc,UAAU,EAAA,GACzB,CAAA,IAC7C,EAAc,EAAE,UAAA,EAAA,CAAU,IAGrB,EAAA;MAAa;MAGtB,KAAK,UAAU,kBAAkB;AAC/B,YAAM,EAAE,WAAA,EAAA,IAAcT,IAGhB,IAAgB,EAAS,KAAM,CAAAC,OAAMA,GAAE,OAAO,CAAA;AAmCpD,eAlCK,KAoBL,EAfiB,MAAMH,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAUE,OACrBH,GAAW,wBAAwB,EAC1B,OAAAN,IACP,UAAAO,IACA,OAAAE,IACA,OAAA,GACA,OAAA,GACA,mBACE,OAAO,EAAc,WAAY,WAAW,EAAc,UAAU,GAAA,CACvE,CAAC,CACL,GAGD,MAAM,QAAQ,IACZ,EAAY,IAAK,CAAAT,OAAe;AAC9B,UAAAA,GAAW,eAAe,EACxB,SAAS,GACT,UAAA,GACA,OAAAD,IACA,OAAA,GACA,OAAA,EAAA,CACD;QAAC,CAAA,CACF,GAGG,EAAA,MAjCL,QAAQ,KAAK,+CAA+C,CAAA,GAAU,GAC/D,EAAA;MAAa;MAmCxB,KAAK,UAAU,iBAAiB;AAC9B,YAAM,IAAW,MAAMD,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAU,MACrBD,GAAW,uBAAuB,EACzB,OAAAN,IACP,UAAAO,IACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC;AAIN,YAFA,EAAc,CAAA,GAEV,EAAS,oBAAoB,MAAM;AACrC,cAAM,EAAE,YAAAN,IAAY,cAAAO,IAAc,iBAAAF,GAAA,IAAoBN,IAElDO;AAIF,UAAAD,MACA,EAAS,SAAS,KAClB,EAAS,EAAS,SAAS,CAAA,EAAG,OAAOA,KAErCC,KAAgB,EAAS,EAAS,SAAS,CAAA,KAG3CA,KAAgB,EACd,IAAID,MAAmBL,IACvB,MAAM,aACN,WAAW,CAAA,EAAE,GAEf,EAAS,KAAKM,EAAA,IAGhBA,GAAc,cAAdA,GAAc,YAAc,CAAA,IAG5BA,GAAc,UAAU,KAAK,EAC3B,IAAIN,IACJ,MAAM,YACN,UAAU,EACR,MAAMO,IACN,WAAW,GAAA,EACZ,CACF,GAED,EAAc,EAAE,UAAA,EAAA,CAAU;QAAC;AAG7B,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU,gBAAgB;AAC7B,YAAM,EAAE,YAAA,GAAY,OAAA,EAAA,IAAUR,IAGxBS,KAAgB,EAAS,KAAM,CAAAR,OAClCA,GAAuB,WAAW,KAAM,CAAAA,OAAOA,GAAG,OAAO,CAAA,CAAW;AAGvE,YAAI,CAACQ,GAIH,QAHA,QAAQ,KACN,kEAAkE,CAAA,GAAW,GAExE,EAAA;AAIT,YAAMC,KAAiBD,GAAc,WAAW,KAAM,CAAAR,OAAOA,GAAG,OAAO,CAAA;AACvE,YAAI,CAACS,GAEH,QADA,QAAQ,KAAK,+CAA+C,CAAA,GAAW,GAChE,EAAA;AAGT,YAAME,KAAW,MAAMd,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAUI,OAAU;AAC/B,cAAMF,KAAiBC,GAAe,SAAS,WACzCE,KAAeF,GAAe,SAAS,MACzCG,KAAsB,CAAA;AAC1B,cAAI;AAEF,YAAAA,KAAsB,eAAeJ,EAAA;UAAe,QACtC;UAAA;AAEhB,iBAAOH,GAAW,sBAAsB,EAC/B,OAAAN,IACP,UAAAO,IACA,OAAAI,IACA,OAAA,GACA,OAAA,GACA,gBAAAF,IACA,cAAAG,IACA,qBAAAC,GAAA,CACD;QAAC,CAAA;AAWN,eARA,EAAcD,EAAA,GAEVA,GAAS,oBAAoB,SAE/BF,GAAe,SAAS,aAAa,GACrC,EAAc,EAAE,UAAA,EAAA,CAAU,IAGrB,EAAA;MAAa;MAGtB,KAAK,UAAU,eAAe;AAC5B,YAAM,EAAE,YAAA,EAAA,IAAeV,IAGjB,IAAgB,EAAS,KAAM,CAAAC,OAClCA,GAAuB,WAAW,KAAM,CAAAA,OAAOA,GAAG,OAAO,CAAA,CAAW;AAGvE,YAAI,CAAC,EAIH,QAHA,QAAQ,KACN,iEAAiE,CAAA,GAAW,GAEvE,EAAA;AAIT,YAAMQ,KAAiB,EAAc,WAAW,KAAM,CAAAR,OAAOA,GAAG,OAAO,CAAA;AA0CvE,eAzCKQ,MA2BL,EAtBiB,MAAMX,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAUI,OAAU;AAC/B,cAAMD,KAAqBD,GAAe,SAAS,WAC7CG,KAAeH,GAAe,SAAS,MACzCI,KAAe,CAAA;AACnB,cAAI;AACF,YAAAA,KAAe,KAAK,MAAMH,EAAA;UAAmB,QAC/B;UAAA;AAChB,iBAAOJ,GAAW,qBAAqB,EAC9B,OAAAN,IACP,UAAAO,IACA,OAAAI,IACA,OAAA,GACA,OAAA,GACA,cAAAC,IACA,cAAAC,GAAA,CACD;QAAC,CAAA,CAEL,GAGD,MAAM,QAAQ,IACZ,EAAY,IAAK,CAAAb,OAAe;AAC9B,UAAAA,GAAW,gBAAgB,EACzB,UAAUS,IACV,UAAA,GACA,OAAAV,IACA,OAAA,GACA,OAAA,EAAA,CACD;QAAC,CAAA,CACF,GAGG,EAAA,MAxCL,QAAQ,KAAK,8CAA8C,CAAA,GAAW,GAC/D,EAAA;MAAa;MA0CxB,KAAK,UAAU,kBAAkB;AAC/B,YAAM,IAAW,MAAMD,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAU,MACrBD,GAAW,wBAAwB,EAC1B,OAAAN,IACP,UAAAO,IACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC;AAKN,YAFA,EAAc,CAAA,GAEV,EAAS,oBAAoB,MAAM;AACrC,cAAM,EAAE,WAAAA,IAAW,YAAA,GAAY,SAAAE,IAAS,MAAAC,GAAA,IAASV,IAE3CY,KAA2B,EAC/B,IAAIL,IACJ,YAAA,GACA,MAAMG,MAAQ,QACL,SAAAD,GAAA;AAGX,YAAS,KAAKG,EAAA,GAEd,MAAM,QAAQ,IACZ,EAAY,IAAK,CAAAZ,OAAe;AAC9B,YAAAA,GAAW,eAAe,EACxB,SAASY,IACT,UAAA,GACA,OAAAb,IACA,OAAA,GACA,OAAA,EAAA,CACD;UAAC,CAAA,CACF,GAGJ,EAAc,EAAE,UAAA,EAAA,CAAU;QAAC;AAG7B,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU,gBAAgB;AAC7B,YAAM,IAAW,MAAMD,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAU,MACrBD,GAAW,uBAAuB,EACzB,OAAAN,IACP,UAAAO,IACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC;AAIN,YAFA,EAAc,CAAA,GAEV,EAAS,oBAAoB,MAAM;AACrC,cAAM,EAAE,UAAAN,GAAA,IAAaD;AAGrB,UAAAD,KAAQE,IAER,EAAc,EAAE,OAAAF,GAAA,CAAO;QAAC;AAG1B,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU,aAAa;AAC1B,YAAM,IAAW,MAAMD,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAU,MACrBD,GAAW,oBAAoB,EACtB,OAAAN,IACP,UAAAO,IACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC;AAIN,YAFA,EAAc,CAAA,GAEV,EAAS,oBAAoB,MAAM;AACrC,cAAM,EAAE,OAAAN,GAAA,IAAUD;AAElB,cAAI;AAGF,YAAAD,KADyB,WAAWA,IAAOE,IAAO,MAAM,KAAA,EACzC,aACf,EAAc,EAAE,OAAAF,GAAA,CAAO;UAAC,SACjBC,IAAgB;AACvB,gBAAMQ,KAAeR,cAAiB,QAAQA,GAAM,UAAU,OAAOA,EAAA;AACrE,oBAAQ,KACN;iBAAgD,KAAK,UAAUD,IAAO,MAAM,CAAA,CAAE;oBAAuB,KAAK,UAAUE,IAAO,MAAM,CAAA,CAAE;SAAYO,EAAA,EAAA;UAChJ;QAAA;AAML,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU,mBAAmB;AAChC,YAAM,IAAW,MAAMV,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAU,MACrBD,GAAW,0BAA0B,EAC5B,OAAAN,IACP,UAAAO,IACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC;AAIN,YAFA,EAAc,CAAA,GAEV,EAAS,oBAAoB,MAAM;AACrC,cAAM,EAAE,UAAUN,GAAA,IAAgBD,IAK5BQ,KAAc,IAAI,IAAIP,GAAY,IAAK,CAAAA,OAAM,CAACA,GAAE,IAAIA,EAAA,CAAE,CAAC,GAKvDK,KAAoB,CAAAL,OACxBA,OAAS,cAAcA,OAAS;AAClC,cAAW,EACR,OAAQ,CAAAA,OAAMK,GAAiBL,GAAE,IAAA,KAASO,GAAY,IAAIP,GAAE,EAAA,CAAG,EAC/D,IAAK,CAAAA,OAAOK,GAAiBL,GAAE,IAAA,IAAQA,KAAIO,GAAY,IAAIP,GAAE,EAAA,CAAG;AAGnE,cAAMM,KAAc,IAAI,IAAI,EAAS,IAAK,CAAAN,OAAMA,GAAE,EAAA,CAAG;AACrD,mBAAWD,MAAeC,GACnB,CAAAM,GAAY,IAAIP,GAAY,EAAA,KAC/B,EAAS,KAAKA,EAAA;AAIlB,YAAc,EAAE,UAAA,EAAA,CAAU;QAAC;AAG7B,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU,mBAAmB;AAChC,YAAM,IAAgBA,IAChB,IAAgB,EAAS,UAAW,CAAAC,OAAMA,GAAE,OAAO,EAAc,SAAA,GACjEQ,KAAkB,KAAiB,IAAI,EAAS,CAAA,IAAiB,QACjEC,KACJD,IAAiB,SAAS,aAAcA,KAAsC,QAC1EG,KAAU,EAAc,WAAW,MAEnCE,KAAW,MAAMhB,GACrB,GACA,GACAC,IAAA,CACCC,IAAYM,IAAUK,OACrBX,GAAW,0BAA0B,EACnC,OAAO,GACP,UAAAM,IACA,OAAAK,IACA,OAAA,GACA,OAAA,GACA,iBAAiBD,IACjB,iBAAAD,GAAA,CACD,CAAC;AAIN,YAFA,EAAcK,EAAA,GAEVA,GAAS,oBAAoB,MAAM;AACrC,cAAMd,KAAmC,EACvC,IAAI,EAAc,WAClB,MAAM,YACN,cAAc,EAAc,cAC5B,SAASN,GAAiB,EAAc,OAAA,EAAQ,GAG9Ce;AAEA,gBAAkB,MACpB,EAAS,KAAKT,EAAA,GACdS,KAAiBT,MACRU,KACLE,OACF,EAAS,CAAA,IAAiB,EACxB,GAAGF,IACH,cAAc,EAAc,cAC5B,SAAShB,GAAiB,EAAc,OAAA,EAAQ,KAG3CkB,OACT,EAAS,CAAA,IAAiBZ,IAC1BS,KAAiBT,KAGnB,EAAc,EAAE,UAAA,EAAA,CAAU,GAEtBS,MACF,MAAM,QAAQ,IACZ,EAAY,IAAK,CAAAT,OACfA,GAAW,eAAe,EACxB,SAASS,IACT,UAAA,GACA,OAAAV,IACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC,CACH;QACF;AAIL,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU,gBAAgB;AAC7B,YAAM,IAAgBC,IAChBS,KAAgB,EAAS,UAAW,CAAAR,OAAMA,GAAE,OAAO,EAAc,SAAA;AACvE,YAAIQ,OAAkB,GACpB,QAAO,EAAA;AAGT,YAAMC,KAAkB,EAASD,EAAA;AACjC,YAAIC,GAAgB,SAAS,WAI3B,QAHA,QAAQ,KACN,4BAA4B,EAAc,SAAA,8BAAU,GAE/C,EAAA;AAGT,YAAME,KAA0BF,IAE1BI,KAAW,MAAMhB,GACrB,GACA,GACAC,IAAA,CACCC,IAAYM,IAAU,MACrBN,GAAW,uBAAuB,EAChC,OAAO,GACP,UAAAM,IACA,OAAA,GACA,OAAA,GACA,OAAA,GACA,iBAAiBM,GAAA,CAClB,CAAC;AAIN,YAFA,EAAcE,EAAA,GAEVA,GAAS,oBAAoB,KAC/B,KAAI;AACF,cAAMb,KAAcP,GAAiBkB,GAAwB,WAAW,CAAA,CAAE,GAQpEZ,KANmB,WACvBC,IACA,EAAc,SAAS,CAAA,GACvB,MACA,KAAA,EAE4B;AAE9B,YAASQ,EAAA,IAAiB,EACxB,GAAGG,IACH,SAASlB,GAAiBM,EAAA,GAC1B,cAAc,EAAc,aAAA,GAG9B,EAAc,EAAE,UAAA,EAAA,CAAU;QAAC,SACpBC,IAAgB;AACvB,cAAMD,KAAeC,cAAiB,QAAQA,GAAM,UAAU,OAAOA,EAAA;AACrE,kBAAQ,KACN,uCAAuC,EAAc,SAAA,MAAeD,EAAA,EAAA;QACrE;AAIL,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU;AAgBb,eAFA,EAbiB,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAY,GAAU,MACrBA,GAAW,aAAa,EACf,OAAAN,IACP,UAAA,GACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC,CACL,GAGM,EAAA;MAGT,KAAK,UAAU;AAgBb,eAFA,EAbiB,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAY,GAAU,MACrBA,GAAW,gBAAgB,EAClB,OAAAN,IACP,UAAA,GACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC,CACL,GAGM,EAAA;MAGT,KAAK,UAAU,aAAa;AAC1B,YAAM,IAAW,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAU,MACrBD,GAAW,oBAAoB,EACtB,OAAAN,IACP,UAAAO,IACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC;AAKN,YAHA,EAAc,CAAA,GAGV,EAAS,oBAAoB,MAAM;AACrC,cAAMN,KAAkBD;AAGxB,cAAIC,GAAgB,OAAO,UAAU;AAEnC,qBAAWD,MAAWC,GAAgB,MAAM,SAClB,GAAS,KAAM,CAAAA,OAAMA,GAAE,OAAOD,GAAQ,EAAA,KAE5D,EAAS,KAAKA,EAAA;AAKlB,cAAc,EAAE,UAAA,EAAA,CAAU;UAAC;QAAA;AAI/B,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU;AAiBb,eAFA,EAdiB,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAY,GAAU,MACrBA,GAAW,qBAAqB,EACvB,OAAAN,IACP,UAAA,GACA,OAAA,GACA,OAAA,GACA,OAAA,GACA,QAASA,GAA2B,OAAA,CACrC,CAAC,CACL,GAGM,EAAA;MAGT,KAAK,UAAU;AAgBb,eAFA,EAbiB,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAY,GAAU,MACrBA,GAAW,kBAAkB,EACpB,OAAAN,IACP,UAAA,GACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC,CACL,GAGM,EAAA;MAGT,KAAK,UAAU;AAgBb,eAFA,EAbiB,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAY,GAAU,MACrBA,GAAW,qBAAqB,EACvB,OAAAN,IACP,UAAA,GACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC,CACL,GAGM,EAAA;MAGT,KAAK,UAAU;AAgBb,eAFA,EAbiB,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAY,GAAU,MACrBA,GAAW,sBAAsB,EACxB,OAAAN,IACP,UAAA,GACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC,CACL,GAGM,EAAA;MAGT,KAAK,UAAU;AACb,cAAU,MAAM,4DAAA;MAGlB,KAAK,UAAU;AACb,cAAU,MAAM,yDAAA;MAGlB,KAAK,UAAU;AACb,eAAO,EAAA;MAGT,KAAK,UAAU;AACb,eAAO,EAAA;MAGT,KAAK,UAAU;AACb,eAAO,EAAA;MAGT,KAAK,UAAU;AACb,eAAO,EAAA;MAGT,KAAK,UAAU;AACb,eAAO,EAAA;MAGT,KAAK,UAAU;AAeb,eADA,EAbiB,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAY,GAAU,MACrBA,GAAW,wBAAwB,EAC1B,OAAAN,IACP,UAAA,GACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC,CACL,GAEM,EAAA;MAGT,KAAK,UAAU,yBAAyB;AACtC,YAAM,IAAW,MAAMF,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAU,MACrBD,GAAW,+BAA+B,EACjC,OAAAN,IACP,UAAAO,IACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC;AAIN,YAFA,EAAc,CAAA,GAEV,EAAS,oBAAoB,MAAM;AACrC,cAAM,EAAE,WAAAN,GAAA,IAAcD;AAGtB,cAAI,CAFoB,EAAS,KAAM,CAAAA,OAAMA,GAAE,OAAOC,EAAA,GAEhC;AACpB,gBAAMD,KAA+B,EACnC,IAAIC,IACJ,MAAM,aACN,SAAS,GAAA;AAEX,cAAS,KAAKD,EAAA,GACd,EAAc,EAAE,UAAA,EAAA,CAAU;UAAC;QAAA;AAG/B,eAAO,EAAA;MAAa;MAGtB,KAAK,UAAU,2BAA2B;AACxC,YAAM,EAAE,WAAA,GAAW,OAAA,EAAA,IAAUA,IAEvBS,KAAgB,EAAS,KAAM,CAAAR,OAAMA,GAAE,OAAO,CAAA;AACpD,YAAI,CAACQ,GAEH,QADA,QAAQ,KAAK,wDAAwD,CAAA,GAAU,GACxE,EAAA;AAGT,YAAMC,KAAW,MAAMZ,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAUI,OACrBL,GAAW,iCAAiC,EACnC,OAAAN,IACP,UAAAO,IACA,OAAAI,IACA,OAAA,GACA,OAAA,GACA,wBACE,OAAOF,GAAc,WAAY,WAAWA,GAAc,UAAU,GAAA,CACvE,CAAC;AAUN,eARA,EAAcC,EAAA,GAEVA,GAAS,oBAAoB,SAG/BD,GAAc,UAAU,GADtB,OAAOA,GAAc,WAAY,WAAWA,GAAc,UAAU,EAAA,GACzB,CAAA,IAC7C,EAAc,EAAE,UAAA,EAAA,CAAU,IAErB,EAAA;MAAa;MAGtB,KAAK,UAAU,uBAAuB;AACpC,YAAM,EAAE,WAAA,EAAA,IAAcT,IAEhB,IAAgB,EAAS,KAAM,CAAAC,OAAMA,GAAE,OAAO,CAAA;AAmCpD,eAlCK,KAoBL,EAfiB,MAAMH,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAUE,OACrBH,GAAW,6BAA6B,EAC/B,OAAAN,IACP,UAAAO,IACA,OAAAE,IACA,OAAA,GACA,OAAA,GACA,wBACE,OAAO,EAAc,WAAY,WAAW,EAAc,UAAU,GAAA,CACvE,CAAC,CACL,GAGD,MAAM,QAAQ,IACZ,EAAY,IAAK,CAAAT,OAAe;AAC9B,UAAAA,GAAW,eAAe,EACxB,SAAS,GACT,UAAA,GACA,OAAAD,IACA,OAAA,GACA,OAAA,EAAA,CACD;QAAC,CAAA,CACF,GAGG,EAAA,MAjCL,QAAQ,KAAK,oDAAoD,CAAA,GAAU,GACpE,EAAA;MAAa;MAmCxB,KAAK,UAAU;AACb,cAAU,MAAM,kEAAA;MAGlB,KAAK,UAAU;AAeb,eADA,EAbiB,MAAMD,GACrB,GACA,GACAC,IAAA,CACCO,IAAY,GAAU,MACrBA,GAAW,sBAAsB,EACxB,OAAAN,IACP,UAAA,GACA,OAAA,GACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC,CACL,GAEM,EAAA;MAGT,KAAK,UAAU,2BAA2B;AACxC,YAAM,EAAE,SAAA,GAAS,UAAA,GAAU,gBAAAS,GAAA,IAAmBT,IACxCU,KAAW,MAAMZ,GACrB,GACA,GACAC,IAAA,CACCO,IAAYC,IAAUI,OACrBL,GAAW,iCAAiC,EACnC,OAAAN,IACP,UAAAO,IACA,OAAAI,IACA,OAAA,GACA,OAAA,EAAA,CACD,CAAC;AAGN,YADA,EAAcD,EAAA,GACVA,GAAS,oBAAoB,MAAM;AACrC,cAAIT,KAAgB;AACpB,cAAI,MAAY,aAAA;AAAA,qBAEHD,MAAW,EACpB,KAAIA,GAAQ,SAAS,eAAeA,GAAQ,WAAW;AACrD,kBAAMQ,KAAWR,GAAQ,UAAU,KAAM,CAAAC,OAAOA,GAAG,OAAO,CAAA;AAC1D,kBAAIO,IAAU;AACZ,gBAAAA,GAAS,iBAAiBC,IAC1BR,KAAgB;AAChB;cAAA;YAAA;UAAA,OAID;AAGL,gBAAMD,KAAU,EAAS,KAAM,CAAAC,OAAMA,GAAE,OAAO,CAAA;AAE1C,YAAAD,IAAS,SAAS,cAAcA,OAClCA,GAAQ,iBAAiBS,IACzBR,KAAgB;UAAA;AAGhB,UAAAA,OACF,EAAgB,WAAW;QAAA;AAG/B,eAAO,EAAA;MAAa;IAAA;AAOxB,WADgCD,GAAM,MAC/B,EAAA;EAAa,CAAA,GAEtB,SAAA,GAGA,EAAY,SAAS,IAAI,eAAe,CAAA,CAAE,IAA2B,CAAAC,OAAgBA,EAAA;AACtF;AA9gCH,IC/Cac,KACV,OACA,OAA0D;AACzD,MAAM,IAAMZ,GAAmB,CAAA,GAE3B,IAAiB,oBAAI,OACrB,IAAkB,oBAAI,OACtB,IAAc,OACd,IAAW,OAEX,IAAqB,OAErBJ,KAAc,oBAAI,OAClB,IAAqB,OACrB,IAA4B,OAC5B,IAAa,OAGXiB,KAAA,MAAsB;AAC1B,MAAe,MAAA,GACf,EAAgB,MAAA,GAChBjB,GAAY,MAAA,GACZ,IAAqB,OACrB,IAA4B,OAC5B,IAAc,OACd,IAAW,OACX,IAAa;EAAA;AAGf,SAAO,EAAQ,KAEbkB,SAAU,CAAAhB,OAAU;AAClB,QAAMD,KAAYC,GAAM;AAKxB,QAHA,GAAK,MAAM,UAAU,UAAUA,IAAO,EAAE,MAAMA,GAAM,KAAA,CAAM,GAGtD,EACF,QAAO,WAAA,MAEH,IAAI,UACF,2BAA2BD,EAAA,iFAAU,CACtC;AAKP,QACE,KACAA,OAAc,UAAU,aACxBA,OAAc,UAAU,YAExB,QAAO,WAAA,MAEH,IAAI,UACF,2BAA2BA,EAAA,0FAAU,CACtC;AAKP,QAAI,CAAC,GAEH;AAAA,UADA,IAAqB,MACjBA,OAAc,UAAU,eAAeA,OAAc,UAAU,UACjE,QAAO,WAAA,MAAiB,IAAI,UAAU,mCAAA,CAAoC;IAAC,WAEpEA,OAAc,UAAU,aAAa;AAE9C,UAAI,KAAc,CAAC,EACjB,QAAO,WAAA,MAEH,IAAI,UACF,yIAAA,CACD;AAIH,WAEFgB,GAAA;IAAe;AAKnB,YAAQhB,IAAR;MAEE,KAAK,UAAU,oBAAoB;AACjC,YAAMA,KAAaC,GAAc;AAajC,eAVI,EAAe,IAAID,EAAA,IACd,WAAA,MAEH,IAAI,UACF,mEAAmEA,EAAA,sEAAU,CAC9E,KAIP,EAAe,IAAIA,IAAW,IAAA,GACvB,GAAGC,EAAA;MAAM;MAGlB,KAAK,UAAU,sBAAsB;AACnC,YAAMD,KAAaC,GAAc;AAYjC,eATK,EAAe,IAAID,EAAA,IASjB,GAAGC,EAAA,IARD,WAAA,MAEH,IAAI,UACF,mFAAmFD,EAAA,0DAAU,CAC9F;MACJ;MAML,KAAK,UAAU,kBAAkB;AAC/B,YAAMA,KAAaC,GAAc;AAcjC,eAXK,EAAe,IAAID,EAAA,KAUxB,EAAe,OAAOA,EAAA,GACf,GAAGC,EAAA,KAVD,WAAA,MAEH,IAAI,UACF,+EAA+ED,EAAA,qDAAU,CAC1F;MACJ;MASL,KAAK,UAAU,iBAAiB;AAC9B,YAAMA,KAAcC,GAAc;AAalC,eAVI,EAAgB,IAAID,EAAA,IACf,WAAA,MAEH,IAAI,UACF,6DAA6DA,EAAA,mEAAW,CACzE,KAIP,EAAgB,IAAIA,IAAY,IAAA,GACzB,GAAGC,EAAA;MAAM;MAGlB,KAAK,UAAU,gBAAgB;AAC7B,YAAMD,KAAcC,GAAc;AAYlC,eATK,EAAgB,IAAID,EAAA,IASlB,GAAGC,EAAA,IARD,WAAA,MAEH,IAAI,UACF,0EAA0ED,EAAA,oDAAW,CACtF;MACJ;MAML,KAAK,UAAU,eAAe;AAC5B,YAAMA,KAAcC,GAAc;AAclC,eAXK,EAAgB,IAAID,EAAA,KAUzB,EAAgB,OAAOA,EAAA,GAChB,GAAGC,EAAA,KAVD,WAAA,MAEH,IAAI,UACF,yEAAyED,EAAA,kDAAW,CACrF;MACJ;MASL,KAAK,UAAU,cAAc;AAC3B,YAAMA,KAAYC,GAAc;AAOhC,eANIF,GAAY,IAAIC,EAAA,IACX,WAAA,MACC,IAAI,UAAU,SAASA,EAAA,wCAAS,CAAwC,KAGlFD,GAAY,IAAIC,IAAU,IAAA,GACnB,GAAGC,EAAA;MAAM;MAGlB,KAAK,UAAU,eAAe;AAC5B,YAAMD,KAAYC,GAAc;AAUhC,eATKF,GAAY,IAAIC,EAAA,KAQrBD,GAAY,OAAOC,EAAA,GACZ,GAAGC,EAAA,KARD,WAAA,MAEH,IAAI,UACF,yCAAyCD,EAAA,wBAAS,CACnD;MACJ;MAOL,KAAK,UAAU;AAGb,eADA,IAAa,MACN,GAAGC,EAAA;MAGZ,KAAK,UAAU;AAKb,YAAIF,GAAY,OAAO,GAAG;AACxB,cAAME,KAAkB,MAAM,KAAKF,GAAY,KAAA,CAAM,EAAE,KAAK,IAAA;AAC5D,iBAAO,WAAA,MAEH,IAAI,UACF,4DAA4DE,EAAA,EAAA,CAC7D;QACJ;AAIH,YAAI,EAAe,OAAO,GAAG;AAC3B,cAAMA,KAAqB,MAAM,KAAK,EAAe,KAAA,CAAM,EAAE,KAAK,IAAA;AAClE,iBAAO,WAAA,MAEH,IAAI,UACF,oEAAoEA,EAAA,EAAA,CACrE;QACJ;AAIH,YAAI,EAAgB,OAAO,GAAG;AAC5B,cAAMA,KAAsB,MAAM,KAAK,EAAgB,KAAA,CAAM,EAAE,KAAK,IAAA;AACpE,iBAAO,WAAA,MAEH,IAAI,UACF,iEAAiEA,EAAA,EAAA,CAClE;QACJ;AAIH,eADA,IAAc,MACP,GAAGA,EAAA;MAGZ,KAAK,UAAU;AAGb,eADA,IAAW,MACJ,GAAGA,EAAA;MAGZ,KAAK,UAAU;AACb,eAAO,GAAGA,EAAA;MAIZ,KAAK,UAAU;AAoBb,eAnBK,IASD,IACK,WAAA,MAEH,IAAI,UACF,iJAAA,CACD,KAIP,IAA4B,MACrB,GAAGA,EAAA,KAlBD,WAAA,MAEH,IAAI,UACF,8HAAA,CACD;MAiBT,KAAK,UAAU;AAWb,eATK,IASE,GAAGA,EAAA,IARD,WAAA,MAEH,IAAI,UACF,gJAAA,CACD;MAOT,KAAK,UAAU;AAab,eAXK,KAUL,IAA4B,OACrB,GAAGA,EAAA,KAVD,WAAA,MAEH,IAAI,UACF,4IAAA,CACD;MAST,KAAK,UAAU;AAWb,eAVI,IACK,WAAA,MAEH,IAAI,UACF,+GAAA,CACD,KAIP,IAAqB,MACd,GAAGA,EAAA;MAGZ,KAAK,UAAU;AAab,eAXK,KAUL,IAAqB,OACd,GAAGA,EAAA,KAVD,WAAA,MAEH,IAAI,UACF,+GAAA,CACD;MAST;AACE,eAAO,GAAGA,EAAA;IAAM;EAAA,CAAA,CAGpB;AACH;AC5WL,IAAY,KAAA,SAAA,GAAL;AAAA,SACL,EAAA,UAAA,WACA,EAAA,OAAA,QAAA;AAAA,GAAA,CAAA,CAAA;AAgBF,IAAaiB,KAAA,CAAkB,GAAa,MAEnC,MAAA,MAAY,KAAK,MAAM,GAAK,CAAA,CAAY,CAAC,EAAE,KAChD,UAAW,CAAAjB,OAAa;AACtB,MAAI,CAACA,GAAS,IAAI;AAChB,QAAMD,KAAcC,GAAS,QAAQ,IAAI,cAAA,KAAmB;AAE5D,WAAO,KAAKA,GAAS,KAAA,CAAM,EAAE,KAC3BgB,SAAU,CAAAT,OAAS;AACjB,UAAI,IAAmBA;AACvB,UAAIR,GAAY,SAAS,kBAAA,EACvB,KAAI;AAAE,YAAU,KAAK,MAAMQ,EAAA;MAAK,QAAU;MAAA;AAE5C,UAAM,IAAe,MACnB,QAAQP,GAAS,MAAA,KAAW,OAAO,KAAY,WAAW,IAAU,KAAK,UAAU,CAAA,CAAQ,EAAA;AAI7F,aAFA,EAAI,SAASA,GAAS,QACtB,EAAI,UAAU,GACP,WAAA,MAAiB,CAAA;IAAI,CAAA,CAC5B;EACH;AAGH,MAAMD,KAAiC,EACrC,MAAM,EAAc,SACpB,QAAQC,GAAS,QACjB,SAASA,GAAS,QAAA,GAGd,IAASA,GAAS,MAAM,UAAA;AAK9B,SAJK,IAIE,IAAI,WAAuB,CAAAA,QAEhCA,GAAW,KAAKD,EAAA,IAEf,YAAY;AACX,QAAI;AACF,iBAAa;AACX,YAAM,EAAE,MAAAA,IAAM,OAAA,EAAA,IAAU,MAAM,EAAO,KAAA;AACrC,YAAIA,GAAM;AAEV,YAAM,IAA2B,EAC/B,MAAM,EAAc,MACpB,MAAM,EAAA;AAER,QAAAC,GAAW,KAAK,CAAA;MAAU;AAE5B,MAAAA,GAAW,SAAA;IAAU,SACdD,IAAO;AACd,MAAAC,GAAW,MAAMD,EAAA;IAAM;EAAA,GAAA,GAEvB,MAES;AACX,MAAO,OAAA,EAAS,MAAO,CAAAC,OAAU;AAC1B,UAAAA,IAAwB,SAAS,aAItC,OAAMA;IAAA,CAAA;EACN,EAAA,IAhCG,WAAA,MAAqB,MAAM,qCAAA,CAAsC;AAAC,CAAA,CAmC3E;AAlEN,ICTakB,KAAA,CACX,GACA,MACoB;AACpB,MAAM,IAAMhB,GAAmB,CAAA,GACzB,IAAc,IAAI,WAElB,IAAU,IAAI,YAAY,SAAS,EAAE,OAAO,MAAA,CAAO,GACrD,IAAS;AAGb,IAAQ,UAAU,EAChB,MAAO,CAAAF,OAAqB;AACtB,QAAAA,GAAM,SAAS,EAAc,WAI7BA,GAAM,SAAS,EAAc,QAAQA,GAAM,MAAM;AAEnD,UAAMD,KAAO,EAAQ,OAAOC,GAAM,MAAM,EAAE,QAAQ,KAAA,CAAM;AACxD,WAAUD;AAGV,UAAMQ,KAAS,EAAO,MAAM,MAAA;AAE5B,UAASA,GAAO,IAAA,KAAS;AAEzB,eAAWP,MAASO,GAClB,GAAgBP,EAAA;IAAM;EAAA,GAI5B,OAAQ,CAAAA,OAAQ,EAAY,MAAMA,EAAA,GAClC,UAAA,MAAgB;AAEV,UACF,KAAU,EAAQ,OAAA,GAElB,EAAgB,CAAA,IAElB,EAAY,SAAA;EAAU,EAAA,CAEzB;AAWD,WAAS,EAAgBA,IAAmB;AAC1C,QAAMD,KAAQC,GAAU,MAAM;IACxBM,KAAsB,CAAA;AAE5B,aAAWN,MAAQD,GACb,CAAAC,GAAK,WAAW,OAAA,KAElBM,GAAU,KAAKN,GAAK,MAAM,CAAA,EAAG,QAAQ,MAAM,EAAA,CAAG;AAKlD,QAAIM,GAAU,SAAS,EACrB,KAAI;AAEF,UAAMN,KAAUM,GAAU,KAAK;IACzBP,KAAO,KAAK,MAAMC,EAAA;AACxB,SAAK,MAAM,OAAO,mBAAmBD,IAAM,EAAE,MAAMA,GAAK,KAAA,CAAM,GAC9D,EAAY,KAAKA,EAAA;IAAK,SACfC,IAAK;AACZ,QAAY,MAAMA,EAAA;IAAI;EAAA;AAK5B,SAAO,EAAY,aAAA;AAAc;ADrEnC,IEXa,IAAoB,OAA0D;AACzF,MAAM,IAAe,IAAI,WACrB,IAAS,IAAI;AAEjB,IAAQ,UAAU,EAChB,MAAO,CAAAA,OAAqB;AACtB,QAAAA,GAAM,SAAS,EAAc,WAI7BA,GAAM,SAAS,EAAc,QAAQA,GAAM,MAAM;AAEnD,UAAMD,KAAY,IAAI,WAAW,EAAO,SAASC,GAAM,KAAK,MAAA;AAC5D,MAAAD,GAAU,IAAI,GAAQ,CAAA,GACtBA,GAAU,IAAIC,GAAM,MAAM,EAAO,MAAA,GACjC,IAASD,IAGT,EAAA;IAAe;EAAA,GAGnB,OAAQ,CAAAC,OAAQ,EAAa,MAAMA,EAAA,GACnC,UAAA,MAAgB;AAEd,QAAI,EAAO,SAAS,EAClB,KAAI;AACF,QAAA;IAAe,QACQ;AACvB,cAAQ,KAAK,0DAAA;IAA2D;AAG5E,MAAa,SAAA;EAAU,EAAA,CAE1B;AAKD,WAAS,IAAgB;AAEvB,WAAO,EAAO,UAAU,KAAG;AAMzB,UAAMA,KAAc,IAJP,IAAI,SAAS,EAAO,QAAQ,EAAO,YAAY,CAAA,EACjC,UAAU,GAAG,KAAA;AAIxC,UAAI,EAAO,SAASA,GAElB;AAGF,UAAI;AAEF,YAAMK,KAAU,EAAO,MAAM,GAAGL,EAAA,GAG1B,IAAc,OAAOK,EAAA;AAG3B,UAAa,KAAK,CAAA,GAGlB,IAAS,EAAO,MAAML,EAAA;MAAY,SAC3BA,IAAgB;AACvB,YAAMO,KAAeP,cAAiB,QAAQA,GAAM,UAAU,OAAOA,EAAA;AACrE,UAAa,MAAU,MAAM,6CAA6CO,EAAA,EAAA,CAAe;AACzF;MAAA;IAAA;EAAA;AAKN,SAAO,EAAa,aAAA;AAAc;AF7DpC,IGTa,IAAA,CACX,GACA,MAC0B;AAC1B,MAAM,IAAML,GAAmB,CAAA,GACzB,IAAe,IAAI,WAGnB,IAAgB,IAAI,iBAGtB,IAAoB;AAuExB,SApEA,EAAQ,UAAU,EAChB,MAAO,CAAAF,OAAqB;AAK1B,QAHA,EAAc,KAAKA,EAAA,GAGfA,GAAM,SAAS,EAAc,WAAW,CAAC,GAAmB;AAC9D,UAAoB;AACpB,UAAMD,KAAcC,GAAM,QAAQ,IAAI,cAAA;AAEtC,SAAK,UAAU,QAAQ,2BAA2B,EAChD,aAAAD,IACA,QAAQA,OAAsB,kBAAkB,aAAa,MAAA,CAC9D,GAGGA,OAAsB,kBAExB,EAAiB,CAAA,EAAe,UAAU,EACxC,MAAO,CAAAC,OAAU,EAAa,KAAKA,EAAA,GACnC,OAAQ,CAAAA,OAAQ,EAAa,MAAMA,EAAA,GACnC,UAAA,MAAgB,EAAa,SAAA,EAAU,CACxC,IAGDkB,GAAe,GAAe,CAAA,EAAK,UAAU,EAC3C,MAAO,CAAAlB,OAAS;AACd,YAAI;AACF,cAAMD,KAAc,aAAa,MAAMC,EAAA;AACvC,aAAK,MAAM,QAAQ,oBAAoBD,IAAa,EAClD,MAAMA,GAAY,MAClB,OAAO,KAAA,CACR,GACD,EAAa,KAAKA,EAAA;QAAyB,SACpCA,IAAK;AACZ,aAAK,MAAM,QAAQ,kBAAkB,EAAE,MAAAC,IAAM,OAAO,OAAOD,EAAA,EAAI,CAAE,GACjE,EAAa,MAAMA,EAAA;QAAI;MAAA,GAG3B,OAAQ,CAAAC,OAAQ;AACd,YAAKA,IAAsB,SAAS,cAAc;AAChD,YAAa,KAAK,EAChB,MAAM,UAAU,WAChB,SAAUA,GAAqB,WAAW,mBAC1C,MAAM,SACN,UAAUA,GAAA,CACX,GACD,EAAa,SAAA;AACb;QAAA;AAEF,eAAO,EAAa,MAAMA,EAAA;MAAI,GAEhC,UAAA,MAAgB,EAAa,SAAA,EAAU,CACxC;IAAC,MAEM,MACV,EAAa,MAAU,MAAM,8CAAA,CAA+C;EAAC,GAGjF,OAAQ,CAAAA,OAAQ;AACd,MAAc,MAAMA,EAAA,GACpB,EAAa,MAAMA,EAAA;EAAI,GAEzB,UAAA,MAAgB;AACd,MAAc,SAAA;EAAU,EAAA,CAE3B,GAEM,EAAa,aAAA;AAAc;AHzEpC,IIlBamB,KAA0BC,GAAE,KAAK,CAC5C,oBACA,sBACA,kBACA,wBACA,uBACA,sBACA,yBACA,qBACA,aACA,cACA,eACA,YACA,eACA,cAAA,CACD;AJGD,IIDaC,MAA6BD,GAAE,KAAK,CAC/C,2BACA,gBACA,MAAA,CACD;AJHD,IIKaE,MAAyBF,GAAE,OAAO,EAC7C,MAAMA,GAAE,QAAQD,GAAwB,KAAK,gBAAA,GAC7C,WAAWC,GAAE,OAAA,GACb,iBAAiBA,GAAE,OAAA,EAAS,SAAA,GAC5B,MAAMA,GAAE,OAAA,EAAS,SAAA,EAAU,CAC5B;AJVD,IIYaG,MAA2BH,GAAE,OAAO,EAC/C,MAAMA,GAAE,QAAQD,GAAwB,KAAK,kBAAA,GAC7C,WAAWC,GAAE,OAAA,GACb,SAASA,GAAE,OAAA,EAAQ,CACpB;AJhBD,IIkBaI,MAAuBJ,GAAE,OAAO,EAC3C,MAAMA,GAAE,QAAQD,GAAwB,KAAK,cAAA,GAC7C,WAAWC,GAAE,OAAA,EAAQ,CACtB;AJrBD,IIuBaK,MAA6BL,GAAE,OAAO,EACjD,MAAMA,GAAE,QAAQD,GAAwB,KAAK,oBAAA,GAC7C,mBAAmBC,GAAE,OAAA,GACrB,YAAYA,GAAE,OAAA,GACd,iBAAiBA,GAAE,OAAA,EAAS,SAAA,EAAU,CACvC;AJ5BD,II8BaM,MAA4BN,GAAE,OAAO,EAChD,MAAMA,GAAE,QAAQD,GAAwB,KAAK,mBAAA,GAC7C,mBAAmBC,GAAE,OAAA,GACrB,MAAMA,GAAE,OAAA,EAAQ,CACjB;AJlCD,IIoCaO,MAA2BP,GAAE,OAAO,EAC/C,MAAMA,GAAE,QAAQD,GAAwB,KAAK,kBAAA,GAC7C,mBAAmBC,GAAE,OAAA,EAAQ,CAC9B;AJvCD,IIyCaQ,MAA8BR,GAAE,OAAO,EAClD,MAAMA,GAAE,QAAQD,GAAwB,KAAK,qBAAA,GAC7C,YAAYC,GAAE,OAAA,GACd,mBAAmBA,GAAE,OAAA,GACrB,QAAQA,GAAE,OAAA,EAAQ,CACnB;AJ9CD,IIgDaS,MAA0BT,GAAE,OAAO,EAC9C,MAAMA,GAAE,QAAQD,GAAwB,KAAK,iBAAA,GAC7C,UAAUC,GAAE,OAAA,GACZ,WAAWA,GAAE,OAAA,GACb,UAAUA,GAAE,OAAA,GACZ,OAAOA,GAAE,OAAA,GACT,QAAQA,GAAE,QAAA,GACV,MAAMA,GAAE,OAAA,GACR,OAAOA,GAAE,OAAA,GACT,SAASA,GAAE,QAAA,EAAS,CACrB;AJ1DD,II4DaU,MAAkBV,GAAE,OAAO,EACtC,MAAMA,GAAE,QAAQD,GAAwB,KAAK,SAAA,GAC7C,MAAME,KACN,OAAOD,GAAE,IAAA,EAAK,CACf;AJhED,IImEaW,MAAiBX,GAAE,OAAO,EACrC,MAAMA,GAAE,QAAQD,GAAwB,KAAK,QAAA,GAC7C,SAASC,GAAE,OAAA,GACX,MAAMA,GAAE,OAAA,EAAS,SAAA,EAAU,CAC5B;AAEyCA,GAAE,mBAAmB,QAAQ,CACrEE,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,GAAA,CACD,GAkBsCX,GAAE,OAAO,EAC9C,IAAIA,GAAE,OAAA,GACN,MAAMA,GAAE,OAAA,GACR,SAASA,GAAE,OAAA,GACX,iBAAiBA,GAAE,OAAA,EAAS,SAAA,EAAU,CACvC,GAEiDA,GAAE,OAAO,EACzD,IAAIA,GAAE,OAAA,GACN,MAAMA,GAAE,OAAA,GACR,WAAWA,GAAE,IAAA,GACb,iBAAiBA,GAAE,OAAA,EAAS,SAAA,EAAU,CACvC,GAEwCA,GAAE,OAAO,EAChD,IAAIA,GAAE,OAAA,GACN,QAAQA,GAAE,IAAA,GACV,mBAAmBA,GAAE,OAAA,GACrB,YAAYA,GAAE,OAAA,EAAQ,CACvB;ACnGD,IAAMY,MAA+B,OAAgC;AACnE,MAAI,OAAO,KAAY,SACrB,QAAO;AAGT,MAAI,CAAC,MAAM,QAAQ,CAAA,EACjB;AAGF,MAAM,IAAY,EACf,OAAQ,CAAAhC,OAAiDA,GAAK,SAAS,MAAA,EACvE,IAAK,CAAAA,OAASA,GAAK,IAAA,EACnB,OAAQ,CAAAA,OAASA,GAAK,SAAS,CAAA;AAE9B,MAAA,EAAU,WAAW,EAIzB,QAAO,EAAU,KAAK;;AAAK;AAlB7B,IA2BaiC,KAAA,CACV,GAAkB,GAAe,MACjC,OAA2E;AAC1E,MAAI,IAAoB,CAAA,GACpB,IAAU,MACV,IAAS,MACT,IAAW,IACXnC,KAAmC,MACnC,IAA2C,MAC3C,IAA+B,CAAA,GAC/B,IAAwC,CAAA,GAEtCiB,KAAsB,CAAAf,OAAkB;AAExC,WAAOA,MAAa,YAAYA,OAC9B,cAAcA,MAChB,OAAOA,GAAS,UAElB,IAAeA;EAAA;AAInB,SAAO,EAAQ,KACbgB,SAAU,CAAAX,OAAU;AAClB,YAAQA,GAAM,MAAd;MACE,KAAK,UAAU,oBAAoB;AACjC,YAAML,KAAaK;AACnB,eAAO,CACL,EACE,MAAMc,GAAwB,KAAK,kBACnC,WAAWnB,GAAW,WACtB,MAAMA,GAAW,KAAA,CAClB;MACF;MAEH,KAAK,UAAU,sBAAsB;AACnC,YAAMA,KAAeK;AACrB,eAAO,CACL,EACE,MAAMc,GAAwB,KAAK,oBACnC,WAAWnB,GAAa,WACxB,SAASA,GAAa,MAAA,CACvB;MACF;MAEH,KAAK,UAAU,kBAAkB;AAC/B,YAAMA,KAAWK;AACjB,eAAO,CACL,EACE,MAAMc,GAAwB,KAAK,gBACnC,WAAWnB,GAAS,UAAA,CACrB;MACF;MAEH,KAAK,UAAU,iBAAiB;AAC9B,YAAMA,KAAaK;AAcnB,eAZA,EAAiB,KAAK,EACpB,IAAIL,GAAW,YACf,MAAM,YACN,UAAU,EACR,MAAMA,GAAW,cACjB,WAAW,GAAA,EACZ,CACF,GAED,IAAS,MACT,EAAcA,GAAW,UAAA,IAAcA,GAAW,cAE3C,CACL,EACE,MAAMmB,GAAwB,KAAK,sBACnC,mBAAmBnB,GAAW,YAC9B,YAAYA,GAAW,cACvB,iBAAiBA,GAAW,gBAAA,CAC7B;MACF;MAEH,KAAK,UAAU,gBAAgB;AAC7B,YAAM,IAAYK,IAGZ,IAAkB,EAAiB,KAAM,CAAAL,OAAOA,GAAG,OAAO,EAAU,UAAA;AAC1E,YAAI,CAAC,EAEH,QADA,QAAQ,KAAK,+CAA+C,EAAU,UAAA,GAAW,GAC1E,CAAA;AAGT,UAAgB,SAAS,aAAa,EAAU;AAChD,YAAIF,KAAiB;AAErB,YAAI,GAAc;AAChB,cAAIE,KAAsB,EAAa,KACpC,CAAAA,OAAMA,GAAE,QAAQ,EAAgB,SAAS,IAAA;AAG5C,cAAIA,GACF,KAAI;AACF,gBAAMD,KAAc,KAAK,MACvB,eAAe,EAAgB,SAAS,SAAA,CAAU;AAGlD,YAAAC,GAAoB,iBACpBA,GAAoB,iBAAiBD,MAErCgB,GAAmB,EACjB,GAAG,GAAA,CACFf,GAAoB,SAAA,GACnBD,GAAYC,GAAoB,aAAA,EAAA,CACnC,GACDF,KAAiB,QACPE,GAAoB,kBAC9Be,GAAmB,EACjB,GAAG,GAAA,CACFf,GAAoB,SAAA,GAAYD,GAAA,CAClC,GACDD,KAAiB;UAAA,QAET;UAAA;QAAA;AAIhB,eAAO,CACL,EACE,MAAMqB,GAAwB,KAAK,qBACnC,mBAAmB,EAAU,YAC7B,MAAM,EAAU,MAAA,GAElB,GAAIrB,KACA,CACE,EACE,MAAMqB,GAAwB,KAAK,mBACnC,UAAA,GACA,WAAA,GACA,UAAA,GACA,OAAA,GACA,SAAA,GACA,MAAM,aACN,OAAO,KAAK,UAAU,CAAA,GACtB,QAAA,EAAA,CACD,IAEH,CAAA,CAAE;MACP;MAEH,KAAK,UAAU,eAAe;AAC5B,YAAMnB,KAAWK;AACjB,eAAO,CACL,EACE,MAAMc,GAAwB,KAAK,oBACnC,mBAAmBnB,GAAS,WAAA,CAC7B;MACF;MAEH,KAAK,UAAU,kBAAkB;AAC/B,YAAMA,KAAcK;AACpB,eAAO,CACL,EACE,MAAMc,GAAwB,KAAK,uBACnC,mBAAmBnB,GAAY,YAC/B,QAAQA,GAAY,SACpB,YAAY,EAAcA,GAAY,UAAA,KAAe,UAAA,CACtD;MACF;MAEH,KAAK,UAAU;AAEb,eAAO,CAAA;MAET,KAAK,UAAU,QAAQ;AACrB,YAAMA,KAAcK;AACpB,gBAAQL,GAAY,MAApB;UACE,KAAK;AACH,gBAAU;AACV;UACF,KAAK;AACH,gBAAeA,GAAY;AAC3B;QAAA;AAGJ,eAAO,CACL,EACE,MAAMmB,GAAwB,KAAK,WACnC,MAAMnB,GAAY,MAClB,OAAOA,GAAY,MAAA,CACpB;MACF;MAEH,KAAK,UAAU;AAIb,eAFAe,GADmBV,GACW,QAAA,GAEvB,CACL,EACE,MAAMc,GAAwB,KAAK,mBACnC,UAAA,GACA,WAAA,GACA,UAAA,GACA,OAAA,GACA,SAAA,GACA,MAAM,aACN,OAAO,KAAK,UAAU,CAAA,GACtB,QAAA,EAAA,CACD;MAGL,KAAK,UAAU,aAAa;AAC1B,YAAM,IAAad,IACbP,KAAmB,WAAW,GAAc,EAAW,OAAO,MAAM,KAAA;AAM1E,eALKA,MAGLiB,GAAmBjB,GAAO,WAAA,GAEnB,CACL,EACE,MAAMqB,GAAwB,KAAK,mBACnC,UAAA,GACA,WAAA,GACA,UAAA,GACA,OAAA,GACA,SAAA,GACA,MAAM,aACN,OAAO,KAAK,UAAU,CAAA,GACtB,QAAA,EAAA,CACD,KAfM,CAAA;MAAE;MAkBb,KAAK,UAAU;AAGb,eADArB,KADyBO,GACS,UAC3B,CACL,EACE,MAAMc,GAAwB,KAAK,mBACnC,UAAA,GACA,WAAA,GACA,UAAA,GACA,OAAA,GACA,SAAA,GACA,MAAM,aACN,OAAO,KAAK,UAAU,EACpB,GAAG,GACH,GAAIrB,KAAiB,EAAE,UAAUA,GAAA,IAAmB,CAAA,EAAE,CACvD,GACD,QAAQ,KAAA,CACT;MAGL,KAAK,UAAU;AAEb,eAAO,CAAA;MAET,KAAK,UAAU;AAUb,eATIA,OACF,EAAa,WAAWA,KAItB,OAAO,KAAK,CAAA,EAAc,WAAW,IAChC,CAAA,IAGF,CACL,EACE,MAAMqB,GAAwB,KAAK,mBACnC,UAAA,GACA,WAAA,GACA,UAAA,GACA,OAAA,GACA,SAAA,GACA,MAAM,aACN,OAAO,KAAK,UAAU,EACpB,GAAG,GACH,GAAIrB,KACA,EACE,UAAUoC,IAA8BpC,EAAA,EAAe,IAEzD,CAAA,EAAE,CACP,GACD,QAAQ,MAAA,CACT;MAGL,KAAK,UAAU,WAAW;AACxB,YAAME,KAAaK;AACnB,eAAO,CACL,EACE,MAAMc,GAAwB,KAAK,UACnC,SAASnB,GAAW,SACpB,MAAMA,GAAW,KAAA,CAClB;MACF;MAEH,KAAK,UAAU;AAOb,eALA,IADoBK,GACG,UAEvB,IAAmB,CAAA,GACnB,IAAe,MAER,CACL,EACE,MAAMc,GAAwB,KAAK,mBACnC,UAAA,GACA,WAAA,GACA,UAAA,GACA,OAAA,GACA,SAAA,GACA,MAAM,aACN,OAAO,KAAK,UAAU,CAAA,GACtB,QAAQ,KAAA,CACT;MAGL,KAAK,UAAU;AAIb,eAHA,IAAmB,CAAA,GACnB,IAAe,MAER,CACL,EACE,MAAMA,GAAwB,KAAK,mBACnC,UAAA,GACA,WAAA,GACA,UAAA,GACA,OAAA,GACA,SAAA,GACA,MAAM,aACN,OAAO,KAAK,UAAU,CAAA,GACtB,QAAQ,MAAA,CACT;MAGL;AACE,eAAO,CAAA;IAAE;EAAA,CAAA,CAGb;AACH;AAGL,SAAgBe,IAA8B,GAAsC;AAClF,MAAM,IAA0B,CAAA;AAEhC,WAAW,KAAW,EACpB,KAAI,EAAQ,SAAS,eAAe,EAAQ,SAAS,UAAU,EAAQ,SAAS,UAAU;AACxF,QAAMlC,KAAcgC,IAA4B,EAAQ,OAAA;AACxD,QAAIhC,IAAa;AACf,UAAM,IAAiC,EACrC,IAAI,EAAQ,IACZ,MAAM,EAAQ,MACd,SAASA,GAAA;AAEX,QAAO,KAAK,CAAA;IAAY;AAE1B,QAAI,EAAQ,SAAS,eAAe,EAAQ,aAAa,EAAQ,UAAU,SAAS,EAClF,UAAWA,MAAY,EAAQ,WAAW;AACxC,UAAM,IAAuD,EAC3D,IAAIA,GAAS,IACb,MAAMA,GAAS,SAAS,MACxB,WAAW,KAAK,MAAMA,GAAS,SAAS,SAAA,GACxC,iBAAiB,EAAQ,GAAA;AAE3B,QAAO,KAAK,CAAA;IAAuB;EAAA,WAG9B,EAAQ,SAAS,QAAQ;AAClC,QAAI,IAAa;AACjB,aAAWD,MAAK,EACd,KAAIA,GAAE,SAAS,eAAeA,GAAE,WAAW,QAAA;AAAA,eAC9BC,MAAYD,GAAE,UACvB,KAAIC,GAAS,OAAO,EAAQ,YAAY;AACtC,YAAaA,GAAS,SAAS;AAC/B;MAAA;IAAA;AAKR,QAAM,IAAmC,EACvC,IAAI,EAAQ,IACZ,QAAQ,EAAQ,SAChB,mBAAmB,EAAQ,YAC3B,YAAA,EAAA;AAEF,MAAO,KAAK,CAAA;EAAY;AAI5B,SAAO;AAAA;ACvaT,IAAamC,KACV,OACA,OAA0D;AACzD,MAAM,IAAMjC,GAAmB,CAAA,GAC3B,GACA,GACA,GACA,GAEE,IAAA,MAAyB;AAC7B,QAAI,CAAC,KAAqB,MAAS,OACjC,OAAU,MAAM,0BAAA;AAElB,QAAMF,KAAQ,EACZ,MAAM,UAAU,kBAChB,WAAW,EAAkB,UAAA;AAS/B,WAPA,IAAO,QACP,IAAoB,QAEpB,GAAK,MAAM,aAAa,oBAAoBA,IAAO,EACjD,WAAWA,GAAM,UAAA,CAClB,GAEMA;EAAA,GAGH,IAAA,MAAsB;AAC1B,QAAI,CAAC,KAAkB,MAAS,OAC9B,OAAU,MAAM,uBAAA;AAElB,QAAMA,KAAQ,EACZ,MAAM,UAAU,eAChB,YAAY,EAAe,WAAA;AAS7B,WAPA,IAAO,QACP,IAAiB,QAEjB,GAAK,MAAM,aAAa,iBAAiBA,IAAO,EAC9C,YAAYA,GAAM,WAAA,CACnB,GAEMA;EAAA,GAGHF,KAAA,MAA8B;AAClC,QAAI,CAAC,KAA0B,MAAS,YACtC,OAAU,MAAM,+BAAA;AAElB,QAAME,KAAQ,EACZ,MAAM,UAAU,uBAChB,WAAW,EAAuB,UAAA;AASpC,WAPA,IAAO,QACP,IAAyB,QAEzB,GAAK,MAAM,aAAa,yBAAyBA,IAAO,EACtD,WAAWA,GAAM,UAAA,CAClB,GAEMA;EAAA,GAGH,IAAA,MACA,MAAS,SACJ,CAAC,EAAA,CAAkB,IAExB,MAAS,SACJ,CAAC,EAAA,CAAe,IAErB,MAAS,cACJ,CAACF,GAAA,CAAuB,IAE1B,CAAA;AAGT,SAAO,EAAQ,KACb,SAAU,CAAAE,OAAU;AAClB,YAAQA,GAAM,MAAd;MACE,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;AACb,eAAO,CAAC,GAAG,EAAA,GAAqBA,EAAA;MAClC,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;MACf,KAAK,UAAU;AACb,eAAO,CAACA,EAAA;MACV,KAAK,UAAU;AACb,YAAMD,KAAoBC,IACpBW,KAAoB,CAAA;AAa1B,aAVE,MAAS,UAERZ,GAAkB,cAAc,UAC/BA,GAAkB,cAAc,GAAmB,cAGrDY,GAAkB,KAAK,GAAG,EAAA,CAAmB,GAI3C,MAAS,QAAQ;AACnB,cAAIZ,GAAkB,cAAc,OAClC,OAAU,MAAM,gDAAA;AAGlB,cAAoB,EAClB,WAAWA,GAAkB,WAC7B,MAAMA,GAAkB,KAAA,GAE1B,IAAO;AAEP,cAAMC,KAAwB,EAC5B,MAAM,UAAU,oBAChB,WAAWD,GAAkB,WAC7B,MAAMA,GAAkB,QAAQ,aAChC,GAAIA,GAAkB,SAAS,UAAa,EAAE,MAAMA,GAAkB,KAAA,EAAM;AAG9E,UAAAY,GAAkB,KAAKX,EAAA,GAEvB,GAAK,MAAM,aAAa,sBAAsBA,IAAuB,EACnE,WAAWD,GAAkB,UAAA,CAC9B;QAAC;AAGJ,YAAIA,GAAkB,UAAU,QAAW;AACzC,cAAMC,KAA0B,EAC9B,MAAM,UAAU,sBAChB,WAAW,EAAmB,WAC9B,OAAOD,GAAkB,MAAA;AAG3B,UAAAY,GAAkB,KAAKX,EAAA,GAEvB,GAAK,MAAM,aAAa,wBAAwBA,IAAyB,EACvE,WAAW,EAAmB,UAAA,CAC/B;QAAC;AAGJ,eAAOW;MACT,KAAK,UAAU;AACb,YAAMC,KAAqBZ,IACrBF,KAAoB,CAAA;AAY1B,aATE,MAAS,UAERc,GAAmB,eAAe,UACjCA,GAAmB,eAAe,GAAgB,eAGpDd,GAAkB,KAAK,GAAG,EAAA,CAAmB,GAG3C,MAAS,QAAQ;AACnB,cAAIc,GAAmB,eAAe,OACpC,OAAU,MAAM,8CAAA;AAElB,cAAIA,GAAmB,iBAAiB,OACtC,OAAU,MAAM,gDAAA;AAElB,cAAiB,EACf,YAAYA,GAAmB,YAC/B,cAAcA,GAAmB,cACjC,iBAAiBA,GAAmB,gBAAA,GAEtC,IAAO;AAEP,cAAMZ,KAAqB,EACzB,MAAM,UAAU,iBAChB,YAAYY,GAAmB,YAC/B,cAAcA,GAAmB,cACjC,iBAAiBA,GAAmB,gBAAA;AAGtC,UAAAd,GAAkB,KAAKE,EAAA,GAEvB,GAAK,MAAM,aAAa,mBAAmBA,IAAoB,EAC7D,YAAYY,GAAmB,YAC/B,cAAcA,GAAmB,aAAA,CAClC;QAAC;AAGJ,YAAIA,GAAmB,UAAU,QAAW;AAC1C,cAAMZ,KAAoB,EACxB,MAAM,UAAU,gBAChB,YAAY,EAAgB,YAC5B,OAAOY,GAAmB,MAAA;AAG5B,UAAAd,GAAkB,KAAKE,EAAA,GAEvB,GAAK,MAAM,aAAa,kBAAkBA,IAAmB,EAC3D,YAAY,EAAgB,WAAA,CAC7B;QAAC;AAGJ,eAAOF;MACT,KAAK,UAAU;AACb,YAAM,IAAsBE,IACtB,IAAyB,CAAA;AAa/B,aAVE,MAAS,eAER,EAAoB,aACnB,EAAoB,cAAc,GAAwB,cAG5D,EAAuB,KAAK,GAAG,EAAA,CAAmB,GAIhD,MAAS,aAAa;AACxB,cAAI,EAAoB,cAAc,OACpC,OAAU,MAAM,qDAAA;AAGlB,cAAyB,EACvB,WAAW,EAAoB,UAAA,GAEjC,IAAO;AAEP,cAAMA,KAA6B,EACjC,MAAM,UAAU,yBAChB,WAAW,EAAoB,UAAA;AAEjC,YAAuB,KAAKA,EAAA,GAE5B,GAAK,MAAM,aAAa,2BAA2BA,IAA4B,EAC7E,WAAW,EAAoB,UAAA,CAChC;QAAC;AAGJ,YAAI,EAAoB,UAAU,QAAW;AAC3C,cAAMA,KAA+B,EACnC,MAAM,UAAU,2BAChB,WAAW,EAAwB,WACnC,OAAO,EAAoB,MAAA;AAG7B,YAAuB,KAAKA,EAAA,GAE5B,GAAK,MAAM,aAAa,6BAA6BA,IAA8B,EACjF,WAAW,EAAwB,UAAA,CACpC;QAAC;AAGJ,eAAO;IAAA;AAGX,WADgCA,GAAM,MAC/B,CAAA;EAAE,CAAA,GAEX,SAAA,MAAe;AAEb,MAAA;EAAmB,CAAA,CACnB;AACH;AC1SL,IAAsBoC,KAAtB,MAAiC;EAM/B,QAAkB,GAAsB,GAA4C;AAClF,WAAO,EAAK,IAAI,CAAA,EAAO,KACrBD,GAAgB,KAAA,CAAM;EACvB;EAOH,iBACE,GACA,GAC4B;AAC5B,QAAI,IAAkB1C,GAAiB,EAAM,YAAY,CAAA,CAAE,GACvD,IAAeA,GAAiB,EAAM,SAAS,CAAA,CAAE,GAG/C,IAAe,IAAI;AAezB,WAZmB,EAAmB,GAAO,GAAc,GAAM,CAAA,CAAE,EAGxD,UAAW,CAAAO,OAAa;AAC7B,MAAAA,GAAS,aAAa,WACxB,IAAkBA,GAAS,WAEzBA,GAAS,UAAU,WACrB,IAAeA,GAAS;IAAA,CAAA,GAIrB,KAAK,QAAQ,GAAO,CAAA,EAAM,KAC/B,UAAU,OAAOA,QAEf,EAAa,KAAKA,EAAA,GAGlB,MAAM,IAAI,QAAS,CAAAA,OAAY,WAAWA,IAAS,CAAA,CAAE,GAG9C,EACL,OAAAA,IACA,UAAUP,GAAiB,CAAA,GAC3B,OAAOA,GAAiB,CAAA,EAAa,EACtC,CACD;EACH;AAAA;AAtDL,IA2Da4C,KAAb,cAAwCD,GAAW;EACjD,YAAY,GAAgC;AAC1C,UAAA,GADkB,KAAA,KAAA;EAAA;EAIpB,IAAI,GAAsB,GAA4C;AACpE,WAAO,KAAK,GAAG,GAAO,CAAA;EAAK;AAAA;AE7E/B,SAASE,IAAuB,GAAqC;AACnE,MAAM,IAAc,EAAkC;AAEtD,MAAI,MAAM,QAAQ,CAAA,GAAa;AAC7B,QAAM,IAAsB,EACzB,OACE,CAAAC,OACC,OAAOA,MAAS,YAAA,CAAA,CAChBA,MACA,UAAUA,MACTA,GAA2B,SAAS,UACrC,OAAQA,GAA4B,QAAS,QAAA,EAEhD,IAAK,CAAAA,OAASA,GAAK,IAAA,EACnB,KAAK,EAAA;AAER,WAAO,EACL,GAAG,GACH,SAAS,EAAA;EACV;AAOH,SAJI,OAAO,KAAe,WACjB,IAGF,EACL,GAAG,GACH,SAAS,GAAA;AACV;AAOH,IAAaC,KAAb,cAAkDC,GAAW;EAC3D,IAAa,GAAsB,GAA4C;AAC7E,QAAM,EAAE,aAAa,GAAc,GAAG,EAAA,IAAS,GACzC,IAAgC,EACpC,GAAG,GACH,UAAU,EAAK,SAAS,IAAIH,GAAA,EAAuB;AAGrD,WAAO,KAAK,QAAQ,GAAgB,CAAA;EAAK;AAAA;AC1C7C,IAAM,IAAiB;AAAvB,IACMI,KAAe;AADrB,IAEMC,KAA8B;AAFpC,IAGMC,KAAgC;AAHtC,IAIMC,KAA4B;AAiBlC,IAAa,KAAb,cAAkDJ,GAAW;EAAA,eAAA,GAAA;AAAA,UAAA,GAAA,CAAA,GAAA,KAAA,qBACf,MAAA,KAAA,mBACF;EAAA;EAE1C,wBAAgC,GAAc,GAAY;AACpD,YAAQ,IAAI,oCAChB,QAAQ,KACN,uBAAuB,CAAA,OAAW,CAAA,wKAAG;EACtC;EAEH,IAAa,GAAsB,GAA4C;AAK7E,WAHA,KAAK,qBAAqB,MAC1B,KAAK,mBAAmB,MAEjB,KAAK,QAAQ,GAAO,CAAA,EAAM,KAAK,IAAK,CAAAF,OAAU,KAAK,eAAeA,EAAA,CAAM,CAAC;EAAC;EAGnF,eAAuB,GAA6B;AAGlD,YAFkB,EAAM,MAExB;MACE,KAAK,GAAgB;AACnB,aAAK,qBAAqBO,GAAA;AAC1B,YAAM,EAAE,OAAA,GAAO,GAAG,EAAA,IAAS;AAE3B,eADA,KAAK,wBAAwB,GAAgB,UAAU,eAAA,GAChD,EACL,GAAG,GACH,MAAM,UAAU,iBAChB,WAAW,KAAK,mBAAA;MACjB;MAGH,KAAKH;AAMH,eALA,KAAK,mBAAmBG,GAAA,GACxB,KAAK,wBACHH,IACA,UAAU,uBAAA,GAEL,EACL,GAAG,GACH,MAAM,UAAU,yBAChB,WAAW,KAAK,kBAChB,MAAM,YAAA;MAIV,KAAKC,IAA+B;AAClC,YAAM,EAAE,OAAA,GAAO,GAAG,EAAA,IAAS;AAK3B,eAJA,KAAK,wBACHA,IACA,UAAU,yBAAA,GAEL,EACL,GAAG,GACH,MAAM,UAAU,2BAChB,WAAW,KAAK,oBAAoBE,GAAA,GACpC,OAAA,EAAA;MACD;MAGH,KAAKD,IAA2B;AAC9B,YAAM,IAAY,KAAK,oBAAoBC,GAAA;AAE3C,eADA,KAAK,wBAAwBD,IAA2B,UAAU,qBAAA,GAC3D,EACL,GAAG,GACH,MAAM,UAAU,uBAChB,WAAA,EAAA;MACD;MAGH,KAAKH,IAAc;AACjB,YAAM,IAAc,KAAK,sBAAsBI,GAAA;AAE/C,eADA,KAAK,wBAAwBJ,IAAc,UAAU,aAAA,GAC9C,EACL,GAAG,GACH,MAAM,UAAU,eAChB,WAAW,EAAA;MACZ;MAGH;AACE,eAAO;IAAA;EAAA;AAAA;AAlFf,IAkFe,KAAA;AAlFf,IEiBsBK,MAAtB,MAAoC;EAelC,IAAI,aAAa;AACf,WAAOC;EAAAA;EAGT,IAAI,QAAkC;AACpC,WAAO,KAAK;EAAA;EAGd,IAAI,MAAM,GAAoD;AAC5D,SAAK,SAASC,GAAwB,CAAA,GACtC,KAAK,eAAeC,GAAkB,KAAK,MAAA;EAAO;EAGpD,IAAI,cAAuC;AACzC,WAAO,KAAK;EAAA;EAGd,IAAI,YAAY,GAA0C;AACpD,WAAO,KAAU,YACnB,KAAK,eAAe,IAChBA,GAAkBD,GAAwB,IAAA,CAAK,IAC/C,SAEJ,KAAK,eAAe;EAAA;EAIxB,YAAY,EACV,SAAA,GACA,aAAA,GACA,UAAA,GACA,iBAAA,GACA,cAAA,GACA,OAAA,EAAA,IACe,CAAA,GAAI;AAAA,SAAA,cAzCmB,CAAA,GAAE,KAAA,YACd,OAAA,KAAA,cACQ,CAAA,GAwClC,KAAK,UAAU,GACf,KAAK,cAAc,KAAe,IAClC,KAAK,WAAW,KAAYE,WAAAA,GAC5B,KAAK,WAAWC,GAAiB,KAAmB,CAAA,CAAE,GACtD,KAAK,QAAQA,GAAiB,KAAgB,CAAA,CAAE,GAChD,KAAK,SAASH,GAAwB,CAAA,GACtC,KAAK,eAAeC,GAAkB,KAAK,MAAA,GAEvC,gBAAgB,KAAK,YAAY,QAAA,KAAa,KAChD,KAAK,YAAY,QAAQ,IAAIV,IAAA,GAK3B,gBAAgB,KAAK,YAAY,QAAA,KAAa,KAChD,KAAK,YAAY,QAAQ,IAAI,IAAA;EAA+B;EAIhE,UAAiB,GAA6B;AAE5C,WADA,KAAK,YAAY,KAAK,CAAA,GACf,EACL,aAAA,MAAmB;AACjB,WAAK,cAAc,KAAK,YAAY,OAAQ,OAAM,MAAM,CAAA;IAAW,EAAA;EAEtE;EAWH,OAAc,GAAwD;AACpE,QAAM,IAAwB,EAAY,IAAK,CAAAD,OAC7C,OAAOA,MAAe,aAAa,IAAIc,GAAmBd,EAAA,IAAcA,EAAA;AAG1E,WADA,KAAK,YAAY,KAAK,GAAG,CAAA,GAClB;EAAA;EAGT,MAAa,SACX,GACA,GACyB;AACzB,QAAI;AACF,WAAK,YAAY,MACjB,KAAK,UAAU,KAAK,WAAWY,WAAAA;AAC/B,UAAM,IAAQ,KAAK,qBAAqB,CAAA;AAExC,WAAK,aAAa,UAAU,aAAa,gBAAgB,EACvD,SAAS,KAAK,SACd,UAAU,KAAK,SAAA,CAChB;AAED,UAAI,GACE,IAAoB,IAAI,IAAI,KAAK,SAAS,IAAK,OAAY,EAAQ,EAAA,CAAG,GAEtE,IAAiC,CACrC,EACE,oBAAqB,OAAW;AAC9B,YAAS,EAAO;MAAA,EAAA,GAGpB,GAAG,KAAK,aACR,KAAc,CAAA,CAAE;AAGlB,YAAM,KAAK,aAAa,GAAO,CAAA,GAG/B,KAAK,mBAAmB,IAAI;AAC5B,UAAI;AACJ,WAAK,6BAA6B,IAAI,QAAe,OAAY;AAC/D,YAA6B;MAAA,CAAA,GAsD/B,MAAM,cAnDW,KAAA,MAGT,KAAK,YAAY,WAAW,IACvB,KAAK,IAAI,CAAA,IAGG,KAAK,YAAY,YAAA,CACnC,GAA0BG,QACxB,EACC,KAAM,CAAAC,OAAqBD,GAAW,IAAIC,IAAG,CAAA,GAC7C,IAAI,WAAW;AACb,eAAO,EAAU;MAAA,GAEnB,IAAI,QAAQ;AACV,eAAO,EAAU;MAAA,EAAA,IAGvB,IAAA,EAGkB,IAAI,CAAA,GAE1BC,GAAgB,KAAK,WAAA,GACrBC,GAAa,KAAK,WAAA,GAEjB,OAAY,EAAQ,KAAK,UAAU,KAAK,gBAAA,CAAkB,GAC1D,OAAY,KAAK,MAAM,GAAO,GAAS,CAAA,GACvC,OAAY,KAAK,mBAAmB,GAAO,GAAS,CAAA,GACrD,WAAY,QACV,KAAK,aAAa,UAAU,aAAa,gBAAgB,EACvD,SAAS,KAAK,SACd,OAAO,aAAiB,QAAQ,EAAM,UAAU,OAAO,CAAA,EAAM,CAC9D,GACD,KAAK,YAAY,OACV,KAAK,QAAQ,GAAO,GAAO,CAAA,EAAY,GAEhDC,SAAAA,MAAe;AACb,aAAK,aAAa,UAAU,aAAa,iBAAiB,EACxD,SAAS,KAAK,SACd,UAAU,KAAK,SAAA,CAChB,GACD,KAAK,YAAY,OACZ,KAAK,WAAW,GAAO,CAAA,GAC5B,IAAA,GACA,IAA6B,QAC7B,KAAK,6BAA6B,QAClC,KAAK,mBAAmB;MAAA,CAAA,CACxB,EAGyB,GAAG,IAAA,CAAK,CAAC;AACtC,UAAM,IAAcN,GAAiB,KAAK,QAAA,EAAU,OACjD,OAAqB,CAAC,EAAkB,IAAI,EAAQ,EAAA,CAAG;AAE1D,aAAO,EAAE,QAAA,GAAQ,aAAA,EAAA;IAAa,UAAA;AAE9B,WAAK,YAAY;IAAA;EAAA;EAIrB,QAAkB,GAA6C;AAC7D,UAAM,IAAI;EAAA;EAEZ,MAAa,aACX,GACA,GACyB;AACzB,QAAI;AACF,WAAK,YAAY,MACjB,KAAK,UAAU,KAAK,WAAWD,WAAAA;AAC/B,UAAM,IAAQ,KAAK,qBAAqB,CAAA,GACpC,GACE,IAAoB,IAAI,IAAI,KAAK,SAAS,IAAK,OAAY,EAAQ,EAAA,CAAG,GAEtE,IAAiC,CACrC,EACE,oBAAqB,OAAW;AAC9B,YAAS,EAAO;MAAA,EAAA,GAGpB,GAAG,KAAK,aACR,KAAc,CAAA,CAAE;AAGlB,YAAM,KAAK,aAAa,GAAO,CAAA,GAG/B,KAAK,mBAAmB,IAAI;AAC5B,UAAI;AACJ,WAAK,6BAA6B,IAAI,QAAe,OAAY;AAC/D,YAA6B;MAAA,CAAA,GA8B/B,MAAM,cA3BW,KAAA,MACT,MAAA,MAAY,KAAK,QAAQ,CAAA,CAAM,GACrCK,GAAgB,KAAK,WAAA,GACrBC,GAAa,KAAK,WAAA,GAEjB,OAAY,EAAQ,KAAK,UAAU,KAAK,gBAAA,CAAkB,GAC1D,OAAY,KAAK,MAAM,GAAO,GAAS,CAAA,GACvC,OAAY,KAAK,mBAAmB,GAAO,GAAS,CAAA,GACrD,WAAY,QACV,KAAK,YAAY,OACX,aAAiB,iCAGhB,QAFE,KAAK,QAAQ,GAAO,GAAO,CAAA,EAAY,GAIlDC,SAAAA,MAAe;AACb,aAAK,YAAY,OACZ,KAAK,WAAW,GAAO,CAAA,GAC5B,IAAA,GACA,IAA6B,QAC7B,KAAK,6BAA6B,QAClC,KAAK,mBAAmB;MAAA,CAAA,CACxB,EAKyB,GAAG,IAAA,CAAK,GAAG,EAAE,cAAc,OAAA,CAAW;AACnE,UAAM,IAAcN,GAAiB,KAAK,QAAA,EAAU,OACjD,OAAqB,CAAC,EAAkB,IAAI,EAAQ,EAAA,CAAG;AAE1D,aAAO,EAAE,QAAA,GAAQ,aAAA,EAAA;IAAa,UAAA;AAE9B,WAAK,YAAY;IAAA;EAAA;EAIrB,WAAkB;EAAA;EAElB,MAAa,kBAAiC;AAC5C,QAAI,CAAC,KAAK,iBACR;AAEF,QAAM,IAAa,KAAK,8BAA8B,QAAQ,QAAA;AAC9D,SAAK,iBAAiB,KAAA,GACtB,KAAK,kBAAkB,SAAA,GACvB,MAAM;EAAA;EAGR,MACE,GACA,GACA,GACgC;AAChC,WAAO,EAAmB,GAAO,GAAS,MAAM,GAAa,KAAK,WAAA;EAAY;EAGhF,mBACE,GACA,GACA,GACgC;AAChC,WAAO,EAAQ,KACb,IAAK,CAAAE,OAAU;AACT,MAAAA,GAAM,aACR,KAAK,WAAWA,GAAM,UACtB,EAAY,QAAS,CAAAA,OAAe;AAClC,QAAAA,GAAW,oBAAoB,EAC7B,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,MACP,OAAA,EAAA,CACD;MAAC,CAAA,IAGFA,GAAM,UACR,KAAK,QAAQA,GAAM,OACnB,EAAY,QAAS,CAAAA,OAAe;AAClC,QAAAA,GAAW,iBAAiB,EAC1B,OAAO,KAAK,OACZ,UAAU,KAAK,UACf,OAAO,MACP,OAAA,EAAA,CACD;MAAC,CAAA;IACF,CAAA,CAEJ;EACH;EAGH,qBAA+B,GAAgD;AAE7E,QAAM,IADiBF,GAAiB,KAAK,QAAA,EACE,OAAQ,OAAY,EAAQ,SAAS,UAAA;AAEpF,WAAO,EACL,UAAU,KAAK,UACf,OAAO,GAAY,SAASD,WAAAA,GAC5B,OAAOC,GAAiB,GAAY,SAAS,CAAA,CAAE,GAC/C,SAASA,GAAiB,GAAY,WAAW,CAAA,CAAE,GACnD,gBAAgBA,GAAiB,GAAY,kBAAkB,CAAA,CAAE,GACjE,OAAOA,GAAiB,KAAK,KAAA,GAC7B,UAAU,EAAA;EACX;EAGH,MAAgB,aAAa,GAAsB,GAAgC;AACjF,QAAM,IAA2B,MAAMO,GACrC,GACA,KAAK,UACL,KAAK,OAAA,CACJL,IAAYC,IAAU,MACrBD,GAAW,mBAAmB,EAAE,UAAAC,IAAU,OAAA,GAAO,OAAO,MAAM,OAAA,EAAA,CAAO,CAAC;AACzE,KAEC,EAAyB,aAAa,UACtC,EAAyB,UAAU,YAE/B,EAAyB,aAC3B,KAAK,WAAW,EAAyB,UACzC,EAAM,WAAW,EAAyB,UAC1C,EAAY,QAAS,CAAAD,OAAe;AAClC,MAAAA,GAAW,oBAAoB,EAC7B,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,MACP,OAAA,EAAA,CACD;IAAC,CAAA,IAGF,EAAyB,UAC3B,KAAK,QAAQ,EAAyB,OACtC,EAAM,QAAQ,EAAyB,OACvC,EAAY,QAAS,CAAAA,OAAe;AAClC,MAAAA,GAAW,iBAAiB,EAC1B,OAAO,KAAK,OACZ,UAAU,KAAK,UACf,OAAO,MACP,OAAA,EAAA,CACD;IAAC,CAAA;EACF;EAKR,QAAkB,GAAsB,GAAc,GAAgC;AACpF,WAAO,KACLK,GACE,GACA,KAAK,UACL,KAAK,OAAA,CACJJ,IAAY,GAAU,MACrBA,GAAW,cAAc,EAAE,OAAA,GAAO,UAAA,GAAU,OAAA,GAAO,OAAO,MAAM,OAAA,EAAA,CAAO,CAAC,CAC3E,EACD,KACA,IAAK,OAAwB;AAC3B,UAAM,IAAW;AA0BjB,WAzBI,EAAS,aAAa,UAAa,EAAS,UAAU,YACpD,EAAS,aAAa,WACxB,KAAK,WAAW,EAAS,UACzB,EAAY,QAAS,CAAAD,OAAe;AAClC,QAAAA,GAAW,oBAAoB,EAC7B,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,MACP,OAAA,EAAA,CACD;MAAC,CAAA,IAGF,EAAS,UAAU,WACrB,KAAK,QAAQ,EAAS,OACtB,EAAY,QAAS,CAAAA,OAAe;AAClC,QAAAA,GAAW,iBAAiB,EAC1B,OAAO,KAAK,OACZ,UAAU,KAAK,UACf,OAAO,MACP,OAAA,EAAA,CACD;MAAC,CAAA,KAKJ,EAAS,oBAAoB,KAE/B,OADA,QAAQ,MAAM,2BAA2B,CAAA,GACnC;AAIR,aAAO,CAAA;IAAE,CAAA,CACT;EACH;EAGH,MAAgB,WAAW,GAAsB,GAAgC;AAC/E,QAAM,IAAyB,MAAMK,GACnC,GACA,KAAK,UACL,KAAK,OAAA,CACJL,IAAYC,IAAU,MACrBD,GAAW,iBAAiB,EAAE,UAAAC,IAAU,OAAA,GAAO,OAAO,MAAM,OAAA,EAAA,CAAO,CAAC;AACvE,KAGC,EAAuB,aAAa,UACpC,EAAuB,UAAU,YAE7B,EAAuB,aAAa,WACtC,KAAK,WAAW,EAAuB,UACvC,EAAY,QAAS,CAAAD,OAAe;AAClC,MAAAA,GAAW,oBAAoB,EAC7B,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,MACP,OAAA,EAAA,CACD;IAAC,CAAA,IAGF,EAAuB,UAAU,WACnC,KAAK,QAAQ,EAAuB,OACpC,EAAY,QAAS,CAAAA,OAAe;AAClC,MAAAA,GAAW,iBAAiB,EAC1B,OAAO,KAAK,OACZ,UAAU,KAAK,UACf,OAAO,MACP,OAAA,EAAA,CACD;IAAC,CAAA;EACF;EAKR,QAAe;AACb,QAAM,IAAS,OAAO,OAAO,OAAO,eAAe,IAAA,CAAK;AAaxD,WAXA,EAAO,UAAU,KAAK,SACtB,EAAO,cAAc,KAAK,aAC1B,EAAO,WAAW,KAAK,UACvB,EAAO,WAAWF,GAAiB,KAAK,QAAA,GACxC,EAAO,QAAQA,GAAiB,KAAK,KAAA,GACrC,EAAO,SAAS,KAAK,QACrB,EAAO,eAAe,KAAK,cAC3B,EAAO,YAAY,KAAK,WACxB,EAAO,cAAc,CAAC,GAAG,KAAK,WAAA,GAC9B,EAAO,cAAc,CAAC,GAAG,KAAK,WAAA,GAEvB;EAAA;EAGT,WAAkB,GAAkB;AAElC,SAAK,SAAS,KAAK,CAAA,IAGlB,YAAY;AAEX,eAAW,KAAc,KAAK,YAC5B,OAAM,EAAW,eAAe,EAC9B,SAAA,GACA,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,KAAA,CACR;AAIH,UAAI,EAAQ,SAAS,eAAe,EAAQ,UAC1C,UAAW,KAAY,EAAQ,UAC7B,UAAWb,MAAc,KAAK,YAC5B,OAAMA,GAAW,gBAAgB,EAC/B,UAAA,GACA,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,KAAA,CACR;AAMP,eAAWA,MAAc,KAAK,YAC5B,OAAMA,GAAW,oBAAoB,EACnC,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,KAAA,CACR;IAAC,GAAA;EAEF;EAGN,YAAmB,GAAqB;AAEtC,SAAK,SAAS,KAAK,GAAG,CAAA,IAGrB,YAAY;AAEX,eAAW,KAAW,GAAU;AAE9B,iBAAWA,MAAc,KAAK,YAC5B,OAAMA,GAAW,eAAe,EAC9B,SAAA,GACA,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,KAAA,CACR;AAIH,YAAI,EAAQ,SAAS,eAAe,EAAQ,UAC1C,UAAWA,MAAY,EAAQ,UAC7B,UAAWe,MAAc,KAAK,YAC5B,OAAMA,GAAW,gBAAgB,EAC/B,UAAAf,IACA,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,KAAA,CACR;MAAC;AAOV,eAAWA,MAAc,KAAK,YAC5B,OAAMA,GAAW,oBAAoB,EACnC,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,KAAA,CACR;IAAC,GAAA;EAEF;EAGN,YAAmB,GAAqB;AAEtC,SAAK,WAAWa,GAAiB,CAAA,IAGhC,YAAY;AAEX,eAAWb,MAAc,KAAK,YAC5B,OAAMA,GAAW,oBAAoB,EACnC,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,KAAA,CACR;IAAC,GAAA;EAEF;EAGN,SAAgB,GAAc;AAE5B,SAAK,QAAQa,GAAiB,CAAA,IAG7B,YAAY;AAEX,eAAWb,MAAc,KAAK,YAC5B,OAAMA,GAAW,iBAAiB,EAChC,UAAU,KAAK,UACf,OAAO,KAAK,OACZ,OAAO,KAAA,CACR;IAAC,GAAA;EAEF;EAGN,qCACE,GACwC;AACxC,SAAK,UAAU,KAAK,WAAWY,WAAAA;AAC/B,QAAM,IAAQ,KAAK,qBAAqB,CAAA;AAyBxC,YArBM,KAAK,YAAY,WAAW,IACvB,KAAK,IAAI,CAAA,IAGG,KAAK,YAAY,YAAA,CACnC,GAA0BG,QACxB,EACC,KAAM,CAAAC,OAAqBD,GAAW,IAAIC,IAAG,CAAA,GAC7C,IAAI,WAAW;AACb,aAAO,EAAU;IAAA,GAEnB,IAAI,QAAQ;AACV,aAAO,EAAU;IAAA,EAAA,IAGvB,IAAA,EAGkB,IAAI,CAAA,GAGL,KACnBC,GAAgB,KAAK,WAAA,GACrBC,GAAa,KAAK,WAAA,GAClBG,GAAsB,KAAK,UAAU,EAAM,OAAO,KAAK,OAAA,GACtD,OACQ,EAAQ,KACb,IAAK,CAAArB,QACH,KAAK,aAAa,MAAM,UAAU,UAAUA,IAAO,EAAE,MAAMA,GAAM,KAAA,CAAM,GAChEA,GAAA,CACP,CACH;EAEJ;AAAA;AFxoBL,IGjBasB,MAAb,cAA+Bd,IAAc;EAW3C,YAAsB,GAAmC;AACvD,WAAO,EACL,QAAQ,QACR,SAAS,EACP,GAAG,KAAK,SACR,gBAAgB,oBAChB,QAAQ,oBAAA,GAEV,MAAM,KAAK,UAAU,CAAA,GACrB,QAAQ,KAAK,gBAAgB,OAAA;EAC9B;EAGH,SACE,GACA,GACyB;AAEzB,WADA,KAAK,kBAAkB,GAAY,mBAAmB,IAAI,mBACnD,MAAM,SAAS,GAAY,CAAA;EAAW;EAG/C,WAAW;AACT,SAAK,gBAAgB,MAAA,GACrB,MAAM,SAAA;EAAU;EAGlB,YAAY,GAAyB;AACnC,UAAM,CAAA,GAAO,KAAA,kBAnC2B,IAAI,mBAoC5C,KAAK,MAAM,EAAO,KAClB,KAAK,UAAUK,GAAiB,EAAO,WAAW,CAAA,CAAE;EAAC;EAGvD,IAAI,GAA6C;AAE/C,WAAO,EADYU,GAAe,KAAK,KAAK,KAAK,YAAY,CAAA,CAAM,GACvB,KAAK,WAAA;EAAY;EAG/D,QAA0B;AACxB,QAAM,IAAS,MAAM,MAAA;AACrB,MAAO,MAAM,KAAK,KAClB,EAAO,UAAUV,GAAiB,KAAK,WAAW,CAAA,CAAE;AAEpD,QAAM,IAAgB,IAAI,mBACpB,IAAiB,KAAK,gBAAgB;AAM5C,WALI,EAAe,WACjB,EAAc,MAAM,EAAe,MAAA,GAErC,EAAO,kBAAkB,GAElB;EAAA;AAAA;;;AE5DX,IAAI,aAAa;AACjB,SAAS,aAAqB;AAC5B,SAAO,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE,UAAU;AAC3C;AAEO,IAAM,gBAAN,MAAgD;EAarD,YAAY,SAA+B;AAN3C,SAAQ,SAA2B;AACnC,SAAQ,aAAa;AACrB,SAAQ,YAAY,oBAAI,IAAkC;AAC1D,SAAQ,iBAAiB;AACzB,SAAQ,6BAA4C;AAGlD,SAAK,OAAO,QAAQ;AACpB,SAAK,WAAW,QAAQ,WAAW,CAAC;AACpC,SAAK,YAAY,QAAQ;AACzB,SAAK,eAAe,QAAQ,eAAe,oBAAI,IAAI;AACnD,SAAK,eAAe,QAAQ;EAC9B;EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK;EACd;EAEA,QAAQ,WAA0B;AAChC,UAAM,kBAAkB,OAAO,KAAK,aAAa,aAAa,KAAK,SAAS,IAAI,KAAK;AAErF,SAAK,SAAS,IAAIW,IAAU;MAC1B,KAAK,KAAK;MACV,SAAS;MACT,UAAU,KAAK,aAAa;IAC9B,CAAC;AAED,SAAK,aAAa;AAElB,UAAM,MAAM,aAAa,WAAW;AACpC,SAAK,MAAM,EAAE,MAAM,iBAAiB,WAAW,IAAI,CAAC;AACpD,SAAK,MAAM,EAAE,MAAM,qBAAqB,UAAU,CAAC,EAAE,CAAC;EACxD;EAEA,aAAmB;AACjB,QAAI,KAAK,QAAQ,WAAW;AAC1B,WAAK,OAAO,SAAS;IACvB;AACA,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,iBAAiB;EACxB;EAEA,KAAK,QAA4B;AAC/B,QAAI,CAAC,KAAK,OAAQ;AAElB,YAAQ,OAAO,MAAM;MACnB,KAAK;AACH,aAAK,iBAAiB,OAAO,IAAI;AACjC;MACF,KAAK;AACH,aAAK,gBAAgB,OAAO,YAAY,OAAO,QAAQ,OAAO,QAAQ;AACtE;MACF,KAAK;AACH,aAAK,OAAO,SAAS;AACrB;MACF;AACE;IACJ;EACF;EAEA,UAAU,SAAmD;AAC3D,SAAK,UAAU,IAAI,OAAO;AAC1B,WAAO,MAAM,KAAK,UAAU,OAAO,OAAO;EAC5C;;;;EAMQ,iBAAiBC,OAAoB;AAC3C,UAAM,QAAQ,KAAK;AAEnB,UAAM,WAAW;MACf,IAAI,WAAW;MACf,MAAM;MACN,SAASA;IACX,CAAC;AAED,SAAK,UAAU;EACjB;;;;EAMQ,gBAAgB,YAAoB,QAAiB,UAAyB;AACpF,UAAM,QAAQ,KAAK;AAEnB,UAAM,UAAU;MACd,IAAI,WAAW;MACf,MAAM;MACN;MACA,SAAS,KAAK,UAAU;QACtB,GAAK,UAAsC,CAAC;QAC5C,WAAW;MACb,CAAC;IACH;AACA,UAAM,WAAW,OAAO;AAExB,QAAI,MAAM,WAAW;AACnB,WAAK,iBAAiB;AACtB;IACF;AAEA,SAAK,UAAU;EACjB;;;;EAMQ,YAAkB;AACxB,UAAM,QAAQ,KAAK;AACnB,QAAI,CAAC,MAAO;AAEZ,SAAK,6BAA6B;AAClC,SAAK,MAAM,EAAE,MAAM,UAAU,UAAU,KAAK,CAAC;AAE7C,QAAI,OAAO,KAAK,aAAa,YAAY;AACvC,YAAM,UAAU,KAAK,SAAS;IAChC;AAEA,UAAM,SAAS,QAAW,KAAK,iBAAiB,CAAC,EAAE,MAAM,CAAC,QAAiB;AACzE,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU;AACrD,WAAK,MAAM,EAAE,MAAM,SAAS,QAAQ,CAAC;AACrC,WAAK,MAAM,EAAE,MAAM,UAAU,UAAU,MAAM,CAAC;IAChD,CAAC;EACH;EAEQ,mBAA0D;AAChE,WAAO;MACL,yBAAyB,CAAC,WAAgB;AACxC,cAAM,EAAE,MAAM,IAAI;AAClB,aAAK,6BAA6B,MAAM;AAExC,cAAM,UAAuB;UAC3B,IAAI,MAAM;UACV,MAAM;UACN,SAAS;UACT,WAAW,KAAK,IAAI;UACpB,QAAQ;QACV;AACA,aAAK,MAAM,EAAE,MAAM,kBAAkB,QAAQ,CAAC;MAChD;MAEA,2BAA2B,CAAC,WAAgB;AAC1C,cAAM,EAAE,MAAM,IAAI;AAClB,aAAK,MAAM;UACT,MAAM;UACN,WAAW,MAAM;UACjB,OAAO,MAAM;QACf,CAAC;MACH;MAEA,uBAAuB,CAAC,WAAgB;AACtC,cAAM,EAAE,MAAM,IAAI;AAClB,aAAK,MAAM,EAAE,MAAM,oBAAoB,WAAW,MAAM,UAAU,CAAC;MACrE;MAEA,sBAAsB,CAAC,WAAgB;AACrC,cAAM,EAAE,MAAM,IAAI;AAClB,cAAM,YACJ,MAAM,mBAAmB,KAAK,8BAA8B,MAAM;AAEpE,aAAK,MAAM;UACT,MAAM;UACN;UACA,UAAU;YACR,IAAI,MAAM;YACV,MAAM,MAAM;YACZ,MAAM;YACN,YAAY;YACZ,QAAQ;UACV;QACF,CAAC;MACH;MAEA,qBAAqB,CAAC,WAAgB;AACpC,cAAM,EAAE,MAAM,IAAI;AAClB,aAAK,MAAM;UACT,MAAM;UACN,YAAY,MAAM;UAClB,OAAO,MAAM;QACf,CAAC;MACH;MAEA,oBAAoB,CAAC,WAAgB;AACnC,cAAM,EAAE,OAAO,cAAc,aAAa,IAAI;AAE9C,YAAI,KAAK,aAAa,IAAI,YAAY,GAAG;AACvC,gBAAM,YAAY,KAAK,8BAA8B,MAAM;AAC3D,eAAK,MAAM;YACT,MAAM;YACN;YACA,UAAU;cACR,IAAI,MAAM;cACV,MAAM;cACN,MAAM;cACN,YAAY,KAAK,UAAU,YAAY;cACvC,QAAQ;YACV;UACF,CAAC;QACH,OAAO;AACL,eAAK,MAAM;YACT,MAAM;YACN,YAAY,MAAM;UACpB,CAAC;QACH;MACF;MAEA,oBAAoB,CAAC,YAAiB;AACpC,aAAK,MAAM,EAAE,MAAM,UAAU,UAAU,MAAM,CAAC;AAE9C,YAAI,KAAK,gBAAgB;AACvB,eAAK,iBAAiB;AACtB,eAAK,UAAU;QACjB;MACF;MAEA,iBAAiB,CAAC,WAAgB;AAChC,cAAM,EAAE,MAAM,IAAI;AAClB,aAAK,MAAM,EAAE,MAAM,SAAS,SAAS,MAAM,QAAQ,CAAC;AACpD,aAAK,MAAM,EAAE,MAAM,UAAU,UAAU,MAAM,CAAC;MAChD;MAEA,eAAe,CAAC,WAAgB;AAC9B,cAAM,EAAE,MAAM,IAAI;AAClB,cAAM,UAAU,MAAM;AACtB,aAAK,eAAe,OAAO;AAC3B,aAAK,MAAM,EAAE,MAAM,QAAQ,QAAQ,CAAC;MACtC;IACF;EACF;;;;EAMQ,MAAM,OAA0B;AACtC,eAAW,WAAW,KAAK,WAAW;AACpC,cAAQ,KAAK;IACf;EACF;AACF;;;AC7PO,IAAM,sBAAsB,CAAC,cAAc,WAAW,QAAQ;AAC9D,SAAS,mBAAmBC,SAAQ;AACvC,MAAI,CAACA,WAAU,OAAOA,YAAW,UAAU;AACvC,WAAO,CAAC;AAAA,EACZ;AACA,QAAM,MAAM,EAAE,GAAGA,QAAO;AACxB,aAAW,OAAO,qBAAqB;AACnC,WAAO,IAAI,GAAG;AAAA,EAClB;AACA,SAAO;AACX;;;ACpBA,SAAS,KAAAC,UAAS;AAIX,IAAM,YAAYA,GACpB,OAAO;AAAA,EACR,UAAUA,GAAE,OAAO;AAAA,EACnB,OAAOA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,MAAMA,GAAE,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC,EACI,OAAO;AAiBL,IAAM,mBAAmB;AAAA,EAC5B,IAAIA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,qDAAqD;AAAA,EACxF,OAAOA,GACF,OAAO,EACP,IAAI,GAAG,EACP,SAAS,EACT,SAAS,6GAA6G;AAAA,EAC3H,aAAaA,GACR,OAAO,EACP,IAAI,GAAI,EACR,SAAS,EACT,SAAS,wHAAwH;AAAA,EACtI,YAAYA,GACP,MAAMA,GAAE,OAAO,EAAE,IAAI,GAAG,CAAC,EACzB,IAAI,EAAE,EACN,SAAS,EACT,SAAS,+KAA+K;AACjM;AAMO,IAAM,mBAAmB;AAAA;AAAA,EAE5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACJ;AACO,IAAM,kBAAkBA,GAC1B,KAAK,gBAAgB,EACrB,SAAS,2IAA2I;AAElJ,IAAM,sBAAsB,CAAC,gBAAgB,cAAc,cAAc;AACzE,IAAM,oBAAoBA,GAC5B,KAAK,mBAAmB,EACxB,SAAS,uIAAuI;AAS9I,IAAM,oBAAoBC,GAC5B,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,UAAU;AAAA,EAC1B,KAAKA,GAAE,OAAO,EAAE,SAAS,mDAAmD;AAChF,CAAC,EACI,SAAS,0HACwC;AAC/C,IAAM,kBAAkBA,GAC1B,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,SAASA,GAAE,OAAO,EAAE,SAAS,sCAAsC;AACvE,CAAC,EACI,SAAS,wDAAwD;AAC/D,IAAM,0BAA0BA,GAClC,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,gBAAgB;AAAA,EAChC,UAAUA,GAAE,OAAO,EAAE,SAAS,oCAAoC;AAAA,EAClE,OAAOA,GACF,KAAK,CAAC,WAAW,WAAW,QAAQ,CAAC,EACrC,SAAS,oEAAoE;AACtF,CAAC,EACI,SAAS,qIAC0E;AACjF,IAAM,0BAA0BA,GAClC,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,gBAAgB;AAAA,EAChC,WAAWA,GAAE,OAAO,EAAE,SAAS,2CAA2C;AAAA,EAC1E,UAAUA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kDAAkD;AAC/F,CAAC,EACI,SAAS,8IACsE;AAC7E,IAAM,wBAAwBA,GAChC,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,cAAc;AAAA,EAC9B,KAAKA,GACA,OAAO,EACP,SAAS,gIAAgI;AAAA,EAC9I,OAAOA,GAAE,QAAQ,EAAE,SAAS,iCAAiC;AACjE,CAAC,EACI,SAAS,8TAE+F;AACtG,IAAM,qBAAqBA,GAC7B,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,UAAU;AAAA,EAC1B,UAAUA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kCAAkC;AAAA,EAC3E,UAAUA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kCAAkC;AAAA,EAC3E,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,EAC7E,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mCAAmC;AACjF,CAAC,EACI,SAAS,uJACoE;AAC3E,IAAM,0BAA0BA,GAClC,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,gBAAgB;AAAA,EAChC,KAAK;AAAA,EACL,UAAUA,GAAE,KAAK,CAAC,OAAO,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,EACjD,WAAWA,GAAE,OAAO,EAAE,SAAS,sCAAsC;AACzE,CAAC,EACI,SAAS,qOAEsF;AAC7F,IAAM,sBAAsBA,GAC9B,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,KAAKA,GAAE,OAAO,EAAE,SAAS,6CAA6C;AAAA,EACtE,UAAUA,GACL,QAAQ,EACR,SAAS,EACT,SAAS,sDAAsD;AACxE,CAAC,EACI,SAAS,0GAA0G;AACjH,IAAM,2BAA2BA,GACnC,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,iBAAiB;AAAA,EACjC,KAAKA,GAAE,OAAO,EAAE,SAAS,cAAc;AAAA,EACvC,UAAUA,GAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,4CAA4C;AAC1F,CAAC,EACI,SAAS,8GAA8G;AACrH,IAAM,2BAA2BA,GACnC,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,iBAAiB;AAAA,EACjC,KAAKA,GAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,EAChD,OAAOA,GAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,EAClD,UAAUA,GAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,uCAAuC;AACrF,CAAC,EACI,SAAS,sGAAsG;AAC7G,IAAM,WAAWA,GACnB,OAAO;AAAA,EACR,QAAQA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,CAAC,EAAE,SAAS;AAAA,EAChE,UAAUA,GAAE,OAAO,EAAE,SAAS;AAClC,CAAC,EACI,SAAS,0FAA0F;AACjG,IAAM,cAAcA,GACtB,OAAO;AAAA,EACR,QAAQA,GACH,MAAM,eAAe,EACrB,IAAI,CAAC,EACL,SAAS,kEAAkE;AAAA,EAChF,OAAOA,GACF,OAAOA,GAAE,OAAO,GAAG,QAAQ,EAC3B,SAAS,EACT,SAAS,8HACgD;AAClE,CAAC,EACI,SAAS,2FAA2F;AAClG,IAAM,uBAAuBA,GAC/B,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,aAAa;AAAA,EAC7B,KAAKA,GAAE,OAAO,EAAE,SAAS,iEAAiE;AAAA,EAC1F,UAAUA,GAAE,KAAK,CAAC,OAAO,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,EACjD,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,wBAAwB;AAAA,EAChE,UAAUA,GACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,SAAS,wDAAwD;AAAA,EACtE,SAAS,YAAY,SAAS,EAAE,SAAS,0DAA0D;AACvG,CAAC,EACI,SAAS,yQAEkF;AACzF,IAAM,aAAaA,GAAE,mBAAmB,QAAQ;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AAIM,IAAM,QAAQA,GAChB,OAAO;AAAA,EACR,YAAYA,GACP,MAAM,UAAU,EAChB,SAAS,8EAAyE;AAAA,EACvF,OAAOA,GACF,QAAQ,EACR,SAAS,oFAAoF;AACtG,CAAC,EACI,SAAS,gLACyE;AAChF,IAAM,gBAAgBA,GACxB,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,OAAOA,GACF,MAAM,KAAK,EACX,SAAS,yEAAoE;AAAA,EAClF,SAASA,GACJ,QAAQ,EACR,SAAS,uFAAuF;AACzG,CAAC,EACI,SAAS,qNAEyD;AAChE,IAAM,iBAAiBA,GACzB,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,OAAOA,GAAE,OAAO;AAAA,EAChB,WAAWA,GAAE,OAAO;AAAA,EACpB,OAAOA,GAAE,QAAQ;AAAA,EACjB,OAAOA,GAAE,QAAQ;AACrB,CAAC,EACI,SAAS,mEAAmE;AAC1E,IAAM,iBAAiBA,GACzB,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,SAASA,GAAE,OAAO;AAAA,EAClB,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EAC1B,eAAeA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC;AAAA,EAC/C,SAASA,GAAE,QAAQ;AACvB,CAAC,EACI,SAAS,8DAA8D;AACrE,IAAM,oBAAoBA,GAC5B,OAAO;AAAA,EACR,MAAMA,GAAE,QAAQ,UAAU;AAAA,EAC1B,UAAUA,GAAE,OAAO;AAAA,EACnB,QAAQA,GAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS;AAAA,EACzC,SAASA,GAAE,QAAQ;AAAA,EACnB,WAAWA,GAAE,OAAO,EAAE,SAAS;AACnC,CAAC,EACI,SAAS,kEAAkE;AACzE,IAAM,oBAAoBA,GAAE,mBAAmB,QAAQ;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AAEM,IAAM,eAAe,kBAAkB,SAAS,EAAE,SAAS;AA2F3D,IAAM,cAAcC,GAAE,OAAO;AAAA,EAChC,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EAC1B,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,OAAOA,GAAE,OAAOA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAC7E,CAAC;AAKM,IAAM,UAAUA,GAClB,OAAO;AAAA,EACR,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAMA,GAAE,OAAO,EAAE,SAAS;AAC9B,CAAC,EACI,SAAS,EACT,SAAS;;;AC/Ud,IAAM,oBAAoB;AAsB1B,IAAM,oBAAoB;AAM1B,IAAM,+BAA+B;AAErC,IAAM,uBACJ;AAwBF,SAAS,sBAAgD;AACvD,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,QAAQ,OAAO,IAAI,MAAM,WAAW,CAAC;AAAA,EAC9C;AACA,QAAMC,KAAI;AACV,MAAIA,GAAE,UAAW,QAAO,QAAQ,QAAQA,GAAE,SAAS;AAEnD,SAAO,IAAI,QAAyB,CAAC,SAAS,WAAW;AACvD,UAAM,WAAW,SAAS;AAAA,MACxB;AAAA,IACF;AACA,UAAM,SAAS,MAAY;AACzB,YAAM,IAAK,OAAsD;AACjE,UAAI,EAAG,SAAQ,CAAC;AAAA,UACX,QAAO,IAAI,MAAM,yCAAyC,CAAC;AAAA,IAClE;AACA,UAAM,UAAU,MAAY,OAAO,IAAI,MAAM,iCAAiC,CAAC;AAC/E,QAAI,UAAU;AACZ,eAAS,iBAAiB,QAAQ,MAAM;AACxC,eAAS,iBAAiB,SAAS,OAAO;AAC1C;AAAA,IACF;AACA,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,MAAM;AACb,WAAO,QAAQ;AACf,WAAO,QAAQ;AACf,WAAO,iBAAiB,QAAQ,MAAM;AACtC,WAAO,iBAAiB,SAAS,OAAO;AACxC,aAAS,KAAK,YAAY,MAAM;AAAA,EAClC,CAAC;AACH;AAgBA,eAAsB,wBAAgD;AACpE,MAAI,CAAC,kBAAmB,QAAO;AAC/B,MAAI,OAAO,WAAW,eAAe,OAAO,aAAa,YAAa,QAAO;AAE7E,MAAI;AACJ,MAAI;AACF,gBAAY,MAAM,QAAQ,KAAK;AAAA,MAC7B,oBAAoB;AAAA,MACpB,IAAI;AAAA,QAAyB,CAACC,IAAG,WAC/B,WAAW,MAAM,OAAO,IAAI,MAAM,wBAAwB,CAAC,GAAG,4BAA4B;AAAA,MAC5F;AAAA,IACF,CAAC;AAAA,EACH,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,SAAO,IAAI,QAAuB,CAAC,YAAY;AAG7C,UAAM,OAAO,SAAS,cAAc,KAAK;AACzC,SAAK,MAAM,UACT;AACF,SAAK,aAAa,wCAAwC,MAAM;AAChE,aAAS,KAAK,YAAY,IAAI;AAE9B,QAAI,UAAU;AACd,UAAM,SAAS,CAAC,UAA+B;AAC7C,UAAI,QAAS;AACb,gBAAU;AACV,mBAAa,KAAK;AAElB,iBAAW,MAAM,KAAK,OAAO,GAAG,CAAC;AACjC,cAAQ,KAAK;AAAA,IACf;AAEA,UAAM,QAAQ,WAAW,MAAM,OAAO,IAAI,GAAG,4BAA4B;AAEzE,QAAI;AACF,gBAAU,OAAO,MAAM;AAAA,QACrB,SAAS;AAAA,QACT,MAAM;AAAA,QACN,UAAU,CAAC,UAAU,OAAO,KAAK;AAAA,QACjC,kBAAkB,MAAM,OAAO,IAAI;AAAA,QACnC,oBAAoB,MAAM,OAAO,IAAI;AAAA,QACrC,oBAAoB,MAAM,OAAO,IAAI;AAAA,MACvC,CAAC;AAAA,IACH,QAAQ;AACN,aAAO,IAAI;AAAA,IACb;AAAA,EACF,CAAC;AACH;AAeA,SAAS,kBAAsC;AAC7C,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,MAAO,OAAiE;AAC9E,QAAM,QAAQ,KAAK;AACnB,SAAO,OAAO,UAAU,YAAY,MAAM,WAAW,MAAM,IAAI,QAAQ;AACzE;AAEA,IAAM,oBAAoB;AAAA,EACxB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AACZ;AAQA,SAAS,mBAAmB,UAA+C;AACzE,QAAM,QAAQ,UAAU,SAAS,kBAAkB;AACnD,QAAM,UAAU,UAAU,WAAW,kBAAkB;AACvD,QAAM,WAAW,UAAU,YAAY,kBAAkB;AACzD,QAAM,UAAU,UAAU;AAI1B,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAEV,QAAM,aAAa;AACnB,QAAM,eACJ;AACF,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAEV,QAAM,aAAa,CAAC,MAClB,EAAE,QAAQ,YAAY,CAAC,OAAO;AAC5B,YAAQ,IAAI;AAAA,MACV,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF,CAAC;AAMH,QAAM,UACJ,WAAW,eAAe,KAAK,OAAO,IAClC,YAAY,WAAW,OAAO,CAAC,sDAAsD,QAAQ,KAAK,WAAW,QAAQ,CAAC,SACtH;AAEN,SAAO,eAAe,YAAY,uDAAuD,UAAU,KAAK,WAAW,KAAK,CAAC,qBAAqB,YAAY,KAAK,WAAW,OAAO,CAAC,SAAS,OAAO;AACpM;AAEO,IAAM,4BAA4B;AAAA,EACvC,MAAM,WAAwB,aAAuC;AACnE,UAAM,WAAY,eAAe;AAGjC,UAAM,UAAU,UAAU;AAC1B,UAAM,aAAa,UAAU;AAC7B,UAAM,SAAS,UAAU;AACzB,UAAM,eAAe,UAAU;AAI/B,UAAM,OAAO,mBAA4C,QAAQ;AACjE,QAAI,YAAY,MAAM;AACpB,aAAQ,KAA8B;AAAA,IACxC;AAEA,UAAM,6BACJ,OAAQ,KAAgC,eAAe;AACzD,UAAM,gBACJ,iBAAiB,6BAA8B,OAAoC;AACrF,UAAM,iBAAiB,UAAU,cAAc;AAE/C,QAAI,CAAC,eAAe,cAAc,CAAC,SAAS;AAC1C,gBAAU,YACR;AACF,aAAO,MAAM;AACX,kBAAU,YAAY;AAAA,MACxB;AAAA,IACF;AAEA,UAAM,UAAU,cAAc,WAAW,QAAQ,OAAO,EAAE;AAC1D,UAAM,QAAQ,gBAAgB;AAC9B,UAAM,YAAY,GAAG,OAAO;AAE5B,UAAM,eAAe,CAAC,QAA+C;AACnE,YAAM,IAA4B,CAAC;AACnC,UAAI,MAAO,GAAE,gBAAgB,UAAU,KAAK;AAC5C,UAAI,IAAK,GAAE,oBAAoB,IAAI;AACnC,aAAO;AAAA,IACT;AAKA,UAAM,KAAK,SAAS,cAAc,aAAa;AAC/C,OAAG,WAAW,cAAc;AAC5B,QAAI,cAAc,aAAa;AAC7B,SAAG,cAAc,cAAc;AAAA,IACjC;AACA,OAAG,MAAM,UAAU;AAKnB,QAAI,YAAkC;AAEtC,QAAI,eAAe;AACnB,QAAI,cAAc;AAClB,QAAI,cAAmC;AACvC,QAAI,eAAqD;AACzD,QAAI,qBAA2D;AAC/D,QAAI,mBAAmB;AAEvB,UAAM,cAAc,MAAY;AAC9B,UAAI,cAAc;AAChB,qBAAa,YAAY;AACzB,uBAAe;AAAA,MACjB;AACA,UAAI,oBAAoB;AACtB,qBAAa,kBAAkB;AAC/B,6BAAqB;AAAA,MACvB;AAAA,IACF;AAOA,QAAI,oBAAoC;AAExC,UAAM,iBAAiB,CAAC,WAAuD;AAC7E,UAAI,eAAe,gBAAgB,iBAAkB;AACrD,yBAAmB;AACnB,kBAAY;AACZ,YAAM,UAAU;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACF;AACA,cAAQ,OAAO,QAAQ,6BAA6B,OAAO;AAI3D,cAAQ,KAAK,wCAAwC,OAAO;AAC5D,iBAAW,WAAW;AACtB,SAAG,OAAO;AACV,gBAAU,YAAY,mBAAmB,cAAc,QAAQ;AAAA,IACjE;AAEA,UAAM,iBAAiB,CAAC,aAAkC;AACxD,UAAI,YAAa;AAEjB,kBAAY,IAAI,cAAc;AAAA,QAC5B,KAAK;AAAA,QACL,SAAS,aAAa,QAAQ;AAAA,QAC9B,aAAa,CAAC,YAAY;AACxB,kBAAQ,QACL,WAAW,CAAC,OAA6C,CAAC,EAC1D,KAAK,MAAM;AACV,oBAAQ,OAAO,QAAQ,wBAAwB;AAAA,cAC7C,QAAQ;AAAA,YACV,CAAC;AAAA,UACH,CAAC,EACA,MAAM,CAAC,QAAiB;AACvB,kBAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,oBAAQ,MAAM,yCAAyC,OAAO;AAAA,UAChE,CAAC;AAAA,QACL;AAAA,MACF,CAAC;AAED,SAAG,YAAY;AAEf,oBAAc,UAAU,UAAU,CAAC,UAAU;AAC3C,YAAI,YAAa;AACjB,YAAI,MAAM,SAAS,SAAS;AAC1B,cAAI,gBAAgB,mBAAoB;AACxC,+BAAqB,WAAW,MAAM;AACpC,iCAAqB;AACrB,gBAAI,CAAC,aAAc,gBAAe,gBAAgB;AAAA,UACpD,GAAG,iBAAiB;AACpB;AAAA,QACF;AAIA,YAAI,MAAM,SAAS,mBAAmB,MAAM,SAAS,oBAAqB;AAC1E,YAAI,MAAM,SAAS,SAAU;AAC7B,uBAAe;AACf,oBAAY;AACZ,YAAI,aAAa;AACf,sBAAY;AACZ,wBAAc;AAAA,QAChB;AAAA,MACF,CAAC;AAED,gBAAU,YAAY,EAAE;AAAA,IAC1B;AAEA,QAAI,mBAAmB;AAKrB,WAAK,sBAAsB,EAAE,KAAK,CAAC,QAAQ;AACzC,4BAAoB,QAAQ;AAC5B,YAAI,CAAC,mBAAmB;AAMtB,kBAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF;AACA,uBAAe,GAAG;AAAA,MACpB,CAAC;AAAA,IACH,OAAO;AAGL,qBAAe,IAAI;AAAA,IACrB;AAEA,WAAO,MAAM;AACX,oBAAc;AACd,kBAAY;AACZ,UAAI,aAAa;AACf,oBAAY;AACZ,sBAAc;AAAA,MAChB;AACA,UAAI,CAAC,kBAAkB;AACrB,mBAAW,WAAW;AACtB,WAAG,OAAO;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": ["html", "nothing", "entries", "setPrototypeOf", "isFrozen", "getPrototypeOf", "getOwnPropertyDescriptor", "Object", "freeze", "seal", "create", "apply", "construct", "Reflect", "x", "func", "thisArg", "_len", "arguments", "length", "args", "Array", "_key", "Func", "_len2", "_key2", "arrayForEach", "unapply", "prototype", "forEach", "arrayLastIndexOf", "lastIndexOf", "arrayPop", "pop", "arrayPush", "push", "arraySplice", "splice", "stringToLowerCase", "String", "toLowerCase", "stringToString", "toString", "stringMatch", "match", "stringReplace", "replace", "stringIndexOf", "indexOf", "stringTrim", "trim", "objectHasOwnProperty", "hasOwnProperty", "regExpTest", "RegExp", "test", "typeErrorCreate", "unconstruct", "TypeError", "lastIndex", "_len3", "_key3", "_len4", "_key4", "addToSet", "set", "array", "transformCaseFunc", "l", "element", "lcElement", "cleanArray", "index", "isPropertyExist", "clone", "object", "newObject", "property", "value", "isArray", "constructor", "lookupGetter", "prop", "desc", "get", "fallbackValue", "html", "svg", "svgFilters", "svgDisallowed", "mathMl", "mathMlDisallowed", "text", "xml", "MUSTACHE_EXPR", "ERB_EXPR", "TMPLIT_EXPR", "DATA_ATTR", "ARIA_ATTR", "IS_ALLOWED_URI", "IS_SCRIPT_OR_DATA", "ATTR_WHITESPACE", "DOCTYPE_NAME", "CUSTOM_ELEMENT", "NODE_TYPE", "attribute", "cdataSection", "entityReference", "entityNode", "progressingInstruction", "comment", "document", "documentType", "documentFragment", "notation", "getGlobal", "window", "_createTrustedTypesPolicy", "trustedTypes", "purifyHostElement", "createPolicy", "suffix", "ATTR_NAME", "hasAttribute", "getAttribute", "policyName", "createHTML", "createScriptURL", "scriptUrl", "_", "console", "warn", "_createHooksMap", "afterSanitizeAttributes", "afterSanitizeElements", "afterSanitizeShadowDOM", "beforeSanitizeAttributes", "beforeSanitizeElements", "beforeSanitizeShadowDOM", "uponSanitizeAttribute", "uponSanitizeElement", "uponSanitizeShadowNode", "createDOMPurify", "undefined", "DOMPurify", "root", "version", "VERSION", "removed", "nodeType", "Element", "isSupported", "originalDocument", "currentScript", "DocumentFragment", "HTMLTemplateElement", "Node", "NodeFilter", "NamedNodeMap", "MozNamedAttrMap", "HTMLFormElement", "DOMParser", "ElementPrototype", "cloneNode", "remove", "getNextSibling", "getChildNodes", "getParentNode", "template", "createElement", "content", "ownerDocument", "trustedTypesPolicy", "emptyHTML", "implementation", "createNodeIterator", "createDocumentFragment", "getElementsByTagName", "importNode", "hooks", "createHTMLDocument", "EXPRESSIONS", "ALLOWED_TAGS", "DEFAULT_ALLOWED_TAGS", "TAGS", "ALLOWED_ATTR", "DEFAULT_ALLOWED_ATTR", "ATTRS", "CUSTOM_ELEMENT_HANDLING", "tagNameCheck", "writable", "configurable", "enumerable", "attributeNameCheck", "allowCustomizedBuiltInElements", "FORBID_TAGS", "FORBID_ATTR", "EXTRA_ELEMENT_HANDLING", "tagCheck", "attributeCheck", "ALLOW_ARIA_ATTR", "ALLOW_DATA_ATTR", "ALLOW_UNKNOWN_PROTOCOLS", "ALLOW_SELF_CLOSE_IN_ATTR", "SAFE_FOR_TEMPLATES", "SAFE_FOR_XML", "WHOLE_DOCUMENT", "SET_CONFIG", "FORCE_BODY", "RETURN_DOM", "RETURN_DOM_FRAGMENT", "RETURN_TRUSTED_TYPE", "SANITIZE_DOM", "SANITIZE_NAMED_PROPS", "SANITIZE_NAMED_PROPS_PREFIX", "KEEP_CONTENT", "IN_PLACE", "USE_PROFILES", "FORBID_CONTENTS", "DEFAULT_FORBID_CONTENTS", "DATA_URI_TAGS", "DEFAULT_DATA_URI_TAGS", "URI_SAFE_ATTRIBUTES", "DEFAULT_URI_SAFE_ATTRIBUTES", "MATHML_NAMESPACE", "SVG_NAMESPACE", "HTML_NAMESPACE", "NAMESPACE", "IS_EMPTY_INPUT", "ALLOWED_NAMESPACES", "DEFAULT_ALLOWED_NAMESPACES", "MATHML_TEXT_INTEGRATION_POINTS", "HTML_INTEGRATION_POINTS", "COMMON_SVG_AND_HTML_ELEMENTS", "PARSER_MEDIA_TYPE", "SUPPORTED_PARSER_MEDIA_TYPES", "DEFAULT_PARSER_MEDIA_TYPE", "CONFIG", "formElement", "isRegexOrFunction", "testValue", "Function", "_parseConfig", "cfg", "ADD_URI_SAFE_ATTR", "ADD_DATA_URI_TAGS", "ALLOWED_URI_REGEXP", "ADD_TAGS", "ADD_ATTR", "ADD_FORBID_CONTENTS", "table", "tbody", "TRUSTED_TYPES_POLICY", "ALL_SVG_TAGS", "ALL_MATHML_TAGS", "_checkValidNamespace", "parent", "tagName", "namespaceURI", "parentTagName", "Boolean", "_forceRemove", "node", "removeChild", "_removeAttribute", "name", "getAttributeNode", "from", "removeAttribute", "setAttribute", "_initDocument", "dirty", "doc", "leadingWhitespace", "matches", "dirtyPayload", "parseFromString", "documentElement", "createDocument", "innerHTML", "body", "insertBefore", "createTextNode", "childNodes", "call", "_createNodeIterator", "SHOW_ELEMENT", "SHOW_COMMENT", "SHOW_TEXT", "SHOW_PROCESSING_INSTRUCTION", "SHOW_CDATA_SECTION", "_isClobbered", "nodeName", "textContent", "attributes", "hasChildNodes", "_isNode", "_executeHooks", "currentNode", "data", "hook", "_sanitizeElements", "allowedTags", "firstElementChild", "_isBasicCustomElement", "parentNode", "childCount", "i", "childClone", "__removalCount", "expr", "_isValidAttribute", "lcTag", "lcName", "_sanitizeAttributes", "hookEvent", "attrName", "attrValue", "keepAttr", "allowedAttributes", "forceKeepAttr", "attr", "initValue", "getAttributeType", "setAttributeNS", "_sanitizeShadowDOM", "fragment", "shadowNode", "shadowIterator", "nextNode", "sanitize", "importedNode", "returnNode", "appendChild", "firstChild", "nodeIterator", "shadowroot", "shadowrootmode", "serializedHTML", "outerHTML", "doctype", "setConfig", "clearConfig", "isValidAttribute", "tag", "addHook", "entryPoint", "hookFunction", "removeHook", "removeHooks", "removeAllHooks", "_getDefaults", "_defaults", "changeDefaults", "newDefaults", "noopTest", "edit", "regex", "opt", "source", "obj", "name", "val", "valSource", "other", "supportsLookbehind", "bull", "indent", "newline", "blockCode", "fences", "hr", "heading", "bullet", "lheadingCore", "lheading", "lheadingGfm", "_paragraph", "blockText", "_blockLabel", "def", "list", "_tag", "_comment", "html", "paragraph", "blockquote", "blockNormal", "gfmTable", "blockGfm", "blockPedantic", "escape", "inlineCode", "br", "inlineText", "_punctuation", "_punctuationOrSpace", "_notPunctuationOrSpace", "punctuation", "_punctuationGfmStrongEm", "_punctuationOrSpaceGfmStrongEm", "_notPunctuationOrSpaceGfmStrongEm", "_punctuationGfmDel", "_punctuationOrSpaceGfmDel", "_notPunctuationOrSpaceGfmDel", "blockSkip", "emStrongLDelimCore", "emStrongLDelim", "emStrongLDelimGfm", "emStrongRDelimAstCore", "emStrongRDelimAst", "emStrongRDelimAstGfm", "emStrongRDelimUnd", "delLDelim", "delRDelimCore", "delRDelim", "anyPunctuation", "autolink", "_inlineComment", "tag", "_inlineLabel", "link", "reflink", "nolink", "reflinkSearch", "_caseInsensitiveProtocol", "inlineNormal", "inlinePedantic", "inlineGfm", "inlineBreaks", "block", "inline", "escapeReplacements", "getEscapeReplacement", "ch", "escapeHtmlEntities", "encode", "cleanUrl", "href", "splitCells", "tableRow", "count", "row", "match", "offset", "str", "escaped", "curr", "cells", "i", "rtrim", "c", "invert", "l", "suffLen", "currChar", "findClosingBracket", "b", "level", "expandTabs", "line", "col", "expanded", "char", "added", "outputLink", "cap", "raw", "lexer", "rules", "title", "text", "token", "indentCodeCompensation", "matchIndentToCode", "indentToCode", "node", "matchIndentInNode", "indentInNode", "_Tokenizer", "options", "src", "trimmed", "lines", "tokens", "inBlockquote", "currentLines", "currentRaw", "currentText", "top", "lastToken", "oldToken", "newText", "newToken", "isordered", "itemRegex", "endsWithBlankLine", "endEarly", "itemContents", "nextLine", "blankLine", "nextBulletRegex", "hrRegex", "fencesBeginRegex", "headingBeginRegex", "htmlBeginRegex", "blockquoteBeginRegex", "rawLine", "nextLineWithoutTabs", "lastItem", "item", "taskRaw", "checkboxToken", "spacers", "t", "hasMultipleLineBreaks", "headers", "aligns", "rows", "align", "cell", "trimmedUrl", "rtrimSlash", "lastParenIndex", "linkLen", "links", "linkString", "maskedSrc", "prevChar", "lLength", "rDelim", "rLength", "delimTotal", "midDelimTotal", "endReg", "lastCharLength", "hasNonSpaceChars", "hasSpaceCharsOnBothEnds", "prevCapZero", "_Lexer", "__Lexer", "next", "lastParagraphClipped", "extTokenizer", "cutSrc", "startIndex", "tempSrc", "tempStart", "getStartIndex", "errMsg", "keepPrevChar", "_Renderer", "lang", "langString", "code", "depth", "ordered", "start", "body", "j", "type", "startAttr", "checked", "header", "k", "content", "cleanHref", "out", "_TextRenderer", "_Parser", "__Parser", "anyToken", "genericToken", "ret", "renderer", "_Hooks", "markdown", "Marked", "args", "callback", "values", "tableToken", "listToken", "childTokens", "extensions", "pack", "opts", "ext", "prevRenderer", "extLevel", "prop", "rendererProp", "rendererFunc", "tokenizer", "tokenizerProp", "tokenizerFunc", "prevTokenizer", "hooks", "hooksProp", "hooksFunc", "prevHook", "arg", "walkTokens", "packWalktokens", "blockType", "origOpt", "throwError", "processedSrc", "processedTokens", "e", "silent", "async", "msg", "markedInstance", "marked", "setOptions", "use", "parseInline", "parser", "_Parser", "lexer", "_Lexer", "html", "nothing", "text", "m", "z", "z", "EventType", "extendStatics", "b", "d", "k", "PatchError", "document", "b", "Mirror", "ObserverInfo", "b", "d", "__extends", "P", "_", "y", "g", "v", "m", "from", "v", "g", "q", "b", "m", "v", "Subscription", "_a", "_a", "__extends", "Subscriber", "ConsumerObserver", "__extends", "SafeSubscriber", "x", "Observable", "observable", "_a", "x", "_a", "__extends", "OperatorSubscriber", "err", "_a", "__extends", "Subject", "_a", "observable", "__extends", "AnonymousSubject", "_a", "__extends", "ReplaySubject", "_a", "last", "x", "_a", "process", "repeat", "iterator", "_a", "iterator", "config", "b", "_a", "context", "char", "b", "te", "text", "_", "WireType", "NullValue", "v", "JsonPatchOperationType", "EventType", "BaseEvent", "protoEvents.EventType", "protoPatch.JsonPatchOperationType", "v", "b", "O", "k", "uuidv4", "A", "j", "u", "t", "e", "M", "N", "P", "F", "r", "i", "n", "o", "s", "a", "c", "l", "d", "L", "m", "mergeMap", "z", "B", "U", "E", "ae", "oe", "se", "ce", "le", "ue", "de", "fe", "pe", "me", "he", "ge", "W", "_e", "G", "K", "q", "ye", "e", "J", "K", "X", "Z", "Q", "$", "k", "Se", "packageJson.version", "M", "F", "uuidv4", "O", "q", "t", "n", "G", "L", "finalize", "j", "W", "Ce", "z", "Ce", "text", "config", "z", "z", "z", "w", "_"]
7
+ }