@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
|
@@ -20,7 +20,7 @@ import { PptPreview } from './PptPreview';
|
|
|
20
20
|
import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
|
|
21
21
|
import { SCAPMWrapper, SCAPMModal, SCAPMHeader, SCAPMContent, SCAPMImageContainer, SCAPMPdfContainer, SCAPMTextContainer, SCAPMMarkdownContainer, SCAPMUnsupportedContainer, SCAPMLoadingContainer, SCAPMPdfIframe, SCAPMUnsupportedContainerText, SCAPMErrorContainer, SCAPMErrorFileName } from './AttachmentPreviewModal.styles';
|
|
22
22
|
import { ErrorState } from '../icons/ErrorState';
|
|
23
|
-
import { getAttachmentPreviewFileDetails } from './AttachmentPreviewModal.helpers';
|
|
23
|
+
import { appendExtensionIfMissing, getAttachmentPreviewFileDetails, resolveDownloadMimeType, resolveRemoteImagePreviewUrl } from './AttachmentPreviewModal.helpers';
|
|
24
24
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
25
|
export var AttachmentPreviewModal = function AttachmentPreviewModal(_ref) {
|
|
26
26
|
var isOpen = _ref.isOpen,
|
|
@@ -148,115 +148,82 @@ export var AttachmentPreviewModal = function AttachmentPreviewModal(_ref) {
|
|
|
148
148
|
}();
|
|
149
149
|
var loadFile = /*#__PURE__*/function () {
|
|
150
150
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
151
|
-
var
|
|
151
|
+
var remoteImageUrl, mimeType, fileNameWithExtension, _file, downloadedFileDetails, file, downloadedFile, _t;
|
|
152
152
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
153
153
|
while (1) switch (_context2.prev = _context2.next) {
|
|
154
154
|
case 0:
|
|
155
155
|
_context2.prev = 0;
|
|
156
156
|
if (!isImage) {
|
|
157
|
-
_context2.next =
|
|
157
|
+
_context2.next = 1;
|
|
158
158
|
break;
|
|
159
159
|
}
|
|
160
|
-
|
|
160
|
+
remoteImageUrl = resolveRemoteImagePreviewUrl({
|
|
161
|
+
urlOriginal: attachment.url_original,
|
|
162
|
+
urlThumbnail: attachment.url_thumbnail
|
|
163
|
+
});
|
|
164
|
+
if (!remoteImageUrl) {
|
|
161
165
|
_context2.next = 1;
|
|
162
166
|
break;
|
|
163
167
|
}
|
|
164
|
-
|
|
165
|
-
setFileUrl(attachment.url_original);
|
|
168
|
+
setFileUrl(remoteImageUrl);
|
|
166
169
|
setIsLoading(false);
|
|
167
170
|
return _context2.abrupt("return");
|
|
168
171
|
case 1:
|
|
169
|
-
if (!attachment.url_thumbnail) {
|
|
170
|
-
_context2.next = 2;
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
// Usar thumbnail como fallback (solo si no hay url_original)
|
|
174
|
-
setFileUrl(attachment.url_thumbnail);
|
|
175
|
-
setIsLoading(false);
|
|
176
|
-
return _context2.abrupt("return");
|
|
177
|
-
case 2:
|
|
178
172
|
if (!attachment.url_original) {
|
|
179
|
-
_context2.next =
|
|
173
|
+
_context2.next = 4;
|
|
180
174
|
break;
|
|
181
175
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
'.csv': 'text/csv',
|
|
186
|
-
'.md': 'text/markdown',
|
|
187
|
-
'.pdf': 'application/pdf',
|
|
188
|
-
'.png': 'image/png',
|
|
189
|
-
'.jpg': 'image/jpeg',
|
|
190
|
-
'.jpeg': 'image/jpeg',
|
|
191
|
-
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
192
|
-
'.doc': 'application/msword',
|
|
193
|
-
'.ppt': 'application/vnd.ms-powerpoint',
|
|
194
|
-
'.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
195
|
-
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
196
|
-
'.xls': 'application/vnd.ms-excel'
|
|
197
|
-
}; // Si attachment.type es una extensión (sin punto), agregar el punto
|
|
198
|
-
mimeType = attachment.type;
|
|
199
|
-
if (attachment.type && !attachment.type.includes('/')) {
|
|
200
|
-
extWithDot = ".".concat(attachment.type.toLowerCase());
|
|
201
|
-
mimeType = extensionToMimeType[extWithDot] || attachment.type;
|
|
202
|
-
} else if (fileExtension && extensionToMimeType[fileExtension]) {
|
|
203
|
-
mimeType = extensionToMimeType[fileExtension];
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// Asegurar que el nombre del archivo tenga la extensión correcta
|
|
207
|
-
fileNameWithExtension = attachment.name;
|
|
208
|
-
if (fileExtension && !fileNameWithExtension.toLowerCase().endsWith(fileExtension.toLowerCase())) {
|
|
209
|
-
fileNameWithExtension = "".concat(fileNameWithExtension).concat(fileExtension);
|
|
210
|
-
}
|
|
211
|
-
_context2.next = 3;
|
|
176
|
+
mimeType = resolveDownloadMimeType(attachment.type, fileExtension) || attachment.type;
|
|
177
|
+
fileNameWithExtension = appendExtensionIfMissing(attachment.name, fileExtension);
|
|
178
|
+
_context2.next = 2;
|
|
212
179
|
return downloadFileFromUrl(attachment.url_original, fileNameWithExtension, mimeType);
|
|
213
|
-
case
|
|
180
|
+
case 2:
|
|
214
181
|
_file = _context2.sent;
|
|
215
182
|
// Re-detectar el tipo de archivo después de descargar (el archivo descargado puede tener mejor información)
|
|
216
183
|
// Usar la función de utilidad para obtener los detalles del archivo descargado
|
|
217
184
|
// Si no hay extensión en el archivo descargado, usar el tipo MIME del archivo o del attachment
|
|
218
185
|
downloadedFileDetails = getAttachmentPreviewFileDetails(_file.name, _file.type || attachment.type);
|
|
219
|
-
_context2.next =
|
|
186
|
+
_context2.next = 3;
|
|
220
187
|
return processFile(_file, downloadedFileDetails.isImage, downloadedFileDetails.isPdf, downloadedFileDetails.isMarkdown, downloadedFileDetails.isText, downloadedFileDetails.isExcel);
|
|
221
|
-
case
|
|
188
|
+
case 3:
|
|
222
189
|
return _context2.abrupt("return");
|
|
223
|
-
case
|
|
190
|
+
case 4:
|
|
224
191
|
// Obtener el archivo local (preferir originalFile para imágenes)
|
|
225
192
|
file = attachment.originalFile || attachment.file; // Si el archivo local está vacío (size === 0) y tenemos url_original, usar url_original
|
|
226
193
|
if (!(file instanceof File && file.size === 0 && attachment.url_original)) {
|
|
227
|
-
_context2.next =
|
|
194
|
+
_context2.next = 7;
|
|
228
195
|
break;
|
|
229
196
|
}
|
|
230
|
-
_context2.next =
|
|
197
|
+
_context2.next = 5;
|
|
231
198
|
return downloadFileFromUrl(attachment.url_original, attachment.name, attachment.type);
|
|
232
|
-
case
|
|
199
|
+
case 5:
|
|
233
200
|
downloadedFile = _context2.sent;
|
|
234
|
-
_context2.next =
|
|
201
|
+
_context2.next = 6;
|
|
235
202
|
return processFile(downloadedFile, isImage, isPdf, isMarkdown, isText, isExcel);
|
|
236
|
-
case
|
|
203
|
+
case 6:
|
|
237
204
|
return _context2.abrupt("return");
|
|
238
|
-
case
|
|
205
|
+
case 7:
|
|
239
206
|
if (file instanceof File) {
|
|
240
|
-
_context2.next =
|
|
207
|
+
_context2.next = 8;
|
|
241
208
|
break;
|
|
242
209
|
}
|
|
243
210
|
setIsLoading(false);
|
|
244
211
|
return _context2.abrupt("return");
|
|
245
|
-
case
|
|
246
|
-
_context2.next =
|
|
212
|
+
case 8:
|
|
213
|
+
_context2.next = 9;
|
|
247
214
|
return processFile(file, isImage, isPdf, isMarkdown, isText, isExcel);
|
|
248
|
-
case
|
|
249
|
-
_context2.next =
|
|
215
|
+
case 9:
|
|
216
|
+
_context2.next = 11;
|
|
250
217
|
break;
|
|
251
|
-
case
|
|
252
|
-
_context2.prev =
|
|
218
|
+
case 10:
|
|
219
|
+
_context2.prev = 10;
|
|
253
220
|
_t = _context2["catch"](0);
|
|
254
221
|
setIsLoading(false);
|
|
255
|
-
case
|
|
222
|
+
case 11:
|
|
256
223
|
case "end":
|
|
257
224
|
return _context2.stop();
|
|
258
225
|
}
|
|
259
|
-
}, _callee2, null, [[0,
|
|
226
|
+
}, _callee2, null, [[0, 10]]);
|
|
260
227
|
}));
|
|
261
228
|
return function loadFile() {
|
|
262
229
|
return _ref3.apply(this, arguments);
|
|
@@ -381,4 +348,4 @@ export var AttachmentPreviewModal = function AttachmentPreviewModal(_ref) {
|
|
|
381
348
|
})
|
|
382
349
|
}), container);
|
|
383
350
|
};
|
|
384
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlUmVmIiwiY3JlYXRlUG9ydGFsIiwiQ1VCdXR0b24iLCJDcm9zcyIsIlNwaW5uZXJMb3R0aWUiLCJ1c2VUcmFuc2xhdGlvbiIsIk1haWFTdHJlYW1kb3duIiwiQmFja2Ryb3AiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiSW1hZ2VQcmV2aWV3IiwiRXhjZWxQcmV2aWV3IiwiV29yZFByZXZpZXciLCJQcHRQcmV2aWV3IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsIlNDQVBNV3JhcHBlciIsIlNDQVBNTW9kYWwiLCJTQ0FQTUhlYWRlciIsIlNDQVBNQ29udGVudCIsIlNDQVBNSW1hZ2VDb250YWluZXIiLCJTQ0FQTVBkZkNvbnRhaW5lciIsIlNDQVBNVGV4dENvbnRhaW5lciIsIlNDQVBNTWFya2Rvd25Db250YWluZXIiLCJTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyIiwiU0NBUE1Mb2FkaW5nQ29udGFpbmVyIiwiU0NBUE1QZGZJZnJhbWUiLCJTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyVGV4dCIsIlNDQVBNRXJyb3JDb250YWluZXIiLCJTQ0FQTUVycm9yRmlsZU5hbWUiLCJFcnJvclN0YXRlIiwiZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiX3JlZiIsImlzT3BlbiIsIm9uQ2xvc2UiLCJhdHRhY2htZW50IiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsImJhY2tkcm9wWkluZGV4IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZmlsZVVybCIsInNldEZpbGVVcmwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInRleHRDb250ZW50Iiwic2V0VGV4dENvbnRlbnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIm1vZGFsUmVmIiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIlVSTCIsInJldm9rZU9iamVjdFVSTCIsInVuZGVmaW5lZCIsImhhbmRsZUtleURvd24iLCJldmVudCIsImtleSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX2RvY3VtZW50IiwiYm9keSIsIm9yaWdpbmFsT3ZlcmZsb3ciLCJzdHlsZSIsIm92ZXJmbG93IiwiX2dldEF0dGFjaG1lbnRQcmV2aWV3IiwibmFtZSIsInR5cGUiLCJmaWxlRXh0ZW5zaW9uIiwiaXNJbWFnZSIsImlzUGRmIiwiaXNNYXJrZG93biIsImlzVGV4dCIsImlzRXhjZWwiLCJwcm9jZXNzRmlsZSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJmaWxlIiwiaXNJbWciLCJpc1BkZkZpbGUiLCJpc01kIiwiaXNUeHQiLCJpc1hscyIsInVybCIsIl91cmwiLCJyZWFkZXIiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImNyZWF0ZU9iamVjdFVSTCIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJlIiwiX2UkdGFyZ2V0IiwiY29udGVudCIsInRhcmdldCIsInJlc3VsdCIsIm9uZXJyb3IiLCJyZWFkQXNUZXh0Iiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJsb2FkRmlsZSIsIl9yZWYzIiwiX2NhbGxlZTIiLCJleHRlbnNpb25Ub01pbWVUeXBlIiwibWltZVR5cGUiLCJleHRXaXRoRG90IiwiZmlsZU5hbWVXaXRoRXh0ZW5zaW9uIiwiX2ZpbGUiLCJkb3dubG9hZGVkRmlsZURldGFpbHMiLCJkb3dubG9hZGVkRmlsZSIsIl90IiwiX2NvbnRleHQyIiwidXJsX29yaWdpbmFsIiwiYWJydXB0IiwidXJsX3RodW1ibmFpbCIsImluY2x1ZGVzIiwiY29uY2F0IiwidG9Mb3dlckNhc2UiLCJlbmRzV2l0aCIsInNlbnQiLCJvcmlnaW5hbEZpbGUiLCJGaWxlIiwic2l6ZSIsImhhbmRsZU1vZGFsQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJfZ2V0QXR0YWNobWVudFByZXZpZXcyIiwiaXNPZmZpY2VEb2MiLCJpc1BwdCIsImNoaWxkcmVuIiwib25DbGljayIsInpJbmRleCIsInJlZiIsImljb25Pbmx5IiwidmFyaWFudCIsImNvbG9yIiwiaGVpZ2h0Iiwid2lkdGgiLCJlcnJvciIsInNyYyIsImFsdCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYmFja2dyb3VuZENvbG9yIiwidGl0bGUiLCJmaWxlTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwvQXR0YWNobWVudFByZXZpZXdNb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgQ1VCdXR0b24gfSBmcm9tICdAcHJvamVjdGNvci9idXR0b24vbGliL2NvbXBvbmVudHMvQ1VCdXR0b24nXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgU3Bpbm5lckxvdHRpZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2Nvci1jb21tb25zL2xpYi9jb21wb25lbnRzL3NwaW5uZXItbG90dGllL1NwaW5uZXJMb3R0aWUnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBNYWlhU3RyZWFtZG93biB9IGZyb20gJy4uL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHsgQmFja2Ryb3AgfSBmcm9tICcuLi9CYWNrZHJvcCdcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgSW1hZ2VQcmV2aWV3IH0gZnJvbSAnLi4vSW1hZ2VQcmV2aWV3L0ltYWdlUHJldmlldydcbmltcG9ydCB7IEV4Y2VsUHJldmlldyB9IGZyb20gJy4vRXhjZWxQcmV2aWV3J1xuaW1wb3J0IHsgV29yZFByZXZpZXcgfSBmcm9tICcuL1dvcmRQcmV2aWV3J1xuaW1wb3J0IHsgUHB0UHJldmlldyB9IGZyb20gJy4vUHB0UHJldmlldydcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5pbXBvcnQge1xuICBTQ0FQTVdyYXBwZXIsXG4gIFNDQVBNTW9kYWwsXG4gIFNDQVBNSGVhZGVyLFxuICBTQ0FQTUNvbnRlbnQsXG4gIFNDQVBNSW1hZ2VDb250YWluZXIsXG4gIFNDQVBNUGRmQ29udGFpbmVyLFxuICBTQ0FQTVRleHRDb250YWluZXIsXG4gIFNDQVBNTWFya2Rvd25Db250YWluZXIsXG4gIFNDQVBNVW5zdXBwb3J0ZWRDb250YWluZXIsXG4gIFNDQVBNTG9hZGluZ0NvbnRhaW5lcixcbiAgU0NBUE1QZGZJZnJhbWUsXG4gIFNDQVBNVW5zdXBwb3J0ZWRDb250YWluZXJUZXh0LFxuICBTQ0FQTUVycm9yQ29udGFpbmVyLFxuICBTQ0FQTUVycm9yRmlsZU5hbWUsXG59IGZyb20gJy4vQXR0YWNobWVudFByZXZpZXdNb2RhbC5zdHlsZXMnXG5pbXBvcnQgeyBFcnJvclN0YXRlIH0gZnJvbSAnLi4vaWNvbnMvRXJyb3JTdGF0ZSdcbmltcG9ydCB7IGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMgfSBmcm9tICcuL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwuaGVscGVycydcblxudHlwZSBBdHRhY2htZW50UHJldmlld01vZGFsUHJvcHMgPSB7XG4gIGlzT3BlbjogYm9vbGVhblxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlIHwgbnVsbFxufVxuXG5leHBvcnQgY29uc3QgQXR0YWNobWVudFByZXZpZXdNb2RhbCA9ICh7IGlzT3Blbiwgb25DbG9zZSwgYXR0YWNobWVudCB9OiBBdHRhY2htZW50UHJldmlld01vZGFsUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbJ2NoYXRfYWlfc2VjdGlvbiddKVxuICBjb25zdCBiYWNrZHJvcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTExMTIsICduZXN0ZWRNb2RhbCcpXG4gIGNvbnN0IFtmaWxlVXJsLCBzZXRGaWxlVXJsXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpXG4gIGNvbnN0IFt0ZXh0Q29udGVudCwgc2V0VGV4dENvbnRlbnRdID0gdXNlU3RhdGU8c3RyaW5nPignJylcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBtb2RhbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLXJvb3QtYWN0aW9ucycpXG5cbiAgLy8gQ2xlYW51cCBkZSBVUkxzIGN1YW5kbyBlbCBjb21wb25lbnRlIHNlIGRlc21vbnRlIG8gY2FtYmllIGVsIGFyY2hpdm9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChmaWxlVXJsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2ZpbGVVcmxdKVxuXG4gIC8vIExpc3RlbmVyIHBhcmEgY2VycmFyIGVsIG1vZGFsIGNvbiBsYSB0ZWNsYSBFU0NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnIHx8IGV2ZW50LmtleSA9PT0gJ0VzYycpIHtcbiAgICAgICAgb25DbG9zZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pXG4gICAgfVxuICB9LCBbaXNPcGVuLCBvbkNsb3NlXSlcblxuICAvLyBQcmV2ZW5pciBzY3JvbGwgZGVsIGJvZHkgY3VhbmRvIGVsIG1vZGFsIGVzdMOhIGFiaWVydG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE92ZXJmbG93ID0gYm9keS5zdHlsZS5vdmVyZmxvd1xuICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbE92ZXJmbG93XG4gICAgfVxuICB9LCBbaXNPcGVuXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFhdHRhY2htZW50KSB7XG4gICAgICBzZXRGaWxlVXJsKCcnKVxuICAgICAgc2V0VGV4dENvbnRlbnQoJycpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgIC8vIERldGVybWluYXIgZWwgdGlwbyBkZSBhcmNoaXZvIHVzYW5kbyBsYSBmdW5jacOzbiBkZSB1dGlsaWRhZFxuICAgIGNvbnN0IHsgZmlsZUV4dGVuc2lvbiwgaXNJbWFnZSwgaXNQZGYsIGlzTWFya2Rvd24sIGlzVGV4dCwgaXNFeGNlbCB9ID0gZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscyhcbiAgICAgIGF0dGFjaG1lbnQubmFtZSxcbiAgICAgIGF0dGFjaG1lbnQudHlwZVxuICAgIClcblxuICAgIGNvbnN0IHByb2Nlc3NGaWxlID0gYXN5bmMgKFxuICAgICAgZmlsZTogRmlsZSxcbiAgICAgIGlzSW1nOiBib29sZWFuLFxuICAgICAgaXNQZGZGaWxlOiBib29sZWFuLFxuICAgICAgaXNNZDogYm9vbGVhbixcbiAgICAgIGlzVHh0OiBib29sZWFuLFxuICAgICAgaXNYbHM6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIGlmIChpc0ltZykge1xuICAgICAgICAvLyBQYXJhIGltw6FnZW5lcywgY3JlYXIgVVJMIGRlbCBibG9iXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSlcbiAgICAgICAgc2V0RmlsZVVybCh1cmwpXG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH0gZWxzZSBpZiAoaXNQZGZGaWxlKSB7XG4gICAgICAgIC8vIFBhcmEgUERGcywgY3JlYXIgVVJMIGRlbCBibG9iXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSlcbiAgICAgICAgc2V0RmlsZVVybCh1cmwpXG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH0gZWxzZSBpZiAoaXNNZCB8fCBpc1R4dCkge1xuICAgICAgICAvLyBQYXJhIGFyY2hpdm9zIGRlIHRleHRvIHkgbWFya2Rvd24sIGxlZXIgZWwgY29udGVuaWRvXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlLnRhcmdldD8ucmVzdWx0IGFzIHN0cmluZ1xuICAgICAgICAgIHNldFRleHRDb250ZW50KGNvbnRlbnQpXG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKVxuICAgICAgfSBlbHNlIGlmIChpc1hscykge1xuICAgICAgICAvLyBQYXJhIGFyY2hpdm9zIEV4Y2VsLCBlbCBjb21wb25lbnRlIEV4Y2VsUHJldmlldyBtYW5lamFyw6EgbGEgY2FyZ2FcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxvYWRGaWxlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gU2kgZXMgaW1hZ2VuLCB1c2FyIHVybF9vcmlnaW5hbCBkaXJlY3RhbWVudGUgKHNpZW1wcmUgdmllbmUgZGVsIGJhY2tlbmQpXG4gICAgICAgIC8vIFNpIG5vIHRpZW5lIHVybF9vcmlnaW5hbCwgdXNhciB1cmxfdGh1bWJuYWlsIGNvbW8gZmFsbGJhY2tcbiAgICAgICAgaWYgKGlzSW1hZ2UpIHtcbiAgICAgICAgICBpZiAoYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICAgIC8vIFVzYXIgdXJsX29yaWdpbmFsIHBhcmEgaW1hZ2VuIGVuIGNhbGlkYWQgb3JpZ2luYWxcbiAgICAgICAgICAgIHNldEZpbGVVcmwoYXR0YWNobWVudC51cmxfb3JpZ2luYWwpXG4gICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCkge1xuICAgICAgICAgICAgLy8gVXNhciB0aHVtYm5haWwgY29tbyBmYWxsYmFjayAoc29sbyBzaSBubyBoYXkgdXJsX29yaWdpbmFsKVxuICAgICAgICAgICAgc2V0RmlsZVVybChhdHRhY2htZW50LnVybF90aHVtYm5haWwpXG4gICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaSB0aWVuZSB1cmxfb3JpZ2luYWwgZGVsIGJhY2tlbmQgKHBhcmEgYXJjaGl2b3Mgbm8taW1hZ2VuKSwgZGVzY2FyZ2FyIGVsIGFyY2hpdm9cbiAgICAgICAgLy8gdXJsX29yaWdpbmFsIGFob3JhIHZpZW5lIHBhcmEgdG9kb3MgbG9zIGFyY2hpdm9zIGRlbCBiYWNrZW5kXG4gICAgICAgIGlmIChhdHRhY2htZW50LnVybF9vcmlnaW5hbCkge1xuICAgICAgICAgIC8vIE1hcGVhciBleHRlbnNpw7NuIGEgTUlNRSB0eXBlIHBhcmEgbGEgZGVzY2FyZ2FcbiAgICAgICAgICBjb25zdCBleHRlbnNpb25Ub01pbWVUeXBlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgJy50eHQnOiAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAnLmNzdic6ICd0ZXh0L2NzdicsXG4gICAgICAgICAgICAnLm1kJzogJ3RleHQvbWFya2Rvd24nLFxuICAgICAgICAgICAgJy5wZGYnOiAnYXBwbGljYXRpb24vcGRmJyxcbiAgICAgICAgICAgICcucG5nJzogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAnLmpwZyc6ICdpbWFnZS9qcGVnJyxcbiAgICAgICAgICAgICcuanBlZyc6ICdpbWFnZS9qcGVnJyxcbiAgICAgICAgICAgICcuZG9jeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgICAgICAgICAnLmRvYyc6ICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAgICAgICAgICAgJy5wcHQnOiAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnLFxuICAgICAgICAgICAgJy5wcHR4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLFxuICAgICAgICAgICAgJy54bHN4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgICAgICAgICAgICcueGxzJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2kgYXR0YWNobWVudC50eXBlIGVzIHVuYSBleHRlbnNpw7NuIChzaW4gcHVudG8pLCBhZ3JlZ2FyIGVsIHB1bnRvXG4gICAgICAgICAgbGV0IG1pbWVUeXBlID0gYXR0YWNobWVudC50eXBlXG4gICAgICAgICAgaWYgKGF0dGFjaG1lbnQudHlwZSAmJiAhYXR0YWNobWVudC50eXBlLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dFdpdGhEb3QgPSBgLiR7YXR0YWNobWVudC50eXBlLnRvTG93ZXJDYXNlKCl9YFxuICAgICAgICAgICAgbWltZVR5cGUgPSBleHRlbnNpb25Ub01pbWVUeXBlW2V4dFdpdGhEb3RdIHx8IGF0dGFjaG1lbnQudHlwZVxuICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZUV4dGVuc2lvbiAmJiBleHRlbnNpb25Ub01pbWVUeXBlW2ZpbGVFeHRlbnNpb25dKSB7XG4gICAgICAgICAgICBtaW1lVHlwZSA9IGV4dGVuc2lvblRvTWltZVR5cGVbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBc2VndXJhciBxdWUgZWwgbm9tYnJlIGRlbCBhcmNoaXZvIHRlbmdhIGxhIGV4dGVuc2nDs24gY29ycmVjdGFcbiAgICAgICAgICBsZXQgZmlsZU5hbWVXaXRoRXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lXG4gICAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24gJiYgIWZpbGVOYW1lV2l0aEV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGZpbGVOYW1lV2l0aEV4dGVuc2lvbiA9IGAke2ZpbGVOYW1lV2l0aEV4dGVuc2lvbn0ke2ZpbGVFeHRlbnNpb259YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsLCBmaWxlTmFtZVdpdGhFeHRlbnNpb24sIG1pbWVUeXBlKVxuXG4gICAgICAgICAgLy8gUmUtZGV0ZWN0YXIgZWwgdGlwbyBkZSBhcmNoaXZvIGRlc3B1w6lzIGRlIGRlc2NhcmdhciAoZWwgYXJjaGl2byBkZXNjYXJnYWRvIHB1ZWRlIHRlbmVyIG1lam9yIGluZm9ybWFjacOzbilcbiAgICAgICAgICAvLyBVc2FyIGxhIGZ1bmNpw7NuIGRlIHV0aWxpZGFkIHBhcmEgb2J0ZW5lciBsb3MgZGV0YWxsZXMgZGVsIGFyY2hpdm8gZGVzY2FyZ2Fkb1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBleHRlbnNpw7NuIGVuIGVsIGFyY2hpdm8gZGVzY2FyZ2FkbywgdXNhciBlbCB0aXBvIE1JTUUgZGVsIGFyY2hpdm8gbyBkZWwgYXR0YWNobWVudFxuICAgICAgICAgIGNvbnN0IGRvd25sb2FkZWRGaWxlRGV0YWlscyA9IGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoZmlsZS5uYW1lLCBmaWxlLnR5cGUgfHwgYXR0YWNobWVudC50eXBlKVxuXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGUoXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgZG93bmxvYWRlZEZpbGVEZXRhaWxzLmlzSW1hZ2UsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNQZGYsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNNYXJrZG93bixcbiAgICAgICAgICAgIGRvd25sb2FkZWRGaWxlRGV0YWlscy5pc1RleHQsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNFeGNlbFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9idGVuZXIgZWwgYXJjaGl2byBsb2NhbCAocHJlZmVyaXIgb3JpZ2luYWxGaWxlIHBhcmEgaW3DoWdlbmVzKVxuICAgICAgICBjb25zdCBmaWxlID0gYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgfHwgYXR0YWNobWVudC5maWxlXG5cbiAgICAgICAgLy8gU2kgZWwgYXJjaGl2byBsb2NhbCBlc3TDoSB2YWPDrW8gKHNpemUgPT09IDApIHkgdGVuZW1vcyB1cmxfb3JpZ2luYWwsIHVzYXIgdXJsX29yaWdpbmFsXG4gICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSAmJiBmaWxlLnNpemUgPT09IDAgJiYgYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoYXR0YWNobWVudC51cmxfb3JpZ2luYWwsIGF0dGFjaG1lbnQubmFtZSwgYXR0YWNobWVudC50eXBlKVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NGaWxlKGRvd25sb2FkZWRGaWxlLCBpc0ltYWdlLCBpc1BkZiwgaXNNYXJrZG93biwgaXNUZXh0LCBpc0V4Y2VsKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIEZpbGUpKSB7XG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSwgaXNJbWFnZSwgaXNQZGYsIGlzTWFya2Rvd24sIGlzVGV4dCwgaXNFeGNlbClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkRmlsZSgpXG4gIH0sIFtpc09wZW4sIGF0dGFjaG1lbnRdKVxuXG4gIGNvbnN0IGhhbmRsZU1vZGFsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIGlmICghaXNPcGVuIHx8ICFhdHRhY2htZW50IHx8ICFjb250YWluZXIpIHJldHVybiBudWxsXG5cbiAgLy8gVXNhciBsYSBmdW5jacOzbiBkZSB1dGlsaWRhZCBwYXJhIG9idGVuZXIgbG9zIGRldGFsbGVzIGRlbCBhcmNoaXZvXG4gIGNvbnN0IHsgaXNJbWFnZSwgaXNQZGYsIGlzTWFya2Rvd24sIGlzVGV4dCwgaXNFeGNlbCwgaXNPZmZpY2VEb2MsIGlzUHB0IH0gPSBnZXRBdHRhY2htZW50UHJldmlld0ZpbGVEZXRhaWxzKFxuICAgIGF0dGFjaG1lbnQubmFtZSxcbiAgICBhdHRhY2htZW50LnR5cGVcbiAgKVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPFNDQVBNV3JhcHBlcj5cbiAgICAgIDxCYWNrZHJvcCBvbkNsaWNrPXtvbkNsb3NlfSB6SW5kZXg9e2JhY2tkcm9wWkluZGV4fT5cbiAgICAgICAgPFNDQVBNTW9kYWwgcmVmPXttb2RhbFJlZn0gb25DbGljaz17aGFuZGxlTW9kYWxDbGlja30+XG4gICAgICAgICAgPFNDQVBNSGVhZGVyPlxuICAgICAgICAgICAgPENVQnV0dG9uIGljb25Pbmx5IHZhcmlhbnQ9XCJ0ZXh0XCIgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICAgIDxDcm9zcyBjb2xvcj1cIiM2NjY2NjZcIiBoZWlnaHQ9ezIyfSB3aWR0aD17MjJ9IC8+XG4gICAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgIDwvU0NBUE1IZWFkZXI+XG4gICAgICAgICAgPFNDQVBNQ29udGVudFxuICAgICAgICAgICAgaXNJbWFnZT17aXNJbWFnZX1cbiAgICAgICAgICAgIGVycm9yPXshaXNMb2FkaW5nICYmICFpc0ltYWdlICYmICFpc1BkZiAmJiAhaXNNYXJrZG93biAmJiAhaXNUZXh0ICYmICFpc0V4Y2VsICYmICFpc09mZmljZURvYyAmJiAhaXNQcHR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2lzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxTQ0FQTUxvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFNwaW5uZXJMb3R0aWUgc2l6ZT17NDh9IC8+XG4gICAgICAgICAgICAgIDwvU0NBUE1Mb2FkaW5nQ29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmIGlzSW1hZ2UgJiYgKFxuICAgICAgICAgICAgICA8U0NBUE1JbWFnZUNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8SW1hZ2VQcmV2aWV3XG4gICAgICAgICAgICAgICAgICBzcmM9e2ZpbGVVcmx9XG4gICAgICAgICAgICAgICAgICBhbHQ9e2F0dGFjaG1lbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIG1heFdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1cz1cIjhweFwiXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ0FQTUltYWdlQ29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmIGlzUGRmICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNUGRmQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxTQ0FQTVBkZklmcmFtZSBzcmM9e2ZpbGVVcmx9IHRpdGxlPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgIDwvU0NBUE1QZGZDb250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiYgaXNNYXJrZG93biAmJiAoXG4gICAgICAgICAgICAgIDxTQ0FQTU1hcmtkb3duQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93biB2YXJpYW50PVwiY29tcGFjdFwiPnt0ZXh0Q29udGVudH08L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICAgICA8L1NDQVBNTWFya2Rvd25Db250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiYgaXNUZXh0ICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNVGV4dENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8cHJlPnt0ZXh0Q29udGVudH08L3ByZT5cbiAgICAgICAgICAgICAgPC9TQ0FQTVRleHRDb250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgaXNFeGNlbCAmJlxuICAgICAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNpIHRpZW5lIHVybF9vcmlnaW5hbCwgRXhjZWxQcmV2aWV3IG1hbmVqYXLDoSBsYSBkZXNjYXJnYVxuICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50LnVybF9vcmlnaW5hbCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIDxFeGNlbFByZXZpZXcgZmlsZVVybD17YXR0YWNobWVudC51cmxfb3JpZ2luYWx9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSB8fCBhdHRhY2htZW50LmZpbGVcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgRmlsZSkpIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFeGNlbFByZXZpZXcgZmlsZT17ZmlsZX0gZmlsZU5hbWU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIGlzT2ZmaWNlRG9jICYmXG4gICAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPFdvcmRQcmV2aWV3IGZpbGVVcmw9e2F0dGFjaG1lbnQudXJsX29yaWdpbmFsfSBmaWxlTmFtZT17YXR0YWNobWVudC5uYW1lfSAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgfHwgYXR0YWNobWVudC5maWxlXG4gICAgICAgICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIEZpbGUpKSByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIHJldHVybiA8V29yZFByZXZpZXcgZmlsZT17ZmlsZX0gZmlsZU5hbWU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIGlzUHB0ICYmXG4gICAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPFBwdFByZXZpZXcgZmlsZVVybD17YXR0YWNobWVudC51cmxfb3JpZ2luYWx9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSB8fCBhdHRhY2htZW50LmZpbGVcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgRmlsZSkpIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxQcHRQcmV2aWV3IGZpbGU9e2ZpbGV9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICB7IWlzTG9hZGluZyAmJiAhaXNJbWFnZSAmJiAhaXNQZGYgJiYgIWlzTWFya2Rvd24gJiYgIWlzVGV4dCAmJiAhaXNFeGNlbCAmJiAhaXNPZmZpY2VEb2MgJiYgIWlzUHB0ICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNRXJyb3JDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFNDQVBNVW5zdXBwb3J0ZWRDb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8RXJyb3JTdGF0ZSAvPlxuICAgICAgICAgICAgICAgICAgPFNDQVBNVW5zdXBwb3J0ZWRDb250YWluZXJUZXh0PlxuICAgICAgICAgICAgICAgICAgICB7dCgnY2hhdC5hdHRhY2htZW50UHJldmlld01vZGFsLnVuc3VwcG9ydGVkRmlsZU1lc3NhZ2UnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NBUE1VbnN1cHBvcnRlZENvbnRhaW5lclRleHQ+XG4gICAgICAgICAgICAgICAgPC9TQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxTQ0FQTUVycm9yRmlsZU5hbWU+e2F0dGFjaG1lbnQubmFtZX08L1NDQVBNRXJyb3JGaWxlTmFtZT5cbiAgICAgICAgICAgICAgPC9TQ0FQTUVycm9yQ29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NDQVBNQ29udGVudD5cbiAgICAgICAgPC9TQ0FQTU1vZGFsPlxuICAgICAgPC9CYWNrZHJvcD5cbiAgICA8L1NDQVBNV3JhcHBlcj4sXG4gICAgY29udGFpbmVyXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFJQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDMUQsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsUUFBUSxRQUFRLDRDQUE0QztBQUNyRSxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLGFBQWEsUUFBUSxxRUFBcUU7QUFDbkcsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsY0FBYyxRQUFRLG1CQUFtQjtBQUNsRCxTQUFTQyxRQUFRLFFBQVEsYUFBYTtBQUN0QyxTQUFTQyxzQkFBc0IsUUFBUSx1Q0FBdUM7QUFFOUUsU0FBU0MsWUFBWSxRQUFRLDhCQUE4QjtBQUMzRCxTQUFTQyxZQUFZLFFBQVEsZ0JBQWdCO0FBQzdDLFNBQVNDLFdBQVcsUUFBUSxlQUFlO0FBQzNDLFNBQVNDLFVBQVUsUUFBUSxjQUFjO0FBQ3pDLFNBQVNDLG1CQUFtQixRQUFRLG1DQUFtQztBQUN2RSxTQUNFQyxZQUFZLEVBQ1pDLFVBQVUsRUFDVkMsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLG1CQUFtQixFQUNuQkMs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
|
|
351
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlUmVmIiwiY3JlYXRlUG9ydGFsIiwiQ1VCdXR0b24iLCJDcm9zcyIsIlNwaW5uZXJMb3R0aWUiLCJ1c2VUcmFuc2xhdGlvbiIsIk1haWFTdHJlYW1kb3duIiwiQmFja2Ryb3AiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiSW1hZ2VQcmV2aWV3IiwiRXhjZWxQcmV2aWV3IiwiV29yZFByZXZpZXciLCJQcHRQcmV2aWV3IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsIlNDQVBNV3JhcHBlciIsIlNDQVBNTW9kYWwiLCJTQ0FQTUhlYWRlciIsIlNDQVBNQ29udGVudCIsIlNDQVBNSW1hZ2VDb250YWluZXIiLCJTQ0FQTVBkZkNvbnRhaW5lciIsIlNDQVBNVGV4dENvbnRhaW5lciIsIlNDQVBNTWFya2Rvd25Db250YWluZXIiLCJTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyIiwiU0NBUE1Mb2FkaW5nQ29udGFpbmVyIiwiU0NBUE1QZGZJZnJhbWUiLCJTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyVGV4dCIsIlNDQVBNRXJyb3JDb250YWluZXIiLCJTQ0FQTUVycm9yRmlsZU5hbWUiLCJFcnJvclN0YXRlIiwiYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nIiwiZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscyIsInJlc29sdmVEb3dubG9hZE1pbWVUeXBlIiwicmVzb2x2ZVJlbW90ZUltYWdlUHJldmlld1VybCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiX3JlZiIsImlzT3BlbiIsIm9uQ2xvc2UiLCJhdHRhY2htZW50IiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsImJhY2tkcm9wWkluZGV4IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZmlsZVVybCIsInNldEZpbGVVcmwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInRleHRDb250ZW50Iiwic2V0VGV4dENvbnRlbnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIm1vZGFsUmVmIiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIlVSTCIsInJldm9rZU9iamVjdFVSTCIsInVuZGVmaW5lZCIsImhhbmRsZUtleURvd24iLCJldmVudCIsImtleSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX2RvY3VtZW50IiwiYm9keSIsIm9yaWdpbmFsT3ZlcmZsb3ciLCJzdHlsZSIsIm92ZXJmbG93IiwiX2dldEF0dGFjaG1lbnRQcmV2aWV3IiwibmFtZSIsInR5cGUiLCJmaWxlRXh0ZW5zaW9uIiwiaXNJbWFnZSIsImlzUGRmIiwiaXNNYXJrZG93biIsImlzVGV4dCIsImlzRXhjZWwiLCJwcm9jZXNzRmlsZSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJmaWxlIiwiaXNJbWciLCJpc1BkZkZpbGUiLCJpc01kIiwiaXNUeHQiLCJpc1hscyIsInVybCIsIl91cmwiLCJyZWFkZXIiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImNyZWF0ZU9iamVjdFVSTCIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJlIiwiX2UkdGFyZ2V0IiwiY29udGVudCIsInRhcmdldCIsInJlc3VsdCIsIm9uZXJyb3IiLCJyZWFkQXNUZXh0Iiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJsb2FkRmlsZSIsIl9yZWYzIiwiX2NhbGxlZTIiLCJyZW1vdGVJbWFnZVVybCIsIm1pbWVUeXBlIiwiZmlsZU5hbWVXaXRoRXh0ZW5zaW9uIiwiX2ZpbGUiLCJkb3dubG9hZGVkRmlsZURldGFpbHMiLCJkb3dubG9hZGVkRmlsZSIsIl90IiwiX2NvbnRleHQyIiwidXJsT3JpZ2luYWwiLCJ1cmxfb3JpZ2luYWwiLCJ1cmxUaHVtYm5haWwiLCJ1cmxfdGh1bWJuYWlsIiwiYWJydXB0Iiwic2VudCIsIm9yaWdpbmFsRmlsZSIsIkZpbGUiLCJzaXplIiwiaGFuZGxlTW9kYWxDbGljayIsInN0b3BQcm9wYWdhdGlvbiIsIl9nZXRBdHRhY2htZW50UHJldmlldzIiLCJpc09mZmljZURvYyIsImlzUHB0IiwiY2hpbGRyZW4iLCJvbkNsaWNrIiwiekluZGV4IiwicmVmIiwiaWNvbk9ubHkiLCJ2YXJpYW50IiwiY29sb3IiLCJoZWlnaHQiLCJ3aWR0aCIsImVycm9yIiwic3JjIiwiYWx0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJib3JkZXJSYWRpdXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0aXRsZSIsImZpbGVOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbC9BdHRhY2htZW50UHJldmlld01vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBDVUJ1dHRvbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2J1dHRvbi9saWIvY29tcG9uZW50cy9DVUJ1dHRvbidcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBTcGlubmVyTG90dGllIH0gZnJvbSAnQHByb2plY3Rjb3IvY29yLWNvbW1vbnMvbGliL2NvbXBvbmVudHMvc3Bpbm5lci1sb3R0aWUvU3Bpbm5lckxvdHRpZSdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBCYWNrZHJvcCB9IGZyb20gJy4uL0JhY2tkcm9wJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBJbWFnZVByZXZpZXcgfSBmcm9tICcuLi9JbWFnZVByZXZpZXcvSW1hZ2VQcmV2aWV3J1xuaW1wb3J0IHsgRXhjZWxQcmV2aWV3IH0gZnJvbSAnLi9FeGNlbFByZXZpZXcnXG5pbXBvcnQgeyBXb3JkUHJldmlldyB9IGZyb20gJy4vV29yZFByZXZpZXcnXG5pbXBvcnQgeyBQcHRQcmV2aWV3IH0gZnJvbSAnLi9QcHRQcmV2aWV3J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcbmltcG9ydCB7XG4gIFNDQVBNV3JhcHBlcixcbiAgU0NBUE1Nb2RhbCxcbiAgU0NBUE1IZWFkZXIsXG4gIFNDQVBNQ29udGVudCxcbiAgU0NBUE1JbWFnZUNvbnRhaW5lcixcbiAgU0NBUE1QZGZDb250YWluZXIsXG4gIFNDQVBNVGV4dENvbnRhaW5lcixcbiAgU0NBUE1NYXJrZG93bkNvbnRhaW5lcixcbiAgU0NBUE1VbnN1cHBvcnRlZENvbnRhaW5lcixcbiAgU0NBUE1Mb2FkaW5nQ29udGFpbmVyLFxuICBTQ0FQTVBkZklmcmFtZSxcbiAgU0NBUE1VbnN1cHBvcnRlZENvbnRhaW5lclRleHQsXG4gIFNDQVBNRXJyb3JDb250YWluZXIsXG4gIFNDQVBNRXJyb3JGaWxlTmFtZSxcbn0gZnJvbSAnLi9BdHRhY2htZW50UHJldmlld01vZGFsLnN0eWxlcydcbmltcG9ydCB7IEVycm9yU3RhdGUgfSBmcm9tICcuLi9pY29ucy9FcnJvclN0YXRlJ1xuaW1wb3J0IHtcbiAgYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nLFxuICBnZXRBdHRhY2htZW50UHJldmlld0ZpbGVEZXRhaWxzLFxuICByZXNvbHZlRG93bmxvYWRNaW1lVHlwZSxcbiAgcmVzb2x2ZVJlbW90ZUltYWdlUHJldmlld1VybCxcbn0gZnJvbSAnLi9BdHRhY2htZW50UHJldmlld01vZGFsLmhlbHBlcnMnXG5cbnR5cGUgQXR0YWNobWVudFByZXZpZXdNb2RhbFByb3BzID0ge1xuICBpc09wZW46IGJvb2xlYW5cbiAgb25DbG9zZTogKCkgPT4gdm9pZFxuICBhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgPSAoeyBpc09wZW4sIG9uQ2xvc2UsIGF0dGFjaG1lbnQgfTogQXR0YWNobWVudFByZXZpZXdNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oWydjaGF0X2FpX3NlY3Rpb24nXSlcbiAgY29uc3QgYmFja2Ryb3BaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDExMTEyLCAnbmVzdGVkTW9kYWwnKVxuICBjb25zdCBbZmlsZVVybCwgc2V0RmlsZVVybF0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKVxuICBjb25zdCBbdGV4dENvbnRlbnQsIHNldFRleHRDb250ZW50XSA9IHVzZVN0YXRlPHN0cmluZz4oJycpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgbW9kYWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1yb290LWFjdGlvbnMnKVxuXG4gIC8vIENsZWFudXAgZGUgVVJMcyBjdWFuZG8gZWwgY29tcG9uZW50ZSBzZSBkZXNtb250ZSBvIGNhbWJpZSBlbCBhcmNoaXZvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChmaWxlVXJsKSB7XG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZmlsZVVybClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtmaWxlVXJsXSlcblxuICAvLyBMaXN0ZW5lciBwYXJhIGNlcnJhciBlbCBtb2RhbCBjb24gbGEgdGVjbGEgRVNDXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fCBldmVudC5rZXkgPT09ICdFc2MnKSB7XG4gICAgICAgIG9uQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKVxuICAgIH1cbiAgfSwgW2lzT3Blbiwgb25DbG9zZV0pXG5cbiAgLy8gUHJldmVuaXIgc2Nyb2xsIGRlbCBib2R5IGN1YW5kbyBlbCBtb2RhbCBlc3TDoSBhYmllcnRvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxPdmVyZmxvdyA9IGJvZHkuc3R5bGUub3ZlcmZsb3dcbiAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gb3JpZ2luYWxPdmVyZmxvd1xuICAgIH1cbiAgfSwgW2lzT3Blbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3BlbiB8fCAhYXR0YWNobWVudCkge1xuICAgICAgc2V0RmlsZVVybCgnJylcbiAgICAgIHNldFRleHRDb250ZW50KCcnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0SXNMb2FkaW5nKHRydWUpXG5cbiAgICAvLyBEZXRlcm1pbmFyIGVsIHRpcG8gZGUgYXJjaGl2byB1c2FuZG8gbGEgZnVuY2nDs24gZGUgdXRpbGlkYWRcbiAgICBjb25zdCB7IGZpbGVFeHRlbnNpb24sIGlzSW1hZ2UsIGlzUGRmLCBpc01hcmtkb3duLCBpc1RleHQsIGlzRXhjZWwgfSA9IGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoXG4gICAgICBhdHRhY2htZW50Lm5hbWUsXG4gICAgICBhdHRhY2htZW50LnR5cGVcbiAgICApXG5cbiAgICBjb25zdCBwcm9jZXNzRmlsZSA9IGFzeW5jIChcbiAgICAgIGZpbGU6IEZpbGUsXG4gICAgICBpc0ltZzogYm9vbGVhbixcbiAgICAgIGlzUGRmRmlsZTogYm9vbGVhbixcbiAgICAgIGlzTWQ6IGJvb2xlYW4sXG4gICAgICBpc1R4dDogYm9vbGVhbixcbiAgICAgIGlzWGxzOiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNJbWcpIHtcbiAgICAgICAgLy8gUGFyYSBpbcOhZ2VuZXMsIGNyZWFyIFVSTCBkZWwgYmxvYlxuICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpXG4gICAgICAgIHNldEZpbGVVcmwodXJsKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICB9IGVsc2UgaWYgKGlzUGRmRmlsZSkge1xuICAgICAgICAvLyBQYXJhIFBERnMsIGNyZWFyIFVSTCBkZWwgYmxvYlxuICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpXG4gICAgICAgIHNldEZpbGVVcmwodXJsKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICB9IGVsc2UgaWYgKGlzTWQgfHwgaXNUeHQpIHtcbiAgICAgICAgLy8gUGFyYSBhcmNoaXZvcyBkZSB0ZXh0byB5IG1hcmtkb3duLCBsZWVyIGVsIGNvbnRlbmlkb1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBzdHJpbmdcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChjb250ZW50KVxuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSlcbiAgICAgIH0gZWxzZSBpZiAoaXNYbHMpIHtcbiAgICAgICAgLy8gUGFyYSBhcmNoaXZvcyBFeGNlbCwgZWwgY29tcG9uZW50ZSBFeGNlbFByZXZpZXcgbWFuZWphcsOhIGxhIGNhcmdhXG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsb2FkRmlsZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFNpIGVzIGltYWdlbiwgdXNhciB1cmxfb3JpZ2luYWwgZGlyZWN0YW1lbnRlIChzaWVtcHJlIHZpZW5lIGRlbCBiYWNrZW5kKVxuICAgICAgICAvLyBTaSBubyB0aWVuZSB1cmxfb3JpZ2luYWwsIHVzYXIgdXJsX3RodW1ibmFpbCBjb21vIGZhbGxiYWNrXG4gICAgICAgIGlmIChpc0ltYWdlKSB7XG4gICAgICAgICAgY29uc3QgcmVtb3RlSW1hZ2VVcmwgPSByZXNvbHZlUmVtb3RlSW1hZ2VQcmV2aWV3VXJsKHtcbiAgICAgICAgICAgIHVybE9yaWdpbmFsOiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCxcbiAgICAgICAgICAgIHVybFRodW1ibmFpbDogYXR0YWNobWVudC51cmxfdGh1bWJuYWlsLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlbW90ZUltYWdlVXJsKSB7XG4gICAgICAgICAgICBzZXRGaWxlVXJsKHJlbW90ZUltYWdlVXJsKVxuICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2kgdGllbmUgdXJsX29yaWdpbmFsIGRlbCBiYWNrZW5kIChwYXJhIGFyY2hpdm9zIG5vLWltYWdlbiksIGRlc2NhcmdhciBlbCBhcmNoaXZvXG4gICAgICAgIC8vIHVybF9vcmlnaW5hbCBhaG9yYSB2aWVuZSBwYXJhIHRvZG9zIGxvcyBhcmNoaXZvcyBkZWwgYmFja2VuZFxuICAgICAgICBpZiAoYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICBjb25zdCBtaW1lVHlwZSA9IHJlc29sdmVEb3dubG9hZE1pbWVUeXBlKGF0dGFjaG1lbnQudHlwZSwgZmlsZUV4dGVuc2lvbikgfHwgYXR0YWNobWVudC50eXBlXG4gICAgICAgICAgY29uc3QgZmlsZU5hbWVXaXRoRXh0ZW5zaW9uID0gYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nKGF0dGFjaG1lbnQubmFtZSwgZmlsZUV4dGVuc2lvbilcblxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsLCBmaWxlTmFtZVdpdGhFeHRlbnNpb24sIG1pbWVUeXBlKVxuXG4gICAgICAgICAgLy8gUmUtZGV0ZWN0YXIgZWwgdGlwbyBkZSBhcmNoaXZvIGRlc3B1w6lzIGRlIGRlc2NhcmdhciAoZWwgYXJjaGl2byBkZXNjYXJnYWRvIHB1ZWRlIHRlbmVyIG1lam9yIGluZm9ybWFjacOzbilcbiAgICAgICAgICAvLyBVc2FyIGxhIGZ1bmNpw7NuIGRlIHV0aWxpZGFkIHBhcmEgb2J0ZW5lciBsb3MgZGV0YWxsZXMgZGVsIGFyY2hpdm8gZGVzY2FyZ2Fkb1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBleHRlbnNpw7NuIGVuIGVsIGFyY2hpdm8gZGVzY2FyZ2FkbywgdXNhciBlbCB0aXBvIE1JTUUgZGVsIGFyY2hpdm8gbyBkZWwgYXR0YWNobWVudFxuICAgICAgICAgIGNvbnN0IGRvd25sb2FkZWRGaWxlRGV0YWlscyA9IGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoZmlsZS5uYW1lLCBmaWxlLnR5cGUgfHwgYXR0YWNobWVudC50eXBlKVxuXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGUoXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgZG93bmxvYWRlZEZpbGVEZXRhaWxzLmlzSW1hZ2UsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNQZGYsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNNYXJrZG93bixcbiAgICAgICAgICAgIGRvd25sb2FkZWRGaWxlRGV0YWlscy5pc1RleHQsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNFeGNlbFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9idGVuZXIgZWwgYXJjaGl2byBsb2NhbCAocHJlZmVyaXIgb3JpZ2luYWxGaWxlIHBhcmEgaW3DoWdlbmVzKVxuICAgICAgICBjb25zdCBmaWxlID0gYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgfHwgYXR0YWNobWVudC5maWxlXG5cbiAgICAgICAgLy8gU2kgZWwgYXJjaGl2byBsb2NhbCBlc3TDoSB2YWPDrW8gKHNpemUgPT09IDApIHkgdGVuZW1vcyB1cmxfb3JpZ2luYWwsIHVzYXIgdXJsX29yaWdpbmFsXG4gICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSAmJiBmaWxlLnNpemUgPT09IDAgJiYgYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoYXR0YWNobWVudC51cmxfb3JpZ2luYWwsIGF0dGFjaG1lbnQubmFtZSwgYXR0YWNobWVudC50eXBlKVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NGaWxlKGRvd25sb2FkZWRGaWxlLCBpc0ltYWdlLCBpc1BkZiwgaXNNYXJrZG93biwgaXNUZXh0LCBpc0V4Y2VsKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIEZpbGUpKSB7XG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSwgaXNJbWFnZSwgaXNQZGYsIGlzTWFya2Rvd24sIGlzVGV4dCwgaXNFeGNlbClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkRmlsZSgpXG4gIH0sIFtpc09wZW4sIGF0dGFjaG1lbnRdKVxuXG4gIGNvbnN0IGhhbmRsZU1vZGFsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIGlmICghaXNPcGVuIHx8ICFhdHRhY2htZW50IHx8ICFjb250YWluZXIpIHJldHVybiBudWxsXG5cbiAgLy8gVXNhciBsYSBmdW5jacOzbiBkZSB1dGlsaWRhZCBwYXJhIG9idGVuZXIgbG9zIGRldGFsbGVzIGRlbCBhcmNoaXZvXG4gIGNvbnN0IHsgaXNJbWFnZSwgaXNQZGYsIGlzTWFya2Rvd24sIGlzVGV4dCwgaXNFeGNlbCwgaXNPZmZpY2VEb2MsIGlzUHB0IH0gPSBnZXRBdHRhY2htZW50UHJldmlld0ZpbGVEZXRhaWxzKFxuICAgIGF0dGFjaG1lbnQubmFtZSxcbiAgICBhdHRhY2htZW50LnR5cGVcbiAgKVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPFNDQVBNV3JhcHBlcj5cbiAgICAgIDxCYWNrZHJvcCBvbkNsaWNrPXtvbkNsb3NlfSB6SW5kZXg9e2JhY2tkcm9wWkluZGV4fT5cbiAgICAgICAgPFNDQVBNTW9kYWwgcmVmPXttb2RhbFJlZn0gb25DbGljaz17aGFuZGxlTW9kYWxDbGlja30+XG4gICAgICAgICAgPFNDQVBNSGVhZGVyPlxuICAgICAgICAgICAgPENVQnV0dG9uIGljb25Pbmx5IHZhcmlhbnQ9XCJ0ZXh0XCIgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICAgIDxDcm9zcyBjb2xvcj1cIiM2NjY2NjZcIiBoZWlnaHQ9ezIyfSB3aWR0aD17MjJ9IC8+XG4gICAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgIDwvU0NBUE1IZWFkZXI+XG4gICAgICAgICAgPFNDQVBNQ29udGVudFxuICAgICAgICAgICAgaXNJbWFnZT17aXNJbWFnZX1cbiAgICAgICAgICAgIGVycm9yPXshaXNMb2FkaW5nICYmICFpc0ltYWdlICYmICFpc1BkZiAmJiAhaXNNYXJrZG93biAmJiAhaXNUZXh0ICYmICFpc0V4Y2VsICYmICFpc09mZmljZURvYyAmJiAhaXNQcHR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2lzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxTQ0FQTUxvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFNwaW5uZXJMb3R0aWUgc2l6ZT17NDh9IC8+XG4gICAgICAgICAgICAgIDwvU0NBUE1Mb2FkaW5nQ29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmIGlzSW1hZ2UgJiYgKFxuICAgICAgICAgICAgICA8U0NBUE1JbWFnZUNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8SW1hZ2VQcmV2aWV3XG4gICAgICAgICAgICAgICAgICBzcmM9e2ZpbGVVcmx9XG4gICAgICAgICAgICAgICAgICBhbHQ9e2F0dGFjaG1lbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIG1heFdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1cz1cIjhweFwiXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ0FQTUltYWdlQ29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmIGlzUGRmICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNUGRmQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxTQ0FQTVBkZklmcmFtZSBzcmM9e2ZpbGVVcmx9IHRpdGxlPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgIDwvU0NBUE1QZGZDb250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiYgaXNNYXJrZG93biAmJiAoXG4gICAgICAgICAgICAgIDxTQ0FQTU1hcmtkb3duQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93biB2YXJpYW50PVwiY29tcGFjdFwiPnt0ZXh0Q29udGVudH08L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICAgICA8L1NDQVBNTWFya2Rvd25Db250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiYgaXNUZXh0ICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNVGV4dENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8cHJlPnt0ZXh0Q29udGVudH08L3ByZT5cbiAgICAgICAgICAgICAgPC9TQ0FQTVRleHRDb250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgaXNFeGNlbCAmJlxuICAgICAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNpIHRpZW5lIHVybF9vcmlnaW5hbCwgRXhjZWxQcmV2aWV3IG1hbmVqYXLDoSBsYSBkZXNjYXJnYVxuICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50LnVybF9vcmlnaW5hbCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIDxFeGNlbFByZXZpZXcgZmlsZVVybD17YXR0YWNobWVudC51cmxfb3JpZ2luYWx9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSB8fCBhdHRhY2htZW50LmZpbGVcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgRmlsZSkpIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFeGNlbFByZXZpZXcgZmlsZT17ZmlsZX0gZmlsZU5hbWU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIGlzT2ZmaWNlRG9jICYmXG4gICAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPFdvcmRQcmV2aWV3IGZpbGVVcmw9e2F0dGFjaG1lbnQudXJsX29yaWdpbmFsfSBmaWxlTmFtZT17YXR0YWNobWVudC5uYW1lfSAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgfHwgYXR0YWNobWVudC5maWxlXG4gICAgICAgICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIEZpbGUpKSByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIHJldHVybiA8V29yZFByZXZpZXcgZmlsZT17ZmlsZX0gZmlsZU5hbWU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIGlzUHB0ICYmXG4gICAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPFBwdFByZXZpZXcgZmlsZVVybD17YXR0YWNobWVudC51cmxfb3JpZ2luYWx9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSB8fCBhdHRhY2htZW50LmZpbGVcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgRmlsZSkpIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxQcHRQcmV2aWV3IGZpbGU9e2ZpbGV9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICB7IWlzTG9hZGluZyAmJiAhaXNJbWFnZSAmJiAhaXNQZGYgJiYgIWlzTWFya2Rvd24gJiYgIWlzVGV4dCAmJiAhaXNFeGNlbCAmJiAhaXNPZmZpY2VEb2MgJiYgIWlzUHB0ICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNRXJyb3JDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFNDQVBNVW5zdXBwb3J0ZWRDb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8RXJyb3JTdGF0ZSAvPlxuICAgICAgICAgICAgICAgICAgPFNDQVBNVW5zdXBwb3J0ZWRDb250YWluZXJUZXh0PlxuICAgICAgICAgICAgICAgICAgICB7dCgnY2hhdC5hdHRhY2htZW50UHJldmlld01vZGFsLnVuc3VwcG9ydGVkRmlsZU1lc3NhZ2UnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NBUE1VbnN1cHBvcnRlZENvbnRhaW5lclRleHQ+XG4gICAgICAgICAgICAgICAgPC9TQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxTQ0FQTUVycm9yRmlsZU5hbWU+e2F0dGFjaG1lbnQubmFtZX08L1NDQVBNRXJyb3JGaWxlTmFtZT5cbiAgICAgICAgICAgICAgPC9TQ0FQTUVycm9yQ29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NDQVBNQ29udGVudD5cbiAgICAgICAgPC9TQ0FQTU1vZGFsPlxuICAgICAgPC9CYWNrZHJvcD5cbiAgICA8L1NDQVBNV3JhcHBlcj4sXG4gICAgY29udGFpbmVyXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFJQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDMUQsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsUUFBUSxRQUFRLDRDQUE0QztBQUNyRSxTQUFTQyxLQUFLLFFB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
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
1
2
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
2
4
|
export var IMAGE_EXTENSIONS = /\.(png|jpe?g|gif|webp|bmp)$/i;
|
|
3
5
|
export var isLegacyPptFile = function isLegacyPptFile(fileName) {
|
|
4
6
|
return fileName.toLowerCase().endsWith('.ppt') && !fileName.toLowerCase().endsWith('.pptx');
|
|
@@ -28,4 +30,228 @@ export var extractSlideLines = function extractSlideLines(xml) {
|
|
|
28
30
|
return texts.join('').trim();
|
|
29
31
|
}).filter(Boolean);
|
|
30
32
|
};
|
|
31
|
-
|
|
33
|
+
export var SLIDE_PATH_PATTERN = /^ppt\/slides\/slide(\d+)\.xml$/i;
|
|
34
|
+
export var sortSlidePaths = function sortSlidePaths(paths) {
|
|
35
|
+
return paths.sort(function (a, b) {
|
|
36
|
+
var aMatch = a.match(SLIDE_PATH_PATTERN);
|
|
37
|
+
var bMatch = b.match(SLIDE_PATH_PATTERN);
|
|
38
|
+
return Number((aMatch === null || aMatch === void 0 ? void 0 : aMatch[1]) || 0) - Number((bMatch === null || bMatch === void 0 ? void 0 : bMatch[1]) || 0);
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
export var filterSlidePaths = function filterSlidePaths(fileNames, isDirectory) {
|
|
42
|
+
return sortSlidePaths(fileNames.filter(function (name) {
|
|
43
|
+
return SLIDE_PATH_PATTERN.test(name) && !isDirectory(name);
|
|
44
|
+
}));
|
|
45
|
+
};
|
|
46
|
+
export var resolveSlideRelsPath = function resolveSlideRelsPath(slidePath) {
|
|
47
|
+
return "".concat(slidePath.replace('ppt/slides/', 'ppt/slides/_rels/'), ".rels");
|
|
48
|
+
};
|
|
49
|
+
export var extractRelationshipTargets = function extractRelationshipTargets(relsXml) {
|
|
50
|
+
return _toConsumableArray(relsXml.matchAll(/Target="([^"]+)"/g)).map(function (match) {
|
|
51
|
+
return match[1];
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
export var shouldIncludePptxMediaPath = function shouldIncludePptxMediaPath(mediaPath) {
|
|
55
|
+
return IMAGE_EXTENSIONS.test(mediaPath);
|
|
56
|
+
};
|
|
57
|
+
export var stripRelationshipQuery = function stripRelationshipQuery(target) {
|
|
58
|
+
return target.split('?')[0];
|
|
59
|
+
};
|
|
60
|
+
export var parsePptxArchive = /*#__PURE__*/function () {
|
|
61
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(zip) {
|
|
62
|
+
var createObjectUrl,
|
|
63
|
+
slidePaths,
|
|
64
|
+
objectUrls,
|
|
65
|
+
slides,
|
|
66
|
+
_args3 = arguments;
|
|
67
|
+
return _regeneratorRuntime.wrap(function (_context3) {
|
|
68
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
69
|
+
case 0:
|
|
70
|
+
createObjectUrl = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : URL.createObjectURL;
|
|
71
|
+
slidePaths = filterSlidePaths(Object.keys(zip.files), function (name) {
|
|
72
|
+
var _zip$files$name;
|
|
73
|
+
return Boolean((_zip$files$name = zip.files[name]) === null || _zip$files$name === void 0 ? void 0 : _zip$files$name.dir);
|
|
74
|
+
});
|
|
75
|
+
objectUrls = [];
|
|
76
|
+
slides = [];
|
|
77
|
+
_context3.next = 1;
|
|
78
|
+
return Promise.all(slidePaths.map(/*#__PURE__*/function () {
|
|
79
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(slidePath, index) {
|
|
80
|
+
var slideFile, xml, lines, images, relsPath, relsFile, relsXml, targets, _t;
|
|
81
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
82
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
83
|
+
case 0:
|
|
84
|
+
slideFile = zip.file(slidePath);
|
|
85
|
+
if (!slideFile) {
|
|
86
|
+
_context2.next = 2;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
_context2.next = 1;
|
|
90
|
+
return slideFile.async('string');
|
|
91
|
+
case 1:
|
|
92
|
+
_t = _context2.sent;
|
|
93
|
+
_context2.next = 3;
|
|
94
|
+
break;
|
|
95
|
+
case 2:
|
|
96
|
+
_t = '';
|
|
97
|
+
case 3:
|
|
98
|
+
xml = _t;
|
|
99
|
+
lines = xml ? extractSlideLines(xml) : [];
|
|
100
|
+
images = [];
|
|
101
|
+
relsPath = resolveSlideRelsPath(slidePath);
|
|
102
|
+
relsFile = zip.file(relsPath);
|
|
103
|
+
if (!relsFile) {
|
|
104
|
+
_context2.next = 5;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
_context2.next = 4;
|
|
108
|
+
return relsFile.async('string');
|
|
109
|
+
case 4:
|
|
110
|
+
relsXml = _context2.sent;
|
|
111
|
+
targets = extractRelationshipTargets(relsXml);
|
|
112
|
+
_context2.next = 5;
|
|
113
|
+
return Promise.all(targets.map(/*#__PURE__*/function () {
|
|
114
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(target) {
|
|
115
|
+
var mediaPath, mediaFile, blob, url;
|
|
116
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
117
|
+
while (1) switch (_context.prev = _context.next) {
|
|
118
|
+
case 0:
|
|
119
|
+
mediaPath = resolveZipPath(slidePath, stripRelationshipQuery(target));
|
|
120
|
+
if (shouldIncludePptxMediaPath(mediaPath)) {
|
|
121
|
+
_context.next = 1;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
return _context.abrupt("return");
|
|
125
|
+
case 1:
|
|
126
|
+
mediaFile = zip.file(mediaPath);
|
|
127
|
+
if (mediaFile) {
|
|
128
|
+
_context.next = 2;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
return _context.abrupt("return");
|
|
132
|
+
case 2:
|
|
133
|
+
_context.next = 3;
|
|
134
|
+
return mediaFile.async('blob');
|
|
135
|
+
case 3:
|
|
136
|
+
blob = _context.sent;
|
|
137
|
+
url = createObjectUrl(blob);
|
|
138
|
+
objectUrls.push(url);
|
|
139
|
+
images.push(url);
|
|
140
|
+
case 4:
|
|
141
|
+
case "end":
|
|
142
|
+
return _context.stop();
|
|
143
|
+
}
|
|
144
|
+
}, _callee);
|
|
145
|
+
}));
|
|
146
|
+
return function (_x4) {
|
|
147
|
+
return _ref3.apply(this, arguments);
|
|
148
|
+
};
|
|
149
|
+
}()));
|
|
150
|
+
case 5:
|
|
151
|
+
slides[index] = {
|
|
152
|
+
index: index + 1,
|
|
153
|
+
lines: lines,
|
|
154
|
+
images: images
|
|
155
|
+
};
|
|
156
|
+
case 6:
|
|
157
|
+
case "end":
|
|
158
|
+
return _context2.stop();
|
|
159
|
+
}
|
|
160
|
+
}, _callee2);
|
|
161
|
+
}));
|
|
162
|
+
return function (_x2, _x3) {
|
|
163
|
+
return _ref2.apply(this, arguments);
|
|
164
|
+
};
|
|
165
|
+
}()));
|
|
166
|
+
case 1:
|
|
167
|
+
return _context3.abrupt("return", {
|
|
168
|
+
slides: slides.filter(Boolean),
|
|
169
|
+
objectUrls: objectUrls
|
|
170
|
+
});
|
|
171
|
+
case 2:
|
|
172
|
+
case "end":
|
|
173
|
+
return _context3.stop();
|
|
174
|
+
}
|
|
175
|
+
}, _callee3);
|
|
176
|
+
}));
|
|
177
|
+
return function parsePptxArchive(_x) {
|
|
178
|
+
return _ref.apply(this, arguments);
|
|
179
|
+
};
|
|
180
|
+
}();
|
|
181
|
+
export var loadPptPreviewFromSource = /*#__PURE__*/function () {
|
|
182
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(params) {
|
|
183
|
+
var sourceFile, arrayBuffer, parsed, _t2;
|
|
184
|
+
return _regeneratorRuntime.wrap(function (_context4) {
|
|
185
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
186
|
+
case 0:
|
|
187
|
+
if (!isLegacyPptFile(params.fileName)) {
|
|
188
|
+
_context4.next = 1;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
return _context4.abrupt("return", {
|
|
192
|
+
status: 'legacy-unsupported'
|
|
193
|
+
});
|
|
194
|
+
case 1:
|
|
195
|
+
_context4.prev = 1;
|
|
196
|
+
sourceFile = params.file;
|
|
197
|
+
if (!(!sourceFile && params.fileUrl)) {
|
|
198
|
+
_context4.next = 3;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
_context4.next = 2;
|
|
202
|
+
return params.downloadFile(params.fileUrl, params.fileName);
|
|
203
|
+
case 2:
|
|
204
|
+
sourceFile = _context4.sent;
|
|
205
|
+
case 3:
|
|
206
|
+
if (sourceFile) {
|
|
207
|
+
_context4.next = 4;
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
return _context4.abrupt("return", {
|
|
211
|
+
status: 'error',
|
|
212
|
+
reason: 'missing-file'
|
|
213
|
+
});
|
|
214
|
+
case 4:
|
|
215
|
+
_context4.next = 5;
|
|
216
|
+
return sourceFile.arrayBuffer();
|
|
217
|
+
case 5:
|
|
218
|
+
arrayBuffer = _context4.sent;
|
|
219
|
+
_context4.next = 6;
|
|
220
|
+
return params.readArchive(arrayBuffer);
|
|
221
|
+
case 6:
|
|
222
|
+
parsed = _context4.sent;
|
|
223
|
+
if (!(parsed.slides.length === 0)) {
|
|
224
|
+
_context4.next = 7;
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
return _context4.abrupt("return", {
|
|
228
|
+
status: 'error',
|
|
229
|
+
reason: 'empty-pptx'
|
|
230
|
+
});
|
|
231
|
+
case 7:
|
|
232
|
+
return _context4.abrupt("return", {
|
|
233
|
+
status: 'loaded',
|
|
234
|
+
slides: parsed.slides,
|
|
235
|
+
objectUrls: parsed.objectUrls
|
|
236
|
+
});
|
|
237
|
+
case 8:
|
|
238
|
+
_context4.prev = 8;
|
|
239
|
+
_t2 = _context4["catch"](1);
|
|
240
|
+
return _context4.abrupt("return", {
|
|
241
|
+
status: 'error',
|
|
242
|
+
reason: 'parse-error'
|
|
243
|
+
});
|
|
244
|
+
case 9:
|
|
245
|
+
case "end":
|
|
246
|
+
return _context4.stop();
|
|
247
|
+
}
|
|
248
|
+
}, _callee4, null, [[1, 8]]);
|
|
249
|
+
}));
|
|
250
|
+
return function loadPptPreviewFromSource(_x5) {
|
|
251
|
+
return _ref4.apply(this, arguments);
|
|
252
|
+
};
|
|
253
|
+
}();
|
|
254
|
+
export var shouldShowPptPreviewEmptySlide = function shouldShowPptPreviewEmptySlide(slide) {
|
|
255
|
+
return slide.lines.length === 0 && slide.images.length === 0;
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTUFHRV9FWFRFTlNJT05TIiwiaXNMZWdhY3lQcHRGaWxlIiwiZmlsZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsImVuZHNXaXRoIiwiZGVjb2RlWG1sIiwidmFsdWUiLCJyZXBsYWNlIiwicmVzb2x2ZVppcFBhdGgiLCJmcm9tRmlsZSIsInRhcmdldCIsInN0YXJ0c1dpdGgiLCJmcm9tRGlyIiwic3BsaXQiLCJzbGljZSIsImZvckVhY2giLCJzZWdtZW50IiwicG9wIiwicHVzaCIsImpvaW4iLCJleHRyYWN0U2xpZGVMaW5lcyIsInhtbCIsIm1hcCIsInBhcmFncmFwaCIsInRleHRzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtYXRjaCIsInRyaW0iLCJmaWx0ZXIiLCJCb29sZWFuIiwiU0xJREVfUEFUSF9QQVRURVJOIiwic29ydFNsaWRlUGF0aHMiLCJwYXRocyIsInNvcnQiLCJhIiwiYiIsImFNYXRjaCIsImJNYXRjaCIsIk51bWJlciIsImZpbHRlclNsaWRlUGF0aHMiLCJmaWxlTmFtZXMiLCJpc0RpcmVjdG9yeSIsIm5hbWUiLCJ0ZXN0IiwicmVzb2x2ZVNsaWRlUmVsc1BhdGgiLCJzbGlkZVBhdGgiLCJjb25jYXQiLCJleHRyYWN0UmVsYXRpb25zaGlwVGFyZ2V0cyIsInJlbHNYbWwiLCJzaG91bGRJbmNsdWRlUHB0eE1lZGlhUGF0aCIsIm1lZGlhUGF0aCIsInN0cmlwUmVsYXRpb25zaGlwUXVlcnkiLCJwYXJzZVBwdHhBcmNoaXZlIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlMyIsInppcCIsImNyZWF0ZU9iamVjdFVybCIsInNsaWRlUGF0aHMiLCJvYmplY3RVcmxzIiwic2xpZGVzIiwiX2FyZ3MzIiwiYXJndW1lbnRzIiwid3JhcCIsIl9jb250ZXh0MyIsInByZXYiLCJuZXh0IiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiT2JqZWN0Iiwia2V5cyIsImZpbGVzIiwiX3ppcCRmaWxlcyRuYW1lIiwiZGlyIiwiUHJvbWlzZSIsImFsbCIsIl9yZWYyIiwiX2NhbGxlZTIiLCJpbmRleCIsInNsaWRlRmlsZSIsImxpbmVzIiwiaW1hZ2VzIiwicmVsc1BhdGgiLCJyZWxzRmlsZSIsInRhcmdldHMiLCJfdCIsIl9jb250ZXh0MiIsImZpbGUiLCJhc3luYyIsInNlbnQiLCJfcmVmMyIsIl9jYWxsZWUiLCJtZWRpYUZpbGUiLCJibG9iIiwidXJsIiwiX2NvbnRleHQiLCJhYnJ1cHQiLCJzdG9wIiwiX3g0IiwiYXBwbHkiLCJfeDIiLCJfeDMiLCJfeCIsImxvYWRQcHRQcmV2aWV3RnJvbVNvdXJjZSIsIl9yZWY0IiwiX2NhbGxlZTQiLCJwYXJhbXMiLCJzb3VyY2VGaWxlIiwiYXJyYXlCdWZmZXIiLCJwYXJzZWQiLCJfdDIiLCJfY29udGV4dDQiLCJzdGF0dXMiLCJmaWxlVXJsIiwiZG93bmxvYWRGaWxlIiwicmVhc29uIiwicmVhZEFyY2hpdmUiLCJfeDUiLCJzaG91bGRTaG93UHB0UHJldmlld0VtcHR5U2xpZGUiLCJzbGlkZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwvUHB0UHJldmlldy5oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBJTUFHRV9FWFRFTlNJT05TID0gL1xcLihwbmd8anBlP2d8Z2lmfHdlYnB8Ym1wKSQvaVxuXG5leHBvcnQgY29uc3QgaXNMZWdhY3lQcHRGaWxlID0gKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5wcHQnKSAmJiAhZmlsZU5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLnBwdHgnKVxuXG5leHBvcnQgY29uc3QgZGVjb2RlWG1sID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgdmFsdWVcbiAgICAucmVwbGFjZSgvJmFtcDsvZywgJyYnKVxuICAgIC5yZXBsYWNlKC8mbHQ7L2csICc8JylcbiAgICAucmVwbGFjZSgvJmd0Oy9nLCAnPicpXG4gICAgLnJlcGxhY2UoLyZxdW90Oy9nLCAnXCInKVxuICAgIC5yZXBsYWNlKC8mYXBvczsvZywgXCInXCIpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlWmlwUGF0aCA9IChmcm9tRmlsZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICh0YXJnZXQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIHRhcmdldC5yZXBsYWNlKC9eXFwvLywgJycpXG4gIH1cbiAgY29uc3QgZnJvbURpciA9IGZyb21GaWxlLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpXG4gIHRhcmdldC5zcGxpdCgnLycpLmZvckVhY2goc2VnbWVudCA9PiB7XG4gICAgaWYgKHNlZ21lbnQgPT09ICcuLicpIHtcbiAgICAgIGZyb21EaXIucG9wKClcbiAgICB9IGVsc2UgaWYgKHNlZ21lbnQgJiYgc2VnbWVudCAhPT0gJy4nKSB7XG4gICAgICBmcm9tRGlyLnB1c2goc2VnbWVudClcbiAgICB9XG4gIH0pXG4gIHJldHVybiBmcm9tRGlyLmpvaW4oJy8nKVxufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdFNsaWRlTGluZXMgPSAoeG1sOiBzdHJpbmcpOiBzdHJpbmdbXSA9PlxuICB4bWxcbiAgICAuc3BsaXQoLzxhOnBbXFxzPl0vKVxuICAgIC5zbGljZSgxKVxuICAgIC5tYXAocGFyYWdyYXBoID0+IHtcbiAgICAgIGNvbnN0IHRleHRzID0gWy4uLnBhcmFncmFwaC5tYXRjaEFsbCgvPGE6dCg/Olxcc1tePl0qKT8+KFtePF0qKTxcXC9hOnQ+L2cpXS5tYXAobWF0Y2ggPT4gZGVjb2RlWG1sKG1hdGNoWzFdKSlcbiAgICAgIHJldHVybiB0ZXh0cy5qb2luKCcnKS50cmltKClcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbilcblxuZXhwb3J0IGNvbnN0IFNMSURFX1BBVEhfUEFUVEVSTiA9IC9ecHB0XFwvc2xpZGVzXFwvc2xpZGUoXFxkKylcXC54bWwkL2lcblxuZXhwb3J0IGNvbnN0IHNvcnRTbGlkZVBhdGhzID0gKHBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+XG4gIHBhdGhzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBhTWF0Y2ggPSBhLm1hdGNoKFNMSURFX1BBVEhfUEFUVEVSTilcbiAgICBjb25zdCBiTWF0Y2ggPSBiLm1hdGNoKFNMSURFX1BBVEhfUEFUVEVSTilcbiAgICByZXR1cm4gTnVtYmVyKGFNYXRjaD8uWzFdIHx8IDApIC0gTnVtYmVyKGJNYXRjaD8uWzFdIHx8IDApXG4gIH0pXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJTbGlkZVBhdGhzID0gKGZpbGVOYW1lczogc3RyaW5nW10sIGlzRGlyZWN0b3J5OiAobmFtZTogc3RyaW5nKSA9PiBib29sZWFuKTogc3RyaW5nW10gPT5cbiAgc29ydFNsaWRlUGF0aHMoZmlsZU5hbWVzLmZpbHRlcihuYW1lID0+IFNMSURFX1BBVEhfUEFUVEVSTi50ZXN0KG5hbWUpICYmICFpc0RpcmVjdG9yeShuYW1lKSkpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2xpZGVSZWxzUGF0aCA9IChzbGlkZVBhdGg6IHN0cmluZyk6IHN0cmluZyA9PlxuICBgJHtzbGlkZVBhdGgucmVwbGFjZSgncHB0L3NsaWRlcy8nLCAncHB0L3NsaWRlcy9fcmVscy8nKX0ucmVsc2BcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RSZWxhdGlvbnNoaXBUYXJnZXRzID0gKHJlbHNYbWw6IHN0cmluZyk6IHN0cmluZ1tdID0+XG4gIFsuLi5yZWxzWG1sLm1hdGNoQWxsKC9UYXJnZXQ9XCIoW15cIl0rKVwiL2cpXS5tYXAobWF0Y2ggPT4gbWF0Y2hbMV0pXG5cbmV4cG9ydCBjb25zdCBzaG91bGRJbmNsdWRlUHB0eE1lZGlhUGF0aCA9IChtZWRpYVBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4gSU1BR0VfRVhURU5TSU9OUy50ZXN0KG1lZGlhUGF0aClcblxuZXhwb3J0IGNvbnN0IHN0cmlwUmVsYXRpb25zaGlwUXVlcnkgPSAodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcgPT4gdGFyZ2V0LnNwbGl0KCc/JylbMF1cblxuZXhwb3J0IHR5cGUgUHB0U2xpZGVDb250ZW50ID0ge1xuICBpbmRleDogbnVtYmVyXG4gIGxpbmVzOiBzdHJpbmdbXVxuICBpbWFnZXM6IHN0cmluZ1tdXG59XG5cbmV4cG9ydCB0eXBlIFBwdHhaaXBGaWxlRW50cnkgPSB7XG4gIGFzeW5jOiAobW9kZTogJ3N0cmluZycgfCAnYmxvYicpID0+IFByb21pc2U8c3RyaW5nIHwgQmxvYj5cbn1cblxuZXhwb3J0IHR5cGUgUHB0eFppcEFyY2hpdmUgPSB7XG4gIGZpbGVzOiBSZWNvcmQ8c3RyaW5nLCB7IGRpcj86IGJvb2xlYW4gfT5cbiAgZmlsZTogKHBhdGg6IHN0cmluZykgPT4gUHB0eFppcEZpbGVFbnRyeSB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUHB0eEFyY2hpdmUgPSBhc3luYyAoXG4gIHppcDogUHB0eFppcEFyY2hpdmUsXG4gIGNyZWF0ZU9iamVjdFVybDogKGJsb2I6IEJsb2IpID0+IHN0cmluZyA9IFVSTC5jcmVhdGVPYmplY3RVUkxcbik6IFByb21pc2U8eyBzbGlkZXM6IFBwdFNsaWRlQ29udGVudFtdOyBvYmplY3RVcmxzOiBzdHJpbmdbXSB9PiA9PiB7XG4gIGNvbnN0IHNsaWRlUGF0aHMgPSBmaWx0ZXJTbGlkZVBhdGhzKE9iamVjdC5rZXlzKHppcC5maWxlcyksIG5hbWUgPT4gQm9vbGVhbih6aXAuZmlsZXNbbmFtZV0/LmRpcikpXG4gIGNvbnN0IG9iamVjdFVybHM6IHN0cmluZ1tdID0gW11cbiAgY29uc3Qgc2xpZGVzOiBQcHRTbGlkZUNvbnRlbnRbXSA9IFtdXG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgc2xpZGVQYXRocy5tYXAoYXN5bmMgKHNsaWRlUGF0aCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNsaWRlRmlsZSA9IHppcC5maWxlKHNsaWRlUGF0aClcbiAgICAgIGNvbnN0IHhtbCA9IHNsaWRlRmlsZSA/ICgoYXdhaXQgc2xpZGVGaWxlLmFzeW5jKCdzdHJpbmcnKSkgYXMgc3RyaW5nKSA6ICcnXG4gICAgICBjb25zdCBsaW5lcyA9IHhtbCA/IGV4dHJhY3RTbGlkZUxpbmVzKHhtbCkgOiBbXVxuICAgICAgY29uc3QgaW1hZ2VzOiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgIGNvbnN0IHJlbHNQYXRoID0gcmVzb2x2ZVNsaWRlUmVsc1BhdGgoc2xpZGVQYXRoKVxuICAgICAgY29uc3QgcmVsc0ZpbGUgPSB6aXAuZmlsZShyZWxzUGF0aClcbiAgICAgIGlmIChyZWxzRmlsZSkge1xuICAgICAgICBjb25zdCByZWxzWG1sID0gKGF3YWl0IHJlbHNGaWxlLmFzeW5jKCdzdHJpbmcnKSkgYXMgc3RyaW5nXG4gICAgICAgIGNvbnN0IHRhcmdldHMgPSBleHRyYWN0UmVsYXRpb25zaGlwVGFyZ2V0cyhyZWxzWG1sKVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHRhcmdldHMubWFwKGFzeW5jIHRhcmdldCA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZWRpYVBhdGggPSByZXNvbHZlWmlwUGF0aChzbGlkZVBhdGgsIHN0cmlwUmVsYXRpb25zaGlwUXVlcnkodGFyZ2V0KSlcbiAgICAgICAgICAgIGlmICghc2hvdWxkSW5jbHVkZVBwdHhNZWRpYVBhdGgobWVkaWFQYXRoKSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhRmlsZSA9IHppcC5maWxlKG1lZGlhUGF0aClcbiAgICAgICAgICAgIGlmICghbWVkaWFGaWxlKSB7XG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmxvYiA9IChhd2FpdCBtZWRpYUZpbGUuYXN5bmMoJ2Jsb2InKSkgYXMgQmxvYlxuICAgICAgICAgICAgY29uc3QgdXJsID0gY3JlYXRlT2JqZWN0VXJsKGJsb2IpXG4gICAgICAgICAgICBvYmplY3RVcmxzLnB1c2godXJsKVxuICAgICAgICAgICAgaW1hZ2VzLnB1c2godXJsKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgc2xpZGVzW2luZGV4XSA9IHsgaW5kZXg6IGluZGV4ICsgMSwgbGluZXMsIGltYWdlcyB9XG4gICAgfSlcbiAgKVxuXG4gIHJldHVybiB7IHNsaWRlczogc2xpZGVzLmZpbHRlcihCb29sZWFuKSwgb2JqZWN0VXJscyB9XG59XG5cbmV4cG9ydCB0eXBlIFBwdFByZXZpZXdMb2FkUmVzdWx0ID1cbiAgfCB7IHN0YXR1czogJ2xlZ2FjeS11bnN1cHBvcnRlZCcgfVxuICB8IHsgc3RhdHVzOiAnbG9hZGVkJzsgc2xpZGVzOiBQcHRTbGlkZUNvbnRlbnRbXTsgb2JqZWN0VXJsczogc3RyaW5nW10gfVxuICB8IHsgc3RhdHVzOiAnZXJyb3InOyByZWFzb246ICdtaXNzaW5nLWZpbGUnIHwgJ2VtcHR5LXBwdHgnIHwgJ3BhcnNlLWVycm9yJyB9XG5cbmV4cG9ydCBjb25zdCBsb2FkUHB0UHJldmlld0Zyb21Tb3VyY2UgPSBhc3luYyAocGFyYW1zOiB7XG4gIGZpbGU/OiBGaWxlXG4gIGZpbGVVcmw/OiBzdHJpbmdcbiAgZmlsZU5hbWU6IHN0cmluZ1xuICBkb3dubG9hZEZpbGU6ICh1cmw6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPEZpbGU+XG4gIHJlYWRBcmNoaXZlOiAoYnVmZmVyOiBBcnJheUJ1ZmZlcikgPT4gUHJvbWlzZTx7IHNsaWRlczogUHB0U2xpZGVDb250ZW50W107IG9iamVjdFVybHM6IHN0cmluZ1tdIH0+XG59KTogUHJvbWlzZTxQcHRQcmV2aWV3TG9hZFJlc3VsdD4gPT4ge1xuICBpZiAoaXNMZWdhY3lQcHRGaWxlKHBhcmFtcy5maWxlTmFtZSkpIHtcbiAgICByZXR1cm4geyBzdGF0dXM6ICdsZWdhY3ktdW5zdXBwb3J0ZWQnIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgbGV0IHNvdXJjZUZpbGUgPSBwYXJhbXMuZmlsZVxuICAgIGlmICghc291cmNlRmlsZSAmJiBwYXJhbXMuZmlsZVVybCkge1xuICAgICAgc291cmNlRmlsZSA9IGF3YWl0IHBhcmFtcy5kb3dubG9hZEZpbGUocGFyYW1zLmZpbGVVcmwsIHBhcmFtcy5maWxlTmFtZSlcbiAgICB9XG5cbiAgICBpZiAoIXNvdXJjZUZpbGUpIHtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ2Vycm9yJywgcmVhc29uOiAnbWlzc2luZy1maWxlJyB9XG4gICAgfVxuXG4gICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBzb3VyY2VGaWxlLmFycmF5QnVmZmVyKClcbiAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBwYXJhbXMucmVhZEFyY2hpdmUoYXJyYXlCdWZmZXIpXG5cbiAgICBpZiAocGFyc2VkLnNsaWRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ2Vycm9yJywgcmVhc29uOiAnZW1wdHktcHB0eCcgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXR1czogJ2xvYWRlZCcsIHNsaWRlczogcGFyc2VkLnNsaWRlcywgb2JqZWN0VXJsczogcGFyc2VkLm9iamVjdFVybHMgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBzdGF0dXM6ICdlcnJvcicsIHJlYXNvbjogJ3BhcnNlLWVycm9yJyB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dQcHRQcmV2aWV3RW1wdHlTbGlkZSA9IChzbGlkZTogUHB0U2xpZGVDb250ZW50KTogYm9vbGVhbiA9PlxuICBzbGlkZS5saW5lcy5sZW5ndGggPT09IDAgJiYgc2xpZGUuaW1hZ2VzLmxlbmd0aCA9PT0gMFxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLElBQU1BLGdCQUFnQixHQUFHLDhCQUE4QjtBQUU5RCxPQUFPLElBQU1DLGVBQWUsR0FBRyxTQUFs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
|