@projectcor/maia-components 2.28.0 → 2.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App.js +55 -0
- package/lib/components/atoms/ActionableButton.js +60 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +89 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +21 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.js +9 -0
- package/lib/components/atoms/AgentActivityIndicator/index.js +2 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +209 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +93 -0
- package/lib/components/atoms/ApprovalBox/index.js +2 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.js +218 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.styles.js +52 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +448 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.styles.js +58 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +55 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.styles.js +14 -0
- package/lib/components/atoms/AttachmentCard/index.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +442 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.styles.js +119 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +222 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +313 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +128 -0
- package/lib/components/atoms/AttachmentPreviewModal/index.js +2 -0
- package/lib/components/atoms/Backdrop/Backdrop.js +17 -0
- package/lib/components/atoms/Backdrop/Backdrop.styles.js +9 -0
- package/lib/components/atoms/Backdrop/index.js +2 -0
- package/lib/components/atoms/CardItem.js +7 -0
- package/lib/components/atoms/CardMenu/CardMenu.js +131 -0
- package/lib/components/atoms/CardMenu/index.js +2 -0
- package/lib/components/atoms/CardMenu/styles.js +21 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.js +77 -0
- package/lib/components/atoms/ChatClientSelector/index.js +2 -0
- package/lib/components/atoms/ChatDisclaimerMessage/ChatDisclaimerMessage.js +9 -0
- package/lib/components/atoms/ChatDisclaimerMessage/index.js +2 -0
- package/lib/components/atoms/ChatDisclaimerMessage/styles.js +6 -0
- package/lib/components/atoms/Checkbox/Checkbox.js +34 -0
- package/lib/components/atoms/Checkbox/index.js +2 -0
- package/lib/components/atoms/Checkbox/styles.js +39 -0
- package/lib/components/atoms/Chip/Chip.js +150 -0
- package/lib/components/atoms/Chip/index.js +2 -0
- package/lib/components/atoms/Chip/styles.js +43 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.js +45 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.style.js +21 -0
- package/lib/components/atoms/ChipLlm/index.js +2 -0
- package/lib/components/atoms/ChipStatus/ChipStatus.interface.js +2 -0
- package/lib/components/atoms/ChipStatus/ChipStatus.js +14 -0
- package/lib/components/atoms/ChipStatus/ChipStatus.styles.js +27 -0
- package/lib/components/atoms/ChipStatus/index.js +2 -0
- package/lib/components/atoms/ClearButton.js +6 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +146 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.styles.js +15 -0
- package/lib/components/atoms/ClientSelector/index.js +2 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +38 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +188 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +39 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +434 -0
- package/lib/components/atoms/ContextMentionChip/index.js +4 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +411 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +10 -0
- package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +309 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +157 -0
- package/lib/components/atoms/ContextMentionItem/index.js +2 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +307 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +108 -0
- package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
- package/lib/components/atoms/CopyToClipboard.js +70 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.js +110 -0
- package/lib/components/atoms/EditableLabel/index.js +2 -0
- package/lib/components/atoms/EditableLabel/styles.js +7 -0
- package/lib/components/atoms/EmptySearchClients/EmptySearchClients.js +22 -0
- package/lib/components/atoms/EmptySearchClients/EmptySearchClients.styles.js +18 -0
- package/lib/components/atoms/EmptySearchClients/index.js +2 -0
- package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.js +19 -0
- package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.styles.js +15 -0
- package/lib/components/atoms/EmptySearchProjects/index.js +2 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.js +247 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.skeleton.js +38 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +67 -0
- package/lib/components/atoms/EntitySelector/index.js +2 -0
- package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.js +14 -0
- package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.styles.js +15 -0
- package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.js +14 -0
- package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.style.js +15 -0
- package/lib/components/atoms/ErrorSearchFaqs/index.js +2 -0
- package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.js +18 -0
- package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.style.js +15 -0
- package/lib/components/atoms/ErrorSearchProjects/index.js +2 -0
- package/lib/components/atoms/Expand/Expand.js +32 -0
- package/lib/components/atoms/Expand/index.js +2 -0
- package/lib/components/atoms/Fade/Fade.js +56 -0
- package/lib/components/atoms/Fade/index.js +2 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.js +59 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +14 -0
- package/lib/components/atoms/FeedbackButton/index.js +2 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +138 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.skeleton.js +44 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +43 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/index.js +2 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +122 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.skeleton.js +43 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +62 -0
- package/lib/components/atoms/FrequentlyUsedActions/index.js +2 -0
- package/lib/components/atoms/GoBackButton.js +24 -0
- package/lib/components/atoms/HelpButton.js +44 -0
- package/lib/components/atoms/IconButton.js +56 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.js +96 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.styles.js +70 -0
- package/lib/components/atoms/Input/CustomInput.interface.js +2 -0
- package/lib/components/atoms/Input/CustomInput.js +91 -0
- package/lib/components/atoms/Input/CustomInput.styles.js +39 -0
- package/lib/components/atoms/Input/index.js +2 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.js +41 -0
- package/lib/components/atoms/ListMenuOption/index.js +2 -0
- package/lib/components/atoms/ListMenuOption/styles.js +9 -0
- package/lib/components/atoms/Loader.js +41 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.js +11 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.style.js +6 -0
- package/lib/components/atoms/LoadingFaqs/index.js +2 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.js +11 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.styles.js +6 -0
- package/lib/components/atoms/LoadingSearchClients/index.js +2 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.js +14 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.style.js +10 -0
- package/lib/components/atoms/LoadingSearchProjects/index.js +2 -0
- package/lib/components/atoms/LoadingText/LoadingText.js +18 -0
- package/lib/components/atoms/LoadingText/index.js +2 -0
- package/lib/components/atoms/LoadingText/styles.js +7 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.js +33 -0
- package/lib/components/atoms/MAIAButton/index.js +2 -0
- package/lib/components/atoms/MAIAError/MAIAError.js +15 -0
- package/lib/components/atoms/MAIAError/index.js +2 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +1058 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +266 -0
- package/lib/components/atoms/MAIAInput/index.js +2 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.js +25 -0
- package/lib/components/atoms/MAIAInput/styles.js +182 -0
- package/lib/components/atoms/MAIAMessage/MAIAMessage.interfaces.js +2 -0
- package/lib/components/atoms/MAIAMessage/MAIAMessage.js +22 -0
- package/lib/components/atoms/MAIAMessage/index.js +2 -0
- package/lib/components/atoms/MAIAMessage/styles.js +7 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.config.js +23 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.interfaces.js +2 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.js +51 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.styles.js +26 -0
- package/lib/components/atoms/MaiaStreamdown/index.js +2 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.js +18 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +84 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.js +15 -0
- package/lib/components/atoms/MaiaWrapper/index.js +3 -0
- package/lib/components/atoms/MaiaWrapper/styles.js +21 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.interface.js +2 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.js +84 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.styles.js +53 -0
- package/lib/components/atoms/ModalClientAccess/index.js +2 -0
- package/lib/components/atoms/ModalInfo/ModalInfo.js +52 -0
- package/lib/components/atoms/ModalInfo/ModalInfoContent.js +7 -0
- package/lib/components/atoms/ModalInfo/index.js +3 -0
- package/lib/components/atoms/ModalInfo/styles.js +7 -0
- package/lib/components/atoms/ModalProject/ModalProject.interface.js +2 -0
- package/lib/components/atoms/ModalProject/ModalProject.js +112 -0
- package/lib/components/atoms/ModalProject/ModalProject.style.js +59 -0
- package/lib/components/atoms/ModalProject/index.js +2 -0
- package/lib/components/atoms/NextPageLoader.js +33 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.js +28 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +180 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.styles.js +34 -0
- package/lib/components/atoms/OnboardingModalButton/index.js +3 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +131 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.styles.js +59 -0
- package/lib/components/atoms/OptionAccessibility/index.js +2 -0
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +27 -0
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +18 -0
- package/lib/components/atoms/OptionCorPermission/index.js +2 -0
- package/lib/components/atoms/PrimaryButton.js +31 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.js +77 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.styles.js +61 -0
- package/lib/components/atoms/ProjectSelector/index.js +2 -0
- package/lib/components/atoms/SecondaryButton.js +20 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +20 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +20 -0
- package/lib/components/atoms/SessionGeneratingDot/index.js +2 -0
- package/lib/components/atoms/Skeleton/Skeleton.js +36 -0
- package/lib/components/atoms/Skeleton/index.js +2 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.js +16 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.styles.js +24 -0
- package/lib/components/atoms/SlashCommandChip/buildSlashChipElement.js +18 -0
- package/lib/components/atoms/SlashCommandChip/index.js +4 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +210 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +53 -0
- package/lib/components/atoms/SlashCommandDropdown/index.js +2 -0
- package/lib/components/atoms/Switch/Switch.js +27 -0
- package/lib/components/atoms/Switch/Switch.styles.js +22 -0
- package/lib/components/atoms/Switch/index.js +2 -0
- package/lib/components/atoms/TextArea/CustomTextArea.interface.js +2 -0
- package/lib/components/atoms/TextArea/CustomTextArea.js +93 -0
- package/lib/components/atoms/TextArea/CustomTextArea.styles.js +25 -0
- package/lib/components/atoms/TextArea/TextArea.interfaces.js +2 -0
- package/lib/components/atoms/TextArea/TextArea.js +172 -0
- package/lib/components/atoms/TextArea/TextArea.styles.js +16 -0
- package/lib/components/atoms/TextArea/index.js +2 -0
- package/lib/components/atoms/ThirdButton.js +19 -0
- package/lib/components/atoms/VideoModal/VideoModal.js +76 -0
- package/lib/components/atoms/VideoModal/index.js +2 -0
- package/lib/components/atoms/WithAppCfg.js +26 -0
- package/lib/components/atoms/WithFeatureValidation.js +23 -0
- package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.js +9 -0
- package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.styles.js +6 -0
- package/lib/components/atoms/WrapperCenterIcon/index.js +2 -0
- package/lib/components/atoms/icons/AIIcon.js +23 -0
- package/lib/components/atoms/icons/AacFile.js +39 -0
- package/lib/components/atoms/icons/AccessibilityIcon.js +42 -0
- package/lib/components/atoms/icons/ActionAssignIcon.js +111 -0
- package/lib/components/atoms/icons/ActionCalendarIcon.js +112 -0
- package/lib/components/atoms/icons/ActionChargeHoursIcon.js +111 -0
- package/lib/components/atoms/icons/ActionChatIcon.js +71 -0
- package/lib/components/atoms/icons/ActionCreateIcon.js +91 -0
- package/lib/components/atoms/icons/ActionCreateReworkIcon.js +39 -0
- package/lib/components/atoms/icons/ActionCreateSubtaskIcon.js +37 -0
- package/lib/components/atoms/icons/ActionEditIcon.js +39 -0
- package/lib/components/atoms/icons/ActionSummaryMessagesIcon.js +88 -0
- package/lib/components/atoms/icons/ActionSummaryTaskIcon.js +37 -0
- package/lib/components/atoms/icons/ActionTimeBackIcon.js +112 -0
- package/lib/components/atoms/icons/AgentMaiaIcon.js +31 -0
- package/lib/components/atoms/icons/Brain.js +77 -0
- package/lib/components/atoms/icons/CorAccessIcon.js +41 -0
- package/lib/components/atoms/icons/CorLogo.js +76 -0
- package/lib/components/atoms/icons/CsvFile.js +41 -0
- package/lib/components/atoms/icons/DocFile.js +41 -0
- package/lib/components/atoms/icons/DocxFile.js +41 -0
- package/lib/components/atoms/icons/EmptyClientIllustration.js +67 -0
- package/lib/components/atoms/icons/EmptyHistory.js +46 -0
- package/lib/components/atoms/icons/EmptySearchIllustration.js +37 -0
- package/lib/components/atoms/icons/EmptyState.js +84 -0
- package/lib/components/atoms/icons/EmptyStateAgents.js +58 -0
- package/lib/components/atoms/icons/ErrorIcon.js +14 -0
- package/lib/components/atoms/icons/ErrorSearchIllustration.js +52 -0
- package/lib/components/atoms/icons/ErrorState.js +51 -0
- package/lib/components/atoms/icons/FaqChevronIcon.js +39 -0
- package/lib/components/atoms/icons/FaqsIcon.js +51 -0
- package/lib/components/atoms/icons/FlacIcon.js +39 -0
- package/lib/components/atoms/icons/FolderIcon.js +29 -0
- package/lib/components/atoms/icons/HomeIcon.js +30 -0
- package/lib/components/atoms/icons/ImageFile.js +46 -0
- package/lib/components/atoms/icons/M4aFile.js +39 -0
- package/lib/components/atoms/icons/MAIAIcon.js +20 -0
- package/lib/components/atoms/icons/MAIAIsologo.js +65 -0
- package/lib/components/atoms/icons/MDFile.js +41 -0
- package/lib/components/atoms/icons/MaiaChatLayoutFloatingIcon.js +41 -0
- package/lib/components/atoms/icons/MaiaChatLayoutFullscreenIcon.js +41 -0
- package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +33 -0
- package/lib/components/atoms/icons/MaiaChatLayoutSidebarIcon.js +41 -0
- package/lib/components/atoms/icons/MaiaInputAddIcon.js +42 -0
- package/lib/components/atoms/icons/MaiaInputAttachIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +33 -0
- package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +35 -0
- package/lib/components/atoms/icons/MaiaInputMentionIcon.js +44 -0
- package/lib/components/atoms/icons/MaiaInputRobotIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputSendIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputSlashIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +35 -0
- package/lib/components/atoms/icons/MaiaSettingsProject.js +111 -0
- package/lib/components/atoms/icons/MaiaSettingsProjectV2.js +193 -0
- package/lib/components/atoms/icons/MaiaSparkleIcon.js +75 -0
- package/lib/components/atoms/icons/MaiaStoreIcon.js +31 -0
- package/lib/components/atoms/icons/Mp3File.js +39 -0
- package/lib/components/atoms/icons/Mp4File.js +39 -0
- package/lib/components/atoms/icons/MyAgentsNavIcon.js +51 -0
- package/lib/components/atoms/icons/NewChat.js +29 -0
- package/lib/components/atoms/icons/NotionIcon.js +36 -0
- package/lib/components/atoms/icons/OgaFile.js +39 -0
- package/lib/components/atoms/icons/OggFile.js +39 -0
- package/lib/components/atoms/icons/PdfFile.js +39 -0
- package/lib/components/atoms/icons/PptFile.js +47 -0
- package/lib/components/atoms/icons/PptxFile.js +49 -0
- package/lib/components/atoms/icons/RetryIcon.js +34 -0
- package/lib/components/atoms/icons/SkillIcon.js +30 -0
- package/lib/components/atoms/icons/SkillsNavIcon.js +27 -0
- package/lib/components/atoms/icons/SubtaskIcon.js +36 -0
- package/lib/components/atoms/icons/TaskLinkIcon.js +27 -0
- package/lib/components/atoms/icons/TelescopeIcon.js +60 -0
- package/lib/components/atoms/icons/TemplateGradientIcon.js +42 -0
- package/lib/components/atoms/icons/TextFile.js +41 -0
- package/lib/components/atoms/icons/WavFile.js +39 -0
- package/lib/components/atoms/icons/WebmFile.js +50 -0
- package/lib/components/atoms/icons/XlsFile.js +42 -0
- package/lib/components/atoms/icons/XlsxFile.js +42 -0
- package/lib/components/atoms/icons/index.js +50 -0
- package/lib/components/atoms/index.js +42 -0
- package/lib/components/index.js +11 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.interface.js +2 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +149 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +53 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +415 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +152 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +374 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +106 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +92 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.styles.js +57 -0
- package/lib/components/molecules/AbmSection/index.js +4 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +52 -0
- package/lib/components/molecules/ChatAIClientSelector/index.js +2 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +117 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.skeleton.js +187 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.styles.js +6 -0
- package/lib/components/molecules/ChatAIContent/index.js +2 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +241 -0
- package/lib/components/molecules/ChatAIHistory/index.js +2 -0
- package/lib/components/molecules/ChatAIHistory/styles.js +22 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +649 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +115 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +95 -0
- package/lib/components/molecules/ChatAIHome/index.js +2 -0
- package/lib/components/molecules/ChatAIHome/styles.js +335 -0
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +137 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +853 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +47 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +37 -0
- package/lib/components/molecules/ChatAIMessages/README.md +101 -0
- package/lib/components/molecules/ChatAIMessages/index.js +2 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +131 -0
- package/lib/components/molecules/ChatAIMessages/styles.js +94 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +1217 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +58 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +127 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +34 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +189 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +448 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +108 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +48 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +38 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/constants.js +40 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +12 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +13 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +3 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +57 -0
- package/lib/components/molecules/ChatAIModal/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/layout.js +74 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +457 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +218 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +357 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +145 -0
- package/lib/components/molecules/ChatAIMySkills/index.js +2 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +48 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.styles.js +49 -0
- package/lib/components/molecules/ChatAIProjectSelector/index.js +2 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +337 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.js +32 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.styles.js +14 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +201 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.styles.js +51 -0
- package/lib/components/molecules/ChatFooter/index.js +2 -0
- package/lib/components/molecules/ChatFooter/styles.js +23 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +62 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
- package/lib/components/molecules/ContextMentionInput/index.js +2 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.js +118 -0
- package/lib/components/molecules/MessageFeedback/index.js +2 -0
- package/lib/components/molecules/MessageFeedback/styles.js +14 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.js +127 -0
- package/lib/components/molecules/ProjectSummaryChat/index.js +2 -0
- package/lib/components/molecules/ProjectSummaryChat/styles.js +8 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.js +152 -0
- package/lib/components/molecules/ProjectSummaryConfig/index.js +2 -0
- package/lib/components/molecules/ProjectSummaryConfig/styles.js +86 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.js +49 -0
- package/lib/components/molecules/ProjectSummaryContent/index.js +2 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.js +19 -0
- package/lib/components/molecules/ProjectSummaryModal/index.js +2 -0
- package/lib/components/molecules/ProjectSummaryModal/styles.js +2 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +715 -0
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +157 -0
- package/lib/components/molecules/Sidebar/Sidebar.skeleton.js +48 -0
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +75 -0
- package/lib/components/molecules/Sidebar/index.js +2 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +1420 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +93 -0
- package/lib/components/organisms/AbmAgentModal/index.js +2 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +175 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +34 -0
- package/lib/components/organisms/AbmSkillGenerateModal/index.js +2 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +432 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +98 -0
- package/lib/components/organisms/AbmSkillModal/index.js +2 -0
- package/lib/components/organisms/ChatAI/ChatAI.js +167 -0
- package/lib/components/organisms/ChatAI/index.js +2 -0
- package/lib/components/organisms/ChatAI/styles.js +7 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.js +23 -0
- package/lib/components/organisms/ClientAIButton/index.js +2 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.js +86 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.styles.js +39 -0
- package/lib/components/organisms/DeleteAgentModal/index.js +2 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +122 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.styles.js +47 -0
- package/lib/components/organisms/DeleteQuestionModal/index.js +2 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +138 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.styles.js +69 -0
- package/lib/components/organisms/EditQuestionModal/index.js +2 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.js +113 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.styles.js +54 -0
- package/lib/components/organisms/ModalFileExceeds/index.js +2 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.js +26 -0
- package/lib/components/organisms/ProjectAIButton/index.js +2 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.js +60 -0
- package/lib/components/organisms/ProjectSummary/index.js +2 -0
- package/lib/components/organisms/ProjectSummary/styles.js +7 -0
- package/lib/components/organisms/SnackBar/Snackbar.interface.js +2 -0
- package/lib/components/organisms/SnackBar/Snackbar.js +73 -0
- package/lib/components/organisms/SnackBar/Snackbar.styles.js +9 -0
- package/lib/components/organisms/SnackBar/index.js +2 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.js +18 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.styles.js +14 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.styles.js +27 -0
- package/lib/components/organisms/SourcesInformation/index.js +2 -0
- package/lib/constants/config.js +13 -0
- package/lib/constants/formatExtensions.js +55 -0
- package/lib/constants/gqlClient.js +4 -0
- package/lib/constants/maiaHourAgentAccess.js +15 -0
- package/lib/constants/maiaTaskPanelAccess.js +24 -0
- package/lib/constants/maiaTaskPanelOutsideClick.js +9 -0
- package/lib/constants/maiaTaskPanelZIndex.js +19 -0
- package/lib/constants/permissions/config.js +72 -0
- package/lib/constants/permissions/index.js +3 -0
- package/lib/constants/permissions/types.js +2 -0
- package/lib/constants/permissions/utils.js +18 -0
- package/lib/constants/plannerSyncEvents.js +15 -0
- package/lib/constants/taskLinkIcon.js +15 -0
- package/lib/constants/taskUrls.js +11 -0
- package/lib/context/cor-user.js +31 -0
- package/lib/context/global-context.js +39 -0
- package/lib/dev/DevChatAI.js +101 -0
- package/lib/dev/DevContextMentionInput.js +67 -0
- package/lib/dev/ProjectSummary.js +9 -0
- package/lib/dev/Providers.js +27 -0
- package/lib/exports.js +2 -0
- package/lib/hooks/README.md +192 -0
- package/lib/hooks/index.js +30 -0
- package/lib/hooks/useAccessClient/index.js +2 -0
- package/lib/hooks/useAccessClient/useAccessClient.js +81 -0
- package/lib/hooks/useAgentModel/index.js +2 -0
- package/lib/hooks/useAgentModel/useAgentModel.js +62 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +128 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.js +88 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.js +129 -0
- package/lib/hooks/useAgentSuggestions.js +60 -0
- package/lib/hooks/useCaretPosition.js +65 -0
- package/lib/hooks/useChatManager/index.js +2 -0
- package/lib/hooks/useChatManager/useChatManager.interface.js +2 -0
- package/lib/hooks/useChatManager/useChatManager.js +1782 -0
- package/lib/hooks/useChatMessages/index.js +2 -0
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +2 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +722 -0
- package/lib/hooks/useChats/index.js +2 -0
- package/lib/hooks/useChats/useChats.interfaces.js +2 -0
- package/lib/hooks/useChats/useChats.js +187 -0
- package/lib/hooks/useClientSearch.js +163 -0
- package/lib/hooks/useContextMentions.js +463 -0
- package/lib/hooks/useContextPinPopover.js +228 -0
- package/lib/hooks/useDebounce.js +18 -0
- package/lib/hooks/useEntitySearch.js +1239 -0
- package/lib/hooks/useEvent.js +93 -0
- package/lib/hooks/useFrequentlyAskedQuestions.js +150 -0
- package/lib/hooks/useFrequentlyUsedActions.js +94 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.js +69 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.js +81 -0
- package/lib/hooks/useKnowledge/index.js +4 -0
- package/lib/hooks/useKnowledge/saveKnowledge.js +107 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +156 -0
- package/lib/hooks/useMaiaTaskPanelZIndex.js +17 -0
- package/lib/hooks/useMentionAllowedTypes.js +136 -0
- package/lib/hooks/useMentionPopover.js +366 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +110 -0
- package/lib/hooks/useModal/index.js +2 -0
- package/lib/hooks/useModal/useModal.interfaces.js +2 -0
- package/lib/hooks/useModal/useModal.js +47 -0
- package/lib/hooks/useOnboardingNavigation.js +20 -0
- package/lib/hooks/useOrchestratorStream/index.js +2 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +2 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +269 -0
- package/lib/hooks/useProjectSearch.js +183 -0
- package/lib/hooks/useProjectSummary.js +101 -0
- package/lib/hooks/useProjectSummaryConfig.js +211 -0
- package/lib/hooks/useProjects.js +46 -0
- package/lib/hooks/useRecentClientsSearch.js +150 -0
- package/lib/hooks/useRecentContexts.js +86 -0
- package/lib/hooks/useResize.js +29 -0
- package/lib/hooks/useSlashCommands.js +84 -0
- package/lib/hooks/useSmoothStreamText/index.js +2 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +197 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.js +41 -0
- package/lib/hooks/useStreamResponse.js +112 -0
- package/lib/hooks/useStreamdownStyles.js +13 -0
- package/lib/hooks/useStreamingMessage/index.js +2 -0
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +18 -0
- package/lib/hooks/useT.js +17 -0
- package/lib/hooks/useTabTaskDefault.js +33 -0
- package/lib/hooks/useTaskPanel.js +22 -0
- package/lib/hooks/useTextOverflowEllipsisTooltip.js +34 -0
- package/lib/hooks/useToggle.js +19 -0
- package/lib/hooks/useToggleFavorite/index.js +2 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.js +83 -0
- package/lib/index.css +76 -0
- package/lib/index.js +30 -0
- package/lib/lang/br/index.js +761 -0
- package/lib/lang/en/index.js +761 -0
- package/lib/lang/es/index.js +762 -0
- package/lib/lang/fr/index.js +582 -0
- package/lib/lang/index.js +24 -0
- package/lib/lang/utils.js +33 -0
- package/lib/mocks/mockChats.js +395 -0
- package/lib/mocks/mockOrchestrator.js +5 -0
- package/lib/mocks/mockProject.js +11 -0
- package/lib/mocks/mockProjectSummary.js +6 -0
- package/lib/mocks/mockedUser.js +169 -0
- package/lib/services/apolloClient.js +3 -0
- package/lib/services/appcues.js +19 -0
- package/lib/services/corpilot/ProjectSummary/getProjectSummary.js +31 -0
- package/lib/services/corpilot/ProjectSummary/index.js +5 -0
- package/lib/services/corpilot/client.js +27 -0
- package/lib/services/corpilot/index.js +5 -0
- package/lib/services/maia/Access/updateAccess.js +59 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +46 -0
- package/lib/services/maia/Actions/getSlashCommands.js +39 -0
- package/lib/services/maia/Actions/index.js +7 -0
- package/lib/services/maia/Agents/createAgent.js +39 -0
- package/lib/services/maia/Agents/deleteAgent.js +38 -0
- package/lib/services/maia/Agents/fetchAgentDetail.js +122 -0
- package/lib/services/maia/Agents/getAgentById.js +162 -0
- package/lib/services/maia/Agents/getAgentModels.js +112 -0
- package/lib/services/maia/Agents/getAgentSuggestions.js +44 -0
- package/lib/services/maia/Agents/getAgents.js +718 -0
- package/lib/services/maia/Agents/setAgentToolGroups.js +42 -0
- package/lib/services/maia/Agents/toggleFavorite.js +34 -0
- package/lib/services/maia/Agents/updateAgent.js +39 -0
- package/lib/services/maia/Chats/deleteChat.js +32 -0
- package/lib/services/maia/Chats/getChatMessages.js +144 -0
- package/lib/services/maia/Chats/getChatsByUserId.js +82 -0
- package/lib/services/maia/Chats/index.js +15 -0
- package/lib/services/maia/Chats/markSessionAsRead.js +32 -0
- package/lib/services/maia/Chats/patchChat.js +43 -0
- package/lib/services/maia/Chats/wasHelpfulChat.js +31 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +55 -0
- package/lib/services/maia/Faqs/index.js +5 -0
- package/lib/services/maia/Knowledge/delete.js +41 -0
- package/lib/services/maia/Knowledge/download.js +48 -0
- package/lib/services/maia/Knowledge/index.js +3 -0
- package/lib/services/maia/Knowledge/save.js +43 -0
- package/lib/services/maia/Orchestrator/index.js +7 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +246 -0
- package/lib/services/maia/RecentClients/getRecentClients.js +43 -0
- package/lib/services/maia/RecentClients/index.js +6 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.js +54 -0
- package/lib/services/maia/RecentContexts/index.js +6 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.js +55 -0
- package/lib/services/maia/RecentProjects/index.js +6 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.js +54 -0
- package/lib/services/maia/RecentTasks/index.js +6 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.js +59 -0
- package/lib/services/maia/RecentUsers/index.js +6 -0
- package/lib/services/maia/Skills/createSkill.js +39 -0
- package/lib/services/maia/Skills/deleteSkill.js +38 -0
- package/lib/services/maia/Skills/generateSkill.js +41 -0
- package/lib/services/maia/Skills/getSkills.js +90 -0
- package/lib/services/maia/Skills/updateSkill.js +39 -0
- package/lib/services/maia/client.js +27 -0
- package/lib/services/maia/index.js +17 -0
- package/lib/services/query/ClientSearchQuery.js +5 -0
- package/lib/services/query/entitySearchQuery.js +18 -0
- package/lib/services/query/index.js +2 -0
- package/lib/services/query/projectSearchByValueQuery.js +5 -0
- package/lib/services/query/taskUserTabQuery.js +8 -0
- package/lib/services/query/usersDirectoryQuery.js +19 -0
- package/lib/services/types.js +6 -0
- package/lib/services/utils/fetchCOR.js +117 -0
- package/lib/services/utils/getCookie.js +10 -0
- package/lib/services/utils/index.js +3 -0
- package/lib/services/utils/mapChatMessages.js +287 -0
- package/lib/services/utils/validateIsMaia.js +4 -0
- package/lib/store/chatsSidebarOptimistic.js +92 -0
- package/lib/store/chatsStore.types.js +2 -0
- package/lib/store/chatsStoreLifecycle.js +8 -0
- package/lib/store/faqsStore.types.js +2 -0
- package/lib/store/index.js +4 -0
- package/lib/store/maiaLastChatPersistence.js +35 -0
- package/lib/store/sessions/activeView.js +22 -0
- package/lib/store/sessions/index.js +9 -0
- package/lib/store/sessions/sessionHitlContext.js +15 -0
- package/lib/store/sessions/sessionNotificationSound.js +57 -0
- package/lib/store/sessions/sessionNotifications.js +110 -0
- package/lib/store/sessions/sessionNotifications.types.js +2 -0
- package/lib/store/sessions/sessionStreamManager.js +715 -0
- package/lib/store/sessions/sessionStreamingText.js +80 -0
- package/lib/store/sessions/sessions.types.js +35 -0
- package/lib/store/sessions/useSessionMeta.js +39 -0
- package/lib/store/sessions/useSessionStreamingText.js +18 -0
- package/lib/store/sessions/useSessionsStore.js +197 -0
- package/lib/store/useChatsStore.js +387 -0
- package/lib/store/useFaqsStore.js +27 -0
- package/lib/streamdownStyles.js +9 -0
- package/lib/styles/StyledCleanContainer.js +7 -0
- package/lib/styles/cascade.js +14 -0
- package/lib/styles/config.js +47 -0
- package/lib/styles/shared/scrollable.js +3 -0
- package/lib/styles/transitions.js +21 -0
- package/lib/types/Action.js +2 -0
- package/lib/types/AgentSuggestion.js +2 -0
- package/lib/types/Chat.js +10 -0
- package/lib/types/Client.js +2 -0
- package/lib/types/FrequentlyAskedQuestion.js +2 -0
- package/lib/types/Project.js +2 -0
- package/lib/types/ProjectSummaryConfigKeys.js +9 -0
- package/lib/types/Task.js +2 -0
- package/lib/types/agent.js +2 -0
- package/lib/types/agentModal.js +2 -0
- package/lib/types/contextMention.js +37 -0
- package/lib/types/global.d.js +2 -0
- package/lib/types/skill.js +2 -0
- package/lib/types/streamActivity.js +2 -0
- package/lib/types/userType.d.js +2 -0
- package/lib/utils/actionCategoryMap.js +37 -0
- package/lib/utils/actionIconMap.js +61 -0
- package/lib/utils/agentDisplayName.js +42 -0
- package/lib/utils/chatInputFiles.js +52 -0
- package/lib/utils/contextMentionIcons.js +134 -0
- package/lib/utils/contextMentionLabel.js +4 -0
- package/lib/utils/contextMentionTriggers.js +54 -0
- package/lib/utils/contextMentionTypeLabel.js +17 -0
- package/lib/utils/corConnectorMentionTypes.js +41 -0
- package/lib/utils/ensureStreamdownStyles.js +21 -0
- package/lib/utils/entityLinkRender.js +135 -0
- package/lib/utils/fileDownloadHelper.js +40 -0
- package/lib/utils/formatQuickActionMessage.js +16 -0
- package/lib/utils/formatUnreadCount.js +6 -0
- package/lib/utils/getUnitFileSize.js +13 -0
- package/lib/utils/hitlAnalytics.js +65 -0
- package/lib/utils/hoursPlannerQuickActionType.js +64 -0
- package/lib/utils/imagePreprocessor.js +108 -0
- package/lib/utils/index.js +3 -0
- package/lib/utils/maiaHostOpen.js +19 -0
- package/lib/utils/maiaStreamdownRehypePlugins.js +27 -0
- package/lib/utils/mapBackendLang.js +8 -0
- package/lib/utils/normalizeAgentConnectors.js +70 -0
- package/lib/utils/openTaskInCorPanel.js +22 -0
- package/lib/utils/orchestratorSubagents.js +11 -0
- package/lib/utils/renderContextMentions.js +399 -0
- package/lib/utils/retryCompletion.js +85 -0
- package/lib/utils/slashCommandMarker.js +30 -0
- package/lib/utils/sortManagerHoursHomeFuas.js +14 -0
- package/lib/utils/sseStreamContent.js +17 -0
- package/lib/utils/streamActivityMessages.js +359 -0
- package/lib/utils/validateTrimmedFields.js +8 -0
- package/package.json +1 -1
|
@@ -0,0 +1,1058 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
/* eslint-disable no-restricted-syntax */
|
|
6
|
+
/* eslint-disable no-continue */
|
|
7
|
+
/* eslint-disable no-void */
|
|
8
|
+
/* eslint-disable react/no-array-index-key */
|
|
9
|
+
/* eslint-disable no-lonely-if */
|
|
10
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
11
|
+
/* eslint-disable prefer-destructuring */
|
|
12
|
+
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
13
|
+
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
14
|
+
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
15
|
+
import { createPortal } from 'react-dom';
|
|
16
|
+
import { Popover } from '@mui/material';
|
|
17
|
+
import { Check } from '@projectcor/icons/lib/components/Check';
|
|
18
|
+
import { Cross } from '@projectcor/icons/lib/components/Cross';
|
|
19
|
+
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
20
|
+
import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCInputChipsRow, SCInputMetaIconButton, SCInputMetaIndicators, SCMIAttachment, SCMIAttachmentDeleteIcon, SCMIAttachmentFileIcon, SCMIAttachmentIcon, SCMIAttachmentName, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAMainToolbarGrid, SCInputEditorCell, SCInputToolbarRow, StyledMAIAPlusToolbarCell, StyledMAIASendToolbarCell, StyledMAIAStopButton, StyledMAIAStopIcon, StyledMAIADropOverlay } from './styles';
|
|
21
|
+
import { getMaiaInputEditorMaxHeight, MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX } from './maiaInputLayout';
|
|
22
|
+
import { useGlobalContext } from '../../../context/global-context';
|
|
23
|
+
import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
|
|
24
|
+
import { SlashCommandDropdown } from '../SlashCommandDropdown';
|
|
25
|
+
import { useSlashCommands } from '../../../hooks/useSlashCommands';
|
|
26
|
+
import { resolveQuickActionType } from '../../../utils/hoursPlannerQuickActionType';
|
|
27
|
+
import { useT } from '../../../hooks/useT';
|
|
28
|
+
import { MaiaInputAddIcon } from '../icons/MaiaInputAddIcon';
|
|
29
|
+
import { MaiaInputAttachIcon } from '../icons/MaiaInputAttachIcon';
|
|
30
|
+
import { MaiaInputAttachmentImageIcon } from '../icons/MaiaInputAttachmentImageIcon';
|
|
31
|
+
import { MaiaInputDeepSearchIcon } from '../icons/MaiaInputDeepSearchIcon';
|
|
32
|
+
import { CorAccessIcon } from '../icons/CorAccessIcon';
|
|
33
|
+
import { MaiaInputMentionIcon } from '../icons/MaiaInputMentionIcon';
|
|
34
|
+
import { MaiaInputRobotIcon } from '../icons/MaiaInputRobotIcon';
|
|
35
|
+
import { MaiaInputSendIcon } from '../icons/MaiaInputSendIcon';
|
|
36
|
+
import { MaiaInputSlashIcon } from '../icons/MaiaInputSlashIcon';
|
|
37
|
+
import { MaiaInputWebSearchIcon } from '../icons/MaiaInputWebSearchIcon';
|
|
38
|
+
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
39
|
+
import { getChatToolsMenuAgentType } from '../../../utils/hitlAnalytics';
|
|
40
|
+
import { MAIA_CHAT_INPUT_UI } from '../../../styles/config';
|
|
41
|
+
import { allowedFileTypes, fileTypes, getMaxAttachmentSizeMb, MAX_CHAT_INPUT_ATTACHMENTS } from '../../../constants/formatExtensions';
|
|
42
|
+
import { APPCUES_EVENTS, trackAppcuesEvent } from '../../../services/appcues';
|
|
43
|
+
import { Chip } from '../Chip';
|
|
44
|
+
import { ContextMentionEditor } from '../ContextMentionEditor';
|
|
45
|
+
import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
|
|
46
|
+
// eslint-disable-next-line import/no-cycle
|
|
47
|
+
import { useMentionPopover } from '../../../hooks/useMentionPopover';
|
|
48
|
+
import { useCaretPosition } from '../../../hooks/useCaretPosition';
|
|
49
|
+
import { dataTransferHasFiles, filesFromDataTransfer } from '../../../utils/chatInputFiles';
|
|
50
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
51
|
+
var TOOL_CHIP_EXIT_MS = 220;
|
|
52
|
+
var SLASH_DROPDOWN_WIDTH_PX = 340;
|
|
53
|
+
var SLASH_DROPDOWN_MAX_HEIGHT_PX = 416;
|
|
54
|
+
var SLASH_DROPDOWN_GAP_PX = 4;
|
|
55
|
+
var SLASH_DROPDOWN_VIEWPORT_PAD_PX = 8;
|
|
56
|
+
export var MAIAInput = function MAIAInput(_ref) {
|
|
57
|
+
var _agent$entity, _contextChip$items, _contextChip$items2, _agent$connectors, _agent$model_display_, _contextChip$items3;
|
|
58
|
+
var onSendMessage = _ref.onSendMessage,
|
|
59
|
+
className = _ref.className,
|
|
60
|
+
disabled = _ref.disabled,
|
|
61
|
+
isStreaming = _ref.isStreaming,
|
|
62
|
+
isWriting = _ref.isWriting,
|
|
63
|
+
onStopGeneration = _ref.onStopGeneration,
|
|
64
|
+
placeholder = _ref.placeholder,
|
|
65
|
+
onChange = _ref.onChange,
|
|
66
|
+
onFocus = _ref.onFocus,
|
|
67
|
+
_ref$alignButtons = _ref.alignButtons,
|
|
68
|
+
alignButtons = _ref$alignButtons === void 0 ? 'vertical' : _ref$alignButtons,
|
|
69
|
+
onFileAttach = _ref.onFileAttach,
|
|
70
|
+
onDeleteAttachment = _ref.onDeleteAttachment,
|
|
71
|
+
_ref$attachments = _ref.attachments,
|
|
72
|
+
attachments = _ref$attachments === void 0 ? [] : _ref$attachments,
|
|
73
|
+
chatId = _ref.chatId,
|
|
74
|
+
newChatKey = _ref.newChatKey,
|
|
75
|
+
tooltipZIndex = _ref.tooltipZIndex,
|
|
76
|
+
externalPopoverAnchorRef = _ref.popoverAnchorRef,
|
|
77
|
+
layoutMode = _ref.layoutMode,
|
|
78
|
+
contextChip = _ref.contextChip;
|
|
79
|
+
var _useT = useT(),
|
|
80
|
+
t = _useT.t;
|
|
81
|
+
var editorRef = useRef(null);
|
|
82
|
+
var fileInputRef = useRef(null);
|
|
83
|
+
var chipsRowRef = useRef(null);
|
|
84
|
+
var toolbarRowRef = useRef(null);
|
|
85
|
+
var internalWrapperRef = useRef(null);
|
|
86
|
+
var wrapperRef = externalPopoverAnchorRef !== null && externalPopoverAnchorRef !== void 0 ? externalPopoverAnchorRef : internalWrapperRef;
|
|
87
|
+
var _useState = useState(false),
|
|
88
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
89
|
+
hasTypingPresence = _useState2[0],
|
|
90
|
+
setHasTypingPresence = _useState2[1];
|
|
91
|
+
var _useState3 = useState(0),
|
|
92
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
93
|
+
chipsRowHeight = _useState4[0],
|
|
94
|
+
setChipsRowHeight = _useState4[1];
|
|
95
|
+
var _useState5 = useState(MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX),
|
|
96
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
97
|
+
toolbarRowHeight = _useState6[0],
|
|
98
|
+
setToolbarRowHeight = _useState6[1];
|
|
99
|
+
var _useState7 = useState({
|
|
100
|
+
isOpen: false,
|
|
101
|
+
excludedFiles: [],
|
|
102
|
+
exceededFiles: [],
|
|
103
|
+
fileSizes: {}
|
|
104
|
+
}),
|
|
105
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
106
|
+
modalProps = _useState8[0],
|
|
107
|
+
setModalProps = _useState8[1];
|
|
108
|
+
var eventAmplitude = useEvent();
|
|
109
|
+
var _useGlobalContext = useGlobalContext(),
|
|
110
|
+
toggleWebSearch = _useGlobalContext.toggleWebSearch,
|
|
111
|
+
isWebSearchActive = _useGlobalContext.isWebSearchActive,
|
|
112
|
+
toggleDeepSearch = _useGlobalContext.toggleDeepSearch,
|
|
113
|
+
isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
|
|
114
|
+
agent = _useGlobalContext.agent,
|
|
115
|
+
initialDraft = _useGlobalContext.initialDraft,
|
|
116
|
+
deepLinkSendPendingRef = _useGlobalContext.deepLinkSendPendingRef;
|
|
117
|
+
var plusMenuZIndex = useMaiaTaskPanelZIndex(1300, 'overlay');
|
|
118
|
+
var initialDraftAppliedRef = useRef(false);
|
|
119
|
+
var _useMentionPopover = useMentionPopover({
|
|
120
|
+
editorRef: editorRef,
|
|
121
|
+
popoverAnchorRef: wrapperRef
|
|
122
|
+
}),
|
|
123
|
+
popoverOpen = _useMentionPopover.popoverOpen,
|
|
124
|
+
resetMentionOpenTracking = _useMentionPopover.resetMentionOpenTracking,
|
|
125
|
+
handleTrigger = _useMentionPopover.handleTrigger,
|
|
126
|
+
handlePopoverKeyDown = _useMentionPopover.handleKeyDown,
|
|
127
|
+
popoverNode = _useMentionPopover.popoverNode;
|
|
128
|
+
var _useState9 = useState(null),
|
|
129
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
130
|
+
plusMenuAnchor = _useState0[0],
|
|
131
|
+
setPlusMenuAnchor = _useState0[1];
|
|
132
|
+
var _useState1 = useState(false),
|
|
133
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
134
|
+
activeToolChipHovered = _useState10[0],
|
|
135
|
+
setActiveToolChipHovered = _useState10[1];
|
|
136
|
+
var _useState11 = useState(false),
|
|
137
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
138
|
+
toolChipExiting = _useState12[0],
|
|
139
|
+
setToolChipExiting = _useState12[1];
|
|
140
|
+
var _useState13 = useState(false),
|
|
141
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
142
|
+
isFileDragActive = _useState14[0],
|
|
143
|
+
setIsFileDragActive = _useState14[1];
|
|
144
|
+
var toolChipExitTimerRef = useRef(null);
|
|
145
|
+
var fileDragCounterRef = useRef(0);
|
|
146
|
+
var searchModeActiveRef = useRef({
|
|
147
|
+
web: false,
|
|
148
|
+
deep: false
|
|
149
|
+
});
|
|
150
|
+
var plusMenuOpen = Boolean(plusMenuAnchor);
|
|
151
|
+
|
|
152
|
+
// Inicializar las referencias como undefined para detectar el primer cambio correctamente
|
|
153
|
+
var previousAgentIdRef = useRef(undefined);
|
|
154
|
+
var previousChatIdRef = useRef(undefined);
|
|
155
|
+
var previousNewChatKeyRef = useRef(undefined);
|
|
156
|
+
var previousLayoutModeRef = useRef(undefined);
|
|
157
|
+
var analyticsAgentType = getChatToolsMenuAgentType(agent);
|
|
158
|
+
var analyticsCloneEntityPayload = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' ? {
|
|
159
|
+
entity: (_agent$entity = agent.entity) !== null && _agent$entity !== void 0 ? _agent$entity : null
|
|
160
|
+
} : {};
|
|
161
|
+
|
|
162
|
+
// Slash commands aplican a clones especialistas y al orchestrator global (este agrega los de sus subagentes).
|
|
163
|
+
// Los custom y los clone global/maiaker no los tienen habilitados.
|
|
164
|
+
var _useSlashCommands = useSlashCommands((agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'global' || (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'global' ? agent === null || agent === void 0 ? void 0 : agent.id : undefined),
|
|
165
|
+
slashCommands = _useSlashCommands.commands;
|
|
166
|
+
var _useState15 = useState(false),
|
|
167
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
168
|
+
showSlashDropdown = _useState16[0],
|
|
169
|
+
setShowSlashDropdown = _useState16[1];
|
|
170
|
+
var _useState17 = useState(''),
|
|
171
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
172
|
+
slashQuery = _useState18[0],
|
|
173
|
+
setSlashQuery = _useState18[1];
|
|
174
|
+
var slashMenuWasOpenRef = useRef(false);
|
|
175
|
+
var slashDropdownZIndex = useMaiaTaskPanelZIndex(1200, 'overlay');
|
|
176
|
+
var getCaretRect = useCaretPosition();
|
|
177
|
+
var _useState19 = useState({
|
|
178
|
+
bottom: 0,
|
|
179
|
+
left: 0,
|
|
180
|
+
maxHeight: SLASH_DROPDOWN_MAX_HEIGHT_PX
|
|
181
|
+
}),
|
|
182
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
183
|
+
slashDropdownPos = _useState20[0],
|
|
184
|
+
setSlashDropdownPos = _useState20[1];
|
|
185
|
+
var positionSlashDropdown = useCallback(function () {
|
|
186
|
+
var _wrapperRef$current, _caret$top, _caret$left;
|
|
187
|
+
var wrapperRect = (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.getBoundingClientRect();
|
|
188
|
+
var caret = getCaretRect('/');
|
|
189
|
+
var topSource = (_caret$top = caret === null || caret === void 0 ? void 0 : caret.top) !== null && _caret$top !== void 0 ? _caret$top : wrapperRect && wrapperRect.width > 0 ? wrapperRect.top : null;
|
|
190
|
+
var leftSource = (_caret$left = caret === null || caret === void 0 ? void 0 : caret.left) !== null && _caret$left !== void 0 ? _caret$left : wrapperRect && wrapperRect.width > 0 ? wrapperRect.left : null;
|
|
191
|
+
if (topSource == null || leftSource == null) return;
|
|
192
|
+
var viewportH = window.innerHeight;
|
|
193
|
+
var viewportW = window.innerWidth;
|
|
194
|
+
var left = Math.max(SLASH_DROPDOWN_VIEWPORT_PAD_PX, Math.min(viewportW - SLASH_DROPDOWN_WIDTH_PX - SLASH_DROPDOWN_VIEWPORT_PAD_PX, leftSource));
|
|
195
|
+
var availableHeightPx = topSource - SLASH_DROPDOWN_GAP_PX - SLASH_DROPDOWN_VIEWPORT_PAD_PX;
|
|
196
|
+
var maxHeight = Math.min(SLASH_DROPDOWN_MAX_HEIGHT_PX, Math.max(0, availableHeightPx));
|
|
197
|
+
setSlashDropdownPos({
|
|
198
|
+
left: left,
|
|
199
|
+
bottom: viewportH - topSource + SLASH_DROPDOWN_GAP_PX,
|
|
200
|
+
maxHeight: maxHeight
|
|
201
|
+
});
|
|
202
|
+
}, [wrapperRef, getCaretRect]);
|
|
203
|
+
useLayoutEffect(function () {
|
|
204
|
+
if (!showSlashDropdown) return undefined;
|
|
205
|
+
positionSlashDropdown();
|
|
206
|
+
var handler = function handler() {
|
|
207
|
+
return positionSlashDropdown();
|
|
208
|
+
};
|
|
209
|
+
window.addEventListener('scroll', handler, true);
|
|
210
|
+
window.addEventListener('resize', handler);
|
|
211
|
+
return function () {
|
|
212
|
+
window.removeEventListener('scroll', handler, true);
|
|
213
|
+
window.removeEventListener('resize', handler);
|
|
214
|
+
};
|
|
215
|
+
}, [showSlashDropdown, slashQuery, positionSlashDropdown]);
|
|
216
|
+
|
|
217
|
+
/** Tras elegir o quitar búsqueda web/profunda: volver al textarea (Popover/menu puede robar foco). */
|
|
218
|
+
var scheduleInputFocusAfterToolAction = function scheduleInputFocusAfterToolAction() {
|
|
219
|
+
if (disabled) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
requestAnimationFrame(function () {
|
|
223
|
+
window.setTimeout(function () {
|
|
224
|
+
var _editorRef$current;
|
|
225
|
+
(_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 || _editorRef$current.focus();
|
|
226
|
+
}, 0);
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
var closePlusMenu = function closePlusMenu() {
|
|
230
|
+
setPlusMenuAnchor(null);
|
|
231
|
+
scheduleInputFocusAfterToolAction();
|
|
232
|
+
};
|
|
233
|
+
var cancelPendingToolChipExit = function cancelPendingToolChipExit() {
|
|
234
|
+
if (toolChipExitTimerRef.current !== null) {
|
|
235
|
+
clearTimeout(toolChipExitTimerRef.current);
|
|
236
|
+
toolChipExitTimerRef.current = null;
|
|
237
|
+
}
|
|
238
|
+
setToolChipExiting(false);
|
|
239
|
+
};
|
|
240
|
+
var handlePlusButtonMouseDown = function handlePlusButtonMouseDown(e) {
|
|
241
|
+
// Evita que el botón robe el foco del input al abrir el menú.
|
|
242
|
+
e.preventDefault();
|
|
243
|
+
};
|
|
244
|
+
var handlePlusButtonClick = function handlePlusButtonClick(e) {
|
|
245
|
+
e.stopPropagation();
|
|
246
|
+
if (plusMenuAnchor) {
|
|
247
|
+
closePlusMenu();
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
setPlusMenuAnchor(e.currentTarget);
|
|
251
|
+
eventAmplitude(EVENTS.aiChatPlusOpen, _objectSpread({
|
|
252
|
+
agent_type: analyticsAgentType
|
|
253
|
+
}, analyticsCloneEntityPayload));
|
|
254
|
+
};
|
|
255
|
+
var handleMentionButtonClick = function handleMentionButtonClick(e) {
|
|
256
|
+
var _editorRef$current2;
|
|
257
|
+
e.stopPropagation();
|
|
258
|
+
if (disabled) return;
|
|
259
|
+
closePlusMenu();
|
|
260
|
+
(_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.insertMentionTrigger();
|
|
261
|
+
};
|
|
262
|
+
var handlePlusMenuAttach = function handlePlusMenuAttach() {
|
|
263
|
+
var _fileInputRef$current;
|
|
264
|
+
closePlusMenu();
|
|
265
|
+
eventAmplitude(EVENTS.aiChatTools, _objectSpread({
|
|
266
|
+
agent_type: analyticsAgentType,
|
|
267
|
+
option: 'files'
|
|
268
|
+
}, analyticsCloneEntityPayload));
|
|
269
|
+
if (attachments.length >= MAX_CHAT_INPUT_ATTACHMENTS) return;
|
|
270
|
+
(_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
|
|
271
|
+
};
|
|
272
|
+
var beginToolChipExit = function beginToolChipExit() {
|
|
273
|
+
if (toolChipExitTimerRef.current !== null) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
var wasWeb = isWebSearchActive;
|
|
277
|
+
var wasDeep = isDeepSearchActive;
|
|
278
|
+
if (!wasWeb && !wasDeep) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
setToolChipExiting(true);
|
|
282
|
+
toolChipExitTimerRef.current = setTimeout(function () {
|
|
283
|
+
toolChipExitTimerRef.current = null;
|
|
284
|
+
var _searchModeActiveRef$ = searchModeActiveRef.current,
|
|
285
|
+
web = _searchModeActiveRef$.web,
|
|
286
|
+
deep = _searchModeActiveRef$.deep;
|
|
287
|
+
if (wasWeb && web) {
|
|
288
|
+
toggleWebSearch();
|
|
289
|
+
} else if (wasDeep && deep) {
|
|
290
|
+
toggleDeepSearch();
|
|
291
|
+
}
|
|
292
|
+
setToolChipExiting(false);
|
|
293
|
+
scheduleInputFocusAfterToolAction();
|
|
294
|
+
}, TOOL_CHIP_EXIT_MS);
|
|
295
|
+
};
|
|
296
|
+
var handlePlusMenuWebSearch = function handlePlusMenuWebSearch() {
|
|
297
|
+
closePlusMenu();
|
|
298
|
+
if (isWebSearchActive) {
|
|
299
|
+
beginToolChipExit();
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
cancelPendingToolChipExit();
|
|
303
|
+
if (isDeepSearchActive) {
|
|
304
|
+
toggleDeepSearch();
|
|
305
|
+
}
|
|
306
|
+
toggleWebSearch();
|
|
307
|
+
eventAmplitude(EVENTS.aiChatTools, _objectSpread({
|
|
308
|
+
agent_type: analyticsAgentType,
|
|
309
|
+
option: 'search'
|
|
310
|
+
}, analyticsCloneEntityPayload));
|
|
311
|
+
scheduleInputFocusAfterToolAction();
|
|
312
|
+
};
|
|
313
|
+
var handlePlusMenuDeepSearch = function handlePlusMenuDeepSearch() {
|
|
314
|
+
closePlusMenu();
|
|
315
|
+
if (isDeepSearchActive) {
|
|
316
|
+
beginToolChipExit();
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
cancelPendingToolChipExit();
|
|
320
|
+
if (isWebSearchActive) {
|
|
321
|
+
toggleWebSearch();
|
|
322
|
+
}
|
|
323
|
+
toggleDeepSearch();
|
|
324
|
+
eventAmplitude(EVENTS.aiChatTools, _objectSpread({
|
|
325
|
+
agent_type: analyticsAgentType,
|
|
326
|
+
option: 'deep_search'
|
|
327
|
+
}, analyticsCloneEntityPayload));
|
|
328
|
+
scheduleInputFocusAfterToolAction();
|
|
329
|
+
};
|
|
330
|
+
var handlePlusMenuQuickActions = function handlePlusMenuQuickActions() {
|
|
331
|
+
var _editorRef$current3;
|
|
332
|
+
setPlusMenuAnchor(null);
|
|
333
|
+
if (disabled) return;
|
|
334
|
+
(_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.insertSlashTrigger();
|
|
335
|
+
};
|
|
336
|
+
useEffect(function () {
|
|
337
|
+
if (!disabled) {
|
|
338
|
+
var _editorRef$current4;
|
|
339
|
+
(_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.focus();
|
|
340
|
+
}
|
|
341
|
+
}, [disabled]);
|
|
342
|
+
useEffect(function () {
|
|
343
|
+
initialDraftAppliedRef.current = false;
|
|
344
|
+
}, [initialDraft]);
|
|
345
|
+
useEffect(function () {
|
|
346
|
+
var _editorRef$current5;
|
|
347
|
+
var draft = initialDraft === null || initialDraft === void 0 ? void 0 : initialDraft.trim();
|
|
348
|
+
if (!draft || initialDraftAppliedRef.current || disabled) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
initialDraftAppliedRef.current = true;
|
|
352
|
+
if (deepLinkSendPendingRef) {
|
|
353
|
+
deepLinkSendPendingRef.current = true;
|
|
354
|
+
}
|
|
355
|
+
(_editorRef$current5 = editorRef.current) === null || _editorRef$current5 === void 0 || _editorRef$current5.setPlainText(draft);
|
|
356
|
+
setHasTypingPresence(true);
|
|
357
|
+
if (!disabled) {
|
|
358
|
+
var _editorRef$current6;
|
|
359
|
+
(_editorRef$current6 = editorRef.current) === null || _editorRef$current6 === void 0 || _editorRef$current6.focus();
|
|
360
|
+
}
|
|
361
|
+
}, [initialDraft, disabled, deepLinkSendPendingRef]);
|
|
362
|
+
var sendDisabled = useMemo(function () {
|
|
363
|
+
return !hasTypingPresence && attachments.length === 0;
|
|
364
|
+
}, [hasTypingPresence, attachments.length]);
|
|
365
|
+
useEffect(function () {
|
|
366
|
+
searchModeActiveRef.current = {
|
|
367
|
+
web: isWebSearchActive,
|
|
368
|
+
deep: isDeepSearchActive
|
|
369
|
+
};
|
|
370
|
+
}, [isWebSearchActive, isDeepSearchActive]);
|
|
371
|
+
useEffect(function () {
|
|
372
|
+
return function () {
|
|
373
|
+
if (toolChipExitTimerRef.current !== null) {
|
|
374
|
+
clearTimeout(toolChipExitTimerRef.current);
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
}, []);
|
|
378
|
+
useEffect(function () {
|
|
379
|
+
if (!isWebSearchActive && !isDeepSearchActive) {
|
|
380
|
+
setActiveToolChipHovered(false);
|
|
381
|
+
}
|
|
382
|
+
}, [isWebSearchActive, isDeepSearchActive]);
|
|
383
|
+
|
|
384
|
+
// Auto-focus cuando cambia el agente o la conversación, o al montar el componente
|
|
385
|
+
useEffect(function () {
|
|
386
|
+
var agentChanged = previousAgentIdRef.current !== (agent === null || agent === void 0 ? void 0 : agent.id);
|
|
387
|
+
var previousChatId = previousChatIdRef.current;
|
|
388
|
+
var currentChatId = chatId;
|
|
389
|
+
var chatChanged = previousChatId !== currentChatId;
|
|
390
|
+
var changedFromNewChatToOldChat = (previousChatId === undefined || previousChatId === null) && currentChatId !== undefined && currentChatId !== null;
|
|
391
|
+
var newChatStarted = previousNewChatKeyRef.current !== newChatKey;
|
|
392
|
+
var isInitialMount = previousAgentIdRef.current === undefined && previousChatIdRef.current === undefined;
|
|
393
|
+
if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && !disabled) {
|
|
394
|
+
var delay = isInitialMount || changedFromNewChatToOldChat ? 200 : 100;
|
|
395
|
+
setTimeout(function () {
|
|
396
|
+
var _editorRef$current7;
|
|
397
|
+
if (!disabled) (_editorRef$current7 = editorRef.current) === null || _editorRef$current7 === void 0 || _editorRef$current7.focus();
|
|
398
|
+
}, delay);
|
|
399
|
+
}
|
|
400
|
+
previousAgentIdRef.current = agent === null || agent === void 0 ? void 0 : agent.id;
|
|
401
|
+
previousChatIdRef.current = chatId;
|
|
402
|
+
previousNewChatKeyRef.current = newChatKey;
|
|
403
|
+
}, [agent === null || agent === void 0 ? void 0 : agent.id, chatId, newChatKey, disabled]);
|
|
404
|
+
|
|
405
|
+
// Auto-focus cuando cambia la disposición del modal (sidebar / fullscreen / floating)
|
|
406
|
+
useEffect(function () {
|
|
407
|
+
if (!layoutMode) {
|
|
408
|
+
return undefined;
|
|
409
|
+
}
|
|
410
|
+
var previousLayoutMode = previousLayoutModeRef.current;
|
|
411
|
+
previousLayoutModeRef.current = layoutMode;
|
|
412
|
+
if (previousLayoutMode === undefined || previousLayoutMode === layoutMode || disabled) {
|
|
413
|
+
return undefined;
|
|
414
|
+
}
|
|
415
|
+
var timeoutId = window.setTimeout(function () {
|
|
416
|
+
if (!disabled) {
|
|
417
|
+
var _editorRef$current8;
|
|
418
|
+
(_editorRef$current8 = editorRef.current) === null || _editorRef$current8 === void 0 || _editorRef$current8.focus();
|
|
419
|
+
}
|
|
420
|
+
}, 200);
|
|
421
|
+
return function () {
|
|
422
|
+
return window.clearTimeout(timeoutId);
|
|
423
|
+
};
|
|
424
|
+
}, [layoutMode, disabled]);
|
|
425
|
+
|
|
426
|
+
// Appcues: notify that the input is visible for specialist agents (clone + project/client)
|
|
427
|
+
useEffect(function () {
|
|
428
|
+
var isSpecialistAgent = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' && ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project' || (agent === null || agent === void 0 ? void 0 : agent.entity) === 'client');
|
|
429
|
+
if (!wrapperRef.current || !isSpecialistAgent) return undefined;
|
|
430
|
+
var observer = new IntersectionObserver(function (_ref2) {
|
|
431
|
+
var _ref3 = _slicedToArray(_ref2, 1),
|
|
432
|
+
entry = _ref3[0];
|
|
433
|
+
if (entry.isIntersecting) {
|
|
434
|
+
trackAppcuesEvent(APPCUES_EVENTS.maiaContextMentionInit);
|
|
435
|
+
observer.disconnect();
|
|
436
|
+
}
|
|
437
|
+
}, {
|
|
438
|
+
threshold: 0.1
|
|
439
|
+
});
|
|
440
|
+
observer.observe(wrapperRef.current);
|
|
441
|
+
return function () {
|
|
442
|
+
return observer.disconnect();
|
|
443
|
+
};
|
|
444
|
+
}, [agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.type, agent === null || agent === void 0 ? void 0 : agent.entity]);
|
|
445
|
+
|
|
446
|
+
// Clear input when session changes (user switches to a different chat)
|
|
447
|
+
useEffect(function () {
|
|
448
|
+
var handleSessionChange = function handleSessionChange() {
|
|
449
|
+
var _editorRef$current9;
|
|
450
|
+
if (deepLinkSendPendingRef) {
|
|
451
|
+
deepLinkSendPendingRef.current = false;
|
|
452
|
+
}
|
|
453
|
+
(_editorRef$current9 = editorRef.current) === null || _editorRef$current9 === void 0 || _editorRef$current9.clear();
|
|
454
|
+
setHasTypingPresence(false);
|
|
455
|
+
setShowSlashDropdown(false);
|
|
456
|
+
setSlashQuery('');
|
|
457
|
+
resetMentionOpenTracking();
|
|
458
|
+
};
|
|
459
|
+
document.addEventListener('chat-session-changed', handleSessionChange);
|
|
460
|
+
return function () {
|
|
461
|
+
return document.removeEventListener('chat-session-changed', handleSessionChange);
|
|
462
|
+
};
|
|
463
|
+
}, [resetMentionOpenTracking, deepLinkSendPendingRef]);
|
|
464
|
+
|
|
465
|
+
// Mantener foco al seleccionar un contexto reciente (el click en el pill lo roba al input).
|
|
466
|
+
useEffect(function () {
|
|
467
|
+
var handleRefocus = function handleRefocus() {
|
|
468
|
+
if (disabled) return;
|
|
469
|
+
requestAnimationFrame(function () {
|
|
470
|
+
var _editorRef$current0;
|
|
471
|
+
(_editorRef$current0 = editorRef.current) === null || _editorRef$current0 === void 0 || _editorRef$current0.focus();
|
|
472
|
+
});
|
|
473
|
+
};
|
|
474
|
+
document.addEventListener('maia-input-refocus', handleRefocus);
|
|
475
|
+
return function () {
|
|
476
|
+
return document.removeEventListener('maia-input-refocus', handleRefocus);
|
|
477
|
+
};
|
|
478
|
+
}, [disabled]);
|
|
479
|
+
var handleSendMessage = useCallback(function () {
|
|
480
|
+
var _editorRef$current1, _state$text, _state$mentions, _editorRef$current10;
|
|
481
|
+
var state = (_editorRef$current1 = editorRef.current) === null || _editorRef$current1 === void 0 ? void 0 : _editorRef$current1.serialize();
|
|
482
|
+
var text = (_state$text = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text !== void 0 ? _state$text : '';
|
|
483
|
+
if (!text.trim() && !attachments.length) return;
|
|
484
|
+
var mentions = (_state$mentions = state === null || state === void 0 ? void 0 : state.mentions) !== null && _state$mentions !== void 0 ? _state$mentions : [];
|
|
485
|
+
onSendMessage(text, attachments, mentions);
|
|
486
|
+
(_editorRef$current10 = editorRef.current) === null || _editorRef$current10 === void 0 || _editorRef$current10.clear();
|
|
487
|
+
setHasTypingPresence(false);
|
|
488
|
+
setShowSlashDropdown(false);
|
|
489
|
+
setSlashQuery('');
|
|
490
|
+
resetMentionOpenTracking();
|
|
491
|
+
}, [attachments, onSendMessage, resetMentionOpenTracking]);
|
|
492
|
+
var handleSelectSlashCommand = useCallback(function (command) {
|
|
493
|
+
var _editorRef$current11, _state$text2, _editorRef$current13;
|
|
494
|
+
eventAmplitude(EVENTS.aiChatQuickActionSelect, {
|
|
495
|
+
type_quick_action: resolveQuickActionType(command),
|
|
496
|
+
origin_quick_action: 'slash_menu'
|
|
497
|
+
});
|
|
498
|
+
var state = (_editorRef$current11 = editorRef.current) === null || _editorRef$current11 === void 0 ? void 0 : _editorRef$current11.serialize();
|
|
499
|
+
var text = (_state$text2 = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text2 !== void 0 ? _state$text2 : '';
|
|
500
|
+
var triggerPart = "/".concat(slashQuery);
|
|
501
|
+
var beforeTrigger = text.endsWith(triggerPart) ? text.slice(0, -triggerPart.length) : text;
|
|
502
|
+
var isEmptyBeforeTrigger = beforeTrigger.trim() === '';
|
|
503
|
+
if (isEmptyBeforeTrigger) {
|
|
504
|
+
var _editorRef$current12;
|
|
505
|
+
onSendMessage(command.title, attachments, undefined, undefined, undefined, undefined, command.id);
|
|
506
|
+
(_editorRef$current12 = editorRef.current) === null || _editorRef$current12 === void 0 || _editorRef$current12.clear();
|
|
507
|
+
setHasTypingPresence(false);
|
|
508
|
+
setShowSlashDropdown(false);
|
|
509
|
+
setSlashQuery('');
|
|
510
|
+
slashMenuWasOpenRef.current = false;
|
|
511
|
+
resetMentionOpenTracking();
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
(_editorRef$current13 = editorRef.current) === null || _editorRef$current13 === void 0 || _editorRef$current13.insertSlashCommand({
|
|
515
|
+
id: command.id,
|
|
516
|
+
label: command.title
|
|
517
|
+
});
|
|
518
|
+
setShowSlashDropdown(false);
|
|
519
|
+
setSlashQuery('');
|
|
520
|
+
slashMenuWasOpenRef.current = false;
|
|
521
|
+
}, [attachments, onSendMessage, resetMentionOpenTracking, slashQuery, eventAmplitude]);
|
|
522
|
+
var handleCloseSlashDropdown = function handleCloseSlashDropdown() {
|
|
523
|
+
setShowSlashDropdown(false);
|
|
524
|
+
slashMenuWasOpenRef.current = false;
|
|
525
|
+
};
|
|
526
|
+
var handleEditorInput = useCallback(function (_ref4) {
|
|
527
|
+
var text = _ref4.text,
|
|
528
|
+
trigger = _ref4.trigger,
|
|
529
|
+
slashTrigger = _ref4.slashTrigger;
|
|
530
|
+
setHasTypingPresence(text.trim().length > 0);
|
|
531
|
+
onChange === null || onChange === void 0 || onChange();
|
|
532
|
+
handleTrigger(trigger);
|
|
533
|
+
if (slashTrigger !== null && slashTrigger !== void 0 && slashTrigger.active && slashCommands.length > 0) {
|
|
534
|
+
if (!slashMenuWasOpenRef.current) {
|
|
535
|
+
eventAmplitude(EVENTS.aiChatQuickActionOpen);
|
|
536
|
+
slashMenuWasOpenRef.current = true;
|
|
537
|
+
}
|
|
538
|
+
setShowSlashDropdown(true);
|
|
539
|
+
setSlashQuery(slashTrigger.query);
|
|
540
|
+
} else {
|
|
541
|
+
slashMenuWasOpenRef.current = false;
|
|
542
|
+
setShowSlashDropdown(false);
|
|
543
|
+
setSlashQuery('');
|
|
544
|
+
}
|
|
545
|
+
}, [onChange, handleTrigger, slashCommands, eventAmplitude]);
|
|
546
|
+
var handleKeyDown = useCallback(function (e) {
|
|
547
|
+
if (handlePopoverKeyDown(e)) return;
|
|
548
|
+
if (e.key === 'Enter' && !e.shiftKey && !popoverOpen) {
|
|
549
|
+
e.preventDefault();
|
|
550
|
+
if (!sendDisabled && !disabled) handleSendMessage();
|
|
551
|
+
}
|
|
552
|
+
}, [handlePopoverKeyDown, popoverOpen, sendDisabled, disabled, handleSendMessage]);
|
|
553
|
+
var addFiles = function addFiles(incoming) {
|
|
554
|
+
if (!incoming.length || disabled) return;
|
|
555
|
+
var exceededFiles = [];
|
|
556
|
+
var excludedFiles = [];
|
|
557
|
+
var fileSizes = {};
|
|
558
|
+
var filesInserted = attachments.length;
|
|
559
|
+
var isNewFormat = function isNewFormat(extension) {
|
|
560
|
+
return ['.png', '.jpg', '.jpeg', '.pdf'].includes(extension);
|
|
561
|
+
};
|
|
562
|
+
var isOldFormat = function isOldFormat(extension) {
|
|
563
|
+
return ['.txt', '.md', '.csv', '.doc', '.docx', '.xlsx', '.xls', '.ppt', '.pptx'].includes(extension);
|
|
564
|
+
};
|
|
565
|
+
var isAudioFormat = function isAudioFormat(extension) {
|
|
566
|
+
return ['.flac', '.m4a', '.mp3', '.mp4', '.oga', '.ogg', '.wav', '.webm'].includes(extension);
|
|
567
|
+
};
|
|
568
|
+
var exceedsMaxSize = function exceedsMaxSize(extension, size) {
|
|
569
|
+
return size > getMaxAttachmentSizeMb(extension) * 1024 * 1024;
|
|
570
|
+
};
|
|
571
|
+
incoming.forEach(function (file) {
|
|
572
|
+
var _fileNameParts$pop;
|
|
573
|
+
var excludedFile = false;
|
|
574
|
+
var fileNameParts = file.name.split('.');
|
|
575
|
+
var fileExtension = fileNameParts.length > 1 ? ".".concat((_fileNameParts$pop = fileNameParts.pop()) === null || _fileNameParts$pop === void 0 ? void 0 : _fileNameParts$pop.toLowerCase()) : '';
|
|
576
|
+
if (!(allowedFileTypes !== null && allowedFileTypes !== void 0 && allowedFileTypes.includes(fileExtension))) {
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
fileSizes[file.name] = file.size;
|
|
580
|
+
if (isNewFormat(fileExtension)) {
|
|
581
|
+
if (exceedsMaxSize(fileExtension, file.size)) {
|
|
582
|
+
exceededFiles.push(file.name);
|
|
583
|
+
excludedFile = true;
|
|
584
|
+
}
|
|
585
|
+
if (filesInserted + 1 > MAX_CHAT_INPUT_ATTACHMENTS) {
|
|
586
|
+
excludedFiles.push(file.name);
|
|
587
|
+
excludedFile = true;
|
|
588
|
+
}
|
|
589
|
+
} else if (isOldFormat(fileExtension)) {
|
|
590
|
+
if (exceedsMaxSize(fileExtension, file.size)) {
|
|
591
|
+
exceededFiles.push(file.name);
|
|
592
|
+
excludedFile = true;
|
|
593
|
+
}
|
|
594
|
+
if (filesInserted + 1 > MAX_CHAT_INPUT_ATTACHMENTS) {
|
|
595
|
+
excludedFiles.push(file.name);
|
|
596
|
+
excludedFile = true;
|
|
597
|
+
}
|
|
598
|
+
} else if (isAudioFormat(fileExtension)) {
|
|
599
|
+
if (exceedsMaxSize(fileExtension, file.size)) {
|
|
600
|
+
exceededFiles.push(file.name);
|
|
601
|
+
excludedFile = true;
|
|
602
|
+
}
|
|
603
|
+
if (filesInserted + 1 > MAX_CHAT_INPUT_ATTACHMENTS) {
|
|
604
|
+
excludedFiles.push(file.name);
|
|
605
|
+
excludedFile = true;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
if (!excludedFile) {
|
|
609
|
+
filesInserted += 1;
|
|
610
|
+
var typeFile = file.type || fileTypes[fileExtension];
|
|
611
|
+
var parsedFile = new File([file], file.name, {
|
|
612
|
+
type: typeFile
|
|
613
|
+
});
|
|
614
|
+
onFileAttach === null || onFileAttach === void 0 || onFileAttach(parsedFile);
|
|
615
|
+
}
|
|
616
|
+
});
|
|
617
|
+
if (excludedFiles.length || exceededFiles.length) {
|
|
618
|
+
setModalProps({
|
|
619
|
+
isOpen: true,
|
|
620
|
+
excludedFiles: excludedFiles,
|
|
621
|
+
exceededFiles: exceededFiles,
|
|
622
|
+
fileSizes: fileSizes
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
};
|
|
626
|
+
var handleFileSelect = function handleFileSelect(e) {
|
|
627
|
+
var files = e.target.files;
|
|
628
|
+
if (files) {
|
|
629
|
+
addFiles(Array.from(files));
|
|
630
|
+
}
|
|
631
|
+
if (fileInputRef.current) {
|
|
632
|
+
fileInputRef.current.value = '';
|
|
633
|
+
}
|
|
634
|
+
};
|
|
635
|
+
var resetFileDrag = function resetFileDrag() {
|
|
636
|
+
fileDragCounterRef.current = 0;
|
|
637
|
+
setIsFileDragActive(false);
|
|
638
|
+
};
|
|
639
|
+
var handleDragEnter = function handleDragEnter(e) {
|
|
640
|
+
if (!dataTransferHasFiles(e.dataTransfer)) return;
|
|
641
|
+
e.preventDefault();
|
|
642
|
+
e.stopPropagation();
|
|
643
|
+
if (disabled) return;
|
|
644
|
+
fileDragCounterRef.current += 1;
|
|
645
|
+
setIsFileDragActive(true);
|
|
646
|
+
};
|
|
647
|
+
var handleDragLeave = function handleDragLeave(e) {
|
|
648
|
+
if (!isFileDragActive && !dataTransferHasFiles(e.dataTransfer)) return;
|
|
649
|
+
e.preventDefault();
|
|
650
|
+
e.stopPropagation();
|
|
651
|
+
fileDragCounterRef.current = Math.max(0, fileDragCounterRef.current - 1);
|
|
652
|
+
if (fileDragCounterRef.current === 0) {
|
|
653
|
+
setIsFileDragActive(false);
|
|
654
|
+
}
|
|
655
|
+
};
|
|
656
|
+
var handleDragOver = function handleDragOver(e) {
|
|
657
|
+
if (!dataTransferHasFiles(e.dataTransfer)) return;
|
|
658
|
+
e.preventDefault();
|
|
659
|
+
e.stopPropagation();
|
|
660
|
+
if (disabled) return;
|
|
661
|
+
e.dataTransfer.dropEffect = 'copy';
|
|
662
|
+
};
|
|
663
|
+
var handleDrop = function handleDrop(e) {
|
|
664
|
+
if (!dataTransferHasFiles(e.dataTransfer)) {
|
|
665
|
+
resetFileDrag();
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
668
|
+
e.preventDefault();
|
|
669
|
+
e.stopPropagation();
|
|
670
|
+
resetFileDrag();
|
|
671
|
+
if (disabled) return;
|
|
672
|
+
addFiles(filesFromDataTransfer(e.dataTransfer));
|
|
673
|
+
};
|
|
674
|
+
var handlePasteFiles = function handlePasteFiles(files) {
|
|
675
|
+
addFiles(files);
|
|
676
|
+
};
|
|
677
|
+
var handleWrapperPaste = function handleWrapperPaste(e) {
|
|
678
|
+
var _wrapperRef$current2;
|
|
679
|
+
var editorEl = (_wrapperRef$current2 = wrapperRef.current) === null || _wrapperRef$current2 === void 0 ? void 0 : _wrapperRef$current2.querySelector('[contenteditable="true"]');
|
|
680
|
+
if (editorEl && editorEl.contains(e.target)) return;
|
|
681
|
+
var files = filesFromDataTransfer(e.clipboardData);
|
|
682
|
+
if (!files.length) return;
|
|
683
|
+
e.preventDefault();
|
|
684
|
+
addFiles(files);
|
|
685
|
+
};
|
|
686
|
+
var handleDeleteAttachment = function handleDeleteAttachment(fileId) {
|
|
687
|
+
onDeleteAttachment === null || onDeleteAttachment === void 0 || onDeleteAttachment(fileId);
|
|
688
|
+
};
|
|
689
|
+
var handleStopGeneration = function handleStopGeneration() {
|
|
690
|
+
eventAmplitude(EVENTS.aiChatStopResponse);
|
|
691
|
+
onStopGeneration === null || onStopGeneration === void 0 || onStopGeneration();
|
|
692
|
+
};
|
|
693
|
+
var showChipsRow = Boolean((contextChip === null || contextChip === void 0 || (_contextChip$items = contextChip.items) === null || _contextChip$items === void 0 ? void 0 : _contextChip$items.length) || attachments.length);
|
|
694
|
+
useLayoutEffect(function () {
|
|
695
|
+
var chipsEl = chipsRowRef.current;
|
|
696
|
+
var toolbarEl = toolbarRowRef.current;
|
|
697
|
+
var updateHeights = function updateHeights() {
|
|
698
|
+
var nextChips = showChipsRow && chipsEl ? Math.ceil(chipsEl.getBoundingClientRect().height) : 0;
|
|
699
|
+
var nextToolbar = toolbarEl ? Math.ceil(toolbarEl.getBoundingClientRect().height) : MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX;
|
|
700
|
+
setChipsRowHeight(function (prev) {
|
|
701
|
+
return prev === nextChips ? prev : nextChips;
|
|
702
|
+
});
|
|
703
|
+
setToolbarRowHeight(function (prev) {
|
|
704
|
+
return prev === nextToolbar ? prev : nextToolbar;
|
|
705
|
+
});
|
|
706
|
+
};
|
|
707
|
+
updateHeights();
|
|
708
|
+
var observer = new ResizeObserver(updateHeights);
|
|
709
|
+
if (showChipsRow && chipsEl) observer.observe(chipsEl);
|
|
710
|
+
if (toolbarEl) observer.observe(toolbarEl);
|
|
711
|
+
return function () {
|
|
712
|
+
return observer.disconnect();
|
|
713
|
+
};
|
|
714
|
+
}, [showChipsRow, contextChip === null || contextChip === void 0 || (_contextChip$items2 = contextChip.items) === null || _contextChip$items2 === void 0 ? void 0 : _contextChip$items2.length, attachments.length]);
|
|
715
|
+
var editorMaxHeight = useMemo(function () {
|
|
716
|
+
return getMaiaInputEditorMaxHeight({
|
|
717
|
+
chipsRowHeightPx: chipsRowHeight,
|
|
718
|
+
toolbarRowHeightPx: toolbarRowHeight
|
|
719
|
+
});
|
|
720
|
+
}, [chipsRowHeight, toolbarRowHeight]);
|
|
721
|
+
var toolbarIconColor = '#808080';
|
|
722
|
+
var plusMenuIconColor = MAIA_CHAT_INPUT_UI.menuIcon;
|
|
723
|
+
var isCustomAgent = (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom';
|
|
724
|
+
var hasCorAccess = Boolean(isCustomAgent && (agent === null || agent === void 0 || (_agent$connectors = agent.connectors) === null || _agent$connectors === void 0 ? void 0 : _agent$connectors.some(function (connector) {
|
|
725
|
+
return connector.group === 'COR' && connector.slugs.some(function (slug) {
|
|
726
|
+
return typeof slug === 'string' && slug.trim().length > 0;
|
|
727
|
+
});
|
|
728
|
+
})));
|
|
729
|
+
var agentModelName = isCustomAgent ? (agent === null || agent === void 0 || (_agent$model_display_ = agent.model_display_name) === null || _agent$model_display_ === void 0 ? void 0 : _agent$model_display_.trim()) || null : null;
|
|
730
|
+
var showCustomMetaIndicators = hasCorAccess || Boolean(agentModelName);
|
|
731
|
+
var showMentionButton = (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' || hasCorAccess;
|
|
732
|
+
var activeToolChipLeadingIcon;
|
|
733
|
+
if (activeToolChipHovered) {
|
|
734
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Cross, {
|
|
735
|
+
color: MAIA_CHAT_INPUT_UI.chipCloseIcon,
|
|
736
|
+
width: 18,
|
|
737
|
+
height: 18
|
|
738
|
+
});
|
|
739
|
+
} else if (isWebSearchActive) {
|
|
740
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(MaiaInputWebSearchIcon, {
|
|
741
|
+
color: plusMenuIconColor,
|
|
742
|
+
width: 18,
|
|
743
|
+
height: 18
|
|
744
|
+
});
|
|
745
|
+
} else {
|
|
746
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(MaiaInputDeepSearchIcon, {
|
|
747
|
+
color: plusMenuIconColor,
|
|
748
|
+
width: 18,
|
|
749
|
+
height: 18
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
753
|
+
children: [/*#__PURE__*/_jsxs(StyledMAIAInputWrapper, {
|
|
754
|
+
ref: wrapperRef,
|
|
755
|
+
disabled: false,
|
|
756
|
+
alignButtons: alignButtons,
|
|
757
|
+
hasAttachments: !!attachments.length,
|
|
758
|
+
$fileDragActive: isFileDragActive,
|
|
759
|
+
"data-appcues": "maia_chat_input",
|
|
760
|
+
"data-maia-streaming": isStreaming ? 'true' : 'false',
|
|
761
|
+
onPaste: handleWrapperPaste,
|
|
762
|
+
onDragEnter: handleDragEnter,
|
|
763
|
+
onDragLeave: handleDragLeave,
|
|
764
|
+
onDragOver: handleDragOver,
|
|
765
|
+
onDrop: handleDrop,
|
|
766
|
+
children: [showChipsRow && /*#__PURE__*/_jsxs(SCInputChipsRow, {
|
|
767
|
+
ref: chipsRowRef,
|
|
768
|
+
children: [contextChip !== null && contextChip !== void 0 && (_contextChip$items3 = contextChip.items) !== null && _contextChip$items3 !== void 0 && _contextChip$items3.length ? /*#__PURE__*/_jsx(Chip, {
|
|
769
|
+
items: contextChip.items,
|
|
770
|
+
type: contextChip.type,
|
|
771
|
+
leadingIcon: contextChip.leadingIcon,
|
|
772
|
+
tooltipZIndex: tooltipZIndex
|
|
773
|
+
}) : null, attachments.map(function (attachment, index) {
|
|
774
|
+
var _attachment$type;
|
|
775
|
+
var isImage = ((_attachment$type = attachment.type) === null || _attachment$type === void 0 ? void 0 : _attachment$type.startsWith('image/')) || /\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(attachment.name || '');
|
|
776
|
+
var chipIcon = isImage ? /*#__PURE__*/_jsx(MaiaInputAttachmentImageIcon, {
|
|
777
|
+
color: "#808080",
|
|
778
|
+
width: 12,
|
|
779
|
+
height: 12
|
|
780
|
+
}) : /*#__PURE__*/_jsx(MaiaInputAttachIcon, {
|
|
781
|
+
color: "#808080",
|
|
782
|
+
width: 13,
|
|
783
|
+
height: 13
|
|
784
|
+
});
|
|
785
|
+
return /*#__PURE__*/_jsx(Tooltip, {
|
|
786
|
+
title: attachment.name,
|
|
787
|
+
zIndex: tooltipZIndex,
|
|
788
|
+
children: /*#__PURE__*/_jsxs(SCMIAttachment, {
|
|
789
|
+
children: [/*#__PURE__*/_jsxs(SCMIAttachmentIcon, {
|
|
790
|
+
children: [/*#__PURE__*/_jsx(SCMIAttachmentFileIcon, {
|
|
791
|
+
children: chipIcon
|
|
792
|
+
}), /*#__PURE__*/_jsx(SCMIAttachmentDeleteIcon, {
|
|
793
|
+
type: "button",
|
|
794
|
+
"aria-label": t('chat.removeAttachmentAria', {
|
|
795
|
+
defaultValue: 'Quitar archivo'
|
|
796
|
+
}),
|
|
797
|
+
onClick: function onClick() {
|
|
798
|
+
return handleDeleteAttachment(attachment.id);
|
|
799
|
+
},
|
|
800
|
+
children: /*#__PURE__*/_jsx(Cross, {
|
|
801
|
+
color: "#666666",
|
|
802
|
+
width: 14,
|
|
803
|
+
height: 14
|
|
804
|
+
})
|
|
805
|
+
})]
|
|
806
|
+
}), /*#__PURE__*/_jsx(SCMIAttachmentName, {
|
|
807
|
+
children: attachment.name
|
|
808
|
+
})]
|
|
809
|
+
})
|
|
810
|
+
}, "".concat(attachment.id, "-").concat(index));
|
|
811
|
+
})]
|
|
812
|
+
}), /*#__PURE__*/_jsxs(StyledMAIAMainToolbarGrid, {
|
|
813
|
+
children: [/*#__PURE__*/_jsx(SCInputEditorCell, {
|
|
814
|
+
children: /*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
815
|
+
ref: editorRef,
|
|
816
|
+
disabled: disabled,
|
|
817
|
+
placeholder: placeholder,
|
|
818
|
+
maxHeight: editorMaxHeight,
|
|
819
|
+
onInput: handleEditorInput,
|
|
820
|
+
onKeyDown: handleKeyDown,
|
|
821
|
+
onFocus: onFocus,
|
|
822
|
+
onPasteFiles: handlePasteFiles
|
|
823
|
+
})
|
|
824
|
+
}), /*#__PURE__*/_jsxs(SCInputToolbarRow, {
|
|
825
|
+
ref: toolbarRowRef,
|
|
826
|
+
children: [/*#__PURE__*/_jsx(StyledMAIAPlusToolbarCell, {
|
|
827
|
+
children: /*#__PURE__*/_jsxs(PlusMenuToolsRow, {
|
|
828
|
+
children: [/*#__PURE__*/_jsx(PlusToggleButton, {
|
|
829
|
+
type: "button",
|
|
830
|
+
$menuOpen: plusMenuOpen,
|
|
831
|
+
onMouseDown: handlePlusButtonMouseDown,
|
|
832
|
+
onClick: handlePlusButtonClick,
|
|
833
|
+
"aria-label": t('chat.openPlusMenuAria'),
|
|
834
|
+
"aria-haspopup": "true",
|
|
835
|
+
"aria-expanded": plusMenuOpen,
|
|
836
|
+
children: /*#__PURE__*/_jsx(MaiaInputAddIcon, {
|
|
837
|
+
color: toolbarIconColor,
|
|
838
|
+
width: 18,
|
|
839
|
+
height: 18
|
|
840
|
+
})
|
|
841
|
+
}), showMentionButton && /*#__PURE__*/_jsx(PlusToggleButton, {
|
|
842
|
+
type: "button",
|
|
843
|
+
$menuOpen: false,
|
|
844
|
+
onClick: handleMentionButtonClick,
|
|
845
|
+
disabled: disabled,
|
|
846
|
+
"aria-label": t('chat.openMentionAria'),
|
|
847
|
+
children: /*#__PURE__*/_jsx(MaiaInputMentionIcon, {
|
|
848
|
+
color: toolbarIconColor,
|
|
849
|
+
width: 18,
|
|
850
|
+
height: 18
|
|
851
|
+
})
|
|
852
|
+
}), /*#__PURE__*/_jsx(Popover, {
|
|
853
|
+
open: plusMenuOpen,
|
|
854
|
+
anchorEl: plusMenuAnchor,
|
|
855
|
+
onClose: closePlusMenu,
|
|
856
|
+
disableAutoFocus: true,
|
|
857
|
+
disableEnforceFocus: true,
|
|
858
|
+
disableRestoreFocus: true,
|
|
859
|
+
anchorOrigin: {
|
|
860
|
+
vertical: 'top',
|
|
861
|
+
horizontal: 'left'
|
|
862
|
+
},
|
|
863
|
+
transformOrigin: {
|
|
864
|
+
vertical: 'bottom',
|
|
865
|
+
horizontal: 'left'
|
|
866
|
+
},
|
|
867
|
+
sx: {
|
|
868
|
+
zIndex: plusMenuZIndex
|
|
869
|
+
},
|
|
870
|
+
slotProps: {
|
|
871
|
+
paper: {
|
|
872
|
+
elevation: 0,
|
|
873
|
+
sx: {
|
|
874
|
+
overflow: 'visible',
|
|
875
|
+
borderRadius: '4px',
|
|
876
|
+
boxShadow: 'none',
|
|
877
|
+
backgroundColor: 'transparent',
|
|
878
|
+
marginTop: '-4px'
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
},
|
|
882
|
+
children: /*#__PURE__*/_jsx(PlusMenuPaper, {
|
|
883
|
+
children: /*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
|
|
884
|
+
children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
885
|
+
type: "button",
|
|
886
|
+
onClick: handlePlusMenuAttach,
|
|
887
|
+
children: [/*#__PURE__*/_jsx(MaiaInputAttachIcon, {
|
|
888
|
+
color: plusMenuIconColor,
|
|
889
|
+
width: 21,
|
|
890
|
+
height: 20
|
|
891
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
892
|
+
children: t('chat.plusMenuAttach')
|
|
893
|
+
})]
|
|
894
|
+
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
895
|
+
type: "button",
|
|
896
|
+
onClick: handlePlusMenuWebSearch,
|
|
897
|
+
children: [/*#__PURE__*/_jsx(MaiaInputWebSearchIcon, {
|
|
898
|
+
color: plusMenuIconColor,
|
|
899
|
+
width: 20,
|
|
900
|
+
height: 20
|
|
901
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
902
|
+
children: t('chat.searchWeb')
|
|
903
|
+
}), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
904
|
+
color: plusMenuIconColor,
|
|
905
|
+
width: 16,
|
|
906
|
+
height: 16
|
|
907
|
+
}) : null]
|
|
908
|
+
}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
909
|
+
type: "button",
|
|
910
|
+
onClick: handlePlusMenuDeepSearch,
|
|
911
|
+
children: [/*#__PURE__*/_jsx(MaiaInputDeepSearchIcon, {
|
|
912
|
+
color: plusMenuIconColor,
|
|
913
|
+
width: 20,
|
|
914
|
+
height: 20
|
|
915
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
916
|
+
children: t('chat.plusMenuDeepInvestigation')
|
|
917
|
+
}), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
918
|
+
color: plusMenuIconColor,
|
|
919
|
+
width: 16,
|
|
920
|
+
height: 16
|
|
921
|
+
}) : null]
|
|
922
|
+
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
923
|
+
type: "button",
|
|
924
|
+
onClick: handlePlusMenuQuickActions,
|
|
925
|
+
children: [/*#__PURE__*/_jsx(MaiaInputSlashIcon, {
|
|
926
|
+
color: plusMenuIconColor,
|
|
927
|
+
width: 20,
|
|
928
|
+
height: 20
|
|
929
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
930
|
+
children: t('chat.plusMenuQuickActions')
|
|
931
|
+
})]
|
|
932
|
+
})]
|
|
933
|
+
})
|
|
934
|
+
})
|
|
935
|
+
}), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
|
|
936
|
+
$hovered: activeToolChipHovered,
|
|
937
|
+
$exiting: toolChipExiting,
|
|
938
|
+
onMouseEnter: function onMouseEnter() {
|
|
939
|
+
return setActiveToolChipHovered(true);
|
|
940
|
+
},
|
|
941
|
+
onMouseLeave: function onMouseLeave() {
|
|
942
|
+
return setActiveToolChipHovered(false);
|
|
943
|
+
},
|
|
944
|
+
children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
|
|
945
|
+
type: "button",
|
|
946
|
+
$closeShown: activeToolChipHovered,
|
|
947
|
+
"aria-label": t('chat.removeActiveToolAria'),
|
|
948
|
+
onClick: function onClick(e) {
|
|
949
|
+
e.stopPropagation();
|
|
950
|
+
beginToolChipExit();
|
|
951
|
+
},
|
|
952
|
+
children: activeToolChipLeadingIcon
|
|
953
|
+
}), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
|
|
954
|
+
children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
|
|
955
|
+
})]
|
|
956
|
+
})]
|
|
957
|
+
})
|
|
958
|
+
}), /*#__PURE__*/_jsxs(StyledMAIASendToolbarCell, {
|
|
959
|
+
children: [showCustomMetaIndicators && /*#__PURE__*/_jsxs(SCInputMetaIndicators, {
|
|
960
|
+
children: [hasCorAccess && /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
961
|
+
title: t('chat.footer.corAccessTooltip')
|
|
962
|
+
}, tooltipZIndex != null ? {
|
|
963
|
+
zIndex: tooltipZIndex
|
|
964
|
+
} : {}), {}, {
|
|
965
|
+
children: /*#__PURE__*/_jsx(SCInputMetaIconButton, {
|
|
966
|
+
"aria-label": t('chat.footer.corAccessLabel'),
|
|
967
|
+
children: /*#__PURE__*/_jsx(CorAccessIcon, {
|
|
968
|
+
width: 15,
|
|
969
|
+
height: 14,
|
|
970
|
+
color: toolbarIconColor
|
|
971
|
+
})
|
|
972
|
+
})
|
|
973
|
+
})), agentModelName && /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
974
|
+
title: t('chipLlm.tooltip', {
|
|
975
|
+
model: agentModelName
|
|
976
|
+
})
|
|
977
|
+
}, tooltipZIndex != null ? {
|
|
978
|
+
zIndex: tooltipZIndex
|
|
979
|
+
} : {}), {}, {
|
|
980
|
+
children: /*#__PURE__*/_jsx(SCInputMetaIconButton, {
|
|
981
|
+
"aria-label": agentModelName,
|
|
982
|
+
children: /*#__PURE__*/_jsx(MaiaInputRobotIcon, {
|
|
983
|
+
width: 18,
|
|
984
|
+
height: 18,
|
|
985
|
+
color: toolbarIconColor
|
|
986
|
+
})
|
|
987
|
+
})
|
|
988
|
+
}))]
|
|
989
|
+
}), isWriting ? /*#__PURE__*/_jsx(Tooltip, {
|
|
990
|
+
title: t('chat.stop'),
|
|
991
|
+
zIndex: tooltipZIndex,
|
|
992
|
+
children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
|
|
993
|
+
disabled: false,
|
|
994
|
+
onClick: handleStopGeneration,
|
|
995
|
+
className: className,
|
|
996
|
+
children: /*#__PURE__*/_jsx(StyledMAIAStopIcon, {})
|
|
997
|
+
})
|
|
998
|
+
}) : /*#__PURE__*/_jsx(Tooltip, {
|
|
999
|
+
title: t('chat.send'),
|
|
1000
|
+
zIndex: tooltipZIndex,
|
|
1001
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
1002
|
+
style: {
|
|
1003
|
+
display: 'inline-flex',
|
|
1004
|
+
alignItems: 'center'
|
|
1005
|
+
},
|
|
1006
|
+
children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
|
|
1007
|
+
onClick: handleSendMessage,
|
|
1008
|
+
className: className,
|
|
1009
|
+
disabled: sendDisabled || disabled,
|
|
1010
|
+
hasValues: hasTypingPresence || attachments.length > 0,
|
|
1011
|
+
children: /*#__PURE__*/_jsx(MaiaInputSendIcon, {
|
|
1012
|
+
color: "#BFBFBF",
|
|
1013
|
+
width: 16,
|
|
1014
|
+
height: 16
|
|
1015
|
+
})
|
|
1016
|
+
})
|
|
1017
|
+
})
|
|
1018
|
+
})]
|
|
1019
|
+
})]
|
|
1020
|
+
})]
|
|
1021
|
+
}), /*#__PURE__*/_jsx("input", {
|
|
1022
|
+
ref: fileInputRef,
|
|
1023
|
+
type: "file",
|
|
1024
|
+
multiple: true,
|
|
1025
|
+
accept: ".txt,.md,.csv,.doc,.docx,.ppt,.pptx,.png,.jpg,.jpeg,.pdf,.xlsx,.xls,.flac,.m4a,.mp3,.mp4,.oga,.ogg,.wav,.webm",
|
|
1026
|
+
onChange: handleFileSelect,
|
|
1027
|
+
style: {
|
|
1028
|
+
display: 'none'
|
|
1029
|
+
}
|
|
1030
|
+
}), isFileDragActive && /*#__PURE__*/_jsx(StyledMAIADropOverlay, {
|
|
1031
|
+
children: t('chat.dropFilesHere')
|
|
1032
|
+
})]
|
|
1033
|
+
}), modalProps.isOpen && /*#__PURE__*/_jsx(ModalFileExceeds, {
|
|
1034
|
+
onClose: function onClose() {
|
|
1035
|
+
return setModalProps({
|
|
1036
|
+
isOpen: false,
|
|
1037
|
+
excludedFiles: [],
|
|
1038
|
+
exceededFiles: [],
|
|
1039
|
+
fileSizes: {}
|
|
1040
|
+
});
|
|
1041
|
+
},
|
|
1042
|
+
excludedFiles: modalProps.excludedFiles,
|
|
1043
|
+
exceededFiles: modalProps.exceededFiles,
|
|
1044
|
+
fileSizes: modalProps.fileSizes
|
|
1045
|
+
}), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body), showSlashDropdown && /*#__PURE__*/createPortal(/*#__PURE__*/_jsx(SlashCommandDropdown, {
|
|
1046
|
+
commands: slashCommands,
|
|
1047
|
+
query: slashQuery,
|
|
1048
|
+
onSelect: handleSelectSlashCommand,
|
|
1049
|
+
onClose: handleCloseSlashDropdown,
|
|
1050
|
+
bottom: slashDropdownPos.bottom,
|
|
1051
|
+
left: slashDropdownPos.left,
|
|
1052
|
+
maxHeight: slashDropdownPos.maxHeight,
|
|
1053
|
+
zIndex: slashDropdownZIndex,
|
|
1054
|
+
anchorRef: wrapperRef
|
|
1055
|
+
}), document.body)]
|
|
1056
|
+
});
|
|
1057
|
+
};
|
|
1058
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ0lucHV0Q2hpcHNSb3ciLCJTQ0lucHV0TWV0YUljb25CdXR0b24iLCJTQ0lucHV0TWV0YUluZGljYXRvcnMiLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlNDTUlBdHRhY2htZW50RmlsZUljb24iLCJTQ01JQXR0YWNobWVudEljb24iLCJTQ01JQXR0YWNobWVudE5hbWUiLCJTdHlsZWRNQUlBSW5wdXRXcmFwcGVyIiwiU3R5bGVkTUFJQVNlbmRCdXR0b24iLCJTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkIiwiU0NJbnB1dEVkaXRvckNlbGwiLCJTQ0lucHV0VG9vbGJhclJvdyIsIlN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGwiLCJTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsIiwiU3R5bGVkTUFJQVN0b3BCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEljb24iLCJTdHlsZWRNQUlBRHJvcE92ZXJsYXkiLCJnZXRNYWlhSW5wdXRFZGl0b3JNYXhIZWlnaHQiLCJNQUlBX0lOUFVUX1RPT0xCQVJfUk9XX0hFSUdIVF9QWCIsInVzZUdsb2JhbENvbnRleHQiLCJNb2RhbEZpbGVFeGNlZWRzIiwiU2xhc2hDb21tYW5kRHJvcGRvd24iLCJ1c2VTbGFzaENvbW1hbmRzIiwicmVzb2x2ZVF1aWNrQWN0aW9uVHlwZSIsInVzZVQiLCJNYWlhSW5wdXRBZGRJY29uIiwiTWFpYUlucHV0QXR0YWNoSWNvbiIsIk1haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24iLCJNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiIsIkNvckFjY2Vzc0ljb24iLCJNYWlhSW5wdXRNZW50aW9uSWNvbiIsIk1haWFJbnB1dFJvYm90SWNvbiIsIk1haWFJbnB1dFNlbmRJY29uIiwiTWFpYUlucHV0U2xhc2hJY29uIiwiTWFpYUlucHV0V2ViU2VhcmNoSWNvbiIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZSIsIk1BSUFfQ0hBVF9JTlBVVF9VSSIsImFsbG93ZWRGaWxlVHlwZXMiLCJmaWxlVHlwZXMiLCJnZXRNYXhBdHRhY2htZW50U2l6ZU1iIiwiTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMiLCJBUFBDVUVTX0VWRU5UUyIsInRyYWNrQXBwY3Vlc0V2ZW50IiwiQ2hpcCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZU1lbnRpb25Qb3BvdmVyIiwidXNlQ2FyZXRQb3NpdGlvbiIsImRhdGFUcmFuc2Zlckhhc0ZpbGVzIiwiZmlsZXNGcm9tRGF0YVRyYW5zZmVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiVE9PTF9DSElQX0VYSVRfTVMiLCJTTEFTSF9EUk9QRE9XTl9XSURUSF9QWCIsIlNMQVNIX0RST1BET1dOX01BWF9IRUlHSFRfUFgiLCJTTEFTSF9EUk9QRE9XTl9HQVBfUFgiLCJTTEFTSF9EUk9QRE9XTl9WSUVXUE9SVF9QQURfUFgiLCJNQUlBSW5wdXQiLCJfcmVmIiwiX2FnZW50JGVudGl0eSIsIl9jb250ZXh0Q2hpcCRpdGVtcyIsIl9jb250ZXh0Q2hpcCRpdGVtczIiLCJfYWdlbnQkY29ubmVjdG9ycyIsIl9hZ2VudCRtb2RlbF9kaXNwbGF5XyIsIl9jb250ZXh0Q2hpcCRpdGVtczMiLCJvblNlbmRNZXNzYWdlIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWQiLCJpc1N0cmVhbWluZyIsImlzV3JpdGluZyIsIm9uU3RvcEdlbmVyYXRpb24iLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwib25Gb2N1cyIsIl9yZWYkYWxpZ25CdXR0b25zIiwiYWxpZ25CdXR0b25zIiwib25GaWxlQXR0YWNoIiwib25EZWxldGVBdHRhY2htZW50IiwiX3JlZiRhdHRhY2htZW50cyIsImF0dGFjaG1lbnRzIiwiY2hhdElkIiwibmV3Q2hhdEtleSIsInRvb2x0aXBaSW5kZXgiLCJleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYiLCJwb3BvdmVyQW5jaG9yUmVmIiwibGF5b3V0TW9kZSIsImNvbnRleHRDaGlwIiwiX3VzZVQiLCJ0IiwiZWRpdG9yUmVmIiwiZmlsZUlucHV0UmVmIiwiY2hpcHNSb3dSZWYiLCJ0b29sYmFyUm93UmVmIiwiaW50ZXJuYWxXcmFwcGVyUmVmIiwid3JhcHBlclJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImhhc1R5cGluZ1ByZXNlbmNlIiwic2V0SGFzVHlwaW5nUHJlc2VuY2UiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImNoaXBzUm93SGVpZ2h0Iiwic2V0Q2hpcHNSb3dIZWlnaHQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInRvb2xiYXJSb3dIZWlnaHQiLCJzZXRUb29sYmFyUm93SGVpZ2h0IiwiX3VzZVN0YXRlNyIsImlzT3BlbiIsImV4Y2x1ZGVkRmlsZXMiLCJleGNlZWRlZEZpbGVzIiwiZmlsZVNpemVzIiwiX3VzZVN0YXRlOCIsIm1vZGFsUHJvcHMiLCJzZXRNb2RhbFByb3BzIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInRvZ2dsZVdlYlNlYXJjaCIsImlzV2ViU2VhcmNoQWN0aXZlIiwidG9nZ2xlRGVlcFNlYXJjaCIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiaW5pdGlhbERyYWZ0IiwiZGVlcExpbmtTZW5kUGVuZGluZ1JlZiIsInBsdXNNZW51WkluZGV4IiwiaW5pdGlhbERyYWZ0QXBwbGllZFJlZiIsIl91c2VNZW50aW9uUG9wb3ZlciIsInBvcG92ZXJPcGVuIiwicmVzZXRNZW50aW9uT3BlblRyYWNraW5nIiwiaGFuZGxlVHJpZ2dlciIsImhhbmRsZVBvcG92ZXJLZXlEb3duIiwiaGFuZGxlS2V5RG93biIsInBvcG92ZXJOb2RlIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJwbHVzTWVudUFuY2hvciIsInNldFBsdXNNZW51QW5jaG9yIiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwiYWN0aXZlVG9vbENoaXBIb3ZlcmVkIiwic2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInRvb2xDaGlwRXhpdGluZyIsInNldFRvb2xDaGlwRXhpdGluZyIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJpc0ZpbGVEcmFnQWN0aXZlIiwic2V0SXNGaWxlRHJhZ0FjdGl2ZSIsInRvb2xDaGlwRXhpdFRpbWVyUmVmIiwiZmlsZURyYWdDb3VudGVyUmVmIiwic2VhcmNoTW9kZUFjdGl2ZVJlZiIsIndlYiIsImRlZXAiLCJwbHVzTWVudU9wZW4iLCJCb29sZWFuIiwicHJldmlvdXNBZ2VudElkUmVmIiwidW5kZWZpbmVkIiwicHJldmlvdXNDaGF0SWRSZWYiLCJwcmV2aW91c05ld0NoYXRLZXlSZWYiLCJwcmV2aW91c0xheW91dE1vZGVSZWYiLCJhbmFseXRpY3NBZ2VudFR5cGUiLCJhbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQiLCJ0eXBlIiwiZW50aXR5IiwiX3VzZVNsYXNoQ29tbWFuZHMiLCJpZCIsInNsYXNoQ29tbWFuZHMiLCJjb21tYW5kcyIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJzaG93U2xhc2hEcm9wZG93biIsInNldFNob3dTbGFzaERyb3Bkb3duIiwiX3VzZVN0YXRlMTciLCJfdXNlU3RhdGUxOCIsInNsYXNoUXVlcnkiLCJzZXRTbGFzaFF1ZXJ5Iiwic2xhc2hNZW51V2FzT3BlblJlZiIsInNsYXNoRHJvcGRvd25aSW5kZXgiLCJnZXRDYXJldFJlY3QiLCJfdXNlU3RhdGUxOSIsImJvdHRvbSIsImxlZnQiLCJtYXhIZWlnaHQiLCJfdXNlU3RhdGUyMCIsInNsYXNoRHJvcGRvd25Qb3MiLCJzZXRTbGFzaERyb3Bkb3duUG9zIiwicG9zaXRpb25TbGFzaERyb3Bkb3duIiwiX3dyYXBwZXJSZWYkY3VycmVudCIsIl9jYXJldCR0b3AiLCJfY2FyZXQkbGVmdCIsIndyYXBwZXJSZWN0IiwiY3VycmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImNhcmV0IiwidG9wU291cmNlIiwidG9wIiwid2lkdGgiLCJsZWZ0U291cmNlIiwidmlld3BvcnRIIiwid2luZG93IiwiaW5uZXJIZWlnaHQiLCJ2aWV3cG9ydFciLCJpbm5lcldpZHRoIiwiTWF0aCIsIm1heCIsIm1pbiIsImF2YWlsYWJsZUhlaWdodFB4IiwiaGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsIl9lZGl0b3JSZWYkY3VycmVudCIsImZvY3VzIiwiY2xvc2VQbHVzTWVudSIsImNhbmNlbFBlbmRpbmdUb29sQ2hpcEV4aXQiLCJjbGVhclRpbWVvdXQiLCJoYW5kbGVQbHVzQnV0dG9uTW91c2VEb3duIiwiZSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUGx1c0J1dHRvbkNsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwiY3VycmVudFRhcmdldCIsImFpQ2hhdFBsdXNPcGVuIiwiX29iamVjdFNwcmVhZCIsImFnZW50X3R5cGUiLCJoYW5kbGVNZW50aW9uQnV0dG9uQ2xpY2siLCJfZWRpdG9yUmVmJGN1cnJlbnQyIiwiaW5zZXJ0TWVudGlvblRyaWdnZXIiLCJoYW5kbGVQbHVzTWVudUF0dGFjaCIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwibGVuZ3RoIiwiY2xpY2siLCJiZWdpblRvb2xDaGlwRXhpdCIsIndhc1dlYiIsIndhc0RlZXAiLCJfc2VhcmNoTW9kZUFjdGl2ZVJlZiQiLCJoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCIsImhhbmRsZVBsdXNNZW51RGVlcFNlYXJjaCIsImhhbmRsZVBsdXNNZW51UXVpY2tBY3Rpb25zIiwiX2VkaXRvclJlZiRjdXJyZW50MyIsImluc2VydFNsYXNoVHJpZ2dlciIsIl9lZGl0b3JSZWYkY3VycmVudDQiLCJfZWRpdG9yUmVmJGN1cnJlbnQ1IiwiZHJhZnQiLCJ0cmltIiwic2V0UGxhaW5UZXh0IiwiX2VkaXRvclJlZiRjdXJyZW50NiIsInNlbmREaXNhYmxlZCIsImFnZW50Q2hhbmdlZCIsInByZXZpb3VzQ2hhdElkIiwiY3VycmVudENoYXRJZCIsImNoYXRDaGFuZ2VkIiwiY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0IiwibmV3Q2hhdFN0YXJ0ZWQiLCJpc0luaXRpYWxNb3VudCIsImRlbGF5IiwiX2VkaXRvclJlZiRjdXJyZW50NyIsInByZXZpb3VzTGF5b3V0TW9kZSIsInRpbWVvdXRJZCIsIl9lZGl0b3JSZWYkY3VycmVudDgiLCJpc1NwZWNpYWxpc3RBZ2VudCIsIm9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJfcmVmMiIsIl9yZWYzIiwiZW50cnkiLCJpc0ludGVyc2VjdGluZyIsIm1haWFDb250ZXh0TWVudGlvbkluaXQiLCJkaXNjb25uZWN0IiwidGhyZXNob2xkIiwib2JzZXJ2ZSIsImhhbmRsZVNlc3Npb25DaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQ5IiwiY2xlYXIiLCJkb2N1bWVudCIsImhhbmRsZVJlZm9jdXMiLCJfZWRpdG9yUmVmJGN1cnJlbnQwIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQxIiwiX3N0YXRlJHRleHQiLCJfc3RhdGUkbWVudGlvbnMiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMCIsInN0YXRlIiwic2VyaWFsaXplIiwidGV4dCIsIm1lbnRpb25zIiwiaGFuZGxlU2VsZWN0U2xhc2hDb21tYW5kIiwiY29tbWFuZCIsIl9lZGl0b3JSZWYkY3VycmVudDExIiwiX3N0YXRlJHRleHQyIiwiX2VkaXRvclJlZiRjdXJyZW50MTMiLCJhaUNoYXRRdWlja0FjdGlvblNlbGVjdCIsInR5cGVfcXVpY2tfYWN0aW9uIiwib3JpZ2luX3F1aWNrX2FjdGlvbiIsInRyaWdnZXJQYXJ0IiwiY29uY2F0IiwiYmVmb3JlVHJpZ2dlciIsImVuZHNXaXRoIiwic2xpY2UiLCJpc0VtcHR5QmVmb3JlVHJpZ2dlciIsIl9lZGl0b3JSZWYkY3VycmVudDEyIiwidGl0bGUiLCJpbnNlcnRTbGFzaENvbW1hbmQiLCJsYWJlbCIsImhhbmRsZUNsb3NlU2xhc2hEcm9wZG93biIsImhhbmRsZUVkaXRvcklucHV0IiwiX3JlZjQiLCJ0cmlnZ2VyIiwic2xhc2hUcmlnZ2VyIiwiYWN0aXZlIiwiYWlDaGF0UXVpY2tBY3Rpb25PcGVuIiwicXVlcnkiLCJrZXkiLCJzaGlmdEtleSIsImFkZEZpbGVzIiwiaW5jb21pbmciLCJmaWxlc0luc2VydGVkIiwiaXNOZXdGb3JtYXQiLCJleHRlbnNpb24iLCJpbmNsdWRlcyIsImlzT2xkRm9ybWF0IiwiaXNBdWRpb0Zvcm1hdCIsImV4Y2VlZHNNYXhTaXplIiwic2l6ZSIsImZvckVhY2giLCJmaWxlIiwiX2ZpbGVOYW1lUGFydHMkcG9wIiwiZXhjbHVkZWRGaWxlIiwiZmlsZU5hbWVQYXJ0cyIsIm5hbWUiLCJzcGxpdCIsImZpbGVFeHRlbnNpb24iLCJwb3AiLCJ0b0xvd2VyQ2FzZSIsInB1c2giLCJ0eXBlRmlsZSIsInBhcnNlZEZpbGUiLCJGaWxlIiwiaGFuZGxlRmlsZVNlbGVjdCIsImZpbGVzIiwidGFyZ2V0IiwiQXJyYXkiLCJmcm9tIiwidmFsdWUiLCJyZXNldEZpbGVEcmFnIiwiaGFuZGxlRHJhZ0VudGVyIiwiZGF0YVRyYW5zZmVyIiwiaGFuZGxlRHJhZ0xlYXZlIiwiaGFuZGxlRHJhZ092ZXIiLCJkcm9wRWZmZWN0IiwiaGFuZGxlRHJvcCIsImhhbmRsZVBhc3RlRmlsZXMiLCJoYW5kbGVXcmFwcGVyUGFzdGUiLCJfd3JhcHBlclJlZiRjdXJyZW50MiIsImVkaXRvckVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5zIiwiY2xpcGJvYXJkRGF0YSIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImFpQ2hhdFN0b3BSZXNwb25zZSIsInNob3dDaGlwc1JvdyIsIml0ZW1zIiwiY2hpcHNFbCIsInRvb2xiYXJFbCIsInVwZGF0ZUhlaWdodHMiLCJuZXh0Q2hpcHMiLCJjZWlsIiwiaGVpZ2h0IiwibmV4dFRvb2xiYXIiLCJwcmV2IiwiUmVzaXplT2JzZXJ2ZXIiLCJlZGl0b3JNYXhIZWlnaHQiLCJjaGlwc1Jvd0hlaWdodFB4IiwidG9vbGJhclJvd0hlaWdodFB4IiwidG9vbGJhckljb25Db2xvciIsInBsdXNNZW51SWNvbkNvbG9yIiwibWVudUljb24iLCJpc0N1c3RvbUFnZW50IiwiaGFzQ29yQWNjZXNzIiwiY29ubmVjdG9ycyIsInNvbWUiLCJjb25uZWN0b3IiLCJncm91cCIsInNsdWdzIiwic2x1ZyIsImFnZW50TW9kZWxOYW1lIiwibW9kZWxfZGlzcGxheV9uYW1lIiwic2hvd0N1c3RvbU1ldGFJbmRpY2F0b3JzIiwic2hvd01lbnRpb25CdXR0b24iLCJhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uIiwiY29sb3IiLCJjaGlwQ2xvc2VJY29uIiwiY2hpbGRyZW4iLCJyZWYiLCJoYXNBdHRhY2htZW50cyIsIiRmaWxlRHJhZ0FjdGl2ZSIsIm9uUGFzdGUiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJvcCIsImxlYWRpbmdJY29uIiwibWFwIiwiYXR0YWNobWVudCIsImluZGV4IiwiX2F0dGFjaG1lbnQkdHlwZSIsImlzSW1hZ2UiLCJzdGFydHNXaXRoIiwidGVzdCIsImNoaXBJY29uIiwiekluZGV4IiwiZGVmYXVsdFZhbHVlIiwib25DbGljayIsIm9uSW5wdXQiLCJvbktleURvd24iLCJvblBhc3RlRmlsZXMiLCIkbWVudU9wZW4iLCJvbk1vdXNlRG93biIsIm9wZW4iLCJhbmNob3JFbCIsIm9uQ2xvc2UiLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJhbmNob3JPcmlnaW4iLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJzeCIsInNsb3RQcm9wcyIsInBhcGVyIiwiZWxldmF0aW9uIiwib3ZlcmZsb3ciLCJib3JkZXJSYWRpdXMiLCJib3hTaGFkb3ciLCJiYWNrZ3JvdW5kQ29sb3IiLCJtYXJnaW5Ub3AiLCIkaG92ZXJlZCIsIiRleGl0aW5nIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwiJGNsb3NlU2hvd24iLCJtb2RlbCIsInN0eWxlIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJoYXNWYWx1ZXMiLCJtdWx0aXBsZSIsImFjY2VwdCIsImJvZHkiLCJvblNlbGVjdCIsImFuY2hvclJlZiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL01BSUFJbnB1dC9NQUlBSW5wdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdm9pZCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1sb25lbHktaWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1kZXN0cnVjdHVyaW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7XG4gIENoYW5nZUV2ZW50LFxuICBDbGlwYm9hcmRFdmVudCxcbiAgRHJhZ0V2ZW50LFxuICBLZXlib2FyZEV2ZW50LFxuICBNb3VzZUV2ZW50LFxuICBSZWFjdE5vZGUsXG4gIE11dGFibGVSZWZPYmplY3QsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBQb3BvdmVyIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IENoZWNrIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hlY2snXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuXG5pbXBvcnQge1xuICBBY3RpdmVUb29sQ2hpcEljb25CdXR0b24sXG4gIEFjdGl2ZVRvb2xDaGlwTGFiZWwsXG4gIEFjdGl2ZVRvb2xDaGlwUm9vdCxcbiAgUGx1c01lbnVEaXZpZGVyLFxuICBQbHVzTWVudUlubmVyQ29sdW1uLFxuICBQbHVzTWVudUl0ZW1CdXR0b24sXG4gIFBsdXNNZW51SXRlbUxhYmVsLFxuICBQbHVzTWVudVBhcGVyLFxuICBQbHVzTWVudVRvb2xzUm93LFxuICBQbHVzVG9nZ2xlQnV0dG9uLFxuICBTQ0lucHV0Q2hpcHNSb3csXG4gIFNDSW5wdXRNZXRhSWNvbkJ1dHRvbixcbiAgU0NJbnB1dE1ldGFJbmRpY2F0b3JzLFxuICBTQ01JQXR0YWNobWVudCxcbiAgU0NNSUF0dGFjaG1lbnREZWxldGVJY29uLFxuICBTQ01JQXR0YWNobWVudEZpbGVJY29uLFxuICBTQ01JQXR0YWNobWVudEljb24sXG4gIFNDTUlBdHRhY2htZW50TmFtZSxcbiAgU3R5bGVkTUFJQUlucHV0V3JhcHBlcixcbiAgU3R5bGVkTUFJQVNlbmRCdXR0b24sXG4gIFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQsXG4gIFNDSW5wdXRFZGl0b3JDZWxsLFxuICBTQ0lucHV0VG9vbGJhclJvdyxcbiAgU3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbCxcbiAgU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbCxcbiAgU3R5bGVkTUFJQVN0b3BCdXR0b24sXG4gIFN0eWxlZE1BSUFTdG9wSWNvbixcbiAgU3R5bGVkTUFJQURyb3BPdmVybGF5LFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IGdldE1haWFJbnB1dEVkaXRvck1heEhlaWdodCwgTUFJQV9JTlBVVF9UT09MQkFSX1JPV19IRUlHSFRfUFggfSBmcm9tICcuL21haWFJbnB1dExheW91dCdcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgTW9kYWxGaWxlRXhjZWVkcyB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9Nb2RhbEZpbGVFeGNlZWRzJ1xuaW1wb3J0IHsgU2xhc2hDb21tYW5kRHJvcGRvd24gfSBmcm9tICcuLi9TbGFzaENvbW1hbmREcm9wZG93bidcbmltcG9ydCB7IHVzZVNsYXNoQ29tbWFuZHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbGFzaENvbW1hbmRzJ1xuaW1wb3J0IHsgcmVzb2x2ZVF1aWNrQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hvdXJzUGxhbm5lclF1aWNrQWN0aW9uVHlwZSdcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQWN0aW9uJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyBNYWlhSW5wdXRBZGRJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0QWRkSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dEF0dGFjaEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRBdHRhY2hJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0QXR0YWNobWVudEltYWdlSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dERlZXBTZWFyY2hJY29uJ1xuaW1wb3J0IHsgQ29yQWNjZXNzSWNvbiB9IGZyb20gJy4uL2ljb25zL0NvckFjY2Vzc0ljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRNZW50aW9uSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dE1lbnRpb25JY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0Um9ib3RJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0Um9ib3RJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0U2VuZEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRTZW5kSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dFNsYXNoSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dFNsYXNoSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dFdlYlNlYXJjaEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRXZWJTZWFyY2hJY29uJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgeyBNQUlBX0NIQVRfSU5QVVRfVUkgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvY29uZmlnJ1xuaW1wb3J0IHtcbiAgYWxsb3dlZEZpbGVUeXBlcyxcbiAgZmlsZVR5cGVzLFxuICBnZXRNYXhBdHRhY2htZW50U2l6ZU1iLFxuICBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyxcbn0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Zvcm1hdEV4dGVuc2lvbnMnXG5pbXBvcnQgeyBBUFBDVUVTX0VWRU5UUywgdHJhY2tBcHBjdWVzRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHBjdWVzJ1xuaW1wb3J0IHsgQ2hpcCB9IGZyb20gJy4uL0NoaXAnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbkVkaXRvciwgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUgfSBmcm9tICcuLi9Db250ZXh0TWVudGlvbkVkaXRvcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgdXNlTWVudGlvblBvcG92ZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IHVzZUNhcmV0UG9zaXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDYXJldFBvc2l0aW9uJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBkYXRhVHJhbnNmZXJIYXNGaWxlcywgZmlsZXNGcm9tRGF0YVRyYW5zZmVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY2hhdElucHV0RmlsZXMnXG5cbmNvbnN0IFRPT0xfQ0hJUF9FWElUX01TID0gMjIwXG5jb25zdCBTTEFTSF9EUk9QRE9XTl9XSURUSF9QWCA9IDM0MFxuY29uc3QgU0xBU0hfRFJPUERPV05fTUFYX0hFSUdIVF9QWCA9IDQxNlxuY29uc3QgU0xBU0hfRFJPUERPV05fR0FQX1BYID0gNFxuY29uc3QgU0xBU0hfRFJPUERPV05fVklFV1BPUlRfUEFEX1BYID0gOFxuXG50eXBlIEF0dGFjaG1lbnRGaWxlID0ge1xuICBmaWxlOiBGaWxlXG4gIG9yaWdpbmFsRmlsZT86IEZpbGVcbiAgaWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2l6ZTogbnVtYmVyXG4gIHR5cGU6IHN0cmluZ1xuICBpY29uPzogUmVhY3ROb2RlXG59XG5cbnR5cGUgTUFJQUlucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TZW5kTWVzc2FnZTogKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgIGZhcUlkPzogc3RyaW5nLFxuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgIHNjSWQ/OiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIG9uU3RvcEdlbmVyYXRpb24/OiAoKCkgPT4gdm9pZCkgfCBudWxsXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc1dyaXRpbmc/OiBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIG9uQ2hhbmdlPzogKCkgPT4gdm9pZFxuICBvbkZvY3VzPzogKCkgPT4gdm9pZFxuICBhbGlnbkJ1dHRvbnM/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG4gIG9uRmlsZUF0dGFjaD86IChmaWxlOiBGaWxlKSA9PiB2b2lkXG4gIG9uRGVsZXRlQXR0YWNobWVudD86IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgY2hhdElkPzogc3RyaW5nXG4gIG5ld0NoYXRLZXk/OiBudW1iZXJcbiAgdG9vbHRpcFpJbmRleD86IG51bWJlclxuICAvKiogRXhwb25lIGVsIHdyYXBwZXIgZGVsIGlucHV0IHBhcmEgYW5jbGFyIHBvcG92ZXJzIChtZW5jaW9uZXMsIHBpbiBkZSBjb250ZXh0bykuICovXG4gIHBvcG92ZXJBbmNob3JSZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD5cbiAgbGF5b3V0TW9kZT86ICdzaWRlYmFyJyB8ICdmdWxsc2NyZWVuJyB8ICdmbG9hdGluZydcbiAgLyoqIENoaXAgZGUgY29udGV4dG8gKHRhcmVhL3Byb3llY3RvL2NsaWVudGUvZ2xvYmFsKSBtb3N0cmFkbyBlbiBsYSB0b29sYmFyIGRlbCBpbnB1dC4gKi9cbiAgY29udGV4dENoaXA/OiB7XG4gICAgaXRlbXM6IHN0cmluZ1tdXG4gICAgdHlwZT86IENvbnRleHRFbnRpdHlUeXBlXG4gICAgbGVhZGluZ0ljb24/OiBSZWFjdE5vZGVcbiAgfSB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IE1BSUFJbnB1dCA9ICh7XG4gIG9uU2VuZE1lc3NhZ2UsXG4gIGNsYXNzTmFtZSxcbiAgZGlzYWJsZWQsXG4gIGlzU3RyZWFtaW5nLFxuICBpc1dyaXRpbmcsXG4gIG9uU3RvcEdlbmVyYXRpb24sXG4gIHBsYWNlaG9sZGVyLFxuICBvbkNoYW5nZSxcbiAgb25Gb2N1cyxcbiAgYWxpZ25CdXR0b25zID0gJ3ZlcnRpY2FsJyxcbiAgb25GaWxlQXR0YWNoLFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQsXG4gIGF0dGFjaG1lbnRzID0gW10sXG4gIGNoYXRJZCxcbiAgbmV3Q2hhdEtleSxcbiAgdG9vbHRpcFpJbmRleCxcbiAgcG9wb3ZlckFuY2hvclJlZjogZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmLFxuICBsYXlvdXRNb2RlLFxuICBjb250ZXh0Q2hpcCxcbn06IE1BSUFJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGVkaXRvclJlZiA9IHVzZVJlZjxDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZT4obnVsbClcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoaXBzUm93UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB0b29sYmFyUm93UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBpbnRlcm5hbFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHdyYXBwZXJSZWYgPSBleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYgPz8gaW50ZXJuYWxXcmFwcGVyUmVmXG4gIGNvbnN0IFtoYXNUeXBpbmdQcmVzZW5jZSwgc2V0SGFzVHlwaW5nUHJlc2VuY2VdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjaGlwc1Jvd0hlaWdodCwgc2V0Q2hpcHNSb3dIZWlnaHRdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3Rvb2xiYXJSb3dIZWlnaHQsIHNldFRvb2xiYXJSb3dIZWlnaHRdID0gdXNlU3RhdGUoTUFJQV9JTlBVVF9UT09MQkFSX1JPV19IRUlHSFRfUFgpXG4gIGNvbnN0IFttb2RhbFByb3BzLCBzZXRNb2RhbFByb3BzXSA9IHVzZVN0YXRlKHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV4Y2x1ZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGV4Y2VlZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGZpbGVTaXplczoge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPixcbiAgfSlcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHtcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlRGVlcFNlYXJjaCxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgYWdlbnQsXG4gICAgaW5pdGlhbERyYWZ0LFxuICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgcGx1c01lbnVaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEzMDAsICdvdmVybGF5JylcbiAgY29uc3QgaW5pdGlhbERyYWZ0QXBwbGllZFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCB7XG4gICAgcG9wb3Zlck9wZW4sXG4gICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nLFxuICAgIGhhbmRsZVRyaWdnZXIsXG4gICAgaGFuZGxlS2V5RG93bjogaGFuZGxlUG9wb3ZlcktleURvd24sXG4gICAgcG9wb3Zlck5vZGUsXG4gIH0gPSB1c2VNZW50aW9uUG9wb3Zlcih7XG4gICAgZWRpdG9yUmVmLFxuICAgIHBvcG92ZXJBbmNob3JSZWY6IHdyYXBwZXJSZWYsXG4gIH0pXG5cbiAgY29uc3QgW3BsdXNNZW51QW5jaG9yLCBzZXRQbHVzTWVudUFuY2hvcl0gPSB1c2VTdGF0ZTxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFthY3RpdmVUb29sQ2hpcEhvdmVyZWQsIHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Rvb2xDaGlwRXhpdGluZywgc2V0VG9vbENoaXBFeGl0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNGaWxlRHJhZ0FjdGl2ZSwgc2V0SXNGaWxlRHJhZ0FjdGl2ZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgdG9vbENoaXBFeGl0VGltZXJSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuICBjb25zdCBmaWxlRHJhZ0NvdW50ZXJSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc2VhcmNoTW9kZUFjdGl2ZVJlZiA9IHVzZVJlZih7IHdlYjogZmFsc2UsIGRlZXA6IGZhbHNlIH0pXG4gIGNvbnN0IHBsdXNNZW51T3BlbiA9IEJvb2xlYW4ocGx1c01lbnVBbmNob3IpXG5cbiAgLy8gSW5pY2lhbGl6YXIgbGFzIHJlZmVyZW5jaWFzIGNvbW8gdW5kZWZpbmVkIHBhcmEgZGV0ZWN0YXIgZWwgcHJpbWVyIGNhbWJpbyBjb3JyZWN0YW1lbnRlXG4gIGNvbnN0IHByZXZpb3VzQWdlbnRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTmV3Q2hhdEtleVJlZiA9IHVzZVJlZjxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNMYXlvdXRNb2RlUmVmID0gdXNlUmVmPE1BSUFJbnB1dFByb3BzWydsYXlvdXRNb2RlJ10+KHVuZGVmaW5lZClcblxuICBjb25zdCBhbmFseXRpY3NBZ2VudFR5cGUgPSBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlKGFnZW50KVxuICBjb25zdCBhbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IHsgZW50aXR5OiBhZ2VudC5lbnRpdHkgPz8gbnVsbCB9IDoge31cblxuICAvLyBTbGFzaCBjb21tYW5kcyBhcGxpY2FuIGEgY2xvbmVzIGVzcGVjaWFsaXN0YXMgeSBhbCBvcmNoZXN0cmF0b3IgZ2xvYmFsIChlc3RlIGFncmVnYSBsb3MgZGUgc3VzIHN1YmFnZW50ZXMpLlxuICAvLyBMb3MgY3VzdG9tIHkgbG9zIGNsb25lIGdsb2JhbC9tYWlha2VyIG5vIGxvcyB0aWVuZW4gaGFiaWxpdGFkb3MuXG4gIGNvbnN0IHsgY29tbWFuZHM6IHNsYXNoQ29tbWFuZHMgfSA9IHVzZVNsYXNoQ29tbWFuZHMoXG4gICAgKGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJykgfHxcbiAgICAgIChhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyAmJiBhZ2VudD8uZW50aXR5ICE9PSAnZ2xvYmFsJylcbiAgICAgID8gYWdlbnQ/LmlkXG4gICAgICA6IHVuZGVmaW5lZFxuICApXG4gIGNvbnN0IFtzaG93U2xhc2hEcm9wZG93biwgc2V0U2hvd1NsYXNoRHJvcGRvd25dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzbGFzaFF1ZXJ5LCBzZXRTbGFzaFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBzbGFzaE1lbnVXYXNPcGVuUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzbGFzaERyb3Bkb3duWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMjAwLCAnb3ZlcmxheScpXG4gIGNvbnN0IGdldENhcmV0UmVjdCA9IHVzZUNhcmV0UG9zaXRpb24oKVxuICBjb25zdCBbc2xhc2hEcm9wZG93blBvcywgc2V0U2xhc2hEcm9wZG93blBvc10gPSB1c2VTdGF0ZSh7XG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgbWF4SGVpZ2h0OiBTTEFTSF9EUk9QRE9XTl9NQVhfSEVJR0hUX1BYLFxuICB9KVxuXG4gIGNvbnN0IHBvc2l0aW9uU2xhc2hEcm9wZG93biA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyUmVjdCA9IHdyYXBwZXJSZWYuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBjYXJldCA9IGdldENhcmV0UmVjdCgnLycpXG4gICAgY29uc3QgdG9wU291cmNlID0gY2FyZXQ/LnRvcCA/PyAod3JhcHBlclJlY3QgJiYgd3JhcHBlclJlY3Qud2lkdGggPiAwID8gd3JhcHBlclJlY3QudG9wIDogbnVsbClcbiAgICBjb25zdCBsZWZ0U291cmNlID0gY2FyZXQ/LmxlZnQgPz8gKHdyYXBwZXJSZWN0ICYmIHdyYXBwZXJSZWN0LndpZHRoID4gMCA/IHdyYXBwZXJSZWN0LmxlZnQgOiBudWxsKVxuICAgIGlmICh0b3BTb3VyY2UgPT0gbnVsbCB8fCBsZWZ0U291cmNlID09IG51bGwpIHJldHVyblxuXG4gICAgY29uc3Qgdmlld3BvcnRIID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoXG4gICAgICBTTEFTSF9EUk9QRE9XTl9WSUVXUE9SVF9QQURfUFgsXG4gICAgICBNYXRoLm1pbih2aWV3cG9ydFcgLSBTTEFTSF9EUk9QRE9XTl9XSURUSF9QWCAtIFNMQVNIX0RST1BET1dOX1ZJRVdQT1JUX1BBRF9QWCwgbGVmdFNvdXJjZSlcbiAgICApXG4gICAgY29uc3QgYXZhaWxhYmxlSGVpZ2h0UHggPSB0b3BTb3VyY2UgLSBTTEFTSF9EUk9QRE9XTl9HQVBfUFggLSBTTEFTSF9EUk9QRE9XTl9WSUVXUE9SVF9QQURfUFhcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLm1pbihTTEFTSF9EUk9QRE9XTl9NQVhfSEVJR0hUX1BYLCBNYXRoLm1heCgwLCBhdmFpbGFibGVIZWlnaHRQeCkpXG5cbiAgICBzZXRTbGFzaERyb3Bkb3duUG9zKHtcbiAgICAgIGxlZnQsXG4gICAgICBib3R0b206IHZpZXdwb3J0SCAtIHRvcFNvdXJjZSArIFNMQVNIX0RST1BET1dOX0dBUF9QWCxcbiAgICAgIG1heEhlaWdodCxcbiAgICB9KVxuICB9LCBbd3JhcHBlclJlZiwgZ2V0Q2FyZXRSZWN0XSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvd1NsYXNoRHJvcGRvd24pIHJldHVybiB1bmRlZmluZWRcblxuICAgIHBvc2l0aW9uU2xhc2hEcm9wZG93bigpXG5cbiAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4gcG9zaXRpb25TbGFzaERyb3Bkb3duKClcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlcilcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3Nob3dTbGFzaERyb3Bkb3duLCBzbGFzaFF1ZXJ5LCBwb3NpdGlvblNsYXNoRHJvcGRvd25dKVxuXG4gIC8qKiBUcmFzIGVsZWdpciBvIHF1aXRhciBiw7pzcXVlZGEgd2ViL3Byb2Z1bmRhOiB2b2x2ZXIgYWwgdGV4dGFyZWEgKFBvcG92ZXIvbWVudSBwdWVkZSByb2JhciBmb2NvKS4gKi9cbiAgY29uc3Qgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uID0gKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCAwKVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjbG9zZVBsdXNNZW51ID0gKCkgPT4ge1xuICAgIHNldFBsdXNNZW51QW5jaG9yKG51bGwpXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGNhbmNlbFBlbmRpbmdUb29sQ2hpcEV4aXQgPSAoKSA9PiB7XG4gICAgaWYgKHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50KVxuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c0J1dHRvbk1vdXNlRG93biA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIC8vIEV2aXRhIHF1ZSBlbCBib3TDs24gcm9iZSBlbCBmb2NvIGRlbCBpbnB1dCBhbCBhYnJpciBlbCBtZW7Dui5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNCdXR0b25DbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAocGx1c01lbnVBbmNob3IpIHtcbiAgICAgIGNsb3NlUGx1c01lbnUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFBsdXNNZW51QW5jaG9yKGUuY3VycmVudFRhcmdldClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UGx1c09wZW4sIHsgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLCAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU1lbnRpb25CdXR0b25DbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVyblxuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRNZW50aW9uVHJpZ2dlcigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudUF0dGFjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2ZpbGVzJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHJldHVyblxuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBiZWdpblRvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHdhc1dlYiA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgY29uc3Qgd2FzRGVlcCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlmICghd2FzV2ViICYmICF3YXNEZWVwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKHRydWUpXG4gICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGNvbnN0IHsgd2ViLCBkZWVwIH0gPSBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnRcbiAgICAgIGlmICh3YXNXZWIgJiYgd2ViKSB7XG4gICAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICB9IGVsc2UgaWYgKHdhc0RlZXAgJiYgZGVlcCkge1xuICAgICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICAgIH1cbiAgICAgIHNldFRvb2xDaGlwRXhpdGluZyhmYWxzZSlcbiAgICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gICAgfSwgVE9PTF9DSElQX0VYSVRfTVMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ3NlYXJjaCcsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoID0gKCkgPT4ge1xuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGlmIChpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZURlZXBTZWFyY2goKVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywge1xuICAgICAgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLFxuICAgICAgb3B0aW9uOiAnZGVlcF9zZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNNZW51UXVpY2tBY3Rpb25zID0gKCkgPT4ge1xuICAgIHNldFBsdXNNZW51QW5jaG9yKG51bGwpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0U2xhc2hUcmlnZ2VyKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbaW5pdGlhbERyYWZ0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGRyYWZ0ID0gaW5pdGlhbERyYWZ0Py50cmltKClcbiAgICBpZiAoIWRyYWZ0IHx8IGluaXRpYWxEcmFmdEFwcGxpZWRSZWYuY3VycmVudCB8fCBkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGluaXRpYWxEcmFmdEFwcGxpZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICBpZiAoZGVlcExpbmtTZW5kUGVuZGluZ1JlZikge1xuICAgICAgZGVlcExpbmtTZW5kUGVuZGluZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBlZGl0b3JSZWYuY3VycmVudD8uc2V0UGxhaW5UZXh0KGRyYWZ0KVxuICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKHRydWUpXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsRHJhZnQsIGRpc2FibGVkLCBkZWVwTGlua1NlbmRQZW5kaW5nUmVmXSlcblxuICBjb25zdCBzZW5kRGlzYWJsZWQgPSB1c2VNZW1vKFxuICAgICgpID0+ICFoYXNUeXBpbmdQcmVzZW5jZSAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAsXG4gICAgW2hhc1R5cGluZ1ByZXNlbmNlLCBhdHRhY2htZW50cy5sZW5ndGhdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlYXJjaE1vZGVBY3RpdmVSZWYuY3VycmVudCA9IHsgd2ViOiBpc1dlYlNlYXJjaEFjdGl2ZSwgZGVlcDogaXNEZWVwU2VhcmNoQWN0aXZlIH1cbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzV2ViU2VhcmNoQWN0aXZlICYmICFpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZChmYWxzZSlcbiAgICB9XG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICAvLyBBdXRvLWZvY3VzIGN1YW5kbyBjYW1iaWEgZWwgYWdlbnRlIG8gbGEgY29udmVyc2FjacOzbiwgbyBhbCBtb250YXIgZWwgY29tcG9uZW50ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50Q2hhbmdlZCA9IHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ICE9PSBhZ2VudD8uaWRcbiAgICBjb25zdCBwcmV2aW91c0NoYXRJZCA9IHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBjdXJyZW50Q2hhdElkID0gY2hhdElkXG4gICAgY29uc3QgY2hhdENoYW5nZWQgPSBwcmV2aW91c0NoYXRJZCAhPT0gY3VycmVudENoYXRJZFxuICAgIGNvbnN0IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA9XG4gICAgICAocHJldmlvdXNDaGF0SWQgPT09IHVuZGVmaW5lZCB8fCBwcmV2aW91c0NoYXRJZCA9PT0gbnVsbCkgJiYgY3VycmVudENoYXRJZCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRDaGF0SWQgIT09IG51bGxcbiAgICBjb25zdCBuZXdDaGF0U3RhcnRlZCA9IHByZXZpb3VzTmV3Q2hhdEtleVJlZi5jdXJyZW50ICE9PSBuZXdDaGF0S2V5XG4gICAgY29uc3QgaXNJbml0aWFsTW91bnQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9PT0gdW5kZWZpbmVkICYmIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZFxuXG4gICAgaWYgKChhZ2VudENoYW5nZWQgfHwgY2hhdENoYW5nZWQgfHwgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0IHx8IG5ld0NoYXRTdGFydGVkIHx8IGlzSW5pdGlhbE1vdW50KSAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gaXNJbml0aWFsTW91bnQgfHwgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0ID8gMjAwIDogMTAwXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCFkaXNhYmxlZCkgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICAgIH0sIGRlbGF5KVxuICAgIH1cblxuICAgIHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ID0gYWdlbnQ/LmlkXG4gICAgcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudCA9IGNoYXRJZFxuICAgIHByZXZpb3VzTmV3Q2hhdEtleVJlZi5jdXJyZW50ID0gbmV3Q2hhdEtleVxuICB9LCBbYWdlbnQ/LmlkLCBjaGF0SWQsIG5ld0NoYXRLZXksIGRpc2FibGVkXSlcblxuICAvLyBBdXRvLWZvY3VzIGN1YW5kbyBjYW1iaWEgbGEgZGlzcG9zaWNpw7NuIGRlbCBtb2RhbCAoc2lkZWJhciAvIGZ1bGxzY3JlZW4gLyBmbG9hdGluZylcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxheW91dE1vZGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c0xheW91dE1vZGUgPSBwcmV2aW91c0xheW91dE1vZGVSZWYuY3VycmVudFxuICAgIHByZXZpb3VzTGF5b3V0TW9kZVJlZi5jdXJyZW50ID0gbGF5b3V0TW9kZVxuXG4gICAgaWYgKHByZXZpb3VzTGF5b3V0TW9kZSA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzTGF5b3V0TW9kZSA9PT0gbGF5b3V0TW9kZSB8fCBkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICAgIH1cbiAgICB9LCAyMDApXG5cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gIH0sIFtsYXlvdXRNb2RlLCBkaXNhYmxlZF0pXG5cbiAgLy8gQXBwY3Vlczogbm90aWZ5IHRoYXQgdGhlIGlucHV0IGlzIHZpc2libGUgZm9yIHNwZWNpYWxpc3QgYWdlbnRzIChjbG9uZSArIHByb2plY3QvY2xpZW50KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGlzU3BlY2lhbGlzdEFnZW50ID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgKGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0JyB8fCBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50JylcbiAgICBpZiAoIXdyYXBwZXJSZWYuY3VycmVudCB8fCAhaXNTcGVjaWFsaXN0QWdlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgKFtlbnRyeV0pID0+IHtcbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgdHJhY2tBcHBjdWVzRXZlbnQoQVBQQ1VFU19FVkVOVFMubWFpYUNvbnRleHRNZW50aW9uSW5pdClcbiAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgdGhyZXNob2xkOiAwLjEgfVxuICAgIClcblxuICAgIG9ic2VydmVyLm9ic2VydmUod3JhcHBlclJlZi5jdXJyZW50KVxuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KClcbiAgfSwgW2FnZW50Py5pZCwgYWdlbnQ/LnR5cGUsIGFnZW50Py5lbnRpdHldKVxuXG4gIC8vIENsZWFyIGlucHV0IHdoZW4gc2Vzc2lvbiBjaGFuZ2VzICh1c2VyIHN3aXRjaGVzIHRvIGEgZGlmZmVyZW50IGNoYXQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2Vzc2lvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmIChkZWVwTGlua1NlbmRQZW5kaW5nUmVmKSB7XG4gICAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8uY2xlYXIoKVxuICAgICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UoZmFsc2UpXG4gICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICAgIHNldFNsYXNoUXVlcnkoJycpXG4gICAgICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcoKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSlcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICB9LCBbcmVzZXRNZW50aW9uT3BlblRyYWNraW5nLCBkZWVwTGlua1NlbmRQZW5kaW5nUmVmXSlcblxuICAvLyBNYW50ZW5lciBmb2NvIGFsIHNlbGVjY2lvbmFyIHVuIGNvbnRleHRvIHJlY2llbnRlIChlbCBjbGljayBlbiBlbCBwaWxsIGxvIHJvYmEgYWwgaW5wdXQpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlZm9jdXMgPSAoKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHJldHVyblxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1pbnB1dC1yZWZvY3VzJywgaGFuZGxlUmVmb2N1cylcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1pbnB1dC1yZWZvY3VzJywgaGFuZGxlUmVmb2N1cylcbiAgfSwgW2Rpc2FibGVkXSlcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGVkaXRvclJlZi5jdXJyZW50Py5zZXJpYWxpemUoKVxuICAgIGNvbnN0IHRleHQgPSBzdGF0ZT8udGV4dCA/PyAnJ1xuICAgIGlmICghdGV4dC50cmltKCkgJiYgIWF0dGFjaG1lbnRzLmxlbmd0aCkgcmV0dXJuXG4gICAgY29uc3QgbWVudGlvbnMgPSBzdGF0ZT8ubWVudGlvbnMgPz8gW11cbiAgICBvblNlbmRNZXNzYWdlKHRleHQsIGF0dGFjaG1lbnRzLCBtZW50aW9ucylcbiAgICBlZGl0b3JSZWYuY3VycmVudD8uY2xlYXIoKVxuICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgIHNldFNsYXNoUXVlcnkoJycpXG4gICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgfSwgW2F0dGFjaG1lbnRzLCBvblNlbmRNZXNzYWdlLCByZXNldE1lbnRpb25PcGVuVHJhY2tpbmddKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFNsYXNoQ29tbWFuZCA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBBY3Rpb24pID0+IHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRRdWlja0FjdGlvblNlbGVjdCwge1xuICAgICAgICB0eXBlX3F1aWNrX2FjdGlvbjogcmVzb2x2ZVF1aWNrQWN0aW9uVHlwZShjb21tYW5kKSxcbiAgICAgICAgb3JpZ2luX3F1aWNrX2FjdGlvbjogJ3NsYXNoX21lbnUnLFxuICAgICAgfSlcblxuICAgICAgY29uc3Qgc3RhdGUgPSBlZGl0b3JSZWYuY3VycmVudD8uc2VyaWFsaXplKClcbiAgICAgIGNvbnN0IHRleHQgPSBzdGF0ZT8udGV4dCA/PyAnJ1xuICAgICAgY29uc3QgdHJpZ2dlclBhcnQgPSBgLyR7c2xhc2hRdWVyeX1gXG4gICAgICBjb25zdCBiZWZvcmVUcmlnZ2VyID0gdGV4dC5lbmRzV2l0aCh0cmlnZ2VyUGFydCkgPyB0ZXh0LnNsaWNlKDAsIC10cmlnZ2VyUGFydC5sZW5ndGgpIDogdGV4dFxuICAgICAgY29uc3QgaXNFbXB0eUJlZm9yZVRyaWdnZXIgPSBiZWZvcmVUcmlnZ2VyLnRyaW0oKSA9PT0gJydcblxuICAgICAgaWYgKGlzRW1wdHlCZWZvcmVUcmlnZ2VyKSB7XG4gICAgICAgIG9uU2VuZE1lc3NhZ2UoY29tbWFuZC50aXRsZSwgYXR0YWNobWVudHMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29tbWFuZC5pZClcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UoZmFsc2UpXG4gICAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgICBzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/Lmluc2VydFNsYXNoQ29tbWFuZCh7IGlkOiBjb21tYW5kLmlkLCBsYWJlbDogY29tbWFuZC50aXRsZSB9KVxuICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthdHRhY2htZW50cywgb25TZW5kTWVzc2FnZSwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nLCBzbGFzaFF1ZXJ5LCBldmVudEFtcGxpdHVkZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlU2xhc2hEcm9wZG93biA9ICgpID0+IHtcbiAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICBzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRWRpdG9ySW5wdXQgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgdGV4dCxcbiAgICAgIHRyaWdnZXIsXG4gICAgICBzbGFzaFRyaWdnZXIsXG4gICAgfToge1xuICAgICAgdGV4dDogc3RyaW5nXG4gICAgICBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXVxuICAgICAgdHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmc7IGF0UnVuTGVuZ3RoOiBudW1iZXIgfVxuICAgICAgc2xhc2hUcmlnZ2VyPzogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmcgfVxuICAgIH0pID0+IHtcbiAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKHRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICBvbkNoYW5nZT8uKClcbiAgICAgIGhhbmRsZVRyaWdnZXIodHJpZ2dlcilcblxuICAgICAgaWYgKHNsYXNoVHJpZ2dlcj8uYWN0aXZlICYmIHNsYXNoQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoIXNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCkge1xuICAgICAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRRdWlja0FjdGlvbk9wZW4pXG4gICAgICAgICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKHRydWUpXG4gICAgICAgIHNldFNsYXNoUXVlcnkoc2xhc2hUcmlnZ2VyLnF1ZXJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgICAgIHNldFNsYXNoUXVlcnkoJycpXG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2UsIGhhbmRsZVRyaWdnZXIsIHNsYXNoQ29tbWFuZHMsIGV2ZW50QW1wbGl0dWRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGhhbmRsZVBvcG92ZXJLZXlEb3duKGUpKSByZXR1cm5cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSAmJiAhcG9wb3Zlck9wZW4pIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGlmICghc2VuZERpc2FibGVkICYmICFkaXNhYmxlZCkgaGFuZGxlU2VuZE1lc3NhZ2UoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZVBvcG92ZXJLZXlEb3duLCBwb3BvdmVyT3Blbiwgc2VuZERpc2FibGVkLCBkaXNhYmxlZCwgaGFuZGxlU2VuZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBhZGRGaWxlcyA9IChpbmNvbWluZzogRmlsZVtdKSA9PiB7XG4gICAgaWYgKCFpbmNvbWluZy5sZW5ndGggfHwgZGlzYWJsZWQpIHJldHVyblxuXG4gICAgY29uc3QgZXhjZWVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGV4Y2x1ZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBmaWxlU2l6ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fVxuICAgIGxldCBmaWxlc0luc2VydGVkID0gYXR0YWNobWVudHMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT4gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnLCAnLnBkZiddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc09sZEZvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLnR4dCcsICcubWQnLCAnLmNzdicsICcuZG9jJywgJy5kb2N4JywgJy54bHN4JywgJy54bHMnLCAnLnBwdCcsICcucHB0eCddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc0F1ZGlvRm9ybWF0ID0gKGV4dGVuc2lvbjogc3RyaW5nKSA9PlxuICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLmluY2x1ZGVzKGV4dGVuc2lvbilcblxuICAgIGNvbnN0IGV4Y2VlZHNNYXhTaXplID0gKGV4dGVuc2lvbjogc3RyaW5nLCBzaXplOiBudW1iZXIpID0+IHNpemUgPiBnZXRNYXhBdHRhY2htZW50U2l6ZU1iKGV4dGVuc2lvbikgKiAxMDI0ICogMTAyNFxuXG4gICAgaW5jb21pbmcuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGxldCBleGNsdWRlZEZpbGUgPSBmYWxzZVxuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZpbGVTaXplc1tmaWxlLm5hbWVdID0gZmlsZS5zaXplXG5cbiAgICAgIGlmIChpc05ld0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpZiAoZXhjZWVkc01heFNpemUoZmlsZUV4dGVuc2lvbiwgZmlsZS5zaXplKSkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc09sZEZvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpZiAoZXhjZWVkc01heFNpemUoZmlsZUV4dGVuc2lvbiwgZmlsZS5zaXplKSkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0F1ZGlvRm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIGlmIChleGNlZWRzTWF4U2l6ZShmaWxlRXh0ZW5zaW9uLCBmaWxlLnNpemUpKSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChleGNsdWRlZEZpbGVzLmxlbmd0aCB8fCBleGNlZWRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogdHJ1ZSwgZXhjbHVkZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgZmlsZVNpemVzIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGFkZEZpbGVzKEFycmF5LmZyb20oZmlsZXMpKVxuICAgIH1cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXNldEZpbGVEcmFnID0gKCkgPT4ge1xuICAgIGZpbGVEcmFnQ291bnRlclJlZi5jdXJyZW50ID0gMFxuICAgIHNldElzRmlsZURyYWdBY3RpdmUoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW50ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghZGF0YVRyYW5zZmVySGFzRmlsZXMoZS5kYXRhVHJhbnNmZXIpKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCArPSAxXG4gICAgc2V0SXNGaWxlRHJhZ0FjdGl2ZSh0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gKGU6IERyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAoIWlzRmlsZURyYWdBY3RpdmUgJiYgIWRhdGFUcmFuc2Zlckhhc0ZpbGVzKGUuZGF0YVRyYW5zZmVyKSkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGZpbGVEcmFnQ291bnRlclJlZi5jdXJyZW50ID0gTWF0aC5tYXgoMCwgZmlsZURyYWdDb3VudGVyUmVmLmN1cnJlbnQgLSAxKVxuICAgIGlmIChmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCA9PT0gMCkge1xuICAgICAgc2V0SXNGaWxlRHJhZ0FjdGl2ZShmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnT3ZlciA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFkYXRhVHJhbnNmZXJIYXNGaWxlcyhlLmRhdGFUcmFuc2ZlcikpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVyblxuICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSdcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghZGF0YVRyYW5zZmVySGFzRmlsZXMoZS5kYXRhVHJhbnNmZXIpKSB7XG4gICAgICByZXNldEZpbGVEcmFnKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmVzZXRGaWxlRHJhZygpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBhZGRGaWxlcyhmaWxlc0Zyb21EYXRhVHJhbnNmZXIoZS5kYXRhVHJhbnNmZXIpKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGFzdGVGaWxlcyA9IChmaWxlczogRmlsZVtdKSA9PiB7XG4gICAgYWRkRmlsZXMoZmlsZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVXcmFwcGVyUGFzdGUgPSAoZTogQ2xpcGJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZWRpdG9yRWwgPSB3cmFwcGVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3IoJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJylcbiAgICBpZiAoZWRpdG9yRWwgJiYgZWRpdG9yRWwuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHJldHVyblxuICAgIGNvbnN0IGZpbGVzID0gZmlsZXNGcm9tRGF0YVRyYW5zZmVyKGUuY2xpcGJvYXJkRGF0YSlcbiAgICBpZiAoIWZpbGVzLmxlbmd0aCkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgYWRkRmlsZXMoZmlsZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgb25EZWxldGVBdHRhY2htZW50Py4oZmlsZUlkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3RvcEdlbmVyYXRpb24gPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFN0b3BSZXNwb25zZSlcbiAgICBvblN0b3BHZW5lcmF0aW9uPy4oKVxuICB9XG5cbiAgY29uc3Qgc2hvd0NoaXBzUm93ID0gQm9vbGVhbihjb250ZXh0Q2hpcD8uaXRlbXM/Lmxlbmd0aCB8fCBhdHRhY2htZW50cy5sZW5ndGgpXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjaGlwc0VsID0gY2hpcHNSb3dSZWYuY3VycmVudFxuICAgIGNvbnN0IHRvb2xiYXJFbCA9IHRvb2xiYXJSb3dSZWYuY3VycmVudFxuXG4gICAgY29uc3QgdXBkYXRlSGVpZ2h0cyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG5leHRDaGlwcyA9IHNob3dDaGlwc1JvdyAmJiBjaGlwc0VsID8gTWF0aC5jZWlsKGNoaXBzRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSA6IDBcbiAgICAgIGNvbnN0IG5leHRUb29sYmFyID0gdG9vbGJhckVsXG4gICAgICAgID8gTWF0aC5jZWlsKHRvb2xiYXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpXG4gICAgICAgIDogTUFJQV9JTlBVVF9UT09MQkFSX1JPV19IRUlHSFRfUFhcblxuICAgICAgc2V0Q2hpcHNSb3dIZWlnaHQocHJldiA9PiAocHJldiA9PT0gbmV4dENoaXBzID8gcHJldiA6IG5leHRDaGlwcykpXG4gICAgICBzZXRUb29sYmFyUm93SGVpZ2h0KHByZXYgPT4gKHByZXYgPT09IG5leHRUb29sYmFyID8gcHJldiA6IG5leHRUb29sYmFyKSlcbiAgICB9XG5cbiAgICB1cGRhdGVIZWlnaHRzKClcblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHVwZGF0ZUhlaWdodHMpXG4gICAgaWYgKHNob3dDaGlwc1JvdyAmJiBjaGlwc0VsKSBvYnNlcnZlci5vYnNlcnZlKGNoaXBzRWwpXG4gICAgaWYgKHRvb2xiYXJFbCkgb2JzZXJ2ZXIub2JzZXJ2ZSh0b29sYmFyRWwpXG5cbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFtzaG93Q2hpcHNSb3csIGNvbnRleHRDaGlwPy5pdGVtcz8ubGVuZ3RoLCBhdHRhY2htZW50cy5sZW5ndGhdKVxuXG4gIGNvbnN0IGVkaXRvck1heEhlaWdodCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGdldE1haWFJbnB1dEVkaXRvck1heEhlaWdodCh7XG4gICAgICAgIGNoaXBzUm93SGVpZ2h0UHg6IGNoaXBzUm93SGVpZ2h0LFxuICAgICAgICB0b29sYmFyUm93SGVpZ2h0UHg6IHRvb2xiYXJSb3dIZWlnaHQsXG4gICAgICB9KSxcbiAgICBbY2hpcHNSb3dIZWlnaHQsIHRvb2xiYXJSb3dIZWlnaHRdXG4gIClcblxuICBjb25zdCB0b29sYmFySWNvbkNvbG9yID0gJyM4MDgwODAnXG4gIGNvbnN0IHBsdXNNZW51SWNvbkNvbG9yID0gTUFJQV9DSEFUX0lOUFVUX1VJLm1lbnVJY29uXG4gIGNvbnN0IGlzQ3VzdG9tQWdlbnQgPSBhZ2VudD8udHlwZSA9PT0gJ2N1c3RvbSdcbiAgY29uc3QgaGFzQ29yQWNjZXNzID0gQm9vbGVhbihcbiAgICBpc0N1c3RvbUFnZW50ICYmXG4gICAgYWdlbnQ/LmNvbm5lY3RvcnM/LnNvbWUoXG4gICAgICBjb25uZWN0b3IgPT5cbiAgICAgICAgY29ubmVjdG9yLmdyb3VwID09PSAnQ09SJyAmJiBjb25uZWN0b3Iuc2x1Z3Muc29tZShzbHVnID0+IHR5cGVvZiBzbHVnID09PSAnc3RyaW5nJyAmJiBzbHVnLnRyaW0oKS5sZW5ndGggPiAwKVxuICAgIClcbiAgKVxuICBjb25zdCBhZ2VudE1vZGVsTmFtZSA9IGlzQ3VzdG9tQWdlbnQgPyBhZ2VudD8ubW9kZWxfZGlzcGxheV9uYW1lPy50cmltKCkgfHwgbnVsbCA6IG51bGxcbiAgY29uc3Qgc2hvd0N1c3RvbU1ldGFJbmRpY2F0b3JzID0gaGFzQ29yQWNjZXNzIHx8IEJvb2xlYW4oYWdlbnRNb2RlbE5hbWUpXG4gIGNvbnN0IHNob3dNZW50aW9uQnV0dG9uID0gYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InIHx8IGhhc0NvckFjY2Vzc1xuXG4gIGxldCBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uOiBSZWFjdE5vZGVcbiAgaWYgKGFjdGl2ZVRvb2xDaGlwSG92ZXJlZCkge1xuICAgIGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24gPSA8Q3Jvc3MgY29sb3I9e01BSUFfQ0hBVF9JTlBVVF9VSS5jaGlwQ2xvc2VJY29ufSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPE1haWFJbnB1dFdlYlNlYXJjaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdHlsZWRNQUlBSW5wdXRXcmFwcGVyXG4gICAgICAgIHJlZj17d3JhcHBlclJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICAgaGFzQXR0YWNobWVudHM9eyEhYXR0YWNobWVudHMubGVuZ3RofVxuICAgICAgICAkZmlsZURyYWdBY3RpdmU9e2lzRmlsZURyYWdBY3RpdmV9XG4gICAgICAgIGRhdGEtYXBwY3Vlcz1cIm1haWFfY2hhdF9pbnB1dFwiXG4gICAgICAgIGRhdGEtbWFpYS1zdHJlYW1pbmc9e2lzU3RyZWFtaW5nID8gJ3RydWUnIDogJ2ZhbHNlJ31cbiAgICAgICAgb25QYXN0ZT17aGFuZGxlV3JhcHBlclBhc3RlfVxuICAgICAgICBvbkRyYWdFbnRlcj17aGFuZGxlRHJhZ0VudGVyfVxuICAgICAgICBvbkRyYWdMZWF2ZT17aGFuZGxlRHJhZ0xlYXZlfVxuICAgICAgICBvbkRyYWdPdmVyPXtoYW5kbGVEcmFnT3Zlcn1cbiAgICAgICAgb25Ecm9wPXtoYW5kbGVEcm9wfVxuICAgICAgPlxuICAgICAgICB7c2hvd0NoaXBzUm93ICYmIChcbiAgICAgICAgICA8U0NJbnB1dENoaXBzUm93IHJlZj17Y2hpcHNSb3dSZWZ9PlxuICAgICAgICAgICAge2NvbnRleHRDaGlwPy5pdGVtcz8ubGVuZ3RoID8gKFxuICAgICAgICAgICAgICA8Q2hpcFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtjb250ZXh0Q2hpcC5pdGVtc31cbiAgICAgICAgICAgICAgICB0eXBlPXtjb250ZXh0Q2hpcC50eXBlfVxuICAgICAgICAgICAgICAgIGxlYWRpbmdJY29uPXtjb250ZXh0Q2hpcC5sZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50LnR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IC9cXC4ocG5nfGpwZT9nfGdpZnx3ZWJwfGJtcHxzdmcpJC9pLnRlc3QoYXR0YWNobWVudC5uYW1lIHx8ICcnKVxuICAgICAgICAgICAgICBjb25zdCBjaGlwSWNvbiA9IGlzSW1hZ2UgPyAoXG4gICAgICAgICAgICAgICAgPE1haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24gY29sb3I9XCIjODA4MDgwXCIgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRBdHRhY2hJY29uIGNvbG9yPVwiIzgwODA4MFwiIHdpZHRoPXsxM30gaGVpZ2h0PXsxM30gLz5cbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2luZGV4fWB9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudEljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50RmlsZUljb24+e2NoaXBJY29ufTwvU0NNSUF0dGFjaG1lbnRGaWxlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnREZWxldGVJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQucmVtb3ZlQXR0YWNobWVudEFyaWEnLCB7IGRlZmF1bHRWYWx1ZTogJ1F1aXRhciBhcmNoaXZvJyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiIzY2NjY2NlwiIHdpZHRoPXsxNH0gaGVpZ2h0PXsxNH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50RGVsZXRlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudEljb24+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudE5hbWU+e2F0dGFjaG1lbnQubmFtZX08L1NDTUlBdHRhY2htZW50TmFtZT5cbiAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDSW5wdXRDaGlwc1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQ+XG4gICAgICAgICAgPFNDSW5wdXRFZGl0b3JDZWxsPlxuICAgICAgICAgICAgPENvbnRleHRNZW50aW9uRWRpdG9yXG4gICAgICAgICAgICAgIHJlZj17ZWRpdG9yUmVmfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXtlZGl0b3JNYXhIZWlnaHR9XG4gICAgICAgICAgICAgIG9uSW5wdXQ9e2hhbmRsZUVkaXRvcklucHV0fVxuICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAgICAgICAgIG9uUGFzdGVGaWxlcz17aGFuZGxlUGFzdGVGaWxlc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0lucHV0RWRpdG9yQ2VsbD5cbiAgICAgICAgICA8U0NJbnB1dFRvb2xiYXJSb3cgcmVmPXt0b29sYmFyUm93UmVmfT5cbiAgICAgICAgICAgIDxTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsPlxuICAgICAgICAgICAgICA8UGx1c01lbnVUb29sc1Jvdz5cbiAgICAgICAgICAgICAgICA8UGx1c1RvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAkbWVudU9wZW49e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXtoYW5kbGVQbHVzQnV0dG9uTW91c2VEb3dufVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGx1c0J1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5vcGVuUGx1c01lbnVBcmlhJyl9XG4gICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dEFkZEljb24gY29sb3I9e3Rvb2xiYXJJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAge3Nob3dNZW50aW9uQnV0dG9uICYmIChcbiAgICAgICAgICAgICAgICAgIDxQbHVzVG9nZ2xlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAkbWVudU9wZW49e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVNZW50aW9uQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5vcGVuTWVudGlvbkFyaWEnKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dE1lbnRpb25JY29uIGNvbG9yPXt0b29sYmFySWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgICAgICAgb3Blbj17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICAgICAgYW5jaG9yRWw9e3BsdXNNZW51QW5jaG9yfVxuICAgICAgICAgICAgICAgICAgb25DbG9zZT17Y2xvc2VQbHVzTWVudX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXNcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXNcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXNcbiAgICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17eyB2ZXJ0aWNhbDogJ3RvcCcsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XG4gICAgICAgICAgICAgICAgICBzeD17eyB6SW5kZXg6IHBsdXNNZW51WkluZGV4IH19XG4gICAgICAgICAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgcGFwZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICBlbGV2YXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICctNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVBdHRhY2h9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dEF0dGFjaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MjF9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWw+e3QoJ2NoYXQucGx1c01lbnVBdHRhY2gnKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudURpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudVdlYlNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0V2ViU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5zZWFyY2hXZWInKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzV2ViU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVEZWVwU2VhcmNofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5wbHVzTWVudURlZXBJbnZlc3RpZ2F0aW9uJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0RlZXBTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVRdWlja0FjdGlvbnN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dFNsYXNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5wbHVzTWVudVF1aWNrQWN0aW9ucycpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJbm5lckNvbHVtbj5cbiAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICAgICAgICAgeyhpc1dlYlNlYXJjaEFjdGl2ZSB8fCBpc0RlZXBTZWFyY2hBY3RpdmUpICYmIChcbiAgICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcFJvb3RcbiAgICAgICAgICAgICAgICAgICAgJGhvdmVyZWQ9e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgJGV4aXRpbmc9e3Rvb2xDaGlwRXhpdGluZ31cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICRjbG9zZVNob3duPXthY3RpdmVUb29sQ2hpcEhvdmVyZWR9XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5yZW1vdmVBY3RpdmVUb29sQXJpYScpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5Ub29sQ2hpcEV4aXQoKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7YWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcEljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IHQoJ2NoYXQuc2VhcmNoV2ViJykgOiB0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcFJvb3Q+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9QbHVzTWVudVRvb2xzUm93PlxuICAgICAgICAgICAgPC9TdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsPlxuICAgICAgICAgICAgPFN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGw+XG4gICAgICAgICAgICAgIHtzaG93Q3VzdG9tTWV0YUluZGljYXRvcnMgJiYgKFxuICAgICAgICAgICAgICAgIDxTQ0lucHV0TWV0YUluZGljYXRvcnM+XG4gICAgICAgICAgICAgICAgICB7aGFzQ29yQWNjZXNzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dCgnY2hhdC5mb290ZXIuY29yQWNjZXNzVG9vbHRpcCcpfVxuICAgICAgICAgICAgICAgICAgICAgIHsuLi4odG9vbHRpcFpJbmRleCAhPSBudWxsID8geyB6SW5kZXg6IHRvb2x0aXBaSW5kZXggfSA6IHt9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0lucHV0TWV0YUljb25CdXR0b24gYXJpYS1sYWJlbD17dCgnY2hhdC5mb290ZXIuY29yQWNjZXNzTGFiZWwnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q29yQWNjZXNzSWNvbiB3aWR0aD17MTV9IGhlaWdodD17MTR9IGNvbG9yPXt0b29sYmFySWNvbkNvbG9yfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NJbnB1dE1ldGFJY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2FnZW50TW9kZWxOYW1lICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dCgnY2hpcExsbS50b29sdGlwJywgeyBtb2RlbDogYWdlbnRNb2RlbE5hbWUgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgey4uLih0b29sdGlwWkluZGV4ICE9IG51bGwgPyB7IHpJbmRleDogdG9vbHRpcFpJbmRleCB9IDoge30pfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDSW5wdXRNZXRhSWNvbkJ1dHRvbiBhcmlhLWxhYmVsPXthZ2VudE1vZGVsTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0Um9ib3RJY29uIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gY29sb3I9e3Rvb2xiYXJJY29uQ29sb3J9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0lucHV0TWV0YUljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9TQ0lucHV0TWV0YUluZGljYXRvcnM+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtpc1dyaXRpbmcgPyAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc3RvcCcpfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wQnV0dG9uIGRpc2FibGVkPXtmYWxzZX0gb25DbGljaz17aGFuZGxlU3RvcEdlbmVyYXRpb259IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU3RvcEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc2VuZCcpfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZS1mbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU2VuZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZW5kRGlzYWJsZWQgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgaGFzVmFsdWVzPXtoYXNUeXBpbmdQcmVzZW5jZSB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dFNlbmRJY29uIGNvbG9yPVwiI0JGQkZCRlwiIHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU2VuZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1N0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGw+XG4gICAgICAgICAgPC9TQ0lucHV0VG9vbGJhclJvdz5cbiAgICAgICAgPC9TdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBwdCwucHB0eCwucG5nLC5qcGcsLmpwZWcsLnBkZiwueGxzeCwueGxzLC5mbGFjLC5tNGEsLm1wMywubXA0LC5vZ2EsLm9nZywud2F2LC53ZWJtXCJcbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZVNlbGVjdH1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgLz5cbiAgICAgICAge2lzRmlsZURyYWdBY3RpdmUgJiYgPFN0eWxlZE1BSUFEcm9wT3ZlcmxheT57dCgnY2hhdC5kcm9wRmlsZXNIZXJlJyl9PC9TdHlsZWRNQUlBRHJvcE92ZXJsYXk+fVxuICAgICAgPC9TdHlsZWRNQUlBSW5wdXRXcmFwcGVyPlxuICAgICAge21vZGFsUHJvcHMuaXNPcGVuICYmIChcbiAgICAgICAgPE1vZGFsRmlsZUV4Y2VlZHNcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiBmYWxzZSwgZXhjbHVkZWRGaWxlczogW10sIGV4Y2VlZGVkRmlsZXM6IFtdLCBmaWxlU2l6ZXM6IHt9IH0pfVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjbHVkZWRGaWxlc31cbiAgICAgICAgICBleGNlZWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2VlZGVkRmlsZXN9XG4gICAgICAgICAgZmlsZVNpemVzPXttb2RhbFByb3BzLmZpbGVTaXplc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7cG9wb3Zlck5vZGUgJiYgY3JlYXRlUG9ydGFsKHBvcG92ZXJOb2RlLCBkb2N1bWVudC5ib2R5KX1cbiAgICAgIHtzaG93U2xhc2hEcm9wZG93biAmJlxuICAgICAgICBjcmVhdGVQb3J0YWwoXG4gICAgICAgICAgPFNsYXNoQ29tbWFuZERyb3Bkb3duXG4gICAgICAgICAgICBjb21tYW5kcz17c2xhc2hDb21tYW5kc31cbiAgICAgICAgICAgIHF1ZXJ5PXtzbGFzaFF1ZXJ5fVxuICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNsYXNoQ29tbWFuZH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlU2xhc2hEcm9wZG93bn1cbiAgICAgICAgICAgIGJvdHRvbT17c2xhc2hEcm9wZG93blBvcy5ib3R0b219XG4gICAgICAgICAgICBsZWZ0PXtzbGFzaERyb3Bkb3duUG9zLmxlZnR9XG4gICAgICAgICAgICBtYXhIZWlnaHQ9e3NsYXNoRHJvcGRvd25Qb3MubWF4SGVpZ2h0fVxuICAgICAgICAgICAgekluZGV4PXtzbGFzaERyb3Bkb3duWkluZGV4fVxuICAgICAgICAgICAgYW5jaG9yUmVmPXt3cmFwcGVyUmVmfVxuICAgICAgICAgIC8+LFxuICAgICAgICAgIGRvY3VtZW50LmJvZHlcbiAgICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FRRUEsV0FBVyxFQUNYQyxTQUFTLEVBQ1RDLGVBQWUsRUFD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
|