@projectcor/maia-components 2.48.1-1 → 2.49.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/README.md +2 -0
- package/lib/App.js +19 -44
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +53 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +28 -52
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +37 -1
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +33 -66
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +227 -1
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -177
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +29 -1
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -28
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +173 -1
- package/lib/components/atoms/MAIAInput/MAIAInput.js +126 -171
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +47 -1
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -61
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +24 -41
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +10 -25
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +43 -78
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +11 -9
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -37
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
- package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
- package/lib/components/atoms/TextArea/TextArea.js +11 -20
- package/lib/components/index.js +1 -2
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +30 -1
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +13 -18
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +48 -1
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +17 -26
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +266 -321
- package/lib/components/molecules/ChatAIHome/styles.js +78 -85
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +345 -1
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +201 -200
- package/lib/components/molecules/ChatAIMessages/newStyles.js +35 -32
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +373 -5
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +199 -271
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +20 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +87 -74
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
- package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -10
- package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +46 -61
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +314 -1
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +261 -480
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +1 -4
- package/lib/dev/DevReasoningTimeline.js +37 -68
- package/lib/dev/Providers.js +3 -5
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
- package/lib/hooks/useChatManager/useChatManager.helpers.js +550 -1
- package/lib/hooks/useChatManager/useChatManager.js +245 -429
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +257 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +50 -206
- package/lib/hooks/useContextMentions.helpers.js +61 -1
- package/lib/hooks/useContextMentions.js +5 -62
- package/lib/hooks/useEntitySearch.helpers.js +49 -1
- package/lib/hooks/useEntitySearch.js +22 -53
- package/lib/hooks/useFrequentlyUsedActions.js +22 -60
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
- package/lib/index.js +2 -5
- package/lib/lang/br/index.js +1 -26
- package/lib/lang/en/index.js +1 -26
- package/lib/lang/es/index.js +1 -26
- package/lib/lang/fr/index.js +1 -26
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Agents/getAgents.helpers.js +61 -1
- package/lib/services/maia/Agents/getAgents.js +31 -59
- package/lib/services/utils/mapChatMessages.helpers.js +223 -0
- package/lib/services/utils/mapChatMessages.js +25 -249
- package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
- package/lib/store/sessions/sessionStreamManager.js +213 -273
- package/lib/styles/cascade.js +3 -29
- package/lib/styles/transitions.js +1 -3
- package/lib/types/global.d.js +1 -1
- package/lib/utils/hoursPlannerQuickActionType.js +1 -74
- package/lib/utils/renderContextMentions.helpers.js +110 -0
- package/lib/utils/renderContextMentions.js +4 -110
- package/lib/utils/streamActivityMessages.helpers.js +222 -0
- package/lib/utils/streamActivityMessages.js +21 -251
- package/package.json +1 -1
- package/lib/components/atoms/ActionableButton.spec.js +0 -111
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
- package/lib/components/atoms/Chip/Chip.spec.js +0 -82
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
- package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
- package/lib/components/atoms/Expand/Expand.spec.js +0 -57
- package/lib/components/atoms/Fade/Fade.spec.js +0 -31
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
- package/lib/components/atoms/HelpButton.spec.js +0 -87
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -444
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
- package/lib/components/atoms/NextPageLoader.spec.js +0 -37
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
- package/lib/components/atoms/PrimaryButton.spec.js +0 -42
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -170
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -199
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -8
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +0 -29
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +0 -38
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
- package/lib/components/atoms/Switch/Switch.spec.js +0 -41
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
- package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
- package/lib/components/atoms/ThirdButton.spec.js +0 -29
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
- package/lib/components/atoms/WithAppCfg.spec.js +0 -60
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -495
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
- package/lib/components/molecules/AgentInputBlock/index.js +0 -5
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -445
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
- package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
- package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -369
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -391
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1204
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -246
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -275
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -275
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -195
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -94
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -69
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
- package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
- package/lib/components/organisms/ChatAIPage/index.js +0 -3
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
- package/lib/constants/maiaFeatureAccess.spec.js +0 -30
- package/lib/constants/maiaHourAgentAccess.spec.js +0 -30
- package/lib/constants/maiaTaskPanelAccess.spec.js +0 -30
- package/lib/constants/permissions/clientRoleAccess.spec.js +0 -31
- package/lib/constants/permissions/utils.spec.js +0 -128
- package/lib/dev/DevMaiaPage.js +0 -30
- package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
- package/lib/hooks/useAgentSuggestions.spec.js +0 -89
- package/lib/hooks/useCaretPosition.spec.js +0 -58
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
- package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
- package/lib/hooks/useChats/useChats.spec.js +0 -208
- package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
- package/lib/hooks/useClientSearch.spec.js +0 -86
- package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
- package/lib/hooks/useContextMentions.spec.js +0 -239
- package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
- package/lib/hooks/useContextPinPopover.spec.js +0 -159
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
- package/lib/hooks/useDebounce.spec.js +0 -42
- package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
- package/lib/hooks/useEntitySearch.spec.js +0 -443
- package/lib/hooks/useEvent.spec.js +0 -45
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
- package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
- package/lib/hooks/useIsMaiaPageRoute.js +0 -26
- package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
- package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
- package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
- package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
- package/lib/hooks/useMentionPopover.spec.js +0 -215
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
- package/lib/hooks/useModal/useModal.spec.js +0 -73
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
- package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
- package/lib/hooks/useProjectSearch.spec.js +0 -91
- package/lib/hooks/useProjectSummary.spec.js +0 -193
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
- package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
- package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
- package/lib/hooks/useRecentContexts.spec.js +0 -139
- package/lib/hooks/useResize.spec.js +0 -37
- package/lib/hooks/useSkillsCatalog.spec.js +0 -88
- package/lib/hooks/useSlashCommands.spec.js +0 -139
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
- package/lib/hooks/useStreamResponse.spec.js +0 -199
- package/lib/hooks/useT.spec.js +0 -20
- package/lib/hooks/useToggle.spec.js +0 -33
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
- package/lib/services/maia/Access/updateAccess.spec.js +0 -137
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
- package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
- package/lib/services/maia/Agents/connectors.spec.js +0 -359
- package/lib/services/maia/Agents/createAgent.spec.js +0 -55
- package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
- package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
- package/lib/services/maia/Agents/getAgents.spec.js +0 -697
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
- package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
- package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
- package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
- package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
- package/lib/services/maia/Chats/patchChat.spec.js +0 -41
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
- package/lib/services/maia/Knowledge/delete.spec.js +0 -45
- package/lib/services/maia/Knowledge/download.spec.js +0 -78
- package/lib/services/maia/Knowledge/save.spec.js +0 -58
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
- package/lib/services/maia/Skills/createSkill.spec.js +0 -68
- package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
- package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
- package/lib/services/maia/Skills/getSkills.spec.js +0 -152
- package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
- package/lib/services/maia/client.spec.js +0 -56
- package/lib/services/utils/fetchCOR.spec.js +0 -211
- package/lib/services/utils/getCookie.spec.js +0 -20
- package/lib/services/utils/mapChatMessages.spec.js +0 -254
- package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
- package/lib/store/maiaLastChatPersistence.spec.js +0 -22
- package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
- package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
- package/lib/store/sessions/sessionNotifications.spec.js +0 -106
- package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
- package/lib/store/sessions/sessions.types.spec.js +0 -16
- package/lib/store/sessions/useSessionsStore.spec.js +0 -135
- package/lib/store/useChatsStore.spec.js +0 -619
- package/lib/store/useFaqsStore.spec.js +0 -57
- package/lib/utils/actionCategoryMap.spec.js +0 -18
- package/lib/utils/agentDisplayName.spec.js +0 -44
- package/lib/utils/autoApproveStorage.spec.js +0 -25
- package/lib/utils/chatInputFiles.spec.js +0 -39
- package/lib/utils/contextMentionIcons.spec.js +0 -41
- package/lib/utils/contextMentionLabel.spec.js +0 -13
- package/lib/utils/contextMentionTriggers.spec.js +0 -38
- package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
- package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
- package/lib/utils/entityLinkRender.spec.js +0 -72
- package/lib/utils/fileDownloadHelper.spec.js +0 -67
- package/lib/utils/formatQuickActionMessage.spec.js +0 -27
- package/lib/utils/formatUnreadCount.spec.js +0 -12
- package/lib/utils/getUnitFileSize.spec.js +0 -18
- package/lib/utils/hitlAnalytics.spec.js +0 -100
- package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
- package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
- package/lib/utils/imagePreprocessor.spec.js +0 -112
- package/lib/utils/maiaPageRoute.js +0 -24
- package/lib/utils/maiaPageRoute.spec.js +0 -23
- package/lib/utils/mapBackendLang.spec.js +0 -19
- package/lib/utils/navigateContextEntity.spec.js +0 -50
- package/lib/utils/normalizeAgentConnectors.spec.js +0 -98
- package/lib/utils/orchestratorSubagents.spec.js +0 -32
- package/lib/utils/reasoningMappers.spec.js +0 -103
- package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
- package/lib/utils/renderContextMentions.spec.js +0 -158
- package/lib/utils/retryCompletion.spec.js +0 -99
- package/lib/utils/skillContentSize.spec.js +0 -13
- package/lib/utils/slashCommandMarker.spec.js +0 -43
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
- package/lib/utils/sseStreamContent.spec.js +0 -31
- package/lib/utils/streamActivityMessages.spec.js +0 -253
- package/lib/utils/validateTrimmedFields.spec.js +0 -26
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
1
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
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; }
|
|
3
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; }
|
|
@@ -173,6 +174,268 @@ export var shouldConfirmAbmClose = function shouldConfirmAbmClose(hasPendingChan
|
|
|
173
174
|
if (!hasPendingChanges) return false;
|
|
174
175
|
return !(successFlags.create || successFlags.update || successFlags["delete"]);
|
|
175
176
|
};
|
|
177
|
+
export var ABM_ACCESS_DENIED_ERROR = "Access denied: You don't have permission to access this agent";
|
|
178
|
+
export var isAbmAccessDeniedError = function isAbmAccessDeniedError(error) {
|
|
179
|
+
return error === ABM_ACCESS_DENIED_ERROR;
|
|
180
|
+
};
|
|
181
|
+
export var canRenderAbmAgentModal = function canRenderAbmAgentModal(permissions) {
|
|
182
|
+
return Boolean((permissions === null || permissions === void 0 ? void 0 : permissions.create) || (permissions === null || permissions === void 0 ? void 0 : permissions.edit) || (permissions === null || permissions === void 0 ? void 0 : permissions["delete"]));
|
|
183
|
+
};
|
|
184
|
+
export var shouldCloseAbmOnBackdropClick = function shouldCloseAbmOnBackdropClick(target, currentTarget, isProcessingFiles) {
|
|
185
|
+
return target === currentTarget && !isProcessingFiles;
|
|
186
|
+
};
|
|
187
|
+
export var resolveAbmProcessingKnowledgeLabelKey = function resolveAbmProcessingKnowledgeLabelKey(isEditing) {
|
|
188
|
+
return isEditing ? 'processingKnowledge.descriptionUpdate' : 'processingKnowledge.descriptionCreate';
|
|
189
|
+
};
|
|
190
|
+
var ABM_OPEN_INITIAL_SECTIONS = ['general', 'knowledge', 'accessibility'];
|
|
191
|
+
export var resolvePendingAbmInitialSection = function resolvePendingAbmInitialSection(initialSection) {
|
|
192
|
+
if (initialSection && ABM_OPEN_INITIAL_SECTIONS.includes(initialSection)) {
|
|
193
|
+
return initialSection;
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
};
|
|
197
|
+
export var shouldDenyAbmEditWithoutMultiAgents = function shouldDenyAbmEditWithoutMultiAgents(isEditing, hasMultiAgentsAccess) {
|
|
198
|
+
return Boolean(isEditing && !hasMultiAgentsAccess);
|
|
199
|
+
};
|
|
200
|
+
export var resolveAbmCreateAccessUpdateContext = function resolveAbmCreateAccessUpdateContext(accessType) {
|
|
201
|
+
return {
|
|
202
|
+
isFromCreation: true,
|
|
203
|
+
isFromEditing: false,
|
|
204
|
+
hasActionFiles: accessType !== 'company',
|
|
205
|
+
operationType: 'create',
|
|
206
|
+
hasBeenCalled: false
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
export var shouldSyncAbmClientAccessOnCreate = function shouldSyncAbmClientAccessOnCreate(accessType) {
|
|
210
|
+
return accessType !== 'company';
|
|
211
|
+
};
|
|
212
|
+
export var buildAbmFavoriteToggleAgents = function buildAbmFavoriteToggleAgents(createdAgent) {
|
|
213
|
+
return {
|
|
214
|
+
listAgent: _objectSpread(_objectSpread({}, createdAgent), {}, {
|
|
215
|
+
is_favorite: true
|
|
216
|
+
}),
|
|
217
|
+
toggleAgent: _objectSpread(_objectSpread({}, createdAgent), {}, {
|
|
218
|
+
is_favorite: false
|
|
219
|
+
})
|
|
220
|
+
};
|
|
221
|
+
};
|
|
222
|
+
export var resolveAbmCreateSuccessPlan = function resolveAbmCreateSuccessPlan(actions) {
|
|
223
|
+
var hasDelete = actions.toDelete.length > 0;
|
|
224
|
+
var hasUpload = actions.toUpload.length > 0;
|
|
225
|
+
if (hasDelete && hasUpload) return 'deleteAndCreate';
|
|
226
|
+
if (hasDelete) return 'deleteOnly';
|
|
227
|
+
if (hasUpload) return 'uploadOnly';
|
|
228
|
+
return 'accessOnly';
|
|
229
|
+
};
|
|
230
|
+
export var shouldShowProcessFilesForCreatePlan = function shouldShowProcessFilesForCreatePlan(plan) {
|
|
231
|
+
return plan !== 'accessOnly';
|
|
232
|
+
};
|
|
233
|
+
export var resolveAbmUpdateSuccessPlan = function resolveAbmUpdateSuccessPlan(actions, accessibilityChanged) {
|
|
234
|
+
var createPlan = resolveAbmCreateSuccessPlan(actions);
|
|
235
|
+
if (createPlan !== 'accessOnly') {
|
|
236
|
+
return createPlan;
|
|
237
|
+
}
|
|
238
|
+
if (accessibilityChanged) {
|
|
239
|
+
return 'accessOnly';
|
|
240
|
+
}
|
|
241
|
+
return 'generalOnly';
|
|
242
|
+
};
|
|
243
|
+
export var resolveAbmUpdateAccessUpdateContext = function resolveAbmUpdateAccessUpdateContext() {
|
|
244
|
+
return {
|
|
245
|
+
isFromCreation: false,
|
|
246
|
+
isFromEditing: true,
|
|
247
|
+
hasActionFiles: true,
|
|
248
|
+
operationType: 'update',
|
|
249
|
+
hasBeenCalled: false
|
|
250
|
+
};
|
|
251
|
+
};
|
|
252
|
+
export var resolveAbmUpdateAccessOnlyContext = function resolveAbmUpdateAccessOnlyContext(current) {
|
|
253
|
+
if (current.hasBeenCalled || current.hasActionFiles) {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
isFromCreation: false,
|
|
258
|
+
isFromEditing: true,
|
|
259
|
+
hasActionFiles: false,
|
|
260
|
+
operationType: 'update',
|
|
261
|
+
hasBeenCalled: false
|
|
262
|
+
};
|
|
263
|
+
};
|
|
264
|
+
export var resolveAbmCreateAccessOnlyDecision = function resolveAbmCreateAccessOnlyDecision(current, accessType) {
|
|
265
|
+
if (!shouldSyncAbmClientAccessOnCreate(accessType)) {
|
|
266
|
+
return {
|
|
267
|
+
nextContext: current,
|
|
268
|
+
shouldCallAccessClient: false
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
if (current.hasBeenCalled) {
|
|
272
|
+
return {
|
|
273
|
+
nextContext: current,
|
|
274
|
+
shouldCallAccessClient: false
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
nextContext: {
|
|
279
|
+
isFromCreation: true,
|
|
280
|
+
isFromEditing: false,
|
|
281
|
+
hasActionFiles: current.hasActionFiles || false,
|
|
282
|
+
operationType: 'create',
|
|
283
|
+
hasBeenCalled: false
|
|
284
|
+
},
|
|
285
|
+
shouldCallAccessClient: true
|
|
286
|
+
};
|
|
287
|
+
};
|
|
288
|
+
export var createResetAbmAccessUpdateContext = function createResetAbmAccessUpdateContext() {
|
|
289
|
+
return {
|
|
290
|
+
isFromCreation: false,
|
|
291
|
+
isFromEditing: false,
|
|
292
|
+
hasActionFiles: false,
|
|
293
|
+
operationType: null,
|
|
294
|
+
hasBeenCalled: false
|
|
295
|
+
};
|
|
296
|
+
};
|
|
297
|
+
export var shouldFinalizeAbmUpdateWithoutPendingWork = function shouldFinalizeAbmUpdateWithoutPendingWork(input) {
|
|
298
|
+
return !input.hasPendingFiles && !input.isShowProcessFiles && input.toUploadCount === 0 && !input.accessHasActionFiles && !input.successUpdateAccess && !input.processFilesTimedOut;
|
|
299
|
+
};
|
|
300
|
+
export var resolveKnowledgeWsCompletionEffects = function resolveKnowledgeWsCompletionEffects(uploadOutcome, context, accessHandled, filesFinished) {
|
|
301
|
+
if (uploadOutcome === 'error' || uploadOutcome === 'complete') {
|
|
302
|
+
var incrementFilesProcessed = uploadOutcome === 'complete' && (context.hasActionFiles && accessHandled || context.operationType === 'create' && !context.hasActionFiles && !filesFinished);
|
|
303
|
+
var markFilesFinishedForCreate = uploadOutcome === 'complete' && context.operationType === 'create' && !context.hasActionFiles && !filesFinished;
|
|
304
|
+
return {
|
|
305
|
+
closeProcessFiles: true,
|
|
306
|
+
incrementFilesProcessed: incrementFilesProcessed,
|
|
307
|
+
markFilesFinishedForCreate: markFilesFinishedForCreate
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return null;
|
|
311
|
+
};
|
|
312
|
+
export var resolveAbmKnowledgeErrorMessageKey = function resolveAbmKnowledgeErrorMessageKey(isEditing) {
|
|
313
|
+
return isEditing ? 'confirmAgentUpdatedWithFilesError' : 'confirmAgentWithFilesError';
|
|
314
|
+
};
|
|
315
|
+
export var shouldBlockKnowledgeDeleteSuccessClose = function shouldBlockKnowledgeDeleteSuccessClose(input) {
|
|
316
|
+
return input.hasPendingFiles || input.isShowProcessFiles || input.toUploadCount > 0 || input.processFilesTimedOut;
|
|
317
|
+
};
|
|
318
|
+
export var shouldDeferAccessUpdateUntilFilesComplete = function shouldDeferAccessUpdateUntilFilesComplete(context, hasPendingFiles, isShowProcessFiles) {
|
|
319
|
+
return context.hasActionFiles && (hasPendingFiles || isShowProcessFiles);
|
|
320
|
+
};
|
|
321
|
+
export var shouldCloseCreateAfterKnowledgeWithoutAccess = function shouldCloseCreateAfterKnowledgeWithoutAccess(input) {
|
|
322
|
+
return input.operationType === 'create' && !input.hasActionFiles && input.filesFinished && input.hasSuccessCreate && !input.hasPendingFiles && !input.isShowProcessFiles;
|
|
323
|
+
};
|
|
324
|
+
export var shouldCloseCreateAfterKnowledgeWithAccess = function shouldCloseCreateAfterKnowledgeWithAccess(input) {
|
|
325
|
+
return input.operationType === 'create' && input.hasActionFiles && input.accessHandled && input.hasSuccessCreate && !input.hasPendingFiles && !input.isShowProcessFiles;
|
|
326
|
+
};
|
|
327
|
+
export var shouldApplyPendingSectionAfterOpen = function shouldApplyPendingSectionAfterOpen(isEditing, pendingSection) {
|
|
328
|
+
return Boolean(pendingSection && !isEditing);
|
|
329
|
+
};
|
|
330
|
+
export var resolveAbmOpenModalLoadAction = function resolveAbmOpenModalLoadAction(params) {
|
|
331
|
+
if (!params.isEditing) {
|
|
332
|
+
return 'apply_create_values';
|
|
333
|
+
}
|
|
334
|
+
if (shouldDenyAbmEditWithoutMultiAgents(true, params.hasMultiAgentsAccess)) {
|
|
335
|
+
return 'deny_edit';
|
|
336
|
+
}
|
|
337
|
+
if (params.hasPrefetchedAgent) {
|
|
338
|
+
return 'prefetch_edit';
|
|
339
|
+
}
|
|
340
|
+
return 'fetch_edit';
|
|
341
|
+
};
|
|
342
|
+
export var canApplyAbmEditingAgentDetail = function canApplyAbmEditingAgentDetail(source, hasMultiAgentsAccess) {
|
|
343
|
+
return source.type === 'custom' && hasMultiAgentsAccess;
|
|
344
|
+
};
|
|
345
|
+
export var shouldSetDefaultAiModelForNewAgent = function shouldSetDefaultAiModelForNewAgent(params) {
|
|
346
|
+
return !params.isLoading && !params.agentLoading && !params.hasAgentById && !params.isEditing;
|
|
347
|
+
};
|
|
348
|
+
export var shouldSkipAbmConfirmWithoutMultiAgents = function shouldSkipAbmConfirmWithoutMultiAgents(hasMultiAgentsAccess) {
|
|
349
|
+
return !hasMultiAgentsAccess;
|
|
350
|
+
};
|
|
351
|
+
export var resolveAbmDraftFavoriteValue = function resolveAbmDraftFavoriteValue(currentIsFavorite) {
|
|
352
|
+
return !currentIsFavorite;
|
|
353
|
+
};
|
|
354
|
+
export var resolveAbmCreateFavoriteAgents = function resolveAbmCreateFavoriteAgents(createdAgent, markFavorite) {
|
|
355
|
+
if (!markFavorite) {
|
|
356
|
+
return {
|
|
357
|
+
listAgent: createdAgent,
|
|
358
|
+
toggleAgent: null
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
var _buildAbmFavoriteTogg = buildAbmFavoriteToggleAgents(createdAgent),
|
|
362
|
+
listAgent = _buildAbmFavoriteTogg.listAgent,
|
|
363
|
+
toggleAgent = _buildAbmFavoriteTogg.toggleAgent;
|
|
364
|
+
return {
|
|
365
|
+
listAgent: listAgent,
|
|
366
|
+
toggleAgent: toggleAgent
|
|
367
|
+
};
|
|
368
|
+
};
|
|
369
|
+
export var applyAbmKnowledgeFileActions = function applyAbmKnowledgeFileActions(value, deleteKnowledge, currentKnowledge, currentActions) {
|
|
370
|
+
if (!deleteKnowledge) {
|
|
371
|
+
return _objectSpread(_objectSpread({}, currentActions), {}, {
|
|
372
|
+
toUpload: [].concat(_toConsumableArray(currentActions.toUpload), _toConsumableArray(value || []))
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
var filesPrevIds = value !== null && value !== void 0 && value.length ? new Set(value.map(function (file) {
|
|
376
|
+
return file.id;
|
|
377
|
+
})) : new Set();
|
|
378
|
+
var newFiles = currentKnowledge.filter(function (file) {
|
|
379
|
+
return !filesPrevIds.has(file.id) && file.status !== 'started';
|
|
380
|
+
});
|
|
381
|
+
var nextToUpload = currentActions.toUpload;
|
|
382
|
+
if (!newFiles.length && currentActions.toUpload.length) {
|
|
383
|
+
var _value$map;
|
|
384
|
+
var valueIds = new Set((_value$map = value === null || value === void 0 ? void 0 : value.map(function (file) {
|
|
385
|
+
return file.id;
|
|
386
|
+
})) !== null && _value$map !== void 0 ? _value$map : []);
|
|
387
|
+
nextToUpload = currentActions.toUpload.filter(function (file) {
|
|
388
|
+
return valueIds.has(file.id);
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
return {
|
|
392
|
+
toUpload: nextToUpload,
|
|
393
|
+
toDelete: [].concat(_toConsumableArray(currentActions.toDelete), _toConsumableArray(newFiles))
|
|
394
|
+
};
|
|
395
|
+
};
|
|
396
|
+
export var mergeAbmAgentValuesByKey = function mergeAbmAgentValuesByKey(prev, key, value, deleteKnowledge) {
|
|
397
|
+
if (key === 'knowledge') {
|
|
398
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
399
|
+
knowledge: deleteKnowledge ? value : [].concat(_toConsumableArray(prev.knowledge || []), _toConsumableArray(value || []))
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
if (key === 'accessibility') {
|
|
403
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
404
|
+
accessibility: value
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
408
|
+
general: _objectSpread(_objectSpread({}, prev.general), {}, _defineProperty({}, key, value))
|
|
409
|
+
});
|
|
410
|
+
};
|
|
411
|
+
export var shouldRunAbmCreateSuccessHandler = function shouldRunAbmCreateSuccessHandler(successCreateId, isLoadingCreate, lastHandledCreateId) {
|
|
412
|
+
return Boolean(successCreateId && !isLoadingCreate && lastHandledCreateId !== successCreateId);
|
|
413
|
+
};
|
|
414
|
+
export var mergeAbmOpenAgentValues = function mergeAbmOpenAgentValues(initialValues, incoming) {
|
|
415
|
+
if (!incoming) {
|
|
416
|
+
return initialValues;
|
|
417
|
+
}
|
|
418
|
+
return _objectSpread(_objectSpread(_objectSpread({}, initialValues), incoming), {}, {
|
|
419
|
+
general: _objectSpread(_objectSpread({}, initialValues.general), incoming.general || {}),
|
|
420
|
+
accessibility: _objectSpread(_objectSpread({}, initialValues.accessibility), incoming.accessibility || {}),
|
|
421
|
+
knowledge: incoming.knowledge || []
|
|
422
|
+
});
|
|
423
|
+
};
|
|
424
|
+
export var resolveAbmCreateKnowledgeHandler = function resolveAbmCreateKnowledgeHandler(plan) {
|
|
425
|
+
if (plan === 'deleteAndCreate') return 'deleteAndCreate';
|
|
426
|
+
if (plan === 'deleteOnly') return 'deleteOnly';
|
|
427
|
+
if (plan === 'uploadOnly') return 'uploadOnly';
|
|
428
|
+
return null;
|
|
429
|
+
};
|
|
430
|
+
export var shouldRepeatDeleteKnowledgesOnCreate = function shouldRepeatDeleteKnowledgesOnCreate(plan) {
|
|
431
|
+
return plan === 'deleteOnly';
|
|
432
|
+
};
|
|
433
|
+
export var shouldEnqueueAbmCreateFavoriteToggle = function shouldEnqueueAbmCreateFavoriteToggle(toggleAgent) {
|
|
434
|
+
return Boolean(toggleAgent);
|
|
435
|
+
};
|
|
436
|
+
export var shouldHandleAbmCreateAccessOnlyClient = function shouldHandleAbmCreateAccessOnlyClient(decision) {
|
|
437
|
+
return decision.shouldCallAccessClient;
|
|
438
|
+
};
|
|
176
439
|
export var createInitialAbmModalValues = function createInitialAbmModalValues() {
|
|
177
440
|
return {
|
|
178
441
|
isEditing: false,
|
|
@@ -196,4 +459,54 @@ export var createInitialAbmModalValues = function createInitialAbmModalValues()
|
|
|
196
459
|
}
|
|
197
460
|
};
|
|
198
461
|
};
|
|
199
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JfVE9PTF9HUk9VUF9TTFVHUyIsIkRFRkFVTFRfQ09SX0FDQ0VTUyIsImRlcml2ZUNvckFjY2Vzc0Zyb21Ub29sR3JvdXBTbHVncyIsImRlcml2ZU1jcENvbm5lY3RvclNsdWdzIiwiS05PV0xFREdFX0FUVEFDSE1FTlRfU1RBVFVTRVMiLCJub3JtYWxpemVLbm93bGVkZ2VBdHRhY2htZW50U3RhdHVzIiwic3RhdHVzIiwiaW5jbHVkZXMiLCJpc01vZGFsQWNjZXNzVHlwZSIsInZhbHVlIiwidmFsaWRhdGVGaWVsZFZhbHVlcyIsInZhbHVlVG9WYWxpZGF0ZSIsImdlbmVyYWwiLCJuYW1lIiwidXNlclByb21wdCIsImJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsIiwiYWdlbnRCeUlkIiwiYWdlbnRNb2RlbHMiLCJwcmV2IiwiX2FnZW50QnlJZCRrbm93bGVkZ2VCIiwiX2FnZW50QnlJZCRjbGllbnRzIiwiYWdlbnRNb2RlbCIsImZpbmQiLCJtb2RlbCIsImlkIiwibW9kZWxBaUlkIiwiX29iamVjdFNwcmVhZCIsImlzRWRpdGluZyIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRQbGFjZWhvbGRlciIsImlzQWN0aXZlIiwiYWlNb2RlbCIsImtub3dsZWRnZUJhc2VzIiwiaXNfZmF2b3JpdGUiLCJrbm93bGVkZ2UiLCJtYXAiLCJrIiwiZmlsZSIsIkZpbGUiLCJmaWxlbmFtZSIsInRvU3RyaW5nIiwic2l6ZSIsImZpbGVfc2l6ZV9ieXRlcyIsInR5cGUiLCJvcmlnaW5hbF9maWxlX3R5cGUiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwiYWNjZXNzaWJpbGl0eSIsImFjY2Vzc1R5cGUiLCJhY2Nlc3MiLCJjbGllbnRzIiwiY2xpZW50IiwiX2NsaWVudCRpZCIsIl9jbGllbnQkaXNfYWN0aXZlIiwiX2NsaWVudCRpc19kZWxldGVkIiwiaXNfYWN0aXZlIiwiaXNfZGVsZXRlZCIsImNvckFjY2VzcyIsInRvb2xHcm91cFNsdWdzIiwic2VsZWN0ZWRDb25uZWN0b3JzIiwiY29ubmVjdG9ycyIsImFyZUFibUNsaWVudHNBcnJheXNFcXVhbCIsImNsaWVudHMxIiwiY2xpZW50czIiLCJsZW5ndGgiLCJjbGllbnRzMUlkcyIsIl9jbGllbnQkY2xpZW50SWQiLCJjbGllbnRJZCIsInNvcnQiLCJjbGllbnRzMklkcyIsIl9jbGllbnQkY2xpZW50SWQyIiwiZXZlcnkiLCJpbmRleCIsImhhc0FjY2Vzc2liaWxpdHlTZWN0aW9uQ2hhbmdlZCIsImN1cnJlbnQiLCJpbml0aWFsIiwiX2N1cnJlbnQkY29yQWNjZXNzIiwiX2luaXRpYWwkY29yQWNjZXNzIiwiYWNjZXNzVHlwZVNhbWUiLCJjbGllbnRzU2FtZSIsImN1cnJlbnRDb3JBY2Nlc3MiLCJpbml0aWFsQ29yQWNjZXNzIiwiY29yQWNjZXNzU2FtZSIsInNsdWciLCJpc1NhbWVBZ2VudE1vZGFsU25hcHNob3QiLCJmaWxlQWN0aW9ucyIsIl9jdXJyZW50JGdlbmVyYWwkYWlNbyIsIl9pbml0aWFsJGdlbmVyYWwkYWlNbyIsIl9jdXJyZW50JGtub3dsZWRnZSIsIl9pbml0aWFsJGtub3dsZWRnZSIsIl9jdXJyZW50JGtub3dsZWRnZTIiLCJfaW5pdGlhbCRrbm93bGVkZ2UyIiwiX2ZpbGVBY3Rpb25zJHRvVXBkYXRlIiwiX2ZpbGVBY3Rpb25zJHRvRGVsZXRlIiwidG9VcGRhdGUiLCJ0b0RlbGV0ZSIsImhhc0FnZW50Q3JlYXRpb25EcmFmdCIsInZhbHVlcyIsImRlZmF1bHRzIiwiX3ZhbHVlcyRnZW5lcmFsJGFpTW9kIiwiX3ZhbHVlcyRnZW5lcmFsJHVzZXJQIiwiaXNEZWZhdWx0QWlNb2RlbCIsImRlZmF1bHRBaU1vZGVsSWQiLCJpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyIiwiZGVmYXVsdElucHV0UGxhY2Vob2xkZXIiLCJpc0RlZmF1bHRVc2VyUHJvbXB0IiwiZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciIsImhhc05hbWUiLCJ0cmltIiwiaGFzRW1vamkiLCJoYXNJbnRyb2R1Y3Rpb24iLCJoYXNJbnB1dFBsYWNlaG9sZGVyIiwiaGFzVXNlclByb21wdCIsImhhc0tub3dsZWRnZSIsImhhc0N1c3RvbUFpTW9kZWwiLCJCb29sZWFuIiwiaGFzQWNjZXNzaWJpbGl0eSIsImhhc0FibVBlbmRpbmdDaGFuZ2VzIiwiX2ZpbGVBY3Rpb25zJHRvRGVsZXRlMiIsIl9maWxlQWN0aW9ucyR0b1VwbG9hZCIsImhhc0NyZWF0aW9uRHJhZnQiLCJoYXNFZGl0aW5nQ2hhbmdlcyIsInRvVXBsb2FkIiwiaGFzSW5hY3RpdmVBY2Nlc3NpYmlsaXR5Q2xpZW50cyIsInNvbWUiLCJyZXNvbHZlS25vd2xlZGdlVXBsb2FkT3V0Y29tZSIsImhhc1BlbmRpbmdGaWxlcyIsImhhc0Vycm9yRmlsZXMiLCJpc0FibVNhdmVEaXNhYmxlZCIsIl9yZWYiLCJfdmFsdWVzJGFjY2Vzc2liaWxpdHkiLCJfcmVmJGlzTG9hZGluZyIsImlzTG9hZGluZyIsIl9yZWYkaXNMb2FkaW5nS25vd2xlZCIsImlzTG9hZGluZ0tub3dsZWRnZSIsIl9yZWYkaXNMb2FkaW5nQ3JlYXRlIiwiaXNMb2FkaW5nQ3JlYXRlIiwiX3JlZiRpc0xvYWRpbmdVcGRhdGVBIiwiaXNMb2FkaW5nVXBkYXRlQWNjZXNzIiwiX3JlZiRoYXNGaWxlRXJyb3JzIiwiaGFzRmlsZUVycm9ycyIsInVuY2hhbmdlZCIsImFwcGx5S25vd2xlZGdlRmlsZVN0YXR1c1VwZGF0ZSIsImZpbGVTdGF0dXMiLCJfZmlsZVN0YXR1cyRrbm93bGVkZ2UiLCJrbm93bGVkZ2VfYmFzZV9pZCIsInNob3VsZENvbmZpcm1BYm1DbG9zZSIsImhhc1BlbmRpbmdDaGFuZ2VzIiwic3VjY2Vzc0ZsYWdzIiwiY3JlYXRlIiwidXBkYXRlIiwiY3JlYXRlSW5pdGlhbEFibU1vZGFsVmFsdWVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvb3JnYW5pc21zL0FibUFnZW50TW9kYWwvQWJtQWdlbnRNb2RhbC5oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFnZW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IE1vZGFsVmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnRNb2RhbCdcbmltcG9ydCB0eXBlIHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHtcbiAgQ09SX1RPT0xfR1JPVVBfU0xVR1MsXG4gIERFRkFVTFRfQ09SX0FDQ0VTUyxcbiAgZGVyaXZlQ29yQWNjZXNzRnJvbVRvb2xHcm91cFNsdWdzLFxuICBkZXJpdmVNY3BDb25uZWN0b3JTbHVncyxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbm9ybWFsaXplQWdlbnRDb25uZWN0b3JzJ1xuXG5jb25zdCBLTk9XTEVER0VfQVRUQUNITUVOVF9TVEFUVVNFUyA9IFsncGVuZGluZycsICdwcm9jZXNzaW5nJywgJ2RvbmUnLCAnZmFpbGVkJywgJ3N0YXJ0ZWQnXSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplS25vd2xlZGdlQXR0YWNobWVudFN0YXR1cyA9IChzdGF0dXM6IHN0cmluZyk6IE5vbk51bGxhYmxlPEF0dGFjaG1lbnRGaWxlWydzdGF0dXMnXT4gPT4ge1xuICBpZiAoKEtOT1dMRURHRV9BVFRBQ0hNRU5UX1NUQVRVU0VTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhzdGF0dXMpKSB7XG4gICAgcmV0dXJuIHN0YXR1cyBhcyAodHlwZW9mIEtOT1dMRURHRV9BVFRBQ0hNRU5UX1NUQVRVU0VTKVtudW1iZXJdXG4gIH1cbiAgcmV0dXJuICdwZW5kaW5nJ1xufVxuXG5jb25zdCBpc01vZGFsQWNjZXNzVHlwZSA9ICh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgTW9kYWxWYWx1ZXNbJ2FjY2Vzc2liaWxpdHknXVsnYWNjZXNzVHlwZSddID0+XG4gIHZhbHVlID09PSAnY29tcGFueScgfHwgdmFsdWUgPT09ICdjbGllbnRzJyB8fCB2YWx1ZSA9PT0gJ29ubHlfbWUnXG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUZpZWxkVmFsdWVzID0gKHZhbHVlVG9WYWxpZGF0ZTogTW9kYWxWYWx1ZXMpID0+IHtcbiAgaWYgKCF2YWx1ZVRvVmFsaWRhdGUuZ2VuZXJhbC5uYW1lIHx8ICF2YWx1ZVRvVmFsaWRhdGUuZ2VuZXJhbC51c2VyUHJvbXB0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxudHlwZSBBZ2VudERldGFpbFNvdXJjZSA9IHtcbiAgZW1vamk6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgaW50cm9kdWN0aW9uOiBzdHJpbmdcbiAgaW5wdXRQbGFjZWhvbGRlcjogc3RyaW5nXG4gIGlzQWN0aXZlOiBib29sZWFuXG4gIG1vZGVsQWlJZDogbnVtYmVyXG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgdXNlclByb21wdDogc3RyaW5nIHwgbnVsbFxuICBpc19mYXZvcml0ZTogYm9vbGVhblxuICBjcmVhdGVkQnk/OiBudW1iZXJcbiAga25vd2xlZGdlQmFzZXM/OiBBcnJheTx7XG4gICAgaWQ6IG51bWJlclxuICAgIGZpbGVuYW1lOiBzdHJpbmdcbiAgICBmaWxlX3NpemVfYnl0ZXM/OiBudW1iZXJcbiAgICBvcmlnaW5hbF9maWxlX3R5cGU6IHN0cmluZ1xuICAgIHN0YXR1czogc3RyaW5nXG4gICAgdXJsX29yaWdpbmFsPzogc3RyaW5nXG4gICAgdXJsX3RodW1ibmFpbD86IHN0cmluZ1xuICB9PlxuICBhY2Nlc3M6IHN0cmluZ1xuICBjbGllbnRzPzogQXJyYXk8e1xuICAgIGlkPzogbnVtYmVyIHwgc3RyaW5nXG4gICAgbmFtZTogc3RyaW5nXG4gICAgaXNfYWN0aXZlPzogYm9vbGVhblxuICAgIGlzX2RlbGV0ZWQ/OiBib29sZWFuXG4gIH0+XG4gIHRvb2xHcm91cFNsdWdzPzogdW5rbm93blxuICBjb25uZWN0b3JzPzogdW5rbm93blxufVxuXG4vKiogTWlzbWEgZXN0cnVjdHVyYSBxdWUgZWwgZWZlY3RvIHF1ZSBoaWRyYXRhIGRlc2RlIHVzZUdldEFnZW50QnlJZCAodG9kYXMgbGFzIHBlc3Rhw7FhcyBkZWwgQUJNKS4gKi9cbmV4cG9ydCBjb25zdCBidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbCA9IChcbiAgYWdlbnRCeUlkOiBBZ2VudERldGFpbFNvdXJjZSxcbiAgYWdlbnRNb2RlbHM6IEFnZW50TW9kZWxbXSxcbiAgcHJldjogTW9kYWxWYWx1ZXNcbik6IE1vZGFsVmFsdWVzID0+IHtcbiAgY29uc3QgYWdlbnRNb2RlbCA9IGFnZW50TW9kZWxzLmZpbmQobW9kZWwgPT4gbW9kZWwuaWQgPT09IGFnZW50QnlJZC5tb2RlbEFpSWQpXG4gIHJldHVybiB7XG4gICAgLi4ucHJldixcbiAgICBpc0VkaXRpbmc6IHRydWUsXG4gICAgZ2VuZXJhbDoge1xuICAgICAgZW1vamk6IGFnZW50QnlJZC5lbW9qaSxcbiAgICAgIG5hbWU6IGFnZW50QnlJZC5uYW1lLFxuICAgICAgaW50cm9kdWN0aW9uOiBhZ2VudEJ5SWQuaW50cm9kdWN0aW9uLFxuICAgICAgaW5wdXRQbGFjZWhvbGRlcjogYWdlbnRCeUlkLmlucHV0UGxhY2Vob2xkZXIsXG4gICAgICBpc0FjdGl2ZTogYWdlbnRCeUlkLmlzQWN0aXZlLFxuICAgICAgYWlNb2RlbDogYWdlbnRNb2RlbCB8fCBudWxsLFxuICAgICAgaWQ6IGFnZW50QnlJZC5pZCxcbiAgICAgIHVzZXJQcm9tcHQ6IGFnZW50QnlJZC51c2VyUHJvbXB0LFxuICAgICAga25vd2xlZGdlQmFzZXM6IFtdLFxuICAgICAgaXNfZmF2b3JpdGU6IGFnZW50QnlJZC5pc19mYXZvcml0ZSxcbiAgICB9LFxuICAgIGtub3dsZWRnZTpcbiAgICAgIGFnZW50QnlJZC5rbm93bGVkZ2VCYXNlcz8ubWFwKGsgPT4gKHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGsuZmlsZW5hbWUpLFxuICAgICAgICBpZDogay5pZC50b1N0cmluZygpLFxuICAgICAgICBuYW1lOiBrLmZpbGVuYW1lLFxuICAgICAgICBzaXplOiBrLmZpbGVfc2l6ZV9ieXRlcyB8fCAwLFxuICAgICAgICB0eXBlOiBrLm9yaWdpbmFsX2ZpbGVfdHlwZSxcbiAgICAgICAgc3RhdHVzOiBub3JtYWxpemVLbm93bGVkZ2VBdHRhY2htZW50U3RhdHVzKGsuc3RhdHVzKSxcbiAgICAgICAgdXJsX29yaWdpbmFsOiBrLnVybF9vcmlnaW5hbCB8fCB1bmRlZmluZWQsXG4gICAgICAgIHVybF90aHVtYm5haWw6IGsudXJsX3RodW1ibmFpbCB8fCB1bmRlZmluZWQsXG4gICAgICB9KSkgfHwgW10sXG4gICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgYWNjZXNzVHlwZTogaXNNb2RhbEFjY2Vzc1R5cGUoYWdlbnRCeUlkLmFjY2VzcykgPyBhZ2VudEJ5SWQuYWNjZXNzIDogJ2NvbXBhbnknLFxuICAgICAgY2xpZW50czpcbiAgICAgICAgYWdlbnRCeUlkLmNsaWVudHM/Lm1hcChjbGllbnQgPT4gKHtcbiAgICAgICAgICBpZDogY2xpZW50LmlkPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgIG5hbWU6IGNsaWVudC5uYW1lLFxuICAgICAgICAgIGlzX2FjdGl2ZTogY2xpZW50LmlzX2FjdGl2ZSA/PyBmYWxzZSxcbiAgICAgICAgICBpc19kZWxldGVkOiBjbGllbnQuaXNfZGVsZXRlZCA/PyBmYWxzZSxcbiAgICAgICAgfSkpIHx8IG51bGwsXG4gICAgICBjb3JBY2Nlc3M6IGRlcml2ZUNvckFjY2Vzc0Zyb21Ub29sR3JvdXBTbHVncyhhZ2VudEJ5SWQudG9vbEdyb3VwU2x1Z3MpLFxuICAgICAgc2VsZWN0ZWRDb25uZWN0b3JzOiBkZXJpdmVNY3BDb25uZWN0b3JTbHVncyhhZ2VudEJ5SWQuY29ubmVjdG9ycyksXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBBYm1GaWxlQWN0aW9ucyA9IHtcbiAgdG9VcGRhdGU/OiB1bmtub3duW11cbiAgdG9EZWxldGU/OiB1bmtub3duW11cbiAgdG9VcGxvYWQ/OiB1bmtub3duW11cbn1cblxudHlwZSBBYm1DbGllbnRSb3cgPSB7XG4gIGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGlkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBhcmVBYm1DbGllbnRzQXJyYXlzRXF1YWwgPSAoXG4gIGNsaWVudHMxOiBBYm1DbGllbnRSb3dbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGNsaWVudHMyOiBBYm1DbGllbnRSb3dbXSB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWNsaWVudHMxICYmICFjbGllbnRzMikgcmV0dXJuIHRydWVcbiAgaWYgKCFjbGllbnRzMSB8fCAhY2xpZW50czIpIHJldHVybiBmYWxzZVxuICBpZiAoY2xpZW50czEubGVuZ3RoICE9PSBjbGllbnRzMi5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IGNsaWVudHMxSWRzID0gY2xpZW50czEubWFwKGNsaWVudCA9PiBjbGllbnQuY2xpZW50SWQgPz8gY2xpZW50LmlkKS5zb3J0KClcbiAgY29uc3QgY2xpZW50czJJZHMgPSBjbGllbnRzMi5tYXAoY2xpZW50ID0+IGNsaWVudC5jbGllbnRJZCA/PyBjbGllbnQuaWQpLnNvcnQoKVxuXG4gIHJldHVybiBjbGllbnRzMUlkcy5ldmVyeSgoaWQsIGluZGV4KSA9PiBpZCA9PT0gY2xpZW50czJJZHNbaW5kZXhdKVxufVxuXG5leHBvcnQgY29uc3QgaGFzQWNjZXNzaWJpbGl0eVNlY3Rpb25DaGFuZ2VkID0gKFxuICBjdXJyZW50OiBNb2RhbFZhbHVlc1snYWNjZXNzaWJpbGl0eSddIHwgdW5kZWZpbmVkLFxuICBpbml0aWFsOiBNb2RhbFZhbHVlc1snYWNjZXNzaWJpbGl0eSddIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFpbml0aWFsIHx8ICFjdXJyZW50KSByZXR1cm4gdHJ1ZVxuXG4gIGNvbnN0IGFjY2Vzc1R5cGVTYW1lID0gY3VycmVudC5hY2Nlc3NUeXBlID09PSBpbml0aWFsLmFjY2Vzc1R5cGVcbiAgY29uc3QgY2xpZW50c1NhbWUgPSBhcmVBYm1DbGllbnRzQXJyYXlzRXF1YWwoY3VycmVudC5jbGllbnRzLCBpbml0aWFsLmNsaWVudHMpXG4gIGNvbnN0IGN1cnJlbnRDb3JBY2Nlc3MgPSBjdXJyZW50LmNvckFjY2VzcyA/PyBERUZBVUxUX0NPUl9BQ0NFU1NcbiAgY29uc3QgaW5pdGlhbENvckFjY2VzcyA9IGluaXRpYWwuY29yQWNjZXNzID8/IERFRkFVTFRfQ09SX0FDQ0VTU1xuICBjb25zdCBjb3JBY2Nlc3NTYW1lID0gQ09SX1RPT0xfR1JPVVBfU0xVR1MuZXZlcnkoc2x1ZyA9PiBjdXJyZW50Q29yQWNjZXNzW3NsdWddID09PSBpbml0aWFsQ29yQWNjZXNzW3NsdWddKVxuXG4gIHJldHVybiAhYWNjZXNzVHlwZVNhbWUgfHwgIWNsaWVudHNTYW1lIHx8ICFjb3JBY2Nlc3NTYW1lXG59XG5cbmV4cG9ydCBjb25zdCBpc1NhbWVBZ2VudE1vZGFsU25hcHNob3QgPSAoXG4gIGN1cnJlbnQ6IE1vZGFsVmFsdWVzLFxuICBpbml0aWFsOiBNb2RhbFZhbHVlcyxcbiAgZmlsZUFjdGlvbnM6IEFibUZpbGVBY3Rpb25zXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFpbml0aWFsLmdlbmVyYWwgfHwgIWN1cnJlbnQuZ2VuZXJhbCkgcmV0dXJuIGZhbHNlXG5cbiAgcmV0dXJuIChcbiAgICBjdXJyZW50LmdlbmVyYWwubmFtZSA9PT0gaW5pdGlhbC5nZW5lcmFsLm5hbWUgJiZcbiAgICBjdXJyZW50LmdlbmVyYWwuZW1vamkgPT09IGluaXRpYWwuZ2VuZXJhbC5lbW9qaSAmJlxuICAgIGN1cnJlbnQuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24gPT09IGluaXRpYWwuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24gJiZcbiAgICBjdXJyZW50LmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciA9PT0gaW5pdGlhbC5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgJiZcbiAgICBjdXJyZW50LmdlbmVyYWwuYWlNb2RlbD8uaWQgPT09IGluaXRpYWwuZ2VuZXJhbC5haU1vZGVsPy5pZCAmJlxuICAgIGN1cnJlbnQuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSBpbml0aWFsLmdlbmVyYWwudXNlclByb21wdCAmJlxuICAgIChjdXJyZW50Lmtub3dsZWRnZT8ubGVuZ3RoID09PSBpbml0aWFsLmtub3dsZWRnZT8ubGVuZ3RoIHx8XG4gICAgICAoIWN1cnJlbnQua25vd2xlZGdlPy5sZW5ndGggJiYgIWluaXRpYWwua25vd2xlZGdlPy5sZW5ndGgpKSAmJlxuICAgICFmaWxlQWN0aW9ucy50b1VwZGF0ZT8ubGVuZ3RoICYmXG4gICAgIWZpbGVBY3Rpb25zLnRvRGVsZXRlPy5sZW5ndGggJiZcbiAgICAhaGFzQWNjZXNzaWJpbGl0eVNlY3Rpb25DaGFuZ2VkKGN1cnJlbnQuYWNjZXNzaWJpbGl0eSwgaW5pdGlhbC5hY2Nlc3NpYmlsaXR5KVxuICApXG59XG5cbmV4cG9ydCB0eXBlIENyZWF0aW9uRHJhZnREZWZhdWx0cyA9IHtcbiAgZGVmYXVsdElucHV0UGxhY2Vob2xkZXI6IHN0cmluZ1xuICBkZWZhdWx0VXNlclByb21wdFBsYWNlaG9sZGVyOiBzdHJpbmdcbiAgZGVmYXVsdEFpTW9kZWxJZD86IG51bWJlciB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0FnZW50Q3JlYXRpb25EcmFmdCA9ICh2YWx1ZXM6IE1vZGFsVmFsdWVzLCBkZWZhdWx0czogQ3JlYXRpb25EcmFmdERlZmF1bHRzKTogYm9vbGVhbiA9PiB7XG4gIGlmICh2YWx1ZXMuaXNFZGl0aW5nKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBpc0RlZmF1bHRBaU1vZGVsID0gZGVmYXVsdHMuZGVmYXVsdEFpTW9kZWxJZCAhPSBudWxsICYmIHZhbHVlcy5nZW5lcmFsLmFpTW9kZWw/LmlkID09PSBkZWZhdWx0cy5kZWZhdWx0QWlNb2RlbElkXG4gIGNvbnN0IGlzRGVmYXVsdElucHV0UGxhY2Vob2xkZXIgPSB2YWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyID09PSBkZWZhdWx0cy5kZWZhdWx0SW5wdXRQbGFjZWhvbGRlclxuICBjb25zdCBpc0RlZmF1bHRVc2VyUHJvbXB0ID1cbiAgICB2YWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSBkZWZhdWx0cy5kZWZhdWx0VXNlclByb21wdFBsYWNlaG9sZGVyIHx8XG4gICAgdmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gJycgfHxcbiAgICB2YWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSBudWxsXG5cbiAgY29uc3QgaGFzTmFtZSA9IHZhbHVlcy5nZW5lcmFsLm5hbWUudHJpbSgpICE9PSAnJ1xuICBjb25zdCBoYXNFbW9qaSA9IHZhbHVlcy5nZW5lcmFsLmVtb2ppLnRyaW0oKSAhPT0gJydcbiAgY29uc3QgaGFzSW50cm9kdWN0aW9uID0gdmFsdWVzLmdlbmVyYWwuaW50cm9kdWN0aW9uLnRyaW0oKSAhPT0gJydcbiAgY29uc3QgaGFzSW5wdXRQbGFjZWhvbGRlciA9IHZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIudHJpbSgpICE9PSAnJyAmJiAhaXNEZWZhdWx0SW5wdXRQbGFjZWhvbGRlclxuICBjb25zdCBoYXNVc2VyUHJvbXB0ID0gdmFsdWVzLmdlbmVyYWwudXNlclByb21wdD8udHJpbSgpICE9PSAnJyAmJiAhaXNEZWZhdWx0VXNlclByb21wdFxuICBjb25zdCBoYXNLbm93bGVkZ2UgPSAhIXZhbHVlcy5rbm93bGVkZ2UubGVuZ3RoXG4gIGNvbnN0IGhhc0N1c3RvbUFpTW9kZWwgPSBCb29sZWFuKHZhbHVlcy5nZW5lcmFsLmFpTW9kZWwgJiYgIWlzRGVmYXVsdEFpTW9kZWwpXG4gIGNvbnN0IGhhc0FjY2Vzc2liaWxpdHkgPSB2YWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueSdcblxuICByZXR1cm4gKFxuICAgIGhhc05hbWUgfHxcbiAgICBoYXNFbW9qaSB8fFxuICAgIGhhc0ludHJvZHVjdGlvbiB8fFxuICAgIGhhc0lucHV0UGxhY2Vob2xkZXIgfHxcbiAgICBoYXNVc2VyUHJvbXB0IHx8XG4gICAgaGFzS25vd2xlZGdlIHx8XG4gICAgaGFzQ3VzdG9tQWlNb2RlbCB8fFxuICAgIGhhc0FjY2Vzc2liaWxpdHlcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgaGFzQWJtUGVuZGluZ0NoYW5nZXMgPSAoXG4gIHZhbHVlczogTW9kYWxWYWx1ZXMsXG4gIGluaXRpYWw6IE1vZGFsVmFsdWVzIHwgbnVsbCxcbiAgZmlsZUFjdGlvbnM6IEFibUZpbGVBY3Rpb25zLFxuICBkZWZhdWx0czogQ3JlYXRpb25EcmFmdERlZmF1bHRzXG4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgaGFzQ3JlYXRpb25EcmFmdCA9IGhhc0FnZW50Q3JlYXRpb25EcmFmdCh2YWx1ZXMsIGRlZmF1bHRzKVxuICBjb25zdCBoYXNFZGl0aW5nQ2hhbmdlcyA9XG4gICAgdmFsdWVzLmlzRWRpdGluZyAmJlxuICAgIEJvb2xlYW4oaW5pdGlhbCkgJiZcbiAgICAoIWlzU2FtZUFnZW50TW9kYWxTbmFwc2hvdCh2YWx1ZXMsIGluaXRpYWwgYXMgTW9kYWxWYWx1ZXMsIGZpbGVBY3Rpb25zKSB8fFxuICAgICAgQm9vbGVhbihmaWxlQWN0aW9ucy50b0RlbGV0ZT8ubGVuZ3RoKSB8fFxuICAgICAgQm9vbGVhbihmaWxlQWN0aW9ucy50b1VwbG9hZD8ubGVuZ3RoKSlcblxuICByZXR1cm4gaGFzQ3JlYXRpb25EcmFmdCB8fCBoYXNFZGl0aW5nQ2hhbmdlc1xufVxuXG5leHBvcnQgY29uc3QgaGFzSW5hY3RpdmVBY2Nlc3NpYmlsaXR5Q2xpZW50cyA9IChcbiAgY2xpZW50czogQXJyYXk8eyBpc19hY3RpdmU/OiBib29sZWFuOyBpc19kZWxldGVkPzogYm9vbGVhbiB9PiB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWNsaWVudHM/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBjbGllbnRzLnNvbWUoY2xpZW50ID0+IGNsaWVudC5pc19hY3RpdmUgPT09IGZhbHNlIHx8IGNsaWVudC5pc19kZWxldGVkID09PSB0cnVlKVxufVxuXG5leHBvcnQgdHlwZSBLbm93bGVkZ2VVcGxvYWRPdXRjb21lID0gJ3BlbmRpbmcnIHwgJ2Vycm9yJyB8ICdjb21wbGV0ZSdcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVLbm93bGVkZ2VVcGxvYWRPdXRjb21lID0gKFxuICBrbm93bGVkZ2U6IFBpY2s8QXR0YWNobWVudEZpbGUsICdzdGF0dXMnPltdXG4pOiBLbm93bGVkZ2VVcGxvYWRPdXRjb21lIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGhhc1BlbmRpbmdGaWxlcyA9IGtub3dsZWRnZS5zb21lKGZpbGUgPT4gZmlsZS5zdGF0dXMgPT09ICdwZW5kaW5nJylcbiAgY29uc3QgaGFzRXJyb3JGaWxlcyA9IGtub3dsZWRnZS5zb21lKGZpbGUgPT4gZmlsZS5zdGF0dXMgPT09ICdmYWlsZWQnKVxuXG4gIGlmIChoYXNQZW5kaW5nRmlsZXMpIHJldHVybiAncGVuZGluZydcbiAgaWYgKGhhc0Vycm9yRmlsZXMpIHJldHVybiAnZXJyb3InXG4gIGlmIChrbm93bGVkZ2UubGVuZ3RoID4gMCkgcmV0dXJuICdjb21wbGV0ZSdcbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IHR5cGUgQWJtU2F2ZURpc2FibGVkSW5wdXQgPSB7XG4gIHZhbHVlczogTW9kYWxWYWx1ZXNcbiAgaW5pdGlhbDogTW9kYWxWYWx1ZXMgfCBudWxsXG4gIGZpbGVBY3Rpb25zOiBBYm1GaWxlQWN0aW9uc1xuICBpc0xvYWRpbmc/OiBib29sZWFuXG4gIGlzTG9hZGluZ0tub3dsZWRnZT86IGJvb2xlYW5cbiAgaXNMb2FkaW5nQ3JlYXRlPzogYm9vbGVhblxuICBpc0xvYWRpbmdVcGRhdGVBY2Nlc3M/OiBib29sZWFuXG4gIGhhc0ZpbGVFcnJvcnM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBpc0FibVNhdmVEaXNhYmxlZCA9ICh7XG4gIHZhbHVlcyxcbiAgaW5pdGlhbCxcbiAgZmlsZUFjdGlvbnMsXG4gIGlzTG9hZGluZyA9IGZhbHNlLFxuICBpc0xvYWRpbmdLbm93bGVkZ2UgPSBmYWxzZSxcbiAgaXNMb2FkaW5nQ3JlYXRlID0gZmFsc2UsXG4gIGlzTG9hZGluZ1VwZGF0ZUFjY2VzcyA9IGZhbHNlLFxuICBoYXNGaWxlRXJyb3JzID0gZmFsc2UsXG59OiBBYm1TYXZlRGlzYWJsZWRJbnB1dCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCB1bmNoYW5nZWQgPSBCb29sZWFuKGluaXRpYWwgJiYgaXNTYW1lQWdlbnRNb2RhbFNuYXBzaG90KHZhbHVlcywgaW5pdGlhbCwgZmlsZUFjdGlvbnMpKVxuXG4gIHJldHVybiAoXG4gICAgIXZhbGlkYXRlRmllbGRWYWx1ZXModmFsdWVzKSB8fFxuICAgIHVuY2hhbmdlZCB8fFxuICAgIGlzTG9hZGluZyB8fFxuICAgIGlzTG9hZGluZ0tub3dsZWRnZSB8fFxuICAgIGlzTG9hZGluZ0NyZWF0ZSB8fFxuICAgIGlzTG9hZGluZ1VwZGF0ZUFjY2VzcyB8fFxuICAgIGhhc0luYWN0aXZlQWNjZXNzaWJpbGl0eUNsaWVudHModmFsdWVzLmFjY2Vzc2liaWxpdHk/LmNsaWVudHMpIHx8XG4gICAgaGFzRmlsZUVycm9yc1xuICApXG59XG5cbmV4cG9ydCB0eXBlIEtub3dsZWRnZUZpbGVTdGF0dXNVcGRhdGUgPSB7XG4gIGZpbGVuYW1lOiBzdHJpbmdcbiAgc3RhdHVzOiBzdHJpbmdcbiAga25vd2xlZGdlX2Jhc2VfaWQ/OiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IGFwcGx5S25vd2xlZGdlRmlsZVN0YXR1c1VwZGF0ZSA9IChcbiAga25vd2xlZGdlOiBBdHRhY2htZW50RmlsZVtdLFxuICBmaWxlU3RhdHVzOiBLbm93bGVkZ2VGaWxlU3RhdHVzVXBkYXRlXG4pOiBBdHRhY2htZW50RmlsZVtdID0+XG4gIGtub3dsZWRnZS5tYXAoZmlsZSA9PiB7XG4gICAgaWYgKGZpbGUubmFtZSAhPT0gZmlsZVN0YXR1cy5maWxlbmFtZSkge1xuICAgICAgcmV0dXJuIGZpbGVcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZmlsZSxcbiAgICAgIHN0YXR1czogbm9ybWFsaXplS25vd2xlZGdlQXR0YWNobWVudFN0YXR1cyhmaWxlU3RhdHVzLnN0YXR1cyksXG4gICAgICBpZDogZmlsZVN0YXR1cy5rbm93bGVkZ2VfYmFzZV9pZD8udG9TdHJpbmcoKSB8fCBmaWxlLmlkLFxuICAgIH1cbiAgfSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZENvbmZpcm1BYm1DbG9zZSA9IChcbiAgaGFzUGVuZGluZ0NoYW5nZXM6IGJvb2xlYW4sXG4gIHN1Y2Nlc3NGbGFnczogeyBjcmVhdGU/OiBib29sZWFuOyB1cGRhdGU/OiBib29sZWFuOyBkZWxldGU/OiBib29sZWFuIH1cbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWhhc1BlbmRpbmdDaGFuZ2VzKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuICEoc3VjY2Vzc0ZsYWdzLmNyZWF0ZSB8fCBzdWNjZXNzRmxhZ3MudXBkYXRlIHx8IHN1Y2Nlc3NGbGFncy5kZWxldGUpXG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJbml0aWFsQWJtTW9kYWxWYWx1ZXMgPSAoKTogTW9kYWxWYWx1ZXMgPT4gKHtcbiAgaXNFZGl0aW5nOiBmYWxzZSxcbiAga25vd2xlZGdlOiBbXSxcbiAgZ2VuZXJhbDoge1xuICAgIG5hbWU6ICcnLFxuICAgIGVtb2ppOiAnJyxcbiAgICBpbnRyb2R1Y3Rpb246ICcnLFxuICAgIGlucHV0UGxhY2Vob2xkZXI6ICcnLFxuICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICBhaU1vZGVsOiBudWxsLFxuICAgIGlkOiBudWxsLFxuICAgIHVzZXJQcm9tcHQ6IG51bGwsXG4gICAga25vd2xlZGdlQmFzZXM6IFtdLFxuICAgIGlzX2Zhdm9yaXRlOiBmYWxzZSxcbiAgfSxcbiAgYWNjZXNzaWJpbGl0eToge1xuICAgIGFjY2Vzc1R5cGU6ICdjb21wYW55JyxcbiAgICBjbGllbnRzOiBudWxsLFxuICAgIGNvckFjY2VzczogREVGQVVMVF9DT1JfQUNDRVNTLFxuICB9LFxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsU0FDRUEsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsRUFDbEJDLGlDQUFpQyxFQUNqQ0MsdUJBQXVCLFFBQ2xCLHlDQUF5QztBQUVoRCxJQUFNQyw2QkFBNkIsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQVU7QUFFckcsT0FBTyxJQUFNQyxrQ0FBa0MsR0FBRyxTQUFyQ0Esa0NBQWtDQSxDQUFJQyxNQUFjLEVBQTRDO0VBQzNHLElBQUtGLDZCQUE2QixDQUF1QkcsUUFBUSxDQUFDRCxNQUFNLENBQUMsRUFBRTtJQUN6RSxPQUFPQSxNQUFNO0VBQ2Y7RUFDQSxPQUFPLFNBQVM7QUFDbEIsQ0FBQztBQUVELElBQU1FLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlDLEtBQWE7RUFBQSxPQUN0Q0EsS0FBSyxLQUFLLFNBQVMsSUFBSUEsS0FBSyxLQUFLLFNBQVMsSUFBSUEsS0FBSyxLQUFLLFNBQVM7QUFBQTtBQUVuRSxPQUFPLElBQU1DLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUlDLGVBQTRCLEVBQUs7RUFDbkUsSUFBSSxDQUFDQSxlQUFlLENBQUNDLE9BQU8sQ0FBQ0MsSUFBSSxJQUFJLENBQUNGLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDRSxVQUFVLEVBQUU7SUFDeEUsT0FBTyxLQUFLO0VBQ2Q7RUFDQSxPQUFPLElBQUk7QUFDYixDQUFDO0FBaUNEO0FBQ0EsT0FBTyxJQUFNQyxzQ0FBc0MsR0FBRyxTQUF6Q0Esc0NBQXNDQSxDQUNqREMsU0FBNEIsRUFDNUJDLFdBQXlCLEVBQ3pCQyxJQUFpQixFQUNEO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMsa0JBQUE7RUFDaEIsSUFBTUMsVUFBVSxHQUFHSixXQUFX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
|
|
462
|
+
export var shouldProcessKnowledgeWsStatus = function shouldProcessKnowledgeWsStatus(status) {
|
|
463
|
+
return status === 'done' || status === 'failed';
|
|
464
|
+
};
|
|
465
|
+
export var resolveAbmKnowledgeWsChannel = function resolveAbmKnowledgeWsChannel(agentById, successCreateId) {
|
|
466
|
+
var _agentById$id;
|
|
467
|
+
var agentId = (_agentById$id = agentById === null || agentById === void 0 ? void 0 : agentById.id) !== null && _agentById$id !== void 0 ? _agentById$id : successCreateId;
|
|
468
|
+
return agentId != null ? "knowledge-base.status:".concat(agentId) : null;
|
|
469
|
+
};
|
|
470
|
+
export var resolveAbmFavoriteTooltipKey = function resolveAbmFavoriteTooltipKey(isFavorite) {
|
|
471
|
+
return isFavorite ? 'generalSection.removeFavorite' : 'generalSection.addFavorite';
|
|
472
|
+
};
|
|
473
|
+
export var shouldSelectAgentAfterDelete = function shouldSelectAgentAfterDelete(currentSelectedAgentId, deletedAgentId) {
|
|
474
|
+
return currentSelectedAgentId != null && deletedAgentId != null && String(currentSelectedAgentId) === String(deletedAgentId);
|
|
475
|
+
};
|
|
476
|
+
export var shouldRunAbmProcessFilesTimeout = function shouldRunAbmProcessFilesTimeout(hasPendingFiles, isShowProcessFiles) {
|
|
477
|
+
return hasPendingFiles || isShowProcessFiles;
|
|
478
|
+
};
|
|
479
|
+
export var resolveAbmProcessFilesTimeoutSuccessKey = function resolveAbmProcessFilesTimeoutSuccessKey(isEditing) {
|
|
480
|
+
return isEditing ? 'confirmAgentUpdated' : 'confirmAgentCreated';
|
|
481
|
+
};
|
|
482
|
+
export var shouldSyncSelectedAgentAfterMutation = function shouldSyncSelectedAgentAfterMutation(currentSelectedAgentId, mutatedAgentId) {
|
|
483
|
+
return currentSelectedAgentId != null && mutatedAgentId != null && String(currentSelectedAgentId) === String(mutatedAgentId);
|
|
484
|
+
};
|
|
485
|
+
export var shouldIncludeAccessibilityUpdateInKnowledgeBatch = function shouldIncludeAccessibilityUpdateInKnowledgeBatch(accessibilityChanged) {
|
|
486
|
+
return accessibilityChanged;
|
|
487
|
+
};
|
|
488
|
+
export var shouldResetSuccessUpdateAccessOnCreateClose = function shouldResetSuccessUpdateAccessOnCreateClose(successUpdateAccess) {
|
|
489
|
+
return successUpdateAccess;
|
|
490
|
+
};
|
|
491
|
+
export var shouldHydrateAgentConnectorsOnEdit = function shouldHydrateAgentConnectorsOnEdit(agentId, externalConnectorsEnabled) {
|
|
492
|
+
return Boolean(agentId && externalConnectorsEnabled);
|
|
493
|
+
};
|
|
494
|
+
export var shouldShowAbmLoaderFiles = function shouldShowAbmLoaderFiles(isShowProcessFiles, hasPendingFiles) {
|
|
495
|
+
return isShowProcessFiles && hasPendingFiles;
|
|
496
|
+
};
|
|
497
|
+
export var resolveAbmModalTitleKey = function resolveAbmModalTitleKey(isEditing) {
|
|
498
|
+
return isEditing ? 'editAgent' : 'newAgent';
|
|
499
|
+
};
|
|
500
|
+
export var shouldDisableAbmHeaderClose = function shouldDisableAbmHeaderClose(isLoading, isLoadingKnowledge, isLoadingCreate, isLoadingUpdateAccess) {
|
|
501
|
+
return isLoading || isLoadingKnowledge || isLoadingCreate || isLoadingUpdateAccess;
|
|
502
|
+
};
|
|
503
|
+
export var resolveAbmSaveAction = function resolveAbmSaveAction(isEditing, hasSameValues) {
|
|
504
|
+
if (isEditing) {
|
|
505
|
+
return hasSameValues ? 'noop' : 'update';
|
|
506
|
+
}
|
|
507
|
+
return 'create';
|
|
508
|
+
};
|
|
509
|
+
export var resolveProcessFilesTimeoutFlagBeforeSave = function resolveProcessFilesTimeoutFlagBeforeSave() {
|
|
510
|
+
return false;
|
|
511
|
+
};
|
|
512
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JfVE9PTF9HUk9VUF9TTFVHUyIsIkRFRkFVTFRfQ09SX0FDQ0VTUyIsImRlcml2ZUNvckFjY2Vzc0Zyb21Ub29sR3JvdXBTbHVncyIsImRlcml2ZU1jcENvbm5lY3RvclNsdWdzIiwiS05PV0xFREdFX0FUVEFDSE1FTlRfU1RBVFVTRVMiLCJub3JtYWxpemVLbm93bGVkZ2VBdHRhY2htZW50U3RhdHVzIiwic3RhdHVzIiwiaW5jbHVkZXMiLCJpc01vZGFsQWNjZXNzVHlwZSIsInZhbHVlIiwidmFsaWRhdGVGaWVsZFZhbHVlcyIsInZhbHVlVG9WYWxpZGF0ZSIsImdlbmVyYWwiLCJuYW1lIiwidXNlclByb21wdCIsImJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsIiwiYWdlbnRCeUlkIiwiYWdlbnRNb2RlbHMiLCJwcmV2IiwiX2FnZW50QnlJZCRrbm93bGVkZ2VCIiwiX2FnZW50QnlJZCRjbGllbnRzIiwiYWdlbnRNb2RlbCIsImZpbmQiLCJtb2RlbCIsImlkIiwibW9kZWxBaUlkIiwiX29iamVjdFNwcmVhZCIsImlzRWRpdGluZyIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRQbGFjZWhvbGRlciIsImlzQWN0aXZlIiwiYWlNb2RlbCIsImtub3dsZWRnZUJhc2VzIiwiaXNfZmF2b3JpdGUiLCJrbm93bGVkZ2UiLCJtYXAiLCJrIiwiZmlsZSIsIkZpbGUiLCJmaWxlbmFtZSIsInRvU3RyaW5nIiwic2l6ZSIsImZpbGVfc2l6ZV9ieXRlcyIsInR5cGUiLCJvcmlnaW5hbF9maWxlX3R5cGUiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwiYWNjZXNzaWJpbGl0eSIsImFjY2Vzc1R5cGUiLCJhY2Nlc3MiLCJjbGllbnRzIiwiY2xpZW50IiwiX2NsaWVudCRpZCIsIl9jbGllbnQkaXNfYWN0aXZlIiwiX2NsaWVudCRpc19kZWxldGVkIiwiaXNfYWN0aXZlIiwiaXNfZGVsZXRlZCIsImNvckFjY2VzcyIsInRvb2xHcm91cFNsdWdzIiwic2VsZWN0ZWRDb25uZWN0b3JzIiwiY29ubmVjdG9ycyIsImFyZUFibUNsaWVudHNBcnJheXNFcXVhbCIsImNsaWVudHMxIiwiY2xpZW50czIiLCJsZW5ndGgiLCJjbGllbnRzMUlkcyIsIl9jbGllbnQkY2xpZW50SWQiLCJjbGllbnRJZCIsInNvcnQiLCJjbGllbnRzMklkcyIsIl9jbGllbnQkY2xpZW50SWQyIiwiZXZlcnkiLCJpbmRleCIsImhhc0FjY2Vzc2liaWxpdHlTZWN0aW9uQ2hhbmdlZCIsImN1cnJlbnQiLCJpbml0aWFsIiwiX2N1cnJlbnQkY29yQWNjZXNzIiwiX2luaXRpYWwkY29yQWNjZXNzIiwiYWNjZXNzVHlwZVNhbWUiLCJjbGllbnRzU2FtZSIsImN1cnJlbnRDb3JBY2Nlc3MiLCJpbml0aWFsQ29yQWNjZXNzIiwiY29yQWNjZXNzU2FtZSIsInNsdWciLCJpc1NhbWVBZ2VudE1vZGFsU25hcHNob3QiLCJmaWxlQWN0aW9ucyIsIl9jdXJyZW50JGdlbmVyYWwkYWlNbyIsIl9pbml0aWFsJGdlbmVyYWwkYWlNbyIsIl9jdXJyZW50JGtub3dsZWRnZSIsIl9pbml0aWFsJGtub3dsZWRnZSIsIl9jdXJyZW50JGtub3dsZWRnZTIiLCJfaW5pdGlhbCRrbm93bGVkZ2UyIiwiX2ZpbGVBY3Rpb25zJHRvVXBkYXRlIiwiX2ZpbGVBY3Rpb25zJHRvRGVsZXRlIiwidG9VcGRhdGUiLCJ0b0RlbGV0ZSIsImhhc0FnZW50Q3JlYXRpb25EcmFmdCIsInZhbHVlcyIsImRlZmF1bHRzIiwiX3ZhbHVlcyRnZW5lcmFsJGFpTW9kIiwiX3ZhbHVlcyRnZW5lcmFsJHVzZXJQIiwiaXNEZWZhdWx0QWlNb2RlbCIsImRlZmF1bHRBaU1vZGVsSWQiLCJpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyIiwiZGVmYXVsdElucHV0UGxhY2Vob2xkZXIiLCJpc0RlZmF1bHRVc2VyUHJvbXB0IiwiZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciIsImhhc05hbWUiLCJ0cmltIiwiaGFzRW1vamkiLCJoYXNJbnRyb2R1Y3Rpb24iLCJoYXNJbnB1dFBsYWNlaG9sZGVyIiwiaGFzVXNlclByb21wdCIsImhhc0tub3dsZWRnZSIsImhhc0N1c3RvbUFpTW9kZWwiLCJCb29sZWFuIiwiaGFzQWNjZXNzaWJpbGl0eSIsImhhc0FibVBlbmRpbmdDaGFuZ2VzIiwiX2ZpbGVBY3Rpb25zJHRvRGVsZXRlMiIsIl9maWxlQWN0aW9ucyR0b1VwbG9hZCIsImhhc0NyZWF0aW9uRHJhZnQiLCJoYXNFZGl0aW5nQ2hhbmdlcyIsInRvVXBsb2FkIiwiaGFzSW5hY3RpdmVBY2Nlc3NpYmlsaXR5Q2xpZW50cyIsInNvbWUiLCJyZXNvbHZlS25vd2xlZGdlVXBsb2FkT3V0Y29tZSIsImhhc1BlbmRpbmdGaWxlcyIsImhhc0Vycm9yRmlsZXMiLCJpc0FibVNhdmVEaXNhYmxlZCIsIl9yZWYiLCJfdmFsdWVzJGFjY2Vzc2liaWxpdHkiLCJfcmVmJGlzTG9hZGluZyIsImlzTG9hZGluZyIsIl9yZWYkaXNMb2FkaW5nS25vd2xlZCIsImlzTG9hZGluZ0tub3dsZWRnZSIsIl9yZWYkaXNMb2FkaW5nQ3JlYXRlIiwiaXNMb2FkaW5nQ3JlYXRlIiwiX3JlZiRpc0xvYWRpbmdVcGRhdGVBIiwiaXNMb2FkaW5nVXBkYXRlQWNjZXNzIiwiX3JlZiRoYXNGaWxlRXJyb3JzIiwiaGFzRmlsZUVycm9ycyIsInVuY2hhbmdlZCIsImFwcGx5S25vd2xlZGdlRmlsZVN0YXR1c1VwZGF0ZSIsImZpbGVTdGF0dXMiLCJfZmlsZVN0YXR1cyRrbm93bGVkZ2UiLCJrbm93bGVkZ2VfYmFzZV9pZCIsInNob3VsZENvbmZpcm1BYm1DbG9zZSIsImhhc1BlbmRpbmdDaGFuZ2VzIiwic3VjY2Vzc0ZsYWdzIiwiY3JlYXRlIiwidXBkYXRlIiwiQUJNX0FDQ0VTU19ERU5JRURfRVJST1IiLCJpc0FibUFjY2Vzc0RlbmllZEVycm9yIiwiZXJyb3IiLCJjYW5SZW5kZXJBYm1BZ2VudE1vZGFsIiwicGVybWlzc2lvbnMiLCJlZGl0Iiwic2hvdWxkQ2xvc2VBYm1PbkJhY2tkcm9wQ2xpY2siLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiaXNQcm9jZXNzaW5nRmlsZXMiLCJyZXNvbHZlQWJtUHJvY2Vzc2luZ0tub3dsZWRnZUxhYmVsS2V5IiwiQUJNX09QRU5fSU5JVElBTF9TRUNUSU9OUyIsInJlc29sdmVQZW5kaW5nQWJtSW5pdGlhbFNlY3Rpb24iLCJpbml0aWFsU2VjdGlvbiIsInNob3VsZERlbnlBYm1FZGl0V2l0aG91dE11bHRpQWdlbnRzIiwiaGFzTXVsdGlBZ2VudHNBY2Nlc3MiLCJyZXNvbHZlQWJtQ3JlYXRlQWNjZXNzVXBkYXRlQ29udGV4dCIsImlzRnJvbUNyZWF0aW9uIiwiaXNGcm9tRWRpdGluZyIsImhhc0FjdGlvbkZpbGVzIiwib3BlcmF0aW9uVHlwZSIsImhhc0JlZW5DYWxsZWQiLCJzaG91bGRTeW5jQWJtQ2xpZW50QWNjZXNzT25DcmVhdGUiLCJidWlsZEFibUZhdm9yaXRlVG9nZ2xlQWdlbnRzIiwiY3JlYXRlZEFnZW50IiwibGlzdEFnZW50IiwidG9nZ2xlQWdlbnQiLCJyZXNvbHZlQWJtQ3JlYXRlU3VjY2Vzc1BsYW4iLCJhY3Rpb25zIiwiaGFzRGVsZXRlIiwiaGFzVXBsb2FkIiwic2hvdWxkU2hvd1Byb2Nlc3NGaWxlc0ZvckNyZWF0ZVBsYW4iLCJwbGFuIiwicmVzb2x2ZUFibVVwZGF0ZVN1Y2Nlc3NQbGFuIiwiYWNjZXNzaWJpbGl0eUNoYW5nZWQiLCJjcmVhdGVQbGFuIiwicmVzb2x2ZUFibVVwZGF0ZUFjY2Vzc1VwZGF0ZUNvbnRleHQiLCJyZXNvbHZlQWJtVXBkYXRlQWNjZXNzT25seUNvbnRleHQiLCJyZXNvbHZlQWJtQ3JlYXRlQWNjZXNzT25seURlY2lzaW9uIiwibmV4dENvbnRleHQiLCJzaG91bGRDYWxsQWNjZXNzQ2xpZW50IiwiY3JlYXRlUmVzZXRBYm1BY2Nlc3NVcGRhdGVDb250ZXh0Iiwic2hvdWxkRmluYWxpemVBYm1VcGRhdGVXaXRob3V0UGVuZGluZ1dvcmsiLCJpbnB1dCIsImlzU2hvd1Byb2Nlc3NGaWxlcyIsInRvVXBsb2FkQ291bnQiLCJhY2Nlc3NIYXNBY3Rpb25GaWxlcyIsInN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJwcm9jZXNzRmlsZXNUaW1lZE91dCIsInJlc29sdmVLbm93bGVkZ2VXc0NvbXBsZXRpb25FZmZlY3RzIiwidXBsb2FkT3V0Y29tZSIsImNvbnRleHQiLCJhY2Nlc3NIYW5kbGVkIiwiZmlsZXNGaW5pc2hlZCIsImluY3JlbWVudEZpbGVzUHJvY2Vzc2VkIiwibWFya0ZpbGVzRmluaXNoZWRGb3JDcmVhdGUiLCJjbG9zZVByb2Nlc3NGaWxlcyIsInJlc29sdmVBYm1Lbm93bGVkZ2VFcnJvck1lc3NhZ2VLZXkiLCJzaG91bGRCbG9ja0tub3dsZWRnZURlbGV0ZVN1Y2Nlc3NDbG9zZSIsInNob3VsZERlZmVyQWNjZXNzVXBkYXRlVW50aWxGaWxlc0NvbXBsZXRlIiwic2hvdWxkQ2xvc2VDcmVhdGVBZnRlcktub3dsZWRnZVdpdGhvdXRBY2Nlc3MiLCJoYXNTdWNjZXNzQ3JlYXRlIiwic2hvdWxkQ2xvc2VDcmVhdGVBZnRlcktub3dsZWRnZVdpdGhBY2Nlc3MiLCJzaG91bGRBcHBseVBlbmRpbmdTZWN0aW9uQWZ0ZXJPcGVuIiwicGVuZGluZ1NlY3Rpb24iLCJyZXNvbHZlQWJtT3Blbk1vZGFsTG9hZEFjdGlvbiIsInBhcmFtcyIsImhhc1ByZWZldGNoZWRBZ2VudCIsImNhbkFwcGx5QWJtRWRpdGluZ0FnZW50RGV0YWlsIiwic291cmNlIiwic2hvdWxkU2V0RGVmYXVsdEFpTW9kZWxGb3JOZXdBZ2VudCIsImFnZW50TG9hZGluZyIsImhhc0FnZW50QnlJZCIsInNob3VsZFNraXBBYm1Db25maXJtV2l0aG91dE11bHRpQWdlbnRzIiwicmVzb2x2ZUFibURyYWZ0RmF2b3JpdGVWYWx1ZSIsImN1cnJlbnRJc0Zhdm9yaXRlIiwicmVzb2x2ZUFibUNyZWF0ZUZhdm9yaXRlQWdlbnRzIiwibWFya0Zhdm9yaXRlIiwiX2J1aWxkQWJtRmF2b3JpdGVUb2dnIiwiYXBwbHlBYm1Lbm93bGVkZ2VGaWxlQWN0aW9ucyIsImRlbGV0ZUtub3dsZWRnZSIsImN1cnJlbnRLbm93bGVkZ2UiLCJjdXJyZW50QWN0aW9ucyIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImZpbGVzUHJldklkcyIsIlNldCIsIm5ld0ZpbGVzIiwiZmlsdGVyIiwiaGFzIiwibmV4dFRvVXBsb2FkIiwiX3ZhbHVlJG1hcCIsInZhbHVlSWRzIiwibWVyZ2VBYm1BZ2VudFZhbHVlc0J5S2V5Iiwia2V5IiwiX2RlZmluZVByb3BlcnR5Iiwic2hvdWxkUnVuQWJtQ3JlYXRlU3VjY2Vzc0hhbmRsZXIiLCJzdWNjZXNzQ3JlYXRlSWQiLCJsYXN0SGFuZGxlZENyZWF0ZUlkIiwibWVyZ2VBYm1PcGVuQWdlbnRWYWx1ZXMiLCJpbml0aWFsVmFsdWVzIiwiaW5jb21pbmciLCJyZXNvbHZlQWJtQ3JlYXRlS25vd2xlZGdlSGFuZGxlciIsInNob3VsZFJlcGVhdERlbGV0ZUtub3dsZWRnZXNPbkNyZWF0ZSIsInNob3VsZEVucXVldWVBYm1DcmVhdGVGYXZvcml0ZVRvZ2dsZSIsInNob3VsZEhhbmRsZUFibUNyZWF0ZUFjY2Vzc09ubHlDbGllbnQiLCJkZWNpc2lvbiIsImNyZWF0ZUluaXRpYWxBYm1Nb2RhbFZhbHVlcyIsInNob3VsZFByb2Nlc3NLbm93bGVkZ2VXc1N0YXR1cyIsInJlc29sdmVBYm1Lbm93bGVkZ2VXc0NoYW5uZWwiLCJfYWdlbnRCeUlkJGlkIiwiYWdlbnRJZCIsInJlc29sdmVBYm1GYXZvcml0ZVRvb2x0aXBLZXkiLCJpc0Zhdm9yaXRlIiwic2hvdWxkU2VsZWN0QWdlbnRBZnRlckRlbGV0ZSIsImN1cnJlbnRTZWxlY3RlZEFnZW50SWQiLCJkZWxldGVkQWdlbnRJZCIsIlN0cmluZyIsInNob3VsZFJ1bkFibVByb2Nlc3NGaWxlc1RpbWVvdXQiLCJyZXNvbHZlQWJtUHJvY2Vzc0ZpbGVzVGltZW91dFN1Y2Nlc3NLZXkiLCJzaG91bGRTeW5jU2VsZWN0ZWRBZ2VudEFmdGVyTXV0YXRpb24iLCJtdXRhdGVkQWdlbnRJZCIsInNob3VsZEluY2x1ZGVBY2Nlc3NpYmlsaXR5VXBkYXRlSW5Lbm93bGVkZ2VCYXRjaCIsInNob3VsZFJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2Vzc09uQ3JlYXRlQ2xvc2UiLCJzaG91bGRIeWRyYXRlQWdlbnRDb25uZWN0b3JzT25FZGl0IiwiZXh0ZXJuYWxDb25uZWN0b3JzRW5hYmxlZCIsInNob3VsZFNob3dBYm1Mb2FkZXJGaWxlcyIsInJlc29sdmVBYm1Nb2RhbFRpdGxlS2V5Iiwic2hvdWxkRGlzYWJsZUFibUhlYWRlckNsb3NlIiwicmVzb2x2ZUFibVNhdmVBY3Rpb24iLCJoYXNTYW1lVmFsdWVzIiwicmVzb2x2ZVByb2Nlc3NGaWxlc1RpbWVvdXRGbGFnQmVmb3JlU2F2ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwuaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZ2VudE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBNb2RhbFZhbHVlcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50TW9kYWwnXG5pbXBvcnQgdHlwZSB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7XG4gIENPUl9UT09MX0dST1VQX1NMVUdTLFxuICBERUZBVUxUX0NPUl9BQ0NFU1MsXG4gIGRlcml2ZUNvckFjY2Vzc0Zyb21Ub29sR3JvdXBTbHVncyxcbiAgZGVyaXZlTWNwQ29ubmVjdG9yU2x1Z3MsXG59IGZyb20gJy4uLy4uLy4uL3V0aWxzL25vcm1hbGl6ZUFnZW50Q29ubmVjdG9ycydcblxuY29uc3QgS05PV0xFREdFX0FUVEFDSE1FTlRfU1RBVFVTRVMgPSBbJ3BlbmRpbmcnLCAncHJvY2Vzc2luZycsICdkb25lJywgJ2ZhaWxlZCcsICdzdGFydGVkJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUtub3dsZWRnZUF0dGFjaG1lbnRTdGF0dXMgPSAoc3RhdHVzOiBzdHJpbmcpOiBOb25OdWxsYWJsZTxBdHRhY2htZW50RmlsZVsnc3RhdHVzJ10+ID0+IHtcbiAgaWYgKChLTk9XTEVER0VfQVRUQUNITUVOVF9TVEFUVVNFUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMoc3RhdHVzKSkge1xuICAgIHJldHVybiBzdGF0dXMgYXMgKHR5cGVvZiBLTk9XTEVER0VfQVRUQUNITUVOVF9TVEFUVVNFUylbbnVtYmVyXVxuICB9XG4gIHJldHVybiAncGVuZGluZydcbn1cblxuY29uc3QgaXNNb2RhbEFjY2Vzc1R5cGUgPSAodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIE1vZGFsVmFsdWVzWydhY2Nlc3NpYmlsaXR5J11bJ2FjY2Vzc1R5cGUnXSA9PlxuICB2YWx1ZSA9PT0gJ2NvbXBhbnknIHx8IHZhbHVlID09PSAnY2xpZW50cycgfHwgdmFsdWUgPT09ICdvbmx5X21lJ1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVGaWVsZFZhbHVlcyA9ICh2YWx1ZVRvVmFsaWRhdGU6IE1vZGFsVmFsdWVzKSA9PiB7XG4gIGlmICghdmFsdWVUb1ZhbGlkYXRlLmdlbmVyYWwubmFtZSB8fCAhdmFsdWVUb1ZhbGlkYXRlLmdlbmVyYWwudXNlclByb21wdCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbnR5cGUgQWdlbnREZXRhaWxTb3VyY2UgPSB7XG4gIGVtb2ppOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGludHJvZHVjdGlvbjogc3RyaW5nXG4gIGlucHV0UGxhY2Vob2xkZXI6IHN0cmluZ1xuICBpc0FjdGl2ZTogYm9vbGVhblxuICBtb2RlbEFpSWQ6IG51bWJlclxuICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gIHVzZXJQcm9tcHQ6IHN0cmluZyB8IG51bGxcbiAgaXNfZmF2b3JpdGU6IGJvb2xlYW5cbiAgY3JlYXRlZEJ5PzogbnVtYmVyXG4gIGtub3dsZWRnZUJhc2VzPzogQXJyYXk8e1xuICAgIGlkOiBudW1iZXJcbiAgICBmaWxlbmFtZTogc3RyaW5nXG4gICAgZmlsZV9zaXplX2J5dGVzPzogbnVtYmVyXG4gICAgb3JpZ2luYWxfZmlsZV90eXBlOiBzdHJpbmdcbiAgICBzdGF0dXM6IHN0cmluZ1xuICAgIHVybF9vcmlnaW5hbD86IHN0cmluZ1xuICAgIHVybF90aHVtYm5haWw/OiBzdHJpbmdcbiAgfT5cbiAgYWNjZXNzOiBzdHJpbmdcbiAgY2xpZW50cz86IEFycmF5PHtcbiAgICBpZD86IG51bWJlciB8IHN0cmluZ1xuICAgIG5hbWU6IHN0cmluZ1xuICAgIGlzX2FjdGl2ZT86IGJvb2xlYW5cbiAgICBpc19kZWxldGVkPzogYm9vbGVhblxuICB9PlxuICB0b29sR3JvdXBTbHVncz86IHVua25vd25cbiAgY29ubmVjdG9ycz86IHVua25vd25cbn1cblxuLyoqIE1pc21hIGVzdHJ1Y3R1cmEgcXVlIGVsIGVmZWN0byBxdWUgaGlkcmF0YSBkZXNkZSB1c2VHZXRBZ2VudEJ5SWQgKHRvZGFzIGxhcyBwZXN0YcOxYXMgZGVsIEFCTSkuICovXG5leHBvcnQgY29uc3QgYnVpbGRFZGl0aW5nTW9kYWxWYWx1ZXNGcm9tQWdlbnREZXRhaWwgPSAoXG4gIGFnZW50QnlJZDogQWdlbnREZXRhaWxTb3VyY2UsXG4gIGFnZW50TW9kZWxzOiBBZ2VudE1vZGVsW10sXG4gIHByZXY6IE1vZGFsVmFsdWVzXG4pOiBNb2RhbFZhbHVlcyA9PiB7XG4gIGNvbnN0IGFnZW50TW9kZWwgPSBhZ2VudE1vZGVscy5maW5kKG1vZGVsID0+IG1vZGVsLmlkID09PSBhZ2VudEJ5SWQubW9kZWxBaUlkKVxuICByZXR1cm4ge1xuICAgIC4uLnByZXYsXG4gICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgIGdlbmVyYWw6IHtcbiAgICAgIGVtb2ppOiBhZ2VudEJ5SWQuZW1vamksXG4gICAgICBuYW1lOiBhZ2VudEJ5SWQubmFtZSxcbiAgICAgIGludHJvZHVjdGlvbjogYWdlbnRCeUlkLmludHJvZHVjdGlvbixcbiAgICAgIGlucHV0UGxhY2Vob2xkZXI6IGFnZW50QnlJZC5pbnB1dFBsYWNlaG9sZGVyLFxuICAgICAgaXNBY3RpdmU6IGFnZW50QnlJZC5pc0FjdGl2ZSxcbiAgICAgIGFpTW9kZWw6IGFnZW50TW9kZWwgfHwgbnVsbCxcbiAgICAgIGlkOiBhZ2VudEJ5SWQuaWQsXG4gICAgICB1c2VyUHJvbXB0OiBhZ2VudEJ5SWQudXNlclByb21wdCxcbiAgICAgIGtub3dsZWRnZUJhc2VzOiBbXSxcbiAgICAgIGlzX2Zhdm9yaXRlOiBhZ2VudEJ5SWQuaXNfZmF2b3JpdGUsXG4gICAgfSxcbiAgICBrbm93bGVkZ2U6XG4gICAgICBhZ2VudEJ5SWQua25vd2xlZGdlQmFzZXM/Lm1hcChrID0+ICh7XG4gICAgICAgIGZpbGU6IG5ldyBGaWxlKFtdLCBrLmZpbGVuYW1lKSxcbiAgICAgICAgaWQ6IGsuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogay5maWxlbmFtZSxcbiAgICAgICAgc2l6ZTogay5maWxlX3NpemVfYnl0ZXMgfHwgMCxcbiAgICAgICAgdHlwZTogay5vcmlnaW5hbF9maWxlX3R5cGUsXG4gICAgICAgIHN0YXR1czogbm9ybWFsaXplS25vd2xlZGdlQXR0YWNobWVudFN0YXR1cyhrLnN0YXR1cyksXG4gICAgICAgIHVybF9vcmlnaW5hbDogay51cmxfb3JpZ2luYWwgfHwgdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiBrLnVybF90aHVtYm5haWwgfHwgdW5kZWZpbmVkLFxuICAgICAgfSkpIHx8IFtdLFxuICAgIGFjY2Vzc2liaWxpdHk6IHtcbiAgICAgIGFjY2Vzc1R5cGU6IGlzTW9kYWxBY2Nlc3NUeXBlKGFnZW50QnlJZC5hY2Nlc3MpID8gYWdlbnRCeUlkLmFjY2VzcyA6ICdjb21wYW55JyxcbiAgICAgIGNsaWVudHM6XG4gICAgICAgIGFnZW50QnlJZC5jbGllbnRzPy5tYXAoY2xpZW50ID0+ICh7XG4gICAgICAgICAgaWQ6IGNsaWVudC5pZD8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICBuYW1lOiBjbGllbnQubmFtZSxcbiAgICAgICAgICBpc19hY3RpdmU6IGNsaWVudC5pc19hY3RpdmUgPz8gZmFsc2UsXG4gICAgICAgICAgaXNfZGVsZXRlZDogY2xpZW50LmlzX2RlbGV0ZWQgPz8gZmFsc2UsXG4gICAgICAgIH0pKSB8fCBudWxsLFxuICAgICAgY29yQWNjZXNzOiBkZXJpdmVDb3JBY2Nlc3NGcm9tVG9vbEdyb3VwU2x1Z3MoYWdlbnRCeUlkLnRvb2xHcm91cFNsdWdzKSxcbiAgICAgIHNlbGVjdGVkQ29ubmVjdG9yczogZGVyaXZlTWNwQ29ubmVjdG9yU2x1Z3MoYWdlbnRCeUlkLmNvbm5lY3RvcnMpLFxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQWJtRmlsZUFjdGlvbnMgPSB7XG4gIHRvVXBkYXRlPzogdW5rbm93bltdXG4gIHRvRGVsZXRlPzogdW5rbm93bltdXG4gIHRvVXBsb2FkPzogdW5rbm93bltdXG59XG5cbnR5cGUgQWJtQ2xpZW50Um93ID0ge1xuICBjbGllbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBpZD86IHN0cmluZyB8IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgYXJlQWJtQ2xpZW50c0FycmF5c0VxdWFsID0gKFxuICBjbGllbnRzMTogQWJtQ2xpZW50Um93W10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjbGllbnRzMjogQWJtQ2xpZW50Um93W10gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFjbGllbnRzMSAmJiAhY2xpZW50czIpIHJldHVybiB0cnVlXG4gIGlmICghY2xpZW50czEgfHwgIWNsaWVudHMyKSByZXR1cm4gZmFsc2VcbiAgaWYgKGNsaWVudHMxLmxlbmd0aCAhPT0gY2xpZW50czIubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBjbGllbnRzMUlkcyA9IGNsaWVudHMxLm1hcChjbGllbnQgPT4gY2xpZW50LmNsaWVudElkID8/IGNsaWVudC5pZCkuc29ydCgpXG4gIGNvbnN0IGNsaWVudHMySWRzID0gY2xpZW50czIubWFwKGNsaWVudCA9PiBjbGllbnQuY2xpZW50SWQgPz8gY2xpZW50LmlkKS5zb3J0KClcblxuICByZXR1cm4gY2xpZW50czFJZHMuZXZlcnkoKGlkLCBpbmRleCkgPT4gaWQgPT09IGNsaWVudHMySWRzW2luZGV4XSlcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0FjY2Vzc2liaWxpdHlTZWN0aW9uQ2hhbmdlZCA9IChcbiAgY3VycmVudDogTW9kYWxWYWx1ZXNbJ2FjY2Vzc2liaWxpdHknXSB8IHVuZGVmaW5lZCxcbiAgaW5pdGlhbDogTW9kYWxWYWx1ZXNbJ2FjY2Vzc2liaWxpdHknXSB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmICghaW5pdGlhbCB8fCAhY3VycmVudCkgcmV0dXJuIHRydWVcblxuICBjb25zdCBhY2Nlc3NUeXBlU2FtZSA9IGN1cnJlbnQuYWNjZXNzVHlwZSA9PT0gaW5pdGlhbC5hY2Nlc3NUeXBlXG4gIGNvbnN0IGNsaWVudHNTYW1lID0gYXJlQWJtQ2xpZW50c0FycmF5c0VxdWFsKGN1cnJlbnQuY2xpZW50cywgaW5pdGlhbC5jbGllbnRzKVxuICBjb25zdCBjdXJyZW50Q29yQWNjZXNzID0gY3VycmVudC5jb3JBY2Nlc3MgPz8gREVGQVVMVF9DT1JfQUNDRVNTXG4gIGNvbnN0IGluaXRpYWxDb3JBY2Nlc3MgPSBpbml0aWFsLmNvckFjY2VzcyA/PyBERUZBVUxUX0NPUl9BQ0NFU1NcbiAgY29uc3QgY29yQWNjZXNzU2FtZSA9IENPUl9UT09MX0dST1VQX1NMVUdTLmV2ZXJ5KHNsdWcgPT4gY3VycmVudENvckFjY2Vzc1tzbHVnXSA9PT0gaW5pdGlhbENvckFjY2Vzc1tzbHVnXSlcblxuICByZXR1cm4gIWFjY2Vzc1R5cGVTYW1lIHx8ICFjbGllbnRzU2FtZSB8fCAhY29yQWNjZXNzU2FtZVxufVxuXG5leHBvcnQgY29uc3QgaXNTYW1lQWdlbnRNb2RhbFNuYXBzaG90ID0gKFxuICBjdXJyZW50OiBNb2RhbFZhbHVlcyxcbiAgaW5pdGlhbDogTW9kYWxWYWx1ZXMsXG4gIGZpbGVBY3Rpb25zOiBBYm1GaWxlQWN0aW9uc1xuKTogYm9vbGVhbiA9PiB7XG4gIGlmICghaW5pdGlhbC5nZW5lcmFsIHx8ICFjdXJyZW50LmdlbmVyYWwpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiAoXG4gICAgY3VycmVudC5nZW5lcmFsLm5hbWUgPT09IGluaXRpYWwuZ2VuZXJhbC5uYW1lICYmXG4gICAgY3VycmVudC5nZW5lcmFsLmVtb2ppID09PSBpbml0aWFsLmdlbmVyYWwuZW1vamkgJiZcbiAgICBjdXJyZW50LmdlbmVyYWwuaW50cm9kdWN0aW9uID09PSBpbml0aWFsLmdlbmVyYWwuaW50cm9kdWN0aW9uICYmXG4gICAgY3VycmVudC5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgPT09IGluaXRpYWwuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyICYmXG4gICAgY3VycmVudC5nZW5lcmFsLmFpTW9kZWw/LmlkID09PSBpbml0aWFsLmdlbmVyYWwuYWlNb2RlbD8uaWQgJiZcbiAgICBjdXJyZW50LmdlbmVyYWwudXNlclByb21wdCA9PT0gaW5pdGlhbC5nZW5lcmFsLnVzZXJQcm9tcHQgJiZcbiAgICAoY3VycmVudC5rbm93bGVkZ2U/Lmxlbmd0aCA9PT0gaW5pdGlhbC5rbm93bGVkZ2U/Lmxlbmd0aCB8fFxuICAgICAgKCFjdXJyZW50Lmtub3dsZWRnZT8ubGVuZ3RoICYmICFpbml0aWFsLmtub3dsZWRnZT8ubGVuZ3RoKSkgJiZcbiAgICAhZmlsZUFjdGlvbnMudG9VcGRhdGU/Lmxlbmd0aCAmJlxuICAgICFmaWxlQWN0aW9ucy50b0RlbGV0ZT8ubGVuZ3RoICYmXG4gICAgIWhhc0FjY2Vzc2liaWxpdHlTZWN0aW9uQ2hhbmdlZChjdXJyZW50LmFjY2Vzc2liaWxpdHksIGluaXRpYWwuYWNjZXNzaWJpbGl0eSlcbiAgKVxufVxuXG5leHBvcnQgdHlwZSBDcmVhdGlvbkRyYWZ0RGVmYXVsdHMgPSB7XG4gIGRlZmF1bHRJbnB1dFBsYWNlaG9sZGVyOiBzdHJpbmdcbiAgZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlcjogc3RyaW5nXG4gIGRlZmF1bHRBaU1vZGVsSWQ/OiBudW1iZXIgfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBoYXNBZ2VudENyZWF0aW9uRHJhZnQgPSAodmFsdWVzOiBNb2RhbFZhbHVlcywgZGVmYXVsdHM6IENyZWF0aW9uRHJhZnREZWZhdWx0cyk6IGJvb2xlYW4gPT4ge1xuICBpZiAodmFsdWVzLmlzRWRpdGluZykgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgaXNEZWZhdWx0QWlNb2RlbCA9IGRlZmF1bHRzLmRlZmF1bHRBaU1vZGVsSWQgIT0gbnVsbCAmJiB2YWx1ZXMuZ2VuZXJhbC5haU1vZGVsPy5pZCA9PT0gZGVmYXVsdHMuZGVmYXVsdEFpTW9kZWxJZFxuICBjb25zdCBpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyID0gdmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciA9PT0gZGVmYXVsdHMuZGVmYXVsdElucHV0UGxhY2Vob2xkZXJcbiAgY29uc3QgaXNEZWZhdWx0VXNlclByb21wdCA9XG4gICAgdmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gZGVmYXVsdHMuZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciB8fFxuICAgIHZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09ICcnIHx8XG4gICAgdmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gbnVsbFxuXG4gIGNvbnN0IGhhc05hbWUgPSB2YWx1ZXMuZ2VuZXJhbC5uYW1lLnRyaW0oKSAhPT0gJydcbiAgY29uc3QgaGFzRW1vamkgPSB2YWx1ZXMuZ2VuZXJhbC5lbW9qaS50cmltKCkgIT09ICcnXG4gIGNvbnN0IGhhc0ludHJvZHVjdGlvbiA9IHZhbHVlcy5nZW5lcmFsLmludHJvZHVjdGlvbi50cmltKCkgIT09ICcnXG4gIGNvbnN0IGhhc0lucHV0UGxhY2Vob2xkZXIgPSB2YWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyLnRyaW0oKSAhPT0gJycgJiYgIWlzRGVmYXVsdElucHV0UGxhY2Vob2xkZXJcbiAgY29uc3QgaGFzVXNlclByb21wdCA9IHZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQ/LnRyaW0oKSAhPT0gJycgJiYgIWlzRGVmYXVsdFVzZXJQcm9tcHRcbiAgY29uc3QgaGFzS25vd2xlZGdlID0gISF2YWx1ZXMua25vd2xlZGdlLmxlbmd0aFxuICBjb25zdCBoYXNDdXN0b21BaU1vZGVsID0gQm9vbGVhbih2YWx1ZXMuZ2VuZXJhbC5haU1vZGVsICYmICFpc0RlZmF1bHRBaU1vZGVsKVxuICBjb25zdCBoYXNBY2Nlc3NpYmlsaXR5ID0gdmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknXG5cbiAgcmV0dXJuIChcbiAgICBoYXNOYW1lIHx8XG4gICAgaGFzRW1vamkgfHxcbiAgICBoYXNJbnRyb2R1Y3Rpb24gfHxcbiAgICBoYXNJbnB1dFBsYWNlaG9sZGVyIHx8XG4gICAgaGFzVXNlclByb21wdCB8fFxuICAgIGhhc0tub3dsZWRnZSB8fFxuICAgIGhhc0N1c3RvbUFpTW9kZWwgfHxcbiAgICBoYXNBY2Nlc3NpYmlsaXR5XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0FibVBlbmRpbmdDaGFuZ2VzID0gKFxuICB2YWx1ZXM6IE1vZGFsVmFsdWVzLFxuICBpbml0aWFsOiBNb2RhbFZhbHVlcyB8IG51bGwsXG4gIGZpbGVBY3Rpb25zOiBBYm1GaWxlQWN0aW9ucyxcbiAgZGVmYXVsdHM6IENyZWF0aW9uRHJhZnREZWZhdWx0c1xuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGhhc0NyZWF0aW9uRHJhZnQgPSBoYXNBZ2VudENyZWF0aW9uRHJhZnQodmFsdWVzLCBkZWZhdWx0cylcbiAgY29uc3QgaGFzRWRpdGluZ0NoYW5nZXMgPVxuICAgIHZhbHVlcy5pc0VkaXRpbmcgJiZcbiAgICBCb29sZWFuKGluaXRpYWwpICYmXG4gICAgKCFpc1NhbWVBZ2VudE1vZGFsU25hcHNob3QodmFsdWVzLCBpbml0aWFsIGFzIE1vZGFsVmFsdWVzLCBmaWxlQWN0aW9ucykgfHxcbiAgICAgIEJvb2xlYW4oZmlsZUFjdGlvbnMudG9EZWxldGU/Lmxlbmd0aCkgfHxcbiAgICAgIEJvb2xlYW4oZmlsZUFjdGlvbnMudG9VcGxvYWQ/Lmxlbmd0aCkpXG5cbiAgcmV0dXJuIGhhc0NyZWF0aW9uRHJhZnQgfHwgaGFzRWRpdGluZ0NoYW5nZXNcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0luYWN0aXZlQWNjZXNzaWJpbGl0eUNsaWVudHMgPSAoXG4gIGNsaWVudHM6IEFycmF5PHsgaXNfYWN0aXZlPzogYm9vbGVhbjsgaXNfZGVsZXRlZD86IGJvb2xlYW4gfT4gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFjbGllbnRzPy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICByZXR1cm4gY2xpZW50cy5zb21lKGNsaWVudCA9PiBjbGllbnQuaXNfYWN0aXZlID09PSBmYWxzZSB8fCBjbGllbnQuaXNfZGVsZXRlZCA9PT0gdHJ1ZSlcbn1cblxuZXhwb3J0IHR5cGUgS25vd2xlZGdlVXBsb2FkT3V0Y29tZSA9ICdwZW5kaW5nJyB8ICdlcnJvcicgfCAnY29tcGxldGUnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlS25vd2xlZGdlVXBsb2FkT3V0Y29tZSA9IChcbiAga25vd2xlZGdlOiBQaWNrPEF0dGFjaG1lbnRGaWxlLCAnc3RhdHVzJz5bXVxuKTogS25vd2xlZGdlVXBsb2FkT3V0Y29tZSB8IG51bGwgPT4ge1xuICBjb25zdCBoYXNQZW5kaW5nRmlsZXMgPSBrbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAncGVuZGluZycpXG4gIGNvbnN0IGhhc0Vycm9yRmlsZXMgPSBrbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAnZmFpbGVkJylcblxuICBpZiAoaGFzUGVuZGluZ0ZpbGVzKSByZXR1cm4gJ3BlbmRpbmcnXG4gIGlmIChoYXNFcnJvckZpbGVzKSByZXR1cm4gJ2Vycm9yJ1xuICBpZiAoa25vd2xlZGdlLmxlbmd0aCA+IDApIHJldHVybiAnY29tcGxldGUnXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCB0eXBlIEFibVNhdmVEaXNhYmxlZElucHV0ID0ge1xuICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gIGluaXRpYWw6IE1vZGFsVmFsdWVzIHwgbnVsbFxuICBmaWxlQWN0aW9uczogQWJtRmlsZUFjdGlvbnNcbiAgaXNMb2FkaW5nPzogYm9vbGVhblxuICBpc0xvYWRpbmdLbm93bGVkZ2U/OiBib29sZWFuXG4gIGlzTG9hZGluZ0NyZWF0ZT86IGJvb2xlYW5cbiAgaXNMb2FkaW5nVXBkYXRlQWNjZXNzPzogYm9vbGVhblxuICBoYXNGaWxlRXJyb3JzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgaXNBYm1TYXZlRGlzYWJsZWQgPSAoe1xuICB2YWx1ZXMsXG4gIGluaXRpYWwsXG4gIGZpbGVBY3Rpb25zLFxuICBpc0xvYWRpbmcgPSBmYWxzZSxcbiAgaXNMb2FkaW5nS25vd2xlZGdlID0gZmFsc2UsXG4gIGlzTG9hZGluZ0NyZWF0ZSA9IGZhbHNlLFxuICBpc0xvYWRpbmdVcGRhdGVBY2Nlc3MgPSBmYWxzZSxcbiAgaGFzRmlsZUVycm9ycyA9IGZhbHNlLFxufTogQWJtU2F2ZURpc2FibGVkSW5wdXQpOiBib29sZWFuID0+IHtcbiAgY29uc3QgdW5jaGFuZ2VkID0gQm9vbGVhbihpbml0aWFsICYmIGlzU2FtZUFnZW50TW9kYWxTbmFwc2hvdCh2YWx1ZXMsIGluaXRpYWwsIGZpbGVBY3Rpb25zKSlcblxuICByZXR1cm4gKFxuICAgICF2YWxpZGF0ZUZpZWxkVmFsdWVzKHZhbHVlcykgfHxcbiAgICB1bmNoYW5nZWQgfHxcbiAgICBpc0xvYWRpbmcgfHxcbiAgICBpc0xvYWRpbmdLbm93bGVkZ2UgfHxcbiAgICBpc0xvYWRpbmdDcmVhdGUgfHxcbiAgICBpc0xvYWRpbmdVcGRhdGVBY2Nlc3MgfHxcbiAgICBoYXNJbmFjdGl2ZUFjY2Vzc2liaWxpdHlDbGllbnRzKHZhbHVlcy5hY2Nlc3NpYmlsaXR5Py5jbGllbnRzKSB8fFxuICAgIGhhc0ZpbGVFcnJvcnNcbiAgKVxufVxuXG5leHBvcnQgdHlwZSBLbm93bGVkZ2VGaWxlU3RhdHVzVXBkYXRlID0ge1xuICBmaWxlbmFtZTogc3RyaW5nXG4gIHN0YXR1czogc3RyaW5nXG4gIGtub3dsZWRnZV9iYXNlX2lkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBhcHBseUtub3dsZWRnZUZpbGVTdGF0dXNVcGRhdGUgPSAoXG4gIGtub3dsZWRnZTogQXR0YWNobWVudEZpbGVbXSxcbiAgZmlsZVN0YXR1czogS25vd2xlZGdlRmlsZVN0YXR1c1VwZGF0ZVxuKTogQXR0YWNobWVudEZpbGVbXSA9PlxuICBrbm93bGVkZ2UubWFwKGZpbGUgPT4ge1xuICAgIGlmIChmaWxlLm5hbWUgIT09IGZpbGVTdGF0dXMuZmlsZW5hbWUpIHtcbiAgICAgIHJldHVybiBmaWxlXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZpbGUsXG4gICAgICBzdGF0dXM6IG5vcm1hbGl6ZUtub3dsZWRnZUF0dGFjaG1lbnRTdGF0dXMoZmlsZVN0YXR1cy5zdGF0dXMpLFxuICAgICAgaWQ6IGZpbGVTdGF0dXMua25vd2xlZGdlX2Jhc2VfaWQ/LnRvU3RyaW5nKCkgfHwgZmlsZS5pZCxcbiAgICB9XG4gIH0pXG5cbmV4cG9ydCBjb25zdCBzaG91bGRDb25maXJtQWJtQ2xvc2UgPSAoXG4gIGhhc1BlbmRpbmdDaGFuZ2VzOiBib29sZWFuLFxuICBzdWNjZXNzRmxhZ3M6IHsgY3JlYXRlPzogYm9vbGVhbjsgdXBkYXRlPzogYm9vbGVhbjsgZGVsZXRlPzogYm9vbGVhbiB9XG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFoYXNQZW5kaW5nQ2hhbmdlcykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiAhKHN1Y2Nlc3NGbGFncy5jcmVhdGUgfHwgc3VjY2Vzc0ZsYWdzLnVwZGF0ZSB8fCBzdWNjZXNzRmxhZ3MuZGVsZXRlKVxufVxuXG5leHBvcnQgY29uc3QgQUJNX0FDQ0VTU19ERU5JRURfRVJST1IgPSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuXG5leHBvcnQgY29uc3QgaXNBYm1BY2Nlc3NEZW5pZWRFcnJvciA9IChlcnJvcjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4gZXJyb3IgPT09IEFCTV9BQ0NFU1NfREVOSUVEX0VSUk9SXG5cbmV4cG9ydCB0eXBlIEFibVVzZXJQZXJtaXNzaW9ucyA9IHtcbiAgY3JlYXRlPzogYm9vbGVhblxuICBlZGl0PzogYm9vbGVhblxuICBkZWxldGU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBjYW5SZW5kZXJBYm1BZ2VudE1vZGFsID0gKHBlcm1pc3Npb25zOiBBYm1Vc2VyUGVybWlzc2lvbnMgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKHBlcm1pc3Npb25zPy5jcmVhdGUgfHwgcGVybWlzc2lvbnM/LmVkaXQgfHwgcGVybWlzc2lvbnM/LmRlbGV0ZSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZENsb3NlQWJtT25CYWNrZHJvcENsaWNrID0gKFxuICB0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbiAgY3VycmVudFRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsLFxuICBpc1Byb2Nlc3NpbmdGaWxlczogYm9vbGVhblxuKTogYm9vbGVhbiA9PiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQgJiYgIWlzUHJvY2Vzc2luZ0ZpbGVzXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQWJtUHJvY2Vzc2luZ0tub3dsZWRnZUxhYmVsS2V5ID0gKGlzRWRpdGluZzogYm9vbGVhbik6IHN0cmluZyA9PlxuICBpc0VkaXRpbmcgPyAncHJvY2Vzc2luZ0tub3dsZWRnZS5kZXNjcmlwdGlvblVwZGF0ZScgOiAncHJvY2Vzc2luZ0tub3dsZWRnZS5kZXNjcmlwdGlvbkNyZWF0ZSdcblxuZXhwb3J0IHR5cGUgQWJtTW9kYWxJbml0aWFsU2VjdGlvbiA9ICdnZW5lcmFsJyB8ICdrbm93bGVkZ2UnIHwgJ2FjY2Vzc2liaWxpdHknXG5cbmNvbnN0IEFCTV9PUEVOX0lOSVRJQUxfU0VDVElPTlM6IHJlYWRvbmx5IEFibU1vZGFsSW5pdGlhbFNlY3Rpb25bXSA9IFsnZ2VuZXJhbCcsICdrbm93bGVkZ2UnLCAnYWNjZXNzaWJpbGl0eSddXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUGVuZGluZ0FibUluaXRpYWxTZWN0aW9uID0gKGluaXRpYWxTZWN0aW9uPzogc3RyaW5nIHwgbnVsbCk6IEFibU1vZGFsSW5pdGlhbFNlY3Rpb24gfCBudWxsID0+IHtcbiAgaWYgKGluaXRpYWxTZWN0aW9uICYmIChBQk1fT1BFTl9JTklUSUFMX1NFQ1RJT05TIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhpbml0aWFsU2VjdGlvbikpIHtcbiAgICByZXR1cm4gaW5pdGlhbFNlY3Rpb24gYXMgQWJtTW9kYWxJbml0aWFsU2VjdGlvblxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGREZW55QWJtRWRpdFdpdGhvdXRNdWx0aUFnZW50cyA9IChpc0VkaXRpbmc6IGJvb2xlYW4sIGhhc011bHRpQWdlbnRzQWNjZXNzOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKGlzRWRpdGluZyAmJiAhaGFzTXVsdGlBZ2VudHNBY2Nlc3MpXG5cbmV4cG9ydCB0eXBlIEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQgPSB7XG4gIGlzRnJvbUNyZWF0aW9uOiBib29sZWFuXG4gIGlzRnJvbUVkaXRpbmc6IGJvb2xlYW5cbiAgaGFzQWN0aW9uRmlsZXM6IGJvb2xlYW5cbiAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScgfCAndXBkYXRlJyB8IG51bGxcbiAgaGFzQmVlbkNhbGxlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1DcmVhdGVBY2Nlc3NVcGRhdGVDb250ZXh0ID0gKFxuICBhY2Nlc3NUeXBlOiBNb2RhbFZhbHVlc1snYWNjZXNzaWJpbGl0eSddWydhY2Nlc3NUeXBlJ11cbik6IEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQgPT4gKHtcbiAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICBoYXNBY3Rpb25GaWxlczogYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknLFxuICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG59KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU3luY0FibUNsaWVudEFjY2Vzc09uQ3JlYXRlID0gKGFjY2Vzc1R5cGU6IE1vZGFsVmFsdWVzWydhY2Nlc3NpYmlsaXR5J11bJ2FjY2Vzc1R5cGUnXSk6IGJvb2xlYW4gPT5cbiAgYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknXG5cbmV4cG9ydCBjb25zdCBidWlsZEFibUZhdm9yaXRlVG9nZ2xlQWdlbnRzID0gPFQgZXh0ZW5kcyB7IGlzX2Zhdm9yaXRlPzogYm9vbGVhbiB9PihcbiAgY3JlYXRlZEFnZW50OiBUXG4pOiB7IGxpc3RBZ2VudDogVDsgdG9nZ2xlQWdlbnQ6IFQgfSA9PiAoe1xuICBsaXN0QWdlbnQ6IHsgLi4uY3JlYXRlZEFnZW50LCBpc19mYXZvcml0ZTogdHJ1ZSB9LFxuICB0b2dnbGVBZ2VudDogeyAuLi5jcmVhdGVkQWdlbnQsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9LFxufSlcblxuZXhwb3J0IHR5cGUgQWJtQ3JlYXRlRmlsZUFjdGlvbnNTbmFwc2hvdCA9IHtcbiAgdG9EZWxldGU6IHVua25vd25bXVxuICB0b1VwbG9hZDogdW5rbm93bltdXG59XG5cbmV4cG9ydCB0eXBlIEFibUNyZWF0ZVN1Y2Nlc3NQbGFuID0gJ2RlbGV0ZUFuZENyZWF0ZScgfCAnZGVsZXRlT25seScgfCAndXBsb2FkT25seScgfCAnYWNjZXNzT25seSdcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1DcmVhdGVTdWNjZXNzUGxhbiA9IChhY3Rpb25zOiBBYm1DcmVhdGVGaWxlQWN0aW9uc1NuYXBzaG90KTogQWJtQ3JlYXRlU3VjY2Vzc1BsYW4gPT4ge1xuICBjb25zdCBoYXNEZWxldGUgPSBhY3Rpb25zLnRvRGVsZXRlLmxlbmd0aCA+IDBcbiAgY29uc3QgaGFzVXBsb2FkID0gYWN0aW9ucy50b1VwbG9hZC5sZW5ndGggPiAwXG4gIGlmIChoYXNEZWxldGUgJiYgaGFzVXBsb2FkKSByZXR1cm4gJ2RlbGV0ZUFuZENyZWF0ZSdcbiAgaWYgKGhhc0RlbGV0ZSkgcmV0dXJuICdkZWxldGVPbmx5J1xuICBpZiAoaGFzVXBsb2FkKSByZXR1cm4gJ3VwbG9hZE9ubHknXG4gIHJldHVybiAnYWNjZXNzT25seSdcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dQcm9jZXNzRmlsZXNGb3JDcmVhdGVQbGFuID0gKHBsYW46IEFibUNyZWF0ZVN1Y2Nlc3NQbGFuKTogYm9vbGVhbiA9PiBwbGFuICE9PSAnYWNjZXNzT25seSdcblxuZXhwb3J0IHR5cGUgQWJtVXBkYXRlU3VjY2Vzc1BsYW4gPSAnZGVsZXRlQW5kQ3JlYXRlJyB8ICdkZWxldGVPbmx5JyB8ICd1cGxvYWRPbmx5JyB8ICdhY2Nlc3NPbmx5JyB8ICdnZW5lcmFsT25seSdcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1VcGRhdGVTdWNjZXNzUGxhbiA9IChcbiAgYWN0aW9uczogQWJtQ3JlYXRlRmlsZUFjdGlvbnNTbmFwc2hvdCxcbiAgYWNjZXNzaWJpbGl0eUNoYW5nZWQ6IGJvb2xlYW5cbik6IEFibVVwZGF0ZVN1Y2Nlc3NQbGFuID0+IHtcbiAgY29uc3QgY3JlYXRlUGxhbiA9IHJlc29sdmVBYm1DcmVhdGVTdWNjZXNzUGxhbihhY3Rpb25zKVxuICBpZiAoY3JlYXRlUGxhbiAhPT0gJ2FjY2Vzc09ubHknKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVBsYW5cbiAgfVxuICBpZiAoYWNjZXNzaWJpbGl0eUNoYW5nZWQpIHtcbiAgICByZXR1cm4gJ2FjY2Vzc09ubHknXG4gIH1cbiAgcmV0dXJuICdnZW5lcmFsT25seSdcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1VcGRhdGVBY2Nlc3NVcGRhdGVDb250ZXh0ID0gKCk6IEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQgPT4gKHtcbiAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1VcGRhdGVBY2Nlc3NPbmx5Q29udGV4dCA9IChjdXJyZW50OiBBYm1BY2Nlc3NVcGRhdGVDb250ZXh0KTogQWJtQWNjZXNzVXBkYXRlQ29udGV4dCB8IG51bGwgPT4ge1xuICBpZiAoY3VycmVudC5oYXNCZWVuQ2FsbGVkIHx8IGN1cnJlbnQuaGFzQWN0aW9uRmlsZXMpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHJldHVybiB7XG4gICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgIGlzRnJvbUVkaXRpbmc6IHRydWUsXG4gICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICB9XG59XG5cbmV4cG9ydCB0eXBlIEFibUNyZWF0ZUFjY2Vzc09ubHlEZWNpc2lvbiA9IHtcbiAgbmV4dENvbnRleHQ6IEFibUFjY2Vzc1VwZGF0ZUNvbnRleHRcbiAgc2hvdWxkQ2FsbEFjY2Vzc0NsaWVudDogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibUNyZWF0ZUFjY2Vzc09ubHlEZWNpc2lvbiA9IChcbiAgY3VycmVudDogQWJtQWNjZXNzVXBkYXRlQ29udGV4dCxcbiAgYWNjZXNzVHlwZTogTW9kYWxWYWx1ZXNbJ2FjY2Vzc2liaWxpdHknXVsnYWNjZXNzVHlwZSddXG4pOiBBYm1DcmVhdGVBY2Nlc3NPbmx5RGVjaXNpb24gPT4ge1xuICBpZiAoIXNob3VsZFN5bmNBYm1DbGllbnRBY2Nlc3NPbkNyZWF0ZShhY2Nlc3NUeXBlKSkge1xuICAgIHJldHVybiB7IG5leHRDb250ZXh0OiBjdXJyZW50LCBzaG91bGRDYWxsQWNjZXNzQ2xpZW50OiBmYWxzZSB9XG4gIH1cbiAgaWYgKGN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgIHJldHVybiB7IG5leHRDb250ZXh0OiBjdXJyZW50LCBzaG91bGRDYWxsQWNjZXNzQ2xpZW50OiBmYWxzZSB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5leHRDb250ZXh0OiB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgaGFzQWN0aW9uRmlsZXM6IGN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgfHwgZmFsc2UsXG4gICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgc2hvdWxkQ2FsbEFjY2Vzc0NsaWVudDogdHJ1ZSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVzZXRBYm1BY2Nlc3NVcGRhdGVDb250ZXh0ID0gKCk6IEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQgPT4gKHtcbiAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbn0pXG5cbmV4cG9ydCB0eXBlIEFibVVwZGF0ZUZpbmFsaXplSW5wdXQgPSB7XG4gIGhhc1BlbmRpbmdGaWxlczogYm9vbGVhblxuICBpc1Nob3dQcm9jZXNzRmlsZXM6IGJvb2xlYW5cbiAgdG9VcGxvYWRDb3VudDogbnVtYmVyXG4gIGFjY2Vzc0hhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gIHN1Y2Nlc3NVcGRhdGVBY2Nlc3M6IGJvb2xlYW5cbiAgcHJvY2Vzc0ZpbGVzVGltZWRPdXQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZEZpbmFsaXplQWJtVXBkYXRlV2l0aG91dFBlbmRpbmdXb3JrID0gKGlucHV0OiBBYm1VcGRhdGVGaW5hbGl6ZUlucHV0KTogYm9vbGVhbiA9PlxuICAhaW5wdXQuaGFzUGVuZGluZ0ZpbGVzICYmXG4gICFpbnB1dC5pc1Nob3dQcm9jZXNzRmlsZXMgJiZcbiAgaW5wdXQudG9VcGxvYWRDb3VudCA9PT0gMCAmJlxuICAhaW5wdXQuYWNjZXNzSGFzQWN0aW9uRmlsZXMgJiZcbiAgIWlucHV0LnN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiZcbiAgIWlucHV0LnByb2Nlc3NGaWxlc1RpbWVkT3V0XG5cbmV4cG9ydCB0eXBlIEtub3dsZWRnZVdzQ29tcGxldGlvbkVmZmVjdHMgPSB7XG4gIGNsb3NlUHJvY2Vzc0ZpbGVzOiBib29sZWFuXG4gIGluY3JlbWVudEZpbGVzUHJvY2Vzc2VkOiBib29sZWFuXG4gIG1hcmtGaWxlc0ZpbmlzaGVkRm9yQ3JlYXRlOiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlS25vd2xlZGdlV3NDb21wbGV0aW9uRWZmZWN0cyA9IChcbiAgdXBsb2FkT3V0Y29tZTogS25vd2xlZGdlVXBsb2FkT3V0Y29tZSB8IG51bGwsXG4gIGNvbnRleHQ6IFBpY2s8QWJtQWNjZXNzVXBkYXRlQ29udGV4dCwgJ2hhc0FjdGlvbkZpbGVzJyB8ICdvcGVyYXRpb25UeXBlJz4sXG4gIGFjY2Vzc0hhbmRsZWQ6IGJvb2xlYW4sXG4gIGZpbGVzRmluaXNoZWQ6IGJvb2xlYW5cbik6IEtub3dsZWRnZVdzQ29tcGxldGlvbkVmZmVjdHMgfCBudWxsID0+IHtcbiAgaWYgKHVwbG9hZE91dGNvbWUgPT09ICdlcnJvcicgfHwgdXBsb2FkT3V0Y29tZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgIGNvbnN0IGluY3JlbWVudEZpbGVzUHJvY2Vzc2VkID1cbiAgICAgIHVwbG9hZE91dGNvbWUgPT09ICdjb21wbGV0ZScgJiZcbiAgICAgICgoY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiBhY2Nlc3NIYW5kbGVkKSB8fFxuICAgICAgICAoY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJiAhY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiAhZmlsZXNGaW5pc2hlZCkpXG5cbiAgICBjb25zdCBtYXJrRmlsZXNGaW5pc2hlZEZvckNyZWF0ZSA9XG4gICAgICB1cGxvYWRPdXRjb21lID09PSAnY29tcGxldGUnICYmIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScgJiYgIWNvbnRleHQuaGFzQWN0aW9uRmlsZXMgJiYgIWZpbGVzRmluaXNoZWRcblxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZVByb2Nlc3NGaWxlczogdHJ1ZSxcbiAgICAgIGluY3JlbWVudEZpbGVzUHJvY2Vzc2VkLFxuICAgICAgbWFya0ZpbGVzRmluaXNoZWRGb3JDcmVhdGUsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1Lbm93bGVkZ2VFcnJvck1lc3NhZ2VLZXkgPSAoaXNFZGl0aW5nOiBib29sZWFuKTogc3RyaW5nID0+XG4gIGlzRWRpdGluZyA/ICdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InIDogJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJ1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQmxvY2tLbm93bGVkZ2VEZWxldGVTdWNjZXNzQ2xvc2UgPSAoaW5wdXQ6IHtcbiAgaGFzUGVuZGluZ0ZpbGVzOiBib29sZWFuXG4gIGlzU2hvd1Byb2Nlc3NGaWxlczogYm9vbGVhblxuICB0b1VwbG9hZENvdW50OiBudW1iZXJcbiAgcHJvY2Vzc0ZpbGVzVGltZWRPdXQ6IGJvb2xlYW5cbn0pOiBib29sZWFuID0+XG4gIGlucHV0Lmhhc1BlbmRpbmdGaWxlcyB8fCBpbnB1dC5pc1Nob3dQcm9jZXNzRmlsZXMgfHwgaW5wdXQudG9VcGxvYWRDb3VudCA+IDAgfHwgaW5wdXQucHJvY2Vzc0ZpbGVzVGltZWRPdXRcblxuZXhwb3J0IGNvbnN0IHNob3VsZERlZmVyQWNjZXNzVXBkYXRlVW50aWxGaWxlc0NvbXBsZXRlID0gKFxuICBjb250ZXh0OiBQaWNrPEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQsICdoYXNBY3Rpb25GaWxlcyc+LFxuICBoYXNQZW5kaW5nRmlsZXM6IGJvb2xlYW4sXG4gIGlzU2hvd1Byb2Nlc3NGaWxlczogYm9vbGVhblxuKTogYm9vbGVhbiA9PiBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIChoYXNQZW5kaW5nRmlsZXMgfHwgaXNTaG93UHJvY2Vzc0ZpbGVzKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2xvc2VDcmVhdGVBZnRlcktub3dsZWRnZVdpdGhvdXRBY2Nlc3MgPSAoaW5wdXQ6IHtcbiAgb3BlcmF0aW9uVHlwZTogQWJtQWNjZXNzVXBkYXRlQ29udGV4dFsnb3BlcmF0aW9uVHlwZSddXG4gIGhhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gIGZpbGVzRmluaXNoZWQ6IGJvb2xlYW5cbiAgaGFzU3VjY2Vzc0NyZWF0ZTogYm9vbGVhblxuICBoYXNQZW5kaW5nRmlsZXM6IGJvb2xlYW5cbiAgaXNTaG93UHJvY2Vzc0ZpbGVzOiBib29sZWFuXG59KTogYm9vbGVhbiA9PlxuICBpbnB1dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAhaW5wdXQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgaW5wdXQuZmlsZXNGaW5pc2hlZCAmJlxuICBpbnB1dC5oYXNTdWNjZXNzQ3JlYXRlICYmXG4gICFpbnB1dC5oYXNQZW5kaW5nRmlsZXMgJiZcbiAgIWlucHV0LmlzU2hvd1Byb2Nlc3NGaWxlc1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2xvc2VDcmVhdGVBZnRlcktub3dsZWRnZVdpdGhBY2Nlc3MgPSAoaW5wdXQ6IHtcbiAgb3BlcmF0aW9uVHlwZTogQWJtQWNjZXNzVXBkYXRlQ29udGV4dFsnb3BlcmF0aW9uVHlwZSddXG4gIGhhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gIGFjY2Vzc0hhbmRsZWQ6IGJvb2xlYW5cbiAgaGFzU3VjY2Vzc0NyZWF0ZTogYm9vbGVhblxuICBoYXNQZW5kaW5nRmlsZXM6IGJvb2xlYW5cbiAgaXNTaG93UHJvY2Vzc0ZpbGVzOiBib29sZWFuXG59KTogYm9vbGVhbiA9PlxuICBpbnB1dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICBpbnB1dC5oYXNBY3Rpb25GaWxlcyAmJlxuICBpbnB1dC5hY2Nlc3NIYW5kbGVkICYmXG4gIGlucHV0Lmhhc1N1Y2Nlc3NDcmVhdGUgJiZcbiAgIWlucHV0Lmhhc1BlbmRpbmdGaWxlcyAmJlxuICAhaW5wdXQuaXNTaG93UHJvY2Vzc0ZpbGVzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRBcHBseVBlbmRpbmdTZWN0aW9uQWZ0ZXJPcGVuID0gKFxuICBpc0VkaXRpbmc6IGJvb2xlYW4sXG4gIHBlbmRpbmdTZWN0aW9uOiBBYm1Nb2RhbEluaXRpYWxTZWN0aW9uIHwgbnVsbFxuKTogYm9vbGVhbiA9PiBCb29sZWFuKHBlbmRpbmdTZWN0aW9uICYmICFpc0VkaXRpbmcpXG5cbmV4cG9ydCB0eXBlIEFibU9wZW5Nb2RhbExvYWRBY3Rpb24gPSAnZGVueV9lZGl0JyB8ICdwcmVmZXRjaF9lZGl0JyB8ICdmZXRjaF9lZGl0JyB8ICdhcHBseV9jcmVhdGVfdmFsdWVzJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibU9wZW5Nb2RhbExvYWRBY3Rpb24gPSAocGFyYW1zOiB7XG4gIGlzRWRpdGluZz86IGJvb2xlYW5cbiAgaGFzTXVsdGlBZ2VudHNBY2Nlc3M6IGJvb2xlYW5cbiAgaGFzUHJlZmV0Y2hlZEFnZW50OiBib29sZWFuXG59KTogQWJtT3Blbk1vZGFsTG9hZEFjdGlvbiA9PiB7XG4gIGlmICghcGFyYW1zLmlzRWRpdGluZykge1xuICAgIHJldHVybiAnYXBwbHlfY3JlYXRlX3ZhbHVlcydcbiAgfVxuICBpZiAoc2hvdWxkRGVueUFibUVkaXRXaXRob3V0TXVsdGlBZ2VudHModHJ1ZSwgcGFyYW1zLmhhc011bHRpQWdlbnRzQWNjZXNzKSkge1xuICAgIHJldHVybiAnZGVueV9lZGl0J1xuICB9XG4gIGlmIChwYXJhbXMuaGFzUHJlZmV0Y2hlZEFnZW50KSB7XG4gICAgcmV0dXJuICdwcmVmZXRjaF9lZGl0J1xuICB9XG4gIHJldHVybiAnZmV0Y2hfZWRpdCdcbn1cblxuZXhwb3J0IGNvbnN0IGNhbkFwcGx5QWJtRWRpdGluZ0FnZW50RGV0YWlsID0gKHNvdXJjZTogeyB0eXBlPzogc3RyaW5nIH0sIGhhc011bHRpQWdlbnRzQWNjZXNzOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICBzb3VyY2UudHlwZSA9PT0gJ2N1c3RvbScgJiYgaGFzTXVsdGlBZ2VudHNBY2Nlc3NcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNldERlZmF1bHRBaU1vZGVsRm9yTmV3QWdlbnQgPSAocGFyYW1zOiB7XG4gIGlzTG9hZGluZzogYm9vbGVhblxuICBhZ2VudExvYWRpbmc6IGJvb2xlYW5cbiAgaGFzQWdlbnRCeUlkOiBib29sZWFuXG4gIGlzRWRpdGluZzogYm9vbGVhblxufSk6IGJvb2xlYW4gPT4gIXBhcmFtcy5pc0xvYWRpbmcgJiYgIXBhcmFtcy5hZ2VudExvYWRpbmcgJiYgIXBhcmFtcy5oYXNBZ2VudEJ5SWQgJiYgIXBhcmFtcy5pc0VkaXRpbmdcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNraXBBYm1Db25maXJtV2l0aG91dE11bHRpQWdlbnRzID0gKGhhc011bHRpQWdlbnRzQWNjZXNzOiBib29sZWFuKTogYm9vbGVhbiA9PiAhaGFzTXVsdGlBZ2VudHNBY2Nlc3NcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1EcmFmdEZhdm9yaXRlVmFsdWUgPSAoY3VycmVudElzRmF2b3JpdGU6IGJvb2xlYW4pOiBib29sZWFuID0+ICFjdXJyZW50SXNGYXZvcml0ZVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibUNyZWF0ZUZhdm9yaXRlQWdlbnRzID0gPFQgZXh0ZW5kcyB7IGlzX2Zhdm9yaXRlPzogYm9vbGVhbiB9PihcbiAgY3JlYXRlZEFnZW50OiBULFxuICBtYXJrRmF2b3JpdGU6IGJvb2xlYW5cbik6IHsgbGlzdEFnZW50OiBUOyB0b2dnbGVBZ2VudDogVCB8IG51bGwgfSA9PiB7XG4gIGlmICghbWFya0Zhdm9yaXRlKSB7XG4gICAgcmV0dXJuIHsgbGlzdEFnZW50OiBjcmVhdGVkQWdlbnQsIHRvZ2dsZUFnZW50OiBudWxsIH1cbiAgfVxuXG4gIGNvbnN0IHsgbGlzdEFnZW50LCB0b2dnbGVBZ2VudCB9ID0gYnVpbGRBYm1GYXZvcml0ZVRvZ2dsZUFnZW50cyhjcmVhdGVkQWdlbnQpXG4gIHJldHVybiB7IGxpc3RBZ2VudCwgdG9nZ2xlQWdlbnQgfVxufVxuXG5leHBvcnQgdHlwZSBBYm1Lbm93bGVkZ2VGaWxlQWN0aW9ucyA9IHtcbiAgdG9VcGxvYWQ6IEF0dGFjaG1lbnRGaWxlW11cbiAgdG9EZWxldGU6IEF0dGFjaG1lbnRGaWxlW11cbn1cblxuZXhwb3J0IGNvbnN0IGFwcGx5QWJtS25vd2xlZGdlRmlsZUFjdGlvbnMgPSAoXG4gIHZhbHVlOiBBdHRhY2htZW50RmlsZVtdIHwgdW5kZWZpbmVkLFxuICBkZWxldGVLbm93bGVkZ2U6IGJvb2xlYW4sXG4gIGN1cnJlbnRLbm93bGVkZ2U6IEF0dGFjaG1lbnRGaWxlW10sXG4gIGN1cnJlbnRBY3Rpb25zOiBBYm1Lbm93bGVkZ2VGaWxlQWN0aW9uc1xuKTogQWJtS25vd2xlZGdlRmlsZUFjdGlvbnMgPT4ge1xuICBpZiAoIWRlbGV0ZUtub3dsZWRnZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jdXJyZW50QWN0aW9ucyxcbiAgICAgIHRvVXBsb2FkOiBbLi4uY3VycmVudEFjdGlvbnMudG9VcGxvYWQsIC4uLih2YWx1ZSB8fCBbXSldLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbGVzUHJldklkcyA9IHZhbHVlPy5sZW5ndGggPyBuZXcgU2V0KHZhbHVlLm1hcChmaWxlID0+IGZpbGUuaWQpKSA6IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGNvbnN0IG5ld0ZpbGVzID0gY3VycmVudEtub3dsZWRnZS5maWx0ZXIoZmlsZSA9PiAhZmlsZXNQcmV2SWRzLmhhcyhmaWxlLmlkKSAmJiBmaWxlLnN0YXR1cyAhPT0gJ3N0YXJ0ZWQnKVxuICBsZXQgbmV4dFRvVXBsb2FkID0gY3VycmVudEFjdGlvbnMudG9VcGxvYWRcblxuICBpZiAoIW5ld0ZpbGVzLmxlbmd0aCAmJiBjdXJyZW50QWN0aW9ucy50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICBjb25zdCB2YWx1ZUlkcyA9IG5ldyBTZXQodmFsdWU/Lm1hcChmaWxlID0+IGZpbGUuaWQpID8/IFtdKVxuICAgIG5leHRUb1VwbG9hZCA9IGN1cnJlbnRBY3Rpb25zLnRvVXBsb2FkLmZpbHRlcihmaWxlID0+IHZhbHVlSWRzLmhhcyhmaWxlLmlkKSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9VcGxvYWQ6IG5leHRUb1VwbG9hZCxcbiAgICB0b0RlbGV0ZTogWy4uLmN1cnJlbnRBY3Rpb25zLnRvRGVsZXRlLCAuLi5uZXdGaWxlc10sXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IG1lcmdlQWJtQWdlbnRWYWx1ZXNCeUtleSA9IChcbiAgcHJldjogTW9kYWxWYWx1ZXMsXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbiAgZGVsZXRlS25vd2xlZGdlOiBib29sZWFuXG4pOiBNb2RhbFZhbHVlcyA9PiB7XG4gIGlmIChrZXkgPT09ICdrbm93bGVkZ2UnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBrbm93bGVkZ2U6IGRlbGV0ZUtub3dsZWRnZVxuICAgICAgICA/ICh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICA6IFsuLi4ocHJldi5rbm93bGVkZ2UgfHwgW10pLCAuLi4oKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10pIHx8IFtdKV0sXG4gICAgfVxuICB9XG5cbiAgaWYgKGtleSA9PT0gJ2FjY2Vzc2liaWxpdHknKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBhY2Nlc3NpYmlsaXR5OiB2YWx1ZSBhcyBNb2RhbFZhbHVlc1snYWNjZXNzaWJpbGl0eSddLFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ucHJldixcbiAgICBnZW5lcmFsOiB7XG4gICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUnVuQWJtQ3JlYXRlU3VjY2Vzc0hhbmRsZXIgPSAoXG4gIHN1Y2Nlc3NDcmVhdGVJZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBpc0xvYWRpbmdDcmVhdGU6IGJvb2xlYW4sXG4gIGxhc3RIYW5kbGVkQ3JlYXRlSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGxcbik6IGJvb2xlYW4gPT4gQm9vbGVhbihzdWNjZXNzQ3JlYXRlSWQgJiYgIWlzTG9hZGluZ0NyZWF0ZSAmJiBsYXN0SGFuZGxlZENyZWF0ZUlkICE9PSBzdWNjZXNzQ3JlYXRlSWQpXG5cbmV4cG9ydCBjb25zdCBtZXJnZUFibU9wZW5BZ2VudFZhbHVlcyA9IChpbml0aWFsVmFsdWVzOiBNb2RhbFZhbHVlcywgaW5jb21pbmc/OiBQYXJ0aWFsPE1vZGFsVmFsdWVzPik6IE1vZGFsVmFsdWVzID0+IHtcbiAgaWYgKCFpbmNvbWluZykge1xuICAgIHJldHVybiBpbml0aWFsVmFsdWVzXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmluaXRpYWxWYWx1ZXMsXG4gICAgLi4uaW5jb21pbmcsXG4gICAgZ2VuZXJhbDoge1xuICAgICAgLi4uaW5pdGlhbFZhbHVlcy5nZW5lcmFsLFxuICAgICAgLi4uKGluY29taW5nLmdlbmVyYWwgfHwge30pLFxuICAgIH0sXG4gICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgLi4uaW5pdGlhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LFxuICAgICAgLi4uKGluY29taW5nLmFjY2Vzc2liaWxpdHkgfHwge30pLFxuICAgIH0sXG4gICAga25vd2xlZGdlOiBpbmNvbWluZy5rbm93bGVkZ2UgfHwgW10sXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1DcmVhdGVLbm93bGVkZ2VIYW5kbGVyID0gKFxuICBwbGFuOiBBYm1DcmVhdGVTdWNjZXNzUGxhblxuKTogJ2RlbGV0ZUFuZENyZWF0ZScgfCAnZGVsZXRlT25seScgfCAndXBsb2FkT25seScgfCBudWxsID0+IHtcbiAgaWYgKHBsYW4gPT09ICdkZWxldGVBbmRDcmVhdGUnKSByZXR1cm4gJ2RlbGV0ZUFuZENyZWF0ZSdcbiAgaWYgKHBsYW4gPT09ICdkZWxldGVPbmx5JykgcmV0dXJuICdkZWxldGVPbmx5J1xuICBpZiAocGxhbiA9PT0gJ3VwbG9hZE9ubHknKSByZXR1cm4gJ3VwbG9hZE9ubHknXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXBlYXREZWxldGVLbm93bGVkZ2VzT25DcmVhdGUgPSAocGxhbjogQWJtQ3JlYXRlU3VjY2Vzc1BsYW4pOiBib29sZWFuID0+IHBsYW4gPT09ICdkZWxldGVPbmx5J1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkRW5xdWV1ZUFibUNyZWF0ZUZhdm9yaXRlVG9nZ2xlID0gKHRvZ2dsZUFnZW50OiB1bmtub3duKTogYm9vbGVhbiA9PiBCb29sZWFuKHRvZ2dsZUFnZW50KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkSGFuZGxlQWJtQ3JlYXRlQWNjZXNzT25seUNsaWVudCA9IChkZWNpc2lvbjogQWJtQ3JlYXRlQWNjZXNzT25seURlY2lzaW9uKTogYm9vbGVhbiA9PlxuICBkZWNpc2lvbi5zaG91bGRDYWxsQWNjZXNzQ2xpZW50XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJbml0aWFsQWJtTW9kYWxWYWx1ZXMgPSAoKTogTW9kYWxWYWx1ZXMgPT4gKHtcbiAgaXNFZGl0aW5nOiBmYWxzZSxcbiAga25vd2xlZGdlOiBbXSxcbiAgZ2VuZXJhbDoge1xuICAgIG5hbWU6ICcnLFxuICAgIGVtb2ppOiAnJyxcbiAgICBpbnRyb2R1Y3Rpb246ICcnLFxuICAgIGlucHV0UGxhY2Vob2xkZXI6ICcnLFxuICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICBhaU1vZGVsOiBudWxsLFxuICAgIGlkOiBudWxsLFxuICAgIHVzZXJQcm9tcHQ6IG51bGwsXG4gICAga25vd2xlZGdlQmFzZXM6IFtdLFxuICAgIGlzX2Zhdm9yaXRlOiBmYWxzZSxcbiAgfSxcbiAgYWNjZXNzaWJpbGl0eToge1xuICAgIGFjY2Vzc1R5cGU6ICdjb21wYW55JyxcbiAgICBjbGllbnRzOiBudWxsLFxuICAgIGNvckFjY2VzczogREVGQVVMVF9DT1JfQUNDRVNTLFxuICB9LFxufSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZFByb2Nlc3NLbm93bGVkZ2VXc1N0YXR1cyA9IChzdGF0dXM6IHN0cmluZyk6IGJvb2xlYW4gPT4gc3RhdHVzID09PSAnZG9uZScgfHwgc3RhdHVzID09PSAnZmFpbGVkJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibUtub3dsZWRnZVdzQ2hhbm5lbCA9IChcbiAgYWdlbnRCeUlkOiB7IGlkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc3VjY2Vzc0NyZWF0ZUlkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgYWdlbnRJZCA9IGFnZW50QnlJZD8uaWQgPz8gc3VjY2Vzc0NyZWF0ZUlkXG4gIHJldHVybiBhZ2VudElkICE9IG51bGwgPyBga25vd2xlZGdlLWJhc2Uuc3RhdHVzOiR7YWdlbnRJZH1gIDogbnVsbFxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibUZhdm9yaXRlVG9vbHRpcEtleSA9IChcbiAgaXNGYXZvcml0ZTogYm9vbGVhblxuKTogJ2dlbmVyYWxTZWN0aW9uLnJlbW92ZUZhdm9yaXRlJyB8ICdnZW5lcmFsU2VjdGlvbi5hZGRGYXZvcml0ZScgPT5cbiAgaXNGYXZvcml0ZSA/ICdnZW5lcmFsU2VjdGlvbi5yZW1vdmVGYXZvcml0ZScgOiAnZ2VuZXJhbFNlY3Rpb24uYWRkRmF2b3JpdGUnXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTZWxlY3RBZ2VudEFmdGVyRGVsZXRlID0gKFxuICBjdXJyZW50U2VsZWN0ZWRBZ2VudElkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBkZWxldGVkQWdlbnRJZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PlxuICBjdXJyZW50U2VsZWN0ZWRBZ2VudElkICE9IG51bGwgJiYgZGVsZXRlZEFnZW50SWQgIT0gbnVsbCAmJiBTdHJpbmcoY3VycmVudFNlbGVjdGVkQWdlbnRJZCkgPT09IFN0cmluZyhkZWxldGVkQWdlbnRJZClcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJ1bkFibVByb2Nlc3NGaWxlc1RpbWVvdXQgPSAoaGFzUGVuZGluZ0ZpbGVzOiBib29sZWFuLCBpc1Nob3dQcm9jZXNzRmlsZXM6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIGhhc1BlbmRpbmdGaWxlcyB8fCBpc1Nob3dQcm9jZXNzRmlsZXNcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1Qcm9jZXNzRmlsZXNUaW1lb3V0U3VjY2Vzc0tleSA9IChcbiAgaXNFZGl0aW5nOiBib29sZWFuXG4pOiAnY29uZmlybUFnZW50VXBkYXRlZCcgfCAnY29uZmlybUFnZW50Q3JlYXRlZCcgPT4gKGlzRWRpdGluZyA/ICdjb25maXJtQWdlbnRVcGRhdGVkJyA6ICdjb25maXJtQWdlbnRDcmVhdGVkJylcblxuZXhwb3J0IGNvbnN0IHNob3VsZFN5bmNTZWxlY3RlZEFnZW50QWZ0ZXJNdXRhdGlvbiA9IChcbiAgY3VycmVudFNlbGVjdGVkQWdlbnRJZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgbXV0YXRlZEFnZW50SWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT5cbiAgY3VycmVudFNlbGVjdGVkQWdlbnRJZCAhPSBudWxsICYmIG11dGF0ZWRBZ2VudElkICE9IG51bGwgJiYgU3RyaW5nKGN1cnJlbnRTZWxlY3RlZEFnZW50SWQpID09PSBTdHJpbmcobXV0YXRlZEFnZW50SWQpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRJbmNsdWRlQWNjZXNzaWJpbGl0eVVwZGF0ZUluS25vd2xlZGdlQmF0Y2ggPSAoYWNjZXNzaWJpbGl0eUNoYW5nZWQ6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIGFjY2Vzc2liaWxpdHlDaGFuZ2VkXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3NPbkNyZWF0ZUNsb3NlID0gKHN1Y2Nlc3NVcGRhdGVBY2Nlc3M6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIHN1Y2Nlc3NVcGRhdGVBY2Nlc3NcblxuZXhwb3J0IGNvbnN0IHNob3VsZEh5ZHJhdGVBZ2VudENvbm5lY3RvcnNPbkVkaXQgPSAoXG4gIGFnZW50SWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGV4dGVybmFsQ29ubmVjdG9yc0VuYWJsZWQ6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gQm9vbGVhbihhZ2VudElkICYmIGV4dGVybmFsQ29ubmVjdG9yc0VuYWJsZWQpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93QWJtTG9hZGVyRmlsZXMgPSAoaXNTaG93UHJvY2Vzc0ZpbGVzOiBib29sZWFuLCBoYXNQZW5kaW5nRmlsZXM6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIGlzU2hvd1Byb2Nlc3NGaWxlcyAmJiBoYXNQZW5kaW5nRmlsZXNcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1Nb2RhbFRpdGxlS2V5ID0gKGlzRWRpdGluZzogYm9vbGVhbik6ICdlZGl0QWdlbnQnIHwgJ25ld0FnZW50JyA9PlxuICBpc0VkaXRpbmcgPyAnZWRpdEFnZW50JyA6ICduZXdBZ2VudCdcblxuZXhwb3J0IGNvbnN0IHNob3VsZERpc2FibGVBYm1IZWFkZXJDbG9zZSA9IChcbiAgaXNMb2FkaW5nOiBib29sZWFuLFxuICBpc0xvYWRpbmdLbm93bGVkZ2U6IGJvb2xlYW4sXG4gIGlzTG9hZGluZ0NyZWF0ZTogYm9vbGVhbixcbiAgaXNMb2FkaW5nVXBkYXRlQWNjZXNzOiBib29sZWFuXG4pOiBib29sZWFuID0+IGlzTG9hZGluZyB8fCBpc0xvYWRpbmdLbm93bGVkZ2UgfHwgaXNMb2FkaW5nQ3JlYXRlIHx8IGlzTG9hZGluZ1VwZGF0ZUFjY2Vzc1xuXG5leHBvcnQgdHlwZSBBYm1TYXZlQWN0aW9uID0gJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdub29wJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibVNhdmVBY3Rpb24gPSAoaXNFZGl0aW5nOiBib29sZWFuLCBoYXNTYW1lVmFsdWVzOiBib29sZWFuKTogQWJtU2F2ZUFjdGlvbiA9PiB7XG4gIGlmIChpc0VkaXRpbmcpIHtcbiAgICByZXR1cm4gaGFzU2FtZVZhbHVlcyA/ICdub29wJyA6ICd1cGRhdGUnXG4gIH1cbiAgcmV0dXJuICdjcmVhdGUnXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvY2Vzc0ZpbGVzVGltZW91dEZsYWdCZWZvcmVTYXZlID0gKCk6IGJvb2xlYW4gPT4gZmFsc2VcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLFNBQ0VBLG9CQUFvQixFQUNwQkMsa0JBQWtCLEVBQ2xCQyxpQ0FBaUMsRUFDakNDLHVCQUF1QixRQUNsQix5Q0FBeUM7QUFFaEQsSUFBTUMsNkJBQTZCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFVO0FBRXJHLE9BQU8sSUFBTUMsa0NBQWtDLEdBQUcsU0FBckNBLGtD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
|