22 lines
115 KiB
JavaScript
22 lines
115 KiB
JavaScript
"use strict";
|
|
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
self["webpackHotUpdate_N_E"]("app/page",{
|
|
|
|
/***/ "(app-pages-browser)/./src/components/chat-interface.tsx":
|
|
/*!*******************************************!*\
|
|
!*** ./src/components/chat-interface.tsx ***!
|
|
\*******************************************/
|
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChatInterface: () => (/* binding */ ChatInterface)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./src/components/ui/button.tsx\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/square-pen.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/sparkles.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/bot.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/loader-circle.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/paperclip.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/mic.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/send.js\");\n/* harmony import */ var _markdown_renderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./markdown-renderer */ \"(app-pages-browser)/./src/components/markdown-renderer.tsx\");\n/* __next_internal_client_entry_do_not_use__ ChatInterface auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nfunction ChatInterface(param) {\n let { agent } = param;\n _s();\n const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [isLoading, setIsLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [sessionId, setSessionId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [selectedImages, setSelectedImages] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const messagesContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const inputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const fileInputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n // Use agent-specific session ID: chat-session-{agentId}\n const sessionKey = \"chat-session-\".concat(agent.id);\n let existingSessionId = localStorage.getItem(sessionKey);\n if (!existingSessionId) {\n // Generate new sessionID using timestamp and random string\n existingSessionId = \"session-\".concat(agent.id, \"-\").concat(Date.now(), \"-\").concat(Math.random().toString(36).substring(2, 15));\n localStorage.setItem(sessionKey, existingSessionId);\n }\n setSessionId(existingSessionId);\n // Load existing messages for this agent\n const messagesKey = \"chat-messages-\".concat(agent.id);\n const savedMessages = localStorage.getItem(messagesKey);\n if (savedMessages) {\n try {\n const parsed = JSON.parse(savedMessages);\n // Ensure timestamps are Date objects\n const messages = parsed.map({\n \"ChatInterface.useEffect.messages\": (msg)=>({\n ...msg,\n timestamp: new Date(msg.timestamp)\n })\n }[\"ChatInterface.useEffect.messages\"]);\n setMessages(messages);\n } catch (err) {\n console.error(\"[chat] Failed to load saved messages:\", err);\n }\n }\n }\n }[\"ChatInterface.useEffect\"], [\n agent.id\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n if (messagesContainerRef.current) {\n messagesContainerRef.current.scrollTop = messagesContainerRef.current.scrollHeight;\n }\n }\n }[\"ChatInterface.useEffect\"], [\n messages,\n isLoading\n ]);\n // Save messages to localStorage whenever they change\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n const messagesKey = \"chat-messages-\".concat(agent.id);\n localStorage.setItem(messagesKey, JSON.stringify(messages));\n }\n }[\"ChatInterface.useEffect\"], [\n messages,\n agent.id\n ]);\n // Handle image file selection\n const handleImageSelect = async (e)=>{\n const files = e.currentTarget.files;\n if (!files) return;\n const newImages = [];\n for(let i = 0; i < files.length; i++){\n const file = files[i];\n // Only accept image files\n if (!file.type.startsWith(\"image/\")) {\n console.warn(\"[chat] Skipping non-image file:\", file.name);\n continue;\n }\n try {\n const base64 = await fileToBase64(file);\n newImages.push(base64);\n } catch (err) {\n console.error(\"[chat] Failed to convert image:\", err);\n }\n }\n setSelectedImages((prev)=>[\n ...prev,\n ...newImages\n ]);\n // Reset file input\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n // Convert file to base64 string\n const fileToBase64 = (file)=>{\n return new Promise((resolve, reject)=>{\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = ()=>resolve(reader.result);\n reader.onerror = reject;\n });\n };\n // Remove selected image\n const removeImage = (index)=>{\n setSelectedImages((prev)=>prev.filter((_, i)=>i !== index));\n };\n const sendMessage = async (e)=>{\n if (e) {\n e.preventDefault();\n }\n if (!input.trim() || isLoading) return;\n const userMessage = {\n id: Date.now().toString(),\n role: \"user\",\n content: input.trim(),\n timestamp: new Date(),\n images: selectedImages.length > 0 ? selectedImages : undefined\n };\n setMessages((prev)=>[\n ...prev,\n userMessage\n ]);\n setInput(\"\");\n setSelectedImages([]);\n setIsLoading(true);\n try {\n const response = await fetch(\"/api/chat\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n message: userMessage.content,\n timestamp: userMessage.timestamp.toISOString(),\n sessionId: sessionId,\n agentId: agent.id,\n images: selectedImages.length > 0 ? selectedImages : undefined\n })\n });\n const data = await response.json();\n if (!response.ok) {\n const errorMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: data.error || \"Failed to communicate with the webhook.\",\n timestamp: new Date(),\n isError: true,\n hint: data.hint\n };\n setMessages((prev)=>[\n ...prev,\n errorMessage\n ]);\n } else {\n const assistantMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: data.response || data.message || JSON.stringify(data),\n timestamp: new Date()\n };\n setMessages((prev)=>[\n ...prev,\n assistantMessage\n ]);\n }\n } catch (error) {\n console.error(\"[v0] Error sending message:\", error);\n const errorMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: \"Sorry, I encountered an error processing your message. Please try again.\",\n timestamp: new Date(),\n isError: true\n };\n setMessages((prev)=>[\n ...prev,\n errorMessage\n ]);\n } finally{\n var _inputRef_current;\n setIsLoading(false);\n (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus();\n }\n };\n const startNewChat = ()=>{\n var // Focus input\n _inputRef_current;\n // Clear all messages\n setMessages([]);\n // Generate new sessionID for this agent\n const newSessionId = \"session-\".concat(agent.id, \"-\").concat(Date.now(), \"-\").concat(Math.random().toString(36).substring(2, 15));\n setSessionId(newSessionId);\n const sessionKey = \"chat-session-\".concat(agent.id);\n localStorage.setItem(sessionKey, newSessionId);\n // Clear input and images\n setInput(\"\");\n setSelectedImages([]);\n (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus();\n };\n const handleKeyDown = (e)=>{\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n sendMessage();\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex h-full w-full flex-col px-2 sm:px-4\",\n children: [\n messages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute right-6 top-6 z-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: startNewChat,\n variant: \"ghost\",\n size: \"icon\",\n className: \"h-11 w-11 rounded-full border border-border/60 bg-white/70 text-charcoal shadow-lg backdrop-blur hover:bg-burnt/30 hover:text-charcoal\",\n title: \"Start a fresh conversation\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 225,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 218,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: messagesContainerRef,\n className: \"flex-1 overflow-y-auto px-1 py-10 pb-40 sm:px-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-3xl space-y-10\",\n children: messages.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex h-full min-h-[60vh] flex-col items-center justify-center gap-8 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex h-16 w-16 items-center justify-center rounded-2xl bg-orange-500\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-8 w-8 text-white\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 236,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 235,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-3xl font-bold text-white\",\n children: [\n \"Welcome to \",\n agent.name\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 239,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-lg text-neutral-400\",\n children: agent.description\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 240,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 238,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 234,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid w-full max-w-2xl gap-3 sm:grid-cols-2\",\n children: [\n \"Help me brainstorm ideas for a new mobile app\",\n \"Generate creative writing prompts for a fantasy novel\",\n \"Suggest innovative marketing strategies for a startup\",\n \"Create a list of unique product names for a tech company\"\n ].map((prompt, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setInput(prompt),\n className: \"rounded-xl border border-neutral-800 bg-neutral-900/50 p-4 text-left text-sm text-neutral-300 transition-all hover:border-orange-500/50 hover:bg-neutral-800/50 hover:text-white\",\n children: prompt\n }, index, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 251,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 244,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2 text-xs text-neutral-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-1 w-1 rounded-full bg-green-500\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 262,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"AI Assistant Online\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 263,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 261,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 233,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-8\",\n children: [\n messages.map((message)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-4 \".concat(message.role === \"user\" ? \"flex-row-reverse\" : \"\"),\n children: [\n message.role === \"assistant\" && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-orange-500\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-4 w-4 text-white\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 272,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 271,\n columnNumber: 21\n }, this),\n message.role === \"user\" && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-purple-500\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-4 w-4 rounded-full bg-white\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 278,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 277,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 space-y-2\",\n children: [\n message.role === \"user\" && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs font-medium text-neutral-400\",\n children: \"You\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 285,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-neutral-600\",\n children: message.timestamp.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit'\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 286,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 284,\n columnNumber: 23\n }, this),\n message.role === \"user\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-2xl px-5 py-4 shadow-sm bg-orange-500 text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"whitespace-pre-wrap break-words text-sm leading-relaxed\",\n children: message.content\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 294,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 293,\n columnNumber: 23\n }, this) : message.isError ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-2xl px-5 py-4 shadow-sm bg-red-500/10 text-red-400 border border-red-500/20\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"whitespace-pre-wrap break-words text-sm leading-relaxed\",\n children: message.content\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 298,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 297,\n columnNumber: 23\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs font-medium text-neutral-400\",\n children: \"AI Assistant\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 303,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-neutral-600\",\n children: message.timestamp.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit'\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 304,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 302,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-neutral-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_markdown_renderer__WEBPACK_IMPORTED_MODULE_3__.MarkdownRenderer, {\n content: message.content\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 309,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 308,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 301,\n columnNumber: 23\n }, this),\n message.hint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-lg bg-amber-500/10 border border-amber-500/20 px-3 py-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-amber-400\",\n children: message.hint\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 316,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 315,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 282,\n columnNumber: 19\n }, this)\n ]\n }, message.id, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 269,\n columnNumber: 17\n }, this)),\n isLoading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-orange-500\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-4 w-4 text-white\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 326,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 325,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs font-medium text-neutral-400\",\n children: \"AI Assistant\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 330,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-neutral-600\",\n children: new Date().toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit'\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 331,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 329,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-neutral-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4 animate-spin text-orange-500\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 337,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-neutral-400\",\n children: \"Thinking...\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 338,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-1 w-1 rounded-full bg-orange-500 animate-bounce\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 340,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-1 w-1 rounded-full bg-orange-500 animate-bounce\",\n style: {\n animationDelay: '0.1s'\n }\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 341,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-1 w-1 rounded-full bg-orange-500 animate-bounce\",\n style: {\n animationDelay: '0.2s'\n }\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 342,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 339,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 336,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 335,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 328,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 324,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 267,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 231,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 230,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed bottom-6 left-1/2 z-20 w-full max-w-3xl -translate-x-1/2 px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: sendMessage,\n className: \"relative\",\n children: [\n selectedImages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-2 flex flex-wrap gap-2 px-3 pt-3\",\n children: selectedImages.map((image, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: image,\n alt: \"Selected \".concat(index),\n className: \"h-16 w-16 rounded-lg object-cover\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 361,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>removeImage(index),\n className: \"absolute -right-2 -top-2 flex h-5 w-5 items-center justify-center rounded-full bg-red-500 text-white hover:bg-red-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-3 w-3\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 371,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 366,\n columnNumber: 19\n }, this)\n ]\n }, index, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 360,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 358,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-2xl border border-neutral-800 bg-neutral-900/95 p-3 shadow-2xl backdrop-blur-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-end gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-1 flex-col gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n ref: inputRef,\n value: input,\n onChange: (e)=>setInput(e.target.value),\n onKeyDown: handleKeyDown,\n placeholder: \"Ask me anything or share your ideas... (Enter to send, Shift+Enter for new line)\",\n disabled: isLoading,\n rows: 1,\n className: \"min-h-[20px] max-h-32 resize-none border-0 bg-transparent text-white placeholder:text-neutral-500 focus:outline-none focus:ring-0\",\n style: {\n overflow: 'hidden',\n height: 'auto'\n },\n onInput: (e)=>{\n const target = e.target;\n target.style.height = 'auto';\n target.style.height = Math.min(target.scrollHeight, 128) + 'px';\n }\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 381,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n ref: fileInputRef,\n type: \"file\",\n multiple: true,\n accept: \"image/*\",\n onChange: handleImageSelect,\n className: \"hidden\",\n disabled: isLoading\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 403,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"button\",\n variant: \"ghost\",\n size: \"icon\",\n onClick: ()=>{\n var _fileInputRef_current;\n return (_fileInputRef_current = fileInputRef.current) === null || _fileInputRef_current === void 0 ? void 0 : _fileInputRef_current.click();\n },\n disabled: isLoading,\n className: \"h-8 w-8 text-neutral-400 hover:text-white hover:bg-neutral-800\",\n title: \"Attach image\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 421,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 412,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"button\",\n variant: \"ghost\",\n size: \"icon\",\n className: \"h-8 w-8 text-neutral-400 hover:text-white hover:bg-neutral-800\",\n title: \"Voice input\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 430,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 423,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 402,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n input.trim() && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-neutral-500\",\n children: [\n input.length,\n \"/2000\"\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 436,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"submit\",\n disabled: !input.trim() || isLoading,\n size: \"icon\",\n className: \"h-9 w-9 flex-shrink-0 rounded-xl bg-orange-500 text-white hover:bg-orange-600 disabled:opacity-50\",\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4 animate-spin\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 446,\n columnNumber: 36\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 446,\n columnNumber: 83\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 440,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 434,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 401,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 380,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 379,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 378,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 355,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 354,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 215,\n columnNumber: 5\n }, this);\n}\n_s(ChatInterface, \"1rfLb0uXXOh5S4M+kQCpCGT2ZDM=\");\n_c = ChatInterface;\nvar _c;\n$RefreshReg$(_c, \"ChatInterface\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL2NoYXQtaW50ZXJmYWNlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSW1EO0FBQ0o7QUFFMEM7QUFDbkM7QUFPL0MsU0FBU2EsY0FBYyxLQUE2QjtRQUE3QixFQUFFQyxLQUFLLEVBQXNCLEdBQTdCOztJQUM1QixNQUFNLENBQUNDLFVBQVVDLFlBQVksR0FBR2hCLCtDQUFRQSxDQUFZLEVBQUU7SUFDdEQsTUFBTSxDQUFDaUIsT0FBT0MsU0FBUyxHQUFHbEIsK0NBQVFBLENBQUM7SUFDbkMsTUFBTSxDQUFDbUIsV0FBV0MsYUFBYSxHQUFHcEIsK0NBQVFBLENBQUM7SUFDM0MsTUFBTSxDQUFDcUIsV0FBV0MsYUFBYSxHQUFHdEIsK0NBQVFBLENBQVM7SUFDbkQsTUFBTSxDQUFDdUIsZ0JBQWdCQyxrQkFBa0IsR0FBR3hCLCtDQUFRQSxDQUFXLEVBQUU7SUFDakUsTUFBTXlCLHVCQUF1QnhCLDZDQUFNQSxDQUFpQjtJQUNwRCxNQUFNeUIsV0FBV3pCLDZDQUFNQSxDQUFzQjtJQUM3QyxNQUFNMEIsZUFBZTFCLDZDQUFNQSxDQUFtQjtJQUU5Q0MsZ0RBQVNBO21DQUFDO1lBQ1Isd0RBQXdEO1lBQ3hELE1BQU0wQixhQUFhLGdCQUF5QixPQUFUZCxNQUFNZSxFQUFFO1lBQzNDLElBQUlDLG9CQUFvQkMsYUFBYUMsT0FBTyxDQUFDSjtZQUU3QyxJQUFJLENBQUNFLG1CQUFtQjtnQkFDdEIsMkRBQTJEO2dCQUMzREEsb0JBQW9CLFdBQXVCRyxPQUFabkIsTUFBTWUsRUFBRSxFQUFDLEtBQWlCSyxPQUFkRCxLQUFLRSxHQUFHLElBQUcsS0FBK0MsT0FBNUNELEtBQUtFLE1BQU0sR0FBR0MsUUFBUSxDQUFDLElBQUlDLFNBQVMsQ0FBQyxHQUFHO2dCQUNqR1AsYUFBYVEsT0FBTyxDQUFDWCxZQUFZRTtZQUNuQztZQUVBUixhQUFhUTtZQUViLHdDQUF3QztZQUN4QyxNQUFNVSxjQUFj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bEc7NERBQ0N1RyxLQUFLN0Y7NERBQ0xvQyxNQUFLOzREQUNMc0YsUUFBUTs0REFDUkMsUUFBTzs0REFDUFgsVUFBVXBGOzREQUNWNEQsV0FBVTs0REFDVjRCLFVBQVU1SDs7Ozs7O3NFQUVaLDhEQUFDaEIseURBQU1BOzREQUNMNEQsTUFBSzs0REFDTHNELFNBQVE7NERBQ1JDLE1BQUs7NERBQ0xGLFNBQVM7b0VBQU16Rjt3RUFBQUEsd0JBQUFBLGFBQWF3QixPQUFPLGNBQXBCeEIsNENBQUFBLHNCQUFzQjRILEtBQUs7OzREQUMxQ1IsVUFBVTVIOzREQUNWZ0csV0FBVTs0REFDVkksT0FBTTtzRUFFTiw0RUFBQzlHLCtIQUFTQTtnRUFBQzBHLFdBQVU7Ozs7Ozs7Ozs7O3NFQUV2Qiw4REFBQ2hILHlEQUFNQTs0REFDTDRELE1BQUs7NERBQ0xzRCxTQUFROzREQUNSQyxNQUFLOzREQUNMSCxXQUFVOzREQUNWSSxPQUFNO3NFQUVOLDRFQUFDN0csZ0lBQUdBO2dFQUFDeUcsV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7OERBSW5CLDhEQUFDRDtvREFBSUMsV0FBVTs7d0RBQ1psRyxNQUFNc0UsSUFBSSxvQkFDVCw4REFBQ3VDOzREQUFLWCxXQUFVOztnRUFDYmxHLE1BQU00QyxNQUFNO2dFQUFDOzs7Ozs7O3NFQUdsQiw4REFBQzFELHlEQUFNQTs0REFDTDRELE1BQUs7NERBQ0xnRixVQUFVLENBQUM5SCxNQUFNc0UsSUFBSSxNQUFNcEU7NERBQzNCbUcsTUFBSzs0REFDTEgsV0FBVTtzRUFFVGhHLDBCQUFZLDhEQUFDYiwrSEFBT0E7Z0VBQUM2RyxXQUFVOzs7OztxRkFBNEIsOERBQUMvRyxnSUFBSUE7Z0VBQUMrRyxXQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdsRztHQXpiZ0J0RztLQUFBQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9zcmMvY29tcG9uZW50cy9jaGF0LWludGVyZmFjZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcblxuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCJcblxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvYnV0dG9uXCJcbmltcG9ydCB7IElucHV0IH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9pbnB1dFwiXG5pbXBvcnQgeyBTZW5kLCBCb3QsIExvYWRlcjIsIFNxdWFyZVBlbiwgU3BhcmtsZXMsIFBhcGVyY2xpcCwgTWljLCBYIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5pbXBvcnQgeyBNYXJrZG93blJlbmRlcmVyIH0gZnJvbSBcIi4vbWFya2Rvd24tcmVuZGVyZXJcIlxuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBBZ2VudCB9IGZyb20gXCJAL2xpYi90eXBlc1wiXG5cbmludGVyZmFjZSBDaGF0SW50ZXJmYWNlUHJvcHMge1xuICBhZ2VudDogQWdlbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoYXRJbnRlcmZhY2UoeyBhZ2VudCB9OiBDaGF0SW50ZXJmYWNlUHJvcHMpIHtcbiAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZTxNZXNzYWdlW10+KFtdKVxuICBjb25zdCBbaW5wdXQsIHNldElucHV0XSA9IHVzZVN0YXRlKFwiXCIpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nlc3Npb25JZCwgc2V0U2Vzc2lvbklkXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIilcbiAgY29uc3QgW3NlbGVjdGVkSW1hZ2VzLCBzZXRTZWxlY3RlZEltYWdlc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFVzZSBhZ2VudC1zcGVjaWZpYyBzZXNzaW9uIElEOiBjaGF0LXNlc3Npb24te2FnZW50SWR9XG4gICAgY29uc3Qgc2Vzc2lvbktleSA9IGBjaGF0LXNlc3Npb24tJHthZ2VudC5pZH1gXG4gICAgbGV0IGV4aXN0aW5nU2Vzc2lvbklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc2Vzc2lvbktleSlcblxuICAgIGlmICghZXhpc3RpbmdTZXNzaW9uSWQpIHtcbiAgICAgIC8vIEdlbmVyYXRlIG5ldyBzZXNzaW9uSUQgdXNpbmcgdGltZXN0YW1wIGFuZCByYW5kb20gc3RyaW5nXG4gICAgICBleGlzdGluZ1Nlc3Npb25JZCA9IGBzZXNzaW9uLSR7YWdlbnQuaWR9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpfWBcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHNlc3Npb25LZXksIGV4aXN0aW5nU2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHNldFNlc3Npb25JZChleGlzdGluZ1Nlc3Npb25JZClcblxuICAgIC8vIExvYWQgZXhpc3RpbmcgbWVzc2FnZXMgZm9yIHRoaXMgYWdlbnRcbiAgICBjb25zdCBtZXNzYWdlc0tleSA9IGBjaGF0LW1lc3NhZ2VzLSR7YWdlbnQuaWR9YFxuICAgIGNvbnN0IHNhdmVkTWVzc2FnZXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShtZXNzYWdlc0tleSlcbiAgICBpZiAoc2F2ZWRNZXNzYWdlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzYXZlZE1lc3NhZ2VzKVxuICAgICAgICAvLyBFbnN1cmUgdGltZXN0YW1wcyBhcmUgRGF0ZSBvYmplY3RzXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gcGFyc2VkLm1hcCgobXNnOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubXNnLFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUobXNnLnRpbWVzdGFtcCksXG4gICAgICAgIH0pKVxuICAgICAgICBzZXRNZXNzYWdlcyhtZXNzYWdlcylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW2NoYXRdIEZhaWxlZCB0byBsb2FkIHNhdmVkIG1lc3NhZ2VzOlwiLCBlcnIpXG4gICAgICB9XG4gICAgfVxuICB9LCBbYWdlbnQuaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lc3NhZ2VzQ29udGFpbmVyUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNDb250YWluZXJSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICB9XG4gIH0sIFttZXNzYWdlcywgaXNMb2FkaW5nXSlcblxuICAvLyBTYXZlIG1lc3NhZ2VzIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciB0aGV5IGNoYW5nZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VzS2V5ID0gYGNoYXQtbWVzc2FnZXMtJHthZ2VudC5pZH1gXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obWVzc2FnZXNLZXksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzKSlcbiAgfSwgW21lc3NhZ2VzLCBhZ2VudC5pZF0pXG5cbiAgLy8gSGFuZGxlIGltYWdlIGZpbGUgc2VsZWN0aW9uXG4gIGNvbnN0IGhhbmRsZUltYWdlU2VsZWN0ID0gYXN5bmMgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBlLmN1cnJlbnRUYXJnZXQuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cblxuICAgIGNvbnN0IG5ld0ltYWdlczogc3RyaW5nW10gPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXVxuICAgICAgLy8gT25seSBhY2NlcHQgaW1hZ2UgZmlsZXNcbiAgICAgIGlmICghZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2NoYXRdIFNraXBwaW5nIG5vbi1pbWFnZSBmaWxlOlwiLCBmaWxlLm5hbWUpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IGZpbGVUb0Jhc2U2NChmaWxlKVxuICAgICAgICBuZXdJbWFnZXMucHVzaChiYXNlNjQpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltjaGF0XSBGYWlsZWQgdG8gY29udmVydCBpbWFnZTpcIiwgZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIHNldFNlbGVjdGVkSW1hZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgLi4ubmV3SW1hZ2VzXSlcbiAgICAvLyBSZXNldCBmaWxlIGlucHV0XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9IFwiXCJcbiAgICB9XG4gIH1cblxuICAvLyBDb252ZXJ0IGZpbGUgdG8gYmFzZTY0IHN0cmluZ1xuICBjb25zdCBmaWxlVG9CYXNlNjQgPSAoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZylcbiAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0XG4gICAgfSlcbiAgfVxuXG4gIC8vIFJlbW92ZSBzZWxlY3RlZCBpbWFnZVxuICBjb25zdCByZW1vdmVJbWFnZSA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRJbWFnZXMoKHByZXYpID0+IHByZXYuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCkpXG4gIH1cblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IGFzeW5jIChlPzogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgaWYgKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIH1cblxuICAgIGlmICghaW5wdXQudHJpbSgpIHx8IGlzTG9hZGluZykgcmV0dXJuXG5cbiAgICBjb25zdCB1c2VyTWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgIGlkOiBEYXRlLm5vdygpLnRvU3RyaW5nKCksXG4gICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgIGNvbnRlbnQ6IGlucHV0LnRyaW0oKSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIGltYWdlczogc2VsZWN0ZWRJbWFnZXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSW1hZ2VzIDogdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgdXNlck1lc3NhZ2VdKVxuICAgIHNldElucHV0KFwiXCIpXG4gICAgc2V0U2VsZWN0ZWRJbWFnZXMoW10pXG4gICAgc2V0SXNMb2FkaW5nKHRydWUpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9hcGkvY2hhdFwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG1lc3NhZ2U6IHVzZXJNZXNzYWdlLmNvbnRlbnQsXG4gICAgICAgICAgdGltZXN0YW1wOiB1c2VyTWVzc2FnZS50aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudC5pZCxcbiAgICAgICAgICBpbWFnZXM6IHNlbGVjdGVkSW1hZ2VzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZEltYWdlcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSksXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMge1xuICAgICAgICBlcnJvcj86IHN0cmluZ1xuICAgICAgICBoaW50Pzogc3RyaW5nXG4gICAgICAgIHJlc3BvbnNlPzogc3RyaW5nXG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmdcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgICAgaWQ6IChEYXRlLm5vdygpICsgMSkudG9TdHJpbmcoKSxcbiAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgIGNvbnRlbnQ6IGRhdGEuZXJyb3IgfHwgXCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgd2ViaG9vay5cIixcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgICBoaW50OiBkYXRhLmhpbnQsXG4gICAgICAgIH1cbiAgICAgICAgc2V0TWVzc2FnZXMoKHByZXYpID0+IFsuLi5wcmV2LCBlcnJvck1lc3NhZ2VdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXNzaXN0YW50TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICBpZDogKERhdGUubm93KCkgKyAxKS50b1N0cmluZygpLFxuICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgY29udGVudDogZGF0YS5yZXNwb25zZSB8fCBkYXRhLm1lc3NhZ2UgfHwgSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICB9XG4gICAgICAgIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgYXNzaXN0YW50TWVzc2FnZV0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbdjBdIEVycm9yIHNlbmRpbmcgbWVzc2FnZTpcIiwgZXJyb3IpXG5cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgaWQ6IChEYXRlLm5vdygpICsgMSkudG9TdHJpbmcoKSxcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgY29udGVudDogXCJTb3JyeSwgSSBlbmNvdW50ZXJlZCBhbiBlcnJvciBwcm9jZXNzaW5nIHlvdXIgbWVzc2FnZS4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBzZXRNZXNzYWdlcygocHJldikgPT4gWy4uLnByZXYsIGVycm9yTWVzc2FnZV0pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGFydE5ld0NoYXQgPSAoKSA9PiB7XG4gICAgLy8gQ2xlYXIgYWxsIG1lc3NhZ2VzXG4gICAgc2V0TWVzc2FnZXMoW10pXG4gICAgLy8gR2VuZXJhdGUgbmV3IHNlc3Npb25JRCBmb3IgdGhpcyBhZ2VudFxuICAgIGNvbnN0IG5ld1Nlc3Npb25JZCA9IGBzZXNzaW9uLSR7YWdlbnQuaWR9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpfWBcbiAgICBzZXRTZXNzaW9uSWQobmV3U2Vzc2lvbklkKVxuICAgIGNvbnN0IHNlc3Npb25LZXkgPSBgY2hhdC1zZXNzaW9uLSR7YWdlbnQuaWR9YFxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHNlc3Npb25LZXksIG5ld1Nlc3Npb25JZClcbiAgICAvLyBDbGVhciBpbnB1dCBhbmQgaW1hZ2VzXG4gICAgc2V0SW5wdXQoXCJcIilcbiAgICBzZXRTZWxlY3RlZEltYWdlcyhbXSlcbiAgICAvLyBGb2N1cyBpbnB1dFxuICAgIGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBzZW5kTWVzc2FnZSgpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggaC1mdWxsIHctZnVsbCBmbGV4LWNvbCBweC0yIHNtOnB4LTRcIj5cbiAgICAgIHttZXNzYWdlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC02IHRvcC02IHotMTBcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXtzdGFydE5ld0NoYXR9XG4gICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0xMSB3LTExIHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLWJvcmRlci82MCBiZy13aGl0ZS83MCB0ZXh0LWNoYXJjb2FsIHNoYWRvdy1sZyBiYWNrZHJvcC1ibHVyIGhvdmVyOmJnLWJ1cm50LzMwIGhvdmVyOnRleHQtY2hhcmNvYWxcIlxuICAgICAgICAgICAgdGl0bGU9XCJTdGFydCBhIGZyZXNoIGNvbnZlcnNhdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNxdWFyZVBlbiBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHJlZj17bWVzc2FnZXNDb250YWluZXJSZWZ9IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcHgtMSBweS0xMCBwYi00MCBzbTpweC0wXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy0zeGwgc3BhY2UteS0xMFwiPlxuICAgICAgICAgIHttZXNzYWdlcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIG1pbi1oLVs2MHZoXSBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTggdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xNiB3LTE2IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLTJ4bCBiZy1vcmFuZ2UtNTAwXCI+XG4gICAgICAgICAgICAgICAgICA8U3BhcmtsZXMgY2xhc3NOYW1lPVwiaC04IHctOCB0ZXh0LXdoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtM3hsIGZvbnQtYm9sZCB0ZXh0LXdoaXRlXCI+V2VsY29tZSB0byB7YWdlbnQubmFtZX08L2gxPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LW5ldXRyYWwtNDAwXCI+e2FnZW50LmRlc2NyaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgdy1mdWxsIG1heC13LTJ4bCBnYXAtMyBzbTpncmlkLWNvbHMtMlwiPlxuICAgICAgICAgICAgICAgIHtbXG4gICAgICAgICAgICAgICAgICBcIkhlbHAgbWUgYnJhaW5zdG9ybSBpZGVhcyBmb3IgYSBuZXcgbW9iaWxlIGFwcFwiLFxuICAgICAgICAgICAgICAgICAgXCJHZW5lcmF0ZSBjcmVhdGl2ZSB3cml0aW5nIHByb21wdHMgZm9yIGEgZmFudGFzeSBub3ZlbFwiLFxuICAgICAgICAgICAgICAgICAgXCJTdWdnZXN0IGlubm92YXRpdmUgbWFya2V0aW5nIHN0cmF0ZWdpZXMgZm9yIGEgc3RhcnR1cFwiLFxuICAgICAgICAgICAgICAgICAgXCJDcmVhdGUgYSBsaXN0IG9mIHVuaXF1ZSBwcm9kdWN0IG5hbWVzIGZvciBhIHRlY2ggY29tcGFueVwiXG4gICAgICAgICAgICAgICAgXS5tYXAoKHByb21wdCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SW5wdXQocHJvbXB0KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtODAwIGJnLW5ldXRyYWwtOTAwLzUwIHAtNCB0ZXh0LWxlZnQgdGV4dC1zbSB0ZXh0LW5ldXRyYWwtMzAwIHRyYW5zaXRpb24tYWxsIGhvdmVyOmJvcmRlci1vcmFuZ2UtNTAwLzUwIGhvdmVyOmJnLW5ldXRyYWwtODAwLzUwIGhvdmVyOnRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvbXB0fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXhzIHRleHQtbmV1dHJhbC01MDBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtMSB3LTEgcm91bmRlZC1mdWxsIGJnLWdyZWVuLTUwMFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuPkFJIEFzc2lzdGFudCBPbmxpbmU8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS04XCI+XG4gICAgICAgICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17bWVzc2FnZS5pZH0gY2xhc3NOYW1lPXtgZmxleCBnYXAtNCAke21lc3NhZ2Uucm9sZSA9PT0gXCJ1c2VyXCIgPyBcImZsZXgtcm93LXJldmVyc2VcIiA6IFwiXCJ9YH0+XG4gICAgICAgICAgICAgICAgICB7bWVzc2FnZS5yb2xlID09PSBcImFzc2lzdGFudFwiICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtOCB3LTggZmxleC1zaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJnLW9yYW5nZS01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Qm90IGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC13aGl0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAge21lc3NhZ2Uucm9sZSA9PT0gXCJ1c2VyXCIgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC04IHctOCBmbGV4LXNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1ibHVlLTUwMCB0by1wdXJwbGUtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLTQgdy00IHJvdW5kZWQtZnVsbCBiZy13aGl0ZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICB7bWVzc2FnZS5yb2xlID09PSBcInVzZXJcIiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW5ldXRyYWwtNDAwXCI+WW91PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW5ldXRyYWwtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLnRpbWVzdGFtcC50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLnJvbGUgPT09IFwidXNlclwiID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm91bmRlZC0yeGwgcHgtNSBweS00IHNoYWRvdy1zbSBiZy1vcmFuZ2UtNTAwIHRleHQtd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIndoaXRlc3BhY2UtcHJlLXdyYXAgYnJlYWstd29yZHMgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWRcIj57bWVzc2FnZS5jb250ZW50fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG1lc3NhZ2UuaXNFcnJvciA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdW5kZWQtMnhsIHB4LTUgcHktNCBzaGFkb3ctc20gYmctcmVkLTUwMC8xMCB0ZXh0LXJlZC00MDAgYm9yZGVyIGJvcmRlci1yZWQtNTAwLzIwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIHRleHQtc20gbGVhZGluZy1yZWxheGVkXCI+e21lc3NhZ2UuY29udGVudH08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW5ldXRyYWwtNDAwXCI+QUkgQXNzaXN0YW50PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbmV1dHJhbC02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bWVzc2FnZS50aW1lc3RhbXAudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxNYXJrZG93blJlbmRlcmVyIGNvbnRlbnQ9e21lc3NhZ2UuY29udGVudH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAge21lc3NhZ2UuaGludCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJnLWFtYmVyLTUwMC8xMCBib3JkZXIgYm9yZGVyLWFtYmVyLTUwMC8yMCBweC0zIHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1hbWJlci00MDBcIj57bWVzc2FnZS5oaW50fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cblxuICAgICAgICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTggdy04IGZsZXgtc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1vcmFuZ2UtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxCb3QgY2xhc3NOYW1lPVwiaC00IHctNCB0ZXh0LXdoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbmV1dHJhbC00MDBcIj5BSSBBc3Npc3RhbnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW5ldXRyYWwtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TG9hZGVyMiBjbGFzc05hbWU9XCJoLTQgdy00IGFuaW1hdGUtc3BpbiB0ZXh0LW9yYW5nZS01MDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW5ldXRyYWwtNDAwXCI+VGhpbmtpbmcuLi48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLTEgdy0xIHJvdW5kZWQtZnVsbCBiZy1vcmFuZ2UtNTAwIGFuaW1hdGUtYm91bmNlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC0xIHctMSByb3VuZGVkLWZ1bGwgYmctb3JhbmdlLTUwMCBhbmltYXRlLWJvdW5jZVwiIHN0eWxlPXt7IGFuaW1hdGlvbkRlbGF5OiAnMC4xcycgfX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC0xIHctMSByb3VuZGVkLWZ1bGwgYmctb3JhbmdlLTUwMCBhbmltYXRlLWJvdW5jZVwiIHN0eWxlPXt7IGFuaW1hdGlvbkRlbGF5OiAnMC4ycycgfX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZml4ZWQgYm90dG9tLTYgbGVmdC0xLzIgei0yMCB3LWZ1bGwgbWF4LXctM3hsIC10cmFuc2xhdGUteC0xLzIgcHgtNFwiPlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17c2VuZE1lc3NhZ2V9IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgey8qIEltYWdlIHByZXZpZXcgc2VjdGlvbiAqL31cbiAgICAgICAgICB7c2VsZWN0ZWRJbWFnZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTIgZmxleCBmbGV4LXdyYXAgZ2FwLTIgcHgtMyBwdC0zXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEltYWdlcy5tYXAoKGltYWdlLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpbmRleH0gY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgc3JjPXtpbWFnZX1cbiAgICAgICAgICAgICAgICAgICAgYWx0PXtgU2VsZWN0ZWQgJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTE2IHctMTYgcm91bmRlZC1sZyBvYmplY3QtY292ZXJcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJlbW92ZUltYWdlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgLXJpZ2h0LTIgLXRvcC0yIGZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDAgdGV4dC13aGl0ZSBob3ZlcjpiZy1yZWQtNjAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFggY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtODAwIGJnLW5ldXRyYWwtOTAwLzk1IHAtMyBzaGFkb3ctMnhsIGJhY2tkcm9wLWJsdXItbWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1lbmQgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtMSBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0SW5wdXQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBc2sgbWUgYW55dGhpbmcgb3Igc2hhcmUgeW91ciBpZGVhcy4uLiAoRW50ZXIgdG8gc2VuZCwgU2hpZnQrRW50ZXIgZm9yIG5ldyBsaW5lKVwiXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgcm93cz17MX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbi1oLVsyMHB4XSBtYXgtaC0zMiByZXNpemUtbm9uZSBib3JkZXItMCBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyOnRleHQtbmV1dHJhbC01MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgb25JbnB1dD17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IE1hdGgubWluKHRhcmdldC5zY3JvbGxIZWlnaHQsIDEyOCkgKyAncHgnO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUltYWdlU2VsZWN0fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHctOCB0ZXh0LW5ldXRyYWwtNDAwIGhvdmVyOnRleHQtd2hpdGUgaG92ZXI6YmctbmV1dHJhbC04MDBcIlxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQXR0YWNoIGltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxQYXBlcmNsaXAgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHctOCB0ZXh0LW5ldXRyYWwtNDAwIGhvdmVyOnRleHQtd2hpdGUgaG92ZXI6YmctbmV1dHJhbC04MDBcIlxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVm9pY2UgaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPE1pYyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICB7aW5wdXQudHJpbSgpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbmV1dHJhbC01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpbnB1dC5sZW5ndGh9LzIwMDBcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWlucHV0LnRyaW0oKSB8fCBpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOSB3LTkgZmxleC1zaHJpbmstMCByb3VuZGVkLXhsIGJnLW9yYW5nZS01MDAgdGV4dC13aGl0ZSBob3ZlcjpiZy1vcmFuZ2UtNjAwIGRpc2FibGVkOm9wYWNpdHktNTBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge2lzTG9hZGluZyA/IDxMb2FkZXIyIGNsYXNzTmFtZT1cImgtNCB3LTQgYW5pbWF0ZS1zcGluXCIgLz4gOiA8U2VuZCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz59XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJCdXR0b24iLCJTZW5kIiwiQm90IiwiTG9hZGVyMiIsIlNxdWFyZVBlbiIsIlNwYXJrbGVzIiwiUGFwZXJjbGlwIiwiTWljIiwiWCIsIk1hcmtkb3duUmVuZGVyZXIiLCJDaGF0SW50ZXJmYWNlIiwiYWdlbnQiLCJtZXNzYWdlcyIsInNldE1lc3NhZ2VzIiwiaW5wdXQiLCJzZXRJbnB1dCIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsInNlc3Npb25JZCIsInNldFNlc3Npb25JZCIsInNlbGVjdGVkSW1hZ2VzIiwic2V0U2VsZWN0ZWRJbWFnZXMiLCJtZXNzYWdlc0NvbnRhaW5lclJlZiIsImlucHV0UmVmIiwiZmlsZUlucHV0UmVmIiwic2Vzc2lvbktleSIsImlkIiwiZXhpc3RpbmdTZXNzaW9uSWQiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiRGF0ZSIsIk1hdGgiLCJub3ciLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0cmluZyIsInNldEl0ZW0iLCJtZXNzYWdlc0tleSIsInNhdmVkTWVzc2FnZXMiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJtYXAiLCJtc2ciLCJ0aW1lc3RhbXAiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0Iiwic3RyaW5naWZ5IiwiaGFuZGxlSW1hZ2VTZWxlY3QiLCJlIiwiZmlsZXMiLCJjdXJyZW50VGFyZ2V0IiwibmV3SW1hZ2VzIiwiaSIsImxlbmd0aCIsImZpbGUiLCJ0eXBlIiwic3RhcnRzV2l0aCIsIndhcm4iLCJuYW1lIiwiYmFzZTY0IiwiZmlsZVRvQmFzZTY0IiwicHVzaCIsInByZXYiLCJ2YWx1ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc0RhdGFVUkwiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwicmVtb3ZlSW1hZ2UiLCJpbmRleCIsImZpbHRlciIsIl8iLCJzZW5kTWVzc2FnZSIsInByZXZlbnREZWZhdWx0IiwidHJpbSIsInVzZXJNZXNzYWdlIiwicm9sZSIsImNvbnRlbnQiLCJpbWFnZXMiLCJ1bmRlZmluZWQiLCJyZXNwb25zZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJtZXNzYWdlIiwidG9JU09TdHJpbmciLCJhZ2VudElkIiwiZGF0YSIsImpzb24iLCJvayIsImVycm9yTWVzc2FnZSIsImlzRXJyb3IiLCJoaW50IiwiYXNzaXN0YW50TWVzc2FnZSIsImZvY3VzIiwic3RhcnROZXdDaGF0IiwibmV3U2Vzc2lvbklkIiwiaGFuZGxlS2V5RG93biIsImtleSIsInNoaWZ0S2V5IiwiZGl2IiwiY2xhc3NOYW1lIiwib25DbGljayIsInZhcmlhbnQiLCJzaXplIiwidGl0bGUiLCJyZWYiLCJoMSIsInAiLCJkZXNjcmlwdGlvbiIsInByb21wdCIsImJ1dHRvbiIsInNwYW4iLCJ0b0xvY2FsZVRpbWVTdHJpbmciLCJob3VyIiwibWludXRlIiwic3R5bGUiLCJhbmltYXRpb25EZWxheSIsImZvcm0iLCJvblN1Ym1pdCIsImltYWdlIiwiaW1nIiwic3JjIiwiYWx0IiwidGV4dGFyZWEiLCJvbkNoYW5nZSIsInRhcmdldCIsIm9uS2V5RG93biIsInBsYWNlaG9sZGVyIiwiZGlzYWJsZWQiLCJyb3dzIiwib3ZlcmZsb3ciLCJoZWlnaHQiLCJvbklucHV0IiwibWluIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJjbGljayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/chat-interface.tsx\n"));
|
|
|
|
/***/ })
|
|
|
|
}); |