@hivegpt/hiveai-angular 0.0.430 → 0.0.431

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,"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","_","label","sent","trys","ops","g","Iterator","verb","Symbol","iterator","n","v","op","pop","length","push","__values","o","s","m","i","__read","r","ar","error","__spreadArray","to","from","pack","arguments","l","slice","concat","SuppressedError","TranslationService","eventId","translationsData","Key","DefaultValue","Translations","en","fr","it","es","de","zh","ru","setEventId","id","getTranslation","key","console","log","lang","localStorage","getItem","replace","entry","find","item","getLang","storageKey","type","Injectable","args","providedIn","formatHoursAndMinutes","date","hours","getHours","minutes","getMinutes","formatNow","timezone","now","Date","options","hour12","hour","minute","timeZone","toLocaleString","formatTimeStamps","timestamps","prod_environment","USERS_API","BASE_URL","AGENTS_API","API_KEY","SocketUrl","dev_environment","ConversationService","conversationStorageKeyPrefix","sessionStorageKeyPrefix","userSpecificNotification","Subject","generateKey","Math","floor","getTime","toString","random","getKey","botId","resetKey","setItem","getSessionKey","sessionId","sendValidatedUserData","message","getUserSpecificNotification","asObservable","NotificationSocket","_super","_this","socketConfig","on","warn","err","Socket","url","transports","reconnection","autoConnect","upgrade","reconnectionDelay","reconnectionDelayMax","reconnectionAttempts","Infinity","SocketService","conversationService","notificationSocket","isCommonSocketInitialized","isUserSpecificSocketInitialized","isUserSpecificEventReleased","messageQueue","releaseInterval","intervalSetup","startReleasingMessages","isSocketInitialized","isCommon","disconnectSocketConnection","disconnect","connectSocketConnection","connect","registerUserSpecificHiveSocket","conversation_id","org_id","groupId","groupId_org","emit","fromEvent","subscribe","res","setInterval","shift","BotsService","http","eventDescription","bot_api","fetchSpeechAuthorizationToken","apiKey","domain","headers","HttpHeaders","get","pipe","map","resp","token","getWorkflowsByOrgId","orgId","getWorkflowExecutionById","executionId","apiUrl","HttpClient","AudioAnalyzerService","audioContext","analyserNode","dataArray","animationFrameId","isRunning","audioLevelsSubject","BehaviorSubject","isUserSpeakingSubject","noiseFloor","noiseFloorSamples","NOISE_FLOOR_SAMPLE_COUNT","SPEAKING_THRESHOLD_MULTIPLIER","WAVEFORM_BAR_COUNT","audioLevels$","isUserSpeaking$","start","stream","stop","window","AudioContext","webkitAudioContext","source","createMediaStreamSource","createAnalyser","fftSize","smoothingTimeConstant","bufferLength","frequencyBinCount","Uint8Array","analyze","cancelAnimationFrame","state","close","catch","getByteTimeDomainData","rms","calculateRMS","sum","reduce","a","isSpeaking","bars","generateWaveformBars","requestAnimationFrame","data","normalized","sqrt","abs","min","max","WebSocketVoiceClientService","ws","roomCreatedSubject","userTranscriptSubject","botTranscriptSubject","roomCreated$","userTranscript$","botTranscript$","wsUrl","_a","readyState","WebSocket","OPEN","onmessage","event","msg","JSON","parse","roomUrl","room_url","text","final","_b","onerror","onclose","defineProperty","DailyVoiceClientService","ngZone","callObject","localStream","localSessionId","speakingSubject","userSpeakingSubject","micMutedSubject","localStreamSubject","speaking$","userSpeaking$","micMuted$","localStream$","_c","navigator","mediaDevices","getUserMedia","audio","audioTrack","getAudioTracks","getTracks","forEach","Error","Daily","createCallObject","videoSource","audioSource","setupEventHandlers","joinOptions","trim","join","participants","local","session_id","localAudio","cleanup","err_1","run","peerId","activeSpeaker","isLocal","participant","track","kind","errorMsg","setMuted","muted","setLocalAudio","leave","destroy","NgZone","VoiceAgentService","audioAnalyzer","wsClient","dailyClient","callStateSubject","statusTextSubject","durationSubject","isMicMutedSubject","callStartTime","durationInterval","subscriptions","Subscription","destroy$","callState$","statusText$","duration$","isMicMuted$","add","levels","ngOnDestroy","unsubscribe","resetToIdle","stopDurationTimer","conversationId","eventToken","eventUrl","domainAuthority","fetch","method","Authorization","eventtoken","eventurl","stringify","bot_id","voice","ok","status","json","rn_ws_url","take","takeUntil","onRoomCreated","error_1","filter","combineLatest","bot","startDurationTimer","toggleMic","current","updateDuration","elapsed","seconds","padStart","clearInterval","VOICE_MODAL_CONFIG","InjectionToken","VOICE_MODAL_CLOSE_CALLBACK","VoiceAgentModalComponent","voiceAgentService","injector","EventEmitter","agentName","agentRole","injectedConfig","onCloseCallback","displayAvatarUrl","callState","statusText","duration","isMicMuted","isUserSpeaking","audioLevels","hasLeftConnectedOnce","isConnecting","ngOnInit","_d","_e","_f","agentAvatar","speaking","sub","startCall","_g","getWaveformHeight","level","callAgain","backToChat","endCall","hangUp","Component","selector","template","Injector","Output","Input","ChatDrawerComponent","fb","botService","cdr","sanitizer","elementRef","renderer","socketService","translationService","overlay","viewContainerRef","bodyOverflowClass","isCollapsedTrue","copilotName","feedbackEvent","onCloseEvent","openPage","sessionActions","closeBot","connectWithUser","scheduleMeeting","refreshToken","openSupport","autogenKey","addToMyAgendaAction","myUpcomingSessionAction","connectOrFollowAction","aiResponse","chatLog","decoder","TextDecoder","feedbackDone","greetingMsg","hasBackdropValue","input","listenerAdded","loading","mode","quickPrompts","thumbsDownMsgIndex","userName","showStartAgain","isIOSDevice","showFeedBackIconsIndex","temperature","speakers","conSessionKey","currentWorkflowActionProgress","currentWorkflowAction","recognizedText","authorizationToken","region","isVoiceModalOpen","voiceModalOverlayRef","voiceTranscriptSubscriptions","domainAuthorityValue","chatSocketInitialized","isChatingWithAi","readAllChunks","reader","getReader","allSuggestions","closed","scrollToBottom","ReadableStream","controller","pump","currentMessageForEditor","currentIndexForEditor","isDropdownOpen","selectedAgents","allSelected","isDocInEditMode","isContentLoaded","isCollapsed","isCollapsedForGraph","isCollapsedForFGraph","dateTime","toISOString","currentSourcesList","isShowEditorButton","isDrawerOpen","voiceModalConversationId","chatMain","ElementRef","ngOnChanges","changes","currentValue","s27Token","previousValue","isFetchDataFor","chat","is401","fetchDataFor","fetchData","environment","isDev","location","hostname","includes","changeTemperature","fetchBotConfig","markForCheck","fetchChatHistory","response","mapChatHistory","initializeSpeechRecognizer","ensureChatSocket","initializeSocket","setTimeout","listenSockets","eventSubscription","OtherFields","workflow_id","_l","percentage","output","action_name","current_action_name_1","current_action_name","workflow_execution_id","time_stamp","actionIndex","workflowExecutionDetails","Actions","findIndex","Name","currentWorkflowExecutionDetails","executingWorkflow","focusOnTextarea","detectChanges","_m","message_id_1","message_id","answer","web_results","search_results","graphs","execution_graphs","suggestions","currentChatMessage","_id","time","isArray","searchTerms","sourcesList","displayedSources","remainingSources","processMessageForDisplay","executionGraphs","relatedListItems","initializeSocketAndListen","handleEvent","newTemperature","wrapper","document","querySelector","classList","remove","onStartAgain","archieveMessages","userId","post","switchMap","of","catchError","triggerSupport","botName","botIcon","Icon","botSkills","Skills","Greeting","thumbsDownMessages","NegativeResponses","QuickPrompts","conversationKey","accept","handleError","operation","chats","Messages","Type","Text","InsertTimestamp","copied","WorkflowExecutionId","WebLinks","ExecutionGraphs","Graphs","SearchTerms","processMessage","markdownLinkRegex","urlRegex","test","html","sanitizeHtml","match","hashes","ngAfterViewChecked","nativeElement","querySelectorAll","link","addEventListener","onFeedbackClick","bind","bypassSecurityTrustHtml","onClose","removeClass","sendMessageWithTile","prompt","textarea","myInput","style","height","makeAskRequest","agents","inputMsg","fetchSmallTalk","smallTalk","isFeedbackMsg","read","lastItem","decodedChunk","decode","suggestionsMatch","aiFormattedData","section_id","fetchMyConnections","fetchPendingRequests","speakerIds","content","session","getSpeakersByStaffIds","sectionId","sessionIds","usersLen","search","connetUserIds","is_open_page","isMobileBrowser","action","addCloseBotClickEvent","enqueue","submitFeedback","flag","messageId","isHelpful","thumbsUpMessage","supportLink","getElementById","handleKeydown","shiftKey","preventDefault","handleSubmit","handleUpClick","idx","liked","unliked","handleDownClick","copyText","index","textElement","tempTextArea","createElement","innerText","appendChild","select","execCommand","removeChild","handleCopyClick","sanitizeHTML","doc","DOMParser","parseFromString","fragment","createDocumentFragment","childNodes","node","cloneNode","simplifiedDiv","script","innerHTML","handleEditorClick","isEditor","editorsDrawer","open","button","display","counter","interval","scrollTop","scrollHeight","focus","handleAction","info","ngAfterViewInit","drawer","opened","setBodyOverflow","openedChange","removeBodyOverflow","addClass","ids","speaker","performSessionAction","element","listen","userAgent","connectToUser","canDisconnect","scheduleMeetingWithUser","user","canConnect","pendingRequests","myConnections","conn","toggleDropdown","fetchAgents","onSelectAll","agent","selected","onAgentChange","agentFound","areAllSelected","every","getDropdownHeaderText","fetchAgents_http","assign","fetchContent_http","documentContent","fetchEditorContent","markdown","marked","Renderer","href","title","markdownContent","prepareHtml","code","escapedCode","escapeHtml","language","copyToClipboard","clipboard","writeText","alert","toggleCollapse","toggleCollapseGraph","toggleCollapseFGraph","getDomainName","URL","getFaviconUrl","onCardClick","sources","sourcesDrawer","openOuterEditor","onCloseEditor","onDrawerClosed","onCloseSource","toggleDrawer","todo","updateButtonVisibility","openLinkInNewTab","adjustTextareaHeight","target","overflowY","toggleWorkflows","checkForCop29BotId","orgWorkflows","isWorkflowOpen","selectedWorkflow","openWorkflowInput","initializeForm","formControls","Trigger","InputSchema","InputId","Value","Required","Validators","required","workflowForm","group","onWorkflowSelected","workflow","onWorkflowSubmit","valid","generateMarkdown","showWorkflowExecutionLoader","Inputs","workflowInputs","WorkflowName","workflowId","workflow_inputs","user_question","user_id","first_name","firstName","last_name","lastName","workspaceToken","makeAskRequestold","obj","key_label","_loop_1","this_1","Label","entries","_o","_p","showWorkflowHistoryDetails","showWorkflowExecutionDetails","InsertTimeStamp","closeModal","objectToArray","keys","startNewConversation","speechConfig","SpeechSDK","SpeechConfig","fromAuthorizationToken","audioConfig","AudioConfig","fromDefaultMicrophoneInput","recognizer","SpeechRecognizer","recognizing","reason","ResultReason","RecognizingSpeech","recognized","RecognizedSpeech","toggleRecording","canceled","errorDetails","sessionStopped","stopContinuousRecognitionAsync","isRecording","startRecognition","stopRecognition","startContinuousRecognitionAsync","getLatestTime","toLocaleTimeString","openVoiceModal","setupVoiceTranscripts","detach","dispose","config","_h","_j","_k","provide","useValue","closeVoiceModal","overlayRef","hasBackdrop","scrollStrategy","scrollStrategies","block","positionStrategy","position","global","bottom","right","left","top","portal","ComponentPortal","attach","userSub","transcript","botSub","lastMessage","changeDetection","ChangeDetectionStrategy","OnPush","FormBuilder","ChangeDetectorRef","DomSanitizer","Renderer2","Overlay","ViewContainerRef","ViewChild","static","closePlaygroundButtons","ViewChildren","ChatBotComponent","visible","toggle","VoiceAgentModule","NgModule","declarations","imports","CommonModule","providers","exports","SafeHtmlPipe","transform","Pipe","name","VideoPlayerComponent","el","isMuted","isFullscreen","isFullscreenvideoPlaying","toggleSound","video","togglePlay","playState","videoEl","videoObj","isPlaying","play","pause","innerWidth","observer","IntersectionObserver","isIntersecting","threshold","observe","toggleFullscreen","fullscreenvideo","toggleFullscreenPlay","followUser","checkPendingSentRequest","myPendingSentRequests","canUnfollowUser","canFollowUser","getIniNames","charAt","toUpperCase","undefined","decorators","Inject","DOCUMENT","BotHtmlEditorComponent","documentName","quillConfig","toolbar","header","font","list","filldataInForm","editorContent","saveContent","saveContent_http","updateContent_http","put","HiveGptModule","OverlayModule","MatIconModule","MatSidenavModule","FormsModule","ReactiveFormsModule","QuillModule"],"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/translations/translation.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/utils/utils.ts","../../../../projects/hivegpt/eventsgpt-angular/src/environments/environment.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/conversation.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/NotificationSocket.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/socket-service.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/audio-analyzer.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/websocket-voice-client.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/daily-voice-client.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/voice-agent.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/voice-modal-tokens.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chat-drawer/chat-drawer.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chatbot/chatbot.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/voice-agent.module.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/pipes/safe-html.pipe.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/video-player/video-player.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot-html-editor/bot-html-editor.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/hivegpt.module.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslationService {\n private eventId: string | null = null;\n\n setEventId(id: string) {\n this.eventId = id;\n }\n\n getTranslation(key: string): string {\n console.log('eventId', this.eventId);\n // let lang = String(this.getLang(this.eventId)).replace(/^\"|\"$/g, '');\n const lang = (\n localStorage.getItem('defaultLanguage-' + this.eventId) || 'en'\n ).replace(/^\"|\"$/g, '');\n\n const entry = this.translationsData.find((item) => item.Key === key);\n\n if (!entry) {\n return key; // fallback\n }\n\n return entry.Translations[lang] || entry.DefaultValue || key;\n }\n\n private getLang(eventId?: string | null): string {\n const suffix = eventId ? `-${eventId}` : '';\n const storageKey = `defaultLanguage${suffix}`;\n\n return localStorage.getItem(storageKey) || 'en';\n }\n\n private translationsData: any[] = [\n { \n Key: \"Copy\",\n DefaultValue: \"Copy\",\n Translations: {\n en: \"Copy\",\n fr: \"Copier\",\n it: \"Copia\",\n es: \"Copiar\",\n de: \"Kopieren\",\n \"pt-br\": \"Copiar\",\n ar: \"نسخ\",\n zh: \"复制\",\n ru: \"Копировать\"\n }\n}\n,\n {\n \n Key: \"May I assist you with anything else\",\n DefaultValue: \"Great. May I assist you with anything else?\",\n Translations: {\n en: \"Great. May I assist you with anything else?\",\n fr: \"Parfait. Puis-je vous aider avec autre chose ?\",\n it: \"Perfetto. Posso aiutarti con qualcos'altro?\",\n es: \"Genial. ¿Puedo ayudarte con algo más?\",\n de: \"Super. Kann ich Ihnen noch bei etwas anderem helfen?\",\n \"pt-br\": \"Ótimo. Posso ajudar com mais alguma coisa?\",\n ar: \"رائع. هل يمكنني مساعدتك في أي شيء آخر؟\",\n zh: \"太好了。还有什么我可以帮您的吗?\",\n ru: \"Отлично. Могу ли я помочь вам с чем-то ещё?\"\n }\n},\n {\n Key: \"We are sorry we've not been able to answer your question\",\n DefaultValue: \"We are sorry we've not been able to answer your question. However, our dedicated support team is happy to help. Please <a href=\\\"mailto:support@social27.com\\\">click here</a> and a human agent will assist you as soon as possible.\",\n Translations: {\n en: \"We are sorry we've not been able to answer your question. However, our dedicated support team is happy to help. Please <a href=\\\"mailto:support@social27.com\\\">click here</a> and a human agent will assist you as soon as possible.\",\n fr: \"Nous sommes désolés de ne pas avoir pu répondre à votre question. Cependant, notre équipe d'assistance se fera un plaisir de vous aider. Veuillez <a href=\\\"mailto:support@social27.com\\\">cliquer ici</a> et un agent humain vous assistera dès que possible.\",\n it: \"Ci dispiace di non essere riusciti a rispondere alla tua domanda. Tuttavia, il nostro team di supporto dedicato sarà lieto di aiutarti. Ti preghiamo di <a href=\\\"mailto:support@social27.com\\\">fare clic qui</a> e un operatore umano ti assisterà al più presto.\",\n es: \"Lamentamos no haber podido responder a tu pregunta. Sin embargo, nuestro equipo de soporte estará encantado de ayudarte. Por favor, <a href=\\\"mailto:support@social27.com\\\">haz clic aquí</a> y un agente humano te asistirá lo antes posible.\",\n de: \"Es tut uns leid, dass wir Ihre Frage nicht beantworten konnten. Unser engagiertes Support-Team hilft Ihnen jedoch gerne weiter. Bitte <a href=\\\"mailto:support@social27.com\\\">klicken Sie hier</a>, und ein menschlicher Mitarbeiter wird Ihnen so bald wie möglich helfen.\",\n \"pt-br\": \"Lamentamos não ter conseguido responder à sua pergunta. No entanto, nossa equipe de suporte dedicada ficará feliz em ajudar. Por favor, <a href=\\\"mailto:support@social27.com\\\">clique aqui</a> e um agente humano o ajudará o mais rápido possível.\",\n ar: \"نأسف لعدم تمكننا من الإجابة على سؤالك. ومع ذلك، يسعد فريق الدعم المخصص لدينا بمساعدتك. يرجى <a href=\\\"mailto:support@social27.com\\\">النقر هنا</a> وسيساعدك أحد الوكلاء البشريين في أقرب وقت ممكن.\",\n zh: \"很抱歉我们未能回答您的问题。不过,我们的专属支持团队很乐意为您提供帮助。请<a href=\\\"mailto:support@social27.com\\\">点击这里</a>,人工客服将尽快为您提供协助。\",\n ru: \"К сожалению, мы не смогли ответить на ваш вопрос. Однако наша служба поддержки с радостью вам поможет. Пожалуйста, <a href=\\\"mailto:support@social27.com\\\">нажмите здесь</a>, и наш оператор свяжется с вами как можно скорее.\"\n }\n},\n {\n Key: 'Ask anything',\n DefaultValue: 'Ask anything',\n Translations: {\n en: 'Ask anything',\n fr: 'Demandez ce que vous voulez',\n it: 'Chiedi qualsiasi cosa',\n es: 'Pregunta lo que quieras',\n de: 'Frag alles',\n 'pt-br': 'Pergunte qualquer coisa',\n ar: 'اسأل أي شيء',\n zh: '随便问',\n ru: 'Спросите что угодно',\n },\n },\n {\n Key: 'Assistant',\n DefaultValue: 'Assistant',\n Translations: {\n en: 'Assistant',\n fr: 'Assistant',\n it: 'Assistente',\n es: 'Asistente',\n de: 'Assistent',\n 'pt-br': 'Assistente',\n ar: 'مساعد',\n zh: '助手',\n ru: 'Ассистент',\n },\n },\n {\n Key: 'Your personal or company information is kept private and secure within this chat.',\n DefaultValue:\n 'Your personal or company information is kept private and secure within this chat.',\n Translations: {\n en: 'Your personal or company information is kept private and secure within this chat.',\n fr: 'Vos informations personnelles ou celles de votre entreprise sont conservées privées et sécurisées dans cette conversation.',\n it: \"Le tue informazioni personali o aziendali sono mantenute private e sicure all'interno di questa chat.\",\n es: 'Tu información personal o de la empresa se mantiene privada y segura dentro de este chat.',\n de: 'Ihre persönlichen oder geschäftlichen Informationen bleiben in diesem Chat privat und sicher.',\n 'pt-br':\n 'Suas informações pessoais ou da empresa são mantidas privadas e seguras dentro deste chat.',\n ar: 'تظل معلوماتك الشخصية أو معلومات شركتك خاصة وآمنة داخل هذه المحادثة.',\n zh: '您的个人或公司信息在此聊天中保持私密和安全。',\n ru: 'Ваша личная или корпоративная информация остается конфиденциальной и защищенной в этом чате.',\n },\n },\n {\n Key: 'Send message',\n DefaultValue: 'Send message',\n Translations: {\n en: 'Send message',\n fr: 'Envoyer un message',\n it: 'Invia messaggio',\n es: 'Enviar mensaje',\n de: 'Nachricht senden',\n 'pt-br': 'Enviar mensagem',\n ar: 'إرسال رسالة',\n zh: '发送消息',\n ru: 'Отправить сообщение',\n },\n },\n {\n Key: 'Platform GPT',\n DefaultValue: 'Platform GPT',\n Translations: {\n en: 'Platform GPT',\n fr: 'Plateforme GPT',\n it: 'Piattaforma GPT',\n es: 'Plataforma GPT',\n de: 'Plattform GPT',\n 'pt-br': 'Plataforma GPT',\n ar: 'منصة GPT',\n zh: '平台 GPT',\n ru: 'Платформа GPT',\n },\n },\n {\n Key: 'New Chat',\n DefaultValue: 'New Chat',\n Translations: {\n en: 'New Chat',\n fr: 'Nouvelle conversation',\n it: 'Nuova chat',\n es: 'Nuevo chat',\n de: 'Neuer Chat',\n 'pt-br': 'Novo chat',\n ar: 'محادثة جديدة',\n zh: '新聊天',\n ru: 'Новый чат',\n },\n },\n {\n Key: 'You',\n DefaultValue: 'You',\n Translations: {\n en: 'You',\n fr: 'Vous',\n it: 'Tu',\n es: 'Tú',\n de: 'Du',\n 'pt-br': 'Você',\n ar: 'أنت',\n zh: '您',\n ru: 'Вы',\n },\n },\n {\n Key: 'Write your message',\n DefaultValue: 'Write your message',\n Translations: {\n en: 'Write your message',\n fr: 'Écrivez votre message',\n it: 'Scrivi il tuo messaggio',\n es: 'Escribe tu mensaje',\n de: 'Schreiben Sie Ihre Nachricht',\n 'pt-br': 'Escreva sua mensagem',\n ar: 'اكتب رسالتك',\n zh: '写下您的消息',\n ru: 'Напишите ваше сообщение',\n },\n },\n {\n Key: 'Send',\n DefaultValue: 'Send',\n Translations: {\n en: 'Send',\n fr: 'Envoyer',\n it: 'Invia',\n es: 'Enviar',\n de: 'Senden',\n 'pt-br': 'Enviar',\n ar: 'إرسال',\n zh: '发送',\n ru: 'Отправить',\n },\n },\n \n {\n Key: 'Call Interface',\n DefaultValue: 'Call Interface',\n Translations: {\n en: 'Call Interface',\n fr: \"Interface d'appel\",\n it: 'Interfaccia chiamata',\n es: 'Interfaz de llamada',\n de: 'Anrufoberfläche',\n 'pt-br': 'Interface de chamada',\n ar: 'واجهة الاتصال',\n zh: '呼叫界面',\n ru: 'Интерфейс звонка',\n },\n },\n {\n Key: 'Close',\n DefaultValue: 'Close',\n Translations: {\n en: 'Close',\n fr: 'Fermer',\n it: 'Chiudi',\n es: 'Cerrar',\n de: 'Schließen',\n 'pt-br': 'Fechar',\n ar: 'إغلاق',\n zh: '关闭',\n ru: 'Закрыть',\n },\n },\n ];\n}\n","const formatHoursAndMinutes = (date: Date) => {\n let hours = date.getHours() % 12;\n const minutes = date.getMinutes();\n const amPm = date.getHours() < 12 ? 'AM' : 'PM';\n if(hours === 0) hours = 12;\n\n const formattedHours = hours < 10 ? `0${hours}` : hours;\n const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;\n\n return `${formattedHours}:${formattedMinutes} ${amPm}`;\n};\n\nexport const formatNow = (timezone?: string) => {\n const now = new Date();\n if (timezone) {\n const options: any = {\n hour12: true,\n hour: 'numeric',\n minute: 'numeric',\n timeZone: timezone,\n };\n return now.toLocaleString('en-US', options);\n }\n return formatHoursAndMinutes(now);\n};\n\nexport const formatTimeStamps = (timezone: string, timestamps: any) => {\n const date = new Date(timestamps + 'Z');\n\n const options: any = {\n hour12: true,\n hour: 'numeric',\n minute: 'numeric',\n timeZone: timezone,\n };\n return date.toLocaleString('en-US', options);\n};\n","\n\nexport const prod_environment = {\n USERS_API: 'https://es-user.social27.com/api',\n BASE_URL: 'https://agent-api.hivegpt.ai',\n AGENTS_API: 'https://hive-ai.social27.com/api',\n API_KEY: '82595783-dc9c-4513-8204-709818d51be3',\n SocketUrl: 'https://notif-v2-ws.social27.com/'\n}\n\n\nexport const dev_environment = {\n USERS_API: 'https://pre-user.social27.com/api',\n BASE_URL: 'https://pre-agent-api.hivegpt.ai',\n AGENTS_API: 'https://hive-pre-ai.social27.com/api',\n API_KEY: '66d59244c50b8fb597a101t1',\n SocketUrl: 'https://notif-ws-staging.social27.com/',\n};\n\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConversationService {\n private conversationStorageKeyPrefix = 'conversationKey_';\n private sessionStorageKeyPrefix = 'sessionKey_';\n\n private userSpecificNotification: Subject<any> = new Subject<any>();\n\n constructor() { }\n\n generateKey(): string {\n const timestamp = Math.floor(new Date().getTime() / 1000).toString(16);\n const randomHex = 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, () => {\n return Math.floor(Math.random() * 16).toString(16);\n });\n return timestamp + randomHex;\n }\n\n getKey(botId: string, resetKey: boolean = false): string {\n const storageKey = `${this.conversationStorageKeyPrefix}${botId}`;\n let value = localStorage.getItem(storageKey);\n\n if (!value || resetKey) {\n value = this.generateKey();\n localStorage.setItem(storageKey, value);\n }\n\n return value;\n }\n\n getSessionKey(sessionId: string, resetKey: boolean = false): string {\n const storageKey = `${this.sessionStorageKeyPrefix}${sessionId}`;\n let value = localStorage.getItem(storageKey);\n\n if (!value || resetKey) {\n value = this.generateKey();\n localStorage.setItem(storageKey, value);\n }\n\n return value;\n }\n\n sendValidatedUserData(message: any) {\n this.userSpecificNotification.next(message);\n }\n\n getUserSpecificNotification(): Observable<any> {\n return this.userSpecificNotification.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Socket, SocketIoConfig } from 'ngx-socket-io';\nimport { prod_environment } from '../../environments/environment';\n\n@Injectable({\n providedIn: 'root' // This ensures the service is available across the application\n})\nexport class NotificationSocket extends Socket {\n constructor() {\n super(socketConfig);\n\n // Log connection status\n this.on('connect', () => {\n console.log('Socket connected');\n });\n\n this.on('disconnect', () => {\n console.warn('Socket disconnected');\n });\n\n this.on('connect_error', (err) => {\n console.error('Socket connection error:', err);\n });\n }\n}\n\nconst socketConfig: SocketIoConfig = {\n url: prod_environment.SocketUrl,\n options: {\n transports: ['websocket', 'polling'],\n reconnection: true,\n autoConnect: true,\n upgrade: true,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 5000,\n reconnectionAttempts: Infinity\n }\n};","import { Injectable } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\nimport { ConversationService } from './conversation.service';\nimport { NotificationSocket } from './NotificationSocket';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SocketService {\n public testMessage: string;\n private isCommonSocketInitialized = false;\n private isUserSpecificSocketInitialized = false;\n private isUserSpecificEventReleased = true;\n private messageQueue: any[] = [];\n private releaseInterval = 1000;\n private intervalSetup: boolean = false;\n\n constructor(\n private conversationService: ConversationService,\n private notificationSocket: NotificationSocket\n ) {\n this.startReleasingMessages();\n }\n\n isSocketInitialized(isCommon: boolean) {\n return isCommon\n ? this.isCommonSocketInitialized\n : this.isUserSpecificSocketInitialized &&\n !this.isUserSpecificEventReleased;\n }\n\n disconnectSocketConnection() {\n this.notificationSocket.disconnect();\n }\n connectSocketConnection() {\n this.notificationSocket.connect();\n }\n registerUserSpecificHiveSocket(botId: string, conversation_id: string, org_id: string) {\n const commonNotification = 'commonNotification';\n const groupId = `Hive_AI_Notifs_${botId}_${conversation_id}`;\n const groupId_org = `Hive_AI_Notifs_${org_id}`;\n\n // Remove any pre-existing listeners for commonNotification\n // this.notificationSocket.removeAllListeners(commonNotification);\n\n // Join the group again with updated botId and conversation_id\n this.notificationSocket.emit('joinData', { groupId });\n this.notificationSocket.emit('joinData', { groupId: groupId_org });\n\n // Re-register for common notifications\n this.notificationSocket.fromEvent(commonNotification).subscribe(\n (res) => {\n console.log('Received commonNotification:', res);\n this.conversationService.sendValidatedUserData(res);\n },\n (error) => {\n console.error('Error receiving commonNotification:', error);\n }\n );\n }\n\n private startReleasingMessages() {\n if (!this.intervalSetup) {\n setInterval(() => {\n if (this.messageQueue.length > 0) {\n const message = this.messageQueue.shift(); // Remove the first message from the queue\n // Handle the message here, e.g., send it to the server or process it\n console.log('Releasing message from queue:', message);\n // this.campaignService.sendValidatedUserData(message);\n }\n }, this.releaseInterval);\n this.intervalSetup = true; // Prevents multiple intervals\n }\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { HttpHeaders } from '@angular/common/http';\nimport { Observable, Subject, throwError } from 'rxjs';\nimport { AnyRecord } from 'dns';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BotsService {\n eventDescription = new Subject();\n bot_api = 'https://agent-api.hivegpt.ai/';\n constructor(private http: HttpClient) { }\n\n fetchSpeechAuthorizationToken(botId, apiKey, domain) {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'hive-bot-id': botId,\n 'domain-authority': domain\n });\n\n const apiUrl = `${this.bot_api}speech/issue_token`;\n const url = `${apiUrl}`;\n return this.http.get(url, { headers }).pipe(\n map((resp: any) => {\n return resp.token;\n })\n );\n }\n\n getWorkflowsByOrgId(orgId: string): Observable<any> {\n const apiUrl = `${this.bot_api}workflows`;\n const url = `${apiUrl}?org_id=${orgId}`;\n return this.http.get(url).pipe(\n map((resp: any) => {\n return resp;\n })\n );\n }\n\n getWorkflowExecutionById(executionId: string): Observable<any> {\n const apiUrl = `${this.bot_api}workflows/execution/${executionId}`;\n return this.http.get(apiUrl).pipe(\n map((resp: any) => {\n return resp;\n })\n );\n }\n}","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Audio analyzer for waveform visualization only.\n * Do NOT use isUserSpeaking$ for call state; speaking state must come from Daily.js.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AudioAnalyzerService {\n private audioContext: AudioContext | null = null;\n private analyserNode: AnalyserNode | null = null;\n private dataArray: Uint8Array | null = null;\n private animationFrameId: number | null = null;\n private isRunning = false;\n\n private audioLevelsSubject = new BehaviorSubject<number[]>([]);\n private isUserSpeakingSubject = new BehaviorSubject<boolean>(false);\n\n // Adaptive noise floor detection\n private noiseFloor = 0;\n private noiseFloorSamples: number[] = [];\n private readonly NOISE_FLOOR_SAMPLE_COUNT = 30;\n private readonly SPEAKING_THRESHOLD_MULTIPLIER = 2.5;\n private readonly WAVEFORM_BAR_COUNT = 40;\n\n audioLevels$: Observable<number[]> = this.audioLevelsSubject.asObservable();\n isUserSpeaking$: Observable<boolean> = this.isUserSpeakingSubject.asObservable();\n\n start(stream: MediaStream): void {\n if (this.isRunning) {\n this.stop();\n }\n\n try {\n this.audioContext = new (window.AudioContext || (window as any).webkitAudioContext)();\n const source = this.audioContext.createMediaStreamSource(stream);\n \n this.analyserNode = this.audioContext.createAnalyser();\n this.analyserNode.fftSize = 2048;\n this.analyserNode.smoothingTimeConstant = 0.8;\n \n const bufferLength = this.analyserNode.frequencyBinCount;\n this.dataArray = new Uint8Array(bufferLength);\n \n source.connect(this.analyserNode);\n \n this.isRunning = true;\n this.noiseFloorSamples = [];\n this.noiseFloor = 0;\n \n this.analyze();\n } catch (error) {\n console.error('Error starting audio analyzer:', error);\n this.stop();\n }\n }\n\n stop(): void {\n this.isRunning = false;\n \n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n\n if (this.analyserNode) {\n this.analyserNode.disconnect();\n this.analyserNode = null;\n }\n\n if (this.audioContext && this.audioContext.state !== 'closed') {\n this.audioContext.close().catch(console.error);\n this.audioContext = null;\n }\n\n this.dataArray = null;\n this.audioLevelsSubject.next([]);\n this.isUserSpeakingSubject.next(false);\n }\n\n private analyze(): void {\n if (!this.isRunning || !this.analyserNode || !this.dataArray) {\n return;\n }\n\n this.analyserNode.getByteTimeDomainData(this.dataArray);\n \n // Calculate RMS (Root Mean Square) volume\n const rms = this.calculateRMS(this.dataArray);\n \n // Learn noise floor during initial samples\n if (this.noiseFloorSamples.length < this.NOISE_FLOOR_SAMPLE_COUNT) {\n this.noiseFloorSamples.push(rms);\n if (this.noiseFloorSamples.length === this.NOISE_FLOOR_SAMPLE_COUNT) {\n // Calculate average noise floor\n const sum = this.noiseFloorSamples.reduce((a, b) => a + b, 0);\n this.noiseFloor = sum / this.NOISE_FLOOR_SAMPLE_COUNT;\n }\n } else {\n // Update noise floor adaptively (moving average)\n this.noiseFloor = this.noiseFloor * 0.99 + rms * 0.01;\n }\n\n // Detect if user is speaking\n const threshold = this.noiseFloor * this.SPEAKING_THRESHOLD_MULTIPLIER;\n const isSpeaking = rms > threshold;\n this.isUserSpeakingSubject.next(isSpeaking);\n\n // Generate waveform bars\n const bars = this.generateWaveformBars(this.dataArray);\n this.audioLevelsSubject.next(bars);\n\n this.animationFrameId = requestAnimationFrame(() => this.analyze());\n }\n\n private calculateRMS(data: Uint8Array): number {\n let sum = 0;\n for (let i = 0; i < data.length; i++) {\n const normalized = (data[i] - 128) / 128;\n sum += normalized * normalized;\n }\n return Math.sqrt(sum / data.length);\n }\n\n private generateWaveformBars(data: Uint8Array): number[] {\n const bars: number[] = [];\n const step = Math.floor(data.length / this.WAVEFORM_BAR_COUNT);\n \n for (let i = 0; i < this.WAVEFORM_BAR_COUNT; i++) {\n const index = i * step;\n const value = data[index];\n // Normalize to 0-100\n const normalized = Math.abs((value - 128) / 128) * 100;\n bars.push(Math.min(100, Math.max(0, normalized)));\n }\n \n return bars;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/** WebSocket message types from backend signaling. */\nexport interface WsMessageRoomCreated {\n type: 'room_created';\n room_url: string;\n}\n\nexport interface WsMessageUserTranscript {\n type: 'user_transcript';\n text: string;\n final?: boolean;\n}\n\nexport interface WsMessageBotTranscript {\n type: 'bot_transcript';\n text: string;\n}\n\nexport type WsMessage =\n | WsMessageRoomCreated\n | WsMessageUserTranscript\n | WsMessageBotTranscript;\n\nexport interface TranscriptData {\n text: string;\n final: boolean;\n}\n\n/**\n * WebSocket-only client for voice agent signaling.\n * CRITICAL: Uses native WebSocket only. NO Socket.IO, NO ngx-socket-io.\n *\n * Responsibilities:\n * - Connect to ws_url (from POST /ai/ask-voice response)\n * - Parse JSON messages (room_created, user_transcript, bot_transcript)\n * - Emit roomCreated$, userTranscript$, botTranscript$\n * - NO audio logic, NO mic logic. Audio is handled by Daily.js (WebRTC).\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class WebSocketVoiceClientService {\n private ws: WebSocket | null = null;\n private roomCreatedSubject = new Subject<string>();\n private userTranscriptSubject = new Subject<TranscriptData>();\n private botTranscriptSubject = new Subject<string>();\n\n /** Emits room_url when backend sends room_created. */\n roomCreated$: Observable<string> = this.roomCreatedSubject.asObservable();\n\n /** Emits user transcript updates. */\n userTranscript$: Observable<TranscriptData> =\n this.userTranscriptSubject.asObservable();\n\n /** Emits bot transcript updates. */\n botTranscript$: Observable<string> =\n this.botTranscriptSubject.asObservable();\n\n /** Connect to signaling WebSocket. No audio over this connection. */\n connect(wsUrl: string): void {\n if (this.ws?.readyState === WebSocket.OPEN) {\n return;\n }\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n\n try {\n this.ws = new WebSocket(wsUrl);\n this.ws.onmessage = (event: MessageEvent) => {\n try {\n const msg = JSON.parse(event.data) as Record<string, unknown>;\n if (msg?.type === 'room_created') {\n const roomUrl = (msg.room_url ?? msg.roomUrl) as string | undefined;\n if (typeof roomUrl === 'string') {\n this.roomCreatedSubject.next(roomUrl);\n }\n } else if (msg?.type === 'user_transcript' && typeof msg.text === 'string') {\n this.userTranscriptSubject.next({\n text: msg.text,\n final: msg.final === true,\n });\n } else if (msg?.type === 'bot_transcript' && typeof msg.text === 'string') {\n this.botTranscriptSubject.next(msg.text);\n }\n } catch {\n // Ignore non-JSON or unknown messages\n }\n };\n this.ws.onerror = () => {\n this.disconnect();\n };\n this.ws.onclose = () => {\n this.ws = null;\n };\n } catch (err) {\n console.error('WebSocketVoiceClient: connect failed', err);\n this.ws = null;\n throw err;\n }\n }\n\n /** Disconnect and cleanup. */\n disconnect(): void {\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n /** Whether the WebSocket is open. */\n get isConnected(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport Daily from '@daily-co/daily-js';\nimport type { DailyCall, DailyParticipant } from '@daily-co/daily-js';\n\n/**\n * Daily.js WebRTC client for voice agent audio.\n * Responsibilities:\n * - Create and manage Daily CallObject\n * - Join Daily room using room_url\n * - Handle mic capture + speaker playback\n * - Provide real-time speaking detection via active-speaker-change (primary)\n * and track-started/track-stopped (fallback for immediate feedback)\n * - Expose speaking$ (bot speaking), userSpeaking$ (user speaking), micMuted$\n * - Expose localStream$ for waveform visualization (AudioAnalyzerService)\n *\n * Speaking state flips immediately when agent audio starts playing.\n * If user speaks while bot is talking, state switches to listening.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DailyVoiceClientService {\n private callObject: DailyCall | null = null;\n private localStream: MediaStream | null = null;\n private localSessionId: string | null = null;\n\n private speakingSubject = new BehaviorSubject<boolean>(false);\n private userSpeakingSubject = new BehaviorSubject<boolean>(false);\n private micMutedSubject = new BehaviorSubject<boolean>(false);\n private localStreamSubject = new BehaviorSubject<MediaStream | null>(null);\n\n /** True when bot (remote participant) is the active speaker. */\n speaking$: Observable<boolean> = this.speakingSubject.asObservable();\n\n /** True when user (local participant) is the active speaker. */\n userSpeaking$: Observable<boolean> = this.userSpeakingSubject.asObservable();\n\n /** True when mic is muted. */\n micMuted$: Observable<boolean> = this.micMutedSubject.asObservable();\n\n /** Emits local mic stream for waveform visualization. */\n localStream$: Observable<MediaStream | null> =\n this.localStreamSubject.asObservable();\n\n constructor(private ngZone: NgZone) {}\n\n /**\n * Connect to Daily room. Acquires mic first for waveform, then joins with audio.\n * @param roomUrl Daily room URL (from room_created)\n * @param token Optional meeting token\n */\n async connect(roomUrl: string, token?: string): Promise<void> {\n if (this.callObject) {\n await this.disconnect();\n }\n\n try {\n // Get mic stream for both Daily and waveform (single capture)\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const audioTrack = stream.getAudioTracks()[0];\n if (!audioTrack) {\n stream.getTracks().forEach((t) => t.stop());\n throw new Error('No audio track');\n }\n\n this.localStream = stream;\n this.localStreamSubject.next(stream);\n\n // Create audio-only call object\n // videoSource: false = no camera, audioSource = our mic track\n const callObject = Daily.createCallObject({\n videoSource: false,\n audioSource: audioTrack,\n });\n\n this.callObject = callObject;\n\n this.setupEventHandlers(callObject);\n\n // Join room; Daily handles playback of remote (bot) audio automatically.\n // Only pass token when it's a non-empty string (Daily rejects undefined/non-string).\n const joinOptions: { url: string; token?: string } = { url: roomUrl };\n if (typeof token === 'string' && token.trim() !== '') {\n joinOptions.token = token;\n }\n await callObject.join(joinOptions);\n\n const participants = callObject.participants();\n if (participants?.local) {\n this.localSessionId = participants.local.session_id;\n }\n\n // Initial mute state: Daily starts with audio on\n this.micMutedSubject.next(!callObject.localAudio());\n } catch (err) {\n this.cleanup();\n throw err;\n }\n }\n\n private setupEventHandlers(call: DailyCall): void {\n // active-speaker-change: primary source for real-time speaking detection.\n // Emits when the loudest participant changes; bot speaking = remote is active.\n call.on('active-speaker-change', (event: { activeSpeaker?: { peerId?: string } }) => {\n this.ngZone.run(() => {\n const peerId = event?.activeSpeaker?.peerId;\n if (!peerId || !this.localSessionId) {\n this.speakingSubject.next(false);\n this.userSpeakingSubject.next(false);\n return;\n }\n const isLocal = peerId === this.localSessionId;\n this.userSpeakingSubject.next(isLocal);\n this.speakingSubject.next(!isLocal);\n });\n });\n\n // track-started / track-stopped: fallback for immediate feedback when\n // remote (bot) audio track starts or stops. Ensures talking indicator\n // flips as soon as agent audio begins, without waiting for active-speaker-change.\n call.on('track-started', (event: { participant?: DailyParticipant | null; type?: string; track?: MediaStreamTrack }) => {\n this.ngZone.run(() => {\n const p = event?.participant;\n const type = event?.type ?? event?.track?.kind;\n if (p && !p.local && type === 'audio') {\n this.speakingSubject.next(true);\n }\n });\n });\n\n call.on('track-stopped', (event: { participant?: DailyParticipant | null; type?: string; track?: MediaStreamTrack }) => {\n this.ngZone.run(() => {\n const p = event?.participant;\n const type = event?.type ?? event?.track?.kind;\n if (p && !p.local && type === 'audio') {\n this.speakingSubject.next(false);\n }\n });\n });\n\n call.on('left-meeting', () => {\n this.ngZone.run(() => this.cleanup());\n });\n\n call.on('error', (event?: { errorMsg?: string }) => {\n this.ngZone.run(() => {\n console.error('DailyVoiceClient: Daily error', event?.errorMsg ?? event);\n this.cleanup();\n });\n });\n }\n\n /** Set mic muted state. */\n setMuted(muted: boolean): void {\n if (!this.callObject) return;\n this.callObject.setLocalAudio(!muted);\n this.micMutedSubject.next(muted);\n }\n\n /** Disconnect and cleanup. */\n async disconnect(): Promise<void> {\n if (!this.callObject) {\n this.cleanup();\n return;\n }\n try {\n await this.callObject.leave();\n } catch (e) {\n // ignore\n }\n this.cleanup();\n }\n\n private cleanup(): void {\n if (this.callObject) {\n this.callObject.destroy().catch(() => {});\n this.callObject = null;\n }\n if (this.localStream) {\n this.localStream.getTracks().forEach((t) => t.stop());\n this.localStream = null;\n }\n this.localSessionId = null;\n this.speakingSubject.next(false);\n this.userSpeakingSubject.next(false);\n this.localStreamSubject.next(null);\n // Keep last micMuted state; will reset on next connect\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable, Subject, Subscription } from 'rxjs';\nimport { filter, take, takeUntil } from 'rxjs/operators';\nimport { AudioAnalyzerService } from './audio-analyzer.service';\nimport { WebSocketVoiceClientService } from './websocket-voice-client.service';\nimport { DailyVoiceClientService } from './daily-voice-client.service';\n\nexport type CallState =\n | 'idle'\n | 'connecting'\n | 'connected'\n | 'listening'\n | 'talking'\n | 'ended';\n\nexport interface TranscriptData {\n text: string;\n final: boolean;\n}\n\n/**\n * Voice agent orchestrator. Coordinates WebSocket (signaling) and Daily.js (WebRTC audio).\n *\n * CRITICAL: This service must NEVER use Socket.IO or ngx-socket-io. Voice flow uses only:\n * - Native WebSocket (WebSocketVoiceClientService) for signaling (room_created, transcripts)\n * - Daily.js (DailyVoiceClientService) for WebRTC audio. Audio does NOT flow over WebSocket.\n *\n * - Maintains callState, statusText, duration, isMicMuted, isUserSpeaking, audioLevels\n * - Uses WebSocket for room_created and transcripts only (no audio)\n * - Uses Daily.js for all audio, mic, and real-time speaking detection\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class VoiceAgentService implements OnDestroy {\n private callStateSubject = new BehaviorSubject<CallState>('idle');\n private statusTextSubject = new BehaviorSubject<string>('');\n private durationSubject = new BehaviorSubject<string>('00:00');\n private isMicMutedSubject = new BehaviorSubject<boolean>(false);\n private isUserSpeakingSubject = new BehaviorSubject<boolean>(false);\n private audioLevelsSubject = new BehaviorSubject<number[]>([]);\n private userTranscriptSubject = new Subject<TranscriptData>();\n private botTranscriptSubject = new Subject<string>();\n\n private callStartTime = 0;\n private durationInterval: ReturnType<typeof setInterval> | null = null;\n\n private subscriptions = new Subscription();\n private destroy$ = new Subject<void>();\n\n callState$: Observable<CallState> = this.callStateSubject.asObservable();\n statusText$: Observable<string> = this.statusTextSubject.asObservable();\n duration$: Observable<string> = this.durationSubject.asObservable();\n isMicMuted$: Observable<boolean> = this.isMicMutedSubject.asObservable();\n isUserSpeaking$: Observable<boolean> = this.isUserSpeakingSubject.asObservable();\n audioLevels$: Observable<number[]> = this.audioLevelsSubject.asObservable();\n userTranscript$: Observable<TranscriptData> =\n this.userTranscriptSubject.asObservable();\n botTranscript$: Observable<string> = this.botTranscriptSubject.asObservable();\n\n constructor(\n private audioAnalyzer: AudioAnalyzerService,\n private wsClient: WebSocketVoiceClientService,\n private dailyClient: DailyVoiceClientService\n ) {\n // Waveform visualization only - do NOT use for speaking state\n this.subscriptions.add(\n this.audioAnalyzer.audioLevels$.subscribe((levels) =>\n this.audioLevelsSubject.next(levels)\n )\n );\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.subscriptions.unsubscribe();\n this.disconnect();\n }\n\n /** Reset to idle state (e.g. when modal opens so user can click Start Call). */\n resetToIdle(): void {\n if (this.callStateSubject.value === 'idle') return;\n this.stopDurationTimer();\n this.audioAnalyzer.stop();\n this.wsClient.disconnect();\n // Fire-and-forget: Daily disconnect is async; connect() will await if needed\n void this.dailyClient.disconnect();\n this.callStateSubject.next('idle');\n this.statusTextSubject.next('');\n this.durationSubject.next('0:00');\n }\n\n async connect(\n apiUrl: string,\n token: string,\n botId: string,\n conversationId: string,\n apiKey: string,\n eventToken: string,\n eventUrl: string,\n domainAuthority: string\n ): Promise<void> {\n if (this.callStateSubject.value !== 'idle') {\n console.warn('Call already in progress');\n return;\n }\n\n try {\n this.callStateSubject.next('connecting');\n this.statusTextSubject.next('Connecting...');\n\n const baseUrl = apiUrl.replace(/\\/$/, '');\n const postUrl = `https://48c6-2405-201-5c02-991e-d91c-8adf-399c-abdc.ngrok-free.app/ai/ask-voice`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n 'domain-authority': domainAuthority,\n 'eventtoken': eventToken,\n 'eventurl': eventUrl,\n 'hive-bot-id': botId,\n 'x-api-key': apiKey,\n };\n\n // POST to get ws_url for signaling\n const res = await fetch(postUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n bot_id: botId,\n conversation_id: conversationId,\n voice: 'alloy',\n }),\n });\n\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`);\n }\n\n const json = await res.json();\n // Use only WebSocket URL. Do NOT use any Socket.IO URL (e.g. socket_io_url).\n const wsUrl = json?.rn_ws_url;\n if (!wsUrl || typeof wsUrl !== 'string') {\n throw new Error('No ws_url in response');\n }\n\n // Subscribe to room_created BEFORE connecting to avoid race\n this.wsClient.roomCreated$\n .pipe(take(1), takeUntil(this.destroy$))\n .subscribe(async (roomUrl) => {\n try {\n await this.onRoomCreated(roomUrl);\n } catch (err) {\n console.error('Daily join failed:', err);\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Connection failed');\n await this.disconnect();\n throw err;\n }\n });\n\n // Forward transcripts from WebSocket\n this.subscriptions.add(\n this.wsClient.userTranscript$\n .pipe(takeUntil(this.destroy$))\n .subscribe((t) => this.userTranscriptSubject.next(t))\n );\n this.subscriptions.add(\n this.wsClient.botTranscript$\n .pipe(takeUntil(this.destroy$))\n .subscribe((t) => this.botTranscriptSubject.next(t))\n );\n\n // Connect signaling WebSocket (no audio over WS)\n this.wsClient.connect(wsUrl);\n } catch (error) {\n console.error('Error connecting voice agent:', error);\n this.callStateSubject.next('ended');\n await this.disconnect();\n this.statusTextSubject.next('Connection failed');\n throw error;\n }\n }\n\n private async onRoomCreated(roomUrl: string): Promise<void> {\n // Connect Daily.js for WebRTC audio\n await this.dailyClient.connect(roomUrl);\n\n // Waveform: use local mic stream from Daily client\n this.dailyClient.localStream$\n .pipe(filter((s): s is MediaStream => s != null), take(1))\n .subscribe((stream) => {\n this.audioAnalyzer.start(stream);\n });\n\n // Speaking state from Daily only (NOT from AudioAnalyzer).\n // User speaking overrides bot talking: if user speaks while bot talks, state = listening.\n this.subscriptions.add(\n this.dailyClient.userSpeaking$.subscribe((s) =>\n this.isUserSpeakingSubject.next(s)\n )\n );\n this.subscriptions.add(\n combineLatest([\n this.dailyClient.speaking$,\n this.dailyClient.userSpeaking$,\n ]).subscribe(([bot, user]) => {\n if (user) {\n this.callStateSubject.next('listening');\n } else if (bot) {\n this.callStateSubject.next('talking');\n } else if (\n this.callStateSubject.value === 'talking' ||\n this.callStateSubject.value === 'listening'\n ) {\n this.callStateSubject.next('connected');\n }\n })\n );\n\n this.subscriptions.add(\n this.dailyClient.micMuted$.subscribe((muted) =>\n this.isMicMutedSubject.next(muted)\n )\n );\n\n this.callStateSubject.next('connected');\n this.statusTextSubject.next('Connected');\n this.callStartTime = Date.now();\n this.startDurationTimer();\n }\n\n async disconnect(): Promise<void> {\n this.stopDurationTimer();\n this.audioAnalyzer.stop();\n\n // Daily first, then WebSocket\n await this.dailyClient.disconnect();\n this.wsClient.disconnect();\n\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Call Ended');\n }\n\n toggleMic(): void {\n const current = this.isMicMutedSubject.value;\n this.dailyClient.setMuted(!current);\n }\n\n private startDurationTimer(): void {\n const updateDuration = () => {\n if (this.callStartTime > 0) {\n const elapsed = Math.floor((Date.now() - this.callStartTime) / 1000);\n const minutes = Math.floor(elapsed / 60);\n const seconds = elapsed % 60;\n this.durationSubject.next(\n `${minutes}:${String(seconds).padStart(2, '0')}`\n );\n }\n };\n updateDuration();\n this.durationInterval = setInterval(updateDuration, 1000);\n }\n\n private stopDurationTimer(): void {\n if (this.durationInterval) {\n clearInterval(this.durationInterval);\n this.durationInterval = null;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface VoiceModalConfig {\n apiUrl: string;\n token: string;\n botId: string;\n conversationId: string;\n apiKey: string;\n eventToken: string;\n eventUrl: string;\n domainAuthority: string;\n agentName: string;\n agentRole: string;\n agentAvatar?: string;\n}\n\nexport const VOICE_MODAL_CONFIG = new InjectionToken<VoiceModalConfig>('VOICE_MODAL_CONFIG');\nexport const VOICE_MODAL_CLOSE_CALLBACK = new InjectionToken<() => void>('VOICE_MODAL_CLOSE_CALLBACK');\n","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter, Injector } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VoiceAgentService, CallState } from '../../services/voice-agent.service';\nimport { AudioAnalyzerService } from '../../services/audio-analyzer.service';\nimport { VOICE_MODAL_CONFIG, VOICE_MODAL_CLOSE_CALLBACK, VoiceModalConfig } from '../../voice-modal-tokens';\n\n@Component({\n selector: 'hivegpt-voice-agent-modal',\n templateUrl: './voice-agent-modal.component.html',\n styleUrls: ['./voice-agent-modal.component.scss']\n})\nexport class VoiceAgentModalComponent implements OnInit, OnDestroy {\n @Output() close = new EventEmitter<void>();\n @Input() apiUrl!: string;\n @Input() token!: string;\n @Input() botId!: string;\n @Input() conversationId!: string;\n @Input() apiKey: string = '';\n @Input() eventToken: string = '';\n @Input() eventUrl: string = '';\n @Input() domainAuthority: string = 'prod-lite';\n @Input() agentName: string = 'AI Assistant';\n @Input() agentRole: string = 'AI Agent Specialist';\n @Input() agentAvatar?: string;\n\n private injectedConfig: VoiceModalConfig | null = null;\n private onCloseCallback: (() => void) | null = null;\n\n constructor(\n public voiceAgentService: VoiceAgentService,\n public audioAnalyzer: AudioAnalyzerService,\n private injector: Injector\n ) {}\n\n /** Hardcoded voice agent avatar (Nia). */\n readonly displayAvatarUrl = 'https://www.jotform.com/uploads/mehmetkarakasli/form_files/1564593667676a8e85f23758.86945537_icon.png';\n\n callState: CallState = 'idle';\n statusText: string = '';\n duration: string = '00:00';\n isMicMuted: boolean = false;\n isUserSpeaking: boolean = false;\n audioLevels: number[] = [];\n isSpeaking: boolean = false;\n\n /** Once user or bot has spoken, show \"Ready\" instead of \"Connected\" when idle in call. */\n private hasLeftConnectedOnce: boolean = false;\n\n private subscriptions: Subscription[] = [];\n\n ngOnInit(): void {\n // When opened via Overlay, config is provided by injection\n this.injectedConfig = this.injector.get(VOICE_MODAL_CONFIG, null);\n this.onCloseCallback = this.injector.get(VOICE_MODAL_CLOSE_CALLBACK, null);\n if (this.injectedConfig) {\n this.apiUrl = this.injectedConfig.apiUrl;\n this.token = this.injectedConfig.token;\n this.botId = this.injectedConfig.botId;\n this.conversationId = this.injectedConfig.conversationId;\n this.apiKey = this.injectedConfig.apiKey ?? '';\n this.eventToken = this.injectedConfig.eventToken ?? '';\n this.eventUrl = this.injectedConfig.eventUrl ?? '';\n this.domainAuthority = this.injectedConfig.domainAuthority ?? 'prod-lite';\n this.agentName = this.injectedConfig.agentName ?? this.agentName;\n this.agentRole = this.injectedConfig.agentRole ?? this.agentRole;\n this.agentAvatar = this.injectedConfig.agentAvatar;\n }\n\n // Subscribe to observables\n this.subscriptions.push(\n this.voiceAgentService.callState$.subscribe(state => {\n this.callState = state;\n this.isSpeaking = state === 'talking';\n if (state === 'listening' || state === 'talking') {\n this.hasLeftConnectedOnce = true;\n }\n if (state === 'idle' || state === 'ended') {\n this.hasLeftConnectedOnce = false;\n }\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.statusText$.subscribe(text => {\n this.statusText = text;\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.duration$.subscribe(duration => {\n this.duration = duration;\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.isMicMuted$.subscribe(muted => {\n this.isMicMuted = muted;\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.isUserSpeaking$.subscribe(speaking => {\n this.isUserSpeaking = speaking;\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.audioLevels$.subscribe(levels => {\n this.audioLevels = levels;\n })\n );\n\n // Modal opens in idle state; user clicks \"Start Call\" to connect (no auto-connect).\n this.voiceAgentService.resetToIdle();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.disconnect();\n }\n\n isConnecting: boolean = false;\n\n async startCall(): Promise<void> {\n if (this.isConnecting || (this.callState !== 'idle' && this.callState !== 'ended')) return;\n this.isConnecting = true;\n try {\n await this.voiceAgentService.connect(\n this.apiUrl,\n this.token,\n this.botId,\n this.conversationId,\n this.apiKey,\n this.eventToken,\n this.eventUrl,\n this.domainAuthority\n );\n } catch (error) {\n console.error('Failed to connect voice agent:', error);\n } finally {\n this.isConnecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n await this.voiceAgentService.disconnect();\n }\n\n toggleMic(): void {\n this.voiceAgentService.toggleMic();\n }\n\n /** Map audio level (0–100) to waveform bar height in px (3–20). */\n getWaveformHeight(level: number): number {\n const n = Math.min(100, Math.max(0, level ?? 0));\n return 3 + (n / 100) * 17;\n }\n\n /** Status label for active call. \"Connected\" only once; then \"Ready\" when idle in call. */\n get statusLabel(): string {\n if (this.callState === 'connecting') return this.statusText || 'Connecting...';\n if (this.callState === 'talking') return 'Talking...';\n if (this.callState === 'listening') return 'Listening';\n if (this.callState === 'connected') {\n return this.hasLeftConnectedOnce ? 'Listening' : 'Connected';\n }\n return this.statusText || '';\n }\n\n /** Call Again: reset to idle then start a new call. */\n callAgain(): void {\n this.voiceAgentService.resetToIdle();\n this.startCall();\n }\n\n /** Back to Chat: close modal and disconnect. */\n backToChat(): void {\n this.endCall();\n }\n\n /** End call but keep modal open to show Call Ended + Call Again / Back to Chat. */\n hangUp(): void {\n this.disconnect();\n }\n\n endCall(): void {\n this.disconnect();\n this.onCloseCallback?.();\n this.close.emit();\n }\n}\n","// import { Platform } from '@angular/cdk/platform';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { TranslationService } from '../translations/translation.service';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Injector,\n Input,\n OnChanges,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n} from '@angular/core';\nimport { MatDrawer } from '@angular/material/sidenav';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { of, Subscription } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport { formatNow, formatTimeStamps } from '../../utils/utils';\nimport {\n dev_environment,\n prod_environment,\n} from '../../../environments/environment';\nimport { ConversationService } from '../conversation.service';\nimport { Observable } from 'rxjs';\nimport { SocketService } from '../socket-service.service';\n\nimport { FormBuilder, Validators } from '@angular/forms';\nimport * as SpeechSDK from 'microsoft-cognitiveservices-speech-sdk';\nimport { BotsService } from '../bot.service';\nimport * as marked from 'marked'; // Import marked\nimport { VoiceAgentService } from '../voice-agent/services/voice-agent.service';\nimport { VoiceAgentModalComponent } from '../voice-agent/components/voice-agent-modal/voice-agent-modal.component';\nimport {\n VOICE_MODAL_CONFIG,\n VOICE_MODAL_CLOSE_CALLBACK,\n VoiceModalConfig,\n} from '../voice-agent/voice-modal-tokens';\n\n@Component({\n selector: 'hivegpt-chat-drawer-package',\n templateUrl: './chat-drawer.component.html',\n styleUrls: ['./chat-drawer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChatDrawerComponent implements OnInit, OnChanges {\n @ViewChild('chatMain') private chatMain: ElementRef;\n @ViewChild('myInput', { static: false })\n myInput!: ElementRef<HTMLTextAreaElement>; // Reference to the textarea\n @ViewChildren('closeplaygroundbutton')\n closePlaygroundButtons: QueryList<ElementRef>;\n @ViewChild('drawer') drawer!: MatDrawer;\n @ViewChild('sourcesDrawer') sourcesDrawer!: MatDrawer;\n @ViewChild('editorsDrawer') editorsDrawer!: MatDrawer;\n private bodyOverflowClass = 'body-overflow-hidden';\n isCollapsedTrue = false;\n @Input() copilotName: string = 'HiveXGPT';\n @Input() firstName!: string;\n @Input() lastName!: string;\n @Input() apiKey!: string;\n @Input() bgBubbleAi!: string;\n @Input() bgBubbleUser!: string;\n @Input() bgGradient!: string[];\n @Input() botName!: string;\n @Input() botSkills!: string;\n @Input() botId!: string;\n @Input() orgId!: string;\n @Input() closeButtonColor!: string;\n @Input() closeButtonbgColor!: string;\n @Input() credentials!: [];\n @Input() dateTimeColor!: string;\n @Input() dateTextColor!: string;\n @Input() eventId!: string;\n @Input() eventUrl!: string;\n @Input() eventToken!: string;\n @Input() workspaceToken!: string;\n @Input() s27Token!: string;\n @Input() eventName!: string;\n @Input() botIcon!: string;\n @Input() formFieldBgColor!: string;\n @Input() formFieldTextColor!: string;\n @Input() fullView!: boolean;\n @Input() gradientColors!: string[];\n @Input() greeting!: string;\n @Input() messageTextColorAi!: string;\n @Input() messageTextColorUser!: string;\n @Input() rules!: string;\n @Input() sendButtonColor!: string;\n @Input() sendButtonTextColor!: string;\n @Input() showClose!: boolean;\n @Input() thumbsDownMessages!: string[];\n @Input() thumbsUpMessage!: string;\n @Input() timezone!: string;\n @Input() unknownResponses!: [];\n @Input() useOpenAi!: boolean;\n @Input() userId!: string;\n @Input() isDev!: boolean;\n\n @Input() againButtonColor!: string[];\n @Input() againButtonTextColor!: string[];\n @Output() feedbackEvent = new EventEmitter<string>();\n @Output() onCloseEvent = new EventEmitter<void>();\n @Output() openPage = new EventEmitter<any>();\n @Output() sessionActions = new EventEmitter<any>();\n @Output() closeBot = new EventEmitter<any>();\n @Output() connectWithUser = new EventEmitter<any>();\n @Output() scheduleMeeting = new EventEmitter<string>();\n @Output() refreshToken = new EventEmitter<any>();\n @Output() openSupport = new EventEmitter<any>();\n\n autogenKey = 'Autogen_eDJTtEU-NB0RtIpzq1w';\n addToMyAgendaAction = 'add_to_my_agenda';\n myUpcomingSessionAction = 'my_upcomming_session';\n connectOrFollowAction = 'connect_or_follow';\n aiResponse: string = '';\n chatLog: any[] = [];\n decoder = new TextDecoder();\n feedbackDone: boolean = false;\n greetingMsg: string = '';\n hasBackdropValue: boolean = false;\n input: string = '';\n listenerAdded = false;\n loading: boolean = false;\n mode: string = 'over';\n quickPrompts: any[] = [];\n thumbsDownMsgIndex = 0;\n userName: string = '';\n showStartAgain: boolean = false;\n isIOSDevice: boolean = false;\n showFeedBackIconsIndex: number | null = null;\n temperature: number = 1;\n speakers = [];\n environment: {\n USERS_API;\n BASE_URL;\n AGENTS_API;\n };\n pendingRequests: any;\n myConnections: any;\n conversationKey: string;\n conSessionKey: string = '';\n isFetchDataFor: boolean;\n is401: boolean;\n msg: any;\n chat: any;\n isWorkflowOpen: boolean;\n orgWorkflows: any;\n openWorkflowInput: boolean;\n selectedWorkflow: any;\n workflowForm: any;\n currentWorkflowActionProgress: number = 0;\n currentWorkflowAction: string = '';\n executingWorkflow: boolean;\n workflowExecutionDetails: any;\n showWorkflowExecutionDetails: any;\n currentWorkflowExecutionDetails: any;\n\n speechConfig: SpeechSDK.SpeechConfig;\n recognizer: SpeechSDK.SpeechRecognizer;\n recognizedText: string = '';\n authorizationToken: string = '';\n region: string = 'westeurope'; // Set your Azure region here\n isRecording: boolean;\n isVoiceModalOpen: boolean = false;\n private voiceModalOverlayRef: OverlayRef | null = null;\n private voiceTranscriptSubscriptions: Subscription[] = [];\n\n constructor(\n private fb: FormBuilder,\n private botService: BotsService,\n private cdr: ChangeDetectorRef,\n private http: HttpClient,\n private sanitizer: DomSanitizer,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private socketService: SocketService,\n private conversationService: ConversationService, // private platform: Platform\n private translationService: TranslationService,\n private voiceAgentService: VoiceAgentService,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private injector: Injector\n ) {\n this.chatMain = new ElementRef(null);\n\n // if (this.platform.IOS) {\n // this.isIOSDevice = true;\n // }\n }\n getTranslation(key: string) {\n return this.translationService.getTranslation(key);\n }\n ngOnChanges(changes: SimpleChanges): void {\n // Handle eventId changes to update translation service\n if (changes.eventId && changes.eventId.currentValue) {\n this.translationService.setEventId(changes.eventId.currentValue);\n }\n\n if (changes.s27Token) {\n if (changes.s27Token.currentValue != changes.s27Token.previousValue) {\n this.s27Token = changes.s27Token.currentValue;\n\n console.log('isFetchDataFor: ', this.isFetchDataFor);\n console.log('msg: ', this.msg);\n console.log('chat: ', this.chat);\n if (this.is401) {\n if (this.isFetchDataFor) {\n this.fetchDataFor(this.msg, this.chat);\n } else {\n this.fetchData(this.msg);\n }\n }\n }\n }\n\n // Do NOT call initializeSocket() here. Socket.IO is for chat only; we defer\n // until the user actually uses chat (send message or start new conversation)\n // so that voice-only usage never triggers Socket.IO (avoids v2/v3 mismatch error).\n if (changes.orgId && changes.orgId.currentValue != changes.orgId.previousValue) {\n this.chatSocketInitialized = false;\n }\n }\n\n domainAuthorityValue: any = 'prod-lite';\n\n ngOnInit(): void {\n // Set the eventId in translation service to get the correct language from localStorage\n if (this.eventId) {\n this.translationService.setEventId(this.eventId);\n }\n\n this.environment = this.isDev ? dev_environment : prod_environment;\n\n const domain = window.location.hostname;\n\n // Determine the header value based on the domain\n\n if (domain.includes('pre-app.social27.com')) {\n this.domainAuthorityValue = 'pre-prod-lite';\n } else if (domain.includes('app.social27.com')) {\n this.domainAuthorityValue = 'prod-lite';\n } else if (domain.includes('hivegpt.io')) {\n this.domainAuthorityValue = 'hivegpt';\n }\n\n // this.fetchMyConnections().subscribe();\n // this.fetchPendingRequests().subscribe();\n\n this.changeTemperature(this.temperature);\n this.fetchBotConfig().subscribe(\n (res) => {\n this.cdr.markForCheck();\n\n this.fetchChatHistory().subscribe(\n (response) => {\n this.loading = false;\n this.mapChatHistory(response);\n this.cdr.markForCheck();\n },\n (err) => {\n console.error('Error fetching chat history:', err);\n }\n );\n },\n (err) => {\n console.error('Error fetching chat history:', err);\n }\n );\n // this.fetchAgents();\n // this.fetchEditorContent();\n this.cdr.markForCheck();\n // this.initializeSocket();\n this.botService\n .fetchSpeechAuthorizationToken(\n this.botId,\n this.apiKey,\n this.domainAuthorityValue\n )\n .subscribe((token) => {\n this.authorizationToken = token;\n this.initializeSpeechRecognizer(token);\n });\n }\n\n private eventSubscription: Subscription;\n /** True after Socket has been initialized for chat (avoids connecting on voice-only usage). */\n private chatSocketInitialized = false;\n\n /**\n * Call before chat actions so Socket.IO is used only for chat, not for voice.\n * Voice agent uses native WebSocket + Daily.js only; Socket.IO must not run during voice flow.\n */\n private ensureChatSocket(): void {\n if (this.chatSocketInitialized || !this.orgId) return;\n this.chatSocketInitialized = true;\n this.initializeSocket();\n }\n\n initializeSocket() {\n try {\n this.socketService.disconnectSocketConnection();\n } catch (error) {}\n setTimeout(() => {\n this.socketService.connectSocketConnection();\n setTimeout(() => {\n console.log('YES INIT');\n const conversation_id = this.conversationService.getKey(this.botId);\n\n this.socketService.registerUserSpecificHiveSocket(\n this.botId,\n conversation_id,\n this.orgId\n );\n setTimeout(() => {\n this.listenSockets();\n }, 300);\n }, 200);\n }, 300);\n }\n\n subscriptionNew: any;\n socketData: any;\n\n listenSockets() {\n if (this.eventSubscription) {\n this.eventSubscription.unsubscribe();\n }\n console.log('Listen Socket');\n this.eventSubscription = this.conversationService\n .getUserSpecificNotification()\n .subscribe(\n (res) => {\n console.log('Listen Socket response');\n console.log(res);\n // Check if OtherFields exists in the response\n if (res?.m?.OtherFields?.workflow_id) {\n const {\n percentage,\n output,\n action_name,\n current_action_name,\n workflow_execution_id,\n time_stamp,\n } = res?.m?.OtherFields;\n\n this.currentWorkflowActionProgress = percentage;\n this.currentWorkflowAction = action_name;\n\n const actionIndex = this.workflowExecutionDetails.Actions.findIndex(\n (a) => a.Name == current_action_name\n );\n\n if (actionIndex !== -1) {\n this.workflowExecutionDetails.Actions[actionIndex]['Output'] =\n output;\n this.workflowExecutionDetails.Actions[actionIndex][\n 'InsertTimeStamp'\n ] = formatTimeStamps(this.timezone, time_stamp);\n } else {\n console.error(`Action with name ${action_name} not found`);\n }\n\n this.currentWorkflowExecutionDetails =\n this.workflowExecutionDetails;\n\n if (this.currentWorkflowActionProgress == 100) {\n this.chatLog[this.chatLog.length - 1]['WorkflowExecutionId'] =\n workflow_execution_id;\n this.isChatingWithAi = false;\n this.executingWorkflow = false;\n this.focusOnTextarea();\n }\n\n this.cdr.detectChanges();\n } else if (res?.m?.OtherFields) {\n const {\n conversation_id,\n bot_id,\n message_id,\n answer,\n web_results,\n search_results,\n graphs,\n execution_graphs,\n suggestions,\n } = res?.m?.OtherFields;\n console.log('message_id1');\n console.log(res?.m?.OtherFields);\n var currentChatMessage = this.chatLog.find(\n (p) => p._id == message_id\n );\n console.log(this.chatLog);\n if (!currentChatMessage) {\n console.log('message_id2');\n console.log(message_id);\n currentChatMessage = {\n _id: message_id,\n type: 'ai',\n time: formatNow(this.timezone),\n };\n\n this.chatLog.push(currentChatMessage);\n\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n console.log('message_id3');\n console.log(message_id);\n this.cdr.detectChanges();\n }\n\n // Handle the fields based on their presence\n if (search_results && Array.isArray(search_results)) {\n console.log('Online Search Terms:', search_results);\n currentChatMessage.searchTerms = search_results;\n this.cdr.detectChanges();\n }\n\n if (web_results && Array.isArray(web_results)) {\n console.log('Web Results:', web_results);\n currentChatMessage.sourcesList = web_results;\n currentChatMessage.displayedSources = web_results?.slice(0, 3); // First 3 cards\n currentChatMessage.remainingSources = web_results?.slice(3); // Remaining items\n this.cdr.detectChanges();\n }\n\n if (answer) {\n this.isChatingWithAi = false;\n console.log('Answer:', answer);\n\n currentChatMessage.message =\n this.processMessageForDisplay(answer);\n this.cdr.detectChanges();\n this.scrollToBottom();\n this.focusOnTextarea();\n }\n\n if (graphs && Array.isArray(graphs)) {\n console.log('Graphs:', graphs);\n currentChatMessage.graphs = graphs;\n this.cdr.detectChanges();\n }\n\n if (execution_graphs && Array.isArray(execution_graphs)) {\n console.log('Execution Graphs:', execution_graphs);\n currentChatMessage.executionGraphs = execution_graphs;\n this.cdr.detectChanges();\n }\n\n if (suggestions && Array.isArray(suggestions)) {\n console.log('suggestions:', suggestions);\n currentChatMessage.relatedListItems = suggestions;\n this.cdr.detectChanges();\n // Process online search terms as needed\n }\n\n // Add any other fields and their processing here\n } else {\n console.warn('OtherFields is missing in the response');\n }\n },\n (err) => {\n this.eventSubscription.unsubscribe();\n console.error('Error in fetching data from socket', err);\n }\n );\n }\n\n initializeSocketAndListen() {}\n handleEvent(data: any, type: string) {\n switch (type) {\n case 'webresult':\n break;\n case 'answer':\n break;\n case 'graph':\n break;\n default:\n break;\n }\n }\n ngOnDestroy(): void {\n if (this.eventSubscription) {\n this.eventSubscription.unsubscribe();\n }\n this.voiceTranscriptSubscriptions.forEach(sub => sub.unsubscribe());\n this.socketService.disconnectSocketConnection();\n //this.socketService.close();\n }\n changeTemperature(newTemperature: number) {\n if (this.loading) return;\n this.temperature = newTemperature;\n const wrapper = document.querySelector('.hivegpt-chat-wrapper');\n // Remove existing theme classes from body\n wrapper?.classList.remove('creative', 'balanced', 'precise');\n\n switch (newTemperature) {\n case 0:\n wrapper?.classList.add('creative');\n break;\n case 1:\n wrapper?.classList.add('balanced');\n break;\n case 2:\n wrapper?.classList.add('precise');\n break;\n default:\n break;\n }\n }\n\n onStartAgain() {\n if (this.loading) return;\n this.showStartAgain = false;\n this.chatLog = [];\n this.chatLog.push({\n type: 'ai',\n message: this.greetingMsg,\n\n time: formatNow(this.timezone),\n });\n this.archieveMessages().subscribe();\n }\n\n archieveMessages() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n const url = `${this.environment.BASE_URL}/bot/clear-history/${this.botId}/${this.userId}`;\n return this.http.post(url, { headers }).pipe(\n switchMap((res: any) => {\n return of(res);\n }),\n catchError((error) => {\n return of(null);\n })\n );\n }\n\n triggerSupport() {\n this.openSupport.emit();\n }\n fetchBotConfig() {\n this.loading = true;\n const headers = new HttpHeaders({\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n const url = `${this.environment.BASE_URL}/bots?bot_id=${this.botId}`;\n return this.http.get(url, { headers }).pipe(\n switchMap((res: any) => {\n this.botName = this.getTranslation(res.Name);\n this.botIcon = res.Icon;\n this.botSkills = res?.Skills;\n this.greetingMsg = res.Greeting;\n\n this.thumbsDownMessages = res?.NegativeResponses?.length\n ? res.NegativeResponses\n : [\n this.getTranslation(\n `We are sorry we've not been able to answer your question`\n ),\n ];\n this.quickPrompts = res.QuickPrompts;\n this.cdr.markForCheck();\n this.loading = false;\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n this.loading = false;\n return of(null);\n })\n );\n }\n\n fetchChatHistory(): Observable<any> {\n this.loading = true;\n\n this.conversationKey = this.conversationService.getKey(this.botId, false);\n this.conSessionKey = this.conversationService.getSessionKey(\n this.botId,\n false\n );\n const url = `${this.environment.BASE_URL}/conversations/${this.conversationKey}?session_id=${this.conSessionKey}`;\n const headers = new HttpHeaders({\n accept: 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n\n return this.http\n .get(url, { headers })\n .pipe(catchError(this.handleError<any>('fetchConversation')));\n }\n\n private handleError<T>(operation = 'operation', result?: T) {\n return (error: any): Observable<T> => {\n console.error(`${operation} failed: ${error.message}`);\n return of(result as T);\n };\n }\n // fetchChatHistory() {\n // this.loading = true;\n // const headers = new HttpHeaders({\n // 'Content-Type': 'application/json',\n // 'x-api-key': this.apiKey,\n // });\n // return this.http\n // .get(`${this.environment.BASE_URL}/conversations/${this.conversationKey}`, { headers })\n // .pipe(\n // switchMap((res: any) => {\n // this.loading = false;\n // return of(res);\n // }),\n // catchError((error: any) => {\n // console.error('Error fetching chat history: ', error);\n // this.loading = false;\n // return of(null);\n // })\n // );\n // }\n\n mapChatHistory(chats: any) {\n this.chatLog.push({\n type: 'ai',\n message: this.greetingMsg,\n time: formatNow(this.timezone),\n });\n if (chats && chats?.Messages?.length) {\n chats?.Messages.forEach((chat: any) => {\n if (chat.Type == 'user') {\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(chat.Text),\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n copied: false,\n isCollapsedTrue: false,\n WorkflowExecutionId: chat.WorkflowExecutionId,\n _id: chat._id,\n });\n }\n if (chat.Type == 'ai') {\n var sourcesList = chat.WebLinks || [];\n var displayedSources = chat.WebLinks.slice(0, 3); // First 3 cards\n var remainingSources = chat.WebLinks.slice(3); // Remaining items\n\n this.chatLog.push({\n type: 'ai',\n message: this.processMessageForDisplay(chat.Text),\n executionGraphs: chat.ExecutionGraphs,\n graphs: chat.Graphs,\n searchTerms: chat.SearchTerms,\n sourcesList: sourcesList,\n displayedSources: displayedSources,\n remainingSources: remainingSources,\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n copied: false,\n isCollapsedTrue: false,\n _id: chat._id,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n }\n });\n this.showStartAgain = true;\n }\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n processMessage(message: string): SafeHtml {\n if (!message || !(message?.length > 0)) {\n return '';\n }\n\n // console.log('here is my message')\n // console.log(message);\n\n message = message.trim();\n\n const markdownLinkRegex = /\\[([^[]+)]\\(([^)]+)\\)/g;\n const urlRegex = /(?<!href=\")\\bhttps?:\\/\\/\\S+(?<![.,])/gi;\n\n if (markdownLinkRegex.test(message)) {\n const html = message.replace(\n markdownLinkRegex,\n '<a href=\"$2\" target=\"_blank\">$1</a>'\n );\n //console.log('Sanitized message: ', message);\n return this.sanitizeHtml(html);\n }\n\n if (urlRegex.test(message)) {\n const html = message.replace(\n urlRegex,\n '<a href=\"$&\" target=\"_blank\">$&</a>'\n );\n // console.log('Sanitized message: ', message);\n return this.sanitizeHtml(html);\n }\n\n message = message.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n\n message = message.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n // Convert Markdown headers to HTML headers\n message = message.replace(/^(#{1,6})\\s+(.*)$/gm, (match, hashes, text) => {\n const level = hashes.length;\n return `<h${level}>${text}</h${level}>`;\n });\n\n this.cdr.markForCheck();\n const sanitizedMessage = this.sanitizeHtml(message);\n return sanitizedMessage;\n }\n\n ngAfterViewChecked() {\n const feedbackLinks =\n this.elementRef.nativeElement.querySelectorAll('.feedback-link');\n feedbackLinks.forEach((link: any) => {\n link.addEventListener(\n 'click',\n this.onFeedbackClick.bind(this, 'zendesk')\n );\n });\n // if (this.elementRef.nativeElement.querySelector('.feedback-link')) {\n // this.elementRef.nativeElement\n // .querySelector('.feedback-link')\n // .addEventListener('click', this.onFeedbackClick.bind(this, 'zendesk'));\n // }\n }\n\n sanitizeHtml(html: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n\n onFeedbackClick(value: string) {\n this.feedbackEvent.emit(value);\n }\n\n onClose() {\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n this.onCloseEvent.emit();\n }\n\n sendMessageWithTile(prompt: string) {\n this.input = prompt;\n this.fetchData();\n this.scrollToBottom();\n }\n isChatingWithAi = false;\n fetchData(msg = null) {\n this.input = msg || this.input?.trim();\n this.msg = this.input;\n if (!this.input || this.loading) {\n return;\n }\n this.ensureChatSocket();\n\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(this.input),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n\n try {\n const textarea = this.myInput.nativeElement;\n textarea.style.height = 'hidden'; // Reset the height\n textarea.style.height = `62px`;\n } catch (error) {}\n this.cdr.markForCheck();\n\n this.aiResponse = '';\n this.isChatingWithAi = true;\n\n this.makeAskRequest(this.input, this.agents, this.conversationKey);\n }\n fetchDataFor(msg, chat) {\n const inputMsg = msg?.trim();\n if (!inputMsg || this.loading) {\n return;\n }\n this.ensureChatSocket();\n try {\n chat.relatedListItems = [];\n this.cdr.detectChanges();\n } catch (error) {}\n\n this.scrollToBottom();\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(inputMsg),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n\n this.cdr.markForCheck();\n\n this.aiResponse = '';\n this.isChatingWithAi = true;\n\n this.makeAskRequest(inputMsg, this.agents, this.conversationKey, msg, chat);\n }\n fetchSmallTalk() {\n this.loading = true;\n this.cdr.markForCheck();\n\n const url = `${this.environment.BASE_URL}/bot/small-talk/${this.botId}/${this.userId}`;\n\n this.http\n .get<{ smallTalk: string }>(url, {\n headers: {\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n },\n })\n .pipe(\n catchError((error) => {\n console.error('Error while fetching small talk:', error);\n\n return of(null);\n })\n )\n .subscribe((response) => {\n this.loading = false;\n this.cdr.markForCheck();\n\n if (!response) {\n return;\n }\n\n if (response && response.smallTalk) {\n this.chatLog.push({\n type: 'ai',\n message: this.processMessage(response.smallTalk),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 2;\n // this.scrollToBottom();\n this.cdr.markForCheck();\n }\n });\n }\n\n readAllChunks = (stream: any) => {\n const reader = stream.getReader();\n const allSuggestions: string[] = [];\n\n reader.closed.catch((err: any) => {\n if (err) {\n console.error('Error reading stream: ', err);\n }\n\n this.isChatingWithAi = false;\n this.scrollToBottom();\n return;\n });\n\n return new ReadableStream({\n start: (controller) => {\n return this.pump(controller, reader, allSuggestions);\n },\n });\n };\n\n pump(controller: any, reader: any, allSuggestions: string[]) {\n reader.read().then(({ done, value }: any) => {\n const lastItem = this.chatLog[this.chatLog.length - 1];\n\n if (done) {\n lastItem.message = this.processMessageForDisplay(lastItem.message);\n this.chatLog.pop();\n this.chatLog.push(lastItem);\n if (allSuggestions?.length) {\n this.chatLog.push({\n type: 'suggestions',\n suggestions: allSuggestions,\n });\n }\n\n controller.close();\n this.isChatingWithAi = false;\n // this.scrollToBottom();\n this.cdr.markForCheck();\n this.showStartAgain = true;\n\n // setTimeout(() => {\n // this.fetchSmallTalk();\n // },1000)\n return;\n }\n\n let decodedChunk = this.decoder.decode(value, { stream: true });\n this.aiResponse += decodedChunk;\n if (lastItem.type === 'ai') {\n const suggestionsMatch = this.aiResponse.match(/<sug>(.*?)<\\/sug>/g);\n if (suggestionsMatch) {\n suggestionsMatch.forEach((match) => {\n this.aiResponse = this.aiResponse.replace(match, '');\n allSuggestions.push(match?.replace(/<\\/?sug>/g, ''));\n });\n }\n\n lastItem.message = this.aiResponse;\n this.cdr.markForCheck();\n } else {\n this.isChatingWithAi = false;\n\n let aiFormattedData: any;\n\n try {\n console.log('parsing json ');\n aiFormattedData = JSON.parse(JSON.parse(this.aiResponse));\n } catch (e) {\n try {\n console.log('parsing json 2');\n aiFormattedData = JSON.parse(this.aiResponse);\n } catch (e) {}\n }\n\n console.log('parsing json done');\n\n if (aiFormattedData && aiFormattedData?.section_id?.length > 0) {\n if (\n aiFormattedData.section_id == 'company_search' ||\n aiFormattedData.section_id == 'user_search' ||\n aiFormattedData.section_id == 'industry_company_search'\n ) {\n this.fetchMyConnections().subscribe();\n this.fetchPendingRequests().subscribe();\n }\n\n if (aiFormattedData.section_id == this.myUpcomingSessionAction) {\n var speakerIds = [];\n aiFormattedData.content?.forEach((session) => {\n speakerIds = [...speakerIds, ...session.speakers];\n });\n\n if (speakerIds?.length > 0) this.getSpeakersByStaffIds(speakerIds);\n }\n\n if (\n aiFormattedData.section_id == this.addToMyAgendaAction &&\n aiFormattedData.content?.length > 0\n ) {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n sessionIds: aiFormattedData.content,\n });\n }\n\n if (aiFormattedData.section_id == this.connectOrFollowAction) {\n let usersLen = aiFormattedData.content?.length;\n if (usersLen > 1) {\n this.openPage.next({\n sectionId: 'open_networking_drawer',\n search: aiFormattedData.content,\n });\n } else if (usersLen == 1) {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n connetUserIds: [aiFormattedData.content[0].userId],\n });\n }\n }\n\n if (aiFormattedData.is_open_page == 'true') {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n search: aiFormattedData.content,\n });\n\n if (this.isMobileBrowser()) {\n aiFormattedData.message +=\n '\\n\\n' + '<a id=\"closeBotNow\">Click Here</a> to see results.';\n }\n }\n\n this.chatLog.push({\n type: 'ai',\n message: aiFormattedData.message,\n action: aiFormattedData,\n time: formatNow(this.timezone),\n });\n\n if (this.isMobileBrowser()) {\n setTimeout(() => {\n this.addCloseBotClickEvent();\n }, 500);\n }\n\n this.aiResponse = '';\n } else {\n this.chatLog.push({\n type: 'ai',\n message: this.aiResponse,\n time: formatNow(this.timezone),\n });\n }\n\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n this.cdr.markForCheck();\n }\n\n this.scrollToBottom();\n\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n this.pump(controller, reader, allSuggestions);\n });\n }\n\n submitFeedback(flag: boolean, message) {\n console.log(message);\n\n this.feedbackDone = true;\n this.showFeedBackIconsIndex = null;\n const conversation_id = this.conversationService.getKey(this.botId);\n const url = `${this.environment.AGENTS_API}/Conversation/coPilot/${this.botId}/conversation/${conversation_id}/helpful-response`;\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n apiKey: 'Conversation_WIz/qAm+EEmfOkFaUA/weA==',\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n },\n body: JSON.stringify({ messageId: message._id, isHelpful: flag }),\n }).then(() => {\n if (flag) {\n this.chatLog.push({\n type: 'ai',\n message:\n this.thumbsUpMessage ||\n this.getTranslation('May I assist you with anything else'),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n\n this.scrollToBottom();\n this.cdr.markForCheck();\n this.feedbackDone = false;\n this.showFeedBackIconsIndex = null;\n return;\n }\n\n this.chatLog.push({\n type: 'ai',\n message: this.processMessage(\n this.thumbsDownMessages[this.thumbsDownMsgIndex]\n ),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n this.thumbsDownMsgIndex =\n (this.thumbsDownMsgIndex + 1) % this.thumbsDownMessages.length;\n this.scrollToBottom();\n this.cdr.markForCheck();\n setTimeout(() => {\n const supportLink = document.getElementById('supportLink88');\n if (supportLink) {\n supportLink.addEventListener('click', this.triggerSupport.bind(this));\n }\n }, 200);\n this.feedbackDone = false;\n this.showFeedBackIconsIndex = null;\n });\n }\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' && !event.shiftKey) {\n // Prevent default behavior (new line)\n event.preventDefault();\n // Call your submit function\n this.handleSubmit(event);\n }\n }\n handleSubmit(event) {\n this.fetchData();\n this.scrollToBottom();\n }\n\n handleUpClick(idx: any) {\n if (this.feedbackDone) {\n return;\n }\n\n this.submitFeedback(true, this.chatLog[idx]);\n this.chatLog[idx].liked = !this.chatLog[idx].liked;\n\n if (this.chatLog[idx].unliked) {\n this.chatLog[idx].unliked = !this.chatLog[idx].unliked;\n }\n\n this.cdr.markForCheck();\n }\n\n handleDownClick(idx: any) {\n if (this.feedbackDone) return;\n this.submitFeedback(false, this.chatLog[idx]);\n this.chatLog[idx].unliked = !this.chatLog[idx].unliked;\n if (this.chatLog[idx].liked)\n this.chatLog[idx].liked = !this.chatLog[idx].liked;\n }\n // handleCopyClick(index: any) {\n // // Copy the message to the clipboard\n // const contentToCopy = this.chatLog[index].message;\n // console.log('contentToCopy');\n // console.log(contentToCopy);\n // navigator.clipboard.writeText(contentToCopy).then(() => {\n // // Indicate that the message was copied\n // this.chatLog[index].copied = true;\n // this.cdr.detectChanges();\n // // Reset the copied state after a delay\n // setTimeout(() => {\n // this.chatLog[index].copied = false;\n // this.cdr.detectChanges();\n // }, 2000); // Reset after 2 seconds\n // });\n // }\n copyText(id, index) {\n // Get the text element\n var textElement = document.getElementById(id);\n\n // Create a temporary textarea element to copy the text\n var tempTextArea = document.createElement('textarea');\n tempTextArea.value = textElement.innerText;\n\n // Append the textarea to the body (necessary for the execCommand to work)\n document.body.appendChild(tempTextArea);\n\n // Select the text inside the textarea\n tempTextArea.select();\n\n // Copy the text to the clipboard\n document.execCommand('copy');\n\n // Remove the temporary textarea\n document.body.removeChild(tempTextArea);\n\n // Optionally, you can alert the user or change the button text to indicate the copy was successful\n // alert('Text copied to clipboard!');\n\n this.chatLog[index].copied = true;\n this.cdr.detectChanges();\n // Reset the copied state after a delay\n setTimeout(() => {\n this.chatLog[index].copied = false;\n this.cdr.detectChanges();\n }, 2000); // Reset after 2 seconds\n }\n handleCopyClick(index: any) {\n // Copy the message to the clipboard\n const contentToCopy = this.chatLog[index].message;\n const resutlt = this.copyText('messageText_' + index, index);\n }\n\n sanitizeHTML(html: string): string {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n\n // Create a new document fragment to hold the simplified content\n const fragment = document.createDocumentFragment();\n\n // Append the children of the body of the parsed document to the fragment\n Array.from(doc.body.childNodes).forEach((node) => {\n fragment.appendChild(node.cloneNode(true));\n });\n\n // Create a new div element to hold the simplified HTML\n const simplifiedDiv = document.createElement('div');\n simplifiedDiv.appendChild(fragment);\n\n // Remove complex tags or attributes as needed\n // Example: remove scripts\n simplifiedDiv\n .querySelectorAll('script')\n .forEach((script) => script.remove());\n\n // Return the simplified HTML as a string\n return simplifiedDiv.innerHTML;\n }\n\n currentMessageForEditor: any = '';\n currentIndexForEditor: any = -1;\n handleEditorClick(index: any) {\n if (this.currentIndexForEditor == -1) {\n this.currentIndexForEditor = index;\n this.currentMessageForEditor = this.sanitizeHTML(\n this.chatLog[index].message\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n 'SafeValue must use [property]=binding:',\n ''\n );\n\n this.cdr.detectChanges();\n } else {\n if (this.currentIndexForEditor == index) {\n this.currentMessageForEditor += this.sanitizeHTML(\n this.chatLog[index].message\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n 'SafeValue must use [property]=binding:',\n ''\n );\n this.cdr.detectChanges();\n } else {\n this.currentIndexForEditor = index;\n this.currentMessageForEditor = this.sanitizeHTML(\n this.chatLog[index].message\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n 'SafeValue must use [property]=binding:',\n ''\n );\n this.cdr.detectChanges();\n }\n }\n this.chatLog[index].isEditor = true;\n this.cdr.detectChanges();\n // Reset the copied state after a delay\n setTimeout(() => {\n this.chatLog[index].isEditor = false;\n this.cdr.detectChanges();\n }, 2000); // Reset after 2 seconds\n this.editorsDrawer.open();\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n this.cdr.detectChanges();\n }\n scrollToBottom() {\n let counter = 0;\n const interval = setInterval(() => {\n this.chatMain.nativeElement.scrollTop =\n this.chatMain.nativeElement.scrollHeight;\n if (counter++ > 5) clearInterval(interval);\n }, 5);\n }\n\n focusOnTextarea() {\n setTimeout(() => {\n if (this.myInput && this.myInput.nativeElement) {\n this.myInput.nativeElement.focus();\n }\n }, 100);\n }\n\n handleAction(action: any) {\n console.info('incoming action from the chatbot AI');\n console.info(action);\n\n if (action?.content) {\n }\n }\n\n ngAfterViewInit() {\n // Check if the drawer is initially open and apply overflow hidden to body if so\n if (this.drawer.opened) {\n this.setBodyOverflow();\n }\n\n // Listen to changes in the drawer being opened or closed\n this.drawer.openedChange.subscribe((opened: boolean) => {\n if (opened) {\n this.setBodyOverflow();\n } else {\n this.removeBodyOverflow();\n }\n });\n\n this.drawer.openedChange.subscribe((opened) => {\n if (opened) {\n setTimeout(() => {\n if (this.myInput && this.myInput.nativeElement) {\n this.myInput.nativeElement.focus(); // Focus on the textarea\n }\n });\n }\n });\n }\n\n private setBodyOverflow() {\n this.renderer.addClass(document.body, this.bodyOverflowClass);\n }\n\n private removeBodyOverflow() {\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n }\n\n getSpeakersByStaffIds(ids) {\n const url = `${this.environment.USERS_API}/events/${this.eventId}/users/get-by-staff-ids`;\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + 'your_token_here',\n },\n body: JSON.stringify(ids),\n })\n .then((response) => {\n if (response.ok) {\n return response.json(); // Parse the JSON body of the response\n } else {\n throw new Error('Network response was not ok.');\n }\n })\n .then((data) => {\n if (data?.length > 0) {\n data.forEach((speaker) => {\n this.speakers[speaker.id] = speaker;\n });\n\n this.cdr.markForCheck();\n }\n })\n .catch((err) => {\n console.error('Error fetching data:', err);\n this.loading = false;\n });\n }\n\n performSessionAction(sessionId, action) {\n this.sessionActions.next({\n sessionId,\n action,\n });\n }\n\n addCloseBotClickEvent() {\n const element = this.elementRef.nativeElement.querySelector('#closeBotNow');\n if (element) {\n this.renderer.listen(element, 'click', () => {\n this.closeBot.next();\n });\n }\n }\n\n isMobileBrowser() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n }\n\n connectToUser(userId) {\n this.connectWithUser.emit({\n connect: !this.canDisconnect(userId),\n userId,\n });\n\n setTimeout(() => {\n this.fetchMyConnections().subscribe((res) => {\n this.cdr.markForCheck();\n });\n this.fetchPendingRequests().subscribe((res) => {\n this.cdr.markForCheck();\n });\n }, 500);\n }\n\n scheduleMeetingWithUser(user) {\n this.scheduleMeeting.emit(user);\n }\n\n canConnect(userId) {\n return !(\n this.canDisconnect(userId) ||\n this.pendingRequests.find((a) => a == userId)\n );\n }\n\n canDisconnect(userId) {\n return this.myConnections.find((conn) => conn.userId == userId);\n }\n\n fetchPendingRequests() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: this.autogenKey,\n });\n return this.http\n .get(\n `${this.environment.USERS_API}/events/${this.eventId}/connection-requests/autogen/pending-sent-requests?userId=${this.userId}`,\n { headers }\n )\n .pipe(\n switchMap((res: any) => {\n this.pendingRequests = res;\n this.cdr.markForCheck();\n return of(res);\n }),\n catchError((error: any) => {\n console.error('Error fetching pending requests: ', error);\n return of(null);\n })\n );\n }\n\n fetchMyConnections() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: this.autogenKey,\n });\n return this.http\n .get(\n `${this.environment.USERS_API}/events/${this.eventId}/users-connections/autogen?userId=${this.userId}`,\n { headers }\n )\n .pipe(\n switchMap((res: any) => {\n this.myConnections = res;\n this.cdr.markForCheck();\n return of(res);\n }),\n catchError((error: any) => {\n console.error('Error fetching pending requests: ', error);\n return of(null);\n })\n );\n }\n\n isDropdownOpen: boolean = false;\n agents: any;\n selectedAgents = [];\n allSelected = false;\n // Toggle the dropdown visibility\n toggleDropdown() {\n if (!this.agents) this.fetchAgents();\n this.isDropdownOpen = !this.isDropdownOpen;\n this.cdr.detectChanges();\n }\n\n onSelectAll(event: Event): void {\n this.agents?.forEach((agent) => (agent.selected = false));\n this.cdr.detectChanges();\n }\n\n onAgentChange(agent: any): void {\n //agent.selected = !agent.selected;\n //console.log(agent);\n let agentFound = this.agents.filter((p) => p.id == agent.id);\n if (agentFound && agentFound.length > 0) {\n agentFound[0].selected = !agentFound[0].selected;\n this.cdr.detectChanges();\n }\n this.cdr.detectChanges();\n }\n\n areAllSelected(): boolean {\n return this.agents?.every((agent) => !agent.selected);\n }\n\n getDropdownHeaderText(): string {\n const selectedAgents = this.agents?.filter((agent) => agent.selected);\n if (!selectedAgents) {\n return 'All Agents';\n } else {\n if (selectedAgents && selectedAgents?.length === 0) {\n return 'All Agents';\n } else {\n return selectedAgents?.length > 1\n ? `${selectedAgents?.length} Agents Selected`\n : `${selectedAgents?.length} Agent Selected`;\n }\n }\n }\n fetchAgents_http() {\n this.loading = true;\n const url = `${this.environment.AGENTS_API}/CoPilot/${this.botId}/active-agents`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n });\n\n return this.http.post(url, {}, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n this.agents = res.map((agent) => ({\n ...agent,\n selected: false,\n }));\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n isDocInEditMode = false;\n documentContent: any;\n\n conversationId: any;\n isContentLoaded = false;\n\n fetchContent_http() {\n this.isDocInEditMode = false;\n this.isContentLoaded = false;\n console.log('API call function');\n this.loading = true;\n const conversation_id = this.conversationService.getKey(this.botId);\n this.conversationId = conversation_id;\n const url = `${this.environment.AGENTS_API}/ConversationDocuments?conversationId=${conversation_id}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n 'domain-authority': this.domainAuthorityValue,\n });\n\n return this.http.get(url, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n this.isDocInEditMode = true;\n this.documentContent = res;\n console.log('Get API callled success');\n this.isContentLoaded = true;\n console.log(res);\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config DJ: ', error);\n this.isDocInEditMode = false;\n this.isContentLoaded = true;\n\n if (error?.status == 404) {\n console.log('dash');\n this.isDocInEditMode = false;\n this.isContentLoaded = true;\n }\n return of(null);\n })\n );\n }\n\n fetchAgents() {\n this.fetchAgents_http().subscribe();\n }\n\n fetchEditorContent() {\n this.fetchContent_http().subscribe();\n }\n\n // events/${eventId}/users-connections\n processMessageForDisplay(markdown: string): SafeHtml {\n try {\n // Create a custom renderer to modify <a> tags\n const renderer = new marked.Renderer();\n\n // Customize anchor tags to include target=\"_blank\"\n renderer.link = (href: string, title: string, text: string) => {\n return `<a href=\"${href}\" title=\"${\n title || ''\n }\" target=\"_blank\">${text}</a>`;\n };\n\n // Parse the markdown content to HTML using marked with the custom renderer\n const markdownContent = marked.parse(markdown, { renderer: renderer });\n\n // Sanitize the parsed HTML using Angular's DomSanitizer\n const sanitizedHtml =\n this.sanitizer.bypassSecurityTrustHtml(markdownContent);\n\n // Return the safe HTML content for display\n return sanitizedHtml;\n } catch (error) {\n console.error('Error processing markdown:', error);\n return ''; // Return an empty string or handle the error appropriately\n }\n }\n\n prepareHtml(markdown: string): string {\n if (!markdown || !(markdown.length > 0)) {\n console.error('Input Markdown is null or empty');\n return '';\n }\n\n // Convert Markdown headers (### or ##) to <strong> for bold headings\n let html = markdown.replace(\n /^(#{1,6})\\s+(.*)$/gm,\n (match, hashes, text) => {\n const level = hashes.length;\n if (level === 3) {\n return `<h3><strong>${text}</strong></h3>`;\n } else if (level === 4) {\n return `<h4><strong>${text}</strong></h4>`;\n }\n return `<strong>${text}</strong>`;\n }\n );\n\n // Convert Markdown code blocks with language to preformatted HTML\n html = html.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (match, lang, code) => {\n const escapedCode = this.escapeHtml(code);\n const language = lang || 'plaintext';\n\n // Create a copy button for the code block\n return `\n <div class=\"code-container\">\n <button id=\"copy-button\" class=\"copy-button\" (click)=\"copyToClipboard('\\`${escapedCode}\\`')\">${this.getTranslation(\n 'Copy'\n )}</button>\n <pre class=\"code_block diff\"><code class=\"language-${language}\">${escapedCode}</code></pre>\n </div>`;\n });\n\n // Convert inline code (wrapped in `backticks`) to inline <code> tags\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\n\n // Convert Markdown bold to HTML <strong>\n html = html.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n\n // Convert numbered lists\n html = html.replace(/^\\d+\\.\\s+(.*)$/gm, '<li>$1</li>');\n\n // Convert bullet point lists\n html = html.replace(/^\\-\\s+(.*)$/gm, '<li>$1</li>');\n\n // Convert Markdown links to HTML links\n html = html.replace(\n /\\[([^\\]]+)]\\(([^)]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\">$1</a>'\n );\n\n // Convert new lines to <br> tags for paragraphs\n html = html.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n\n return html;\n }\n\n // Helper function to escape HTML characters for code blocks\n escapeHtml(code: string): string {\n return code\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n // Function to copy text to clipboard\n public copyToClipboard(text: string) {\n navigator.clipboard.writeText(text).then(\n () => {\n alert('Code copied to clipboard!');\n },\n (err) => {\n console.error('Could not copy text: ', err);\n }\n );\n }\n\n isCollapsed = false;\n isCollapsedForGraph = false;\n isCollapsedForFGraph = false;\n toggleCollapse() {\n this.isCollapsed = !this.isCollapsed;\n this.cdr.detectChanges();\n }\n\n toggleCollapseGraph() {\n this.isCollapsedForGraph = !this.isCollapsedForGraph;\n this.cdr.detectChanges();\n }\n toggleCollapseFGraph() {\n this.isCollapsedForFGraph = !this.isCollapsedForFGraph;\n this.cdr.detectChanges();\n }\n // [\n // {\n // \"title\": \"AI News January 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"Each month, we compile significant news, trends, and happenings in AI, providing detailed summaries with key points in bullet form for concise yet complete understanding.\",\n // \"link\": \"https://theaitrack.com/ai-news-january-2024/\"\n // },\n // {\n // \"title\": \"Top AI News, January 2024 - Everypixel Journal\",\n // \"desc\": \"In this monthly roundup, we spotlight the top AI news stories from January, including the OpenAI vs. The New York Times Lawsuit.\",\n // \"link\": \"https://journal.everypixel.com/top-ai-news-january-2024\"\n // },\n // {\n // \"title\": \"AI News July 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"This page features AI News for July 2024, highlighting significant events such as Canva acquiring Leonardo AI.\",\n // \"link\": \"https://theaitrack.com/ai-news-july-2024-in-depth-and-concise/\"\n // },\n // {\n // \"title\": \"January news roundup: What's new in the world of AI? - Pluralsight\",\n // \"desc\": \"OpenAI’s new GPT store, business-ready ChatGPT plans, and a predicted rise in AI-powered cybercrime.\",\n // \"link\": \"https://www.pluralsight.com/resources/blog/data/ai-this-month-january-2024\"\n // },\n // {\n // \"title\": \"AI News August 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"This page features AI News for August 2024, with highlights such as Nvidia delaying the “Blackwell” B200 AI chips delivery.\",\n // \"link\": \"https://theaitrack.com/ai-news-august-2024-in-depth-and-concise-duplicate/\"\n // }\n // ]\n dateTime = { now: new Date().toISOString() };\n // Extracts the domain from a URL\n getDomainName(url: string): string {\n try {\n const { hostname } = new URL(url);\n return hostname.replace(/^www\\./, ''); // Remove 'www.' if present\n } catch {\n return 'unknown';\n }\n }\n\n // Generates the favicon URL\n getFaviconUrl(url: string): string {\n const domain = this.getDomainName(url);\n return `https://www.google.com/s2/favicons?sz=128&domain=${domain}`;\n }\n currentSourcesList: any = [];\n onCardClick(sources): void {\n this.currentSourcesList = sources;\n this.cdr.detectChanges();\n this.sourcesDrawer.open();\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n }\n\n isShowEditorButton = true;\n\n openOuterEditor() {\n this.fetchEditorContent();\n this.editorsDrawer.open();\n this.isDrawerOpen = true;\n this.isShowEditorButton = false;\n this.cdr.detectChanges();\n\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n }\n\n onCloseEditor() {\n this.editorsDrawer.close();\n this.isDrawerOpen = false;\n this.isShowEditorButton = true;\n this.cdr.detectChanges(); // Trigger change detection if needed\n this.onDrawerClosed();\n }\n\n onCloseSource() {\n this.sourcesDrawer.close();\n this.isDrawerOpen = false;\n this.cdr.detectChanges(); // Trigger change detection if needed\n this.onDrawerClosed();\n }\n onDrawerClosed() {\n setTimeout(() => {\n this.isDrawerOpen = true;\n this.cdr.detectChanges(); // Trigger change detection if needed\n // Use ngClass to dynamically apply the class\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'block';\n }\n }, 800);\n }\n isDrawerOpen = true;\n\n toggleDrawer(todo) {\n this.isDrawerOpen = todo;\n this.cdr.detectChanges();\n this.updateButtonVisibility();\n }\n updateButtonVisibility() {\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = this.isDrawerOpen ? 'block' : 'none';\n }\n }\n openLinkInNewTab(link: string): void {\n window.open(link, '_blank');\n }\n adjustTextareaHeight(event: any): void {\n try {\n if (event.key === 'Enter' && !event.shiftKey) {\n // Prevents a new line from being added\n event.preventDefault();\n }\n } catch (error) {}\n const textarea = event.target as HTMLTextAreaElement;\n textarea.style.height = 'auto'; // Reset the height\n textarea.style.height = `${textarea.scrollHeight}px`; // Adjust height to match content\n // Ensure the height doesn't exceed the max-height set in CSS\n if (textarea.scrollHeight > 150) {\n textarea.style.height = `150px`; // Adjust height to match content\n textarea.style.overflowY = 'auto'; // Enable scrolling if content exceeds 400px\n } else {\n textarea.style.overflowY = 'hidden'; // Hide scrollbar if content is within limits\n }\n }\n\n toggleWorkflows(value = null) {\n if (!this.checkForCop29BotId()) {\n this.botService.getWorkflowsByOrgId(this.orgId).subscribe((res) => {\n this.orgWorkflows = res;\n this.isWorkflowOpen = value == null ? !this.isWorkflowOpen : value;\n\n if (!this.isWorkflowOpen) {\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n }\n\n this.cdr.detectChanges();\n });\n }\n }\n\n initializeForm() {\n // Create form controls dynamically based on selectedWorkflow.Trigger.InputSchema\n const formControls = {};\n if (this.selectedWorkflow?.Trigger?.InputSchema) {\n this.selectedWorkflow.Trigger.InputSchema.forEach((input) => {\n formControls[input.InputId] = [\n input.Value || '',\n input.Required ? Validators.required : null,\n ];\n });\n }\n\n // Initialize the form\n this.workflowForm = this.fb.group(formControls);\n }\n\n onWorkflowSelected(workflow) {\n this.selectedWorkflow = workflow;\n this.initializeForm();\n this.isWorkflowOpen = false;\n this.openWorkflowInput = true;\n }\n\n onWorkflowSubmit() {\n const container = document.getElementById('allChats');\n if (this.workflowForm.valid) {\n console.log(this.workflowForm.value);\n\n var input = this.prepareHtml(\n this.generateMarkdown(\n this.selectedWorkflow.Name,\n this.workflowForm.value\n )\n );\n\n // update last two chatLog entries, set showWorkflowExecutionLoader = false\n try {\n this.chatLog[this.chatLog.length - 1]['showWorkflowExecutionLoader'] =\n false;\n this.chatLog[this.chatLog.length - 2]['showWorkflowExecutionLoader'] =\n false;\n } catch (error) {}\n\n this.chatLog.push({\n type: 'user',\n message: input,\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n showWorkflowExecutionLoader: true,\n });\n\n console.log(input);\n\n this.currentWorkflowActionProgress = 0;\n this.currentWorkflowAction =\n 'Executing ' + this.selectedWorkflow.Actions[0].Name;\n this.isChatingWithAi = true;\n this.executingWorkflow = true;\n this.workflowExecutionDetails = {\n Actions: this.selectedWorkflow.Actions,\n Inputs: this.workflowForm.value,\n workflowInputs: this.workflowForm.value,\n WorkflowName: this.selectedWorkflow.Name,\n };\n this.currentWorkflowExecutionDetails = this.workflowExecutionDetails;\n this.scrollToBottom();\n\n this.cdr.detectChanges();\n\n // execute the ask endpoint with workflow input\n this.makeAskRequest(\n input,\n this.agents,\n this.conversationKey,\n '',\n null,\n this.selectedWorkflow['_id'],\n this.workflowForm.value\n );\n }\n }\n\n makeAskRequest(\n inputMsg: string,\n agents: any[],\n conversationId: string,\n msg?: any,\n chat?: any,\n workflowId?: string,\n workflow_inputs?: any\n ): void {\n var url = `${this.environment.BASE_URL}/ai/ask`;\n\n var body = {\n user_question: inputMsg,\n user_id: this.userId,\n bot_id: this.botId,\n message_id: this.conversationService.generateKey(),\n session_id: this.conSessionKey,\n agents: agents?.filter((p) => p.selected).map((p) => p.id) ?? [],\n conversation_id: conversationId,\n first_name: this.firstName,\n last_name: this.lastName,\n };\n\n if (workflowId) {\n body['workflow_id'] = workflowId;\n body['workflow_inputs'] = workflow_inputs;\n }\n\n const headers: any = {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + this.s27Token,\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n eventUrl: this.eventUrl,\n eventToken: this.eventToken,\n };\n\n if (this.workspaceToken) {\n headers['workspaceToken'] = this.workspaceToken;\n }\n\n fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(body),\n })\n .then((response) => {\n if (response.status === 401 || response.status === 403) {\n this.is401 = true;\n this.refreshToken.emit();\n\n // If `msg` and `chat` exist, handle them\n if (msg && chat) {\n this.msg = msg;\n this.chat = chat;\n this.isFetchDataFor = true;\n }\n } else {\n this.is401 = false;\n }\n return response.json();\n })\n .then((data) => {\n console.log(data);\n // Additional response handling if needed\n })\n .catch((err) => {\n console.error('Error: ', err);\n this.isChatingWithAi = false;\n });\n\n this.input = '';\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n this.isWorkflowOpen = false;\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n makeAskRequestold(\n inputMsg: string,\n agents: any[],\n conversationId: string,\n msg?: any,\n chat?: any,\n workflowId?: string,\n workflow_inputs?: any\n ): void {\n const url = `${this.environment.BASE_URL}/ai/ask`;\n\n const body: any = {\n user_question: inputMsg,\n user_id: this.userId,\n bot_id: this.botId,\n message_id: this.conversationService.generateKey(),\n agents: agents?.filter((p) => p.selected).map((p) => p.id) ?? [],\n conversation_id: conversationId,\n first_name: this.firstName,\n last_name: this.lastName,\n };\n\n if (workflowId) {\n body['workflow_id'] = workflowId;\n body['workflow_inputs'] = workflow_inputs;\n }\n\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n\n this.http.post(url, body, { headers }).subscribe({\n next: (data) => {\n console.log(data);\n // Additional response handling if needed\n },\n error: (err) => {\n console.error('Error: ', err);\n this.isChatingWithAi = false;\n },\n });\n\n this.input = '';\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n this.isWorkflowOpen = false;\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n generateMarkdown(title, obj) {\n // Initialize markdown with the title\n let markdown = `## ${title}\\n`;\n\n // Loop through the object and append the field names and values\n for (const [key, value] of Object.entries(obj)) {\n var key_label =\n this.selectedWorkflow.Trigger.InputSchema.find(\n (input) => input.InputId === key\n )?.Label || key;\n markdown += `- **${key_label}**: ${value}\\n`;\n }\n\n return markdown;\n }\n\n showWorkflowHistoryDetails(workflow_id) {\n if (!workflow_id) {\n this.workflowExecutionDetails = this.currentWorkflowExecutionDetails;\n this.showWorkflowExecutionDetails = true;\n this.cdr.detectChanges();\n return;\n }\n\n this.botService.getWorkflowExecutionById(workflow_id).subscribe((res) => {\n if (res && res.Actions && Array.isArray(res.Actions)) {\n res.Actions = res.Actions.map((action) => {\n if (action.InsertTimeStamp) {\n action.InsertTimeStamp = formatTimeStamps(\n this.timezone,\n action.InsertTimeStamp\n );\n }\n return action;\n });\n }\n\n res.InsertTimeStamp = formatTimeStamps(\n this.timezone,\n res.InsertTimeStamp\n );\n this.workflowExecutionDetails = res;\n this.showWorkflowExecutionDetails = true;\n this.cdr.detectChanges();\n });\n }\n\n closeModal() {\n this.showWorkflowExecutionDetails = false;\n }\n\n objectToArray(obj: any): any[] {\n return Object.keys(obj).map((key) => ({ key, value: obj[key] }));\n }\n\n startNewConversation() {\n this.conversationKey = this.conversationService.getKey(this.botId, true);\n this.chatLog = [this.chatLog[0]];\n this.isChatingWithAi = false;\n this.chatSocketInitialized = false;\n setTimeout(() => {\n this.ensureChatSocket();\n }, 200);\n this.scrollToBottom();\n this.cdr.detectChanges();\n }\n\n initializeSpeechRecognizer(token: string) {\n this.speechConfig = SpeechSDK.SpeechConfig.fromAuthorizationToken(\n token,\n this.region\n );\n const audioConfig = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();\n this.recognizer = new SpeechSDK.SpeechRecognizer(\n this.speechConfig,\n audioConfig\n );\n\n this.recognizer.recognizing = (s, e) => {\n if (e.result.reason === SpeechSDK.ResultReason.RecognizingSpeech) {\n this.input = e.result.text;\n console.log(`Recognizing: ${e.result.text}`);\n this.cdr.markForCheck();\n }\n };\n\n this.recognizer.recognized = (s, e) => {\n if (e.result.reason === SpeechSDK.ResultReason.RecognizedSpeech) {\n this.input = e.result.text;\n console.log(`Recognized: ${e.result.text}`);\n this.toggleRecording();\n this.cdr.markForCheck();\n }\n };\n\n this.recognizer.canceled = (s, e) => {\n console.error('Canceled: ', e.errorDetails);\n };\n\n this.recognizer.sessionStopped = (s, e) => {\n console.log('Session stopped.');\n this.recognizer.stopContinuousRecognitionAsync();\n this.fetchData();\n };\n }\n\n toggleRecording() {\n this.isRecording = !this.isRecording;\n\n if (this.isRecording) {\n this.startRecognition();\n } else {\n this.stopRecognition();\n }\n }\n\n startRecognition() {\n this.recognizer.startContinuousRecognitionAsync();\n }\n\n stopRecognition() {\n this.recognizer.stopContinuousRecognitionAsync();\n }\n\n checkForCop29BotId() {\n return (\n this.botId == '66fa3f276c5d71e2717bfea8' ||\n this.botId == '671633545652dd78efec848d'\n );\n }\n\n getLatestTime(time): string {\n if (time) {\n return time;\n }\n return new Date().toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n }); // returns current time in 'shortTime' format\n }\n\n /** Used by the voice modal when opened from this drawer. */\n voiceModalConversationId: string = '';\n\n openVoiceModal(): void {\n const conversationId = this.conversationKey ?? this.conversationService.getKey(this.botId, false) ?? '';\n this.voiceModalConversationId = conversationId;\n this.setupVoiceTranscripts();\n\n // Close existing overlay if any\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n\n const config: VoiceModalConfig = {\n apiUrl: this.environment?.BASE_URL ?? '',\n token: this.s27Token ?? '',\n botId: this.botId ?? '',\n conversationId,\n apiKey: this.apiKey ?? '',\n eventToken: this.eventToken ?? '',\n eventUrl: this.eventUrl ?? '',\n domainAuthority: this.domainAuthorityValue ?? 'prod-lite',\n agentName: this.botName || 'AI Assistant',\n agentRole: this.botSkills || 'AI Agent Specialist',\n agentAvatar: this.botIcon,\n };\n\n const closeCallback = () => {\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n this.closeVoiceModal();\n };\n\n const injector = Injector.create([\n { provide: VOICE_MODAL_CONFIG, useValue: config },\n { provide: VOICE_MODAL_CLOSE_CALLBACK, useValue: closeCallback },\n ], this.injector);\n\n const overlayRef = this.overlay.create({\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n positionStrategy: this.overlay.position().global().bottom('0').right('0').left('0').top('0'),\n });\n\n const portal = new ComponentPortal(\n VoiceAgentModalComponent,\n this.viewContainerRef,\n injector\n );\n overlayRef.attach(portal);\n this.voiceModalOverlayRef = overlayRef;\n this.cdr.markForCheck();\n }\n\n closeVoiceModal(): void {\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n this.isVoiceModalOpen = false;\n this.voiceAgentService.disconnect();\n this.cdr.markForCheck();\n }\n\n private setupVoiceTranscripts(): void {\n // Clear existing subscriptions\n this.voiceTranscriptSubscriptions.forEach(sub => sub.unsubscribe());\n this.voiceTranscriptSubscriptions = [];\n\n // Subscribe to user transcripts\n const userSub = this.voiceAgentService.userTranscript$.subscribe(transcript => {\n if (transcript.final && transcript.text.trim()) {\n // Add user message to chat\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(transcript.text),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n this.cdr.markForCheck();\n this.scrollToBottom();\n }\n });\n\n // Subscribe to bot transcripts\n const botSub = this.voiceAgentService.botTranscript$.subscribe(transcript => {\n if (transcript && transcript.trim()) {\n // Check if last message is from bot, update it, otherwise add new\n const lastMessage = this.chatLog[this.chatLog.length - 1];\n if (lastMessage && lastMessage.type === 'ai') {\n lastMessage.message = this.processMessageForDisplay(transcript);\n } else {\n this.chatLog.push({\n type: 'ai',\n message: this.processMessageForDisplay(transcript),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n }\n this.cdr.markForCheck();\n this.scrollToBottom();\n }\n });\n\n this.voiceTranscriptSubscriptions.push(userSub, botSub);\n }\n}\n\nexport { VoiceModalConfig } from '../voice-agent/voice-modal-tokens';\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'hivegpt-chatbot',\n templateUrl: './chatbot.component.html',\n styleUrls: ['./chatbot.component.scss'],\n})\nexport class ChatBotComponent {\n @Input() userId!: string;\n @Input() apiKey!: string;\n @Input() botName!: string;\n @Input() botSkills!: string;\n @Input() botId!: string;\n @Input() closeButtonColor!: string;\n @Input() gradientColors!: string[];\n @Input() greeting!: string;\n @Input() sendButtonColor!: string;\n @Input() useOpenAi!: boolean;\n @Input() showClose!: boolean;\n @Input() bgGradient!: string[];\n @Input() sendButtonTextColor!: string;\n @Input() fullView!: boolean;\n @Input() bgBubbleAi!: string;\n @Input() bgBubbleUser!: string;\n @Input() closeButtonbgColor!: string;\n @Input() messageTextColorAi!: string;\n @Input() messageTextColorUser!: string;\n @Input() dateTimeColor!: string;\n @Input() dateTextColor!: string;\n @Input() formFieldBgColor!: string;\n @Input() formFieldTextColor!: string;\n @Input() thumbsUpMessage!: string;\n @Input() thumbsDownMessages!: string[];\n @Input() timezone!: string;\n @Input() eventName!: string;\n @Input() credentials!: [];\n @Input() unknownResponses!: [];\n @Input() rules!: string;\n @Input() eventId!: string;\n @Input() s27Token!: string;\n @Input() workspaceToken!: string;\n @Input() isDev!: boolean;\n visible = false;\n\n toggle() {\n this.visible = !this.visible;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VoiceAgentModalComponent } from './components/voice-agent-modal/voice-agent-modal.component';\nimport { VoiceAgentService } from './services/voice-agent.service';\nimport { AudioAnalyzerService } from './services/audio-analyzer.service';\nimport { WebSocketVoiceClientService } from './services/websocket-voice-client.service';\nimport { DailyVoiceClientService } from './services/daily-voice-client.service';\n\n/**\n * Voice agent module. Uses native WebSocket + Daily.js only.\n * Does NOT use Socket.IO or ngx-socket-io.\n */\n@NgModule({\n declarations: [\n VoiceAgentModalComponent\n ],\n imports: [\n CommonModule\n ],\n providers: [\n VoiceAgentService,\n AudioAnalyzerService,\n WebSocketVoiceClientService,\n DailyVoiceClientService\n ],\n exports: [\n VoiceAgentModalComponent\n ]\n})\nexport class VoiceAgentModule { }\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n})\nexport class SafeHtmlPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n transform(html): unknown {\n return html ? this.sanitizer.bypassSecurityTrustHtml(html) : '';\n }\n\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { IVideo } from '../../models/video';\nimport { DOCUMENT } from '@angular/common';\n\n@Component({\n selector: 'app-video-player',\n templateUrl: './video-player.component.html',\n styleUrls: ['./video-player.component.scss'],\n})\nexport class VideoPlayerComponent\n implements OnInit, AfterViewInit {\n @Input() currentUserId: string;\n @Input() user: any;\n @Input() eventId: string;\n @Input() videoObj: IVideo;\n @Input() isDev: boolean;\n myFollowingList: Array<string>;\n myPendingSentRequests: Array<string>;\n @Input() type: string;\n isMuted: boolean = true;\n private observer: IntersectionObserver;\n isFullscreen: boolean = false;\n @ViewChild('video') video: any;\n @ViewChild('fullscreenvideo') fullscreenvideo: any;\n isFullscreenvideoPlaying: boolean = false;\n\n @Output() connectWithUser = new EventEmitter<string>();\n @Output() scheduleMeeting = new EventEmitter<any>();\n\n constructor(\n @Inject(DOCUMENT) private doc: any,\n private el: ElementRef,\n private cdr: ChangeDetectorRef\n ) {\n }\n\n ngOnInit(): void {\n }\n\n toggleSound(isMuted = null) {\n this.isMuted = isMuted != null ? isMuted : !this.isMuted;\n setTimeout(() => {\n const video: any = this.doc\n .getElementById(this.video.id.toString());\n if (video) {\n video.muted = this.isMuted;\n this.video.isMuted = this.isMuted;\n }\n\n this.cdr.markForCheck();\n //this.muteToggle.emit(this.isMuted);\n })\n}\n\n togglePlay(playState: boolean, videoEl) {\n this.videoObj.isPlaying = !this.videoObj.isPlaying;\n setTimeout(() => { \n if (playState) { \n this.videoObj.isPlaying = true;\n videoEl.play();\n var pauseBtn = document.getElementById('pause-btn');\n pauseBtn.classList.add('hide-pause-btn');\n\n this.toggleSound(false);\n }\n else{\n this.videoObj.isPlaying = false;\n videoEl.pause();\n }\n this.cdr.markForCheck();\n })\n }\n \n ngAfterViewInit() {\n if (window.innerWidth <= 576) {\n this.observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting === true) {\n this.video.nativeElement.play();\n } else {\n this.video.nativeElement.pause();\n }\n },\n {\n threshold: 0.75,\n }\n );\n\n this.observer.observe(this.el.nativeElement as HTMLElement);\n }\n }\n\n toggleFullscreen() {\n this.isFullscreen = !this.isFullscreen;\n if (!this.isFullscreen) {\n this.fullscreenvideo.nativeElement.pause();\n }\n }\n\n toggleFullscreenPlay() {\n this.isFullscreenvideoPlaying = !this.isFullscreenvideoPlaying;\n\n if (this.isFullscreenvideoPlaying) {\n this.fullscreenvideo.nativeElement.play();\n } else {\n this.fullscreenvideo.nativeElement.pause();\n }\n }\n\n followUser(userId) {\n this.connectWithUser.emit(userId);\n }\n\n checkPendingSentRequest(userId) {\n return this.myPendingSentRequests?.find(a => a == userId);\n }\n\n canUnfollowUser() {\n return false;\n }\n\n canFollowUser() {\n return true;\n }\n\n getIniNames(firstName, lastName) {\n if(!firstName && !lastName) {\n return '';\n }\n \n if (firstName && lastName)\n return (\n firstName.charAt(0).toUpperCase() + lastName.charAt(0).toUpperCase()\n );\n else return firstName.charAt(0).toUpperCase();\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { MatDrawer } from '@angular/material/sidenav';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { of, Subscription } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport { formatNow, formatTimeStamps } from '../../utils/utils';\nimport {\n dev_environment,\n prod_environment,\n} from '../../../environments/environment';\nimport { ConversationService } from '../conversation.service';\nimport { Observable } from 'rxjs';\nimport { SocketService } from '../socket-service.service';\n\n@Component({\n selector: 'lib-bot-html-editor',\n templateUrl: './bot-html-editor.component.html',\n styleUrls: ['./bot-html-editor.component.css'],\n})\nexport class BotHtmlEditorComponent implements OnInit {\n @Input() editorContent: Observable<string>;\n @Input() isDocInEditMode: any;\n @Input() documentContent: any;\n @Input() conversationId: any;\n @Input() botId: any;\n\n documentName: any = 'doc name';\n\n environment: {\n USERS_API;\n BASE_URL;\n AGENTS_API;\n };\n\n quillConfig = {\n toolbar: [\n [{ header: '1' }, { header: '2' }, { font: [] }],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['bold', 'italic', 'underline'],\n ['link'],\n ['clean'],\n ],\n };\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient) {}\n\n ngOnInit(): void {\n this.environment = prod_environment;\n\n setTimeout(() => {\n if (this.isDocInEditMode) {\n console.log('In Edit mode');\n this.filldataInForm();\n } else {\n console.log('In save mode');\n }\n }, 2500);\n }\n\n filldataInForm() {\n if (this.documentContent) {\n this.documentName = this.documentContent?.name;\n this.editorContent = this.documentContent?.content;\n this.cdr.detectChanges();\n }\n }\n\n saveContent() {\n if (!this.isDocInEditMode) {\n this.saveContent_http().subscribe();\n } else {\n this.saveContent_http().subscribe();\n }\n }\n\n saveContent_http() {\n console.log('API call function');\n\n const url = `${this.environment.AGENTS_API}/ConversationDocuments?conversationId=${this.conversationId}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n });\n\n let data = {\n name: this.documentName,\n content: this.editorContent,\n };\n\n return this.http.post(url, data, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n // alert('Saved Successfully');\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n\n updateContent_http() {\n console.log('API call function');\n\n const url = `${this.environment.AGENTS_API}/ConversationDocuments/rename?conversationId=${this.conversationId}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n });\n\n let data = {\n name: this.documentName,\n content: this.editorContent,\n };\n\n return this.http.put(url, data, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n // alert('Updated Successfully');\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { ChatDrawerComponent } from './components/chat-drawer/chat-drawer.component';\nimport { ChatBotComponent } from './components/chatbot/chatbot.component';\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\nimport { VideoPlayerComponent } from './components/video-player/video-player.component';\nimport { QuillModule } from 'ngx-quill';\nimport { BotHtmlEditorComponent } from './components/bot-html-editor/bot-html-editor.component';\nimport { VoiceAgentModule } from './components/voice-agent/voice-agent.module';\n\n@NgModule({\n declarations: [ChatBotComponent, ChatDrawerComponent, VideoPlayerComponent, SafeHtmlPipe, BotHtmlEditorComponent],\n imports: [CommonModule, OverlayModule, MatIconModule, MatSidenavModule, FormsModule, ReactiveFormsModule, QuillModule, VoiceAgentModule],\n exports: [ChatBotComponent, ChatDrawerComponent, VideoPlayerComponent]\n})\nexport class HiveGptModule { }\n"],"mappings":"wtDAgBIA,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAE,GACzE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOC,OAAOK,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,GAAG,EAC5FP,EAAcC,EAAGC,EAC5B,EAEgB,SAAAS,EAAUV,EAAGC,GACzB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIU,UAAU,uBAAyBC,OAAOX,GAAK,iCAE7D,SAASY,IAAOC,KAAKC,YAAcf,CAAE,CADrCD,EAAcC,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOc,OAAOf,IAAMY,EAAGN,UAAYN,EAAEM,UAAW,IAAIM,EACnF,CAqFM,SAAUI,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAmC,CAAxB,MAAOG,GAAKL,EAAOK,EAAK,EACzF,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAmC,CAAxB,MAAOG,GAAKL,EAAOK,EAAK,EAC5F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,EAAO,KAIhBO,KAAKR,EAAWK,EAAU,CAC5GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OAClE,GACJ,CAEgB,SAAAO,EAAYjB,EAASkB,GACjC,IAAsGC,EAAGC,EAAGC,EAAxGC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPH,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,EAAG,EAAII,KAAM,GAAIC,IAAK,IAAeC,EAAI3C,OAAOc,QAA4B,mBAAb8B,SAA0BA,SAAW5C,QAAQK,WACtL,OAAOsC,EAAEjB,KAAOmB,EAAK,GAAIF,EAAS,MAAIE,EAAK,GAAIF,EAAU,OAAIE,EAAK,GAAsB,mBAAXC,SAA0BH,EAAEG,OAAOC,UAAY,WAAa,OAAOnC,IAAK,GAAK+B,EAC1J,SAASE,EAAKG,GAAK,OAAO,SAAUC,GAAK,OACzC,SAAcC,GACV,GAAIf,EAAG,MAAM,IAAI1B,UAAU,mCAC3B,KAAOkC,IAAMA,EAAI,EAAGO,EAAG,KAAOZ,EAAI,IAAKA,OACnC,GAAIH,EAAI,EAAGC,IAAMC,EAAY,EAARa,EAAG,GAASd,EAAU,OAAIc,EAAG,GAAKd,EAAS,SAAOC,EAAID,EAAU,SAAMC,EAAE9B,KAAK6B,GAAI,GAAKA,EAAEV,SAAWW,EAAIA,EAAE9B,KAAK6B,EAAGc,EAAG,KAAKpB,KAAM,OAAOO,EAE3J,OADID,EAAI,EAAGC,IAAGa,EAAK,CAAS,EAARA,EAAG,GAAQb,EAAEb,QACzB0B,EAAG,IACP,KAAK,EAAG,KAAK,EAAGb,EAAIa,EAAI,MACxB,KAAK,EAAc,OAAXZ,EAAEC,QAAgB,CAAEf,MAAO0B,EAAG,GAAIpB,MAAM,GAChD,KAAK,EAAGQ,EAAEC,QAASH,EAAIc,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKZ,EAAEI,IAAIS,MAAOb,EAAEG,KAAKU,MAAO,SACxC,QACI,KAAMd,EAAIC,EAAEG,MAAMJ,EAAIA,EAAEe,OAAS,GAAKf,EAAEA,EAAEe,OAAS,KAAkB,IAAVF,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEZ,EAAI,EAAG,QAAW,CAC5G,GAAc,IAAVY,EAAG,MAAcb,GAAMa,EAAG,GAAKb,EAAE,IAAMa,EAAG,GAAKb,EAAE,IAAM,CAAEC,EAAEC,MAAQW,EAAG,GAAI,KAAQ,CACtF,GAAc,IAAVA,EAAG,IAAYZ,EAAEC,MAAQF,EAAE,GAAI,CAAEC,EAAEC,MAAQF,EAAE,GAAIA,EAAIa,EAAI,KAAQ,CACrE,GAAIb,GAAKC,EAAEC,MAAQF,EAAE,GAAI,CAAEC,EAAEC,MAAQF,EAAE,GAAIC,EAAEI,IAAIW,KAAKH,GAAK,KAAQ,CAC/Db,EAAE,IAAIC,EAAEI,IAAIS,MAChBb,EAAEG,KAAKU,MAAO,SAEtBD,EAAKhB,EAAK3B,KAAKS,EAASsB,GAC1B,MAAOX,GAAKuB,EAAK,CAAC,EAAGvB,GAAIS,EAAI,CAAI,CAAS,QAAED,EAAIE,EAAI,CAAI,CAC1D,GAAY,EAARa,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAE1B,MAAO0B,EAAG,GAAKA,EAAG,QAAK,EAAQpB,MAAM,E,CArB9BL,CAAK,CAACuB,EAAGC,GAAI,CAAG,CAuBpE,CAE6BjD,OAAOc,OAgB9B,SAAUwC,EAASC,GACrB,IAAIC,EAAsB,mBAAXV,QAAyBA,OAAOC,SAAUU,EAAID,GAAKD,EAAEC,GAAIE,EAAI,EAC5E,GAAID,EAAG,OAAOA,EAAElD,KAAKgD,GACrB,GAAIA,GAAyB,iBAAbA,EAAEH,OAAqB,MAAO,CAC1C1B,KAAM,WAEF,OADI6B,GAAKG,GAAKH,EAAEH,SAAQG,OAAI,GACrB,CAAE/B,MAAO+B,GAAKA,EAAEG,KAAM5B,MAAOyB,E,GAG5C,MAAM,IAAI9C,UAAU+C,EAAI,0BAA4B,kCACxD,CAEgB,SAAAG,EAAOJ,EAAGP,GACtB,IAAIS,EAAsB,mBAAXX,QAAyBS,EAAET,OAAOC,UACjD,IAAKU,EAAG,OAAOF,EACf,IAAmBK,EAAYjC,EAA3B+B,EAAID,EAAElD,KAAKgD,GAAOM,EAAK,GAC3B,IACI,WAAc,IAANb,GAAgBA,KAAM,MAAQY,EAAIF,EAAEhC,QAAQI,MAAM+B,EAAGR,KAAKO,EAAEpC,MAQvE,CAND,MAAOsC,GAASnC,EAAI,CAAEmC,MAAOA,EAAU,CAC/B,QACJ,IACQF,IAAMA,EAAE9B,OAAS2B,EAAIC,EAAU,SAAID,EAAElD,KAAKmD,EAEjB,CAAzB,QAAE,GAAI/B,EAAG,MAAMA,EAAEmC,KAAQ,CACpC,CACD,OAAOD,CACX,C,SAkBgBE,EAAcC,EAAIC,EAAMC,GACpC,GAAIA,GAA6B,IAArBC,UAAUf,OAAc,IAAK,IAA4BS,EAAxBH,EAAI,EAAGU,EAAIH,EAAKb,OAAYM,EAAIU,EAAGV,KACxEG,GAAQH,KAAKO,IACRJ,IAAIA,EAAK1D,MAAME,UAAUgE,MAAM9D,KAAK0D,EAAM,EAAGP,IAClDG,EAAGH,GAAKO,EAAKP,IAGrB,OAAOM,EAAGM,OAAOT,GAAM1D,MAAME,UAAUgE,MAAM9D,KAAK0D,GACtD,CAsCyBjE,OAAOc,OAqEkB,mBAApByD,iBAAiCA,gBAwC/D,IC1WAC,EAAA,WAHA,SAAAA,IAIU5D,KAAO6D,QAAkB,KA6BzB7D,KAAA8D,iBAA0B,CAChC,CACFC,IAAK,OACLC,aAAc,OACdC,aAAc,CACZC,GAAI,OACJC,GAAI,SACJC,GAAI,QACJC,GAAI,SACJC,GAAI,WACJ,QAAS,SACTrB,GAAI,MACJsB,GAAI,KACJC,GAAI,eAIJ,CAEAT,IAAK,sCACLC,aAAc,8CACdC,aAAc,CACVC,GAAI,8CACJC,GAAI,iDACJC,GAAI,8CACJC,GAAI,wCACJC,GAAI,uDACJ,QAAS,6CACTrB,GAAI,yCACJsB,GAAI,mBACJC,GAAI,gDAGR,CACAT,IAAK,2DACLC,aAAc,sOACdC,aAAc,CACVC,GAAI,sOACJC,GAAI,+PACJC,GAAI,mQACJC,GAAI,+OACJC,GAAI,4QACJ,QAAS,qPACTrB,GAAI,kMACJsB,GAAI,qGACJC,GAAI,iOAGR,CACET,IAAK,eACLC,aAAc,eACdC,aAAc,CACZC,GAAI,eACJC,GAAI,8BACJC,GAAI,wBACJC,GAAI,0BACJC,GAAI,aACJ,QAAS,0BACTrB,GAAI,cACJsB,GAAI,MACJC,GAAI,wBAGR,CACET,IAAK,YACLC,aAAc,YACdC,aAAc,CACZC,GAAI,YACJC,GAAI,YACJC,GAAI,aACJC,GAAI,YACJC,GAAI,YACJ,QAAS,aACTrB,GAAI,QACJsB,GAAI,KACJC,GAAI,cAGR,CACET,IAAK,oFACLC,aACE,oFACFC,aAAc,CACZC,GAAI,oFACJC,GAAI,6HACJC,GAAI,wGACJC,GAAI,4FACJC,GAAI,gGACJ,QACE,6FACFrB,GAAI,sEACJsB,GAAI,yBACJC,GAAI,iGAGR,CACET,IAAK,eACLC,aAAc,eACdC,aAAc,CACZC,GAAI,eACJC,GAAI,qBACJC,GAAI,kBACJC,GAAI,iBACJC,GAAI,mBACJ,QAAS,kBACTrB,GAAI,cACJsB,GAAI,OACJC,GAAI,wBAGR,CACET,IAAK,eACLC,aAAc,eACdC,aAAc,CACZC,GAAI,eACJC,GAAI,iBACJC,GAAI,kBACJC,GAAI,iBACJC,GAAI,gBACJ,QAAS,iBACTrB,GAAI,WACJsB,GAAI,SACJC,GAAI,kBAGR,CACET,IAAK,WACLC,aAAc,WACdC,aAAc,CACZC,GAAI,WACJC,GAAI,wBACJC,GAAI,aACJC,GAAI,aACJC,GAAI,aACJ,QAAS,YACTrB,GAAI,eACJsB,GAAI,MACJC,GAAI,cAGR,CACET,IAAK,MACLC,aAAc,MACdC,aAAc,CACZC,GAAI,MACJC,GAAI,OACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJ,QAAS,OACTrB,GAAI,MACJsB,GAAI,IACJC,GAAI,OAGR,CACET,IAAK,qBACLC,aAAc,qBACdC,aAAc,CACZC,GAAI,qBACJC,GAAI,wBACJC,GAAI,0BACJC,GAAI,qBACJC,GAAI,+BACJ,QAAS,uBACTrB,GAAI,cACJsB,GAAI,SACJC,GAAI,4BAGR,CACET,IAAK,OACLC,aAAc,OACdC,aAAc,CACZC,GAAI,OACJC,GAAI,UACJC,GAAI,QACJC,GAAI,SACJC,GAAI,SACJ,QAAS,SACTrB,GAAI,QACJsB,GAAI,KACJC,GAAI,cAIR,CACET,IAAK,iBACLC,aAAc,iBACdC,aAAc,CACZC,GAAI,iBACJC,GAAI,oBACJC,GAAI,uBACJC,GAAI,sBACJC,GAAI,kBACJ,QAAS,uBACTrB,GAAI,gBACJsB,GAAI,OACJC,GAAI,qBAGR,CACET,IAAK,QACLC,aAAc,QACdC,aAAc,CACZC,GAAI,QACJC,GAAI,SACJC,GAAI,SACJC,GAAI,SACJC,GAAI,YACJ,QAAS,SACTrB,GAAI,QACJsB,GAAI,KACJC,GAAI,Y,QAhPVZ,EAAUnE,UAAAgF,WAAV,SAAWC,GACT1E,KAAK6D,QAAUa,C,EAGjBd,EAAcnE,UAAAkF,eAAd,SAAeC,GACbC,QAAQC,IAAI,UAAW9E,KAAK6D,SAE5B,IAAMkB,GACJC,aAAaC,QAAQ,mBAAqBjF,KAAK6D,UAAY,MAC3DqB,QAAQ,SAAU,IAEdC,EAAQnF,KAAK8D,iBAAiBsB,MAAK,SAACC,GAAS,OAAAA,EAAKtB,MAAQa,CAAb,IAEnD,OAAKO,IAIEA,EAAMlB,aAAac,IAASI,EAAMnB,eAHhCY,C,EAMHhB,EAAOnE,UAAA6F,QAAP,SAAQzB,GACd,IACM0B,EAAa,mBADJ1B,EAAU,IAAIA,EAAY,IAGzC,OAAOmB,aAAaC,QAAQM,IAAe,I,IA3B/C,G,yGAHC,CAAAC,KAAAC,aAAWC,KAAA,EACVC,WAAY,WCJd,IAAMC,EAAwB,SAACC,GAC7B,IAAIC,EAAQD,EAAKE,WAAa,GACxBC,EAAUH,EAAKI,aAOrB,OALa,IAAVH,IAAaA,EAAQ,KAEDA,EAAQ,GAAK,IAAIA,EAAUA,GAG1B,KAFCE,EAAU,GAAK,IAAIA,EAAYA,GAEZ,KAN/BH,EAAKE,WAAa,GAAK,KAAO,KAO7C,EAEaG,EAAY,SAACC,GACxB,IAAMC,EAAM,IAAIC,KAChB,GAAIF,EAAU,CACZ,IAAMG,EAAe,CACnBC,QAAQ,EACRC,KAAM,UACNC,OAAQ,UACRC,SAAUP,GAEZ,OAAOC,EAAIO,eAAe,QAASL,EACpC,CACD,OAAOV,EAAsBQ,EAC/B,EAEaQ,EAAmB,SAACT,EAAkBU,GACjD,IAEMP,EAAe,CACnBC,QAAQ,EACRC,KAAM,UACNC,OAAQ,UACRC,SAAUP,GAEZ,OARa,IAAIE,KAAKQ,EAAa,KAQvBF,eAAe,QAASL,EACtC,EClCaQ,EAAmB,CAC5BC,UAAW,mCACXC,SAAU,+BACVC,WAAY,mCACZC,QAAS,uCACTC,UAAW,qCAIFC,EAAkB,CAC3BL,UAAW,oCACXC,SAAU,mCACVC,WAAY,uCACZC,QAAS,2BACTC,UAAW,0CCVfE,EAAA,WAME,SAAAA,IALQrH,KAA4BsH,6BAAG,mBAC/BtH,KAAuBuH,wBAAG,cAE1BvH,KAAAwH,yBAAyC,IAAIC,S,QAIrDJ,EAAA5H,UAAAiI,YAAA,WAKE,OAJkBC,KAAKC,OAAM,IAAIvB,MAAOwB,UAAY,KAAMC,SAAS,IACjD,mBAAmB5C,QAAQ,QAAQ,WACnD,OAAOyC,KAAKC,MAAsB,GAAhBD,KAAKI,UAAeD,SAAS,GACjD,G,EAIFT,EAAA5H,UAAAuI,OAAA,SAAOC,EAAeC,QAAA,IAAAA,OAAyB,GAC7C,IAAM3C,EAAa,GAAGvF,KAAKsH,6BAA+BW,EACtDrH,EAAQoE,aAAaC,QAAQM,GAOjC,OALK3E,IAASsH,IACZtH,EAAQZ,KAAK0H,cACb1C,aAAamD,QAAQ5C,EAAY3E,IAG5BA,C,EAGTyG,EAAA5H,UAAA2I,cAAA,SAAcC,EAAmBH,QAAA,IAAAA,OAAyB,GACxD,IAAM3C,EAAa,GAAGvF,KAAKuH,wBAA0Bc,EACjDzH,EAAQoE,aAAaC,QAAQM,GAOjC,OALK3E,IAASsH,IACZtH,EAAQZ,KAAK0H,cACb1C,aAAamD,QAAQ5C,EAAY3E,IAG5BA,C,EAGTyG,EAAqB5H,UAAA6I,sBAArB,SAAsBC,GACpBvI,KAAKwH,yBAAyB1G,KAAKyH,E,EAGrClB,EAAA5H,UAAA+I,4BAAA,WACE,OAAOxI,KAAKwH,yBAAyBiB,c,IA7CzC,G,yGAHC,CAAAjD,KAAAC,aAAWC,KAAA,EACVC,WAAY,W,sCCGd,IAAA+C,EAAA,SAAAC,GACE,SAAAD,IAAA,IACEE,EAAAD,EAAAhJ,KAAAK,KAAM6I,IAcP7I,K,OAXC4I,EAAKE,GAAG,WAAW,WACjBjE,QAAQC,IAAI,mBACd,IAEA8D,EAAKE,GAAG,cAAc,WACpBjE,QAAQkE,KAAK,sBACf,IAEAH,EAAKE,GAAG,iBAAiB,SAACE,GACxBnE,QAAQ3B,MAAM,2BAA4B8F,EAC5C,I,SAfoCpJ,EAAM8I,EAAAC,G,EAA9C,CAAwCM,U,yGAHvC,CAAAzD,KAAAC,aAAWC,KAAA,EACVC,WAAY,W,sCAqBd,IAAMkD,EAA+B,CACnCK,IAAKpC,EAAiBK,UACtBb,QAAS,CACP6C,WAAY,CAAC,YAAa,WAC1BC,cAAc,EACdC,aAAa,EACbC,SAAS,EACTC,kBAAmB,IACnBC,qBAAsB,IACtBC,qBAAsBC,MCzB1BC,EAAA,WASE,SACUA,EAAAC,EACAC,GADA7J,KAAmB4J,oBAAnBA,EACA5J,KAAkB6J,mBAAlBA,EATF7J,KAAyB8J,2BAAG,EAC5B9J,KAA+B+J,iCAAG,EAClC/J,KAA2BgK,6BAAG,EAC9BhK,KAAYiK,aAAU,GACtBjK,KAAekK,gBAAG,IAClBlK,KAAamK,eAAY,EAM/BnK,KAAKoK,wB,QAGPT,EAAmBlK,UAAA4K,oBAAnB,SAAoBC,GAClB,OAAOA,EACHtK,KAAK8J,0BACL9J,KAAK+J,kCACN/J,KAAKgK,2B,EAGVL,EAAAlK,UAAA8K,2BAAA,WACEvK,KAAK6J,mBAAmBW,Y,EAE1Bb,EAAAlK,UAAAgL,wBAAA,WACEzK,KAAK6J,mBAAmBa,S,EAE1Bf,EAAAlK,UAAAkL,+BAAA,SAA+B1C,EAAe2C,EAAyBC,GAAvE,IAsBCjC,EAAA5I,KApBO8K,EAAU,kBAAkB7C,EAAK,IAAI2C,EACrCG,EAAc,kBAAkBF,EAMtC7K,KAAK6J,mBAAmBmB,KAAK,WAAY,CAAEF,QAAOA,IAClD9K,KAAK6J,mBAAmBmB,KAAK,WAAY,CAAEF,QAASC,IAGpD/K,KAAK6J,mBAAmBoB,UAZG,sBAY2BC,WACpD,SAACC,GACCtG,QAAQC,IAAI,+BAAgCqG,GAC5CvC,EAAKgB,oBAAoBtB,sBAAsB6C,E,IAEjD,SAACjI,GACC2B,QAAQ3B,MAAM,sCAAuCA,EACvD,G,EAIIyG,EAAAlK,UAAA2K,uBAAA,eAYPxB,EAAA5I,KAXMA,KAAKmK,gBACRiB,aAAY,WACV,GAAIxC,EAAKqB,aAAazH,OAAS,EAAG,CAChC,IAAM+F,EAAUK,EAAKqB,aAAaoB,QAElCxG,QAAQC,IAAI,gCAAiCyD,EAE9C,CACH,GAAGvI,KAAKkK,iBACRlK,KAAKmK,eAAgB,E,IA/D3B,G,sIAHC,CAAA3E,KAAAC,aAAWC,KAAA,EACVC,WAAY,W,yCAJL0B,G,MACAqB,G,ECMT,IAAA4C,EAAA,WAGI,SAAAA,EAAoBC,GAAAvL,KAAIuL,KAAJA,EAFpBvL,KAAAwL,iBAAmB,IAAI/D,UACvBzH,KAAOyL,QAAG,+B,QAGVH,EAAA7L,UAAAiM,8BAAA,SAA8BzD,EAAO0D,EAAQC,GACzC,IAAMC,EAAU,IAAIC,cAAY,CAC5B,eAAgB,mBAChB,YAAaH,EACb,cAAe1D,EACf,mBAAoB2D,IAIlB1C,EAAM,IADMlJ,KAAKyL,QAAO,sBAE9B,OAAOzL,KAAKuL,KAAKQ,IAAI7C,EAAK,CAAE2C,QAAOA,IAAIG,KACnCC,OAAI,SAACC,GACD,OAAOA,EAAKC,K,MAKxBb,EAAmB7L,UAAA2M,oBAAnB,SAAoBC,GAChB,IACMnD,EADYlJ,KAAKyL,QAAO,YACT,WAAWY,EAChC,OAAOrM,KAAKuL,KAAKQ,IAAI7C,GAAK8C,KACtBC,OAAI,SAACC,GACD,OAAOA,C,MAKnBZ,EAAwB7L,UAAA6M,yBAAxB,SAAyBC,GACrB,IAAMC,EAAYxM,KAAKyL,QAAO,uBAAuBc,EACrD,OAAOvM,KAAKuL,KAAKQ,IAAIS,GAAQR,KACzBC,OAAI,SAACC,GACD,OAAOA,C,QApCvB,G,mIAHC,CAAA1G,KAAAC,aAAWC,KAAA,EACRC,WAAY,W,yCATP8G,c,ECUT,IAAAC,EAAA,WAHA,SAAAA,IAIU1M,KAAY2M,aAAwB,KACpC3M,KAAY4M,aAAwB,KACpC5M,KAAS6M,UAAsB,KAC/B7M,KAAgB8M,iBAAkB,KAClC9M,KAAS+M,WAAG,EAEZ/M,KAAAgN,mBAAqB,IAAIC,kBAA0B,IACnDjN,KAAAkN,sBAAwB,IAAID,mBAAyB,GAGrDjN,KAAUmN,WAAG,EACbnN,KAAiBoN,kBAAa,GACrBpN,KAAwBqN,yBAAG,GAC3BrN,KAA6BsN,8BAAG,IAChCtN,KAAkBuN,mBAAG,GAEtCvN,KAAAwN,aAAqCxN,KAAKgN,mBAAmBvE,eAC7DzI,KAAAyN,gBAAuCzN,KAAKkN,sBAAsBzE,c,QAElEiE,EAAKjN,UAAAiO,MAAL,SAAMC,GACA3N,KAAK+M,WACP/M,KAAK4N,OAGP,IACE5N,KAAK2M,aAAe,IAAKkB,OAAOC,cAAiBD,OAAeE,oBAChE,IAAMC,EAAShO,KAAK2M,aAAasB,wBAAwBN,GAEzD3N,KAAK4M,aAAe5M,KAAK2M,aAAauB,iBACtClO,KAAK4M,aAAauB,QAAU,KAC5BnO,KAAK4M,aAAawB,sBAAwB,GAE1C,IAAMC,EAAerO,KAAK4M,aAAa0B,kBACvCtO,KAAK6M,UAAY,IAAI0B,WAAWF,GAEhCL,EAAOtD,QAAQ1K,KAAK4M,cAEpB5M,KAAK+M,WAAY,EACjB/M,KAAKoN,kBAAoB,GACzBpN,KAAKmN,WAAa,EAElBnN,KAAKwO,SAIN,CAHC,MAAOtL,GACP2B,QAAQ3B,MAAM,iCAAkCA,GAChDlD,KAAK4N,MACN,C,EAGHlB,EAAAjN,UAAAmO,KAAA,WACE5N,KAAK+M,WAAY,EAEa,OAA1B/M,KAAK8M,mBACP2B,qBAAqBzO,KAAK8M,kBAC1B9M,KAAK8M,iBAAmB,MAGtB9M,KAAK4M,eACP5M,KAAK4M,aAAapC,aAClBxK,KAAK4M,aAAe,MAGlB5M,KAAK2M,cAA4C,WAA5B3M,KAAK2M,aAAa+B,QACzC1O,KAAK2M,aAAagC,QAAQC,MAAM/J,QAAQ3B,OACxClD,KAAK2M,aAAe,MAGtB3M,KAAK6M,UAAY,KACjB7M,KAAKgN,mBAAmBlM,KAAK,IAC7Bd,KAAKkN,sBAAsBpM,MAAK,E,EAG1B4L,EAAAjN,UAAA+O,QAAA,eAiCP5F,EAAA5I,KAhCC,GAAKA,KAAK+M,WAAc/M,KAAK4M,cAAiB5M,KAAK6M,UAAnD,CAIA7M,KAAK4M,aAAaiC,sBAAsB7O,KAAK6M,WAG7C,IAAMiC,EAAM9O,KAAK+O,aAAa/O,KAAK6M,WAGnC,GAAI7M,KAAKoN,kBAAkB5K,OAASxC,KAAKqN,0BAEvC,GADArN,KAAKoN,kBAAkB3K,KAAKqM,GACxB9O,KAAKoN,kBAAkB5K,SAAWxC,KAAKqN,yBAA0B,CAEnE,IAAM2B,EAAMhP,KAAKoN,kBAAkB6B,QAAO,SAACC,EAAG/P,GAAM,OAAA+P,EAAI/P,CAAC,GAAE,GAC3Da,KAAKmN,WAAa6B,EAAMhP,KAAKqN,wBAC9B,OAGDrN,KAAKmN,WAA+B,IAAlBnN,KAAKmN,WAA0B,IAAN2B,EAI7C,IACMK,EAAaL,EADD9O,KAAKmN,WAAanN,KAAKsN,8BAEzCtN,KAAKkN,sBAAsBpM,KAAKqO,GAGhC,IAAMC,EAAOpP,KAAKqP,qBAAqBrP,KAAK6M,WAC5C7M,KAAKgN,mBAAmBlM,KAAKsO,GAE7BpP,KAAK8M,iBAAmBwC,uBAAsB,WAAM,OAAA1G,EAAK4F,SAAL,GA7BnD,C,EAgCK9B,EAAYjN,UAAAsP,aAAZ,SAAaQ,GAEnB,IADA,IAAIP,EAAM,EACDlM,EAAI,EAAGA,EAAIyM,EAAK/M,OAAQM,IAAK,CACpC,IAAM0M,GAAcD,EAAKzM,GAAK,KAAO,IACrCkM,GAAOQ,EAAaA,CACrB,CACD,OAAO7H,KAAK8H,KAAKT,EAAMO,EAAK/M,O,EAGtBkK,EAAoBjN,UAAA4P,qBAApB,SAAqBE,GAI3B,IAHA,IAAMH,EAAiB,GACjBvO,EAAO8G,KAAKC,MAAM2H,EAAK/M,OAASxC,KAAKuN,oBAElCzK,EAAI,EAAGA,EAAI9C,KAAKuN,mBAAoBzK,IAAK,CAChD,IACMlC,EAAQ2O,EADAzM,EAAIjC,GAGZ2O,EAA6C,IAAhC7H,KAAK+H,KAAK9O,EAAQ,KAAO,KAC5CwO,EAAK3M,KAAKkF,KAAKgI,IAAI,IAAKhI,KAAKiI,IAAI,EAAGJ,IACrC,CAED,OAAOJ,C,IAhIX,G,yGAHC,CAAA5J,KAAAC,aAAWC,KAAA,EACVC,WAAY,WCmCd,IAAAkK,EAAA,WAHA,SAAAA,IAIU7P,KAAE8P,GAAqB,KACvB9P,KAAA+P,mBAAqB,IAAItI,UACzBzH,KAAAgQ,sBAAwB,IAAIvI,UAC5BzH,KAAAiQ,qBAAuB,IAAIxI,UAGnCzH,KAAAkQ,aAAmClQ,KAAK+P,mBAAmBtH,eAG3DzI,KAAAmQ,gBACEnQ,KAAKgQ,sBAAsBvH,eAG7BzI,KAAAoQ,eACEpQ,KAAKiQ,qBAAqBxH,c,QAG5BoH,EAAOpQ,UAAAiL,QAAP,SAAQ2F,GAAR,I,EA0CCzH,EAAA5I,KAzCC,IAAa,QAATsQ,EAAAtQ,KAAK8P,UAAI,IAAAQ,OAAA,EAAAA,EAAAC,cAAeC,UAAUC,KAAtC,CAGIzQ,KAAK8P,KACP9P,KAAK8P,GAAGnB,QACR3O,KAAK8P,GAAK,MAGZ,IACE9P,KAAK8P,GAAK,IAAIU,UAAUH,GACxBrQ,KAAK8P,GAAGY,UAAY,SAACC,G,MACnB,IACE,IAAMC,EAAMC,KAAKC,MAAMH,EAAMpB,MAC7B,GAAkB,kBAAdqB,aAAG,EAAHA,EAAKpL,MAAyB,CAChC,IAAMuL,EAAuB,QAAZT,EAAAM,EAAII,gBAAQ,IAAAV,IAAIM,EAAIG,QACd,iBAAZA,GACTnI,EAAKmH,mBAAmBjP,KAAKiQ,EAEhC,KAAwB,qBAAdH,aAAG,EAAHA,EAAKpL,OAAkD,iBAAboL,EAAIK,KACvDrI,EAAKoH,sBAAsBlP,KAAK,CAC9BmQ,KAAML,EAAIK,KACVC,OAAqB,IAAdN,EAAIM,QAEU,oBAAdN,aAAG,EAAHA,EAAKpL,OAAiD,iBAAboL,EAAIK,MACtDrI,EAAKqH,qBAAqBnP,KAAK8P,EAAIK,KAItC,CAFC,MAAME,GAEP,CACH,EACAnR,KAAK8P,GAAGsB,QAAU,WAChBxI,EAAK4B,YACP,EACAxK,KAAK8P,GAAGuB,QAAU,WAChBzI,EAAKkH,GAAK,IACZ,CAKD,CAJC,MAAO9G,GAGP,MAFAnE,QAAQ3B,MAAM,uCAAwC8F,GACtDhJ,KAAK8P,GAAK,KACJ9G,CACP,CAtCA,C,EA0CH6G,EAAApQ,UAAA+K,WAAA,WACMxK,KAAK8P,KACP9P,KAAK8P,GAAGnB,QACR3O,KAAK8P,GAAK,K,EAKd1Q,OAAAkS,eAAIzB,EAAWpQ,UAAA,eAAfsM,IAAA,W,MACE,OAAgB,QAATuE,EAAAtQ,KAAK8P,UAAI,IAAAQ,OAAA,EAAAA,EAAAC,cAAeC,UAAUC,I,oCAxE7C,G,yGAHC,CAAAjL,KAAAC,aAAWC,KAAA,EACVC,WAAY,WCnBd,IAAA4L,EAAA,WAuBE,SAAAA,EAAoBC,GAAAxR,KAAMwR,OAANA,EAtBZxR,KAAUyR,WAAqB,KAC/BzR,KAAW0R,YAAuB,KAClC1R,KAAc2R,eAAkB,KAEhC3R,KAAA4R,gBAAkB,IAAI3E,mBAAyB,GAC/CjN,KAAA6R,oBAAsB,IAAI5E,mBAAyB,GACnDjN,KAAA8R,gBAAkB,IAAI7E,mBAAyB,GAC/CjN,KAAA+R,mBAAqB,IAAI9E,kBAAoC,MAGrEjN,KAAAgS,UAAiChS,KAAK4R,gBAAgBnJ,eAGtDzI,KAAAiS,cAAqCjS,KAAK6R,oBAAoBpJ,eAG9DzI,KAAAkS,UAAiClS,KAAK8R,gBAAgBrJ,eAGtDzI,KAAAmS,aACEnS,KAAK+R,mBAAmBtJ,c,QASpB8I,EAAA9R,UAAAiL,QAAA,SAAQqG,EAAiB5E,G,iHACzBnM,KAAKyR,WACP,GAAMzR,KAAKwK,cADM,M,OACjB4H,EAAAxQ,O,iBAKe,O,sBAAA,GAAMyQ,UAAUC,aAAaC,aAAa,CAAEC,OAAO,K,OAElE,GAFM7E,EAASyE,EAA0DxQ,SACnE6Q,EAAa9E,EAAO+E,iBAAiB,IAGzC,MADA/E,EAAOgF,YAAYC,SAAQ,SAACnR,GAAM,OAAAA,EAAEmM,MAAF,IAC5B,IAAIiF,MAAM,kBAuBlB,OApBA7S,KAAK0R,YAAc/D,EACnB3N,KAAK+R,mBAAmBjR,KAAK6M,GAIvB8D,EAAaqB,UAAMC,iBAAiB,CACxCC,aAAa,EACbC,YAAaR,IAGfzS,KAAKyR,WAAaA,EAElBzR,KAAKkT,mBAAmBzB,GAIlB0B,EAA+C,CAAEjK,IAAK6H,GACvC,iBAAV5E,GAAuC,KAAjBA,EAAMiH,SACrCD,EAAYhH,MAAQA,GAEtB,GAAMsF,EAAW4B,KAAKF,I,cAAtBf,EAAAxQ,QAGI0R,OADEA,EAAe7B,EAAW6B,qBAChB,EAAZA,EAAcC,SAChBvT,KAAK2R,eAAiB2B,EAAaC,MAAMC,YAI3CxT,KAAK8R,gBAAgBhR,MAAM2Q,EAAWgC,c,aAGtC,M,WADAzT,KAAK0T,UACCC,E,oBAET,G,EAEOpC,EAAkB9R,UAAAyT,mBAAlB,SAAmBvT,GAAnB,IAkDPiJ,EAAA5I,KA/CCL,EAAKmJ,GAAG,yBAAyB,SAAC6H,GAChC/H,EAAK4I,OAAOoC,KAAI,W,MACRC,EAA+B,QAAtBvD,EAAAK,aAAA,EAAAA,EAAOmD,qBAAe,IAAAxD,OAAA,EAAAA,EAAAuD,OACrC,IAAKA,IAAWjL,EAAK+I,eAGnB,OAFA/I,EAAKgJ,gBAAgB9Q,MAAK,QAC1B8H,EAAKiJ,oBAAoB/Q,MAAK,GAGhC,IAAMiT,EAAUF,IAAWjL,EAAK+I,eAChC/I,EAAKiJ,oBAAoB/Q,KAAKiT,GAC9BnL,EAAKgJ,gBAAgB9Q,MAAMiT,EAC7B,GACF,IAKApU,EAAKmJ,GAAG,iBAAiB,SAAC6H,GACxB/H,EAAK4I,OAAOoC,KAAI,W,QACRpU,EAAImR,aAAA,EAAAA,EAAOqD,YACXxO,EAAkB,QAAX8K,EAAAK,aAAK,EAALA,EAAOnL,YAAI,IAAA8K,IAAkB,QAAda,EAAAR,aAAK,EAALA,EAAOsD,aAAO,IAAA9C,OAAA,EAAAA,EAAA+C,KACtC1U,IAAMA,EAAE+T,OAAkB,UAAT/N,GACnBoD,EAAKgJ,gBAAgB9Q,MAAK,EAE9B,GACF,IAEAnB,EAAKmJ,GAAG,iBAAiB,SAAC6H,GACxB/H,EAAK4I,OAAOoC,KAAI,W,QACRpU,EAAImR,aAAA,EAAAA,EAAOqD,YACXxO,EAAkB,QAAX8K,EAAAK,aAAK,EAALA,EAAOnL,YAAI,IAAA8K,IAAkB,QAAda,EAAAR,aAAK,EAALA,EAAOsD,aAAO,IAAA9C,OAAA,EAAAA,EAAA+C,KACtC1U,IAAMA,EAAE+T,OAAkB,UAAT/N,GACnBoD,EAAKgJ,gBAAgB9Q,MAAK,EAE9B,GACF,IAEAnB,EAAKmJ,GAAG,gBAAgB,WACtBF,EAAK4I,OAAOoC,KAAI,WAAM,OAAAhL,EAAK8K,SAAL,GACxB,IAEA/T,EAAKmJ,GAAG,SAAS,SAAC6H,GAChB/H,EAAK4I,OAAOoC,KAAI,W,MACd/O,QAAQ3B,MAAM,gCAAoD,QAAnBoN,EAAAK,aAAK,EAALA,EAAOwD,gBAAY,IAAA7D,IAAAK,GAClE/H,EAAK8K,SACP,GACF,G,EAIFnC,EAAQ9R,UAAA2U,SAAR,SAASC,GACFrU,KAAKyR,aACVzR,KAAKyR,WAAW6C,eAAeD,GAC/BrU,KAAK8R,gBAAgBhR,KAAKuT,G,EAItB9C,EAAA9R,UAAA+K,WAAA,W,0FACJ,IAAKxK,KAAKyR,WAER,OADAzR,KAAK0T,UACE,I,iBAGP,O,sBAAA,GAAM1T,KAAKyR,WAAW8C,S,cAAtBnC,EAAAxQ,O,iDAIF5B,KAAK0T,U,OACN,G,EAEOnC,EAAA9R,UAAAiU,QAAA,WACF1T,KAAKyR,aACPzR,KAAKyR,WAAW+C,UAAU5F,OAAM,eAChC5O,KAAKyR,WAAa,MAEhBzR,KAAK0R,cACP1R,KAAK0R,YAAYiB,YAAYC,SAAQ,SAACnR,GAAM,OAAAA,EAAEmM,MAAF,IAC5C5N,KAAK0R,YAAc,MAErB1R,KAAK2R,eAAiB,KACtB3R,KAAK4R,gBAAgB9Q,MAAK,GAC1Bd,KAAK6R,oBAAoB/Q,MAAK,GAC9Bd,KAAK+R,mBAAmBjR,KAAK,K,IApKjC,G,+HAHC,CAAA0E,KAAAC,aAAWC,KAAA,EACVC,WAAY,W,yCApBO8O,U,ECkCrB,IAAAC,EAAA,WA0BE,SAAAA,EACUC,EACAC,EACAC,GAHV,IAWCjM,EAAA5I,KAVSA,KAAa2U,cAAbA,EACA3U,KAAQ4U,SAARA,EACA5U,KAAW6U,YAAXA,EA5BF7U,KAAA8U,iBAAmB,IAAI7H,kBAA2B,QAClDjN,KAAA+U,kBAAoB,IAAI9H,kBAAwB,IAChDjN,KAAAgV,gBAAkB,IAAI/H,kBAAwB,SAC9CjN,KAAAiV,kBAAoB,IAAIhI,mBAAyB,GACjDjN,KAAAkN,sBAAwB,IAAID,mBAAyB,GACrDjN,KAAAgN,mBAAqB,IAAIC,kBAA0B,IACnDjN,KAAAgQ,sBAAwB,IAAIvI,UAC5BzH,KAAAiQ,qBAAuB,IAAIxI,UAE3BzH,KAAakV,cAAG,EAChBlV,KAAgBmV,iBAA0C,KAE1DnV,KAAAoV,cAAgB,IAAIC,eACpBrV,KAAAsV,SAAW,IAAI7N,UAEvBzH,KAAAuV,WAAoCvV,KAAK8U,iBAAiBrM,eAC1DzI,KAAAwV,YAAkCxV,KAAK+U,kBAAkBtM,eACzDzI,KAAAyV,UAAgCzV,KAAKgV,gBAAgBvM,eACrDzI,KAAA0V,YAAmC1V,KAAKiV,kBAAkBxM,eAC1DzI,KAAAyN,gBAAuCzN,KAAKkN,sBAAsBzE,eAClEzI,KAAAwN,aAAqCxN,KAAKgN,mBAAmBvE,eAC7DzI,KAAAmQ,gBACEnQ,KAAKgQ,sBAAsBvH,eAC7BzI,KAAAoQ,eAAqCpQ,KAAKiQ,qBAAqBxH,eAQ7DzI,KAAKoV,cAAcO,IACjB3V,KAAK2U,cAAcnH,aAAatC,WAAU,SAAC0K,GACzC,OAAAhN,EAAKoE,mBAAmBlM,KAAK8U,EAAO,I,QAK1ClB,EAAAjV,UAAAoW,YAAA,WACE7V,KAAKsV,SAASxU,OACdd,KAAKoV,cAAcU,cACnB9V,KAAKwK,Y,EAIPkK,EAAAjV,UAAAsW,YAAA,WACsC,SAAhC/V,KAAK8U,iBAAiBlU,QAC1BZ,KAAKgW,oBACLhW,KAAK2U,cAAc/G,OACnB5N,KAAK4U,SAASpK,aAETxK,KAAK6U,YAAYrK,aACtBxK,KAAK8U,iBAAiBhU,KAAK,QAC3Bd,KAAK+U,kBAAkBjU,KAAK,IAC5Bd,KAAKgV,gBAAgBlU,KAAK,Q,EAGtB4T,EAAAjV,UAAAiL,QAAA,SACJ8B,EACAL,EACAlE,EACAgO,EACAtK,EACAuK,EACAC,EACAC,G,oDAkFDxN,EAAA5I,K,kDAhFC,GAAoC,SAAhCA,KAAK8U,iBAAiBlU,MAExB,OADAiE,QAAQkE,KAAK,4BACN,I,iBAqBK,O,sBAjBZ/I,KAAK8U,iBAAiBhU,KAAK,cAC3Bd,KAAK+U,kBAAkBjU,KAAK,iBAEZ0L,EAAOtH,QAAQ,MAAO,IACtB,kFAaE,GAAAmR,MAbF,kFAaiB,CAC/BC,OAAQ,OACRzK,QAbsC,CACtC,eAAgB,mBAChB0K,cAAe,UAAUpK,EACzB,mBAAoBiK,EACpBI,WAAcN,EACdO,SAAYN,EACZ,cAAelO,EACf,YAAa0D,GAObrK,KAAMuP,KAAK6F,UAAU,CACnBC,OAAQ1O,EACR2C,gBAAiBqL,EACjBW,MAAO,a,OAIX,KAVMzL,EAAMmF,EAQV1O,QAEOiV,GACP,MAAM,IAAIhE,MAAM,QAAQ1H,EAAI2L,QAGjB,SAAM3L,EAAI4L,Q,OAGvB,GAHMA,EAAOzG,EAAgB1O,SAEvByO,EAAQ0G,aAAA,EAAAA,EAAMC,YACW,iBAAV3G,EACnB,MAAM,IAAIwC,MAAM,yB,OAIlB7S,KAAK4U,SAAS1E,aACXlE,KAAKiL,OAAK,GAAIC,YAAUlX,KAAKsV,WAC7BpK,WAAU,SAAO6F,GAAW,OAAA5Q,EAAAyI,OAAA,qB,wDAEzB,O,sBAAA,GAAM5I,KAAKmX,cAAcpG,I,cAAzBT,EAAA1O,O,aAKA,O,WAHAiD,QAAQ3B,MAAM,qBAAsByQ,GACpC3T,KAAK8U,iBAAiBhU,KAAK,SAC3Bd,KAAK+U,kBAAkBjU,KAAK,qBAC5B,GAAMd,KAAKwK,c,OACX,MADA8F,EAAA1O,OACM+R,E,uBAET,IAGH3T,KAAKoV,cAAcO,IACjB3V,KAAK4U,SAASzE,gBACXnE,KAAKkL,YAAUlX,KAAKsV,WACpBpK,WAAU,SAACzJ,GAAM,OAAAmH,EAAKoH,sBAAsBlP,KAAKW,EAAE,KAExDzB,KAAKoV,cAAcO,IACjB3V,KAAK4U,SAASxE,eACXpE,KAAKkL,YAAUlX,KAAKsV,WACpBpK,WAAU,SAACzJ,GAAM,OAAAmH,EAAKqH,qBAAqBnP,KAAKW,EAAE,KAIvDzB,KAAK4U,SAASlK,QAAQ2F,G,aAItB,O,WAFAxL,QAAQ3B,MAAM,gCAAiCkU,GAC/CpX,KAAK8U,iBAAiBhU,KAAK,SAC3B,GAAMd,KAAKwK,c,OAEX,MAFA8F,EAAA1O,OACA5B,KAAK+U,kBAAkBjU,KAAK,qBACtBsW,E,oBAET,G,EAEa1C,EAAajV,UAAA0X,cAAb,SAAcpG,G,4CA8C3BnI,EAAA5I,K,kDA5CC,MAAM,GAAAA,KAAK6U,YAAYnK,QAAQqG,I,cAA/BT,EAAA1O,OAGA5B,KAAK6U,YAAY1C,aACdnG,KAAKqL,UAAO,SAACzU,GAAwB,OAAK,MAALA,CAAS,IAAGqU,OAAK,IACtD/L,WAAU,SAACyC,GACV/E,EAAK+L,cAAcjH,MAAMC,EAC3B,IAIF3N,KAAKoV,cAAcO,IACjB3V,KAAK6U,YAAY5C,cAAc/G,WAAU,SAACtI,GACxC,OAAAgG,EAAKsE,sBAAsBpM,KAAK8B,EAAE,KAGtC5C,KAAKoV,cAAcO,IACjB2B,gBAAc,CACZtX,KAAK6U,YAAY7C,UACjBhS,KAAK6U,YAAY5C,gBAChB/G,WAAU,SAACoF,GAAA,IAAAa,EAAApO,EAAAuN,EAAA,GAACiH,EAAGpG,EAAA,GAAMA,EAAA,GAEpBvI,EAAKkM,iBAAiBhU,KAAK,aAClByW,EACT3O,EAAKkM,iBAAiBhU,KAAK,WAEK,YAAhC8H,EAAKkM,iBAAiBlU,OACU,cAAhCgI,EAAKkM,iBAAiBlU,OAEtBgI,EAAKkM,iBAAiBhU,KAAK,Y,KAKjCd,KAAKoV,cAAcO,IACjB3V,KAAK6U,YAAY3C,UAAUhH,WAAU,SAACmJ,GACpC,OAAAzL,EAAKqM,kBAAkBnU,KAAKuT,EAAM,KAItCrU,KAAK8U,iBAAiBhU,KAAK,aAC3Bd,KAAK+U,kBAAkBjU,KAAK,aAC5Bd,KAAKkV,cAAgB7O,KAAKD,MAC1BpG,KAAKwX,qB,OACN,G,EAEK9C,EAAAjV,UAAA+K,WAAA,W,0FAKJ,OAJAxK,KAAKgW,oBACLhW,KAAK2U,cAAc/G,OAGnB,GAAM5N,KAAK6U,YAAYrK,c,cAAvB8F,EAAA1O,OACA5B,KAAK4U,SAASpK,aAEdxK,KAAK8U,iBAAiBhU,KAAK,SAC3Bd,KAAK+U,kBAAkBjU,KAAK,c,OAC7B,G,EAED4T,EAAAjV,UAAAgY,UAAA,WACE,IAAMC,EAAU1X,KAAKiV,kBAAkBrU,MACvCZ,KAAK6U,YAAYT,UAAUsD,E,EAGrBhD,EAAAjV,UAAA+X,mBAAA,eAaP5O,EAAA5I,KAZO2X,EAAiB,WACrB,GAAI/O,EAAKsM,cAAgB,EAAG,CAC1B,IAAM0C,EAAUjQ,KAAKC,OAAOvB,KAAKD,MAAQwC,EAAKsM,eAAiB,KACzDlP,EAAU2B,KAAKC,MAAMgQ,EAAU,IAC/BC,EAAUD,EAAU,GAC1BhP,EAAKoM,gBAAgBlU,KAChBkF,EAAO,IAAIlG,OAAO+X,GAASC,SAAS,EAAG,KAE7C,CACH,EACAH,IACA3X,KAAKmV,iBAAmB/J,YAAYuM,EAAgB,I,EAG9CjD,EAAAjV,UAAAuW,kBAAA,WACFhW,KAAKmV,mBACP4C,cAAc/X,KAAKmV,kBACnBnV,KAAKmV,iBAAmB,K,IAzO9B,G,oJAHC,CAAA3P,KAAAC,aAAWC,KAAA,EACVC,WAAY,W,yCA7BL+G,G,MACAmD,G,MACA0B,G,MCWIyG,EAAqB,IAAIC,iBAAiC,sBAC1DC,EAA6B,IAAID,iBAA2B,8BCNzEE,EAAA,WAiBE,SAAAA,EACSC,EACAzD,EACC0D,GAFDrY,KAAiBoY,kBAAjBA,EACApY,KAAa2U,cAAbA,EACC3U,KAAQqY,SAARA,EAnBArY,KAAA2O,MAAQ,IAAI2J,eAKbtY,KAAM2L,OAAW,GACjB3L,KAAUkW,WAAW,GACrBlW,KAAQmW,SAAW,GACnBnW,KAAeoW,gBAAW,YAC1BpW,KAASuY,UAAW,eACpBvY,KAASwY,UAAW,sBAGrBxY,KAAcyY,eAA4B,KAC1CzY,KAAe0Y,gBAAwB,KAStC1Y,KAAgB2Y,iBAAG,wGAE5B3Y,KAAS4Y,UAAc,OACvB5Y,KAAU6Y,WAAW,GACrB7Y,KAAQ8Y,SAAW,QACnB9Y,KAAU+Y,YAAY,EACtB/Y,KAAcgZ,gBAAY,EAC1BhZ,KAAWiZ,YAAa,GACxBjZ,KAAUmP,YAAY,EAGdnP,KAAoBkZ,sBAAY,EAEhClZ,KAAaoV,cAAmB,GAyExCpV,KAAYmZ,cAAY,C,QAvExBhB,EAAA1Y,UAAA2Z,SAAA,e,YAgECxQ,EAAA5I,KA9DCA,KAAKyY,eAAiBzY,KAAKqY,SAAStM,IAAIiM,EAAoB,MAC5DhY,KAAK0Y,gBAAkB1Y,KAAKqY,SAAStM,IAAImM,EAA4B,MACjElY,KAAKyY,iBACPzY,KAAKwM,OAASxM,KAAKyY,eAAejM,OAClCxM,KAAKmM,MAAQnM,KAAKyY,eAAetM,MACjCnM,KAAKiI,MAAQjI,KAAKyY,eAAexQ,MACjCjI,KAAKiW,eAAiBjW,KAAKyY,eAAexC,eAC1CjW,KAAK2L,OAAuC,QAA9B2E,EAAAtQ,KAAKyY,eAAe9M,cAAU,IAAA2E,IAAA,GAC5CtQ,KAAKkW,WAA+C,QAAlC/E,EAAAnR,KAAKyY,eAAevC,kBAAc,IAAA/E,IAAA,GACpDnR,KAAKmW,SAA2C,QAAhC/D,EAAApS,KAAKyY,eAAetC,gBAAY,IAAA/D,IAAA,GAChDpS,KAAKoW,gBAAyD,QAAvCiD,EAAArZ,KAAKyY,eAAerC,uBAAmB,IAAAiD,IAAA,YAC9DrZ,KAAKuY,UAAyC,QAA7Be,EAAAtZ,KAAKyY,eAAeF,iBAAS,IAAAe,IAAItZ,KAAKuY,UACvDvY,KAAKwY,UAAyC,QAA7Be,EAAAvZ,KAAKyY,eAAeD,iBAAS,IAAAe,IAAIvZ,KAAKwY,UACvDxY,KAAKwZ,YAAcxZ,KAAKyY,eAAee,aAIzCxZ,KAAKoV,cAAc3S,KACjBzC,KAAKoY,kBAAkB7C,WAAWrK,WAAU,SAAAwD,GAC1C9F,EAAKgQ,UAAYlK,EACjB9F,EAAKuG,WAAuB,YAAVT,EACJ,cAAVA,GAAmC,YAAVA,IAC3B9F,EAAKsQ,sBAAuB,GAEhB,SAAVxK,GAA8B,UAAVA,IACtB9F,EAAKsQ,sBAAuB,E,KAKlClZ,KAAKoV,cAAc3S,KACjBzC,KAAKoY,kBAAkB5C,YAAYtK,WAAU,SAAA+F,GAC3CrI,EAAKiQ,WAAa5H,C,KAItBjR,KAAKoV,cAAc3S,KACjBzC,KAAKoY,kBAAkB3C,UAAUvK,WAAU,SAAA4N,GACzClQ,EAAKkQ,SAAWA,C,KAIpB9Y,KAAKoV,cAAc3S,KACjBzC,KAAKoY,kBAAkB1C,YAAYxK,WAAU,SAAAmJ,GAC3CzL,EAAKmQ,WAAa1E,C,KAItBrU,KAAKoV,cAAc3S,KACjBzC,KAAKoY,kBAAkB3K,gBAAgBvC,WAAU,SAAAuO,GAC/C7Q,EAAKoQ,eAAiBS,C,KAI1BzZ,KAAKoV,cAAc3S,KACjBzC,KAAKoY,kBAAkB5K,aAAatC,WAAU,SAAA0K,GAC5ChN,EAAKqQ,YAAcrD,C,KAKvB5V,KAAKoY,kBAAkBrC,a,EAGzBoC,EAAA1Y,UAAAoW,YAAA,WACE7V,KAAKoV,cAAcxC,SAAQ,SAAA8G,GAAO,OAAAA,EAAI5D,aAAJ,IAClC9V,KAAKwK,Y,EAKD2N,EAAA1Y,UAAAka,UAAA,W,gGACJ,GAAI3Z,KAAKmZ,cAAoC,SAAnBnZ,KAAK4Y,WAA2C,UAAnB5Y,KAAK4Y,UAAwB,MAAO,IAC3F5Y,KAAKmZ,cAAe,E,iBAElB,O,uBAAA,GAAMnZ,KAAKoY,kBAAkB1N,QAC3B1K,KAAKwM,OACLxM,KAAKmM,MACLnM,KAAKiI,MACLjI,KAAKiW,eACLjW,KAAK2L,OACL3L,KAAKkW,WACLlW,KAAKmW,SACLnW,KAAKoW,kB,cARPwD,EAAAhY,O,+BAWAiD,QAAQ3B,MAAM,iCAAkCkU,G,oBAEhDpX,KAAKmZ,cAAe,E,wBAEvB,G,EAEKhB,EAAA1Y,UAAA+K,WAAA,W,mFACJ,gBAAMxK,KAAKoY,kBAAkB5N,c,cAA7BoP,EAAAhY,O,OACD,G,EAEDuW,EAAA1Y,UAAAgY,UAAA,WACEzX,KAAKoY,kBAAkBX,W,EAIzBU,EAAiB1Y,UAAAoa,kBAAjB,SAAkBC,GAEhB,OAAO,EADGnS,KAAKgI,IAAI,IAAKhI,KAAKiI,IAAI,EAAGkK,UAAS,IAC7B,IAAO,E,EAIzB1a,OAAAkS,eAAI6G,EAAW1Y,UAAA,eAAfsM,IAAA,WACE,MAAuB,eAAnB/L,KAAK4Y,UAAmC5Y,KAAK6Y,YAAc,gBACxC,YAAnB7Y,KAAK4Y,UAAgC,aAClB,cAAnB5Y,KAAK4Y,UAAkC,YACpB,cAAnB5Y,KAAK4Y,UACA5Y,KAAKkZ,qBAAuB,YAAc,YAE5ClZ,KAAK6Y,YAAc,E,kCAI5BV,EAAA1Y,UAAAsa,UAAA,WACE/Z,KAAKoY,kBAAkBrC,cACvB/V,KAAK2Z,W,EAIPxB,EAAA1Y,UAAAua,WAAA,WACEha,KAAKia,S,EAIP9B,EAAA1Y,UAAAya,OAAA,WACEla,KAAKwK,Y,EAGP2N,EAAA1Y,UAAAwa,QAAA,W,MACEja,KAAKwK,aACL,QAAA8F,EAAAtQ,KAAK0Y,uBAAL,IAAApI,KAAA3Q,KAAAK,MACAA,KAAK2O,MAAM3D,M,IAjLf,G,cALC,CAAAxF,KAAA2U,YAAUzU,KAAA,EACT0U,SAAU,4BACVC,SAAiD,wjU,ykKAN1C3F,G,MACAhI,G,MAH2D4N,Y,iCAYjEC,W,cACAC,U,aACAA,U,aACAA,U,sBACAA,U,cACAA,U,kBACAA,U,gBACAA,U,uBACAA,U,iBACAA,U,iBACAA,U,mBACAA,WCiCH,IAAAC,EAAA,WA0HE,SAAAA,EACUC,EACAC,EACAC,EACArP,EACAsP,EACAC,EACAC,EACAC,EACApR,EACAqR,EACA7C,EACA8C,EACAC,EACA9C,GAdV,IAqBCzP,EAAA5I,KApBSA,KAAE0a,GAAFA,EACA1a,KAAU2a,WAAVA,EACA3a,KAAG4a,IAAHA,EACA5a,KAAIuL,KAAJA,EACAvL,KAAS6a,UAATA,EACA7a,KAAU8a,WAAVA,EACA9a,KAAQ+a,SAARA,EACA/a,KAAagb,cAAbA,EACAhb,KAAmB4J,oBAAnBA,EACA5J,KAAkBib,mBAAlBA,EACAjb,KAAiBoY,kBAAjBA,EACApY,KAAOkb,QAAPA,EACAlb,KAAgBmb,iBAAhBA,EACAnb,KAAQqY,SAARA,EA/HFrY,KAAiBob,kBAAG,uBAC5Bpb,KAAeqb,iBAAG,EACTrb,KAAWsb,YAAW,WA4CrBtb,KAAAub,cAAgB,IAAIjD,eACpBtY,KAAAwb,aAAe,IAAIlD,eACnBtY,KAAAyb,SAAW,IAAInD,eACftY,KAAA0b,eAAiB,IAAIpD,eACrBtY,KAAA2b,SAAW,IAAIrD,eACftY,KAAA4b,gBAAkB,IAAItD,eACtBtY,KAAA6b,gBAAkB,IAAIvD,eACtBtY,KAAA8b,aAAe,IAAIxD,eACnBtY,KAAA+b,YAAc,IAAIzD,eAE5BtY,KAAUgc,WAAG,8BACbhc,KAAmBic,oBAAG,mBACtBjc,KAAuBkc,wBAAG,uBAC1Blc,KAAqBmc,sBAAG,oBACxBnc,KAAUoc,WAAW,GACrBpc,KAAOqc,QAAU,GACjBrc,KAAAsc,QAAU,IAAIC,YACdvc,KAAYwc,cAAY,EACxBxc,KAAWyc,YAAW,GACtBzc,KAAgB0c,kBAAY,EAC5B1c,KAAK2c,MAAW,GAChB3c,KAAa4c,eAAG,EAChB5c,KAAO6c,SAAY,EACnB7c,KAAI8c,KAAW,OACf9c,KAAY+c,aAAU,GACtB/c,KAAkBgd,mBAAG,EACrBhd,KAAQid,SAAW,GACnBjd,KAAckd,gBAAY,EAC1Bld,KAAWmd,aAAY,EACvBnd,KAAsBod,uBAAkB,KACxCpd,KAAWqd,YAAW,EACtBrd,KAAQsd,SAAG,GASXtd,KAAaud,cAAW,GAUxBvd,KAA6Bwd,8BAAW,EACxCxd,KAAqByd,sBAAW,GAQhCzd,KAAc0d,eAAW,GACzB1d,KAAkB2d,mBAAW,GAC7B3d,KAAA4d,OAAiB,aAEjB5d,KAAgB6d,kBAAY,EACpB7d,KAAoB8d,qBAAsB,KAC1C9d,KAA4B+d,6BAAmB,GA0DvD/d,KAAoBge,qBAAQ,YA+DpBhe,KAAqBie,uBAAG,EAkdhCje,KAAeke,iBAAG,EAmGlBle,KAAAme,cAAgB,SAACxQ,GACf,IAAMyQ,EAASzQ,EAAO0Q,YAChBC,EAA2B,GAYjC,OAVAF,EAAOG,OAAO3P,OAAM,SAAC5F,GACfA,GACFnE,QAAQ3B,MAAM,yBAA0B8F,GAG1CJ,EAAKsV,iBAAkB,EACvBtV,EAAK4V,gBAEP,IAEO,IAAIC,eAAe,CACxB/Q,MAAO,SAACgR,GACN,OAAO9V,EAAK+V,KAAKD,EAAYN,EAAQE,E,GAG3C,EA8TAte,KAAuB4e,wBAAQ,GAC/B5e,KAAqB6e,uBAAS,EA+O9B7e,KAAc8e,gBAAY,EAE1B9e,KAAc+e,eAAG,GACjB/e,KAAWgf,aAAG,EAoEdhf,KAAeif,iBAAG,EAIlBjf,KAAekf,iBAAG,EAiKlBlf,KAAWmf,aAAG,EACdnf,KAAmBof,qBAAG,EACtBpf,KAAoBqf,sBAAG,EAyCvBrf,KAAQsf,SAAG,CAAElZ,KAAK,IAAIC,MAAOkZ,eAgB7Bvf,KAAkBwf,mBAAQ,GAW1Bxf,KAAkByf,oBAAG,EAwCrBzf,KAAY0f,cAAG,EAyZf1f,KAAwB2f,yBAAW,GAh9DjC3f,KAAK4f,SAAW,IAAIC,aAAW,K,QAMjCpF,EAAchb,UAAAkF,eAAd,SAAeC,GACb,OAAO5E,KAAKib,mBAAmBtW,eAAeC,E,EAEhD6V,EAAWhb,UAAAqgB,YAAX,SAAYC,GAENA,EAAQlc,SAAWkc,EAAQlc,QAAQmc,cACrChgB,KAAKib,mBAAmBxW,WAAWsb,EAAQlc,QAAQmc,cAGjDD,EAAQE,UACNF,EAAQE,SAASD,cAAgBD,EAAQE,SAASC,gBACpDlgB,KAAKigB,SAAWF,EAAQE,SAASD,aAEjCnb,QAAQC,IAAI,mBAAoB9E,KAAKmgB,gBACrCtb,QAAQC,IAAI,QAAS9E,KAAK4Q,KAC1B/L,QAAQC,IAAI,SAAU9E,KAAKogB,MACvBpgB,KAAKqgB,QACHrgB,KAAKmgB,eACPngB,KAAKsgB,aAAatgB,KAAK4Q,IAAK5Q,KAAKogB,MAEjCpgB,KAAKugB,UAAUvgB,KAAK4Q,OASxBmP,EAAQ1T,OAAS0T,EAAQ1T,MAAM2T,cAAgBD,EAAQ1T,MAAM6T,gBAC/DlgB,KAAKie,uBAAwB,E,EAMjCxD,EAAAhb,UAAA2Z,SAAA,eAyDCxQ,EAAA5I,KAvDKA,KAAK6D,SACP7D,KAAKib,mBAAmBxW,WAAWzE,KAAK6D,SAG1C7D,KAAKwgB,YAAcxgB,KAAKygB,MAAQrZ,EAAkBN,EAElD,IAAM8E,EAASiC,OAAO6S,SAASC,SAI3B/U,EAAOgV,SAAS,wBAClB5gB,KAAKge,qBAAuB,gBACnBpS,EAAOgV,SAAS,oBACzB5gB,KAAKge,qBAAuB,YACnBpS,EAAOgV,SAAS,gBACzB5gB,KAAKge,qBAAuB,WAM9Bhe,KAAK6gB,kBAAkB7gB,KAAKqd,aAC5Brd,KAAK8gB,iBAAiB5V,WACpB,SAACC,GACCvC,EAAKgS,IAAImG,eAETnY,EAAKoY,mBAAmB9V,WACtB,SAAC+V,GACCrY,EAAKiU,SAAU,EACfjU,EAAKsY,eAAeD,GACpBrY,EAAKgS,IAAImG,c,IAEX,SAAC/X,GACCnE,QAAQ3B,MAAM,+BAAgC8F,EAChD,G,IAGJ,SAACA,GACCnE,QAAQ3B,MAAM,+BAAgC8F,EAChD,IAIFhJ,KAAK4a,IAAImG,eAET/gB,KAAK2a,WACFjP,8BACC1L,KAAKiI,MACLjI,KAAK2L,OACL3L,KAAKge,sBAEN9S,WAAU,SAACiB,GACVvD,EAAK+U,mBAAqBxR,EAC1BvD,EAAKuY,2BAA2BhV,EAClC,G,EAWIsO,EAAAhb,UAAA2hB,iBAAA,YACFphB,KAAKie,uBAA0Bje,KAAKqM,QACxCrM,KAAKie,uBAAwB,EAC7Bje,KAAKqhB,mB,EAGP5G,EAAAhb,UAAA4hB,iBAAA,eAoBCzY,EAAA5I,KAnBC,IACEA,KAAKgb,cAAczQ,4BACL,CAAd,MAAOrH,GAAO,CAChBoe,YAAW,WACT1Y,EAAKoS,cAAcvQ,0BACnB6W,YAAW,WACTzc,QAAQC,IAAI,YACZ,IAAM8F,EAAkBhC,EAAKgB,oBAAoB5B,OAAOY,EAAKX,OAE7DW,EAAKoS,cAAcrQ,+BACjB/B,EAAKX,MACL2C,EACAhC,EAAKyD,OAEPiV,YAAW,WACT1Y,EAAK2Y,e,GACJ,I,GACF,I,GACF,I,EAML9G,EAAAhb,UAAA8hB,cAAA,eA6IC3Y,EAAA5I,KA5IKA,KAAKwhB,mBACPxhB,KAAKwhB,kBAAkB1L,cAEzBjR,QAAQC,IAAI,iBACZ9E,KAAKwhB,kBAAoBxhB,KAAK4J,oBAC3BpB,8BACA0C,WACC,SAACC,G,gBAIC,GAHAtG,QAAQC,IAAI,0BACZD,QAAQC,IAAIqG,GAEW,QAAnBgG,EAAM,QAANb,EAAAnF,aAAG,EAAHA,EAAKtI,SAAC,IAAAyN,OAAA,EAAAA,EAAEmR,mBAAW,IAAAtQ,OAAA,EAAAA,EAAEuQ,YAAa,CAC9B,IAAAC,EAOM,QAARvP,EAAAjH,aAAG,EAAHA,EAAKtI,SAAG,IAAAuP,OAAA,EAAAA,EAAAqP,YANVG,EAAUD,EAAAC,WACVC,EAAMF,EAAAE,OACNC,EAAWH,EAAAG,YACXC,EAAmBJ,EAAAK,oBACnBC,EAAqBN,EAAAM,sBACrBC,EAAUP,EAAAO,WAGZtZ,EAAK4U,8BAAgCoE,EACrChZ,EAAK6U,sBAAwBqE,EAE7B,IAAMK,EAAcvZ,EAAKwZ,yBAAyBC,QAAQC,WACxD,SAACpT,GAAM,OAAAA,EAAEqT,MAAQR,CAAmB,KAGjB,IAAjBI,GACFvZ,EAAKwZ,yBAAyBC,QAAQF,GAAqB,OACzDN,EACFjZ,EAAKwZ,yBAAyBC,QAAQF,GACnB,gBACfvb,EAAiBgC,EAAKzC,SAAU+b,IAEpCrd,QAAQ3B,MAAM,oBAAoB4e,EAAW,cAG/ClZ,EAAK4Z,gCACH5Z,EAAKwZ,yBAEmC,KAAtCxZ,EAAK4U,gCACP5U,EAAKyT,QAAQzT,EAAKyT,QAAQ7Z,OAAS,GAAwB,oBACzDyf,EACFrZ,EAAKsV,iBAAkB,EACvBtV,EAAK6Z,mBAAoB,EACzB7Z,EAAK8Z,mBAGP9Z,EAAKgS,IAAI+H,eACV,MAAM,GAAY,QAARtJ,EAAAlO,aAAG,EAAHA,EAAKtI,SAAG,IAAAwW,OAAA,EAAAA,EAAAoI,YAAa,CACxB,IAAAmB,EAUI,QAANtJ,EAAAnO,aAAG,EAAHA,EAAKtI,SAAC,IAAAyW,OAAA,EAAAA,EAAEmI,YAPVoB,GAFeD,EAAAhY,gBACTgY,EAAAjM,OACIiM,EAAAE,YACVC,EAAMH,EAAAG,OACNC,EAAWJ,EAAAI,YACXC,EAAcL,EAAAK,eACdC,EAAMN,EAAAM,OACNC,EAAgBP,EAAAO,iBAChBC,EAAWR,EAAAQ,YAEbve,QAAQC,IAAI,eACZD,QAAQC,IAAY,QAARyU,EAAApO,aAAA,EAAAA,EAAKtI,SAAG,IAAA0W,OAAA,EAAAA,EAAAkI,aACpB,IAAI4B,EAAqBza,EAAKyT,QAAQjX,MACpC,SAAC5F,GAAM,OAAAA,EAAE8jB,KAAOT,CAAT,IAEThe,QAAQC,IAAI8D,EAAKyT,SACZgH,IACHxe,QAAQC,IAAI,eACZD,QAAQC,IAAI+d,GACZQ,EAAqB,CACnBC,IAAKT,EACLrd,KAAM,KACN+d,KAAMrd,EAAU0C,EAAKzC,WAGvByC,EAAKyT,QAAQ5Z,KAAK4gB,GAElBza,EAAKwU,uBAAyBxU,EAAKyT,QAAQ7Z,OAAS,EACpDqC,QAAQC,IAAI,eACZD,QAAQC,IAAI+d,GACZja,EAAKgS,IAAI+H,iBAIPM,GAAkB1jB,MAAMikB,QAAQP,KAClCpe,QAAQC,IAAI,uBAAwBme,GACpCI,EAAmBI,YAAcR,EACjCra,EAAKgS,IAAI+H,iBAGPK,GAAezjB,MAAMikB,QAAQR,KAC/Bne,QAAQC,IAAI,eAAgBke,GAC5BK,EAAmBK,YAAcV,EACjCK,EAAmBM,iBAAmBX,aAAA,EAAAA,EAAavf,MAAM,EAAG,GAC5D4f,EAAmBO,iBAAmBZ,aAAW,EAAXA,EAAavf,MAAM,GACzDmF,EAAKgS,IAAI+H,iBAGPI,IACFna,EAAKsV,iBAAkB,EACvBrZ,QAAQC,IAAI,UAAWie,GAEvBM,EAAmB9a,QACjBK,EAAKib,yBAAyBd,GAChCna,EAAKgS,IAAI+H,gBACT/Z,EAAK4V,iBACL5V,EAAK8Z,mBAGHQ,GAAU3jB,MAAMikB,QAAQN,KAC1Bre,QAAQC,IAAI,UAAWoe,GACvBG,EAAmBH,OAASA,EAC5Bta,EAAKgS,IAAI+H,iBAGPQ,GAAoB5jB,MAAMikB,QAAQL,KACpCte,QAAQC,IAAI,oBAAqBqe,GACjCE,EAAmBS,gBAAkBX,EACrCva,EAAKgS,IAAI+H,iBAGPS,GAAe7jB,MAAMikB,QAAQJ,KAC/Bve,QAAQC,IAAI,eAAgBse,GAC5BC,EAAmBU,iBAAmBX,EACtCxa,EAAKgS,IAAI+H,gBAKZ,MACC9d,QAAQkE,KAAK,yC,IAGjB,SAACC,GACCJ,EAAK4Y,kBAAkB1L,cACvBjR,QAAQ3B,MAAM,qCAAsC8F,EACtD,G,EAINyR,EAAyBhb,UAAAukB,0BAAzB,aACAvJ,EAAAhb,UAAAwkB,YAAA,SAAY1U,EAAW/J,GACbA,C,EAWViV,EAAAhb,UAAAoW,YAAA,WACM7V,KAAKwhB,mBACPxhB,KAAKwhB,kBAAkB1L,cAEzB9V,KAAK+d,6BAA6BnL,SAAQ,SAAA8G,GAAO,OAAAA,EAAI5D,aAAJ,IACjD9V,KAAKgb,cAAczQ,4B,EAGrBkQ,EAAiBhb,UAAAohB,kBAAjB,SAAkBqD,GAChB,IAAIlkB,KAAK6c,QAAT,CACA7c,KAAKqd,YAAc6G,EACnB,IAAMC,EAAUC,SAASC,cAAc,yBAIvC,OAFAF,WAASG,UAAUC,OAAO,WAAY,WAAY,WAE1CL,GACN,KAAK,EACHC,WAASG,UAAU3O,IAAI,YACvB,MACF,KAAK,EACHwO,WAASG,UAAU3O,IAAI,YACvB,MACF,KAAK,EACHwO,WAASG,UAAU3O,IAAI,WAdT,C,EAqBpB8E,EAAAhb,UAAA+kB,aAAA,WACMxkB,KAAK6c,UACT7c,KAAKkd,gBAAiB,EACtBld,KAAKqc,QAAU,GACfrc,KAAKqc,QAAQ5Z,KAAK,CAChB+C,KAAM,KACN+C,QAASvI,KAAKyc,YAEd8G,KAAMrd,EAAUlG,KAAKmG,YAEvBnG,KAAKykB,mBAAmBvZ,Y,EAG1BuP,EAAAhb,UAAAglB,iBAAA,WACE,IAAM5Y,EAAU,IAAIC,cAAY,CAC9B,eAAgB,mBAChB,YAAa9L,KAAK2L,OAClB,cAAe3L,KAAKiI,MACpB,mBAAoBjI,KAAKge,uBAErB9U,EAASlJ,KAAKwgB,YAAYxZ,SAA8B,sBAAAhH,KAAKiI,MAAK,IAAIjI,KAAK0kB,OACjF,OAAO1kB,KAAKuL,KAAKoZ,KAAKzb,EAAK,CAAE2C,QAAOA,IAAIG,KACtC4Y,aAAU,SAACzZ,GACT,OAAO0Z,KAAG1Z,EACZ,IACA2Z,cAAW,SAAC5hB,GACV,OAAO2hB,KAAG,K,MAKhBpK,EAAAhb,UAAAslB,eAAA,WACE/kB,KAAK+b,YAAY/Q,M,EAEnByP,EAAAhb,UAAAqhB,eAAA,eAiCClY,EAAA5I,KAhCCA,KAAK6c,SAAU,EACf,IAAMhR,EAAU,IAAIC,cAAY,CAC9B,YAAa9L,KAAK2L,OAClB,cAAe3L,KAAKiI,MACpB,mBAAoBjI,KAAKge,uBAErB9U,EAASlJ,KAAKwgB,YAAYxZ,SAAwB,gBAAAhH,KAAKiI,MAC7D,OAAOjI,KAAKuL,KAAKQ,IAAI7C,EAAK,CAAE2C,QAAOA,IAAIG,KACrC4Y,aAAU,SAACzZ,G,MAgBT,OAfAvC,EAAKoc,QAAUpc,EAAKjE,eAAewG,EAAIoX,MACvC3Z,EAAKqc,QAAU9Z,EAAI+Z,KACnBtc,EAAKuc,UAAYha,aAAA,EAAAA,EAAKia,OACtBxc,EAAK6T,YAActR,EAAIka,SAEvBzc,EAAK0c,oBAA2C,QAAtBhV,EAAAnF,aAAA,EAAAA,EAAKoa,yBAAiB,IAAAjV,OAAA,EAAAA,EAAE9N,QAC9C2I,EAAIoa,kBACJ,CACE3c,EAAKjE,eACH,6DAGRiE,EAAKmU,aAAe5R,EAAIqa,aACxB5c,EAAKgS,IAAImG,eACTnY,EAAKiU,SAAU,EACRgI,KAAG1Z,EACZ,IACA2Z,cAAW,SAAC5hB,GAGV,OAFA2B,QAAQ3B,MAAM,kCAAmCA,GACjD0F,EAAKiU,SAAU,EACRgI,KAAG,K,MAKhBpK,EAAAhb,UAAAuhB,iBAAA,WACEhhB,KAAK6c,SAAU,EAEf7c,KAAKylB,gBAAkBzlB,KAAK4J,oBAAoB5B,OAAOhI,KAAKiI,OAAO,GACnEjI,KAAKud,cAAgBvd,KAAK4J,oBAAoBxB,cAC5CpI,KAAKiI,OACL,GAEF,IAAMiB,EAASlJ,KAAKwgB,YAAYxZ,SAA0B,kBAAAhH,KAAKylB,gBAAe,eAAezlB,KAAKud,cAC5F1R,EAAU,IAAIC,cAAY,CAC9B4Z,OAAQ,mBACR,YAAa1lB,KAAK2L,OAClB,cAAe3L,KAAKiI,MACpB,mBAAoBjI,KAAKge,uBAG3B,OAAOhe,KAAKuL,KACTQ,IAAI7C,EAAK,CAAE2C,QAAOA,IAClBG,KAAK8Y,aAAW9kB,KAAK2lB,YAAiB,sB,EAGnClL,EAAAhb,UAAAkmB,YAAA,SAAeC,EAAyB3kB,GAC9C,YADqB,IAAA2kB,MAAuB,aACrC,SAAC1iB,GAEN,OADA2B,QAAQ3B,MAAS0iB,EAAS,YAAY1iB,EAAMqF,SACrCsc,KAAG5jB,EACZ,C,EAuBFwZ,EAAchb,UAAAyhB,eAAd,SAAe2E,GAAf,I,EA6CCjd,EAAA5I,KA5CCA,KAAKqc,QAAQ5Z,KAAK,CAChB+C,KAAM,KACN+C,QAASvI,KAAKyc,YACd8G,KAAMrd,EAAUlG,KAAKmG,YAEnB0f,IAA0B,QAAjBvV,EAAAuV,aAAA,EAAAA,EAAOC,gBAAU,IAAAxV,OAAA,EAAAA,EAAA9N,UAC5BqjB,WAAOC,SAASlT,SAAQ,SAACwN,GAYvB,GAXiB,QAAbA,EAAK2F,MACPnd,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,OACN+C,QAASK,EAAKib,yBAAyBzD,EAAK4F,MAC5CzC,KAAM3c,EAAiBgC,EAAKzC,SAAUia,EAAK6F,iBAC3CC,QAAQ,EACR7K,iBAAiB,EACjB8K,oBAAqB/F,EAAK+F,oBAC1B7C,IAAKlD,EAAKkD,MAGG,MAAblD,EAAK2F,KAAc,CACrB,IAAIrC,EAActD,EAAKgG,UAAY,GAC/BzC,EAAmBvD,EAAKgG,SAAS3iB,MAAM,EAAG,GAC1CmgB,EAAmBxD,EAAKgG,SAAS3iB,MAAM,GAE3CmF,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,KACN+C,QAASK,EAAKib,yBAAyBzD,EAAK4F,MAC5ClC,gBAAiB1D,EAAKiG,gBACtBnD,OAAQ9C,EAAKkG,OACb7C,YAAarD,EAAKmG,YAClB7C,YAAaA,EACbC,iBAAkBA,EAClBC,iBAAkBA,EAClBL,KAAM3c,EAAiBgC,EAAKzC,SAAUia,EAAK6F,iBAC3CC,QAAQ,EACR7K,iBAAiB,EACjBiI,IAAKlD,EAAKkD,MAEZ1a,EAAKwU,uBAAyBxU,EAAKyT,QAAQ7Z,OAAS,CACrD,CACH,IACAxC,KAAKkd,gBAAiB,GAExBld,KAAKwe,iBACLxe,KAAK4a,IAAImG,c,EAGXtG,EAAchb,UAAA+mB,eAAd,SAAeje,GACb,KAAKA,IAAaA,aAAO,EAAPA,EAAS/F,QAAS,GAClC,MAAO,GAMT+F,EAAUA,EAAQ6K,OAElB,IAAMqT,EAAoB,yBACpBC,EAAW,yCAEjB,GAAID,EAAkBE,KAAKpe,GAAU,CACnC,IAAMqe,EAAOre,EAAQrD,QACnBuhB,EACA,uCAGF,OAAOzmB,KAAK6mB,aAAaD,EAC1B,CAED,GAAIF,EAASC,KAAKpe,GAAU,CACpBqe,EAAOre,EAAQrD,QACnBwhB,EACA,uCAGF,OAAO1mB,KAAK6mB,aAAaD,EAC1B,CAaD,OAPAre,GAFAA,GAFAA,EAAUA,EAAQrD,QAAQ,kBAAmB,SAE3BA,QAAQ,iBAAkB,wBAE1BA,QAAQ,uBAAuB,SAAC4hB,EAAOC,EAAQ9V,GAC/D,IAAM6I,EAAQiN,EAAOvkB,OACrB,MAAO,KAAKsX,EAAK,IAAI7I,EAAU,MAAA6I,EAAK,GACtC,IAEA9Z,KAAK4a,IAAImG,eACgB/gB,KAAK6mB,aAAate,E,EAI7CkS,EAAAhb,UAAAunB,mBAAA,eAcCpe,EAAA5I,KAZGA,KAAK8a,WAAWmM,cAAcC,iBAAiB,kBACnCtU,SAAQ,SAACuU,GACrBA,EAAKC,iBACH,QACAxe,EAAKye,gBAAgBC,KAAK1e,EAAM,WAEpC,G,EAQF6R,EAAYhb,UAAAonB,aAAZ,SAAaD,GACX,OAAO5mB,KAAK6a,UAAU0M,wBAAwBX,E,EAGhDnM,EAAehb,UAAA4nB,gBAAf,SAAgBzmB,GACdZ,KAAKub,cAAcvQ,KAAKpK,E,EAG1B6Z,EAAAhb,UAAA+nB,QAAA,WACExnB,KAAK+a,SAAS0M,YAAYrD,SAAS9iB,KAAMtB,KAAKob,mBAC9Cpb,KAAKwb,aAAaxQ,M,EAGpByP,EAAmBhb,UAAAioB,oBAAnB,SAAoBC,GAClB3nB,KAAK2c,MAAQgL,EACb3nB,KAAKugB,YACLvgB,KAAKwe,gB,EAGP/D,EAAShb,UAAA8gB,UAAT,SAAU3P,G,MAGR,QAHQ,IAAAA,MAAU,MAClB5Q,KAAK2c,MAAQ/L,IAAiB,QAAVN,EAAAtQ,KAAK2c,aAAK,IAAArM,OAAA,EAAAA,EAAE8C,QAChCpT,KAAK4Q,IAAM5Q,KAAK2c,MACX3c,KAAK2c,QAAS3c,KAAK6c,QAAxB,CAGA7c,KAAKohB,mBAELphB,KAAKqc,QAAQ5Z,KAAK,CAChB+C,KAAM,OACN+C,QAASvI,KAAK6jB,yBAAyB7jB,KAAK2c,OAC5C4G,KAAMrd,EAAUlG,KAAKmG,UACrB+f,QAAQ,EACR7K,iBAAiB,IAGnB,IACE,IAAMuM,EAAW5nB,KAAK6nB,QAAQZ,cAC9BW,EAASE,MAAMC,OAAS,SACxBH,EAASE,MAAMC,OAAS,MACV,CAAd,MAAO7kB,GAAO,CAChBlD,KAAK4a,IAAImG,eAET/gB,KAAKoc,WAAa,GAClBpc,KAAKke,iBAAkB,EAEvBle,KAAKgoB,eAAehoB,KAAK2c,MAAO3c,KAAKioB,OAAQjoB,KAAKylB,gBArBjD,C,EAuBHhL,EAAAhb,UAAA6gB,aAAA,SAAa1P,EAAKwP,GAChB,IAAM8H,EAAWtX,aAAG,EAAHA,EAAKwC,OACtB,GAAK8U,IAAYloB,KAAK6c,QAAtB,CAGA7c,KAAKohB,mBACL,IACEhB,EAAK2D,iBAAmB,GACxB/jB,KAAK4a,IAAI+H,eACK,CAAd,MAAOzf,GAAO,CAEhBlD,KAAKwe,iBACLxe,KAAKqc,QAAQ5Z,KAAK,CAChB+C,KAAM,OACN+C,QAASvI,KAAK6jB,yBAAyBqE,GACvC3E,KAAMrd,EAAUlG,KAAKmG,UACrB+f,QAAQ,EACR7K,iBAAiB,IAGnBrb,KAAK4a,IAAImG,eAET/gB,KAAKoc,WAAa,GAClBpc,KAAKke,iBAAkB,EAEvBle,KAAKgoB,eAAeE,EAAUloB,KAAKioB,OAAQjoB,KAAKylB,gBAAiB7U,EAAKwP,EArBrE,C,EAuBH3F,EAAAhb,UAAA0oB,eAAA,eAyCCvf,EAAA5I,KAxCCA,KAAK6c,SAAU,EACf7c,KAAK4a,IAAImG,eAET,IAAM7X,EAASlJ,KAAKwgB,YAAYxZ,SAA2B,mBAAAhH,KAAKiI,MAAK,IAAIjI,KAAK0kB,OAE9E1kB,KAAKuL,KACFQ,IAA2B7C,EAAK,CAC/B2C,QAAS,CACP,YAAa7L,KAAK2L,OAClB,cAAe3L,KAAKiI,MACpB,mBAAoBjI,KAAKge,wBAG5BhS,KACC8Y,cAAW,SAAC5hB,GAGV,OAFA2B,QAAQ3B,MAAM,mCAAoCA,GAE3C2hB,KAAG,KACZ,KAED3Z,WAAU,SAAC+V,GACVrY,EAAKiU,SAAU,EACfjU,EAAKgS,IAAImG,eAEJE,GAIDA,GAAYA,EAASmH,YACvBxf,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,KACN+C,QAASK,EAAK4d,eAAevF,EAASmH,WACtC7E,KAAMrd,EAAU0C,EAAKzC,UACrBkiB,eAAe,IAEjBzf,EAAKwU,uBAAyBxU,EAAKyT,QAAQ7Z,OAAS,EAEpDoG,EAAKgS,IAAImG,eAEb,G,EAwBJtG,EAAAhb,UAAAkf,KAAA,SAAKD,EAAiBN,EAAaE,GAAnC,IAiJC1V,EAAA5I,KAhJCoe,EAAOkK,OAAOnnB,MAAK,SAACwgB,G,YAAEzgB,EAAIygB,EAAAzgB,KAAEN,EAAK+gB,EAAA/gB,MACzB2nB,EAAW3f,EAAKyT,QAAQzT,EAAKyT,QAAQ7Z,OAAS,GAEpD,GAAItB,EAoBF,OAnBAqnB,EAAShgB,QAAUK,EAAKib,yBAAyB0E,EAAShgB,SAC1DK,EAAKyT,QAAQ9Z,MACbqG,EAAKyT,QAAQ5Z,KAAK8lB,IACdjK,aAAc,EAAdA,EAAgB9b,SAClBoG,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,cACN4d,YAAa9E,IAIjBI,EAAW/P,QACX/F,EAAKsV,iBAAkB,EAEvBtV,EAAKgS,IAAImG,oBACTnY,EAAKsU,gBAAiB,GAQxB,IAAIsL,EAAe5f,EAAK0T,QAAQmM,OAAO7nB,EAAO,CAAE+M,QAAQ,IAExD,GADA/E,EAAKwT,YAAcoM,EACG,OAAlBD,EAAS/iB,KAAe,CAC1B,IAAMkjB,EAAmB9f,EAAKwT,WAAW0K,MAAM,sBAC3C4B,GACFA,EAAiB9V,SAAQ,SAACkU,GACxBle,EAAKwT,WAAaxT,EAAKwT,WAAWlX,QAAQ4hB,EAAO,IACjDxI,EAAe7b,KAAKqkB,aAAA,EAAAA,EAAO5hB,QAAQ,YAAa,IAClD,IAGFqjB,EAAShgB,QAAUK,EAAKwT,WACxBxT,EAAKgS,IAAImG,cACV,KAAM,CACLnY,EAAKsV,iBAAkB,EAEvB,IAAIyK,OAAoB,EAExB,IACE9jB,QAAQC,IAAI,iBACZ6jB,EAAkB9X,KAAKC,MAAMD,KAAKC,MAAMlI,EAAKwT,YAM9C,CALC,MAAOrb,GACP,IACE8D,QAAQC,IAAI,kBACZ6jB,EAAkB9X,KAAKC,MAAMlI,EAAKwT,WACxB,CAAV,MAAOrb,GAAG,CACb,CAID,GAFA8D,QAAQC,IAAI,qBAER6jB,IAA8C,QAA3BrY,EAAAqY,aAAA,EAAAA,EAAiBC,kBAAU,IAAAtY,OAAA,EAAAA,EAAE9N,QAAS,EAAG,CAU9D,GARgC,kBAA9BmmB,EAAgBC,YACc,eAA9BD,EAAgBC,YACc,2BAA9BD,EAAgBC,aAEhBhgB,EAAKigB,qBAAqB3d,YAC1BtC,EAAKkgB,uBAAuB5d,aAG1Byd,EAAgBC,YAAchgB,EAAKsT,wBAAyB,CAC9D,IAAI6M,EAAa,GACM,QAAvB5X,EAAAwX,EAAgBK,eAAO,IAAA7X,KAAEyB,SAAQ,SAACqW,GAChCF,EAAU5lB,IAAA,GAAAJ,EAAOgmB,IAAUhmB,EAAKkmB,EAAQ3L,UAC1C,KAEIyL,aAAU,EAAVA,EAAYvmB,QAAS,GAAGoG,EAAKsgB,sBAAsBH,EACxD,CAYD,GATEJ,EAAgBC,YAAchgB,EAAKqT,sBACZ,QAAvB7J,EAAAuW,EAAgBK,eAAO,IAAA5W,OAAA,EAAAA,EAAE5P,QAAS,GAElCoG,EAAK6S,SAAS3a,KAAK,CACjBqoB,UAAWR,EAAgBC,WAC3BQ,WAAYT,EAAgBK,UAI5BL,EAAgBC,YAAchgB,EAAKuT,sBAAuB,CAC5D,IAAIkN,EAAkC,QAAvBhQ,EAAAsP,EAAgBK,eAAO,IAAA3P,OAAA,EAAAA,EAAE7W,OACpC6mB,EAAW,EACbzgB,EAAK6S,SAAS3a,KAAK,CACjBqoB,UAAW,yBACXG,OAAQX,EAAgBK,UAEL,GAAZK,GACTzgB,EAAK6S,SAAS3a,KAAK,CACjBqoB,UAAWR,EAAgBC,WAC3BW,cAAe,CAACZ,EAAgBK,QAAQ,GAAGtE,SAGhD,CAEmC,QAAhCiE,EAAgBa,eAClB5gB,EAAK6S,SAAS3a,KAAK,CACjBqoB,UAAWR,EAAgBC,WAC3BU,OAAQX,EAAgBK,UAGtBpgB,EAAK6gB,oBACPd,EAAgBpgB,SACd,2DAINK,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,KACN+C,QAASogB,EAAgBpgB,QACzBmhB,OAAQf,EACRpF,KAAMrd,EAAU0C,EAAKzC,YAGnByC,EAAK6gB,mBACPnI,YAAW,WACT1Y,EAAK+gB,uB,GACJ,KAGL/gB,EAAKwT,WAAa,EACnB,MACCxT,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,KACN+C,QAASK,EAAKwT,WACdmH,KAAMrd,EAAU0C,EAAKzC,YAIzByC,EAAKwU,uBAAyBxU,EAAKyT,QAAQ7Z,OAAS,EACpDoG,EAAKgS,IAAImG,cACV,CAEDnY,EAAK4V,iBAGLE,EAAWkL,QAAQhpB,GACnBgI,EAAK+V,KAAKD,EAAYN,EAAQE,EAChC,G,EAGF7D,EAAAhb,UAAAoqB,eAAA,SAAeC,EAAevhB,GAA9B,IAuDCK,EAAA5I,KAtDC6E,QAAQC,IAAIyD,GAEZvI,KAAKwc,cAAe,EACpBxc,KAAKod,uBAAyB,KAC9B,IAAMxS,EAAkB5K,KAAK4J,oBAAoB5B,OAAOhI,KAAKiI,OACvDiB,EAASlJ,KAAKwgB,YAAYvZ,WAAmC,yBAAAjH,KAAKiI,MAAsB,iBAAA2C,EAAe,oBAC7GyL,MAAMnN,EAAK,CACToN,OAAQ,OACRzK,QAAS,CACP,eAAgB,mBAChBF,OAAQ,wCACR,cAAe3L,KAAKiI,MACpB,mBAAoBjI,KAAKge,sBAE3B1c,KAAMuP,KAAK6F,UAAU,CAAEqT,UAAWxhB,EAAQ+a,IAAK0G,UAAWF,MACzD3oB,MAAK,WACN,GAAI2oB,EAcF,OAbAlhB,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,KACN+C,QACEK,EAAKqhB,iBACLrhB,EAAKjE,eAAe,uCACtB4e,KAAMrd,EAAU0C,EAAKzC,UACrBkiB,eAAe,IAGjBzf,EAAK4V,iBACL5V,EAAKgS,IAAImG,eACTnY,EAAK4T,cAAe,OACpB5T,EAAKwU,uBAAyB,MAIhCxU,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,KACN+C,QAASK,EAAK4d,eACZ5d,EAAK0c,mBAAmB1c,EAAKoU,qBAE/BuG,KAAMrd,EAAU0C,EAAKzC,UACrBkiB,eAAe,IAEjBzf,EAAKoU,oBACFpU,EAAKoU,mBAAqB,GAAKpU,EAAK0c,mBAAmB9iB,OAC1DoG,EAAK4V,iBACL5V,EAAKgS,IAAImG,eACTO,YAAW,WACT,IAAM4I,EAAc9F,SAAS+F,eAAe,iBACxCD,GACFA,EAAY9C,iBAAiB,QAASxe,EAAKmc,eAAeuC,KAAK1e,G,GAEhE,KACHA,EAAK4T,cAAe,EACpB5T,EAAKwU,uBAAyB,IAChC,G,EAEF3C,EAAahb,UAAA2qB,cAAb,SAAczZ,GACM,UAAdA,EAAM/L,KAAoB+L,EAAM0Z,WAElC1Z,EAAM2Z,iBAENtqB,KAAKuqB,aAAa5Z,G,EAGtB8J,EAAYhb,UAAA8qB,aAAZ,SAAa5Z,GACX3Q,KAAKugB,YACLvgB,KAAKwe,gB,EAGP/D,EAAahb,UAAA+qB,cAAb,SAAcC,GACRzqB,KAAKwc,eAITxc,KAAK6pB,gBAAe,EAAM7pB,KAAKqc,QAAQoO,IACvCzqB,KAAKqc,QAAQoO,GAAKC,OAAS1qB,KAAKqc,QAAQoO,GAAKC,MAEzC1qB,KAAKqc,QAAQoO,GAAKE,UACpB3qB,KAAKqc,QAAQoO,GAAKE,SAAW3qB,KAAKqc,QAAQoO,GAAKE,SAGjD3qB,KAAK4a,IAAImG,e,EAGXtG,EAAehb,UAAAmrB,gBAAf,SAAgBH,GACVzqB,KAAKwc,eACTxc,KAAK6pB,gBAAe,EAAO7pB,KAAKqc,QAAQoO,IACxCzqB,KAAKqc,QAAQoO,GAAKE,SAAW3qB,KAAKqc,QAAQoO,GAAKE,QAC3C3qB,KAAKqc,QAAQoO,GAAKC,QACpB1qB,KAAKqc,QAAQoO,GAAKC,OAAS1qB,KAAKqc,QAAQoO,GAAKC,O,EAkBjDjQ,EAAAhb,UAAAorB,SAAA,SAASnmB,EAAIomB,GAAb,IA8BCliB,EAAA5I,KA5BK+qB,EAAc3G,SAAS+F,eAAezlB,GAGtCsmB,EAAe5G,SAAS6G,cAAc,YAC1CD,EAAapqB,MAAQmqB,EAAYG,UAGjC9G,SAAS9iB,KAAK6pB,YAAYH,GAG1BA,EAAaI,SAGbhH,SAASiH,YAAY,QAGrBjH,SAAS9iB,KAAKgqB,YAAYN,GAK1BhrB,KAAKqc,QAAQyO,GAAO5E,QAAS,EAC7BlmB,KAAK4a,IAAI+H,gBAETrB,YAAW,WACT1Y,EAAKyT,QAAQyO,GAAO5E,QAAS,EAC7Btd,EAAKgS,IAAI+H,eACX,GAAG,I,EAELlI,EAAehb,UAAA8rB,gBAAf,SAAgBT,GAEQ9qB,KAAKqc,QAAQyO,GAAOviB,QAC1BvI,KAAK6qB,SAAS,eAAiBC,EAAOA,E,EAGxDrQ,EAAYhb,UAAA+rB,aAAZ,SAAa5E,GACX,IAAM6E,GAAM,IAAIC,WAAYC,gBAAgB/E,EAAM,aAG5CgF,EAAWxH,SAASyH,yBAG1BtsB,MAAM8D,KAAKooB,EAAInqB,KAAKwqB,YAAYlZ,SAAQ,SAACmZ,GACvCH,EAAST,YAAYY,EAAKC,WAAU,GACtC,IAGA,IAAMC,EAAgB7H,SAAS6G,cAAc,OAU7C,OATAgB,EAAcd,YAAYS,GAI1BK,EACG/E,iBAAiB,UACjBtU,SAAQ,SAACsZ,GAAW,OAAAA,EAAO3H,QAAQ,IAG/B0H,EAAcE,S,EAKvB1R,EAAiBhb,UAAA2sB,kBAAjB,SAAkBtB,GAAlB,IA+CCliB,EAAA5I,MA9CoC,GAA/BA,KAAK6e,uBACP7e,KAAK6e,sBAAwBiM,EAC7B9qB,KAAK4e,wBAA0B5e,KAAKwrB,aAClCxrB,KAAKqc,QAAQyO,GAAOviB,SAEtBvI,KAAK4e,wBAA0B5e,KAAK4e,wBAAwB1Z,QAC1D,yCACA,IAGFlF,KAAK4a,IAAI+H,iBAEL3iB,KAAK6e,uBAAyBiM,GAChC9qB,KAAK4e,yBAA2B5e,KAAKwrB,aACnCxrB,KAAKqc,QAAQyO,GAAOviB,SAEtBvI,KAAK4e,wBAA0B5e,KAAK4e,wBAAwB1Z,QAC1D,yCACA,IAEFlF,KAAK4a,IAAI+H,kBAET3iB,KAAK6e,sBAAwBiM,EAC7B9qB,KAAK4e,wBAA0B5e,KAAKwrB,aAClCxrB,KAAKqc,QAAQyO,GAAOviB,SAEtBvI,KAAK4e,wBAA0B5e,KAAK4e,wBAAwB1Z,QAC1D,yCACA,IAEFlF,KAAK4a,IAAI+H,iBAGb3iB,KAAKqc,QAAQyO,GAAOuB,UAAW,EAC/BrsB,KAAK4a,IAAI+H,gBAETrB,YAAW,WACT1Y,EAAKyT,QAAQyO,GAAOuB,UAAW,EAC/BzjB,EAAKgS,IAAI+H,eACX,GAAG,KACH3iB,KAAKssB,cAAcC,OACnB,IAAMC,EAASpI,SAAS+F,eAAe,4BACnCqC,IACFA,EAAO1E,MAAM2E,QAAU,QAEzBzsB,KAAK4a,IAAI+H,e,EAEXlI,EAAAhb,UAAA+e,eAAA,eAOC5V,EAAA5I,KANK0sB,EAAU,EACRC,EAAWvhB,aAAY,WAC3BxC,EAAKgX,SAASqH,cAAc2F,UAC1BhkB,EAAKgX,SAASqH,cAAc4F,aAC1BH,IAAY,GAAG3U,cAAc4U,E,GAChC,E,EAGLlS,EAAAhb,UAAAijB,gBAAA,eAMC9Z,EAAA5I,KALCshB,YAAW,WACL1Y,EAAKif,SAAWjf,EAAKif,QAAQZ,eAC/Bre,EAAKif,QAAQZ,cAAc6F,O,GAE5B,I,EAGLrS,EAAYhb,UAAAstB,aAAZ,SAAarD,GACX7kB,QAAQmoB,KAAK,uCACbnoB,QAAQmoB,KAAKtD,GAETA,WAAQV,O,EAIdvO,EAAAhb,UAAAwtB,gBAAA,eAwBCrkB,EAAA5I,KAtBKA,KAAKktB,OAAOC,QACdntB,KAAKotB,kBAIPptB,KAAKktB,OAAOG,aAAaniB,WAAU,SAACiiB,GAC9BA,EACFvkB,EAAKwkB,kBAELxkB,EAAK0kB,oBAET,IAEAttB,KAAKktB,OAAOG,aAAaniB,WAAU,SAACiiB,GAC9BA,GACF7L,YAAW,WACL1Y,EAAKif,SAAWjf,EAAKif,QAAQZ,eAC/Bre,EAAKif,QAAQZ,cAAc6F,OAE/B,GAEJ,G,EAGMrS,EAAAhb,UAAA2tB,gBAAA,WACNptB,KAAK+a,SAASwS,SAASnJ,SAAS9iB,KAAMtB,KAAKob,kB,EAGrCX,EAAAhb,UAAA6tB,mBAAA,WACNttB,KAAK+a,SAAS0M,YAAYrD,SAAS9iB,KAAMtB,KAAKob,kB,EAGhDX,EAAqBhb,UAAAypB,sBAArB,SAAsBsE,GAAtB,IA8BC5kB,EAAA5I,KA7BOkJ,EAASlJ,KAAKwgB,YAAYzZ,UAAS,WAAW/G,KAAK6D,QAAO,0BAChEwS,MAAMnN,EAAK,CACToN,OAAQ,OACRzK,QAAS,CACP,eAAgB,mBAChB0K,cAAe,0BAEjBjV,KAAMuP,KAAK6F,UAAU8W,KAEpBrsB,MAAK,SAAC8f,GACL,GAAIA,EAASpK,GACX,OAAOoK,EAASlK,OAEhB,MAAM,IAAIlE,MAAM,+BAEpB,IACC1R,MAAK,SAACoO,IACDA,aAAI,EAAJA,EAAM/M,QAAS,IACjB+M,EAAKqD,SAAQ,SAAC6a,GACZ7kB,EAAK0U,SAASmQ,EAAQ/oB,IAAM+oB,CAC9B,IAEA7kB,EAAKgS,IAAImG,eAEb,IACCnS,OAAM,SAAC5F,GACNnE,QAAQ3B,MAAM,uBAAwB8F,GACtCJ,EAAKiU,SAAU,CACjB,G,EAGJpC,EAAAhb,UAAAiuB,qBAAA,SAAqBrlB,EAAWqhB,GAC9B1pB,KAAK0b,eAAe5a,KAAK,CACvBuH,UAASA,EACTqhB,OAAMA,G,EAIVjP,EAAAhb,UAAAkqB,sBAAA,eAOC/gB,EAAA5I,KANO2tB,EAAU3tB,KAAK8a,WAAWmM,cAAc5C,cAAc,gBACxDsJ,GACF3tB,KAAK+a,SAAS6S,OAAOD,EAAS,SAAS,WACrC/kB,EAAK+S,SAAS7a,MAChB,G,EAIJ2Z,EAAAhb,UAAAgqB,gBAAA,WACE,MAAO,iEAAiE9C,KACtEtU,UAAUwb,U,EAIdpT,EAAahb,UAAAquB,cAAb,SAAcpJ,GAAd,IAcC9b,EAAA5I,KAbCA,KAAK4b,gBAAgB5Q,KAAK,CACxBN,SAAU1K,KAAK+tB,cAAcrJ,GAC7BA,OAAMA,IAGRpD,YAAW,WACT1Y,EAAKigB,qBAAqB3d,WAAU,SAACC,GACnCvC,EAAKgS,IAAImG,cACX,IACAnY,EAAKkgB,uBAAuB5d,WAAU,SAACC,GACrCvC,EAAKgS,IAAImG,cACX,G,GACC,I,EAGLtG,EAAuBhb,UAAAuuB,wBAAvB,SAAwBC,GACtBjuB,KAAK6b,gBAAgB7Q,KAAKijB,E,EAG5BxT,EAAUhb,UAAAyuB,WAAV,SAAWxJ,GACT,QACE1kB,KAAK+tB,cAAcrJ,IACnB1kB,KAAKmuB,gBAAgB/oB,MAAK,SAAC8J,GAAM,OAAAA,GAAKwV,CAAM,I,EAIhDjK,EAAahb,UAAAsuB,cAAb,SAAcrJ,GACZ,OAAO1kB,KAAKouB,cAAchpB,MAAK,SAACipB,GAAS,OAAAA,EAAK3J,QAAUA,CAAf,G,EAG3CjK,EAAAhb,UAAAqpB,qBAAA,eAqBClgB,EAAA5I,KApBO6L,EAAU,IAAIC,cAAY,CAC9B,eAAgB,mBAChBH,OAAQ3L,KAAKgc,aAEf,OAAOhc,KAAKuL,KACTQ,IACI/L,KAAKwgB,YAAYzZ,UAAS,WAAW/G,KAAK6D,QAAoE,6DAAA7D,KAAK0kB,OACtH,CAAE7Y,QAAOA,IAEVG,KACC4Y,aAAU,SAACzZ,GAGT,OAFAvC,EAAKulB,gBAAkBhjB,EACvBvC,EAAKgS,IAAImG,eACF8D,KAAG1Z,EACZ,IACA2Z,cAAW,SAAC5hB,GAEV,OADA2B,QAAQ3B,MAAM,oCAAqCA,GAC5C2hB,KAAG,K,MAKlBpK,EAAAhb,UAAAopB,mBAAA,eAqBCjgB,EAAA5I,KApBO6L,EAAU,IAAIC,cAAY,CAC9B,eAAgB,mBAChBH,OAAQ3L,KAAKgc,aAEf,OAAOhc,KAAKuL,KACTQ,IACI/L,KAAKwgB,YAAYzZ,UAAS,WAAW/G,KAAK6D,QAA4C,qCAAA7D,KAAK0kB,OAC9F,CAAE7Y,QAAOA,IAEVG,KACC4Y,aAAU,SAACzZ,GAGT,OAFAvC,EAAKwlB,cAAgBjjB,EACrBvC,EAAKgS,IAAImG,eACF8D,KAAG1Z,EACZ,IACA2Z,cAAW,SAAC5hB,GAEV,OADA2B,QAAQ3B,MAAM,oCAAqCA,GAC5C2hB,KAAG,K,MAUlBpK,EAAAhb,UAAA6uB,eAAA,WACOtuB,KAAKioB,QAAQjoB,KAAKuuB,cACvBvuB,KAAK8e,gBAAkB9e,KAAK8e,eAC5B9e,KAAK4a,IAAI+H,e,EAGXlI,EAAWhb,UAAA+uB,YAAX,SAAY7d,G,MACC,QAAXL,EAAAtQ,KAAKioB,cAAM,IAAA3X,KAAEsC,SAAQ,SAAC6b,GAAU,OAACA,EAAMC,UAAW,CAAlB,IAChC1uB,KAAK4a,IAAI+H,e,EAGXlI,EAAahb,UAAAkvB,cAAb,SAAcF,GAGZ,IAAIG,EAAa5uB,KAAKioB,OAAO5Q,QAAO,SAAC7X,GAAM,OAAAA,EAAEkF,IAAM+pB,EAAM/pB,EAAE,IACvDkqB,GAAcA,EAAWpsB,OAAS,IACpCosB,EAAW,GAAGF,UAAYE,EAAW,GAAGF,SACxC1uB,KAAK4a,IAAI+H,iBAEX3iB,KAAK4a,IAAI+H,e,EAGXlI,EAAAhb,UAAAovB,eAAA,W,MACE,OAAkB,QAAXve,EAAAtQ,KAAKioB,cAAM,IAAA3X,OAAA,EAAAA,EAAEwe,OAAM,SAACL,GAAU,OAACA,EAAMC,QAAP,G,EAGvCjU,EAAAhb,UAAAsvB,sBAAA,W,MACQhQ,EAA4B,QAAXzO,EAAAtQ,KAAKioB,cAAM,IAAA3X,OAAA,EAAAA,EAAE+G,QAAO,SAACoX,GAAU,OAAAA,EAAMC,QAAN,IACtD,OAAK3P,EAGCA,GAA6C,KAA3BA,aAAA,EAAAA,EAAgBvc,QAC7B,cAEAuc,aAAc,EAAdA,EAAgBvc,QAAS,GACzBuc,aAAA,EAAAA,EAAgBvc,QAAwB,oBACxCuc,aAAc,EAAdA,EAAgBvc,QAAM,kBAPxB,Y,EAWXiY,EAAAhb,UAAAuvB,iBAAA,eAyBCpmB,EAAA5I,KAxBCA,KAAK6c,SAAU,EACf,IAAM3T,EAASlJ,KAAKwgB,YAAYvZ,WAAU,YAAYjH,KAAKiI,MAAK,iBAC1D4D,EAAU,IAAIC,cAAY,CAC9B,eAAgB,qBAGlB,OAAO9L,KAAKuL,KAAKoZ,KAAKzb,EAAK,GAAI,CAAE2C,QAAOA,IAAIG,KAC1C4Y,aAAU,SAACzZ,GAST,OARIA,IACFvC,EAAKqf,OAAS9c,EAAIc,KAAI,SAACwiB,GAAU,OAAArvB,OAAA6vB,OAAA7vB,OAAA6vB,OAAA,GAC5BR,GACH,CAAAC,UAAU,GAFqB,KAKnC9lB,EAAKgS,IAAImG,eAEF8D,KAAG1Z,EACZ,IACA2Z,cAAW,SAAC5hB,GAGV,OAFA2B,QAAQ3B,MAAM,kCAAmCA,GAE1C2hB,KAAG,K,MAUhBpK,EAAAhb,UAAAyvB,kBAAA,eAwCCtmB,EAAA5I,KAvCCA,KAAKif,iBAAkB,EACvBjf,KAAKkf,iBAAkB,EACvBra,QAAQC,IAAI,qBACZ9E,KAAK6c,SAAU,EACf,IAAMjS,EAAkB5K,KAAK4J,oBAAoB5B,OAAOhI,KAAKiI,OAC7DjI,KAAKiW,eAAiBrL,EACtB,IAAM1B,EAASlJ,KAAKwgB,YAAYvZ,WAAU,yCAAyC2D,EAAe,UAAU5K,KAAKiI,MAC3G4D,EAAU,IAAIC,cAAY,CAC9B,eAAgB,mBAChBH,OAAQ,2BACR,mBAAoB3L,KAAKge,uBAG3B,OAAOhe,KAAKuL,KAAKQ,IAAI7C,EAAK,CAAE2C,QAAOA,IAAIG,KACrC4Y,aAAU,SAACzZ,GAUT,OATIA,IACFvC,EAAKqW,iBAAkB,EACvBrW,EAAKumB,gBAAkBhkB,EACvBtG,QAAQC,IAAI,2BACZ8D,EAAKsW,iBAAkB,EACvBra,QAAQC,IAAIqG,IAEdvC,EAAKgS,IAAImG,eAEF8D,KAAG1Z,EACZ,IACA2Z,cAAW,SAAC5hB,GAUV,OATA2B,QAAQ3B,MAAM,qCAAsCA,GACpD0F,EAAKqW,iBAAkB,EACvBrW,EAAKsW,iBAAkB,EAEF,MAAjBhc,aAAK,EAALA,EAAO4T,UACTjS,QAAQC,IAAI,QACZ8D,EAAKqW,iBAAkB,EACvBrW,EAAKsW,iBAAkB,GAElB2F,KAAG,K,MAKhBpK,EAAAhb,UAAA8uB,YAAA,WACEvuB,KAAKgvB,mBAAmB9jB,W,EAG1BuP,EAAAhb,UAAA2vB,mBAAA,WACEpvB,KAAKkvB,oBAAoBhkB,W,EAI3BuP,EAAwBhb,UAAAokB,yBAAxB,SAAyBwL,GACvB,IAEE,IAAMtU,EAAW,IAAIuU,EAAOC,SAG5BxU,EAASoM,KAAO,SAACqI,EAAcC,EAAexe,GAC5C,MAAO,YAAYue,EACjB,aAAAC,GAAS,IACX,qBAAqBxe,EAAI,MAC3B,EAGA,IAAMye,EAAkBJ,EAAOxe,MAAMue,EAAU,CAAEtU,SAAUA,IAO3D,OAHE/a,KAAK6a,UAAU0M,wBAAwBmI,EAO1C,CAHC,MAAOxsB,GAEP,OADA2B,QAAQ3B,MAAM,6BAA8BA,GACrC,EACR,C,EAGHuX,EAAWhb,UAAAkwB,YAAX,SAAYN,GAAZ,IAyDCzmB,EAAA5I,KAxDC,KAAKqvB,GAAcA,EAAS7sB,OAAS,GAEnC,OADAqC,QAAQ3B,MAAM,mCACP,GAIT,IAAI0jB,EAAOyI,EAASnqB,QAClB,uBACA,SAAC4hB,EAAOC,EAAQ9V,GACd,IAAM6I,EAAQiN,EAAOvkB,OACrB,OAAc,IAAVsX,EACK,eAAe7I,EAAI,iBACP,IAAV6I,EACF,eAAe7I,EAAI,iBAErB,WAAWA,EAAI,WACxB,IAuCF,OAFA2V,GANAA,GAHAA,GAHAA,GAHAA,GAHAA,GAfAA,EAAOA,EAAK1hB,QAAQ,6BAA6B,SAAC4hB,EAAO/hB,EAAM6qB,GAC7D,IAAMC,EAAcjnB,EAAKknB,WAAWF,GAC9BG,EAAWhrB,GAAQ,YAGzB,MAAO,0HAEsE8qB,EAAoB,SAAAjnB,EAAKjE,eACpG,QAEqD,yEAAAorB,EAAa,KAAAF,EAAW,6BAEjF,KAGY3qB,QAAQ,aAAc,oBAGtBA,QAAQ,iBAAkB,wBAG1BA,QAAQ,mBAAoB,gBAG5BA,QAAQ,gBAAiB,gBAGzBA,QACV,0BACA,wCAIUA,QAAQ,kBAAmB,O,EAMzCuV,EAAUhb,UAAAqwB,WAAV,SAAWF,GACT,OAAOA,EACJ1qB,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,S,EAIZuV,EAAehb,UAAAuwB,gBAAf,SAAgB/e,GACrBoB,UAAU4d,UAAUC,UAAUjf,GAAM9P,MAClC,WACEgvB,MAAM,4B,IAER,SAACnnB,GACCnE,QAAQ3B,MAAM,wBAAyB8F,EACzC,G,EAOJyR,EAAAhb,UAAA2wB,eAAA,WACEpwB,KAAKmf,aAAenf,KAAKmf,YACzBnf,KAAK4a,IAAI+H,e,EAGXlI,EAAAhb,UAAA4wB,oBAAA,WACErwB,KAAKof,qBAAuBpf,KAAKof,oBACjCpf,KAAK4a,IAAI+H,e,EAEXlI,EAAAhb,UAAA6wB,qBAAA,WACEtwB,KAAKqf,sBAAwBrf,KAAKqf,qBAClCrf,KAAK4a,IAAI+H,e,EA+BXlI,EAAahb,UAAA8wB,cAAb,SAAcrnB,GACZ,IAEE,OADqB,IAAIsnB,IAAItnB,GAAIyX,SACjBzb,QAAQ,SAAU,GAGnC,CAFC,MAAMoL,GACN,MAAO,SACR,C,EAIHmK,EAAahb,UAAAgxB,cAAb,SAAcvnB,GAEZ,MAAO,oDADQlJ,KAAKuwB,cAAcrnB,E,EAIpCuR,EAAWhb,UAAAixB,YAAX,SAAYC,GACV3wB,KAAKwf,mBAAqBmR,EAC1B3wB,KAAK4a,IAAI+H,gBACT3iB,KAAK4wB,cAAcrE,OACnB,IAAMC,EAASpI,SAAS+F,eAAe,4BACnCqC,IACFA,EAAO1E,MAAM2E,QAAU,O,EAM3BhS,EAAAhb,UAAAoxB,gBAAA,WACE7wB,KAAKovB,qBACLpvB,KAAKssB,cAAcC,OACnBvsB,KAAK0f,cAAe,EACpB1f,KAAKyf,oBAAqB,EAC1Bzf,KAAK4a,IAAI+H,gBAET,IAAM6J,EAASpI,SAAS+F,eAAe,4BACnCqC,IACFA,EAAO1E,MAAM2E,QAAU,O,EAI3BhS,EAAAhb,UAAAqxB,cAAA,WACE9wB,KAAKssB,cAAc3d,QACnB3O,KAAK0f,cAAe,EACpB1f,KAAKyf,oBAAqB,EAC1Bzf,KAAK4a,IAAI+H,gBACT3iB,KAAK+wB,gB,EAGPtW,EAAAhb,UAAAuxB,cAAA,WACEhxB,KAAK4wB,cAAcjiB,QACnB3O,KAAK0f,cAAe,EACpB1f,KAAK4a,IAAI+H,gBACT3iB,KAAK+wB,gB,EAEPtW,EAAAhb,UAAAsxB,eAAA,eAUCnoB,EAAA5I,KATCshB,YAAW,WACT1Y,EAAK8W,cAAe,EACpB9W,EAAKgS,IAAI+H,gBAET,IAAM6J,EAASpI,SAAS+F,eAAe,4BACnCqC,IACFA,EAAO1E,MAAM2E,QAAU,Q,GAExB,I,EAILhS,EAAYhb,UAAAwxB,aAAZ,SAAaC,GACXlxB,KAAK0f,aAAewR,EACpBlxB,KAAK4a,IAAI+H,gBACT3iB,KAAKmxB,wB,EAEP1W,EAAAhb,UAAA0xB,uBAAA,WACE,IAAM3E,EAASpI,SAAS+F,eAAe,4BACnCqC,IACFA,EAAO1E,MAAM2E,QAAUzsB,KAAK0f,aAAe,QAAU,O,EAGzDjF,EAAgBhb,UAAA2xB,iBAAhB,SAAiBjK,GACftZ,OAAO0e,KAAKpF,EAAM,S,EAEpB1M,EAAoBhb,UAAA4xB,qBAApB,SAAqB1gB,GACnB,IACoB,UAAdA,EAAM/L,KAAoB+L,EAAM0Z,UAElC1Z,EAAM2Z,gBAEM,CAAd,MAAOpnB,GAAO,CAChB,IAAM0kB,EAAWjX,EAAM2gB,OACvB1J,EAASE,MAAMC,OAAS,OACxBH,EAASE,MAAMC,OAAYH,EAASiF,aAAY,KAE5CjF,EAASiF,aAAe,KAC1BjF,EAASE,MAAMC,OAAS,QACxBH,EAASE,MAAMyJ,UAAY,QAE3B3J,EAASE,MAAMyJ,UAAY,Q,EAI/B9W,EAAehb,UAAA+xB,gBAAf,SAAgB5wB,GAAhB,IAcCgI,EAAA5I,UAde,IAAAY,MAAY,MACrBZ,KAAKyxB,sBACRzxB,KAAK2a,WAAWvO,oBAAoBpM,KAAKqM,OAAOnB,WAAU,SAACC,GACzDvC,EAAK8oB,aAAevmB,EACpBvC,EAAK+oB,eAA0B,MAAT/wB,GAAiBgI,EAAK+oB,eAAiB/wB,EAExDgI,EAAK+oB,iBACR/oB,EAAKgpB,iBAAmB,KACxBhpB,EAAKipB,mBAAoB,GAG3BjpB,EAAKgS,IAAI+H,eACX,G,EAIJlI,EAAAhb,UAAAqyB,eAAA,W,QAEQC,EAAe,IACe,QAAhC5gB,EAAuB,QAAvBb,EAAAtQ,KAAK4xB,wBAAkB,IAAAthB,OAAA,EAAAA,EAAA0hB,eAAS,IAAA7gB,OAAA,EAAAA,EAAA8gB,cAClCjyB,KAAK4xB,iBAAiBI,QAAQC,YAAYrf,SAAQ,SAAC+J,GACjDoV,EAAapV,EAAMuV,SAAW,CAC5BvV,EAAMwV,OAAS,GACfxV,EAAMyV,SAAWC,aAAWC,SAAW,KAE3C,IAIFtyB,KAAKuyB,aAAevyB,KAAK0a,GAAG8X,MAAMT,E,EAGpCtX,EAAkBhb,UAAAgzB,mBAAlB,SAAmBC,GACjB1yB,KAAK4xB,iBAAmBc,EACxB1yB,KAAK8xB,iBACL9xB,KAAK2xB,gBAAiB,EACtB3xB,KAAK6xB,mBAAoB,C,EAG3BpX,EAAAhb,UAAAkzB,iBAAA,WACoBvO,SAAS+F,eAAe,YAC1C,GAAInqB,KAAKuyB,aAAaK,MAAO,CAC3B/tB,QAAQC,IAAI9E,KAAKuyB,aAAa3xB,OAE9B,IAAI+b,EAAQ3c,KAAK2vB,YACf3vB,KAAK6yB,iBACH7yB,KAAK4xB,iBAAiBrP,KACtBviB,KAAKuyB,aAAa3xB,QAKtB,IACEZ,KAAKqc,QAAQrc,KAAKqc,QAAQ7Z,OAAS,GAAgC,6BACjE,EACFxC,KAAKqc,QAAQrc,KAAKqc,QAAQ7Z,OAAS,GAAgC,6BACjE,CACY,CAAd,MAAOU,GAAO,CAEhBlD,KAAKqc,QAAQ5Z,KAAK,CAChB+C,KAAM,OACN+C,QAASoU,EACT4G,KAAMrd,EAAUlG,KAAKmG,UACrB+f,QAAQ,EACR7K,iBAAiB,EACjByX,6BAA6B,IAG/BjuB,QAAQC,IAAI6X,GAEZ3c,KAAKwd,8BAAgC,EACrCxd,KAAKyd,sBACH,aAAezd,KAAK4xB,iBAAiBvP,QAAQ,GAAGE,KAClDviB,KAAKke,iBAAkB,EACvBle,KAAKyiB,mBAAoB,EACzBziB,KAAKoiB,yBAA2B,CAC9BC,QAASriB,KAAK4xB,iBAAiBvP,QAC/B0Q,OAAQ/yB,KAAKuyB,aAAa3xB,MAC1BoyB,eAAgBhzB,KAAKuyB,aAAa3xB,MAClCqyB,aAAcjzB,KAAK4xB,iBAAiBrP,MAEtCviB,KAAKwiB,gCAAkCxiB,KAAKoiB,yBAC5CpiB,KAAKwe,iBAELxe,KAAK4a,IAAI+H,gBAGT3iB,KAAKgoB,eACHrL,EACA3c,KAAKioB,OACLjoB,KAAKylB,gBACL,GACA,KACAzlB,KAAK4xB,iBAAsB,IAC3B5xB,KAAKuyB,aAAa3xB,MAErB,C,EAGH6Z,EAAAhb,UAAAuoB,eAAA,SACEE,EACAD,EACAhS,EACArF,EACAwP,EACA8S,EACAC,GAPF,I,EA8ECvqB,EAAA5I,KArEKkJ,EAASlJ,KAAKwgB,YAAYxZ,SAAQ,UAElC1F,EAAO,CACT8xB,cAAelL,EACfmL,QAASrzB,KAAK0kB,OACd/N,OAAQ3W,KAAKiI,MACb6a,WAAY9iB,KAAK4J,oBAAoBlC,cACrC8L,WAAYxT,KAAKud,cACjB0K,OAA0D,QAAlD3X,EAAA2X,aAAM,EAANA,EAAQ5Q,QAAO,SAAC7X,GAAM,OAAAA,EAAEkvB,QAAF,IAAYziB,KAAI,SAACzM,GAAM,OAAAA,EAAEkF,EAAE,WAAC,IAAA4L,IAAI,GAC9D1F,gBAAiBqL,EACjBqd,WAAYtzB,KAAKuzB,UACjBC,UAAWxzB,KAAKyzB,UAGdP,IACF5xB,EAAkB,YAAI4xB,EACtB5xB,EAAsB,gBAAI6xB,GAG5B,IAAMtnB,EAAe,CACnB,eAAgB,mBAChB0K,cAAe,UAAYvW,KAAKigB,SAChC,YAAajgB,KAAK2L,OAClB,cAAe3L,KAAKiI,MACpB,mBAAoBjI,KAAKge,qBACzB7H,SAAUnW,KAAKmW,SACfD,WAAYlW,KAAKkW,YAGflW,KAAK0zB,iBACP7nB,EAAwB,eAAI7L,KAAK0zB,gBAGnCrd,MAAMnN,EAAK,CACToN,OAAQ,OACRzK,QAASA,EACTvK,KAAMuP,KAAK6F,UAAUpV,KAEpBH,MAAK,SAAC8f,GAcL,OAbwB,MAApBA,EAASnK,QAAsC,MAApBmK,EAASnK,QACtClO,EAAKyX,OAAQ,EACbzX,EAAKkT,aAAa9Q,OAGd4F,GAAOwP,IACTxX,EAAKgI,IAAMA,EACXhI,EAAKwX,KAAOA,EACZxX,EAAKuX,gBAAiB,IAGxBvX,EAAKyX,OAAQ,EAERY,EAASlK,MAClB,IACC5V,MAAK,SAACoO,GACL1K,QAAQC,IAAIyK,EAEd,IACCX,OAAM,SAAC5F,GACNnE,QAAQ3B,MAAM,UAAW8F,GACzBJ,EAAKsV,iBAAkB,CACzB,IAEFle,KAAK2c,MAAQ,GACb3c,KAAK4xB,iBAAmB,KACxB5xB,KAAK6xB,mBAAoB,EACzB7xB,KAAK2xB,gBAAiB,EACtB3xB,KAAKwe,iBACLxe,KAAK4a,IAAImG,c,EAGXtG,EAAAhb,UAAAk0B,kBAAA,SACEzL,EACAD,EACAhS,EACArF,EACAwP,EACA8S,EACAC,GAPF,I,EAmDCvqB,EAAA5I,KA1COkJ,EAASlJ,KAAKwgB,YAAYxZ,SAAQ,UAElC1F,EAAY,CAChB8xB,cAAelL,EACfmL,QAASrzB,KAAK0kB,OACd/N,OAAQ3W,KAAKiI,MACb6a,WAAY9iB,KAAK4J,oBAAoBlC,cACrCugB,OAA0D,QAAlD3X,EAAA2X,aAAM,EAANA,EAAQ5Q,QAAO,SAAC7X,GAAM,OAAAA,EAAEkvB,QAAF,IAAYziB,KAAI,SAACzM,GAAM,OAAAA,EAAEkF,EAAE,WAAC,IAAA4L,IAAI,GAC9D1F,gBAAiBqL,EACjBqd,WAAYtzB,KAAKuzB,UACjBC,UAAWxzB,KAAKyzB,UAGdP,IACF5xB,EAAkB,YAAI4xB,EACtB5xB,EAAsB,gBAAI6xB,GAG5B,IAAMtnB,EAAU,IAAIC,cAAY,CAC9B,eAAgB,mBAChB,YAAa9L,KAAK2L,OAClB,cAAe3L,KAAKiI,MACpB,mBAAoBjI,KAAKge,uBAG3Bhe,KAAKuL,KAAKoZ,KAAKzb,EAAK5H,EAAM,CAAEuK,QAAOA,IAAIX,UAAU,CAC/CpK,KAAM,SAACyO,GACL1K,QAAQC,IAAIyK,E,EAGdrM,MAAO,SAAC8F,GACNnE,QAAQ3B,MAAM,UAAW8F,GACzBJ,EAAKsV,iBAAkB,C,IAI3Ble,KAAK2c,MAAQ,GACb3c,KAAK4xB,iBAAmB,KACxB5xB,KAAK6xB,mBAAoB,EACzB7xB,KAAK2xB,gBAAiB,EACtB3xB,KAAKwe,iBACLxe,KAAK4a,IAAImG,c,EAGXtG,EAAAhb,UAAAozB,iBAAA,SAAiBpD,EAAOmE,G,UAMhBC,EAJFxE,EAAW,MAAMI,EAAK,KAGdqE,EAAA,SAAAlvB,EAAKhE,GACXizB,GAGD,QAFDvjB,EAAAyjB,EAAKnC,iBAAiBI,QAAQC,YAAY7sB,MACxC,SAACuX,GAAU,OAAAA,EAAMuV,UAAYttB,CAAG,WACjC,IAAA0L,OAAA,EAAAA,EAAE0jB,QAASpvB,EACdyqB,GAAY,OAAOwE,EAAgB,OAAAjzB,EAAK,I,aAL1C,IAA2B,IAAAgiB,EAAAlgB,EAAAtD,OAAO60B,QAAQL,IAAIM,EAAAtR,EAAA9hB,QAAAozB,EAAAhzB,KAAAgzB,EAAAtR,EAAA9hB,OAAA,CAAnC,IAAAqzB,EAAApxB,EAAYmxB,EAAAtzB,MAAA,GAAXkzB,EAAGK,EAAA,GAAOA,EAAA,GAMrB,C,kGAED,OAAO9E,C,EAGT5U,EAA0Bhb,UAAA20B,2BAA1B,SAA2B1S,GAA3B,IA6BC9Y,EAAA5I,KA5BC,IAAK0hB,EAIH,OAHA1hB,KAAKoiB,yBAA2BpiB,KAAKwiB,gCACrCxiB,KAAKq0B,8BAA+B,OACpCr0B,KAAK4a,IAAI+H,gBAIX3iB,KAAK2a,WAAWrO,yBAAyBoV,GAAaxW,WAAU,SAACC,GAC3DA,GAAOA,EAAIkX,SAAW9iB,MAAMikB,QAAQrY,EAAIkX,WAC1ClX,EAAIkX,QAAUlX,EAAIkX,QAAQpW,KAAI,SAACyd,GAO7B,OANIA,EAAO4K,kBACT5K,EAAO4K,gBAAkB1tB,EACvBgC,EAAKzC,SACLujB,EAAO4K,kBAGJ5K,CACT,KAGFve,EAAImpB,gBAAkB1tB,EACpBgC,EAAKzC,SACLgF,EAAImpB,iBAEN1rB,EAAKwZ,yBAA2BjX,EAChCvC,EAAKyrB,8BAA+B,EACpCzrB,EAAKgS,IAAI+H,eACX,G,EAGFlI,EAAAhb,UAAA80B,WAAA,WACEv0B,KAAKq0B,8BAA+B,C,EAGtC5Z,EAAahb,UAAA+0B,cAAb,SAAcZ,GACZ,OAAOx0B,OAAOq1B,KAAKb,GAAK3nB,KAAI,SAACrH,GAAQ,OAAGA,IAAGA,EAAEhE,MAAOgzB,EAAIhvB,GAAnB,G,EAGvC6V,EAAAhb,UAAAi1B,qBAAA,eAUC9rB,EAAA5I,KATCA,KAAKylB,gBAAkBzlB,KAAK4J,oBAAoB5B,OAAOhI,KAAKiI,OAAO,GACnEjI,KAAKqc,QAAU,CAACrc,KAAKqc,QAAQ,IAC7Brc,KAAKke,iBAAkB,EACvBle,KAAKie,uBAAwB,EAC7BqD,YAAW,WACT1Y,EAAKwY,kB,GACJ,KACHphB,KAAKwe,iBACLxe,KAAK4a,IAAI+H,e,EAGXlI,EAA0Bhb,UAAA0hB,2BAA1B,SAA2BhV,GAA3B,IAqCCvD,EAAA5I,KApCCA,KAAK20B,aAAeC,EAAUC,aAAaC,uBACzC3oB,EACAnM,KAAK4d,QAEP,IAAMmX,EAAcH,EAAUI,YAAYC,6BAC1Cj1B,KAAKk1B,WAAa,IAAIN,EAAUO,iBAC9Bn1B,KAAK20B,aACLI,GAGF/0B,KAAKk1B,WAAWE,YAAc,SAACxyB,EAAG7B,GAC5BA,EAAEE,OAAOo0B,SAAWT,EAAUU,aAAaC,oBAC7C3sB,EAAK+T,MAAQ5b,EAAEE,OAAOgQ,KACtBpM,QAAQC,IAAI,gBAAgB/D,EAAEE,OAAOgQ,MACrCrI,EAAKgS,IAAImG,eAEb,EAEA/gB,KAAKk1B,WAAWM,WAAa,SAAC5yB,EAAG7B,GAC3BA,EAAEE,OAAOo0B,SAAWT,EAAUU,aAAaG,mBAC7C7sB,EAAK+T,MAAQ5b,EAAEE,OAAOgQ,KACtBpM,QAAQC,IAAI,eAAe/D,EAAEE,OAAOgQ,MACpCrI,EAAK8sB,kBACL9sB,EAAKgS,IAAImG,eAEb,EAEA/gB,KAAKk1B,WAAWS,SAAW,SAAC/yB,EAAG7B,GAC7B8D,QAAQ3B,MAAM,aAAcnC,EAAE60B,aAChC,EAEA51B,KAAKk1B,WAAWW,eAAiB,SAACjzB,EAAG7B,GACnC8D,QAAQC,IAAI,oBACZ8D,EAAKssB,WAAWY,iCAChBltB,EAAK2X,WACP,C,EAGF9F,EAAAhb,UAAAi2B,gBAAA,WACE11B,KAAK+1B,aAAe/1B,KAAK+1B,YAErB/1B,KAAK+1B,YACP/1B,KAAKg2B,mBAELh2B,KAAKi2B,iB,EAITxb,EAAAhb,UAAAu2B,iBAAA,WACEh2B,KAAKk1B,WAAWgB,iC,EAGlBzb,EAAAhb,UAAAw2B,gBAAA,WACEj2B,KAAKk1B,WAAWY,gC,EAGlBrb,EAAAhb,UAAAgyB,mBAAA,WACE,MACgB,4BAAdzxB,KAAKiI,OACS,4BAAdjI,KAAKiI,K,EAITwS,EAAahb,UAAA02B,cAAb,SAAc5S,GACZ,OAAIA,IAGG,IAAIld,MAAO+vB,mBAAmB,GAAI,CACvC5vB,KAAM,UACNC,OAAQ,W,EAOZgU,EAAAhb,UAAA42B,eAAA,e,oBAsDCztB,EAAA5I,KArDOiW,EAA+F,QAA9E9E,EAAwB,QAAxBb,EAAAtQ,KAAKylB,uBAAmB,IAAAnV,IAAAtQ,KAAK4J,oBAAoB5B,OAAOhI,KAAKiI,OAAO,UAAU,IAAAkJ,IAAA,GACrGnR,KAAK2f,yBAA2B1J,EAChCjW,KAAKs2B,wBAGDt2B,KAAK8d,uBACP9d,KAAK8d,qBAAqByY,SAC1Bv2B,KAAK8d,qBAAqB0Y,UAC1Bx2B,KAAK8d,qBAAuB,MAG9B,IAAM2Y,EAA2B,CAC/BjqB,OAAkC,QAA1B6M,EAAgB,QAAhBjH,EAAApS,KAAKwgB,mBAAW,IAAApO,OAAA,EAAAA,EAAEpL,gBAAQ,IAAAqS,IAAI,GACtClN,MAAoB,QAAbmN,EAAAtZ,KAAKigB,gBAAQ,IAAA3G,IAAI,GACxBrR,MAAiB,QAAVsR,EAAAvZ,KAAKiI,aAAK,IAAAsR,IAAI,GACrBtD,eAAcA,EACdtK,OAAmB,QAAXiO,EAAA5Z,KAAK2L,cAAM,IAAAiO,IAAI,GACvB1D,WAA2B,QAAfwgB,EAAA12B,KAAKkW,kBAAU,IAAAwgB,IAAI,GAC/BvgB,SAAuB,QAAbwgB,EAAA32B,KAAKmW,gBAAQ,IAAAwgB,IAAI,GAC3BvgB,gBAA0C,QAAzBwgB,EAAA52B,KAAKge,4BAAoB,IAAA4Y,IAAI,YAC9Cre,UAAWvY,KAAKglB,SAAW,eAC3BxM,UAAWxY,KAAKmlB,WAAa,sBAC7B3L,YAAaxZ,KAAKilB,SAYd5M,EAAWiC,WAASpa,OAAO,CAC/B,CAAE22B,QAAS7e,EAAoB8e,SAAUL,GACzC,CAAEI,QAAS3e,EAA4B4e,SAXnB,WAChBluB,EAAKkV,uBACPlV,EAAKkV,qBAAqByY,SAC1B3tB,EAAKkV,qBAAqB0Y,UAC1B5tB,EAAKkV,qBAAuB,MAE9BlV,EAAKmuB,iBACP,IAKG/2B,KAAKqY,UAEF2e,EAAah3B,KAAKkb,QAAQhb,OAAO,CACrC+2B,aAAa,EACbC,eAAgBl3B,KAAKkb,QAAQic,iBAAiBC,QAC9CC,iBAAkBr3B,KAAKkb,QAAQoc,WAAWC,SAASC,OAAO,KAAKC,MAAM,KAAKC,KAAK,KAAKC,IAAI,OAGpFC,EAAS,IAAIC,kBACjB1f,EACAnY,KAAKmb,iBACL9C,GAEF2e,EAAWc,OAAOF,GAClB53B,KAAK8d,qBAAuBkZ,EAC5Bh3B,KAAK4a,IAAImG,c,EAGXtG,EAAAhb,UAAAs3B,gBAAA,WACM/2B,KAAK8d,uBACP9d,KAAK8d,qBAAqByY,SAC1Bv2B,KAAK8d,qBAAqB0Y,UAC1Bx2B,KAAK8d,qBAAuB,MAE9B9d,KAAK6d,kBAAmB,EACxB7d,KAAKoY,kBAAkB5N,aACvBxK,KAAK4a,IAAImG,c,EAGHtG,EAAAhb,UAAA62B,sBAAA,eA4CP1tB,EAAA5I,KA1CCA,KAAK+d,6BAA6BnL,SAAQ,SAAA8G,GAAO,OAAAA,EAAI5D,aAAJ,IACjD9V,KAAK+d,6BAA+B,GAGpC,IAAMga,EAAU/3B,KAAKoY,kBAAkBjI,gBAAgBjF,WAAU,SAAA8sB,GAC3DA,EAAW9mB,OAAS8mB,EAAW/mB,KAAKmC,SAEtCxK,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,OACN+C,QAASK,EAAKib,yBAAyBmU,EAAW/mB,MAClDsS,KAAMrd,EAAU0C,EAAKzC,UACrB+f,QAAQ,EACR7K,iBAAiB,IAEnBzS,EAAKgS,IAAImG,eACTnY,EAAK4V,iBAET,IAGMyZ,EAASj4B,KAAKoY,kBAAkBhI,eAAelF,WAAU,SAAA8sB,GAC7D,GAAIA,GAAcA,EAAW5kB,OAAQ,CAEnC,IAAM8kB,EAActvB,EAAKyT,QAAQzT,EAAKyT,QAAQ7Z,OAAS,GACnD01B,GAAoC,OAArBA,EAAY1yB,KAC7B0yB,EAAY3vB,QAAUK,EAAKib,yBAAyBmU,IAEpDpvB,EAAKyT,QAAQ5Z,KAAK,CAChB+C,KAAM,KACN+C,QAASK,EAAKib,yBAAyBmU,GACvCzU,KAAMrd,EAAU0C,EAAKzC,UACrB+f,QAAQ,EACR7K,iBAAiB,IAEnBzS,EAAKwU,uBAAyBxU,EAAKyT,QAAQ7Z,OAAS,GAEtDoG,EAAKgS,IAAImG,eACTnY,EAAK4V,gBACN,CACH,IAEAxe,KAAK+d,6BAA6Btb,KAAKs1B,EAASE,E,IA1sEpD,G,cANC,CAAAzyB,KAAA2U,YAAUzU,KAAA,EACT0U,SAAU,8BACVC,SAA2C,mkzEAE3C8d,gBAAiBC,0BAAwBC,O,mwmCAhBlCC,e,MAEAhtB,G,MAhCPitB,qB,MALO9rB,c,MAuBA+rB,gB,MAhBP3Y,c,MASA4Y,a,MAiBO9uB,G,MAFAtC,G,MA9BAzD,G,MAsCA8Q,G,MAzCAgkB,W,MAsBPC,oB,MAVAre,Y,oBA4CCsF,SAAA,EAAApa,KAAAozB,YAASlzB,KAAA,CAAC,cACVmiB,QAAA,EAAAriB,KAAAozB,YAASlzB,KAAA,CAAC,UAAW,CAAEmzB,QAAQ,MAE/BC,uBAAA,EAAAtzB,KAAAuzB,eAAYrzB,KAAA,CAAC,2BAEbwnB,OAAA,EAAA1nB,KAAAozB,YAASlzB,KAAA,CAAC,YACVkrB,cAAA,EAAAprB,KAAAozB,YAASlzB,KAAA,CAAC,mBACV4mB,cAAA,EAAA9mB,KAAAozB,YAASlzB,KAAA,CAAC,mB,mBAGV8U,U,iBACAA,U,gBACAA,U,cACAA,U,kBACAA,U,oBACAA,U,kBACAA,U,eACAA,U,iBACAA,U,aACAA,U,aACAA,U,wBACAA,U,0BACAA,U,mBACAA,U,qBACAA,U,qBACAA,U,eACAA,U,gBACAA,U,kBACAA,U,sBACAA,U,gBACAA,U,iBACAA,U,eACAA,U,wBACAA,U,0BACAA,U,gBACAA,U,sBACAA,U,gBACAA,U,0BACAA,U,4BACAA,U,aACAA,U,uBACAA,U,2BACAA,U,iBACAA,U,0BACAA,U,uBACAA,U,gBACAA,U,wBACAA,U,iBACAA,U,cACAA,U,aACAA,U,wBAEAA,U,4BACAA,U,qBACAD,W,oBACAA,W,gBACAA,W,sBACAA,W,gBACAA,W,uBACAA,W,uBACAA,W,oBACAA,W,mBACAA,YChHH,IAAAye,EAAA,WALA,SAAAA,IAwCEh5B,KAAOi5B,SAAG,C,QAEVD,EAAAv5B,UAAAy5B,OAAA,WACEl5B,KAAKi5B,SAAWj5B,KAAKi5B,O,IAtCzB,G,cALC,CAAAzzB,KAAA2U,YAAUzU,KAAA,EACT0U,SAAU,kBACVC,SAAuC,uvC,o2BAItCG,U,cACAA,U,eACAA,U,iBACAA,U,aACAA,U,wBACAA,U,sBACAA,U,gBACAA,U,uBACAA,U,iBACAA,U,iBACAA,U,kBACAA,U,2BACAA,U,gBACAA,U,kBACAA,U,oBACAA,U,0BACAA,U,0BACAA,U,4BACAA,U,qBACAA,U,qBACAA,U,wBACAA,U,0BACAA,U,uBACAA,U,0BACAA,U,gBACAA,U,iBACAA,U,mBACAA,U,wBACAA,U,aACAA,U,eACAA,U,gBACAA,U,sBACAA,U,aACAA,WCZH,IAAA2e,EAAA,W,gBAjBC,CAAA3zB,KAAA4zB,WAAS1zB,KAAA,EACR2zB,aAAc,CACZlhB,GAEFmhB,QAAS,CACPC,gBAEFC,UAAW,CACT9kB,EACAhI,EACAmD,EACA0B,GAEFkoB,QAAS,CACPthB,OCpBJ,IAAAuhB,EAAA,WAEE,SAAAA,EAAoB7e,GAAA7a,KAAS6a,UAATA,C,QAGpB6e,EAASj6B,UAAAk6B,UAAT,SAAU/S,GACR,OAAOA,EAAO5mB,KAAK6a,UAAU0M,wBAAwBX,GAAQ,E,IANjE,G,cAHC,CAAAphB,KAAAo0B,OAAKl0B,KAAA,EACJm0B,KAAM,e,yCAHCrB,gB,ECmBT,IAAAsB,EAAA,WAoBE,SAAAA,EAC4BrO,EAClBsO,EACAnf,GAFkB5a,KAAGyrB,IAAHA,EAClBzrB,KAAE+5B,GAAFA,EACA/5B,KAAG4a,IAAHA,EAbV5a,KAAOg6B,SAAY,EAEnBh6B,KAAYi6B,cAAY,EAGxBj6B,KAAwBk6B,0BAAY,EAE1Bl6B,KAAA4b,gBAAkB,IAAItD,eACtBtY,KAAA6b,gBAAkB,IAAIvD,c,QAShCwhB,EAAAr6B,UAAA2Z,SAAA,W,EAGA0gB,EAAWr6B,UAAA06B,YAAX,SAAYH,GAAZ,IAaDpxB,EAAA5I,UAba,IAAAg6B,MAAc,MACxBh6B,KAAKg6B,QAAqB,MAAXA,EAAkBA,GAAWh6B,KAAKg6B,QACjD1Y,YAAW,WACT,IAAM8Y,EAAaxxB,EAAK6iB,IACrBtB,eAAevhB,EAAKwxB,MAAM11B,GAAGoD,YAC5BsyB,IACFA,EAAM/lB,MAAQzL,EAAKoxB,QACnBpxB,EAAKwxB,MAAMJ,QAAUpxB,EAAKoxB,SAG5BpxB,EAAKgS,IAAImG,cAET,G,EAGJ+Y,EAAAr6B,UAAA46B,WAAA,SAAWC,EAAoBC,GAA/B,IAiBC3xB,EAAA5I,KAhBCA,KAAKw6B,SAASC,WAAaz6B,KAAKw6B,SAASC,UACzCnZ,YAAW,WACLgZ,GACF1xB,EAAK4xB,SAASC,WAAa,EAC3BF,EAAQG,OACOtW,SAAS+F,eAAe,aAC9B7F,UAAU3O,IAAI,kBAEvB/M,EAAKuxB,aAAY,KAGjBvxB,EAAK4xB,SAASC,WAAa,EAC3BF,EAAQI,SAEV/xB,EAAKgS,IAAImG,cACT,G,EAGJ+Y,EAAAr6B,UAAAwtB,gBAAA,eAiBCrkB,EAAA5I,KAhBK6N,OAAO+sB,YAAc,MACvB56B,KAAK66B,SAAW,IAAIC,sBAClB,SAAC7G,IACmC,IAA9BA,EAAQ,GAAG8G,eACbnyB,EAAKwxB,MAAMnT,cAAcyT,OAEzB9xB,EAAKwxB,MAAMnT,cAAc0T,OAE7B,GACA,CACEK,UAAW,MAIfh7B,KAAK66B,SAASI,QAAQj7B,KAAK+5B,GAAG9S,e,EAIlC6S,EAAAr6B,UAAAy7B,iBAAA,WACEl7B,KAAKi6B,cAAgBj6B,KAAKi6B,aACrBj6B,KAAKi6B,cACRj6B,KAAKm7B,gBAAgBlU,cAAc0T,O,EAIvCb,EAAAr6B,UAAA27B,qBAAA,WACEp7B,KAAKk6B,0BAA4Bl6B,KAAKk6B,yBAElCl6B,KAAKk6B,yBACPl6B,KAAKm7B,gBAAgBlU,cAAcyT,OAEnC16B,KAAKm7B,gBAAgBlU,cAAc0T,O,EAIvCb,EAAUr6B,UAAA47B,WAAV,SAAW3W,GACT1kB,KAAK4b,gBAAgB5Q,KAAK0Z,E,EAG5BoV,EAAuBr6B,UAAA67B,wBAAvB,SAAwB5W,G,MACtB,OAAiC,QAA1BpU,EAAAtQ,KAAKu7B,6BAAqB,IAAAjrB,OAAA,EAAAA,EAAElL,MAAK,SAAA8J,GAAK,OAAAA,GAAKwV,CAAL,G,EAG/CoV,EAAAr6B,UAAA+7B,gBAAA,WACE,OAAO,C,EAGT1B,EAAAr6B,UAAAg8B,cAAA,WACE,OAAO,C,EAGT3B,EAAAr6B,UAAAi8B,YAAA,SAAYnI,EAAWE,GACrB,OAAIF,GAAcE,EAIdF,GAAaE,EAEbF,EAAUoI,OAAO,GAAGC,cAAgBnI,EAASkI,OAAO,GAAGC,cAE/CrI,EAAUoI,OAAO,GAAGC,cAPvB,E,IAtHb,G,cALC,CAAAp2B,KAAA2U,YAAUzU,KAAA,EACT0U,SAAU,mBACVC,SAA4C,4hF,29GAwBzC,CAAA7U,UAAAq2B,EAAAC,WAAA,EAAAt2B,KAAAu2B,SAAMr2B,KAAA,CAACs2B,e,MArCVnc,c,MAFA0Y,qB,yCAoBC/d,U,YACAA,U,eACAA,U,gBACAA,U,aACAA,U,YAGAA,UAIA4f,MAAA,EAAA50B,KAAAozB,YAASlzB,KAAA,CAAC,WACVy1B,gBAAA,EAAA31B,KAAAozB,YAASlzB,KAAA,CAAC,qB,uBAGV6U,W,uBACAA,YCHH,IAAA0hB,GAAA,WAwBE,SAAoBA,EAAArhB,EAAgCrP,GAAhCvL,KAAG4a,IAAHA,EAAgC5a,KAAIuL,KAAJA,EAjBpDvL,KAAYk8B,aAAQ,WAQpBl8B,KAAAm8B,YAAc,CACZC,QAAS,CACP,CAAC,CAAEC,OAAQ,KAAO,CAAEA,OAAQ,KAAO,CAAEC,KAAM,KAC3C,CAAC,CAAEC,KAAM,WAAa,CAAEA,KAAM,WAC9B,CAAC,OAAQ,SAAU,aACnB,CAAC,QACD,CAAC,U,QAKLN,EAAAx8B,UAAA2Z,SAAA,eAWCxQ,EAAA5I,KAVCA,KAAKwgB,YAAc1Z,EAEnBwa,YAAW,WACL1Y,EAAKqW,iBACPpa,QAAQC,IAAI,gBACZ8D,EAAK4zB,kBAEL33B,QAAQC,IAAI,e,GAEb,K,EAGLm3B,EAAAx8B,UAAA+8B,eAAA,W,QACMx8B,KAAKmvB,kBACPnvB,KAAKk8B,aAAqC,QAAtB5rB,EAAAtQ,KAAKmvB,uBAAiB,IAAA7e,OAAA,EAAAA,EAAAupB,KAC1C75B,KAAKy8B,cAAsC,QAAtBtrB,EAAAnR,KAAKmvB,uBAAiB,IAAAhe,OAAA,EAAAA,EAAA6X,QAC3ChpB,KAAK4a,IAAI+H,gB,EAIbsZ,EAAAx8B,UAAAi9B,YAAA,WACO18B,KAAKif,gBAGRjf,KAAK28B,mBAAmBzxB,W,EAI5B+wB,EAAAx8B,UAAAk9B,iBAAA,eA6BC/zB,EAAA5I,KA5BC6E,QAAQC,IAAI,qBAEZ,IAAMoE,EAASlJ,KAAKwgB,YAAYvZ,WAAmD,yCAAAjH,KAAKiW,eAAc,UAAUjW,KAAKiI,MAC/G4D,EAAU,IAAIC,cAAY,CAC9B,eAAgB,mBAChBH,OAAQ,6BAGN4D,EAAO,CACTsqB,KAAM75B,KAAKk8B,aACXlT,QAAShpB,KAAKy8B,eAGhB,OAAOz8B,KAAKuL,KAAKoZ,KAAKzb,EAAKqG,EAAM,CAAE1D,QAAOA,IAAIG,KAC5C4Y,aAAU,SAACzZ,GAMT,OAFAvC,EAAKgS,IAAImG,eAEF8D,KAAG1Z,EACZ,IACA2Z,cAAW,SAAC5hB,GAGV,OAFA2B,QAAQ3B,MAAM,kCAAmCA,GAE1C2hB,KAAG,K,MAKhBoX,EAAAx8B,UAAAm9B,mBAAA,eA6BCh0B,EAAA5I,KA5BC6E,QAAQC,IAAI,qBAEZ,IAAMoE,EAASlJ,KAAKwgB,YAAYvZ,WAA0D,gDAAAjH,KAAKiW,eAAc,UAAUjW,KAAKiI,MACtH4D,EAAU,IAAIC,cAAY,CAC9B,eAAgB,mBAChBH,OAAQ,6BAGN4D,EAAO,CACTsqB,KAAM75B,KAAKk8B,aACXlT,QAAShpB,KAAKy8B,eAGhB,OAAOz8B,KAAKuL,KAAKsxB,IAAI3zB,EAAKqG,EAAM,CAAE1D,QAAOA,IAAIG,KAC3C4Y,aAAU,SAACzZ,GAMT,OAFAvC,EAAKgS,IAAImG,eAEF8D,KAAG1Z,EACZ,IACA2Z,cAAW,SAAC5hB,GAGV,OAFA2B,QAAQ3B,MAAM,kCAAmCA,GAE1C2hB,KAAG,K,QAhHlB,G,eALC,CAAArf,KAAA2U,YAAUzU,KAAA,EACT0U,SAAU,sBACVC,SAA+C,2V,4KA7B/Cke,qB,MAHO9rB,c,0CAoCN+N,U,uBACAA,U,uBACAA,U,sBACAA,U,aACAA,WCrBH,IAAAsiB,GAAA,W,iBALC,CAAAt3B,KAAA4zB,WAAS1zB,KAAA,EACR2zB,aAAc,CAACL,EAAkBve,EAAqBqf,EAAsBJ,EAAcuC,IAC1F3C,QAAS,CAACC,eAAcwD,gBAAeC,gBAAeC,mBAAkBC,cAAaC,sBAAqBC,cAAajE,GACvHM,QAAS,CAACT,EAAkBve,EAAqBqf,O","ignoreList":[]}
1
+ {"version":3,"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","_","label","sent","trys","ops","g","Iterator","verb","Symbol","iterator","n","v","op","pop","length","push","__values","o","s","m","i","__read","r","ar","error","__spreadArray","to","from","pack","arguments","l","slice","concat","SuppressedError","TranslationService","eventId","translationsData","Key","DefaultValue","Translations","en","fr","it","es","de","zh","ru","setEventId","id","getTranslation","key","console","log","lang","localStorage","getItem","replace","entry","find","item","getLang","storageKey","type","Injectable","args","providedIn","formatHoursAndMinutes","date","hours","getHours","minutes","getMinutes","formatNow","timezone","now","Date","options","hour12","hour","minute","timeZone","toLocaleString","formatTimeStamps","timestamps","prod_environment","USERS_API","BASE_URL","AGENTS_API","API_KEY","SocketUrl","dev_environment","ConversationService","conversationStorageKeyPrefix","sessionStorageKeyPrefix","userSpecificNotification","Subject","generateKey","Math","floor","getTime","toString","random","getKey","botId","resetKey","setItem","getSessionKey","sessionId","sendValidatedUserData","message","getUserSpecificNotification","asObservable","NotificationSocket","_super","_this","socketConfig","on","warn","err","Socket","url","transports","reconnection","autoConnect","upgrade","reconnectionDelay","reconnectionDelayMax","reconnectionAttempts","Infinity","SocketService","conversationService","notificationSocket","isCommonSocketInitialized","isUserSpecificSocketInitialized","isUserSpecificEventReleased","messageQueue","releaseInterval","intervalSetup","startReleasingMessages","isSocketInitialized","isCommon","disconnectSocketConnection","disconnect","connectSocketConnection","connect","registerUserSpecificHiveSocket","conversation_id","org_id","groupId","groupId_org","emit","fromEvent","subscribe","res","setInterval","shift","BotsService","http","eventDescription","bot_api","fetchSpeechAuthorizationToken","apiKey","domain","headers","HttpHeaders","get","pipe","map","resp","token","getWorkflowsByOrgId","orgId","getWorkflowExecutionById","executionId","apiUrl","HttpClient","AudioAnalyzerService","audioContext","analyserNode","dataArray","animationFrameId","isRunning","audioLevelsSubject","BehaviorSubject","isUserSpeakingSubject","noiseFloor","noiseFloorSamples","NOISE_FLOOR_SAMPLE_COUNT","SPEAKING_THRESHOLD_MULTIPLIER","WAVEFORM_BAR_COUNT","audioLevels$","isUserSpeaking$","start","stream","stop","window","AudioContext","webkitAudioContext","source","createMediaStreamSource","createAnalyser","fftSize","smoothingTimeConstant","bufferLength","frequencyBinCount","Uint8Array","analyze","cancelAnimationFrame","state","close","catch","getByteTimeDomainData","rms","calculateRMS","sum","reduce","a","isSpeaking","bars","generateWaveformBars","requestAnimationFrame","data","normalized","sqrt","abs","min","max","WebSocketVoiceClientService","ws","roomCreatedSubject","userTranscriptSubject","botTranscriptSubject","roomCreated$","userTranscript$","botTranscript$","wsUrl","_a","readyState","WebSocket","OPEN","onmessage","event","msg","JSON","parse","roomUrl","room_url","text","final","_b","onerror","onclose","defineProperty","DailyVoiceClientService","ngZone","callObject","localStream","localSessionId","remoteAudioElement","speakingSubject","userSpeakingSubject","micMutedSubject","localStreamSubject","speaking$","userSpeaking$","micMuted$","localStream$","_e","navigator","mediaDevices","getUserMedia","audio","audioTrack","getAudioTracks","getTracks","forEach","Error","Daily","createCallObject","videoSource","audioSource","setupEventHandlers","joinOptions","trim","join","participants","local","session_id","localAudio","cleanup","err_1","run","peerId","activeSpeaker","isLocal","participant","track","kind","_d","_c","tracks","playRemoteTrack","stopRemoteAudio","errorMsg","MediaStream","Audio","autoplay","srcObject","play","pause","setMuted","muted","setLocalAudio","leave","destroy","NgZone","VoiceAgentService","audioAnalyzer","wsClient","dailyClient","callStateSubject","statusTextSubject","durationSubject","isMicMutedSubject","callStartTime","durationInterval","subscriptions","Subscription","destroy$","callState$","statusText$","duration$","isMicMuted$","add","levels","ngOnDestroy","unsubscribe","resetToIdle","stopDurationTimer","conversationId","eventToken","eventUrl","domainAuthority","fetch","method","Authorization","eventtoken","eventurl","stringify","bot_id","voice","ok","status","json","rn_ws_url","take","takeUntil","onRoomCreated","error_1","filter","combineLatest","bot","startDurationTimer","toggleMic","current","updateDuration","elapsed","seconds","padStart","clearInterval","VOICE_MODAL_CONFIG","InjectionToken","VOICE_MODAL_CLOSE_CALLBACK","VoiceAgentModalComponent","voiceAgentService","injector","EventEmitter","agentName","agentRole","injectedConfig","onCloseCallback","displayAvatarUrl","callState","statusText","duration","isMicMuted","isUserSpeaking","audioLevels","hasLeftConnectedOnce","isConnecting","ngOnInit","_f","agentAvatar","speaking","sub","startCall","_g","getWaveformHeight","level","callAgain","backToChat","endCall","hangUp","Component","selector","template","Injector","Output","Input","ChatDrawerComponent","fb","botService","cdr","sanitizer","elementRef","renderer","socketService","translationService","overlay","viewContainerRef","bodyOverflowClass","isCollapsedTrue","copilotName","feedbackEvent","onCloseEvent","openPage","sessionActions","closeBot","connectWithUser","scheduleMeeting","refreshToken","openSupport","autogenKey","addToMyAgendaAction","myUpcomingSessionAction","connectOrFollowAction","aiResponse","chatLog","decoder","TextDecoder","feedbackDone","greetingMsg","hasBackdropValue","input","listenerAdded","loading","mode","quickPrompts","thumbsDownMsgIndex","userName","showStartAgain","isIOSDevice","showFeedBackIconsIndex","temperature","speakers","conSessionKey","currentWorkflowActionProgress","currentWorkflowAction","recognizedText","authorizationToken","region","isVoiceModalOpen","voiceModalOverlayRef","voiceTranscriptSubscriptions","domainAuthorityValue","chatSocketInitialized","isChatingWithAi","readAllChunks","reader","getReader","allSuggestions","closed","scrollToBottom","ReadableStream","controller","pump","currentMessageForEditor","currentIndexForEditor","isDropdownOpen","selectedAgents","allSelected","isDocInEditMode","isContentLoaded","isCollapsed","isCollapsedForGraph","isCollapsedForFGraph","dateTime","toISOString","currentSourcesList","isShowEditorButton","isDrawerOpen","voiceModalConversationId","chatMain","ElementRef","ngOnChanges","changes","currentValue","s27Token","previousValue","isFetchDataFor","chat","is401","fetchDataFor","fetchData","environment","isDev","location","hostname","includes","changeTemperature","fetchBotConfig","markForCheck","fetchChatHistory","response","mapChatHistory","initializeSpeechRecognizer","ensureChatSocket","initializeSocket","setTimeout","listenSockets","eventSubscription","OtherFields","workflow_id","_l","percentage","output","action_name","current_action_name_1","current_action_name","workflow_execution_id","time_stamp","actionIndex","workflowExecutionDetails","Actions","findIndex","Name","currentWorkflowExecutionDetails","executingWorkflow","focusOnTextarea","detectChanges","_m","message_id_1","message_id","answer","web_results","search_results","graphs","execution_graphs","suggestions","currentChatMessage","_id","time","isArray","searchTerms","sourcesList","displayedSources","remainingSources","processMessageForDisplay","executionGraphs","relatedListItems","initializeSocketAndListen","handleEvent","newTemperature","wrapper","document","querySelector","classList","remove","onStartAgain","archieveMessages","userId","post","switchMap","of","catchError","triggerSupport","botName","botIcon","Icon","botSkills","Skills","Greeting","thumbsDownMessages","NegativeResponses","QuickPrompts","conversationKey","accept","handleError","operation","chats","Messages","Type","Text","InsertTimestamp","copied","WorkflowExecutionId","WebLinks","ExecutionGraphs","Graphs","SearchTerms","processMessage","markdownLinkRegex","urlRegex","test","html","sanitizeHtml","match","hashes","ngAfterViewChecked","nativeElement","querySelectorAll","link","addEventListener","onFeedbackClick","bind","bypassSecurityTrustHtml","onClose","removeClass","sendMessageWithTile","prompt","textarea","myInput","style","height","makeAskRequest","agents","inputMsg","fetchSmallTalk","smallTalk","isFeedbackMsg","read","lastItem","decodedChunk","decode","suggestionsMatch","aiFormattedData","section_id","fetchMyConnections","fetchPendingRequests","speakerIds","content","session","getSpeakersByStaffIds","sectionId","sessionIds","usersLen","search","connetUserIds","is_open_page","isMobileBrowser","action","addCloseBotClickEvent","enqueue","submitFeedback","flag","messageId","isHelpful","thumbsUpMessage","supportLink","getElementById","handleKeydown","shiftKey","preventDefault","handleSubmit","handleUpClick","idx","liked","unliked","handleDownClick","copyText","index","textElement","tempTextArea","createElement","innerText","appendChild","select","execCommand","removeChild","handleCopyClick","sanitizeHTML","doc","DOMParser","parseFromString","fragment","createDocumentFragment","childNodes","node","cloneNode","simplifiedDiv","script","innerHTML","handleEditorClick","isEditor","editorsDrawer","open","button","display","counter","interval","scrollTop","scrollHeight","focus","handleAction","info","ngAfterViewInit","drawer","opened","setBodyOverflow","openedChange","removeBodyOverflow","addClass","ids","speaker","performSessionAction","element","listen","userAgent","connectToUser","canDisconnect","scheduleMeetingWithUser","user","canConnect","pendingRequests","myConnections","conn","toggleDropdown","fetchAgents","onSelectAll","agent","selected","onAgentChange","agentFound","areAllSelected","every","getDropdownHeaderText","fetchAgents_http","assign","fetchContent_http","documentContent","fetchEditorContent","markdown","marked","Renderer","href","title","markdownContent","prepareHtml","code","escapedCode","escapeHtml","language","copyToClipboard","clipboard","writeText","alert","toggleCollapse","toggleCollapseGraph","toggleCollapseFGraph","getDomainName","URL","getFaviconUrl","onCardClick","sources","sourcesDrawer","openOuterEditor","onCloseEditor","onDrawerClosed","onCloseSource","toggleDrawer","todo","updateButtonVisibility","openLinkInNewTab","adjustTextareaHeight","target","overflowY","toggleWorkflows","checkForCop29BotId","orgWorkflows","isWorkflowOpen","selectedWorkflow","openWorkflowInput","initializeForm","formControls","Trigger","InputSchema","InputId","Value","Required","Validators","required","workflowForm","group","onWorkflowSelected","workflow","onWorkflowSubmit","valid","generateMarkdown","showWorkflowExecutionLoader","Inputs","workflowInputs","WorkflowName","workflowId","workflow_inputs","user_question","user_id","first_name","firstName","last_name","lastName","workspaceToken","makeAskRequestold","obj","key_label","_loop_1","this_1","Label","entries","_o","_p","showWorkflowHistoryDetails","showWorkflowExecutionDetails","InsertTimeStamp","closeModal","objectToArray","keys","startNewConversation","speechConfig","SpeechSDK","SpeechConfig","fromAuthorizationToken","audioConfig","AudioConfig","fromDefaultMicrophoneInput","recognizer","SpeechRecognizer","recognizing","reason","ResultReason","RecognizingSpeech","recognized","RecognizedSpeech","toggleRecording","canceled","errorDetails","sessionStopped","stopContinuousRecognitionAsync","isRecording","startRecognition","stopRecognition","startContinuousRecognitionAsync","getLatestTime","toLocaleTimeString","openVoiceModal","setupVoiceTranscripts","detach","dispose","config","_h","_j","_k","provide","useValue","closeVoiceModal","overlayRef","hasBackdrop","scrollStrategy","scrollStrategies","block","positionStrategy","position","global","bottom","right","left","top","portal","ComponentPortal","attach","userSub","transcript","botSub","lastMessage","changeDetection","ChangeDetectionStrategy","OnPush","FormBuilder","ChangeDetectorRef","DomSanitizer","Renderer2","Overlay","ViewContainerRef","ViewChild","static","closePlaygroundButtons","ViewChildren","ChatBotComponent","visible","toggle","VoiceAgentModule","NgModule","declarations","imports","CommonModule","providers","exports","SafeHtmlPipe","transform","Pipe","name","VideoPlayerComponent","el","isMuted","isFullscreen","isFullscreenvideoPlaying","toggleSound","video","togglePlay","playState","videoEl","videoObj","isPlaying","innerWidth","observer","IntersectionObserver","isIntersecting","threshold","observe","toggleFullscreen","fullscreenvideo","toggleFullscreenPlay","followUser","checkPendingSentRequest","myPendingSentRequests","canUnfollowUser","canFollowUser","getIniNames","charAt","toUpperCase","undefined","decorators","Inject","DOCUMENT","BotHtmlEditorComponent","documentName","quillConfig","toolbar","header","font","list","filldataInForm","editorContent","saveContent","saveContent_http","updateContent_http","put","HiveGptModule","OverlayModule","MatIconModule","MatSidenavModule","FormsModule","ReactiveFormsModule","QuillModule"],"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/translations/translation.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/utils/utils.ts","../../../../projects/hivegpt/eventsgpt-angular/src/environments/environment.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/conversation.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/NotificationSocket.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/socket-service.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/audio-analyzer.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/websocket-voice-client.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/daily-voice-client.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/voice-agent.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/voice-modal-tokens.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chat-drawer/chat-drawer.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chatbot/chatbot.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/voice-agent.module.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/pipes/safe-html.pipe.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/video-player/video-player.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot-html-editor/bot-html-editor.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/hivegpt.module.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslationService {\n private eventId: string | null = null;\n\n setEventId(id: string) {\n this.eventId = id;\n }\n\n getTranslation(key: string): string {\n console.log('eventId', this.eventId);\n // let lang = String(this.getLang(this.eventId)).replace(/^\"|\"$/g, '');\n const lang = (\n localStorage.getItem('defaultLanguage-' + this.eventId) || 'en'\n ).replace(/^\"|\"$/g, '');\n\n const entry = this.translationsData.find((item) => item.Key === key);\n\n if (!entry) {\n return key; // fallback\n }\n\n return entry.Translations[lang] || entry.DefaultValue || key;\n }\n\n private getLang(eventId?: string | null): string {\n const suffix = eventId ? `-${eventId}` : '';\n const storageKey = `defaultLanguage${suffix}`;\n\n return localStorage.getItem(storageKey) || 'en';\n }\n\n private translationsData: any[] = [\n { \n Key: \"Copy\",\n DefaultValue: \"Copy\",\n Translations: {\n en: \"Copy\",\n fr: \"Copier\",\n it: \"Copia\",\n es: \"Copiar\",\n de: \"Kopieren\",\n \"pt-br\": \"Copiar\",\n ar: \"نسخ\",\n zh: \"复制\",\n ru: \"Копировать\"\n }\n}\n,\n {\n \n Key: \"May I assist you with anything else\",\n DefaultValue: \"Great. May I assist you with anything else?\",\n Translations: {\n en: \"Great. May I assist you with anything else?\",\n fr: \"Parfait. Puis-je vous aider avec autre chose ?\",\n it: \"Perfetto. Posso aiutarti con qualcos'altro?\",\n es: \"Genial. ¿Puedo ayudarte con algo más?\",\n de: \"Super. Kann ich Ihnen noch bei etwas anderem helfen?\",\n \"pt-br\": \"Ótimo. Posso ajudar com mais alguma coisa?\",\n ar: \"رائع. هل يمكنني مساعدتك في أي شيء آخر؟\",\n zh: \"太好了。还有什么我可以帮您的吗?\",\n ru: \"Отлично. Могу ли я помочь вам с чем-то ещё?\"\n }\n},\n {\n Key: \"We are sorry we've not been able to answer your question\",\n DefaultValue: \"We are sorry we've not been able to answer your question. However, our dedicated support team is happy to help. Please <a href=\\\"mailto:support@social27.com\\\">click here</a> and a human agent will assist you as soon as possible.\",\n Translations: {\n en: \"We are sorry we've not been able to answer your question. However, our dedicated support team is happy to help. Please <a href=\\\"mailto:support@social27.com\\\">click here</a> and a human agent will assist you as soon as possible.\",\n fr: \"Nous sommes désolés de ne pas avoir pu répondre à votre question. Cependant, notre équipe d'assistance se fera un plaisir de vous aider. Veuillez <a href=\\\"mailto:support@social27.com\\\">cliquer ici</a> et un agent humain vous assistera dès que possible.\",\n it: \"Ci dispiace di non essere riusciti a rispondere alla tua domanda. Tuttavia, il nostro team di supporto dedicato sarà lieto di aiutarti. Ti preghiamo di <a href=\\\"mailto:support@social27.com\\\">fare clic qui</a> e un operatore umano ti assisterà al più presto.\",\n es: \"Lamentamos no haber podido responder a tu pregunta. Sin embargo, nuestro equipo de soporte estará encantado de ayudarte. Por favor, <a href=\\\"mailto:support@social27.com\\\">haz clic aquí</a> y un agente humano te asistirá lo antes posible.\",\n de: \"Es tut uns leid, dass wir Ihre Frage nicht beantworten konnten. Unser engagiertes Support-Team hilft Ihnen jedoch gerne weiter. Bitte <a href=\\\"mailto:support@social27.com\\\">klicken Sie hier</a>, und ein menschlicher Mitarbeiter wird Ihnen so bald wie möglich helfen.\",\n \"pt-br\": \"Lamentamos não ter conseguido responder à sua pergunta. No entanto, nossa equipe de suporte dedicada ficará feliz em ajudar. Por favor, <a href=\\\"mailto:support@social27.com\\\">clique aqui</a> e um agente humano o ajudará o mais rápido possível.\",\n ar: \"نأسف لعدم تمكننا من الإجابة على سؤالك. ومع ذلك، يسعد فريق الدعم المخصص لدينا بمساعدتك. يرجى <a href=\\\"mailto:support@social27.com\\\">النقر هنا</a> وسيساعدك أحد الوكلاء البشريين في أقرب وقت ممكن.\",\n zh: \"很抱歉我们未能回答您的问题。不过,我们的专属支持团队很乐意为您提供帮助。请<a href=\\\"mailto:support@social27.com\\\">点击这里</a>,人工客服将尽快为您提供协助。\",\n ru: \"К сожалению, мы не смогли ответить на ваш вопрос. Однако наша служба поддержки с радостью вам поможет. Пожалуйста, <a href=\\\"mailto:support@social27.com\\\">нажмите здесь</a>, и наш оператор свяжется с вами как можно скорее.\"\n }\n},\n {\n Key: 'Ask anything',\n DefaultValue: 'Ask anything',\n Translations: {\n en: 'Ask anything',\n fr: 'Demandez ce que vous voulez',\n it: 'Chiedi qualsiasi cosa',\n es: 'Pregunta lo que quieras',\n de: 'Frag alles',\n 'pt-br': 'Pergunte qualquer coisa',\n ar: 'اسأل أي شيء',\n zh: '随便问',\n ru: 'Спросите что угодно',\n },\n },\n {\n Key: 'Assistant',\n DefaultValue: 'Assistant',\n Translations: {\n en: 'Assistant',\n fr: 'Assistant',\n it: 'Assistente',\n es: 'Asistente',\n de: 'Assistent',\n 'pt-br': 'Assistente',\n ar: 'مساعد',\n zh: '助手',\n ru: 'Ассистент',\n },\n },\n {\n Key: 'Your personal or company information is kept private and secure within this chat.',\n DefaultValue:\n 'Your personal or company information is kept private and secure within this chat.',\n Translations: {\n en: 'Your personal or company information is kept private and secure within this chat.',\n fr: 'Vos informations personnelles ou celles de votre entreprise sont conservées privées et sécurisées dans cette conversation.',\n it: \"Le tue informazioni personali o aziendali sono mantenute private e sicure all'interno di questa chat.\",\n es: 'Tu información personal o de la empresa se mantiene privada y segura dentro de este chat.',\n de: 'Ihre persönlichen oder geschäftlichen Informationen bleiben in diesem Chat privat und sicher.',\n 'pt-br':\n 'Suas informações pessoais ou da empresa são mantidas privadas e seguras dentro deste chat.',\n ar: 'تظل معلوماتك الشخصية أو معلومات شركتك خاصة وآمنة داخل هذه المحادثة.',\n zh: '您的个人或公司信息在此聊天中保持私密和安全。',\n ru: 'Ваша личная или корпоративная информация остается конфиденциальной и защищенной в этом чате.',\n },\n },\n {\n Key: 'Send message',\n DefaultValue: 'Send message',\n Translations: {\n en: 'Send message',\n fr: 'Envoyer un message',\n it: 'Invia messaggio',\n es: 'Enviar mensaje',\n de: 'Nachricht senden',\n 'pt-br': 'Enviar mensagem',\n ar: 'إرسال رسالة',\n zh: '发送消息',\n ru: 'Отправить сообщение',\n },\n },\n {\n Key: 'Platform GPT',\n DefaultValue: 'Platform GPT',\n Translations: {\n en: 'Platform GPT',\n fr: 'Plateforme GPT',\n it: 'Piattaforma GPT',\n es: 'Plataforma GPT',\n de: 'Plattform GPT',\n 'pt-br': 'Plataforma GPT',\n ar: 'منصة GPT',\n zh: '平台 GPT',\n ru: 'Платформа GPT',\n },\n },\n {\n Key: 'New Chat',\n DefaultValue: 'New Chat',\n Translations: {\n en: 'New Chat',\n fr: 'Nouvelle conversation',\n it: 'Nuova chat',\n es: 'Nuevo chat',\n de: 'Neuer Chat',\n 'pt-br': 'Novo chat',\n ar: 'محادثة جديدة',\n zh: '新聊天',\n ru: 'Новый чат',\n },\n },\n {\n Key: 'You',\n DefaultValue: 'You',\n Translations: {\n en: 'You',\n fr: 'Vous',\n it: 'Tu',\n es: 'Tú',\n de: 'Du',\n 'pt-br': 'Você',\n ar: 'أنت',\n zh: '您',\n ru: 'Вы',\n },\n },\n {\n Key: 'Write your message',\n DefaultValue: 'Write your message',\n Translations: {\n en: 'Write your message',\n fr: 'Écrivez votre message',\n it: 'Scrivi il tuo messaggio',\n es: 'Escribe tu mensaje',\n de: 'Schreiben Sie Ihre Nachricht',\n 'pt-br': 'Escreva sua mensagem',\n ar: 'اكتب رسالتك',\n zh: '写下您的消息',\n ru: 'Напишите ваше сообщение',\n },\n },\n {\n Key: 'Send',\n DefaultValue: 'Send',\n Translations: {\n en: 'Send',\n fr: 'Envoyer',\n it: 'Invia',\n es: 'Enviar',\n de: 'Senden',\n 'pt-br': 'Enviar',\n ar: 'إرسال',\n zh: '发送',\n ru: 'Отправить',\n },\n },\n \n {\n Key: 'Call Interface',\n DefaultValue: 'Call Interface',\n Translations: {\n en: 'Call Interface',\n fr: \"Interface d'appel\",\n it: 'Interfaccia chiamata',\n es: 'Interfaz de llamada',\n de: 'Anrufoberfläche',\n 'pt-br': 'Interface de chamada',\n ar: 'واجهة الاتصال',\n zh: '呼叫界面',\n ru: 'Интерфейс звонка',\n },\n },\n {\n Key: 'Close',\n DefaultValue: 'Close',\n Translations: {\n en: 'Close',\n fr: 'Fermer',\n it: 'Chiudi',\n es: 'Cerrar',\n de: 'Schließen',\n 'pt-br': 'Fechar',\n ar: 'إغلاق',\n zh: '关闭',\n ru: 'Закрыть',\n },\n },\n ];\n}\n","const formatHoursAndMinutes = (date: Date) => {\n let hours = date.getHours() % 12;\n const minutes = date.getMinutes();\n const amPm = date.getHours() < 12 ? 'AM' : 'PM';\n if(hours === 0) hours = 12;\n\n const formattedHours = hours < 10 ? `0${hours}` : hours;\n const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;\n\n return `${formattedHours}:${formattedMinutes} ${amPm}`;\n};\n\nexport const formatNow = (timezone?: string) => {\n const now = new Date();\n if (timezone) {\n const options: any = {\n hour12: true,\n hour: 'numeric',\n minute: 'numeric',\n timeZone: timezone,\n };\n return now.toLocaleString('en-US', options);\n }\n return formatHoursAndMinutes(now);\n};\n\nexport const formatTimeStamps = (timezone: string, timestamps: any) => {\n const date = new Date(timestamps + 'Z');\n\n const options: any = {\n hour12: true,\n hour: 'numeric',\n minute: 'numeric',\n timeZone: timezone,\n };\n return date.toLocaleString('en-US', options);\n};\n","\n\nexport const prod_environment = {\n USERS_API: 'https://es-user.social27.com/api',\n BASE_URL: 'https://agent-api.hivegpt.ai',\n AGENTS_API: 'https://hive-ai.social27.com/api',\n API_KEY: '82595783-dc9c-4513-8204-709818d51be3',\n SocketUrl: 'https://notif-v2-ws.social27.com/'\n}\n\n\nexport const dev_environment = {\n USERS_API: 'https://pre-user.social27.com/api',\n BASE_URL: 'https://pre-agent-api.hivegpt.ai',\n AGENTS_API: 'https://hive-pre-ai.social27.com/api',\n API_KEY: '66d59244c50b8fb597a101t1',\n SocketUrl: 'https://notif-ws-staging.social27.com/',\n};\n\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConversationService {\n private conversationStorageKeyPrefix = 'conversationKey_';\n private sessionStorageKeyPrefix = 'sessionKey_';\n\n private userSpecificNotification: Subject<any> = new Subject<any>();\n\n constructor() { }\n\n generateKey(): string {\n const timestamp = Math.floor(new Date().getTime() / 1000).toString(16);\n const randomHex = 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, () => {\n return Math.floor(Math.random() * 16).toString(16);\n });\n return timestamp + randomHex;\n }\n\n getKey(botId: string, resetKey: boolean = false): string {\n const storageKey = `${this.conversationStorageKeyPrefix}${botId}`;\n let value = localStorage.getItem(storageKey);\n\n if (!value || resetKey) {\n value = this.generateKey();\n localStorage.setItem(storageKey, value);\n }\n\n return value;\n }\n\n getSessionKey(sessionId: string, resetKey: boolean = false): string {\n const storageKey = `${this.sessionStorageKeyPrefix}${sessionId}`;\n let value = localStorage.getItem(storageKey);\n\n if (!value || resetKey) {\n value = this.generateKey();\n localStorage.setItem(storageKey, value);\n }\n\n return value;\n }\n\n sendValidatedUserData(message: any) {\n this.userSpecificNotification.next(message);\n }\n\n getUserSpecificNotification(): Observable<any> {\n return this.userSpecificNotification.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Socket, SocketIoConfig } from 'ngx-socket-io';\nimport { prod_environment } from '../../environments/environment';\n\n@Injectable({\n providedIn: 'root' // This ensures the service is available across the application\n})\nexport class NotificationSocket extends Socket {\n constructor() {\n super(socketConfig);\n\n // Log connection status\n this.on('connect', () => {\n console.log('Socket connected');\n });\n\n this.on('disconnect', () => {\n console.warn('Socket disconnected');\n });\n\n this.on('connect_error', (err) => {\n console.error('Socket connection error:', err);\n });\n }\n}\n\nconst socketConfig: SocketIoConfig = {\n url: prod_environment.SocketUrl,\n options: {\n transports: ['websocket', 'polling'],\n reconnection: true,\n autoConnect: true,\n upgrade: true,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 5000,\n reconnectionAttempts: Infinity\n }\n};","import { Injectable } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\nimport { ConversationService } from './conversation.service';\nimport { NotificationSocket } from './NotificationSocket';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SocketService {\n public testMessage: string;\n private isCommonSocketInitialized = false;\n private isUserSpecificSocketInitialized = false;\n private isUserSpecificEventReleased = true;\n private messageQueue: any[] = [];\n private releaseInterval = 1000;\n private intervalSetup: boolean = false;\n\n constructor(\n private conversationService: ConversationService,\n private notificationSocket: NotificationSocket\n ) {\n this.startReleasingMessages();\n }\n\n isSocketInitialized(isCommon: boolean) {\n return isCommon\n ? this.isCommonSocketInitialized\n : this.isUserSpecificSocketInitialized &&\n !this.isUserSpecificEventReleased;\n }\n\n disconnectSocketConnection() {\n this.notificationSocket.disconnect();\n }\n connectSocketConnection() {\n this.notificationSocket.connect();\n }\n registerUserSpecificHiveSocket(botId: string, conversation_id: string, org_id: string) {\n const commonNotification = 'commonNotification';\n const groupId = `Hive_AI_Notifs_${botId}_${conversation_id}`;\n const groupId_org = `Hive_AI_Notifs_${org_id}`;\n\n // Remove any pre-existing listeners for commonNotification\n // this.notificationSocket.removeAllListeners(commonNotification);\n\n // Join the group again with updated botId and conversation_id\n this.notificationSocket.emit('joinData', { groupId });\n this.notificationSocket.emit('joinData', { groupId: groupId_org });\n\n // Re-register for common notifications\n this.notificationSocket.fromEvent(commonNotification).subscribe(\n (res) => {\n console.log('Received commonNotification:', res);\n this.conversationService.sendValidatedUserData(res);\n },\n (error) => {\n console.error('Error receiving commonNotification:', error);\n }\n );\n }\n\n private startReleasingMessages() {\n if (!this.intervalSetup) {\n setInterval(() => {\n if (this.messageQueue.length > 0) {\n const message = this.messageQueue.shift(); // Remove the first message from the queue\n // Handle the message here, e.g., send it to the server or process it\n console.log('Releasing message from queue:', message);\n // this.campaignService.sendValidatedUserData(message);\n }\n }, this.releaseInterval);\n this.intervalSetup = true; // Prevents multiple intervals\n }\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { HttpHeaders } from '@angular/common/http';\nimport { Observable, Subject, throwError } from 'rxjs';\nimport { AnyRecord } from 'dns';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BotsService {\n eventDescription = new Subject();\n bot_api = 'https://agent-api.hivegpt.ai/';\n constructor(private http: HttpClient) { }\n\n fetchSpeechAuthorizationToken(botId, apiKey, domain) {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'hive-bot-id': botId,\n 'domain-authority': domain\n });\n\n const apiUrl = `${this.bot_api}speech/issue_token`;\n const url = `${apiUrl}`;\n return this.http.get(url, { headers }).pipe(\n map((resp: any) => {\n return resp.token;\n })\n );\n }\n\n getWorkflowsByOrgId(orgId: string): Observable<any> {\n const apiUrl = `${this.bot_api}workflows`;\n const url = `${apiUrl}?org_id=${orgId}`;\n return this.http.get(url).pipe(\n map((resp: any) => {\n return resp;\n })\n );\n }\n\n getWorkflowExecutionById(executionId: string): Observable<any> {\n const apiUrl = `${this.bot_api}workflows/execution/${executionId}`;\n return this.http.get(apiUrl).pipe(\n map((resp: any) => {\n return resp;\n })\n );\n }\n}","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Audio analyzer for waveform visualization only.\n * Do NOT use isUserSpeaking$ for call state; speaking state must come from Daily.js.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AudioAnalyzerService {\n private audioContext: AudioContext | null = null;\n private analyserNode: AnalyserNode | null = null;\n private dataArray: Uint8Array | null = null;\n private animationFrameId: number | null = null;\n private isRunning = false;\n\n private audioLevelsSubject = new BehaviorSubject<number[]>([]);\n private isUserSpeakingSubject = new BehaviorSubject<boolean>(false);\n\n // Adaptive noise floor detection\n private noiseFloor = 0;\n private noiseFloorSamples: number[] = [];\n private readonly NOISE_FLOOR_SAMPLE_COUNT = 30;\n private readonly SPEAKING_THRESHOLD_MULTIPLIER = 2.5;\n private readonly WAVEFORM_BAR_COUNT = 40;\n\n audioLevels$: Observable<number[]> = this.audioLevelsSubject.asObservable();\n isUserSpeaking$: Observable<boolean> = this.isUserSpeakingSubject.asObservable();\n\n start(stream: MediaStream): void {\n if (this.isRunning) {\n this.stop();\n }\n\n try {\n this.audioContext = new (window.AudioContext || (window as any).webkitAudioContext)();\n const source = this.audioContext.createMediaStreamSource(stream);\n \n this.analyserNode = this.audioContext.createAnalyser();\n this.analyserNode.fftSize = 2048;\n this.analyserNode.smoothingTimeConstant = 0.8;\n \n const bufferLength = this.analyserNode.frequencyBinCount;\n this.dataArray = new Uint8Array(bufferLength);\n \n source.connect(this.analyserNode);\n \n this.isRunning = true;\n this.noiseFloorSamples = [];\n this.noiseFloor = 0;\n \n this.analyze();\n } catch (error) {\n console.error('Error starting audio analyzer:', error);\n this.stop();\n }\n }\n\n stop(): void {\n this.isRunning = false;\n \n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n\n if (this.analyserNode) {\n this.analyserNode.disconnect();\n this.analyserNode = null;\n }\n\n if (this.audioContext && this.audioContext.state !== 'closed') {\n this.audioContext.close().catch(console.error);\n this.audioContext = null;\n }\n\n this.dataArray = null;\n this.audioLevelsSubject.next([]);\n this.isUserSpeakingSubject.next(false);\n }\n\n private analyze(): void {\n if (!this.isRunning || !this.analyserNode || !this.dataArray) {\n return;\n }\n\n this.analyserNode.getByteTimeDomainData(this.dataArray);\n \n // Calculate RMS (Root Mean Square) volume\n const rms = this.calculateRMS(this.dataArray);\n \n // Learn noise floor during initial samples\n if (this.noiseFloorSamples.length < this.NOISE_FLOOR_SAMPLE_COUNT) {\n this.noiseFloorSamples.push(rms);\n if (this.noiseFloorSamples.length === this.NOISE_FLOOR_SAMPLE_COUNT) {\n // Calculate average noise floor\n const sum = this.noiseFloorSamples.reduce((a, b) => a + b, 0);\n this.noiseFloor = sum / this.NOISE_FLOOR_SAMPLE_COUNT;\n }\n } else {\n // Update noise floor adaptively (moving average)\n this.noiseFloor = this.noiseFloor * 0.99 + rms * 0.01;\n }\n\n // Detect if user is speaking\n const threshold = this.noiseFloor * this.SPEAKING_THRESHOLD_MULTIPLIER;\n const isSpeaking = rms > threshold;\n this.isUserSpeakingSubject.next(isSpeaking);\n\n // Generate waveform bars\n const bars = this.generateWaveformBars(this.dataArray);\n this.audioLevelsSubject.next(bars);\n\n this.animationFrameId = requestAnimationFrame(() => this.analyze());\n }\n\n private calculateRMS(data: Uint8Array): number {\n let sum = 0;\n for (let i = 0; i < data.length; i++) {\n const normalized = (data[i] - 128) / 128;\n sum += normalized * normalized;\n }\n return Math.sqrt(sum / data.length);\n }\n\n private generateWaveformBars(data: Uint8Array): number[] {\n const bars: number[] = [];\n const step = Math.floor(data.length / this.WAVEFORM_BAR_COUNT);\n \n for (let i = 0; i < this.WAVEFORM_BAR_COUNT; i++) {\n const index = i * step;\n const value = data[index];\n // Normalize to 0-100\n const normalized = Math.abs((value - 128) / 128) * 100;\n bars.push(Math.min(100, Math.max(0, normalized)));\n }\n \n return bars;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/** WebSocket message types from backend signaling. */\nexport interface WsMessageRoomCreated {\n type: 'room_created';\n room_url: string;\n}\n\nexport interface WsMessageUserTranscript {\n type: 'user_transcript';\n text: string;\n final?: boolean;\n}\n\nexport interface WsMessageBotTranscript {\n type: 'bot_transcript';\n text: string;\n}\n\nexport type WsMessage =\n | WsMessageRoomCreated\n | WsMessageUserTranscript\n | WsMessageBotTranscript;\n\nexport interface TranscriptData {\n text: string;\n final: boolean;\n}\n\n/**\n * WebSocket-only client for voice agent signaling.\n * CRITICAL: Uses native WebSocket only. NO Socket.IO, NO ngx-socket-io.\n *\n * Responsibilities:\n * - Connect to ws_url (from POST /ai/ask-voice response)\n * - Parse JSON messages (room_created, user_transcript, bot_transcript)\n * - Emit roomCreated$, userTranscript$, botTranscript$\n * - NO audio logic, NO mic logic. Audio is handled by Daily.js (WebRTC).\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class WebSocketVoiceClientService {\n private ws: WebSocket | null = null;\n private roomCreatedSubject = new Subject<string>();\n private userTranscriptSubject = new Subject<TranscriptData>();\n private botTranscriptSubject = new Subject<string>();\n\n /** Emits room_url when backend sends room_created. */\n roomCreated$: Observable<string> = this.roomCreatedSubject.asObservable();\n\n /** Emits user transcript updates. */\n userTranscript$: Observable<TranscriptData> =\n this.userTranscriptSubject.asObservable();\n\n /** Emits bot transcript updates. */\n botTranscript$: Observable<string> =\n this.botTranscriptSubject.asObservable();\n\n /** Connect to signaling WebSocket. No audio over this connection. */\n connect(wsUrl: string): void {\n if (this.ws?.readyState === WebSocket.OPEN) {\n return;\n }\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n\n try {\n this.ws = new WebSocket(wsUrl);\n this.ws.onmessage = (event: MessageEvent) => {\n try {\n const msg = JSON.parse(event.data) as Record<string, unknown>;\n if (msg?.type === 'room_created') {\n const roomUrl = (msg.room_url ?? msg.roomUrl) as string | undefined;\n if (typeof roomUrl === 'string') {\n this.roomCreatedSubject.next(roomUrl);\n }\n } else if (msg?.type === 'user_transcript' && typeof msg.text === 'string') {\n this.userTranscriptSubject.next({\n text: msg.text,\n final: msg.final === true,\n });\n } else if (msg?.type === 'bot_transcript' && typeof msg.text === 'string') {\n this.botTranscriptSubject.next(msg.text);\n }\n } catch {\n // Ignore non-JSON or unknown messages\n }\n };\n this.ws.onerror = () => {\n this.disconnect();\n };\n this.ws.onclose = () => {\n this.ws = null;\n };\n } catch (err) {\n console.error('WebSocketVoiceClient: connect failed', err);\n this.ws = null;\n throw err;\n }\n }\n\n /** Disconnect and cleanup. */\n disconnect(): void {\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n /** Whether the WebSocket is open. */\n get isConnected(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport Daily from '@daily-co/daily-js';\nimport type { DailyCall, DailyParticipant } from '@daily-co/daily-js';\n\n/**\n * Daily.js WebRTC client for voice agent audio.\n * Responsibilities:\n * - Create and manage Daily CallObject\n * - Join Daily room using room_url\n * - Handle mic capture + speaker playback\n * - Provide real-time speaking detection via active-speaker-change (primary)\n * and track-started/track-stopped (fallback for immediate feedback)\n * - Expose speaking$ (bot speaking), userSpeaking$ (user speaking), micMuted$\n * - Expose localStream$ for waveform visualization (AudioAnalyzerService)\n *\n * Speaking state flips immediately when agent audio starts playing.\n * If user speaks while bot is talking, state switches to listening.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DailyVoiceClientService {\n private callObject: DailyCall | null = null;\n private localStream: MediaStream | null = null;\n private localSessionId: string | null = null;\n /** Explicit playback of remote (bot) audio; required in some browsers. */\n private remoteAudioElement: HTMLAudioElement | null = null;\n\n private speakingSubject = new BehaviorSubject<boolean>(false);\n private userSpeakingSubject = new BehaviorSubject<boolean>(false);\n private micMutedSubject = new BehaviorSubject<boolean>(false);\n private localStreamSubject = new BehaviorSubject<MediaStream | null>(null);\n\n /** True when bot (remote participant) is the active speaker. */\n speaking$: Observable<boolean> = this.speakingSubject.asObservable();\n\n /** True when user (local participant) is the active speaker. */\n userSpeaking$: Observable<boolean> = this.userSpeakingSubject.asObservable();\n\n /** True when mic is muted. */\n micMuted$: Observable<boolean> = this.micMutedSubject.asObservable();\n\n /** Emits local mic stream for waveform visualization. */\n localStream$: Observable<MediaStream | null> =\n this.localStreamSubject.asObservable();\n\n constructor(private ngZone: NgZone) {}\n\n /**\n * Connect to Daily room. Acquires mic first for waveform, then joins with audio.\n * @param roomUrl Daily room URL (from room_created)\n * @param token Optional meeting token\n */\n async connect(roomUrl: string, token?: string): Promise<void> {\n if (this.callObject) {\n await this.disconnect();\n }\n\n try {\n // Get mic stream for both Daily and waveform (single capture)\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const audioTrack = stream.getAudioTracks()[0];\n if (!audioTrack) {\n stream.getTracks().forEach((t) => t.stop());\n throw new Error('No audio track');\n }\n\n this.localStream = stream;\n this.localStreamSubject.next(stream);\n\n // Create audio-only call object\n // videoSource: false = no camera, audioSource = our mic track\n const callObject = Daily.createCallObject({\n videoSource: false,\n audioSource: audioTrack,\n });\n\n this.callObject = callObject;\n\n this.setupEventHandlers(callObject);\n\n // Join room; Daily handles playback of remote (bot) audio automatically.\n // Only pass token when it's a non-empty string (Daily rejects undefined/non-string).\n const joinOptions: { url: string; token?: string } = { url: roomUrl };\n if (typeof token === 'string' && token.trim() !== '') {\n joinOptions.token = token;\n }\n await callObject.join(joinOptions);\n\n const participants = callObject.participants();\n if (participants?.local) {\n this.localSessionId = participants.local.session_id;\n }\n\n // Initial mute state: Daily starts with audio on\n this.micMutedSubject.next(!callObject.localAudio());\n } catch (err) {\n this.cleanup();\n throw err;\n }\n }\n\n private setupEventHandlers(call: DailyCall): void {\n // active-speaker-change: primary source for real-time speaking detection.\n // Emits when the loudest participant changes; bot speaking = remote is active.\n call.on('active-speaker-change', (event: { activeSpeaker?: { peerId?: string } }) => {\n this.ngZone.run(() => {\n const peerId = event?.activeSpeaker?.peerId;\n if (!peerId || !this.localSessionId) {\n this.speakingSubject.next(false);\n this.userSpeakingSubject.next(false);\n return;\n }\n const isLocal = peerId === this.localSessionId;\n this.userSpeakingSubject.next(isLocal);\n this.speakingSubject.next(!isLocal);\n });\n });\n\n // track-started / track-stopped: play remote (bot) audio explicitly and update speaking state.\n // Browsers often do not auto-play remote WebRTC audio; attaching to an HTMLAudioElement and\n // calling play() ensures the user hears the agent.\n call.on('track-started', (event: { participant?: DailyParticipant | null; type?: string; track?: MediaStreamTrack }) => {\n this.ngZone.run(() => {\n const p = event?.participant;\n const type = event?.type ?? event?.track?.kind;\n const track = event?.track;\n if (p && !p.local && type === 'audio') {\n this.speakingSubject.next(true);\n const audioTrack = track ?? (p as { tracks?: { audio?: { track?: MediaStreamTrack } } }).tracks?.audio?.track;\n if (audioTrack && typeof audioTrack === 'object') {\n this.playRemoteTrack(audioTrack);\n }\n }\n });\n });\n\n call.on('track-stopped', (event: { participant?: DailyParticipant | null; type?: string; track?: MediaStreamTrack }) => {\n this.ngZone.run(() => {\n const p = event?.participant;\n const type = event?.type ?? event?.track?.kind;\n if (p && !p.local && type === 'audio') {\n this.speakingSubject.next(false);\n this.stopRemoteAudio();\n }\n });\n });\n\n call.on('left-meeting', () => {\n this.ngZone.run(() => this.cleanup());\n });\n\n call.on('error', (event?: { errorMsg?: string }) => {\n this.ngZone.run(() => {\n console.error('DailyVoiceClient: Daily error', event?.errorMsg ?? event);\n this.cleanup();\n });\n });\n }\n\n /**\n * Play remote (bot) audio track via a dedicated audio element.\n * Required in many browsers where Daily's internal playback does not output to speakers.\n */\n private playRemoteTrack(track: MediaStreamTrack): void {\n this.stopRemoteAudio();\n try {\n const stream = new MediaStream([track]);\n const audio = new Audio();\n audio.autoplay = true;\n audio.srcObject = stream;\n this.remoteAudioElement = audio;\n const p = audio.play();\n if (p && typeof p.catch === 'function') {\n p.catch((err) => {\n console.warn('DailyVoiceClient: remote audio play failed (may need user gesture)', err);\n });\n }\n } catch (err) {\n console.warn('DailyVoiceClient: failed to create remote audio element', err);\n }\n }\n\n private stopRemoteAudio(): void {\n if (this.remoteAudioElement) {\n try {\n this.remoteAudioElement.pause();\n this.remoteAudioElement.srcObject = null;\n } catch (_) {}\n this.remoteAudioElement = null;\n }\n }\n\n /** Set mic muted state. */\n setMuted(muted: boolean): void {\n if (!this.callObject) return;\n this.callObject.setLocalAudio(!muted);\n this.micMutedSubject.next(muted);\n }\n\n /** Disconnect and cleanup. */\n async disconnect(): Promise<void> {\n if (!this.callObject) {\n this.cleanup();\n return;\n }\n try {\n await this.callObject.leave();\n } catch (e) {\n // ignore\n }\n this.cleanup();\n }\n\n private cleanup(): void {\n this.stopRemoteAudio();\n if (this.callObject) {\n this.callObject.destroy().catch(() => {});\n this.callObject = null;\n }\n if (this.localStream) {\n this.localStream.getTracks().forEach((t) => t.stop());\n this.localStream = null;\n }\n this.localSessionId = null;\n this.speakingSubject.next(false);\n this.userSpeakingSubject.next(false);\n this.localStreamSubject.next(null);\n // Keep last micMuted state; will reset on next connect\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable, Subject, Subscription } from 'rxjs';\nimport { filter, take, takeUntil } from 'rxjs/operators';\nimport { AudioAnalyzerService } from './audio-analyzer.service';\nimport { WebSocketVoiceClientService } from './websocket-voice-client.service';\nimport { DailyVoiceClientService } from './daily-voice-client.service';\n\nexport type CallState =\n | 'idle'\n | 'connecting'\n | 'connected'\n | 'listening'\n | 'talking'\n | 'ended';\n\nexport interface TranscriptData {\n text: string;\n final: boolean;\n}\n\n/**\n * Voice agent orchestrator. Coordinates WebSocket (signaling) and Daily.js (WebRTC audio).\n *\n * CRITICAL: This service must NEVER use Socket.IO or ngx-socket-io. Voice flow uses only:\n * - Native WebSocket (WebSocketVoiceClientService) for signaling (room_created, transcripts)\n * - Daily.js (DailyVoiceClientService) for WebRTC audio. Audio does NOT flow over WebSocket.\n *\n * - Maintains callState, statusText, duration, isMicMuted, isUserSpeaking, audioLevels\n * - Uses WebSocket for room_created and transcripts only (no audio)\n * - Uses Daily.js for all audio, mic, and real-time speaking detection\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class VoiceAgentService implements OnDestroy {\n private callStateSubject = new BehaviorSubject<CallState>('idle');\n private statusTextSubject = new BehaviorSubject<string>('');\n private durationSubject = new BehaviorSubject<string>('00:00');\n private isMicMutedSubject = new BehaviorSubject<boolean>(false);\n private isUserSpeakingSubject = new BehaviorSubject<boolean>(false);\n private audioLevelsSubject = new BehaviorSubject<number[]>([]);\n private userTranscriptSubject = new Subject<TranscriptData>();\n private botTranscriptSubject = new Subject<string>();\n\n private callStartTime = 0;\n private durationInterval: ReturnType<typeof setInterval> | null = null;\n\n private subscriptions = new Subscription();\n private destroy$ = new Subject<void>();\n\n callState$: Observable<CallState> = this.callStateSubject.asObservable();\n statusText$: Observable<string> = this.statusTextSubject.asObservable();\n duration$: Observable<string> = this.durationSubject.asObservable();\n isMicMuted$: Observable<boolean> = this.isMicMutedSubject.asObservable();\n isUserSpeaking$: Observable<boolean> = this.isUserSpeakingSubject.asObservable();\n audioLevels$: Observable<number[]> = this.audioLevelsSubject.asObservable();\n userTranscript$: Observable<TranscriptData> =\n this.userTranscriptSubject.asObservable();\n botTranscript$: Observable<string> = this.botTranscriptSubject.asObservable();\n\n constructor(\n private audioAnalyzer: AudioAnalyzerService,\n private wsClient: WebSocketVoiceClientService,\n private dailyClient: DailyVoiceClientService\n ) {\n // Waveform visualization only - do NOT use for speaking state\n this.subscriptions.add(\n this.audioAnalyzer.audioLevels$.subscribe((levels) =>\n this.audioLevelsSubject.next(levels)\n )\n );\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.subscriptions.unsubscribe();\n this.disconnect();\n }\n\n /** Reset to idle state (e.g. when modal opens so user can click Start Call). */\n resetToIdle(): void {\n if (this.callStateSubject.value === 'idle') return;\n this.stopDurationTimer();\n this.audioAnalyzer.stop();\n this.wsClient.disconnect();\n // Fire-and-forget: Daily disconnect is async; connect() will await if needed\n void this.dailyClient.disconnect();\n this.callStateSubject.next('idle');\n this.statusTextSubject.next('');\n this.durationSubject.next('0:00');\n }\n\n async connect(\n apiUrl: string,\n token: string,\n botId: string,\n conversationId: string,\n apiKey: string,\n eventToken: string,\n eventUrl: string,\n domainAuthority: string\n ): Promise<void> {\n if (this.callStateSubject.value !== 'idle') {\n console.warn('Call already in progress');\n return;\n }\n\n try {\n this.callStateSubject.next('connecting');\n this.statusTextSubject.next('Connecting...');\n\n const baseUrl = apiUrl.replace(/\\/$/, '');\n const postUrl = `https://48c6-2405-201-5c02-991e-d91c-8adf-399c-abdc.ngrok-free.app/ai/ask-voice`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n 'domain-authority': domainAuthority,\n 'eventtoken': eventToken,\n 'eventurl': eventUrl,\n 'hive-bot-id': botId,\n 'x-api-key': apiKey,\n };\n\n // POST to get ws_url for signaling\n const res = await fetch(postUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n bot_id: botId,\n conversation_id: conversationId,\n voice: 'alloy',\n }),\n });\n\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`);\n }\n\n const json = await res.json();\n // Use only WebSocket URL. Do NOT use any Socket.IO URL (e.g. socket_io_url).\n const wsUrl = json?.rn_ws_url;\n if (!wsUrl || typeof wsUrl !== 'string') {\n throw new Error('No ws_url in response');\n }\n\n // Subscribe to room_created BEFORE connecting to avoid race\n this.wsClient.roomCreated$\n .pipe(take(1), takeUntil(this.destroy$))\n .subscribe(async (roomUrl) => {\n try {\n await this.onRoomCreated(roomUrl);\n } catch (err) {\n console.error('Daily join failed:', err);\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Connection failed');\n await this.disconnect();\n throw err;\n }\n });\n\n // Forward transcripts from WebSocket\n this.subscriptions.add(\n this.wsClient.userTranscript$\n .pipe(takeUntil(this.destroy$))\n .subscribe((t) => this.userTranscriptSubject.next(t))\n );\n this.subscriptions.add(\n this.wsClient.botTranscript$\n .pipe(takeUntil(this.destroy$))\n .subscribe((t) => this.botTranscriptSubject.next(t))\n );\n\n // Connect signaling WebSocket (no audio over WS)\n this.wsClient.connect(wsUrl);\n } catch (error) {\n console.error('Error connecting voice agent:', error);\n this.callStateSubject.next('ended');\n await this.disconnect();\n this.statusTextSubject.next('Connection failed');\n throw error;\n }\n }\n\n private async onRoomCreated(roomUrl: string): Promise<void> {\n // Connect Daily.js for WebRTC audio\n await this.dailyClient.connect(roomUrl);\n\n // Waveform: use local mic stream from Daily client\n this.dailyClient.localStream$\n .pipe(filter((s): s is MediaStream => s != null), take(1))\n .subscribe((stream) => {\n this.audioAnalyzer.start(stream);\n });\n\n // Speaking state from Daily only (NOT from AudioAnalyzer).\n // User speaking overrides bot talking: if user speaks while bot talks, state = listening.\n this.subscriptions.add(\n this.dailyClient.userSpeaking$.subscribe((s) =>\n this.isUserSpeakingSubject.next(s)\n )\n );\n this.subscriptions.add(\n combineLatest([\n this.dailyClient.speaking$,\n this.dailyClient.userSpeaking$,\n ]).subscribe(([bot, user]) => {\n if (user) {\n this.callStateSubject.next('listening');\n } else if (bot) {\n this.callStateSubject.next('talking');\n } else if (\n this.callStateSubject.value === 'talking' ||\n this.callStateSubject.value === 'listening'\n ) {\n this.callStateSubject.next('connected');\n }\n })\n );\n\n this.subscriptions.add(\n this.dailyClient.micMuted$.subscribe((muted) =>\n this.isMicMutedSubject.next(muted)\n )\n );\n\n this.callStateSubject.next('connected');\n this.statusTextSubject.next('Connected');\n this.callStartTime = Date.now();\n this.startDurationTimer();\n }\n\n async disconnect(): Promise<void> {\n this.stopDurationTimer();\n this.audioAnalyzer.stop();\n\n // Daily first, then WebSocket\n await this.dailyClient.disconnect();\n this.wsClient.disconnect();\n\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Call Ended');\n }\n\n toggleMic(): void {\n const current = this.isMicMutedSubject.value;\n this.dailyClient.setMuted(!current);\n }\n\n private startDurationTimer(): void {\n const updateDuration = () => {\n if (this.callStartTime > 0) {\n const elapsed = Math.floor((Date.now() - this.callStartTime) / 1000);\n const minutes = Math.floor(elapsed / 60);\n const seconds = elapsed % 60;\n this.durationSubject.next(\n `${minutes}:${String(seconds).padStart(2, '0')}`\n );\n }\n };\n updateDuration();\n this.durationInterval = setInterval(updateDuration, 1000);\n }\n\n private stopDurationTimer(): void {\n if (this.durationInterval) {\n clearInterval(this.durationInterval);\n this.durationInterval = null;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface VoiceModalConfig {\n apiUrl: string;\n token: string;\n botId: string;\n conversationId: string;\n apiKey: string;\n eventToken: string;\n eventUrl: string;\n domainAuthority: string;\n agentName: string;\n agentRole: string;\n agentAvatar?: string;\n}\n\nexport const VOICE_MODAL_CONFIG = new InjectionToken<VoiceModalConfig>('VOICE_MODAL_CONFIG');\nexport const VOICE_MODAL_CLOSE_CALLBACK = new InjectionToken<() => void>('VOICE_MODAL_CLOSE_CALLBACK');\n","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter, Injector } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VoiceAgentService, CallState } from '../../services/voice-agent.service';\nimport { AudioAnalyzerService } from '../../services/audio-analyzer.service';\nimport { VOICE_MODAL_CONFIG, VOICE_MODAL_CLOSE_CALLBACK, VoiceModalConfig } from '../../voice-modal-tokens';\n\n@Component({\n selector: 'hivegpt-voice-agent-modal',\n templateUrl: './voice-agent-modal.component.html',\n styleUrls: ['./voice-agent-modal.component.scss']\n})\nexport class VoiceAgentModalComponent implements OnInit, OnDestroy {\n @Output() close = new EventEmitter<void>();\n @Input() apiUrl!: string;\n @Input() token!: string;\n @Input() botId!: string;\n @Input() conversationId!: string;\n @Input() apiKey: string = '';\n @Input() eventToken: string = '';\n @Input() eventUrl: string = '';\n @Input() domainAuthority: string = 'prod-lite';\n @Input() agentName: string = 'AI Assistant';\n @Input() agentRole: string = 'AI Agent Specialist';\n @Input() agentAvatar?: string;\n\n private injectedConfig: VoiceModalConfig | null = null;\n private onCloseCallback: (() => void) | null = null;\n\n constructor(\n public voiceAgentService: VoiceAgentService,\n public audioAnalyzer: AudioAnalyzerService,\n private injector: Injector\n ) {}\n\n /** Hardcoded voice agent avatar (Nia). */\n readonly displayAvatarUrl = 'https://www.jotform.com/uploads/mehmetkarakasli/form_files/1564593667676a8e85f23758.86945537_icon.png';\n\n callState: CallState = 'idle';\n statusText: string = '';\n duration: string = '00:00';\n isMicMuted: boolean = false;\n isUserSpeaking: boolean = false;\n audioLevels: number[] = [];\n isSpeaking: boolean = false;\n\n /** Once user or bot has spoken, show \"Ready\" instead of \"Connected\" when idle in call. */\n private hasLeftConnectedOnce: boolean = false;\n\n private subscriptions: Subscription[] = [];\n\n ngOnInit(): void {\n // When opened via Overlay, config is provided by injection\n this.injectedConfig = this.injector.get(VOICE_MODAL_CONFIG, null);\n this.onCloseCallback = this.injector.get(VOICE_MODAL_CLOSE_CALLBACK, null);\n if (this.injectedConfig) {\n this.apiUrl = this.injectedConfig.apiUrl;\n this.token = this.injectedConfig.token;\n this.botId = this.injectedConfig.botId;\n this.conversationId = this.injectedConfig.conversationId;\n this.apiKey = this.injectedConfig.apiKey ?? '';\n this.eventToken = this.injectedConfig.eventToken ?? '';\n this.eventUrl = this.injectedConfig.eventUrl ?? '';\n this.domainAuthority = this.injectedConfig.domainAuthority ?? 'prod-lite';\n this.agentName = this.injectedConfig.agentName ?? this.agentName;\n this.agentRole = this.injectedConfig.agentRole ?? this.agentRole;\n this.agentAvatar = this.injectedConfig.agentAvatar;\n }\n\n // Subscribe to observables\n this.subscriptions.push(\n this.voiceAgentService.callState$.subscribe(state => {\n this.callState = state;\n this.isSpeaking = state === 'talking';\n if (state === 'listening' || state === 'talking') {\n this.hasLeftConnectedOnce = true;\n }\n if (state === 'idle' || state === 'ended') {\n this.hasLeftConnectedOnce = false;\n }\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.statusText$.subscribe(text => {\n this.statusText = text;\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.duration$.subscribe(duration => {\n this.duration = duration;\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.isMicMuted$.subscribe(muted => {\n this.isMicMuted = muted;\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.isUserSpeaking$.subscribe(speaking => {\n this.isUserSpeaking = speaking;\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.audioLevels$.subscribe(levels => {\n this.audioLevels = levels;\n })\n );\n\n // Modal opens in idle state; user clicks \"Start Call\" to connect (no auto-connect).\n this.voiceAgentService.resetToIdle();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.disconnect();\n }\n\n isConnecting: boolean = false;\n\n async startCall(): Promise<void> {\n if (this.isConnecting || (this.callState !== 'idle' && this.callState !== 'ended')) return;\n this.isConnecting = true;\n try {\n await this.voiceAgentService.connect(\n this.apiUrl,\n this.token,\n this.botId,\n this.conversationId,\n this.apiKey,\n this.eventToken,\n this.eventUrl,\n this.domainAuthority\n );\n } catch (error) {\n console.error('Failed to connect voice agent:', error);\n } finally {\n this.isConnecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n await this.voiceAgentService.disconnect();\n }\n\n toggleMic(): void {\n this.voiceAgentService.toggleMic();\n }\n\n /** Map audio level (0–100) to waveform bar height in px (3–20). */\n getWaveformHeight(level: number): number {\n const n = Math.min(100, Math.max(0, level ?? 0));\n return 3 + (n / 100) * 17;\n }\n\n /** Status label for active call. \"Connected\" only once; then \"Ready\" when idle in call. */\n get statusLabel(): string {\n if (this.callState === 'connecting') return this.statusText || 'Connecting...';\n if (this.callState === 'talking') return 'Talking...';\n if (this.callState === 'listening') return 'Listening';\n if (this.callState === 'connected') {\n return this.hasLeftConnectedOnce ? 'Listening' : 'Connected';\n }\n return this.statusText || '';\n }\n\n /** Call Again: reset to idle then start a new call. */\n callAgain(): void {\n this.voiceAgentService.resetToIdle();\n this.startCall();\n }\n\n /** Back to Chat: close modal and disconnect. */\n backToChat(): void {\n this.endCall();\n }\n\n /** End call but keep modal open to show Call Ended + Call Again / Back to Chat. */\n hangUp(): void {\n this.disconnect();\n }\n\n endCall(): void {\n this.disconnect();\n this.onCloseCallback?.();\n this.close.emit();\n }\n}\n","// import { Platform } from '@angular/cdk/platform';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { TranslationService } from '../translations/translation.service';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Injector,\n Input,\n OnChanges,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n} from '@angular/core';\nimport { MatDrawer } from '@angular/material/sidenav';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { of, Subscription } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport { formatNow, formatTimeStamps } from '../../utils/utils';\nimport {\n dev_environment,\n prod_environment,\n} from '../../../environments/environment';\nimport { ConversationService } from '../conversation.service';\nimport { Observable } from 'rxjs';\nimport { SocketService } from '../socket-service.service';\n\nimport { FormBuilder, Validators } from '@angular/forms';\nimport * as SpeechSDK from 'microsoft-cognitiveservices-speech-sdk';\nimport { BotsService } from '../bot.service';\nimport * as marked from 'marked'; // Import marked\nimport { VoiceAgentService } from '../voice-agent/services/voice-agent.service';\nimport { VoiceAgentModalComponent } from '../voice-agent/components/voice-agent-modal/voice-agent-modal.component';\nimport {\n VOICE_MODAL_CONFIG,\n VOICE_MODAL_CLOSE_CALLBACK,\n VoiceModalConfig,\n} from '../voice-agent/voice-modal-tokens';\n\n@Component({\n selector: 'hivegpt-chat-drawer-package',\n templateUrl: './chat-drawer.component.html',\n styleUrls: ['./chat-drawer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChatDrawerComponent implements OnInit, OnChanges {\n @ViewChild('chatMain') private chatMain: ElementRef;\n @ViewChild('myInput', { static: false })\n myInput!: ElementRef<HTMLTextAreaElement>; // Reference to the textarea\n @ViewChildren('closeplaygroundbutton')\n closePlaygroundButtons: QueryList<ElementRef>;\n @ViewChild('drawer') drawer!: MatDrawer;\n @ViewChild('sourcesDrawer') sourcesDrawer!: MatDrawer;\n @ViewChild('editorsDrawer') editorsDrawer!: MatDrawer;\n private bodyOverflowClass = 'body-overflow-hidden';\n isCollapsedTrue = false;\n @Input() copilotName: string = 'HiveXGPT';\n @Input() firstName!: string;\n @Input() lastName!: string;\n @Input() apiKey!: string;\n @Input() bgBubbleAi!: string;\n @Input() bgBubbleUser!: string;\n @Input() bgGradient!: string[];\n @Input() botName!: string;\n @Input() botSkills!: string;\n @Input() botId!: string;\n @Input() orgId!: string;\n @Input() closeButtonColor!: string;\n @Input() closeButtonbgColor!: string;\n @Input() credentials!: [];\n @Input() dateTimeColor!: string;\n @Input() dateTextColor!: string;\n @Input() eventId!: string;\n @Input() eventUrl!: string;\n @Input() eventToken!: string;\n @Input() workspaceToken!: string;\n @Input() s27Token!: string;\n @Input() eventName!: string;\n @Input() botIcon!: string;\n @Input() formFieldBgColor!: string;\n @Input() formFieldTextColor!: string;\n @Input() fullView!: boolean;\n @Input() gradientColors!: string[];\n @Input() greeting!: string;\n @Input() messageTextColorAi!: string;\n @Input() messageTextColorUser!: string;\n @Input() rules!: string;\n @Input() sendButtonColor!: string;\n @Input() sendButtonTextColor!: string;\n @Input() showClose!: boolean;\n @Input() thumbsDownMessages!: string[];\n @Input() thumbsUpMessage!: string;\n @Input() timezone!: string;\n @Input() unknownResponses!: [];\n @Input() useOpenAi!: boolean;\n @Input() userId!: string;\n @Input() isDev!: boolean;\n\n @Input() againButtonColor!: string[];\n @Input() againButtonTextColor!: string[];\n @Output() feedbackEvent = new EventEmitter<string>();\n @Output() onCloseEvent = new EventEmitter<void>();\n @Output() openPage = new EventEmitter<any>();\n @Output() sessionActions = new EventEmitter<any>();\n @Output() closeBot = new EventEmitter<any>();\n @Output() connectWithUser = new EventEmitter<any>();\n @Output() scheduleMeeting = new EventEmitter<string>();\n @Output() refreshToken = new EventEmitter<any>();\n @Output() openSupport = new EventEmitter<any>();\n\n autogenKey = 'Autogen_eDJTtEU-NB0RtIpzq1w';\n addToMyAgendaAction = 'add_to_my_agenda';\n myUpcomingSessionAction = 'my_upcomming_session';\n connectOrFollowAction = 'connect_or_follow';\n aiResponse: string = '';\n chatLog: any[] = [];\n decoder = new TextDecoder();\n feedbackDone: boolean = false;\n greetingMsg: string = '';\n hasBackdropValue: boolean = false;\n input: string = '';\n listenerAdded = false;\n loading: boolean = false;\n mode: string = 'over';\n quickPrompts: any[] = [];\n thumbsDownMsgIndex = 0;\n userName: string = '';\n showStartAgain: boolean = false;\n isIOSDevice: boolean = false;\n showFeedBackIconsIndex: number | null = null;\n temperature: number = 1;\n speakers = [];\n environment: {\n USERS_API;\n BASE_URL;\n AGENTS_API;\n };\n pendingRequests: any;\n myConnections: any;\n conversationKey: string;\n conSessionKey: string = '';\n isFetchDataFor: boolean;\n is401: boolean;\n msg: any;\n chat: any;\n isWorkflowOpen: boolean;\n orgWorkflows: any;\n openWorkflowInput: boolean;\n selectedWorkflow: any;\n workflowForm: any;\n currentWorkflowActionProgress: number = 0;\n currentWorkflowAction: string = '';\n executingWorkflow: boolean;\n workflowExecutionDetails: any;\n showWorkflowExecutionDetails: any;\n currentWorkflowExecutionDetails: any;\n\n speechConfig: SpeechSDK.SpeechConfig;\n recognizer: SpeechSDK.SpeechRecognizer;\n recognizedText: string = '';\n authorizationToken: string = '';\n region: string = 'westeurope'; // Set your Azure region here\n isRecording: boolean;\n isVoiceModalOpen: boolean = false;\n private voiceModalOverlayRef: OverlayRef | null = null;\n private voiceTranscriptSubscriptions: Subscription[] = [];\n\n constructor(\n private fb: FormBuilder,\n private botService: BotsService,\n private cdr: ChangeDetectorRef,\n private http: HttpClient,\n private sanitizer: DomSanitizer,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private socketService: SocketService,\n private conversationService: ConversationService, // private platform: Platform\n private translationService: TranslationService,\n private voiceAgentService: VoiceAgentService,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private injector: Injector\n ) {\n this.chatMain = new ElementRef(null);\n\n // if (this.platform.IOS) {\n // this.isIOSDevice = true;\n // }\n }\n getTranslation(key: string) {\n return this.translationService.getTranslation(key);\n }\n ngOnChanges(changes: SimpleChanges): void {\n // Handle eventId changes to update translation service\n if (changes.eventId && changes.eventId.currentValue) {\n this.translationService.setEventId(changes.eventId.currentValue);\n }\n\n if (changes.s27Token) {\n if (changes.s27Token.currentValue != changes.s27Token.previousValue) {\n this.s27Token = changes.s27Token.currentValue;\n\n console.log('isFetchDataFor: ', this.isFetchDataFor);\n console.log('msg: ', this.msg);\n console.log('chat: ', this.chat);\n if (this.is401) {\n if (this.isFetchDataFor) {\n this.fetchDataFor(this.msg, this.chat);\n } else {\n this.fetchData(this.msg);\n }\n }\n }\n }\n\n // Do NOT call initializeSocket() here. Socket.IO is for chat only; we defer\n // until the user actually uses chat (send message or start new conversation)\n // so that voice-only usage never triggers Socket.IO (avoids v2/v3 mismatch error).\n if (changes.orgId && changes.orgId.currentValue != changes.orgId.previousValue) {\n this.chatSocketInitialized = false;\n }\n }\n\n domainAuthorityValue: any = 'prod-lite';\n\n ngOnInit(): void {\n // Set the eventId in translation service to get the correct language from localStorage\n if (this.eventId) {\n this.translationService.setEventId(this.eventId);\n }\n\n this.environment = this.isDev ? dev_environment : prod_environment;\n\n const domain = window.location.hostname;\n\n // Determine the header value based on the domain\n\n if (domain.includes('pre-app.social27.com')) {\n this.domainAuthorityValue = 'pre-prod-lite';\n } else if (domain.includes('app.social27.com')) {\n this.domainAuthorityValue = 'prod-lite';\n } else if (domain.includes('hivegpt.io')) {\n this.domainAuthorityValue = 'hivegpt';\n }\n\n // this.fetchMyConnections().subscribe();\n // this.fetchPendingRequests().subscribe();\n\n this.changeTemperature(this.temperature);\n this.fetchBotConfig().subscribe(\n (res) => {\n this.cdr.markForCheck();\n\n this.fetchChatHistory().subscribe(\n (response) => {\n this.loading = false;\n this.mapChatHistory(response);\n this.cdr.markForCheck();\n },\n (err) => {\n console.error('Error fetching chat history:', err);\n }\n );\n },\n (err) => {\n console.error('Error fetching chat history:', err);\n }\n );\n // this.fetchAgents();\n // this.fetchEditorContent();\n this.cdr.markForCheck();\n // this.initializeSocket();\n this.botService\n .fetchSpeechAuthorizationToken(\n this.botId,\n this.apiKey,\n this.domainAuthorityValue\n )\n .subscribe((token) => {\n this.authorizationToken = token;\n this.initializeSpeechRecognizer(token);\n });\n }\n\n private eventSubscription: Subscription;\n /** True after Socket has been initialized for chat (avoids connecting on voice-only usage). */\n private chatSocketInitialized = false;\n\n /**\n * Call before chat actions so Socket.IO is used only for chat, not for voice.\n * Voice agent uses native WebSocket + Daily.js only; Socket.IO must not run during voice flow.\n */\n private ensureChatSocket(): void {\n if (this.chatSocketInitialized || !this.orgId) return;\n this.chatSocketInitialized = true;\n this.initializeSocket();\n }\n\n initializeSocket() {\n try {\n this.socketService.disconnectSocketConnection();\n } catch (error) {}\n setTimeout(() => {\n this.socketService.connectSocketConnection();\n setTimeout(() => {\n console.log('YES INIT');\n const conversation_id = this.conversationService.getKey(this.botId);\n\n this.socketService.registerUserSpecificHiveSocket(\n this.botId,\n conversation_id,\n this.orgId\n );\n setTimeout(() => {\n this.listenSockets();\n }, 300);\n }, 200);\n }, 300);\n }\n\n subscriptionNew: any;\n socketData: any;\n\n listenSockets() {\n if (this.eventSubscription) {\n this.eventSubscription.unsubscribe();\n }\n console.log('Listen Socket');\n this.eventSubscription = this.conversationService\n .getUserSpecificNotification()\n .subscribe(\n (res) => {\n console.log('Listen Socket response');\n console.log(res);\n // Check if OtherFields exists in the response\n if (res?.m?.OtherFields?.workflow_id) {\n const {\n percentage,\n output,\n action_name,\n current_action_name,\n workflow_execution_id,\n time_stamp,\n } = res?.m?.OtherFields;\n\n this.currentWorkflowActionProgress = percentage;\n this.currentWorkflowAction = action_name;\n\n const actionIndex = this.workflowExecutionDetails.Actions.findIndex(\n (a) => a.Name == current_action_name\n );\n\n if (actionIndex !== -1) {\n this.workflowExecutionDetails.Actions[actionIndex]['Output'] =\n output;\n this.workflowExecutionDetails.Actions[actionIndex][\n 'InsertTimeStamp'\n ] = formatTimeStamps(this.timezone, time_stamp);\n } else {\n console.error(`Action with name ${action_name} not found`);\n }\n\n this.currentWorkflowExecutionDetails =\n this.workflowExecutionDetails;\n\n if (this.currentWorkflowActionProgress == 100) {\n this.chatLog[this.chatLog.length - 1]['WorkflowExecutionId'] =\n workflow_execution_id;\n this.isChatingWithAi = false;\n this.executingWorkflow = false;\n this.focusOnTextarea();\n }\n\n this.cdr.detectChanges();\n } else if (res?.m?.OtherFields) {\n const {\n conversation_id,\n bot_id,\n message_id,\n answer,\n web_results,\n search_results,\n graphs,\n execution_graphs,\n suggestions,\n } = res?.m?.OtherFields;\n console.log('message_id1');\n console.log(res?.m?.OtherFields);\n var currentChatMessage = this.chatLog.find(\n (p) => p._id == message_id\n );\n console.log(this.chatLog);\n if (!currentChatMessage) {\n console.log('message_id2');\n console.log(message_id);\n currentChatMessage = {\n _id: message_id,\n type: 'ai',\n time: formatNow(this.timezone),\n };\n\n this.chatLog.push(currentChatMessage);\n\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n console.log('message_id3');\n console.log(message_id);\n this.cdr.detectChanges();\n }\n\n // Handle the fields based on their presence\n if (search_results && Array.isArray(search_results)) {\n console.log('Online Search Terms:', search_results);\n currentChatMessage.searchTerms = search_results;\n this.cdr.detectChanges();\n }\n\n if (web_results && Array.isArray(web_results)) {\n console.log('Web Results:', web_results);\n currentChatMessage.sourcesList = web_results;\n currentChatMessage.displayedSources = web_results?.slice(0, 3); // First 3 cards\n currentChatMessage.remainingSources = web_results?.slice(3); // Remaining items\n this.cdr.detectChanges();\n }\n\n if (answer) {\n this.isChatingWithAi = false;\n console.log('Answer:', answer);\n\n currentChatMessage.message =\n this.processMessageForDisplay(answer);\n this.cdr.detectChanges();\n this.scrollToBottom();\n this.focusOnTextarea();\n }\n\n if (graphs && Array.isArray(graphs)) {\n console.log('Graphs:', graphs);\n currentChatMessage.graphs = graphs;\n this.cdr.detectChanges();\n }\n\n if (execution_graphs && Array.isArray(execution_graphs)) {\n console.log('Execution Graphs:', execution_graphs);\n currentChatMessage.executionGraphs = execution_graphs;\n this.cdr.detectChanges();\n }\n\n if (suggestions && Array.isArray(suggestions)) {\n console.log('suggestions:', suggestions);\n currentChatMessage.relatedListItems = suggestions;\n this.cdr.detectChanges();\n // Process online search terms as needed\n }\n\n // Add any other fields and their processing here\n } else {\n console.warn('OtherFields is missing in the response');\n }\n },\n (err) => {\n this.eventSubscription.unsubscribe();\n console.error('Error in fetching data from socket', err);\n }\n );\n }\n\n initializeSocketAndListen() {}\n handleEvent(data: any, type: string) {\n switch (type) {\n case 'webresult':\n break;\n case 'answer':\n break;\n case 'graph':\n break;\n default:\n break;\n }\n }\n ngOnDestroy(): void {\n if (this.eventSubscription) {\n this.eventSubscription.unsubscribe();\n }\n this.voiceTranscriptSubscriptions.forEach(sub => sub.unsubscribe());\n this.socketService.disconnectSocketConnection();\n //this.socketService.close();\n }\n changeTemperature(newTemperature: number) {\n if (this.loading) return;\n this.temperature = newTemperature;\n const wrapper = document.querySelector('.hivegpt-chat-wrapper');\n // Remove existing theme classes from body\n wrapper?.classList.remove('creative', 'balanced', 'precise');\n\n switch (newTemperature) {\n case 0:\n wrapper?.classList.add('creative');\n break;\n case 1:\n wrapper?.classList.add('balanced');\n break;\n case 2:\n wrapper?.classList.add('precise');\n break;\n default:\n break;\n }\n }\n\n onStartAgain() {\n if (this.loading) return;\n this.showStartAgain = false;\n this.chatLog = [];\n this.chatLog.push({\n type: 'ai',\n message: this.greetingMsg,\n\n time: formatNow(this.timezone),\n });\n this.archieveMessages().subscribe();\n }\n\n archieveMessages() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n const url = `${this.environment.BASE_URL}/bot/clear-history/${this.botId}/${this.userId}`;\n return this.http.post(url, { headers }).pipe(\n switchMap((res: any) => {\n return of(res);\n }),\n catchError((error) => {\n return of(null);\n })\n );\n }\n\n triggerSupport() {\n this.openSupport.emit();\n }\n fetchBotConfig() {\n this.loading = true;\n const headers = new HttpHeaders({\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n const url = `${this.environment.BASE_URL}/bots?bot_id=${this.botId}`;\n return this.http.get(url, { headers }).pipe(\n switchMap((res: any) => {\n this.botName = this.getTranslation(res.Name);\n this.botIcon = res.Icon;\n this.botSkills = res?.Skills;\n this.greetingMsg = res.Greeting;\n\n this.thumbsDownMessages = res?.NegativeResponses?.length\n ? res.NegativeResponses\n : [\n this.getTranslation(\n `We are sorry we've not been able to answer your question`\n ),\n ];\n this.quickPrompts = res.QuickPrompts;\n this.cdr.markForCheck();\n this.loading = false;\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n this.loading = false;\n return of(null);\n })\n );\n }\n\n fetchChatHistory(): Observable<any> {\n this.loading = true;\n\n this.conversationKey = this.conversationService.getKey(this.botId, false);\n this.conSessionKey = this.conversationService.getSessionKey(\n this.botId,\n false\n );\n const url = `${this.environment.BASE_URL}/conversations/${this.conversationKey}?session_id=${this.conSessionKey}`;\n const headers = new HttpHeaders({\n accept: 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n\n return this.http\n .get(url, { headers })\n .pipe(catchError(this.handleError<any>('fetchConversation')));\n }\n\n private handleError<T>(operation = 'operation', result?: T) {\n return (error: any): Observable<T> => {\n console.error(`${operation} failed: ${error.message}`);\n return of(result as T);\n };\n }\n // fetchChatHistory() {\n // this.loading = true;\n // const headers = new HttpHeaders({\n // 'Content-Type': 'application/json',\n // 'x-api-key': this.apiKey,\n // });\n // return this.http\n // .get(`${this.environment.BASE_URL}/conversations/${this.conversationKey}`, { headers })\n // .pipe(\n // switchMap((res: any) => {\n // this.loading = false;\n // return of(res);\n // }),\n // catchError((error: any) => {\n // console.error('Error fetching chat history: ', error);\n // this.loading = false;\n // return of(null);\n // })\n // );\n // }\n\n mapChatHistory(chats: any) {\n this.chatLog.push({\n type: 'ai',\n message: this.greetingMsg,\n time: formatNow(this.timezone),\n });\n if (chats && chats?.Messages?.length) {\n chats?.Messages.forEach((chat: any) => {\n if (chat.Type == 'user') {\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(chat.Text),\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n copied: false,\n isCollapsedTrue: false,\n WorkflowExecutionId: chat.WorkflowExecutionId,\n _id: chat._id,\n });\n }\n if (chat.Type == 'ai') {\n var sourcesList = chat.WebLinks || [];\n var displayedSources = chat.WebLinks.slice(0, 3); // First 3 cards\n var remainingSources = chat.WebLinks.slice(3); // Remaining items\n\n this.chatLog.push({\n type: 'ai',\n message: this.processMessageForDisplay(chat.Text),\n executionGraphs: chat.ExecutionGraphs,\n graphs: chat.Graphs,\n searchTerms: chat.SearchTerms,\n sourcesList: sourcesList,\n displayedSources: displayedSources,\n remainingSources: remainingSources,\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n copied: false,\n isCollapsedTrue: false,\n _id: chat._id,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n }\n });\n this.showStartAgain = true;\n }\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n processMessage(message: string): SafeHtml {\n if (!message || !(message?.length > 0)) {\n return '';\n }\n\n // console.log('here is my message')\n // console.log(message);\n\n message = message.trim();\n\n const markdownLinkRegex = /\\[([^[]+)]\\(([^)]+)\\)/g;\n const urlRegex = /(?<!href=\")\\bhttps?:\\/\\/\\S+(?<![.,])/gi;\n\n if (markdownLinkRegex.test(message)) {\n const html = message.replace(\n markdownLinkRegex,\n '<a href=\"$2\" target=\"_blank\">$1</a>'\n );\n //console.log('Sanitized message: ', message);\n return this.sanitizeHtml(html);\n }\n\n if (urlRegex.test(message)) {\n const html = message.replace(\n urlRegex,\n '<a href=\"$&\" target=\"_blank\">$&</a>'\n );\n // console.log('Sanitized message: ', message);\n return this.sanitizeHtml(html);\n }\n\n message = message.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n\n message = message.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n // Convert Markdown headers to HTML headers\n message = message.replace(/^(#{1,6})\\s+(.*)$/gm, (match, hashes, text) => {\n const level = hashes.length;\n return `<h${level}>${text}</h${level}>`;\n });\n\n this.cdr.markForCheck();\n const sanitizedMessage = this.sanitizeHtml(message);\n return sanitizedMessage;\n }\n\n ngAfterViewChecked() {\n const feedbackLinks =\n this.elementRef.nativeElement.querySelectorAll('.feedback-link');\n feedbackLinks.forEach((link: any) => {\n link.addEventListener(\n 'click',\n this.onFeedbackClick.bind(this, 'zendesk')\n );\n });\n // if (this.elementRef.nativeElement.querySelector('.feedback-link')) {\n // this.elementRef.nativeElement\n // .querySelector('.feedback-link')\n // .addEventListener('click', this.onFeedbackClick.bind(this, 'zendesk'));\n // }\n }\n\n sanitizeHtml(html: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n\n onFeedbackClick(value: string) {\n this.feedbackEvent.emit(value);\n }\n\n onClose() {\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n this.onCloseEvent.emit();\n }\n\n sendMessageWithTile(prompt: string) {\n this.input = prompt;\n this.fetchData();\n this.scrollToBottom();\n }\n isChatingWithAi = false;\n fetchData(msg = null) {\n this.input = msg || this.input?.trim();\n this.msg = this.input;\n if (!this.input || this.loading) {\n return;\n }\n this.ensureChatSocket();\n\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(this.input),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n\n try {\n const textarea = this.myInput.nativeElement;\n textarea.style.height = 'hidden'; // Reset the height\n textarea.style.height = `62px`;\n } catch (error) {}\n this.cdr.markForCheck();\n\n this.aiResponse = '';\n this.isChatingWithAi = true;\n\n this.makeAskRequest(this.input, this.agents, this.conversationKey);\n }\n fetchDataFor(msg, chat) {\n const inputMsg = msg?.trim();\n if (!inputMsg || this.loading) {\n return;\n }\n this.ensureChatSocket();\n try {\n chat.relatedListItems = [];\n this.cdr.detectChanges();\n } catch (error) {}\n\n this.scrollToBottom();\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(inputMsg),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n\n this.cdr.markForCheck();\n\n this.aiResponse = '';\n this.isChatingWithAi = true;\n\n this.makeAskRequest(inputMsg, this.agents, this.conversationKey, msg, chat);\n }\n fetchSmallTalk() {\n this.loading = true;\n this.cdr.markForCheck();\n\n const url = `${this.environment.BASE_URL}/bot/small-talk/${this.botId}/${this.userId}`;\n\n this.http\n .get<{ smallTalk: string }>(url, {\n headers: {\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n },\n })\n .pipe(\n catchError((error) => {\n console.error('Error while fetching small talk:', error);\n\n return of(null);\n })\n )\n .subscribe((response) => {\n this.loading = false;\n this.cdr.markForCheck();\n\n if (!response) {\n return;\n }\n\n if (response && response.smallTalk) {\n this.chatLog.push({\n type: 'ai',\n message: this.processMessage(response.smallTalk),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 2;\n // this.scrollToBottom();\n this.cdr.markForCheck();\n }\n });\n }\n\n readAllChunks = (stream: any) => {\n const reader = stream.getReader();\n const allSuggestions: string[] = [];\n\n reader.closed.catch((err: any) => {\n if (err) {\n console.error('Error reading stream: ', err);\n }\n\n this.isChatingWithAi = false;\n this.scrollToBottom();\n return;\n });\n\n return new ReadableStream({\n start: (controller) => {\n return this.pump(controller, reader, allSuggestions);\n },\n });\n };\n\n pump(controller: any, reader: any, allSuggestions: string[]) {\n reader.read().then(({ done, value }: any) => {\n const lastItem = this.chatLog[this.chatLog.length - 1];\n\n if (done) {\n lastItem.message = this.processMessageForDisplay(lastItem.message);\n this.chatLog.pop();\n this.chatLog.push(lastItem);\n if (allSuggestions?.length) {\n this.chatLog.push({\n type: 'suggestions',\n suggestions: allSuggestions,\n });\n }\n\n controller.close();\n this.isChatingWithAi = false;\n // this.scrollToBottom();\n this.cdr.markForCheck();\n this.showStartAgain = true;\n\n // setTimeout(() => {\n // this.fetchSmallTalk();\n // },1000)\n return;\n }\n\n let decodedChunk = this.decoder.decode(value, { stream: true });\n this.aiResponse += decodedChunk;\n if (lastItem.type === 'ai') {\n const suggestionsMatch = this.aiResponse.match(/<sug>(.*?)<\\/sug>/g);\n if (suggestionsMatch) {\n suggestionsMatch.forEach((match) => {\n this.aiResponse = this.aiResponse.replace(match, '');\n allSuggestions.push(match?.replace(/<\\/?sug>/g, ''));\n });\n }\n\n lastItem.message = this.aiResponse;\n this.cdr.markForCheck();\n } else {\n this.isChatingWithAi = false;\n\n let aiFormattedData: any;\n\n try {\n console.log('parsing json ');\n aiFormattedData = JSON.parse(JSON.parse(this.aiResponse));\n } catch (e) {\n try {\n console.log('parsing json 2');\n aiFormattedData = JSON.parse(this.aiResponse);\n } catch (e) {}\n }\n\n console.log('parsing json done');\n\n if (aiFormattedData && aiFormattedData?.section_id?.length > 0) {\n if (\n aiFormattedData.section_id == 'company_search' ||\n aiFormattedData.section_id == 'user_search' ||\n aiFormattedData.section_id == 'industry_company_search'\n ) {\n this.fetchMyConnections().subscribe();\n this.fetchPendingRequests().subscribe();\n }\n\n if (aiFormattedData.section_id == this.myUpcomingSessionAction) {\n var speakerIds = [];\n aiFormattedData.content?.forEach((session) => {\n speakerIds = [...speakerIds, ...session.speakers];\n });\n\n if (speakerIds?.length > 0) this.getSpeakersByStaffIds(speakerIds);\n }\n\n if (\n aiFormattedData.section_id == this.addToMyAgendaAction &&\n aiFormattedData.content?.length > 0\n ) {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n sessionIds: aiFormattedData.content,\n });\n }\n\n if (aiFormattedData.section_id == this.connectOrFollowAction) {\n let usersLen = aiFormattedData.content?.length;\n if (usersLen > 1) {\n this.openPage.next({\n sectionId: 'open_networking_drawer',\n search: aiFormattedData.content,\n });\n } else if (usersLen == 1) {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n connetUserIds: [aiFormattedData.content[0].userId],\n });\n }\n }\n\n if (aiFormattedData.is_open_page == 'true') {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n search: aiFormattedData.content,\n });\n\n if (this.isMobileBrowser()) {\n aiFormattedData.message +=\n '\\n\\n' + '<a id=\"closeBotNow\">Click Here</a> to see results.';\n }\n }\n\n this.chatLog.push({\n type: 'ai',\n message: aiFormattedData.message,\n action: aiFormattedData,\n time: formatNow(this.timezone),\n });\n\n if (this.isMobileBrowser()) {\n setTimeout(() => {\n this.addCloseBotClickEvent();\n }, 500);\n }\n\n this.aiResponse = '';\n } else {\n this.chatLog.push({\n type: 'ai',\n message: this.aiResponse,\n time: formatNow(this.timezone),\n });\n }\n\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n this.cdr.markForCheck();\n }\n\n this.scrollToBottom();\n\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n this.pump(controller, reader, allSuggestions);\n });\n }\n\n submitFeedback(flag: boolean, message) {\n console.log(message);\n\n this.feedbackDone = true;\n this.showFeedBackIconsIndex = null;\n const conversation_id = this.conversationService.getKey(this.botId);\n const url = `${this.environment.AGENTS_API}/Conversation/coPilot/${this.botId}/conversation/${conversation_id}/helpful-response`;\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n apiKey: 'Conversation_WIz/qAm+EEmfOkFaUA/weA==',\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n },\n body: JSON.stringify({ messageId: message._id, isHelpful: flag }),\n }).then(() => {\n if (flag) {\n this.chatLog.push({\n type: 'ai',\n message:\n this.thumbsUpMessage ||\n this.getTranslation('May I assist you with anything else'),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n\n this.scrollToBottom();\n this.cdr.markForCheck();\n this.feedbackDone = false;\n this.showFeedBackIconsIndex = null;\n return;\n }\n\n this.chatLog.push({\n type: 'ai',\n message: this.processMessage(\n this.thumbsDownMessages[this.thumbsDownMsgIndex]\n ),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n this.thumbsDownMsgIndex =\n (this.thumbsDownMsgIndex + 1) % this.thumbsDownMessages.length;\n this.scrollToBottom();\n this.cdr.markForCheck();\n setTimeout(() => {\n const supportLink = document.getElementById('supportLink88');\n if (supportLink) {\n supportLink.addEventListener('click', this.triggerSupport.bind(this));\n }\n }, 200);\n this.feedbackDone = false;\n this.showFeedBackIconsIndex = null;\n });\n }\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' && !event.shiftKey) {\n // Prevent default behavior (new line)\n event.preventDefault();\n // Call your submit function\n this.handleSubmit(event);\n }\n }\n handleSubmit(event) {\n this.fetchData();\n this.scrollToBottom();\n }\n\n handleUpClick(idx: any) {\n if (this.feedbackDone) {\n return;\n }\n\n this.submitFeedback(true, this.chatLog[idx]);\n this.chatLog[idx].liked = !this.chatLog[idx].liked;\n\n if (this.chatLog[idx].unliked) {\n this.chatLog[idx].unliked = !this.chatLog[idx].unliked;\n }\n\n this.cdr.markForCheck();\n }\n\n handleDownClick(idx: any) {\n if (this.feedbackDone) return;\n this.submitFeedback(false, this.chatLog[idx]);\n this.chatLog[idx].unliked = !this.chatLog[idx].unliked;\n if (this.chatLog[idx].liked)\n this.chatLog[idx].liked = !this.chatLog[idx].liked;\n }\n // handleCopyClick(index: any) {\n // // Copy the message to the clipboard\n // const contentToCopy = this.chatLog[index].message;\n // console.log('contentToCopy');\n // console.log(contentToCopy);\n // navigator.clipboard.writeText(contentToCopy).then(() => {\n // // Indicate that the message was copied\n // this.chatLog[index].copied = true;\n // this.cdr.detectChanges();\n // // Reset the copied state after a delay\n // setTimeout(() => {\n // this.chatLog[index].copied = false;\n // this.cdr.detectChanges();\n // }, 2000); // Reset after 2 seconds\n // });\n // }\n copyText(id, index) {\n // Get the text element\n var textElement = document.getElementById(id);\n\n // Create a temporary textarea element to copy the text\n var tempTextArea = document.createElement('textarea');\n tempTextArea.value = textElement.innerText;\n\n // Append the textarea to the body (necessary for the execCommand to work)\n document.body.appendChild(tempTextArea);\n\n // Select the text inside the textarea\n tempTextArea.select();\n\n // Copy the text to the clipboard\n document.execCommand('copy');\n\n // Remove the temporary textarea\n document.body.removeChild(tempTextArea);\n\n // Optionally, you can alert the user or change the button text to indicate the copy was successful\n // alert('Text copied to clipboard!');\n\n this.chatLog[index].copied = true;\n this.cdr.detectChanges();\n // Reset the copied state after a delay\n setTimeout(() => {\n this.chatLog[index].copied = false;\n this.cdr.detectChanges();\n }, 2000); // Reset after 2 seconds\n }\n handleCopyClick(index: any) {\n // Copy the message to the clipboard\n const contentToCopy = this.chatLog[index].message;\n const resutlt = this.copyText('messageText_' + index, index);\n }\n\n sanitizeHTML(html: string): string {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n\n // Create a new document fragment to hold the simplified content\n const fragment = document.createDocumentFragment();\n\n // Append the children of the body of the parsed document to the fragment\n Array.from(doc.body.childNodes).forEach((node) => {\n fragment.appendChild(node.cloneNode(true));\n });\n\n // Create a new div element to hold the simplified HTML\n const simplifiedDiv = document.createElement('div');\n simplifiedDiv.appendChild(fragment);\n\n // Remove complex tags or attributes as needed\n // Example: remove scripts\n simplifiedDiv\n .querySelectorAll('script')\n .forEach((script) => script.remove());\n\n // Return the simplified HTML as a string\n return simplifiedDiv.innerHTML;\n }\n\n currentMessageForEditor: any = '';\n currentIndexForEditor: any = -1;\n handleEditorClick(index: any) {\n if (this.currentIndexForEditor == -1) {\n this.currentIndexForEditor = index;\n this.currentMessageForEditor = this.sanitizeHTML(\n this.chatLog[index].message\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n 'SafeValue must use [property]=binding:',\n ''\n );\n\n this.cdr.detectChanges();\n } else {\n if (this.currentIndexForEditor == index) {\n this.currentMessageForEditor += this.sanitizeHTML(\n this.chatLog[index].message\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n 'SafeValue must use [property]=binding:',\n ''\n );\n this.cdr.detectChanges();\n } else {\n this.currentIndexForEditor = index;\n this.currentMessageForEditor = this.sanitizeHTML(\n this.chatLog[index].message\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n 'SafeValue must use [property]=binding:',\n ''\n );\n this.cdr.detectChanges();\n }\n }\n this.chatLog[index].isEditor = true;\n this.cdr.detectChanges();\n // Reset the copied state after a delay\n setTimeout(() => {\n this.chatLog[index].isEditor = false;\n this.cdr.detectChanges();\n }, 2000); // Reset after 2 seconds\n this.editorsDrawer.open();\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n this.cdr.detectChanges();\n }\n scrollToBottom() {\n let counter = 0;\n const interval = setInterval(() => {\n this.chatMain.nativeElement.scrollTop =\n this.chatMain.nativeElement.scrollHeight;\n if (counter++ > 5) clearInterval(interval);\n }, 5);\n }\n\n focusOnTextarea() {\n setTimeout(() => {\n if (this.myInput && this.myInput.nativeElement) {\n this.myInput.nativeElement.focus();\n }\n }, 100);\n }\n\n handleAction(action: any) {\n console.info('incoming action from the chatbot AI');\n console.info(action);\n\n if (action?.content) {\n }\n }\n\n ngAfterViewInit() {\n // Check if the drawer is initially open and apply overflow hidden to body if so\n if (this.drawer.opened) {\n this.setBodyOverflow();\n }\n\n // Listen to changes in the drawer being opened or closed\n this.drawer.openedChange.subscribe((opened: boolean) => {\n if (opened) {\n this.setBodyOverflow();\n } else {\n this.removeBodyOverflow();\n }\n });\n\n this.drawer.openedChange.subscribe((opened) => {\n if (opened) {\n setTimeout(() => {\n if (this.myInput && this.myInput.nativeElement) {\n this.myInput.nativeElement.focus(); // Focus on the textarea\n }\n });\n }\n });\n }\n\n private setBodyOverflow() {\n this.renderer.addClass(document.body, this.bodyOverflowClass);\n }\n\n private removeBodyOverflow() {\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n }\n\n getSpeakersByStaffIds(ids) {\n const url = `${this.environment.USERS_API}/events/${this.eventId}/users/get-by-staff-ids`;\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + 'your_token_here',\n },\n body: JSON.stringify(ids),\n })\n .then((response) => {\n if (response.ok) {\n return response.json(); // Parse the JSON body of the response\n } else {\n throw new Error('Network response was not ok.');\n }\n })\n .then((data) => {\n if (data?.length > 0) {\n data.forEach((speaker) => {\n this.speakers[speaker.id] = speaker;\n });\n\n this.cdr.markForCheck();\n }\n })\n .catch((err) => {\n console.error('Error fetching data:', err);\n this.loading = false;\n });\n }\n\n performSessionAction(sessionId, action) {\n this.sessionActions.next({\n sessionId,\n action,\n });\n }\n\n addCloseBotClickEvent() {\n const element = this.elementRef.nativeElement.querySelector('#closeBotNow');\n if (element) {\n this.renderer.listen(element, 'click', () => {\n this.closeBot.next();\n });\n }\n }\n\n isMobileBrowser() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n }\n\n connectToUser(userId) {\n this.connectWithUser.emit({\n connect: !this.canDisconnect(userId),\n userId,\n });\n\n setTimeout(() => {\n this.fetchMyConnections().subscribe((res) => {\n this.cdr.markForCheck();\n });\n this.fetchPendingRequests().subscribe((res) => {\n this.cdr.markForCheck();\n });\n }, 500);\n }\n\n scheduleMeetingWithUser(user) {\n this.scheduleMeeting.emit(user);\n }\n\n canConnect(userId) {\n return !(\n this.canDisconnect(userId) ||\n this.pendingRequests.find((a) => a == userId)\n );\n }\n\n canDisconnect(userId) {\n return this.myConnections.find((conn) => conn.userId == userId);\n }\n\n fetchPendingRequests() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: this.autogenKey,\n });\n return this.http\n .get(\n `${this.environment.USERS_API}/events/${this.eventId}/connection-requests/autogen/pending-sent-requests?userId=${this.userId}`,\n { headers }\n )\n .pipe(\n switchMap((res: any) => {\n this.pendingRequests = res;\n this.cdr.markForCheck();\n return of(res);\n }),\n catchError((error: any) => {\n console.error('Error fetching pending requests: ', error);\n return of(null);\n })\n );\n }\n\n fetchMyConnections() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: this.autogenKey,\n });\n return this.http\n .get(\n `${this.environment.USERS_API}/events/${this.eventId}/users-connections/autogen?userId=${this.userId}`,\n { headers }\n )\n .pipe(\n switchMap((res: any) => {\n this.myConnections = res;\n this.cdr.markForCheck();\n return of(res);\n }),\n catchError((error: any) => {\n console.error('Error fetching pending requests: ', error);\n return of(null);\n })\n );\n }\n\n isDropdownOpen: boolean = false;\n agents: any;\n selectedAgents = [];\n allSelected = false;\n // Toggle the dropdown visibility\n toggleDropdown() {\n if (!this.agents) this.fetchAgents();\n this.isDropdownOpen = !this.isDropdownOpen;\n this.cdr.detectChanges();\n }\n\n onSelectAll(event: Event): void {\n this.agents?.forEach((agent) => (agent.selected = false));\n this.cdr.detectChanges();\n }\n\n onAgentChange(agent: any): void {\n //agent.selected = !agent.selected;\n //console.log(agent);\n let agentFound = this.agents.filter((p) => p.id == agent.id);\n if (agentFound && agentFound.length > 0) {\n agentFound[0].selected = !agentFound[0].selected;\n this.cdr.detectChanges();\n }\n this.cdr.detectChanges();\n }\n\n areAllSelected(): boolean {\n return this.agents?.every((agent) => !agent.selected);\n }\n\n getDropdownHeaderText(): string {\n const selectedAgents = this.agents?.filter((agent) => agent.selected);\n if (!selectedAgents) {\n return 'All Agents';\n } else {\n if (selectedAgents && selectedAgents?.length === 0) {\n return 'All Agents';\n } else {\n return selectedAgents?.length > 1\n ? `${selectedAgents?.length} Agents Selected`\n : `${selectedAgents?.length} Agent Selected`;\n }\n }\n }\n fetchAgents_http() {\n this.loading = true;\n const url = `${this.environment.AGENTS_API}/CoPilot/${this.botId}/active-agents`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n });\n\n return this.http.post(url, {}, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n this.agents = res.map((agent) => ({\n ...agent,\n selected: false,\n }));\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n isDocInEditMode = false;\n documentContent: any;\n\n conversationId: any;\n isContentLoaded = false;\n\n fetchContent_http() {\n this.isDocInEditMode = false;\n this.isContentLoaded = false;\n console.log('API call function');\n this.loading = true;\n const conversation_id = this.conversationService.getKey(this.botId);\n this.conversationId = conversation_id;\n const url = `${this.environment.AGENTS_API}/ConversationDocuments?conversationId=${conversation_id}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n 'domain-authority': this.domainAuthorityValue,\n });\n\n return this.http.get(url, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n this.isDocInEditMode = true;\n this.documentContent = res;\n console.log('Get API callled success');\n this.isContentLoaded = true;\n console.log(res);\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config DJ: ', error);\n this.isDocInEditMode = false;\n this.isContentLoaded = true;\n\n if (error?.status == 404) {\n console.log('dash');\n this.isDocInEditMode = false;\n this.isContentLoaded = true;\n }\n return of(null);\n })\n );\n }\n\n fetchAgents() {\n this.fetchAgents_http().subscribe();\n }\n\n fetchEditorContent() {\n this.fetchContent_http().subscribe();\n }\n\n // events/${eventId}/users-connections\n processMessageForDisplay(markdown: string): SafeHtml {\n try {\n // Create a custom renderer to modify <a> tags\n const renderer = new marked.Renderer();\n\n // Customize anchor tags to include target=\"_blank\"\n renderer.link = (href: string, title: string, text: string) => {\n return `<a href=\"${href}\" title=\"${\n title || ''\n }\" target=\"_blank\">${text}</a>`;\n };\n\n // Parse the markdown content to HTML using marked with the custom renderer\n const markdownContent = marked.parse(markdown, { renderer: renderer });\n\n // Sanitize the parsed HTML using Angular's DomSanitizer\n const sanitizedHtml =\n this.sanitizer.bypassSecurityTrustHtml(markdownContent);\n\n // Return the safe HTML content for display\n return sanitizedHtml;\n } catch (error) {\n console.error('Error processing markdown:', error);\n return ''; // Return an empty string or handle the error appropriately\n }\n }\n\n prepareHtml(markdown: string): string {\n if (!markdown || !(markdown.length > 0)) {\n console.error('Input Markdown is null or empty');\n return '';\n }\n\n // Convert Markdown headers (### or ##) to <strong> for bold headings\n let html = markdown.replace(\n /^(#{1,6})\\s+(.*)$/gm,\n (match, hashes, text) => {\n const level = hashes.length;\n if (level === 3) {\n return `<h3><strong>${text}</strong></h3>`;\n } else if (level === 4) {\n return `<h4><strong>${text}</strong></h4>`;\n }\n return `<strong>${text}</strong>`;\n }\n );\n\n // Convert Markdown code blocks with language to preformatted HTML\n html = html.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (match, lang, code) => {\n const escapedCode = this.escapeHtml(code);\n const language = lang || 'plaintext';\n\n // Create a copy button for the code block\n return `\n <div class=\"code-container\">\n <button id=\"copy-button\" class=\"copy-button\" (click)=\"copyToClipboard('\\`${escapedCode}\\`')\">${this.getTranslation(\n 'Copy'\n )}</button>\n <pre class=\"code_block diff\"><code class=\"language-${language}\">${escapedCode}</code></pre>\n </div>`;\n });\n\n // Convert inline code (wrapped in `backticks`) to inline <code> tags\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\n\n // Convert Markdown bold to HTML <strong>\n html = html.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n\n // Convert numbered lists\n html = html.replace(/^\\d+\\.\\s+(.*)$/gm, '<li>$1</li>');\n\n // Convert bullet point lists\n html = html.replace(/^\\-\\s+(.*)$/gm, '<li>$1</li>');\n\n // Convert Markdown links to HTML links\n html = html.replace(\n /\\[([^\\]]+)]\\(([^)]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\">$1</a>'\n );\n\n // Convert new lines to <br> tags for paragraphs\n html = html.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n\n return html;\n }\n\n // Helper function to escape HTML characters for code blocks\n escapeHtml(code: string): string {\n return code\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n // Function to copy text to clipboard\n public copyToClipboard(text: string) {\n navigator.clipboard.writeText(text).then(\n () => {\n alert('Code copied to clipboard!');\n },\n (err) => {\n console.error('Could not copy text: ', err);\n }\n );\n }\n\n isCollapsed = false;\n isCollapsedForGraph = false;\n isCollapsedForFGraph = false;\n toggleCollapse() {\n this.isCollapsed = !this.isCollapsed;\n this.cdr.detectChanges();\n }\n\n toggleCollapseGraph() {\n this.isCollapsedForGraph = !this.isCollapsedForGraph;\n this.cdr.detectChanges();\n }\n toggleCollapseFGraph() {\n this.isCollapsedForFGraph = !this.isCollapsedForFGraph;\n this.cdr.detectChanges();\n }\n // [\n // {\n // \"title\": \"AI News January 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"Each month, we compile significant news, trends, and happenings in AI, providing detailed summaries with key points in bullet form for concise yet complete understanding.\",\n // \"link\": \"https://theaitrack.com/ai-news-january-2024/\"\n // },\n // {\n // \"title\": \"Top AI News, January 2024 - Everypixel Journal\",\n // \"desc\": \"In this monthly roundup, we spotlight the top AI news stories from January, including the OpenAI vs. The New York Times Lawsuit.\",\n // \"link\": \"https://journal.everypixel.com/top-ai-news-january-2024\"\n // },\n // {\n // \"title\": \"AI News July 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"This page features AI News for July 2024, highlighting significant events such as Canva acquiring Leonardo AI.\",\n // \"link\": \"https://theaitrack.com/ai-news-july-2024-in-depth-and-concise/\"\n // },\n // {\n // \"title\": \"January news roundup: What's new in the world of AI? - Pluralsight\",\n // \"desc\": \"OpenAI’s new GPT store, business-ready ChatGPT plans, and a predicted rise in AI-powered cybercrime.\",\n // \"link\": \"https://www.pluralsight.com/resources/blog/data/ai-this-month-january-2024\"\n // },\n // {\n // \"title\": \"AI News August 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"This page features AI News for August 2024, with highlights such as Nvidia delaying the “Blackwell” B200 AI chips delivery.\",\n // \"link\": \"https://theaitrack.com/ai-news-august-2024-in-depth-and-concise-duplicate/\"\n // }\n // ]\n dateTime = { now: new Date().toISOString() };\n // Extracts the domain from a URL\n getDomainName(url: string): string {\n try {\n const { hostname } = new URL(url);\n return hostname.replace(/^www\\./, ''); // Remove 'www.' if present\n } catch {\n return 'unknown';\n }\n }\n\n // Generates the favicon URL\n getFaviconUrl(url: string): string {\n const domain = this.getDomainName(url);\n return `https://www.google.com/s2/favicons?sz=128&domain=${domain}`;\n }\n currentSourcesList: any = [];\n onCardClick(sources): void {\n this.currentSourcesList = sources;\n this.cdr.detectChanges();\n this.sourcesDrawer.open();\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n }\n\n isShowEditorButton = true;\n\n openOuterEditor() {\n this.fetchEditorContent();\n this.editorsDrawer.open();\n this.isDrawerOpen = true;\n this.isShowEditorButton = false;\n this.cdr.detectChanges();\n\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n }\n\n onCloseEditor() {\n this.editorsDrawer.close();\n this.isDrawerOpen = false;\n this.isShowEditorButton = true;\n this.cdr.detectChanges(); // Trigger change detection if needed\n this.onDrawerClosed();\n }\n\n onCloseSource() {\n this.sourcesDrawer.close();\n this.isDrawerOpen = false;\n this.cdr.detectChanges(); // Trigger change detection if needed\n this.onDrawerClosed();\n }\n onDrawerClosed() {\n setTimeout(() => {\n this.isDrawerOpen = true;\n this.cdr.detectChanges(); // Trigger change detection if needed\n // Use ngClass to dynamically apply the class\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'block';\n }\n }, 800);\n }\n isDrawerOpen = true;\n\n toggleDrawer(todo) {\n this.isDrawerOpen = todo;\n this.cdr.detectChanges();\n this.updateButtonVisibility();\n }\n updateButtonVisibility() {\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = this.isDrawerOpen ? 'block' : 'none';\n }\n }\n openLinkInNewTab(link: string): void {\n window.open(link, '_blank');\n }\n adjustTextareaHeight(event: any): void {\n try {\n if (event.key === 'Enter' && !event.shiftKey) {\n // Prevents a new line from being added\n event.preventDefault();\n }\n } catch (error) {}\n const textarea = event.target as HTMLTextAreaElement;\n textarea.style.height = 'auto'; // Reset the height\n textarea.style.height = `${textarea.scrollHeight}px`; // Adjust height to match content\n // Ensure the height doesn't exceed the max-height set in CSS\n if (textarea.scrollHeight > 150) {\n textarea.style.height = `150px`; // Adjust height to match content\n textarea.style.overflowY = 'auto'; // Enable scrolling if content exceeds 400px\n } else {\n textarea.style.overflowY = 'hidden'; // Hide scrollbar if content is within limits\n }\n }\n\n toggleWorkflows(value = null) {\n if (!this.checkForCop29BotId()) {\n this.botService.getWorkflowsByOrgId(this.orgId).subscribe((res) => {\n this.orgWorkflows = res;\n this.isWorkflowOpen = value == null ? !this.isWorkflowOpen : value;\n\n if (!this.isWorkflowOpen) {\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n }\n\n this.cdr.detectChanges();\n });\n }\n }\n\n initializeForm() {\n // Create form controls dynamically based on selectedWorkflow.Trigger.InputSchema\n const formControls = {};\n if (this.selectedWorkflow?.Trigger?.InputSchema) {\n this.selectedWorkflow.Trigger.InputSchema.forEach((input) => {\n formControls[input.InputId] = [\n input.Value || '',\n input.Required ? Validators.required : null,\n ];\n });\n }\n\n // Initialize the form\n this.workflowForm = this.fb.group(formControls);\n }\n\n onWorkflowSelected(workflow) {\n this.selectedWorkflow = workflow;\n this.initializeForm();\n this.isWorkflowOpen = false;\n this.openWorkflowInput = true;\n }\n\n onWorkflowSubmit() {\n const container = document.getElementById('allChats');\n if (this.workflowForm.valid) {\n console.log(this.workflowForm.value);\n\n var input = this.prepareHtml(\n this.generateMarkdown(\n this.selectedWorkflow.Name,\n this.workflowForm.value\n )\n );\n\n // update last two chatLog entries, set showWorkflowExecutionLoader = false\n try {\n this.chatLog[this.chatLog.length - 1]['showWorkflowExecutionLoader'] =\n false;\n this.chatLog[this.chatLog.length - 2]['showWorkflowExecutionLoader'] =\n false;\n } catch (error) {}\n\n this.chatLog.push({\n type: 'user',\n message: input,\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n showWorkflowExecutionLoader: true,\n });\n\n console.log(input);\n\n this.currentWorkflowActionProgress = 0;\n this.currentWorkflowAction =\n 'Executing ' + this.selectedWorkflow.Actions[0].Name;\n this.isChatingWithAi = true;\n this.executingWorkflow = true;\n this.workflowExecutionDetails = {\n Actions: this.selectedWorkflow.Actions,\n Inputs: this.workflowForm.value,\n workflowInputs: this.workflowForm.value,\n WorkflowName: this.selectedWorkflow.Name,\n };\n this.currentWorkflowExecutionDetails = this.workflowExecutionDetails;\n this.scrollToBottom();\n\n this.cdr.detectChanges();\n\n // execute the ask endpoint with workflow input\n this.makeAskRequest(\n input,\n this.agents,\n this.conversationKey,\n '',\n null,\n this.selectedWorkflow['_id'],\n this.workflowForm.value\n );\n }\n }\n\n makeAskRequest(\n inputMsg: string,\n agents: any[],\n conversationId: string,\n msg?: any,\n chat?: any,\n workflowId?: string,\n workflow_inputs?: any\n ): void {\n var url = `${this.environment.BASE_URL}/ai/ask`;\n\n var body = {\n user_question: inputMsg,\n user_id: this.userId,\n bot_id: this.botId,\n message_id: this.conversationService.generateKey(),\n session_id: this.conSessionKey,\n agents: agents?.filter((p) => p.selected).map((p) => p.id) ?? [],\n conversation_id: conversationId,\n first_name: this.firstName,\n last_name: this.lastName,\n };\n\n if (workflowId) {\n body['workflow_id'] = workflowId;\n body['workflow_inputs'] = workflow_inputs;\n }\n\n const headers: any = {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + this.s27Token,\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n eventUrl: this.eventUrl,\n eventToken: this.eventToken,\n };\n\n if (this.workspaceToken) {\n headers['workspaceToken'] = this.workspaceToken;\n }\n\n fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(body),\n })\n .then((response) => {\n if (response.status === 401 || response.status === 403) {\n this.is401 = true;\n this.refreshToken.emit();\n\n // If `msg` and `chat` exist, handle them\n if (msg && chat) {\n this.msg = msg;\n this.chat = chat;\n this.isFetchDataFor = true;\n }\n } else {\n this.is401 = false;\n }\n return response.json();\n })\n .then((data) => {\n console.log(data);\n // Additional response handling if needed\n })\n .catch((err) => {\n console.error('Error: ', err);\n this.isChatingWithAi = false;\n });\n\n this.input = '';\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n this.isWorkflowOpen = false;\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n makeAskRequestold(\n inputMsg: string,\n agents: any[],\n conversationId: string,\n msg?: any,\n chat?: any,\n workflowId?: string,\n workflow_inputs?: any\n ): void {\n const url = `${this.environment.BASE_URL}/ai/ask`;\n\n const body: any = {\n user_question: inputMsg,\n user_id: this.userId,\n bot_id: this.botId,\n message_id: this.conversationService.generateKey(),\n agents: agents?.filter((p) => p.selected).map((p) => p.id) ?? [],\n conversation_id: conversationId,\n first_name: this.firstName,\n last_name: this.lastName,\n };\n\n if (workflowId) {\n body['workflow_id'] = workflowId;\n body['workflow_inputs'] = workflow_inputs;\n }\n\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n\n this.http.post(url, body, { headers }).subscribe({\n next: (data) => {\n console.log(data);\n // Additional response handling if needed\n },\n error: (err) => {\n console.error('Error: ', err);\n this.isChatingWithAi = false;\n },\n });\n\n this.input = '';\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n this.isWorkflowOpen = false;\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n generateMarkdown(title, obj) {\n // Initialize markdown with the title\n let markdown = `## ${title}\\n`;\n\n // Loop through the object and append the field names and values\n for (const [key, value] of Object.entries(obj)) {\n var key_label =\n this.selectedWorkflow.Trigger.InputSchema.find(\n (input) => input.InputId === key\n )?.Label || key;\n markdown += `- **${key_label}**: ${value}\\n`;\n }\n\n return markdown;\n }\n\n showWorkflowHistoryDetails(workflow_id) {\n if (!workflow_id) {\n this.workflowExecutionDetails = this.currentWorkflowExecutionDetails;\n this.showWorkflowExecutionDetails = true;\n this.cdr.detectChanges();\n return;\n }\n\n this.botService.getWorkflowExecutionById(workflow_id).subscribe((res) => {\n if (res && res.Actions && Array.isArray(res.Actions)) {\n res.Actions = res.Actions.map((action) => {\n if (action.InsertTimeStamp) {\n action.InsertTimeStamp = formatTimeStamps(\n this.timezone,\n action.InsertTimeStamp\n );\n }\n return action;\n });\n }\n\n res.InsertTimeStamp = formatTimeStamps(\n this.timezone,\n res.InsertTimeStamp\n );\n this.workflowExecutionDetails = res;\n this.showWorkflowExecutionDetails = true;\n this.cdr.detectChanges();\n });\n }\n\n closeModal() {\n this.showWorkflowExecutionDetails = false;\n }\n\n objectToArray(obj: any): any[] {\n return Object.keys(obj).map((key) => ({ key, value: obj[key] }));\n }\n\n startNewConversation() {\n this.conversationKey = this.conversationService.getKey(this.botId, true);\n this.chatLog = [this.chatLog[0]];\n this.isChatingWithAi = false;\n this.chatSocketInitialized = false;\n setTimeout(() => {\n this.ensureChatSocket();\n }, 200);\n this.scrollToBottom();\n this.cdr.detectChanges();\n }\n\n initializeSpeechRecognizer(token: string) {\n this.speechConfig = SpeechSDK.SpeechConfig.fromAuthorizationToken(\n token,\n this.region\n );\n const audioConfig = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();\n this.recognizer = new SpeechSDK.SpeechRecognizer(\n this.speechConfig,\n audioConfig\n );\n\n this.recognizer.recognizing = (s, e) => {\n if (e.result.reason === SpeechSDK.ResultReason.RecognizingSpeech) {\n this.input = e.result.text;\n console.log(`Recognizing: ${e.result.text}`);\n this.cdr.markForCheck();\n }\n };\n\n this.recognizer.recognized = (s, e) => {\n if (e.result.reason === SpeechSDK.ResultReason.RecognizedSpeech) {\n this.input = e.result.text;\n console.log(`Recognized: ${e.result.text}`);\n this.toggleRecording();\n this.cdr.markForCheck();\n }\n };\n\n this.recognizer.canceled = (s, e) => {\n console.error('Canceled: ', e.errorDetails);\n };\n\n this.recognizer.sessionStopped = (s, e) => {\n console.log('Session stopped.');\n this.recognizer.stopContinuousRecognitionAsync();\n this.fetchData();\n };\n }\n\n toggleRecording() {\n this.isRecording = !this.isRecording;\n\n if (this.isRecording) {\n this.startRecognition();\n } else {\n this.stopRecognition();\n }\n }\n\n startRecognition() {\n this.recognizer.startContinuousRecognitionAsync();\n }\n\n stopRecognition() {\n this.recognizer.stopContinuousRecognitionAsync();\n }\n\n checkForCop29BotId() {\n return (\n this.botId == '66fa3f276c5d71e2717bfea8' ||\n this.botId == '671633545652dd78efec848d'\n );\n }\n\n getLatestTime(time): string {\n if (time) {\n return time;\n }\n return new Date().toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n }); // returns current time in 'shortTime' format\n }\n\n /** Used by the voice modal when opened from this drawer. */\n voiceModalConversationId: string = '';\n\n openVoiceModal(): void {\n const conversationId = this.conversationKey ?? this.conversationService.getKey(this.botId, false) ?? '';\n this.voiceModalConversationId = conversationId;\n this.setupVoiceTranscripts();\n\n // Close existing overlay if any\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n\n const config: VoiceModalConfig = {\n apiUrl: this.environment?.BASE_URL ?? '',\n token: this.s27Token ?? '',\n botId: this.botId ?? '',\n conversationId,\n apiKey: this.apiKey ?? '',\n eventToken: this.eventToken ?? '',\n eventUrl: this.eventUrl ?? '',\n domainAuthority: this.domainAuthorityValue ?? 'prod-lite',\n agentName: this.botName || 'AI Assistant',\n agentRole: this.botSkills || 'AI Agent Specialist',\n agentAvatar: this.botIcon,\n };\n\n const closeCallback = () => {\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n this.closeVoiceModal();\n };\n\n const injector = Injector.create([\n { provide: VOICE_MODAL_CONFIG, useValue: config },\n { provide: VOICE_MODAL_CLOSE_CALLBACK, useValue: closeCallback },\n ], this.injector);\n\n const overlayRef = this.overlay.create({\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n positionStrategy: this.overlay.position().global().bottom('0').right('0').left('0').top('0'),\n });\n\n const portal = new ComponentPortal(\n VoiceAgentModalComponent,\n this.viewContainerRef,\n injector\n );\n overlayRef.attach(portal);\n this.voiceModalOverlayRef = overlayRef;\n this.cdr.markForCheck();\n }\n\n closeVoiceModal(): void {\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n this.isVoiceModalOpen = false;\n this.voiceAgentService.disconnect();\n this.cdr.markForCheck();\n }\n\n private setupVoiceTranscripts(): void {\n // Clear existing subscriptions\n this.voiceTranscriptSubscriptions.forEach(sub => sub.unsubscribe());\n this.voiceTranscriptSubscriptions = [];\n\n // Subscribe to user transcripts\n const userSub = this.voiceAgentService.userTranscript$.subscribe(transcript => {\n if (transcript.final && transcript.text.trim()) {\n // Add user message to chat\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(transcript.text),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n this.cdr.markForCheck();\n this.scrollToBottom();\n }\n });\n\n // Subscribe to bot transcripts\n const botSub = this.voiceAgentService.botTranscript$.subscribe(transcript => {\n if (transcript && transcript.trim()) {\n // Check if last message is from bot, update it, otherwise add new\n const lastMessage = this.chatLog[this.chatLog.length - 1];\n if (lastMessage && lastMessage.type === 'ai') {\n lastMessage.message = this.processMessageForDisplay(transcript);\n } else {\n this.chatLog.push({\n type: 'ai',\n message: this.processMessageForDisplay(transcript),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n }\n this.cdr.markForCheck();\n this.scrollToBottom();\n }\n });\n\n this.voiceTranscriptSubscriptions.push(userSub, botSub);\n }\n}\n\nexport { VoiceModalConfig } from '../voice-agent/voice-modal-tokens';\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'hivegpt-chatbot',\n templateUrl: './chatbot.component.html',\n styleUrls: ['./chatbot.component.scss'],\n})\nexport class ChatBotComponent {\n @Input() userId!: string;\n @Input() apiKey!: string;\n @Input() botName!: string;\n @Input() botSkills!: string;\n @Input() botId!: string;\n @Input() closeButtonColor!: string;\n @Input() gradientColors!: string[];\n @Input() greeting!: string;\n @Input() sendButtonColor!: string;\n @Input() useOpenAi!: boolean;\n @Input() showClose!: boolean;\n @Input() bgGradient!: string[];\n @Input() sendButtonTextColor!: string;\n @Input() fullView!: boolean;\n @Input() bgBubbleAi!: string;\n @Input() bgBubbleUser!: string;\n @Input() closeButtonbgColor!: string;\n @Input() messageTextColorAi!: string;\n @Input() messageTextColorUser!: string;\n @Input() dateTimeColor!: string;\n @Input() dateTextColor!: string;\n @Input() formFieldBgColor!: string;\n @Input() formFieldTextColor!: string;\n @Input() thumbsUpMessage!: string;\n @Input() thumbsDownMessages!: string[];\n @Input() timezone!: string;\n @Input() eventName!: string;\n @Input() credentials!: [];\n @Input() unknownResponses!: [];\n @Input() rules!: string;\n @Input() eventId!: string;\n @Input() s27Token!: string;\n @Input() workspaceToken!: string;\n @Input() isDev!: boolean;\n visible = false;\n\n toggle() {\n this.visible = !this.visible;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VoiceAgentModalComponent } from './components/voice-agent-modal/voice-agent-modal.component';\nimport { VoiceAgentService } from './services/voice-agent.service';\nimport { AudioAnalyzerService } from './services/audio-analyzer.service';\nimport { WebSocketVoiceClientService } from './services/websocket-voice-client.service';\nimport { DailyVoiceClientService } from './services/daily-voice-client.service';\n\n/**\n * Voice agent module. Uses native WebSocket + Daily.js only.\n * Does NOT use Socket.IO or ngx-socket-io.\n */\n@NgModule({\n declarations: [\n VoiceAgentModalComponent\n ],\n imports: [\n CommonModule\n ],\n providers: [\n VoiceAgentService,\n AudioAnalyzerService,\n WebSocketVoiceClientService,\n DailyVoiceClientService\n ],\n exports: [\n VoiceAgentModalComponent\n ]\n})\nexport class VoiceAgentModule { }\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n})\nexport class SafeHtmlPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n transform(html): unknown {\n return html ? this.sanitizer.bypassSecurityTrustHtml(html) : '';\n }\n\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { IVideo } from '../../models/video';\nimport { DOCUMENT } from '@angular/common';\n\n@Component({\n selector: 'app-video-player',\n templateUrl: './video-player.component.html',\n styleUrls: ['./video-player.component.scss'],\n})\nexport class VideoPlayerComponent\n implements OnInit, AfterViewInit {\n @Input() currentUserId: string;\n @Input() user: any;\n @Input() eventId: string;\n @Input() videoObj: IVideo;\n @Input() isDev: boolean;\n myFollowingList: Array<string>;\n myPendingSentRequests: Array<string>;\n @Input() type: string;\n isMuted: boolean = true;\n private observer: IntersectionObserver;\n isFullscreen: boolean = false;\n @ViewChild('video') video: any;\n @ViewChild('fullscreenvideo') fullscreenvideo: any;\n isFullscreenvideoPlaying: boolean = false;\n\n @Output() connectWithUser = new EventEmitter<string>();\n @Output() scheduleMeeting = new EventEmitter<any>();\n\n constructor(\n @Inject(DOCUMENT) private doc: any,\n private el: ElementRef,\n private cdr: ChangeDetectorRef\n ) {\n }\n\n ngOnInit(): void {\n }\n\n toggleSound(isMuted = null) {\n this.isMuted = isMuted != null ? isMuted : !this.isMuted;\n setTimeout(() => {\n const video: any = this.doc\n .getElementById(this.video.id.toString());\n if (video) {\n video.muted = this.isMuted;\n this.video.isMuted = this.isMuted;\n }\n\n this.cdr.markForCheck();\n //this.muteToggle.emit(this.isMuted);\n })\n}\n\n togglePlay(playState: boolean, videoEl) {\n this.videoObj.isPlaying = !this.videoObj.isPlaying;\n setTimeout(() => { \n if (playState) { \n this.videoObj.isPlaying = true;\n videoEl.play();\n var pauseBtn = document.getElementById('pause-btn');\n pauseBtn.classList.add('hide-pause-btn');\n\n this.toggleSound(false);\n }\n else{\n this.videoObj.isPlaying = false;\n videoEl.pause();\n }\n this.cdr.markForCheck();\n })\n }\n \n ngAfterViewInit() {\n if (window.innerWidth <= 576) {\n this.observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting === true) {\n this.video.nativeElement.play();\n } else {\n this.video.nativeElement.pause();\n }\n },\n {\n threshold: 0.75,\n }\n );\n\n this.observer.observe(this.el.nativeElement as HTMLElement);\n }\n }\n\n toggleFullscreen() {\n this.isFullscreen = !this.isFullscreen;\n if (!this.isFullscreen) {\n this.fullscreenvideo.nativeElement.pause();\n }\n }\n\n toggleFullscreenPlay() {\n this.isFullscreenvideoPlaying = !this.isFullscreenvideoPlaying;\n\n if (this.isFullscreenvideoPlaying) {\n this.fullscreenvideo.nativeElement.play();\n } else {\n this.fullscreenvideo.nativeElement.pause();\n }\n }\n\n followUser(userId) {\n this.connectWithUser.emit(userId);\n }\n\n checkPendingSentRequest(userId) {\n return this.myPendingSentRequests?.find(a => a == userId);\n }\n\n canUnfollowUser() {\n return false;\n }\n\n canFollowUser() {\n return true;\n }\n\n getIniNames(firstName, lastName) {\n if(!firstName && !lastName) {\n return '';\n }\n \n if (firstName && lastName)\n return (\n firstName.charAt(0).toUpperCase() + lastName.charAt(0).toUpperCase()\n );\n else return firstName.charAt(0).toUpperCase();\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { MatDrawer } from '@angular/material/sidenav';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { of, Subscription } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport { formatNow, formatTimeStamps } from '../../utils/utils';\nimport {\n dev_environment,\n prod_environment,\n} from '../../../environments/environment';\nimport { ConversationService } from '../conversation.service';\nimport { Observable } from 'rxjs';\nimport { SocketService } from '../socket-service.service';\n\n@Component({\n selector: 'lib-bot-html-editor',\n templateUrl: './bot-html-editor.component.html',\n styleUrls: ['./bot-html-editor.component.css'],\n})\nexport class BotHtmlEditorComponent implements OnInit {\n @Input() editorContent: Observable<string>;\n @Input() isDocInEditMode: any;\n @Input() documentContent: any;\n @Input() conversationId: any;\n @Input() botId: any;\n\n documentName: any = 'doc name';\n\n environment: {\n USERS_API;\n BASE_URL;\n AGENTS_API;\n };\n\n quillConfig = {\n toolbar: [\n [{ header: '1' }, { header: '2' }, { font: [] }],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['bold', 'italic', 'underline'],\n ['link'],\n ['clean'],\n ],\n };\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient) {}\n\n ngOnInit(): void {\n this.environment = prod_environment;\n\n setTimeout(() => {\n if (this.isDocInEditMode) {\n console.log('In Edit mode');\n this.filldataInForm();\n } else {\n console.log('In save mode');\n }\n }, 2500);\n }\n\n filldataInForm() {\n if (this.documentContent) {\n this.documentName = this.documentContent?.name;\n this.editorContent = this.documentContent?.content;\n this.cdr.detectChanges();\n }\n }\n\n saveContent() {\n if (!this.isDocInEditMode) {\n this.saveContent_http().subscribe();\n } else {\n this.saveContent_http().subscribe();\n }\n }\n\n saveContent_http() {\n console.log('API call function');\n\n const url = `${this.environment.AGENTS_API}/ConversationDocuments?conversationId=${this.conversationId}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n });\n\n let data = {\n name: this.documentName,\n content: this.editorContent,\n };\n\n return this.http.post(url, data, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n // alert('Saved Successfully');\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n\n updateContent_http() {\n console.log('API call function');\n\n const url = `${this.environment.AGENTS_API}/ConversationDocuments/rename?conversationId=${this.conversationId}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n });\n\n let data = {\n name: this.documentName,\n content: this.editorContent,\n };\n\n return this.http.put(url, data, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n // alert('Updated Successfully');\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { ChatDrawerComponent } from './components/chat-drawer/chat-drawer.component';\nimport { ChatBotComponent } from './components/chatbot/chatbot.component';\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\nimport { VideoPlayerComponent } from './components/video-player/video-player.component';\nimport { QuillModule } from 'ngx-quill';\nimport { BotHtmlEditorComponent } from './components/bot-html-editor/bot-html-editor.component';\nimport { VoiceAgentModule } from './components/voice-agent/voice-agent.module';\n\n@NgModule({\n declarations: [ChatBotComponent, ChatDrawerComponent, VideoPlayerComponent, SafeHtmlPipe, BotHtmlEditorComponent],\n imports: [CommonModule, OverlayModule, MatIconModule, MatSidenavModule, FormsModule, ReactiveFormsModule, QuillModule, VoiceAgentModule],\n exports: [ChatBotComponent, ChatDrawerComponent, VideoPlayerComponent]\n})\nexport class HiveGptModule { }\n"],"mappings":"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","ignoreList":[]}