@projectcor/maia-components 2.44.5-0 → 2.44.5
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/README.md +2 -0
- package/lib/App.js +19 -44
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +51 -5
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +76 -18
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +31 -3
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -2
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +255 -15
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +34 -5
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
- package/lib/components/atoms/MAIAInput/MAIAInput.js +10 -4
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +60 -8
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +15 -3
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +16 -21
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +5 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +52 -72
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +1 -6
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -36
- package/lib/components/index.js +1 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +29 -5
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +40 -6
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +90 -18
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +15 -5
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +6 -21
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +47 -19
- package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -29
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +4 -147
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +108 -64
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +2 -3
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +86 -76
- package/lib/components/molecules/ChatFooter/ChatFooter.js +3 -5
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +44 -9
- package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +171 -56
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +1 -4
- package/lib/dev/DevReasoningTimeline.js +37 -68
- package/lib/dev/Providers.js +3 -5
- package/lib/hooks/useChatManager/useChatManager.js +351 -76
- package/lib/hooks/useChatMessages/useChatMessages.js +82 -12
- package/lib/hooks/useClientSearch.js +32 -4
- package/lib/hooks/useContextMentions.js +163 -2
- package/lib/hooks/useContextPinPopover.js +75 -16
- package/lib/hooks/useEntitySearch.js +391 -38
- package/lib/hooks/useFrequentlyUsedActions.js +22 -60
- package/lib/hooks/useMentionPopover.js +35 -9
- package/lib/hooks/useMinimizedPillBottomOffset.js +45 -15
- package/lib/hooks/useProjectSearch.js +58 -4
- package/lib/hooks/useProjectSummaryConfig.js +52 -14
- package/lib/hooks/useRecentClientsSearch.js +32 -4
- package/lib/index.js +2 -5
- package/lib/lang/br/index.js +9 -26
- package/lib/lang/en/index.js +9 -26
- package/lib/lang/es/index.js +9 -26
- package/lib/lang/fr/index.js +9 -26
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Agents/getAgents.js +242 -78
- package/lib/services/maia/Orchestrator/orchestrator.js +121 -38
- package/lib/store/sessions/sessionNotifications.js +41 -35
- package/lib/store/sessions/sessionStreamManager.js +52 -40
- package/lib/styles/cascade.js +3 -29
- package/lib/styles/transitions.js +1 -3
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/hoursPlannerQuickActionType.js +1 -74
- package/lib/utils/imagePreprocessor.js +37 -12
- package/lib/utils/streamActivityMessages.js +21 -32
- package/package.json +1 -1
- package/lib/components/atoms/ActionableButton.spec.js +0 -111
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +0 -65
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +0 -55
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +0 -31
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +0 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
- package/lib/components/atoms/Chip/Chip.spec.js +0 -82
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +0 -227
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +0 -31
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
- package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
- package/lib/components/atoms/Expand/Expand.spec.js +0 -57
- package/lib/components/atoms/Fade/Fade.spec.js +0 -31
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
- package/lib/components/atoms/HelpButton.spec.js +0 -87
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +0 -12
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -430
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +0 -50
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
- package/lib/components/atoms/NextPageLoader.spec.js +0 -37
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +0 -17
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
- package/lib/components/atoms/PrimaryButton.spec.js +0 -42
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -132
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -162
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -4
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +0 -10
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
- package/lib/components/atoms/Switch/Switch.spec.js +0 -41
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
- package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
- package/lib/components/atoms/ThirdButton.spec.js +0 -29
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
- package/lib/components/atoms/WithAppCfg.spec.js +0 -60
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +0 -37
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -371
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +0 -39
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +0 -86
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +0 -17
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
- package/lib/components/molecules/AgentInputBlock/index.js +0 -5
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +0 -54
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -410
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +0 -5
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +0 -30
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
- package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
- package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -355
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +0 -48
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +0 -198
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -385
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1125
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -231
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -267
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -261
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -194
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -105
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -73
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
- package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
- package/lib/components/organisms/ChatAIPage/index.js +0 -3
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
- package/lib/constants/permissions/utils.spec.js +0 -128
- package/lib/dev/DevMaiaPage.js +0 -30
- package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
- package/lib/hooks/useAgentSuggestions.spec.js +0 -89
- package/lib/hooks/useCaretPosition.spec.js +0 -58
- package/lib/hooks/useChatManager/useChatManager.helpers.js +0 -353
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
- package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +0 -109
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
- package/lib/hooks/useChats/useChats.spec.js +0 -208
- package/lib/hooks/useClientSearch.helpers.js +0 -36
- package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
- package/lib/hooks/useClientSearch.spec.js +0 -86
- package/lib/hooks/useContextMentions.helpers.js +0 -152
- package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
- package/lib/hooks/useContextMentions.spec.js +0 -239
- package/lib/hooks/useContextMentions.types.js +0 -2
- package/lib/hooks/useContextPinPopover.helpers.js +0 -95
- package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
- package/lib/hooks/useContextPinPopover.spec.js +0 -159
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
- package/lib/hooks/useDebounce.spec.js +0 -42
- package/lib/hooks/useEntitySearch.helpers.js +0 -359
- package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
- package/lib/hooks/useEntitySearch.spec.js +0 -443
- package/lib/hooks/useEvent.spec.js +0 -45
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
- package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
- package/lib/hooks/useIsMaiaPageRoute.js +0 -26
- package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
- package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
- package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
- package/lib/hooks/useMentionPopover.helpers.js +0 -41
- package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
- package/lib/hooks/useMentionPopover.spec.js +0 -215
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +0 -47
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
- package/lib/hooks/useModal/useModal.spec.js +0 -73
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
- package/lib/hooks/useProjectSearch.helpers.js +0 -61
- package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
- package/lib/hooks/useProjectSearch.spec.js +0 -91
- package/lib/hooks/useProjectSummary.spec.js +0 -193
- package/lib/hooks/useProjectSummaryConfig.helpers.js +0 -62
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
- package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
- package/lib/hooks/useRecentClientsSearch.helpers.js +0 -33
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
- package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
- package/lib/hooks/useRecentContexts.spec.js +0 -139
- package/lib/hooks/useResize.spec.js +0 -37
- package/lib/hooks/useSkillsCatalog.spec.js +0 -88
- package/lib/hooks/useSlashCommands.spec.js +0 -139
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
- package/lib/hooks/useStreamResponse.spec.js +0 -199
- package/lib/hooks/useT.spec.js +0 -20
- package/lib/hooks/useToggle.spec.js +0 -33
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
- package/lib/services/maia/Access/updateAccess.spec.js +0 -137
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
- package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
- package/lib/services/maia/Agents/connectors.spec.js +0 -359
- package/lib/services/maia/Agents/createAgent.spec.js +0 -55
- package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
- package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
- package/lib/services/maia/Agents/getAgents.helpers.js +0 -181
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
- package/lib/services/maia/Agents/getAgents.spec.js +0 -697
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
- package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
- package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
- package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
- package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
- package/lib/services/maia/Chats/patchChat.spec.js +0 -41
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
- package/lib/services/maia/Knowledge/delete.spec.js +0 -45
- package/lib/services/maia/Knowledge/download.spec.js +0 -78
- package/lib/services/maia/Knowledge/save.spec.js +0 -58
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +0 -130
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
- package/lib/services/maia/Skills/createSkill.spec.js +0 -68
- package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
- package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
- package/lib/services/maia/Skills/getSkills.spec.js +0 -152
- package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
- package/lib/services/maia/client.spec.js +0 -56
- package/lib/services/utils/fetchCOR.spec.js +0 -211
- package/lib/services/utils/getCookie.spec.js +0 -20
- package/lib/services/utils/mapChatMessages.spec.js +0 -254
- package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
- package/lib/store/maiaLastChatPersistence.spec.js +0 -22
- package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
- package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
- package/lib/store/sessions/sessionNotifications.helpers.js +0 -45
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
- package/lib/store/sessions/sessionNotifications.spec.js +0 -106
- package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
- package/lib/store/sessions/sessions.types.spec.js +0 -16
- package/lib/store/sessions/useSessionsStore.spec.js +0 -135
- package/lib/store/useChatsStore.spec.js +0 -619
- package/lib/store/useFaqsStore.spec.js +0 -57
- package/lib/test/mockSseStream.js +0 -121
- package/lib/test/streamdownCodeMock.js +0 -6
- package/lib/test/streamdownMock.js +0 -12
- package/lib/utils/actionCategoryMap.spec.js +0 -18
- package/lib/utils/agentDisplayName.spec.js +0 -44
- package/lib/utils/autoApproveStorage.spec.js +0 -25
- package/lib/utils/chatInputFiles.spec.js +0 -39
- package/lib/utils/contextMentionIcons.spec.js +0 -41
- package/lib/utils/contextMentionLabel.spec.js +0 -13
- package/lib/utils/contextMentionTriggers.spec.js +0 -38
- package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
- package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
- package/lib/utils/entityLinkRender.spec.js +0 -72
- package/lib/utils/fileDownloadHelper.spec.js +0 -67
- package/lib/utils/formatQuickActionMessage.spec.js +0 -27
- package/lib/utils/formatUnreadCount.spec.js +0 -12
- package/lib/utils/getUnitFileSize.spec.js +0 -18
- package/lib/utils/hitlAnalytics.spec.js +0 -100
- package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
- package/lib/utils/imagePreprocessor.helpers.js +0 -28
- package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
- package/lib/utils/imagePreprocessor.spec.js +0 -112
- package/lib/utils/maiaPageRoute.js +0 -24
- package/lib/utils/maiaPageRoute.spec.js +0 -23
- package/lib/utils/mapBackendLang.spec.js +0 -19
- package/lib/utils/navigateContextEntity.spec.js +0 -50
- package/lib/utils/normalizeAgentConnectors.spec.js +0 -107
- package/lib/utils/orchestratorSubagents.spec.js +0 -32
- package/lib/utils/reasoningMappers.spec.js +0 -103
- package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
- package/lib/utils/renderContextMentions.spec.js +0 -158
- package/lib/utils/retryCompletion.spec.js +0 -99
- package/lib/utils/skillContentSize.spec.js +0 -13
- package/lib/utils/slashCommandMarker.spec.js +0 -43
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
- package/lib/utils/sseStreamContent.spec.js +0 -31
- package/lib/utils/streamActivityMessages.spec.js +0 -227
- package/lib/utils/validateTrimmedFields.spec.js +0 -26
|
@@ -9,8 +9,8 @@ import { CONTEXT_MENTION_CHIP_CLASS } from '../../../types/contextMention';
|
|
|
9
9
|
import { getContextMentionIcon } from '../../../utils/contextMentionIcons';
|
|
10
10
|
import { normalizeContextMentionLabel } from '../../../utils/contextMentionLabel';
|
|
11
11
|
import { openTaskInCorPanel } from '../../../utils/openTaskInCorPanel';
|
|
12
|
+
import { SLASH_COMMAND_CHIP_BASE_STYLE } from '../SlashCommandChip/SlashCommandChip.styles';
|
|
12
13
|
import { applyMentionChipStyles, MENTION_CHIP_COLORS } from './ContextMentionChip.styles';
|
|
13
|
-
import { buildSkillMentionChipElement, buildUserMentionTooltipElement, splitLabelFirstWord } from './buildChipElement.helpers';
|
|
14
14
|
var EDITABLE_NON_TASK_LABEL_STYLE = {
|
|
15
15
|
display: 'inline',
|
|
16
16
|
lineHeight: '20px',
|
|
@@ -45,6 +45,22 @@ var createEditableMentionLabelEl = function createEditableMentionLabelEl(isTask,
|
|
|
45
45
|
style: EDITABLE_TASK_LABEL_STYLE
|
|
46
46
|
}, mentionLabel);
|
|
47
47
|
};
|
|
48
|
+
var splitLabelFirstWord = function splitLabelFirstWord(label) {
|
|
49
|
+
var normalized = label.trim();
|
|
50
|
+
if (!normalized) return {
|
|
51
|
+
firstWord: '',
|
|
52
|
+
rest: ''
|
|
53
|
+
};
|
|
54
|
+
var firstWhitespaceIdx = normalized.search(/\s/);
|
|
55
|
+
if (firstWhitespaceIdx < 0) return {
|
|
56
|
+
firstWord: normalized,
|
|
57
|
+
rest: ''
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
firstWord: normalized.slice(0, firstWhitespaceIdx),
|
|
61
|
+
rest: normalized.slice(firstWhitespaceIdx)
|
|
62
|
+
};
|
|
63
|
+
};
|
|
48
64
|
var EditableMentionChip = function EditableMentionChip(_ref) {
|
|
49
65
|
var mention = _ref.mention;
|
|
50
66
|
var mentionLabel = normalizeContextMentionLabel(mention.label);
|
|
@@ -102,6 +118,213 @@ var EditableMentionChip = function EditableMentionChip(_ref) {
|
|
|
102
118
|
style: restStyle
|
|
103
119
|
}, rest) : null);
|
|
104
120
|
};
|
|
121
|
+
var initialsFromName = function initialsFromName(name) {
|
|
122
|
+
var _parts$2;
|
|
123
|
+
var trimmed = name.trim();
|
|
124
|
+
if (!trimmed) return '?';
|
|
125
|
+
var parts = trimmed.split(/\s+/).filter(Boolean);
|
|
126
|
+
if (parts.length >= 2) {
|
|
127
|
+
var _parts$0$charAt, _parts$, _parts$charAt, _parts;
|
|
128
|
+
var first = (_parts$0$charAt = (_parts$ = parts[0]) === null || _parts$ === void 0 ? void 0 : _parts$.charAt(0)) !== null && _parts$0$charAt !== void 0 ? _parts$0$charAt : '';
|
|
129
|
+
var last = (_parts$charAt = (_parts = parts[parts.length - 1]) === null || _parts === void 0 ? void 0 : _parts.charAt(0)) !== null && _parts$charAt !== void 0 ? _parts$charAt : '';
|
|
130
|
+
return "".concat(first).concat(last).toUpperCase();
|
|
131
|
+
}
|
|
132
|
+
var single = (_parts$2 = parts[0]) !== null && _parts$2 !== void 0 ? _parts$2 : '';
|
|
133
|
+
return single.length >= 2 ? single.slice(0, 2).toUpperCase() : (single.charAt(0) || '?').toUpperCase();
|
|
134
|
+
};
|
|
135
|
+
var TOOLTIP_FONT = "var(--cor-typography-font-family, 'Work Sans')";
|
|
136
|
+
var TOOLTIP_SECONDARY_COLOR = 'var(--Text-Secondary-Dark, #666)';
|
|
137
|
+
var TOOLTIP_SECONDARY_STYLE = {
|
|
138
|
+
fontFamily: TOOLTIP_FONT,
|
|
139
|
+
fontSize: '14px',
|
|
140
|
+
fontWeight: '400',
|
|
141
|
+
lineHeight: '20px',
|
|
142
|
+
color: TOOLTIP_SECONDARY_COLOR
|
|
143
|
+
};
|
|
144
|
+
var normalizeTrimmedString = function normalizeTrimmedString(value) {
|
|
145
|
+
if (typeof value !== 'string') return '';
|
|
146
|
+
return value.trim();
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/** Ancho mínimo del tooltip (incl. padding horizontal 8+8). */
|
|
150
|
+
var USER_TOOLTIP_MIN_WIDTH_PX = 292;
|
|
151
|
+
/** Padding horizontal total del tooltip. */
|
|
152
|
+
var USER_TOOLTIP_PAD_X_PX = 16;
|
|
153
|
+
/** Avatar 24px + gap 8px respecto a la columna de texto. */
|
|
154
|
+
var USER_TOOLTIP_AVATAR_GAP_PX = 32;
|
|
155
|
+
/**
|
|
156
|
+
* Ancho máximo de la fila nombre | posición: mismo hueco que con tooltip fijo 292px,
|
|
157
|
+
* para que solo el email ensanche el contenedor.
|
|
158
|
+
*/
|
|
159
|
+
var USER_TOOLTIP_NAME_ROW_MAX_PX = USER_TOOLTIP_MIN_WIDTH_PX - USER_TOOLTIP_PAD_X_PX - USER_TOOLTIP_AVATAR_GAP_PX;
|
|
160
|
+
/**
|
|
161
|
+
* Tope de ancho del nombre en la fila: por debajo del máximo de fila para que el ellipsis
|
|
162
|
+
* del nombre aparezca antes y quede más espacio visible para posición/cargo.
|
|
163
|
+
*/
|
|
164
|
+
var USER_TOOLTIP_NAME_MAX_WIDTH_PX = Math.floor(USER_TOOLTIP_NAME_ROW_MAX_PX * 0.42);
|
|
165
|
+
var createUserTooltipEl = function createUserTooltipEl(mention) {
|
|
166
|
+
var label = mention.label,
|
|
167
|
+
metadata = mention.metadata;
|
|
168
|
+
var picture = typeof (metadata === null || metadata === void 0 ? void 0 : metadata.picture) === 'string' ? metadata.picture : null;
|
|
169
|
+
var positionName = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.positionName);
|
|
170
|
+
var positionLine = positionName || i18n.t('contextMention.userNoPosition', {
|
|
171
|
+
defaultValue: 'Sin posición'
|
|
172
|
+
});
|
|
173
|
+
var email = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.email);
|
|
174
|
+
/** Misma fuente que `ContextMentionItem` (avatar): nombre de query, no el label del chip (ej. "Yo"). */
|
|
175
|
+
var metadataName = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.name);
|
|
176
|
+
var nameForInitials = (metadataName || normalizeTrimmedString(label) || '?').trim();
|
|
177
|
+
var tooltip = document.createElement('div');
|
|
178
|
+
Object.assign(tooltip.style, {
|
|
179
|
+
position: 'fixed',
|
|
180
|
+
zIndex: '9999',
|
|
181
|
+
minWidth: "".concat(USER_TOOLTIP_MIN_WIDTH_PX, "px"),
|
|
182
|
+
width: 'max-content',
|
|
183
|
+
maxWidth: 'min(560px, calc(100vw - 24px))',
|
|
184
|
+
padding: '12px 8px',
|
|
185
|
+
display: 'flex',
|
|
186
|
+
flexDirection: 'column',
|
|
187
|
+
alignItems: 'flex-start',
|
|
188
|
+
borderRadius: '4px',
|
|
189
|
+
border: '1px solid var(--Color-Light-Gray, #E0E0E0)',
|
|
190
|
+
background: '#FFF',
|
|
191
|
+
boxShadow: '0 1px 4px 0 rgba(0,0,0,0.08), 0 1px 4px 0 rgba(0,0,0,0.04)',
|
|
192
|
+
boxSizing: 'border-box',
|
|
193
|
+
pointerEvents: 'none',
|
|
194
|
+
overflow: 'hidden'
|
|
195
|
+
});
|
|
196
|
+
var row = document.createElement('div');
|
|
197
|
+
Object.assign(row.style, {
|
|
198
|
+
display: 'flex',
|
|
199
|
+
alignItems: 'center',
|
|
200
|
+
gap: '8px',
|
|
201
|
+
width: 'max-content',
|
|
202
|
+
maxWidth: '100%',
|
|
203
|
+
minWidth: '0'
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
// Avatar circular (foto o iniciales)
|
|
207
|
+
var avatarWrap = document.createElement('div');
|
|
208
|
+
Object.assign(avatarWrap.style, {
|
|
209
|
+
width: '24px',
|
|
210
|
+
height: '24px',
|
|
211
|
+
minWidth: '24px',
|
|
212
|
+
borderRadius: '24px',
|
|
213
|
+
overflow: 'hidden',
|
|
214
|
+
display: 'flex',
|
|
215
|
+
alignItems: 'center',
|
|
216
|
+
justifyContent: 'center',
|
|
217
|
+
/** Mismo fondo que `SCMUserAvatarFallback` en la fila de usuario del modal. */
|
|
218
|
+
background: 'var(--cor-color-grey-200, #e0e0e0)',
|
|
219
|
+
flexShrink: '0'
|
|
220
|
+
});
|
|
221
|
+
var initials = initialsFromName(nameForInitials);
|
|
222
|
+
var createInitialsFallback = function createInitialsFallback() {
|
|
223
|
+
var fb = document.createElement('span');
|
|
224
|
+
fb.textContent = initials;
|
|
225
|
+
Object.assign(fb.style, {
|
|
226
|
+
fontSize: '10px',
|
|
227
|
+
fontWeight: '600',
|
|
228
|
+
/** Mismo color que `SCMUserAvatarFallback` en la fila de usuario del modal. */
|
|
229
|
+
color: 'var(--cor-color-text-secondary, #666)',
|
|
230
|
+
lineHeight: '1',
|
|
231
|
+
fontFamily: TOOLTIP_FONT
|
|
232
|
+
});
|
|
233
|
+
return fb;
|
|
234
|
+
};
|
|
235
|
+
if (picture) {
|
|
236
|
+
var img = document.createElement('img');
|
|
237
|
+
img.src = picture;
|
|
238
|
+
img.alt = '';
|
|
239
|
+
img.draggable = false;
|
|
240
|
+
Object.assign(img.style, {
|
|
241
|
+
width: '24px',
|
|
242
|
+
height: '24px',
|
|
243
|
+
objectFit: 'cover',
|
|
244
|
+
display: 'block',
|
|
245
|
+
borderRadius: '24px'
|
|
246
|
+
});
|
|
247
|
+
img.onerror = function () {
|
|
248
|
+
img.remove();
|
|
249
|
+
avatarWrap.appendChild(createInitialsFallback());
|
|
250
|
+
};
|
|
251
|
+
avatarWrap.appendChild(img);
|
|
252
|
+
} else {
|
|
253
|
+
avatarWrap.appendChild(createInitialsFallback());
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Columna de info: ancho = max(fila nombre, email); sin forzar 244px si el contenido es más corto.
|
|
257
|
+
var infoCol = document.createElement('div');
|
|
258
|
+
Object.assign(infoCol.style, {
|
|
259
|
+
display: 'flex',
|
|
260
|
+
flexDirection: 'column',
|
|
261
|
+
justifyContent: 'center',
|
|
262
|
+
alignItems: 'flex-start',
|
|
263
|
+
gap: '2px',
|
|
264
|
+
minWidth: '0',
|
|
265
|
+
width: 'max-content',
|
|
266
|
+
maxWidth: '100%'
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// Fila: nombre | posición — max-content para no dejar hueco entre nombre corto y el pipe (evitar flex 50/50).
|
|
270
|
+
var nameRow = document.createElement('div');
|
|
271
|
+
Object.assign(nameRow.style, {
|
|
272
|
+
display: 'flex',
|
|
273
|
+
alignItems: 'flex-start',
|
|
274
|
+
gap: '4px',
|
|
275
|
+
minWidth: '0',
|
|
276
|
+
width: 'max-content',
|
|
277
|
+
maxWidth: "".concat(USER_TOOLTIP_NAME_ROW_MAX_PX, "px")
|
|
278
|
+
});
|
|
279
|
+
var nameSpan = document.createElement('span');
|
|
280
|
+
nameSpan.textContent = label;
|
|
281
|
+
Object.assign(nameSpan.style, {
|
|
282
|
+
flex: '0 1 auto',
|
|
283
|
+
minWidth: '0',
|
|
284
|
+
maxWidth: "".concat(USER_TOOLTIP_NAME_MAX_WIDTH_PX, "px"),
|
|
285
|
+
overflow: 'hidden',
|
|
286
|
+
textOverflow: 'ellipsis',
|
|
287
|
+
whiteSpace: 'nowrap',
|
|
288
|
+
color: 'var(--Text-Primary-Dark, #20201F)',
|
|
289
|
+
fontFamily: TOOLTIP_FONT,
|
|
290
|
+
fontSize: '14px',
|
|
291
|
+
fontWeight: '500',
|
|
292
|
+
lineHeight: '130%'
|
|
293
|
+
});
|
|
294
|
+
nameRow.appendChild(nameSpan);
|
|
295
|
+
var sep = document.createElement('span');
|
|
296
|
+
sep.textContent = '|';
|
|
297
|
+
Object.assign(sep.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
|
|
298
|
+
flexShrink: '0'
|
|
299
|
+
}));
|
|
300
|
+
nameRow.appendChild(sep);
|
|
301
|
+
var posSpan = document.createElement('span');
|
|
302
|
+
posSpan.textContent = positionLine;
|
|
303
|
+
Object.assign(posSpan.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
|
|
304
|
+
flex: '0 1 auto',
|
|
305
|
+
minWidth: '0',
|
|
306
|
+
overflow: 'hidden',
|
|
307
|
+
textOverflow: 'ellipsis',
|
|
308
|
+
whiteSpace: 'nowrap'
|
|
309
|
+
}));
|
|
310
|
+
nameRow.appendChild(posSpan);
|
|
311
|
+
infoCol.appendChild(nameRow);
|
|
312
|
+
if (email) {
|
|
313
|
+
var emailSpan = document.createElement('span');
|
|
314
|
+
emailSpan.textContent = email;
|
|
315
|
+
Object.assign(emailSpan.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
|
|
316
|
+
whiteSpace: 'nowrap',
|
|
317
|
+
maxWidth: '100%',
|
|
318
|
+
overflow: 'hidden',
|
|
319
|
+
textOverflow: 'ellipsis'
|
|
320
|
+
}));
|
|
321
|
+
infoCol.appendChild(emailSpan);
|
|
322
|
+
}
|
|
323
|
+
row.appendChild(avatarWrap);
|
|
324
|
+
row.appendChild(infoCol);
|
|
325
|
+
tooltip.appendChild(row);
|
|
326
|
+
return tooltip;
|
|
327
|
+
};
|
|
105
328
|
|
|
106
329
|
/**
|
|
107
330
|
* Crea un `<span>` atómico listo para insertarse dentro del contenteditable
|
|
@@ -112,26 +335,45 @@ var EditableMentionChip = function EditableMentionChip(_ref) {
|
|
|
112
335
|
* `applyMentionChipStyles`, asegurando una única fuente de verdad visual.
|
|
113
336
|
*/
|
|
114
337
|
export var buildChipElement = function buildChipElement(mention) {
|
|
115
|
-
if (mention.type === 'skill') {
|
|
116
|
-
return buildSkillMentionChipElement(mention);
|
|
117
|
-
}
|
|
118
338
|
var chip = document.createElement('span');
|
|
119
339
|
chip.setAttribute('contenteditable', 'false');
|
|
120
340
|
chip.setAttribute('data-mention-chip', 'true');
|
|
121
341
|
chip.className = CONTEXT_MENTION_CHIP_CLASS;
|
|
122
342
|
chip.setAttribute('data-mention-type', mention.type);
|
|
123
343
|
chip.setAttribute('data-mention-surface', 'editor');
|
|
344
|
+
|
|
345
|
+
// Las skills se ven como los slash commands (texto plano `#nombre`), no como chip con fondo.
|
|
346
|
+
if (mention.type === 'skill') {
|
|
347
|
+
Object.assign(chip.style, SLASH_COMMAND_CHIP_BASE_STYLE, {
|
|
348
|
+
boxSizing: 'border-box',
|
|
349
|
+
maxWidth: '100%'
|
|
350
|
+
});
|
|
351
|
+
chip.textContent = normalizeContextMentionLabel(mention.label);
|
|
352
|
+
return chip;
|
|
353
|
+
}
|
|
124
354
|
applyMentionChipStyles(chip, mention.type);
|
|
125
|
-
|
|
355
|
+
var isTask = mention.type === 'task';
|
|
356
|
+
var common = {
|
|
126
357
|
boxSizing: 'border-box',
|
|
127
358
|
verticalAlign: 'baseline',
|
|
128
359
|
overflow: 'visible',
|
|
129
|
-
maxWidth: '100%'
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
360
|
+
maxWidth: '100%'
|
|
361
|
+
};
|
|
362
|
+
if (isTask) {
|
|
363
|
+
Object.assign(chip.style, common, {
|
|
364
|
+
lineHeight: '20px',
|
|
365
|
+
height: 'auto',
|
|
366
|
+
minHeight: 'auto',
|
|
367
|
+
maxHeight: 'none'
|
|
368
|
+
});
|
|
369
|
+
} else {
|
|
370
|
+
Object.assign(chip.style, common, {
|
|
371
|
+
lineHeight: '20px',
|
|
372
|
+
height: 'auto',
|
|
373
|
+
minHeight: 'auto',
|
|
374
|
+
maxHeight: 'none'
|
|
375
|
+
});
|
|
376
|
+
}
|
|
135
377
|
var mountNode = document.createElement('span');
|
|
136
378
|
mountNode.style.display = 'inline';
|
|
137
379
|
mountNode.style.maxWidth = '100%';
|
|
@@ -187,9 +429,7 @@ export var buildChipElement = function buildChipElement(mention) {
|
|
|
187
429
|
};
|
|
188
430
|
chip.addEventListener('mouseenter', function () {
|
|
189
431
|
if (tooltipEl) return;
|
|
190
|
-
tooltipEl =
|
|
191
|
-
return i18n.t(key, opts);
|
|
192
|
-
});
|
|
432
|
+
tooltipEl = createUserTooltipEl(mention);
|
|
193
433
|
var rect = chip.getBoundingClientRect();
|
|
194
434
|
var left = Math.max(8, Math.min(window.innerWidth - 300, rect.left));
|
|
195
435
|
tooltipEl.style.top = "".concat(rect.top, "px");
|
|
@@ -202,4 +442,4 @@ export var buildChipElement = function buildChipElement(mention) {
|
|
|
202
442
|
}
|
|
203
443
|
return chip;
|
|
204
444
|
};
|
|
205
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVFbGVtZW50IiwiZmx1c2hTeW5jIiwiY3JlYXRlUm9vdCIsImkxOG4iLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwiLCJvcGVuVGFza0luQ29yUGFuZWwiLCJhcHBseU1lbnRpb25DaGlwU3R5bGVzIiwiTUVOVElPTl9DSElQX0NPTE9SUyIsImJ1aWxkU2tpbGxNZW50aW9uQ2hpcEVsZW1lbnQiLCJidWlsZFVzZXJNZW50aW9uVG9vbHRpcEVsZW1lbnQiLCJzcGxpdExhYmVsRmlyc3RXb3JkIiwiRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUiLCJkaXNwbGF5IiwibGluZUhlaWdodCIsImFsaWduU2VsZiIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3dXcmFwIiwid29yZEJyZWFrIiwiRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImNvbG9yIiwiY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbCIsImlzVGFzayIsIm1lbnRpb25MYWJlbCIsInN0eWxlIiwiRWRpdGFibGVNZW50aW9uQ2hpcCIsIl9yZWYiLCJtZW50aW9uIiwibGFiZWwiLCJpY29uQ29sb3IiLCJ0eXBlIiwiZmciLCJpc1Byb2plY3QiLCJpY29uU2l6ZSIsImxhYmVsRWwiLCJvdXRlclN0eWxlIiwicG9zaXRpb24iLCJib3hTaXppbmciLCJ2ZXJ0aWNhbEFsaWduIiwiX3NwbGl0TGFiZWxGaXJzdFdvcmQiLCJmaXJzdFdvcmQiLCJyZXN0IiwibGVhZGluZ1N0eWxlIiwiYWxpZ25JdGVtcyIsImxlYWRpbmdXb3JkU3R5bGUiLCJfb2JqZWN0U3ByZWFkIiwicmVzdFN0eWxlIiwibWFyZ2luUmlnaHQiLCJ3aWR0aCIsImlkIiwiYnVpbGRDaGlwRWxlbWVudCIsImNoaXAiLCJkb2N1bWVudCIsInNldEF0dHJpYnV0ZSIsImNsYXNzTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsIm92ZXJmbG93IiwiaGVpZ2h0IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibW91bnROb2RlIiwiYXBwZW5kQ2hpbGQiLCJyb290IiwicmVuZGVyIiwiY3Vyc29yIiwib25jbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIndpbmRvdyIsIm9wZW4iLCJjb25jYXQiLCJ0b29sdGlwRWwiLCJjaGlwUmVtb3ZlZE9ic2VydmVyIiwicmVtb3ZlVXNlclRvb2x0aXAiLCJfY2hpcFJlbW92ZWRPYnNlcnZlciIsImRpc2Nvbm5lY3QiLCJyZW1vdmUiLCJ3YXRjaENoaXBSZW1vdmVkRnJvbURvbSIsIl9jaGlwUmVtb3ZlZE9ic2VydmVyMiIsInBhcmVudCIsInBhcmVudE5vZGUiLCJNdXRhdGlvbk9ic2VydmVyIiwiaXNDb25uZWN0ZWQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJrZXkiLCJvcHRzIiwidCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsZWZ0IiwiTWF0aCIsIm1heCIsIm1pbiIsImlubmVyV2lkdGgiLCJ0b3AiLCJ0cmFuc2Zvcm0iLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25DaGlwL2J1aWxkQ2hpcEVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgdHlwZSBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCdcbmltcG9ydCBpMThuIGZyb20gJy4uLy4uLy4uL2xhbmcnXG5pbXBvcnQgeyBDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUywgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGdldENvbnRleHRNZW50aW9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY29udGV4dE1lbnRpb25MYWJlbCdcbmltcG9ydCB7IG9wZW5UYXNrSW5Db3JQYW5lbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL29wZW5UYXNrSW5Db3JQYW5lbCdcbmltcG9ydCB7IGFwcGx5TWVudGlvbkNoaXBTdHlsZXMsIE1FTlRJT05fQ0hJUF9DT0xPUlMgfSBmcm9tICcuL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQge1xuICBidWlsZFNraWxsTWVudGlvbkNoaXBFbGVtZW50LFxuICBidWlsZFVzZXJNZW50aW9uVG9vbHRpcEVsZW1lbnQsXG4gIHNwbGl0TGFiZWxGaXJzdFdvcmQsXG59IGZyb20gJy4vYnVpbGRDaGlwRWxlbWVudC5oZWxwZXJzJ1xuXG5jb25zdCBFRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgYWxpZ25TZWxmOiAnYmFzZWxpbmUnLFxuICBtaW5XaWR0aDogMCxcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gIG92ZXJmbG93V3JhcDogJ2JyZWFrLXdvcmQnLFxuICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbn1cblxuLyoqIFRleHRvIGRlIHRhcmVhOiBzaW4gYm9yZGUgaW5mZXJpb3I7IGVsIGFzcGVjdG8gZGUgZW5sYWNlIGxvIGRhIGVsIENTUyBnbG9iYWwgKDo6YmVmb3JlICsgY29sb3IpLiAqL1xuY29uc3QgRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGZvbnRTaXplOiAnMTRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgZm9udFdlaWdodDogJzYwMCcsXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAwLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgb3ZlcmZsb3dXcmFwOiAnYnJlYWstd29yZCcsXG4gIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxufVxuXG5jb25zdCBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsID0gKGlzVGFzazogYm9vbGVhbiwgbWVudGlvbkxhYmVsOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFpc1Rhc2spIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFIH0sIG1lbnRpb25MYWJlbClcbiAgfVxuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX1RBU0tfTEFCRUxfU1RZTEUgfSwgbWVudGlvbkxhYmVsKVxufVxuXG50eXBlIEVkaXRhYmxlTWVudGlvbkNoaXBQcm9wcyA9IHtcbiAgbWVudGlvbjogQ29udGV4dE1lbnRpb25cbn1cblxuY29uc3QgRWRpdGFibGVNZW50aW9uQ2hpcCA9ICh7IG1lbnRpb24gfTogRWRpdGFibGVNZW50aW9uQ2hpcFByb3BzKSA9PiB7XG4gIGNvbnN0IG1lbnRpb25MYWJlbCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobWVudGlvbi5sYWJlbClcbiAgY29uc3QgaWNvbkNvbG9yID0gTUVOVElPTl9DSElQX0NPTE9SU1ttZW50aW9uLnR5cGVdLmZnXG4gIGNvbnN0IGlzVGFzayA9IG1lbnRpb24udHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGlzUHJvamVjdCA9IG1lbnRpb24udHlwZSA9PT0gJ3Byb2plY3QnXG4gIGNvbnN0IGljb25TaXplID0gaXNUYXNrID8gMTYgOiAxNFxuICBjb25zdCBsYWJlbEVsID0gY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbChpc1Rhc2ssIG1lbnRpb25MYWJlbClcblxuICBjb25zdCBvdXRlclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnYmFzZWxpbmUnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH1cblxuICBpZiAoaXNUYXNrIHx8IGlzUHJvamVjdCkge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogb3V0ZXJTdHlsZSB9LCBsYWJlbEVsKVxuICB9XG5cbiAgY29uc3QgeyBmaXJzdFdvcmQsIHJlc3QgfSA9IHNwbGl0TGFiZWxGaXJzdFdvcmQobWVudGlvbkxhYmVsKVxuICBjb25zdCBsZWFkaW5nU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICB9XG4gIGNvbnN0IGxlYWRpbmdXb3JkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIH1cbiAgY29uc3QgcmVzdFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLkVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgJ3NwYW4nLFxuICAgIHsgc3R5bGU6IG91dGVyU3R5bGUgfSxcbiAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgJ3NwYW4nLFxuICAgICAgeyBzdHlsZTogbGVhZGluZ1N0eWxlIH0sXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3BhbicsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnMnB4JyxcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICcxJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTRweCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q29udGV4dE1lbnRpb25JY29uKG1lbnRpb24udHlwZSwgaWNvbkNvbG9yLCBtZW50aW9uLmlkLCBpY29uU2l6ZSlcbiAgICAgICksXG4gICAgICBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogbGVhZGluZ1dvcmRTdHlsZSB9LCBmaXJzdFdvcmQpXG4gICAgKSxcbiAgICByZXN0ID8gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IHJlc3RTdHlsZSB9LCByZXN0KSA6IG51bGxcbiAgKVxufVxuXG4vKipcbiAqIENyZWEgdW4gYDxzcGFuPmAgYXTDs21pY28gbGlzdG8gcGFyYSBpbnNlcnRhcnNlIGRlbnRybyBkZWwgY29udGVudGVkaXRhYmxlXG4gKiBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yYC4gU2UgbWFyY2EgY29uIGxvcyBgZGF0YS1tZW50aW9uKmAgbmVjZXNhcmlvcyBwYXJhXG4gKiBxdWUgYHVzZUNvbnRleHRNZW50aW9ucy5zZXJpYWxpemUoKWAgcHVlZGEgdm9sdmVyIGEgZXh0cmFlciBsYSBtZW50aW9uLlxuICpcbiAqIENvbXBhcnRlIGxvcyBlc3RpbG9zIGNvbiBlbCBjb21wb25lbnRlIGBDb250ZXh0TWVudGlvbkNoaXBgIHZpYVxuICogYGFwcGx5TWVudGlvbkNoaXBTdHlsZXNgLCBhc2VndXJhbmRvIHVuYSDDum5pY2EgZnVlbnRlIGRlIHZlcmRhZCB2aXN1YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZENoaXBFbGVtZW50ID0gKG1lbnRpb246IENvbnRleHRNZW50aW9uKTogSFRNTFNwYW5FbGVtZW50ID0+IHtcbiAgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3NraWxsJykge1xuICAgIHJldHVybiBidWlsZFNraWxsTWVudGlvbkNoaXBFbGVtZW50KG1lbnRpb24pXG4gIH1cblxuICBjb25zdCBjaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIGNoaXAuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWNoaXAnLCAndHJ1ZScpXG4gIGNoaXAuY2xhc3NOYW1lID0gQ09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1NcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJywgbWVudGlvbi50eXBlKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLXN1cmZhY2UnLCAnZWRpdG9yJylcblxuICBhcHBseU1lbnRpb25DaGlwU3R5bGVzKGNoaXAsIG1lbnRpb24udHlwZSlcbiAgT2JqZWN0LmFzc2lnbihjaGlwLnN0eWxlLCB7XG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgdmVydGljYWxBbGlnbjogJ2Jhc2VsaW5lJyxcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgbGluZUhlaWdodDogJzIwcHgnLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIG1pbkhlaWdodDogJ2F1dG8nLFxuICAgIG1heEhlaWdodDogJ25vbmUnLFxuICB9KVxuICBjb25zdCBtb3VudE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgbW91bnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJ1xuICBtb3VudE5vZGUuc3R5bGUubWF4V2lkdGggPSAnMTAwJSdcbiAgbW91bnROb2RlLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnYmFzZWxpbmUnXG4gIG1vdW50Tm9kZS5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgY2hpcC5hcHBlbmRDaGlsZChtb3VudE5vZGUpXG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KG1vdW50Tm9kZSlcblxuICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgIHJvb3QucmVuZGVyKGNyZWF0ZUVsZW1lbnQoRWRpdGFibGVNZW50aW9uQ2hpcCwgeyBtZW50aW9uIH0pKVxuICB9KVxuXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICd0YXNrJykge1xuICAgIGNoaXAuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInXG4gICAgY2hpcC5vbmNsaWNrID0gZSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIG9wZW5UYXNrSW5Db3JQYW5lbChtZW50aW9uLmlkLCAnZGV0YWlsJylcbiAgICB9XG4gIH0gZWxzZSBpZiAobWVudGlvbi50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICBjaGlwLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJ1xuICAgIGNoaXAub25jbGljayA9IGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB3aW5kb3cub3BlbihgL3Byb2plY3RzLyR7bWVudGlvbi5pZH0vZGFzaGJvYXJkYCwgJ19ibGFuaycpXG4gICAgfVxuICB9IGVsc2UgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICAgIGxldCBjaGlwUmVtb3ZlZE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHJlbW92ZVVzZXJUb29sdGlwID0gKCkgPT4ge1xuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbnVsbFxuICAgICAgaWYgKHRvb2x0aXBFbCkge1xuICAgICAgICB0b29sdGlwRWwucmVtb3ZlKClcbiAgICAgICAgdG9vbHRpcEVsID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTaSBlbCBjaGlwIHNlIGJvcnJhIGRlbCBlZGl0b3IgKEJhY2tzcGFjZSwgZXRjLikgbm8gc2llbXByZSBoYXkgYG1vdXNlbGVhdmVgOyBjZXJyYXIgZWwgdG9vbHRpcC4gKi9cbiAgICBjb25zdCB3YXRjaENoaXBSZW1vdmVkRnJvbURvbSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaXAucGFyZW50Tm9kZVxuICAgICAgaWYgKCFwYXJlbnQpIHJldHVyblxuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoIWNoaXAuaXNDb25uZWN0ZWQpIHJlbW92ZVVzZXJUb29sdGlwKClcbiAgICAgIH0pXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGNoaXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIGlmICh0b29sdGlwRWwpIHJldHVyblxuICAgICAgdG9vbHRpcEVsID0gYnVpbGRVc2VyTWVudGlvblRvb2x0aXBFbGVtZW50KG1lbnRpb24sIChrZXksIG9wdHMpID0+IGkxOG4udChrZXksIG9wdHMpKVxuICAgICAgY29uc3QgcmVjdCA9IGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIDMwMCwgcmVjdC5sZWZ0KSlcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gNHB4KSknXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBFbClcbiAgICAgIHdhdGNoQ2hpcFJlbW92ZWRGcm9tRG9tKClcbiAgICB9KVxuXG4gICAgY2hpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgcmVtb3ZlVXNlclRvb2x0aXApXG4gIH1cblxuICByZXR1cm4gY2hpcFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxhQUFhLFFBQTRCLE9BQU87QUFDekQsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBU0MsVUFBVSxRQUFRLGtCQUFrQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sZUFBZTtBQUNoQyxTQUFTQywwQkFBMEIsUUFBd0IsK0JBQStCO0FBQzFGLFNBQVNDLHFCQUFxQixRQUFRLG9DQUFvQztBQUMxRSxTQUFTQyw0QkFBNEIsUUFBUSxvQ0FBb0M7QUFDakYsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBQ3RFLFNBQVNDLHNCQUFzQixFQUFFQyxtQkFBbUIsUUFBUSw2QkFBNkI7QUFDekYsU0FDRUMsNEJBQTRCLEVBQzVCQyw4QkFBOEIsRUFDOUJDLG1CQUFtQixRQUNkLDRCQUE0QjtBQUVuQyxJQUFNQyw2QkFBNEMsR0FB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
|
|
445
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVFbGVtZW50IiwiZmx1c2hTeW5jIiwiY3JlYXRlUm9vdCIsImkxOG4iLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwiLCJvcGVuVGFza0luQ29yUGFuZWwiLCJTTEFTSF9DT01NQU5EX0NISVBfQkFTRV9TVFlMRSIsImFwcGx5TWVudGlvbkNoaXBTdHlsZXMiLCJNRU5USU9OX0NISVBfQ09MT1JTIiwiRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUiLCJkaXNwbGF5IiwibGluZUhlaWdodCIsImFsaWduU2VsZiIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3dXcmFwIiwid29yZEJyZWFrIiwiRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImNvbG9yIiwiY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbCIsImlzVGFzayIsIm1lbnRpb25MYWJlbCIsInN0eWxlIiwic3BsaXRMYWJlbEZpcnN0V29yZCIsImxhYmVsIiwibm9ybWFsaXplZCIsInRyaW0iLCJmaXJzdFdvcmQiLCJyZXN0IiwiZmlyc3RXaGl0ZXNwYWNlSWR4Iiwic2VhcmNoIiwic2xpY2UiLCJFZGl0YWJsZU1lbnRpb25DaGlwIiwiX3JlZiIsIm1lbnRpb24iLCJpY29uQ29sb3IiLCJ0eXBlIiwiZmciLCJpc1Byb2plY3QiLCJpY29uU2l6ZSIsImxhYmVsRWwiLCJvdXRlclN0eWxlIiwicG9zaXRpb24iLCJib3hTaXppbmciLCJ2ZXJ0aWNhbEFsaWduIiwiX3NwbGl0TGFiZWxGaXJzdFdvcmQiLCJsZWFkaW5nU3R5bGUiLCJhbGlnbkl0ZW1zIiwibGVhZGluZ1dvcmRTdHlsZSIsIl9vYmplY3RTcHJlYWQiLCJyZXN0U3R5bGUiLCJtYXJnaW5SaWdodCIsIndpZHRoIiwiaWQiLCJpbml0aWFsc0Zyb21OYW1lIiwibmFtZSIsIl9wYXJ0cyQyIiwidHJpbW1lZCIsInBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibGVuZ3RoIiwiX3BhcnRzJDAkY2hhckF0IiwiX3BhcnRzJCIsIl9wYXJ0cyRjaGFyQXQiLCJfcGFydHMiLCJmaXJzdCIsImNoYXJBdCIsImxhc3QiLCJjb25jYXQiLCJ0b1VwcGVyQ2FzZSIsInNpbmdsZSIsIlRPT0xUSVBfRk9OVCIsIlRPT0xUSVBfU0VDT05EQVJZX0NPTE9SIiwiVE9PTFRJUF9TRUNPTkRBUllfU1RZTEUiLCJmb250RmFtaWx5Iiwibm9ybWFsaXplVHJpbW1lZFN0cmluZyIsInZhbHVlIiwiVVNFUl9UT09MVElQX01JTl9XSURUSF9QWCIsIlVTRVJfVE9PTFRJUF9QQURfWF9QWCIsIlVTRVJfVE9PTFRJUF9BVkFUQVJfR0FQX1BYIiwiVVNFUl9UT09MVElQX05BTUVfUk9XX01BWF9QWCIsIlVTRVJfVE9PTFRJUF9OQU1FX01BWF9XSURUSF9QWCIsIk1hdGgiLCJmbG9vciIsImNyZWF0ZVVzZXJUb29sdGlwRWwiLCJtZXRhZGF0YSIsInBpY3R1cmUiLCJwb3NpdGlvbk5hbWUiLCJwb3NpdGlvbkxpbmUiLCJ0IiwiZGVmYXVsdFZhbHVlIiwiZW1haWwiLCJtZXRhZGF0YU5hbWUiLCJuYW1lRm9ySW5pdGlhbHMiLCJ0b29sdGlwIiwiZG9jdW1lbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJ6SW5kZXgiLCJwYWRkaW5nIiwiZmxleERpcmVjdGlvbiIsImJvcmRlclJhZGl1cyIsImJvcmRlciIsImJhY2tncm91bmQiLCJib3hTaGFkb3ciLCJwb2ludGVyRXZlbnRzIiwib3ZlcmZsb3ciLCJyb3ciLCJnYXAiLCJhdmF0YXJXcmFwIiwiaGVpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJmbGV4U2hyaW5rIiwiaW5pdGlhbHMiLCJjcmVhdGVJbml0aWFsc0ZhbGxiYWNrIiwiZmIiLCJ0ZXh0Q29udGVudCIsImltZyIsInNyYyIsImFsdCIsImRyYWdnYWJsZSIsIm9iamVjdEZpdCIsIm9uZXJyb3IiLCJyZW1vdmUiLCJhcHBlbmRDaGlsZCIsImluZm9Db2wiLCJuYW1lUm93IiwibmFtZVNwYW4iLCJmbGV4IiwidGV4dE92ZXJmbG93Iiwic2VwIiwicG9zU3BhbiIsImVtYWlsU3BhbiIsImJ1aWxkQ2hpcEVsZW1lbnQiLCJjaGlwIiwic2V0QXR0cmlidXRlIiwiY2xhc3NOYW1lIiwiY29tbW9uIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibW91bnROb2RlIiwicm9vdCIsInJlbmRlciIsImN1cnNvciIsIm9uY2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ3aW5kb3ciLCJvcGVuIiwidG9vbHRpcEVsIiwiY2hpcFJlbW92ZWRPYnNlcnZlciIsInJlbW92ZVVzZXJUb29sdGlwIiwiX2NoaXBSZW1vdmVkT2JzZXJ2ZXIiLCJkaXNjb25uZWN0Iiwid2F0Y2hDaGlwUmVtb3ZlZEZyb21Eb20iLCJfY2hpcFJlbW92ZWRPYnNlcnZlcjIiLCJwYXJlbnQiLCJwYXJlbnROb2RlIiwiTXV0YXRpb25PYnNlcnZlciIsImlzQ29ubmVjdGVkIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxlZnQiLCJtYXgiLCJtaW4iLCJpbm5lcldpZHRoIiwidG9wIiwidHJhbnNmb3JtIiwiYm9keSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uQ2hpcC9idWlsZENoaXBFbGVtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnXG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi9sYW5nJ1xuaW1wb3J0IHsgQ09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1MsIENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uTGFiZWwnXG5pbXBvcnQgeyBvcGVuVGFza0luQ29yUGFuZWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9vcGVuVGFza0luQ29yUGFuZWwnXG5pbXBvcnQgeyBTTEFTSF9DT01NQU5EX0NISVBfQkFTRV9TVFlMRSB9IGZyb20gJy4uL1NsYXNoQ29tbWFuZENoaXAvU2xhc2hDb21tYW5kQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBhcHBseU1lbnRpb25DaGlwU3R5bGVzLCBNRU5USU9OX0NISVBfQ09MT1JTIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkNoaXAuc3R5bGVzJ1xuXG5jb25zdCBFRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgYWxpZ25TZWxmOiAnYmFzZWxpbmUnLFxuICBtaW5XaWR0aDogMCxcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gIG92ZXJmbG93V3JhcDogJ2JyZWFrLXdvcmQnLFxuICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbn1cblxuLyoqIFRleHRvIGRlIHRhcmVhOiBzaW4gYm9yZGUgaW5mZXJpb3I7IGVsIGFzcGVjdG8gZGUgZW5sYWNlIGxvIGRhIGVsIENTUyBnbG9iYWwgKDo6YmVmb3JlICsgY29sb3IpLiAqL1xuY29uc3QgRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGZvbnRTaXplOiAnMTRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgZm9udFdlaWdodDogJzYwMCcsXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAwLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgb3ZlcmZsb3dXcmFwOiAnYnJlYWstd29yZCcsXG4gIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxufVxuXG5jb25zdCBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsID0gKGlzVGFzazogYm9vbGVhbiwgbWVudGlvbkxhYmVsOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFpc1Rhc2spIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFIH0sIG1lbnRpb25MYWJlbClcbiAgfVxuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX1RBU0tfTEFCRUxfU1RZTEUgfSwgbWVudGlvbkxhYmVsKVxufVxuXG5jb25zdCBzcGxpdExhYmVsRmlyc3RXb3JkID0gKGxhYmVsOiBzdHJpbmcpOiB7IGZpcnN0V29yZDogc3RyaW5nOyByZXN0OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYWJlbC50cmltKClcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4geyBmaXJzdFdvcmQ6ICcnLCByZXN0OiAnJyB9XG4gIGNvbnN0IGZpcnN0V2hpdGVzcGFjZUlkeCA9IG5vcm1hbGl6ZWQuc2VhcmNoKC9cXHMvKVxuICBpZiAoZmlyc3RXaGl0ZXNwYWNlSWR4IDwgMCkgcmV0dXJuIHsgZmlyc3RXb3JkOiBub3JtYWxpemVkLCByZXN0OiAnJyB9XG4gIHJldHVybiB7XG4gICAgZmlyc3RXb3JkOiBub3JtYWxpemVkLnNsaWNlKDAsIGZpcnN0V2hpdGVzcGFjZUlkeCksXG4gICAgcmVzdDogbm9ybWFsaXplZC5zbGljZShmaXJzdFdoaXRlc3BhY2VJZHgpLFxuICB9XG59XG5cbnR5cGUgRWRpdGFibGVNZW50aW9uQ2hpcFByb3BzID0ge1xuICBtZW50aW9uOiBDb250ZXh0TWVudGlvblxufVxuXG5jb25zdCBFZGl0YWJsZU1lbnRpb25DaGlwID0gKHsgbWVudGlvbiB9OiBFZGl0YWJsZU1lbnRpb25DaGlwUHJvcHMpID0+IHtcbiAgY29uc3QgbWVudGlvbkxhYmVsID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChtZW50aW9uLmxhYmVsKVxuICBjb25zdCBpY29uQ29sb3IgPSBNRU5USU9OX0NISVBfQ09MT1JTW21lbnRpb24udHlwZV0uZmdcbiAgY29uc3QgaXNUYXNrID0gbWVudGlvbi50eXBlID09PSAndGFzaydcbiAgY29uc3QgaXNQcm9qZWN0ID0gbWVudGlvbi50eXBlID09PSAncHJvamVjdCdcbiAgY29uc3QgaWNvblNpemUgPSBpc1Rhc2sgPyAxNiA6IDE0XG4gIGNvbnN0IGxhYmVsRWwgPSBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsKGlzVGFzaywgbWVudGlvbkxhYmVsKVxuXG4gIGNvbnN0IG91dGVyU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgbGluZUhlaWdodDogJzIwcHgnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdiYXNlbGluZScsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfVxuXG4gIGlmIChpc1Rhc2sgfHwgaXNQcm9qZWN0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7IHN0eWxlOiBvdXRlclN0eWxlIH0sIGxhYmVsRWwpXG4gIH1cblxuICBjb25zdCB7IGZpcnN0V29yZCwgcmVzdCB9ID0gc3BsaXRMYWJlbEZpcnN0V29yZChtZW50aW9uTGFiZWwpXG4gIGNvbnN0IGxlYWRpbmdTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH1cbiAgY29uc3QgbGVhZGluZ1dvcmRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICAuLi5FRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRSxcbiAgICBkaXNwbGF5OiAnaW5saW5lJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfVxuICBjb25zdCByZXN0U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIH1cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAnc3BhbicsXG4gICAgeyBzdHlsZTogb3V0ZXJTdHlsZSB9LFxuICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAnc3BhbicsXG4gICAgICB7IHN0eWxlOiBsZWFkaW5nU3R5bGUgfSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICcycHgnLFxuICAgICAgICAgICAgbGluZUhlaWdodDogJzEnLFxuICAgICAgICAgICAgd2lkdGg6ICcxNHB4JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBnZXRDb250ZXh0TWVudGlvbkljb24obWVudGlvbi50eXBlLCBpY29uQ29sb3IsIG1lbnRpb24uaWQsIGljb25TaXplKVxuICAgICAgKSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7IHN0eWxlOiBsZWFkaW5nV29yZFN0eWxlIH0sIGZpcnN0V29yZClcbiAgICApLFxuICAgIHJlc3QgPyBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogcmVzdFN0eWxlIH0sIHJlc3QpIDogbnVsbFxuICApXG59XG5cbmNvbnN0IGluaXRpYWxzRnJvbU5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IG5hbWUudHJpbSgpXG4gIGlmICghdHJpbW1lZCkgcmV0dXJuICc/J1xuICBjb25zdCBwYXJ0cyA9IHRyaW1tZWQuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbilcbiAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgY29uc3QgZmlyc3QgPSBwYXJ0c1swXT8uY2hhckF0KDApID8/ICcnXG4gICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdPy5jaGFyQXQoMCkgPz8gJydcbiAgICByZXR1cm4gYCR7Zmlyc3R9JHtsYXN0fWAudG9VcHBlckNhc2UoKVxuICB9XG4gIGNvbnN0IHNpbmdsZSA9IHBhcnRzWzBdID8/ICcnXG4gIHJldHVybiBzaW5nbGUubGVuZ3RoID49IDIgPyBzaW5nbGUuc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKSA6IChzaW5nbGUuY2hhckF0KDApIHx8ICc/JykudG9VcHBlckNhc2UoKVxufVxuXG5jb25zdCBUT09MVElQX0ZPTlQgPSBgdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKWBcbmNvbnN0IFRPT0xUSVBfU0VDT05EQVJZX0NPTE9SID0gJ3ZhcigtLVRleHQtU2Vjb25kYXJ5LURhcmssICM2NjYpJ1xuY29uc3QgVE9PTFRJUF9TRUNPTkRBUllfU1RZTEUgPSB7XG4gIGZvbnRGYW1pbHk6IFRPT0xUSVBfRk9OVCxcbiAgZm9udFNpemU6ICcxNHB4JyxcbiAgZm9udFdlaWdodDogJzQwMCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgY29sb3I6IFRPT0xUSVBfU0VDT05EQVJZX0NPTE9SLFxufVxuXG5jb25zdCBub3JtYWxpemVUcmltbWVkU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAnJ1xuICByZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKiBBbmNobyBtw61uaW1vIGRlbCB0b29sdGlwIChpbmNsLiBwYWRkaW5nIGhvcml6b250YWwgOCs4KS4gKi9cbmNvbnN0IFVTRVJfVE9PTFRJUF9NSU5fV0lEVEhfUFggPSAyOTJcbi8qKiBQYWRkaW5nIGhvcml6b250YWwgdG90YWwgZGVsIHRvb2x0aXAuICovXG5jb25zdCBVU0VSX1RPT0xUSVBfUEFEX1hfUFggPSAxNlxuLyoqIEF2YXRhciAyNHB4ICsgZ2FwIDhweCByZXNwZWN0byBhIGxhIGNvbHVtbmEgZGUgdGV4dG8uICovXG5jb25zdCBVU0VSX1RPT0xUSVBfQVZBVEFSX0dBUF9QWCA9IDMyXG4vKipcbiAqIEFuY2hvIG3DoXhpbW8gZGUgbGEgZmlsYSBub21icmUgfCBwb3NpY2nDs246IG1pc21vIGh1ZWNvIHF1ZSBjb24gdG9vbHRpcCBmaWpvIDI5MnB4LFxuICogcGFyYSBxdWUgc29sbyBlbCBlbWFpbCBlbnNhbmNoZSBlbCBjb250ZW5lZG9yLlxuICovXG5jb25zdCBVU0VSX1RPT0xUSVBfTkFNRV9ST1dfTUFYX1BYID0gVVNFUl9UT09MVElQX01JTl9XSURUSF9QWCAtIFVTRVJfVE9PTFRJUF9QQURfWF9QWCAtIFVTRVJfVE9PTFRJUF9BVkFUQVJfR0FQX1BYXG4vKipcbiAqIFRvcGUgZGUgYW5jaG8gZGVsIG5vbWJyZSBlbiBsYSBmaWxhOiBwb3IgZGViYWpvIGRlbCBtw6F4aW1vIGRlIGZpbGEgcGFyYSBxdWUgZWwgZWxsaXBzaXNcbiAqIGRlbCBub21icmUgYXBhcmV6Y2EgYW50ZXMgeSBxdWVkZSBtw6FzIGVzcGFjaW8gdmlzaWJsZSBwYXJhIHBvc2ljacOzbi9jYXJnby5cbiAqL1xuY29uc3QgVVNFUl9UT09MVElQX05BTUVfTUFYX1dJRFRIX1BYID0gTWF0aC5mbG9vcihVU0VSX1RPT0xUSVBfTkFNRV9ST1dfTUFYX1BYICogMC40MilcblxuY29uc3QgY3JlYXRlVXNlclRvb2x0aXBFbCA9IChtZW50aW9uOiBDb250ZXh0TWVudGlvbik6IEhUTUxFbGVtZW50ID0+IHtcbiAgY29uc3QgeyBsYWJlbCwgbWV0YWRhdGEgfSA9IG1lbnRpb25cbiAgY29uc3QgcGljdHVyZSA9IHR5cGVvZiBtZXRhZGF0YT8ucGljdHVyZSA9PT0gJ3N0cmluZycgPyBtZXRhZGF0YS5waWN0dXJlIDogbnVsbFxuICBjb25zdCBwb3NpdGlvbk5hbWUgPSBub3JtYWxpemVUcmltbWVkU3RyaW5nKG1ldGFkYXRhPy5wb3NpdGlvbk5hbWUpXG4gIGNvbnN0IHBvc2l0aW9uTGluZSA9XG4gICAgcG9zaXRpb25OYW1lIHx8XG4gICAgaTE4bi50KCdjb250ZXh0TWVudGlvbi51c2VyTm9Qb3NpdGlvbicsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ1NpbiBwb3NpY2nDs24nLFxuICAgIH0pXG4gIGNvbnN0IGVtYWlsID0gbm9ybWFsaXplVHJpbW1lZFN0cmluZyhtZXRhZGF0YT8uZW1haWwpXG4gIC8qKiBNaXNtYSBmdWVudGUgcXVlIGBDb250ZXh0TWVudGlvbkl0ZW1gIChhdmF0YXIpOiBub21icmUgZGUgcXVlcnksIG5vIGVsIGxhYmVsIGRlbCBjaGlwIChlai4gXCJZb1wiKS4gKi9cbiAgY29uc3QgbWV0YWRhdGFOYW1lID0gbm9ybWFsaXplVHJpbW1lZFN0cmluZyhtZXRhZGF0YT8ubmFtZSlcbiAgY29uc3QgbmFtZUZvckluaXRpYWxzID0gKG1ldGFkYXRhTmFtZSB8fCBub3JtYWxpemVUcmltbWVkU3RyaW5nKGxhYmVsKSB8fCAnPycpLnRyaW0oKVxuXG4gIGNvbnN0IHRvb2x0aXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBPYmplY3QuYXNzaWduKHRvb2x0aXAuc3R5bGUsIHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB6SW5kZXg6ICc5OTk5JyxcbiAgICBtaW5XaWR0aDogYCR7VVNFUl9UT09MVElQX01JTl9XSURUSF9QWH1weGAsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6ICdtaW4oNTYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSknLFxuICAgIHBhZGRpbmc6ICcxMnB4IDhweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCB2YXIoLS1Db2xvci1MaWdodC1HcmF5LCAjRTBFMEUwKScsXG4gICAgYmFja2dyb3VuZDogJyNGRkYnLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4wOCksIDAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4wNCknLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIH0pXG5cbiAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihyb3cuc3R5bGUsIHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICB3aWR0aDogJ21heC1jb250ZW50JyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gIH0pXG5cbiAgLy8gQXZhdGFyIGNpcmN1bGFyIChmb3RvIG8gaW5pY2lhbGVzKVxuICBjb25zdCBhdmF0YXJXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihhdmF0YXJXcmFwLnN0eWxlLCB7XG4gICAgd2lkdGg6ICcyNHB4JyxcbiAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICBtaW5XaWR0aDogJzI0cHgnLFxuICAgIGJvcmRlclJhZGl1czogJzI0cHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIC8qKiBNaXNtbyBmb25kbyBxdWUgYFNDTVVzZXJBdmF0YXJGYWxsYmFja2AgZW4gbGEgZmlsYSBkZSB1c3VhcmlvIGRlbCBtb2RhbC4gKi9cbiAgICBiYWNrZ3JvdW5kOiAndmFyKC0tY29yLWNvbG9yLWdyZXktMjAwLCAjZTBlMGUwKScsXG4gICAgZmxleFNocmluazogJzAnLFxuICB9KVxuXG4gIGNvbnN0IGluaXRpYWxzID0gaW5pdGlhbHNGcm9tTmFtZShuYW1lRm9ySW5pdGlhbHMpXG5cbiAgY29uc3QgY3JlYXRlSW5pdGlhbHNGYWxsYmFjayA9ICgpOiBIVE1MRWxlbWVudCA9PiB7XG4gICAgY29uc3QgZmIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICBmYi50ZXh0Q29udGVudCA9IGluaXRpYWxzXG4gICAgT2JqZWN0LmFzc2lnbihmYi5zdHlsZSwge1xuICAgICAgZm9udFNpemU6ICcxMHB4JyxcbiAgICAgIGZvbnRXZWlnaHQ6ICc2MDAnLFxuICAgICAgLyoqIE1pc21vIGNvbG9yIHF1ZSBgU0NNVXNlckF2YXRhckZhbGxiYWNrYCBlbiBsYSBmaWxhIGRlIHVzdWFyaW8gZGVsIG1vZGFsLiAqL1xuICAgICAgY29sb3I6ICd2YXIoLS1jb3ItY29sb3ItdGV4dC1zZWNvbmRhcnksICM2NjYpJyxcbiAgICAgIGxpbmVIZWlnaHQ6ICcxJyxcbiAgICAgIGZvbnRGYW1pbHk6IFRPT0xUSVBfRk9OVCxcbiAgICB9KVxuICAgIHJldHVybiBmYlxuICB9XG5cbiAgaWYgKHBpY3R1cmUpIHtcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKVxuICAgIGltZy5zcmMgPSBwaWN0dXJlXG4gICAgaW1nLmFsdCA9ICcnXG4gICAgaW1nLmRyYWdnYWJsZSA9IGZhbHNlXG4gICAgT2JqZWN0LmFzc2lnbihpbWcuc3R5bGUsIHtcbiAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgICB9KVxuICAgIGltZy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgaW1nLnJlbW92ZSgpXG4gICAgICBhdmF0YXJXcmFwLmFwcGVuZENoaWxkKGNyZWF0ZUluaXRpYWxzRmFsbGJhY2soKSlcbiAgICB9XG4gICAgYXZhdGFyV3JhcC5hcHBlbmRDaGlsZChpbWcpXG4gIH0gZWxzZSB7XG4gICAgYXZhdGFyV3JhcC5hcHBlbmRDaGlsZChjcmVhdGVJbml0aWFsc0ZhbGxiYWNrKCkpXG4gIH1cblxuICAvLyBDb2x1bW5hIGRlIGluZm86IGFuY2hvID0gbWF4KGZpbGEgbm9tYnJlLCBlbWFpbCk7IHNpbiBmb3J6YXIgMjQ0cHggc2kgZWwgY29udGVuaWRvIGVzIG3DoXMgY29ydG8uXG4gIGNvbnN0IGluZm9Db2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBPYmplY3QuYXNzaWduKGluZm9Db2wuc3R5bGUsIHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBnYXA6ICcycHgnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfSlcblxuICAvLyBGaWxhOiBub21icmUgfCBwb3NpY2nDs24g4oCUIG1heC1jb250ZW50IHBhcmEgbm8gZGVqYXIgaHVlY28gZW50cmUgbm9tYnJlIGNvcnRvIHkgZWwgcGlwZSAoZXZpdGFyIGZsZXggNTAvNTApLlxuICBjb25zdCBuYW1lUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihuYW1lUm93LnN0eWxlLCB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBnYXA6ICc0cHgnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6IGAke1VTRVJfVE9PTFRJUF9OQU1FX1JPV19NQVhfUFh9cHhgLFxuICB9KVxuXG4gIGNvbnN0IG5hbWVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIG5hbWVTcGFuLnRleHRDb250ZW50ID0gbGFiZWxcbiAgT2JqZWN0LmFzc2lnbihuYW1lU3Bhbi5zdHlsZSwge1xuICAgIGZsZXg6ICcwIDEgYXV0bycsXG4gICAgbWluV2lkdGg6ICcwJyxcbiAgICBtYXhXaWR0aDogYCR7VVNFUl9UT09MVElQX05BTUVfTUFYX1dJRFRIX1BYfXB4YCxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIGNvbG9yOiAndmFyKC0tVGV4dC1QcmltYXJ5LURhcmssICMyMDIwMUYpJyxcbiAgICBmb250RmFtaWx5OiBUT09MVElQX0ZPTlQsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICBsaW5lSGVpZ2h0OiAnMTMwJScsXG4gIH0pXG4gIG5hbWVSb3cuYXBwZW5kQ2hpbGQobmFtZVNwYW4pXG5cbiAgY29uc3Qgc2VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIHNlcC50ZXh0Q29udGVudCA9ICd8J1xuICBPYmplY3QuYXNzaWduKHNlcC5zdHlsZSwgeyAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSwgZmxleFNocmluazogJzAnIH0pXG4gIG5hbWVSb3cuYXBwZW5kQ2hpbGQoc2VwKVxuXG4gIGNvbnN0IHBvc1NwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgcG9zU3Bhbi50ZXh0Q29udGVudCA9IHBvc2l0aW9uTGluZVxuICBPYmplY3QuYXNzaWduKHBvc1NwYW4uc3R5bGUsIHtcbiAgICAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSxcbiAgICBmbGV4OiAnMCAxIGF1dG8nLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfSlcbiAgbmFtZVJvdy5hcHBlbmRDaGlsZChwb3NTcGFuKVxuXG4gIGluZm9Db2wuYXBwZW5kQ2hpbGQobmFtZVJvdylcblxuICBpZiAoZW1haWwpIHtcbiAgICBjb25zdCBlbWFpbFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICBlbWFpbFNwYW4udGV4dENvbnRlbnQgPSBlbWFpbFxuICAgIE9iamVjdC5hc3NpZ24oZW1haWxTcGFuLnN0eWxlLCB7XG4gICAgICAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSxcbiAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB9KVxuICAgIGluZm9Db2wuYXBwZW5kQ2hpbGQoZW1haWxTcGFuKVxuICB9XG5cbiAgcm93LmFwcGVuZENoaWxkKGF2YXRhcldyYXApXG4gIHJvdy5hcHBlbmRDaGlsZChpbmZvQ29sKVxuICB0b29sdGlwLmFwcGVuZENoaWxkKHJvdylcblxuICByZXR1cm4gdG9vbHRpcFxufVxuXG4vKipcbiAqIENyZWEgdW4gYDxzcGFuPmAgYXTDs21pY28gbGlzdG8gcGFyYSBpbnNlcnRhcnNlIGRlbnRybyBkZWwgY29udGVudGVkaXRhYmxlXG4gKiBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yYC4gU2UgbWFyY2EgY29uIGxvcyBgZGF0YS1tZW50aW9uKmAgbmVjZXNhcmlvcyBwYXJhXG4gKiBxdWUgYHVzZUNvbnRleHRNZW50aW9ucy5zZXJpYWxpemUoKWAgcHVlZGEgdm9sdmVyIGEgZXh0cmFlciBsYSBtZW50aW9uLlxuICpcbiAqIENvbXBhcnRlIGxvcyBlc3RpbG9zIGNvbiBlbCBjb21wb25lbnRlIGBDb250ZXh0TWVudGlvbkNoaXBgIHZpYVxuICogYGFwcGx5TWVudGlvbkNoaXBTdHlsZXNgLCBhc2VndXJhbmRvIHVuYSDDum5pY2EgZnVlbnRlIGRlIHZlcmRhZCB2aXN1YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZENoaXBFbGVtZW50ID0gKG1lbnRpb246IENvbnRleHRNZW50aW9uKTogSFRNTFNwYW5FbGVtZW50ID0+IHtcbiAgY29uc3QgY2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1jaGlwJywgJ3RydWUnKVxuICBjaGlwLmNsYXNzTmFtZSA9IENPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTXG4gIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tdHlwZScsIG1lbnRpb24udHlwZSlcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1zdXJmYWNlJywgJ2VkaXRvcicpXG5cbiAgLy8gTGFzIHNraWxscyBzZSB2ZW4gY29tbyBsb3Mgc2xhc2ggY29tbWFuZHMgKHRleHRvIHBsYW5vIGAjbm9tYnJlYCksIG5vIGNvbW8gY2hpcCBjb24gZm9uZG8uXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICdza2lsbCcpIHtcbiAgICBPYmplY3QuYXNzaWduKGNoaXAuc3R5bGUsIFNMQVNIX0NPTU1BTkRfQ0hJUF9CQVNFX1NUWUxFLCB7IGJveFNpemluZzogJ2JvcmRlci1ib3gnLCBtYXhXaWR0aDogJzEwMCUnIH0pXG4gICAgY2hpcC50ZXh0Q29udGVudCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobWVudGlvbi5sYWJlbClcbiAgICByZXR1cm4gY2hpcFxuICB9XG5cbiAgYXBwbHlNZW50aW9uQ2hpcFN0eWxlcyhjaGlwLCBtZW50aW9uLnR5cGUpXG4gIGNvbnN0IGlzVGFzayA9IG1lbnRpb24udHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGNvbW1vbiA9IHtcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnYmFzZWxpbmUnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfSBhcyBjb25zdFxuICBpZiAoaXNUYXNrKSB7XG4gICAgT2JqZWN0LmFzc2lnbihjaGlwLnN0eWxlLCBjb21tb24sIHtcbiAgICAgIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgbWluSGVpZ2h0OiAnYXV0bycsXG4gICAgICBtYXhIZWlnaHQ6ICdub25lJyxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIE9iamVjdC5hc3NpZ24oY2hpcC5zdHlsZSwgY29tbW9uLCB7XG4gICAgICBsaW5lSGVpZ2h0OiAnMjBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIG1pbkhlaWdodDogJ2F1dG8nLFxuICAgICAgbWF4SGVpZ2h0OiAnbm9uZScsXG4gICAgfSlcbiAgfVxuICBjb25zdCBtb3VudE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgbW91bnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJ1xuICBtb3VudE5vZGUuc3R5bGUubWF4V2lkdGggPSAnMTAwJSdcbiAgbW91bnROb2RlLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnYmFzZWxpbmUnXG4gIG1vdW50Tm9kZS5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgY2hpcC5hcHBlbmRDaGlsZChtb3VudE5vZGUpXG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KG1vdW50Tm9kZSlcblxuICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgIHJvb3QucmVuZGVyKGNyZWF0ZUVsZW1lbnQoRWRpdGFibGVNZW50aW9uQ2hpcCwgeyBtZW50aW9uIH0pKVxuICB9KVxuXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICd0YXNrJykge1xuICAgIGNoaXAuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInXG4gICAgY2hpcC5vbmNsaWNrID0gZSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIG9wZW5UYXNrSW5Db3JQYW5lbChtZW50aW9uLmlkLCAnZGV0YWlsJylcbiAgICB9XG4gIH0gZWxzZSBpZiAobWVudGlvbi50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICBjaGlwLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJ1xuICAgIGNoaXAub25jbGljayA9IGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB3aW5kb3cub3BlbihgL3Byb2plY3RzLyR7bWVudGlvbi5pZH0vZGFzaGJvYXJkYCwgJ19ibGFuaycpXG4gICAgfVxuICB9IGVsc2UgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICAgIGxldCBjaGlwUmVtb3ZlZE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHJlbW92ZVVzZXJUb29sdGlwID0gKCkgPT4ge1xuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbnVsbFxuICAgICAgaWYgKHRvb2x0aXBFbCkge1xuICAgICAgICB0b29sdGlwRWwucmVtb3ZlKClcbiAgICAgICAgdG9vbHRpcEVsID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTaSBlbCBjaGlwIHNlIGJvcnJhIGRlbCBlZGl0b3IgKEJhY2tzcGFjZSwgZXRjLikgbm8gc2llbXByZSBoYXkgYG1vdXNlbGVhdmVgOyBjZXJyYXIgZWwgdG9vbHRpcC4gKi9cbiAgICBjb25zdCB3YXRjaENoaXBSZW1vdmVkRnJvbURvbSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaXAucGFyZW50Tm9kZVxuICAgICAgaWYgKCFwYXJlbnQpIHJldHVyblxuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoIWNoaXAuaXNDb25uZWN0ZWQpIHJlbW92ZVVzZXJUb29sdGlwKClcbiAgICAgIH0pXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGNoaXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIGlmICh0b29sdGlwRWwpIHJldHVyblxuICAgICAgdG9vbHRpcEVsID0gY3JlYXRlVXNlclRvb2x0aXBFbChtZW50aW9uKVxuICAgICAgY29uc3QgcmVjdCA9IGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIDMwMCwgcmVjdC5sZWZ0KSlcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gNHB4KSknXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBFbClcbiAgICAgIHdhdGNoQ2hpcFJlbW92ZWRGcm9tRG9tKClcbiAgICB9KVxuXG4gICAgY2hpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgcmVtb3ZlVXNlclRvb2x0aXApXG4gIH1cblxuICByZXR1cm4gY2hpcFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxhQUFhLFFBQTRCLE9BQU87QUFDekQsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBU0MsVUFBVSxRQUFRLGtCQUFrQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sZUFBZTtBQUNoQyxTQUFTQywwQkFBMEIsUUFBd0IsK0JBQStCO0FBQzFGLFNBQVNDLHFCQUFxQixRQUFRLG9DQUFvQztBQUMxRSxTQUFTQyw0QkFBNEIsUUFBUSxvQ0FBb0M7QUFDakYsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBQ3RFLFNBQVNDLDZCQUE2QixRQUFRLDZDQUE2QztBQUMzRixTQUFTQyxzQkFBc0IsRUFBRUMsbUJBQW1CLFFBQVEsNkJBQTZCO0FBRXpGLElBQU1DLDZCQUE0QyxHQUFHO0VBQ25EQyxPQUFPLEVBQUUsUUFBUTtFQUNqQkMsVUFBVSxFQUFFLE1BQU07RUFDbEJDLFNBQVMsRUFBRSxVQUFVO0VBQ3JCQyxRQUFRLEVBQUUsQ0FBQztF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
|