@projectcor/maia-components 2.49.0-beta.1 → 2.49.1-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 +44 -19
- package/lib/components/atoms/ActionableButton.spec.js +111 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +63 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +137 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
- package/lib/components/atoms/Chip/Chip.spec.js +82 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +109 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +59 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
- package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
- package/lib/components/atoms/Expand/Expand.spec.js +57 -0
- package/lib/components/atoms/Fade/Fade.spec.js +31 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
- package/lib/components/atoms/HelpButton.spec.js +87 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +130 -177
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +641 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
- package/lib/components/atoms/NextPageLoader.spec.js +37 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
- package/lib/components/atoms/PrimaryButton.spec.js +42 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -0
- package/lib/components/atoms/Switch/Switch.spec.js +41 -0
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
- package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
- package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
- package/lib/components/atoms/TextArea/TextArea.js +11 -20
- package/lib/components/atoms/TextArea/TextArea.spec.js +126 -0
- package/lib/components/atoms/ThirdButton.spec.js +29 -0
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
- package/lib/components/atoms/WithAppCfg.spec.js +82 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +6 -29
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +742 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
- package/lib/components/molecules/AgentInputBlock/index.js +5 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +285 -302
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIHome/styles.js +85 -78
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +742 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +235 -245
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +541 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +522 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1394 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +250 -349
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1401 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +49 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +100 -93
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
- package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
- package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
- package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
- package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +65 -44
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +464 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +310 -644
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
- package/lib/components/organisms/ChatAIPage/index.js +3 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/formatExtensions.js +7 -8
- package/lib/constants/formatExtensions.spec.js +14 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/maiaFeatureAccess.spec.js +30 -0
- package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
- package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
- package/lib/constants/permissions/clientRoleAccess.spec.js +65 -0
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/permissions/utils.spec.js +128 -0
- package/lib/constants/plannerSyncEvents.spec.js +31 -0
- package/lib/constants/taskUrls.spec.js +9 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +75 -86
- package/lib/dev/Providers.js +5 -3
- package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
- package/lib/hooks/useChatManager/useChatManager.js +272 -745
- package/lib/hooks/useChatManager/useChatManager.spec.js +2409 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.js +36 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.js +4 -32
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.js +212 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
- package/lib/hooks/useContextMentions.js +5 -223
- package/lib/hooks/useContextMentions.spec.js +338 -0
- package/lib/hooks/useContextMentions.types.js +2 -0
- package/lib/hooks/useContextPinPopover.helpers.js +95 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
- package/lib/hooks/useContextPinPopover.js +16 -75
- package/lib/hooks/useContextPinPopover.spec.js +159 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.js +407 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
- package/lib/hooks/useEntitySearch.js +52 -436
- package/lib/hooks/useEntitySearch.spec.js +718 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +60 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
- package/lib/hooks/useIsMaiaPageRoute.js +26 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
- package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
- package/lib/hooks/useMentionPopover.helpers.js +41 -0
- package/lib/hooks/useMentionPopover.helpers.spec.js +100 -0
- package/lib/hooks/useMentionPopover.js +9 -35
- package/lib/hooks/useMentionPopover.spec.js +392 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
- package/lib/hooks/useModal/useModal.spec.js +73 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +417 -0
- package/lib/hooks/useProjectSearch.helpers.js +61 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
- package/lib/hooks/useProjectSearch.js +4 -58
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
- package/lib/hooks/useProjectSummaryConfig.js +14 -52
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- package/lib/hooks/useRecentClientsSearch.js +4 -32
- package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
- package/lib/hooks/useRecentContexts.spec.js +139 -0
- package/lib/hooks/useResize.spec.js +37 -0
- package/lib/hooks/useSkillsCatalog.spec.js +88 -0
- package/lib/hooks/useSlashCommands.spec.js +139 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
- package/lib/hooks/useStreamResponse.spec.js +199 -0
- package/lib/hooks/useT.spec.js +20 -0
- package/lib/hooks/useToggle.spec.js +33 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
- package/lib/index.js +5 -2
- package/lib/lang/br/index.js +26 -7
- package/lib/lang/en/index.js +26 -7
- package/lib/lang/es/index.js +26 -7
- package/lib/lang/fr/index.js +26 -7
- package/lib/services/appcues.spec.js +37 -0
- package/lib/services/maia/Access/updateAccess.spec.js +137 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.spec.js +496 -0
- package/lib/services/maia/Agents/createAgent.spec.js +55 -0
- package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
- package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
- package/lib/services/maia/Agents/getAgents.helpers.js +241 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
- package/lib/services/maia/Agents/getAgents.js +90 -282
- package/lib/services/maia/Agents/getAgents.spec.js +1135 -0
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
- package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
- package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
- package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
- package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
- package/lib/services/maia/Chats/patchChat.spec.js +41 -0
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
- package/lib/services/maia/Knowledge/delete.spec.js +45 -0
- package/lib/services/maia/Knowledge/download.spec.js +78 -0
- package/lib/services/maia/Knowledge/save.spec.js +58 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +225 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
- package/lib/services/maia/Skills/createSkill.spec.js +68 -0
- package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
- package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
- package/lib/services/maia/Skills/getSkills.spec.js +152 -0
- package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
- package/lib/services/maia/client.spec.js +56 -0
- package/lib/services/utils/fetchCOR.spec.js +211 -0
- package/lib/services/utils/getCookie.spec.js +20 -0
- package/lib/services/utils/mapChatMessages.helpers.js +223 -0
- package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
- package/lib/services/utils/mapChatMessages.js +25 -254
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +145 -0
- package/lib/store/maiaLastChatPersistence.spec.js +22 -0
- package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
- package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
- package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.js +35 -41
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
- package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
- package/lib/store/sessions/sessionStreamManager.js +209 -277
- package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.spec.js +619 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/test/mockSseStream.js +121 -0
- package/lib/test/streamdownCodeMock.js +6 -0
- package/lib/test/streamdownMock.js +12 -0
- package/lib/types/Chat.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/types/reasoning.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +48 -0
- package/lib/utils/autoApproveStorage.spec.js +25 -0
- package/lib/utils/chatInputFiles.spec.js +39 -0
- package/lib/utils/contextMentionIcons.spec.js +41 -0
- package/lib/utils/contextMentionLabel.spec.js +13 -0
- package/lib/utils/contextMentionTriggers.spec.js +44 -0
- package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
- package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
- package/lib/utils/entityLinkRender.spec.js +72 -0
- package/lib/utils/fileDownloadHelper.spec.js +67 -0
- package/lib/utils/formatQuickActionMessage.spec.js +27 -0
- package/lib/utils/formatUnreadCount.spec.js +12 -0
- package/lib/utils/getUnitFileSize.spec.js +18 -0
- package/lib/utils/hitlAnalytics.spec.js +136 -0
- package/lib/utils/hoursPlannerQuickActionType.js +74 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
- package/lib/utils/imagePreprocessor.helpers.js +28 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +12 -37
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.js +24 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
- package/lib/utils/openTaskInCorPanel.spec.js +43 -0
- package/lib/utils/orchestratorSubagents.spec.js +32 -0
- package/lib/utils/reasoningMappers.spec.js +103 -0
- package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
- package/lib/utils/renderContextMentions.helpers.js +110 -0
- package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
- package/lib/utils/renderContextMentions.js +4 -110
- package/lib/utils/renderContextMentions.spec.js +268 -0
- package/lib/utils/retryCompletion.spec.js +181 -0
- package/lib/utils/skillContentSize.spec.js +13 -0
- package/lib/utils/slashCommandMarker.spec.js +43 -0
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
- package/lib/utils/sseStreamContent.spec.js +31 -0
- package/lib/utils/streamActivityMessages.helpers.js +223 -0
- package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
- package/lib/utils/streamActivityMessages.js +33 -238
- package/lib/utils/streamActivityMessages.spec.js +336 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +2 -2
- package/README.md +0 -2
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
- package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
- package/lib/types/contextCompaction.js +0 -48
- package/lib/types/jest-dom.d.js +0 -2
|
@@ -1,13 +1,152 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
1
2
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
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; }
|
|
2
5
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
|
+
import { canAccessToChatAI, canAccessToSkills } from '../../../constants/permissions';
|
|
7
|
+
import { validateIsMaia } from '../../../services/utils/validateIsMaia';
|
|
8
|
+
import { isMarketplaceGlobalCloneAgent } from '../../../utils/agentDisplayName';
|
|
9
|
+
import { isValidMaiaPanelOption } from '../../../store/maiaPanelSessionPersistence';
|
|
10
|
+
import { isActiveSessionStatus } from '../../../store/sessions/sessions.types';
|
|
11
|
+
import { options } from './constants';
|
|
12
|
+
export var LEGACY_CONTEXT_ENTITIES = ['project', 'task', 'client'];
|
|
13
|
+
export var isLegacyContextEntity = function isLegacyContextEntity(entity) {
|
|
14
|
+
return Boolean(entity && LEGACY_CONTEXT_ENTITIES.includes(entity));
|
|
15
|
+
};
|
|
16
|
+
export var resolveLegacyContextSession = function resolveLegacyContextSession(computedCurrentOption, chatOption, sessionMeta) {
|
|
17
|
+
if (computedCurrentOption !== chatOption || !sessionMeta || sessionMeta.agentType !== 'clone') {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
var entity = sessionMeta.agentEntity;
|
|
21
|
+
if (!isLegacyContextEntity(entity)) return null;
|
|
22
|
+
var contextName;
|
|
23
|
+
if (entity === 'task') {
|
|
24
|
+
contextName = sessionMeta.taskName;
|
|
25
|
+
} else if (entity === 'project') {
|
|
26
|
+
contextName = sessionMeta.projectName;
|
|
27
|
+
} else {
|
|
28
|
+
contextName = sessionMeta.clientName;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
entityType: entity,
|
|
32
|
+
contextName: contextName || ''
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export var hasAnyActiveSessionInMeta = function hasAnyActiveSessionInMeta(meta) {
|
|
36
|
+
return Object.values(meta).some(function (entry) {
|
|
37
|
+
return isActiveSessionStatus(entry === null || entry === void 0 ? void 0 : entry.status);
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
export var isGlobalMaiaSection = function isGlobalMaiaSection(section) {
|
|
41
|
+
return section === 'header';
|
|
42
|
+
};
|
|
43
|
+
export var resolveAiChatBackDestination = function resolveAiChatBackDestination(section, agentType, currentOption, homeOption) {
|
|
44
|
+
if (isGlobalMaiaSection(section) && agentType === 'orchestrator' && currentOption === homeOption) {
|
|
45
|
+
return 'global_context_home';
|
|
46
|
+
}
|
|
47
|
+
if (section === 'task') return 'task_home';
|
|
48
|
+
if (section === 'planner') return 'planner_home';
|
|
49
|
+
if (section === 'project') return 'project_home';
|
|
50
|
+
if (section === 'client') return 'client_home';
|
|
51
|
+
return 'global_context_home';
|
|
52
|
+
};
|
|
53
|
+
export var validateAccessByFeature = function validateAccessByFeature(section, user) {
|
|
54
|
+
if (!section || !canAccessToChatAI(user)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
if (section === 'planner' || section === 'task') {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
if (section === 'header') {
|
|
61
|
+
return Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS || window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS);
|
|
62
|
+
}
|
|
63
|
+
return Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS);
|
|
64
|
+
};
|
|
65
|
+
export var resolveComputedCurrentOption = function resolveComputedCurrentOption(_ref) {
|
|
66
|
+
var currentOption = _ref.currentOption,
|
|
67
|
+
agent = _ref.agent,
|
|
68
|
+
project = _ref.project,
|
|
69
|
+
client = _ref.client,
|
|
70
|
+
user = _ref.user,
|
|
71
|
+
multiAgentsAccess = _ref.multiAgentsAccess;
|
|
72
|
+
var isMAIA = validateIsMaia(agent);
|
|
73
|
+
var isGlobalSpecialist = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'global';
|
|
74
|
+
var isProjectSpecialist = isMAIA && ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project' || (agent === null || agent === void 0 ? void 0 : agent.entity) == null);
|
|
75
|
+
var isClientSpecialist = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'client';
|
|
76
|
+
var isMaiaker = isMarketplaceGlobalCloneAgent(agent);
|
|
77
|
+
if (currentOption === options.myAgents && multiAgentsAccess) {
|
|
78
|
+
return options.myAgents;
|
|
79
|
+
}
|
|
80
|
+
if (currentOption === options.mySkills && canAccessToSkills(user)) {
|
|
81
|
+
return options.mySkills;
|
|
82
|
+
}
|
|
83
|
+
if (isGlobalSpecialist && !isMaiaker && (agent === null || agent === void 0 ? void 0 : agent.type) !== 'orchestrator' && currentOption === options.home) {
|
|
84
|
+
return options.chat;
|
|
85
|
+
}
|
|
86
|
+
var shouldShowProjectSelector = currentOption !== options.chat && isProjectSpecialist && !project;
|
|
87
|
+
var shouldShowClientSelector = currentOption !== options.chat && isClientSpecialist && !client;
|
|
88
|
+
if (shouldShowProjectSelector) {
|
|
89
|
+
return options.projectSelector;
|
|
90
|
+
}
|
|
91
|
+
if (shouldShowClientSelector) {
|
|
92
|
+
return options.clientSelector;
|
|
93
|
+
}
|
|
94
|
+
return currentOption;
|
|
95
|
+
};
|
|
96
|
+
export var resolveSidebarAgentsNavActive = function resolveSidebarAgentsNavActive(computedCurrentOption, isMaiakerAgentSelected) {
|
|
97
|
+
if (computedCurrentOption === options.mySkills) return 'mySkills';
|
|
98
|
+
if (computedCurrentOption === options.myAgents) return 'myAgents';
|
|
99
|
+
if (isMaiakerAgentSelected) return 'maiaker';
|
|
100
|
+
return null;
|
|
101
|
+
};
|
|
102
|
+
export var resolveInitialCurrentOption = function resolveInitialCurrentOption(savedAgentsNavActive, savedCurrentOption, user) {
|
|
103
|
+
if (savedAgentsNavActive === 'myAgents') return options.myAgents;
|
|
104
|
+
if (savedAgentsNavActive === 'mySkills' && canAccessToSkills(user)) return options.mySkills;
|
|
105
|
+
if (savedCurrentOption && isValidMaiaPanelOption(savedCurrentOption)) {
|
|
106
|
+
return savedCurrentOption;
|
|
107
|
+
}
|
|
108
|
+
return options.home;
|
|
109
|
+
};
|
|
110
|
+
export var shouldRestoreExpandedPanel = function shouldRestoreExpandedPanel(savedSession) {
|
|
111
|
+
var _savedSession$isExpan;
|
|
112
|
+
return (_savedSession$isExpan = savedSession === null || savedSession === void 0 ? void 0 : savedSession.isExpanded) !== null && _savedSession$isExpan !== void 0 ? _savedSession$isExpan : false;
|
|
113
|
+
};
|
|
114
|
+
export var resolveDefaultFloatingPanelPosition = function resolveDefaultFloatingPanelPosition(viewportWidth, panelWidth) {
|
|
115
|
+
var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 16;
|
|
116
|
+
return {
|
|
117
|
+
x: viewportWidth - panelWidth - padding,
|
|
118
|
+
y: padding
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
export var isBannerFaqReadyToAutoSend = function isBannerFaqReadyToAutoSend(params) {
|
|
122
|
+
var _params$faqTitle;
|
|
123
|
+
if (!((_params$faqTitle = params.faqTitle) !== null && _params$faqTitle !== void 0 && _params$faqTitle.trim()) || params.alreadySent || params.loading || !params.agentId) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
if (params.section === 'project') return Boolean(params.projectId);
|
|
127
|
+
if (params.section === 'client') return Boolean(params.clientId);
|
|
128
|
+
return true;
|
|
129
|
+
};
|
|
130
|
+
export var shouldSkipFloatingDragTarget = function shouldSkipFloatingDragTarget(target) {
|
|
131
|
+
return Boolean(target === null || target === void 0 ? void 0 : target.closest('button, a, input, textarea, select, [role="button"], [data-no-drag="true"]'));
|
|
132
|
+
};
|
|
133
|
+
export var clampFloatingPanelPosition = function clampFloatingPanelPosition(x, y, panelWidth, panelHeight, viewportWidth, viewportHeight) {
|
|
134
|
+
var offset = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 16;
|
|
135
|
+
var maxX = Math.max(offset, viewportWidth - panelWidth - offset);
|
|
136
|
+
var maxY = Math.max(offset, viewportHeight - panelHeight - offset);
|
|
137
|
+
return {
|
|
138
|
+
x: Math.min(Math.max(x, offset), maxX),
|
|
139
|
+
y: Math.min(Math.max(y, offset), maxY)
|
|
140
|
+
};
|
|
141
|
+
};
|
|
3
142
|
/** Garantiza que la lista de agentes esté disponible antes de abrir un chat con una skill. */
|
|
4
143
|
export var ensureAgentsBeforeSkillUse = /*#__PURE__*/function () {
|
|
5
|
-
var
|
|
144
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref2) {
|
|
6
145
|
var useFirstAgent, agents, ensureAgentsLoaded, loadedAgents, _t;
|
|
7
146
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
8
147
|
while (1) switch (_context.prev = _context.next) {
|
|
9
148
|
case 0:
|
|
10
|
-
useFirstAgent =
|
|
149
|
+
useFirstAgent = _ref2.useFirstAgent, agents = _ref2.agents, ensureAgentsLoaded = _ref2.ensureAgentsLoaded;
|
|
11
150
|
if (useFirstAgent) {
|
|
12
151
|
_context.next = 1;
|
|
13
152
|
break;
|
|
@@ -36,9 +175,45 @@ export var ensureAgentsBeforeSkillUse = /*#__PURE__*/function () {
|
|
|
36
175
|
}, _callee);
|
|
37
176
|
}));
|
|
38
177
|
return function ensureAgentsBeforeSkillUse(_x) {
|
|
39
|
-
return
|
|
178
|
+
return _ref3.apply(this, arguments);
|
|
40
179
|
};
|
|
41
180
|
}();
|
|
181
|
+
/** Visibilidad del panel host cuando la página /maia del sidebar está activa. */
|
|
182
|
+
export var getMaiaHostPanelPresentation = function getMaiaHostPanelPresentation(isMinimized, isMaiaPageRoute) {
|
|
183
|
+
return {
|
|
184
|
+
hidePanelContent: isMinimized || isMaiaPageRoute,
|
|
185
|
+
showMinimizedPill: isMinimized && !isMaiaPageRoute
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
export var resolveHostTakeoverEntityState = function resolveHostTakeoverEntityState(detail) {
|
|
189
|
+
var _detail$project, _detail$task;
|
|
190
|
+
var isGlobalHeaderOpen = detail.section === 'header' || detail.section === 'planner';
|
|
191
|
+
var project = detail.section === 'project' || detail.section === 'task' ? (_detail$project = detail.project) !== null && _detail$project !== void 0 ? _detail$project : null : null;
|
|
192
|
+
var client;
|
|
193
|
+
if (detail.section === 'client') {
|
|
194
|
+
var _detail$client;
|
|
195
|
+
client = (_detail$client = detail.client) !== null && _detail$client !== void 0 ? _detail$client : null;
|
|
196
|
+
} else if (isGlobalHeaderOpen) {
|
|
197
|
+
client = null;
|
|
198
|
+
}
|
|
199
|
+
var task = detail.section === 'task' ? (_detail$task = detail.task) !== null && _detail$task !== void 0 ? _detail$task : null : null;
|
|
200
|
+
return {
|
|
201
|
+
project: project,
|
|
202
|
+
client: client,
|
|
203
|
+
task: task,
|
|
204
|
+
clearGlobalPinnedContext: isGlobalHeaderOpen
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
export var buildHostTakeoverPersistContext = function buildHostTakeoverPersistContext(detail) {
|
|
208
|
+
var _detail$project2, _detail$client2, _detail$task2;
|
|
209
|
+
return {
|
|
210
|
+
section: detail.section,
|
|
211
|
+
project: detail.section === 'project' || detail.section === 'task' ? (_detail$project2 = detail.project) !== null && _detail$project2 !== void 0 ? _detail$project2 : null : null,
|
|
212
|
+
client: detail.section === 'client' ? (_detail$client2 = detail.client) !== null && _detail$client2 !== void 0 ? _detail$client2 : null : null,
|
|
213
|
+
task: detail.section === 'task' ? (_detail$task2 = detail.task) !== null && _detail$task2 !== void 0 ? _detail$task2 : null : null,
|
|
214
|
+
chipsProject: null
|
|
215
|
+
};
|
|
216
|
+
};
|
|
42
217
|
|
|
43
218
|
/** Inserta la mención de skill cuando el input del chat ya está montado. */
|
|
44
219
|
export var dispatchSkillMentionInsert = function dispatchSkillMentionInsert(skill) {
|
|
@@ -53,4 +228,347 @@ export var dispatchSkillMentionInsert = function dispatchSkillMentionInsert(skil
|
|
|
53
228
|
});
|
|
54
229
|
});
|
|
55
230
|
};
|
|
56
|
-
|
|
231
|
+
export var resolveMaiaModalI18nLang = function resolveMaiaModalI18nLang(language) {
|
|
232
|
+
return language === 'br' ? 'pt-br' : language;
|
|
233
|
+
};
|
|
234
|
+
export var resolveUserHasAgentManagementPermissions = function resolveUserHasAgentManagementPermissions(permissions, multiAgentsFeatureAccess) {
|
|
235
|
+
var _permissions$ai_agent, _permissions$ai_agent2, _permissions$ai_agent3;
|
|
236
|
+
return Boolean(((permissions === null || permissions === void 0 || (_permissions$ai_agent = permissions.ai_agents) === null || _permissions$ai_agent === void 0 ? void 0 : _permissions$ai_agent.create) || (permissions === null || permissions === void 0 || (_permissions$ai_agent2 = permissions.ai_agents) === null || _permissions$ai_agent2 === void 0 ? void 0 : _permissions$ai_agent2.edit) || (permissions === null || permissions === void 0 || (_permissions$ai_agent3 = permissions.ai_agents) === null || _permissions$ai_agent3 === void 0 ? void 0 : _permissions$ai_agent3["delete"])) && multiAgentsFeatureAccess);
|
|
237
|
+
};
|
|
238
|
+
export var shouldStartNewChatFromCatalog = function shouldStartNewChatFromCatalog(computedCurrentOption, isMaiakerAgentSelected) {
|
|
239
|
+
return computedCurrentOption === options.myAgents || computedCurrentOption === options.mySkills || computedCurrentOption === options.home && isMaiakerAgentSelected;
|
|
240
|
+
};
|
|
241
|
+
export var shouldBackStartNewChatPreservingContext = function shouldBackStartNewChatPreservingContext(computedCurrentOption, chatOption) {
|
|
242
|
+
return computedCurrentOption === chatOption;
|
|
243
|
+
};
|
|
244
|
+
export var shouldBackClearPinnedContext = function shouldBackClearPinnedContext(computedCurrentOption, homeOption, section, didResetContextInSection) {
|
|
245
|
+
return computedCurrentOption === homeOption && (isGlobalMaiaSection(section) || didResetContextInSection);
|
|
246
|
+
};
|
|
247
|
+
export var shouldMarkOrchestratorContextReset = function shouldMarkOrchestratorContextReset(section, agentType, wasPinned, isPinned) {
|
|
248
|
+
return !isGlobalMaiaSection(section) && agentType === 'orchestrator' && wasPinned && !isPinned;
|
|
249
|
+
};
|
|
250
|
+
export var resolveMinimizedRestoreTarget = function resolveMinimizedRestoreTarget(chats, lastActiveChatId) {
|
|
251
|
+
var firstUnread = chats.find(function (chat) {
|
|
252
|
+
return chat.isRead === false;
|
|
253
|
+
});
|
|
254
|
+
if (firstUnread) return firstUnread;
|
|
255
|
+
return lastActiveChatId ? chats.find(function (chat) {
|
|
256
|
+
return chat.sessionExternalId === lastActiveChatId;
|
|
257
|
+
}) : undefined;
|
|
258
|
+
};
|
|
259
|
+
export var resolveHostTakeoverAgentId = function resolveHostTakeoverAgentId(clearGlobalPinnedContext, agents, currentAgentId) {
|
|
260
|
+
var _agents$0$id, _agents$;
|
|
261
|
+
if (!clearGlobalPinnedContext) return currentAgentId !== null && currentAgentId !== void 0 ? currentAgentId : null;
|
|
262
|
+
return (_agents$0$id = (_agents$ = agents[0]) === null || _agents$ === void 0 ? void 0 : _agents$.id) !== null && _agents$0$id !== void 0 ? _agents$0$id : null;
|
|
263
|
+
};
|
|
264
|
+
export var resolveFloatingPanelDragPosition = function resolveFloatingPanelDragPosition(params) {
|
|
265
|
+
if (params.layoutMode !== 'floating') {
|
|
266
|
+
return params.dragPosition;
|
|
267
|
+
}
|
|
268
|
+
if (params.dragPosition) {
|
|
269
|
+
return params.dragPosition;
|
|
270
|
+
}
|
|
271
|
+
var defaultPosition = resolveDefaultFloatingPanelPosition(params.viewportWidth, params.panelWidth);
|
|
272
|
+
return params.clamp(defaultPosition.x, defaultPosition.y);
|
|
273
|
+
};
|
|
274
|
+
export var resolveNextDragPosition = function resolveNextDragPosition(previous, next) {
|
|
275
|
+
if (previous && previous.x === next.x && previous.y === next.y) {
|
|
276
|
+
return previous;
|
|
277
|
+
}
|
|
278
|
+
return next;
|
|
279
|
+
};
|
|
280
|
+
export var buildMaiaPanelSessionPatch = function buildMaiaPanelSessionPatch(params) {
|
|
281
|
+
if (params.isMinimized) return null;
|
|
282
|
+
return {
|
|
283
|
+
isExpanded: true,
|
|
284
|
+
currentOption: params.currentOption,
|
|
285
|
+
agentsNavActive: params.agentsNavActive,
|
|
286
|
+
activeChatId: params.activeChatId,
|
|
287
|
+
agentId: params.agentId,
|
|
288
|
+
sidebarOpen: params.sidebarOpen,
|
|
289
|
+
dragPosition: params.layoutMode === 'floating' ? params.dragPosition : null,
|
|
290
|
+
hostContext: params.hostContext
|
|
291
|
+
};
|
|
292
|
+
};
|
|
293
|
+
export var resolveHasPinnedContext = function resolveHasPinnedContext(params) {
|
|
294
|
+
return Boolean(params.taskId || params.chipsProjectId || params.clientId || params.projectId);
|
|
295
|
+
};
|
|
296
|
+
export var resolveOrchestratorHomeNavFlags = function resolveOrchestratorHomeNavFlags(params) {
|
|
297
|
+
var isChatView = params.computedCurrentOption === params.chatOption;
|
|
298
|
+
var isHomeStep2 = params.computedCurrentOption === params.homeOption && params.hasPinnedContext;
|
|
299
|
+
return {
|
|
300
|
+
isChatView: isChatView,
|
|
301
|
+
isHomeStep2: isHomeStep2,
|
|
302
|
+
isHeaderHomeStep2: isGlobalMaiaSection(params.section) && isHomeStep2,
|
|
303
|
+
isSectionResetHomeStep2: !isGlobalMaiaSection(params.section) && isHomeStep2 && params.didResetContextInSection
|
|
304
|
+
};
|
|
305
|
+
};
|
|
306
|
+
export var shouldShowOrchestratorBackButton = function shouldShowOrchestratorBackButton(params) {
|
|
307
|
+
return params.agentType === 'orchestrator' && !params.hasError && !params.loading && (params.isChatView || params.isHeaderHomeStep2 || params.isSectionResetHomeStep2);
|
|
308
|
+
};
|
|
309
|
+
export var shouldClearClientOnGoHomeFromChat = function shouldClearClientOnGoHomeFromChat(agentEntity) {
|
|
310
|
+
return agentEntity !== 'client';
|
|
311
|
+
};
|
|
312
|
+
export var shouldClearTaskOnGoHomeFromChat = function shouldClearTaskOnGoHomeFromChat(section) {
|
|
313
|
+
return section !== 'task';
|
|
314
|
+
};
|
|
315
|
+
export var shouldResetAgentToFirstOnGoHome = function shouldResetAgentToFirstOnGoHome(agent, agentsCount) {
|
|
316
|
+
return Boolean((!agent || agent.is_deleted || agent.has_not_permissions || agent.has_not_access || agent.project_deleted) && agentsCount > 0);
|
|
317
|
+
};
|
|
318
|
+
export var shouldClearOrchestratorGlobalContextOnGoHome = function shouldClearOrchestratorGlobalContextOnGoHome(section, agentType) {
|
|
319
|
+
return isGlobalMaiaSection(section) && agentType === 'orchestrator';
|
|
320
|
+
};
|
|
321
|
+
export var shouldUseActiveChatSendHandler = function shouldUseActiveChatSendHandler(computedCurrentOption, chatOption, hasSendMessageFunction) {
|
|
322
|
+
return Boolean(hasSendMessageFunction && computedCurrentOption === chatOption);
|
|
323
|
+
};
|
|
324
|
+
export var shouldPrefetchAgentsForCatalogNewChat = function shouldPrefetchAgentsForCatalogNewChat(computedCurrentOption, myAgentsOption, mySkillsOption) {
|
|
325
|
+
return computedCurrentOption === myAgentsOption || computedCurrentOption === mySkillsOption;
|
|
326
|
+
};
|
|
327
|
+
export var canOpenMaiaMarketplace = function canOpenMaiaMarketplace(multiAgentsAccess) {
|
|
328
|
+
return multiAgentsAccess;
|
|
329
|
+
};
|
|
330
|
+
export var shouldMarkAgentAsLegacyContext = function shouldMarkAgentAsLegacyContext(legacyContextSession, agent) {
|
|
331
|
+
return Boolean(legacyContextSession && agent && !agent.is_legacy_context);
|
|
332
|
+
};
|
|
333
|
+
export var buildLegacyContextAgent = function buildLegacyContextAgent(agent) {
|
|
334
|
+
return _objectSpread(_objectSpread({}, agent), {}, {
|
|
335
|
+
is_legacy_context: true
|
|
336
|
+
});
|
|
337
|
+
};
|
|
338
|
+
export var buildLegacyContextMigrationPatch = function buildLegacyContextMigrationPatch(sessionMeta) {
|
|
339
|
+
if (!(sessionMeta !== null && sessionMeta !== void 0 && sessionMeta.agentEntity)) return null;
|
|
340
|
+
var agentEntity = sessionMeta.agentEntity,
|
|
341
|
+
pId = sessionMeta.projectId,
|
|
342
|
+
pName = sessionMeta.projectName,
|
|
343
|
+
cId = sessionMeta.clientId,
|
|
344
|
+
cName = sessionMeta.clientName,
|
|
345
|
+
tId = sessionMeta.taskId,
|
|
346
|
+
tName = sessionMeta.taskName;
|
|
347
|
+
var cleared = {
|
|
348
|
+
task: null,
|
|
349
|
+
project: null,
|
|
350
|
+
client: null,
|
|
351
|
+
chipsProject: null
|
|
352
|
+
};
|
|
353
|
+
if (agentEntity === 'client' && cId != null) {
|
|
354
|
+
return _objectSpread(_objectSpread({}, cleared), {}, {
|
|
355
|
+
client: {
|
|
356
|
+
id: cId,
|
|
357
|
+
name: cName || ''
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
if (agentEntity === 'project' && pId != null) {
|
|
362
|
+
return _objectSpread(_objectSpread({}, cleared), {}, {
|
|
363
|
+
project: _objectSpread({
|
|
364
|
+
id: pId,
|
|
365
|
+
name: pName || ''
|
|
366
|
+
}, cId != null ? {
|
|
367
|
+
clientId: cId,
|
|
368
|
+
client: {
|
|
369
|
+
id: cId,
|
|
370
|
+
name: cName || ''
|
|
371
|
+
}
|
|
372
|
+
} : {}),
|
|
373
|
+
chipsProject: {
|
|
374
|
+
projectId: String(pId),
|
|
375
|
+
projectName: pName || '',
|
|
376
|
+
clientName: cName || ''
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
if (agentEntity === 'task' && tId != null) {
|
|
381
|
+
var task = _objectSpread(_objectSpread({
|
|
382
|
+
id: tId,
|
|
383
|
+
name: tName || ''
|
|
384
|
+
}, pId != null ? {
|
|
385
|
+
projectId: pId
|
|
386
|
+
} : {}), cId != null ? {
|
|
387
|
+
clientId: cId
|
|
388
|
+
} : {});
|
|
389
|
+
var patch = _objectSpread(_objectSpread({}, cleared), {}, {
|
|
390
|
+
task: task
|
|
391
|
+
});
|
|
392
|
+
if (cId != null) {
|
|
393
|
+
patch = _objectSpread(_objectSpread({}, patch), {}, {
|
|
394
|
+
client: {
|
|
395
|
+
id: cId,
|
|
396
|
+
name: cName || ''
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
if (pId != null) {
|
|
401
|
+
patch = _objectSpread(_objectSpread({}, patch), {}, {
|
|
402
|
+
project: _objectSpread({
|
|
403
|
+
id: pId,
|
|
404
|
+
name: pName || ''
|
|
405
|
+
}, cId != null ? {
|
|
406
|
+
clientId: cId,
|
|
407
|
+
client: {
|
|
408
|
+
id: cId,
|
|
409
|
+
name: cName || ''
|
|
410
|
+
}
|
|
411
|
+
} : {}),
|
|
412
|
+
chipsProject: {
|
|
413
|
+
projectId: String(pId),
|
|
414
|
+
projectName: pName || '',
|
|
415
|
+
clientName: cName || ''
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
return patch;
|
|
420
|
+
}
|
|
421
|
+
return null;
|
|
422
|
+
};
|
|
423
|
+
export var findOrchestratorAgent = function findOrchestratorAgent(agents) {
|
|
424
|
+
return agents.find(function (candidate) {
|
|
425
|
+
return candidate.type === 'orchestrator';
|
|
426
|
+
});
|
|
427
|
+
};
|
|
428
|
+
export var shouldSetChatViewHiddenOnMount = function shouldSetChatViewHiddenOnMount(hasPendingSessionRestore) {
|
|
429
|
+
return !hasPendingSessionRestore;
|
|
430
|
+
};
|
|
431
|
+
export var shouldPersistLastActiveChatId = function shouldPersistLastActiveChatId(activeChatId) {
|
|
432
|
+
return Boolean(activeChatId);
|
|
433
|
+
};
|
|
434
|
+
export var hasBannerFaqTitle = function hasBannerFaqTitle(faqTitle) {
|
|
435
|
+
return Boolean(faqTitle === null || faqTitle === void 0 ? void 0 : faqTitle.trim());
|
|
436
|
+
};
|
|
437
|
+
export var shouldSyncPanelSessionOnPageHide = function shouldSyncPanelSessionOnPageHide(isMinimized) {
|
|
438
|
+
return !isMinimized;
|
|
439
|
+
};
|
|
440
|
+
export var resolveCachedAgentsIfAvailable = function resolveCachedAgentsIfAvailable(agents) {
|
|
441
|
+
return agents.length > 0 ? agents : null;
|
|
442
|
+
};
|
|
443
|
+
export var shouldAttemptInitialAgentsFetch = function shouldAttemptInitialAgentsFetch(cachedAgentsLength, alreadyFetched) {
|
|
444
|
+
return cachedAgentsLength === 0 && !alreadyFetched;
|
|
445
|
+
};
|
|
446
|
+
export var findAgentForChatItem = function findAgentForChatItem(agents, chatAgentId) {
|
|
447
|
+
return agents.find(function (agentItem) {
|
|
448
|
+
return Number(agentItem.id) === Number(chatAgentId);
|
|
449
|
+
});
|
|
450
|
+
};
|
|
451
|
+
export var shouldApplyClientOnHostTakeover = function shouldApplyClientOnHostTakeover(client) {
|
|
452
|
+
return client !== undefined;
|
|
453
|
+
};
|
|
454
|
+
export var shouldSelectFirstAgentOnHostTakeover = function shouldSelectFirstAgentOnHostTakeover(clearGlobalPinnedContext, firstAgent) {
|
|
455
|
+
return clearGlobalPinnedContext && Boolean(firstAgent);
|
|
456
|
+
};
|
|
457
|
+
export var shouldResetChatStateOnGoHome = function shouldResetChatStateOnGoHome(currentOption, chatOption) {
|
|
458
|
+
return currentOption === chatOption;
|
|
459
|
+
};
|
|
460
|
+
export var shouldClearContextForCatalogOrSkillAgent = function shouldClearContextForCatalogOrSkillAgent(agent) {
|
|
461
|
+
return Boolean(agent);
|
|
462
|
+
};
|
|
463
|
+
export var resolveOpenNewChatWithAgentContext = function resolveOpenNewChatWithAgentContext(detail) {
|
|
464
|
+
var _detail$project3, _detail$client3;
|
|
465
|
+
return {
|
|
466
|
+
project: (_detail$project3 = detail.project) !== null && _detail$project3 !== void 0 ? _detail$project3 : null,
|
|
467
|
+
client: (_detail$client3 = detail.client) !== null && _detail$client3 !== void 0 ? _detail$client3 : null,
|
|
468
|
+
shouldSetTask: detail.task !== undefined,
|
|
469
|
+
task: detail.task
|
|
470
|
+
};
|
|
471
|
+
};
|
|
472
|
+
export var canContinueLegacyContextInNewChat = function canContinueLegacyContextInNewChat(sessionMeta, orchestrator) {
|
|
473
|
+
return Boolean(sessionMeta && orchestrator);
|
|
474
|
+
};
|
|
475
|
+
export var resolveSessionRestoreNavRoute = function resolveSessionRestoreNavRoute(snapshot) {
|
|
476
|
+
if (snapshot.agentsNavActive === 'myAgents') return 'myAgents';
|
|
477
|
+
if (snapshot.agentsNavActive === 'mySkills') return 'mySkills';
|
|
478
|
+
if (snapshot.agentsNavActive === 'maiaker') return 'maiaker';
|
|
479
|
+
if (snapshot.currentOption === options.chat && snapshot.activeChatId) return 'chat';
|
|
480
|
+
if (snapshot.currentOption && isValidMaiaPanelOption(snapshot.currentOption)) return 'savedOption';
|
|
481
|
+
return 'none';
|
|
482
|
+
};
|
|
483
|
+
export var shouldSkipAgentsLoadOnSessionRestore = function shouldSkipAgentsLoadOnSessionRestore(agentsNavActive) {
|
|
484
|
+
return agentsNavActive === 'mySkills';
|
|
485
|
+
};
|
|
486
|
+
export var shouldFetchAgentDetailOnSessionRestore = function shouldFetchAgentDetailOnSessionRestore(agentId, agentsNavActive) {
|
|
487
|
+
return Boolean(agentId && agentsNavActive !== 'myAgents');
|
|
488
|
+
};
|
|
489
|
+
export var shouldPassAgentToGetAgentsOnRestore = function shouldPassAgentToGetAgentsOnRestore(agentsNavActive) {
|
|
490
|
+
return agentsNavActive !== 'myAgents';
|
|
491
|
+
};
|
|
492
|
+
export var shouldSelectFetchedAgentAfterRestore = function shouldSelectFetchedAgentAfterRestore(agentToSelect, agentsNavActive) {
|
|
493
|
+
return Boolean(agentToSelect && agentsNavActive !== 'myAgents');
|
|
494
|
+
};
|
|
495
|
+
export var resolveSnapshotChipsProject = function resolveSnapshotChipsProject(hostContext) {
|
|
496
|
+
var _hostContext$chipsPro;
|
|
497
|
+
return (_hostContext$chipsPro = hostContext === null || hostContext === void 0 ? void 0 : hostContext.chipsProject) !== null && _hostContext$chipsPro !== void 0 ? _hostContext$chipsPro : null;
|
|
498
|
+
};
|
|
499
|
+
export var resolveChatModalSectionFlags = function resolveChatModalSectionFlags(computedCurrentOption, isMaiakerAgentSelected) {
|
|
500
|
+
return {
|
|
501
|
+
showNewChat: computedCurrentOption !== options.chat,
|
|
502
|
+
isMyAgentsSection: computedCurrentOption === options.myAgents,
|
|
503
|
+
isMySkillsSection: computedCurrentOption === options.mySkills,
|
|
504
|
+
isMaiakerCreatorHome: computedCurrentOption === options.home && isMaiakerAgentSelected
|
|
505
|
+
};
|
|
506
|
+
};
|
|
507
|
+
export var shouldRenderChatSidebar = function shouldRenderChatSidebar(hasAccess, isFloating) {
|
|
508
|
+
return hasAccess && !isFloating;
|
|
509
|
+
};
|
|
510
|
+
export var resolveChatModalMainContentView = function resolveChatModalMainContentView(hasError, hasAccess) {
|
|
511
|
+
if (hasError) return 'error';
|
|
512
|
+
if (hasAccess) return 'chat';
|
|
513
|
+
return 'projectSummary';
|
|
514
|
+
};
|
|
515
|
+
export var shouldShowChatModalFooter = function shouldShowChatModalFooter(params) {
|
|
516
|
+
var onHomeWithAgents = params.computedCurrentOption === params.homeOption && params.agentsCount > 0;
|
|
517
|
+
var onChat = params.computedCurrentOption === params.chatOption;
|
|
518
|
+
return (onHomeWithAgents || onChat) && !params.isMaiakerCreatorHome && !params.hasError && !params.loading && params.hasAccess;
|
|
519
|
+
};
|
|
520
|
+
export var shouldUseElevatedMaiaPanel = function shouldUseElevatedMaiaPanel(section) {
|
|
521
|
+
return section === 'task';
|
|
522
|
+
};
|
|
523
|
+
export var shouldReselectAgentAfterDelete = function shouldReselectAgentAfterDelete(currentAgentId, deletedAgentId) {
|
|
524
|
+
return currentAgentId === deletedAgentId;
|
|
525
|
+
};
|
|
526
|
+
export var shouldClearDragPositionOnLayoutChange = function shouldClearDragPositionOnLayoutChange(layoutMode) {
|
|
527
|
+
return layoutMode !== 'floating';
|
|
528
|
+
};
|
|
529
|
+
export var shouldPersistDragPositionOnDragEnd = function shouldPersistDragPositionOnDragEnd(layoutMode) {
|
|
530
|
+
return layoutMode === 'floating';
|
|
531
|
+
};
|
|
532
|
+
export var shouldStartFloatingPanelDrag = function shouldStartFloatingPanelDrag(isFloating, pointerButton) {
|
|
533
|
+
return isFloating && pointerButton === 0;
|
|
534
|
+
};
|
|
535
|
+
export var isActiveFloatingDragPointer = function isActiveFloatingDragPointer(dragPointerId, eventPointerId) {
|
|
536
|
+
return dragPointerId === eventPointerId;
|
|
537
|
+
};
|
|
538
|
+
export var shouldOpenSkillsCatalog = function shouldOpenSkillsCatalog(userHasSkillsAccess) {
|
|
539
|
+
return userHasSkillsAccess;
|
|
540
|
+
};
|
|
541
|
+
export var shouldUseDragClampFallback = function shouldUseDragClampFallback(contentWrapper) {
|
|
542
|
+
return !contentWrapper;
|
|
543
|
+
};
|
|
544
|
+
export var resolveLayoutDragPositionUpdate = function resolveLayoutDragPositionUpdate(layoutMode, prev, clamp, defaults) {
|
|
545
|
+
if (layoutMode !== 'floating') return null;
|
|
546
|
+
if (prev) return clamp(prev.x, prev.y);
|
|
547
|
+
var x = defaults.innerWidth - defaults.panelWidth - defaults.pad;
|
|
548
|
+
return clamp(x, defaults.pad);
|
|
549
|
+
};
|
|
550
|
+
export var resolvePersistedDragPositionOnEnd = function resolvePersistedDragPositionOnEnd(layoutMode, contentWrapper) {
|
|
551
|
+
return shouldPersistDragPositionOnDragEnd(layoutMode) && Boolean(contentWrapper);
|
|
552
|
+
};
|
|
553
|
+
export var buildUserInitialMessageFromStartChat = function buildUserInitialMessageFromStartChat(input) {
|
|
554
|
+
return _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
555
|
+
message: input.message || '',
|
|
556
|
+
attachments: input.attachments || []
|
|
557
|
+
}, input.faqId ? {
|
|
558
|
+
faqId: input.faqId
|
|
559
|
+
} : {}), input.agentSuggestionId ? {
|
|
560
|
+
agentSuggestionId: input.agentSuggestionId
|
|
561
|
+
} : {}), input.mentions && input.mentions.length > 0 ? {
|
|
562
|
+
mentions: input.mentions
|
|
563
|
+
} : {}), input.fuaId ? {
|
|
564
|
+
fuaId: input.fuaId
|
|
565
|
+
} : {}), input.scId ? {
|
|
566
|
+
scId: input.scId
|
|
567
|
+
} : {}), input.contextData ? {
|
|
568
|
+
contextData: input.contextData
|
|
569
|
+
} : {});
|
|
570
|
+
};
|
|
571
|
+
export var shouldResetSidebarErrorOnStartChat = function shouldResetSidebarErrorOnStartChat(sidebarHasError) {
|
|
572
|
+
return sidebarHasError;
|
|
573
|
+
};
|
|
574
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjYW5BY2Nlc3NUb0NoYXRBSSIsImNhbkFjY2Vzc1RvU2tpbGxzIiwidmFsaWRhdGVJc01haWEiLCJpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCIsImlzVmFsaWRNYWlhUGFuZWxPcHRpb24iLCJpc0FjdGl2ZVNlc3Npb25TdGF0dXMiLCJvcHRpb25zIiwiTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMiLCJpc0xlZ2FjeUNvbnRleHRFbnRpdHkiLCJlbnRpdHkiLCJCb29sZWFuIiwiaW5jbHVkZXMiLCJyZXNvbHZlTGVnYWN5Q29udGV4dFNlc3Npb24iLCJjb21wdXRlZEN1cnJlbnRPcHRpb24iLCJjaGF0T3B0aW9uIiwic2Vzc2lvbk1ldGEiLCJhZ2VudFR5cGUiLCJhZ2VudEVudGl0eSIsImNvbnRleHROYW1lIiwidGFza05hbWUiLCJwcm9qZWN0TmFtZSIsImNsaWVudE5hbWUiLCJlbnRpdHlUeXBlIiwiaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YSIsIm1ldGEiLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb21lIiwiZW50cnkiLCJzdGF0dXMiLCJpc0dsb2JhbE1haWFTZWN0aW9uIiwic2VjdGlvbiIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJjdXJyZW50T3B0aW9uIiwiaG9tZU9wdGlvbiIsInZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlIiwidXNlciIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJyZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uIiwiX3JlZiIsImFnZW50IiwicHJvamVjdCIsImNsaWVudCIsIm11bHRpQWdlbnRzQWNjZXNzIiwiaXNNQUlBIiwiaXNHbG9iYWxTcGVjaWFsaXN0IiwiaXNQcm9qZWN0U3BlY2lhbGlzdCIsImlzQ2xpZW50U3BlY2lhbGlzdCIsImlzTWFpYWtlciIsIm15QWdlbnRzIiwibXlTa2lsbHMiLCJ0eXBlIiwiaG9tZSIsImNoYXQiLCJzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yIiwic2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yIiwicHJvamVjdFNlbGVjdG9yIiwiY2xpZW50U2VsZWN0b3IiLCJyZXNvbHZlU2lkZWJhckFnZW50c05hdkFjdGl2ZSIsImlzTWFpYWtlckFnZW50U2VsZWN0ZWQiLCJyZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24iLCJzYXZlZEFnZW50c05hdkFjdGl2ZSIsInNhdmVkQ3VycmVudE9wdGlvbiIsInNob3VsZFJlc3RvcmVFeHBhbmRlZFBhbmVsIiwic2F2ZWRTZXNzaW9uIiwiX3NhdmVkU2Vzc2lvbiRpc0V4cGFuIiwiaXNFeHBhbmRlZCIsInJlc29sdmVEZWZhdWx0RmxvYXRpbmdQYW5lbFBvc2l0aW9uIiwidmlld3BvcnRXaWR0aCIsInBhbmVsV2lkdGgiLCJwYWRkaW5nIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwieCIsInkiLCJpc0Jhbm5lckZhcVJlYWR5VG9BdXRvU2VuZCIsInBhcmFtcyIsIl9wYXJhbXMkZmFxVGl0bGUiLCJmYXFUaXRsZSIsInRyaW0iLCJhbHJlYWR5U2VudCIsImxvYWRpbmciLCJhZ2VudElkIiwicHJvamVjdElkIiwiY2xpZW50SWQiLCJzaG91bGRTa2lwRmxvYXRpbmdEcmFnVGFyZ2V0IiwidGFyZ2V0IiwiY2xvc2VzdCIsImNsYW1wRmxvYXRpbmdQYW5lbFBvc2l0aW9uIiwicGFuZWxIZWlnaHQiLCJ2aWV3cG9ydEhlaWdodCIsIm9mZnNldCIsIm1heFgiLCJNYXRoIiwibWF4IiwibWF4WSIsIm1pbiIsImVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlIiwiX3JlZjMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9yZWYyIiwidXNlRmlyc3RBZ2VudCIsImFnZW50cyIsImVuc3VyZUFnZW50c0xvYWRlZCIsImxvYWRlZEFnZW50cyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJhYnJ1cHQiLCJzZW50Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJnZXRNYWlhSG9zdFBhbmVsUHJlc2VudGF0aW9uIiwiaXNNaW5pbWl6ZWQiLCJpc01haWFQYWdlUm91dGUiLCJoaWRlUGFuZWxDb250ZW50Iiwic2hvd01pbmltaXplZFBpbGwiLCJyZXNvbHZlSG9zdFRha2VvdmVyRW50aXR5U3RhdGUiLCJkZXRhaWwiLCJfZGV0YWlsJHByb2plY3QiLCJfZGV0YWlsJHRhc2siLCJpc0dsb2JhbEhlYWRlck9wZW4iLCJfZGV0YWlsJGNsaWVudCIsInRhc2siLCJjbGVhckdsb2JhbFBpbm5lZENvbnRleHQiLCJidWlsZEhvc3RUYWtlb3ZlclBlcnNpc3RDb250ZXh0IiwiX2RldGFpbCRwcm9qZWN0MiIsIl9kZXRhaWwkY2xpZW50MiIsIl9kZXRhaWwkdGFzazIiLCJjaGlwc1Byb2plY3QiLCJkaXNwYXRjaFNraWxsTWVudGlvbkluc2VydCIsInNraWxsIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJyZXNvbHZlTWFpYU1vZGFsSTE4bkxhbmciLCJsYW5ndWFnZSIsInJlc29sdmVVc2VySGFzQWdlbnRNYW5hZ2VtZW50UGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsIm11bHRpQWdlbnRzRmVhdHVyZUFjY2VzcyIsIl9wZXJtaXNzaW9ucyRhaV9hZ2VudCIsIl9wZXJtaXNzaW9ucyRhaV9hZ2VudDIiLCJfcGVybWlzc2lvbnMkYWlfYWdlbnQzIiwiYWlfYWdlbnRzIiwiY3JlYXRlIiwiZWRpdCIsInNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwic2hvdWxkQmFja1N0YXJ0TmV3Q2hhdFByZXNlcnZpbmdDb250ZXh0Iiwic2hvdWxkQmFja0NsZWFyUGlubmVkQ29udGV4dCIsImRpZFJlc2V0Q29udGV4dEluU2VjdGlvbiIsInNob3VsZE1hcmtPcmNoZXN0cmF0b3JDb250ZXh0UmVzZXQiLCJ3YXNQaW5uZWQiLCJpc1Bpbm5lZCIsInJlc29sdmVNaW5pbWl6ZWRSZXN0b3JlVGFyZ2V0IiwiY2hhdHMiLCJsYXN0QWN0aXZlQ2hhdElkIiwiZmlyc3RVbnJlYWQiLCJmaW5kIiwiaXNSZWFkIiwic2Vzc2lvbkV4dGVybmFsSWQiLCJyZXNvbHZlSG9zdFRha2VvdmVyQWdlbnRJZCIsImN1cnJlbnRBZ2VudElkIiwiX2FnZW50cyQwJGlkIiwiX2FnZW50cyQiLCJpZCIsInJlc29sdmVGbG9hdGluZ1BhbmVsRHJhZ1Bvc2l0aW9uIiwibGF5b3V0TW9kZSIsImRyYWdQb3NpdGlvbiIsImRlZmF1bHRQb3NpdGlvbiIsImNsYW1wIiwicmVzb2x2ZU5leHREcmFnUG9zaXRpb24iLCJwcmV2aW91cyIsImJ1aWxkTWFpYVBhbmVsU2Vzc2lvblBhdGNoIiwiYWdlbnRzTmF2QWN0aXZlIiwiYWN0aXZlQ2hhdElkIiwic2lkZWJhck9wZW4iLCJob3N0Q29udGV4dCIsInJlc29sdmVIYXNQaW5uZWRDb250ZXh0IiwidGFza0lkIiwiY2hpcHNQcm9qZWN0SWQiLCJyZXNvbHZlT3JjaGVzdHJhdG9ySG9tZU5hdkZsYWdzIiwiaXNDaGF0VmlldyIsImlzSG9tZVN0ZXAyIiwiaGFzUGlubmVkQ29udGV4dCIsImlzSGVhZGVySG9tZVN0ZXAyIiwiaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIiLCJzaG91bGRTaG93T3JjaGVzdHJhdG9yQmFja0J1dHRvbiIsImhhc0Vycm9yIiwic2hvdWxkQ2xlYXJDbGllbnRPbkdvSG9tZUZyb21DaGF0Iiwic2hvdWxkQ2xlYXJUYXNrT25Hb0hvbWVGcm9tQ2hhdCIsInNob3VsZFJlc2V0QWdlbnRUb0ZpcnN0T25Hb0hvbWUiLCJhZ2VudHNDb3VudCIsImlzX2RlbGV0ZWQiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwiaGFzX25vdF9hY2Nlc3MiLCJwcm9qZWN0X2RlbGV0ZWQiLCJzaG91bGRDbGVhck9yY2hlc3RyYXRvckdsb2JhbENvbnRleHRPbkdvSG9tZSIsInNob3VsZFVzZUFjdGl2ZUNoYXRTZW5kSGFuZGxlciIsImhhc1NlbmRNZXNzYWdlRnVuY3Rpb24iLCJzaG91bGRQcmVmZXRjaEFnZW50c0ZvckNhdGFsb2dOZXdDaGF0IiwibXlBZ2VudHNPcHRpb24iLCJteVNraWxsc09wdGlvbiIsImNhbk9wZW5NYWlhTWFya2V0cGxhY2UiLCJzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQiLCJsZWdhY3lDb250ZXh0U2Vzc2lvbiIsImlzX2xlZ2FjeV9jb250ZXh0IiwiYnVpbGRMZWdhY3lDb250ZXh0QWdlbnQiLCJfb2JqZWN0U3ByZWFkIiwiYnVpbGRMZWdhY3lDb250ZXh0TWlncmF0aW9uUGF0Y2giLCJwSWQiLCJwTmFtZSIsImNJZCIsImNOYW1lIiwidElkIiwidE5hbWUiLCJjbGVhcmVkIiwibmFtZSIsIlN0cmluZyIsInBhdGNoIiwiZmluZE9yY2hlc3RyYXRvckFnZW50IiwiY2FuZGlkYXRlIiwic2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50IiwiaGFzUGVuZGluZ1Nlc3Npb25SZXN0b3JlIiwic2hvdWxkUGVyc2lzdExhc3RBY3RpdmVDaGF0SWQiLCJoYXNCYW5uZXJGYXFUaXRsZSIsInNob3VsZFN5bmNQYW5lbFNlc3Npb25PblBhZ2VIaWRlIiwicmVzb2x2ZUNhY2hlZEFnZW50c0lmQXZhaWxhYmxlIiwic2hvdWxkQXR0ZW1wdEluaXRpYWxBZ2VudHNGZXRjaCIsImNhY2hlZEFnZW50c0xlbmd0aCIsImFscmVhZHlGZXRjaGVkIiwiZmluZEFnZW50Rm9yQ2hhdEl0ZW0iLCJjaGF0QWdlbnRJZCIsImFnZW50SXRlbSIsIk51bWJlciIsInNob3VsZEFwcGx5Q2xpZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRTZWxlY3RGaXJzdEFnZW50T25Ib3N0VGFrZW92ZXIiLCJmaXJzdEFnZW50Iiwic2hvdWxkUmVzZXRDaGF0U3RhdGVPbkdvSG9tZSIsInNob3VsZENsZWFyQ29udGV4dEZvckNhdGFsb2dPclNraWxsQWdlbnQiLCJyZXNvbHZlT3Blbk5ld0NoYXRXaXRoQWdlbnRDb250ZXh0IiwiX2RldGFpbCRwcm9qZWN0MyIsIl9kZXRhaWwkY2xpZW50MyIsInNob3VsZFNldFRhc2siLCJjYW5Db250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQiLCJvcmNoZXN0cmF0b3IiLCJyZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSIsInNuYXBzaG90Iiwic2hvdWxkU2tpcEFnZW50c0xvYWRPblNlc3Npb25SZXN0b3JlIiwic2hvdWxkRmV0Y2hBZ2VudERldGFpbE9uU2Vzc2lvblJlc3RvcmUiLCJzaG91bGRQYXNzQWdlbnRUb0dldEFnZW50c09uUmVzdG9yZSIsInNob3VsZFNlbGVjdEZldGNoZWRBZ2VudEFmdGVyUmVzdG9yZSIsImFnZW50VG9TZWxlY3QiLCJyZXNvbHZlU25hcHNob3RDaGlwc1Byb2plY3QiLCJfaG9zdENvbnRleHQkY2hpcHNQcm8iLCJyZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzIiwic2hvd05ld0NoYXQiLCJpc015QWdlbnRzU2VjdGlvbiIsImlzTXlTa2lsbHNTZWN0aW9uIiwiaXNNYWlha2VyQ3JlYXRvckhvbWUiLCJzaG91bGRSZW5kZXJDaGF0U2lkZWJhciIsImhhc0FjY2VzcyIsImlzRmxvYXRpbmciLCJyZXNvbHZlQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3Iiwic2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlciIsIm9uSG9tZVdpdGhBZ2VudHMiLCJvbkNoYXQiLCJzaG91bGRVc2VFbGV2YXRlZE1haWFQYW5lbCIsInNob3VsZFJlc2VsZWN0QWdlbnRBZnRlckRlbGV0ZSIsImRlbGV0ZWRBZ2VudElkIiwic2hvdWxkQ2xlYXJEcmFnUG9zaXRpb25PbkxheW91dENoYW5nZSIsInNob3VsZFBlcnNpc3REcmFnUG9zaXRpb25PbkRyYWdFbmQiLCJzaG91bGRTdGFydEZsb2F0aW5nUGFuZWxEcmFnIiwicG9pbnRlckJ1dHRvbiIsImlzQWN0aXZlRmxvYXRpbmdEcmFnUG9pbnRlciIsImRyYWdQb2ludGVySWQiLCJldmVudFBvaW50ZXJJZCIsInNob3VsZE9wZW5Ta2lsbHNDYXRhbG9nIiwidXNlckhhc1NraWxsc0FjY2VzcyIsInNob3VsZFVzZURyYWdDbGFtcEZhbGxiYWNrIiwiY29udGVudFdyYXBwZXIiLCJyZXNvbHZlTGF5b3V0RHJhZ1Bvc2l0aW9uVXBkYXRlIiwiZGVmYXVsdHMiLCJpbm5lcldpZHRoIiwicGFkIiwicmVzb2x2ZVBlcnNpc3RlZERyYWdQb3NpdGlvbk9uRW5kIiwiYnVpbGRVc2VySW5pdGlhbE1lc3NhZ2VGcm9tU3RhcnRDaGF0IiwiaW5wdXQiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJjb250ZXh0RGF0YSIsInNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQiLCJzaWRlYmFySGFzRXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvQ2hhdEFJTW9kYWwuaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENPUlVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHR5cGUgeyBTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IGNhbkFjY2Vzc1RvQ2hhdEFJLCBjYW5BY2Nlc3NUb1NraWxscyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9wZXJtaXNzaW9ucydcbmltcG9ydCB7IHZhbGlkYXRlSXNNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvdmFsaWRhdGVJc01haWEnXG5pbXBvcnQgdHlwZSB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NsaWVudCdcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgdHlwZSB7IFRhc2sgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9UYXNrJ1xuaW1wb3J0IHR5cGUgeyBNYWlhSG9zdE9wZW5EZXRhaWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhSG9zdE9wZW4nXG5pbXBvcnQgeyBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYVBhbmVsU2Vzc2lvblBlcnNpc3RlbmNlJ1xuaW1wb3J0IHR5cGUgeyBNYWlhQWdlbnRzTmF2QWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYVBhbmVsU2Vzc2lvblBlcnNpc3RlbmNlJ1xuaW1wb3J0IHsgaXNBY3RpdmVTZXNzaW9uU3RhdHVzLCB0eXBlIFNlc3Npb25TdGF0dXMgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9ucy50eXBlcydcbmltcG9ydCB7IG9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgdHlwZSB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5cbmV4cG9ydCBjb25zdCBMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUyA9IFsncHJvamVjdCcsICd0YXNrJywgJ2NsaWVudCddIGFzIGNvbnN0XG5leHBvcnQgdHlwZSBMZWdhY3lDb250ZXh0RW50aXR5ID0gKHR5cGVvZiBMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUylbbnVtYmVyXVxuXG5leHBvcnQgdHlwZSBMZWdhY3lTZXNzaW9uTWV0YSA9IHtcbiAgYWdlbnRUeXBlPzogc3RyaW5nXG4gIGFnZW50RW50aXR5Pzogc3RyaW5nXG4gIHRhc2tOYW1lPzogc3RyaW5nXG4gIHByb2plY3ROYW1lPzogc3RyaW5nXG4gIGNsaWVudE5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGlzTGVnYWN5Q29udGV4dEVudGl0eSA9IChlbnRpdHk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGVudGl0eSBpcyBMZWdhY3lDb250ZXh0RW50aXR5ID0+XG4gIEJvb2xlYW4oZW50aXR5ICYmIExFR0FDWV9DT05URVhUX0VOVElUSUVTLmluY2x1ZGVzKGVudGl0eSBhcyBMZWdhY3lDb250ZXh0RW50aXR5KSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVMZWdhY3lDb250ZXh0U2Vzc2lvbiA9IChcbiAgY29tcHV0ZWRDdXJyZW50T3B0aW9uOiBvcHRpb25zLFxuICBjaGF0T3B0aW9uOiBvcHRpb25zLFxuICBzZXNzaW9uTWV0YTogTGVnYWN5U2Vzc2lvbk1ldGEgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB7IGVudGl0eVR5cGU6IExlZ2FjeUNvbnRleHRFbnRpdHk7IGNvbnRleHROYW1lOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xuICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uICE9PSBjaGF0T3B0aW9uIHx8ICFzZXNzaW9uTWV0YSB8fCBzZXNzaW9uTWV0YS5hZ2VudFR5cGUgIT09ICdjbG9uZScpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgZW50aXR5ID0gc2Vzc2lvbk1ldGEuYWdlbnRFbnRpdHlcbiAgaWYgKCFpc0xlZ2FjeUNvbnRleHRFbnRpdHkoZW50aXR5KSkgcmV0dXJuIG51bGxcblxuICBsZXQgY29udGV4dE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBpZiAoZW50aXR5ID09PSAndGFzaycpIHtcbiAgICBjb250ZXh0TmFtZSA9IHNlc3Npb25NZXRhLnRhc2tOYW1lXG4gIH0gZWxzZSBpZiAoZW50aXR5ID09PSAncHJvamVjdCcpIHtcbiAgICBjb250ZXh0TmFtZSA9IHNlc3Npb25NZXRhLnByb2plY3ROYW1lXG4gIH0gZWxzZSB7XG4gICAgY29udGV4dE5hbWUgPSBzZXNzaW9uTWV0YS5jbGllbnROYW1lXG4gIH1cblxuICByZXR1cm4geyBlbnRpdHlUeXBlOiBlbnRpdHksIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSB8fCAnJyB9XG59XG5cbmV4cG9ydCBjb25zdCBoYXNBbnlBY3RpdmVTZXNzaW9uSW5NZXRhID0gKG1ldGE6IFJlY29yZDxzdHJpbmcsIHsgc3RhdHVzPzogU2Vzc2lvblN0YXR1cyB9IHwgdW5kZWZpbmVkPik6IGJvb2xlYW4gPT5cbiAgT2JqZWN0LnZhbHVlcyhtZXRhKS5zb21lKGVudHJ5ID0+IGlzQWN0aXZlU2Vzc2lvblN0YXR1cyhlbnRyeT8uc3RhdHVzKSlcblxuZXhwb3J0IHR5cGUgQWlDaGF0QmFja0Rlc3RpbmF0aW9uID1cbiAgJ2dsb2JhbF9jb250ZXh0X2hvbWUnIHwgJ3Rhc2tfaG9tZScgfCAncGxhbm5lcl9ob21lJyB8ICdwcm9qZWN0X2hvbWUnIHwgJ2NsaWVudF9ob21lJ1xuXG5leHBvcnQgY29uc3QgaXNHbG9iYWxNYWlhU2VjdGlvbiA9IChzZWN0aW9uOiBTZWN0aW9uKTogYm9vbGVhbiA9PiBzZWN0aW9uID09PSAnaGVhZGVyJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9IChcbiAgc2VjdGlvbjogU2VjdGlvbixcbiAgYWdlbnRUeXBlOiBBZ2VudFsndHlwZSddIHwgdW5kZWZpbmVkLFxuICBjdXJyZW50T3B0aW9uOiBzdHJpbmcsXG4gIGhvbWVPcHRpb246IHN0cmluZ1xuKTogQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0+IHtcbiAgaWYgKGlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgYWdlbnRUeXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiBjdXJyZW50T3B0aW9uID09PSBob21lT3B0aW9uKSB7XG4gICAgcmV0dXJuICdnbG9iYWxfY29udGV4dF9ob21lJ1xuICB9XG4gIGlmIChzZWN0aW9uID09PSAndGFzaycpIHJldHVybiAndGFza19ob21lJ1xuICBpZiAoc2VjdGlvbiA9PT0gJ3BsYW5uZXInKSByZXR1cm4gJ3BsYW5uZXJfaG9tZSdcbiAgaWYgKHNlY3Rpb24gPT09ICdwcm9qZWN0JykgcmV0dXJuICdwcm9qZWN0X2hvbWUnXG4gIGlmIChzZWN0aW9uID09PSAnY2xpZW50JykgcmV0dXJuICdjbGllbnRfaG9tZSdcbiAgcmV0dXJuICdnbG9iYWxfY29udGV4dF9ob21lJ1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUgPSAoc2VjdGlvbjogU2VjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQsIHVzZXI6IENPUlVzZXIpOiBib29sZWFuID0+IHtcbiAgaWYgKCFzZWN0aW9uIHx8ICFjYW5BY2Nlc3NUb0NoYXRBSSh1c2VyKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHNlY3Rpb24gPT09ICdwbGFubmVyJyB8fCBzZWN0aW9uID09PSAndGFzaycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHNlY3Rpb24gPT09ICdoZWFkZXInKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyB8fCB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUylcbiAgfVxuXG4gIHJldHVybiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MpXG59XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVDb21wdXRlZEN1cnJlbnRPcHRpb25QYXJhbXMgPSB7XG4gIGN1cnJlbnRPcHRpb246IG9wdGlvbnNcbiAgYWdlbnQ6IEFnZW50IHwgbnVsbCB8IHVuZGVmaW5lZFxuICBwcm9qZWN0OiBQcm9qZWN0IHwgbnVsbCB8IHVuZGVmaW5lZFxuICBjbGllbnQ6IENsaWVudCB8IG51bGwgfCB1bmRlZmluZWRcbiAgdXNlcjogQ09SVXNlclxuICBtdWx0aUFnZW50c0FjY2VzczogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvbiA9ICh7XG4gIGN1cnJlbnRPcHRpb24sXG4gIGFnZW50LFxuICBwcm9qZWN0LFxuICBjbGllbnQsXG4gIHVzZXIsXG4gIG11bHRpQWdlbnRzQWNjZXNzLFxufTogUmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvblBhcmFtcyk6IG9wdGlvbnMgPT4ge1xuICBjb25zdCBpc01BSUEgPSB2YWxpZGF0ZUlzTWFpYShhZ2VudCBhcyBBZ2VudClcbiAgY29uc3QgaXNHbG9iYWxTcGVjaWFsaXN0ID0gaXNNQUlBICYmIGFnZW50Py5lbnRpdHkgPT09ICdnbG9iYWwnXG4gIGNvbnN0IGlzUHJvamVjdFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgKGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0JyB8fCBhZ2VudD8uZW50aXR5ID09IG51bGwpXG4gIGNvbnN0IGlzQ2xpZW50U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50J1xuICBjb25zdCBpc01haWFrZXIgPSBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhZ2VudClcblxuICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cyAmJiBtdWx0aUFnZW50c0FjY2Vzcykge1xuICAgIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gIH1cblxuICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teVNraWxscyAmJiBjYW5BY2Nlc3NUb1NraWxscyh1c2VyKSkge1xuICAgIHJldHVybiBvcHRpb25zLm15U2tpbGxzXG4gIH1cblxuICBpZiAoaXNHbG9iYWxTcGVjaWFsaXN0ICYmICFpc01haWFrZXIgJiYgYWdlbnQ/LnR5cGUgIT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgIHJldHVybiBvcHRpb25zLmNoYXRcbiAgfVxuXG4gIGNvbnN0IHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNQcm9qZWN0U3BlY2lhbGlzdCAmJiAhcHJvamVjdFxuICBjb25zdCBzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNDbGllbnRTcGVjaWFsaXN0ICYmICFjbGllbnRcblxuICBpZiAoc2hvdWxkU2hvd1Byb2plY3RTZWxlY3Rvcikge1xuICAgIHJldHVybiBvcHRpb25zLnByb2plY3RTZWxlY3RvclxuICB9XG4gIGlmIChzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5jbGllbnRTZWxlY3RvclxuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnRPcHRpb25cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTaWRlYmFyQWdlbnRzTmF2QWN0aXZlID0gKFxuICBjb21wdXRlZEN1cnJlbnRPcHRpb246IG9wdGlvbnMsXG4gIGlzTWFpYWtlckFnZW50U2VsZWN0ZWQ6IGJvb2xlYW5cbik6IE1haWFBZ2VudHNOYXZBY3RpdmUgfCBudWxsID0+IHtcbiAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teVNraWxscykgcmV0dXJuICdteVNraWxscydcbiAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cykgcmV0dXJuICdteUFnZW50cydcbiAgaWYgKGlzTWFpYWtlckFnZW50U2VsZWN0ZWQpIHJldHVybiAnbWFpYWtlcidcbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVJbml0aWFsQ3VycmVudE9wdGlvbiA9IChcbiAgc2F2ZWRBZ2VudHNOYXZBY3RpdmU6IE1haWFBZ2VudHNOYXZBY3RpdmUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzYXZlZEN1cnJlbnRPcHRpb246IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHVzZXI6IENPUlVzZXJcbik6IG9wdGlvbnMgPT4ge1xuICBpZiAoc2F2ZWRBZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cycpIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gIGlmIChzYXZlZEFnZW50c05hdkFjdGl2ZSA9PT0gJ215U2tpbGxzJyAmJiBjYW5BY2Nlc3NUb1NraWxscyh1c2VyKSkgcmV0dXJuIG9wdGlvbnMubXlTa2lsbHNcbiAgaWYgKHNhdmVkQ3VycmVudE9wdGlvbiAmJiBpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uKHNhdmVkQ3VycmVudE9wdGlvbikpIHtcbiAgICByZXR1cm4gc2F2ZWRDdXJyZW50T3B0aW9uIGFzIG9wdGlvbnNcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5ob21lXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXN0b3JlRXhwYW5kZWRQYW5lbCA9IChzYXZlZFNlc3Npb246IHsgaXNFeHBhbmRlZD86IGJvb2xlYW4gfSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gIHNhdmVkU2Vzc2lvbj8uaXNFeHBhbmRlZCA/PyBmYWxzZVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZURlZmF1bHRGbG9hdGluZ1BhbmVsUG9zaXRpb24gPSAoXG4gIHZpZXdwb3J0V2lkdGg6IG51bWJlcixcbiAgcGFuZWxXaWR0aDogbnVtYmVyLFxuICBwYWRkaW5nID0gMTZcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9PiAoe1xuICB4OiB2aWV3cG9ydFdpZHRoIC0gcGFuZWxXaWR0aCAtIHBhZGRpbmcsXG4gIHk6IHBhZGRpbmcsXG59KVxuXG5leHBvcnQgY29uc3QgaXNCYW5uZXJGYXFSZWFkeVRvQXV0b1NlbmQgPSAocGFyYW1zOiB7XG4gIGZhcVRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICBhbHJlYWR5U2VudDogYm9vbGVhblxuICBsb2FkaW5nOiBib29sZWFuXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gIHNlY3Rpb246IFNlY3Rpb25cbiAgcHJvamVjdElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBjbGllbnRJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbn0pOiBib29sZWFuID0+IHtcbiAgaWYgKCFwYXJhbXMuZmFxVGl0bGU/LnRyaW0oKSB8fCBwYXJhbXMuYWxyZWFkeVNlbnQgfHwgcGFyYW1zLmxvYWRpbmcgfHwgIXBhcmFtcy5hZ2VudElkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAocGFyYW1zLnNlY3Rpb24gPT09ICdwcm9qZWN0JykgcmV0dXJuIEJvb2xlYW4ocGFyYW1zLnByb2plY3RJZClcbiAgaWYgKHBhcmFtcy5zZWN0aW9uID09PSAnY2xpZW50JykgcmV0dXJuIEJvb2xlYW4ocGFyYW1zLmNsaWVudElkKVxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2tpcEZsb2F0aW5nRHJhZ1RhcmdldCA9ICh0YXJnZXQ6IEVsZW1lbnQgfCBudWxsKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKHRhcmdldD8uY2xvc2VzdCgnYnV0dG9uLCBhLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgW3JvbGU9XCJidXR0b25cIl0sIFtkYXRhLW5vLWRyYWc9XCJ0cnVlXCJdJykpXG5cbmV4cG9ydCBjb25zdCBjbGFtcEZsb2F0aW5nUGFuZWxQb3NpdGlvbiA9IChcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHBhbmVsV2lkdGg6IG51bWJlcixcbiAgcGFuZWxIZWlnaHQ6IG51bWJlcixcbiAgdmlld3BvcnRXaWR0aDogbnVtYmVyLFxuICB2aWV3cG9ydEhlaWdodDogbnVtYmVyLFxuICBvZmZzZXQgPSAxNlxuKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9ID0+IHtcbiAgY29uc3QgbWF4WCA9IE1hdGgubWF4KG9mZnNldCwgdmlld3BvcnRXaWR0aCAtIHBhbmVsV2lkdGggLSBvZmZzZXQpXG4gIGNvbnN0IG1heFkgPSBNYXRoLm1heChvZmZzZXQsIHZpZXdwb3J0SGVpZ2h0IC0gcGFuZWxIZWlnaHQgLSBvZmZzZXQpXG5cbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLm1pbihNYXRoLm1heCh4LCBvZmZzZXQpLCBtYXhYKSxcbiAgICB5OiBNYXRoLm1pbihNYXRoLm1heCh5LCBvZmZzZXQpLCBtYXhZKSxcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBFbnN1cmVBZ2VudHNCZWZvcmVTa2lsbFVzZVBhcmFtcyA9IHtcbiAgdXNlRmlyc3RBZ2VudDogYm9vbGVhblxuICBhZ2VudHM6IEFnZW50W11cbiAgZW5zdXJlQWdlbnRzTG9hZGVkOiAoKSA9PiBQcm9taXNlPEFnZW50W10+XG59XG5cbi8qKiBHYXJhbnRpemEgcXVlIGxhIGxpc3RhIGRlIGFnZW50ZXMgZXN0w6kgZGlzcG9uaWJsZSBhbnRlcyBkZSBhYnJpciB1biBjaGF0IGNvbiB1bmEgc2tpbGwuICovXG5leHBvcnQgY29uc3QgZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UgPSBhc3luYyAoe1xuICB1c2VGaXJzdEFnZW50LFxuICBhZ2VudHMsXG4gIGVuc3VyZUFnZW50c0xvYWRlZCxcbn06IEVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlUGFyYW1zKTogUHJvbWlzZTxBZ2VudCB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZiAoIXVzZUZpcnN0QWdlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBsb2FkZWRBZ2VudHMgPSBhZ2VudHMubGVuZ3RoID4gMCA/IGFnZW50cyA6IGF3YWl0IGVuc3VyZUFnZW50c0xvYWRlZCgpXG4gIHJldHVybiBsb2FkZWRBZ2VudHNbMF1cbn1cblxuZXhwb3J0IHR5cGUgTWFpYUhvc3RQYW5lbFByZXNlbnRhdGlvbiA9IHtcbiAgLyoqIE9jdWx0YSBlbCBwYW5lbCBmbG90YW50ZSBkZWwgaG9zdCBzaW4gcGVyc2lzdGlyIG1pbmltaXphZG8uICovXG4gIGhpZGVQYW5lbENvbnRlbnQ6IGJvb2xlYW5cbiAgc2hvd01pbmltaXplZFBpbGw6IGJvb2xlYW5cbn1cblxuLyoqIFZpc2liaWxpZGFkIGRlbCBwYW5lbCBob3N0IGN1YW5kbyBsYSBww6FnaW5hIC9tYWlhIGRlbCBzaWRlYmFyIGVzdMOhIGFjdGl2YS4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYWlhSG9zdFBhbmVsUHJlc2VudGF0aW9uID0gKFxuICBpc01pbmltaXplZDogYm9vbGVhbixcbiAgaXNNYWlhUGFnZVJvdXRlOiBib29sZWFuXG4pOiBNYWlhSG9zdFBhbmVsUHJlc2VudGF0aW9uID0+ICh7XG4gIGhpZGVQYW5lbENvbnRlbnQ6IGlzTWluaW1pemVkIHx8IGlzTWFpYVBhZ2VSb3V0ZSxcbiAgc2hvd01pbmltaXplZFBpbGw6IGlzTWluaW1pemVkICYmICFpc01haWFQYWdlUm91dGUsXG59KVxuXG5leHBvcnQgdHlwZSBIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZSA9IHtcbiAgcHJvamVjdDogUHJvamVjdCB8IG51bGxcbiAgLyoqIGB1bmRlZmluZWRgID0gbm8gaW52b2NhciBzZXRDbGllbnQgKHAuIGVqLiB0YWtlb3ZlciBkZXNkZSBwcm95ZWN0bykuICovXG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbCB8IHVuZGVmaW5lZFxuICB0YXNrOiBUYXNrIHwgbnVsbFxuICBjbGVhckdsb2JhbFBpbm5lZENvbnRleHQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZSA9IChcbiAgZGV0YWlsOiBQaWNrPE1haWFIb3N0T3BlbkRldGFpbCwgJ3NlY3Rpb24nIHwgJ3Byb2plY3QnIHwgJ2NsaWVudCcgfCAndGFzayc+XG4pOiBIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZSA9PiB7XG4gIGNvbnN0IGlzR2xvYmFsSGVhZGVyT3BlbiA9IGRldGFpbC5zZWN0aW9uID09PSAnaGVhZGVyJyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3BsYW5uZXInXG4gIGNvbnN0IHByb2plY3QgPSBkZXRhaWwuc2VjdGlvbiA9PT0gJ3Byb2plY3QnIHx8IGRldGFpbC5zZWN0aW9uID09PSAndGFzaycgPyAoZGV0YWlsLnByb2plY3QgPz8gbnVsbCkgOiBudWxsXG5cbiAgbGV0IGNsaWVudDogQ2xpZW50IHwgbnVsbCB8IHVuZGVmaW5lZFxuICBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICdjbGllbnQnKSB7XG4gICAgY2xpZW50ID0gZGV0YWlsLmNsaWVudCA/PyBudWxsXG4gIH0gZWxzZSBpZiAoaXNHbG9iYWxIZWFkZXJPcGVuKSB7XG4gICAgY2xpZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgdGFzayA9IGRldGFpbC5zZWN0aW9uID09PSAndGFzaycgPyAoZGV0YWlsLnRhc2sgPz8gbnVsbCkgOiBudWxsXG5cbiAgcmV0dXJuIHtcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGNsZWFyR2xvYmFsUGlubmVkQ29udGV4dDogaXNHbG9iYWxIZWFkZXJPcGVuLFxuICB9XG59XG5cbmV4cG9ydCB0eXBlIEhvc3RUYWtlb3ZlclBlcnNpc3RDb250ZXh0ID0ge1xuICBzZWN0aW9uOiBTZWN0aW9uXG4gIHByb2plY3Q6IFByb2plY3QgfCBudWxsXG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbFxuICB0YXNrOiBUYXNrIHwgbnVsbFxuICBjaGlwc1Byb2plY3Q6IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkSG9zdFRha2VvdmVyUGVyc2lzdENvbnRleHQgPSAoXG4gIGRldGFpbDogUGljazxNYWlhSG9zdE9wZW5EZXRhaWwsICdzZWN0aW9uJyB8ICdwcm9qZWN0JyB8ICdjbGllbnQnIHwgJ3Rhc2snPlxuKTogSG9zdFRha2VvdmVyUGVyc2lzdENvbnRleHQgPT4gKHtcbiAgc2VjdGlvbjogZGV0YWlsLnNlY3Rpb24gYXMgU2VjdGlvbixcbiAgcHJvamVjdDogZGV0YWlsLnNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3Rhc2snID8gKGRldGFpbC5wcm9qZWN0ID8/IG51bGwpIDogbnVsbCxcbiAgY2xpZW50OiBkZXRhaWwuc2VjdGlvbiA9PT0gJ2NsaWVudCcgPyAoZGV0YWlsLmNsaWVudCA/PyBudWxsKSA6IG51bGwsXG4gIHRhc2s6IGRldGFpbC5zZWN0aW9uID09PSAndGFzaycgPyAoZGV0YWlsLnRhc2sgPz8gbnVsbCkgOiBudWxsLFxuICBjaGlwc1Byb2plY3Q6IG51bGwsXG59KVxuXG4vKiogSW5zZXJ0YSBsYSBtZW5jacOzbiBkZSBza2lsbCBjdWFuZG8gZWwgaW5wdXQgZGVsIGNoYXQgeWEgZXN0w6EgbW9udGFkby4gKi9cbmV4cG9ydCBjb25zdCBkaXNwYXRjaFNraWxsTWVudGlvbkluc2VydCA9IChza2lsbDogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfSk6IHZvaWQgPT4ge1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWFpYS1pbnNlcnQtc2tpbGwtbWVudGlvbicsIHsgZGV0YWlsOiB7IHNraWxsIH0gfSkpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWFpYS1pbnB1dC1yZWZvY3VzJykpXG4gICAgfSlcbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVNYWlhTW9kYWxJMThuTGFuZyA9IChsYW5ndWFnZTogc3RyaW5nKTogc3RyaW5nID0+IChsYW5ndWFnZSA9PT0gJ2JyJyA/ICdwdC1icicgOiBsYW5ndWFnZSlcblxudHlwZSBBZ2VudE1hbmFnZW1lbnRQZXJtaXNzaW9ucyA9IHtcbiAgYWlfYWdlbnRzPzoge1xuICAgIGNyZWF0ZT86IGJvb2xlYW5cbiAgICBlZGl0PzogYm9vbGVhblxuICAgIGRlbGV0ZT86IGJvb2xlYW5cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVVzZXJIYXNBZ2VudE1hbmFnZW1lbnRQZXJtaXNzaW9ucyA9IChcbiAgcGVybWlzc2lvbnM6IEFnZW50TWFuYWdlbWVudFBlcm1pc3Npb25zIHwgdW5kZWZpbmVkLFxuICBtdWx0aUFnZW50c0ZlYXR1cmVBY2Nlc3M6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihcbiAgICAocGVybWlzc2lvbnM/LmFpX2FnZW50cz8uY3JlYXRlIHx8IHBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmVkaXQgfHwgcGVybWlzc2lvbnM/LmFpX2FnZW50cz8uZGVsZXRlKSAmJlxuICAgIG11bHRpQWdlbnRzRmVhdHVyZUFjY2Vzc1xuICApXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTdGFydE5ld0NoYXRGcm9tQ2F0YWxvZyA9IChcbiAgY29tcHV0ZWRDdXJyZW50T3B0aW9uOiBvcHRpb25zLFxuICBpc01haWFrZXJBZ2VudFNlbGVjdGVkOiBib29sZWFuXG4pOiBib29sZWFuID0+XG4gIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cyB8fFxuICBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMgfHxcbiAgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWQpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRCYWNrU3RhcnROZXdDaGF0UHJlc2VydmluZ0NvbnRleHQgPSAoY29tcHV0ZWRDdXJyZW50T3B0aW9uOiBvcHRpb25zLCBjaGF0T3B0aW9uOiBvcHRpb25zKTogYm9vbGVhbiA9PlxuICBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IGNoYXRPcHRpb25cblxuZXhwb3J0IGNvbnN0IHNob3VsZEJhY2tDbGVhclBpbm5lZENvbnRleHQgPSAoXG4gIGNvbXB1dGVkQ3VycmVudE9wdGlvbjogb3B0aW9ucyxcbiAgaG9tZU9wdGlvbjogb3B0aW9ucyxcbiAgc2VjdGlvbjogU2VjdGlvbixcbiAgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uOiBib29sZWFuXG4pOiBib29sZWFuID0+IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gaG9tZU9wdGlvbiAmJiAoaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSB8fCBkaWRSZXNldENvbnRleHRJblNlY3Rpb24pXG5cbmV4cG9ydCBjb25zdCBzaG91bGRNYXJrT3JjaGVzdHJhdG9yQ29udGV4dFJlc2V0ID0gKFxuICBzZWN0aW9uOiBTZWN0aW9uLFxuICBhZ2VudFR5cGU6IEFnZW50Wyd0eXBlJ10gfCB1bmRlZmluZWQsXG4gIHdhc1Bpbm5lZDogYm9vbGVhbixcbiAgaXNQaW5uZWQ6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gIWlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgYWdlbnRUeXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiB3YXNQaW5uZWQgJiYgIWlzUGlubmVkXG5cbmV4cG9ydCB0eXBlIE1pbmltaXplZFJlc3RvcmVDaGF0ID0ge1xuICBpc1JlYWQ/OiBib29sZWFuXG4gIHNlc3Npb25FeHRlcm5hbElkPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTWluaW1pemVkUmVzdG9yZVRhcmdldCA9IDxUIGV4dGVuZHMgTWluaW1pemVkUmVzdG9yZUNoYXQ+KFxuICBjaGF0czogVFtdLFxuICBsYXN0QWN0aXZlQ2hhdElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBUIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgZmlyc3RVbnJlYWQgPSBjaGF0cy5maW5kKGNoYXQgPT4gY2hhdC5pc1JlYWQgPT09IGZhbHNlKVxuICBpZiAoZmlyc3RVbnJlYWQpIHJldHVybiBmaXJzdFVucmVhZFxuICByZXR1cm4gbGFzdEFjdGl2ZUNoYXRJZCA/IGNoYXRzLmZpbmQoY2hhdCA9PiBjaGF0LnNlc3Npb25FeHRlcm5hbElkID09PSBsYXN0QWN0aXZlQ2hhdElkKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhvc3RUYWtlb3ZlckFnZW50SWQgPSAoXG4gIGNsZWFyR2xvYmFsUGlubmVkQ29udGV4dDogYm9vbGVhbixcbiAgYWdlbnRzOiBBZ2VudFtdLFxuICBjdXJyZW50QWdlbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICghY2xlYXJHbG9iYWxQaW5uZWRDb250ZXh0KSByZXR1cm4gY3VycmVudEFnZW50SWQgPz8gbnVsbFxuICByZXR1cm4gYWdlbnRzWzBdPy5pZCA/PyBudWxsXG59XG5cbmV4cG9ydCB0eXBlIE1haWFQYW5lbERyYWdQb3NpdGlvbiA9IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZsb2F0aW5nUGFuZWxEcmFnUG9zaXRpb24gPSAocGFyYW1zOiB7XG4gIGxheW91dE1vZGU6ICdzaWRlYmFyJyB8ICdmdWxsc2NyZWVuJyB8ICdmbG9hdGluZydcbiAgZHJhZ1Bvc2l0aW9uOiBNYWlhUGFuZWxEcmFnUG9zaXRpb24gfCBudWxsXG4gIHZpZXdwb3J0V2lkdGg6IG51bWJlclxuICBwYW5lbFdpZHRoOiBudW1iZXJcbiAgY2xhbXA6ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gTWFpYVBhbmVsRHJhZ1Bvc2l0aW9uXG59KTogTWFpYVBhbmVsRHJhZ1Bvc2l0aW9uIHwgbnVsbCA9PiB7XG4gIGlmIChwYXJhbXMubGF5b3V0TW9kZSAhPT0gJ2Zsb2F0aW5nJykge1xuICAgIHJldHVybiBwYXJhbXMuZHJhZ1Bvc2l0aW9uXG4gIH1cbiAgaWYgKHBhcmFtcy5kcmFnUG9zaXRpb24pIHtcbiAgICByZXR1cm4gcGFyYW1zLmRyYWdQb3NpdGlvblxuICB9XG4gIGNvbnN0IGRlZmF1bHRQb3NpdGlvbiA9IHJlc29sdmVEZWZhdWx0RmxvYXRpbmdQYW5lbFBvc2l0aW9uKHBhcmFtcy52aWV3cG9ydFdpZHRoLCBwYXJhbXMucGFuZWxXaWR0aClcbiAgcmV0dXJuIHBhcmFtcy5jbGFtcChkZWZhdWx0UG9zaXRpb24ueCwgZGVmYXVsdFBvc2l0aW9uLnkpXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTmV4dERyYWdQb3NpdGlvbiA9IChcbiAgcHJldmlvdXM6IE1haWFQYW5lbERyYWdQb3NpdGlvbiB8IG51bGwsXG4gIG5leHQ6IE1haWFQYW5lbERyYWdQb3NpdGlvblxuKTogTWFpYVBhbmVsRHJhZ1Bvc2l0aW9uID0+IHtcbiAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzLnggPT09IG5leHQueCAmJiBwcmV2aW91cy55ID09PSBuZXh0LnkpIHtcbiAgICByZXR1cm4gcHJldmlvdXNcbiAgfVxuICByZXR1cm4gbmV4dFxufVxuXG5leHBvcnQgdHlwZSBNYWlhUGFuZWxTZXNzaW9uSG9zdENvbnRleHQgPSB7XG4gIHNlY3Rpb246IFNlY3Rpb25cbiAgcHJvamVjdDogUHJvamVjdCB8IG51bGxcbiAgY2xpZW50OiBDbGllbnQgfCBudWxsXG4gIHRhc2s6IFRhc2sgfCBudWxsXG4gIGNoaXBzUHJvamVjdDogdW5rbm93blxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRNYWlhUGFuZWxTZXNzaW9uUGF0Y2ggPSAocGFyYW1zOiB7XG4gIGlzTWluaW1pemVkOiBib29sZWFuXG4gIGN1cnJlbnRPcHRpb246IG9wdGlvbnNcbiAgYWdlbnRzTmF2QWN0aXZlOiBNYWlhQWdlbnRzTmF2QWN0aXZlIHwgbnVsbFxuICBhY3RpdmVDaGF0SWQ6IHN0cmluZyB8IG51bGxcbiAgYWdlbnRJZDogc3RyaW5nIHwgbnVsbFxuICBzaWRlYmFyT3BlbjogYm9vbGVhblxuICBsYXlvdXRNb2RlOiAnc2lkZWJhcicgfCAnZnVsbHNjcmVlbicgfCAnZmxvYXRpbmcnXG4gIGRyYWdQb3NpdGlvbjogTWFpYVBhbmVsRHJhZ1Bvc2l0aW9uIHwgbnVsbFxuICBob3N0Q29udGV4dDogTWFpYVBhbmVsU2Vzc2lvbkhvc3RDb250ZXh0XG59KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsID0+IHtcbiAgaWYgKHBhcmFtcy5pc01pbmltaXplZCkgcmV0dXJuIG51bGxcblxuICByZXR1cm4ge1xuICAgIGlzRXhwYW5kZWQ6IHRydWUsXG4gICAgY3VycmVudE9wdGlvbjogcGFyYW1zLmN1cnJlbnRPcHRpb24sXG4gICAgYWdlbnRzTmF2QWN0aXZlOiBwYXJhbXMuYWdlbnRzTmF2QWN0aXZlLFxuICAgIGFjdGl2ZUNoYXRJZDogcGFyYW1zLmFjdGl2ZUNoYXRJZCxcbiAgICBhZ2VudElkOiBwYXJhbXMuYWdlbnRJZCxcbiAgICBzaWRlYmFyT3BlbjogcGFyYW1zLnNpZGViYXJPcGVuLFxuICAgIGRyYWdQb3NpdGlvbjogcGFyYW1zLmxheW91dE1vZGUgPT09ICdmbG9hdGluZycgPyBwYXJhbXMuZHJhZ1Bvc2l0aW9uIDogbnVsbCxcbiAgICBob3N0Q29udGV4dDogcGFyYW1zLmhvc3RDb250ZXh0LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlSGFzUGlubmVkQ29udGV4dCA9IChwYXJhbXM6IHtcbiAgdGFza0lkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBjaGlwc1Byb2plY3RJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgY2xpZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHByb2plY3RJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbn0pOiBib29sZWFuID0+IEJvb2xlYW4ocGFyYW1zLnRhc2tJZCB8fCBwYXJhbXMuY2hpcHNQcm9qZWN0SWQgfHwgcGFyYW1zLmNsaWVudElkIHx8IHBhcmFtcy5wcm9qZWN0SWQpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlT3JjaGVzdHJhdG9ySG9tZU5hdkZsYWdzID0gKHBhcmFtczoge1xuICBjb21wdXRlZEN1cnJlbnRPcHRpb246IG9wdGlvbnNcbiAgaG9tZU9wdGlvbjogb3B0aW9uc1xuICBjaGF0T3B0aW9uOiBvcHRpb25zXG4gIGhhc1Bpbm5lZENvbnRleHQ6IGJvb2xlYW5cbiAgc2VjdGlvbjogU2VjdGlvblxuICBkaWRSZXNldENvbnRleHRJblNlY3Rpb246IGJvb2xlYW5cbn0pOiB7XG4gIGlzQ2hhdFZpZXc6IGJvb2xlYW5cbiAgaXNIb21lU3RlcDI6IGJvb2xlYW5cbiAgaXNIZWFkZXJIb21lU3RlcDI6IGJvb2xlYW5cbiAgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDI6IGJvb2xlYW5cbn0gPT4ge1xuICBjb25zdCBpc0NoYXRWaWV3ID0gcGFyYW1zLmNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gcGFyYW1zLmNoYXRPcHRpb25cbiAgY29uc3QgaXNIb21lU3RlcDIgPSBwYXJhbXMuY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBwYXJhbXMuaG9tZU9wdGlvbiAmJiBwYXJhbXMuaGFzUGlubmVkQ29udGV4dFxuICByZXR1cm4ge1xuICAgIGlzQ2hhdFZpZXcsXG4gICAgaXNIb21lU3RlcDIsXG4gICAgaXNIZWFkZXJIb21lU3RlcDI6IGlzR2xvYmFsTWFpYVNlY3Rpb24ocGFyYW1zLnNlY3Rpb24pICYmIGlzSG9tZVN0ZXAyLFxuICAgIGlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyOiAhaXNHbG9iYWxNYWlhU2VjdGlvbihwYXJhbXMuc2VjdGlvbikgJiYgaXNIb21lU3RlcDIgJiYgcGFyYW1zLmRpZFJlc2V0Q29udGV4dEluU2VjdGlvbixcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd09yY2hlc3RyYXRvckJhY2tCdXR0b24gPSAocGFyYW1zOiB7XG4gIGFnZW50VHlwZT86IHN0cmluZ1xuICBoYXNFcnJvcjogYm9vbGVhblxuICBsb2FkaW5nOiBib29sZWFuXG4gIGlzQ2hhdFZpZXc6IGJvb2xlYW5cbiAgaXNIZWFkZXJIb21lU3RlcDI6IGJvb2xlYW5cbiAgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDI6IGJvb2xlYW5cbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5hZ2VudFR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmXG4gICFwYXJhbXMuaGFzRXJyb3IgJiZcbiAgIXBhcmFtcy5sb2FkaW5nICYmXG4gIChwYXJhbXMuaXNDaGF0VmlldyB8fCBwYXJhbXMuaXNIZWFkZXJIb21lU3RlcDIgfHwgcGFyYW1zLmlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2xlYXJDbGllbnRPbkdvSG9tZUZyb21DaGF0ID0gKGFnZW50RW50aXR5Pzogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gPT4gYWdlbnRFbnRpdHkgIT09ICdjbGllbnQnXG5cbmV4cG9ydCBjb25zdCBzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0ID0gKHNlY3Rpb246IFNlY3Rpb24pOiBib29sZWFuID0+IHNlY3Rpb24gIT09ICd0YXNrJ1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZSA9IChhZ2VudDogQWdlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBhZ2VudHNDb3VudDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKFxuICAgICghYWdlbnQgfHwgYWdlbnQuaXNfZGVsZXRlZCB8fCBhZ2VudC5oYXNfbm90X3Blcm1pc3Npb25zIHx8IGFnZW50Lmhhc19ub3RfYWNjZXNzIHx8IGFnZW50LnByb2plY3RfZGVsZXRlZCkgJiZcbiAgICBhZ2VudHNDb3VudCA+IDBcbiAgKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2xlYXJPcmNoZXN0cmF0b3JHbG9iYWxDb250ZXh0T25Hb0hvbWUgPSAoc2VjdGlvbjogU2VjdGlvbiwgYWdlbnRUeXBlPzogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGFnZW50VHlwZSA9PT0gJ29yY2hlc3RyYXRvcidcblxuZXhwb3J0IGNvbnN0IHNob3VsZFVzZUFjdGl2ZUNoYXRTZW5kSGFuZGxlciA9IChcbiAgY29tcHV0ZWRDdXJyZW50T3B0aW9uOiBvcHRpb25zLFxuICBjaGF0T3B0aW9uOiBvcHRpb25zLFxuICBoYXNTZW5kTWVzc2FnZUZ1bmN0aW9uOiBib29sZWFuXG4pOiBib29sZWFuID0+IEJvb2xlYW4oaGFzU2VuZE1lc3NhZ2VGdW5jdGlvbiAmJiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IGNoYXRPcHRpb24pXG5cbmV4cG9ydCBjb25zdCBzaG91bGRQcmVmZXRjaEFnZW50c0ZvckNhdGFsb2dOZXdDaGF0ID0gKFxuICBjb21wdXRlZEN1cnJlbnRPcHRpb246IG9wdGlvbnMsXG4gIG15QWdlbnRzT3B0aW9uOiBvcHRpb25zLFxuICBteVNraWxsc09wdGlvbjogb3B0aW9uc1xuKTogYm9vbGVhbiA9PiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG15QWdlbnRzT3B0aW9uIHx8IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gbXlTa2lsbHNPcHRpb25cblxuZXhwb3J0IGNvbnN0IGNhbk9wZW5NYWlhTWFya2V0cGxhY2UgPSAobXVsdGlBZ2VudHNBY2Nlc3M6IGJvb2xlYW4pOiBib29sZWFuID0+IG11bHRpQWdlbnRzQWNjZXNzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQgPSAoXG4gIGxlZ2FjeUNvbnRleHRTZXNzaW9uOiB1bmtub3duLFxuICBhZ2VudDogQWdlbnQgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBhZ2VudCBpcyBBZ2VudCA9PiBCb29sZWFuKGxlZ2FjeUNvbnRleHRTZXNzaW9uICYmIGFnZW50ICYmICFhZ2VudC5pc19sZWdhY3lfY29udGV4dClcblxuZXhwb3J0IGNvbnN0IGJ1aWxkTGVnYWN5Q29udGV4dEFnZW50ID0gKGFnZW50OiBBZ2VudCk6IEFnZW50ID0+ICh7IC4uLmFnZW50LCBpc19sZWdhY3lfY29udGV4dDogdHJ1ZSB9KVxuXG5leHBvcnQgdHlwZSBMZWdhY3lDb250ZXh0TWlncmF0aW9uTWV0YSA9IHtcbiAgYWdlbnRFbnRpdHk/OiBzdHJpbmdcbiAgcHJvamVjdElkPzogbnVtYmVyXG4gIHByb2plY3ROYW1lPzogc3RyaW5nXG4gIGNsaWVudElkPzogbnVtYmVyXG4gIGNsaWVudE5hbWU/OiBzdHJpbmdcbiAgdGFza0lkPzogbnVtYmVyXG4gIHRhc2tOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIExlZ2FjeUNvbnRleHRDaGlwc1Byb2plY3QgPSB7XG4gIHByb2plY3RJZDogc3RyaW5nXG4gIHByb2plY3ROYW1lOiBzdHJpbmdcbiAgY2xpZW50TmFtZTogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIExlZ2FjeUNvbnRleHRNaWdyYXRpb25QYXRjaCA9IHtcbiAgdGFzazogVGFzayB8IG51bGxcbiAgcHJvamVjdDogUHJvamVjdCB8IG51bGxcbiAgY2xpZW50OiBDbGllbnQgfCBudWxsXG4gIGNoaXBzUHJvamVjdDogTGVnYWN5Q29udGV4dENoaXBzUHJvamVjdCB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkTGVnYWN5Q29udGV4dE1pZ3JhdGlvblBhdGNoID0gKFxuICBzZXNzaW9uTWV0YTogTGVnYWN5Q29udGV4dE1pZ3JhdGlvbk1ldGEgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBMZWdhY3lDb250ZXh0TWlncmF0aW9uUGF0Y2ggfCBudWxsID0+IHtcbiAgaWYgKCFzZXNzaW9uTWV0YT8uYWdlbnRFbnRpdHkpIHJldHVybiBudWxsXG5cbiAgY29uc3Qge1xuICAgIGFnZW50RW50aXR5LFxuICAgIHByb2plY3RJZDogcElkLFxuICAgIHByb2plY3ROYW1lOiBwTmFtZSxcbiAgICBjbGllbnRJZDogY0lkLFxuICAgIGNsaWVudE5hbWU6IGNOYW1lLFxuICAgIHRhc2tJZDogdElkLFxuICAgIHRhc2tOYW1lOiB0TmFtZSxcbiAgfSA9IHNlc3Npb25NZXRhXG5cbiAgY29uc3QgY2xlYXJlZDogTGVnYWN5Q29udGV4dE1pZ3JhdGlvblBhdGNoID0ge1xuICAgIHRhc2s6IG51bGwsXG4gICAgcHJvamVjdDogbnVsbCxcbiAgICBjbGllbnQ6IG51bGwsXG4gICAgY2hpcHNQcm9qZWN0OiBudWxsLFxuICB9XG5cbiAgaWYgKGFnZW50RW50aXR5ID09PSAnY2xpZW50JyAmJiBjSWQgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IC4uLmNsZWFyZWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH1cbiAgfVxuXG4gIGlmIChhZ2VudEVudGl0eSA9PT0gJ3Byb2plY3QnICYmIHBJZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNsZWFyZWQsXG4gICAgICBwcm9qZWN0OiB7XG4gICAgICAgIGlkOiBwSWQsXG4gICAgICAgIG5hbWU6IHBOYW1lIHx8ICcnLFxuICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgY2hpcHNQcm9qZWN0OiB7IHByb2plY3RJZDogU3RyaW5nKHBJZCksIHByb2plY3ROYW1lOiBwTmFtZSB8fCAnJywgY2xpZW50TmFtZTogY05hbWUgfHwgJycgfSxcbiAgICB9XG4gIH1cblxuICBpZiAoYWdlbnRFbnRpdHkgPT09ICd0YXNrJyAmJiB0SWQgIT0gbnVsbCkge1xuICAgIGNvbnN0IHRhc2s6IFRhc2sgPSB7XG4gICAgICBpZDogdElkLFxuICAgICAgbmFtZTogdE5hbWUgfHwgJycsXG4gICAgICAuLi4ocElkICE9IG51bGwgPyB7IHByb2plY3RJZDogcElkIH0gOiB7fSksXG4gICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQgfSA6IHt9KSxcbiAgICB9XG4gICAgbGV0IHBhdGNoOiBMZWdhY3lDb250ZXh0TWlncmF0aW9uUGF0Y2ggPSB7IC4uLmNsZWFyZWQsIHRhc2sgfVxuICAgIGlmIChjSWQgIT0gbnVsbCkge1xuICAgICAgcGF0Y2ggPSB7IC4uLnBhdGNoLCBjbGllbnQ6IHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSB9XG4gICAgfVxuICAgIGlmIChwSWQgIT0gbnVsbCkge1xuICAgICAgcGF0Y2ggPSB7XG4gICAgICAgIC4uLnBhdGNoLFxuICAgICAgICBwcm9qZWN0OiB7XG4gICAgICAgICAgaWQ6IHBJZCxcbiAgICAgICAgICBuYW1lOiBwTmFtZSB8fCAnJyxcbiAgICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIGNoaXBzUHJvamVjdDogeyBwcm9qZWN0SWQ6IFN0cmluZyhwSWQpLCBwcm9qZWN0TmFtZTogcE5hbWUgfHwgJycsIGNsaWVudE5hbWU6IGNOYW1lIHx8ICcnIH0sXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXRjaFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGZpbmRPcmNoZXN0cmF0b3JBZ2VudCA9IChhZ2VudHM6IEFnZW50W10pOiBBZ2VudCB8IHVuZGVmaW5lZCA9PlxuICBhZ2VudHMuZmluZChjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLnR5cGUgPT09ICdvcmNoZXN0cmF0b3InKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50ID0gKGhhc1BlbmRpbmdTZXNzaW9uUmVzdG9yZTogYm9vbGVhbik6IGJvb2xlYW4gPT4gIWhhc1BlbmRpbmdTZXNzaW9uUmVzdG9yZVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUGVyc2lzdExhc3RBY3RpdmVDaGF0SWQgPSAoYWN0aXZlQ2hhdElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiBCb29sZWFuKGFjdGl2ZUNoYXRJZClcblxuZXhwb3J0IGNvbnN0IGhhc0Jhbm5lckZhcVRpdGxlID0gKGZhcVRpdGxlPzogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gPT4gQm9vbGVhbihmYXFUaXRsZT8udHJpbSgpKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU3luY1BhbmVsU2Vzc2lvbk9uUGFnZUhpZGUgPSAoaXNNaW5pbWl6ZWQ6IGJvb2xlYW4pOiBib29sZWFuID0+ICFpc01pbmltaXplZFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNhY2hlZEFnZW50c0lmQXZhaWxhYmxlID0gKGFnZW50czogQWdlbnRbXSk6IEFnZW50W10gfCBudWxsID0+IChhZ2VudHMubGVuZ3RoID4gMCA/IGFnZW50cyA6IG51bGwpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRBdHRlbXB0SW5pdGlhbEFnZW50c0ZldGNoID0gKGNhY2hlZEFnZW50c0xlbmd0aDogbnVtYmVyLCBhbHJlYWR5RmV0Y2hlZDogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgY2FjaGVkQWdlbnRzTGVuZ3RoID09PSAwICYmICFhbHJlYWR5RmV0Y2hlZFxuXG5leHBvcnQgY29uc3QgZmluZEFnZW50Rm9yQ2hhdEl0ZW0gPSAoYWdlbnRzOiBBZ2VudFtdLCBjaGF0QWdlbnRJZDogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogQWdlbnQgfCB1bmRlZmluZWQgPT5cbiAgYWdlbnRzLmZpbmQoYWdlbnRJdGVtID0+IE51bWJlcihhZ2VudEl0ZW0uaWQpID09PSBOdW1iZXIoY2hhdEFnZW50SWQpKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkQXBwbHlDbGllbnRPbkhvc3RUYWtlb3ZlciA9IChjbGllbnQ6IENsaWVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBjbGllbnQgaXMgQ2xpZW50IHwgbnVsbCA9PlxuICBjbGllbnQgIT09IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2VsZWN0Rmlyc3RBZ2VudE9uSG9zdFRha2VvdmVyID0gKFxuICBjbGVhckdsb2JhbFBpbm5lZENvbnRleHQ6IGJvb2xlYW4sXG4gIGZpcnN0QWdlbnQ6IEFnZW50IHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IGNsZWFyR2xvYmFsUGlubmVkQ29udGV4dCAmJiBCb29sZWFuKGZpcnN0QWdlbnQpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXNldENoYXRTdGF0ZU9uR29Ib21lID0gKGN1cnJlbnRPcHRpb246IG9wdGlvbnMsIGNoYXRPcHRpb246IG9wdGlvbnMpOiBib29sZWFuID0+XG4gIGN1cnJlbnRPcHRpb24gPT09IGNoYXRPcHRpb25cblxuZXhwb3J0IGNvbnN0IHNob3VsZENsZWFyQ29udGV4dEZvckNhdGFsb2dPclNraWxsQWdlbnQgPSAoYWdlbnQ6IEFnZW50IHwgdW5kZWZpbmVkKTogYWdlbnQgaXMgQWdlbnQgPT4gQm9vbGVhbihhZ2VudClcblxuZXhwb3J0IHR5cGUgT3Blbk5ld0NoYXRXaXRoQWdlbnRDb250ZXh0UGF0Y2ggPSB7XG4gIHByb2plY3Q6IFByb2plY3QgfCBudWxsXG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbFxuICBzaG91bGRTZXRUYXNrOiBib29sZWFuXG4gIHRhc2s6IFRhc2sgfCBudWxsIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlT3Blbk5ld0NoYXRXaXRoQWdlbnRDb250ZXh0ID0gKGRldGFpbDoge1xuICBwcm9qZWN0PzogUHJvamVjdCB8IG51bGxcbiAgY2xpZW50PzogQ2xpZW50IHwgbnVsbFxuICB0YXNrPzogVGFzayB8IG51bGxcbn0pOiBPcGVuTmV3Q2hhdFdpdGhBZ2VudENvbnRleHRQYXRjaCA9PiAoe1xuICBwcm9qZWN0OiBkZXRhaWwucHJvamVjdCA/PyBudWxsLFxuICBjbGllbnQ6IGRldGFpbC5jbGllbnQgPz8gbnVsbCxcbiAgc2hvdWxkU2V0VGFzazogZGV0YWlsLnRhc2sgIT09IHVuZGVmaW5lZCxcbiAgdGFzazogZGV0YWlsLnRhc2ssXG59KVxuXG5leHBvcnQgY29uc3QgY2FuQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0ID0gKFxuICBzZXNzaW9uTWV0YTogTGVnYWN5U2Vzc2lvbk1ldGEgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvcmNoZXN0cmF0b3I6IEFnZW50IHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IEJvb2xlYW4oc2Vzc2lvbk1ldGEgJiYgb3JjaGVzdHJhdG9yKVxuXG5leHBvcnQgdHlwZSBTZXNzaW9uUmVzdG9yZU5hdlJvdXRlID0gJ215QWdlbnRzJyB8ICdteVNraWxscycgfCAnbWFpYWtlcicgfCAnY2hhdCcgfCAnc2F2ZWRPcHRpb24nIHwgJ25vbmUnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSA9IChzbmFwc2hvdDoge1xuICBhZ2VudHNOYXZBY3RpdmU/OiBNYWlhQWdlbnRzTmF2QWN0aXZlIHwgbnVsbFxuICBjdXJyZW50T3B0aW9uPzogc3RyaW5nIHwgbnVsbFxuICBhY3RpdmVDaGF0SWQ/OiBzdHJpbmcgfCBudWxsXG59KTogU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSA9PiB7XG4gIGlmIChzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cycpIHJldHVybiAnbXlBZ2VudHMnXG4gIGlmIChzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUgPT09ICdteVNraWxscycpIHJldHVybiAnbXlTa2lsbHMnXG4gIGlmIChzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUgPT09ICdtYWlha2VyJykgcmV0dXJuICdtYWlha2VyJ1xuICBpZiAoc25hcHNob3QuY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0ICYmIHNuYXBzaG90LmFjdGl2ZUNoYXRJZCkgcmV0dXJuICdjaGF0J1xuICBpZiAoc25hcHNob3QuY3VycmVudE9wdGlvbiAmJiBpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uKHNuYXBzaG90LmN1cnJlbnRPcHRpb24pKSByZXR1cm4gJ3NhdmVkT3B0aW9uJ1xuICByZXR1cm4gJ25vbmUnXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRTa2lwQWdlbnRzTG9hZE9uU2Vzc2lvblJlc3RvcmUgPSAoXG4gIGFnZW50c05hdkFjdGl2ZTogTWFpYUFnZW50c05hdkFjdGl2ZSB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT4gYWdlbnRzTmF2QWN0aXZlID09PSAnbXlTa2lsbHMnXG5cbmV4cG9ydCBjb25zdCBzaG91bGRGZXRjaEFnZW50RGV0YWlsT25TZXNzaW9uUmVzdG9yZSA9IChcbiAgYWdlbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgYWdlbnRzTmF2QWN0aXZlOiBNYWlhQWdlbnRzTmF2QWN0aXZlIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PiBCb29sZWFuKGFnZW50SWQgJiYgYWdlbnRzTmF2QWN0aXZlICE9PSAnbXlBZ2VudHMnKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUGFzc0FnZW50VG9HZXRBZ2VudHNPblJlc3RvcmUgPSAoYWdlbnRzTmF2QWN0aXZlOiBNYWlhQWdlbnRzTmF2QWN0aXZlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgYWdlbnRzTmF2QWN0aXZlICE9PSAnbXlBZ2VudHMnXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUgPSAoXG4gIGFnZW50VG9TZWxlY3Q6IEFnZW50IHwgdW5kZWZpbmVkLFxuICBhZ2VudHNOYXZBY3RpdmU6IE1haWFBZ2VudHNOYXZBY3RpdmUgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IEJvb2xlYW4oYWdlbnRUb1NlbGVjdCAmJiBhZ2VudHNOYXZBY3RpdmUgIT09ICdteUFnZW50cycpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU25hcHNob3RDaGlwc1Byb2plY3QgPSAoXG4gIGhvc3RDb250ZXh0PzogeyBjaGlwc1Byb2plY3Q/OiBMZWdhY3lDb250ZXh0Q2hpcHNQcm9qZWN0IHwgbnVsbCB9IHwgbnVsbFxuKTogTGVnYWN5Q29udGV4dENoaXBzUHJvamVjdCB8IG51bGwgPT4gaG9zdENvbnRleHQ/LmNoaXBzUHJvamVjdCA/PyBudWxsXG5cbmV4cG9ydCB0eXBlIENoYXRNb2RhbFNlY3Rpb25GbGFncyA9IHtcbiAgc2hvd05ld0NoYXQ6IGJvb2xlYW5cbiAgaXNNeUFnZW50c1NlY3Rpb246IGJvb2xlYW5cbiAgaXNNeVNraWxsc1NlY3Rpb246IGJvb2xlYW5cbiAgaXNNYWlha2VyQ3JlYXRvckhvbWU6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVDaGF0TW9kYWxTZWN0aW9uRmxhZ3MgPSAoXG4gIGNvbXB1dGVkQ3VycmVudE9wdGlvbjogb3B0aW9ucyxcbiAgaXNNYWlha2VyQWdlbnRTZWxlY3RlZDogYm9vbGVhblxuKTogQ2hhdE1vZGFsU2VjdGlvbkZsYWdzID0+ICh7XG4gIHNob3dOZXdDaGF0OiBjb21wdXRlZEN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCxcbiAgaXNNeUFnZW50c1NlY3Rpb246IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cyxcbiAgaXNNeVNraWxsc1NlY3Rpb246IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teVNraWxscyxcbiAgaXNNYWlha2VyQ3JlYXRvckhvbWU6IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWQsXG59KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIgPSAoaGFzQWNjZXNzOiBib29sZWFuLCBpc0Zsb2F0aW5nOiBib29sZWFuKTogYm9vbGVhbiA9PiBoYXNBY2Nlc3MgJiYgIWlzRmxvYXRpbmdcblxuZXhwb3J0IHR5cGUgQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3ID0gJ2Vycm9yJyB8ICdjaGF0JyB8ICdwcm9qZWN0U3VtbWFyeSdcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVDaGF0TW9kYWxNYWluQ29udGVudFZpZXcgPSAoaGFzRXJyb3I6IGJvb2xlYW4sIGhhc0FjY2VzczogYm9vbGVhbik6IENoYXRNb2RhbE1haW5Db250ZW50VmlldyA9PiB7XG4gIGlmIChoYXNFcnJvcikgcmV0dXJuICdlcnJvcidcbiAgaWYgKGhhc0FjY2VzcykgcmV0dXJuICdjaGF0J1xuICByZXR1cm4gJ3Byb2plY3RTdW1tYXJ5J1xufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlciA9IChwYXJhbXM6IHtcbiAgY29tcHV0ZWRDdXJyZW50T3B0aW9uOiBvcHRpb25zXG4gIGhvbWVPcHRpb246IG9wdGlvbnNcbiAgY2hhdE9wdGlvbjogb3B0aW9uc1xuICBhZ2VudHNDb3VudDogbnVtYmVyXG4gIGlzTWFpYWtlckNyZWF0b3JIb21lOiBib29sZWFuXG4gIGhhc0Vycm9yOiBib29sZWFuXG4gIGxvYWRpbmc6IGJvb2xlYW5cbiAgaGFzQWNjZXNzOiBib29sZWFuXG59KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG9uSG9tZVdpdGhBZ2VudHMgPSBwYXJhbXMuY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBwYXJhbXMuaG9tZU9wdGlvbiAmJiBwYXJhbXMuYWdlbnRzQ291bnQgPiAwXG4gIGNvbnN0IG9uQ2hhdCA9IHBhcmFtcy5jb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IHBhcmFtcy5jaGF0T3B0aW9uXG4gIHJldHVybiAoXG4gICAgKG9uSG9tZVdpdGhBZ2VudHMgfHwgb25DaGF0KSAmJlxuICAgICFwYXJhbXMuaXNNYWlha2VyQ3JlYXRvckhvbWUgJiZcbiAgICAhcGFyYW1zLmhhc0Vycm9yICYmXG4gICAgIXBhcmFtcy5sb2FkaW5nICYmXG4gICAgcGFyYW1zLmhhc0FjY2Vzc1xuICApXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRVc2VFbGV2YXRlZE1haWFQYW5lbCA9IChzZWN0aW9uOiBTZWN0aW9uKTogYm9vbGVhbiA9PiBzZWN0aW9uID09PSAndGFzaydcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlc2VsZWN0QWdlbnRBZnRlckRlbGV0ZSA9IChjdXJyZW50QWdlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBkZWxldGVkQWdlbnRJZDogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBjdXJyZW50QWdlbnRJZCA9PT0gZGVsZXRlZEFnZW50SWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZENsZWFyRHJhZ1Bvc2l0aW9uT25MYXlvdXRDaGFuZ2UgPSAobGF5b3V0TW9kZTogJ3NpZGViYXInIHwgJ2Z1bGxzY3JlZW4nIHwgJ2Zsb2F0aW5nJyk6IGJvb2xlYW4gPT5cbiAgbGF5b3V0TW9kZSAhPT0gJ2Zsb2F0aW5nJ1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkUGVyc2lzdERyYWdQb3NpdGlvbk9uRHJhZ0VuZCA9IChsYXlvdXRNb2RlOiAnc2lkZWJhcicgfCAnZnVsbHNjcmVlbicgfCAnZmxvYXRpbmcnKTogYm9vbGVhbiA9PlxuICBsYXlvdXRNb2RlID09PSAnZmxvYXRpbmcnXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTdGFydEZsb2F0aW5nUGFuZWxEcmFnID0gKGlzRmxvYXRpbmc6IGJvb2xlYW4sIHBvaW50ZXJCdXR0b246IG51bWJlcik6IGJvb2xlYW4gPT5cbiAgaXNGbG9hdGluZyAmJiBwb2ludGVyQnV0dG9uID09PSAwXG5cbmV4cG9ydCBjb25zdCBpc0FjdGl2ZUZsb2F0aW5nRHJhZ1BvaW50ZXIgPSAoZHJhZ1BvaW50ZXJJZDogbnVtYmVyIHwgdW5kZWZpbmVkLCBldmVudFBvaW50ZXJJZDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBkcmFnUG9pbnRlcklkID09PSBldmVudFBvaW50ZXJJZFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkT3BlblNraWxsc0NhdGFsb2cgPSAodXNlckhhc1NraWxsc0FjY2VzczogYm9vbGVhbik6IGJvb2xlYW4gPT4gdXNlckhhc1NraWxsc0FjY2Vzc1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkVXNlRHJhZ0NsYW1wRmFsbGJhY2sgPSAoY29udGVudFdyYXBwZXI6IEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4gIWNvbnRlbnRXcmFwcGVyXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTGF5b3V0RHJhZ1Bvc2l0aW9uVXBkYXRlID0gKFxuICBsYXlvdXRNb2RlOiAnc2lkZWJhcicgfCAnZnVsbHNjcmVlbicgfCAnZmxvYXRpbmcnLFxuICBwcmV2OiBNYWlhUGFuZWxEcmFnUG9zaXRpb24gfCBudWxsLFxuICBjbGFtcDogKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiBNYWlhUGFuZWxEcmFnUG9zaXRpb24sXG4gIGRlZmF1bHRzOiB7IGlubmVyV2lkdGg6IG51bWJlcjsgcGFuZWxXaWR0aDogbnVtYmVyOyBwYWQ6IG51bWJlciB9XG4pOiBNYWlhUGFuZWxEcmFnUG9zaXRpb24gfCBudWxsID0+IHtcbiAgaWYgKGxheW91dE1vZGUgIT09ICdmbG9hdGluZycpIHJldHVybiBudWxsXG4gIGlmIChwcmV2KSByZXR1cm4gY2xhbXAocHJldi54LCBwcmV2LnkpXG4gIGNvbnN0IHggPSBkZWZhdWx0cy5pbm5lcldpZHRoIC0gZGVmYXVsdHMucGFuZWxXaWR0aCAtIGRlZmF1bHRzLnBhZFxuICByZXR1cm4gY2xhbXAoeCwgZGVmYXVsdHMucGFkKVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBlcnNpc3RlZERyYWdQb3NpdGlvbk9uRW5kID0gKFxuICBsYXlvdXRNb2RlOiAnc2lkZWJhcicgfCAnZnVsbHNjcmVlbicgfCAnZmxvYXRpbmcnLFxuICBjb250ZW50V3JhcHBlcjogSFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IHNob3VsZFBlcnNpc3REcmFnUG9zaXRpb25PbkRyYWdFbmQobGF5b3V0TW9kZSkgJiYgQm9vbGVhbihjb250ZW50V3JhcHBlcilcblxuZXhwb3J0IHR5cGUgU3RhcnRDaGF0SW5pdGlhbE1lc3NhZ2VJbnB1dCA9IHtcbiAgbWVzc2FnZT86IHN0cmluZ1xuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgZmFxSWQ/OiBzdHJpbmdcbiAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gIGZ1YUlkPzogc3RyaW5nXG4gIHNjSWQ/OiBzdHJpbmdcbiAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRVc2VySW5pdGlhbE1lc3NhZ2VGcm9tU3RhcnRDaGF0ID0gKGlucHV0OiBTdGFydENoYXRJbml0aWFsTWVzc2FnZUlucHV0KSA9PiAoe1xuICBtZXNzYWdlOiBpbnB1dC5tZXNzYWdlIHx8ICcnLFxuICBhdHRhY2htZW50czogaW5wdXQuYXR0YWNobWVudHMgfHwgW10sXG4gIC4uLihpbnB1dC5mYXFJZCA/IHsgZmFxSWQ6IGlucHV0LmZhcUlkIH0gOiB7fSksXG4gIC4uLihpbnB1dC5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IGlucHV0LmFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gIC4uLihpbnB1dC5tZW50aW9ucyAmJiBpbnB1dC5tZW50aW9ucy5sZW5ndGggPiAwID8geyBtZW50aW9uczogaW5wdXQubWVudGlvbnMgfSA6IHt9KSxcbiAgLi4uKGlucHV0LmZ1YUlkID8geyBmdWFJZDogaW5wdXQuZnVhSWQgfSA6IHt9KSxcbiAgLi4uKGlucHV0LnNjSWQgPyB7IHNjSWQ6IGlucHV0LnNjSWQgfSA6IHt9KSxcbiAgLi4uKGlucHV0LmNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YTogaW5wdXQuY29udGV4dERhdGEgfSA6IHt9KSxcbn0pXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXNldFNpZGViYXJFcnJvck9uU3RhcnRDaGF0ID0gKHNpZGViYXJIYXNFcnJvcjogYm9vbGVhbik6IGJvb2xlYW4gPT4gc2lkZWJhckhhc0Vycm9yXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsU0FBU0EsaUJBQWlCLEVBQUVDLGlCQUFpQixRQUFRLGdDQUFnQztBQUNyRixTQUFTQyxjQUFjLFFBQVEsd0NBQXdDO0FBTXZFLFNBQVNDLDZCQUE2QixRQUFRLGlDQUFpQztBQUMvRSxTQUFTQyxzQkFBc0IsUUFBUSw0Q0FBNEM7QUFFbkYsU0FBU0MscUJBQXFCLFFBQTRCLHdDQUF3QztBQUNsRyxTQUFTQyxPQUFPLFFBQVEsYUFBYTtBQUlyQyxPQUFPLElBQU1DLHVCQUF1QixHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQVU7QUFXN0UsT0FBTyxJQUFNQyxxQkFBcUIsR0FBRyxT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
|