@projectcor/maia-components 2.48.1-1 → 2.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/lib/App.js +19 -44
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +53 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +28 -52
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +37 -1
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +33 -66
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +227 -1
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -177
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +29 -1
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -28
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +173 -1
- package/lib/components/atoms/MAIAInput/MAIAInput.js +126 -171
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +47 -1
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -61
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +24 -41
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +10 -25
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +43 -78
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +11 -9
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -37
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
- package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
- package/lib/components/atoms/TextArea/TextArea.js +11 -20
- package/lib/components/index.js +1 -2
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +30 -1
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +13 -18
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +48 -1
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +17 -26
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +266 -321
- package/lib/components/molecules/ChatAIHome/styles.js +78 -85
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +345 -1
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +201 -200
- package/lib/components/molecules/ChatAIMessages/newStyles.js +35 -32
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +373 -5
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +199 -271
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +20 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +87 -74
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
- package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -10
- package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +46 -61
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +314 -1
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +261 -480
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +1 -4
- package/lib/dev/DevReasoningTimeline.js +37 -68
- package/lib/dev/Providers.js +3 -5
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
- package/lib/hooks/useChatManager/useChatManager.helpers.js +550 -1
- package/lib/hooks/useChatManager/useChatManager.js +245 -429
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +257 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +50 -206
- package/lib/hooks/useContextMentions.helpers.js +61 -1
- package/lib/hooks/useContextMentions.js +5 -62
- package/lib/hooks/useEntitySearch.helpers.js +49 -1
- package/lib/hooks/useEntitySearch.js +22 -53
- package/lib/hooks/useFrequentlyUsedActions.js +22 -60
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
- package/lib/index.js +2 -5
- package/lib/lang/br/index.js +1 -26
- package/lib/lang/en/index.js +1 -26
- package/lib/lang/es/index.js +1 -26
- package/lib/lang/fr/index.js +1 -26
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Agents/getAgents.helpers.js +61 -1
- package/lib/services/maia/Agents/getAgents.js +31 -59
- package/lib/services/utils/mapChatMessages.helpers.js +223 -0
- package/lib/services/utils/mapChatMessages.js +25 -249
- package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
- package/lib/store/sessions/sessionStreamManager.js +213 -273
- package/lib/styles/cascade.js +3 -29
- package/lib/styles/transitions.js +1 -3
- package/lib/types/global.d.js +1 -1
- package/lib/utils/hoursPlannerQuickActionType.js +1 -74
- package/lib/utils/renderContextMentions.helpers.js +110 -0
- package/lib/utils/renderContextMentions.js +4 -110
- package/lib/utils/streamActivityMessages.helpers.js +222 -0
- package/lib/utils/streamActivityMessages.js +21 -251
- package/package.json +1 -1
- package/lib/components/atoms/ActionableButton.spec.js +0 -111
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
- package/lib/components/atoms/Chip/Chip.spec.js +0 -82
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
- package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
- package/lib/components/atoms/Expand/Expand.spec.js +0 -57
- package/lib/components/atoms/Fade/Fade.spec.js +0 -31
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
- package/lib/components/atoms/HelpButton.spec.js +0 -87
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -444
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
- package/lib/components/atoms/NextPageLoader.spec.js +0 -37
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
- package/lib/components/atoms/PrimaryButton.spec.js +0 -42
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -170
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -199
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -8
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +0 -29
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +0 -38
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
- package/lib/components/atoms/Switch/Switch.spec.js +0 -41
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
- package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
- package/lib/components/atoms/ThirdButton.spec.js +0 -29
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
- package/lib/components/atoms/WithAppCfg.spec.js +0 -60
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -495
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
- package/lib/components/molecules/AgentInputBlock/index.js +0 -5
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -445
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
- package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
- package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -369
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -391
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1204
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -246
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -275
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -275
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -195
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -94
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -69
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
- package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
- package/lib/components/organisms/ChatAIPage/index.js +0 -3
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
- package/lib/constants/maiaFeatureAccess.spec.js +0 -30
- package/lib/constants/maiaHourAgentAccess.spec.js +0 -30
- package/lib/constants/maiaTaskPanelAccess.spec.js +0 -30
- package/lib/constants/permissions/clientRoleAccess.spec.js +0 -31
- package/lib/constants/permissions/utils.spec.js +0 -128
- package/lib/dev/DevMaiaPage.js +0 -30
- package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
- package/lib/hooks/useAgentSuggestions.spec.js +0 -89
- package/lib/hooks/useCaretPosition.spec.js +0 -58
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
- package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
- package/lib/hooks/useChats/useChats.spec.js +0 -208
- package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
- package/lib/hooks/useClientSearch.spec.js +0 -86
- package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
- package/lib/hooks/useContextMentions.spec.js +0 -239
- package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
- package/lib/hooks/useContextPinPopover.spec.js +0 -159
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
- package/lib/hooks/useDebounce.spec.js +0 -42
- package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
- package/lib/hooks/useEntitySearch.spec.js +0 -443
- package/lib/hooks/useEvent.spec.js +0 -45
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
- package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
- package/lib/hooks/useIsMaiaPageRoute.js +0 -26
- package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
- package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
- package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
- package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
- package/lib/hooks/useMentionPopover.spec.js +0 -215
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
- package/lib/hooks/useModal/useModal.spec.js +0 -73
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
- package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
- package/lib/hooks/useProjectSearch.spec.js +0 -91
- package/lib/hooks/useProjectSummary.spec.js +0 -193
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
- package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
- package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
- package/lib/hooks/useRecentContexts.spec.js +0 -139
- package/lib/hooks/useResize.spec.js +0 -37
- package/lib/hooks/useSkillsCatalog.spec.js +0 -88
- package/lib/hooks/useSlashCommands.spec.js +0 -139
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
- package/lib/hooks/useStreamResponse.spec.js +0 -199
- package/lib/hooks/useT.spec.js +0 -20
- package/lib/hooks/useToggle.spec.js +0 -33
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
- package/lib/services/maia/Access/updateAccess.spec.js +0 -137
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
- package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
- package/lib/services/maia/Agents/connectors.spec.js +0 -359
- package/lib/services/maia/Agents/createAgent.spec.js +0 -55
- package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
- package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
- package/lib/services/maia/Agents/getAgents.spec.js +0 -697
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
- package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
- package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
- package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
- package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
- package/lib/services/maia/Chats/patchChat.spec.js +0 -41
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
- package/lib/services/maia/Knowledge/delete.spec.js +0 -45
- package/lib/services/maia/Knowledge/download.spec.js +0 -78
- package/lib/services/maia/Knowledge/save.spec.js +0 -58
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
- package/lib/services/maia/Skills/createSkill.spec.js +0 -68
- package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
- package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
- package/lib/services/maia/Skills/getSkills.spec.js +0 -152
- package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
- package/lib/services/maia/client.spec.js +0 -56
- package/lib/services/utils/fetchCOR.spec.js +0 -211
- package/lib/services/utils/getCookie.spec.js +0 -20
- package/lib/services/utils/mapChatMessages.spec.js +0 -254
- package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
- package/lib/store/maiaLastChatPersistence.spec.js +0 -22
- package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
- package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
- package/lib/store/sessions/sessionNotifications.spec.js +0 -106
- package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
- package/lib/store/sessions/sessions.types.spec.js +0 -16
- package/lib/store/sessions/useSessionsStore.spec.js +0 -135
- package/lib/store/useChatsStore.spec.js +0 -619
- package/lib/store/useFaqsStore.spec.js +0 -57
- package/lib/utils/actionCategoryMap.spec.js +0 -18
- package/lib/utils/agentDisplayName.spec.js +0 -44
- package/lib/utils/autoApproveStorage.spec.js +0 -25
- package/lib/utils/chatInputFiles.spec.js +0 -39
- package/lib/utils/contextMentionIcons.spec.js +0 -41
- package/lib/utils/contextMentionLabel.spec.js +0 -13
- package/lib/utils/contextMentionTriggers.spec.js +0 -38
- package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
- package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
- package/lib/utils/entityLinkRender.spec.js +0 -72
- package/lib/utils/fileDownloadHelper.spec.js +0 -67
- package/lib/utils/formatQuickActionMessage.spec.js +0 -27
- package/lib/utils/formatUnreadCount.spec.js +0 -12
- package/lib/utils/getUnitFileSize.spec.js +0 -18
- package/lib/utils/hitlAnalytics.spec.js +0 -100
- package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
- package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
- package/lib/utils/imagePreprocessor.spec.js +0 -112
- package/lib/utils/maiaPageRoute.js +0 -24
- package/lib/utils/maiaPageRoute.spec.js +0 -23
- package/lib/utils/mapBackendLang.spec.js +0 -19
- package/lib/utils/navigateContextEntity.spec.js +0 -50
- package/lib/utils/normalizeAgentConnectors.spec.js +0 -98
- package/lib/utils/orchestratorSubagents.spec.js +0 -32
- package/lib/utils/reasoningMappers.spec.js +0 -103
- package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
- package/lib/utils/renderContextMentions.spec.js +0 -158
- package/lib/utils/retryCompletion.spec.js +0 -99
- package/lib/utils/skillContentSize.spec.js +0 -13
- package/lib/utils/slashCommandMarker.spec.js +0 -43
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
- package/lib/utils/sseStreamContent.spec.js +0 -31
- package/lib/utils/streamActivityMessages.spec.js +0 -253
- package/lib/utils/validateTrimmedFields.spec.js +0 -26
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
3
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
5
4
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
5
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
7
7
|
/* eslint-disable no-nested-ternary */
|
|
8
8
|
/* eslint-disable @typescript-eslint/indent */
|
|
9
9
|
/* eslint-disable react/jsx-no-useless-fragment */
|
|
@@ -39,27 +39,26 @@ import { SCCAIMContent, SCCAIMContentWrapper, SCCAIMMinimizedHide, SCCAIMWrapper
|
|
|
39
39
|
import { MaiaMinimizedPill } from './components/MaiaMinimizedPill';
|
|
40
40
|
import { useMinimizedPillNoveltyDot } from '../../../hooks/useMinimizedPillNoveltyDot';
|
|
41
41
|
import { getMaiaFloatingPanelWidthPx, resolveInitialMaiaChatLayoutMode, setStoredMaiaChatLayoutMode } from './layout';
|
|
42
|
-
import { clampFloatingPanelPosition, dispatchSkillMentionInsert, ensureAgentsBeforeSkillUse, getMaiaHostPanelPresentation, hasAnyActiveSessionInMeta, isBannerFaqReadyToAutoSend, isGlobalMaiaSection, resolveAiChatBackDestination, resolveComputedCurrentOption, resolveDefaultFloatingPanelPosition, resolveInitialCurrentOption, resolveLegacyContextSession, resolveSidebarAgentsNavActive, shouldRestoreExpandedPanel, shouldSkipFloatingDragTarget, validateAccessByFeature } from './ChatAIModal.helpers';
|
|
43
42
|
import { FloatingPanelMotion, useFloatingPanelDragTilt } from './floatingPanelMotion';
|
|
44
43
|
import { ChatAiModalFooter } from './components/ChatAiModalFooter';
|
|
45
44
|
import { isMarketplaceGlobalCloneAgent } from '../../../utils/agentDisplayName';
|
|
46
45
|
import { useFaqsStore } from '../../../store/useFaqsStore';
|
|
47
46
|
import { getChatsStoreState, useChatsStore } from '../../../store/useChatsStore';
|
|
48
47
|
import { readLastActiveChatId, writeLastActiveChatId } from '../../../store/maiaLastChatPersistence';
|
|
49
|
-
import { clearMaiaPanelSession,
|
|
48
|
+
import { clearMaiaPanelSession, patchMaiaPanelSession, readMaiaPanelSession, writeMaiaPanelSession } from '../../../store/maiaPanelSessionPersistence';
|
|
50
49
|
import { useSessionsStore } from '../../../store/sessions/useSessionsStore';
|
|
51
50
|
import { fetchMaia } from '../../../services/maia/client';
|
|
52
51
|
import { fetchAgentDetail } from '../../../services/maia/Agents/fetchAgentDetail';
|
|
53
52
|
import { mapCORLang } from '../../../lang/utils';
|
|
54
53
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
55
54
|
import { MAIA_OPEN_FROM_HOST_EVENT } from '../../../utils/maiaHostOpen';
|
|
56
|
-
import {
|
|
55
|
+
import { clampFloatingPanelPosition, hasAnyActiveSessionInMeta, hasBannerFaqTitle, isBannerFaqReadyToAutoSend, resolveAiChatBackDestination, resolveComputedCurrentOption, resolveInitialCurrentOption, resolveLegacyContextSession, resolveSidebarAgentsNavActive, shouldRestoreExpandedPanel, shouldSkipFloatingDragTarget, validateAccessByFeature, resolveHostTakeoverEntityState, buildHostTakeoverPersistContext, buildMaiaPanelSessionPatch, dispatchSkillMentionInsert, ensureAgentsBeforeSkillUse, resolveFloatingPanelDragPosition, resolveHostTakeoverAgentId, resolveMaiaModalI18nLang, resolveMinimizedRestoreTarget, resolveNextDragPosition, resolveUserHasAgentManagementPermissions, shouldBackClearPinnedContext, shouldBackStartNewChatPreservingContext, shouldMarkOrchestratorContextReset, shouldStartNewChatFromCatalog, resolveHasPinnedContext, resolveOrchestratorHomeNavFlags, shouldShowOrchestratorBackButton, shouldClearClientOnGoHomeFromChat, shouldClearTaskOnGoHomeFromChat, shouldResetAgentToFirstOnGoHome, shouldClearOrchestratorGlobalContextOnGoHome, shouldUseActiveChatSendHandler, shouldPrefetchAgentsForCatalogNewChat, canOpenMaiaMarketplace, shouldMarkAgentAsLegacyContext, buildLegacyContextAgent, buildLegacyContextMigrationPatch, findOrchestratorAgent, shouldSetChatViewHiddenOnMount, shouldPersistLastActiveChatId, shouldSyncPanelSessionOnPageHide, resolveCachedAgentsIfAvailable, shouldAttemptInitialAgentsFetch, findAgentForChatItem, shouldApplyClientOnHostTakeover, shouldSelectFirstAgentOnHostTakeover, shouldResetChatStateOnGoHome, shouldClearContextForCatalogOrSkillAgent, resolveOpenNewChatWithAgentContext, canContinueLegacyContextInNewChat, resolveSessionRestoreNavRoute, shouldSkipAgentsLoadOnSessionRestore, shouldFetchAgentDetailOnSessionRestore, shouldPassAgentToGetAgentsOnRestore, shouldSelectFetchedAgentAfterRestore, resolveSnapshotChipsProject, resolveChatModalSectionFlags, shouldRenderChatSidebar, resolveChatModalMainContentView, shouldShowChatModalFooter, shouldUseElevatedMaiaPanel, shouldReselectAgentAfterDelete, shouldClearDragPositionOnLayoutChange, shouldStartFloatingPanelDrag, isActiveFloatingDragPointer, shouldOpenSkillsCatalog, shouldUseDragClampFallback, resolveLayoutDragPositionUpdate, resolvePersistedDragPositionOnEnd, buildUserInitialMessageFromStartChat, shouldResetSidebarErrorOnStartChat } from './ChatAIModal.helpers';
|
|
57
56
|
|
|
58
57
|
/** Metadata de la session abierta (emitida por useChatMessages al cargar una conversación). */
|
|
59
58
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
60
59
|
export var ID_MODAL_CHAT_AGENT = 'modals-portal-maia-chat-agent';
|
|
61
60
|
export var ChatAIModal = function ChatAIModal() {
|
|
62
|
-
var _savedSessionOnMountR, _savedSessionOnMountR2,
|
|
61
|
+
var _savedSessionOnMountR, _savedSessionOnMountR2, _savedSessionOnMountR5, _savedSessionOnMountR6;
|
|
63
62
|
var user = useUser();
|
|
64
63
|
var _useTranslation = useTranslation([SECTIONS.abmAgent]),
|
|
65
64
|
i18n = _useTranslation.i18n;
|
|
@@ -83,10 +82,6 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
83
82
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
84
83
|
isMinimized = _useState4[0],
|
|
85
84
|
setIsMinimized = _useState4[1];
|
|
86
|
-
var isMaiaPageRoute = useIsMaiaPageRoute();
|
|
87
|
-
var _getMaiaHostPanelPres = getMaiaHostPanelPresentation(isMinimized, isMaiaPageRoute),
|
|
88
|
-
hidePanelContent = _getMaiaHostPanelPres.hidePanelContent,
|
|
89
|
-
showMinimizedPill = _getMaiaHostPanelPres.showMinimizedPill;
|
|
90
85
|
var setChatViewVisible = useChatsStore(function (state) {
|
|
91
86
|
return state.setChatViewVisible;
|
|
92
87
|
});
|
|
@@ -110,27 +105,15 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
110
105
|
// Monta cerrada salvo restauración de sesión: si el panel no está visible, las respuestas
|
|
111
106
|
// nuevas quedan como no leídas.
|
|
112
107
|
useEffect(function () {
|
|
113
|
-
if (
|
|
108
|
+
if (shouldSetChatViewHiddenOnMount(pendingSessionRestoreRef.current != null)) {
|
|
114
109
|
setChatViewVisible(false);
|
|
115
110
|
}
|
|
116
111
|
}, [setChatViewVisible]);
|
|
117
112
|
|
|
118
|
-
// En /maia el chat fullscreen del sidebar reemplaza al panel flotante; no minimizamos
|
|
119
|
-
// para poder restaurar la misma vista al volver a otra sección de COR.
|
|
120
|
-
useEffect(function () {
|
|
121
|
-
if (isMaiaPageRoute) {
|
|
122
|
-
setChatViewVisible(false);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
if (!isMinimized) {
|
|
126
|
-
setChatViewVisible(true);
|
|
127
|
-
}
|
|
128
|
-
}, [isMaiaPageRoute, isMinimized, setChatViewVisible]);
|
|
129
|
-
|
|
130
113
|
// Persistimos la conversación abierta para poder volver a ella desde el pill después
|
|
131
114
|
// de navegar o refrescar. El takeover desde un host la limpia (va al Home).
|
|
132
115
|
useEffect(function () {
|
|
133
|
-
if (activeChatId) {
|
|
116
|
+
if (shouldPersistLastActiveChatId(activeChatId)) {
|
|
134
117
|
writeLastActiveChatId(user.id, activeChatId);
|
|
135
118
|
}
|
|
136
119
|
}, [activeChatId, user.id]);
|
|
@@ -212,7 +195,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
212
195
|
_useState28 = _slicedToArray(_useState27, 2),
|
|
213
196
|
sidebarHasError = _useState28[0],
|
|
214
197
|
setSidebarHasError = _useState28[1];
|
|
215
|
-
var lang = i18n.language
|
|
198
|
+
var lang = resolveMaiaModalI18nLang(i18n.language);
|
|
216
199
|
moment.locale(lang);
|
|
217
200
|
var _useGlobalContext = useGlobalContext(),
|
|
218
201
|
selectAgent = _useGlobalContext.selectAgent,
|
|
@@ -263,7 +246,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
263
246
|
addSkill = _useGetSkills.addSkill,
|
|
264
247
|
updateSkillInList = _useGetSkills.updateSkillInList,
|
|
265
248
|
removeSkill = _useGetSkills.removeSkill;
|
|
266
|
-
var userHasPermissions = (
|
|
249
|
+
var userHasPermissions = resolveUserHasAgentManagementPermissions(user === null || user === void 0 ? void 0 : user.permissions, Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS));
|
|
267
250
|
var userHasSkillsAccess = canAccessToSkills(user);
|
|
268
251
|
var computedCurrentOption = useMemo(function () {
|
|
269
252
|
return resolveComputedCurrentOption({
|
|
@@ -327,42 +310,42 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
327
310
|
var dragStateRef = useRef(null);
|
|
328
311
|
var clampDragPosition = useCallback(function (x, y) {
|
|
329
312
|
var contentWrapper = contentWrapperRef.current;
|
|
330
|
-
if (
|
|
313
|
+
if (shouldUseDragClampFallback(contentWrapper)) {
|
|
331
314
|
return {
|
|
332
315
|
x: x,
|
|
333
316
|
y: y
|
|
334
317
|
};
|
|
335
318
|
}
|
|
336
|
-
var
|
|
337
|
-
width =
|
|
338
|
-
height =
|
|
319
|
+
var _getBoundingClientRec = contentWrapper.getBoundingClientRect(),
|
|
320
|
+
width = _getBoundingClientRec.width,
|
|
321
|
+
height = _getBoundingClientRec.height;
|
|
339
322
|
return clampFloatingPanelPosition(x, y, width, height, window.innerWidth, window.innerHeight);
|
|
340
323
|
}, []);
|
|
341
324
|
useLayoutEffect(function () {
|
|
342
|
-
if (layoutMode
|
|
325
|
+
if (shouldClearDragPositionOnLayoutChange(layoutMode)) {
|
|
343
326
|
setDragPosition(null);
|
|
344
327
|
return;
|
|
345
328
|
}
|
|
346
329
|
setDragPosition(function (prev) {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
return clampDragPosition(x, pad);
|
|
330
|
+
return resolveLayoutDragPositionUpdate(layoutMode, prev, clampDragPosition, {
|
|
331
|
+
innerWidth: window.innerWidth,
|
|
332
|
+
panelWidth: getMaiaFloatingPanelWidthPx(),
|
|
333
|
+
pad: 16
|
|
334
|
+
});
|
|
353
335
|
});
|
|
354
336
|
}, [layoutMode, clampDragPosition]);
|
|
355
337
|
var handleDragEnd = useCallback(function (event) {
|
|
356
338
|
var _dragStateRef$current;
|
|
357
339
|
endPointerTracking();
|
|
358
|
-
if (((_dragStateRef$current = dragStateRef.current) === null || _dragStateRef$current === void 0 ? void 0 : _dragStateRef$current.pointerId
|
|
340
|
+
if (!isActiveFloatingDragPointer((_dragStateRef$current = dragStateRef.current) === null || _dragStateRef$current === void 0 ? void 0 : _dragStateRef$current.pointerId, event.pointerId)) {
|
|
359
341
|
return;
|
|
360
342
|
}
|
|
361
343
|
dragStateRef.current = null;
|
|
362
344
|
document.body.style.userSelect = '';
|
|
363
345
|
document.body.style.cursor = '';
|
|
364
|
-
|
|
365
|
-
|
|
346
|
+
var contentWrapper = contentWrapperRef.current;
|
|
347
|
+
if (contentWrapper && resolvePersistedDragPositionOnEnd(layoutMode, contentWrapper)) {
|
|
348
|
+
var rect = contentWrapper.getBoundingClientRect();
|
|
366
349
|
patchMaiaPanelSession(user.id, {
|
|
367
350
|
dragPosition: {
|
|
368
351
|
x: rect.left,
|
|
@@ -373,30 +356,26 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
373
356
|
}, [endPointerTracking, layoutMode, user.id]);
|
|
374
357
|
var handleDragMove = useCallback(function (event) {
|
|
375
358
|
var dragState = dragStateRef.current;
|
|
376
|
-
if (!dragState || dragState.pointerId
|
|
359
|
+
if (!dragState || !isActiveFloatingDragPointer(dragState.pointerId, event.pointerId)) {
|
|
377
360
|
return;
|
|
378
361
|
}
|
|
379
362
|
samplePointerMove(event.clientX, event.clientY);
|
|
380
363
|
var nextPosition = clampDragPosition(event.clientX - dragState.offsetX, event.clientY - dragState.offsetY);
|
|
381
364
|
setDragPosition(function (prev) {
|
|
382
|
-
|
|
383
|
-
return prev;
|
|
384
|
-
}
|
|
385
|
-
return nextPosition;
|
|
365
|
+
return resolveNextDragPosition(prev, nextPosition);
|
|
386
366
|
});
|
|
387
367
|
}, [clampDragPosition, samplePointerMove]);
|
|
388
368
|
var resolvedDragPosition = useMemo(function () {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
return clampDragPosition(defaultPosition.x, defaultPosition.y);
|
|
369
|
+
return resolveFloatingPanelDragPosition({
|
|
370
|
+
layoutMode: layoutMode,
|
|
371
|
+
dragPosition: dragPosition,
|
|
372
|
+
viewportWidth: typeof window !== 'undefined' ? window.innerWidth : 0,
|
|
373
|
+
panelWidth: getMaiaFloatingPanelWidthPx(),
|
|
374
|
+
clamp: clampDragPosition
|
|
375
|
+
});
|
|
397
376
|
}, [layoutMode, dragPosition, clampDragPosition]);
|
|
398
377
|
var handleDragStart = useCallback(function (event) {
|
|
399
|
-
if (!isFloating
|
|
378
|
+
if (!shouldStartFloatingPanelDrag(isFloating, event.button)) {
|
|
400
379
|
return;
|
|
401
380
|
}
|
|
402
381
|
var target = event.target;
|
|
@@ -425,36 +404,29 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
425
404
|
startPointerTracking(event.clientX, event.clientY);
|
|
426
405
|
}, [clampDragPosition, isFloating, resolvedDragPosition, startPointerTracking]);
|
|
427
406
|
var startChat = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId, contextData) {
|
|
428
|
-
if (sidebarHasError) {
|
|
407
|
+
if (shouldResetSidebarErrorOnStartChat(sidebarHasError)) {
|
|
429
408
|
setSidebarHasError(false);
|
|
430
409
|
}
|
|
431
410
|
setInitialChatId(null);
|
|
432
411
|
setNewChatKey(function (prev) {
|
|
433
412
|
return prev + 1;
|
|
434
413
|
});
|
|
435
|
-
setUserInitialMessage(
|
|
436
|
-
message: message
|
|
437
|
-
attachments: attachments
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
mentions: mentions
|
|
444
|
-
} : {}), fuaId ? {
|
|
445
|
-
fuaId: fuaId
|
|
446
|
-
} : {}), scId ? {
|
|
447
|
-
scId: scId
|
|
448
|
-
} : {}), contextData ? {
|
|
414
|
+
setUserInitialMessage(buildUserInitialMessageFromStartChat({
|
|
415
|
+
message: message,
|
|
416
|
+
attachments: attachments,
|
|
417
|
+
faqId: faqId,
|
|
418
|
+
agentSuggestionId: agentSuggestionId,
|
|
419
|
+
mentions: mentions,
|
|
420
|
+
fuaId: fuaId,
|
|
421
|
+
scId: scId,
|
|
449
422
|
contextData: contextData
|
|
450
|
-
}
|
|
423
|
+
}));
|
|
451
424
|
handlers.chat();
|
|
452
425
|
}, [handlers, sidebarHasError]);
|
|
453
426
|
var bannerFaqAutoSentRef = useRef(false);
|
|
454
427
|
useEffect(function () {
|
|
455
|
-
var _bannerFaq$faqTitle;
|
|
456
428
|
var bannerFaq = bannerEntryFaq;
|
|
457
|
-
if (!
|
|
429
|
+
if (!bannerFaq || !hasBannerFaqTitle(bannerFaq.faqTitle)) {
|
|
458
430
|
return;
|
|
459
431
|
}
|
|
460
432
|
if (!isBannerFaqReadyToAutoSend({
|
|
@@ -484,9 +456,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
484
456
|
attachments: []
|
|
485
457
|
});
|
|
486
458
|
setInitialChatId(sessionId);
|
|
487
|
-
var selectedAgent = agents.data.
|
|
488
|
-
return agentItem.id === chat.agentId;
|
|
489
|
-
});
|
|
459
|
+
var selectedAgent = findAgentForChatItem(agents.data, chat.agentId);
|
|
490
460
|
if (selectedAgent) {
|
|
491
461
|
selectAgent(selectedAgent);
|
|
492
462
|
}
|
|
@@ -503,15 +473,15 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
503
473
|
}, [user.id]);
|
|
504
474
|
var syncPanelSession = useCallback(function () {
|
|
505
475
|
var _agent$id;
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
isExpanded: true,
|
|
476
|
+
var patch = buildMaiaPanelSessionPatch({
|
|
477
|
+
isMinimized: isMinimized,
|
|
509
478
|
currentOption: currentOption,
|
|
510
479
|
agentsNavActive: sidebarAgentsNavActive,
|
|
511
480
|
activeChatId: activeChatId,
|
|
512
481
|
agentId: (_agent$id = agent === null || agent === void 0 ? void 0 : agent.id) !== null && _agent$id !== void 0 ? _agent$id : null,
|
|
513
482
|
sidebarOpen: sidebarOpenRef.current,
|
|
514
|
-
|
|
483
|
+
layoutMode: layoutMode,
|
|
484
|
+
dragPosition: dragPosition,
|
|
515
485
|
hostContext: {
|
|
516
486
|
section: section,
|
|
517
487
|
project: project,
|
|
@@ -520,21 +490,24 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
520
490
|
chipsProject: chipsProject
|
|
521
491
|
}
|
|
522
492
|
});
|
|
493
|
+
if (!patch) return;
|
|
494
|
+
patchMaiaPanelSession(user.id, patch);
|
|
523
495
|
}, [activeChatId, agent === null || agent === void 0 ? void 0 : agent.id, chipsProject, client, currentOption, dragPosition, isMinimized, layoutMode, project, section, sidebarAgentsNavActive, task, user.id]);
|
|
524
496
|
|
|
525
497
|
/** Los agentes se piden recién al abrir el panel: en modo pill no hace falta ninguna request. */
|
|
526
498
|
var ensureAgentsLoaded = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
527
|
-
var loadedAgents;
|
|
499
|
+
var cachedAgents, loadedAgents, loadedFromFetch;
|
|
528
500
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
529
501
|
while (1) switch (_context.prev = _context.next) {
|
|
530
502
|
case 0:
|
|
531
|
-
|
|
503
|
+
cachedAgents = resolveCachedAgentsIfAvailable(agentsDataRef.current);
|
|
504
|
+
if (!cachedAgents) {
|
|
532
505
|
_context.next = 1;
|
|
533
506
|
break;
|
|
534
507
|
}
|
|
535
|
-
return _context.abrupt("return",
|
|
508
|
+
return _context.abrupt("return", cachedAgents);
|
|
536
509
|
case 1:
|
|
537
|
-
if (agentsFetchedRef.current) {
|
|
510
|
+
if (!shouldAttemptInitialAgentsFetch(agentsDataRef.current.length, agentsFetchedRef.current)) {
|
|
538
511
|
_context.next = 3;
|
|
539
512
|
break;
|
|
540
513
|
}
|
|
@@ -543,11 +516,12 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
543
516
|
return handleGetAgents();
|
|
544
517
|
case 2:
|
|
545
518
|
loadedAgents = _context.sent;
|
|
546
|
-
|
|
519
|
+
loadedFromFetch = resolveCachedAgentsIfAvailable(loadedAgents);
|
|
520
|
+
if (!loadedFromFetch) {
|
|
547
521
|
_context.next = 3;
|
|
548
522
|
break;
|
|
549
523
|
}
|
|
550
|
-
return _context.abrupt("return",
|
|
524
|
+
return _context.abrupt("return", loadedFromFetch);
|
|
551
525
|
case 3:
|
|
552
526
|
return _context.abrupt("return", agentsDataRef.current);
|
|
553
527
|
case 4:
|
|
@@ -569,7 +543,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
569
543
|
}, [isMinimized, syncPanelSession]);
|
|
570
544
|
useEffect(function () {
|
|
571
545
|
var onPageHide = function onPageHide() {
|
|
572
|
-
if (
|
|
546
|
+
if (shouldSyncPanelSessionOnPageHide(isMinimized)) {
|
|
573
547
|
syncPanelSession();
|
|
574
548
|
}
|
|
575
549
|
};
|
|
@@ -583,13 +557,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
583
557
|
var _getChatsStoreState = getChatsStoreState(),
|
|
584
558
|
chats = _getChatsStoreState.chats;
|
|
585
559
|
var lastActiveChatId = readLastActiveChatId(user.id);
|
|
586
|
-
var
|
|
587
|
-
return chat.isRead === false;
|
|
588
|
-
});
|
|
589
|
-
var lastActiveChat = lastActiveChatId ? chats.find(function (chat) {
|
|
590
|
-
return chat.sessionExternalId === lastActiveChatId;
|
|
591
|
-
}) : undefined;
|
|
592
|
-
var target = firstUnread !== null && firstUnread !== void 0 ? firstUnread : lastActiveChat;
|
|
560
|
+
var target = resolveMinimizedRestoreTarget(chats, lastActiveChatId);
|
|
593
561
|
|
|
594
562
|
// Navegar antes de expandir: si esperamos agentes, el panel monta con la sesión vieja y el sidebar queda desfasado.
|
|
595
563
|
if (target) {
|
|
@@ -606,9 +574,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
606
574
|
});
|
|
607
575
|
ensureAgentsLoaded().then(function (loadedAgents) {
|
|
608
576
|
if (target) {
|
|
609
|
-
var selectedAgent = loadedAgents.
|
|
610
|
-
return Number(agentItem.id) === target.agentId;
|
|
611
|
-
});
|
|
577
|
+
var selectedAgent = findAgentForChatItem(loadedAgents, target.agentId);
|
|
612
578
|
if (selectedAgent) {
|
|
613
579
|
selectAgent(selectedAgent);
|
|
614
580
|
}
|
|
@@ -625,8 +591,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
625
591
|
* — eso sólo lo hace el pill (`handleRestoreFromMinimized`).
|
|
626
592
|
*/
|
|
627
593
|
var applyExpandedHostTakeover = useCallback(function (detail) {
|
|
628
|
-
var
|
|
629
|
-
var isGlobalHeaderOpen = detail.section === 'header' || detail.section === 'planner';
|
|
594
|
+
var entityState = resolveHostTakeoverEntityState(detail);
|
|
630
595
|
clearMaiaPanelSession(user.id);
|
|
631
596
|
pendingSessionRestoreRef.current = null;
|
|
632
597
|
setIsRestoringSession(false);
|
|
@@ -649,25 +614,12 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
649
614
|
bannerFaqAutoSentRef.current = false;
|
|
650
615
|
getChatsStoreState().setActiveChatId(null);
|
|
651
616
|
document.dispatchEvent(new CustomEvent('chat-session-changed'));
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
} else {
|
|
656
|
-
setProject === null || setProject === void 0 || setProject(null);
|
|
617
|
+
setProject === null || setProject === void 0 || setProject(entityState.project);
|
|
618
|
+
if (shouldApplyClientOnHostTakeover(entityState.client)) {
|
|
619
|
+
setClient === null || setClient === void 0 || setClient(entityState.client);
|
|
657
620
|
}
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
setClient === null || setClient === void 0 || setClient((_detail$client = detail.client) !== null && _detail$client !== void 0 ? _detail$client : null);
|
|
661
|
-
} else if (isGlobalHeaderOpen) {
|
|
662
|
-
setClient === null || setClient === void 0 || setClient(null);
|
|
663
|
-
}
|
|
664
|
-
if (detail.section === 'task') {
|
|
665
|
-
var _detail$task;
|
|
666
|
-
setTask === null || setTask === void 0 || setTask((_detail$task = detail.task) !== null && _detail$task !== void 0 ? _detail$task : null);
|
|
667
|
-
} else {
|
|
668
|
-
setTask === null || setTask === void 0 || setTask(null);
|
|
669
|
-
}
|
|
670
|
-
if (isGlobalHeaderOpen) {
|
|
621
|
+
setTask === null || setTask === void 0 || setTask(entityState.task);
|
|
622
|
+
if (entityState.clearGlobalPinnedContext) {
|
|
671
623
|
setChipsProject(null);
|
|
672
624
|
clearAgent();
|
|
673
625
|
}
|
|
@@ -677,24 +629,12 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
677
629
|
});
|
|
678
630
|
setLayoutMode(nextLayout);
|
|
679
631
|
setDragPosition(null);
|
|
680
|
-
var hostContext =
|
|
681
|
-
section: detail.section,
|
|
682
|
-
project: detail.section === 'project' || detail.section === 'task' ? (_detail$project2 = detail.project) !== null && _detail$project2 !== void 0 ? _detail$project2 : null : null,
|
|
683
|
-
client: detail.section === 'client' ? (_detail$client2 = detail.client) !== null && _detail$client2 !== void 0 ? _detail$client2 : null : null,
|
|
684
|
-
task: detail.section === 'task' ? (_detail$task2 = detail.task) !== null && _detail$task2 !== void 0 ? _detail$task2 : null : null,
|
|
685
|
-
chipsProject: null
|
|
686
|
-
};
|
|
632
|
+
var hostContext = buildHostTakeoverPersistContext(detail);
|
|
687
633
|
ensureAgentsLoaded().then(function () {
|
|
688
634
|
var _agent$id2;
|
|
689
|
-
var resolvedAgentId = (_agent$id2 = agent === null || agent === void 0 ? void 0 : agent.id) !== null && _agent$id2 !== void 0 ? _agent$id2 : null;
|
|
690
|
-
if (
|
|
691
|
-
|
|
692
|
-
if (firstAgent) {
|
|
693
|
-
selectAgent(firstAgent);
|
|
694
|
-
resolvedAgentId = firstAgent.id;
|
|
695
|
-
} else {
|
|
696
|
-
resolvedAgentId = null;
|
|
697
|
-
}
|
|
635
|
+
var resolvedAgentId = resolveHostTakeoverAgentId(entityState.clearGlobalPinnedContext, agentsDataRef.current, (_agent$id2 = agent === null || agent === void 0 ? void 0 : agent.id) !== null && _agent$id2 !== void 0 ? _agent$id2 : null);
|
|
636
|
+
if (shouldSelectFirstAgentOnHostTakeover(entityState.clearGlobalPinnedContext, agentsDataRef.current[0])) {
|
|
637
|
+
selectAgent(agentsDataRef.current[0]);
|
|
698
638
|
}
|
|
699
639
|
patchMaiaPanelSession(user.id, {
|
|
700
640
|
isExpanded: true,
|
|
@@ -721,39 +661,36 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
721
661
|
setIsStreaming(streaming);
|
|
722
662
|
setIsWriting(writing);
|
|
723
663
|
}, []);
|
|
724
|
-
var handleSendMessage = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId
|
|
664
|
+
var handleSendMessage = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId) {
|
|
725
665
|
if (sidebarHasError) {
|
|
726
666
|
setSidebarHasError(false);
|
|
727
667
|
}
|
|
728
|
-
if (
|
|
729
|
-
sendMessageFunction(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId
|
|
668
|
+
if (shouldUseActiveChatSendHandler(computedCurrentOption, options.chat, Boolean(sendMessageFunction))) {
|
|
669
|
+
sendMessageFunction === null || sendMessageFunction === void 0 || sendMessageFunction(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId);
|
|
730
670
|
} else {
|
|
731
|
-
startChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId
|
|
671
|
+
startChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId);
|
|
732
672
|
}
|
|
733
673
|
}, [sendMessageFunction, startChat, computedCurrentOption, sidebarHasError]);
|
|
734
674
|
var handleGoHome = useCallback(function () {
|
|
735
675
|
// Si estamos en una conversación y vamos a home, resetear initialChatId y incrementar newChatKey
|
|
736
|
-
if (currentOption
|
|
676
|
+
if (shouldResetChatStateOnGoHome(currentOption, options.chat)) {
|
|
737
677
|
// No cortamos la generación: la sesión sigue respondiendo en background.
|
|
738
678
|
setInitialChatId(null);
|
|
739
679
|
setNewChatKey(function (prev) {
|
|
740
680
|
return prev + 1;
|
|
741
681
|
});
|
|
742
682
|
setIsWriting(false);
|
|
743
|
-
|
|
744
|
-
if ((agent === null || agent === void 0 ? void 0 : agent.entity) !== 'client') {
|
|
683
|
+
if (shouldClearClientOnGoHomeFromChat(agent === null || agent === void 0 ? void 0 : agent.entity)) {
|
|
745
684
|
setClient === null || setClient === void 0 || setClient(null);
|
|
746
685
|
}
|
|
747
|
-
if (section
|
|
686
|
+
if (shouldClearTaskOnGoHomeFromChat(section)) {
|
|
748
687
|
setTask === null || setTask === void 0 || setTask(null);
|
|
749
688
|
}
|
|
750
689
|
}
|
|
751
|
-
if ((
|
|
690
|
+
if (shouldResetAgentToFirstOnGoHome(agent, agents.data.length)) {
|
|
752
691
|
selectAgent(agents.data[0]);
|
|
753
692
|
}
|
|
754
|
-
|
|
755
|
-
// (lista de contextos recientes), por lo que hay que limpiar todo el contexto pineado.
|
|
756
|
-
if (isGlobalMaiaSection(section) && (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator') {
|
|
693
|
+
if (shouldClearOrchestratorGlobalContextOnGoHome(section, agent === null || agent === void 0 ? void 0 : agent.type)) {
|
|
757
694
|
setProject(null);
|
|
758
695
|
setClient === null || setClient === void 0 || setClient(null);
|
|
759
696
|
setTask === null || setTask === void 0 || setTask(null);
|
|
@@ -765,13 +702,11 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
765
702
|
}, [options.home, options.chat, currentOption, isWebSearchActive, toggleWebSearch, agent, agents, selectAgent, setProject, setClient, setTask, stopGenerationFunction, section]);
|
|
766
703
|
goHomeRef.current = handleGoHome;
|
|
767
704
|
var startNewChatFromCatalog = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
768
|
-
var
|
|
705
|
+
var agentsList, firstAgent, _t;
|
|
769
706
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
770
707
|
while (1) switch (_context2.prev = _context2.next) {
|
|
771
708
|
case 0:
|
|
772
|
-
|
|
773
|
-
fromMySkills = computedCurrentOption === options.mySkills;
|
|
774
|
-
if (!(fromMyAgents || fromMySkills)) {
|
|
709
|
+
if (!shouldPrefetchAgentsForCatalogNewChat(computedCurrentOption, options.myAgents, options.mySkills)) {
|
|
775
710
|
_context2.next = 2;
|
|
776
711
|
break;
|
|
777
712
|
}
|
|
@@ -786,7 +721,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
786
721
|
case 3:
|
|
787
722
|
agentsList = _t;
|
|
788
723
|
firstAgent = agentsList[0];
|
|
789
|
-
if (firstAgent) {
|
|
724
|
+
if (shouldClearContextForCatalogOrSkillAgent(firstAgent)) {
|
|
790
725
|
setProject(null);
|
|
791
726
|
setClient === null || setClient === void 0 || setClient(null);
|
|
792
727
|
setTask === null || setTask === void 0 || setTask(null);
|
|
@@ -808,10 +743,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
808
743
|
}, _callee2);
|
|
809
744
|
})), [agents.data, computedCurrentOption, ensureAgentsLoaded, isWebSearchActive, selectAgent, setClient, setProject, setTask, toggleWebSearch]);
|
|
810
745
|
var handleStartNewChat = useCallback(function () {
|
|
811
|
-
|
|
812
|
-
var fromMySkills = computedCurrentOption === options.mySkills;
|
|
813
|
-
var fromMaiakerHome = computedCurrentOption === options.home && isMaiakerAgentSelected;
|
|
814
|
-
if (fromMyAgents || fromMySkills || fromMaiakerHome) {
|
|
746
|
+
if (shouldStartNewChatFromCatalog(computedCurrentOption, isMaiakerAgentSelected)) {
|
|
815
747
|
startNewChatFromCatalog()["catch"](function () {
|
|
816
748
|
return undefined;
|
|
817
749
|
});
|
|
@@ -851,7 +783,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
851
783
|
});
|
|
852
784
|
|
|
853
785
|
// Desde el chat → nueva conversación SIN borrar el contexto pineado, volviendo al home.
|
|
854
|
-
if (computedCurrentOption
|
|
786
|
+
if (shouldBackStartNewChatPreservingContext(computedCurrentOption, options.chat)) {
|
|
855
787
|
// No cortamos la generación: la sesión sigue respondiendo en background.
|
|
856
788
|
setIsWriting(false);
|
|
857
789
|
setUserInitialMessage({
|
|
@@ -870,7 +802,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
870
802
|
}
|
|
871
803
|
|
|
872
804
|
// Home paso 2 (contexto pineado) → limpiar el contexto y volver al paso 1 (contextos recientes).
|
|
873
|
-
if (computedCurrentOption
|
|
805
|
+
if (shouldBackClearPinnedContext(computedCurrentOption, options.home, section, didResetContextInSection)) {
|
|
874
806
|
setProject(null);
|
|
875
807
|
setClient === null || setClient === void 0 || setClient(null);
|
|
876
808
|
setTask === null || setTask === void 0 || setTask(null);
|
|
@@ -882,10 +814,15 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
882
814
|
// orchestrator (p. ej. al reseleccionar MAIA en el listado). Solo la transición cuenta, así una
|
|
883
815
|
// apertura fresca (contexto pineado desde la sección) no lo activa.
|
|
884
816
|
useEffect(function () {
|
|
885
|
-
var pinned =
|
|
817
|
+
var pinned = resolveHasPinnedContext({
|
|
818
|
+
taskId: task === null || task === void 0 ? void 0 : task.id,
|
|
819
|
+
chipsProjectId: chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId,
|
|
820
|
+
clientId: client === null || client === void 0 ? void 0 : client.id,
|
|
821
|
+
projectId: project === null || project === void 0 ? void 0 : project.id
|
|
822
|
+
});
|
|
886
823
|
var wasPinned = prevHasPinnedContextRef.current;
|
|
887
824
|
prevHasPinnedContextRef.current = pinned;
|
|
888
|
-
if (
|
|
825
|
+
if (shouldMarkOrchestratorContextReset(section, agent === null || agent === void 0 ? void 0 : agent.type, wasPinned, pinned)) {
|
|
889
826
|
setDidResetContextInSection(true);
|
|
890
827
|
}
|
|
891
828
|
}, [task === null || task === void 0 ? void 0 : task.id, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId, client === null || client === void 0 ? void 0 : client.id, project === null || project === void 0 ? void 0 : project.id, section, agent === null || agent === void 0 ? void 0 : agent.type]);
|
|
@@ -984,15 +921,16 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
984
921
|
* se mantiene el comportamiento original de limpiar project/client. */
|
|
985
922
|
useEffect(function () {
|
|
986
923
|
var openNewChatWithAgent = function openNewChatWithAgent(event) {
|
|
987
|
-
var _detail$project3, _detail$client3;
|
|
988
924
|
var _ref7 = event,
|
|
989
925
|
detail = _ref7.detail;
|
|
990
926
|
var nextAgent = detail === null || detail === void 0 ? void 0 : detail.agent;
|
|
991
927
|
if (!nextAgent) return;
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
928
|
+
var contextPatch = resolveOpenNewChatWithAgentContext(detail !== null && detail !== void 0 ? detail : {});
|
|
929
|
+
setProject(contextPatch.project);
|
|
930
|
+
setClient === null || setClient === void 0 || setClient(contextPatch.client);
|
|
931
|
+
if (contextPatch.shouldSetTask) {
|
|
932
|
+
var _contextPatch$task;
|
|
933
|
+
setTask === null || setTask === void 0 || setTask((_contextPatch$task = contextPatch.task) !== null && _contextPatch$task !== void 0 ? _contextPatch$task : null);
|
|
996
934
|
}
|
|
997
935
|
selectAgent(nextAgent);
|
|
998
936
|
setHasError(false);
|
|
@@ -1017,7 +955,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1017
955
|
});
|
|
1018
956
|
case 1:
|
|
1019
957
|
firstAgent = _context4.sent;
|
|
1020
|
-
if (firstAgent) {
|
|
958
|
+
if (shouldClearContextForCatalogOrSkillAgent(firstAgent)) {
|
|
1021
959
|
setProject(null);
|
|
1022
960
|
setClient === null || setClient === void 0 || setClient(null);
|
|
1023
961
|
setTask === null || setTask === void 0 || setTask(null);
|
|
@@ -1089,17 +1027,19 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1089
1027
|
// Marca el agente de la conversación legacy para que header, selector y avatar muestren el logo
|
|
1090
1028
|
// MAIA y el nombre tachado (agente obsoleto), sin depender del `type` resuelto de la sesión vieja.
|
|
1091
1029
|
useEffect(function () {
|
|
1092
|
-
if (legacyContextSession
|
|
1093
|
-
selectAgent(
|
|
1094
|
-
is_legacy_context: true
|
|
1095
|
-
}));
|
|
1030
|
+
if (shouldMarkAgentAsLegacyContext(legacyContextSession, agent)) {
|
|
1031
|
+
selectAgent(buildLegacyContextAgent(agent));
|
|
1096
1032
|
}
|
|
1097
1033
|
}, [legacyContextSession, agent, selectAgent]);
|
|
1098
1034
|
|
|
1099
1035
|
// Abre un chat nuevo con el orchestrator seteando el contexto del clone legacy (mismo criterio
|
|
1100
1036
|
// que clickear un contexto reciente en el home → paso 2 con FAQs/acciones de ese contexto).
|
|
1101
1037
|
var handleContinueLegacyContextInNewChat = useCallback(function () {
|
|
1102
|
-
|
|
1038
|
+
var _buildLegacyContextMi;
|
|
1039
|
+
var orchestrator = findOrchestratorAgent(agents.data);
|
|
1040
|
+
if (!canContinueLegacyContextInNewChat(sessionMeta, orchestrator) || !sessionMeta || !orchestrator) {
|
|
1041
|
+
return;
|
|
1042
|
+
}
|
|
1103
1043
|
var agentEntity = sessionMeta.agentEntity,
|
|
1104
1044
|
pId = sessionMeta.projectId,
|
|
1105
1045
|
pName = sessionMeta.projectName,
|
|
@@ -1107,12 +1047,20 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1107
1047
|
cName = sessionMeta.clientName,
|
|
1108
1048
|
tId = sessionMeta.taskId,
|
|
1109
1049
|
tName = sessionMeta.taskName;
|
|
1110
|
-
var
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1050
|
+
var migrationPatch = (_buildLegacyContextMi = buildLegacyContextMigrationPatch({
|
|
1051
|
+
agentEntity: agentEntity,
|
|
1052
|
+
projectId: pId,
|
|
1053
|
+
projectName: pName,
|
|
1054
|
+
clientId: cId,
|
|
1055
|
+
clientName: cName,
|
|
1056
|
+
taskId: tId,
|
|
1057
|
+
taskName: tName
|
|
1058
|
+
})) !== null && _buildLegacyContextMi !== void 0 ? _buildLegacyContextMi : {
|
|
1059
|
+
task: null,
|
|
1060
|
+
project: null,
|
|
1061
|
+
client: null,
|
|
1062
|
+
chipsProject: null
|
|
1063
|
+
};
|
|
1116
1064
|
setIsWriting(false);
|
|
1117
1065
|
setUserInitialMessage({
|
|
1118
1066
|
message: '',
|
|
@@ -1123,89 +1071,71 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1123
1071
|
return prev + 1;
|
|
1124
1072
|
});
|
|
1125
1073
|
setHasError(false);
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
setClient === null || setClient === void 0 || setClient(null);
|
|
1131
|
-
setChipsProject(null);
|
|
1132
|
-
if (agentEntity === 'client' && cId != null) {
|
|
1133
|
-
setClient === null || setClient === void 0 || setClient({
|
|
1134
|
-
id: cId,
|
|
1135
|
-
name: cName || ''
|
|
1136
|
-
});
|
|
1137
|
-
} else if (agentEntity === 'project' && pId != null) {
|
|
1138
|
-
setProject(_objectSpread({
|
|
1139
|
-
id: pId,
|
|
1140
|
-
name: pName || ''
|
|
1141
|
-
}, cId != null ? {
|
|
1142
|
-
clientId: cId,
|
|
1143
|
-
client: {
|
|
1144
|
-
id: cId,
|
|
1145
|
-
name: cName || ''
|
|
1146
|
-
}
|
|
1147
|
-
} : {}));
|
|
1148
|
-
setChipsProject({
|
|
1149
|
-
projectId: String(pId),
|
|
1150
|
-
projectName: pName || '',
|
|
1151
|
-
clientName: cName || ''
|
|
1152
|
-
});
|
|
1153
|
-
} else if (agentEntity === 'task' && tId != null) {
|
|
1154
|
-
setTask === null || setTask === void 0 || setTask(_objectSpread(_objectSpread({
|
|
1155
|
-
id: tId,
|
|
1156
|
-
name: tName || ''
|
|
1157
|
-
}, pId != null ? {
|
|
1158
|
-
projectId: pId
|
|
1159
|
-
} : {}), cId != null ? {
|
|
1160
|
-
clientId: cId
|
|
1161
|
-
} : {}));
|
|
1162
|
-
if (cId != null) setClient === null || setClient === void 0 || setClient({
|
|
1163
|
-
id: cId,
|
|
1164
|
-
name: cName || ''
|
|
1165
|
-
});
|
|
1166
|
-
if (pId != null) {
|
|
1167
|
-
setProject(_objectSpread({
|
|
1168
|
-
id: pId,
|
|
1169
|
-
name: pName || ''
|
|
1170
|
-
}, cId != null ? {
|
|
1171
|
-
clientId: cId,
|
|
1172
|
-
client: {
|
|
1173
|
-
id: cId,
|
|
1174
|
-
name: cName || ''
|
|
1175
|
-
}
|
|
1176
|
-
} : {}));
|
|
1177
|
-
setChipsProject({
|
|
1178
|
-
projectId: String(pId),
|
|
1179
|
-
projectName: pName || '',
|
|
1180
|
-
clientName: cName || ''
|
|
1181
|
-
});
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1074
|
+
setTask === null || setTask === void 0 || setTask(migrationPatch.task);
|
|
1075
|
+
setProject(migrationPatch.project);
|
|
1076
|
+
setClient === null || setClient === void 0 || setClient(migrationPatch.client);
|
|
1077
|
+
setChipsProject(migrationPatch.chipsProject);
|
|
1184
1078
|
selectAgent(orchestrator);
|
|
1185
1079
|
setSessionMeta(null);
|
|
1186
1080
|
setCurrentOption(options.home);
|
|
1187
1081
|
document.dispatchEvent(new CustomEvent('chat-session-changed'));
|
|
1188
1082
|
}, [sessionMeta, agents.data, selectAgent, setClient, setProject, setTask, setChipsProject, stopGenerationFunction]);
|
|
1189
|
-
var
|
|
1190
|
-
|
|
1191
|
-
|
|
1083
|
+
var _useMemo = useMemo(function () {
|
|
1084
|
+
return resolveChatModalSectionFlags(computedCurrentOption, isMaiakerAgentSelected);
|
|
1085
|
+
}, [computedCurrentOption, isMaiakerAgentSelected]),
|
|
1086
|
+
showNewChat = _useMemo.showNewChat,
|
|
1087
|
+
isMyAgentsSection = _useMemo.isMyAgentsSection,
|
|
1088
|
+
isMySkillsSection = _useMemo.isMySkillsSection,
|
|
1089
|
+
isMaiakerCreatorHome = _useMemo.isMaiakerCreatorHome;
|
|
1090
|
+
var hasChatAccess = validateAccessByFeature(section, user);
|
|
1091
|
+
var mainContentView = resolveChatModalMainContentView(hasError, hasChatAccess);
|
|
1092
|
+
var showModalFooter = shouldShowChatModalFooter({
|
|
1093
|
+
computedCurrentOption: computedCurrentOption,
|
|
1094
|
+
homeOption: options.home,
|
|
1095
|
+
chatOption: options.chat,
|
|
1096
|
+
agentsCount: agents.data.length,
|
|
1097
|
+
isMaiakerCreatorHome: isMaiakerCreatorHome,
|
|
1098
|
+
hasError: hasError,
|
|
1099
|
+
loading: loading,
|
|
1100
|
+
hasAccess: hasChatAccess
|
|
1101
|
+
});
|
|
1102
|
+
var showSidebar = shouldRenderChatSidebar(hasChatAccess, isFloating);
|
|
1192
1103
|
|
|
1193
1104
|
// Botón "volver": solo para el orchestrator.
|
|
1194
1105
|
// - En el chat: disponible en todas las secciones (header y project/client/task).
|
|
1195
1106
|
// - En el home paso 2 (FAQs/FUAs con contexto pineado): en el header siempre; en
|
|
1196
1107
|
// project/client/task solo si el usuario reinició el contexto (pasó por el selector de
|
|
1197
1108
|
// contextos recientes). En el paso 1 (sin contexto) NO se muestra.
|
|
1198
|
-
var hasPinnedContext =
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1109
|
+
var hasPinnedContext = resolveHasPinnedContext({
|
|
1110
|
+
taskId: task === null || task === void 0 ? void 0 : task.id,
|
|
1111
|
+
chipsProjectId: chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId,
|
|
1112
|
+
clientId: client === null || client === void 0 ? void 0 : client.id,
|
|
1113
|
+
projectId: project === null || project === void 0 ? void 0 : project.id
|
|
1114
|
+
});
|
|
1115
|
+
var _resolveOrchestratorH = resolveOrchestratorHomeNavFlags({
|
|
1116
|
+
computedCurrentOption: computedCurrentOption,
|
|
1117
|
+
homeOption: options.home,
|
|
1118
|
+
chatOption: options.chat,
|
|
1119
|
+
hasPinnedContext: hasPinnedContext,
|
|
1120
|
+
section: section,
|
|
1121
|
+
didResetContextInSection: didResetContextInSection
|
|
1122
|
+
}),
|
|
1123
|
+
isChatView = _resolveOrchestratorH.isChatView,
|
|
1124
|
+
isHeaderHomeStep2 = _resolveOrchestratorH.isHeaderHomeStep2,
|
|
1125
|
+
isSectionResetHomeStep2 = _resolveOrchestratorH.isSectionResetHomeStep2;
|
|
1126
|
+
var showBackButton = shouldShowOrchestratorBackButton({
|
|
1127
|
+
agentType: agent === null || agent === void 0 ? void 0 : agent.type,
|
|
1128
|
+
hasError: hasError,
|
|
1129
|
+
loading: loading,
|
|
1130
|
+
isChatView: isChatView,
|
|
1131
|
+
isHeaderHomeStep2: isHeaderHomeStep2,
|
|
1132
|
+
isSectionResetHomeStep2: isSectionResetHomeStep2
|
|
1133
|
+
});
|
|
1204
1134
|
var handleOpenMarketplace = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
1205
1135
|
return _regeneratorRuntime.wrap(function (_context5) {
|
|
1206
1136
|
while (1) switch (_context5.prev = _context5.next) {
|
|
1207
1137
|
case 0:
|
|
1208
|
-
if (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
|
|
1138
|
+
if (canOpenMaiaMarketplace(Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS))) {
|
|
1209
1139
|
_context5.next = 1;
|
|
1210
1140
|
break;
|
|
1211
1141
|
}
|
|
@@ -1229,7 +1159,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1229
1159
|
}, _callee5);
|
|
1230
1160
|
})), [clearAgent, ensureAgentsLoaded, user.id]);
|
|
1231
1161
|
var handleOpenSkills = useCallback(function () {
|
|
1232
|
-
if (!
|
|
1162
|
+
if (!shouldOpenSkillsCatalog(userHasSkillsAccess)) {
|
|
1233
1163
|
return;
|
|
1234
1164
|
}
|
|
1235
1165
|
clearAgent();
|
|
@@ -1240,7 +1170,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1240
1170
|
agentsNavActive: 'mySkills',
|
|
1241
1171
|
currentOption: options.mySkills
|
|
1242
1172
|
});
|
|
1243
|
-
}, [clearAgent, handleGetSkills, user]);
|
|
1173
|
+
}, [clearAgent, handleGetSkills, user.id, userHasSkillsAccess]);
|
|
1244
1174
|
var handleGoToMaiaker = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
1245
1175
|
var maiakerAgent, response, data, _t2;
|
|
1246
1176
|
return _regeneratorRuntime.wrap(function (_context6) {
|
|
@@ -1305,13 +1235,13 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1305
1235
|
return _regeneratorRuntime.wrap(function (_context7) {
|
|
1306
1236
|
while (1) switch (_context7.prev = _context7.next) {
|
|
1307
1237
|
case 0:
|
|
1308
|
-
if (!(snapshot.agentsNavActive
|
|
1238
|
+
if (!shouldSkipAgentsLoadOnSessionRestore(snapshot.agentsNavActive)) {
|
|
1309
1239
|
_context7.next = 1;
|
|
1310
1240
|
break;
|
|
1311
1241
|
}
|
|
1312
1242
|
return _context7.abrupt("return");
|
|
1313
1243
|
case 1:
|
|
1314
|
-
if (!(snapshot.agentId
|
|
1244
|
+
if (!shouldFetchAgentDetailOnSessionRestore(snapshot.agentId, snapshot.agentsNavActive)) {
|
|
1315
1245
|
_context7.next = 5;
|
|
1316
1246
|
break;
|
|
1317
1247
|
}
|
|
@@ -1333,11 +1263,11 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1333
1263
|
}
|
|
1334
1264
|
agentsFetchedRef.current = true;
|
|
1335
1265
|
_context7.next = 6;
|
|
1336
|
-
return handleGetAgents(snapshot.agentsNavActive
|
|
1266
|
+
return handleGetAgents(shouldPassAgentToGetAgentsOnRestore(snapshot.agentsNavActive) ? agentToSelect : undefined);
|
|
1337
1267
|
case 6:
|
|
1338
1268
|
return _context7.abrupt("return");
|
|
1339
1269
|
case 7:
|
|
1340
|
-
if (agentToSelect
|
|
1270
|
+
if (shouldSelectFetchedAgentAfterRestore(agentToSelect, snapshot.agentsNavActive)) {
|
|
1341
1271
|
selectAgent(agentToSelect);
|
|
1342
1272
|
}
|
|
1343
1273
|
case 8:
|
|
@@ -1352,16 +1282,18 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1352
1282
|
}(), [handleGetAgents, selectAgent]);
|
|
1353
1283
|
var applySessionRestore = useCallback(/*#__PURE__*/function () {
|
|
1354
1284
|
var _ref12 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee8(snapshot) {
|
|
1355
|
-
var _snapshot$
|
|
1285
|
+
var chipsProjectFromSnapshot, restoreRoute, _snapshot$activeChatI, _snapshot$activeChatI2;
|
|
1356
1286
|
return _regeneratorRuntime.wrap(function (_context8) {
|
|
1357
1287
|
while (1) switch (_context8.prev = _context8.next) {
|
|
1358
1288
|
case 0:
|
|
1359
1289
|
setIsMinimized(false);
|
|
1360
1290
|
setChatViewVisible(true);
|
|
1361
|
-
|
|
1362
|
-
|
|
1291
|
+
chipsProjectFromSnapshot = resolveSnapshotChipsProject(snapshot.hostContext);
|
|
1292
|
+
if (chipsProjectFromSnapshot) {
|
|
1293
|
+
setChipsProject(chipsProjectFromSnapshot);
|
|
1363
1294
|
}
|
|
1364
|
-
|
|
1295
|
+
restoreRoute = resolveSessionRestoreNavRoute(snapshot);
|
|
1296
|
+
if (!(restoreRoute === 'myAgents')) {
|
|
1365
1297
|
_context8.next = 2;
|
|
1366
1298
|
break;
|
|
1367
1299
|
}
|
|
@@ -1372,7 +1304,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1372
1304
|
syncPanelSession();
|
|
1373
1305
|
return _context8.abrupt("return");
|
|
1374
1306
|
case 2:
|
|
1375
|
-
if (!(
|
|
1307
|
+
if (!(restoreRoute === 'mySkills')) {
|
|
1376
1308
|
_context8.next = 3;
|
|
1377
1309
|
break;
|
|
1378
1310
|
}
|
|
@@ -1381,7 +1313,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1381
1313
|
syncPanelSession();
|
|
1382
1314
|
return _context8.abrupt("return");
|
|
1383
1315
|
case 3:
|
|
1384
|
-
if (!(
|
|
1316
|
+
if (!(restoreRoute === 'maiaker')) {
|
|
1385
1317
|
_context8.next = 5;
|
|
1386
1318
|
break;
|
|
1387
1319
|
}
|
|
@@ -1392,16 +1324,16 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1392
1324
|
syncPanelSession();
|
|
1393
1325
|
return _context8.abrupt("return");
|
|
1394
1326
|
case 5:
|
|
1395
|
-
if (
|
|
1327
|
+
if (restoreRoute === 'chat') {
|
|
1396
1328
|
setUserInitialMessage({
|
|
1397
1329
|
message: '',
|
|
1398
1330
|
attachments: []
|
|
1399
1331
|
});
|
|
1400
|
-
setInitialChatId(snapshot.activeChatId);
|
|
1401
|
-
getChatsStoreState().setActiveChatId(snapshot.activeChatId);
|
|
1332
|
+
setInitialChatId((_snapshot$activeChatI = snapshot.activeChatId) !== null && _snapshot$activeChatI !== void 0 ? _snapshot$activeChatI : null);
|
|
1333
|
+
getChatsStoreState().setActiveChatId((_snapshot$activeChatI2 = snapshot.activeChatId) !== null && _snapshot$activeChatI2 !== void 0 ? _snapshot$activeChatI2 : null);
|
|
1402
1334
|
document.dispatchEvent(new CustomEvent('chat-session-changed'));
|
|
1403
1335
|
handlers.chat();
|
|
1404
|
-
} else if (
|
|
1336
|
+
} else if (restoreRoute === 'savedOption' && snapshot.currentOption) {
|
|
1405
1337
|
setCurrentOption(snapshot.currentOption);
|
|
1406
1338
|
}
|
|
1407
1339
|
focusChatInput();
|
|
@@ -1453,16 +1385,12 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1453
1385
|
}, [applySessionRestore, loadAgentsForSessionRestore, setChatViewVisible]);
|
|
1454
1386
|
var handleDeleteAgentFromMyAgents = useCallback(function (agentId) {
|
|
1455
1387
|
removeAgent(agentId);
|
|
1456
|
-
if ((agent === null || agent === void 0 ? void 0 : agent.id
|
|
1388
|
+
if (shouldReselectAgentAfterDelete(agent === null || agent === void 0 ? void 0 : agent.id, agentId)) {
|
|
1457
1389
|
selectFirstAgent(agentId);
|
|
1458
1390
|
}
|
|
1459
1391
|
}, [agent === null || agent === void 0 ? void 0 : agent.id, removeAgent, selectFirstAgent]);
|
|
1460
|
-
|
|
1461
|
-
// El footer (input) se oculta solo en el home marketplace de Maiaker (browse de agentes).
|
|
1462
|
-
// El home del orchestrator sí permite escribir, así que mantiene el footer.
|
|
1463
|
-
var isMaiakerCreatorHome = computedCurrentOption === options.home && isMaiakerAgentSelected;
|
|
1464
1392
|
var modalPanel = /*#__PURE__*/_jsxs(_Fragment, {
|
|
1465
|
-
children: [
|
|
1393
|
+
children: [showSidebar ? /*#__PURE__*/_jsx(Sidebar, {
|
|
1466
1394
|
onGoToChat: goToChat,
|
|
1467
1395
|
onError: function onError() {
|
|
1468
1396
|
return setSidebarHasError(true);
|
|
@@ -1506,7 +1434,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1506
1434
|
isMaiakerSection: isMaiakerCreatorHome,
|
|
1507
1435
|
showBackButton: showBackButton,
|
|
1508
1436
|
onBack: handleBack
|
|
1509
|
-
}),
|
|
1437
|
+
}), mainContentView === 'error' ? /*#__PURE__*/_jsx(MAIAError, {}) : mainContentView === 'chat' ? /*#__PURE__*/_jsx(ChatAIContent, {
|
|
1510
1438
|
currentOption: computedCurrentOption,
|
|
1511
1439
|
handlers: _objectSpread(_objectSpread({}, handlers), {}, {
|
|
1512
1440
|
chat: startChat,
|
|
@@ -1541,7 +1469,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1541
1469
|
isRestoringSession: isRestoringSession
|
|
1542
1470
|
}) : /*#__PURE__*/_jsx(ProjectSummaryContent, {
|
|
1543
1471
|
onRestartSummary: handlers.home
|
|
1544
|
-
}),
|
|
1472
|
+
}), showModalFooter && /*#__PURE__*/_jsx(ChatAiModalFooter, {
|
|
1545
1473
|
agent: agent,
|
|
1546
1474
|
handleSendMessage: handleSendMessage,
|
|
1547
1475
|
handleStopGeneration: stopGenerationFunction,
|
|
@@ -1566,16 +1494,16 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1566
1494
|
expanded: expanded,
|
|
1567
1495
|
layoutMode: layoutMode,
|
|
1568
1496
|
dragPosition: resolvedDragPosition,
|
|
1569
|
-
elevated: section
|
|
1570
|
-
$minimized:
|
|
1497
|
+
elevated: shouldUseElevatedMaiaPanel(section),
|
|
1498
|
+
$minimized: isMinimized,
|
|
1571
1499
|
children: [/*#__PURE__*/_jsx(SCCAIMMinimizedHide, {
|
|
1572
|
-
$hidden:
|
|
1500
|
+
$hidden: isMinimized,
|
|
1573
1501
|
children: /*#__PURE__*/_jsx(FloatingPanelMotion, {
|
|
1574
1502
|
tilt: tiltMotion,
|
|
1575
1503
|
expanded: expanded,
|
|
1576
1504
|
children: contentWrapper
|
|
1577
1505
|
})
|
|
1578
|
-
}),
|
|
1506
|
+
}), isMinimized && /*#__PURE__*/_jsx(MaiaMinimizedPill, {
|
|
1579
1507
|
showNoveltyDot: showMinimizedNoveltyDot,
|
|
1580
1508
|
isStreaming: hasActiveStream,
|
|
1581
1509
|
onRestore: handleRestoreFromMinimized
|
|
@@ -1592,4 +1520,4 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1592
1520
|
}), userHasSkillsAccess && /*#__PURE__*/_jsx(AbmSkillGenerateModal, {}), /*#__PURE__*/_jsx(Snackbar, {})]
|
|
1593
1521
|
}), selector);
|
|
1594
1522
|
};
|
|
1595
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9Ta2lsbHMiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsIkFibVNraWxsR2VuZXJhdGVNb2RhbCIsIlNFQ1RJT05TIiwiU0NDQUlNQ29udGVudCIsIlNDQ0FJTUNvbnRlbnRXcmFwcGVyIiwiU0NDQUlNTWluaW1pemVkSGlkZSIsIlNDQ0FJTVdyYXBwZXIiLCJNYWlhTWluaW1pemVkUGlsbCIsInVzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90IiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJjbGFtcEZsb2F0aW5nUGFuZWxQb3NpdGlvbiIsImRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0IiwiZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UiLCJnZXRNYWlhSG9zdFBhbmVsUHJlc2VudGF0aW9uIiwiaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YSIsImlzQmFubmVyRmFxUmVhZHlUb0F1dG9TZW5kIiwiaXNHbG9iYWxNYWlhU2VjdGlvbiIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJyZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uIiwicmVzb2x2ZURlZmF1bHRGbG9hdGluZ1BhbmVsUG9zaXRpb24iLCJyZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24iLCJyZXNvbHZlTGVnYWN5Q29udGV4dFNlc3Npb24iLCJyZXNvbHZlU2lkZWJhckFnZW50c05hdkFjdGl2ZSIsInNob3VsZFJlc3RvcmVFeHBhbmRlZFBhbmVsIiwic2hvdWxkU2tpcEZsb2F0aW5nRHJhZ1RhcmdldCIsInZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlIiwiRmxvYXRpbmdQYW5lbE1vdGlvbiIsInVzZUZsb2F0aW5nUGFuZWxEcmFnVGlsdCIsIkNoYXRBaU1vZGFsRm9vdGVyIiwiaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQiLCJ1c2VGYXFzU3RvcmUiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJ1c2VDaGF0c1N0b3JlIiwicmVhZExhc3RBY3RpdmVDaGF0SWQiLCJ3cml0ZUxhc3RBY3RpdmVDaGF0SWQiLCJjbGVhck1haWFQYW5lbFNlc3Npb24iLCJpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJ3cml0ZU1haWFQYW5lbFNlc3Npb24iLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZmV0Y2hNYWlhIiwiZmV0Y2hBZ2VudERldGFpbCIsIm1hcENPUkxhbmciLCJFVkVOVFMiLCJ1c2VFdmVudCIsIk1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQiLCJ1c2VJc01haWFQYWdlUm91dGUiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJJRF9NT0RBTF9DSEFUX0FHRU5UIiwiQ2hhdEFJTW9kYWwiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIyIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJfdXNlciRwZXJtaXNzaW9uczIiLCJfdXNlciRwZXJtaXNzaW9uczMiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI1IiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNiIsIl9hZ2VudHMkZGF0YSIsInVzZXIiLCJfdXNlVHJhbnNsYXRpb24iLCJhYm1BZ2VudCIsImkxOG4iLCJhbXBsaXR1ZEV2ZW50Iiwic2F2ZWRTZXNzaW9uT25Nb3VudFJlZiIsImlkIiwic2hvdWxkUmVzdG9yZUV4cGFuZGVkIiwiY3VycmVudCIsInBlbmRpbmdTZXNzaW9uUmVzdG9yZVJlZiIsInNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzUmVzdG9yaW5nU2Vzc2lvbiIsInNldElzUmVzdG9yaW5nU2Vzc2lvbiIsInNpZGViYXJPcGVuUmVmIiwic2lkZWJhck9wZW4iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzTWluaW1pemVkIiwic2V0SXNNaW5pbWl6ZWQiLCJpc01haWFQYWdlUm91dGUiLCJfZ2V0TWFpYUhvc3RQYW5lbFByZXMiLCJoaWRlUGFuZWxDb250ZW50Iiwic2hvd01pbmltaXplZFBpbGwiLCJzZXRDaGF0Vmlld1Zpc2libGUiLCJzdGF0ZSIsInVucmVhZENvdW50Iiwic2hvd01pbmltaXplZE5vdmVsdHlEb3QiLCJhY3RpdmVDaGF0SWQiLCJoYXNBY3RpdmVTdHJlYW0iLCJtZXRhIiwiZ29Ub0NoYXRSZWYiLCJnb0hvbWVSZWYiLCJoYW5kbGVNaW5pbWl6ZSIsImFpQ2hhdE1pbmltaXplIiwiaXNFeHBhbmRlZCIsImZvY3VzQ2hhdElucHV0Iiwid2luZG93Iiwic2V0VGltZW91dCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiX3VzZVN0YXRlNSIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTYiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJzZXRVc2VySW5pdGlhbE1lc3NhZ2UiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImluaXRpYWxDaGF0SWQiLCJzZXRJbml0aWFsQ2hhdElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJuZXdDaGF0S2V5Iiwic2V0TmV3Q2hhdEtleSIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlc3Npb25NZXRhIiwic2V0U2Vzc2lvbk1ldGEiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0Iiwic3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsInNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiaXNTdHJlYW1pbmciLCJzZXRJc1N0cmVhbWluZyIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJpc1dyaXRpbmciLCJzZXRJc1dyaXRpbmciLCJfdXNlU3RhdGUxOSIsIl91c2VTdGF0ZTIwIiwicmVmZXRjaENoYXRzIiwic2V0UmVmZXRjaENoYXRzIiwiX3VzZVN0YXRlMjEiLCJzYXZlZCIsImFnZW50c05hdkFjdGl2ZSIsImN1cnJlbnRPcHRpb24iLCJfdXNlU3RhdGUyMiIsInNldEN1cnJlbnRPcHRpb24iLCJfdXNlU3RhdGUyMyIsIl91c2VTdGF0ZTI0IiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIl91c2VTdGF0ZTI1IiwiX3VzZVN0YXRlMjYiLCJkaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJwcmV2SGFzUGlubmVkQ29udGV4dFJlZiIsImhhbmRsZXJzIiwiX3VzZVN0YXRlMjciLCJfdXNlU3RhdGUyOCIsInNpZGViYXJIYXNFcnJvciIsInNldFNpZGViYXJIYXNFcnJvciIsImxhbmciLCJsYW5ndWFnZSIsImxvY2FsZSIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0QWdlbnQiLCJjbGVhckFnZW50Iiwic2VjdGlvbiIsImFnZW50IiwicHJvamVjdCIsImNsaWVudCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInNldENoaXBzUHJvamVjdCIsInNldENsaWVudCIsInNldFByb2plY3QiLCJiYW5uZXJFbnRyeUZhcSIsInNldFRhc2siLCJ0b29sdGlwWkluZGV4IiwiX3VzZUdldEFnZW50cyIsImhhbmRsZUdvSG9tZSIsImhvbWUiLCJhZ2VudHMiLCJsb2FkaW5nIiwibG9hZGluZ01vcmUiLCJhZ2VudEVycm9yIiwiZXJyb3IiLCJoYW5kbGVHZXRBZ2VudHMiLCJsb2FkTW9yZUFnZW50cyIsInNlYXJjaEN1c3RvbUFnZW50cyIsInNlYXJjaExvYWRpbmciLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInNvcnRBZ2VudHNMaXN0IiwiYWdlbnRzRGF0YVJlZiIsImRhdGEiLCJfdXNlR2V0U2tpbGxzIiwibXlTa2lsbHMiLCJzaGFyZWRTa2lsbHMiLCJsb2FkaW5nU2tpbGxzIiwiaGFuZGxlR2V0U2tpbGxzIiwiYWRkU2tpbGwiLCJ1cGRhdGVTa2lsbEluTGlzdCIsInJlbW92ZVNraWxsIiwidXNlckhhc1Blcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjcmVhdGUiLCJlZGl0IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsInVzZXJIYXNTa2lsbHNBY2Nlc3MiLCJjb21wdXRlZEN1cnJlbnRPcHRpb24iLCJtdWx0aUFnZW50c0FjY2VzcyIsIkJvb2xlYW4iLCJpc01haWFrZXJBZ2VudFNlbGVjdGVkIiwic2lkZWJhckFnZW50c05hdkFjdGl2ZSIsImFnZW50c0ZldGNoZWRSZWYiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJjb25jYXQiLCJfdXNlU3RhdGUyOSIsIl91c2VTdGF0ZTMwIiwibGF5b3V0TW9kZSIsInNldExheW91dE1vZGUiLCJoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlIiwibW9kZSIsImV4cGFuZGVkIiwiaXNGbG9hdGluZyIsImNvbnRlbnRXcmFwcGVyUmVmIiwiX3VzZVN0YXRlMzEiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIzIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNCIsImRyYWdQb3NpdGlvbiIsIl91c2VTdGF0ZTMyIiwic2V0RHJhZ1Bvc2l0aW9uIiwiX3VzZUZsb2F0aW5nUGFuZWxEcmFnIiwidGlsdE1vdGlvbiIsInN0YXJ0UG9pbnRlclRyYWNraW5nIiwic2FtcGxlUG9pbnRlck1vdmUiLCJlbmRQb2ludGVyVHJhY2tpbmciLCJkcmFnU3RhdGVSZWYiLCJjbGFtcERyYWdQb3NpdGlvbiIsIngiLCJ5IiwiY29udGVudFdyYXBwZXIiLCJfY29udGVudFdyYXBwZXIkZ2V0Qm8iLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsImhlaWdodCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInByZXYiLCJwYWQiLCJoYW5kbGVEcmFnRW5kIiwiZXZlbnQiLCJfZHJhZ1N0YXRlUmVmJGN1cnJlbnQiLCJwb2ludGVySWQiLCJib2R5Iiwic3R5bGUiLCJ1c2VyU2VsZWN0IiwiY3Vyc29yIiwicmVjdCIsImxlZnQiLCJ0b3AiLCJoYW5kbGVEcmFnTW92ZSIsImRyYWdTdGF0ZSIsImNsaWVudFgiLCJjbGllbnRZIiwibmV4dFBvc2l0aW9uIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJyZXNvbHZlZERyYWdQb3NpdGlvbiIsImRlZmF1bHRQb3NpdGlvbiIsImhhbmRsZURyYWdTdGFydCIsImJ1dHRvbiIsInRhcmdldCIsImluaXRpYWxQb3NpdGlvbiIsInBvaW50ZXJPZmZzZXRYIiwicG9pbnRlck9mZnNldFkiLCJjdXJyZW50VGFyZ2V0Iiwic2V0UG9pbnRlckNhcHR1cmUiLCJwcmV2ZW50RGVmYXVsdCIsImFpQ2hhdERyYWdnYWJsZSIsInN0YXJ0Q2hhdCIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwiX29iamVjdFNwcmVhZCIsImxlbmd0aCIsImNoYXQiLCJiYW5uZXJGYXFBdXRvU2VudFJlZiIsIl9iYW5uZXJGYXEkZmFxVGl0bGUiLCJiYW5uZXJGYXEiLCJmYXFUaXRsZSIsInRyaW0iLCJhbHJlYWR5U2VudCIsImFnZW50SWQiLCJwcm9qZWN0SWQiLCJjbGllbnRJZCIsInVuZGVmaW5lZCIsImVudGl0eSIsImdvVG9DaGF0Iiwic2Vzc2lvbklkIiwic2Vzc2lvbkV4dGVybmFsSWQiLCJzZXRBY3RpdmVDaGF0SWQiLCJkZXRhaWwiLCJzZWxlY3RlZEFnZW50IiwiZmluZCIsImFnZW50SXRlbSIsImhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlIiwib3BlbiIsInN5bmNQYW5lbFNlc3Npb24iLCJfYWdlbnQkaWQiLCJob3N0Q29udGV4dCIsImVuc3VyZUFnZW50c0xvYWRlZCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwibG9hZGVkQWdlbnRzIiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwidGltZXIiLCJjbGVhclRpbWVvdXQiLCJvblBhZ2VIaWRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZCIsIl9nZXRDaGF0c1N0b3JlU3RhdGUiLCJjaGF0cyIsImxhc3RBY3RpdmVDaGF0SWQiLCJmaXJzdFVucmVhZCIsImlzUmVhZCIsImxhc3RBY3RpdmVDaGF0IiwiX2dvVG9DaGF0UmVmJGN1cnJlbnQiLCJjYWxsIiwiX2dvSG9tZVJlZiRjdXJyZW50IiwiYWlDaGF0T3BlbiIsIm9wdGlvbiIsInRoZW4iLCJOdW1iZXIiLCJhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyIiwiX2RldGFpbCRwcm9qZWN0MiIsIl9kZXRhaWwkY2xpZW50MiIsIl9kZXRhaWwkdGFzazIiLCJpc0dsb2JhbEhlYWRlck9wZW4iLCJnZXRTdGF0ZSIsImNsZWFyRmFxcyIsIl9kZXRhaWwkcHJvamVjdCIsIl9kZXRhaWwkY2xpZW50IiwiX2RldGFpbCR0YXNrIiwibmV4dExheW91dCIsImZhcSIsIl9hZ2VudCRpZDIiLCJyZXNvbHZlZEFnZW50SWQiLCJmaXJzdEFnZW50IiwiaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSIsInNlbmRNZXNzYWdlIiwic3RvcEdlbmVyYXRpb24iLCJzdHJlYW1pbmciLCJ3cml0aW5nIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwicHJvamVjdF9kZWxldGVkIiwidHlwZSIsInN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwiX2NhbGxlZTIiLCJmcm9tTXlBZ2VudHMiLCJmcm9tTXlTa2lsbHMiLCJhZ2VudHNMaXN0IiwiX3QiLCJfY29udGV4dDIiLCJteUFnZW50cyIsImhhbmRsZVN0YXJ0TmV3Q2hhdCIsImZyb21NYWlha2VySG9tZSIsImhhbmRsZVJlc2V0Q2hhdCIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiaGFuZGxlQmFjayIsInRvIiwiYWlDaGF0QmFjayIsInBpbm5lZCIsIndhc1Bpbm5lZCIsIm9uTWVyZ2VDcmVhdGVkQWdlbnQiLCJldnQiLCJfcmVmNCIsIm5leHRBZ2VudCIsIm5hdmlnYXRlSG9tZSIsIm9uU3luY0VkaXRlZEFnZW50IiwiX3JlZjUiLCJvcGVuQ2hhdFZpZXciLCJvcGVuSG9tZSIsIm9wZW5Gcm9tSG9zdCIsIl9yZWY2Iiwib3Blbk5ld0NoYXRXaXRoQWdlbnQiLCJfZGV0YWlsJHByb2plY3QzIiwiX2RldGFpbCRjbGllbnQzIiwiX3JlZjciLCJhcHBseVNraWxsVXNlRmxvdyIsIl9yZWY4IiwiX2NhbGxlZTQiLCJza2lsbCIsInVzZUZpcnN0QWdlbnQiLCJfY29udGV4dDQiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUiLCJfcmVmOSIsIl9yZWY5JHVzZUZpcnN0QWdlbnQiLCJvblNlc3Npb25NZXRhIiwiX3JlZjAiLCJsZWdhY3lDb250ZXh0U2Vzc2lvbiIsImlzX2xlZ2FjeV9jb250ZXh0IiwiaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0IiwiYWdlbnRFbnRpdHkiLCJwSWQiLCJwTmFtZSIsInByb2plY3ROYW1lIiwiY0lkIiwiY05hbWUiLCJjbGllbnROYW1lIiwidElkIiwidGFza0lkIiwidE5hbWUiLCJ0YXNrTmFtZSIsIm9yY2hlc3RyYXRvciIsImEiLCJuYW1lIiwiU3RyaW5nIiwic2hvd05ld0NoYXQiLCJpc015QWdlbnRzU2VjdGlvbiIsImlzTXlTa2lsbHNTZWN0aW9uIiwiaGFzUGlubmVkQ29udGV4dCIsImlzQ2hhdFZpZXciLCJpc0hvbWVTdGVwMiIsImlzSGVhZGVySG9tZVN0ZXAyIiwiaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIiLCJzaG93QmFja0J1dHRvbiIsImhhbmRsZU9wZW5NYXJrZXRwbGFjZSIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiaGFuZGxlT3BlblNraWxscyIsImhhbmRsZUdvVG9NYWlha2VyIiwiX2NhbGxlZTYiLCJtYWlha2VyQWdlbnQiLCJyZXNwb25zZSIsIl90MiIsIl9jb250ZXh0NiIsInBhdGgiLCJtZXRob2QiLCJqc29uIiwibG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlIiwiX3JlZjExIiwiX2NhbGxlZTciLCJzbmFwc2hvdCIsImFnZW50VG9TZWxlY3QiLCJfdDMiLCJfY29udGV4dDciLCJfeDMiLCJhcHBseVNlc3Npb25SZXN0b3JlIiwiX3JlZjEyIiwiX2NhbGxlZTgiLCJfc25hcHNob3QkaG9zdENvbnRleHQiLCJfY29udGV4dDgiLCJfeDQiLCJydW5SZXN0b3JlIiwiX3JlZjEzIiwiX2NhbGxlZTkiLCJfY29udGV4dDkiLCJmaW5pc2giLCJoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyIsImlzTWFpYWtlckNyZWF0b3JIb21lIiwibW9kYWxQYW5lbCIsImNoaWxkcmVuIiwib25Hb1RvQ2hhdCIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsIm9uT3Blbk1haWFrZXJDcmVhdG9yIiwiaXNMZWdhY3lDb250ZXh0U2Vzc2lvbiIsImluaXRpYWxPcGVuIiwib25PcGVuQ2hhbmdlIiwiZmxvYXRpbmciLCJvbkxheW91dE1vZGVDaGFuZ2UiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYXNNb3JlIiwiaGFzX21vcmUiLCJvbkFnZW50VXBkYXRlIiwiaXNNYWlha2VyU2VjdGlvbiIsIm9uQmFjayIsInJlZnMiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJsb2FkaW5nQWdlbnRzIiwib25EZWxldGVBZ2VudCIsIm9uRmF2b3JpdGVBZ2VudFVwZGF0ZSIsImhhc01vcmVBZ2VudHMiLCJsb2FkaW5nTW9yZUFnZW50cyIsIm9uTG9hZE1vcmVBZ2VudHMiLCJvbkdvVG9NYWlha2VyIiwib25EZWxldGVTa2lsbCIsIm9uU2VhcmNoQWdlbnRzIiwic2VhcmNoTG9hZGluZ0FnZW50cyIsIm9uUmVzdGFydFN1bW1hcnkiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImNoYXRJZCIsIm9uQ29udGludWVJbk5ld0NoYXQiLCJyZWYiLCJjcmVhdGVQb3J0YWwiLCJlbGV2YXRlZCIsIiRtaW5pbWl6ZWQiLCIkaGlkZGVuIiwidGlsdCIsInNob3dOb3ZlbHR5RG90Iiwib25SZXN0b3JlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL0NoYXRBSU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXVzZWxlc3MtZnJhZ21lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGNhbkFjY2Vzc1RvU2tpbGxzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Blcm1pc3Npb25zJ1xuaW1wb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQUVycm9yJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5cbmltcG9ydCB7IENoYXRBSUNvbnRlbnQgfSBmcm9tICcuLi9DaGF0QUlDb250ZW50J1xuaW1wb3J0IHsgYnVpbGRIYW5kbGVycywgb3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJy4uL1NpZGViYXInXG5pbXBvcnQgeyB1c2VHZXRBZ2VudHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMnXG5pbXBvcnQgeyB1c2VHZXRTa2lsbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9nZXRTa2lsbHMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0LCB0eXBlIFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgQ2hhdEFJTW9kYWxIZWFkZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXInXG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9TbmFja0Jhci9TbmFja2JhcidcbmltcG9ydCB7IFByb2plY3RTdW1tYXJ5Q29udGVudCB9IGZyb20gJy4uL1Byb2plY3RTdW1tYXJ5Q29udGVudCdcbmltcG9ydCB7IEFibUFnZW50TW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxNb2RhbCwgU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxHZW5lcmF0ZU1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsR2VuZXJhdGVNb2RhbC9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBTQ0NBSU1Db250ZW50LCBTQ0NBSU1Db250ZW50V3JhcHBlciwgU0NDQUlNTWluaW1pemVkSGlkZSwgU0NDQUlNV3JhcHBlciB9IGZyb20gJy4vQ2hhdEFJTW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgTWFpYU1pbmltaXplZFBpbGwgfSBmcm9tICcuL2NvbXBvbmVudHMvTWFpYU1pbmltaXplZFBpbGwnXG5pbXBvcnQgeyB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90J1xuaW1wb3J0IHtcbiAgZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4LFxuICBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSxcbiAgcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUsXG4gIHNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZSxcbn0gZnJvbSAnLi9sYXlvdXQnXG5pbXBvcnQge1xuICBjbGFtcEZsb2F0aW5nUGFuZWxQb3NpdGlvbixcbiAgZGlzcGF0Y2hTa2lsbE1lbnRpb25JbnNlcnQsXG4gIGVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlLFxuICBnZXRNYWlhSG9zdFBhbmVsUHJlc2VudGF0aW9uLFxuICBoYXNBbnlBY3RpdmVTZXNzaW9uSW5NZXRhLFxuICBpc0Jhbm5lckZhcVJlYWR5VG9BdXRvU2VuZCxcbiAgaXNHbG9iYWxNYWlhU2VjdGlvbixcbiAgcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbixcbiAgcmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvbixcbiAgcmVzb2x2ZURlZmF1bHRGbG9hdGluZ1BhbmVsUG9zaXRpb24sXG4gIHJlc29sdmVJbml0aWFsQ3VycmVudE9wdGlvbixcbiAgcmVzb2x2ZUxlZ2FjeUNvbnRleHRTZXNzaW9uLFxuICByZXNvbHZlU2lkZWJhckFnZW50c05hdkFjdGl2ZSxcbiAgc2hvdWxkUmVzdG9yZUV4cGFuZGVkUGFuZWwsXG4gIHNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQsXG4gIHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlLFxuICB0eXBlIExlZ2FjeVNlc3Npb25NZXRhLFxufSBmcm9tICcuL0NoYXRBSU1vZGFsLmhlbHBlcnMnXG5pbXBvcnQgeyBGbG9hdGluZ1BhbmVsTW90aW9uLCB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQgfSBmcm9tICcuL2Zsb2F0aW5nUGFuZWxNb3Rpb24nXG5pbXBvcnQgeyBDaGF0QWlNb2RhbEZvb3RlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEZvb3RlcidcbmltcG9ydCB7IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3NraWxsJ1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DbGllbnQnXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvVGFzaydcbmltcG9ydCB7IHVzZUZhcXNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUZhcXNTdG9yZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSwgdXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgdHlwZSB7IENoYXRMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2NoYXRzU3RvcmUudHlwZXMnXG5pbXBvcnQgeyByZWFkTGFzdEFjdGl2ZUNoYXRJZCwgd3JpdGVMYXN0QWN0aXZlQ2hhdElkIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYUxhc3RDaGF0UGVyc2lzdGVuY2UnXG5pbXBvcnQge1xuICBjbGVhck1haWFQYW5lbFNlc3Npb24sXG4gIGlzVmFsaWRNYWlhUGFuZWxPcHRpb24sXG4gIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbixcbiAgcmVhZE1haWFQYW5lbFNlc3Npb24sXG4gIHR5cGUgTWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90LFxuICB3cml0ZU1haWFQYW5lbFNlc3Npb24sXG59IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFQYW5lbFNlc3Npb25QZXJzaXN0ZW5jZSdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgdHlwZSBNYWlhSG9zdE9wZW5EZXRhaWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhSG9zdE9wZW4nXG5pbXBvcnQgeyB1c2VJc01haWFQYWdlUm91dGUgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VJc01haWFQYWdlUm91dGUnXG5cbi8qKiBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcyBhbCBjYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24pLiAqL1xudHlwZSBTZXNzaW9uTWV0YSA9IExlZ2FjeVNlc3Npb25NZXRhICYge1xuICBjaGF0SWQ6IHN0cmluZ1xuICBwcm9qZWN0SWQ/OiBudW1iZXJcbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgdGFza0lkPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBJRF9NT0RBTF9DSEFUX0FHRU5UID0gJ21vZGFscy1wb3J0YWwtbWFpYS1jaGF0LWFnZW50J1xuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWwgPSAoKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYgPSB1c2VSZWY8TWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90IHwgbnVsbD4ocmVhZE1haWFQYW5lbFNlc3Npb24odXNlci5pZCkpXG4gIGNvbnN0IHNob3VsZFJlc3RvcmVFeHBhbmRlZCA9IHNob3VsZFJlc3RvcmVFeHBhbmRlZFBhbmVsKHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudClcbiAgY29uc3QgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmID0gdXNlUmVmPE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCB8IG51bGw+KFxuICAgIHNob3VsZFJlc3RvcmVFeHBhbmRlZCA/IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudCA6IG51bGxcbiAgKVxuICBjb25zdCBzZXNzaW9uUmVzdG9yZVN0YXJ0ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFtpc1Jlc3RvcmluZ1Nlc3Npb24sIHNldElzUmVzdG9yaW5nU2Vzc2lvbl0gPSB1c2VTdGF0ZSgoKSA9PiBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCAhPSBudWxsKVxuICBjb25zdCBzaWRlYmFyT3BlblJlZiA9IHVzZVJlZihzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LnNpZGViYXJPcGVuID8/IGZhbHNlKVxuXG4gIC8vIFRyYXMgbmF2ZWdhciBlbiBlbCBob3N0IChmdWxsIHBhZ2UgcmVsb2FkKSwgcmVzdGF1cmFtb3MgZWwgcGFuZWwgc2kgZXN0YWJhIGFiaWVydG8uXG4gIGNvbnN0IFtpc01pbmltaXplZCwgc2V0SXNNaW5pbWl6ZWRdID0gdXNlU3RhdGUoKCkgPT4gIXNob3VsZFJlc3RvcmVFeHBhbmRlZClcbiAgY29uc3QgaXNNYWlhUGFnZVJvdXRlID0gdXNlSXNNYWlhUGFnZVJvdXRlKClcbiAgY29uc3QgeyBoaWRlUGFuZWxDb250ZW50LCBzaG93TWluaW1pemVkUGlsbCB9ID0gZ2V0TWFpYUhvc3RQYW5lbFByZXNlbnRhdGlvbihpc01pbmltaXplZCwgaXNNYWlhUGFnZVJvdXRlKVxuICBjb25zdCBzZXRDaGF0Vmlld1Zpc2libGUgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLnNldENoYXRWaWV3VmlzaWJsZSlcbiAgY29uc3QgdW5yZWFkQ291bnQgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLnVucmVhZENvdW50KVxuICBjb25zdCBzaG93TWluaW1pemVkTm92ZWx0eURvdCA9IHVzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90KGlzTWluaW1pemVkLCB1bnJlYWRDb3VudClcbiAgY29uc3QgYWN0aXZlQ2hhdElkID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5hY3RpdmVDaGF0SWQpXG4gIC8vIExvcyBcIi4uLlwiIGRlbCBwaWxsIHNhbGVuIGRlbCBtb3Rvciwgbm8gZGUgaXNTdHJlYW1pbmcvaXNXcml0aW5nOiBlc29zIHJlZmxlamFuXG4gIC8vIGxhIHNlc2nDs24gYWN0aXZhIHkgcXVlZGFuIHN0YWxlIGN1YW5kbyB1bmEgcmVzcHVlc3RhIHRlcm1pbmEgZW4gYmFja2dyb3VuZC5cbiAgY29uc3QgaGFzQWN0aXZlU3RyZWFtID0gdXNlU2Vzc2lvbnNTdG9yZShzdGF0ZSA9PiBoYXNBbnlBY3RpdmVTZXNzaW9uSW5NZXRhKHN0YXRlLm1ldGEpKVxuXG4gIC8qKiBnb1RvQ2hhdCAvIGhhbmRsZUdvSG9tZSBzZSBkZWZpbmVuIG3DoXMgYWJham87IGxvcyByZWZzIGV2aXRhbiBkZXBlbmRlciBkZWwgb3JkZW4gZGUgZGVjbGFyYWNpw7NuLiAqL1xuICBjb25zdCBnb1RvQ2hhdFJlZiA9IHVzZVJlZjwoKGNoYXQ6IENoYXRMaXN0SXRlbSkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBnb0hvbWVSZWYgPSB1c2VSZWY8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcblxuICAvLyBNb250YSBjZXJyYWRhIHNhbHZvIHJlc3RhdXJhY2nDs24gZGUgc2VzacOzbjogc2kgZWwgcGFuZWwgbm8gZXN0w6EgdmlzaWJsZSwgbGFzIHJlc3B1ZXN0YXNcbiAgLy8gbnVldmFzIHF1ZWRhbiBjb21vIG5vIGxlw61kYXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCkge1xuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKGZhbHNlKVxuICAgIH1cbiAgfSwgW3NldENoYXRWaWV3VmlzaWJsZV0pXG5cbiAgLy8gRW4gL21haWEgZWwgY2hhdCBmdWxsc2NyZWVuIGRlbCBzaWRlYmFyIHJlZW1wbGF6YSBhbCBwYW5lbCBmbG90YW50ZTsgbm8gbWluaW1pemFtb3NcbiAgLy8gcGFyYSBwb2RlciByZXN0YXVyYXIgbGEgbWlzbWEgdmlzdGEgYWwgdm9sdmVyIGEgb3RyYSBzZWNjacOzbiBkZSBDT1IuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzTWFpYVBhZ2VSb3V0ZSkge1xuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKGZhbHNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghaXNNaW5pbWl6ZWQpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgIH1cbiAgfSwgW2lzTWFpYVBhZ2VSb3V0ZSwgaXNNaW5pbWl6ZWQsIHNldENoYXRWaWV3VmlzaWJsZV0pXG5cbiAgLy8gUGVyc2lzdGltb3MgbGEgY29udmVyc2FjacOzbiBhYmllcnRhIHBhcmEgcG9kZXIgdm9sdmVyIGEgZWxsYSBkZXNkZSBlbCBwaWxsIGRlc3B1w6lzXG4gIC8vIGRlIG5hdmVnYXIgbyByZWZyZXNjYXIuIEVsIHRha2VvdmVyIGRlc2RlIHVuIGhvc3QgbGEgbGltcGlhICh2YSBhbCBIb21lKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYWN0aXZlQ2hhdElkKSB7XG4gICAgICB3cml0ZUxhc3RBY3RpdmVDaGF0SWQodXNlci5pZCwgYWN0aXZlQ2hhdElkKVxuICAgIH1cbiAgfSwgW2FjdGl2ZUNoYXRJZCwgdXNlci5pZF0pXG5cbiAgY29uc3QgaGFuZGxlTWluaW1pemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0TWluaW1pemUpXG4gICAgc2V0SXNNaW5pbWl6ZWQodHJ1ZSlcbiAgICBzZXRDaGF0Vmlld1Zpc2libGUoZmFsc2UpXG4gICAgd3JpdGVNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgaXNFeHBhbmRlZDogZmFsc2UgfSlcbiAgfSwgW2FtcGxpdHVkRXZlbnQsIHNldENoYXRWaWV3VmlzaWJsZSwgdXNlci5pZF0pXG5cbiAgY29uc3QgZm9jdXNDaGF0SW5wdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ21haWEtaW5wdXQtcmVmb2N1cycpKVxuICAgIH0sIDEwMClcbiAgfSwgW10pXG5cbiAgY29uc3QgW3VzZXJJbml0aWFsTWVzc2FnZSwgc2V0VXNlckluaXRpYWxNZXNzYWdlXSA9IHVzZVN0YXRlPHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIH0+KHtcbiAgICBtZXNzYWdlOiAnJyxcbiAgICBhdHRhY2htZW50czogW10sXG4gIH0pXG4gIGNvbnN0IFtpbml0aWFsQ2hhdElkLCBzZXRJbml0aWFsQ2hhdElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtuZXdDaGF0S2V5LCBzZXROZXdDaGF0S2V5XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtzZXNzaW9uTWV0YSwgc2V0U2Vzc2lvbk1ldGFdID0gdXNlU3RhdGU8U2Vzc2lvbk1ldGEgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbl0gPSB1c2VTdGF0ZTxcbiAgICB8ICgoXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICAgIHNjSWQ/OiBzdHJpbmcsXG4gICAgICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICkgPT4gdm9pZClcbiAgICB8IG51bGxcbiAgPihudWxsKVxuICBjb25zdCBbc3RvcEdlbmVyYXRpb25GdW5jdGlvbiwgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbl0gPSB1c2VTdGF0ZTwoKCkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNTdHJlYW1pbmcsIHNldElzU3RyZWFtaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNXcml0aW5nLCBzZXRJc1dyaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgW3JlZmV0Y2hDaGF0cywgc2V0UmVmZXRjaENoYXRzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudE9wdGlvbiwgc2V0Q3VycmVudE9wdGlvbl0gPSB1c2VTdGF0ZTxvcHRpb25zPigoKSA9PiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnRcbiAgICByZXR1cm4gcmVzb2x2ZUluaXRpYWxDdXJyZW50T3B0aW9uKHNhdmVkPy5hZ2VudHNOYXZBY3RpdmUsIHNhdmVkPy5jdXJyZW50T3B0aW9uLCB1c2VyKVxuICB9KVxuICBjb25zdCBbaGFzRXJyb3IsIHNldEhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICAvLyBFbiBwcm9qZWN0L2NsaWVudC90YXNrOiBlbCB1c3VhcmlvIHJlaW5pY2nDsyBlbCBjb250ZXh0byBkZWwgb3JjaGVzdHJhdG9yIChsbyBsaW1wacOzIHkgcGFzw7MgcG9yXG4gIC8vIGVsIHNlbGVjdG9yIGRlIGNvbnRleHRvcyByZWNpZW50ZXMpLiBIYWJpbGl0YSBlbCBib3TDs24gXCJ2b2x2ZXJcIiBlbiBlbCBob21lIHBhc28gMiBkZSBlc2FzXG4gIC8vIHNlY2Npb25lcy4gU2UgcmVzZXRlYSBhbCBjZXJyYXIvcmVhYnJpciBlbCBtb2RhbCAoZWwgY29tcG9uZW50ZSBzZSBkZXNtb250YSkuXG4gIGNvbnN0IFtkaWRSZXNldENvbnRleHRJblNlY3Rpb24sIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgcHJldkhhc1Bpbm5lZENvbnRleHRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGhhbmRsZXJzID0gdXNlTWVtbygoKSA9PiBidWlsZEhhbmRsZXJzKHNldEN1cnJlbnRPcHRpb24sIHNldEhhc0Vycm9yKSwgW10pXG4gIGNvbnN0IFtzaWRlYmFySGFzRXJyb3IsIHNldFNpZGViYXJIYXNFcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgbGFuZyA9IGkxOG4ubGFuZ3VhZ2UgPT09ICdicicgPyAncHQtYnInIDogaTE4bi5sYW5ndWFnZVxuXG4gIG1vbWVudC5sb2NhbGUobGFuZylcblxuICBjb25zdCB7XG4gICAgc2VsZWN0QWdlbnQsXG4gICAgY2xlYXJBZ2VudCxcbiAgICBzZWN0aW9uLFxuICAgIGFnZW50LFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHRhc2ssXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFByb2plY3QsXG4gICAgYmFubmVyRW50cnlGYXEsXG4gICAgc2V0VGFzayxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIC8vIFotaW5kZXggcGFyYSB0b29sdGlwcyBlbiBzZWN0aW9uICd0YXNrJyAobW9kYWwgZmxvdGFudGUgZWxldmFkbylcbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuXG4gIGNvbnN0IHtcbiAgICBhZ2VudHMsXG4gICAgbG9hZGluZyxcbiAgICBsb2FkaW5nTW9yZSxcbiAgICBlcnJvcjogYWdlbnRFcnJvcixcbiAgICBoYW5kbGVHZXRBZ2VudHMsXG4gICAgbG9hZE1vcmVBZ2VudHMsXG4gICAgc2VhcmNoQ3VzdG9tQWdlbnRzLFxuICAgIHNlYXJjaExvYWRpbmcsXG4gICAgYWRkQWdlbnQsXG4gICAgcmVtb3ZlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgICBzZWxlY3RGaXJzdEFnZW50LFxuICAgIHNvcnRBZ2VudHNMaXN0LFxuICB9ID0gdXNlR2V0QWdlbnRzKHsgc2VsZWN0QWdlbnQsIHNlY3Rpb24sIGFnZW50LCBoYW5kbGVHb0hvbWU6IGhhbmRsZXJzLmhvbWUgfSlcblxuICBjb25zdCBhZ2VudHNEYXRhUmVmID0gdXNlUmVmKGFnZW50cy5kYXRhKVxuICBhZ2VudHNEYXRhUmVmLmN1cnJlbnQgPSBhZ2VudHMuZGF0YVxuXG4gIGNvbnN0IHtcbiAgICBteVNraWxscyxcbiAgICBzaGFyZWRTa2lsbHMsXG4gICAgbG9hZGluZzogbG9hZGluZ1NraWxscyxcbiAgICBoYW5kbGVHZXRTa2lsbHMsXG4gICAgYWRkU2tpbGwsXG4gICAgdXBkYXRlU2tpbGxJbkxpc3QsXG4gICAgcmVtb3ZlU2tpbGwsXG4gIH0gPSB1c2VHZXRTa2lsbHMoKVxuXG4gIGNvbnN0IHVzZXJIYXNQZXJtaXNzaW9ucyA9XG4gICAgKHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmNyZWF0ZSB8fFxuICAgICAgdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uZWRpdCB8fFxuICAgICAgdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uZGVsZXRlKSAmJlxuICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG5cbiAgY29uc3QgdXNlckhhc1NraWxsc0FjY2VzcyA9IGNhbkFjY2Vzc1RvU2tpbGxzKHVzZXIpXG5cbiAgY29uc3QgY29tcHV0ZWRDdXJyZW50T3B0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvbih7XG4gICAgICAgIGN1cnJlbnRPcHRpb24sXG4gICAgICAgIGFnZW50LFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHVzZXIsXG4gICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgIH0pLFxuICAgIFtjdXJyZW50T3B0aW9uLCBwcm9qZWN0LCBjbGllbnQsIGFnZW50LCB1c2VyXVxuICApXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVTaWRlYmFyQWdlbnRzTmF2QWN0aXZlKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCksXG4gICAgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF1cbiAgKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihcbiAgICAoKSA9PiBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LmRyYWdQb3NpdGlvbiA/PyBudWxsXG4gIClcbiAgY29uc3QgeyB0aWx0TW90aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZywgc2FtcGxlUG9pbnRlck1vdmUsIGVuZFBvaW50ZXJUcmFja2luZyB9ID1cbiAgICB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQoaXNGbG9hdGluZylcbiAgY29uc3QgZHJhZ1N0YXRlUmVmID0gdXNlUmVmPHtcbiAgICBwb2ludGVySWQ6IG51bWJlclxuICAgIG9mZnNldFg6IG51bWJlclxuICAgIG9mZnNldFk6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBjbGFtcERyYWdQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGVudFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICByZXR1cm4gY2xhbXBGbG9hdGluZ1BhbmVsUG9zaXRpb24oeCwgeSwgd2lkdGgsIGhlaWdodCwgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodClcbiAgfSwgW10pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGF5b3V0TW9kZSAhPT0gJ2Zsb2F0aW5nJykge1xuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24ocHJldi54LCBwcmV2LnkpXG4gICAgICB9XG4gICAgICBjb25zdCBwYWQgPSAxNlxuICAgICAgY29uc3QgeCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4KCkgLSBwYWRcbiAgICAgIHJldHVybiBjbGFtcERyYWdQb3NpdGlvbih4LCBwYWQpXG4gICAgfSlcbiAgfSwgW2xheW91dE1vZGUsIGNsYW1wRHJhZ1Bvc2l0aW9uXSlcblxuICBjb25zdCBoYW5kbGVEcmFnRW5kID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGVuZFBvaW50ZXJUcmFja2luZygpXG4gICAgICBpZiAoZHJhZ1N0YXRlUmVmLmN1cnJlbnQ/LnBvaW50ZXJJZCAhPT0gZXZlbnQucG9pbnRlcklkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBkcmFnU3RhdGVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICcnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICcnXG5cbiAgICAgIGlmIChsYXlvdXRNb2RlID09PSAnZmxvYXRpbmcnICYmIGNvbnRlbnRXcmFwcGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGNvbnRlbnRXcmFwcGVyUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgZHJhZ1Bvc2l0aW9uOiB7IHg6IHJlY3QubGVmdCwgeTogcmVjdC50b3AgfSB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZywgbGF5b3V0TW9kZSwgdXNlci5pZF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCBkcmFnU3RhdGUucG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICAgIGlmIChwcmV2ICYmIHByZXYueCA9PT0gbmV4dFBvc2l0aW9uLnggJiYgcHJldi55ID09PSBuZXh0UG9zaXRpb24ueSkge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRQb3NpdGlvblxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjbGFtcERyYWdQb3NpdGlvbiwgc2FtcGxlUG9pbnRlck1vdmVdXG4gIClcblxuICBjb25zdCByZXNvbHZlZERyYWdQb3NpdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsYXlvdXRNb2RlICE9PSAnZmxvYXRpbmcnKSB7XG4gICAgICByZXR1cm4gZHJhZ1Bvc2l0aW9uXG4gICAgfVxuICAgIGlmIChkcmFnUG9zaXRpb24pIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFBvc2l0aW9uID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gcmVzb2x2ZURlZmF1bHRGbG9hdGluZ1BhbmVsUG9zaXRpb24od2luZG93LmlubmVyV2lkdGgsIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpKVxuICAgICAgICA6IHJlc29sdmVEZWZhdWx0RmxvYXRpbmdQYW5lbFBvc2l0aW9uKDAsIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpKVxuICAgIHJldHVybiBjbGFtcERyYWdQb3NpdGlvbihkZWZhdWx0UG9zaXRpb24ueCwgZGVmYXVsdFBvc2l0aW9uLnkpXG4gIH0sIFtsYXlvdXRNb2RlLCBkcmFnUG9zaXRpb24sIGNsYW1wRHJhZ1Bvc2l0aW9uXSlcblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKCFpc0Zsb2F0aW5nIHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICBpZiAoc2hvdWxkU2tpcEZsb2F0aW5nRHJhZ1RhcmdldCh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IGNvbnRlbnRXcmFwcGVyUmVmLmN1cnJlbnRcbiAgICAgIGlmICghY29udGVudFdyYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlY3QgPSBjb250ZW50V3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgaW5pdGlhbFBvc2l0aW9uID0gcmVzb2x2ZWREcmFnUG9zaXRpb24gPz8gY2xhbXBEcmFnUG9zaXRpb24ocmVjdC5sZWZ0LCByZWN0LnRvcClcbiAgICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRYID0gZXZlbnQuY2xpZW50WCAtIGluaXRpYWxQb3NpdGlvbi54XG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WSA9IGV2ZW50LmNsaWVudFkgLSBpbml0aWFsUG9zaXRpb24ueVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24oaW5pdGlhbFBvc2l0aW9uKVxuICAgICAgZHJhZ1N0YXRlUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgIHBvaW50ZXJJZDogZXZlbnQucG9pbnRlcklkLFxuICAgICAgICBvZmZzZXRYOiBwb2ludGVyT2Zmc2V0WCxcbiAgICAgICAgb2Zmc2V0WTogcG9pbnRlck9mZnNldFksXG4gICAgICB9XG5cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2dyYWJiaW5nJ1xuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0RHJhZ2dhYmxlKVxuICAgICAgc3RhcnRQb2ludGVyVHJhY2tpbmcoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcbiAgICB9LFxuICAgIFtjbGFtcERyYWdQb3NpdGlvbiwgaXNGbG9hdGluZywgcmVzb2x2ZWREcmFnUG9zaXRpb24sIHN0YXJ0UG9pbnRlclRyYWNraW5nXVxuICApXG5cbiAgY29uc3Qgc3RhcnRDaGF0ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmcsXG4gICAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSB7XG4gICAgICAgIHNldFNpZGViYXJIYXNFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgJycsXG4gICAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyB8fCBbXSxcbiAgICAgICAgLi4uKGZhcUlkID8geyBmYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihtZW50aW9ucyAmJiBtZW50aW9ucy5sZW5ndGggPiAwID8geyBtZW50aW9ucyB9IDoge30pLFxuICAgICAgICAuLi4oZnVhSWQgPyB7IGZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihzY0lkID8geyBzY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgYmFubmVyRmFxQXV0b1NlbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBiYW5uZXJGYXEgPSBiYW5uZXJFbnRyeUZhcVxuICAgIGlmICghYmFubmVyRmFxPy5mYXFUaXRsZT8udHJpbSgpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhaXNCYW5uZXJGYXFSZWFkeVRvQXV0b1NlbmQoe1xuICAgICAgICBmYXFUaXRsZTogYmFubmVyRmFxLmZhcVRpdGxlLFxuICAgICAgICBhbHJlYWR5U2VudDogYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCxcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBzZWN0aW9uLFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICAgICAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBiYW5uZXJGYXFBdXRvU2VudFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHN0YXJ0Q2hhdChcbiAgICAgIGJhbm5lckZhcS5mYXFUaXRsZSxcbiAgICAgIFtdLFxuICAgICAgYmFubmVyRmFxLmZhcUlkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYmFubmVyRmFxLmNvbnRleHREYXRhXG4gICAgKVxuICB9LCBbXG4gICAgYmFubmVyRW50cnlGYXE/LmZhcUlkLFxuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFUaXRsZSxcbiAgICBiYW5uZXJFbnRyeUZhcT8uY29udGV4dERhdGEsXG4gICAgbG9hZGluZyxcbiAgICBhZ2VudD8uaWQsXG4gICAgYWdlbnQ/LmVudGl0eSxcbiAgICBwcm9qZWN0Py5pZCxcbiAgICBjbGllbnQ/LmlkLFxuICAgIHNlY3Rpb24sXG4gICAgc3RhcnRDaGF0LFxuICBdKVxuXG4gIGNvbnN0IGdvVG9DaGF0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoYXQ6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZCBhcyBzdHJpbmdcblxuICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkuc2V0QWN0aXZlQ2hhdElkKHNlc3Npb25JZClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdzaWRlYmFyLXNlbGVjdC1zZXNzaW9uJywgeyBkZXRhaWw6IHsgc2Vzc2lvbklkIH0gfSkpXG5cbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQoc2Vzc2lvbklkKVxuICAgICAgY29uc3Qgc2VsZWN0ZWRBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoYWdlbnRJdGVtID0+IGFnZW50SXRlbS5pZCA9PT0gY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgIH1cbiAgICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgYWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGdvVG9DaGF0UmVmLmN1cnJlbnQgPSBnb1RvQ2hhdFxuXG4gIGNvbnN0IGhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgIHNpZGViYXJPcGVuUmVmLmN1cnJlbnQgPSBvcGVuXG4gICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBzaWRlYmFyT3Blbjogb3BlbiB9KVxuICAgIH0sXG4gICAgW3VzZXIuaWRdXG4gIClcblxuICBjb25zdCBzeW5jUGFuZWxTZXNzaW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChpc01pbmltaXplZCkgcmV0dXJuXG5cbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgaXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgIGN1cnJlbnRPcHRpb24sXG4gICAgICBhZ2VudHNOYXZBY3RpdmU6IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUsXG4gICAgICBhY3RpdmVDaGF0SWQsXG4gICAgICBhZ2VudElkOiBhZ2VudD8uaWQgPz8gbnVsbCxcbiAgICAgIHNpZGViYXJPcGVuOiBzaWRlYmFyT3BlblJlZi5jdXJyZW50LFxuICAgICAgZHJhZ1Bvc2l0aW9uOiBsYXlvdXRNb2RlID09PSAnZmxvYXRpbmcnID8gZHJhZ1Bvc2l0aW9uIDogbnVsbCxcbiAgICAgIGhvc3RDb250ZXh0OiB7XG4gICAgICAgIHNlY3Rpb24sXG4gICAgICAgIHByb2plY3QsXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgdGFzayxcbiAgICAgICAgY2hpcHNQcm9qZWN0LFxuICAgICAgfSxcbiAgICB9KVxuICB9LCBbXG4gICAgYWN0aXZlQ2hhdElkLFxuICAgIGFnZW50Py5pZCxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgY2xpZW50LFxuICAgIGN1cnJlbnRPcHRpb24sXG4gICAgZHJhZ1Bvc2l0aW9uLFxuICAgIGlzTWluaW1pemVkLFxuICAgIGxheW91dE1vZGUsXG4gICAgcHJvamVjdCxcbiAgICBzZWN0aW9uLFxuICAgIHNpZGViYXJBZ2VudHNOYXZBY3RpdmUsXG4gICAgdGFzayxcbiAgICB1c2VyLmlkLFxuICBdKVxuXG4gIC8qKiBMb3MgYWdlbnRlcyBzZSBwaWRlbiByZWNpw6luIGFsIGFicmlyIGVsIHBhbmVsOiBlbiBtb2RvIHBpbGwgbm8gaGFjZSBmYWx0YSBuaW5ndW5hIHJlcXVlc3QuICovXG4gIGNvbnN0IGVuc3VyZUFnZW50c0xvYWRlZCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEFnZW50W10+ID0+IHtcbiAgICBpZiAoYWdlbnRzRGF0YVJlZi5jdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBhZ2VudHNEYXRhUmVmLmN1cnJlbnRcbiAgICB9XG5cbiAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbG9hZGVkQWdlbnRzID0gYXdhaXQgaGFuZGxlR2V0QWdlbnRzKClcbiAgICAgIGlmIChsb2FkZWRBZ2VudHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gbG9hZGVkQWdlbnRzXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFnZW50c0RhdGFSZWYuY3VycmVudFxuICB9LCBbaGFuZGxlR2V0QWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc01pbmltaXplZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gc3luY1BhbmVsU2Vzc2lvbigpLCAxNTApXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpXG4gIH0sIFtpc01pbmltaXplZCwgc3luY1BhbmVsU2Vzc2lvbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblBhZ2VIaWRlID0gKCkgPT4ge1xuICAgICAgaWYgKCFpc01pbmltaXplZCkge1xuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgIH1cbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25QYWdlSGlkZSlcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25QYWdlSGlkZSlcbiAgfSwgW2lzTWluaW1pemVkLCBzeW5jUGFuZWxTZXNzaW9uXSlcblxuICBjb25zdCBoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBQcmlvcmlkYWQgYWwgcmVhYnJpcjogcHJpbWVyIGNoYXQgc2luIGxlZXIg4oaSIMO6bHRpbWEgY29udmVyc2FjacOzbiBhYmllcnRhIOKGkiBIb21lLlxuICAgIGNvbnN0IHsgY2hhdHMgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgY29uc3QgbGFzdEFjdGl2ZUNoYXRJZCA9IHJlYWRMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQpXG4gICAgY29uc3QgZmlyc3RVbnJlYWQgPSBjaGF0cy5maW5kKGNoYXQgPT4gY2hhdC5pc1JlYWQgPT09IGZhbHNlKVxuICAgIGNvbnN0IGxhc3RBY3RpdmVDaGF0ID0gbGFzdEFjdGl2ZUNoYXRJZFxuICAgICAgPyBjaGF0cy5maW5kKGNoYXQgPT4gY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZCA9PT0gbGFzdEFjdGl2ZUNoYXRJZClcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgY29uc3QgdGFyZ2V0ID0gZmlyc3RVbnJlYWQgPz8gbGFzdEFjdGl2ZUNoYXRcblxuICAgIC8vIE5hdmVnYXIgYW50ZXMgZGUgZXhwYW5kaXI6IHNpIGVzcGVyYW1vcyBhZ2VudGVzLCBlbCBwYW5lbCBtb250YSBjb24gbGEgc2VzacOzbiB2aWVqYSB5IGVsIHNpZGViYXIgcXVlZGEgZGVzZmFzYWRvLlxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGdvVG9DaGF0UmVmLmN1cnJlbnQ/Lih0YXJnZXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGdvSG9tZVJlZi5jdXJyZW50Py4oKVxuICAgIH1cblxuICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW4sIHsgb3B0aW9uOiAnbWluaW1pemUnIH0pXG5cbiAgICBlbnN1cmVBZ2VudHNMb2FkZWQoKVxuICAgICAgLnRoZW4obG9hZGVkQWdlbnRzID0+IHtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBsb2FkZWRBZ2VudHMuZmluZChhZ2VudEl0ZW0gPT4gTnVtYmVyKGFnZW50SXRlbS5pZCkgPT09IHRhcmdldC5hZ2VudElkKVxuICAgICAgICAgIGlmIChzZWxlY3RlZEFnZW50KSB7XG4gICAgICAgICAgICBzZWxlY3RBZ2VudChzZWxlY3RlZEFnZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgfSwgW2FtcGxpdHVkRXZlbnQsIGVuc3VyZUFnZW50c0xvYWRlZCwgZm9jdXNDaGF0SW5wdXQsIHNlbGVjdEFnZW50LCBzZXRDaGF0Vmlld1Zpc2libGUsIHVzZXIuaWRdKVxuXG4gIC8qKlxuICAgKiBUb21hIGNvbnRyb2wgZGVzZGUgdW4gaG9zdCAoaGVhZGVyLCBwcm95ZWN0bywgY2xpZW50ZeKApik6IGFicmUgZWwgcGFuZWwsIGRlc2NhcnRhIGxhXG4gICAqIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSB5IGFwbGljYSBlbCBjb250ZXh0byBkZWwgaG9zdC4gTk8gdnVlbHZlIGEgbGEgw7psdGltYSBjb252ZXJzYWNpw7NuXG4gICAqIOKAlCBlc28gc8OzbG8gbG8gaGFjZSBlbCBwaWxsIChgaGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWRgKS5cbiAgICovXG4gIGNvbnN0IGFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZGV0YWlsOiBNYWlhSG9zdE9wZW5EZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IGlzR2xvYmFsSGVhZGVyT3BlbiA9IGRldGFpbC5zZWN0aW9uID09PSAnaGVhZGVyJyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3BsYW5uZXInXG5cbiAgICAgIGNsZWFyTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkKVxuICAgICAgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRJc1Jlc3RvcmluZ1Nlc3Npb24oZmFsc2UpXG4gICAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgICAgd3JpdGVMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQsIG51bGwpXG5cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKGZhbHNlKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICB1c2VGYXFzU3RvcmUuZ2V0U3RhdGUoKS5jbGVhckZhcXMoKVxuICAgICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5zZXRBY3RpdmVDaGF0SWQobnVsbClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuXG4gICAgICBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIHNldFByb2plY3Q/LihkZXRhaWwucHJvamVjdCA/PyBudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0UHJvamVjdD8uKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRhaWwuc2VjdGlvbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4oZGV0YWlsLmNsaWVudCA/PyBudWxsKVxuICAgICAgfSBlbHNlIGlmIChpc0dsb2JhbEhlYWRlck9wZW4pIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cblxuICAgICAgaWYgKGRldGFpbC5zZWN0aW9uID09PSAndGFzaycpIHtcbiAgICAgICAgc2V0VGFzaz8uKGRldGFpbC50YXNrID8/IG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIH1cblxuICAgICAgaWYgKGlzR2xvYmFsSGVhZGVyT3Blbikge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgY2xlYXJBZ2VudCgpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRMYXlvdXQgPSByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7XG4gICAgICAgIHNlY3Rpb246IGRldGFpbC5zZWN0aW9uIGFzIFNlY3Rpb24sXG4gICAgICAgIGJhbm5lckVudHJ5RmFxOiBkZXRhaWwuZmFxLFxuICAgICAgfSlcbiAgICAgIHNldExheW91dE1vZGUobmV4dExheW91dClcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuXG4gICAgICBjb25zdCBob3N0Q29udGV4dCA9IHtcbiAgICAgICAgc2VjdGlvbjogZGV0YWlsLnNlY3Rpb24gYXMgU2VjdGlvbixcbiAgICAgICAgcHJvamVjdDogZGV0YWlsLnNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3Rhc2snID8gKGRldGFpbC5wcm9qZWN0ID8/IG51bGwpIDogbnVsbCxcbiAgICAgICAgY2xpZW50OiBkZXRhaWwuc2VjdGlvbiA9PT0gJ2NsaWVudCcgPyAoZGV0YWlsLmNsaWVudCA/PyBudWxsKSA6IG51bGwsXG4gICAgICAgIHRhc2s6IGRldGFpbC5zZWN0aW9uID09PSAndGFzaycgPyAoZGV0YWlsLnRhc2sgPz8gbnVsbCkgOiBudWxsLFxuICAgICAgICBjaGlwc1Byb2plY3Q6IG51bGwsXG4gICAgICB9XG5cbiAgICAgIGVuc3VyZUFnZW50c0xvYWRlZCgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBsZXQgcmVzb2x2ZWRBZ2VudElkOiBzdHJpbmcgfCBudWxsID0gYWdlbnQ/LmlkID8/IG51bGxcblxuICAgICAgICAgIGlmIChpc0dsb2JhbEhlYWRlck9wZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QWdlbnQgPSBhZ2VudHNEYXRhUmVmLmN1cnJlbnRbMF1cbiAgICAgICAgICAgIGlmIChmaXJzdEFnZW50KSB7XG4gICAgICAgICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgICAgICAgICAgIHJlc29sdmVkQWdlbnRJZCA9IGZpcnN0QWdlbnQuaWRcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmVkQWdlbnRJZCA9IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgICAgICAgaXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICAgICAgICAgIGFnZW50c05hdkFjdGl2ZTogbnVsbCxcbiAgICAgICAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHJlc29sdmVkQWdlbnRJZCxcbiAgICAgICAgICAgIHNpZGViYXJPcGVuOiBzaWRlYmFyT3BlblJlZi5jdXJyZW50LFxuICAgICAgICAgICAgZHJhZ1Bvc2l0aW9uOiBudWxsLFxuICAgICAgICAgICAgaG9zdENvbnRleHQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgICB9LFxuICAgIFtcbiAgICAgIGFnZW50Py5pZCxcbiAgICAgIGNsZWFyQWdlbnQsXG4gICAgICBlbnN1cmVBZ2VudHNMb2FkZWQsXG4gICAgICBmb2N1c0NoYXRJbnB1dCxcbiAgICAgIHNlbGVjdEFnZW50LFxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlLFxuICAgICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgICAgc2V0Q2xpZW50LFxuICAgICAgc2V0UHJvamVjdCxcbiAgICAgIHNldFRhc2ssXG4gICAgICB1c2VyLmlkLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlUmVhZHkgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICApID0+IHZvaWQsXG4gICAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICAgIHN0cmVhbWluZzogYm9vbGVhbixcbiAgICAgIHdyaXRpbmc6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIHNldFNlbmRNZXNzYWdlRnVuY3Rpb24oKCkgPT4gc2VuZE1lc3NhZ2UpXG4gICAgICBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uKCgpID0+IHN0b3BHZW5lcmF0aW9uKVxuICAgICAgc2V0SXNTdHJlYW1pbmcoc3RyZWFtaW5nKVxuICAgICAgc2V0SXNXcml0aW5nKHdyaXRpbmcpXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAoc2VuZE1lc3NhZ2VGdW5jdGlvbiAmJiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgICBzZW5kTWVzc2FnZUZ1bmN0aW9uKG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZCwgY29udGV4dERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkLCBjb250ZXh0RGF0YSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzdGFydENoYXQsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIFNpIGVzdGFtb3MgZW4gdW5hIGNvbnZlcnNhY2nDs24geSB2YW1vcyBhIGhvbWUsIHJlc2V0ZWFyIGluaXRpYWxDaGF0SWQgeSBpbmNyZW1lbnRhciBuZXdDaGF0S2V5XG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgLy8gTm8gY29ydGFtb3MgbGEgZ2VuZXJhY2nDs246IGxhIHNlc2nDs24gc2lndWUgcmVzcG9uZGllbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAvLyBObyBib3JyYXIgZWwgY2xpZW50ZSBzaSBlcyBhZ2VudGUgZGUgY2xpZW50ZXMgKGlndWFsIHF1ZSBlbCBwcm95ZWN0byBzZSBtYW50aWVuZSlcbiAgICAgIGlmIChhZ2VudD8uZW50aXR5ICE9PSAnY2xpZW50Jykge1xuICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgfVxuICAgICAgaWYgKHNlY3Rpb24gIT09ICd0YXNrJykge1xuICAgICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgKCFhZ2VudCB8fCBhZ2VudD8uaXNfZGVsZXRlZCB8fCBhZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyB8fCBhZ2VudD8uaGFzX25vdF9hY2Nlc3MgfHwgYWdlbnQ/LnByb2plY3RfZGVsZXRlZCkgJiZcbiAgICAgIGFnZW50cy5kYXRhLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50cy5kYXRhWzBdKVxuICAgIH1cbiAgICAvLyBPcmNoZXN0cmF0b3IgZW4gaG9tZSBnbG9iYWwgKGhlYWRlci9wbGFubmVyKTogYWwgaW5pY2lhciB1biBjaGF0IG51ZXZvIHNlIGRlYmUgdm9sdmVyIGFsIHBhc28gMVxuICAgIC8vIChsaXN0YSBkZSBjb250ZXh0b3MgcmVjaWVudGVzKSwgcG9yIGxvIHF1ZSBoYXkgcXVlIGxpbXBpYXIgdG9kbyBlbCBjb250ZXh0byBwaW5lYWRvLlxuICAgIGlmIChpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJykge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgIH1cbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICB9LCBbXG4gICAgb3B0aW9ucy5ob21lLFxuICAgIG9wdGlvbnMuY2hhdCxcbiAgICBjdXJyZW50T3B0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBhZ2VudCxcbiAgICBhZ2VudHMsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgIHNlY3Rpb24sXG4gIF0pXG5cbiAgZ29Ib21lUmVmLmN1cnJlbnQgPSBoYW5kbGVHb0hvbWVcblxuICBjb25zdCBzdGFydE5ld0NoYXRGcm9tQ2F0YWxvZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmcm9tTXlBZ2VudHMgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHNcbiAgICBjb25zdCBmcm9tTXlTa2lsbHMgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHNcbiAgICBjb25zdCBhZ2VudHNMaXN0ID0gZnJvbU15QWdlbnRzIHx8IGZyb21NeVNraWxscyA/IGF3YWl0IGVuc3VyZUFnZW50c0xvYWRlZCgpIDogYWdlbnRzLmRhdGFcbiAgICBjb25zdCBmaXJzdEFnZW50ID0gYWdlbnRzTGlzdFswXVxuXG4gICAgaWYgKGZpcnN0QWdlbnQpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgfVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB0b2dnbGVXZWJTZWFyY2goKVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICB9LCBbXG4gICAgYWdlbnRzLmRhdGEsXG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGVuc3VyZUFnZW50c0xvYWRlZCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRUYXNrLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVTdGFydE5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZnJvbU15QWdlbnRzID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzXG4gICAgY29uc3QgZnJvbU15U2tpbGxzID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15U2tpbGxzXG4gICAgY29uc3QgZnJvbU1haWFrZXJIb21lID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgaXNNYWlha2VyQWdlbnRTZWxlY3RlZFxuXG4gICAgaWYgKGZyb21NeUFnZW50cyB8fCBmcm9tTXlTa2lsbHMgfHwgZnJvbU1haWFrZXJIb21lKSB7XG4gICAgICBzdGFydE5ld0NoYXRGcm9tQ2F0YWxvZygpLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGhhbmRsZUdvSG9tZSgpXG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIGhhbmRsZUdvSG9tZSwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCwgc3RhcnROZXdDaGF0RnJvbUNhdGFsb2ddKVxuXG4gIGNvbnN0IGhhbmRsZVJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIGhhbmRsZUdvSG9tZSgpXG4gIH0sIFtoYW5kbGVHb0hvbWVdKVxuXG4gIC8vIEJvdMOzbiBcInZvbHZlclwiIGRlbCBoZWFkZXIgKHNvbG8gb3JjaGVzdHJhdG9yKTpcbiAgLy8gLSBEZXNkZSBlbCBjaGF0IChoZWFkZXIgbyBwcm9qZWN0L2NsaWVudC90YXNrKTogaW5pY2lhIHVuYSBjb252ZXJzYWNpw7NuIG51ZXZhIGNvbnNlcnZhbmRvIGVsXG4gIC8vICAgY29udGV4dG8gcGluZWFkbyB5IHZ1ZWx2ZSBhbCBob21lIChwYXNvIDIgY29uIEZBUXMvRlVBcykuXG4gIC8vIC0gRW4gZWwgaG9tZSBwYXNvIDIgKEZBUXMvRlVBcyBjb24gY29udGV4dG8pOiBsaW1waWEgZWwgY29udGV4dG8gcGluZWFkbyB5IHZ1ZWx2ZSBhbCBwYXNvIDFcbiAgLy8gICAoc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEVuIGhlYWRlciBzaWVtcHJlOyBlbiBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWxcbiAgLy8gICB1c3VhcmlvIHJlaW5pY2nDsyBlbCBjb250ZXh0byAoZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKS5cbiAgY29uc3QgaGFuZGxlQmFjayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0byA9IHJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24oc2VjdGlvbiwgYWdlbnQ/LnR5cGUsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5ob21lKVxuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdEJhY2ssIHsgdG8gfSlcblxuICAgIC8vIERlc2RlIGVsIGNoYXQg4oaSIG51ZXZhIGNvbnZlcnNhY2nDs24gU0lOIGJvcnJhciBlbCBjb250ZXh0byBwaW5lYWRvLCB2b2x2aWVuZG8gYWwgaG9tZS5cbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgIC8vIE5vIGNvcnRhbW9zIGxhIGdlbmVyYWNpw7NuOiBsYSBzZXNpw7NuIHNpZ3VlIHJlc3BvbmRpZW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEhvbWUgcGFzbyAyIChjb250ZXh0byBwaW5lYWRvKSDihpIgbGltcGlhciBlbCBjb250ZXh0byB5IHZvbHZlciBhbCBwYXNvIDEgKGNvbnRleHRvcyByZWNpZW50ZXMpLlxuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiAoaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSB8fCBkaWRSZXNldENvbnRleHRJblNlY3Rpb24pKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICB9XG4gIH0sIFtcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgc2VjdGlvbixcbiAgICBhZ2VudD8udHlwZSxcbiAgICBhbXBsaXR1ZEV2ZW50LFxuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBkaWRSZXNldENvbnRleHRJblNlY3Rpb24sXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIF0pXG5cbiAgLy8gRGV0ZWN0YSBlbCByZWluaWNpbyBkZSBjb250ZXh0byBlbiBwcm9qZWN0L2NsaWVudC90YXNrOiBjb250ZXh0byBwaW5lYWRvIOKGkiB2YWPDrW8gY29uIGVsXG4gIC8vIG9yY2hlc3RyYXRvciAocC4gZWouIGFsIHJlc2VsZWNjaW9uYXIgTUFJQSBlbiBlbCBsaXN0YWRvKS4gU29sbyBsYSB0cmFuc2ljacOzbiBjdWVudGEsIGFzw60gdW5hXG4gIC8vIGFwZXJ0dXJhIGZyZXNjYSAoY29udGV4dG8gcGluZWFkbyBkZXNkZSBsYSBzZWNjacOzbikgbm8gbG8gYWN0aXZhLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBpbm5lZCA9ICEhKHRhc2s/LmlkIHx8IGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IGNsaWVudD8uaWQgfHwgcHJvamVjdD8uaWQpXG4gICAgY29uc3Qgd2FzUGlubmVkID0gcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudFxuICAgIHByZXZIYXNQaW5uZWRDb250ZXh0UmVmLmN1cnJlbnQgPSBwaW5uZWRcbiAgICBpZiAoIWlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmIHdhc1Bpbm5lZCAmJiAhcGlubmVkKSB7XG4gICAgICBzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24odHJ1ZSlcbiAgICB9XG4gIH0sIFt0YXNrPy5pZCwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsIGNsaWVudD8uaWQsIHByb2plY3Q/LmlkLCBzZWN0aW9uLCBhZ2VudD8udHlwZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbk1lcmdlQ3JlYXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAobmV4dEFnZW50Py5pZCkge1xuICAgICAgICBhZGRBZ2VudChuZXh0QWdlbnQsIHsgbmF2aWdhdGVIb21lOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbYWRkQWdlbnRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TeW5jRWRpdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmICghbmV4dEFnZW50Py5pZCkgcmV0dXJuXG4gICAgICB1cGRhdGVBZ2VudChuZXh0QWdlbnQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBuZXh0QWdlbnQuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW3VwZGF0ZUFnZW50LCBzZWxlY3RBZ2VudCwgYWdlbnQ/LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5DaGF0VmlldyA9ICgpID0+IHtcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmNoYXQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBFbCDDrWNvbm8gZGUgTUFJQSBkZWwgaGVhZGVyIGxsZXZhIHNpZW1wcmUgYWwgSG9tZS4gU2kgTUFJQSB5YSBlc3TDoSBtb250YWRhIHBlcm9cbiAgICogbWluaW1pemFkYSwgZWwgaG9zdCBubyBwdWVkZSByZXNvbHZlcmxvIGNhbWJpYW5kbyBgaXNPcGVuYCAoeWEgZXN0w6EgZW4gdHJ1ZSksXG4gICAqIGFzw60gcXVlIGF2aXNhIHBvciBldmVudG8geSBhY8OhIHJlc3RhdXJhbW9zIHkgdmFtb3MgYWwgSG9tZS5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkhvbWUgPSAoKSA9PiB7XG4gICAgICBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyKHtcbiAgICAgICAgc2VjdGlvbjogJ2hlYWRlcicsXG4gICAgICAgIGVudGl0eTogeyBwcm9qZWN0SWQ6IG51bGwsIGNsaWVudElkOiBudWxsIH0sXG4gICAgICB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKlxuICAgKiBPdHJvIGhvc3QgKHByb3llY3RvLCBjbGllbnRlLCBiYW5uZXIsIGhlYWRlcuKApikgcGlkZSBhYnJpciBNQUlBIG1pZW50cmFzIHlhIGhheSB1bmFcbiAgICogaW5zdGFuY2lhIG1vbnRhZGEuIEV4cGFuZGUgc2kgZXN0YWJhIG1pbmltaXphZG8sIGFwbGljYSBlbCBjb250ZXh0byBkZWwgaG9zdCBudWV2b1xuICAgKiB5IHZhIGFsIGhvbWUg4oCUIHNpbiByZXN0YXVyYXIgbGEgY29udmVyc2FjacOzbiBwcmV2aWEgKGVzbyBsbyBoYWNlIGVsIHBpbGwpLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuRnJvbUhvc3QgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8TWFpYUhvc3RPcGVuRGV0YWlsPlxuICAgICAgaWYgKCFkZXRhaWwpIHJldHVyblxuICAgICAgYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlcihkZXRhaWwpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCBvcGVuRnJvbUhvc3QpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgb3BlbkZyb21Ib3N0KVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKiBNaXNtbyBmbHVqbyBxdWUgQ2hhdEFJTXlBZ2VudHMuaGFuZGxlVXNlQWdlbnQgKyBvbkJhY2sgKGhhbmRsZXJzLmhvbWUpLlxuICAgKiAgRWwgZGV0YWlsIHB1ZWRlIHRyYWVyIG9wY2lvbmFsbWVudGUgYHByb2plY3RgLCBgY2xpZW50YCwgYHRhc2tgIHBhcmEgZmxvd3MgcXVlXG4gICAqICBuZWNlc2l0YW4gcHJlc2VydmFyIGNvbnRleHRvIChlai4gc2VsZWN0b3IgZGUgYWdlbnRlcyBkZXNkZSB1bmEgdGFyZWEpLiBTaSBubyB2aWVuZW4sXG4gICAqICBzZSBtYW50aWVuZSBlbCBjb21wb3J0YW1pZW50byBvcmlnaW5hbCBkZSBsaW1waWFyIHByb2plY3QvY2xpZW50LiAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5OZXdDaGF0V2l0aEFnZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PHtcbiAgICAgICAgYWdlbnQ6IEFnZW50XG4gICAgICAgIHByb2plY3Q/OiBQcm9qZWN0IHwgbnVsbFxuICAgICAgICBjbGllbnQ/OiBDbGllbnQgfCBudWxsXG4gICAgICAgIHRhc2s/OiBUYXNrIHwgbnVsbFxuICAgICAgfT5cbiAgICAgIGNvbnN0IG5leHRBZ2VudCA9IGRldGFpbD8uYWdlbnRcbiAgICAgIGlmICghbmV4dEFnZW50KSByZXR1cm5cblxuICAgICAgc2V0UHJvamVjdChkZXRhaWw/LnByb2plY3QgPz8gbnVsbClcbiAgICAgIHNldENsaWVudD8uKGRldGFpbD8uY2xpZW50ID8/IG51bGwpXG4gICAgICBpZiAoZGV0YWlsPy50YXNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0VGFzaz8uKGRldGFpbC50YXNrKVxuICAgICAgfVxuICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIH1cbiAgfSwgW3NlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdKVxuXG4gIGNvbnN0IGFwcGx5U2tpbGxVc2VGbG93ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNraWxsOiBTa2lsbCwgdXNlRmlyc3RBZ2VudDogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgZmlyc3RBZ2VudCA9IGF3YWl0IGVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlKHtcbiAgICAgICAgdXNlRmlyc3RBZ2VudCxcbiAgICAgICAgYWdlbnRzOiBhZ2VudHNEYXRhUmVmLmN1cnJlbnQsXG4gICAgICAgIGVuc3VyZUFnZW50c0xvYWRlZCxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChmaXJzdEFnZW50KSB7XG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgICB9XG5cbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIGRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0KHNraWxsKVxuICAgIH0sXG4gICAgW2Vuc3VyZUFnZW50c0xvYWRlZCwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IHNraWxsLCB1c2VGaXJzdEFnZW50ID0gZmFsc2UgfSA9XG4gICAgICAgIChldmVudCBhcyBDdXN0b21FdmVudDx7IHNraWxsOiBTa2lsbDsgdXNlRmlyc3RBZ2VudD86IGJvb2xlYW4gfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFza2lsbCkgcmV0dXJuXG5cbiAgICAgIGFwcGx5U2tpbGxVc2VGbG93KHNraWxsLCB1c2VGaXJzdEFnZW50KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCwgaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlKVxuICAgIH1cbiAgfSwgW2FwcGx5U2tpbGxVc2VGbG93XSlcblxuICAvLyBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGFnZW50X3R5cGUvYWdlbnRfZW50aXR5ICsgY29udGV4dG8pLCBlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TZXNzaW9uTWV0YSA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZ0IGFzIEN1c3RvbUV2ZW50PFNlc3Npb25NZXRhPlxuICAgICAgaWYgKGRldGFpbCkgc2V0U2Vzc2lvbk1ldGEoZGV0YWlsKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24gbGltcGlhbW9zIGxhIG1ldGFkYXRhOyBlbCBsb2FkIGRlIGxhIG51ZXZhIHNlc3Npb24gbGEgdnVlbHZlIGEgZW1pdGlyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBDYXJ0ZWwgXCJjb250aW51YXIgZW4gdW4gY2hhdCBudWV2b1wiOiBzZSBtdWVzdHJhIGFsIGFicmlyIHVuYSBjb252ZXJzYWNpw7NuIGRlIHVuIGNsb25lIGxlZ2FjeVxuICAvLyAoYWdlbnRfdHlwZSA9PT0gJ2Nsb25lJyBjb24gZW50aXR5IHByb2plY3QvdGFzay9jbGllbnQpLiBFbCBpbnB1dCBzZSByZWVtcGxhemEgcG9yIGVsIGNhcnRlbC5cbiAgY29uc3QgbGVnYWN5Q29udGV4dFNlc3Npb24gPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVMZWdhY3lDb250ZXh0U2Vzc2lvbihjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuY2hhdCwgc2Vzc2lvbk1ldGEpLFxuICAgIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNlc3Npb25NZXRhXVxuICApXG5cbiAgLy8gTWFyY2EgZWwgYWdlbnRlIGRlIGxhIGNvbnZlcnNhY2nDs24gbGVnYWN5IHBhcmEgcXVlIGhlYWRlciwgc2VsZWN0b3IgeSBhdmF0YXIgbXVlc3RyZW4gZWwgbG9nb1xuICAvLyBNQUlBIHkgZWwgbm9tYnJlIHRhY2hhZG8gKGFnZW50ZSBvYnNvbGV0byksIHNpbiBkZXBlbmRlciBkZWwgYHR5cGVgIHJlc3VlbHRvIGRlIGxhIHNlc2nDs24gdmllamEuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxlZ2FjeUNvbnRleHRTZXNzaW9uICYmIGFnZW50ICYmICFhZ2VudC5pc19sZWdhY3lfY29udGV4dCkge1xuICAgICAgc2VsZWN0QWdlbnQoeyAuLi5hZ2VudCwgaXNfbGVnYWN5X2NvbnRleHQ6IHRydWUgfSlcbiAgICB9XG4gIH0sIFtsZWdhY3lDb250ZXh0U2Vzc2lvbiwgYWdlbnQsIHNlbGVjdEFnZW50XSlcblxuICAvLyBBYnJlIHVuIGNoYXQgbnVldm8gY29uIGVsIG9yY2hlc3RyYXRvciBzZXRlYW5kbyBlbCBjb250ZXh0byBkZWwgY2xvbmUgbGVnYWN5IChtaXNtbyBjcml0ZXJpb1xuICAvLyBxdWUgY2xpY2tlYXIgdW4gY29udGV4dG8gcmVjaWVudGUgZW4gZWwgaG9tZSDihpIgcGFzbyAyIGNvbiBGQVFzL2FjY2lvbmVzIGRlIGVzZSBjb250ZXh0bykuXG4gIGNvbnN0IGhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNlc3Npb25NZXRhKSByZXR1cm5cbiAgICBjb25zdCB7XG4gICAgICBhZ2VudEVudGl0eSxcbiAgICAgIHByb2plY3RJZDogcElkLFxuICAgICAgcHJvamVjdE5hbWU6IHBOYW1lLFxuICAgICAgY2xpZW50SWQ6IGNJZCxcbiAgICAgIGNsaWVudE5hbWU6IGNOYW1lLFxuICAgICAgdGFza0lkOiB0SWQsXG4gICAgICB0YXNrTmFtZTogdE5hbWUsXG4gICAgfSA9IHNlc3Npb25NZXRhXG5cbiAgICBjb25zdCBvcmNoZXN0cmF0b3IgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gYS50eXBlID09PSAnb3JjaGVzdHJhdG9yJylcbiAgICBpZiAoIW9yY2hlc3RyYXRvcikgcmV0dXJuXG5cbiAgICAvLyBSZXNldCBkZWwgY2hhdCDihpIgY29udmVyc2FjacOzbiBudWV2YSAobGEgYW50ZXJpb3Igc2lndWUgZW4gYmFja2dyb3VuZClcbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG5cbiAgICAvLyBTZXRlYXIgY29udGV4dG8gKG1pc21vIGNyaXRlcmlvIHF1ZSBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0IGRlbCBob21lKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgaWYgKGFnZW50RW50aXR5ID09PSAnY2xpZW50JyAmJiBjSWQgIT0gbnVsbCkge1xuICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICdwcm9qZWN0JyAmJiBwSWQgIT0gbnVsbCkge1xuICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgIGlkOiBwSWQsXG4gICAgICAgIG5hbWU6IHBOYW1lIHx8ICcnLFxuICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KHsgcHJvamVjdElkOiBTdHJpbmcocElkKSwgcHJvamVjdE5hbWU6IHBOYW1lIHx8ICcnLCBjbGllbnROYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICd0YXNrJyAmJiB0SWQgIT0gbnVsbCkge1xuICAgICAgc2V0VGFzaz8uKHtcbiAgICAgICAgaWQ6IHRJZCxcbiAgICAgICAgbmFtZTogdE5hbWUgfHwgJycsXG4gICAgICAgIC4uLihwSWQgIT0gbnVsbCA/IHsgcHJvamVjdElkOiBwSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNJZCAhPSBudWxsID8geyBjbGllbnRJZDogY0lkIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgaWYgKGNJZCAhPSBudWxsKSBzZXRDbGllbnQ/Lih7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgICBpZiAocElkICE9IG51bGwpIHtcbiAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgaWQ6IHBJZCxcbiAgICAgICAgICBuYW1lOiBwTmFtZSB8fCAnJyxcbiAgICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7IHByb2plY3RJZDogU3RyaW5nKHBJZCksIHByb2plY3ROYW1lOiBwTmFtZSB8fCAnJywgY2xpZW50TmFtZTogY05hbWUgfHwgJycgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RBZ2VudChvcmNoZXN0cmF0b3IpXG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgfSwgW3Nlc3Npb25NZXRhLCBhZ2VudHMuZGF0YSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0LCBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSlcblxuICBjb25zdCBzaG93TmV3Q2hhdCA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0XG4gIGNvbnN0IGlzTXlBZ2VudHNTZWN0aW9uID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzXG4gIGNvbnN0IGlzTXlTa2lsbHNTZWN0aW9uID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15U2tpbGxzXG5cbiAgLy8gQm90w7NuIFwidm9sdmVyXCI6IHNvbG8gcGFyYSBlbCBvcmNoZXN0cmF0b3IuXG4gIC8vIC0gRW4gZWwgY2hhdDogZGlzcG9uaWJsZSBlbiB0b2RhcyBsYXMgc2VjY2lvbmVzIChoZWFkZXIgeSBwcm9qZWN0L2NsaWVudC90YXNrKS5cbiAgLy8gLSBFbiBlbCBob21lIHBhc28gMiAoRkFRcy9GVUFzIGNvbiBjb250ZXh0byBwaW5lYWRvKTogZW4gZWwgaGVhZGVyIHNpZW1wcmU7IGVuXG4gIC8vICAgcHJvamVjdC9jbGllbnQvdGFzayBzb2xvIHNpIGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIChwYXPDsyBwb3IgZWwgc2VsZWN0b3IgZGVcbiAgLy8gICBjb250ZXh0b3MgcmVjaWVudGVzKS4gRW4gZWwgcGFzbyAxIChzaW4gY29udGV4dG8pIE5PIHNlIG11ZXN0cmEuXG4gIGNvbnN0IGhhc1Bpbm5lZENvbnRleHQgPSAhISh0YXNrPy5pZCB8fCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCB8fCBjbGllbnQ/LmlkIHx8IHByb2plY3Q/LmlkKVxuICBjb25zdCBpc0NoYXRWaWV3ID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXRcbiAgY29uc3QgaXNIb21lU3RlcDIgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiBoYXNQaW5uZWRDb250ZXh0XG4gIGNvbnN0IGlzSGVhZGVySG9tZVN0ZXAyID0gaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBpc0hvbWVTdGVwMlxuICBjb25zdCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiA9ICFpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGlzSG9tZVN0ZXAyICYmIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvblxuICBjb25zdCBzaG93QmFja0J1dHRvbiA9XG4gICAgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmXG4gICAgIWhhc0Vycm9yICYmXG4gICAgIWxvYWRpbmcgJiZcbiAgICAoaXNDaGF0VmlldyB8fCBpc0hlYWRlckhvbWVTdGVwMiB8fCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMilcbiAgY29uc3QgaGFuZGxlT3Blbk1hcmtldHBsYWNlID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBhd2FpdCBlbnN1cmVBZ2VudHNMb2FkZWQoKVxuICAgIGNsZWFyQWdlbnQoKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teUFnZW50cylcbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgYWdlbnRzTmF2QWN0aXZlOiAnbXlBZ2VudHMnLFxuICAgICAgY3VycmVudE9wdGlvbjogb3B0aW9ucy5teUFnZW50cyxcbiAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICAgIGFnZW50SWQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW2NsZWFyQWdlbnQsIGVuc3VyZUFnZW50c0xvYWRlZCwgdXNlci5pZF0pXG5cbiAgY29uc3QgaGFuZGxlT3BlblNraWxscyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWNhbkFjY2Vzc1RvU2tpbGxzKHVzZXIpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2xlYXJBZ2VudCgpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLm15U2tpbGxzKVxuICAgIGhhbmRsZUdldFNraWxscygpXG4gICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgIGFnZW50c05hdkFjdGl2ZTogJ215U2tpbGxzJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMubXlTa2lsbHMsXG4gICAgfSlcbiAgfSwgW2NsZWFyQWdlbnQsIGhhbmRsZUdldFNraWxscywgdXNlcl0pXG5cbiAgY29uc3QgaGFuZGxlR29Ub01haWFrZXIgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgbGV0IG1haWFrZXJBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoKGE6IEFnZW50KSA9PiBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhKSlcbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgICAgIHBhdGg6IGBhZ2VudHM/YWdlbnRfdHlwZT1jbG9uZSZlbnRpdHk9Z2xvYmFsJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfWAsXG4gICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgICBtYWlha2VyQWdlbnQgPSAoZGF0YS5kYXRhIHx8IFtdKS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2V0VGFzaz8uKG51bGwpXG4gICAgc2VsZWN0QWdlbnQobWFpYWtlckFnZW50KVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdtYWlha2VyJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICAgIGFnZW50SWQ6IG1haWFrZXJBZ2VudC5pZCxcbiAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICB9KVxuICB9LCBbYWdlbnRzLmRhdGEsIGkxOG4ubGFuZ3VhZ2UsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChzbmFwc2hvdDogTWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBpZiAoc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlID09PSAnbXlTa2lsbHMnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgYWdlbnRUb1NlbGVjdDogQWdlbnQgfCB1bmRlZmluZWRcbiAgICAgIGlmIChzbmFwc2hvdC5hZ2VudElkICYmIHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSAhPT0gJ215QWdlbnRzJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSBhd2FpdCBmZXRjaEFnZW50RGV0YWlsKHNuYXBzaG90LmFnZW50SWQpXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cyhzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cycgPyB1bmRlZmluZWQgOiBhZ2VudFRvU2VsZWN0KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGFnZW50VG9TZWxlY3QgJiYgc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlICE9PSAnbXlBZ2VudHMnKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KGFnZW50VG9TZWxlY3QpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlR2V0QWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGFwcGx5U2Vzc2lvblJlc3RvcmUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoc25hcHNob3Q6IE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCkgPT4ge1xuICAgICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcblxuICAgICAgaWYgKHNuYXBzaG90Lmhvc3RDb250ZXh0Py5jaGlwc1Byb2plY3QpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHNuYXBzaG90Lmhvc3RDb250ZXh0LmNoaXBzUHJvamVjdClcbiAgICAgIH1cblxuICAgICAgaWYgKHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215QWdlbnRzJykge1xuICAgICAgICBhd2FpdCBoYW5kbGVPcGVuTWFya2V0cGxhY2UoKVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215U2tpbGxzJykge1xuICAgICAgICBoYW5kbGVPcGVuU2tpbGxzKClcbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUgPT09ICdtYWlha2VyJykge1xuICAgICAgICBhd2FpdCBoYW5kbGVHb1RvTWFpYWtlcigpXG4gICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc25hcHNob3QuY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0ICYmIHNuYXBzaG90LmFjdGl2ZUNoYXRJZCkge1xuICAgICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICAgIHNldEluaXRpYWxDaGF0SWQoc25hcHNob3QuYWN0aXZlQ2hhdElkKVxuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5zZXRBY3RpdmVDaGF0SWQoc25hcHNob3QuYWN0aXZlQ2hhdElkKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgICB9IGVsc2UgaWYgKHNuYXBzaG90LmN1cnJlbnRPcHRpb24gJiYgaXNWYWxpZE1haWFQYW5lbE9wdGlvbihzbmFwc2hvdC5jdXJyZW50T3B0aW9uKSkge1xuICAgICAgICBzZXRDdXJyZW50T3B0aW9uKHNuYXBzaG90LmN1cnJlbnRPcHRpb24gYXMgb3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgfSxcbiAgICBbXG4gICAgICBmb2N1c0NoYXRJbnB1dCxcbiAgICAgIGhhbmRsZUdvVG9NYWlha2VyLFxuICAgICAgaGFuZGxlT3Blbk1hcmtldHBsYWNlLFxuICAgICAgaGFuZGxlT3BlblNraWxscyxcbiAgICAgIGhhbmRsZXJzLFxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlLFxuICAgICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgICAgc3luY1BhbmVsU2Vzc2lvbixcbiAgICBdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnRcbiAgICBpZiAoIXNuYXBzaG90IHx8IHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZi5jdXJyZW50KSByZXR1cm5cbiAgICBzZXNzaW9uUmVzdG9yZVN0YXJ0ZWRSZWYuY3VycmVudCA9IHRydWVcblxuICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuXG4gICAgY29uc3QgcnVuUmVzdG9yZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZShzbmFwc2hvdClcbiAgICAgICAgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGF3YWl0IGFwcGx5U2Vzc2lvblJlc3RvcmUoc25hcHNob3QpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc1Jlc3RvcmluZ1Nlc3Npb24oZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcnVuUmVzdG9yZSgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgfSwgW2FwcGx5U2Vzc2lvblJlc3RvcmUsIGxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZSwgc2V0Q2hhdFZpZXdWaXNpYmxlXSlcblxuICBjb25zdCBoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJlbW92ZUFnZW50KGFnZW50SWQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBhZ2VudElkKSB7XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQoYWdlbnRJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudD8uaWQsIHJlbW92ZUFnZW50LCBzZWxlY3RGaXJzdEFnZW50XVxuICApXG5cbiAgLy8gRWwgZm9vdGVyIChpbnB1dCkgc2Ugb2N1bHRhIHNvbG8gZW4gZWwgaG9tZSBtYXJrZXRwbGFjZSBkZSBNYWlha2VyIChicm93c2UgZGUgYWdlbnRlcykuXG4gIC8vIEVsIGhvbWUgZGVsIG9yY2hlc3RyYXRvciBzw60gcGVybWl0ZSBlc2NyaWJpciwgYXPDrSBxdWUgbWFudGllbmUgZWwgZm9vdGVyLlxuICBjb25zdCBpc01haWFrZXJDcmVhdG9ySG9tZSA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRcblxuICBjb25zdCBtb2RhbFBhbmVsID0gKFxuICAgIDw+XG4gICAgICB7dmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbiwgdXNlcikgJiYgIWlzRmxvYXRpbmcgPyAoXG4gICAgICAgIDxTaWRlYmFyXG4gICAgICAgICAgb25Hb1RvQ2hhdD17Z29Ub0NoYXR9XG4gICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0U2lkZWJhckhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgIGhhbmRsZUdvVG9Ib21lPXtoYW5kbGVHb0hvbWV9XG4gICAgICAgICAgaGFuZGxlU3RhcnROZXdDaGF0PXtoYW5kbGVTdGFydE5ld0NoYXR9XG4gICAgICAgICAgaGFuZGxlT3Blbk1hcmtldHBsYWNlPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgc2hvd05ld0NoYXQ9e3Nob3dOZXdDaGF0fVxuICAgICAgICAgIHJlZmV0Y2hDaGF0cz17cmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cz17c2V0UmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhc0Vycm9yPXtzaWRlYmFySGFzRXJyb3J9XG4gICAgICAgICAgYWdlbnRzTmF2QWN0aXZlPXtzaWRlYmFyQWdlbnRzTmF2QWN0aXZlfVxuICAgICAgICAgIGhhbmRsZU9wZW5Ta2lsbHM9e2hhbmRsZU9wZW5Ta2lsbHN9XG4gICAgICAgICAgb25PcGVuTWFpYWtlckNyZWF0b3I9e2hhbmRsZUdvVG9NYWlha2VyfVxuICAgICAgICAgIGlzTGVnYWN5Q29udGV4dFNlc3Npb249eyEhbGVnYWN5Q29udGV4dFNlc3Npb259XG4gICAgICAgICAgaW5pdGlhbE9wZW49e3NhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudD8uc2lkZWJhck9wZW4gPz8gZmFsc2V9XG4gICAgICAgICAgb25PcGVuQ2hhbmdlPXtoYW5kbGVTaWRlYmFyT3BlbkNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFNDQ0FJTUNvbnRlbnQgZXhwYW5kZWQ9e2V4cGFuZGVkfSBmbG9hdGluZz17aXNGbG9hdGluZ30+XG4gICAgICAgIDxDaGF0QUlNb2RhbEhlYWRlclxuICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlPXtoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBkcmFnZ2FibGU9e2lzRmxvYXRpbmd9XG4gICAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgICBvbkRyYWdNb3ZlPXtoYW5kbGVEcmFnTW92ZX1cbiAgICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICAgICAgaGFuZGxlTWluaW1pemU9e2hhbmRsZU1pbmltaXplfVxuICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgaGFzRXJyb3I9eyEhYWdlbnRFcnJvcn1cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGxvYWRpbmdNb3JlPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXthZ2VudHMuaGFzX21vcmV9XG4gICAgICAgICAgaGFuZGxlUmVzZXRDaGF0PXtoYW5kbGVSZXNldENoYXR9XG4gICAgICAgICAgb25BZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICBsb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgc29ydEFnZW50c0xpc3Q9e3NvcnRBZ2VudHNMaXN0fVxuICAgICAgICAgIGlzTXlBZ2VudHNTZWN0aW9uPXtpc015QWdlbnRzU2VjdGlvbn1cbiAgICAgICAgICBpc015U2tpbGxzU2VjdGlvbj17aXNNeVNraWxsc1NlY3Rpb259XG4gICAgICAgICAgaXNNYWlha2VyU2VjdGlvbj17aXNNYWlha2VyQ3JlYXRvckhvbWV9XG4gICAgICAgICAgc2hvd0JhY2tCdXR0b249e3Nob3dCYWNrQnV0dG9ufVxuICAgICAgICAgIG9uQmFjaz17aGFuZGxlQmFja31cbiAgICAgICAgLz5cbiAgICAgICAge2hhc0Vycm9yID8gKFxuICAgICAgICAgIDxNQUlBRXJyb3IgLz5cbiAgICAgICAgKSA6IHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpID8gKFxuICAgICAgICAgIDxDaGF0QUlDb250ZW50XG4gICAgICAgICAgICBjdXJyZW50T3B0aW9uPXtjb21wdXRlZEN1cnJlbnRPcHRpb259XG4gICAgICAgICAgICBoYW5kbGVycz17eyAuLi5oYW5kbGVycywgY2hhdDogc3RhcnRDaGF0LCBob21lOiBoYW5kbGVycy5ob21lLCBoYW5kbGVHb0hvbWUgfX1cbiAgICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldEhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgICAgcmVmcz17eyB1c2VySW5pdGlhbE1lc3NhZ2UsIGluaXRpYWxDaGF0SWQgfX1cbiAgICAgICAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeT17aGFuZGxlU2VuZE1lc3NhZ2VSZWFkeX1cbiAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgIGZsb2F0aW5nPXtpc0Zsb2F0aW5nfVxuICAgICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICAgIGxvYWRpbmdBZ2VudHM9e2xvYWRpbmd9XG4gICAgICAgICAgICBvbkRlbGV0ZUFnZW50PXtoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50c31cbiAgICAgICAgICAgIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIGhhc01vcmVBZ2VudHM9eyEhYWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgICAgbG9hZGluZ01vcmVBZ2VudHM9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgICAgb25Mb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgICBvbkdvVG9NYWlha2VyPXtoYW5kbGVHb1RvTWFpYWtlcn1cbiAgICAgICAgICAgIG15U2tpbGxzPXtteVNraWxsc31cbiAgICAgICAgICAgIHNoYXJlZFNraWxscz17c2hhcmVkU2tpbGxzfVxuICAgICAgICAgICAgbG9hZGluZ1NraWxscz17bG9hZGluZ1NraWxsc31cbiAgICAgICAgICAgIG9uRGVsZXRlU2tpbGw9e3JlbW92ZVNraWxsfVxuICAgICAgICAgICAgb25TZWFyY2hBZ2VudHM9e3NlYXJjaEN1c3RvbUFnZW50c31cbiAgICAgICAgICAgIHNlYXJjaExvYWRpbmdBZ2VudHM9e3NlYXJjaExvYWRpbmd9XG4gICAgICAgICAgICBhZ2VudEVycm9yPXthZ2VudEVycm9yfVxuICAgICAgICAgICAgaXNSZXN0b3JpbmdTZXNzaW9uPXtpc1Jlc3RvcmluZ1Nlc3Npb259XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UHJvamVjdFN1bW1hcnlDb250ZW50IG9uUmVzdGFydFN1bW1hcnk9e2hhbmRsZXJzLmhvbWV9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHsoKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmICEhYWdlbnRzPy5kYXRhPy5sZW5ndGgpIHx8XG4gICAgICAgICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpICYmXG4gICAgICAgICAgIWlzTWFpYWtlckNyZWF0b3JIb21lICYmXG4gICAgICAgICAgIWhhc0Vycm9yICYmXG4gICAgICAgICAgIWxvYWRpbmcgJiZcbiAgICAgICAgICB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKSAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFpTW9kYWxGb290ZXJcbiAgICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgICBoYW5kbGVTZW5kTWVzc2FnZT17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGhhbmRsZVN0b3BHZW5lcmF0aW9uPXtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9ufVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzV3JpdGluZz17aXNXcml0aW5nfVxuICAgICAgICAgICAgICBjaGF0SWQ9e2luaXRpYWxDaGF0SWR9XG4gICAgICAgICAgICAgIG5ld0NoYXRLZXk9e25ld0NoYXRLZXl9XG4gICAgICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgICAgIGxlZ2FjeUNvbnRleHRTZXNzaW9uPXtsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgICAgICAgb25Db250aW51ZUluTmV3Q2hhdD17aGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0fVxuICAgICAgICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1Db250ZW50PlxuICAgIDwvPlxuICApXG5cbiAgY29uc3QgY29udGVudFdyYXBwZXIgPSAoXG4gICAgPFNDQ0FJTUNvbnRlbnRXcmFwcGVyIGV4cGFuZGVkPXtleHBhbmRlZH0gZmxvYXRpbmc9e2lzRmxvYXRpbmd9IHJlZj17Y29udGVudFdyYXBwZXJSZWZ9PlxuICAgICAge21vZGFsUGFuZWx9XG4gICAgPC9TQ0NBSU1Db250ZW50V3JhcHBlcj5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgc2VsZWN0b3IgJiZcbiAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8U0NDQUlNV3JhcHBlclxuICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgIGRyYWdQb3NpdGlvbj17cmVzb2x2ZWREcmFnUG9zaXRpb259XG4gICAgICAgIGVsZXZhdGVkPXtzZWN0aW9uID09PSAndGFzayd9XG4gICAgICAgICRtaW5pbWl6ZWQ9e2hpZGVQYW5lbENvbnRlbnR9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSU1NaW5pbWl6ZWRIaWRlICRoaWRkZW49e2hpZGVQYW5lbENvbnRlbnR9PlxuICAgICAgICAgIDxGbG9hdGluZ1BhbmVsTW90aW9uIHRpbHQ9e3RpbHRNb3Rpb259IGV4cGFuZGVkPXtleHBhbmRlZH0+XG4gICAgICAgICAgICB7Y29udGVudFdyYXBwZXJ9XG4gICAgICAgICAgPC9GbG9hdGluZ1BhbmVsTW90aW9uPlxuICAgICAgICA8L1NDQ0FJTU1pbmltaXplZEhpZGU+XG4gICAgICAgIHtzaG93TWluaW1pemVkUGlsbCAmJiAoXG4gICAgICAgICAgPE1haWFNaW5pbWl6ZWRQaWxsXG4gICAgICAgICAgICBzaG93Tm92ZWx0eURvdD17c2hvd01pbmltaXplZE5vdmVsdHlEb3R9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aGFzQWN0aXZlU3RyZWFtfVxuICAgICAgICAgICAgb25SZXN0b3JlPXtoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtQWdlbnRNb2RhbFxuICAgICAgICAgICAgYWRkQWdlbnQ9e2FkZEFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgICAgcmVtb3ZlQWdlbnQ9e3JlbW92ZUFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNTa2lsbHNBY2Nlc3MgJiYgKFxuICAgICAgICAgIDxBYm1Ta2lsbE1vZGFsIGFkZFNraWxsPXthZGRTa2lsbH0gdXBkYXRlU2tpbGxJbkxpc3Q9e3VwZGF0ZVNraWxsSW5MaXN0fSByZW1vdmVTa2lsbD17cmVtb3ZlU2tpbGx9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHt1c2VySGFzU2tpbGxzQWNjZXNzICYmIDxBYm1Ta2lsbEdlbmVyYXRlTW9kYWwgLz59XG4gICAgICAgIDxTbmFja2JhciAvPlxuICAgICAgPC9TQ0NBSU1XcmFwcGVyPixcbiAgICAgIHNlbGVjdG9yXG4gICAgKVxu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
|
|
1523
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9Ta2lsbHMiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsIkFibVNraWxsR2VuZXJhdGVNb2RhbCIsIlNFQ1RJT05TIiwiU0NDQUlNQ29udGVudCIsIlNDQ0FJTUNvbnRlbnRXcmFwcGVyIiwiU0NDQUlNTWluaW1pemVkSGlkZSIsIlNDQ0FJTVdyYXBwZXIiLCJNYWlhTWluaW1pemVkUGlsbCIsInVzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90IiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCIsInVzZUZhcXNTdG9yZSIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFkTGFzdEFjdGl2ZUNoYXRJZCIsIndyaXRlTGFzdEFjdGl2ZUNoYXRJZCIsImNsZWFyTWFpYVBhbmVsU2Vzc2lvbiIsInBhdGNoTWFpYVBhbmVsU2Vzc2lvbiIsInJlYWRNYWlhUGFuZWxTZXNzaW9uIiwid3JpdGVNYWlhUGFuZWxTZXNzaW9uIiwidXNlU2Vzc2lvbnNTdG9yZSIsImZldGNoTWFpYSIsImZldGNoQWdlbnREZXRhaWwiLCJtYXBDT1JMYW5nIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5UIiwiY2xhbXBGbG9hdGluZ1BhbmVsUG9zaXRpb24iLCJoYXNBbnlBY3RpdmVTZXNzaW9uSW5NZXRhIiwiaGFzQmFubmVyRmFxVGl0bGUiLCJpc0Jhbm5lckZhcVJlYWR5VG9BdXRvU2VuZCIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJyZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUluaXRpYWxDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUxlZ2FjeUNvbnRleHRTZXNzaW9uIiwicmVzb2x2ZVNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJzaG91bGRSZXN0b3JlRXhwYW5kZWRQYW5lbCIsInNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQiLCJ2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSIsInJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZSIsImJ1aWxkSG9zdFRha2VvdmVyUGVyc2lzdENvbnRleHQiLCJidWlsZE1haWFQYW5lbFNlc3Npb25QYXRjaCIsImRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0IiwiZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UiLCJyZXNvbHZlRmxvYXRpbmdQYW5lbERyYWdQb3NpdGlvbiIsInJlc29sdmVIb3N0VGFrZW92ZXJBZ2VudElkIiwicmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nIiwicmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQiLCJyZXNvbHZlTmV4dERyYWdQb3NpdGlvbiIsInJlc29sdmVVc2VySGFzQWdlbnRNYW5hZ2VtZW50UGVybWlzc2lvbnMiLCJzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0Iiwic2hvdWxkQmFja1N0YXJ0TmV3Q2hhdFByZXNlcnZpbmdDb250ZXh0Iiwic2hvdWxkTWFya09yY2hlc3RyYXRvckNvbnRleHRSZXNldCIsInNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwicmVzb2x2ZUhhc1Bpbm5lZENvbnRleHQiLCJyZXNvbHZlT3JjaGVzdHJhdG9ySG9tZU5hdkZsYWdzIiwic2hvdWxkU2hvd09yY2hlc3RyYXRvckJhY2tCdXR0b24iLCJzaG91bGRDbGVhckNsaWVudE9uR29Ib21lRnJvbUNoYXQiLCJzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0Iiwic2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZSIsInNob3VsZENsZWFyT3JjaGVzdHJhdG9yR2xvYmFsQ29udGV4dE9uR29Ib21lIiwic2hvdWxkVXNlQWN0aXZlQ2hhdFNlbmRIYW5kbGVyIiwic2hvdWxkUHJlZmV0Y2hBZ2VudHNGb3JDYXRhbG9nTmV3Q2hhdCIsImNhbk9wZW5NYWlhTWFya2V0cGxhY2UiLCJzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQiLCJidWlsZExlZ2FjeUNvbnRleHRBZ2VudCIsImJ1aWxkTGVnYWN5Q29udGV4dE1pZ3JhdGlvblBhdGNoIiwiZmluZE9yY2hlc3RyYXRvckFnZW50Iiwic2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50Iiwic2hvdWxkUGVyc2lzdExhc3RBY3RpdmVDaGF0SWQiLCJzaG91bGRTeW5jUGFuZWxTZXNzaW9uT25QYWdlSGlkZSIsInJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZSIsInNob3VsZEF0dGVtcHRJbml0aWFsQWdlbnRzRmV0Y2giLCJmaW5kQWdlbnRGb3JDaGF0SXRlbSIsInNob3VsZEFwcGx5Q2xpZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRTZWxlY3RGaXJzdEFnZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRSZXNldENoYXRTdGF0ZU9uR29Ib21lIiwic2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudCIsInJlc29sdmVPcGVuTmV3Q2hhdFdpdGhBZ2VudENvbnRleHQiLCJjYW5Db250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQiLCJyZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSIsInNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZSIsInNob3VsZEZldGNoQWdlbnREZXRhaWxPblNlc3Npb25SZXN0b3JlIiwic2hvdWxkUGFzc0FnZW50VG9HZXRBZ2VudHNPblJlc3RvcmUiLCJzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUiLCJyZXNvbHZlU25hcHNob3RDaGlwc1Byb2plY3QiLCJyZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzIiwic2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIiLCJyZXNvbHZlQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3Iiwic2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlciIsInNob3VsZFVzZUVsZXZhdGVkTWFpYVBhbmVsIiwic2hvdWxkUmVzZWxlY3RBZ2VudEFmdGVyRGVsZXRlIiwic2hvdWxkQ2xlYXJEcmFnUG9zaXRpb25PbkxheW91dENoYW5nZSIsInNob3VsZFN0YXJ0RmxvYXRpbmdQYW5lbERyYWciLCJpc0FjdGl2ZUZsb2F0aW5nRHJhZ1BvaW50ZXIiLCJzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyIsInNob3VsZFVzZURyYWdDbGFtcEZhbGxiYWNrIiwicmVzb2x2ZUxheW91dERyYWdQb3NpdGlvblVwZGF0ZSIsInJlc29sdmVQZXJzaXN0ZWREcmFnUG9zaXRpb25PbkVuZCIsImJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCIsInNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJJRF9NT0RBTF9DSEFUX0FHRU5UIiwiQ2hhdEFJTW9kYWwiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIyIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNSIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjYiLCJ1c2VyIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJpMThuIiwiYW1wbGl0dWRFdmVudCIsInNhdmVkU2Vzc2lvbk9uTW91bnRSZWYiLCJpZCIsInNob3VsZFJlc3RvcmVFeHBhbmRlZCIsImN1cnJlbnQiLCJwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYiLCJzZXNzaW9uUmVzdG9yZVN0YXJ0ZWRSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc1Jlc3RvcmluZ1Nlc3Npb24iLCJzZXRJc1Jlc3RvcmluZ1Nlc3Npb24iLCJzaWRlYmFyT3BlblJlZiIsInNpZGViYXJPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc01pbmltaXplZCIsInNldElzTWluaW1pemVkIiwic2V0Q2hhdFZpZXdWaXNpYmxlIiwic3RhdGUiLCJ1bnJlYWRDb3VudCIsInNob3dNaW5pbWl6ZWROb3ZlbHR5RG90IiwiYWN0aXZlQ2hhdElkIiwiaGFzQWN0aXZlU3RyZWFtIiwibWV0YSIsImdvVG9DaGF0UmVmIiwiZ29Ib21lUmVmIiwiaGFuZGxlTWluaW1pemUiLCJhaUNoYXRNaW5pbWl6ZSIsImlzRXhwYW5kZWQiLCJmb2N1c0NoYXRJbnB1dCIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsIl91c2VTdGF0ZTUiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJfdXNlU3RhdGU2IiwidXNlckluaXRpYWxNZXNzYWdlIiwic2V0VXNlckluaXRpYWxNZXNzYWdlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpbml0aWFsQ2hhdElkIiwic2V0SW5pdGlhbENoYXRJZCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwibmV3Q2hhdEtleSIsInNldE5ld0NoYXRLZXkiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZXNzaW9uTWV0YSIsInNldFNlc3Npb25NZXRhIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInNlbmRNZXNzYWdlRnVuY3Rpb24iLCJzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsInN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImlzU3RyZWFtaW5nIiwic2V0SXNTdHJlYW1pbmciLCJfdXNlU3RhdGUxNyIsIl91c2VTdGF0ZTE4IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlMTkiLCJfdXNlU3RhdGUyMCIsInJlZmV0Y2hDaGF0cyIsInNldFJlZmV0Y2hDaGF0cyIsIl91c2VTdGF0ZTIxIiwic2F2ZWQiLCJhZ2VudHNOYXZBY3RpdmUiLCJjdXJyZW50T3B0aW9uIiwiX3VzZVN0YXRlMjIiLCJzZXRDdXJyZW50T3B0aW9uIiwiX3VzZVN0YXRlMjMiLCJfdXNlU3RhdGUyNCIsImhhc0Vycm9yIiwic2V0SGFzRXJyb3IiLCJfdXNlU3RhdGUyNSIsIl91c2VTdGF0ZTI2IiwiZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uIiwic2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uIiwicHJldkhhc1Bpbm5lZENvbnRleHRSZWYiLCJoYW5kbGVycyIsIl91c2VTdGF0ZTI3IiwiX3VzZVN0YXRlMjgiLCJzaWRlYmFySGFzRXJyb3IiLCJzZXRTaWRlYmFySGFzRXJyb3IiLCJsYW5nIiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50IiwiY2xlYXJBZ2VudCIsInNlY3Rpb24iLCJhZ2VudCIsInByb2plY3QiLCJjbGllbnQiLCJ0YXNrIiwiY2hpcHNQcm9qZWN0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0IiwiYmFubmVyRW50cnlGYXEiLCJzZXRUYXNrIiwidG9vbHRpcFpJbmRleCIsIl91c2VHZXRBZ2VudHMiLCJoYW5kbGVHb0hvbWUiLCJob21lIiwiYWdlbnRzIiwibG9hZGluZyIsImxvYWRpbmdNb3JlIiwiYWdlbnRFcnJvciIsImVycm9yIiwiaGFuZGxlR2V0QWdlbnRzIiwibG9hZE1vcmVBZ2VudHMiLCJzZWFyY2hDdXN0b21BZ2VudHMiLCJzZWFyY2hMb2FkaW5nIiwiYWRkQWdlbnQiLCJyZW1vdmVBZ2VudCIsInVwZGF0ZUFnZW50IiwidXBkYXRlQWdlbnRGYXZvcml0ZSIsInNlbGVjdEZpcnN0QWdlbnQiLCJzb3J0QWdlbnRzTGlzdCIsImFnZW50c0RhdGFSZWYiLCJkYXRhIiwiX3VzZUdldFNraWxscyIsIm15U2tpbGxzIiwic2hhcmVkU2tpbGxzIiwibG9hZGluZ1NraWxscyIsImhhbmRsZUdldFNraWxscyIsImFkZFNraWxsIiwidXBkYXRlU2tpbGxJbkxpc3QiLCJyZW1vdmVTa2lsbCIsInVzZXJIYXNQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiQm9vbGVhbiIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJ1c2VySGFzU2tpbGxzQWNjZXNzIiwiY29tcHV0ZWRDdXJyZW50T3B0aW9uIiwibXVsdGlBZ2VudHNBY2Nlc3MiLCJpc01haWFrZXJBZ2VudFNlbGVjdGVkIiwic2lkZWJhckFnZW50c05hdkFjdGl2ZSIsImFnZW50c0ZldGNoZWRSZWYiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJjb25jYXQiLCJfdXNlU3RhdGUyOSIsIl91c2VTdGF0ZTMwIiwibGF5b3V0TW9kZSIsInNldExheW91dE1vZGUiLCJoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlIiwibW9kZSIsImV4cGFuZGVkIiwiaXNGbG9hdGluZyIsImNvbnRlbnRXcmFwcGVyUmVmIiwiX3VzZVN0YXRlMzEiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIzIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNCIsImRyYWdQb3NpdGlvbiIsIl91c2VTdGF0ZTMyIiwic2V0RHJhZ1Bvc2l0aW9uIiwiX3VzZUZsb2F0aW5nUGFuZWxEcmFnIiwidGlsdE1vdGlvbiIsInN0YXJ0UG9pbnRlclRyYWNraW5nIiwic2FtcGxlUG9pbnRlck1vdmUiLCJlbmRQb2ludGVyVHJhY2tpbmciLCJkcmFnU3RhdGVSZWYiLCJjbGFtcERyYWdQb3NpdGlvbiIsIngiLCJ5IiwiY29udGVudFdyYXBwZXIiLCJfZ2V0Qm91bmRpbmdDbGllbnRSZWMiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsImhlaWdodCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInByZXYiLCJwYW5lbFdpZHRoIiwicGFkIiwiaGFuZGxlRHJhZ0VuZCIsImV2ZW50IiwiX2RyYWdTdGF0ZVJlZiRjdXJyZW50IiwicG9pbnRlcklkIiwiYm9keSIsInN0eWxlIiwidXNlclNlbGVjdCIsImN1cnNvciIsInJlY3QiLCJsZWZ0IiwidG9wIiwiaGFuZGxlRHJhZ01vdmUiLCJkcmFnU3RhdGUiLCJjbGllbnRYIiwiY2xpZW50WSIsIm5leHRQb3NpdGlvbiIsIm9mZnNldFgiLCJvZmZzZXRZIiwicmVzb2x2ZWREcmFnUG9zaXRpb24iLCJ2aWV3cG9ydFdpZHRoIiwiY2xhbXAiLCJoYW5kbGVEcmFnU3RhcnQiLCJidXR0b24iLCJ0YXJnZXQiLCJpbml0aWFsUG9zaXRpb24iLCJwb2ludGVyT2Zmc2V0WCIsInBvaW50ZXJPZmZzZXRZIiwiY3VycmVudFRhcmdldCIsInNldFBvaW50ZXJDYXB0dXJlIiwicHJldmVudERlZmF1bHQiLCJhaUNoYXREcmFnZ2FibGUiLCJzdGFydENoYXQiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJjb250ZXh0RGF0YSIsImNoYXQiLCJiYW5uZXJGYXFBdXRvU2VudFJlZiIsImJhbm5lckZhcSIsImZhcVRpdGxlIiwiYWxyZWFkeVNlbnQiLCJhZ2VudElkIiwicHJvamVjdElkIiwiY2xpZW50SWQiLCJ1bmRlZmluZWQiLCJlbnRpdHkiLCJnb1RvQ2hhdCIsInNlc3Npb25JZCIsInNlc3Npb25FeHRlcm5hbElkIiwic2V0QWN0aXZlQ2hhdElkIiwiZGV0YWlsIiwic2VsZWN0ZWRBZ2VudCIsImhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlIiwib3BlbiIsInN5bmNQYW5lbFNlc3Npb24iLCJfYWdlbnQkaWQiLCJwYXRjaCIsImhvc3RDb250ZXh0IiwiZW5zdXJlQWdlbnRzTG9hZGVkIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjYWNoZWRBZ2VudHMiLCJsb2FkZWRBZ2VudHMiLCJsb2FkZWRGcm9tRmV0Y2giLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiYWJydXB0IiwibGVuZ3RoIiwic2VudCIsInN0b3AiLCJ0aW1lciIsImNsZWFyVGltZW91dCIsIm9uUGFnZUhpZGUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkIiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsImNoYXRzIiwibGFzdEFjdGl2ZUNoYXRJZCIsIl9nb1RvQ2hhdFJlZiRjdXJyZW50IiwiY2FsbCIsIl9nb0hvbWVSZWYkY3VycmVudCIsImFpQ2hhdE9wZW4iLCJvcHRpb24iLCJ0aGVuIiwiYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlciIsImVudGl0eVN0YXRlIiwiZ2V0U3RhdGUiLCJjbGVhckZhcXMiLCJjbGVhckdsb2JhbFBpbm5lZENvbnRleHQiLCJuZXh0TGF5b3V0IiwiZmFxIiwiX2FnZW50JGlkMiIsInJlc29sdmVkQWdlbnRJZCIsImhhbmRsZVNlbmRNZXNzYWdlUmVhZHkiLCJzZW5kTWVzc2FnZSIsInN0b3BHZW5lcmF0aW9uIiwic3RyZWFtaW5nIiwid3JpdGluZyIsImhhbmRsZVNlbmRNZXNzYWdlIiwidHlwZSIsInN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwiX2NhbGxlZTIiLCJhZ2VudHNMaXN0IiwiZmlyc3RBZ2VudCIsIl90IiwiX2NvbnRleHQyIiwibXlBZ2VudHMiLCJoYW5kbGVTdGFydE5ld0NoYXQiLCJoYW5kbGVSZXNldENoYXQiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImhhbmRsZUJhY2siLCJ0byIsImFpQ2hhdEJhY2siLCJwaW5uZWQiLCJ0YXNrSWQiLCJjaGlwc1Byb2plY3RJZCIsIndhc1Bpbm5lZCIsIm9uTWVyZ2VDcmVhdGVkQWdlbnQiLCJldnQiLCJfcmVmNCIsIm5leHRBZ2VudCIsIm5hdmlnYXRlSG9tZSIsIm9uU3luY0VkaXRlZEFnZW50IiwiX3JlZjUiLCJvcGVuQ2hhdFZpZXciLCJvcGVuSG9tZSIsIm9wZW5Gcm9tSG9zdCIsIl9yZWY2Iiwib3Blbk5ld0NoYXRXaXRoQWdlbnQiLCJfcmVmNyIsImNvbnRleHRQYXRjaCIsInNob3VsZFNldFRhc2siLCJfY29udGV4dFBhdGNoJHRhc2siLCJhcHBseVNraWxsVXNlRmxvdyIsIl9yZWY4IiwiX2NhbGxlZTQiLCJza2lsbCIsInVzZUZpcnN0QWdlbnQiLCJfY29udGV4dDQiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUiLCJfcmVmOSIsIl9yZWY5JHVzZUZpcnN0QWdlbnQiLCJvblNlc3Npb25NZXRhIiwiX3JlZjAiLCJsZWdhY3lDb250ZXh0U2Vzc2lvbiIsImhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCIsIl9idWlsZExlZ2FjeUNvbnRleHRNaSIsIm9yY2hlc3RyYXRvciIsImFnZW50RW50aXR5IiwicElkIiwicE5hbWUiLCJwcm9qZWN0TmFtZSIsImNJZCIsImNOYW1lIiwiY2xpZW50TmFtZSIsInRJZCIsInROYW1lIiwidGFza05hbWUiLCJtaWdyYXRpb25QYXRjaCIsIl91c2VNZW1vIiwic2hvd05ld0NoYXQiLCJpc015QWdlbnRzU2VjdGlvbiIsImlzTXlTa2lsbHNTZWN0aW9uIiwiaXNNYWlha2VyQ3JlYXRvckhvbWUiLCJoYXNDaGF0QWNjZXNzIiwibWFpbkNvbnRlbnRWaWV3Iiwic2hvd01vZGFsRm9vdGVyIiwiaG9tZU9wdGlvbiIsImNoYXRPcHRpb24iLCJhZ2VudHNDb3VudCIsImhhc0FjY2VzcyIsInNob3dTaWRlYmFyIiwiaGFzUGlubmVkQ29udGV4dCIsIl9yZXNvbHZlT3JjaGVzdHJhdG9ySCIsImlzQ2hhdFZpZXciLCJpc0hlYWRlckhvbWVTdGVwMiIsImlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyIiwic2hvd0JhY2tCdXR0b24iLCJhZ2VudFR5cGUiLCJoYW5kbGVPcGVuTWFya2V0cGxhY2UiLCJfY2FsbGVlNSIsIl9jb250ZXh0NSIsImhhbmRsZU9wZW5Ta2lsbHMiLCJoYW5kbGVHb1RvTWFpYWtlciIsIl9jYWxsZWU2IiwibWFpYWtlckFnZW50IiwicmVzcG9uc2UiLCJfdDIiLCJfY29udGV4dDYiLCJmaW5kIiwiYSIsInBhdGgiLCJtZXRob2QiLCJqc29uIiwibG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlIiwiX3JlZjExIiwiX2NhbGxlZTciLCJzbmFwc2hvdCIsImFnZW50VG9TZWxlY3QiLCJfdDMiLCJfY29udGV4dDciLCJfeDMiLCJhcHBseVNlc3Npb25SZXN0b3JlIiwiX3JlZjEyIiwiX2NhbGxlZTgiLCJjaGlwc1Byb2plY3RGcm9tU25hcHNob3QiLCJyZXN0b3JlUm91dGUiLCJfc25hcHNob3QkYWN0aXZlQ2hhdEkiLCJfc25hcHNob3QkYWN0aXZlQ2hhdEkyIiwiX2NvbnRleHQ4IiwiX3g0IiwicnVuUmVzdG9yZSIsIl9yZWYxMyIsIl9jYWxsZWU5IiwiX2NvbnRleHQ5IiwiZmluaXNoIiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJtb2RhbFBhbmVsIiwiY2hpbGRyZW4iLCJvbkdvVG9DaGF0Iiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwib25PcGVuTWFpYWtlckNyZWF0b3IiLCJpc0xlZ2FjeUNvbnRleHRTZXNzaW9uIiwiaW5pdGlhbE9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJmbG9hdGluZyIsIm9uTGF5b3V0TW9kZUNoYW5nZSIsImRyYWdnYWJsZSIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnTW92ZSIsIm9uRHJhZ0VuZCIsImhhc01vcmUiLCJoYXNfbW9yZSIsIm9uQWdlbnRVcGRhdGUiLCJpc01haWFrZXJTZWN0aW9uIiwib25CYWNrIiwiX29iamVjdFNwcmVhZCIsInJlZnMiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJsb2FkaW5nQWdlbnRzIiwib25EZWxldGVBZ2VudCIsIm9uRmF2b3JpdGVBZ2VudFVwZGF0ZSIsImhhc01vcmVBZ2VudHMiLCJsb2FkaW5nTW9yZUFnZW50cyIsIm9uTG9hZE1vcmVBZ2VudHMiLCJvbkdvVG9NYWlha2VyIiwib25EZWxldGVTa2lsbCIsIm9uU2VhcmNoQWdlbnRzIiwic2VhcmNoTG9hZGluZ0FnZW50cyIsIm9uUmVzdGFydFN1bW1hcnkiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImNoYXRJZCIsIm9uQ29udGludWVJbk5ld0NoYXQiLCJyZWYiLCJjcmVhdGVQb3J0YWwiLCJlbGV2YXRlZCIsIiRtaW5pbWl6ZWQiLCIkaGlkZGVuIiwidGlsdCIsInNob3dOb3ZlbHR5RG90Iiwib25SZXN0b3JlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL0NoYXRBSU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXVzZWxlc3MtZnJhZ21lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGNhbkFjY2Vzc1RvU2tpbGxzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Blcm1pc3Npb25zJ1xuaW1wb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQUVycm9yJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5cbmltcG9ydCB7IENoYXRBSUNvbnRlbnQgfSBmcm9tICcuLi9DaGF0QUlDb250ZW50J1xuaW1wb3J0IHsgYnVpbGRIYW5kbGVycywgb3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJy4uL1NpZGViYXInXG5pbXBvcnQgeyB1c2VHZXRBZ2VudHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMnXG5pbXBvcnQgeyB1c2VHZXRTa2lsbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9nZXRTa2lsbHMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0LCB0eXBlIFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgQ2hhdEFJTW9kYWxIZWFkZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXInXG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9TbmFja0Jhci9TbmFja2JhcidcbmltcG9ydCB7IFByb2plY3RTdW1tYXJ5Q29udGVudCB9IGZyb20gJy4uL1Byb2plY3RTdW1tYXJ5Q29udGVudCdcbmltcG9ydCB7IEFibUFnZW50TW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxNb2RhbCwgU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxHZW5lcmF0ZU1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsR2VuZXJhdGVNb2RhbC9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBTQ0NBSU1Db250ZW50LCBTQ0NBSU1Db250ZW50V3JhcHBlciwgU0NDQUlNTWluaW1pemVkSGlkZSwgU0NDQUlNV3JhcHBlciB9IGZyb20gJy4vQ2hhdEFJTW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgTWFpYU1pbmltaXplZFBpbGwgfSBmcm9tICcuL2NvbXBvbmVudHMvTWFpYU1pbmltaXplZFBpbGwnXG5pbXBvcnQgeyB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90J1xuaW1wb3J0IHtcbiAgZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4LFxuICBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSxcbiAgcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUsXG4gIHNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZSxcbn0gZnJvbSAnLi9sYXlvdXQnXG5pbXBvcnQgeyBGbG9hdGluZ1BhbmVsTW90aW9uLCB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQgfSBmcm9tICcuL2Zsb2F0aW5nUGFuZWxNb3Rpb24nXG5pbXBvcnQgeyBDaGF0QWlNb2RhbEZvb3RlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEZvb3RlcidcbmltcG9ydCB7IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3NraWxsJ1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DbGllbnQnXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvVGFzaydcbmltcG9ydCB7IHVzZUZhcXNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUZhcXNTdG9yZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSwgdXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgdHlwZSB7IENoYXRMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2NoYXRzU3RvcmUudHlwZXMnXG5pbXBvcnQgeyByZWFkTGFzdEFjdGl2ZUNoYXRJZCwgd3JpdGVMYXN0QWN0aXZlQ2hhdElkIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYUxhc3RDaGF0UGVyc2lzdGVuY2UnXG5pbXBvcnQge1xuICBjbGVhck1haWFQYW5lbFNlc3Npb24sXG4gIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbixcbiAgcmVhZE1haWFQYW5lbFNlc3Npb24sXG4gIHR5cGUgTWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90LFxuICB3cml0ZU1haWFQYW5lbFNlc3Npb24sXG59IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFQYW5lbFNlc3Npb25QZXJzaXN0ZW5jZSdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgdHlwZSBNYWlhSG9zdE9wZW5EZXRhaWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhSG9zdE9wZW4nXG5pbXBvcnQge1xuICBjbGFtcEZsb2F0aW5nUGFuZWxQb3NpdGlvbixcbiAgaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YSxcbiAgaGFzQmFubmVyRmFxVGl0bGUsXG4gIGlzQmFubmVyRmFxUmVhZHlUb0F1dG9TZW5kLFxuICByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uLFxuICByZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICByZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24sXG4gIHJlc29sdmVMZWdhY3lDb250ZXh0U2Vzc2lvbixcbiAgcmVzb2x2ZVNpZGViYXJBZ2VudHNOYXZBY3RpdmUsXG4gIHNob3VsZFJlc3RvcmVFeHBhbmRlZFBhbmVsLFxuICBzaG91bGRTa2lwRmxvYXRpbmdEcmFnVGFyZ2V0LFxuICB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSxcbiAgcmVzb2x2ZUhvc3RUYWtlb3ZlckVudGl0eVN0YXRlLFxuICBidWlsZEhvc3RUYWtlb3ZlclBlcnNpc3RDb250ZXh0LFxuICBidWlsZE1haWFQYW5lbFNlc3Npb25QYXRjaCxcbiAgZGlzcGF0Y2hTa2lsbE1lbnRpb25JbnNlcnQsXG4gIGVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlLFxuICByZXNvbHZlRmxvYXRpbmdQYW5lbERyYWdQb3NpdGlvbixcbiAgcmVzb2x2ZUhvc3RUYWtlb3ZlckFnZW50SWQsXG4gIHJlc29sdmVNYWlhTW9kYWxJMThuTGFuZyxcbiAgcmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQsXG4gIHJlc29sdmVOZXh0RHJhZ1Bvc2l0aW9uLFxuICByZXNvbHZlVXNlckhhc0FnZW50TWFuYWdlbWVudFBlcm1pc3Npb25zLFxuICBzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0LFxuICBzaG91bGRCYWNrU3RhcnROZXdDaGF0UHJlc2VydmluZ0NvbnRleHQsXG4gIHNob3VsZE1hcmtPcmNoZXN0cmF0b3JDb250ZXh0UmVzZXQsXG4gIHNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nLFxuICByZXNvbHZlSGFzUGlubmVkQ29udGV4dCxcbiAgcmVzb2x2ZU9yY2hlc3RyYXRvckhvbWVOYXZGbGFncyxcbiAgc2hvdWxkU2hvd09yY2hlc3RyYXRvckJhY2tCdXR0b24sXG4gIHNob3VsZENsZWFyQ2xpZW50T25Hb0hvbWVGcm9tQ2hhdCxcbiAgc2hvdWxkQ2xlYXJUYXNrT25Hb0hvbWVGcm9tQ2hhdCxcbiAgc2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZSxcbiAgc2hvdWxkQ2xlYXJPcmNoZXN0cmF0b3JHbG9iYWxDb250ZXh0T25Hb0hvbWUsXG4gIHNob3VsZFVzZUFjdGl2ZUNoYXRTZW5kSGFuZGxlcixcbiAgc2hvdWxkUHJlZmV0Y2hBZ2VudHNGb3JDYXRhbG9nTmV3Q2hhdCxcbiAgY2FuT3Blbk1haWFNYXJrZXRwbGFjZSxcbiAgc2hvdWxkTWFya0FnZW50QXNMZWdhY3lDb250ZXh0LFxuICBidWlsZExlZ2FjeUNvbnRleHRBZ2VudCxcbiAgYnVpbGRMZWdhY3lDb250ZXh0TWlncmF0aW9uUGF0Y2gsXG4gIGZpbmRPcmNoZXN0cmF0b3JBZ2VudCxcbiAgc2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50LFxuICBzaG91bGRQZXJzaXN0TGFzdEFjdGl2ZUNoYXRJZCxcbiAgc2hvdWxkU3luY1BhbmVsU2Vzc2lvbk9uUGFnZUhpZGUsXG4gIHJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZSxcbiAgc2hvdWxkQXR0ZW1wdEluaXRpYWxBZ2VudHNGZXRjaCxcbiAgZmluZEFnZW50Rm9yQ2hhdEl0ZW0sXG4gIHNob3VsZEFwcGx5Q2xpZW50T25Ib3N0VGFrZW92ZXIsXG4gIHNob3VsZFNlbGVjdEZpcnN0QWdlbnRPbkhvc3RUYWtlb3ZlcixcbiAgc2hvdWxkUmVzZXRDaGF0U3RhdGVPbkdvSG9tZSxcbiAgc2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudCxcbiAgcmVzb2x2ZU9wZW5OZXdDaGF0V2l0aEFnZW50Q29udGV4dCxcbiAgY2FuQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0LFxuICByZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSxcbiAgc2hvdWxkU2tpcEFnZW50c0xvYWRPblNlc3Npb25SZXN0b3JlLFxuICBzaG91bGRGZXRjaEFnZW50RGV0YWlsT25TZXNzaW9uUmVzdG9yZSxcbiAgc2hvdWxkUGFzc0FnZW50VG9HZXRBZ2VudHNPblJlc3RvcmUsXG4gIHNob3VsZFNlbGVjdEZldGNoZWRBZ2VudEFmdGVyUmVzdG9yZSxcbiAgcmVzb2x2ZVNuYXBzaG90Q2hpcHNQcm9qZWN0LFxuICByZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzLFxuICBzaG91bGRSZW5kZXJDaGF0U2lkZWJhcixcbiAgcmVzb2x2ZUNoYXRNb2RhbE1haW5Db250ZW50VmlldyxcbiAgc2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlcixcbiAgc2hvdWxkVXNlRWxldmF0ZWRNYWlhUGFuZWwsXG4gIHNob3VsZFJlc2VsZWN0QWdlbnRBZnRlckRlbGV0ZSxcbiAgc2hvdWxkQ2xlYXJEcmFnUG9zaXRpb25PbkxheW91dENoYW5nZSxcbiAgc2hvdWxkU3RhcnRGbG9hdGluZ1BhbmVsRHJhZyxcbiAgaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyLFxuICBzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyxcbiAgc2hvdWxkVXNlRHJhZ0NsYW1wRmFsbGJhY2ssXG4gIHJlc29sdmVMYXlvdXREcmFnUG9zaXRpb25VcGRhdGUsXG4gIHJlc29sdmVQZXJzaXN0ZWREcmFnUG9zaXRpb25PbkVuZCxcbiAgYnVpbGRVc2VySW5pdGlhbE1lc3NhZ2VGcm9tU3RhcnRDaGF0LFxuICBzaG91bGRSZXNldFNpZGViYXJFcnJvck9uU3RhcnRDaGF0LFxuICB0eXBlIExlZ2FjeVNlc3Npb25NZXRhLFxufSBmcm9tICcuL0NoYXRBSU1vZGFsLmhlbHBlcnMnXG5cbi8qKiBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcyBhbCBjYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24pLiAqL1xudHlwZSBTZXNzaW9uTWV0YSA9IExlZ2FjeVNlc3Npb25NZXRhICYge1xuICBjaGF0SWQ6IHN0cmluZ1xuICBwcm9qZWN0SWQ/OiBudW1iZXJcbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgdGFza0lkPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBJRF9NT0RBTF9DSEFUX0FHRU5UID0gJ21vZGFscy1wb3J0YWwtbWFpYS1jaGF0LWFnZW50J1xuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWwgPSAoKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYgPSB1c2VSZWY8TWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90IHwgbnVsbD4ocmVhZE1haWFQYW5lbFNlc3Npb24odXNlci5pZCkpXG4gIGNvbnN0IHNob3VsZFJlc3RvcmVFeHBhbmRlZCA9IHNob3VsZFJlc3RvcmVFeHBhbmRlZFBhbmVsKHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudClcbiAgY29uc3QgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmID0gdXNlUmVmPE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCB8IG51bGw+KFxuICAgIHNob3VsZFJlc3RvcmVFeHBhbmRlZCA/IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudCA6IG51bGxcbiAgKVxuICBjb25zdCBzZXNzaW9uUmVzdG9yZVN0YXJ0ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFtpc1Jlc3RvcmluZ1Nlc3Npb24sIHNldElzUmVzdG9yaW5nU2Vzc2lvbl0gPSB1c2VTdGF0ZSgoKSA9PiBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCAhPSBudWxsKVxuICBjb25zdCBzaWRlYmFyT3BlblJlZiA9IHVzZVJlZihzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LnNpZGViYXJPcGVuID8/IGZhbHNlKVxuXG4gIC8vIFRyYXMgbmF2ZWdhciBlbiBlbCBob3N0IChmdWxsIHBhZ2UgcmVsb2FkKSwgcmVzdGF1cmFtb3MgZWwgcGFuZWwgc2kgZXN0YWJhIGFiaWVydG8uXG4gIGNvbnN0IFtpc01pbmltaXplZCwgc2V0SXNNaW5pbWl6ZWRdID0gdXNlU3RhdGUoKCkgPT4gIXNob3VsZFJlc3RvcmVFeHBhbmRlZClcbiAgY29uc3Qgc2V0Q2hhdFZpZXdWaXNpYmxlID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRDaGF0Vmlld1Zpc2libGUpXG4gIGNvbnN0IHVucmVhZENvdW50ID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS51bnJlYWRDb3VudClcbiAgY29uc3Qgc2hvd01pbmltaXplZE5vdmVsdHlEb3QgPSB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdChpc01pbmltaXplZCwgdW5yZWFkQ291bnQpXG4gIGNvbnN0IGFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuYWN0aXZlQ2hhdElkKVxuICAvLyBMb3MgXCIuLi5cIiBkZWwgcGlsbCBzYWxlbiBkZWwgbW90b3IsIG5vIGRlIGlzU3RyZWFtaW5nL2lzV3JpdGluZzogZXNvcyByZWZsZWphblxuICAvLyBsYSBzZXNpw7NuIGFjdGl2YSB5IHF1ZWRhbiBzdGFsZSBjdWFuZG8gdW5hIHJlc3B1ZXN0YSB0ZXJtaW5hIGVuIGJhY2tncm91bmQuXG4gIGNvbnN0IGhhc0FjdGl2ZVN0cmVhbSA9IHVzZVNlc3Npb25zU3RvcmUoc3RhdGUgPT4gaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YShzdGF0ZS5tZXRhKSlcblxuICAvKiogZ29Ub0NoYXQgLyBoYW5kbGVHb0hvbWUgc2UgZGVmaW5lbiBtw6FzIGFiYWpvOyBsb3MgcmVmcyBldml0YW4gZGVwZW5kZXIgZGVsIG9yZGVuIGRlIGRlY2xhcmFjacOzbi4gKi9cbiAgY29uc3QgZ29Ub0NoYXRSZWYgPSB1c2VSZWY8KChjaGF0OiBDaGF0TGlzdEl0ZW0pID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ29Ib21lUmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG5cbiAgLy8gTW9udGEgY2VycmFkYSBzYWx2byByZXN0YXVyYWNpw7NuIGRlIHNlc2nDs246IHNpIGVsIHBhbmVsIG5vIGVzdMOhIHZpc2libGUsIGxhcyByZXNwdWVzdGFzXG4gIC8vIG51ZXZhcyBxdWVkYW4gY29tbyBubyBsZcOtZGFzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRTZXRDaGF0Vmlld0hpZGRlbk9uTW91bnQocGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB9XG4gIH0sIFtzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIC8vIFBlcnNpc3RpbW9zIGxhIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSBwYXJhIHBvZGVyIHZvbHZlciBhIGVsbGEgZGVzZGUgZWwgcGlsbCBkZXNwdcOpc1xuICAvLyBkZSBuYXZlZ2FyIG8gcmVmcmVzY2FyLiBFbCB0YWtlb3ZlciBkZXNkZSB1biBob3N0IGxhIGxpbXBpYSAodmEgYWwgSG9tZSkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZFBlcnNpc3RMYXN0QWN0aXZlQ2hhdElkKGFjdGl2ZUNoYXRJZCkpIHtcbiAgICAgIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkLCBhY3RpdmVDaGF0SWQpXG4gICAgfVxuICB9LCBbYWN0aXZlQ2hhdElkLCB1c2VyLmlkXSlcblxuICBjb25zdCBoYW5kbGVNaW5pbWl6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRNaW5pbWl6ZSlcbiAgICBzZXRJc01pbmltaXplZCh0cnVlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB3cml0ZU1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBpc0V4cGFuZGVkOiBmYWxzZSB9KVxuICB9LCBbYW1wbGl0dWRFdmVudCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICBjb25zdCBmb2N1c0NoYXRJbnB1dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWFpYS1pbnB1dC1yZWZvY3VzJykpXG4gICAgfSwgMTAwKVxuICB9LCBbXSlcblxuICBjb25zdCBbdXNlckluaXRpYWxNZXNzYWdlLCBzZXRVc2VySW5pdGlhbE1lc3NhZ2VdID0gdXNlU3RhdGU8e1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfT4oe1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGF0dGFjaG1lbnRzOiBbXSxcbiAgfSlcbiAgY29uc3QgW2luaXRpYWxDaGF0SWQsIHNldEluaXRpYWxDaGF0SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW25ld0NoYXRLZXksIHNldE5ld0NoYXRLZXldID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3Nlc3Npb25NZXRhLCBzZXRTZXNzaW9uTWV0YV0gPSB1c2VTdGF0ZTxTZXNzaW9uTWV0YSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uXSA9IHVzZVN0YXRlPFxuICAgIHwgKChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZ1xuICAgICAgKSA9PiB2b2lkKVxuICAgIHwgbnVsbFxuICA+KG51bGwpXG4gIGNvbnN0IFtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLCBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSA9IHVzZVN0YXRlPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc1N0cmVhbWluZywgc2V0SXNTdHJlYW1pbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBbcmVmZXRjaENoYXRzLCBzZXRSZWZldGNoQ2hhdHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjdXJyZW50T3B0aW9uLCBzZXRDdXJyZW50T3B0aW9uXSA9IHVzZVN0YXRlPG9wdGlvbnM+KCgpID0+IHtcbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudFxuICAgIHJldHVybiByZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24oc2F2ZWQ/LmFnZW50c05hdkFjdGl2ZSwgc2F2ZWQ/LmN1cnJlbnRPcHRpb24sIHVzZXIpXG4gIH0pXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIEVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIGRlbCBvcmNoZXN0cmF0b3IgKGxvIGxpbXBpw7MgeSBwYXPDsyBwb3JcbiAgLy8gZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEhhYmlsaXRhIGVsIGJvdMOzbiBcInZvbHZlclwiIGVuIGVsIGhvbWUgcGFzbyAyIGRlIGVzYXNcbiAgLy8gc2VjY2lvbmVzLiBTZSByZXNldGVhIGFsIGNlcnJhci9yZWFicmlyIGVsIG1vZGFsIChlbCBjb21wb25lbnRlIHNlIGRlc21vbnRhKS5cbiAgY29uc3QgW2RpZFJlc2V0Q29udGV4dEluU2VjdGlvbiwgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBwcmV2SGFzUGlubmVkQ29udGV4dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBsYW5nID0gcmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nKGkxOG4ubGFuZ3VhZ2UpXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBjbGVhckFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IGFnZW50c0RhdGFSZWYgPSB1c2VSZWYoYWdlbnRzLmRhdGEpXG4gIGFnZW50c0RhdGFSZWYuY3VycmVudCA9IGFnZW50cy5kYXRhXG5cbiAgY29uc3Qge1xuICAgIG15U2tpbGxzLFxuICAgIHNoYXJlZFNraWxscyxcbiAgICBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLFxuICAgIGhhbmRsZUdldFNraWxscyxcbiAgICBhZGRTa2lsbCxcbiAgICB1cGRhdGVTa2lsbEluTGlzdCxcbiAgICByZW1vdmVTa2lsbCxcbiAgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID0gcmVzb2x2ZVVzZXJIYXNBZ2VudE1hbmFnZW1lbnRQZXJtaXNzaW9ucyhcbiAgICB1c2VyPy5wZXJtaXNzaW9ucyxcbiAgICBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKVxuICApXG5cbiAgY29uc3QgdXNlckhhc1NraWxsc0FjY2VzcyA9IGNhbkFjY2Vzc1RvU2tpbGxzKHVzZXIpXG5cbiAgY29uc3QgY29tcHV0ZWRDdXJyZW50T3B0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvbih7XG4gICAgICAgIGN1cnJlbnRPcHRpb24sXG4gICAgICAgIGFnZW50LFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHVzZXIsXG4gICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgIH0pLFxuICAgIFtjdXJyZW50T3B0aW9uLCBwcm9qZWN0LCBjbGllbnQsIGFnZW50LCB1c2VyXVxuICApXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVTaWRlYmFyQWdlbnRzTmF2QWN0aXZlKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCksXG4gICAgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF1cbiAgKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihcbiAgICAoKSA9PiBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LmRyYWdQb3NpdGlvbiA/PyBudWxsXG4gIClcbiAgY29uc3QgeyB0aWx0TW90aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZywgc2FtcGxlUG9pbnRlck1vdmUsIGVuZFBvaW50ZXJUcmFja2luZyB9ID1cbiAgICB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQoaXNGbG9hdGluZylcbiAgY29uc3QgZHJhZ1N0YXRlUmVmID0gdXNlUmVmPHtcbiAgICBwb2ludGVySWQ6IG51bWJlclxuICAgIG9mZnNldFg6IG51bWJlclxuICAgIG9mZnNldFk6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBjbGFtcERyYWdQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgIGlmIChzaG91bGRVc2VEcmFnQ2xhbXBGYWxsYmFjayhjb250ZW50V3JhcHBlcikpIHtcbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFdyYXBwZXIhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgcmV0dXJuIGNsYW1wRmxvYXRpbmdQYW5lbFBvc2l0aW9uKHgsIHksIHdpZHRoLCBoZWlnaHQsIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQpXG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZENsZWFyRHJhZ1Bvc2l0aW9uT25MYXlvdXRDaGFuZ2UobGF5b3V0TW9kZSkpIHtcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT5cbiAgICAgIHJlc29sdmVMYXlvdXREcmFnUG9zaXRpb25VcGRhdGUobGF5b3V0TW9kZSwgcHJldiwgY2xhbXBEcmFnUG9zaXRpb24sIHtcbiAgICAgICAgaW5uZXJXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgIHBhbmVsV2lkdGg6IGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpLFxuICAgICAgICBwYWQ6IDE2LFxuICAgICAgfSkhXG4gICAgKVxuICB9LCBbbGF5b3V0TW9kZSwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgZW5kUG9pbnRlclRyYWNraW5nKClcbiAgICAgIGlmICghaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZVJlZi5jdXJyZW50Py5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJydcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJydcblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoY29udGVudFdyYXBwZXIgJiYgcmVzb2x2ZVBlcnNpc3RlZERyYWdQb3NpdGlvbk9uRW5kKGxheW91dE1vZGUsIGNvbnRlbnRXcmFwcGVyKSkge1xuICAgICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgZHJhZ1Bvc2l0aW9uOiB7IHg6IHJlY3QubGVmdCwgeTogcmVjdC50b3AgfSB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZywgbGF5b3V0TW9kZSwgdXNlci5pZF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCAhaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZS5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiByZXNvbHZlTmV4dERyYWdQb3NpdGlvbihwcmV2LCBuZXh0UG9zaXRpb24pKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBzYW1wbGVQb2ludGVyTW92ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUZsb2F0aW5nUGFuZWxEcmFnUG9zaXRpb24oe1xuICAgICAgICBsYXlvdXRNb2RlLFxuICAgICAgICBkcmFnUG9zaXRpb24sXG4gICAgICAgIHZpZXdwb3J0V2lkdGg6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAwLFxuICAgICAgICBwYW5lbFdpZHRoOiBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgoKSxcbiAgICAgICAgY2xhbXA6IGNsYW1wRHJhZ1Bvc2l0aW9uLFxuICAgICAgfSksXG4gICAgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKCFzaG91bGRTdGFydEZsb2F0aW5nUGFuZWxEcmFnKGlzRmxvYXRpbmcsIGV2ZW50LmJ1dHRvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgaWYgKHNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID8/IGNsYW1wRHJhZ1Bvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApXG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBpbml0aWFsUG9zaXRpb24ueFxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gaW5pdGlhbFBvc2l0aW9uLnlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKGluaXRpYWxQb3NpdGlvbilcbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0ge1xuICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgb2Zmc2V0WDogcG9pbnRlck9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHBvaW50ZXJPZmZzZXRZLFxuICAgICAgfVxuXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdERyYWdnYWJsZSlcbiAgICAgIHN0YXJ0UG9pbnRlclRyYWNraW5nKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIGlzRmxvYXRpbmcsIHJlc29sdmVkRHJhZ1Bvc2l0aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQoc2lkZWJhckhhc0Vycm9yKSkge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoXG4gICAgICAgIGJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCh7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICBmYXFJZCxcbiAgICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICAgICAgICBtZW50aW9ucyxcbiAgICAgICAgICBmdWFJZCxcbiAgICAgICAgICBzY0lkLFxuICAgICAgICAgIGNvbnRleHREYXRhLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGJhbm5lckZhcUF1dG9TZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYmFubmVyRmFxID0gYmFubmVyRW50cnlGYXFcbiAgICBpZiAoIWJhbm5lckZhcSB8fCAhaGFzQmFubmVyRmFxVGl0bGUoYmFubmVyRmFxLmZhcVRpdGxlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzQmFubmVyRmFxUmVhZHlUb0F1dG9TZW5kKHtcbiAgICAgICAgZmFxVGl0bGU6IGJhbm5lckZhcS5mYXFUaXRsZSxcbiAgICAgICAgYWxyZWFkeVNlbnQ6IGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQsXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgICAgICAgc2VjdGlvbixcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCxcbiAgICAgICAgY2xpZW50SWQ6IGNsaWVudD8uaWQsXG4gICAgICB9KVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICBzdGFydENoYXQoXG4gICAgICBiYW5uZXJGYXEuZmFxVGl0bGUsXG4gICAgICBbXSxcbiAgICAgIGJhbm5lckZhcS5mYXFJZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGJhbm5lckZhcS5jb250ZXh0RGF0YVxuICAgIClcbiAgfSwgW1xuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFJZCxcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGUsXG4gICAgYmFubmVyRW50cnlGYXE/LmNvbnRleHREYXRhLFxuICAgIGxvYWRpbmcsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGFnZW50Py5lbnRpdHksXG4gICAgcHJvamVjdD8uaWQsXG4gICAgY2xpZW50Py5pZCxcbiAgICBzZWN0aW9uLFxuICAgIHN0YXJ0Q2hhdCxcbiAgXSlcblxuICBjb25zdCBnb1RvQ2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGF0OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQgYXMgc3RyaW5nXG5cbiAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLnNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc2lkZWJhci1zZWxlY3Qtc2Vzc2lvbicsIHsgZGV0YWlsOiB7IHNlc3Npb25JZCB9IH0pKVxuXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKHNlc3Npb25JZClcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBmaW5kQWdlbnRGb3JDaGF0SXRlbShhZ2VudHMuZGF0YSwgY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgIH1cbiAgICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgYWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGdvVG9DaGF0UmVmLmN1cnJlbnQgPSBnb1RvQ2hhdFxuXG4gIGNvbnN0IGhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgIHNpZGViYXJPcGVuUmVmLmN1cnJlbnQgPSBvcGVuXG4gICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBzaWRlYmFyT3Blbjogb3BlbiB9KVxuICAgIH0sXG4gICAgW3VzZXIuaWRdXG4gIClcblxuICBjb25zdCBzeW5jUGFuZWxTZXNzaW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHBhdGNoID0gYnVpbGRNYWlhUGFuZWxTZXNzaW9uUGF0Y2goe1xuICAgICAgaXNNaW5pbWl6ZWQsXG4gICAgICBjdXJyZW50T3B0aW9uLFxuICAgICAgYWdlbnRzTmF2QWN0aXZlOiBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlLFxuICAgICAgYWN0aXZlQ2hhdElkLFxuICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkID8/IG51bGwsXG4gICAgICBzaWRlYmFyT3Blbjogc2lkZWJhck9wZW5SZWYuY3VycmVudCxcbiAgICAgIGxheW91dE1vZGUsXG4gICAgICBkcmFnUG9zaXRpb24sXG4gICAgICBob3N0Q29udGV4dDoge1xuICAgICAgICBzZWN0aW9uLFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHRhc2ssXG4gICAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBpZiAoIXBhdGNoKSByZXR1cm5cbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgcGF0Y2gpXG4gIH0sIFtcbiAgICBhY3RpdmVDaGF0SWQsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBkcmFnUG9zaXRpb24sXG4gICAgaXNNaW5pbWl6ZWQsXG4gICAgbGF5b3V0TW9kZSxcbiAgICBwcm9qZWN0LFxuICAgIHNlY3Rpb24sXG4gICAgc2lkZWJhckFnZW50c05hdkFjdGl2ZSxcbiAgICB0YXNrLFxuICAgIHVzZXIuaWQsXG4gIF0pXG5cbiAgLyoqIExvcyBhZ2VudGVzIHNlIHBpZGVuIHJlY2nDqW4gYWwgYWJyaXIgZWwgcGFuZWw6IGVuIG1vZG8gcGlsbCBubyBoYWNlIGZhbHRhIG5pbmd1bmEgcmVxdWVzdC4gKi9cbiAgY29uc3QgZW5zdXJlQWdlbnRzTG9hZGVkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8QWdlbnRbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZEFnZW50cyA9IHJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZShhZ2VudHNEYXRhUmVmLmN1cnJlbnQpXG4gICAgaWYgKGNhY2hlZEFnZW50cykge1xuICAgICAgcmV0dXJuIGNhY2hlZEFnZW50c1xuICAgIH1cblxuICAgIGlmIChzaG91bGRBdHRlbXB0SW5pdGlhbEFnZW50c0ZldGNoKGFnZW50c0RhdGFSZWYuY3VycmVudC5sZW5ndGgsIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkpIHtcbiAgICAgIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IGxvYWRlZEFnZW50cyA9IGF3YWl0IGhhbmRsZUdldEFnZW50cygpXG4gICAgICBjb25zdCBsb2FkZWRGcm9tRmV0Y2ggPSByZXNvbHZlQ2FjaGVkQWdlbnRzSWZBdmFpbGFibGUobG9hZGVkQWdlbnRzKVxuICAgICAgaWYgKGxvYWRlZEZyb21GZXRjaCkge1xuICAgICAgICByZXR1cm4gbG9hZGVkRnJvbUZldGNoXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFnZW50c0RhdGFSZWYuY3VycmVudFxuICB9LCBbaGFuZGxlR2V0QWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc01pbmltaXplZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gc3luY1BhbmVsU2Vzc2lvbigpLCAxNTApXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpXG4gIH0sIFtpc01pbmltaXplZCwgc3luY1BhbmVsU2Vzc2lvbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblBhZ2VIaWRlID0gKCkgPT4ge1xuICAgICAgaWYgKHNob3VsZFN5bmNQYW5lbFNlc3Npb25PblBhZ2VIaWRlKGlzTWluaW1pemVkKSkge1xuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgIH1cbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25QYWdlSGlkZSlcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25QYWdlSGlkZSlcbiAgfSwgW2lzTWluaW1pemVkLCBzeW5jUGFuZWxTZXNzaW9uXSlcblxuICBjb25zdCBoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBQcmlvcmlkYWQgYWwgcmVhYnJpcjogcHJpbWVyIGNoYXQgc2luIGxlZXIg4oaSIMO6bHRpbWEgY29udmVyc2FjacOzbiBhYmllcnRhIOKGkiBIb21lLlxuICAgIGNvbnN0IHsgY2hhdHMgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgY29uc3QgbGFzdEFjdGl2ZUNoYXRJZCA9IHJlYWRMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQpXG4gICAgY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQoY2hhdHMsIGxhc3RBY3RpdmVDaGF0SWQpXG5cbiAgICAvLyBOYXZlZ2FyIGFudGVzIGRlIGV4cGFuZGlyOiBzaSBlc3BlcmFtb3MgYWdlbnRlcywgZWwgcGFuZWwgbW9udGEgY29uIGxhIHNlc2nDs24gdmllamEgeSBlbCBzaWRlYmFyIHF1ZWRhIGRlc2Zhc2Fkby5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBnb1RvQ2hhdFJlZi5jdXJyZW50Py4odGFyZ2V0KVxuICAgIH0gZWxzZSB7XG4gICAgICBnb0hvbWVSZWYuY3VycmVudD8uKClcbiAgICB9XG5cbiAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRPcGVuLCB7IG9wdGlvbjogJ21pbmltaXplJyB9KVxuXG4gICAgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICAgIC50aGVuKGxvYWRlZEFnZW50cyA9PiB7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEFnZW50ID0gZmluZEFnZW50Rm9yQ2hhdEl0ZW0obG9hZGVkQWdlbnRzLCB0YXJnZXQuYWdlbnRJZClcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRBZ2VudCkge1xuICAgICAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gIH0sIFthbXBsaXR1ZEV2ZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIGZvY3VzQ2hhdElucHV0LCBzZWxlY3RBZ2VudCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICAvKipcbiAgICogVG9tYSBjb250cm9sIGRlc2RlIHVuIGhvc3QgKGhlYWRlciwgcHJveWVjdG8sIGNsaWVudGXigKYpOiBhYnJlIGVsIHBhbmVsLCBkZXNjYXJ0YSBsYVxuICAgKiBjb252ZXJzYWNpw7NuIGFiaWVydGEgeSBhcGxpY2EgZWwgY29udGV4dG8gZGVsIGhvc3QuIE5PIHZ1ZWx2ZSBhIGxhIMO6bHRpbWEgY29udmVyc2FjacOzblxuICAgKiDigJQgZXNvIHPDs2xvIGxvIGhhY2UgZWwgcGlsbCAoYGhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkYCkuXG4gICAqL1xuICBjb25zdCBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGRldGFpbDogTWFpYUhvc3RPcGVuRGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHlTdGF0ZSA9IHJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZShkZXRhaWwpXG5cbiAgICAgIGNsZWFyTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkKVxuICAgICAgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRJc1Jlc3RvcmluZ1Nlc3Npb24oZmFsc2UpXG4gICAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgICAgd3JpdGVMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQsIG51bGwpXG5cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKGZhbHNlKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICB1c2VGYXFzU3RvcmUuZ2V0U3RhdGUoKS5jbGVhckZhcXMoKVxuICAgICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5zZXRBY3RpdmVDaGF0SWQobnVsbClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuXG4gICAgICBzZXRQcm9qZWN0Py4oZW50aXR5U3RhdGUucHJvamVjdClcbiAgICAgIGlmIChzaG91bGRBcHBseUNsaWVudE9uSG9zdFRha2VvdmVyKGVudGl0eVN0YXRlLmNsaWVudCkpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4oZW50aXR5U3RhdGUuY2xpZW50KVxuICAgICAgfVxuICAgICAgc2V0VGFzaz8uKGVudGl0eVN0YXRlLnRhc2spXG5cbiAgICAgIGlmIChlbnRpdHlTdGF0ZS5jbGVhckdsb2JhbFBpbm5lZENvbnRleHQpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICAgIGNsZWFyQWdlbnQoKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TGF5b3V0ID0gcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUoe1xuICAgICAgICBzZWN0aW9uOiBkZXRhaWwuc2VjdGlvbiBhcyBTZWN0aW9uLFxuICAgICAgICBiYW5uZXJFbnRyeUZhcTogZGV0YWlsLmZhcSxcbiAgICAgIH0pXG4gICAgICBzZXRMYXlvdXRNb2RlKG5leHRMYXlvdXQpXG4gICAgICBzZXREcmFnUG9zaXRpb24obnVsbClcblxuICAgICAgY29uc3QgaG9zdENvbnRleHQgPSBidWlsZEhvc3RUYWtlb3ZlclBlcnNpc3RDb250ZXh0KGRldGFpbClcblxuICAgICAgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQWdlbnRJZCA9IHJlc29sdmVIb3N0VGFrZW92ZXJBZ2VudElkKFxuICAgICAgICAgICAgZW50aXR5U3RhdGUuY2xlYXJHbG9iYWxQaW5uZWRDb250ZXh0LFxuICAgICAgICAgICAgYWdlbnRzRGF0YVJlZi5jdXJyZW50LFxuICAgICAgICAgICAgYWdlbnQ/LmlkID8/IG51bGxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHNob3VsZFNlbGVjdEZpcnN0QWdlbnRPbkhvc3RUYWtlb3ZlcihlbnRpdHlTdGF0ZS5jbGVhckdsb2JhbFBpbm5lZENvbnRleHQsIGFnZW50c0RhdGFSZWYuY3VycmVudFswXSkpIHtcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KGFnZW50c0RhdGFSZWYuY3VycmVudFswXSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgICAgICAgaXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICAgICAgICAgIGFnZW50c05hdkFjdGl2ZTogbnVsbCxcbiAgICAgICAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHJlc29sdmVkQWdlbnRJZCxcbiAgICAgICAgICAgIHNpZGViYXJPcGVuOiBzaWRlYmFyT3BlblJlZi5jdXJyZW50LFxuICAgICAgICAgICAgZHJhZ1Bvc2l0aW9uOiBudWxsLFxuICAgICAgICAgICAgaG9zdENvbnRleHQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgICB9LFxuICAgIFtcbiAgICAgIGFnZW50Py5pZCxcbiAgICAgIGNsZWFyQWdlbnQsXG4gICAgICBlbnN1cmVBZ2VudHNMb2FkZWQsXG4gICAgICBmb2N1c0NoYXRJbnB1dCxcbiAgICAgIHNlbGVjdEFnZW50LFxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlLFxuICAgICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgICAgc2V0Q2xpZW50LFxuICAgICAgc2V0UHJvamVjdCxcbiAgICAgIHNldFRhc2ssXG4gICAgICB1c2VyLmlkLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlUmVhZHkgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQsXG4gICAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICAgIHN0cmVhbWluZzogYm9vbGVhbixcbiAgICAgIHdyaXRpbmc6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIHNldFNlbmRNZXNzYWdlRnVuY3Rpb24oKCkgPT4gc2VuZE1lc3NhZ2UpXG4gICAgICBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uKCgpID0+IHN0b3BHZW5lcmF0aW9uKVxuICAgICAgc2V0SXNTdHJlYW1pbmcoc3RyZWFtaW5nKVxuICAgICAgc2V0SXNXcml0aW5nKHdyaXRpbmcpXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSB7XG4gICAgICAgIHNldFNpZGViYXJIYXNFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVc2VBY3RpdmVDaGF0U2VuZEhhbmRsZXIoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmNoYXQsIEJvb2xlYW4oc2VuZE1lc3NhZ2VGdW5jdGlvbikpKSB7XG4gICAgICAgIHNlbmRNZXNzYWdlRnVuY3Rpb24/LihtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHN0YXJ0Q2hhdCwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBoYW5kbGVHb0hvbWUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gU2kgZXN0YW1vcyBlbiB1bmEgY29udmVyc2FjacOzbiB5IHZhbW9zIGEgaG9tZSwgcmVzZXRlYXIgaW5pdGlhbENoYXRJZCB5IGluY3JlbWVudGFyIG5ld0NoYXRLZXlcbiAgICBpZiAoc2hvdWxkUmVzZXRDaGF0U3RhdGVPbkdvSG9tZShjdXJyZW50T3B0aW9uLCBvcHRpb25zLmNoYXQpKSB7XG4gICAgICAvLyBObyBjb3J0YW1vcyBsYSBnZW5lcmFjacOzbjogbGEgc2VzacOzbiBzaWd1ZSByZXNwb25kaWVuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIGlmIChzaG91bGRDbGVhckNsaWVudE9uR29Ib21lRnJvbUNoYXQoYWdlbnQ/LmVudGl0eSkpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0KHNlY3Rpb24pKSB7XG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZShhZ2VudCwgYWdlbnRzLmRhdGEubGVuZ3RoKSkge1xuICAgICAgc2VsZWN0QWdlbnQoYWdlbnRzLmRhdGFbMF0pXG4gICAgfVxuICAgIGlmIChzaG91bGRDbGVhck9yY2hlc3RyYXRvckdsb2JhbENvbnRleHRPbkdvSG9tZShzZWN0aW9uLCBhZ2VudD8udHlwZSkpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICB9XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgfSwgW1xuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBvcHRpb25zLmNoYXQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgYWdlbnQsXG4gICAgYWdlbnRzLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFRhc2ssXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbixcbiAgICBzZWN0aW9uLFxuICBdKVxuXG4gIGdvSG9tZVJlZi5jdXJyZW50ID0gaGFuZGxlR29Ib21lXG5cbiAgY29uc3Qgc3RhcnROZXdDaGF0RnJvbUNhdGFsb2cgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYWdlbnRzTGlzdCA9IHNob3VsZFByZWZldGNoQWdlbnRzRm9yQ2F0YWxvZ05ld0NoYXQoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLm15QWdlbnRzLCBvcHRpb25zLm15U2tpbGxzKVxuICAgICAgPyBhd2FpdCBlbnN1cmVBZ2VudHNMb2FkZWQoKVxuICAgICAgOiBhZ2VudHMuZGF0YVxuICAgIGNvbnN0IGZpcnN0QWdlbnQgPSBhZ2VudHNMaXN0WzBdXG5cbiAgICBpZiAoc2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudChmaXJzdEFnZW50KSkge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgc2VsZWN0QWdlbnQoZmlyc3RBZ2VudClcbiAgICB9XG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gIH0sIFtcbiAgICBhZ2VudHMuZGF0YSxcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgZW5zdXJlQWdlbnRzTG9hZGVkLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldFRhc2ssXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICBdKVxuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0TmV3Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2hvdWxkU3RhcnROZXdDaGF0RnJvbUNhdGFsb2coY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkKSkge1xuICAgICAgc3RhcnROZXdDaGF0RnJvbUNhdGFsb2coKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBoYW5kbGVHb0hvbWUsIGlzTWFpYWtlckFnZW50U2VsZWN0ZWQsIHN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nXSlcblxuICBjb25zdCBoYW5kbGVSZXNldENoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbaGFuZGxlR29Ib21lXSlcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIiBkZWwgaGVhZGVyIChzb2xvIG9yY2hlc3RyYXRvcik6XG4gIC8vIC0gRGVzZGUgZWwgY2hhdCAoaGVhZGVyIG8gcHJvamVjdC9jbGllbnQvdGFzayk6IGluaWNpYSB1bmEgY29udmVyc2FjacOzbiBudWV2YSBjb25zZXJ2YW5kbyBlbFxuICAvLyAgIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgaG9tZSAocGFzbyAyIGNvbiBGQVFzL0ZVQXMpLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvKTogbGltcGlhIGVsIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgcGFzbyAxXG4gIC8vICAgKHNlbGVjdG9yIGRlIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBoZWFkZXIgc2llbXByZTsgZW4gcHJvamVjdC9jbGllbnQvdGFzayBzb2xvIHNpIGVsXG4gIC8vICAgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbikuXG4gIGNvbnN0IGhhbmRsZUJhY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdG8gPSByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uKHNlY3Rpb24sIGFnZW50Py50eXBlLCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuaG9tZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRCYWNrLCB7IHRvIH0pXG5cbiAgICAvLyBEZXNkZSBlbCBjaGF0IOKGkiBudWV2YSBjb252ZXJzYWNpw7NuIFNJTiBib3JyYXIgZWwgY29udGV4dG8gcGluZWFkbywgdm9sdmllbmRvIGFsIGhvbWUuXG4gICAgaWYgKHNob3VsZEJhY2tTdGFydE5ld0NoYXRQcmVzZXJ2aW5nQ29udGV4dChjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuY2hhdCkpIHtcbiAgICAgIC8vIE5vIGNvcnRhbW9zIGxhIGdlbmVyYWNpw7NuOiBsYSBzZXNpw7NuIHNpZ3VlIHJlc3BvbmRpZW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEhvbWUgcGFzbyAyIChjb250ZXh0byBwaW5lYWRvKSDihpIgbGltcGlhciBlbCBjb250ZXh0byB5IHZvbHZlciBhbCBwYXNvIDEgKGNvbnRleHRvcyByZWNpZW50ZXMpLlxuICAgIGlmIChzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0KGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5ob21lLCBzZWN0aW9uLCBkaWRSZXNldENvbnRleHRJblNlY3Rpb24pKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICB9XG4gIH0sIFtcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgc2VjdGlvbixcbiAgICBhZ2VudD8udHlwZSxcbiAgICBhbXBsaXR1ZEV2ZW50LFxuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBkaWRSZXNldENvbnRleHRJblNlY3Rpb24sXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIF0pXG5cbiAgLy8gRGV0ZWN0YSBlbCByZWluaWNpbyBkZSBjb250ZXh0byBlbiBwcm9qZWN0L2NsaWVudC90YXNrOiBjb250ZXh0byBwaW5lYWRvIOKGkiB2YWPDrW8gY29uIGVsXG4gIC8vIG9yY2hlc3RyYXRvciAocC4gZWouIGFsIHJlc2VsZWNjaW9uYXIgTUFJQSBlbiBlbCBsaXN0YWRvKS4gU29sbyBsYSB0cmFuc2ljacOzbiBjdWVudGEsIGFzw60gdW5hXG4gIC8vIGFwZXJ0dXJhIGZyZXNjYSAoY29udGV4dG8gcGluZWFkbyBkZXNkZSBsYSBzZWNjacOzbikgbm8gbG8gYWN0aXZhLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBpbm5lZCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICAgIHRhc2tJZDogdGFzaz8uaWQsXG4gICAgICBjaGlwc1Byb2plY3RJZDogY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsXG4gICAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQsXG4gICAgfSlcbiAgICBjb25zdCB3YXNQaW5uZWQgPSBwcmV2SGFzUGlubmVkQ29udGV4dFJlZi5jdXJyZW50XG4gICAgcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudCA9IHBpbm5lZFxuICAgIGlmIChzaG91bGRNYXJrT3JjaGVzdHJhdG9yQ29udGV4dFJlc2V0KHNlY3Rpb24sIGFnZW50Py50eXBlLCB3YXNQaW5uZWQsIHBpbm5lZCkpIHtcbiAgICAgIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbih0cnVlKVxuICAgIH1cbiAgfSwgW3Rhc2s/LmlkLCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgY2xpZW50Py5pZCwgcHJvamVjdD8uaWQsIHNlY3Rpb24sIGFnZW50Py50eXBlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uTWVyZ2VDcmVhdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmIChuZXh0QWdlbnQ/LmlkKSB7XG4gICAgICAgIGFkZEFnZW50KG5leHRBZ2VudCwgeyBuYXZpZ2F0ZUhvbWU6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCBvbk1lcmdlQ3JlYXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICB9XG4gIH0sIFthZGRBZ2VudF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblN5bmNFZGl0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFuZXh0QWdlbnQ/LmlkKSByZXR1cm5cbiAgICAgIHVwZGF0ZUFnZW50KG5leHRBZ2VudClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IG5leHRBZ2VudC5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbdXBkYXRlQWdlbnQsIHNlbGVjdEFnZW50LCBhZ2VudD8uaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkNoYXRWaWV3ID0gKCkgPT4ge1xuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuY2hhdClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIEVsIMOtY29ubyBkZSBNQUlBIGRlbCBoZWFkZXIgbGxldmEgc2llbXByZSBhbCBIb21lLiBTaSBNQUlBIHlhIGVzdMOhIG1vbnRhZGEgcGVyb1xuICAgKiBtaW5pbWl6YWRhLCBlbCBob3N0IG5vIHB1ZWRlIHJlc29sdmVybG8gY2FtYmlhbmRvIGBpc09wZW5gICh5YSBlc3TDoSBlbiB0cnVlKSxcbiAgICogYXPDrSBxdWUgYXZpc2EgcG9yIGV2ZW50byB5IGFjw6EgcmVzdGF1cmFtb3MgeSB2YW1vcyBhbCBIb21lLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuSG9tZSA9ICgpID0+IHtcbiAgICAgIGFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIoe1xuICAgICAgICBzZWN0aW9uOiAnaGVhZGVyJyxcbiAgICAgICAgZW50aXR5OiB7IHByb2plY3RJZDogbnVsbCwgY2xpZW50SWQ6IG51bGwgfSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1ob21lJywgb3BlbkhvbWUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1ob21lJywgb3BlbkhvbWUpXG4gICAgfVxuICB9LCBbYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3Zlcl0pXG5cbiAgLyoqXG4gICAqIE90cm8gaG9zdCAocHJveWVjdG8sIGNsaWVudGUsIGJhbm5lciwgaGVhZGVy4oCmKSBwaWRlIGFicmlyIE1BSUEgbWllbnRyYXMgeWEgaGF5IHVuYVxuICAgKiBpbnN0YW5jaWEgbW9udGFkYS4gRXhwYW5kZSBzaSBlc3RhYmEgbWluaW1pemFkbywgYXBsaWNhIGVsIGNvbnRleHRvIGRlbCBob3N0IG51ZXZvXG4gICAqIHkgdmEgYWwgaG9tZSDigJQgc2luIHJlc3RhdXJhciBsYSBjb252ZXJzYWNpw7NuIHByZXZpYSAoZXNvIGxvIGhhY2UgZWwgcGlsbCkuXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5Gcm9tSG9zdCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudCBhcyBDdXN0b21FdmVudDxNYWlhSG9zdE9wZW5EZXRhaWw+XG4gICAgICBpZiAoIWRldGFpbCkgcmV0dXJuXG4gICAgICBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyKGRldGFpbClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKE1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQsIG9wZW5Gcm9tSG9zdClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCBvcGVuRnJvbUhvc3QpXG4gICAgfVxuICB9LCBbYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3Zlcl0pXG5cbiAgLyoqIE1pc21vIGZsdWpvIHF1ZSBDaGF0QUlNeUFnZW50cy5oYW5kbGVVc2VBZ2VudCArIG9uQmFjayAoaGFuZGxlcnMuaG9tZSkuXG4gICAqICBFbCBkZXRhaWwgcHVlZGUgdHJhZXIgb3BjaW9uYWxtZW50ZSBgcHJvamVjdGAsIGBjbGllbnRgLCBgdGFza2AgcGFyYSBmbG93cyBxdWVcbiAgICogIG5lY2VzaXRhbiBwcmVzZXJ2YXIgY29udGV4dG8gKGVqLiBzZWxlY3RvciBkZSBhZ2VudGVzIGRlc2RlIHVuYSB0YXJlYSkuIFNpIG5vIHZpZW5lbixcbiAgICogIHNlIG1hbnRpZW5lIGVsIGNvbXBvcnRhbWllbnRvIG9yaWdpbmFsIGRlIGxpbXBpYXIgcHJvamVjdC9jbGllbnQuICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3Blbk5ld0NoYXRXaXRoQWdlbnQgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8e1xuICAgICAgICBhZ2VudDogQWdlbnRcbiAgICAgICAgcHJvamVjdD86IFByb2plY3QgfCBudWxsXG4gICAgICAgIGNsaWVudD86IENsaWVudCB8IG51bGxcbiAgICAgICAgdGFzaz86IFRhc2sgfCBudWxsXG4gICAgICB9PlxuICAgICAgY29uc3QgbmV4dEFnZW50ID0gZGV0YWlsPy5hZ2VudFxuICAgICAgaWYgKCFuZXh0QWdlbnQpIHJldHVyblxuXG4gICAgICBjb25zdCBjb250ZXh0UGF0Y2ggPSByZXNvbHZlT3Blbk5ld0NoYXRXaXRoQWdlbnRDb250ZXh0KGRldGFpbCA/PyB7fSlcbiAgICAgIHNldFByb2plY3QoY29udGV4dFBhdGNoLnByb2plY3QpXG4gICAgICBzZXRDbGllbnQ/Lihjb250ZXh0UGF0Y2guY2xpZW50KVxuICAgICAgaWYgKGNvbnRleHRQYXRjaC5zaG91bGRTZXRUYXNrKSB7XG4gICAgICAgIHNldFRhc2s/Lihjb250ZXh0UGF0Y2gudGFzayA/PyBudWxsKVxuICAgICAgfVxuICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIH1cbiAgfSwgW3NlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdKVxuXG4gIGNvbnN0IGFwcGx5U2tpbGxVc2VGbG93ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNraWxsOiBTa2lsbCwgdXNlRmlyc3RBZ2VudDogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgZmlyc3RBZ2VudCA9IGF3YWl0IGVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlKHtcbiAgICAgICAgdXNlRmlyc3RBZ2VudCxcbiAgICAgICAgYWdlbnRzOiBhZ2VudHNEYXRhUmVmLmN1cnJlbnQsXG4gICAgICAgIGVuc3VyZUFnZW50c0xvYWRlZCxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChzaG91bGRDbGVhckNvbnRleHRGb3JDYXRhbG9nT3JTa2lsbEFnZW50KGZpcnN0QWdlbnQpKSB7XG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgICB9XG5cbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIGRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0KHNraWxsKVxuICAgIH0sXG4gICAgW2Vuc3VyZUFnZW50c0xvYWRlZCwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IHNraWxsLCB1c2VGaXJzdEFnZW50ID0gZmFsc2UgfSA9XG4gICAgICAgIChldmVudCBhcyBDdXN0b21FdmVudDx7IHNraWxsOiBTa2lsbDsgdXNlRmlyc3RBZ2VudD86IGJvb2xlYW4gfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFza2lsbCkgcmV0dXJuXG5cbiAgICAgIGFwcGx5U2tpbGxVc2VGbG93KHNraWxsLCB1c2VGaXJzdEFnZW50KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCwgaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlKVxuICAgIH1cbiAgfSwgW2FwcGx5U2tpbGxVc2VGbG93XSlcblxuICAvLyBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGFnZW50X3R5cGUvYWdlbnRfZW50aXR5ICsgY29udGV4dG8pLCBlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TZXNzaW9uTWV0YSA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZ0IGFzIEN1c3RvbUV2ZW50PFNlc3Npb25NZXRhPlxuICAgICAgaWYgKGRldGFpbCkgc2V0U2Vzc2lvbk1ldGEoZGV0YWlsKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24gbGltcGlhbW9zIGxhIG1ldGFkYXRhOyBlbCBsb2FkIGRlIGxhIG51ZXZhIHNlc3Npb24gbGEgdnVlbHZlIGEgZW1pdGlyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBDYXJ0ZWwgXCJjb250aW51YXIgZW4gdW4gY2hhdCBudWV2b1wiOiBzZSBtdWVzdHJhIGFsIGFicmlyIHVuYSBjb252ZXJzYWNpw7NuIGRlIHVuIGNsb25lIGxlZ2FjeVxuICAvLyAoYWdlbnRfdHlwZSA9PT0gJ2Nsb25lJyBjb24gZW50aXR5IHByb2plY3QvdGFzay9jbGllbnQpLiBFbCBpbnB1dCBzZSByZWVtcGxhemEgcG9yIGVsIGNhcnRlbC5cbiAgY29uc3QgbGVnYWN5Q29udGV4dFNlc3Npb24gPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVMZWdhY3lDb250ZXh0U2Vzc2lvbihjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuY2hhdCwgc2Vzc2lvbk1ldGEpLFxuICAgIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNlc3Npb25NZXRhXVxuICApXG5cbiAgLy8gTWFyY2EgZWwgYWdlbnRlIGRlIGxhIGNvbnZlcnNhY2nDs24gbGVnYWN5IHBhcmEgcXVlIGhlYWRlciwgc2VsZWN0b3IgeSBhdmF0YXIgbXVlc3RyZW4gZWwgbG9nb1xuICAvLyBNQUlBIHkgZWwgbm9tYnJlIHRhY2hhZG8gKGFnZW50ZSBvYnNvbGV0byksIHNpbiBkZXBlbmRlciBkZWwgYHR5cGVgIHJlc3VlbHRvIGRlIGxhIHNlc2nDs24gdmllamEuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZE1hcmtBZ2VudEFzTGVnYWN5Q29udGV4dChsZWdhY3lDb250ZXh0U2Vzc2lvbiwgYWdlbnQpKSB7XG4gICAgICBzZWxlY3RBZ2VudChidWlsZExlZ2FjeUNvbnRleHRBZ2VudChhZ2VudCkpXG4gICAgfVxuICB9LCBbbGVnYWN5Q29udGV4dFNlc3Npb24sIGFnZW50LCBzZWxlY3RBZ2VudF0pXG5cbiAgLy8gQWJyZSB1biBjaGF0IG51ZXZvIGNvbiBlbCBvcmNoZXN0cmF0b3Igc2V0ZWFuZG8gZWwgY29udGV4dG8gZGVsIGNsb25lIGxlZ2FjeSAobWlzbW8gY3JpdGVyaW9cbiAgLy8gcXVlIGNsaWNrZWFyIHVuIGNvbnRleHRvIHJlY2llbnRlIGVuIGVsIGhvbWUg4oaSIHBhc28gMiBjb24gRkFRcy9hY2Npb25lcyBkZSBlc2UgY29udGV4dG8pLlxuICBjb25zdCBoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgb3JjaGVzdHJhdG9yID0gZmluZE9yY2hlc3RyYXRvckFnZW50KGFnZW50cy5kYXRhKVxuICAgIGlmICghY2FuQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0KHNlc3Npb25NZXRhLCBvcmNoZXN0cmF0b3IpIHx8ICFzZXNzaW9uTWV0YSB8fCAhb3JjaGVzdHJhdG9yKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgYWdlbnRFbnRpdHksXG4gICAgICBwcm9qZWN0SWQ6IHBJZCxcbiAgICAgIHByb2plY3ROYW1lOiBwTmFtZSxcbiAgICAgIGNsaWVudElkOiBjSWQsXG4gICAgICBjbGllbnROYW1lOiBjTmFtZSxcbiAgICAgIHRhc2tJZDogdElkLFxuICAgICAgdGFza05hbWU6IHROYW1lLFxuICAgIH0gPSBzZXNzaW9uTWV0YVxuXG4gICAgY29uc3QgbWlncmF0aW9uUGF0Y2ggPSBidWlsZExlZ2FjeUNvbnRleHRNaWdyYXRpb25QYXRjaCh7XG4gICAgICBhZ2VudEVudGl0eSxcbiAgICAgIHByb2plY3RJZDogcElkLFxuICAgICAgcHJvamVjdE5hbWU6IHBOYW1lLFxuICAgICAgY2xpZW50SWQ6IGNJZCxcbiAgICAgIGNsaWVudE5hbWU6IGNOYW1lLFxuICAgICAgdGFza0lkOiB0SWQsXG4gICAgICB0YXNrTmFtZTogdE5hbWUsXG4gICAgfSkgPz8geyB0YXNrOiBudWxsLCBwcm9qZWN0OiBudWxsLCBjbGllbnQ6IG51bGwsIGNoaXBzUHJvamVjdDogbnVsbCB9XG5cbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG5cbiAgICBzZXRUYXNrPy4obWlncmF0aW9uUGF0Y2gudGFzaylcbiAgICBzZXRQcm9qZWN0KG1pZ3JhdGlvblBhdGNoLnByb2plY3QpXG4gICAgc2V0Q2xpZW50Py4obWlncmF0aW9uUGF0Y2guY2xpZW50KVxuICAgIHNldENoaXBzUHJvamVjdChtaWdyYXRpb25QYXRjaC5jaGlwc1Byb2plY3QpXG5cbiAgICBzZWxlY3RBZ2VudChvcmNoZXN0cmF0b3IpXG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgfSwgW3Nlc3Npb25NZXRhLCBhZ2VudHMuZGF0YSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0LCBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSlcblxuICBjb25zdCB7IHNob3dOZXdDaGF0LCBpc015QWdlbnRzU2VjdGlvbiwgaXNNeVNraWxsc1NlY3Rpb24sIGlzTWFpYWtlckNyZWF0b3JIb21lIH0gPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVDaGF0TW9kYWxTZWN0aW9uRmxhZ3MoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkKSxcbiAgICBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkXVxuICApXG5cbiAgY29uc3QgaGFzQ2hhdEFjY2VzcyA9IHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpXG4gIGNvbnN0IG1haW5Db250ZW50VmlldyA9IHJlc29sdmVDaGF0TW9kYWxNYWluQ29udGVudFZpZXcoaGFzRXJyb3IsIGhhc0NoYXRBY2Nlc3MpXG4gIGNvbnN0IHNob3dNb2RhbEZvb3RlciA9IHNob3VsZFNob3dDaGF0TW9kYWxGb290ZXIoe1xuICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbixcbiAgICBob21lT3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgY2hhdE9wdGlvbjogb3B0aW9ucy5jaGF0LFxuICAgIGFnZW50c0NvdW50OiBhZ2VudHMuZGF0YS5sZW5ndGgsXG4gICAgaXNNYWlha2VyQ3JlYXRvckhvbWUsXG4gICAgaGFzRXJyb3IsXG4gICAgbG9hZGluZyxcbiAgICBoYXNBY2Nlc3M6IGhhc0NoYXRBY2Nlc3MsXG4gIH0pXG4gIGNvbnN0IHNob3dTaWRlYmFyID0gc2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIoaGFzQ2hhdEFjY2VzcywgaXNGbG9hdGluZylcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIjogc29sbyBwYXJhIGVsIG9yY2hlc3RyYXRvci5cbiAgLy8gLSBFbiBlbCBjaGF0OiBkaXNwb25pYmxlIGVuIHRvZGFzIGxhcyBzZWNjaW9uZXMgKGhlYWRlciB5IHByb2plY3QvY2xpZW50L3Rhc2spLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvIHBpbmVhZG8pOiBlbiBlbCBoZWFkZXIgc2llbXByZTsgZW5cbiAgLy8gICBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKHBhc8OzIHBvciBlbCBzZWxlY3RvciBkZVxuICAvLyAgIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBlbCBwYXNvIDEgKHNpbiBjb250ZXh0bykgTk8gc2UgbXVlc3RyYS5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICB0YXNrSWQ6IHRhc2s/LmlkLFxuICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICB9KVxuICBjb25zdCB7IGlzQ2hhdFZpZXcsIGlzSGVhZGVySG9tZVN0ZXAyLCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiB9ID0gcmVzb2x2ZU9yY2hlc3RyYXRvckhvbWVOYXZGbGFncyh7XG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGhvbWVPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICBjaGF0T3B0aW9uOiBvcHRpb25zLmNoYXQsXG4gICAgaGFzUGlubmVkQ29udGV4dCxcbiAgICBzZWN0aW9uLFxuICAgIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbixcbiAgfSlcbiAgY29uc3Qgc2hvd0JhY2tCdXR0b24gPSBzaG91bGRTaG93T3JjaGVzdHJhdG9yQmFja0J1dHRvbih7XG4gICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICBoYXNFcnJvcixcbiAgICBsb2FkaW5nLFxuICAgIGlzQ2hhdFZpZXcsXG4gICAgaXNIZWFkZXJIb21lU3RlcDIsXG4gICAgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIsXG4gIH0pXG4gIGNvbnN0IGhhbmRsZU9wZW5NYXJrZXRwbGFjZSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNhbk9wZW5NYWlhTWFya2V0cGxhY2UoQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgYXdhaXQgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlBZ2VudHMpXG4gICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgIGFnZW50c05hdkFjdGl2ZTogJ215QWdlbnRzJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMubXlBZ2VudHMsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgICBhZ2VudElkOiBudWxsLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Ta2lsbHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyh1c2VySGFzU2tpbGxzQWNjZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNsZWFyQWdlbnQoKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teVNraWxscylcbiAgICBoYW5kbGVHZXRTa2lsbHMoKVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdteVNraWxscycsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLm15U2tpbGxzLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBoYW5kbGVHZXRTa2lsbHMsIHVzZXIuaWQsIHVzZXJIYXNTa2lsbHNBY2Nlc3NdKVxuXG4gIGNvbnN0IGhhbmRsZUdvVG9NYWlha2VyID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGxldCBtYWlha2VyQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmZW50aXR5PWdsb2JhbCZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgbWFpYWtlckFnZW50ID0gKGRhdGEuZGF0YSB8fCBbXSkuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgYWdlbnRzTmF2QWN0aXZlOiAnbWFpYWtlcicsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgICBhZ2VudElkOiBtYWlha2VyQWdlbnQuaWQsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW2FnZW50cy5kYXRhLCBpMThuLmxhbmd1YWdlLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB1c2VyLmlkXSlcblxuICBjb25zdCBsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoc25hcHNob3Q6IE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKHNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgYWdlbnRUb1NlbGVjdDogQWdlbnQgfCB1bmRlZmluZWRcbiAgICAgIGlmIChzaG91bGRGZXRjaEFnZW50RGV0YWlsT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudElkLCBzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWdlbnRUb1NlbGVjdCA9IGF3YWl0IGZldGNoQWdlbnREZXRhaWwoc25hcHNob3QuYWdlbnRJZCBhcyBzdHJpbmcpXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cyhzaG91bGRQYXNzQWdlbnRUb0dldEFnZW50c09uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpID8gYWdlbnRUb1NlbGVjdCA6IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUoYWdlbnRUb1NlbGVjdCwgc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlKSkge1xuICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFRvU2VsZWN0IGFzIEFnZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUdldEFnZW50cywgc2VsZWN0QWdlbnRdXG4gIClcblxuICBjb25zdCBhcHBseVNlc3Npb25SZXN0b3JlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNuYXBzaG90OiBNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QpID0+IHtcbiAgICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICAgIGNvbnN0IGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdCA9IHJlc29sdmVTbmFwc2hvdENoaXBzUHJvamVjdChzbmFwc2hvdC5ob3N0Q29udGV4dClcbiAgICAgIGlmIChjaGlwc1Byb2plY3RGcm9tU25hcHNob3QpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdClcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdG9yZVJvdXRlID0gcmVzb2x2ZVNlc3Npb25SZXN0b3JlTmF2Um91dGUoc25hcHNob3QpXG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteUFnZW50cycpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlT3Blbk1hcmtldHBsYWNlKClcbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteVNraWxscycpIHtcbiAgICAgICAgaGFuZGxlT3BlblNraWxscygpXG4gICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAocmVzdG9yZVJvdXRlID09PSAnbWFpYWtlcicpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlR29Ub01haWFrZXIoKVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ2NoYXQnKSB7XG4gICAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgICAgc2V0SW5pdGlhbENoYXRJZChzbmFwc2hvdC5hY3RpdmVDaGF0SWQgPz8gbnVsbClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkuc2V0QWN0aXZlQ2hhdElkKHNuYXBzaG90LmFjdGl2ZUNoYXRJZCA/PyBudWxsKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgICB9IGVsc2UgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ3NhdmVkT3B0aW9uJyAmJiBzbmFwc2hvdC5jdXJyZW50T3B0aW9uKSB7XG4gICAgICAgIHNldEN1cnJlbnRPcHRpb24oc25hcHNob3QuY3VycmVudE9wdGlvbiBhcyBvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICB9LFxuICAgIFtcbiAgICAgIGZvY3VzQ2hhdElucHV0LFxuICAgICAgaGFuZGxlR29Ub01haWFrZXIsXG4gICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gICAgICBoYW5kbGVPcGVuU2tpbGxzLFxuICAgICAgaGFuZGxlcnMsXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUsXG4gICAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uLFxuICAgIF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudFxuICAgIGlmICghc25hcHNob3QgfHwgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICBjb25zdCBydW5SZXN0b3JlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlKHNuYXBzaG90KVxuICAgICAgICBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYXdhaXQgYXBwbHlTZXNzaW9uUmVzdG9yZShzbmFwc2hvdClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzUmVzdG9yaW5nU2Vzc2lvbihmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBydW5SZXN0b3JlKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICB9LCBbYXBwbHlTZXNzaW9uUmVzdG9yZSwgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlLCBzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgcmVtb3ZlQWdlbnQoYWdlbnRJZClcbiAgICAgIGlmIChzaG91bGRSZXNlbGVjdEFnZW50QWZ0ZXJEZWxldGUoYWdlbnQ/LmlkLCBhZ2VudElkKSkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGFnZW50SWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQ/LmlkLCByZW1vdmVBZ2VudCwgc2VsZWN0Rmlyc3RBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IG1vZGFsUGFuZWwgPSAoXG4gICAgPD5cbiAgICAgIHtzaG93U2lkZWJhciA/IChcbiAgICAgICAgPFNpZGViYXJcbiAgICAgICAgICBvbkdvVG9DaGF0PXtnb1RvQ2hhdH1cbiAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRTaWRlYmFySGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgaGFuZGxlR29Ub0hvbWU9e2hhbmRsZUdvSG9tZX1cbiAgICAgICAgICBoYW5kbGVTdGFydE5ld0NoYXQ9e2hhbmRsZVN0YXJ0TmV3Q2hhdH1cbiAgICAgICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2U9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICBzaG93TmV3Q2hhdD17c2hvd05ld0NoYXR9XG4gICAgICAgICAgcmVmZXRjaENoYXRzPXtyZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFuZGxlU2V0UmVmZXRjaENoYXRzPXtzZXRSZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFzRXJyb3I9e3NpZGViYXJIYXNFcnJvcn1cbiAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU9e3NpZGViYXJBZ2VudHNOYXZBY3RpdmV9XG4gICAgICAgICAgaGFuZGxlT3BlblNraWxscz17aGFuZGxlT3BlblNraWxsc31cbiAgICAgICAgICBvbk9wZW5NYWlha2VyQ3JlYXRvcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgaXNMZWdhY3lDb250ZXh0U2Vzc2lvbj17ISFsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgICBpbml0aWFsT3Blbj17c2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5zaWRlYmFyT3BlbiA/PyBmYWxzZX1cbiAgICAgICAgICBvbk9wZW5DaGFuZ2U9e2hhbmRsZVNpZGViYXJPcGVuQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8U0NDQUlNQ29udGVudCBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfT5cbiAgICAgICAgPENoYXRBSU1vZGFsSGVhZGVyXG4gICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICBvbkxheW91dE1vZGVDaGFuZ2U9e2hhbmRsZUxheW91dE1vZGVDaGFuZ2V9XG4gICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgIGRyYWdnYWJsZT17aXNGbG9hdGluZ31cbiAgICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICAgIG9uRHJhZ01vdmU9e2hhbmRsZURyYWdNb3ZlfVxuICAgICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgICBoYW5kbGVNaW5pbWl6ZT17aGFuZGxlTWluaW1pemV9XG4gICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICBoYXNFcnJvcj17ISFhZ2VudEVycm9yfVxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgbG9hZGluZ01vcmU9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2FnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICBoYW5kbGVSZXNldENoYXQ9e2hhbmRsZVJlc2V0Q2hhdH1cbiAgICAgICAgICBvbkFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgIGxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICBzb3J0QWdlbnRzTGlzdD17c29ydEFnZW50c0xpc3R9XG4gICAgICAgICAgaXNNeUFnZW50c1NlY3Rpb249e2lzTXlBZ2VudHNTZWN0aW9ufVxuICAgICAgICAgIGlzTXlTa2lsbHNTZWN0aW9uPXtpc015U2tpbGxzU2VjdGlvbn1cbiAgICAgICAgICBpc01haWFrZXJTZWN0aW9uPXtpc01haWFrZXJDcmVhdG9ySG9tZX1cbiAgICAgICAgICBzaG93QmFja0J1dHRvbj17c2hvd0JhY2tCdXR0b259XG4gICAgICAgICAgb25CYWNrPXtoYW5kbGVCYWNrfVxuICAgICAgICAvPlxuICAgICAgICB7bWFpbkNvbnRlbnRWaWV3ID09PSAnZXJyb3InID8gKFxuICAgICAgICAgIDxNQUlBRXJyb3IgLz5cbiAgICAgICAgKSA6IG1haW5Db250ZW50VmlldyA9PT0gJ2NoYXQnID8gKFxuICAgICAgICAgIDxDaGF0QUlDb250ZW50XG4gICAgICAgICAgICBjdXJyZW50T3B0aW9uPXtjb21wdXRlZEN1cnJlbnRPcHRpb259XG4gICAgICAgICAgICBoYW5kbGVycz17eyAuLi5oYW5kbGVycywgY2hhdDogc3RhcnRDaGF0LCBob21lOiBoYW5kbGVycy5ob21lLCBoYW5kbGVHb0hvbWUgfX1cbiAgICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldEhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgICAgcmVmcz17eyB1c2VySW5pdGlhbE1lc3NhZ2UsIGluaXRpYWxDaGF0SWQgfX1cbiAgICAgICAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeT17aGFuZGxlU2VuZE1lc3NhZ2VSZWFkeX1cbiAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgIGZsb2F0aW5nPXtpc0Zsb2F0aW5nfVxuICAgICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICAgIGxvYWRpbmdBZ2VudHM9e2xvYWRpbmd9XG4gICAgICAgICAgICBvbkRlbGV0ZUFnZW50PXtoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50c31cbiAgICAgICAgICAgIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIGhhc01vcmVBZ2VudHM9eyEhYWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgICAgbG9hZGluZ01vcmVBZ2VudHM9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgICAgb25Mb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgICBvbkdvVG9NYWlha2VyPXtoYW5kbGVHb1RvTWFpYWtlcn1cbiAgICAgICAgICAgIG15U2tpbGxzPXtteVNraWxsc31cbiAgICAgICAgICAgIHNoYXJlZFNraWxscz17c2hhcmVkU2tpbGxzfVxuICAgICAgICAgICAgbG9hZGluZ1NraWxscz17bG9hZGluZ1NraWxsc31cbiAgICAgICAgICAgIG9uRGVsZXRlU2tpbGw9e3JlbW92ZVNraWxsfVxuICAgICAgICAgICAgb25TZWFyY2hBZ2VudHM9e3NlYXJjaEN1c3RvbUFnZW50c31cbiAgICAgICAgICAgIHNlYXJjaExvYWRpbmdBZ2VudHM9e3NlYXJjaExvYWRpbmd9XG4gICAgICAgICAgICBhZ2VudEVycm9yPXthZ2VudEVycm9yfVxuICAgICAgICAgICAgaXNSZXN0b3JpbmdTZXNzaW9uPXtpc1Jlc3RvcmluZ1Nlc3Npb259XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UHJvamVjdFN1bW1hcnlDb250ZW50IG9uUmVzdGFydFN1bW1hcnk9e2hhbmRsZXJzLmhvbWV9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG93TW9kYWxGb290ZXIgJiYgKFxuICAgICAgICAgIDxDaGF0QWlNb2RhbEZvb3RlclxuICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgaGFuZGxlU2VuZE1lc3NhZ2U9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgaGFuZGxlU3RvcEdlbmVyYXRpb249e3N0b3BHZW5lcmF0aW9uRnVuY3Rpb259XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICBpc1dyaXRpbmc9e2lzV3JpdGluZ31cbiAgICAgICAgICAgIGNoYXRJZD17aW5pdGlhbENoYXRJZH1cbiAgICAgICAgICAgIG5ld0NoYXRLZXk9e25ld0NoYXRLZXl9XG4gICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgbGVnYWN5Q29udGV4dFNlc3Npb249e2xlZ2FjeUNvbnRleHRTZXNzaW9ufVxuICAgICAgICAgICAgb25Db250aW51ZUluTmV3Q2hhdD17aGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0fVxuICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1Db250ZW50PlxuICAgIDwvPlxuICApXG5cbiAgY29uc3QgY29udGVudFdyYXBwZXIgPSAoXG4gICAgPFNDQ0FJTUNvbnRlbnRXcmFwcGVyIGV4cGFuZGVkPXtleHBhbmRlZH0gZmxvYXRpbmc9e2lzRmxvYXRpbmd9IHJlZj17Y29udGVudFdyYXBwZXJSZWZ9PlxuICAgICAge21vZGFsUGFuZWx9XG4gICAgPC9TQ0NBSU1Db250ZW50V3JhcHBlcj5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgc2VsZWN0b3IgJiZcbiAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8U0NDQUlNV3JhcHBlclxuICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgIGRyYWdQb3NpdGlvbj17cmVzb2x2ZWREcmFnUG9zaXRpb259XG4gICAgICAgIGVsZXZhdGVkPXtzaG91bGRVc2VFbGV2YXRlZE1haWFQYW5lbChzZWN0aW9uKX1cbiAgICAgICAgJG1pbmltaXplZD17aXNNaW5pbWl6ZWR9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSU1NaW5pbWl6ZWRIaWRlICRoaWRkZW49e2lzTWluaW1pemVkfT5cbiAgICAgICAgICA8RmxvYXRpbmdQYW5lbE1vdGlvbiB0aWx0PXt0aWx0TW90aW9ufSBleHBhbmRlZD17ZXhwYW5kZWR9PlxuICAgICAgICAgICAge2NvbnRlbnRXcmFwcGVyfVxuICAgICAgICAgIDwvRmxvYXRpbmdQYW5lbE1vdGlvbj5cbiAgICAgICAgPC9TQ0NBSU1NaW5pbWl6ZWRIaWRlPlxuICAgICAgICB7aXNNaW5pbWl6ZWQgJiYgKFxuICAgICAgICAgIDxNYWlhTWluaW1pemVkUGlsbFxuICAgICAgICAgICAgc2hvd05vdmVsdHlEb3Q9e3Nob3dNaW5pbWl6ZWROb3ZlbHR5RG90fVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2hhc0FjdGl2ZVN0cmVhbX1cbiAgICAgICAgICAgIG9uUmVzdG9yZT17aGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiAoXG4gICAgICAgICAgPEFibUFnZW50TW9kYWxcbiAgICAgICAgICAgIGFkZEFnZW50PXthZGRBZ2VudH1cbiAgICAgICAgICAgIHVwZGF0ZUFnZW50PXt1cGRhdGVBZ2VudH1cbiAgICAgICAgICAgIHJlbW92ZUFnZW50PXtyZW1vdmVBZ2VudH1cbiAgICAgICAgICAgIHVwZGF0ZUFnZW50RmF2b3JpdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBzZWxlY3RGaXJzdEFnZW50PXtzZWxlY3RGaXJzdEFnZW50fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHt1c2VySGFzU2tpbGxzQWNjZXNzICYmIChcbiAgICAgICAgICA8QWJtU2tpbGxNb2RhbCBhZGRTa2lsbD17YWRkU2tpbGx9IHVwZGF0ZVNraWxsSW5MaXN0PXt1cGRhdGVTa2lsbEluTGlzdH0gcmVtb3ZlU2tpbGw9e3JlbW92ZVNraWxsfSAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1NraWxsc0FjY2VzcyAmJiA8QWJtU2tpbGxHZW5lcmF0ZU1vZGFsIC8+fVxuICAgICAgICA8U25hY2tiYXIgLz5cbiAgICAgIDwvU0NDQUlNV3JhcHBlcj4sXG4gICAgICBzZWxlY3RvclxuICAgIClcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQ0VBLFdBQVcsRUFDWEMsT0FBTyxFQUNQQyxRQUFRLEVBQ1JDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxlQUFlLFFBRVYsT0FBTztBQUNkLE9BQU9DLFFBQVEsTUFBTSxXQUFXO0FBQ2hDLE9BQU9DLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFDbkQsU0FBU0MsaUJBQWlCLFFBQVEsZ0NBQWdDO0FBQ2xFLFNBQVNDLFNBQVMsUUFBUSx1QkFBdUI7QUFDakQsU0FBU0Msc0JB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QUN1UixRQUFRLEVBQUVBLFFBQVM7SUFBQzBRLFFBQVEsRUFBRXpRLFVBQVc7SUFBQ3FTLEdBQUcsRUFBRXBTLGlCQUFrQjtJQUFBK1AsUUFBQSxFQUNwRkQ7RUFBVSxDQUNTLENBQ3ZCO0VBRUQsT0FDRXpRLFFBQVEsaUJBQ1JyUyxRQUFRLENBQUNxbEIsWUFBWSxjQUNuQnJkLEtBQUEsQ0FBQ3ZHLGFBQWE7SUFDWnFSLFFBQVEsRUFBRUEsUUFBUztJQUNuQkosVUFBVSxFQUFFQSxVQUFXO0lBQ3ZCVSxZQUFZLEVBQUV3QyxvQkFBcUI7SUFDbkMwUCxRQUFRLEVBQUVwZSwwQkFBMEIsQ0FBQytILE9BQU8sQ0FBRTtJQUM5Q3NXLFVBQVUsRUFBRTFiLFdBQVk7SUFBQWtaLFFBQUEsZ0JBRXhCamIsSUFBQSxDQUFDdEcsbUJBQW1CO01BQUNna0IsT0FBTyxFQUFFM2IsV0FBWTtNQUFBa1osUUFBQSxlQUN4Q2piLElBQUEsQ0FBQy9GLG1CQUFtQjtRQUFDMGpCLElBQUksRUFBRWpTLFVBQVc7UUFBQ1YsUUFBUSxFQUFFQSxRQUFTO1FBQUFpUSxRQUFBLEVBQ3ZEL087TUFBYyxDQUNJO0lBQUMsQ0FDSCxDQUFDLEVBQ3JCbkssV0FBVyxpQkFDVi9CLElBQUEsQ0FBQ3BHLGlCQUFpQjtNQUNoQmdrQixjQUFjLEVBQUV4Yix1QkFBd0I7TUFDeEMyQyxXQUFXLEVBQUV6QyxlQUFnQjtNQUM3QnViLFNBQVMsRUFBRWpNO0lBQTJCLENBQ3ZDLENBQ0YsRUFDQS9ILGtCQUFrQixpQkFDakI3SixJQUFBLENBQUM3RyxhQUFhO01BQ1owUCxRQUFRLEVBQUVBLFFBQVM7TUFDbkJFLFdBQVcsRUFBRUEsV0FBWTtNQUN6QkQsV0FBVyxFQUFFQSxXQUFZO01BQ3pCRSxtQkFBbUIsRUFBRUEsbUJBQW9CO01BQ3pDQyxnQkFBZ0IsRUFBRUE7SUFBaUIsQ0FDcEMsQ0FDRixFQUNBZ0IsbUJBQW1CLGlCQUNsQmpLLElBQUEsQ0FBQzVHLGFBQWE7TUFBQ3NRLFFBQVEsRUFBRUEsUUFBUztNQUFDQyxpQkFBaUIsRUFBRUEsaUJBQWtCO01BQUNDLFdBQVcsRUFBRUE7SUFBWSxDQUFFLENBQ3JHLEVBQ0FLLG1CQUFtQixpQkFBSWpLLElBQUEsQ0FBQzFHLHFCQUFxQixJQUFFLENBQUMsZUFDakQwRyxJQUFBLENBQUMvRyxRQUFRLElBQUUsQ0FBQztFQUFBLENBQ0MsQ0FBQyxFQUNoQnNSLFFBQ0YsQ0FBQztBQUVMLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|