@crestapps/ai-chat-ui 1.0.0-preview.7 → 1.0.0-preview.9

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["chat-interaction.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_arrayLikeToArray","toString","slice","constructor","name","from","test","window","chatInteractionManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","codeCopiedText","assistantLabel","messageTemplate","indicatorTemplate","untitledText","clearHistoryTitle","clearHistoryMessage","clearHistoryOkText","clearHistoryCancelText","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","renderer","marked","Renderer","link","data","href","concat","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","indexOf","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","push","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","message","charts","requestAnimationFrame","_iterator","_step","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","err","parseMarkdownContent","content","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","initialize","instanceConfig","assign","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","app","Vue","createApp","inputElement","buttonElement","chatContainer","placeholder","isInteractionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","prompt","initialFieldValues","Map","settingsDirty","saveSettingsTimeout","saveIndicatorTimeout","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","Math","random","conversationModeEnabled","conversationButton","isConversationMode","notifications","notificationDismissTimers","computed","lastAssistantIndex","role","methods","handleBeforeUnload","startConnection","_this","_callee","_t","_context","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","initializeInteraction","itemId","titleInput","querySelector","title","forEach","msg","addMessage","$nextTick","historyItem","showSaveIndicator","stopRecording","isFinal","_conversationPartialTranscript","escaped","replace","_conversationPartialMessage","hidePlaceholder","htmlContent","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","stopAudio","_conversationAssistantMessage","oldMsg","index","messageId","responseId","appearance","hideTypingIndicator","j","msgIndex","newMessage","id","normalizeAssistantAppearance","base64Audio","contentType","binaryString","atob","bytes","Uint8Array","charCodeAt","playCollectedAudio","showPlaceholder","clearHistoryBtn","classList","add","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","reloadCurrentInteraction","onclose","addMessageInternal","_this2","fireEvent","CustomEvent","detail","_this3","processedContent","references","_typeof","keys","citedRefs","entries","filter","_ref","_ref2","_slicedToArray","key","includes","sort","_ref3","_ref4","_ref5","_ref6","b","displayIndex","_iterator2","_step2","_step2$value","replaceAll","_displayIndex","_placeholder","_iterator3","_step3","_step3$value","_iterator4","_step4","_step4$value","label","remove","event","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","isIndicator","sendMessage","_this4","_callee2","trimmedPrompt","_context2","flushPendingSave","streamMessage","_this5","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentItemId","getItemId","subscribe","chunk","sessionId","setItemId","_i","_Object$entries","_Object$entries$_i","_i2","_Object$entries2","_Object$entries2$_i","complete","_this5$stream","processReferences","streamingFinished","synthesizeSpeech","_this5$stream2","getServiceDownMessage","_this6","_ref7","_ref8","_ref9","_ref0","_ref1","_ref10","processed","_iterator5","_step5","_step5$value","_iterator6","_step6","_step6$value","_iterator7","_step7","_step7$value","stopIcon","getAttribute","replaceChildren","RETURN_DOM_FRAGMENT","startIcon","icons","querySelectorAll","debouncedSaveSettings","handleExternalTtsStop","_e$detail","sourceId","cacheIndex","_this7","_ttsCacheIndex","invoke","toggleMessageTts","playAudioBlob","totalLength","reduce","sum","combined","offset","_iterator8","_step8","set","blob","Blob","_this8","URL","createObjectURL","audio","Audio","addEventListener","revokeObjectURL","playNextInQueue","play","nextBlob","shift","conversationModeOnAudioEnded","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this9","updateConversationButton","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","_conversationSubject","Subject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","pendingChunk","analyser","interruptVolumeThreshold","size","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee3","uint8Array","base64","_context3","arrayBuffer","str","byte","String","fromCharCode","btoa","getTracks","track","stop","documentElement","send","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","originalLength","removedCount","_this0","setTimeout","scrollTop","scrollHeight","clientHeight","handleUserInput","target","getSaveIndicatorElement","saveIndicatorElementSelector","className","_this1","indicator","clearTimeout","clearPendingSettingsSave","getFieldLabel","input","_input$closest","closest","dataset","setting","getValidationFeedbackElement","feedback","nextElementSibling","contains","insertAdjacentElement","clearSettingValidationError","removeAttribute","setSettingValidationError","setAttribute","getSettingValidationMessage","disabled","number","Number","fieldLabel","isNaN","min","max","validateSettingInput","validateSettings","_this10","isValid","getSettingInputs","queueSettingsSave","explicitInputs","getSelectedGroupValues","groupName","fallbackSelector","explicitSelections","values","checkbox","checkboxes","baseName","hiddenInput","getPromptTemplateSelections","promptTemplates","card","templateIdInput","promptParametersInput","templateId","promptParameters","clearNotificationDismiss","findIndex","splice","scheduleNotificationDismiss","_this11","timerId","dismissNotification","handleNotificationAction","actionName","resetInteraction","initializeApp","_this12","placeholderElementSelector","loadInteraction","threshold","atBottom","shiftKey","click","lastMsg","pop","chatInteractionItems","getElementsByClassName","preventDefault","btn","block","codeEl","clipboard","writeText","copiedText","matches","clearHistory","micButtonElementSelector","style","display","toggleRecording","conversationButtonElementSelector","self","confirmDialog","okText","cancelText","callback","confirmed","_this13","saveSettings","getSelectedToolNames","getSelectedMcpConnectionIds","getSelectedA2AConnectionIds","getSelectedAgentNames","_this14","settings","inputs","match","toLowerCase","checked","parseFloat","toolNames","mcpConnectionIds","a2aConnectionIds","agentNames","promptTemplateIds","map","template","force","copyResponse","startRecording","_this15","subject","_callee4","_context4","updateMicButton","watch","active","mounted","_this16","_callee5","_context5","beforeUnmount","removeEventListener","mount","download","toDataURL","container","img","startsWith","fetch","res","body","appendChild","removeChild"],"mappings":"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","file":"chat-interaction.js","sourcesContent":["window.chatInteractionManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n codeCopiedText: 'Copied!',\n assistantLabel: 'Assistant',\n\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-msg-role ai-chat-msg-role-user\">You</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><i :class=\"getAssistantIcon(message)\"></i></span>\n {{ getAssistantLabel(message) }}\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <button v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <i :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></i>\n </button>\n <button class=\"btn btn-sm btn-link text-secondary p-0 button-message-toolbox\" @click=\"copyResponse(message.content)\" title=\"Click here to copy response to clipboard.\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <i v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></i>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <i v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></i>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><i class=\"fa fa-robot\" style=\"display: inline-block;\"></i></span>\n Assistant\n </div>\n `,\n // Localizable strings\n untitledText: 'Untitled',\n clearHistoryTitle: 'Clear History',\n clearHistoryMessage: 'Are you sure you want to clear the chat history? This action cannot be undone. Your documents, parameters, and tools will be preserved.',\n clearHistoryOkText: 'Yes',\n clearHistoryCancelText: 'Cancel'\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><i class=\"fa-solid fa-code\"></i> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><i class=\"fa-regular fa-copy\"></i></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n return `<div class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <div class=\"mt-2\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <i class=\"fa-solid fa-download\"></i>\n </a>\n </div>\n </div>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map shared with ai-chat.js\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<i class=\"fa-solid fa-download\"></i> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = tryExtractChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // Extract a [chart:{...json...}] marker. This avoids regex issues with nested brackets.\n function tryExtractChartMarker(text) {\n const token = '[chart:';\n const start = text.indexOf(token);\n if (start < 0) {\n return null;\n }\n\n // Find JSON object boundary by balancing braces\n const jsonStart = start + token.length;\n let i = jsonStart;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\n' || text[i] === '\\r' || text[i] === '\\t')) {\n i++;\n }\n\n if (i >= text.length || text[i] !== '{') {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escape = false;\n\n for (; i < text.length; i++) {\n const ch = text[i];\n\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === '\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n const jsonEnd = i;\n // Expect closing bracket after JSON\n const closeBracketIndex = text.indexOf(']', jsonEnd + 1);\n if (closeBracketIndex < 0) {\n return null;\n }\n\n const json = text.substring(jsonStart, jsonEnd + 1).trim();\n return {\n startIndex: start,\n endIndex: closeBracketIndex + 1,\n json: json\n };\n }\n }\n }\n\n return null;\n }\n\n function renderChartsInMessage(message) {\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n const canvas = document.getElementById(c.chartId);\n if (!canvas) {\n continue;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n continue;\n }\n\n // When the canvas is inside a hidden container (e.g., display:none),\n // it has zero dimensions. Keep the config for later rendering.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[c.chartId] = c.config;\n continue;\n }\n\n try {\n // Destroy existing chart instance if re-rendering\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof c.config === 'string' ? JSON.parse(c.config) : c.config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n } catch (e) {\n console.error('Error creating chart:', e);\n }\n }\n });\n }\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = marked.parse(content, { renderer });\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n const initialize = (instanceConfig) => {\n\n const config = Object.assign({}, defaultConfig, instanceConfig);\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const app = Vue.createApp({\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isInteractionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n prompt: '',\n initialFieldValues: new Map(),\n settingsDirty: false,\n saveSettingsTimeout: null,\n saveIndicatorTimeout: null,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'chat-interaction-' + Math.random().toString(36).slice(2),\n conversationModeEnabled: config.chatMode === 'Conversation',\n conversationButton: null,\n isConversationMode: false,\n notifications: [],\n notificationDismissTimers: {},\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadInteraction\", (data) => {\n this.initializeInteraction(data.itemId, true);\n this.messages = [];// Update the title field if it exists\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && data.title) {\n titleInput.value = data.title;\n }\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n });\n });\n });\n\n this.connection.on(\"SettingsSaved\", (itemId, title) => {\n // Update the history list item if it exists\n // Use a more specific selector to only target history list items, not other elements like the Clear History button\n const historyItem = document.querySelector(`.chat-interaction-history-item[data-interaction-id=\"${itemId}\"]`);\n if (historyItem) {\n historyItem.textContent = title || config.untitledText;\n }\n\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && title) {\n titleInput.value = title;\n }\n\n this.showSaveIndicator('Saved', 'text-success');\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n this.showSaveIndicator('Save failed', 'text-danger');\n\n if (this.isRecording) {\n this.stopRecording();\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (itemId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (itemId, text) => {\n if (text) {\n this.stopAudio();\n\n // If there's an interrupted assistant message still streaming,\n // mark it as done to stop the spinner animation.\n if (this._conversationAssistantMessage) {\n var oldMsg = this.messages[this._conversationAssistantMessage.index];\n if (oldMsg) {\n oldMsg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (itemId, messageId, token, responseId, appearance) => {\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n appearance: this.normalizeAssistantAppearance(appearance),\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.content = this._conversationAssistantMessage.content;\n msg.htmlContent = parseMarkdownContent(msg.content, msg);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (itemId, messageId) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (itemId, base64Audio, contentType) => {\n if (base64Audio) {\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (itemId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"HistoryCleared\", (itemId) => {\n // Clear messages and show placeholder\n this.messages = [];\n this.showPlaceholder();\n\n // Hide the clear history button since there's no history now\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.add('d-none');\n }\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n this.reloadCurrentInteraction();\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingChatInteractionMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedChatInteractionMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n if (message.content) {\n let processedContent = message.content.trim();\n\n if (message.references && typeof message.references === \"object\" && Object.keys(message.references).length) {\n\n // Only include references that were actually cited in the response.\n const citedRefs = Object.entries(message.references).filter(([key]) => processedContent.includes(key));\n\n if (citedRefs.length) {\n // Sort by original index so display indices follow a natural order.\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n // Phase 1: Replace all markers with unique placeholders.\n let displayIndex = 1;\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${value.index}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n value._displayIndex = displayIndex++;\n value._placeholder = placeholder;\n }\n\n // Phase 2: Replace placeholders with sequential display indices.\n for (const [, value] of citedRefs) {\n processedContent = processedContent.replaceAll(value._placeholder, `<sup><strong>${value._displayIndex}</strong></sup>`);\n }\n\n processedContent = processedContent.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n\n processedContent += '<br><br>';\n\n for (const [key, value] of citedRefs) {\n const label = value.text || `[doc:${value.index}]`;\n processedContent += value.link\n ? `**${value._displayIndex}**. [${label}](${value.link})<br>`\n : `**${value._displayIndex}**. ${label}<br>`;\n }\n }\n }\n\n message.content = processedContent;\n message.htmlContent = parseMarkdownContent(processedContent, message);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : defaultConfig.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n async sendMessage() {\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // Flush any pending settings save before sending a message\n // to prevent concurrent hub calls that can cause database deadlocks.\n await this.flushPendingSave();\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n // Show the clear history button since we now have prompts\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.remove('d-none');\n }\n\n this.streamMessage(trimmedPrompt);\n this.inputElement.value = '';\n this.prompt = '';\n },\n streamMessage(trimmedPrompt) {\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n var messageIndex = this.messages.length;\n var currentItemId = this.getItemId();\n\n this.stream = this.connection.stream(\"SendMessage\", currentItemId, trimmedPrompt)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n if (chunk.sessionId && !currentItemId) {\n this.setItemId(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n messageIndex = this.messages.length;\n let newMessage = {\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n };\n\n this.messages.push(newMessage);\n message = newMessage;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = value;\n }\n }\n\n if (chunk.content) {\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n let processedContent = chunk.content;\n\n for (const [key, value] of Object.entries(references)) {\n processedContent = processedContent.replaceAll(key, `<sup><strong>${value.index}</strong></sup>`);\n }\n\n content += processedContent.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n }\n\n message.content = content;\n\n message.htmlContent = parseMarkdownContent(content, message);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n return {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n if (Object.keys(references).length) {\n let message = this.messages[messageIndex];\n const content = message.content || '';\n\n // Only include references that were actually cited in the response.\n // Check both raw [doc:N] markers and already-rendered <sup> tags from streaming.\n const citedRefs = Object.entries(references).filter(([key, value]) =>\n content.includes(key) || content.includes(`<sup><strong>${value.index}</strong></sup>`)\n );\n\n if (!citedRefs.length) {\n return;\n }\n\n // Sort by original index so display indices follow a natural order.\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n // Phase 1: Replace all markers with unique placeholders to avoid collisions during remapping.\n let processed = content.trim();\n let displayIndex = 1;\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${value.index}__`;\n processed = processed.replaceAll(key, placeholder);\n processed = processed.replaceAll(`<sup><strong>${value.index}</strong></sup>`, placeholder);\n value._displayIndex = displayIndex++;\n value._placeholder = placeholder;\n }\n\n // Phase 2: Replace placeholders with sequential display indices.\n for (const [, value] of citedRefs) {\n processed = processed.replaceAll(value._placeholder, `<sup><strong>${value._displayIndex}</strong></sup>`);\n }\n\n processed = processed.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n\n processed += '<br><br>';\n\n for (const [key, value] of citedRefs) {\n const label = value.text || `[doc:${value.index}]`;\n processed += value.link\n ? `**${value._displayIndex}**. [${label}](${value.link})<br>`\n : `**${value._displayIndex}**. ${label}<br>`;\n }\n\n message.content = processed;\n message.htmlContent = parseMarkdownContent(processed, message);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Save any settings that were deferred during streaming.\n if (this.settingsDirty) {\n this.debouncedSaveSettings();\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getItemId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.isPlayingAudio && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is currently playing, queue this blob for later.\n if (this.isPlayingAudio && this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n const nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n },\n toggleConversationMode() {\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var itemId = this.getItemId();\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"StartConversation\", itemId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, continuation is handled\n // by the persistent stream.\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getItemId() {\n return this.inputElement.getAttribute('data-interaction-id')\n || this.inputElement.getAttribute('data-item-id');\n },\n getSaveIndicatorElement() {\n if (config.saveIndicatorElementSelector) {\n return document.querySelector(config.saveIndicatorElementSelector);\n }\n\n return document.querySelector('[data-chat-interaction-save-indicator]');\n },\n showSaveIndicator(text, className) {\n const indicator = this.getSaveIndicatorElement();\n if (!indicator) {\n return;\n }\n\n indicator.textContent = text || '';\n indicator.className = 'settings-save-indicator ' + (className || 'text-muted');\n\n if (this.saveIndicatorTimeout) {\n clearTimeout(this.saveIndicatorTimeout);\n this.saveIndicatorTimeout = null;\n }\n\n if (!text) {\n return;\n }\n\n this.saveIndicatorTimeout = setTimeout(() => {\n indicator.textContent = '';\n this.saveIndicatorTimeout = null;\n }, 3000);\n },\n clearPendingSettingsSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n },\n getFieldLabel(input) {\n const label = input\n .closest('.mb-3, .col-6, .col, .form-group, .form-floating')\n ?.querySelector('label');\n\n if (!label) {\n return input.dataset.setting || 'This field';\n }\n\n return (label.textContent || '')\n .replace(/\\s+/g, ' ')\n .trim()\n || input.dataset.setting\n || 'This field';\n },\n getValidationFeedbackElement(input) {\n let feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n return feedback;\n }\n\n feedback = document.createElement('div');\n feedback.className = 'invalid-feedback';\n input.insertAdjacentElement('afterend', feedback);\n\n return feedback;\n },\n clearSettingValidationError(input) {\n input.classList.remove('is-invalid');\n input.removeAttribute('aria-invalid');\n\n const feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n feedback.textContent = '';\n }\n },\n setSettingValidationError(input, message) {\n const feedback = this.getValidationFeedbackElement(input);\n input.classList.add('is-invalid');\n input.setAttribute('aria-invalid', 'true');\n feedback.textContent = message;\n },\n getSettingValidationMessage(input) {\n if (!input || input.disabled || input.type !== 'number') {\n return null;\n }\n\n const value = (input.value || '').trim();\n if (!value) {\n return null;\n }\n\n const number = Number(value);\n const fieldLabel = this.getFieldLabel(input);\n\n if (Number.isNaN(number)) {\n return `${fieldLabel} must be a valid number.`;\n }\n\n const min = input.getAttribute('min');\n if (min !== null && number < Number(min)) {\n return `${fieldLabel} must be ${min} or greater.`;\n }\n\n const max = input.getAttribute('max');\n if (max !== null && number > Number(max)) {\n return `${fieldLabel} must be ${max} or less.`;\n }\n\n return null;\n },\n validateSettingInput(input) {\n const message = this.getSettingValidationMessage(input);\n if (!message) {\n this.clearSettingValidationError(input);\n return true;\n }\n\n this.setSettingValidationError(input, message);\n return false;\n },\n validateSettings() {\n let isValid = true;\n\n this.getSettingInputs().forEach(input => {\n isValid = this.validateSettingInput(input) && isValid;\n });\n\n return isValid;\n },\n queueSettingsSave() {\n if (!this.validateSettings()) {\n this.clearPendingSettingsSave();\n this.settingsDirty = false;\n this.showSaveIndicator('Fix errors', 'text-danger');\n return;\n }\n\n this.settingsDirty = true;\n this.showSaveIndicator('Saving...', 'text-warning');\n this.debouncedSaveSettings();\n },\n getSettingInputs() {\n const explicitInputs = document.querySelectorAll('.setting-input[data-setting]');\n if (explicitInputs.length > 0) {\n return explicitInputs;\n }\n\n return document.querySelectorAll(\n 'input[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'select[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'textarea[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"])'\n );\n },\n getSelectedGroupValues(groupName, fallbackSelector) {\n const explicitSelections = document.querySelectorAll(`.capability-checkbox[data-save-group=\"${groupName}\"]:checked`);\n if (explicitSelections.length > 0) {\n const values = [];\n\n explicitSelections.forEach(checkbox => {\n const value = checkbox.getAttribute('data-item-id') || checkbox.value;\n if (value) {\n values.push(value);\n }\n });\n\n return values;\n }\n\n if (!fallbackSelector) {\n return [];\n }\n\n const values = [];\n const checkboxes = document.querySelectorAll(fallbackSelector);\n\n checkboxes.forEach(checkbox => {\n const baseName = checkbox.name.replace('.IsSelected', '.ItemId');\n const hiddenInput = document.querySelector(`input[type=\"hidden\"][name=\"${baseName}\"]`);\n\n if (hiddenInput && hiddenInput.value) {\n values.push(hiddenInput.value);\n }\n });\n\n return values;\n },\n getPromptTemplateSelections() {\n const promptTemplates = [];\n\n document.querySelectorAll('.prompt-template-card').forEach(card => {\n const templateIdInput = card.querySelector('.prompt-template-id-input');\n const promptParametersInput = card.querySelector('.prompt-template-parameters-input');\n const templateId = templateIdInput ? templateIdInput.value : card.getAttribute('data-template-id');\n\n if (!templateId) {\n return;\n }\n\n promptTemplates.push({\n templateId: templateId,\n promptParameters: promptParametersInput ? (promptParametersInput.value || '').trim() : ''\n });\n });\n\n return promptTemplates;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n // Replace existing notification with same type, or add new one.\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var itemId = this.getItemId();\n this.connection.invoke('HandleNotificationAction', itemId, notificationType, actionName)\n .catch(err => console.error('Failed to handle notification action:', err));\n },\n setItemId(itemId) {\n this.inputElement.setAttribute('data-interaction-id', itemId || '');\n this.inputElement.setAttribute('data-item-id', itemId || '');\n },\n resetInteraction() {\n this.setItemId('');\n this.isInteractionStarted = false;\n this.messages = [];\n this.showPlaceholder();\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keyup', event => {\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.inputElement.addEventListener('paste', (e) => {\n // Use setTimeout to allow the paste to complete before checking the value\n setTimeout(() => {\n this.prompt = this.inputElement.value;\n if (this.inputElement.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n }, 0);\n });\n\n this.buttonElement.addEventListener('click', () => {\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const chatInteractionItems = document.getElementsByClassName('chat-interaction-history-item');\n\n for (var i = 0; i < chatInteractionItems.length; i++) {\n chatInteractionItems[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var itemId = e.target.getAttribute('data-interaction-id');\n\n if (!itemId) {\n console.error('An element with the class chat-interaction-history-item with no data-interaction-id set.');\n return;\n }\n\n this.loadInteraction(itemId);\n });\n }\n\n for (let i = 0; i < config.messages.length; i++) {\n this.addMessage(config.messages[i]);\n }\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<i class=\"fa-solid fa-check\"></i> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<i class=\"fa-regular fa-copy\"></i>';\n }, 2000);\n }\n });\n }\n\n document.addEventListener('input', event => {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('change', event => {\n if (event.target.matches('.setting-input[data-setting], .capability-checkbox[data-save-group], .group-toggle, .ci-agent-global-toggle')) {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n }\n\n this.queueSettingsSave();\n return;\n }\n\n if (event.target.closest('.prompt-template-parameters-input, .prompt-template-id-input')) {\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('click', event => {\n if (!event.target.closest('.prompt-template-add-btn, .remove-prompt-template-btn')) {\n return;\n }\n\n setTimeout(() => {\n this.queueSettingsSave();\n }, 0);\n });\n\n // Add event listener for clear history button\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.addEventListener('click', () => {\n const itemId = clearHistoryBtn.getAttribute('data-interaction-id');\n if (itemId) {\n this.clearHistory(itemId);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n },\n loadInteraction(itemId) {\n this.connection.invoke(\"LoadInteraction\", itemId).catch(err => console.error(err));\n },\n reloadCurrentInteraction() {\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n },\n clearHistory(itemId) {\n const self = this;\n confirmDialog({\n title: config.clearHistoryTitle,\n message: config.clearHistoryMessage,\n okText: config.clearHistoryOkText,\n cancelText: config.clearHistoryCancelText,\n callback: function (confirmed) {\n if (confirmed) {\n // Cancel any active stream before clearing history.\n if (self.stream) {\n self.stream.dispose();\n self.stream = null;\n self.hideTypingIndicator();\n self.streamingFinished();\n }\n\n self.connection.invoke(\"ClearHistory\", itemId)\n .catch(err => console.error('Error clearing history:', err));\n }\n }\n });\n },\n debouncedSaveSettings() {\n // Clear any existing timeout to reset the debounce timer\n this.clearPendingSettingsSave();\n\n // Don't save while streaming — it will be saved when streaming completes.\n if (this.stream) {\n return;\n }\n\n // Set a new timeout to save after 850ms of no changes\n this.saveSettingsTimeout = setTimeout(() => {\n if (this.settingsDirty) {\n this.saveSettings();\n this.settingsDirty = false;\n }\n this.saveSettingsTimeout = null;\n }, 850);\n },\n getSelectedToolNames() {\n return this.getSelectedGroupValues(\n 'toolNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Tools[\"]:checked'\n );\n },\n getSelectedMcpConnectionIds() {\n return this.getSelectedGroupValues(\n 'mcpConnectionIds',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Connections[\"]:checked'\n );\n },\n getSelectedA2AConnectionIds() {\n return this.getSelectedGroupValues('a2aConnectionIds');\n },\n getSelectedAgentNames() {\n return this.getSelectedGroupValues(\n 'agentNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Agents[\"]:checked'\n );\n },\n saveSettings() {\n const itemId = this.getItemId();\n if (!itemId) {\n return Promise.resolve();\n }\n\n if (!this.validateSettings()) {\n this.showSaveIndicator('Fix errors', 'text-danger');\n return Promise.resolve();\n }\n\n const settings = {};\n\n // Collect all form inputs with the \"ChatInteraction.\" prefix generically.\n // This avoids coupling the JS to specific field names — new fields added by\n // any module are automatically included.\n const inputs = this.getSettingInputs();\n\n inputs.forEach(input => {\n const key = input.dataset.setting\n || ((input.name || '').replace('ChatInteraction.', '').replace(/^[A-Z]/, match => match.toLowerCase()));\n\n if (!key) {\n return;\n }\n\n if (input.type === 'checkbox') {\n settings[key] = input.checked;\n } else if (input.type === 'number') {\n settings[key] = input.value ? parseFloat(input.value) : null;\n } else {\n settings[key] = input.value || null;\n }\n });\n\n // Add tool, MCP connection, and agent collections (special handling).\n settings.toolNames = this.getSelectedToolNames();\n settings.mcpConnectionIds = this.getSelectedMcpConnectionIds();\n settings.a2aConnectionIds = this.getSelectedA2AConnectionIds();\n settings.agentNames = this.getSelectedAgentNames();\n\n const promptTemplates = this.getPromptTemplateSelections();\n if (promptTemplates.length > 0) {\n settings.promptTemplates = promptTemplates;\n settings.promptTemplateIds = promptTemplates.map(template => template.templateId);\n }\n\n return this.connection.invoke(\"SaveSettings\", itemId, settings)\n .catch(err => {\n console.error('Error saving settings:', err);\n this.showSaveIndicator('Save failed', 'text-danger');\n });\n },\n flushPendingSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n\n if (this.settingsDirty) {\n this.settingsDirty = false;\n return this.saveSettings();\n }\n\n return Promise.resolve();\n },\n initializeInteraction(itemId, force) {\n if (this.isInteractionStarted && !force) {\n return;\n }\n this.fireEvent(new CustomEvent(\"initializingChatInteraction\", { detail: { itemId: itemId } }));\n this.setItemId(itemId);\n this.isInteractionStarted = true;\n },\n copyResponse(message) {\n navigator.clipboard.writeText(message);\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var itemId = this.getItemId();\n var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", itemId, subject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-stop\"></i>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-microphone\"></i>';\n }\n }\n },\n watch: {\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n isConversationMode(active) {\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n this.initializeApp();\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n },\n template: config.messageTemplate\n }).mount(config.appElementSelector);\n\n return app;\n };\n\n return {\n initialize: initialize\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}
1
+ {"version":3,"sources":["chat-interaction.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_arrayLikeToArray","toString","slice","constructor","name","from","test","window","chatInteractionManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","codeCopiedText","assistantLabel","messageTemplate","indicatorTemplate","untitledText","clearHistoryTitle","clearHistoryMessage","clearHistoryOkText","clearHistoryCancelText","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","renderer","marked","Renderer","link","data","href","concat","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","indexOf","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","push","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","message","charts","requestAnimationFrame","_iterator","_step","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","err","parseMarkdownContent","content","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","initialize","instanceConfig","assign","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","app","Vue","createApp","inputElement","buttonElement","chatContainer","placeholder","isInteractionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","prompt","initialFieldValues","Map","settingsDirty","saveSettingsTimeout","saveIndicatorTimeout","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","Math","random","conversationModeEnabled","conversationButton","isConversationMode","notifications","notificationDismissTimers","computed","lastAssistantIndex","role","methods","handleBeforeUnload","startConnection","_this","_callee","_t","_context","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","initializeInteraction","itemId","titleInput","querySelector","title","forEach","msg","addMessage","$nextTick","historyItem","showSaveIndicator","stopRecording","isFinal","_conversationPartialTranscript","escaped","replace","_conversationPartialMessage","hidePlaceholder","htmlContent","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","stopAudio","_conversationAssistantMessage","oldMsg","index","messageId","responseId","appearance","hideTypingIndicator","j","msgIndex","newMessage","id","normalizeAssistantAppearance","base64Audio","contentType","binaryString","atob","bytes","Uint8Array","charCodeAt","playCollectedAudio","showPlaceholder","clearHistoryBtn","classList","add","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","reloadCurrentInteraction","onclose","addMessageInternal","_this2","fireEvent","CustomEvent","detail","_this3","processedContent","references","_typeof","keys","citedRefs","entries","filter","_ref","_ref2","_slicedToArray","key","includes","sort","_ref3","_ref4","_ref5","_ref6","b","displayIndex","_iterator2","_step2","_step2$value","replaceAll","_displayIndex","_placeholder","_iterator3","_step3","_step3$value","_iterator4","_step4","_step4$value","label","remove","event","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","isIndicator","sendMessage","_this4","_callee2","trimmedPrompt","_context2","flushPendingSave","streamMessage","_this5","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentItemId","getItemId","subscribe","chunk","sessionId","setItemId","_i","_Object$entries","_Object$entries$_i","_i2","_Object$entries2","_Object$entries2$_i","complete","_this5$stream","processReferences","streamingFinished","synthesizeSpeech","_this5$stream2","getServiceDownMessage","_this6","_ref7","_ref8","_ref9","_ref0","_ref1","_ref10","processed","_iterator5","_step5","_step5$value","_iterator6","_step6","_step6$value","_iterator7","_step7","_step7$value","stopIcon","getAttribute","replaceChildren","RETURN_DOM_FRAGMENT","startIcon","icons","querySelectorAll","debouncedSaveSettings","handleExternalTtsStop","_e$detail","sourceId","cacheIndex","_this7","_ttsCacheIndex","invoke","toggleMessageTts","playAudioBlob","totalLength","reduce","sum","combined","offset","_iterator8","_step8","set","blob","Blob","_this8","URL","createObjectURL","audio","Audio","addEventListener","revokeObjectURL","playNextInQueue","play","nextBlob","shift","conversationModeOnAudioEnded","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this9","updateConversationButton","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","_conversationSubject","Subject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","pendingChunk","analyser","interruptVolumeThreshold","size","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee3","uint8Array","base64","_context3","arrayBuffer","str","byte","String","fromCharCode","btoa","getTracks","track","stop","documentElement","send","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","originalLength","removedCount","_this0","setTimeout","scrollTop","scrollHeight","clientHeight","handleUserInput","target","getSaveIndicatorElement","saveIndicatorElementSelector","className","_this1","indicator","clearTimeout","clearPendingSettingsSave","getFieldLabel","input","_input$closest","closest","dataset","setting","getValidationFeedbackElement","feedback","nextElementSibling","contains","insertAdjacentElement","clearSettingValidationError","removeAttribute","setSettingValidationError","setAttribute","getSettingValidationMessage","disabled","number","Number","fieldLabel","isNaN","min","max","validateSettingInput","validateSettings","_this10","isValid","getSettingInputs","queueSettingsSave","explicitInputs","getSelectedGroupValues","groupName","fallbackSelector","explicitSelections","values","checkbox","checkboxes","baseName","hiddenInput","getPromptTemplateSelections","promptTemplates","card","templateIdInput","promptParametersInput","templateId","promptParameters","clearNotificationDismiss","findIndex","splice","scheduleNotificationDismiss","_this11","timerId","dismissNotification","handleNotificationAction","actionName","resetInteraction","initializeApp","_this12","placeholderElementSelector","loadInteraction","threshold","atBottom","shiftKey","click","lastMsg","pop","chatInteractionItems","getElementsByClassName","preventDefault","btn","block","codeEl","clipboard","writeText","copiedText","matches","clearHistory","micButtonElementSelector","style","display","toggleRecording","conversationButtonElementSelector","self","confirmDialog","okText","cancelText","callback","confirmed","_this13","saveSettings","getSelectedToolNames","getSelectedMcpConnectionIds","getSelectedA2AConnectionIds","getSelectedAgentNames","_this14","settings","inputs","match","toLowerCase","checked","parseFloat","toolNames","mcpConnectionIds","a2aConnectionIds","agentNames","promptTemplateIds","map","template","force","copyResponse","startRecording","_this15","subject","_callee4","_context4","updateMicButton","watch","active","mounted","_this16","_callee5","_context5","beforeUnmount","removeEventListener","mount","download","toDataURL","container","img","startsWith","fetch","res","body","appendChild","removeChild"],"mappings":";;;;;;;;;;0BACA,uKAAAA,CAAA,EAAAC,CAAA,EAAAC,CAAA,wBAAAC,MAAA,GAAAA,MAAA,OAAAC,CAAA,GAAAF,CAAA,CAAAG,QAAA,kBAAAC,CAAA,GAAAJ,CAAA,CAAAK,WAAA,8BAAAC,EAAAN,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAE,CAAA,QAAAC,CAAA,GAAAL,CAAA,IAAAA,CAAA,CAAAM,SAAA,YAAAC,SAAA,GAAAP,CAAA,GAAAO,SAAA,EAAAC,CAAA,GAAAC,MAAA,CAAAC,MAAA,CAAAL,CAAA,CAAAC,SAAA,UAAAK,mBAAA,CAAAH,CAAA,uBAAAV,CAAA,EAAAE,CAAA,EAAAE,CAAA,QAAAE,CAAA,EAAAC,CAAA,EAAAG,CAAA,EAAAI,CAAA,MAAAC,CAAA,GAAAX,CAAA,QAAAY,CAAA,OAAAC,CAAA,KAAAF,CAAA,KAAAb,CAAA,KAAAgB,CAAA,EAAApB,CAAA,EAAAqB,CAAA,EAAAC,CAAA,EAAAN,CAAA,EAAAM,CAAA,CAAAC,IAAA,CAAAvB,CAAA,MAAAsB,CAAA,WAAAA,EAAArB,CAAA,EAAAC,CAAA,WAAAM,CAAA,GAAAP,CAAA,EAAAQ,CAAA,MAAAG,CAAA,GAAAZ,CAAA,EAAAmB,CAAA,CAAAf,CAAA,GAAAF,CAAA,EAAAmB,CAAA,gBAAAC,EAAApB,CAAA,EAAAE,CAAA,SAAAK,CAAA,GAAAP,CAAA,EAAAU,CAAA,GAAAR,CAAA,EAAAH,CAAA,OAAAiB,CAAA,IAAAF,CAAA,KAAAV,CAAA,IAAAL,CAAA,GAAAgB,CAAA,CAAAO,MAAA,EAAAvB,CAAA,UAAAK,CAAA,EAAAE,CAAA,GAAAS,CAAA,CAAAhB,CAAA,GAAAqB,CAAA,GAAAH,CAAA,CAAAF,CAAA,EAAAQ,CAAA,GAAAjB,CAAA,KAAAN,CAAA,QAAAI,CAAA,GAAAmB,CAAA,KAAArB,CAAA,MAAAQ,CAAA,GAAAJ,CAAA,EAAAC,CAAA,GAAAD,CAAA,YAAAC,CAAA,WAAAD,CAAA,MAAAA,CAAA,MAAAR,CAAA,IAAAQ,CAAA,OAAAc,CAAA,MAAAhB,CAAA,GAAAJ,CAAA,QAAAoB,CAAA,GAAAd,CAAA,QAAAC,CAAA,MAAAU,CAAA,CAAAC,CAAA,GAAAhB,CAAA,EAAAe,CAAA,CAAAf,CAAA,GAAAI,CAAA,OAAAc,CAAA,GAAAG,CAAA,KAAAnB,CAAA,GAAAJ,CAAA,QAAAM,CAAA,MAAAJ,CAAA,IAAAA,CAAA,GAAAqB,CAAA,MAAAjB,CAAA,MAAAN,CAAA,EAAAM,CAAA,MAAAJ,CAAA,EAAAe,CAAA,CAAAf,CAAA,GAAAqB,CAAA,EAAAhB,CAAA,cAAAH,CAAA,IAAAJ,CAAA,aAAAmB,CAAA,QAAAH,CAAA,OAAAd,CAAA,qBAAAE,CAAA,EAAAW,CAAA,EAAAQ,CAAA,QAAAT,CAAA,YAAAU,SAAA,uCAAAR,CAAA,UAAAD,CAAA,IAAAK,CAAA,CAAAL,CAAA,EAAAQ,CAAA,GAAAhB,CAAA,GAAAQ,CAAA,EAAAL,CAAA,GAAAa,CAAA,GAAAxB,CAAA,GAAAQ,CAAA,OAAAT,CAAA,GAAAY,CAAA,MAAAM,CAAA,KAAAV,CAAA,KAAAC,CAAA,GAAAA,CAAA,QAAAA,CAAA,SAAAU,CAAA,CAAAf,CAAA,QAAAkB,CAAA,CAAAb,CAAA,EAAAG,CAAA,KAAAO,CAAA,CAAAf,CAAA,GAAAQ,CAAA,GAAAO,CAAA,CAAAC,CAAA,GAAAR,CAAA,aAAAI,CAAA,MAAAR,CAAA,QAAAC,CAAA,KAAAH,CAAA,YAAAL,CAAA,GAAAO,CAAA,CAAAF,CAAA,WAAAL,CAAA,GAAAA,CAAA,CAAA0B,IAAA,CAAAnB,CAAA,EAAAI,CAAA,UAAAc,SAAA,2CAAAzB,CAAA,CAAA2B,IAAA,SAAA3B,CAAA,EAAAW,CAAA,GAAAX,CAAA,CAAA4B,KAAA,EAAApB,CAAA,SAAAA,CAAA,oBAAAA,CAAA,KAAAR,CAAA,GAAAO,CAAA,eAAAP,CAAA,CAAA0B,IAAA,CAAAnB,CAAA,GAAAC,CAAA,SAAAG,CAAA,GAAAc,SAAA,uCAAApB,CAAA,gBAAAG,CAAA,OAAAD,CAAA,GAAAR,CAAA,cAAAC,CAAA,IAAAiB,CAAA,GAAAC,CAAA,CAAAf,CAAA,QAAAQ,CAAA,GAAAV,CAAA,CAAAyB,IAAA,CAAAvB,CAAA,EAAAe,CAAA,OAAAE,CAAA,kBAAApB,CAAA,IAAAO,CAAA,GAAAR,CAAA,EAAAS,CAAA,MAAAG,CAAA,GAAAX,CAAA,cAAAe,CAAA,mBAAAa,KAAA,EAAA5B,CAAA,EAAA2B,IAAA,EAAAV,CAAA,SAAAhB,CAAA,EAAAI,CAAA,EAAAE,CAAA,QAAAI,CAAA,QAAAS,CAAA,gBAAAV,UAAA,cAAAmB,kBAAA,cAAAC,2BAAA,KAAA9B,CAAA,GAAAY,MAAA,CAAAmB,cAAA,MAAAvB,CAAA,MAAAL,CAAA,IAAAH,CAAA,CAAAA,CAAA,IAAAG,CAAA,SAAAW,mBAAA,CAAAd,CAAA,OAAAG,CAAA,iCAAAH,CAAA,GAAAW,CAAA,GAAAmB,0BAAA,CAAArB,SAAA,GAAAC,SAAA,CAAAD,SAAA,GAAAG,MAAA,CAAAC,MAAA,CAAAL,CAAA,YAAAO,EAAAhB,CAAA,WAAAa,MAAA,CAAAoB,cAAA,GAAApB,MAAA,CAAAoB,cAAA,CAAAjC,CAAA,EAAA+B,0BAAA,KAAA/B,CAAA,CAAAkC,SAAA,GAAAH,0BAAA,EAAAhB,mBAAA,CAAAf,CAAA,EAAAM,CAAA,yBAAAN,CAAA,CAAAU,SAAA,GAAAG,MAAA,CAAAC,MAAA,CAAAF,CAAA,GAAAZ,CAAA,WAAA8B,iBAAA,CAAApB,SAAA,GAAAqB,0BAAA,EAAAhB,mBAAA,CAAAH,CAAA,iBAAAmB,0BAAA,GAAAhB,mBAAA,CAAAgB,0BAAA,iBAAAD,iBAAA,GAAAA,iBAAA,CAAAK,WAAA,wBAAApB,mBAAA,CAAAgB,0BAAA,EAAAzB,CAAA,wBAAAS,mBAAA,CAAAH,CAAA,GAAAG,mBAAA,CAAAH,CAAA,EAAAN,CAAA,gBAAAS,mBAAA,CAAAH,CAAA,EAAAR,CAAA,iCAAAW,mBAAA,CAAAH,CAAA,8DAAAwB,YAAA,YAAAA,aAAA,aAAAC,CAAA,EAAA7B,CAAA,EAAA8B,CAAA,EAAAtB,CAAA;AAAA,SAAAD,oBAAAf,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAH,CAAA,QAAAO,CAAA,GAAAK,MAAA,CAAA0B,cAAA,QAAA/B,CAAA,uBAAAR,CAAA,IAAAQ,CAAA,QAAAO,mBAAA,YAAAyB,mBAAAxC,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAH,CAAA,aAAAK,EAAAJ,CAAA,EAAAE,CAAA,IAAAW,mBAAA,CAAAf,CAAA,EAAAE,CAAA,YAAAF,CAAA,gBAAAyC,OAAA,CAAAvC,CAAA,EAAAE,CAAA,EAAAJ,CAAA,SAAAE,CAAA,GAAAM,CAAA,GAAAA,CAAA,CAAAR,CAAA,EAAAE,CAAA,IAAA2B,KAAA,EAAAzB,CAAA,EAAAsC,UAAA,GAAAzC,CAAA,EAAA0C,YAAA,GAAA1C,CAAA,EAAA2C,QAAA,GAAA3C,CAAA,MAAAD,CAAA,CAAAE,CAAA,IAAAE,CAAA,IAAAE,CAAA,aAAAA,CAAA,cAAAA,CAAA,mBAAAS,mBAAA,CAAAf,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAH,CAAA;AAAA,SAAA4C,mBAAAzC,CAAA,EAAAH,CAAA,EAAAD,CAAA,EAAAE,CAAA,EAAAI,CAAA,EAAAe,CAAA,EAAAZ,CAAA,cAAAD,CAAA,GAAAJ,CAAA,CAAAiB,CAAA,EAAAZ,CAAA,GAAAG,CAAA,GAAAJ,CAAA,CAAAqB,KAAA,WAAAzB,CAAA,gBAAAJ,CAAA,CAAAI,CAAA,KAAAI,CAAA,CAAAoB,IAAA,GAAA3B,CAAA,CAAAW,CAAA,IAAAkC,OAAA,CAAAC,OAAA,CAAAnC,CAAA,EAAAoC,IAAA,CAAA9C,CAAA,EAAAI,CAAA;AAAA,SAAA2C,kBAAA7C,CAAA,6BAAAH,CAAA,SAAAD,CAAA,GAAAkD,SAAA,aAAAJ,OAAA,WAAA5C,CAAA,EAAAI,CAAA,QAAAe,CAAA,GAAAjB,CAAA,CAAA+C,KAAA,CAAAlD,CAAA,EAAAD,CAAA,YAAAoD,MAAAhD,CAAA,IAAAyC,kBAAA,CAAAxB,CAAA,EAAAnB,CAAA,EAAAI,CAAA,EAAA8C,KAAA,EAAAC,MAAA,UAAAjD,CAAA,cAAAiD,OAAAjD,CAAA,IAAAyC,kBAAA,CAAAxB,CAAA,EAAAnB,CAAA,EAAAI,CAAA,EAAA8C,KAAA,EAAAC,MAAA,WAAAjD,CAAA,KAAAgD,KAAA;AAAA,SAAAE,2BAAApD,CAAA,EAAAF,CAAA,QAAAC,CAAA,yBAAAE,MAAA,IAAAD,CAAA,CAAAC,MAAA,CAAAE,QAAA,KAAAH,CAAA,qBAAAD,CAAA,QAAAsD,KAAA,CAAAC,OAAA,CAAAtD,CAAA,MAAAD,CAAA,GAAAwD,2BAAA,CAAAvD,CAAA,MAAAF,CAAA,IAAAE,CAAA,uBAAAA,CAAA,CAAAsB,MAAA,IAAAvB,CAAA,KAAAC,CAAA,GAAAD,CAAA,OAAAyD,EAAA,MAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAvD,CAAA,WAAAA,EAAA,WAAAsD,EAAA,IAAAxD,CAAA,CAAAsB,MAAA,KAAAI,IAAA,WAAAA,IAAA,MAAAC,KAAA,EAAA3B,CAAA,CAAAwD,EAAA,UAAA1D,CAAA,WAAAA,EAAAE,CAAA,UAAAA,CAAA,KAAAc,CAAA,EAAA2C,CAAA,gBAAAjC,SAAA,iJAAApB,CAAA,EAAAe,CAAA,OAAAT,CAAA,gBAAAgD,CAAA,WAAAA,EAAA,IAAA3D,CAAA,GAAAA,CAAA,CAAA0B,IAAA,CAAAzB,CAAA,MAAAE,CAAA,WAAAA,EAAA,QAAAF,CAAA,GAAAD,CAAA,CAAA4D,IAAA,WAAAxC,CAAA,GAAAnB,CAAA,CAAA0B,IAAA,EAAA1B,CAAA,KAAAF,CAAA,WAAAA,EAAAE,CAAA,IAAAU,CAAA,OAAAN,CAAA,GAAAJ,CAAA,KAAAc,CAAA,WAAAA,EAAA,UAAAK,CAAA,YAAApB,CAAA,cAAAA,CAAA,8BAAAW,CAAA,QAAAN,CAAA;AAAA,SAAAwD,mBAAA5D,CAAA,WAAA6D,kBAAA,CAAA7D,CAAA,KAAA8D,gBAAA,CAAA9D,CAAA,KAAAuD,2BAAA,CAAAvD,CAAA,KAAA+D,kBAAA;AAAA,SAAAA,mBAAA,cAAAvC,SAAA;AAAA,SAAA+B,4BAAAvD,CAAA,EAAAmB,CAAA,QAAAnB,CAAA,2BAAAA,CAAA,SAAAgE,iBAAA,CAAAhE,CAAA,EAAAmB,CAAA,OAAApB,CAAA,MAAAkE,QAAA,CAAAxC,IAAA,CAAAzB,CAAA,EAAAkE,KAAA,6BAAAnE,CAAA,IAAAC,CAAA,CAAAmE,WAAA,KAAApE,CAAA,GAAAC,CAAA,CAAAmE,WAAA,CAAAC,IAAA,aAAArE,CAAA,cAAAA,CAAA,GAAAsD,KAAA,CAAAgB,IAAA,CAAArE,CAAA,oBAAAD,CAAA,+CAAAuE,IAAA,CAAAvE,CAAA,IAAAiE,iBAAA,CAAAhE,CAAA,EAAAmB,CAAA;AAAA,SAAA2C,iBAAA9D,CAAA,8BAAAC,MAAA,YAAAD,CAAA,CAAAC,MAAA,CAAAE,QAAA,aAAAH,CAAA,uBAAAqD,KAAA,CAAAgB,IAAA,CAAArE,CAAA;AAAA,SAAA6D,mBAAA7D,CAAA,QAAAqD,KAAA,CAAAC,OAAA,CAAAtD,CAAA,UAAAgE,iBAAA,CAAAhE,CAAA;AAAA,SAAAgE,kBAAAhE,CAAA,EAAAmB,CAAA,aAAAA,CAAA,IAAAA,CAAA,GAAAnB,CAAA,CAAAsB,MAAA,MAAAH,CAAA,GAAAnB,CAAA,CAAAsB,MAAA,YAAAxB,CAAA,MAAAI,CAAA,GAAAmD,KAAA,CAAAlC,CAAA,GAAArB,CAAA,GAAAqB,CAAA,EAAArB,CAAA,IAAAI,CAAA,CAAAJ,CAAA,IAAAE,CAAA,CAAAF,CAAA,UAAAI,CAAA;AADAqE,MAAM,CAACC,sBAAsB,GAAG,YAAY;EAExC;EACA,IAAIC,aAAa,GAAG;IAChB;IACAC,qBAAqB,EAAE,iBAAiB;IACxCC,sBAAsB,EAAE,GAAG;IAC3BC,kBAAkB,EAAE,gBAAgB;IACpCC,kBAAkB,EAAE,yBAAyB;IAC7CC,uBAAuB,EAAE,UAAU;IACnCC,cAAc,EAAE,SAAS;IACzBC,cAAc,EAAE,WAAW;IAE3BC,eAAe,49GAuCd;IACDC,iBAAiB,qQAKhB;IACD;IACAC,YAAY,EAAE,UAAU;IACxBC,iBAAiB,EAAE,eAAe;IAClCC,mBAAmB,EAAE,yIAAyI;IAC9JC,kBAAkB,EAAE,KAAK;IACzBC,sBAAsB,EAAE;EAC5B,CAAC;;EAED;EACA,SAASC,WAAWA,CAACC,GAAG,EAAE;IACtB,IAAI,CAACA,GAAG,EAAE,OAAO,EAAE;IACnB,IAAIC,OAAO,GAAGD,GAAG,CAACE,IAAI,CAAC,CAAC;IACxB,IAAI,eAAe,CAACrB,IAAI,CAACoB,OAAO,CAAC,IAAI,aAAa,CAACpB,IAAI,CAACoB,OAAO,CAAC,IAAI,mBAAmB,CAACpB,IAAI,CAACoB,OAAO,CAAC,EAAE;MACnG,OAAO,EAAE;IACb;IACA,OAAOD,GAAG;EACd;;EAEA;EACA,SAASG,kBAAkBA,CAACC,IAAI,EAAE;IAC9B,IAAIC,IAAI,GAAGC,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC;IACzCF,IAAI,CAACG,WAAW,GAAGJ,IAAI;IACvB,OAAOC,IAAI,CAACI,SAAS;EACzB;EAEA,IAAMC,QAAQ,GAAG,IAAIC,MAAM,CAACC,QAAQ,CAAC,CAAC;;EAEtC;EACAF,QAAQ,CAACG,IAAI,GAAG,UAAUC,IAAI,EAAE;IAC5B,IAAIC,IAAI,GAAGhB,WAAW,CAACe,IAAI,CAACC,IAAI,CAAC;IACjC,IAAI,CAACA,IAAI,EAAE,OAAOD,IAAI,CAACV,IAAI,IAAI,EAAE;IACjC,oBAAAY,MAAA,CAAmBD,IAAI,uDAAAC,MAAA,CAA+CF,IAAI,CAACV,IAAI;EACnF,CAAC;;EAED;EACAM,QAAQ,CAACO,IAAI,GAAG,UAAUH,IAAI,EAAE;IAC5B,IAAIG,IAAI,GAAGH,IAAI,CAACV,IAAI,IAAI,EAAE;IAC1B,IAAIc,IAAI,GAAG,CAACJ,IAAI,CAACI,IAAI,IAAI,EAAE,EAAEhB,IAAI,CAAC,CAAC;IACnC,IAAIiB,WAAW,GAAGF,IAAI;IAEtB,IAAI,OAAOG,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAIF,IAAI,IAAIE,IAAI,CAACC,WAAW,CAACH,IAAI,CAAC,EAAE;QAChC,IAAI;UACAC,WAAW,GAAGC,IAAI,CAACE,SAAS,CAACL,IAAI,EAAE;YAAEM,QAAQ,EAAEL;UAAK,CAAC,CAAC,CAAChF,KAAK;QAChE,CAAC,CAAC,OAAOsF,CAAC,EAAE,CAAE;MAClB,CAAC,MAAM;QACH,IAAI;UACAL,WAAW,GAAGC,IAAI,CAACK,aAAa,CAACR,IAAI,CAAC,CAAC/E,KAAK;QAChD,CAAC,CAAC,OAAOsF,CAAC,EAAE,CAAE;MAClB;IACJ,CAAC,MAAM;MACHL,WAAW,GAAGhB,kBAAkB,CAACc,IAAI,CAAC;IAC1C;IAEA,IAAIS,WAAW,GAAGR,IAAI,GAAGf,kBAAkB,CAACe,IAAI,CAAC,GAAG,MAAM;IAC1D,2IAAAF,MAAA,CAAmIU,WAAW,oKAAAV,MAAA,CAAwJE,IAAI,GAAG,YAAY,GAAGA,IAAI,GAAG,EAAE,SAAAF,MAAA,CAAKG,WAAW;EACzV,CAAC;;EAED;EACA;EACAT,QAAQ,CAACiB,KAAK,GAAG,UAAUb,IAAI,EAAE;IAC7B,IAAMc,GAAG,GAAG7B,WAAW,CAACe,IAAI,CAACC,IAAI,CAAC;IAClC,IAAI,CAACa,GAAG,EAAE,OAAO,EAAE;IACnB,IAAMC,GAAG,GAAGf,IAAI,CAACV,IAAI,IAAIpB,aAAa,CAACC,qBAAqB;IAC5D,IAAM6C,QAAQ,GAAG9C,aAAa,CAACE,sBAAsB;IACrD,4EAAA8B,MAAA,CACgBY,GAAG,eAAAZ,MAAA,CAAUa,GAAG,oDAAAb,MAAA,CAA6Cc,QAAQ,0FAAAd,MAAA,CAElEY,GAAG,sCAAAZ,MAAA,CAA+Ba,GAAG,iBAAAb,MAAA,CAAYhC,aAAa,CAACG,kBAAkB;EAKxG,CAAC;;EAED;EACA,IAAI4C,YAAY,GAAG,CAAC;;EAEpB;EACA,IAAIC,cAAc,GAAG,EAAE;;EAEvB;EACAlD,MAAM,CAACmD,cAAc,GAAGnD,MAAM,CAACmD,cAAc,IAAI,CAAC,CAAC;EAEnD,SAASC,eAAeA,CAACC,OAAO,EAAE;IAC9B,OAAO,oIAAAnB,MAAA,CACcmB,OAAO,iBAAa,WAC3B,yBACY,4GAAAnB,MAAA,CACgFmB,OAAO,iBAAAnB,MAAA,CAAYhC,aAAa,CAACI,kBAAkB,QAAI,mDAAA4B,MAAA,CAC7GhC,aAAa,CAACK,uBAAuB,CAAE,cAC1E,WACH;EAClB;;EAEA;EACA;EACAsB,MAAM,CAACyB,GAAG,CAAC;IACPC,UAAU,EAAE,CAAC;MACT1D,IAAI,EAAE,OAAO;MACb2D,KAAK,EAAE,OAAO;MACdC,KAAK,WAALA,KAAKA,CAACX,GAAG,EAAE;QACP,IAAMY,GAAG,GAAGZ,GAAG,CAACa,OAAO,CAAC,SAAS,CAAC;QAClC,OAAOD,GAAG,IAAI,CAAC,GAAGA,GAAG,GAAGE,SAAS;MACrC,CAAC;MACDC,SAAS,WAATA,SAASA,CAACf,GAAG,EAAE;QACX,IAAMgB,SAAS,GAAGC,qBAAqB,CAACjB,GAAG,CAAC;QAC5C,IAAI,CAACgB,SAAS,IAAIA,SAAS,CAACE,UAAU,KAAK,CAAC,EAAE;UAC1C,OAAOJ,SAAS;QACpB;QAEA,IAAMP,OAAO,iBAAAnB,MAAA,CAAiB,EAAEe,YAAY,CAAE;QAE9C,OAAO;UACHgB,IAAI,EAAE,OAAO;UACbC,GAAG,EAAEpB,GAAG,CAACqB,SAAS,CAAC,CAAC,EAAEL,SAAS,CAACM,QAAQ,CAAC;UACzCf,OAAO,EAAEA,OAAO;UAChBgB,IAAI,EAAEP,SAAS,CAACO;QACpB,CAAC;MACL,CAAC;MACDzC,QAAQ,WAARA,QAAQA,CAAC0C,KAAK,EAAE;QACZpB,cAAc,CAACqB,IAAI,CAAC;UAAElB,OAAO,EAAEiB,KAAK,CAACjB,OAAO;UAAEmB,MAAM,EAAEF,KAAK,CAACD;QAAK,CAAC,CAAC;QACnErE,MAAM,CAACmD,cAAc,CAACmB,KAAK,CAACjB,OAAO,CAAC,GAAGiB,KAAK,CAACD,IAAI;QACjD,OAAOjB,eAAe,CAACkB,KAAK,CAACjB,OAAO,CAAC;MACzC;IACJ,CAAC;EACL,CAAC,CAAC;;EAEF;EACA,SAASU,qBAAqBA,CAACzC,IAAI,EAAE;IACjC,IAAMgD,KAAK,GAAG,SAAS;IACvB,IAAMb,KAAK,GAAGnC,IAAI,CAACqC,OAAO,CAACW,KAAK,CAAC;IACjC,IAAIb,KAAK,GAAG,CAAC,EAAE;MACX,OAAO,IAAI;IACf;;IAEA;IACA,IAAMgB,SAAS,GAAGhB,KAAK,GAAGa,KAAK,CAACvH,MAAM;IACtC,IAAIhB,CAAC,GAAG0I,SAAS;IACjB,OAAO1I,CAAC,GAAGuF,IAAI,CAACvE,MAAM,KAAKuE,IAAI,CAACvF,CAAC,CAAC,KAAK,GAAG,IAAIuF,IAAI,CAACvF,CAAC,CAAC,KAAK,IAAI,IAAIuF,IAAI,CAACvF,CAAC,CAAC,KAAK,IAAI,IAAIuF,IAAI,CAACvF,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;MACrGA,CAAC,EAAE;IACP;IAEA,IAAIA,CAAC,IAAIuF,IAAI,CAACvE,MAAM,IAAIuE,IAAI,CAACvF,CAAC,CAAC,KAAK,GAAG,EAAE;MACrC,OAAO,IAAI;IACf;IAEA,IAAI2I,KAAK,GAAG,CAAC;IACb,IAAIC,QAAQ,GAAG,KAAK;IACpB,IAAIC,MAAM,GAAG,KAAK;IAElB,OAAO7I,CAAC,GAAGuF,IAAI,CAACvE,MAAM,EAAEhB,CAAC,EAAE,EAAE;MACzB,IAAM8I,EAAE,GAAGvD,IAAI,CAACvF,CAAC,CAAC;MAElB,IAAI4I,QAAQ,EAAE;QACV,IAAIC,MAAM,EAAE;UACRA,MAAM,GAAG,KAAK;UACd;QACJ;QACA,IAAIC,EAAE,KAAK,IAAI,EAAE;UACbD,MAAM,GAAG,IAAI;UACb;QACJ;QACA,IAAIC,EAAE,KAAK,GAAG,EAAE;UACZF,QAAQ,GAAG,KAAK;QACpB;QACA;MACJ;MAEA,IAAIE,EAAE,KAAK,GAAG,EAAE;QACZF,QAAQ,GAAG,IAAI;QACf;MACJ;MAEA,IAAIE,EAAE,KAAK,GAAG,EAAE;QACZH,KAAK,EAAE;MACX,CAAC,MAAM,IAAIG,EAAE,KAAK,GAAG,EAAE;QACnBH,KAAK,EAAE;QACP,IAAIA,KAAK,KAAK,CAAC,EAAE;UACb,IAAMI,OAAO,GAAG/I,CAAC;UACjB;UACA,IAAMgJ,iBAAiB,GAAGzD,IAAI,CAACqC,OAAO,CAAC,GAAG,EAAEmB,OAAO,GAAG,CAAC,CAAC;UACxD,IAAIC,iBAAiB,GAAG,CAAC,EAAE;YACvB,OAAO,IAAI;UACf;UAEA,IAAMV,IAAI,GAAG/C,IAAI,CAAC6C,SAAS,CAACM,SAAS,EAAEK,OAAO,GAAG,CAAC,CAAC,CAAC1D,IAAI,CAAC,CAAC;UAC1D,OAAO;YACH4C,UAAU,EAAEP,KAAK;YACjBW,QAAQ,EAAEW,iBAAiB,GAAG,CAAC;YAC/BV,IAAI,EAAEA;UACV,CAAC;QACL;MACJ;IACJ;IAEA,OAAO,IAAI;EACf;EAEA,SAASW,qBAAqBA,CAACC,OAAO,EAAE;IACpC,IAAI,CAACA,OAAO,IAAI,CAACA,OAAO,CAAC/B,cAAc,IAAI,CAAC+B,OAAO,CAAC/B,cAAc,CAACnG,MAAM,EAAE;MACvE;IACJ;;IAEA;IACA,IAAMmI,MAAM,GAAA7F,kBAAA,CAAO4F,OAAO,CAAC/B,cAAc,CAAC;IAC1C+B,OAAO,CAAC/B,cAAc,GAAG,EAAE;;IAE3B;IACA;IACAiC,qBAAqB,CAAC,YAAM;MAAA,IAAAC,SAAA,GAAAvG,0BAAA,CACRqG,MAAM;QAAAG,KAAA;MAAA;QAAtB,KAAAD,SAAA,CAAAjG,CAAA,MAAAkG,KAAA,GAAAD,SAAA,CAAAzJ,CAAA,IAAAwB,IAAA,GAAwB;UAAA,IAAbnB,CAAC,GAAAqJ,KAAA,CAAAjI,KAAA;UACR,IAAMkI,MAAM,GAAG9D,QAAQ,CAAC+D,cAAc,CAACvJ,CAAC,CAACqH,OAAO,CAAC;UACjD,IAAI,CAACiC,MAAM,EAAE;YACT;UACJ;UAEA,IAAI,OAAOE,KAAK,KAAK,WAAW,EAAE;YAC9BC,OAAO,CAACC,IAAI,CAAC,+LAA+L,CAAC;YAC7M;UACJ;;UAEA;UACA;UACA,IAAIJ,MAAM,CAACK,YAAY,KAAK,IAAI,EAAE;YAC9B3F,MAAM,CAACmD,cAAc,CAACnH,CAAC,CAACqH,OAAO,CAAC,GAAGrH,CAAC,CAACwI,MAAM;YAC3C;UACJ;UAEA,IAAI;YAAA,IAAAoB,YAAA,EAAAC,aAAA,EAAAC,qBAAA;YACA;YACA,IAAIR,MAAM,CAACS,cAAc,EAAE;cACvBT,MAAM,CAACS,cAAc,CAACC,OAAO,CAAC,CAAC;YACnC;YAEA,IAAMC,GAAG,GAAG,OAAOjK,CAAC,CAACwI,MAAM,KAAK,QAAQ,GAAG0B,IAAI,CAACC,KAAK,CAACnK,CAAC,CAACwI,MAAM,CAAC,GAAGxI,CAAC,CAACwI,MAAM;YAC1E,CAAAoB,YAAA,GAAAK,GAAG,CAACG,OAAO,cAAAR,YAAA,cAAAA,YAAA,GAAXK,GAAG,CAACG,OAAO,GAAK,CAAC,CAAC;YAClBH,GAAG,CAACG,OAAO,CAACC,UAAU,GAAG,IAAI;YAC7BJ,GAAG,CAACG,OAAO,CAACE,mBAAmB,GAAG,IAAI;YACtC,CAAAR,qBAAA,IAAAD,aAAA,GAAAI,GAAG,CAACG,OAAO,EAACG,WAAW,cAAAT,qBAAA,cAAAA,qBAAA,GAAvBD,aAAA,CAAYU,WAAW,GAAK,CAAC,GAAG,CAAC;YAEjCjB,MAAM,CAACS,cAAc,GAAG,IAAIP,KAAK,CAACF,MAAM,EAAEW,GAAG,CAAC;UAClD,CAAC,CAAC,OAAO1K,CAAC,EAAE;YACRkK,OAAO,CAACe,KAAK,CAAC,uBAAuB,EAAEjL,CAAC,CAAC;UAC7C;QACJ;MAAC,SAAAkL,GAAA;QAAArB,SAAA,CAAA7J,CAAA,CAAAkL,GAAA;MAAA;QAAArB,SAAA,CAAA7I,CAAA;MAAA;IACL,CAAC,CAAC;EACN;;EAEA;EACA;EACA;EACA,SAASmK,oBAAoBA,CAACC,OAAO,EAAE1B,OAAO,EAAE;IAC5C/B,cAAc,GAAG,EAAE;IACnB,IAAM0D,IAAI,GAAG/E,MAAM,CAACsE,KAAK,CAACQ,OAAO,EAAE;MAAE/E,QAAQ,EAARA;IAAS,CAAC,CAAC;IAChDqD,OAAO,CAAC/B,cAAc,GAAGA,cAAc,CAACnG,MAAM,GAAG,CAAC,GAAAsC,kBAAA,CAAO6D,cAAc,IAAI,EAAE;IAC7E,OAAO2D,SAAS,CAACC,QAAQ,CAACF,IAAI,EAAE;MAAEG,QAAQ,EAAE,CAAC,QAAQ,CAAC;MAAEC,QAAQ,EAAE,CAAC,QAAQ;IAAE,CAAC,CAAC;EACnF;EAEA,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,cAAc,EAAK;IAEnC,IAAM1C,MAAM,GAAGpI,MAAM,CAAC+K,MAAM,CAAC,CAAC,CAAC,EAAEjH,aAAa,EAAEgH,cAAc,CAAC;IAC/D;IACAhH,aAAa,GAAGsE,MAAM;IAEtB,IAAI,CAACA,MAAM,CAAC4C,aAAa,EAAE;MACvB3B,OAAO,CAACe,KAAK,CAAC,gCAAgC,CAAC;MAC/C;IACJ;IAEA,IAAI,CAAChC,MAAM,CAAC6C,kBAAkB,EAAE;MAC5B5B,OAAO,CAACe,KAAK,CAAC,qCAAqC,CAAC;MACpD;IACJ;IAEA,IAAI,CAAChC,MAAM,CAAC8C,4BAA4B,EAAE;MACtC7B,OAAO,CAACe,KAAK,CAAC,+CAA+C,CAAC;MAC9D;IACJ;IAEA,IAAI,CAAChC,MAAM,CAAC+C,oBAAoB,EAAE;MAC9B9B,OAAO,CAACe,KAAK,CAAC,uCAAuC,CAAC;MACtD;IACJ;IAEA,IAAI,CAAChC,MAAM,CAACgD,yBAAyB,EAAE;MACnC/B,OAAO,CAACe,KAAK,CAAC,4CAA4C,CAAC;MAC3D;IACJ;IAEA,IAAMiB,GAAG,GAAGC,GAAG,CAACC,SAAS,CAAC;MACtB3F,IAAI,WAAJA,IAAIA,CAAA,EAAG;QACH,OAAO;UACH4F,YAAY,EAAE,IAAI;UAClBC,aAAa,EAAE,IAAI;UACnBC,aAAa,EAAE,IAAI;UACnBC,WAAW,EAAE,IAAI;UACjBC,oBAAoB,EAAE,KAAK;UAC3BC,oBAAoB,EAAE,IAAI;UAC1BC,WAAW,EAAE,KAAK;UAClBC,gBAAgB,EAAE,KAAK;UACvBC,UAAU,EAAE,IAAI;UAChBC,MAAM,EAAE,IAAI;UACZC,QAAQ,EAAE,EAAE;UACZC,MAAM,EAAE,EAAE;UACVC,kBAAkB,EAAE,IAAIC,GAAG,CAAC,CAAC;UAC7BC,aAAa,EAAE,KAAK;UACpBC,mBAAmB,EAAE,IAAI;UACzBC,oBAAoB,EAAE,IAAI;UAC1BC,WAAW,EAAE,KAAK;UAClBC,aAAa,EAAE,IAAI;UACnBC,kBAAkB,EAAE,EAAE;UACtBC,SAAS,EAAE,IAAI;UACfC,mBAAmB,EAAEzE,MAAM,CAAC0E,QAAQ,KAAK,YAAY,IAAI1E,MAAM,CAAC0E,QAAQ,KAAK,cAAc;UAC3FC,mBAAmB,EAAE3E,MAAM,CAAC0E,QAAQ,KAAK,cAAc,IAAI,CAAC,CAAC1E,MAAM,CAAC2E,mBAAmB;UACvFC,YAAY,EAAE5E,MAAM,CAAC4E,YAAY,IAAI,IAAI;UACzCC,WAAW,EAAE,EAAE;UACfC,cAAc,EAAE,EAAE;UAClBC,cAAc,EAAE,KAAK;UACrBC,mBAAmB,EAAE,IAAI;UACzBC,eAAe,EAAE,IAAI;UACrBC,sBAAsB,EAAE,CAAC,CAAC;UAC1BC,aAAa,EAAE,CAAC,CAAC;UACjBC,aAAa,EAAE,mBAAmB,GAAGC,IAAI,CAACC,MAAM,CAAC,CAAC,CAACpK,QAAQ,CAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC;UACxEoK,uBAAuB,EAAEvF,MAAM,CAAC0E,QAAQ,KAAK,cAAc;UAC3Dc,kBAAkB,EAAE,IAAI;UACxBC,kBAAkB,EAAE,KAAK;UACzBC,aAAa,EAAE,EAAE;UACjBC,yBAAyB,EAAE,CAAC;QAChC,CAAC;MACL,CAAC;MACDC,QAAQ,EAAE;QACNC,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;UACjB,KAAK,IAAItO,CAAC,GAAG,IAAI,CAACuM,QAAQ,CAACvL,MAAM,GAAG,CAAC,EAAEhB,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;YAChD,IAAI,IAAI,CAACuM,QAAQ,CAACvM,CAAC,CAAC,CAACuO,IAAI,KAAK,WAAW,EAAE;cACvC,OAAOvO,CAAC;YACZ;UACJ;UACA,OAAO,CAAC,CAAC;QACb;MACJ,CAAC;MACDwO,OAAO,EAAE;QACLC,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;UACjB,IAAI,CAACrC,gBAAgB,GAAG,IAAI;QAChC,CAAC;QACKsC,eAAe,WAAfA,eAAeA,CAAA,EAAG;UAAA,IAAAC,KAAA;UAAA,OAAAlM,iBAAA,cAAAb,YAAA,GAAAE,CAAA,UAAA8M,QAAA;YAAA,IAAAC,EAAA;YAAA,OAAAjN,YAAA,GAAAC,CAAA,WAAAiN,QAAA;cAAA,kBAAAA,QAAA,CAAArO,CAAA,GAAAqO,QAAA,CAAAlP,CAAA;gBAAA;kBACpB+O,KAAI,CAACI,UAAU,GAAG,IAAIC,OAAO,CAACC,oBAAoB,CAAC,CAAC,CAC/CC,OAAO,CAACzG,MAAM,CAAC4C,aAAa,CAAC,CAC7B8D,sBAAsB,CAAC,CAAC,CACxBC,KAAK,CAAC,CAAC;;kBAEZ;kBACA;kBACAT,KAAI,CAACI,UAAU,CAACM,2BAA2B,GAAG,MAAM;kBACpDV,KAAI,CAACI,UAAU,CAACO,+BAA+B,GAAG,KAAK;kBAEvDX,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,iBAAiB,EAAE,UAACtJ,IAAI,EAAK;oBAAA,IAAAuJ,cAAA;oBAC5Cb,KAAI,CAACc,qBAAqB,CAACxJ,IAAI,CAACyJ,MAAM,EAAE,IAAI,CAAC;oBAC7Cf,KAAI,CAACpC,QAAQ,GAAG,EAAE,CAAC;oBACnB,IAAMoD,UAAU,GAAGlK,QAAQ,CAACmK,aAAa,CAAC,+HAA+H,CAAC;oBAC1K,IAAID,UAAU,IAAI1J,IAAI,CAAC4J,KAAK,EAAE;sBAC1BF,UAAU,CAACtO,KAAK,GAAG4E,IAAI,CAAC4J,KAAK;oBACjC;oBAEA,EAAAL,cAAA,GAACvJ,IAAI,CAACsG,QAAQ,cAAAiD,cAAA,cAAAA,cAAA,GAAI,EAAE,EAAEM,OAAO,CAAC,UAAAC,GAAG,EAAI;sBACjCpB,KAAI,CAACqB,UAAU,CAACD,GAAG,CAAC;sBAEpBpB,KAAI,CAACsB,SAAS,CAAC,YAAM;wBACjBhH,qBAAqB,CAAC8G,GAAG,CAAC;sBAC9B,CAAC,CAAC;oBACN,CAAC,CAAC;kBACN,CAAC,CAAC;kBAEFpB,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,eAAe,EAAE,UAACG,MAAM,EAAEG,KAAK,EAAK;oBACnD;oBACA;oBACA,IAAMK,WAAW,GAAGzK,QAAQ,CAACmK,aAAa,yDAAAzJ,MAAA,CAAwDuJ,MAAM,QAAI,CAAC;oBAC7G,IAAIQ,WAAW,EAAE;sBACbA,WAAW,CAACvK,WAAW,GAAGkK,KAAK,IAAIpH,MAAM,CAAC5D,YAAY;oBAC1D;oBAEA,IAAM8K,UAAU,GAAGlK,QAAQ,CAACmK,aAAa,CAAC,+HAA+H,CAAC;oBAC1K,IAAID,UAAU,IAAIE,KAAK,EAAE;sBACrBF,UAAU,CAACtO,KAAK,GAAGwO,KAAK;oBAC5B;oBAEAlB,KAAI,CAACwB,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC;kBACnD,CAAC,CAAC;kBAEFxB,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,cAAc,EAAE,UAAC9E,KAAK,EAAK;oBAC1Cf,OAAO,CAACe,KAAK,CAAC,iBAAiB,EAAEA,KAAK,CAAC;oBACvCkE,KAAI,CAACwB,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC;oBAEpD,IAAIxB,KAAI,CAAC7B,WAAW,EAAE;sBAClB6B,KAAI,CAACyB,aAAa,CAAC,CAAC;oBACxB;kBACJ,CAAC,CAAC;kBAEFzB,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,mBAAmB,EAAE,UAACG,MAAM,EAAEnK,IAAI,EAAE8K,OAAO,EAAK;oBAC/D,IAAI1B,KAAI,CAACT,kBAAkB,EAAE;sBACzB,IAAI,CAACmC,OAAO,IAAI9K,IAAI,EAAE;wBAClBoJ,KAAI,CAAC2B,8BAA8B,GAAG/K,IAAI;wBAC1C,IAAIgL,OAAO,GAAGhL,IAAI,CAACiL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;wBACrF,IAAI3F,IAAI,GAAG,mCAAmC,GAAG0F,OAAO,GAAG,MAAM;;wBAEjE;wBACA,IAAI,CAAC5B,KAAI,CAAC8B,2BAA2B,EAAE;0BACnC9B,KAAI,CAAC+B,eAAe,CAAC,CAAC;0BACtB/B,KAAI,CAAC8B,2BAA2B,GAAG;4BAC/BlC,IAAI,EAAE,MAAM;4BACZ3D,OAAO,EAAErF,IAAI;4BACboL,WAAW,EAAE9F,IAAI;4BACjB+F,SAAS,EAAE;0BACf,CAAC;0BACDjC,KAAI,CAACpC,QAAQ,CAAC/D,IAAI,CAACmG,KAAI,CAAC8B,2BAA2B,CAAC;wBACxD,CAAC,MAAM;0BACH9B,KAAI,CAAC8B,2BAA2B,CAAC7F,OAAO,GAAGrF,IAAI;0BAC/CoJ,KAAI,CAAC8B,2BAA2B,CAACE,WAAW,GAAG9F,IAAI;wBACvD;wBACA8D,KAAI,CAACkC,cAAc,CAAC,CAAC;sBACzB;sBACA;oBACJ;oBAEA,IAAItL,IAAI,IAAI,CAACoJ,KAAI,CAACmC,eAAe,EAAE;sBAC/BnC,KAAI,CAACnC,MAAM,GAAGmC,KAAI,CAAC3B,kBAAkB,GAAGzH,IAAI;sBAC5C,IAAIoJ,KAAI,CAAC9C,YAAY,EAAE;wBACnB8C,KAAI,CAAC9C,YAAY,CAACxK,KAAK,GAAGsN,KAAI,CAACnC,MAAM;wBACrCmC,KAAI,CAAC9C,YAAY,CAACkF,aAAa,CAAC,IAAIC,KAAK,CAAC,OAAO,CAAC,CAAC;sBACvD;oBACJ;kBACJ,CAAC,CAAC;kBAEFrC,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,gCAAgC,EAAE,UAACG,MAAM,EAAEnK,IAAI,EAAK;oBACnE,IAAIA,IAAI,EAAE;sBACNoJ,KAAI,CAACsC,SAAS,CAAC,CAAC;;sBAEhB;sBACA;sBACA,IAAItC,KAAI,CAACuC,6BAA6B,EAAE;wBACpC,IAAIC,MAAM,GAAGxC,KAAI,CAACpC,QAAQ,CAACoC,KAAI,CAACuC,6BAA6B,CAACE,KAAK,CAAC;wBACpE,IAAID,MAAM,EAAE;0BACRA,MAAM,CAAChF,WAAW,GAAG,KAAK;wBAC9B;wBACAwC,KAAI,CAACuC,6BAA6B,GAAG,IAAI;sBAC7C;;sBAEA;sBACA,IAAIvC,KAAI,CAAC8B,2BAA2B,EAAE;wBAClC,IAAIF,OAAO,GAAGhL,IAAI,CAACiL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;wBACrF7B,KAAI,CAAC8B,2BAA2B,CAAC7F,OAAO,GAAGrF,IAAI;wBAC/CoJ,KAAI,CAAC8B,2BAA2B,CAACE,WAAW,GAAG,KAAK,GAAGJ,OAAO,GAAG,MAAM;wBACvE5B,KAAI,CAAC8B,2BAA2B,CAACG,SAAS,GAAG,KAAK;wBAClDjC,KAAI,CAAC8B,2BAA2B,GAAG,IAAI;sBAC3C,CAAC,MAAM;wBACH9B,KAAI,CAACqB,UAAU,CAAC;0BACZzB,IAAI,EAAE,MAAM;0BACZ3D,OAAO,EAAErF;wBACb,CAAC,CAAC;sBACN;sBACAoJ,KAAI,CAACkC,cAAc,CAAC,CAAC;oBACzB;kBACJ,CAAC,CAAC;kBAEFlC,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,mCAAmC,EAAE,UAACG,MAAM,EAAE2B,SAAS,EAAE9I,KAAK,EAAE+I,UAAU,EAAEC,UAAU,EAAK;oBAC1G,IAAI,CAAC5C,KAAI,CAACuC,6BAA6B,EAAE;sBACrCvC,KAAI,CAACsC,SAAS,CAAC,CAAC;sBAChBtC,KAAI,CAAC6C,mBAAmB,CAAC,CAAC;;sBAE1B;sBACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG9C,KAAI,CAACpC,QAAQ,CAACvL,MAAM,EAAEyQ,CAAC,EAAE,EAAE;wBAC3C,IAAI9C,KAAI,CAACpC,QAAQ,CAACkF,CAAC,CAAC,CAACtF,WAAW,EAAE;0BAC9BwC,KAAI,CAACpC,QAAQ,CAACkF,CAAC,CAAC,CAACtF,WAAW,GAAG,KAAK;wBACxC;sBACJ;sBAEA,IAAIuF,QAAQ,GAAG/C,KAAI,CAACpC,QAAQ,CAACvL,MAAM;sBACnC,IAAI2Q,UAAU,GAAG;wBACbC,EAAE,EAAEP,SAAS;wBACb9C,IAAI,EAAE,WAAW;wBACjB3D,OAAO,EAAE,EAAE;wBACX+F,WAAW,EAAE,EAAE;wBACfxE,WAAW,EAAE,IAAI;wBACjBoF,UAAU,EAAE5C,KAAI,CAACkD,4BAA4B,CAACN,UAAU;sBAC5D,CAAC;sBACD5C,KAAI,CAACpC,QAAQ,CAAC/D,IAAI,CAACmJ,UAAU,CAAC;sBAC9BhD,KAAI,CAACuC,6BAA6B,GAAG;wBAAEE,KAAK,EAAEM,QAAQ;wBAAE9G,OAAO,EAAE;sBAAG,CAAC;oBACzE;oBAEA+D,KAAI,CAACuC,6BAA6B,CAACtG,OAAO,IAAIrC,KAAK;oBACnD,IAAIwH,GAAG,GAAGpB,KAAI,CAACpC,QAAQ,CAACoC,KAAI,CAACuC,6BAA6B,CAACE,KAAK,CAAC;oBACjE,IAAIrB,GAAG,EAAE;sBACL,IAAI,CAACA,GAAG,CAACwB,UAAU,EAAE;wBACjBxB,GAAG,CAACwB,UAAU,GAAG5C,KAAI,CAACkD,4BAA4B,CAACN,UAAU,CAAC;sBAClE;sBACAxB,GAAG,CAACnF,OAAO,GAAG+D,KAAI,CAACuC,6BAA6B,CAACtG,OAAO;sBACxDmF,GAAG,CAACY,WAAW,GAAGhG,oBAAoB,CAACoF,GAAG,CAACnF,OAAO,EAAEmF,GAAG,CAAC;sBACxDpB,KAAI,CAACsB,SAAS,CAAC,YAAM;wBACjBhH,qBAAqB,CAAC8G,GAAG,CAAC;wBAC1BpB,KAAI,CAACkC,cAAc,CAAC,CAAC;sBACzB,CAAC,CAAC;oBACN;kBACJ,CAAC,CAAC;kBAEFlC,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,sCAAsC,EAAE,UAACG,MAAM,EAAE2B,SAAS,EAAK;oBAC9E,IAAI1C,KAAI,CAACuC,6BAA6B,EAAE;sBACpC,IAAInB,GAAG,GAAGpB,KAAI,CAACpC,QAAQ,CAACoC,KAAI,CAACuC,6BAA6B,CAACE,KAAK,CAAC;sBACjE,IAAIrB,GAAG,EAAE;wBACLA,GAAG,CAAC5D,WAAW,GAAG,KAAK;sBAC3B;sBACAwC,KAAI,CAACuC,6BAA6B,GAAG,IAAI;oBAC7C;kBACJ,CAAC,CAAC;kBAEFvC,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,mBAAmB,EAAE,UAACG,MAAM,EAAEoC,WAAW,EAAEC,WAAW,EAAK;oBAC1E,IAAID,WAAW,EAAE;sBACb,IAAME,YAAY,GAAGC,IAAI,CAACH,WAAW,CAAC;sBACtC,IAAMI,KAAK,GAAG,IAAIC,UAAU,CAACH,YAAY,CAAChR,MAAM,CAAC;sBACjD,KAAK,IAAIhB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgS,YAAY,CAAChR,MAAM,EAAEhB,CAAC,EAAE,EAAE;wBAC1CkS,KAAK,CAAClS,CAAC,CAAC,GAAGgS,YAAY,CAACI,UAAU,CAACpS,CAAC,CAAC;sBACzC;sBACA2O,KAAI,CAACrB,WAAW,CAAC9E,IAAI,CAAC0J,KAAK,CAAC;oBAChC;kBACJ,CAAC,CAAC;kBAEFvD,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,sBAAsB,EAAE,UAACG,MAAM,EAAK;oBACnDf,KAAI,CAAC0D,kBAAkB,CAAC,CAAC;kBAC7B,CAAC,CAAC;kBAEF1D,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,gBAAgB,EAAE,UAACG,MAAM,EAAK;oBAC7C;oBACAf,KAAI,CAACpC,QAAQ,GAAG,EAAE;oBAClBoC,KAAI,CAAC2D,eAAe,CAAC,CAAC;;oBAEtB;oBACA,IAAMC,eAAe,GAAG9M,QAAQ,CAAC+D,cAAc,CAAC,iBAAiB,CAAC;oBAClE,IAAI+I,eAAe,EAAE;sBACjBA,eAAe,CAACC,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;oBAC3C;kBACJ,CAAC,CAAC;kBAEF9D,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,qBAAqB,EAAE,UAACmD,YAAY,EAAK;oBACxD/D,KAAI,CAACgE,mBAAmB,CAACD,YAAY,CAAC;kBAC1C,CAAC,CAAC;kBAEF/D,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,oBAAoB,EAAE,UAACmD,YAAY,EAAK;oBACvD/D,KAAI,CAACiE,kBAAkB,CAACF,YAAY,CAAC;kBACzC,CAAC,CAAC;kBAEF/D,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,oBAAoB,EAAE,UAACsD,gBAAgB,EAAK;oBAC3DlE,KAAI,CAACmE,kBAAkB,CAACD,gBAAgB,CAAC;kBAC7C,CAAC,CAAC;kBAEFlE,KAAI,CAACI,UAAU,CAACgE,cAAc,CAAC,YAAM;oBACjCrJ,OAAO,CAACC,IAAI,CAAC,0BAA0B,CAAC;kBAC5C,CAAC,CAAC;kBAEFgF,KAAI,CAACI,UAAU,CAACiE,aAAa,CAAC,YAAM;oBAChCtJ,OAAO,CAACuJ,IAAI,CAAC,uBAAuB,CAAC;oBACrCtE,KAAI,CAACuE,wBAAwB,CAAC,CAAC;kBACnC,CAAC,CAAC;kBAEFvE,KAAI,CAACI,UAAU,CAACoE,OAAO,CAAC,UAAC1I,KAAK,EAAK;oBAC/B,IAAIkE,KAAI,CAACvC,gBAAgB,EAAE;sBACvB;oBACJ;oBAEA,IAAI3B,KAAK,EAAE;sBACPf,OAAO,CAACC,IAAI,CAAC,uCAAuC,EAAEc,KAAK,CAACvB,OAAO,IAAIuB,KAAK,CAAC;oBACjF;kBACJ,CAAC,CAAC;kBAACqE,QAAA,CAAArO,CAAA;kBAAAqO,QAAA,CAAAlP,CAAA;kBAAA,OAGO+O,KAAI,CAACI,UAAU,CAACrH,KAAK,CAAC,CAAC;gBAAA;kBAAAoH,QAAA,CAAAlP,CAAA;kBAAA;gBAAA;kBAAAkP,QAAA,CAAArO,CAAA;kBAAAoO,EAAA,GAAAC,QAAA,CAAAlO,CAAA;kBAE7B8I,OAAO,CAACe,KAAK,CAAC,4BAA4B,EAAAoE,EAAK,CAAC;gBAAC;kBAAA,OAAAC,QAAA,CAAAjO,CAAA;cAAA;YAAA,GAAA+N,OAAA;UAAA;QAEzD,CAAC;QACDwE,kBAAkB,WAAlBA,kBAAkBA,CAAClK,OAAO,EAAE;UAAA,IAAAmK,MAAA;UACxB,IAAInK,OAAO,CAACqF,IAAI,KAAK,WAAW,EAAE;YAC9BrF,OAAO,CAACqI,UAAU,GAAG,IAAI,CAACM,4BAA4B,CAAC3I,OAAO,CAACqI,UAAU,CAAC;UAC9E;UAEA,IAAIrI,OAAO,CAAC0B,OAAO,IAAI,CAAC1B,OAAO,CAACyH,WAAW,EAAE;YACzCzH,OAAO,CAACyH,WAAW,GAAGhG,oBAAoB,CAACzB,OAAO,CAAC0B,OAAO,EAAE1B,OAAO,CAAC;UACxE;UACA,IAAI,CAACoK,SAAS,CAAC,IAAIC,WAAW,CAAC,8BAA8B,EAAE;YAAEC,MAAM,EAAE;cAAEtK,OAAO,EAAEA;YAAQ;UAAE,CAAC,CAAC,CAAC;UACjG,IAAI,CAACqD,QAAQ,CAAC/D,IAAI,CAACU,OAAO,CAAC;UAE3B,IAAI,CAAC+G,SAAS,CAAC,YAAM;YACjBoD,MAAI,CAACC,SAAS,CAAC,IAAIC,WAAW,CAAC,6BAA6B,EAAE;cAAEC,MAAM,EAAE;gBAAEtK,OAAO,EAAEA;cAAQ;YAAE,CAAC,CAAC,CAAC;UACpG,CAAC,CAAC;QACN,CAAC;QACD8G,UAAU,WAAVA,UAAUA,CAAC9G,OAAO,EAAE;UAAA,IAAAuK,MAAA;UAChB,IAAIvK,OAAO,CAAC0B,OAAO,EAAE;YACjB,IAAI8I,gBAAgB,GAAGxK,OAAO,CAAC0B,OAAO,CAACvF,IAAI,CAAC,CAAC;YAE7C,IAAI6D,OAAO,CAACyK,UAAU,IAAIC,OAAA,CAAO1K,OAAO,CAACyK,UAAU,MAAK,QAAQ,IAAItT,MAAM,CAACwT,IAAI,CAAC3K,OAAO,CAACyK,UAAU,CAAC,CAAC3S,MAAM,EAAE;cAExG;cACA,IAAM8S,SAAS,GAAGzT,MAAM,CAAC0T,OAAO,CAAC7K,OAAO,CAACyK,UAAU,CAAC,CAACK,MAAM,CAAC,UAAAC,IAAA;gBAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA;kBAAEG,GAAG,GAAAF,KAAA;gBAAA,OAAMR,gBAAgB,CAACW,QAAQ,CAACD,GAAG,CAAC;cAAA,EAAC;cAEtG,IAAIN,SAAS,CAAC9S,MAAM,EAAE;gBAClB;gBACA8S,SAAS,CAACQ,IAAI,CAAC,UAAAC,KAAA,EAAAC,KAAA;kBAAA,IAAAC,KAAA,GAAAN,cAAA,CAAAI,KAAA;oBAAI1T,CAAC,GAAA4T,KAAA;kBAAA,IAAAC,KAAA,GAAAP,cAAA,CAAAK,KAAA;oBAAMG,CAAC,GAAAD,KAAA;kBAAA,OAAM7T,CAAC,CAACuQ,KAAK,GAAGuD,CAAC,CAACvD,KAAK;gBAAA,EAAC;;gBAEnD;gBACA,IAAIwD,YAAY,GAAG,CAAC;gBAAC,IAAAC,UAAA,GAAA/R,0BAAA,CACMgR,SAAS;kBAAAgB,MAAA;gBAAA;kBAApC,KAAAD,UAAA,CAAAzR,CAAA,MAAA0R,MAAA,GAAAD,UAAA,CAAAjV,CAAA,IAAAwB,IAAA,GAAsC;oBAAA,IAAA2T,YAAA,GAAAZ,cAAA,CAAAW,MAAA,CAAAzT,KAAA;sBAA1B+S,GAAG,GAAAW,YAAA;sBAAE1T,KAAK,GAAA0T,YAAA;oBAClB,IAAM/I,WAAW,aAAA7F,MAAA,CAAa9E,KAAK,CAAC+P,KAAK,OAAI;oBAC7CsC,gBAAgB,GAAGA,gBAAgB,CAACsB,UAAU,CAACZ,GAAG,EAAEpI,WAAW,CAAC;oBAChE3K,KAAK,CAAC4T,aAAa,GAAGL,YAAY,EAAE;oBACpCvT,KAAK,CAAC6T,YAAY,GAAGlJ,WAAW;kBACpC;;kBAEA;gBAAA,SAAAtB,GAAA;kBAAAmK,UAAA,CAAArV,CAAA,CAAAkL,GAAA;gBAAA;kBAAAmK,UAAA,CAAArU,CAAA;gBAAA;gBAAA,IAAA2U,UAAA,GAAArS,0BAAA,CACwBgR,SAAS;kBAAAsB,MAAA;gBAAA;kBAAjC,KAAAD,UAAA,CAAA/R,CAAA,MAAAgS,MAAA,GAAAD,UAAA,CAAAvV,CAAA,IAAAwB,IAAA,GAAmC;oBAAA,IAAAiU,YAAA,GAAAlB,cAAA,CAAAiB,MAAA,CAAA/T,KAAA;sBAArBA,MAAK,GAAAgU,YAAA;oBACf3B,gBAAgB,GAAGA,gBAAgB,CAACsB,UAAU,CAAC3T,MAAK,CAAC6T,YAAY,kBAAA/O,MAAA,CAAkB9E,MAAK,CAAC4T,aAAa,oBAAiB,CAAC;kBAC5H;gBAAC,SAAAvK,GAAA;kBAAAyK,UAAA,CAAA3V,CAAA,CAAAkL,GAAA;gBAAA;kBAAAyK,UAAA,CAAA3U,CAAA;gBAAA;gBAEDkT,gBAAgB,GAAGA,gBAAgB,CAACsB,UAAU,CAAC,sBAAsB,EAAE,kCAAkC,CAAC;gBAE1GtB,gBAAgB,IAAI,UAAU;gBAAC,IAAA4B,UAAA,GAAAxS,0BAAA,CAEJgR,SAAS;kBAAAyB,MAAA;gBAAA;kBAApC,KAAAD,UAAA,CAAAlS,CAAA,MAAAmS,MAAA,GAAAD,UAAA,CAAA1V,CAAA,IAAAwB,IAAA,GAAsC;oBAAA,IAAAoU,YAAA,GAAArB,cAAA,CAAAoB,MAAA,CAAAlU,KAAA;sBAA1B+S,IAAG,GAAAoB,YAAA;sBAAEnU,OAAK,GAAAmU,YAAA;oBAClB,IAAMC,KAAK,GAAGpU,OAAK,CAACkE,IAAI,YAAAY,MAAA,CAAY9E,OAAK,CAAC+P,KAAK,MAAG;oBAClDsC,gBAAgB,IAAIrS,OAAK,CAAC2E,IAAI,QAAAG,MAAA,CACnB9E,OAAK,CAAC4T,aAAa,WAAA9O,MAAA,CAAQsP,KAAK,QAAAtP,MAAA,CAAK9E,OAAK,CAAC2E,IAAI,kBAAAG,MAAA,CAC/C9E,OAAK,CAAC4T,aAAa,UAAA9O,MAAA,CAAOsP,KAAK,SAAM;kBACpD;gBAAC,SAAA/K,GAAA;kBAAA4K,UAAA,CAAA9V,CAAA,CAAAkL,GAAA;gBAAA;kBAAA4K,UAAA,CAAA9U,CAAA;gBAAA;cACL;YACJ;YAEA0I,OAAO,CAAC0B,OAAO,GAAG8I,gBAAgB;YAClCxK,OAAO,CAACyH,WAAW,GAAGhG,oBAAoB,CAAC+I,gBAAgB,EAAExK,OAAO,CAAC;UACzE;UAEA,IAAI,CAACkK,kBAAkB,CAAClK,OAAO,CAAC;UAChC,IAAI,CAACwH,eAAe,CAAC,CAAC;UAEtB,IAAI,CAACT,SAAS,CAAC,YAAM;YACjB;YACAhH,qBAAqB,CAACC,OAAO,CAAC;YAC9BuK,MAAI,CAAC5C,cAAc,CAAC,CAAC;UACzB,CAAC,CAAC;QACN,CAAC;QACDH,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAAC1E,WAAW,EAAE;YAClB,IAAI,CAACA,WAAW,CAACwG,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;UAC5C;UACA,IAAI,CAACvG,oBAAoB,GAAG,KAAK;QACrC,CAAC;QACDoG,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAACtG,WAAW,EAAE;YAClB,IAAI,CAACA,WAAW,CAACwG,SAAS,CAACkD,MAAM,CAAC,QAAQ,CAAC;UAC/C;UACA,IAAI,CAACxJ,oBAAoB,GAAG,IAAI;QACpC,CAAC;QACDoH,SAAS,WAATA,SAASA,CAACqC,KAAK,EAAE;UACblQ,QAAQ,CAACsL,aAAa,CAAC4E,KAAK,CAAC;QACjC,CAAC;QACD9D,4BAA4B,WAA5BA,4BAA4BA,CAACN,UAAU,EAAE;UACrC,IAAI,CAACA,UAAU,EAAE;YACb,OAAO,IAAI;UACf;UAEA,IAAIkE,KAAK,GAAG,OAAOlE,UAAU,CAACkE,KAAK,KAAK,QAAQ,GAAGlE,UAAU,CAACkE,KAAK,CAACpQ,IAAI,CAAC,CAAC,GAAG,EAAE;UAC/E,IAAIuQ,IAAI,GAAG,OAAOrE,UAAU,CAACqE,IAAI,KAAK,QAAQ,GAAGrE,UAAU,CAACqE,IAAI,CAACvQ,IAAI,CAAC,CAAC,GAAG,EAAE;UAC5E,IAAIwQ,QAAQ,GAAG,OAAOtE,UAAU,CAACsE,QAAQ,KAAK,QAAQ,GAAGtE,UAAU,CAACsE,QAAQ,CAACxQ,IAAI,CAAC,CAAC,GAAG,EAAE;UACxF,IAAIyQ,yBAAyB,GAAG,CAAC,CAACvE,UAAU,CAACuE,yBAAyB;UAEtE,IAAI,CAACL,KAAK,IAAI,CAACG,IAAI,IAAI,CAACC,QAAQ,IAAI,CAACC,yBAAyB,EAAE;YAC5D,OAAO,IAAI;UACf;UAEA,OAAO;YACHL,KAAK,EAAEA,KAAK;YACZG,IAAI,EAAEA,IAAI;YACVC,QAAQ,EAAEA,QAAQ;YAClBC,yBAAyB,EAAEA;UAC/B,CAAC;QACL,CAAC;QACDC,iBAAiB,WAAjBA,iBAAiBA,CAAC7M,OAAO,EAAE;UACvB,IAAIqI,UAAU,GAAGrI,OAAO,GAAG,IAAI,CAAC2I,4BAA4B,CAAC3I,OAAO,CAACqI,UAAU,CAAC,GAAG,IAAI;UACvF,OAAOA,UAAU,IAAIA,UAAU,CAACkE,KAAK,GAAGlE,UAAU,CAACkE,KAAK,GAAGtR,aAAa,CAACO,cAAc;QAC3F,CAAC;QACDsR,uBAAuB,WAAvBA,uBAAuBA,CAAC9M,OAAO,EAAE;UAC7B,IAAIqI,UAAU,GAAGrI,OAAO,GAAG,IAAI,CAAC2I,4BAA4B,CAAC3I,OAAO,CAACqI,UAAU,CAAC,GAAG,IAAI;UACvF,IAAI0E,OAAO,GAAG,CAAC,kBAAkB,CAAC;UAElC,IAAI1E,UAAU,IAAIA,UAAU,CAACsE,QAAQ,EAAE;YACnCI,OAAO,CAACzN,IAAI,CAAC+I,UAAU,CAACsE,QAAQ,CAAC;UACrC,CAAC,MAAM;YACHI,OAAO,CAACzN,IAAI,CAAC,4BAA4B,CAAC;UAC9C;UAEA,OAAOyN,OAAO;QAClB,CAAC;QACDC,uBAAuB,WAAvBA,uBAAuBA,CAAChN,OAAO,EAAEkI,KAAK,EAAE;UACpC,IAAIG,UAAU,GAAGrI,OAAO,GAAG,IAAI,CAAC2I,4BAA4B,CAAC3I,OAAO,CAACqI,UAAU,CAAC,GAAG,IAAI;UACvF,OAAO,CAAC,IAAI,CAAC4E,0BAA0B,CAACjN,OAAO,EAAEkI,KAAK,CAAC,GAAG,mBAAmB,GAAG,aAAa,EAAEG,UAAU,IAAIA,UAAU,CAACsE,QAAQ,GAAGtE,UAAU,CAACsE,QAAQ,GAAG,EAAE,CAAC;QAChK,CAAC;QACDO,gBAAgB,WAAhBA,gBAAgBA,CAAClN,OAAO,EAAE;UACtB,IAAIqI,UAAU,GAAGrI,OAAO,GAAG,IAAI,CAAC2I,4BAA4B,CAAC3I,OAAO,CAACqI,UAAU,CAAC,GAAG,IAAI;UACvF,OAAOA,UAAU,IAAIA,UAAU,CAACqE,IAAI,GAAGrE,UAAU,CAACqE,IAAI,GAAG,aAAa;QAC1E,CAAC;QACDO,0BAA0B,WAA1BA,0BAA0BA,CAACjN,OAAO,EAAEkI,KAAK,EAAE;UACvC,IAAIG,UAAU,GAAGrI,OAAO,GAAG,IAAI,CAAC2I,4BAA4B,CAAC3I,OAAO,CAACqI,UAAU,CAAC,GAAG,IAAI;UACvF,OAAO,CAAC,CAACrI,OAAO,IACZA,OAAO,CAACiD,WAAW,IACnBiF,KAAK,KAAK,IAAI,CAAC9C,kBAAkB,IACjC,EAAEiD,UAAU,IAAIA,UAAU,CAACuE,yBAAyB,CAAC;QAC7D,CAAC;QACDO,WAAW,WAAXA,WAAWA,CAACnN,OAAO,EAAE;UACjB,OAAOA,OAAO,CAACqF,IAAI,KAAK,WAAW;QACvC,CAAC;QACK+H,WAAW,WAAXA,WAAWA,CAAA,EAAG;UAAA,IAAAC,MAAA;UAAA,OAAA9T,iBAAA,cAAAb,YAAA,GAAAE,CAAA,UAAA0U,SAAA;YAAA,IAAAC,aAAA,EAAAlE,eAAA;YAAA,OAAA3Q,YAAA,GAAAC,CAAA,WAAA6U,SAAA;cAAA,kBAAAA,SAAA,CAAA9W,CAAA;gBAAA;kBACZ6W,aAAa,GAAGF,MAAI,CAAC/J,MAAM,CAACnH,IAAI,CAAC,CAAC;kBAAA,IAEjCoR,aAAa;oBAAAC,SAAA,CAAA9W,CAAA;oBAAA;kBAAA;kBAAA,OAAA8W,SAAA,CAAA7V,CAAA;gBAAA;kBAIlB;kBACA,IAAI0V,MAAI,CAACzJ,WAAW,EAAE;oBAClByJ,MAAI,CAACnG,aAAa,CAAC,CAAC;kBACxB;;kBAEA;kBACAmG,MAAI,CAACzF,eAAe,GAAG,IAAI;;kBAE3B;kBACA;kBAAA4F,SAAA,CAAA9W,CAAA;kBAAA,OACM2W,MAAI,CAACI,gBAAgB,CAAC,CAAC;gBAAA;kBAE7BJ,MAAI,CAACvG,UAAU,CAAC;oBACZzB,IAAI,EAAE,MAAM;oBACZ3D,OAAO,EAAE6L;kBACb,CAAC,CAAC;;kBAEF;kBACMlE,eAAe,GAAG9M,QAAQ,CAAC+D,cAAc,CAAC,iBAAiB,CAAC;kBAClE,IAAI+I,eAAe,EAAE;oBACjBA,eAAe,CAACC,SAAS,CAACkD,MAAM,CAAC,QAAQ,CAAC;kBAC9C;kBAEAa,MAAI,CAACK,aAAa,CAACH,aAAa,CAAC;kBACjCF,MAAI,CAAC1K,YAAY,CAACxK,KAAK,GAAG,EAAE;kBAC5BkV,MAAI,CAAC/J,MAAM,GAAG,EAAE;gBAAC;kBAAA,OAAAkK,SAAA,CAAA7V,CAAA;cAAA;YAAA,GAAA2V,QAAA;UAAA;QACrB,CAAC;QACDI,aAAa,WAAbA,aAAaA,CAACH,aAAa,EAAE;UAAA,IAAAI,MAAA;UACzB,IAAI,IAAI,CAACvK,MAAM,EAAE;YACb,IAAI,CAACA,MAAM,CAACwK,OAAO,CAAC,CAAC;YACrB,IAAI,CAACxK,MAAM,GAAG,IAAI;UACtB;UAEA,IAAI,CAACyK,gBAAgB,CAAC,CAAC;UACvB,IAAI,CAACC,mBAAmB,CAAC,CAAC;UAC1B,IAAI,CAAC3K,UAAU,GAAG,IAAI;UAEtB,IAAIzB,OAAO,GAAG,EAAE;UAChB,IAAI+I,UAAU,GAAG,CAAC,CAAC;UACnB,IAAIsD,cAAc,GAAG,IAAI;UAEzB,IAAIC,YAAY,GAAG,IAAI,CAAC3K,QAAQ,CAACvL,MAAM;UACvC,IAAImW,aAAa,GAAG,IAAI,CAACC,SAAS,CAAC,CAAC;UAEpC,IAAI,CAAC9K,MAAM,GAAG,IAAI,CAACyC,UAAU,CAACzC,MAAM,CAAC,aAAa,EAAE6K,aAAa,EAAEV,aAAa,CAAC,CAC5EY,SAAS,CAAC;YACPhU,IAAI,EAAE,SAANA,IAAIA,CAAGiU,KAAK,EAAK;cACb,IAAIpO,OAAO,GAAG2N,MAAI,CAACtK,QAAQ,CAAC2K,YAAY,CAAC;cAEzC,IAAI,CAAChO,OAAO,EAAE;gBACV,IAAIoO,KAAK,CAACC,SAAS,IAAI,CAACJ,aAAa,EAAE;kBACnCN,MAAI,CAACW,SAAS,CAACF,KAAK,CAACC,SAAS,CAAC;gBACnC;gBAEAV,MAAI,CAACrF,mBAAmB,CAAC,CAAC;gBAC1B0F,YAAY,GAAGL,MAAI,CAACtK,QAAQ,CAACvL,MAAM;gBACnC,IAAI2Q,UAAU,GAAG;kBACbpD,IAAI,EAAE,WAAW;kBACjB3D,OAAO,EAAE,EAAE;kBACX+F,WAAW,EAAE,EAAE;kBACfxE,WAAW,EAAE;gBACjB,CAAC;gBAED0K,MAAI,CAACtK,QAAQ,CAAC/D,IAAI,CAACmJ,UAAU,CAAC;gBAC9BzI,OAAO,GAAGyI,UAAU;cACxB;cAEA,IAAI2F,KAAK,CAAC3D,UAAU,IAAIC,OAAA,CAAO0D,KAAK,CAAC3D,UAAU,MAAK,QAAQ,IAAItT,MAAM,CAACwT,IAAI,CAACyD,KAAK,CAAC3D,UAAU,CAAC,CAAC3S,MAAM,EAAE;gBAClG,SAAAyW,EAAA,MAAAC,eAAA,GAA2BrX,MAAM,CAAC0T,OAAO,CAACuD,KAAK,CAAC3D,UAAU,CAAC,EAAA8D,EAAA,GAAAC,eAAA,CAAA1W,MAAA,EAAAyW,EAAA,IAAE;kBAAxD,IAAAE,kBAAA,GAAAxD,cAAA,CAAAuD,eAAA,CAAAD,EAAA;oBAAOrD,GAAG,GAAAuD,kBAAA;oBAAEtW,KAAK,GAAAsW,kBAAA;kBAClBhE,UAAU,CAACS,GAAG,CAAC,GAAG/S,KAAK;gBAC3B;cACJ;cAEA,IAAIiW,KAAK,CAAC1M,OAAO,EAAE;gBACf;gBACA;gBACA,IAAI0M,KAAK,CAAChG,UAAU,IAAI2F,cAAc,IAAIK,KAAK,CAAChG,UAAU,KAAK2F,cAAc,EAAE;kBAC3ErM,OAAO,IAAI,MAAM;gBACrB;gBAEA,IAAI0M,KAAK,CAAChG,UAAU,EAAE;kBAClB2F,cAAc,GAAGK,KAAK,CAAChG,UAAU;gBACrC;gBAEA,IAAIoC,gBAAgB,GAAG4D,KAAK,CAAC1M,OAAO;gBAEpC,SAAAgN,GAAA,MAAAC,gBAAA,GAA2BxX,MAAM,CAAC0T,OAAO,CAACJ,UAAU,CAAC,EAAAiE,GAAA,GAAAC,gBAAA,CAAA7W,MAAA,EAAA4W,GAAA,IAAE;kBAAlD,IAAAE,mBAAA,GAAA3D,cAAA,CAAA0D,gBAAA,CAAAD,GAAA;oBAAOxD,KAAG,GAAA0D,mBAAA;oBAAEzW,OAAK,GAAAyW,mBAAA;kBAClBpE,gBAAgB,GAAGA,gBAAgB,CAACsB,UAAU,CAACZ,KAAG,kBAAAjO,MAAA,CAAkB9E,OAAK,CAAC+P,KAAK,oBAAiB,CAAC;gBACrG;gBAEAxG,OAAO,IAAI8I,gBAAgB,CAACsB,UAAU,CAAC,sBAAsB,EAAE,kCAAkC,CAAC;cACtG;cAEA9L,OAAO,CAAC0B,OAAO,GAAGA,OAAO;cAEzB1B,OAAO,CAACyH,WAAW,GAAGhG,oBAAoB,CAACC,OAAO,EAAE1B,OAAO,CAAC;cAE5D2N,MAAI,CAACtK,QAAQ,CAAC2K,YAAY,CAAC,GAAGhO,OAAO;cAErC2N,MAAI,CAAC5G,SAAS,CAAC,YAAM;gBACjBhH,qBAAqB,CAACC,OAAO,CAAC;gBAC9B2N,MAAI,CAAChG,cAAc,CAAC,CAAC;cACzB,CAAC,CAAC;YACN,CAAC;YACDkH,QAAQ,EAAE,SAAVA,QAAQA,CAAA,EAAQ;cAAA,IAAAC,aAAA;cACZnB,MAAI,CAACoB,iBAAiB,CAACtE,UAAU,EAAEuD,YAAY,CAAC;cAChDL,MAAI,CAACqB,iBAAiB,CAAC,CAAC;cAExB,IAAInI,GAAG,GAAG8G,MAAI,CAACtK,QAAQ,CAAC2K,YAAY,CAAC;cACrC,IAAInH,GAAG,EAAE;gBACLA,GAAG,CAAC5D,WAAW,GAAG,KAAK;cAC3B;cAEA,IAAI,CAAC4D,GAAG,IAAI,CAACA,GAAG,CAACnF,OAAO,EAAE;gBACtB;gBACAiM,MAAI,CAACrF,mBAAmB,CAAC,CAAC;cAC9B;;cAEA;cACA,IAAIqF,MAAI,CAAC3I,kBAAkB,IAAI2I,MAAI,CAACzJ,mBAAmB,IAAI2C,GAAG,IAAIA,GAAG,CAACnF,OAAO,EAAE;gBAC3EiM,MAAI,CAACsB,gBAAgB,CAACpI,GAAG,CAACnF,OAAO,CAAC;cACtC;cAEA,CAAAoN,aAAA,GAAAnB,MAAI,CAACvK,MAAM,cAAA0L,aAAA,eAAXA,aAAA,CAAalB,OAAO,CAAC,CAAC;cACtBD,MAAI,CAACvK,MAAM,GAAG,IAAI;YACtB,CAAC;YACD7B,KAAK,EAAE,SAAPA,KAAKA,CAAGC,GAAG,EAAK;cAAA,IAAA0N,cAAA;cACZvB,MAAI,CAACoB,iBAAiB,CAACtE,UAAU,EAAEuD,YAAY,CAAC;cAChDL,MAAI,CAACqB,iBAAiB,CAAC,CAAC;cAExB,IAAInI,GAAG,GAAG8G,MAAI,CAACtK,QAAQ,CAAC2K,YAAY,CAAC;cACrC,IAAInH,GAAG,EAAE;gBACLA,GAAG,CAAC5D,WAAW,GAAG,KAAK;cAC3B;cAEA0K,MAAI,CAACrF,mBAAmB,CAAC,CAAC;cAE1B,IAAI,CAACqF,MAAI,CAACzK,gBAAgB,EAAE;gBACxByK,MAAI,CAAC7G,UAAU,CAAC6G,MAAI,CAACwB,qBAAqB,CAAC,CAAC,CAAC;cACjD;cAEA,CAAAD,cAAA,GAAAvB,MAAI,CAACvK,MAAM,cAAA8L,cAAA,eAAXA,cAAA,CAAatB,OAAO,CAAC,CAAC;cACtBD,MAAI,CAACvK,MAAM,GAAG,IAAI;cAElB5C,OAAO,CAACe,KAAK,CAAC,eAAe,EAAEC,GAAG,CAAC;YACvC;UACJ,CAAC,CAAC;QACV,CAAC;QACD2N,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UACpB,OAAO;YACH9J,IAAI,EAAE,WAAW;YACjB3D,OAAO,EAAE,mGAAmG;YAC5G+F,WAAW,EAAE;UACjB,CAAC;QACL,CAAC;QACDsH,iBAAiB,WAAjBA,iBAAiBA,CAACtE,UAAU,EAAEuD,YAAY,EAAE;UAAA,IAAAoB,MAAA;UACxC,IAAIjY,MAAM,CAACwT,IAAI,CAACF,UAAU,CAAC,CAAC3S,MAAM,EAAE;YAChC,IAAIkI,OAAO,GAAG,IAAI,CAACqD,QAAQ,CAAC2K,YAAY,CAAC;YACzC,IAAMtM,OAAO,GAAG1B,OAAO,CAAC0B,OAAO,IAAI,EAAE;;YAErC;YACA;YACA,IAAMkJ,SAAS,GAAGzT,MAAM,CAAC0T,OAAO,CAACJ,UAAU,CAAC,CAACK,MAAM,CAAC,UAAAuE,KAAA;cAAA,IAAAC,KAAA,GAAArE,cAAA,CAAAoE,KAAA;gBAAEnE,GAAG,GAAAoE,KAAA;gBAAEnX,KAAK,GAAAmX,KAAA;cAAA,OAC5D5N,OAAO,CAACyJ,QAAQ,CAACD,GAAG,CAAC,IAAIxJ,OAAO,CAACyJ,QAAQ,iBAAAlO,MAAA,CAAiB9E,KAAK,CAAC+P,KAAK,oBAAiB,CAAC;YAAA,CAC3F,CAAC;YAED,IAAI,CAAC0C,SAAS,CAAC9S,MAAM,EAAE;cACnB;YACJ;;YAEA;YACA8S,SAAS,CAACQ,IAAI,CAAC,UAAAmE,KAAA,EAAAC,KAAA;cAAA,IAAAC,KAAA,GAAAxE,cAAA,CAAAsE,KAAA;gBAAI5X,CAAC,GAAA8X,KAAA;cAAA,IAAAC,MAAA,GAAAzE,cAAA,CAAAuE,KAAA;gBAAM/D,CAAC,GAAAiE,MAAA;cAAA,OAAM/X,CAAC,CAACuQ,KAAK,GAAGuD,CAAC,CAACvD,KAAK;YAAA,EAAC;;YAEnD;YACA,IAAIyH,SAAS,GAAGjO,OAAO,CAACvF,IAAI,CAAC,CAAC;YAC9B,IAAIuP,YAAY,GAAG,CAAC;YAAC,IAAAkE,UAAA,GAAAhW,0BAAA,CACMgR,SAAS;cAAAiF,MAAA;YAAA;cAApC,KAAAD,UAAA,CAAA1V,CAAA,MAAA2V,MAAA,GAAAD,UAAA,CAAAlZ,CAAA,IAAAwB,IAAA,GAAsC;gBAAA,IAAA4X,YAAA,GAAA7E,cAAA,CAAA4E,MAAA,CAAA1X,KAAA;kBAA1B+S,GAAG,GAAA4E,YAAA;kBAAE3X,KAAK,GAAA2X,YAAA;gBAClB,IAAMhN,WAAW,aAAA7F,MAAA,CAAa9E,KAAK,CAAC+P,KAAK,OAAI;gBAC7CyH,SAAS,GAAGA,SAAS,CAAC7D,UAAU,CAACZ,GAAG,EAAEpI,WAAW,CAAC;gBAClD6M,SAAS,GAAGA,SAAS,CAAC7D,UAAU,iBAAA7O,MAAA,CAAiB9E,KAAK,CAAC+P,KAAK,sBAAmBpF,WAAW,CAAC;gBAC3F3K,KAAK,CAAC4T,aAAa,GAAGL,YAAY,EAAE;gBACpCvT,KAAK,CAAC6T,YAAY,GAAGlJ,WAAW;cACpC;;cAEA;YAAA,SAAAtB,GAAA;cAAAoO,UAAA,CAAAtZ,CAAA,CAAAkL,GAAA;YAAA;cAAAoO,UAAA,CAAAtY,CAAA;YAAA;YAAA,IAAAyY,UAAA,GAAAnW,0BAAA,CACwBgR,SAAS;cAAAoF,MAAA;YAAA;cAAjC,KAAAD,UAAA,CAAA7V,CAAA,MAAA8V,MAAA,GAAAD,UAAA,CAAArZ,CAAA,IAAAwB,IAAA,GAAmC;gBAAA,IAAA+X,YAAA,GAAAhF,cAAA,CAAA+E,MAAA,CAAA7X,KAAA;kBAArBA,OAAK,GAAA8X,YAAA;gBACfN,SAAS,GAAGA,SAAS,CAAC7D,UAAU,CAAC3T,OAAK,CAAC6T,YAAY,kBAAA/O,MAAA,CAAkB9E,OAAK,CAAC4T,aAAa,oBAAiB,CAAC;cAC9G;YAAC,SAAAvK,GAAA;cAAAuO,UAAA,CAAAzZ,CAAA,CAAAkL,GAAA;YAAA;cAAAuO,UAAA,CAAAzY,CAAA;YAAA;YAEDqY,SAAS,GAAGA,SAAS,CAAC7D,UAAU,CAAC,sBAAsB,EAAE,kCAAkC,CAAC;YAE5F6D,SAAS,IAAI,UAAU;YAAC,IAAAO,UAAA,GAAAtW,0BAAA,CAEGgR,SAAS;cAAAuF,MAAA;YAAA;cAApC,KAAAD,UAAA,CAAAhW,CAAA,MAAAiW,MAAA,GAAAD,UAAA,CAAAxZ,CAAA,IAAAwB,IAAA,GAAsC;gBAAA,IAAAkY,YAAA,GAAAnF,cAAA,CAAAkF,MAAA,CAAAhY,KAAA;kBAA1B+S,KAAG,GAAAkF,YAAA;kBAAEjY,OAAK,GAAAiY,YAAA;gBAClB,IAAM7D,KAAK,GAAGpU,OAAK,CAACkE,IAAI,YAAAY,MAAA,CAAY9E,OAAK,CAAC+P,KAAK,MAAG;gBAClDyH,SAAS,IAAIxX,OAAK,CAAC2E,IAAI,QAAAG,MAAA,CACZ9E,OAAK,CAAC4T,aAAa,WAAA9O,MAAA,CAAQsP,KAAK,QAAAtP,MAAA,CAAK9E,OAAK,CAAC2E,IAAI,kBAAAG,MAAA,CAC/C9E,OAAK,CAAC4T,aAAa,UAAA9O,MAAA,CAAOsP,KAAK,SAAM;cACpD;YAAC,SAAA/K,GAAA;cAAA0O,UAAA,CAAA5Z,CAAA,CAAAkL,GAAA;YAAA;cAAA0O,UAAA,CAAA5Y,CAAA;YAAA;YAED0I,OAAO,CAAC0B,OAAO,GAAGiO,SAAS;YAC3B3P,OAAO,CAACyH,WAAW,GAAGhG,oBAAoB,CAACkO,SAAS,EAAE3P,OAAO,CAAC;YAE9D,IAAI,CAACqD,QAAQ,CAAC2K,YAAY,CAAC,GAAGhO,OAAO;YAErC,IAAI,CAAC+G,SAAS,CAAC,YAAM;cACjBhH,qBAAqB,CAACC,OAAO,CAAC;cAC9BoP,MAAI,CAACzH,cAAc,CAAC,CAAC;YACzB,CAAC,CAAC;UACN;QACJ,CAAC;QACDkG,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAIwC,QAAQ,GAAG,IAAI,CAACzN,aAAa,CAAC0N,YAAY,CAAC,gBAAgB,CAAC;UAEhE,IAAID,QAAQ,EAAE;YACV,IAAI,CAACzN,aAAa,CAAC2N,eAAe,CAAC3O,SAAS,CAACC,QAAQ,CAACwO,QAAQ,EAAE;cAAEG,mBAAmB,EAAE;YAAK,CAAC,CAAC,CAAC;UACnG;QACJ,CAAC;QACDxB,iBAAiB,WAAjBA,iBAAiBA,CAAA,EAAG;UAChB,IAAIyB,SAAS,GAAG,IAAI,CAAC7N,aAAa,CAAC0N,YAAY,CAAC,iBAAiB,CAAC;UAElE,IAAIG,SAAS,EAAE;YACX,IAAI,CAAC7N,aAAa,CAAC2N,eAAe,CAAC3O,SAAS,CAACC,QAAQ,CAAC4O,SAAS,EAAE;cAAED,mBAAmB,EAAE;YAAK,CAAC,CAAC,CAAC;UACpG;;UAEA;UACA,IAAI,IAAI,CAAC3N,aAAa,EAAE;YACpB,IAAI6N,KAAK,GAAG,IAAI,CAAC7N,aAAa,CAAC8N,gBAAgB,CAAC,oBAAoB,CAAC;YACrE,KAAK,IAAI7Z,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4Z,KAAK,CAAC5Y,MAAM,EAAEhB,CAAC,EAAE,EAAE;cACnC4Z,KAAK,CAAC5Z,CAAC,CAAC,CAACwS,SAAS,CAACkD,MAAM,CAAC,mBAAmB,CAAC;cAC9CkE,KAAK,CAAC5Z,CAAC,CAAC,CAACwS,SAAS,CAACC,GAAG,CAAC,aAAa,CAAC;YACzC;UACJ;;UAEA;UACA,KAAK,IAAIzS,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACuM,QAAQ,CAACvL,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAC3C,IAAI,IAAI,CAACuM,QAAQ,CAACvM,CAAC,CAAC,CAACmM,WAAW,EAAE;cAC9B,IAAI,CAACI,QAAQ,CAACvM,CAAC,CAAC,CAACmM,WAAW,GAAG,KAAK;YACxC;UACJ;;UAEA;UACA,IAAI,IAAI,CAACQ,aAAa,EAAE;YACpB,IAAI,CAACmN,qBAAqB,CAAC,CAAC;UAChC;QACJ,CAAC;QACDC,qBAAqB,WAArBA,qBAAqBA,CAACva,CAAC,EAAE;UAAA,IAAAwa,SAAA;UACrB,IAAI,CAAAxa,CAAC,aAADA,CAAC,gBAAAwa,SAAA,GAADxa,CAAC,CAAEgU,MAAM,cAAAwG,SAAA,uBAATA,SAAA,CAAWC,QAAQ,MAAK,IAAI,CAACpM,aAAa,EAAE;YAC5C;UACJ;UAEA,IAAI,CAACoD,SAAS,CAAC,KAAK,CAAC;QACzB,CAAC;QACDkH,gBAAgB,WAAhBA,gBAAgBA,CAAC5S,IAAI,EAAE2U,UAAU,EAAE;UAAA,IAAAC,MAAA;UAC/B,IAAI,CAAC,IAAI,CAAC/M,mBAAmB,IAAI,CAAC7H,IAAI,IAAI,CAAC,IAAI,CAACwJ,UAAU,EAAE;YACxD;UACJ;UAEA,IAAI,CAACzB,WAAW,GAAG,EAAE;UACrB,IAAI,CAACE,cAAc,GAAG,IAAI;UAC1B,IAAI,CAAC4M,cAAc,GAAGF,UAAU,KAAKrS,SAAS,GAAGqS,UAAU,GAAG,CAAC,CAAC;UAEhE,IAAI,CAACnL,UAAU,CAACsL,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAACjD,SAAS,CAAC,CAAC,EAAE7R,IAAI,EAAE,IAAI,CAAC8H,YAAY,CAAC,SAC3E,CAAC,UAAA3C,GAAG,EAAI;YACVhB,OAAO,CAACe,KAAK,CAAC,sBAAsB,EAAEC,GAAG,CAAC;YAC1CyP,MAAI,CAAC3M,cAAc,GAAG,KAAK;YAC3B2M,MAAI,CAACxM,sBAAsB,GAAG,CAAC,CAAC;YAChCwM,MAAI,CAACC,cAAc,GAAG,CAAC,CAAC;UAC5B,CAAC,CAAC;QACV,CAAC;QACDE,gBAAgB,WAAhBA,gBAAgBA,CAACpR,OAAO,EAAEkI,KAAK,EAAE;UAC7B,IAAI,IAAI,CAACzD,sBAAsB,KAAKyD,KAAK,EAAE;YACvC,IAAI,CAACH,SAAS,CAAC,CAAC;YAChB;UACJ;UAEA,IAAI,CAACA,SAAS,CAAC,KAAK,CAAC;UACrBhN,MAAM,CAAC8M,aAAa,CAAC,IAAIwC,WAAW,CAAC,4BAA4B,EAAE;YAC/DC,MAAM,EAAE;cAAEyG,QAAQ,EAAE,IAAI,CAACpM;YAAc;UAC3C,CAAC,CAAC,CAAC;UACH,IAAI,CAACF,sBAAsB,GAAGyD,KAAK;UAEnC,IAAI,IAAI,CAACxD,aAAa,CAACwD,KAAK,CAAC,EAAE;YAC3B,IAAI,CAACmJ,aAAa,CAAC,IAAI,CAAC3M,aAAa,CAACwD,KAAK,CAAC,CAAC;YAC7C;UACJ;UAEA,IAAI,CAAC+G,gBAAgB,CAACjP,OAAO,CAAC0B,OAAO,EAAEwG,KAAK,CAAC;QACjD,CAAC;QACDiB,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;UACjB,IAAI,IAAI,CAAC/E,WAAW,CAACtM,MAAM,KAAK,CAAC,EAAE;YAC/B,IAAI,CAAC,IAAI,CAACwM,cAAc,IAAI,IAAI,CAACD,cAAc,CAACvM,MAAM,KAAK,CAAC,EAAE;cAC1D,IAAI,CAACwM,cAAc,GAAG,KAAK;cAC3B,IAAI,CAACG,sBAAsB,GAAG,CAAC,CAAC;YACpC;YACA;UACJ;UAEA,IAAM6M,WAAW,GAAG,IAAI,CAAClN,WAAW,CAACmN,MAAM,CAAC,UAACC,GAAG,EAAEpD,KAAK;YAAA,OAAKoD,GAAG,GAAGpD,KAAK,CAACtW,MAAM;UAAA,GAAE,CAAC,CAAC;UAClF,IAAM2Z,QAAQ,GAAG,IAAIxI,UAAU,CAACqI,WAAW,CAAC;UAC5C,IAAII,MAAM,GAAG,CAAC;UAAC,IAAAC,UAAA,GAAA/X,0BAAA,CACK,IAAI,CAACwK,WAAW;YAAAwN,MAAA;UAAA;YAApC,KAAAD,UAAA,CAAAzX,CAAA,MAAA0X,MAAA,GAAAD,UAAA,CAAAjb,CAAA,IAAAwB,IAAA,GAAsC;cAAA,IAA3BkW,KAAK,GAAAwD,MAAA,CAAAzZ,KAAA;cACZsZ,QAAQ,CAACI,GAAG,CAACzD,KAAK,EAAEsD,MAAM,CAAC;cAC3BA,MAAM,IAAItD,KAAK,CAACtW,MAAM;YAC1B;UAAC,SAAA0J,GAAA;YAAAmQ,UAAA,CAAArb,CAAA,CAAAkL,GAAA;UAAA;YAAAmQ,UAAA,CAAAra,CAAA;UAAA;UACD,IAAI,CAAC8M,WAAW,GAAG,EAAE;UAErB,IAAM0N,IAAI,GAAG,IAAIC,IAAI,CAAC,CAACN,QAAQ,CAAC,EAAE;YAAEzS,IAAI,EAAE;UAAY,CAAC,CAAC;UAExD,IAAI,IAAI,CAACkS,cAAc,IAAI,CAAC,EAAE;YAC1B,IAAI,CAACxM,aAAa,CAAC,IAAI,CAACwM,cAAc,CAAC,GAAGY,IAAI;YAC9C,IAAI,CAACZ,cAAc,GAAG,CAAC,CAAC;UAC5B;;UAEA;UACA,IAAI,IAAI,CAAC5M,cAAc,IAAI,IAAI,CAACC,mBAAmB,EAAE;YACjD,IAAI,CAACF,cAAc,CAAC/E,IAAI,CAACwS,IAAI,CAAC;YAC9B;UACJ;UAEA,IAAI,CAACT,aAAa,CAACS,IAAI,CAAC;QAC5B,CAAC;QACDT,aAAa,WAAbA,aAAaA,CAACS,IAAI,EAAE;UAAA,IAAAE,MAAA;UAChB,IAAM/V,GAAG,GAAGgW,GAAG,CAACC,eAAe,CAACJ,IAAI,CAAC;UACrC,IAAMK,KAAK,GAAG,IAAIC,KAAK,CAACnW,GAAG,CAAC;UAE5B,IAAI,CAACuI,eAAe,GAAGvI,GAAG;UAC1B,IAAI,CAACsI,mBAAmB,GAAG4N,KAAK;UAChC,IAAI,CAAC7N,cAAc,GAAG,IAAI;UAE1B6N,KAAK,CAACE,gBAAgB,CAAC,OAAO,EAAE,YAAM;YAClCL,MAAI,CAACzN,mBAAmB,GAAG,IAAI;YAC/ByN,MAAI,CAACxN,eAAe,GAAG,IAAI;YAC3ByN,GAAG,CAACK,eAAe,CAACrW,GAAG,CAAC;YACxB+V,MAAI,CAACO,eAAe,CAAC,CAAC;UAC1B,CAAC,CAAC;UAEFJ,KAAK,CAACE,gBAAgB,CAAC,OAAO,EAAE,YAAM;YAClCL,MAAI,CAACzN,mBAAmB,GAAG,IAAI;YAC/ByN,MAAI,CAACxN,eAAe,GAAG,IAAI;YAC3ByN,GAAG,CAACK,eAAe,CAACrW,GAAG,CAAC;YACxB+V,MAAI,CAACO,eAAe,CAAC,CAAC;UAC1B,CAAC,CAAC;UAEFJ,KAAK,CAACK,IAAI,CAAC,CAAC,SAAM,CAAC,UAAAhR,GAAG,EAAI;YACtBhB,OAAO,CAACe,KAAK,CAAC,uBAAuB,EAAEC,GAAG,CAAC;YAC3CwQ,MAAI,CAACzN,mBAAmB,GAAG,IAAI;YAC/ByN,MAAI,CAACxN,eAAe,GAAG,IAAI;YAC3ByN,GAAG,CAACK,eAAe,CAACrW,GAAG,CAAC;YACxB+V,MAAI,CAAC3N,cAAc,GAAG,EAAE;YACxB2N,MAAI,CAAC1N,cAAc,GAAG,KAAK;YAC3B0N,MAAI,CAACvN,sBAAsB,GAAG,CAAC,CAAC;UACpC,CAAC,CAAC;QACN,CAAC;QACD8N,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAAClO,cAAc,CAACvM,MAAM,GAAG,CAAC,EAAE;YAChC,IAAM2a,QAAQ,GAAG,IAAI,CAACpO,cAAc,CAACqO,KAAK,CAAC,CAAC;YAC5C,IAAI,CAACrB,aAAa,CAACoB,QAAQ,CAAC;UAChC,CAAC,MAAM;YACH,IAAI,CAACnO,cAAc,GAAG,KAAK;YAC3B,IAAI,CAACG,sBAAsB,GAAG,CAAC,CAAC;YAChC,IAAI,CAACkO,4BAA4B,CAAC,CAAC;UACvC;QACJ,CAAC;QACD5K,SAAS,WAATA,SAASA,CAAA,EAAG;UACR,IAAI,IAAI,CAACxD,mBAAmB,EAAE;YAC1B,IAAI,CAACA,mBAAmB,CAACqO,KAAK,CAAC,CAAC;YAChC,IAAI,CAACrO,mBAAmB,CAACsO,WAAW,GAAG,CAAC;YACxC,IAAI,CAACtO,mBAAmB,GAAG,IAAI;UACnC;UACA,IAAI,IAAI,CAACC,eAAe,EAAE;YACtByN,GAAG,CAACK,eAAe,CAAC,IAAI,CAAC9N,eAAe,CAAC;YACzC,IAAI,CAACA,eAAe,GAAG,IAAI;UAC/B;UACA,IAAI,CAACJ,WAAW,GAAG,EAAE;UACrB,IAAI,CAACC,cAAc,GAAG,EAAE;UACxB,IAAI,CAACC,cAAc,GAAG,KAAK;UAC3B,IAAI,CAACG,sBAAsB,GAAG,CAAC,CAAC;QACpC,CAAC;QACDqO,sBAAsB,WAAtBA,sBAAsBA,CAAA,EAAG;UACrB,IAAI,IAAI,CAAC9N,kBAAkB,EAAE;YACzB,IAAI,CAAC+N,oBAAoB,CAAC,CAAC;UAC/B,CAAC,MAAM;YACH,IAAI,CAACC,qBAAqB,CAAC,CAAC;UAChC;QACJ,CAAC;QACDA,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UAAA,IAAAC,MAAA;UACpB,IAAI,CAAC,IAAI,CAACnO,uBAAuB,IAAI,IAAI,CAACE,kBAAkB,IAAI,CAAC,IAAI,CAACa,UAAU,EAAE;YAC9E;UACJ;UAEA,IAAI,CAACb,kBAAkB,GAAG,IAAI;UAC9B,IAAI,CAACkO,wBAAwB,CAAC,CAAC;UAC/B,IAAI,CAAC9L,8BAA8B,GAAG,EAAE;UACxC,IAAI,CAACY,6BAA6B,GAAG,IAAI;UACzC,IAAI,CAACT,2BAA2B,GAAG,IAAI;;UAEvC;UACA,IAAI,CAACqC,kBAAkB,CAAC,oBAAoB,CAAC;UAE7CuJ,SAAS,CAACC,YAAY,CAACC,YAAY,CAAC;YAAElB,KAAK,EAAE;cAAEmB,gBAAgB,EAAE,IAAI;cAAEC,gBAAgB,EAAE,IAAI;cAAEC,eAAe,EAAE;YAAK;UAAE,CAAC,CAAC,CACpHla,IAAI,CAAC,UAAA8J,MAAM,EAAI;YACZ,IAAIqQ,QAAQ,GAAGC,aAAa,CAACC,eAAe,CAAC,uBAAuB,CAAC,GAC/D,uBAAuB,GACvBD,aAAa,CAACC,eAAe,CAAC,wBAAwB,CAAC,GACnD,wBAAwB,GACxB,YAAY;YAEtBV,MAAI,CAACpP,aAAa,GAAG,IAAI6P,aAAa,CAACtQ,MAAM,EAAE;cAC3CqQ,QAAQ,EAAEA,QAAQ;cAClBG,kBAAkB,EAAE;YACxB,CAAC,CAAC;YAEFX,MAAI,CAACY,oBAAoB,GAAG,IAAI/N,OAAO,CAACgO,OAAO,CAAC,CAAC;YACjDb,MAAI,CAACc,mBAAmB,GAAG3Q,MAAM;;YAEjC;YACA,IAAI4Q,QAAQ,GAAGjZ,MAAM,CAACkZ,YAAY,IAAIlZ,MAAM,CAACmZ,kBAAkB;YAC/D,IAAIF,QAAQ,EAAE;cACVf,MAAI,CAACkB,qBAAqB,GAAG,IAAIH,QAAQ,CAAC,CAAC;cAC3Cf,MAAI,CAACmB,qBAAqB,GAAGnB,MAAI,CAACkB,qBAAqB,CAACE,cAAc,CAAC,CAAC;cACxEpB,MAAI,CAACmB,qBAAqB,CAACE,OAAO,GAAG,GAAG;cACxC,IAAIC,SAAS,GAAGtB,MAAI,CAACkB,qBAAqB,CAACK,uBAAuB,CAACpR,MAAM,CAAC;cAC1EmR,SAAS,CAACE,OAAO,CAACxB,MAAI,CAACmB,qBAAqB,CAAC;YACjD;YAEA,IAAIM,YAAY,GAAGtb,OAAO,CAACC,OAAO,CAAC,CAAC;YACpC,IAAIsb,QAAQ,GAAG1B,MAAI,CAACmB,qBAAqB;YACzC,IAAIQ,wBAAwB,GAAG,EAAE;YAEjC3B,MAAI,CAACpP,aAAa,CAACwO,gBAAgB,CAAC,eAAe,EAAE,UAAC/b,CAAC,EAAK;cACxD,IAAIA,CAAC,CAACyG,IAAI,IAAIzG,CAAC,CAACyG,IAAI,CAAC8X,IAAI,GAAG,CAAC,EAAE;gBAC3B;gBACA;gBACA,IAAI5B,MAAI,CAAC3O,cAAc,IAAIqQ,QAAQ,EAAE;kBACjC,IAAIG,QAAQ,GAAG,IAAI7L,UAAU,CAAC0L,QAAQ,CAACI,iBAAiB,CAAC;kBACzDJ,QAAQ,CAACK,oBAAoB,CAACF,QAAQ,CAAC;kBACvC,IAAItD,GAAG,GAAG,CAAC;kBACX,KAAK,IAAIyD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAAChd,MAAM,EAAEmd,CAAC,EAAE,EAAE;oBAAEzD,GAAG,IAAIsD,QAAQ,CAACG,CAAC,CAAC;kBAAE;kBAChE,IAAIC,GAAG,GAAG1D,GAAG,GAAGsD,QAAQ,CAAChd,MAAM;kBAE/B,IAAIod,GAAG,IAAIN,wBAAwB,EAAE;oBACjC;oBACA3B,MAAI,CAAClL,SAAS,CAAC,CAAC;kBACpB;gBACJ;;gBAEA;gBACA;gBACA;gBACA2M,YAAY,GAAGA,YAAY,CAACpb,IAAI,cAAAC,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAAuc,SAAA;kBAAA,IAAApY,IAAA,EAAAqY,UAAA,EAAAtM,YAAA,EAAAuM,MAAA;kBAAA,OAAA3c,YAAA,GAAAC,CAAA,WAAA2c,SAAA;oBAAA,kBAAAA,SAAA,CAAA5e,CAAA;sBAAA;wBAAA4e,SAAA,CAAA5e,CAAA;wBAAA,OACZJ,CAAC,CAACyG,IAAI,CAACwY,WAAW,CAAC,CAAC;sBAAA;wBAAjCxY,IAAI,GAAAuY,SAAA,CAAA5d,CAAA;wBACJ0d,UAAU,GAAG,IAAInM,UAAU,CAAClM,IAAI,CAAC;wBACjC+L,YAAY,GAAGsM,UAAU,CAAC7D,MAAM,CAAC,UAAUiE,GAAG,EAAEC,KAAI,EAAE;0BAAE,OAAOD,GAAG,GAAGE,MAAM,CAACC,YAAY,CAACF,KAAI,CAAC;wBAAE,CAAC,EAAE,EAAE,CAAC;wBACtGJ,MAAM,GAAGO,IAAI,CAAC9M,YAAY,CAAC;wBAC/B,IAAI;0BACAmK,MAAI,CAACY,oBAAoB,CAAC1Z,IAAI,CAACkb,MAAM,CAAC;wBAC1C,CAAC,CAAC,OAAO7T,GAAG,EAAE;0BACV;wBAAA;sBACH;wBAAA,OAAA8T,SAAA,CAAA3d,CAAA;oBAAA;kBAAA,GAAAwd,QAAA;gBAAA,CACJ,GAAC;cACN;YACJ,CAAC,CAAC;YAEFlC,MAAI,CAACpP,aAAa,CAACwO,gBAAgB,CAAC,MAAM,EAAE,YAAM;cAC9CjP,MAAM,CAACyS,SAAS,CAAC,CAAC,CAACjP,OAAO,CAAC,UAAAkP,KAAK;gBAAA,OAAIA,KAAK,CAACC,IAAI,CAAC,CAAC;cAAA,EAAC;cACjDrB,YAAY,CAACpb,IAAI,CAAC,YAAM;gBACpB,IAAI;kBACA2Z,MAAI,CAACY,oBAAoB,CAAChF,QAAQ,CAAC,CAAC;gBACxC,CAAC,CAAC,OAAOrN,GAAG,EAAE;kBACV;gBAAA;cAER,CAAC,CAAC;YACN,CAAC,CAAC;YAEF,IAAIgF,MAAM,GAAGyM,MAAI,CAAC/E,SAAS,CAAC,CAAC;YAE7B,IAAI1Q,QAAQ,GAAG2V,SAAS,CAAC3V,QAAQ,IAAIjB,QAAQ,CAACyZ,eAAe,CAAC7Y,IAAI,IAAI,OAAO;YAC7E8V,MAAI,CAACpN,UAAU,CAACoQ,IAAI,CAAC,mBAAmB,EAAEzP,MAAM,EAAEyM,MAAI,CAACY,oBAAoB,EAAEJ,QAAQ,EAAEjW,QAAQ,CAAC;YAChGyV,MAAI,CAACpP,aAAa,CAACrF,KAAK,CAAC,GAAG,CAAC;YAC7ByU,MAAI,CAACrP,WAAW,GAAG,IAAI;UAC3B,CAAC,CAAC,SACI,CAAC,UAAApC,GAAG,EAAI;YACVhB,OAAO,CAACe,KAAK,CAAC,2BAA2B,EAAEC,GAAG,CAAC;YAC/CyR,MAAI,CAACjO,kBAAkB,GAAG,KAAK;YAC/BiO,MAAI,CAACC,wBAAwB,CAAC,CAAC;UACnC,CAAC,CAAC;QACV,CAAC;QACDH,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;UACnB,IAAI,CAAC,IAAI,CAAC/N,kBAAkB,EAAE;YAC1B;UACJ;UAEA,IAAI,CAACA,kBAAkB,GAAG,KAAK;UAC/B,IAAI,CAACkO,wBAAwB,CAAC,CAAC;;UAE/B;UACA,IAAI,IAAI,CAACrN,UAAU,EAAE;YACjB,IAAI,CAACA,UAAU,CAACsL,MAAM,CAAC,kBAAkB,CAAC,SAAM,CAAC,YAAY,CAAE,CAAC,CAAC;UACrE;UAEA,IAAI,IAAI,CAACvN,WAAW,IAAI,IAAI,CAACC,aAAa,EAAE;YACxC,IAAI,CAACA,aAAa,CAACkS,IAAI,CAAC,CAAC;YACzB,IAAI,CAACnS,WAAW,GAAG,KAAK;UAC5B;UAEA,IAAI,CAACmE,SAAS,CAAC,CAAC;UAChB,IAAI,CAACX,8BAA8B,GAAG,EAAE;UACxC,IAAI,CAACG,2BAA2B,GAAG,IAAI;;UAEvC;UACA,IAAI,IAAI,CAAC4M,qBAAqB,EAAE;YAC5B,IAAI,CAACA,qBAAqB,CAAC+B,KAAK,CAAC,CAAC,SAAM,CAAC,YAAY,CAAE,CAAC,CAAC;YACzD,IAAI,CAAC/B,qBAAqB,GAAG,IAAI;YACjC,IAAI,CAACC,qBAAqB,GAAG,IAAI;UACrC;;UAEA;UACA,IAAI,IAAI,CAACpM,6BAA6B,EAAE;YACpC,IAAInB,GAAG,GAAG,IAAI,CAACxD,QAAQ,CAAC,IAAI,CAAC2E,6BAA6B,CAACE,KAAK,CAAC;YACjE,IAAIrB,GAAG,EAAE;cACLA,GAAG,CAAC5D,WAAW,GAAG,KAAK;YAC3B;YACA,IAAI,CAAC+E,6BAA6B,GAAG,IAAI;UAC7C;;UAEA;UACA,KAAK,IAAIlR,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACuM,QAAQ,CAACvL,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAC3C,IAAI,IAAI,CAACuM,QAAQ,CAACvM,CAAC,CAAC,CAACmM,WAAW,EAAE;cAC9B,IAAI,CAACI,QAAQ,CAACvM,CAAC,CAAC,CAACmM,WAAW,GAAG,KAAK;YACxC;UACJ;;UAEA;UACA,IAAI,CAACwG,mBAAmB,CAAC;YACrBzK,IAAI,EAAE,oBAAoB;YAC1B0C,OAAO,EAAE,qBAAqB;YAC9BgL,IAAI,EAAE,0BAA0B;YAChCyJ,WAAW,EAAE,IAAI;YACjBC,aAAa,EAAE;UACnB,CAAC,CAAC;QACN,CAAC;QACDlD,wBAAwB,WAAxBA,wBAAwBA,CAAA,EAAG;UACvB,IAAI,CAAC,IAAI,CAACnO,kBAAkB,EAAE;YAC1B;UACJ;UAEA,IAAI,IAAI,CAACC,kBAAkB,EAAE;YACzB,IAAI,CAACD,kBAAkB,CAACuE,SAAS,CAACC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC;YAC9D,IAAI,CAACxE,kBAAkB,CAACuE,SAAS,CAACkD,MAAM,CAAC,UAAU,EAAE,kBAAkB,EAAE,uBAAuB,CAAC;YACjG,IAAI,CAACzH,kBAAkB,CAAC4B,KAAK,GAAG,IAAI,CAAC5B,kBAAkB,CAACuL,YAAY,CAAC,gBAAgB,CAAC,IAAI,kBAAkB;YAC5G,IAAI+F,OAAO,GAAG,IAAI,CAACtR,kBAAkB,CAACuL,YAAY,CAAC,eAAe,CAAC;YACnE,IAAI+F,OAAO,EAAE;cACT,IAAI,CAACtR,kBAAkB,CAACwL,eAAe,CAAC3O,SAAS,CAACC,QAAQ,CAACwU,OAAO,EAAE;gBAAE7F,mBAAmB,EAAE;cAAK,CAAC,CAAC,CAAC;YACvG;UACJ,CAAC,MAAM;YACH,IAAI,CAACzL,kBAAkB,CAACuE,SAAS,CAACkD,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;YACjE,IAAI,CAACzH,kBAAkB,CAACuE,SAAS,CAACkD,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;YAC7E,IAAI,CAACzH,kBAAkB,CAACuE,SAAS,CAACC,GAAG,CAAC,kBAAkB,CAAC;YACzD,IAAI,CAACxE,kBAAkB,CAACuR,IAAI,CAAC,CAAC;YAC9B,IAAI,CAACvR,kBAAkB,CAAC4B,KAAK,GAAG,IAAI,CAAC5B,kBAAkB,CAACuL,YAAY,CAAC,kBAAkB,CAAC,IAAI,oBAAoB;YAChH,IAAIiG,SAAS,GAAG,IAAI,CAACxR,kBAAkB,CAACuL,YAAY,CAAC,iBAAiB,CAAC;YACvE,IAAIiG,SAAS,EAAE;cACX,IAAI,CAACxR,kBAAkB,CAACwL,eAAe,CAAC3O,SAAS,CAACC,QAAQ,CAAC0U,SAAS,EAAE;gBAAE/F,mBAAmB,EAAE;cAAK,CAAC,CAAC,CAAC;YACzG;UACJ;QACJ,CAAC;QACDgG,0BAA0B,WAA1BA,0BAA0BA,CAAA,EAAG;UACzB;QAAA,CACH;QACD7D,4BAA4B,WAA5BA,4BAA4BA,CAAA,EAAG;UAC3B;UACA;QAAA,CACH;QACD7E,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UAClB,IAAI,CAAChH,UAAU,CAAC;YACZzB,IAAI,EAAE,WAAW;YACjBoC,WAAW,EAAElI,MAAM,CAAC7D;UACxB,CAAC,CAAC;QACN,CAAC;QACD4M,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UAClB,IAAMmO,cAAc,GAAG,IAAI,CAACpT,QAAQ,CAACvL,MAAM;UAC3C,IAAI,CAACuL,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAACyH,MAAM,CAAC,UAAAjE,GAAG;YAAA,OAAIA,GAAG,CAACxB,IAAI,KAAK,WAAW;UAAA,EAAC;UACrE,IAAMqR,YAAY,GAAGD,cAAc,GAAG,IAAI,CAACpT,QAAQ,CAACvL,MAAM;UAC1D,OAAO4e,YAAY;QACvB,CAAC;QACD/O,cAAc,WAAdA,cAAcA,CAAA,EAAG;UAAA,IAAAgP,MAAA;UACb,IAAI,CAAC,IAAI,CAACxT,UAAU,EAAE;YAClB;UACJ;UACAyT,UAAU,CAAC,YAAM;YACbD,MAAI,CAAC9T,aAAa,CAACgU,SAAS,GAAGF,MAAI,CAAC9T,aAAa,CAACiU,YAAY,GAAGH,MAAI,CAAC9T,aAAa,CAACkU,YAAY;UACpG,CAAC,EAAE,EAAE,CAAC;QACV,CAAC;QACDC,eAAe,WAAfA,eAAeA,CAACvK,KAAK,EAAE;UACnB,IAAI,CAACnJ,MAAM,GAAGmJ,KAAK,CAACwK,MAAM,CAAC9e,KAAK;QACpC,CAAC;QACD+V,SAAS,WAATA,SAASA,CAAA,EAAG;UACR,OAAO,IAAI,CAACvL,YAAY,CAAC2N,YAAY,CAAC,qBAAqB,CAAC,IACrD,IAAI,CAAC3N,YAAY,CAAC2N,YAAY,CAAC,cAAc,CAAC;QACzD,CAAC;QACD4G,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAAG;UACtB,IAAI3X,MAAM,CAAC4X,4BAA4B,EAAE;YACrC,OAAO5a,QAAQ,CAACmK,aAAa,CAACnH,MAAM,CAAC4X,4BAA4B,CAAC;UACtE;UAEA,OAAO5a,QAAQ,CAACmK,aAAa,CAAC,wCAAwC,CAAC;QAC3E,CAAC;QACDO,iBAAiB,WAAjBA,iBAAiBA,CAAC5K,IAAI,EAAE+a,SAAS,EAAE;UAAA,IAAAC,MAAA;UAC/B,IAAMC,SAAS,GAAG,IAAI,CAACJ,uBAAuB,CAAC,CAAC;UAChD,IAAI,CAACI,SAAS,EAAE;YACZ;UACJ;UAEAA,SAAS,CAAC7a,WAAW,GAAGJ,IAAI,IAAI,EAAE;UAClCib,SAAS,CAACF,SAAS,GAAG,0BAA0B,IAAIA,SAAS,IAAI,YAAY,CAAC;UAE9E,IAAI,IAAI,CAACzT,oBAAoB,EAAE;YAC3B4T,YAAY,CAAC,IAAI,CAAC5T,oBAAoB,CAAC;YACvC,IAAI,CAACA,oBAAoB,GAAG,IAAI;UACpC;UAEA,IAAI,CAACtH,IAAI,EAAE;YACP;UACJ;UAEA,IAAI,CAACsH,oBAAoB,GAAGiT,UAAU,CAAC,YAAM;YACzCU,SAAS,CAAC7a,WAAW,GAAG,EAAE;YAC1B4a,MAAI,CAAC1T,oBAAoB,GAAG,IAAI;UACpC,CAAC,EAAE,IAAI,CAAC;QACZ,CAAC;QACD6T,wBAAwB,WAAxBA,wBAAwBA,CAAA,EAAG;UACvB,IAAI,IAAI,CAAC9T,mBAAmB,EAAE;YAC1B6T,YAAY,CAAC,IAAI,CAAC7T,mBAAmB,CAAC;YACtC,IAAI,CAACA,mBAAmB,GAAG,IAAI;UACnC;QACJ,CAAC;QACD+T,aAAa,WAAbA,aAAaA,CAACC,KAAK,EAAE;UAAA,IAAAC,cAAA;UACjB,IAAMpL,KAAK,IAAAoL,cAAA,GAAGD,KAAK,CACdE,OAAO,CAAC,kDAAkD,CAAC,cAAAD,cAAA,uBADlDA,cAAA,CAERjR,aAAa,CAAC,OAAO,CAAC;UAE5B,IAAI,CAAC6F,KAAK,EAAE;YACR,OAAOmL,KAAK,CAACG,OAAO,CAACC,OAAO,IAAI,YAAY;UAChD;UAEA,OAAO,CAACvL,KAAK,CAAC9P,WAAW,IAAI,EAAE,EAC1B6K,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CACpBnL,IAAI,CAAC,CAAC,IACJub,KAAK,CAACG,OAAO,CAACC,OAAO,IACrB,YAAY;QACvB,CAAC;QACDC,4BAA4B,WAA5BA,4BAA4BA,CAACL,KAAK,EAAE;UAChC,IAAIM,QAAQ,GAAGN,KAAK,CAACO,kBAAkB;UACvC,IAAID,QAAQ,IAAIA,QAAQ,CAAC1O,SAAS,CAAC4O,QAAQ,CAAC,kBAAkB,CAAC,EAAE;YAC7D,OAAOF,QAAQ;UACnB;UAEAA,QAAQ,GAAGzb,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;UACxCwb,QAAQ,CAACZ,SAAS,GAAG,kBAAkB;UACvCM,KAAK,CAACS,qBAAqB,CAAC,UAAU,EAAEH,QAAQ,CAAC;UAEjD,OAAOA,QAAQ;QACnB,CAAC;QACDI,2BAA2B,WAA3BA,2BAA2BA,CAACV,KAAK,EAAE;UAC/BA,KAAK,CAACpO,SAAS,CAACkD,MAAM,CAAC,YAAY,CAAC;UACpCkL,KAAK,CAACW,eAAe,CAAC,cAAc,CAAC;UAErC,IAAML,QAAQ,GAAGN,KAAK,CAACO,kBAAkB;UACzC,IAAID,QAAQ,IAAIA,QAAQ,CAAC1O,SAAS,CAAC4O,QAAQ,CAAC,kBAAkB,CAAC,EAAE;YAC7DF,QAAQ,CAACvb,WAAW,GAAG,EAAE;UAC7B;QACJ,CAAC;QACD6b,yBAAyB,WAAzBA,yBAAyBA,CAACZ,KAAK,EAAE1X,OAAO,EAAE;UACtC,IAAMgY,QAAQ,GAAG,IAAI,CAACD,4BAA4B,CAACL,KAAK,CAAC;UACzDA,KAAK,CAACpO,SAAS,CAACC,GAAG,CAAC,YAAY,CAAC;UACjCmO,KAAK,CAACa,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;UAC1CP,QAAQ,CAACvb,WAAW,GAAGuD,OAAO;QAClC,CAAC;QACDwY,2BAA2B,WAA3BA,2BAA2BA,CAACd,KAAK,EAAE;UAC/B,IAAI,CAACA,KAAK,IAAIA,KAAK,CAACe,QAAQ,IAAIf,KAAK,CAAC1Y,IAAI,KAAK,QAAQ,EAAE;YACrD,OAAO,IAAI;UACf;UAEA,IAAM7G,KAAK,GAAG,CAACuf,KAAK,CAACvf,KAAK,IAAI,EAAE,EAAEgE,IAAI,CAAC,CAAC;UACxC,IAAI,CAAChE,KAAK,EAAE;YACR,OAAO,IAAI;UACf;UAEA,IAAMugB,MAAM,GAAGC,MAAM,CAACxgB,KAAK,CAAC;UAC5B,IAAMygB,UAAU,GAAG,IAAI,CAACnB,aAAa,CAACC,KAAK,CAAC;UAE5C,IAAIiB,MAAM,CAACE,KAAK,CAACH,MAAM,CAAC,EAAE;YACtB,UAAAzb,MAAA,CAAU2b,UAAU;UACxB;UAEA,IAAME,GAAG,GAAGpB,KAAK,CAACpH,YAAY,CAAC,KAAK,CAAC;UACrC,IAAIwI,GAAG,KAAK,IAAI,IAAIJ,MAAM,GAAGC,MAAM,CAACG,GAAG,CAAC,EAAE;YACtC,UAAA7b,MAAA,CAAU2b,UAAU,eAAA3b,MAAA,CAAY6b,GAAG;UACvC;UAEA,IAAMC,GAAG,GAAGrB,KAAK,CAACpH,YAAY,CAAC,KAAK,CAAC;UACrC,IAAIyI,GAAG,KAAK,IAAI,IAAIL,MAAM,GAAGC,MAAM,CAACI,GAAG,CAAC,EAAE;YACtC,UAAA9b,MAAA,CAAU2b,UAAU,eAAA3b,MAAA,CAAY8b,GAAG;UACvC;UAEA,OAAO,IAAI;QACf,CAAC;QACDC,oBAAoB,WAApBA,oBAAoBA,CAACtB,KAAK,EAAE;UACxB,IAAM1X,OAAO,GAAG,IAAI,CAACwY,2BAA2B,CAACd,KAAK,CAAC;UACvD,IAAI,CAAC1X,OAAO,EAAE;YACV,IAAI,CAACoY,2BAA2B,CAACV,KAAK,CAAC;YACvC,OAAO,IAAI;UACf;UAEA,IAAI,CAACY,yBAAyB,CAACZ,KAAK,EAAE1X,OAAO,CAAC;UAC9C,OAAO,KAAK;QAChB,CAAC;QACDiZ,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UAAA,IAAAC,OAAA;UACf,IAAIC,OAAO,GAAG,IAAI;UAElB,IAAI,CAACC,gBAAgB,CAAC,CAAC,CAACxS,OAAO,CAAC,UAAA8Q,KAAK,EAAI;YACrCyB,OAAO,GAAGD,OAAI,CAACF,oBAAoB,CAACtB,KAAK,CAAC,IAAIyB,OAAO;UACzD,CAAC,CAAC;UAEF,OAAOA,OAAO;QAClB,CAAC;QACDE,iBAAiB,WAAjBA,iBAAiBA,CAAA,EAAG;UAChB,IAAI,CAAC,IAAI,CAACJ,gBAAgB,CAAC,CAAC,EAAE;YAC1B,IAAI,CAACzB,wBAAwB,CAAC,CAAC;YAC/B,IAAI,CAAC/T,aAAa,GAAG,KAAK;YAC1B,IAAI,CAACwD,iBAAiB,CAAC,YAAY,EAAE,aAAa,CAAC;YACnD;UACJ;UAEA,IAAI,CAACxD,aAAa,GAAG,IAAI;UACzB,IAAI,CAACwD,iBAAiB,CAAC,WAAW,EAAE,cAAc,CAAC;UACnD,IAAI,CAAC2J,qBAAqB,CAAC,CAAC;QAChC,CAAC;QACDwI,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAME,cAAc,GAAG/c,QAAQ,CAACoU,gBAAgB,CAAC,8BAA8B,CAAC;UAChF,IAAI2I,cAAc,CAACxhB,MAAM,GAAG,CAAC,EAAE;YAC3B,OAAOwhB,cAAc;UACzB;UAEA,OAAO/c,QAAQ,CAACoU,gBAAgB,CAC5B,uFAAuF,GACvF,wFAAwF,GACxF,wFACJ,CAAC;QACL,CAAC;QACD4I,sBAAsB,WAAtBA,sBAAsBA,CAACC,SAAS,EAAEC,gBAAgB,EAAE;UAChD,IAAMC,kBAAkB,GAAGnd,QAAQ,CAACoU,gBAAgB,2CAAA1T,MAAA,CAA0Cuc,SAAS,gBAAY,CAAC;UACpH,IAAIE,kBAAkB,CAAC5hB,MAAM,GAAG,CAAC,EAAE;YAC/B,IAAM6hB,OAAM,GAAG,EAAE;YAEjBD,kBAAkB,CAAC9S,OAAO,CAAC,UAAAgT,QAAQ,EAAI;cACnC,IAAMzhB,KAAK,GAAGyhB,QAAQ,CAACtJ,YAAY,CAAC,cAAc,CAAC,IAAIsJ,QAAQ,CAACzhB,KAAK;cACrE,IAAIA,KAAK,EAAE;gBACPwhB,OAAM,CAACra,IAAI,CAACnH,KAAK,CAAC;cACtB;YACJ,CAAC,CAAC;YAEF,OAAOwhB,OAAM;UACjB;UAEA,IAAI,CAACF,gBAAgB,EAAE;YACnB,OAAO,EAAE;UACb;UAEA,IAAME,MAAM,GAAG,EAAE;UACjB,IAAME,UAAU,GAAGtd,QAAQ,CAACoU,gBAAgB,CAAC8I,gBAAgB,CAAC;UAE9DI,UAAU,CAACjT,OAAO,CAAC,UAAAgT,QAAQ,EAAI;YAC3B,IAAME,QAAQ,GAAGF,QAAQ,CAAChf,IAAI,CAAC0M,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC;YAChE,IAAMyS,WAAW,GAAGxd,QAAQ,CAACmK,aAAa,kCAAAzJ,MAAA,CAA+B6c,QAAQ,QAAI,CAAC;YAEtF,IAAIC,WAAW,IAAIA,WAAW,CAAC5hB,KAAK,EAAE;cAClCwhB,MAAM,CAACra,IAAI,CAACya,WAAW,CAAC5hB,KAAK,CAAC;YAClC;UACJ,CAAC,CAAC;UAEF,OAAOwhB,MAAM;QACjB,CAAC;QACDK,2BAA2B,WAA3BA,2BAA2BA,CAAA,EAAG;UAC1B,IAAMC,eAAe,GAAG,EAAE;UAE1B1d,QAAQ,CAACoU,gBAAgB,CAAC,uBAAuB,CAAC,CAAC/J,OAAO,CAAC,UAAAsT,IAAI,EAAI;YAC/D,IAAMC,eAAe,GAAGD,IAAI,CAACxT,aAAa,CAAC,2BAA2B,CAAC;YACvE,IAAM0T,qBAAqB,GAAGF,IAAI,CAACxT,aAAa,CAAC,mCAAmC,CAAC;YACrF,IAAM2T,UAAU,GAAGF,eAAe,GAAGA,eAAe,CAAChiB,KAAK,GAAG+hB,IAAI,CAAC5J,YAAY,CAAC,kBAAkB,CAAC;YAElG,IAAI,CAAC+J,UAAU,EAAE;cACb;YACJ;YAEAJ,eAAe,CAAC3a,IAAI,CAAC;cACjB+a,UAAU,EAAEA,UAAU;cACtBC,gBAAgB,EAAEF,qBAAqB,GAAG,CAACA,qBAAqB,CAACjiB,KAAK,IAAI,EAAE,EAAEgE,IAAI,CAAC,CAAC,GAAG;YAC3F,CAAC,CAAC;UACN,CAAC,CAAC;UAEF,OAAO8d,eAAe;QAC1B,CAAC;QACDxQ,mBAAmB,WAAnBA,mBAAmBA,CAACD,YAAY,EAAE;UAC9B,IAAI,CAACA,YAAY,IAAI,CAACA,YAAY,CAACxK,IAAI,EAAE;YACrC;UACJ;UACA,IAAI,CAACub,wBAAwB,CAAC/Q,YAAY,CAACxK,IAAI,CAAC;UAChD;UACA,IAAIP,GAAG,GAAG,IAAI,CAACwG,aAAa,CAACuV,SAAS,CAAC,UAAA9jB,CAAC;YAAA,OAAIA,CAAC,CAACsI,IAAI,KAAKwK,YAAY,CAACxK,IAAI;UAAA,EAAC;UACzE,IAAIP,GAAG,IAAI,CAAC,EAAE;YACV,IAAI,CAACwG,aAAa,CAACwV,MAAM,CAAChc,GAAG,EAAE,CAAC,EAAE+K,YAAY,CAAC;UACnD,CAAC,MAAM;YACH,IAAI,CAACvE,aAAa,CAAC3F,IAAI,CAACkK,YAAY,CAAC;UACzC;UACA,IAAI,CAACkR,2BAA2B,CAAClR,YAAY,CAAC;UAC9C,IAAI,CAAC7B,cAAc,CAAC,CAAC;QACzB,CAAC;QACD+B,kBAAkB,WAAlBA,kBAAkBA,CAACF,YAAY,EAAE;UAC7B,IAAI,CAACA,YAAY,IAAI,CAACA,YAAY,CAACxK,IAAI,EAAE;YACrC;UACJ;UACA,IAAI,CAACub,wBAAwB,CAAC/Q,YAAY,CAACxK,IAAI,CAAC;UAChD,IAAIP,GAAG,GAAG,IAAI,CAACwG,aAAa,CAACuV,SAAS,CAAC,UAAA9jB,CAAC;YAAA,OAAIA,CAAC,CAACsI,IAAI,KAAKwK,YAAY,CAACxK,IAAI;UAAA,EAAC;UACzE,IAAIP,GAAG,IAAI,CAAC,EAAE;YACV,IAAI,CAACwG,aAAa,CAACwV,MAAM,CAAChc,GAAG,EAAE,CAAC,EAAE+K,YAAY,CAAC;YAC/C,IAAI,CAACkR,2BAA2B,CAAClR,YAAY,CAAC;YAC9C,IAAI,CAAC7B,cAAc,CAAC,CAAC;UACzB;QACJ,CAAC;QACD+S,2BAA2B,WAA3BA,2BAA2BA,CAAClR,YAAY,EAAE;UAAA,IAAAmR,OAAA;UACtC,IAAI,CAACnR,YAAY,IAAI,CAACA,YAAY,CAACxK,IAAI,IAAI,CAACwK,YAAY,CAAC4M,aAAa,IAAI5M,YAAY,CAAC4M,aAAa,IAAI,CAAC,EAAE;YACvG;UACJ;UACA,IAAI,CAAClR,yBAAyB,CAACsE,YAAY,CAACxK,IAAI,CAAC,GAAG4X,UAAU,CAAC,YAAM;YACjE+D,OAAI,CAAC/Q,kBAAkB,CAACJ,YAAY,CAACxK,IAAI,CAAC;UAC9C,CAAC,EAAEwK,YAAY,CAAC4M,aAAa,CAAC;QAClC,CAAC;QACDmE,wBAAwB,WAAxBA,wBAAwBA,CAAC5Q,gBAAgB,EAAE;UACvC,IAAIiR,OAAO,GAAG,IAAI,CAAC1V,yBAAyB,CAACyE,gBAAgB,CAAC;UAC9D,IAAI,CAACiR,OAAO,EAAE;YACV;UACJ;UACArD,YAAY,CAACqD,OAAO,CAAC;UACrB,OAAO,IAAI,CAAC1V,yBAAyB,CAACyE,gBAAgB,CAAC;QAC3D,CAAC;QACDC,kBAAkB,WAAlBA,kBAAkBA,CAACD,gBAAgB,EAAE;UACjC,IAAI,CAAC4Q,wBAAwB,CAAC5Q,gBAAgB,CAAC;UAC/C,IAAI,CAAC1E,aAAa,GAAG,IAAI,CAACA,aAAa,CAAC6F,MAAM,CAAC,UAAApU,CAAC;YAAA,OAAIA,CAAC,CAACsI,IAAI,KAAK2K,gBAAgB;UAAA,EAAC;QACpF,CAAC;QACDkR,mBAAmB,WAAnBA,mBAAmBA,CAAClR,gBAAgB,EAAE;UAClC,IAAI,CAACC,kBAAkB,CAACD,gBAAgB,CAAC;QAC7C,CAAC;QACDmR,wBAAwB,WAAxBA,wBAAwBA,CAACnR,gBAAgB,EAAEoR,UAAU,EAAE;UACnD,IAAI,CAAC,IAAI,CAAClV,UAAU,EAAE;YAClB;UACJ;UACA,IAAIW,MAAM,GAAG,IAAI,CAAC0H,SAAS,CAAC,CAAC;UAC7B,IAAI,CAACrI,UAAU,CAACsL,MAAM,CAAC,0BAA0B,EAAE3K,MAAM,EAAEmD,gBAAgB,EAAEoR,UAAU,CAAC,SAC9E,CAAC,UAAAvZ,GAAG;YAAA,OAAIhB,OAAO,CAACe,KAAK,CAAC,uCAAuC,EAAEC,GAAG,CAAC;UAAA,EAAC;QAClF,CAAC;QACD8M,SAAS,WAATA,SAASA,CAAC9H,MAAM,EAAE;UACd,IAAI,CAAC7D,YAAY,CAAC4V,YAAY,CAAC,qBAAqB,EAAE/R,MAAM,IAAI,EAAE,CAAC;UACnE,IAAI,CAAC7D,YAAY,CAAC4V,YAAY,CAAC,cAAc,EAAE/R,MAAM,IAAI,EAAE,CAAC;QAChE,CAAC;QACDwU,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAI,CAAC1M,SAAS,CAAC,EAAE,CAAC;UAClB,IAAI,CAACvL,oBAAoB,GAAG,KAAK;UACjC,IAAI,CAACM,QAAQ,GAAG,EAAE;UAClB,IAAI,CAAC+F,eAAe,CAAC,CAAC;QAC1B,CAAC;QACD6R,aAAa,WAAbA,aAAaA,CAAA,EAAG;UAAA,IAAAC,OAAA;UACZ,IAAI,CAACvY,YAAY,GAAGpG,QAAQ,CAACmK,aAAa,CAACnH,MAAM,CAAC+C,oBAAoB,CAAC;UACvE,IAAI,CAACM,aAAa,GAAGrG,QAAQ,CAACmK,aAAa,CAACnH,MAAM,CAACgD,yBAAyB,CAAC;UAC7E,IAAI,CAACM,aAAa,GAAGtG,QAAQ,CAACmK,aAAa,CAACnH,MAAM,CAAC8C,4BAA4B,CAAC;UAChF,IAAI,CAACS,WAAW,GAAGvG,QAAQ,CAACmK,aAAa,CAACnH,MAAM,CAAC4b,0BAA0B,CAAC;UAE5E,IAAM3U,MAAM,GAAG,IAAI,CAAC0H,SAAS,CAAC,CAAC;UAC/B,IAAI1H,MAAM,EAAE;YACR,IAAI,CAAC4U,eAAe,CAAC5U,MAAM,CAAC;UAChC;;UAEA;UACA,IAAI,CAAC3D,aAAa,CAACwP,gBAAgB,CAAC,QAAQ,EAAE,YAAM;YAChD,IAAI,CAAC6I,OAAI,CAAC9X,MAAM,EAAE;cACd;YACJ;YACA,IAAMiY,SAAS,GAAG,EAAE;YACpB,IAAMC,QAAQ,GAAGJ,OAAI,CAACrY,aAAa,CAACiU,YAAY,GAAGoE,OAAI,CAACrY,aAAa,CAACkU,YAAY,GAAGmE,OAAI,CAACrY,aAAa,CAACgU,SAAS,IAAIwE,SAAS;YAC9HH,OAAI,CAAC/X,UAAU,GAAGmY,QAAQ;UAC9B,CAAC,CAAC;UAEF,IAAI,CAAC3Y,YAAY,CAAC0P,gBAAgB,CAAC,OAAO,EAAE,UAAA5F,KAAK,EAAI;YACjD,IAAIyO,OAAI,CAAC9X,MAAM,IAAI,IAAI,EAAE;cACrB;YACJ;YAEA,IAAIqJ,KAAK,CAACvB,GAAG,KAAK,OAAO,IAAI,CAACuB,KAAK,CAAC8O,QAAQ,EAAE;cAC1CL,OAAI,CAACtY,aAAa,CAAC4Y,KAAK,CAAC,CAAC;YAC9B;UACJ,CAAC,CAAC;UAEF,IAAI,CAAC7Y,YAAY,CAAC0P,gBAAgB,CAAC,OAAO,EAAE,UAAC/b,CAAC,EAAK;YAC/C4kB,OAAI,CAAClE,eAAe,CAAC1gB,CAAC,CAAC;YAEvB,IAAIA,CAAC,CAAC2gB,MAAM,CAAC9e,KAAK,CAACgE,IAAI,CAAC,CAAC,EAAE;cACvB+e,OAAI,CAACtY,aAAa,CAACyV,eAAe,CAAC,UAAU,CAAC;YAClD,CAAC,MAAM;cACH6C,OAAI,CAACtY,aAAa,CAAC2V,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;YACrD;UACJ,CAAC,CAAC;UAEF,IAAI,CAAC5V,YAAY,CAAC0P,gBAAgB,CAAC,OAAO,EAAE,UAAC/b,CAAC,EAAK;YAC/C;YACAsgB,UAAU,CAAC,YAAM;cACbsE,OAAI,CAAC5X,MAAM,GAAG4X,OAAI,CAACvY,YAAY,CAACxK,KAAK;cACrC,IAAI+iB,OAAI,CAACvY,YAAY,CAACxK,KAAK,CAACgE,IAAI,CAAC,CAAC,EAAE;gBAChC+e,OAAI,CAACtY,aAAa,CAACyV,eAAe,CAAC,UAAU,CAAC;cAClD,CAAC,MAAM;gBACH6C,OAAI,CAACtY,aAAa,CAAC2V,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;cACrD;YACJ,CAAC,EAAE,CAAC,CAAC;UACT,CAAC,CAAC;UAEF,IAAI,CAAC3V,aAAa,CAACyP,gBAAgB,CAAC,OAAO,EAAE,YAAM;YAC/C,IAAI6I,OAAI,CAAC9X,MAAM,IAAI,IAAI,EAAE;cACrB8X,OAAI,CAAC9X,MAAM,CAACwK,OAAO,CAAC,CAAC;cACrBsN,OAAI,CAAC9X,MAAM,GAAG,IAAI;cAElB8X,OAAI,CAAClM,iBAAiB,CAAC,CAAC;cACxBkM,OAAI,CAAC5S,mBAAmB,CAAC,CAAC;;cAE1B;cACA,IAAI4S,OAAI,CAAC7X,QAAQ,CAACvL,MAAM,GAAG,CAAC,EAAE;gBAC1B,IAAM2jB,OAAO,GAAGP,OAAI,CAAC7X,QAAQ,CAAC6X,OAAI,CAAC7X,QAAQ,CAACvL,MAAM,GAAG,CAAC,CAAC;gBACvD,IAAI2jB,OAAO,CAACpW,IAAI,KAAK,WAAW,IAAI,CAACoW,OAAO,CAAC/Z,OAAO,EAAE;kBAClDwZ,OAAI,CAAC7X,QAAQ,CAACqY,GAAG,CAAC,CAAC;gBACvB,CAAC,MAAM,IAAID,OAAO,CAACxY,WAAW,EAAE;kBAC5BwY,OAAO,CAACxY,WAAW,GAAG,KAAK;gBAC/B;cACJ;cAEA;YACJ;YAEAiY,OAAI,CAAC9N,WAAW,CAAC,CAAC;UACtB,CAAC,CAAC;UAEF,IAAMuO,oBAAoB,GAAGpf,QAAQ,CAACqf,sBAAsB,CAAC,+BAA+B,CAAC;UAE7F,KAAK,IAAI9kB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6kB,oBAAoB,CAAC7jB,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAClD6kB,oBAAoB,CAAC7kB,CAAC,CAAC,CAACub,gBAAgB,CAAC,OAAO,EAAE,UAAC/b,CAAC,EAAK;cACrDA,CAAC,CAACulB,cAAc,CAAC,CAAC;cAElB,IAAIrV,MAAM,GAAGlQ,CAAC,CAAC2gB,MAAM,CAAC3G,YAAY,CAAC,qBAAqB,CAAC;cAEzD,IAAI,CAAC9J,MAAM,EAAE;gBACThG,OAAO,CAACe,KAAK,CAAC,0FAA0F,CAAC;gBACzG;cACJ;cAEA2Z,OAAI,CAACE,eAAe,CAAC5U,MAAM,CAAC;YAChC,CAAC,CAAC;UACN;UAEA,KAAK,IAAI1P,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGyI,MAAM,CAAC8D,QAAQ,CAACvL,MAAM,EAAEhB,GAAC,EAAE,EAAE;YAC7C,IAAI,CAACgQ,UAAU,CAACvH,MAAM,CAAC8D,QAAQ,CAACvM,GAAC,CAAC,CAAC;UACvC;;UAEA;UACA,IAAI,IAAI,CAAC+L,aAAa,EAAE;YACpB,IAAI,CAACA,aAAa,CAACwP,gBAAgB,CAAC,OAAO,EAAE,UAAC/b,CAAC,EAAK;cAChD,IAAIwlB,GAAG,GAAGxlB,CAAC,CAAC2gB,MAAM,CAACW,OAAO,CAAC,mBAAmB,CAAC;cAC/C,IAAI,CAACkE,GAAG,EAAE;gBACN;cACJ;cAEA,IAAIC,KAAK,GAAGD,GAAG,CAAClE,OAAO,CAAC,gBAAgB,CAAC,IAAIkE,GAAG,CAAClE,OAAO,CAAC,KAAK,CAAC;cAC/D,IAAI,CAACmE,KAAK,EAAE;gBACR;cACJ;cAEA,IAAIC,MAAM,GAAGD,KAAK,CAACrV,aAAa,CAAC,MAAM,CAAC;cACxC,IAAIsV,MAAM,EAAE;gBACR7I,SAAS,CAAC8I,SAAS,CAACC,SAAS,CAACF,MAAM,CAACvf,WAAW,CAAC;gBACjD,IAAI0f,UAAU,GAAG5c,MAAM,CAAChE,cAAc,IAAI,SAAS;gBACnDugB,GAAG,CAACpf,SAAS,GAAG,0CAA0C,GAAGyf,UAAU;gBACvEvF,UAAU,CAAC,YAAM;kBACbkF,GAAG,CAACpf,SAAS,GAAG,0CAA0C;gBAC9D,CAAC,EAAE,IAAI,CAAC;cACZ;YACJ,CAAC,CAAC;UACN;UAEAH,QAAQ,CAAC8V,gBAAgB,CAAC,OAAO,EAAE,UAAA5F,KAAK,EAAI;YACxC,IAAIA,KAAK,CAACwK,MAAM,CAACmF,OAAO,CAAC,8BAA8B,CAAC,EAAE;cACtDlB,OAAI,CAAClC,oBAAoB,CAACvM,KAAK,CAACwK,MAAM,CAAC;cACvCiE,OAAI,CAAC7B,iBAAiB,CAAC,CAAC;YAC5B;UACJ,CAAC,CAAC;UAEF9c,QAAQ,CAAC8V,gBAAgB,CAAC,QAAQ,EAAE,UAAA5F,KAAK,EAAI;YACzC,IAAIA,KAAK,CAACwK,MAAM,CAACmF,OAAO,CAAC,6GAA6G,CAAC,EAAE;cACrI,IAAI3P,KAAK,CAACwK,MAAM,CAACmF,OAAO,CAAC,8BAA8B,CAAC,EAAE;gBACtDlB,OAAI,CAAClC,oBAAoB,CAACvM,KAAK,CAACwK,MAAM,CAAC;cAC3C;cAEAiE,OAAI,CAAC7B,iBAAiB,CAAC,CAAC;cACxB;YACJ;YAEA,IAAI5M,KAAK,CAACwK,MAAM,CAACW,OAAO,CAAC,8DAA8D,CAAC,EAAE;cACtFsD,OAAI,CAAC7B,iBAAiB,CAAC,CAAC;YAC5B;UACJ,CAAC,CAAC;UAEF9c,QAAQ,CAAC8V,gBAAgB,CAAC,OAAO,EAAE,UAAA5F,KAAK,EAAI;YACxC,IAAI,CAACA,KAAK,CAACwK,MAAM,CAACW,OAAO,CAAC,uDAAuD,CAAC,EAAE;cAChF;YACJ;YAEAhB,UAAU,CAAC,YAAM;cACbsE,OAAI,CAAC7B,iBAAiB,CAAC,CAAC;YAC5B,CAAC,EAAE,CAAC,CAAC;UACT,CAAC,CAAC;;UAEF;UACA,IAAMhQ,eAAe,GAAG9M,QAAQ,CAAC+D,cAAc,CAAC,iBAAiB,CAAC;UAClE,IAAI+I,eAAe,EAAE;YACjBA,eAAe,CAACgJ,gBAAgB,CAAC,OAAO,EAAE,YAAM;cAC5C,IAAM7L,MAAM,GAAG6C,eAAe,CAACiH,YAAY,CAAC,qBAAqB,CAAC;cAClE,IAAI9J,MAAM,EAAE;gBACR0U,OAAI,CAACmB,YAAY,CAAC7V,MAAM,CAAC;cAC7B;YACJ,CAAC,CAAC;UACN;;UAEA;UACA,IAAI,IAAI,CAACxC,mBAAmB,IAAIzE,MAAM,CAAC+c,wBAAwB,EAAE;YAC7D,IAAI,CAACvY,SAAS,GAAGxH,QAAQ,CAACmK,aAAa,CAACnH,MAAM,CAAC+c,wBAAwB,CAAC;YACxE,IAAI,IAAI,CAACvY,SAAS,EAAE;cAChB,IAAI,CAACA,SAAS,CAACwY,KAAK,CAACC,OAAO,GAAG,EAAE;cACjC,IAAI,CAACzY,SAAS,CAACsO,gBAAgB,CAAC,OAAO,EAAE,YAAM;gBAC3C6I,OAAI,CAACuB,eAAe,CAAC,CAAC;cAC1B,CAAC,CAAC;YACN;UACJ;;UAEA;UACA,IAAI,IAAI,CAAC3X,uBAAuB,IAAIvF,MAAM,CAACmd,iCAAiC,EAAE;YAC1E,IAAI,CAAC3X,kBAAkB,GAAGxI,QAAQ,CAACmK,aAAa,CAACnH,MAAM,CAACmd,iCAAiC,CAAC;YAC1F,IAAI,IAAI,CAAC3X,kBAAkB,EAAE;cACzB,IAAI,CAACA,kBAAkB,CAACsN,gBAAgB,CAAC,OAAO,EAAE,YAAM;gBACpD6I,OAAI,CAACpI,sBAAsB,CAAC,CAAC;cACjC,CAAC,CAAC;YACN;UACJ;QACJ,CAAC;QACDsI,eAAe,WAAfA,eAAeA,CAAC5U,MAAM,EAAE;UACpB,IAAI,CAACX,UAAU,CAACsL,MAAM,CAAC,iBAAiB,EAAE3K,MAAM,CAAC,SAAM,CAAC,UAAAhF,GAAG;YAAA,OAAIhB,OAAO,CAACe,KAAK,CAACC,GAAG,CAAC;UAAA,EAAC;QACtF,CAAC;QACDwI,wBAAwB,WAAxBA,wBAAwBA,CAAA,EAAG;UACvB,IAAMxD,MAAM,GAAG,IAAI,CAAC0H,SAAS,CAAC,CAAC;UAC/B,IAAI1H,MAAM,EAAE;YACR,IAAI,CAAC4U,eAAe,CAAC5U,MAAM,CAAC;UAChC;QACJ,CAAC;QACD6V,YAAY,WAAZA,YAAYA,CAAC7V,MAAM,EAAE;UACjB,IAAMmW,IAAI,GAAG,IAAI;UACjBC,aAAa,CAAC;YACVjW,KAAK,EAAEpH,MAAM,CAAC3D,iBAAiB;YAC/BoE,OAAO,EAAET,MAAM,CAAC1D,mBAAmB;YACnCghB,MAAM,EAAEtd,MAAM,CAACzD,kBAAkB;YACjCghB,UAAU,EAAEvd,MAAM,CAACxD,sBAAsB;YACzCghB,QAAQ,EAAE,SAAVA,QAAQA,CAAYC,SAAS,EAAE;cAC3B,IAAIA,SAAS,EAAE;gBACX;gBACA,IAAIL,IAAI,CAACvZ,MAAM,EAAE;kBACbuZ,IAAI,CAACvZ,MAAM,CAACwK,OAAO,CAAC,CAAC;kBACrB+O,IAAI,CAACvZ,MAAM,GAAG,IAAI;kBAClBuZ,IAAI,CAACrU,mBAAmB,CAAC,CAAC;kBAC1BqU,IAAI,CAAC3N,iBAAiB,CAAC,CAAC;gBAC5B;gBAEA2N,IAAI,CAAC9W,UAAU,CAACsL,MAAM,CAAC,cAAc,EAAE3K,MAAM,CAAC,SACpC,CAAC,UAAAhF,GAAG;kBAAA,OAAIhB,OAAO,CAACe,KAAK,CAAC,yBAAyB,EAAEC,GAAG,CAAC;gBAAA,EAAC;cACpE;YACJ;UACJ,CAAC,CAAC;QACN,CAAC;QACDoP,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UAAA,IAAAqM,OAAA;UACpB;UACA,IAAI,CAACzF,wBAAwB,CAAC,CAAC;;UAE/B;UACA,IAAI,IAAI,CAACpU,MAAM,EAAE;YACb;UACJ;;UAEA;UACA,IAAI,CAACM,mBAAmB,GAAGkT,UAAU,CAAC,YAAM;YACxC,IAAIqG,OAAI,CAACxZ,aAAa,EAAE;cACpBwZ,OAAI,CAACC,YAAY,CAAC,CAAC;cACnBD,OAAI,CAACxZ,aAAa,GAAG,KAAK;YAC9B;YACAwZ,OAAI,CAACvZ,mBAAmB,GAAG,IAAI;UACnC,CAAC,EAAE,GAAG,CAAC;QACX,CAAC;QACDyZ,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;UACnB,OAAO,IAAI,CAAC5D,sBAAsB,CAC9B,WAAW,EACX,sFACJ,CAAC;QACL,CAAC;QACD6D,2BAA2B,WAA3BA,2BAA2BA,CAAA,EAAG;UAC1B,OAAO,IAAI,CAAC7D,sBAAsB,CAC9B,kBAAkB,EAClB,4FACJ,CAAC;QACL,CAAC;QACD8D,2BAA2B,WAA3BA,2BAA2BA,CAAA,EAAG;UAC1B,OAAO,IAAI,CAAC9D,sBAAsB,CAAC,kBAAkB,CAAC;QAC1D,CAAC;QACD+D,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UACpB,OAAO,IAAI,CAAC/D,sBAAsB,CAC9B,YAAY,EACZ,uFACJ,CAAC;QACL,CAAC;QACD2D,YAAY,WAAZA,YAAYA,CAAA,EAAG;UAAA,IAAAK,OAAA;UACX,IAAM/W,MAAM,GAAG,IAAI,CAAC0H,SAAS,CAAC,CAAC;UAC/B,IAAI,CAAC1H,MAAM,EAAE;YACT,OAAOpN,OAAO,CAACC,OAAO,CAAC,CAAC;UAC5B;UAEA,IAAI,CAAC,IAAI,CAAC4f,gBAAgB,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAChS,iBAAiB,CAAC,YAAY,EAAE,aAAa,CAAC;YACnD,OAAO7N,OAAO,CAACC,OAAO,CAAC,CAAC;UAC5B;UAEA,IAAMmkB,QAAQ,GAAG,CAAC,CAAC;;UAEnB;UACA;UACA;UACA,IAAMC,MAAM,GAAG,IAAI,CAACrE,gBAAgB,CAAC,CAAC;UAEtCqE,MAAM,CAAC7W,OAAO,CAAC,UAAA8Q,KAAK,EAAI;YACpB,IAAMxM,GAAG,GAAGwM,KAAK,CAACG,OAAO,CAACC,OAAO,IACzB,CAACJ,KAAK,CAAC9c,IAAI,IAAI,EAAE,EAAE0M,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,QAAQ,EAAE,UAAAoW,KAAK;cAAA,OAAIA,KAAK,CAACC,WAAW,CAAC,CAAC;YAAA,EAAE;YAE3G,IAAI,CAACzS,GAAG,EAAE;cACN;YACJ;YAEA,IAAIwM,KAAK,CAAC1Y,IAAI,KAAK,UAAU,EAAE;cAC3Bwe,QAAQ,CAACtS,GAAG,CAAC,GAAGwM,KAAK,CAACkG,OAAO;YACjC,CAAC,MAAM,IAAIlG,KAAK,CAAC1Y,IAAI,KAAK,QAAQ,EAAE;cAChCwe,QAAQ,CAACtS,GAAG,CAAC,GAAGwM,KAAK,CAACvf,KAAK,GAAG0lB,UAAU,CAACnG,KAAK,CAACvf,KAAK,CAAC,GAAG,IAAI;YAChE,CAAC,MAAM;cACHqlB,QAAQ,CAACtS,GAAG,CAAC,GAAGwM,KAAK,CAACvf,KAAK,IAAI,IAAI;YACvC;UACJ,CAAC,CAAC;;UAEF;UACAqlB,QAAQ,CAACM,SAAS,GAAG,IAAI,CAACX,oBAAoB,CAAC,CAAC;UAChDK,QAAQ,CAACO,gBAAgB,GAAG,IAAI,CAACX,2BAA2B,CAAC,CAAC;UAC9DI,QAAQ,CAACQ,gBAAgB,GAAG,IAAI,CAACX,2BAA2B,CAAC,CAAC;UAC9DG,QAAQ,CAACS,UAAU,GAAG,IAAI,CAACX,qBAAqB,CAAC,CAAC;UAElD,IAAMrD,eAAe,GAAG,IAAI,CAACD,2BAA2B,CAAC,CAAC;UAC1D,IAAIC,eAAe,CAACniB,MAAM,GAAG,CAAC,EAAE;YAC5B0lB,QAAQ,CAACvD,eAAe,GAAGA,eAAe;YAC1CuD,QAAQ,CAACU,iBAAiB,GAAGjE,eAAe,CAACkE,GAAG,CAAC,UAAAC,QAAQ;cAAA,OAAIA,QAAQ,CAAC/D,UAAU;YAAA,EAAC;UACrF;UAEA,OAAO,IAAI,CAACxU,UAAU,CAACsL,MAAM,CAAC,cAAc,EAAE3K,MAAM,EAAEgX,QAAQ,CAAC,SACrD,CAAC,UAAAhc,GAAG,EAAI;YACVhB,OAAO,CAACe,KAAK,CAAC,wBAAwB,EAAEC,GAAG,CAAC;YAC5C+b,OAAI,CAACtW,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC;UACxD,CAAC,CAAC;QACV,CAAC;QACDwG,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAI,IAAI,CAAC/J,mBAAmB,EAAE;YAC1B6T,YAAY,CAAC,IAAI,CAAC7T,mBAAmB,CAAC;YACtC,IAAI,CAACA,mBAAmB,GAAG,IAAI;UACnC;UAEA,IAAI,IAAI,CAACD,aAAa,EAAE;YACpB,IAAI,CAACA,aAAa,GAAG,KAAK;YAC1B,OAAO,IAAI,CAACyZ,YAAY,CAAC,CAAC;UAC9B;UAEA,OAAO9jB,OAAO,CAACC,OAAO,CAAC,CAAC;QAC5B,CAAC;QACDkN,qBAAqB,WAArBA,qBAAqBA,CAACC,MAAM,EAAE6X,KAAK,EAAE;UACjC,IAAI,IAAI,CAACtb,oBAAoB,IAAI,CAACsb,KAAK,EAAE;YACrC;UACJ;UACA,IAAI,CAACjU,SAAS,CAAC,IAAIC,WAAW,CAAC,6BAA6B,EAAE;YAAEC,MAAM,EAAE;cAAE9D,MAAM,EAAEA;YAAO;UAAE,CAAC,CAAC,CAAC;UAC9F,IAAI,CAAC8H,SAAS,CAAC9H,MAAM,CAAC;UACtB,IAAI,CAACzD,oBAAoB,GAAG,IAAI;QACpC,CAAC;QACDub,YAAY,WAAZA,YAAYA,CAACte,OAAO,EAAE;UAClBmT,SAAS,CAAC8I,SAAS,CAACC,SAAS,CAAClc,OAAO,CAAC;QAC1C,CAAC;QACDue,cAAc,WAAdA,cAAcA,CAAA,EAAG;UAAA,IAAAC,OAAA;UACb,IAAI,IAAI,CAAC5a,WAAW,IAAI,CAAC,IAAI,CAACiC,UAAU,EAAE;YACtC;UACJ;UAEAsN,SAAS,CAACC,YAAY,CAACC,YAAY,CAAC;YAAElB,KAAK,EAAE;cAAEmB,gBAAgB,EAAE,IAAI;cAAEC,gBAAgB,EAAE,IAAI;cAAEC,eAAe,EAAE;YAAK;UAAE,CAAC,CAAC,CACpHla,IAAI,CAAC,UAAA8J,MAAM,EAAI;YACZ,IAAIqQ,QAAQ,GAAGC,aAAa,CAACC,eAAe,CAAC,uBAAuB,CAAC,GAC/D,uBAAuB,GACvBD,aAAa,CAACC,eAAe,CAAC,wBAAwB,CAAC,GACnD,wBAAwB,GACxB,YAAY;YAEtB6K,OAAI,CAAC3a,aAAa,GAAG,IAAI6P,aAAa,CAACtQ,MAAM,EAAE;cAC3CqQ,QAAQ,EAAEA,QAAQ;cAClBG,kBAAkB,EAAE;YACxB,CAAC,CAAC;YAEF4K,OAAI,CAAC1a,kBAAkB,GAAG0a,OAAI,CAAClb,MAAM;YACrCkb,OAAI,CAAC5W,eAAe,GAAG,KAAK;YAE5B,IAAI6W,OAAO,GAAG,IAAI3Y,OAAO,CAACgO,OAAO,CAAC,CAAC;YACnC,IAAItN,MAAM,GAAGgY,OAAI,CAACtQ,SAAS,CAAC,CAAC;YAC7B,IAAIwG,YAAY,GAAGtb,OAAO,CAACC,OAAO,CAAC,CAAC;YAEpCmlB,OAAI,CAAC3a,aAAa,CAACwO,gBAAgB,CAAC,eAAe,EAAE,UAAC/b,CAAC,EAAK;cACxD,IAAIA,CAAC,CAACyG,IAAI,IAAIzG,CAAC,CAACyG,IAAI,CAAC8X,IAAI,GAAG,CAAC,EAAE;gBAC3BH,YAAY,GAAGA,YAAY,CAACpb,IAAI,cAAAC,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAA8lB,SAAA;kBAAA,IAAA3hB,IAAA,EAAAqY,UAAA,EAAAtM,YAAA,EAAAuM,MAAA;kBAAA,OAAA3c,YAAA,GAAAC,CAAA,WAAAgmB,SAAA;oBAAA,kBAAAA,SAAA,CAAAjoB,CAAA;sBAAA;wBAAAioB,SAAA,CAAAjoB,CAAA;wBAAA,OACZJ,CAAC,CAACyG,IAAI,CAACwY,WAAW,CAAC,CAAC;sBAAA;wBAAjCxY,IAAI,GAAA4hB,SAAA,CAAAjnB,CAAA;wBACJ0d,UAAU,GAAG,IAAInM,UAAU,CAAClM,IAAI,CAAC;wBACjC+L,YAAY,GAAGsM,UAAU,CAAC7D,MAAM,CAAC,UAAUiE,GAAG,EAAEC,MAAI,EAAE;0BAAE,OAAOD,GAAG,GAAGE,MAAM,CAACC,YAAY,CAACF,MAAI,CAAC;wBAAE,CAAC,EAAE,EAAE,CAAC;wBACtGJ,MAAM,GAAGO,IAAI,CAAC9M,YAAY,CAAC;wBAC/B2V,OAAO,CAACtkB,IAAI,CAACkb,MAAM,CAAC;sBAAC;wBAAA,OAAAsJ,SAAA,CAAAhnB,CAAA;oBAAA;kBAAA,GAAA+mB,QAAA;gBAAA,CACxB,GAAC;cACN;YACJ,CAAC,CAAC;YAEFF,OAAI,CAAC3a,aAAa,CAACwO,gBAAgB,CAAC,MAAM,EAAE,YAAM;cAC9CjP,MAAM,CAACyS,SAAS,CAAC,CAAC,CAACjP,OAAO,CAAC,UAAAkP,KAAK;gBAAA,OAAIA,KAAK,CAACC,IAAI,CAAC,CAAC;cAAA,EAAC;cACjDrB,YAAY,CAACpb,IAAI,CAAC;gBAAA,OAAMmlB,OAAO,CAAC5P,QAAQ,CAAC,CAAC;cAAA,EAAC;YAC/C,CAAC,CAAC;YAEF,IAAIrR,QAAQ,GAAG2V,SAAS,CAAC3V,QAAQ,IAAIjB,QAAQ,CAACyZ,eAAe,CAAC7Y,IAAI,IAAI,OAAO;YAC7EqhB,OAAI,CAAC3Y,UAAU,CAACoQ,IAAI,CAAC,iBAAiB,EAAEzP,MAAM,EAAEiY,OAAO,EAAEhL,QAAQ,EAAEjW,QAAQ,CAAC;YAC5EghB,OAAI,CAAC3a,aAAa,CAACrF,KAAK,CAAC,GAAG,CAAC;YAC7BggB,OAAI,CAAC5a,WAAW,GAAG,IAAI;YACvB4a,OAAI,CAACI,eAAe,CAAC,CAAC;UAC1B,CAAC,CAAC,SACI,CAAC,UAAApd,GAAG,EAAI;YACVhB,OAAO,CAACe,KAAK,CAAC,2BAA2B,EAAEC,GAAG,CAAC;UACnD,CAAC,CAAC;QACV,CAAC;QACD0F,aAAa,WAAbA,aAAaA,CAAA,EAAG;UACZ,IAAI,CAAC,IAAI,CAACtD,WAAW,IAAI,CAAC,IAAI,CAACC,aAAa,EAAE;YAC1C;UACJ;UAEA,IAAI,CAACA,aAAa,CAACkS,IAAI,CAAC,CAAC;UACzB,IAAI,CAACnS,WAAW,GAAG,KAAK;UACxB,IAAI,CAACgb,eAAe,CAAC,CAAC;QAC1B,CAAC;QACDnC,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAAC7Y,WAAW,EAAE;YAClB,IAAI,CAACsD,aAAa,CAAC,CAAC;UACxB,CAAC,MAAM;YACH,IAAI,CAACqX,cAAc,CAAC,CAAC;UACzB;QACJ,CAAC;QACDK,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,CAAC,IAAI,CAAC7a,SAAS,EAAE;YACjB;UACJ;UAEA,IAAI,IAAI,CAACH,WAAW,EAAE;YAClB,IAAI,CAACG,SAAS,CAACuF,SAAS,CAACC,GAAG,CAAC,eAAe,CAAC;YAC7C,IAAI,CAACxF,SAAS,CAACrH,SAAS,GAAG,wCAAwC;UACvE,CAAC,MAAM;YACH,IAAI,CAACqH,SAAS,CAACuF,SAAS,CAACkD,MAAM,CAAC,eAAe,CAAC;YAChD,IAAI,CAACzI,SAAS,CAACrH,SAAS,GAAG,8CAA8C;UAC7E;QACJ;MACJ,CAAC;MACDmiB,KAAK,EAAE;QACHva,cAAc,WAAdA,cAAcA,CAAA,EAAG;UACb;UACA;QAAA,CACH;QACDU,kBAAkB,WAAlBA,kBAAkBA,CAAC8Z,MAAM,EAAE;UACvB,IAAI,IAAI,CAAC/a,SAAS,EAAE;YAChB,IAAI,CAACA,SAAS,CAACwY,KAAK,CAACC,OAAO,GAAGsC,MAAM,GAAG,MAAM,GAAI,IAAI,CAAC9a,mBAAmB,GAAG,EAAE,GAAG,MAAO;UAC7F;UAEA,IAAI,IAAI,CAACpB,aAAa,EAAE;YACpB,IAAI,CAACA,aAAa,CAAC2Z,KAAK,CAACC,OAAO,GAAGsC,MAAM,GAAG,MAAM,GAAG,EAAE;UAC3D;UAEA,IAAI,IAAI,CAACnc,YAAY,EAAE;YACnB,IAAI,CAACA,YAAY,CAAC8V,QAAQ,GAAGqG,MAAM;YACnC,IAAIA,MAAM,EAAE;cACR,IAAI,CAACnc,YAAY,CAACG,WAAW,GAAG,EAAE;YACtC;UACJ;QACJ;MACJ,CAAC;MACDic,OAAO,WAAPA,OAAOA,CAAA,EAAG;QAAA,IAAAC,OAAA;QACNzlB,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAAqmB,SAAA;UAAA,OAAAvmB,YAAA,GAAAC,CAAA,WAAAumB,SAAA;YAAA,kBAAAA,SAAA,CAAAxoB,CAAA;cAAA;gBAAAwoB,SAAA,CAAAxoB,CAAA;gBAAA,OACSsoB,OAAI,CAACxZ,eAAe,CAAC,CAAC;cAAA;gBAC5BwZ,OAAI,CAAC/D,aAAa,CAAC,CAAC;cAAC;gBAAA,OAAAiE,SAAA,CAAAvnB,CAAA;YAAA;UAAA,GAAAsnB,QAAA;QAAA,CACxB,GAAE,CAAC;QAEJlkB,MAAM,CAACsX,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC9M,kBAAkB,CAAC;QAChExK,MAAM,CAACsX,gBAAgB,CAAC,4BAA4B,EAAE,IAAI,CAACxB,qBAAqB,CAAC;MACrF,CAAC;MACDsO,aAAa,WAAbA,aAAaA,CAAA,EAAG;QACZpkB,MAAM,CAACqkB,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC7Z,kBAAkB,CAAC;QACnExK,MAAM,CAACqkB,mBAAmB,CAAC,4BAA4B,EAAE,IAAI,CAACvO,qBAAqB,CAAC;QAEpF,IAAI,CAAC9I,SAAS,CAAC,KAAK,CAAC;QAErB,IAAI,IAAI,CAAC3E,MAAM,EAAE;UACb,IAAI,CAACA,MAAM,CAACwK,OAAO,CAAC,CAAC;UACrB,IAAI,CAACxK,MAAM,GAAG,IAAI;QACtB;QACA,IAAI,IAAI,CAACyC,UAAU,EAAE;UACjB,IAAI,CAACA,UAAU,CAACkQ,IAAI,CAAC,CAAC;QAC1B;MACJ,CAAC;MACDqI,QAAQ,EAAE7e,MAAM,CAAC9D;IACrB,CAAC,CAAC,CAAC4jB,KAAK,CAAC9f,MAAM,CAAC6C,kBAAkB,CAAC;IAEnC,OAAOI,GAAG;EACd,CAAC;EAED,OAAO;IACHR,UAAU,EAAEA;EAChB,CAAC;AACL,CAAC,CAAC,CAAC;;AAEH;AACAzF,QAAQ,CAAC8V,gBAAgB,CAAC,OAAO,EAAE,UAAU/b,CAAC,EAAE;EAC5C,IAAMwlB,GAAG,GAAGxlB,CAAC,CAAC2gB,MAAM,CAACW,OAAO,CAAC,qBAAqB,CAAC;EACnD,IAAI,CAACkE,GAAG,EAAE;IACN;EACJ;EACA,IAAM1d,OAAO,GAAG0d,GAAG,CAACxL,YAAY,CAAC,eAAe,CAAC;EACjD,IAAMjQ,MAAM,GAAGjC,OAAO,GAAG7B,QAAQ,CAAC+D,cAAc,CAAClC,OAAO,CAAC,GAAG,IAAI;EAChE,IAAI,CAACiC,MAAM,EAAE;IACTG,OAAO,CAACe,KAAK,CAAC,yBAAyB,EAAEnD,OAAO,CAAC;IACjD;EACJ;EACA,IAAMtB,IAAI,GAAGP,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;EACxCM,IAAI,CAACwiB,QAAQ,GAAG,QAAQ,GAAGlhB,OAAO,GAAG,MAAM;EAC3CtB,IAAI,CAACE,IAAI,GAAGqD,MAAM,CAACkf,SAAS,CAAC,WAAW,CAAC;EACzCziB,IAAI,CAAC0e,KAAK,CAAC,CAAC;AAChB,CAAC,CAAC;;AAEF;AACAjf,QAAQ,CAAC8V,gBAAgB,CAAC,OAAO,EAAE,UAAU/b,CAAC,EAAE;EAC5C,IAAMwG,IAAI,GAAGxG,CAAC,CAAC2gB,MAAM,CAACW,OAAO,CAAC,oBAAoB,CAAC;EACnD,IAAI,CAAC9a,IAAI,EAAE;IACP;EACJ;EAEA,IAAM0iB,SAAS,GAAG1iB,IAAI,CAAC8a,OAAO,CAAC,4BAA4B,CAAC;EAC5D,IAAM6H,GAAG,GAAGD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE9Y,aAAa,CAAC,KAAK,CAAC;EAC3C,IAAI,CAAC+Y,GAAG,EAAE;IACN;EACJ;EAEA,IAAM5hB,GAAG,GAAG4hB,GAAG,CAAC5hB,GAAG;EACnB,IAAI,CAACA,GAAG,IAAI,CAACA,GAAG,CAAC6hB,UAAU,CAAC,OAAO,CAAC,EAAE;IAClC,OAAO,CAAC;EACZ;EAEAppB,CAAC,CAACulB,cAAc,CAAC,CAAC;EAElB8D,KAAK,CAAC9hB,GAAG,CAAC,CACLvE,IAAI,CAAC,UAAUsmB,GAAG,EAAE;IAAE,OAAOA,GAAG,CAAC9N,IAAI,CAAC,CAAC;EAAE,CAAC,CAAC,CAC3CxY,IAAI,CAAC,UAAUwY,IAAI,EAAE;IAClB,IAAM7V,GAAG,GAAGgW,GAAG,CAACC,eAAe,CAACJ,IAAI,CAAC;IACrC,IAAMna,CAAC,GAAG4E,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;IACrC7E,CAAC,CAACqF,IAAI,GAAGf,GAAG;IACZtE,CAAC,CAAC2nB,QAAQ,GAAGxiB,IAAI,CAACwT,YAAY,CAAC,UAAU,CAAC,IAAI,qBAAqB;IACnE/T,QAAQ,CAACsjB,IAAI,CAACC,WAAW,CAACnoB,CAAC,CAAC;IAC5BA,CAAC,CAAC6jB,KAAK,CAAC,CAAC;IACTjf,QAAQ,CAACsjB,IAAI,CAACE,WAAW,CAACpoB,CAAC,CAAC;IAC5Bif,UAAU,CAAC,YAAY;MAAE3E,GAAG,CAACK,eAAe,CAACrW,GAAG,CAAC;IAAE,CAAC,EAAE,GAAG,CAAC;EAC9D,CAAC,CAAC,SACI,CAAC,UAAUuF,GAAG,EAAE;IAAEhB,OAAO,CAACe,KAAK,CAAC,2BAA2B,EAAEC,GAAG,CAAC;EAAE,CAAC,CAAC;AACnF,CAAC,CAAC","file":"chat-interaction.js","sourcesContent":["window.chatInteractionManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n codeCopiedText: 'Copied!',\n assistantLabel: 'Assistant',\n\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-msg-role ai-chat-msg-role-user\">You</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><span :class=\"getAssistantIcon(message)\"></span></span>\n {{ getAssistantLabel(message) }}\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <button v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <span :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></span>\n </button>\n <button class=\"btn btn-sm btn-link text-secondary p-0 button-message-toolbox\" @click=\"copyResponse(message.content)\" title=\"Click here to copy response to clipboard.\">\n <span class=\"fa-solid fa-copy\"></span>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <span v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></span>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <span class=\"fa-solid fa-xmark\"></span>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <span v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></span>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><span class=\"fa fa-robot\" style=\"display: inline-block;\"></span></span>\n Assistant\n </div>\n `,\n // Localizable strings\n untitledText: 'Untitled',\n clearHistoryTitle: 'Clear History',\n clearHistoryMessage: 'Are you sure you want to clear the chat history? This action cannot be undone. Your documents, parameters, and tools will be preserved.',\n clearHistoryOkText: 'Yes',\n clearHistoryCancelText: 'Cancel'\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><span class=\"fa-solid fa-code\"></span> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><span class=\"fa-regular fa-copy\"></span></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n return `<div class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <div class=\"mt-2\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <span class=\"fa-solid fa-download\"></span>\n </a>\n </div>\n </div>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map shared with ai-chat.js\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<span class=\"fa-solid fa-download\"></span> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = tryExtractChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // Extract a [chart:{...json...}] marker. This avoids regex issues with nested brackets.\n function tryExtractChartMarker(text) {\n const token = '[chart:';\n const start = text.indexOf(token);\n if (start < 0) {\n return null;\n }\n\n // Find JSON object boundary by balancing braces\n const jsonStart = start + token.length;\n let i = jsonStart;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\n' || text[i] === '\\r' || text[i] === '\\t')) {\n i++;\n }\n\n if (i >= text.length || text[i] !== '{') {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escape = false;\n\n for (; i < text.length; i++) {\n const ch = text[i];\n\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === '\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n const jsonEnd = i;\n // Expect closing bracket after JSON\n const closeBracketIndex = text.indexOf(']', jsonEnd + 1);\n if (closeBracketIndex < 0) {\n return null;\n }\n\n const json = text.substring(jsonStart, jsonEnd + 1).trim();\n return {\n startIndex: start,\n endIndex: closeBracketIndex + 1,\n json: json\n };\n }\n }\n }\n\n return null;\n }\n\n function renderChartsInMessage(message) {\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n const canvas = document.getElementById(c.chartId);\n if (!canvas) {\n continue;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n continue;\n }\n\n // When the canvas is inside a hidden container (e.g., display:none),\n // it has zero dimensions. Keep the config for later rendering.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[c.chartId] = c.config;\n continue;\n }\n\n try {\n // Destroy existing chart instance if re-rendering\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof c.config === 'string' ? JSON.parse(c.config) : c.config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n } catch (e) {\n console.error('Error creating chart:', e);\n }\n }\n });\n }\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = marked.parse(content, { renderer });\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n const initialize = (instanceConfig) => {\n\n const config = Object.assign({}, defaultConfig, instanceConfig);\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const app = Vue.createApp({\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isInteractionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n prompt: '',\n initialFieldValues: new Map(),\n settingsDirty: false,\n saveSettingsTimeout: null,\n saveIndicatorTimeout: null,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'chat-interaction-' + Math.random().toString(36).slice(2),\n conversationModeEnabled: config.chatMode === 'Conversation',\n conversationButton: null,\n isConversationMode: false,\n notifications: [],\n notificationDismissTimers: {},\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadInteraction\", (data) => {\n this.initializeInteraction(data.itemId, true);\n this.messages = [];// Update the title field if it exists\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && data.title) {\n titleInput.value = data.title;\n }\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n });\n });\n });\n\n this.connection.on(\"SettingsSaved\", (itemId, title) => {\n // Update the history list item if it exists\n // Use a more specific selector to only target history list items, not other elements like the Clear History button\n const historyItem = document.querySelector(`.chat-interaction-history-item[data-interaction-id=\"${itemId}\"]`);\n if (historyItem) {\n historyItem.textContent = title || config.untitledText;\n }\n\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && title) {\n titleInput.value = title;\n }\n\n this.showSaveIndicator('Saved', 'text-success');\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n this.showSaveIndicator('Save failed', 'text-danger');\n\n if (this.isRecording) {\n this.stopRecording();\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (itemId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (itemId, text) => {\n if (text) {\n this.stopAudio();\n\n // If there's an interrupted assistant message still streaming,\n // mark it as done to stop the spinner animation.\n if (this._conversationAssistantMessage) {\n var oldMsg = this.messages[this._conversationAssistantMessage.index];\n if (oldMsg) {\n oldMsg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (itemId, messageId, token, responseId, appearance) => {\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n appearance: this.normalizeAssistantAppearance(appearance),\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.content = this._conversationAssistantMessage.content;\n msg.htmlContent = parseMarkdownContent(msg.content, msg);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (itemId, messageId) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (itemId, base64Audio, contentType) => {\n if (base64Audio) {\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (itemId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"HistoryCleared\", (itemId) => {\n // Clear messages and show placeholder\n this.messages = [];\n this.showPlaceholder();\n\n // Hide the clear history button since there's no history now\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.add('d-none');\n }\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n this.reloadCurrentInteraction();\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingChatInteractionMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedChatInteractionMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n if (message.content) {\n let processedContent = message.content.trim();\n\n if (message.references && typeof message.references === \"object\" && Object.keys(message.references).length) {\n\n // Only include references that were actually cited in the response.\n const citedRefs = Object.entries(message.references).filter(([key]) => processedContent.includes(key));\n\n if (citedRefs.length) {\n // Sort by original index so display indices follow a natural order.\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n // Phase 1: Replace all markers with unique placeholders.\n let displayIndex = 1;\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${value.index}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n value._displayIndex = displayIndex++;\n value._placeholder = placeholder;\n }\n\n // Phase 2: Replace placeholders with sequential display indices.\n for (const [, value] of citedRefs) {\n processedContent = processedContent.replaceAll(value._placeholder, `<sup><strong>${value._displayIndex}</strong></sup>`);\n }\n\n processedContent = processedContent.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n\n processedContent += '<br><br>';\n\n for (const [key, value] of citedRefs) {\n const label = value.text || `[doc:${value.index}]`;\n processedContent += value.link\n ? `**${value._displayIndex}**. [${label}](${value.link})<br>`\n : `**${value._displayIndex}**. ${label}<br>`;\n }\n }\n }\n\n message.content = processedContent;\n message.htmlContent = parseMarkdownContent(processedContent, message);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : defaultConfig.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n async sendMessage() {\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // Flush any pending settings save before sending a message\n // to prevent concurrent hub calls that can cause database deadlocks.\n await this.flushPendingSave();\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n // Show the clear history button since we now have prompts\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.remove('d-none');\n }\n\n this.streamMessage(trimmedPrompt);\n this.inputElement.value = '';\n this.prompt = '';\n },\n streamMessage(trimmedPrompt) {\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n var messageIndex = this.messages.length;\n var currentItemId = this.getItemId();\n\n this.stream = this.connection.stream(\"SendMessage\", currentItemId, trimmedPrompt)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n if (chunk.sessionId && !currentItemId) {\n this.setItemId(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n messageIndex = this.messages.length;\n let newMessage = {\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n };\n\n this.messages.push(newMessage);\n message = newMessage;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = value;\n }\n }\n\n if (chunk.content) {\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n let processedContent = chunk.content;\n\n for (const [key, value] of Object.entries(references)) {\n processedContent = processedContent.replaceAll(key, `<sup><strong>${value.index}</strong></sup>`);\n }\n\n content += processedContent.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n }\n\n message.content = content;\n\n message.htmlContent = parseMarkdownContent(content, message);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n return {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n if (Object.keys(references).length) {\n let message = this.messages[messageIndex];\n const content = message.content || '';\n\n // Only include references that were actually cited in the response.\n // Check both raw [doc:N] markers and already-rendered <sup> tags from streaming.\n const citedRefs = Object.entries(references).filter(([key, value]) =>\n content.includes(key) || content.includes(`<sup><strong>${value.index}</strong></sup>`)\n );\n\n if (!citedRefs.length) {\n return;\n }\n\n // Sort by original index so display indices follow a natural order.\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n // Phase 1: Replace all markers with unique placeholders to avoid collisions during remapping.\n let processed = content.trim();\n let displayIndex = 1;\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${value.index}__`;\n processed = processed.replaceAll(key, placeholder);\n processed = processed.replaceAll(`<sup><strong>${value.index}</strong></sup>`, placeholder);\n value._displayIndex = displayIndex++;\n value._placeholder = placeholder;\n }\n\n // Phase 2: Replace placeholders with sequential display indices.\n for (const [, value] of citedRefs) {\n processed = processed.replaceAll(value._placeholder, `<sup><strong>${value._displayIndex}</strong></sup>`);\n }\n\n processed = processed.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n\n processed += '<br><br>';\n\n for (const [key, value] of citedRefs) {\n const label = value.text || `[doc:${value.index}]`;\n processed += value.link\n ? `**${value._displayIndex}**. [${label}](${value.link})<br>`\n : `**${value._displayIndex}**. ${label}<br>`;\n }\n\n message.content = processed;\n message.htmlContent = parseMarkdownContent(processed, message);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Save any settings that were deferred during streaming.\n if (this.settingsDirty) {\n this.debouncedSaveSettings();\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getItemId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.isPlayingAudio && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is currently playing, queue this blob for later.\n if (this.isPlayingAudio && this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n const nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n },\n toggleConversationMode() {\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var itemId = this.getItemId();\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"StartConversation\", itemId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, continuation is handled\n // by the persistent stream.\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getItemId() {\n return this.inputElement.getAttribute('data-interaction-id')\n || this.inputElement.getAttribute('data-item-id');\n },\n getSaveIndicatorElement() {\n if (config.saveIndicatorElementSelector) {\n return document.querySelector(config.saveIndicatorElementSelector);\n }\n\n return document.querySelector('[data-chat-interaction-save-indicator]');\n },\n showSaveIndicator(text, className) {\n const indicator = this.getSaveIndicatorElement();\n if (!indicator) {\n return;\n }\n\n indicator.textContent = text || '';\n indicator.className = 'settings-save-indicator ' + (className || 'text-muted');\n\n if (this.saveIndicatorTimeout) {\n clearTimeout(this.saveIndicatorTimeout);\n this.saveIndicatorTimeout = null;\n }\n\n if (!text) {\n return;\n }\n\n this.saveIndicatorTimeout = setTimeout(() => {\n indicator.textContent = '';\n this.saveIndicatorTimeout = null;\n }, 3000);\n },\n clearPendingSettingsSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n },\n getFieldLabel(input) {\n const label = input\n .closest('.mb-3, .col-6, .col, .form-group, .form-floating')\n ?.querySelector('label');\n\n if (!label) {\n return input.dataset.setting || 'This field';\n }\n\n return (label.textContent || '')\n .replace(/\\s+/g, ' ')\n .trim()\n || input.dataset.setting\n || 'This field';\n },\n getValidationFeedbackElement(input) {\n let feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n return feedback;\n }\n\n feedback = document.createElement('div');\n feedback.className = 'invalid-feedback';\n input.insertAdjacentElement('afterend', feedback);\n\n return feedback;\n },\n clearSettingValidationError(input) {\n input.classList.remove('is-invalid');\n input.removeAttribute('aria-invalid');\n\n const feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n feedback.textContent = '';\n }\n },\n setSettingValidationError(input, message) {\n const feedback = this.getValidationFeedbackElement(input);\n input.classList.add('is-invalid');\n input.setAttribute('aria-invalid', 'true');\n feedback.textContent = message;\n },\n getSettingValidationMessage(input) {\n if (!input || input.disabled || input.type !== 'number') {\n return null;\n }\n\n const value = (input.value || '').trim();\n if (!value) {\n return null;\n }\n\n const number = Number(value);\n const fieldLabel = this.getFieldLabel(input);\n\n if (Number.isNaN(number)) {\n return `${fieldLabel} must be a valid number.`;\n }\n\n const min = input.getAttribute('min');\n if (min !== null && number < Number(min)) {\n return `${fieldLabel} must be ${min} or greater.`;\n }\n\n const max = input.getAttribute('max');\n if (max !== null && number > Number(max)) {\n return `${fieldLabel} must be ${max} or less.`;\n }\n\n return null;\n },\n validateSettingInput(input) {\n const message = this.getSettingValidationMessage(input);\n if (!message) {\n this.clearSettingValidationError(input);\n return true;\n }\n\n this.setSettingValidationError(input, message);\n return false;\n },\n validateSettings() {\n let isValid = true;\n\n this.getSettingInputs().forEach(input => {\n isValid = this.validateSettingInput(input) && isValid;\n });\n\n return isValid;\n },\n queueSettingsSave() {\n if (!this.validateSettings()) {\n this.clearPendingSettingsSave();\n this.settingsDirty = false;\n this.showSaveIndicator('Fix errors', 'text-danger');\n return;\n }\n\n this.settingsDirty = true;\n this.showSaveIndicator('Saving...', 'text-warning');\n this.debouncedSaveSettings();\n },\n getSettingInputs() {\n const explicitInputs = document.querySelectorAll('.setting-input[data-setting]');\n if (explicitInputs.length > 0) {\n return explicitInputs;\n }\n\n return document.querySelectorAll(\n 'input[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'select[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'textarea[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"])'\n );\n },\n getSelectedGroupValues(groupName, fallbackSelector) {\n const explicitSelections = document.querySelectorAll(`.capability-checkbox[data-save-group=\"${groupName}\"]:checked`);\n if (explicitSelections.length > 0) {\n const values = [];\n\n explicitSelections.forEach(checkbox => {\n const value = checkbox.getAttribute('data-item-id') || checkbox.value;\n if (value) {\n values.push(value);\n }\n });\n\n return values;\n }\n\n if (!fallbackSelector) {\n return [];\n }\n\n const values = [];\n const checkboxes = document.querySelectorAll(fallbackSelector);\n\n checkboxes.forEach(checkbox => {\n const baseName = checkbox.name.replace('.IsSelected', '.ItemId');\n const hiddenInput = document.querySelector(`input[type=\"hidden\"][name=\"${baseName}\"]`);\n\n if (hiddenInput && hiddenInput.value) {\n values.push(hiddenInput.value);\n }\n });\n\n return values;\n },\n getPromptTemplateSelections() {\n const promptTemplates = [];\n\n document.querySelectorAll('.prompt-template-card').forEach(card => {\n const templateIdInput = card.querySelector('.prompt-template-id-input');\n const promptParametersInput = card.querySelector('.prompt-template-parameters-input');\n const templateId = templateIdInput ? templateIdInput.value : card.getAttribute('data-template-id');\n\n if (!templateId) {\n return;\n }\n\n promptTemplates.push({\n templateId: templateId,\n promptParameters: promptParametersInput ? (promptParametersInput.value || '').trim() : ''\n });\n });\n\n return promptTemplates;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n // Replace existing notification with same type, or add new one.\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var itemId = this.getItemId();\n this.connection.invoke('HandleNotificationAction', itemId, notificationType, actionName)\n .catch(err => console.error('Failed to handle notification action:', err));\n },\n setItemId(itemId) {\n this.inputElement.setAttribute('data-interaction-id', itemId || '');\n this.inputElement.setAttribute('data-item-id', itemId || '');\n },\n resetInteraction() {\n this.setItemId('');\n this.isInteractionStarted = false;\n this.messages = [];\n this.showPlaceholder();\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keyup', event => {\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.inputElement.addEventListener('paste', (e) => {\n // Use setTimeout to allow the paste to complete before checking the value\n setTimeout(() => {\n this.prompt = this.inputElement.value;\n if (this.inputElement.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n }, 0);\n });\n\n this.buttonElement.addEventListener('click', () => {\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const chatInteractionItems = document.getElementsByClassName('chat-interaction-history-item');\n\n for (var i = 0; i < chatInteractionItems.length; i++) {\n chatInteractionItems[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var itemId = e.target.getAttribute('data-interaction-id');\n\n if (!itemId) {\n console.error('An element with the class chat-interaction-history-item with no data-interaction-id set.');\n return;\n }\n\n this.loadInteraction(itemId);\n });\n }\n\n for (let i = 0; i < config.messages.length; i++) {\n this.addMessage(config.messages[i]);\n }\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<span class=\"fa-solid fa-check\"></span> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<span class=\"fa-regular fa-copy\"></span>';\n }, 2000);\n }\n });\n }\n\n document.addEventListener('input', event => {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('change', event => {\n if (event.target.matches('.setting-input[data-setting], .capability-checkbox[data-save-group], .group-toggle, .ci-agent-global-toggle')) {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n }\n\n this.queueSettingsSave();\n return;\n }\n\n if (event.target.closest('.prompt-template-parameters-input, .prompt-template-id-input')) {\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('click', event => {\n if (!event.target.closest('.prompt-template-add-btn, .remove-prompt-template-btn')) {\n return;\n }\n\n setTimeout(() => {\n this.queueSettingsSave();\n }, 0);\n });\n\n // Add event listener for clear history button\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.addEventListener('click', () => {\n const itemId = clearHistoryBtn.getAttribute('data-interaction-id');\n if (itemId) {\n this.clearHistory(itemId);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n },\n loadInteraction(itemId) {\n this.connection.invoke(\"LoadInteraction\", itemId).catch(err => console.error(err));\n },\n reloadCurrentInteraction() {\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n },\n clearHistory(itemId) {\n const self = this;\n confirmDialog({\n title: config.clearHistoryTitle,\n message: config.clearHistoryMessage,\n okText: config.clearHistoryOkText,\n cancelText: config.clearHistoryCancelText,\n callback: function (confirmed) {\n if (confirmed) {\n // Cancel any active stream before clearing history.\n if (self.stream) {\n self.stream.dispose();\n self.stream = null;\n self.hideTypingIndicator();\n self.streamingFinished();\n }\n\n self.connection.invoke(\"ClearHistory\", itemId)\n .catch(err => console.error('Error clearing history:', err));\n }\n }\n });\n },\n debouncedSaveSettings() {\n // Clear any existing timeout to reset the debounce timer\n this.clearPendingSettingsSave();\n\n // Don't save while streaming — it will be saved when streaming completes.\n if (this.stream) {\n return;\n }\n\n // Set a new timeout to save after 850ms of no changes\n this.saveSettingsTimeout = setTimeout(() => {\n if (this.settingsDirty) {\n this.saveSettings();\n this.settingsDirty = false;\n }\n this.saveSettingsTimeout = null;\n }, 850);\n },\n getSelectedToolNames() {\n return this.getSelectedGroupValues(\n 'toolNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Tools[\"]:checked'\n );\n },\n getSelectedMcpConnectionIds() {\n return this.getSelectedGroupValues(\n 'mcpConnectionIds',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Connections[\"]:checked'\n );\n },\n getSelectedA2AConnectionIds() {\n return this.getSelectedGroupValues('a2aConnectionIds');\n },\n getSelectedAgentNames() {\n return this.getSelectedGroupValues(\n 'agentNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Agents[\"]:checked'\n );\n },\n saveSettings() {\n const itemId = this.getItemId();\n if (!itemId) {\n return Promise.resolve();\n }\n\n if (!this.validateSettings()) {\n this.showSaveIndicator('Fix errors', 'text-danger');\n return Promise.resolve();\n }\n\n const settings = {};\n\n // Collect all form inputs with the \"ChatInteraction.\" prefix generically.\n // This avoids coupling the JS to specific field names — new fields added by\n // any module are automatically included.\n const inputs = this.getSettingInputs();\n\n inputs.forEach(input => {\n const key = input.dataset.setting\n || ((input.name || '').replace('ChatInteraction.', '').replace(/^[A-Z]/, match => match.toLowerCase()));\n\n if (!key) {\n return;\n }\n\n if (input.type === 'checkbox') {\n settings[key] = input.checked;\n } else if (input.type === 'number') {\n settings[key] = input.value ? parseFloat(input.value) : null;\n } else {\n settings[key] = input.value || null;\n }\n });\n\n // Add tool, MCP connection, and agent collections (special handling).\n settings.toolNames = this.getSelectedToolNames();\n settings.mcpConnectionIds = this.getSelectedMcpConnectionIds();\n settings.a2aConnectionIds = this.getSelectedA2AConnectionIds();\n settings.agentNames = this.getSelectedAgentNames();\n\n const promptTemplates = this.getPromptTemplateSelections();\n if (promptTemplates.length > 0) {\n settings.promptTemplates = promptTemplates;\n settings.promptTemplateIds = promptTemplates.map(template => template.templateId);\n }\n\n return this.connection.invoke(\"SaveSettings\", itemId, settings)\n .catch(err => {\n console.error('Error saving settings:', err);\n this.showSaveIndicator('Save failed', 'text-danger');\n });\n },\n flushPendingSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n\n if (this.settingsDirty) {\n this.settingsDirty = false;\n return this.saveSettings();\n }\n\n return Promise.resolve();\n },\n initializeInteraction(itemId, force) {\n if (this.isInteractionStarted && !force) {\n return;\n }\n this.fireEvent(new CustomEvent(\"initializingChatInteraction\", { detail: { itemId: itemId } }));\n this.setItemId(itemId);\n this.isInteractionStarted = true;\n },\n copyResponse(message) {\n navigator.clipboard.writeText(message);\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var itemId = this.getItemId();\n var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", itemId, subject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<span class=\"fa-solid fa-stop\"></span>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<span class=\"fa-solid fa-microphone\"></span>';\n }\n }\n },\n watch: {\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n isConversationMode(active) {\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n this.initializeApp();\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n },\n template: config.messageTemplate\n }).mount(config.appElementSelector);\n\n return app;\n };\n\n return {\n initialize: initialize\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}