@projectcor/maia-components 2.44.5-0 → 2.45.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/AttachmentCard/AttachmentCardAudio.js +51 -5
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +76 -18
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +31 -3
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -2
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +255 -15
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +34 -5
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
- package/lib/components/atoms/MAIAInput/MAIAInput.js +10 -4
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +60 -8
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +15 -3
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +16 -21
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +5 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +52 -72
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +1 -6
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -36
- package/lib/components/index.js +1 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +29 -5
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +40 -6
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +90 -18
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +15 -5
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +6 -21
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +47 -19
- package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -29
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +4 -147
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +108 -64
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +2 -3
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +86 -76
- package/lib/components/molecules/ChatFooter/ChatFooter.js +3 -5
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +44 -9
- package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +171 -56
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +1 -4
- package/lib/dev/DevReasoningTimeline.js +37 -68
- package/lib/dev/Providers.js +3 -5
- package/lib/hooks/useChatManager/useChatManager.js +351 -76
- package/lib/hooks/useChatMessages/useChatMessages.js +82 -12
- package/lib/hooks/useClientSearch.js +32 -4
- package/lib/hooks/useContextMentions.js +163 -2
- package/lib/hooks/useContextPinPopover.js +75 -16
- package/lib/hooks/useEntitySearch.js +391 -38
- package/lib/hooks/useFrequentlyUsedActions.js +22 -60
- package/lib/hooks/useMentionPopover.js +35 -9
- package/lib/hooks/useMinimizedPillBottomOffset.js +45 -15
- package/lib/hooks/useProjectSearch.js +58 -4
- package/lib/hooks/useProjectSummaryConfig.js +52 -14
- package/lib/hooks/useRecentClientsSearch.js +32 -4
- package/lib/index.js +2 -5
- package/lib/lang/approvalBoxToolActions.js +492 -0
- package/lib/lang/br/index.js +23 -59
- package/lib/lang/en/index.js +23 -59
- package/lib/lang/es/index.js +23 -59
- package/lib/lang/fr/index.js +23 -59
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Agents/getAgents.js +242 -78
- package/lib/services/maia/Orchestrator/orchestrator.js +121 -38
- package/lib/store/sessions/sessionNotifications.js +41 -35
- package/lib/store/sessions/sessionStreamManager.js +52 -40
- package/lib/styles/cascade.js +3 -29
- package/lib/styles/transitions.js +1 -3
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/hoursPlannerQuickActionType.js +1 -74
- package/lib/utils/imagePreprocessor.js +37 -12
- package/lib/utils/streamActivityMessages.js +60 -32
- package/package.json +1 -1
- package/lib/components/atoms/ActionableButton.spec.js +0 -111
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +0 -65
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +0 -55
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +0 -31
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +0 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
- package/lib/components/atoms/Chip/Chip.spec.js +0 -82
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +0 -227
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +0 -31
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
- package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
- package/lib/components/atoms/Expand/Expand.spec.js +0 -57
- package/lib/components/atoms/Fade/Fade.spec.js +0 -31
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
- package/lib/components/atoms/HelpButton.spec.js +0 -87
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +0 -12
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -430
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +0 -50
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
- package/lib/components/atoms/NextPageLoader.spec.js +0 -37
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +0 -17
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
- package/lib/components/atoms/PrimaryButton.spec.js +0 -42
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -132
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -162
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -4
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +0 -10
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
- package/lib/components/atoms/Switch/Switch.spec.js +0 -41
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
- package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
- package/lib/components/atoms/ThirdButton.spec.js +0 -29
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
- package/lib/components/atoms/WithAppCfg.spec.js +0 -60
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +0 -37
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -371
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +0 -39
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +0 -86
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +0 -17
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
- package/lib/components/molecules/AgentInputBlock/index.js +0 -5
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +0 -54
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -410
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +0 -5
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +0 -30
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
- package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
- package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -355
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +0 -48
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +0 -198
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -385
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1125
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -231
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -267
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -261
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -194
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -105
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -73
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
- package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
- package/lib/components/organisms/ChatAIPage/index.js +0 -3
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
- package/lib/constants/permissions/utils.spec.js +0 -128
- package/lib/dev/DevMaiaPage.js +0 -30
- package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
- package/lib/hooks/useAgentSuggestions.spec.js +0 -89
- package/lib/hooks/useCaretPosition.spec.js +0 -58
- package/lib/hooks/useChatManager/useChatManager.helpers.js +0 -353
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
- package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +0 -109
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
- package/lib/hooks/useChats/useChats.spec.js +0 -208
- package/lib/hooks/useClientSearch.helpers.js +0 -36
- package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
- package/lib/hooks/useClientSearch.spec.js +0 -86
- package/lib/hooks/useContextMentions.helpers.js +0 -152
- package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
- package/lib/hooks/useContextMentions.spec.js +0 -239
- package/lib/hooks/useContextMentions.types.js +0 -2
- package/lib/hooks/useContextPinPopover.helpers.js +0 -95
- package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
- package/lib/hooks/useContextPinPopover.spec.js +0 -159
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
- package/lib/hooks/useDebounce.spec.js +0 -42
- package/lib/hooks/useEntitySearch.helpers.js +0 -359
- package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
- package/lib/hooks/useEntitySearch.spec.js +0 -443
- package/lib/hooks/useEvent.spec.js +0 -45
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
- package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
- package/lib/hooks/useIsMaiaPageRoute.js +0 -26
- package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
- package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
- package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
- package/lib/hooks/useMentionPopover.helpers.js +0 -41
- package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
- package/lib/hooks/useMentionPopover.spec.js +0 -215
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +0 -47
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
- package/lib/hooks/useModal/useModal.spec.js +0 -73
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
- package/lib/hooks/useProjectSearch.helpers.js +0 -61
- package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
- package/lib/hooks/useProjectSearch.spec.js +0 -91
- package/lib/hooks/useProjectSummary.spec.js +0 -193
- package/lib/hooks/useProjectSummaryConfig.helpers.js +0 -62
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
- package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
- package/lib/hooks/useRecentClientsSearch.helpers.js +0 -33
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
- package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
- package/lib/hooks/useRecentContexts.spec.js +0 -139
- package/lib/hooks/useResize.spec.js +0 -37
- package/lib/hooks/useSkillsCatalog.spec.js +0 -88
- package/lib/hooks/useSlashCommands.spec.js +0 -139
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
- package/lib/hooks/useStreamResponse.spec.js +0 -199
- package/lib/hooks/useT.spec.js +0 -20
- package/lib/hooks/useToggle.spec.js +0 -33
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
- package/lib/services/maia/Access/updateAccess.spec.js +0 -137
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
- package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
- package/lib/services/maia/Agents/connectors.spec.js +0 -359
- package/lib/services/maia/Agents/createAgent.spec.js +0 -55
- package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
- package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
- package/lib/services/maia/Agents/getAgents.helpers.js +0 -181
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
- package/lib/services/maia/Agents/getAgents.spec.js +0 -697
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
- package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
- package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
- package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
- package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
- package/lib/services/maia/Chats/patchChat.spec.js +0 -41
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
- package/lib/services/maia/Knowledge/delete.spec.js +0 -45
- package/lib/services/maia/Knowledge/download.spec.js +0 -78
- package/lib/services/maia/Knowledge/save.spec.js +0 -58
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +0 -130
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
- package/lib/services/maia/Skills/createSkill.spec.js +0 -68
- package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
- package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
- package/lib/services/maia/Skills/getSkills.spec.js +0 -152
- package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
- package/lib/services/maia/client.spec.js +0 -56
- package/lib/services/utils/fetchCOR.spec.js +0 -211
- package/lib/services/utils/getCookie.spec.js +0 -20
- package/lib/services/utils/mapChatMessages.spec.js +0 -254
- package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
- package/lib/store/maiaLastChatPersistence.spec.js +0 -22
- package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
- package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
- package/lib/store/sessions/sessionNotifications.helpers.js +0 -45
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
- package/lib/store/sessions/sessionNotifications.spec.js +0 -106
- package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
- package/lib/store/sessions/sessions.types.spec.js +0 -16
- package/lib/store/sessions/useSessionsStore.spec.js +0 -135
- package/lib/store/useChatsStore.spec.js +0 -619
- package/lib/store/useFaqsStore.spec.js +0 -57
- package/lib/test/mockSseStream.js +0 -121
- package/lib/test/streamdownCodeMock.js +0 -6
- package/lib/test/streamdownMock.js +0 -12
- package/lib/utils/actionCategoryMap.spec.js +0 -18
- package/lib/utils/agentDisplayName.spec.js +0 -44
- package/lib/utils/autoApproveStorage.spec.js +0 -25
- package/lib/utils/chatInputFiles.spec.js +0 -39
- package/lib/utils/contextMentionIcons.spec.js +0 -41
- package/lib/utils/contextMentionLabel.spec.js +0 -13
- package/lib/utils/contextMentionTriggers.spec.js +0 -38
- package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
- package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
- package/lib/utils/entityLinkRender.spec.js +0 -72
- package/lib/utils/fileDownloadHelper.spec.js +0 -67
- package/lib/utils/formatQuickActionMessage.spec.js +0 -27
- package/lib/utils/formatUnreadCount.spec.js +0 -12
- package/lib/utils/getUnitFileSize.spec.js +0 -18
- package/lib/utils/hitlAnalytics.spec.js +0 -100
- package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
- package/lib/utils/imagePreprocessor.helpers.js +0 -28
- package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
- package/lib/utils/imagePreprocessor.spec.js +0 -112
- package/lib/utils/maiaPageRoute.js +0 -24
- package/lib/utils/maiaPageRoute.spec.js +0 -23
- package/lib/utils/mapBackendLang.spec.js +0 -19
- package/lib/utils/navigateContextEntity.spec.js +0 -50
- package/lib/utils/normalizeAgentConnectors.spec.js +0 -107
- package/lib/utils/orchestratorSubagents.spec.js +0 -32
- package/lib/utils/reasoningMappers.spec.js +0 -103
- package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
- package/lib/utils/renderContextMentions.spec.js +0 -158
- package/lib/utils/retryCompletion.spec.js +0 -99
- package/lib/utils/skillContentSize.spec.js +0 -13
- package/lib/utils/slashCommandMarker.spec.js +0 -43
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
- package/lib/utils/sseStreamContent.spec.js +0 -31
- package/lib/utils/streamActivityMessages.spec.js +0 -227
- package/lib/utils/validateTrimmedFields.spec.js +0 -26
|
@@ -19,7 +19,7 @@ import ReactDOM from 'react-dom';
|
|
|
19
19
|
import moment from 'moment';
|
|
20
20
|
import { useTranslation } from 'react-i18next';
|
|
21
21
|
import { useUser } from '../../../context/cor-user';
|
|
22
|
-
import { canAccessToSkills } from '../../../constants/permissions';
|
|
22
|
+
import { canAccessToChatAI, canAccessToSkills } from '../../../constants/permissions';
|
|
23
23
|
import { MAIAError } from '../../atoms/MAIAError';
|
|
24
24
|
import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
|
|
25
25
|
import { ChatAIContent } from '../ChatAIContent';
|
|
@@ -39,33 +39,63 @@ 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 {
|
|
42
|
+
import { dispatchSkillMentionInsert, ensureAgentsBeforeSkillUse } from './ChatAIModal.helpers';
|
|
43
43
|
import { FloatingPanelMotion, useFloatingPanelDragTilt } from './floatingPanelMotion';
|
|
44
44
|
import { ChatAiModalFooter } from './components/ChatAiModalFooter';
|
|
45
|
+
import { validateIsMaia } from '../../../services/utils/validateIsMaia';
|
|
45
46
|
import { isMarketplaceGlobalCloneAgent } from '../../../utils/agentDisplayName';
|
|
46
47
|
import { useFaqsStore } from '../../../store/useFaqsStore';
|
|
47
48
|
import { getChatsStoreState, useChatsStore } from '../../../store/useChatsStore';
|
|
48
49
|
import { readLastActiveChatId, writeLastActiveChatId } from '../../../store/maiaLastChatPersistence';
|
|
49
50
|
import { clearMaiaPanelSession, isValidMaiaPanelOption, patchMaiaPanelSession, readMaiaPanelSession, writeMaiaPanelSession } from '../../../store/maiaPanelSessionPersistence';
|
|
50
51
|
import { useSessionsStore } from '../../../store/sessions/useSessionsStore';
|
|
52
|
+
import { isActiveSessionStatus } from '../../../store/sessions/sessions.types';
|
|
51
53
|
import { fetchMaia } from '../../../services/maia/client';
|
|
52
54
|
import { fetchAgentDetail } from '../../../services/maia/Agents/fetchAgentDetail';
|
|
53
55
|
import { mapCORLang } from '../../../lang/utils';
|
|
54
56
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
55
57
|
import { MAIA_OPEN_FROM_HOST_EVENT } from '../../../utils/maiaHostOpen';
|
|
56
|
-
import { useIsMaiaPageRoute } from '../../../hooks/useIsMaiaPageRoute';
|
|
57
58
|
|
|
58
59
|
/** Metadata de la session abierta (emitida por useChatMessages al cargar una conversación). */
|
|
59
60
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
61
|
+
var LEGACY_CONTEXT_ENTITIES = ['project', 'task', 'client'];
|
|
62
|
+
/** Home global del orchestrator (solo header). Planner es home de FUAs, no de contextos. */
|
|
63
|
+
var isGlobalMaiaSection = function isGlobalMaiaSection(section) {
|
|
64
|
+
return section === 'header';
|
|
65
|
+
};
|
|
66
|
+
var resolveAiChatBackDestination = function resolveAiChatBackDestination(section, agentType, currentOption, homeOption) {
|
|
67
|
+
if (isGlobalMaiaSection(section) && agentType === 'orchestrator' && currentOption === homeOption) {
|
|
68
|
+
return 'global_context_home';
|
|
69
|
+
}
|
|
70
|
+
if (section === 'task') return 'task_home';
|
|
71
|
+
if (section === 'planner') return 'planner_home';
|
|
72
|
+
if (section === 'project') return 'project_home';
|
|
73
|
+
if (section === 'client') return 'client_home';
|
|
74
|
+
return 'global_context_home';
|
|
75
|
+
};
|
|
60
76
|
export var ID_MODAL_CHAT_AGENT = 'modals-portal-maia-chat-agent';
|
|
77
|
+
var validateAccessByFeature = function validateAccessByFeature(section, user) {
|
|
78
|
+
if (!section || !canAccessToChatAI(user)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Planner y task abren siempre el chat (home de FUAs), nunca resumen de proyectos.
|
|
83
|
+
if (section === 'planner' || section === 'task') {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
if (section === 'header') {
|
|
87
|
+
return Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS || window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS);
|
|
88
|
+
}
|
|
89
|
+
return Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS);
|
|
90
|
+
};
|
|
61
91
|
export var ChatAIModal = function ChatAIModal() {
|
|
62
|
-
var _savedSessionOnMountR, _savedSessionOnMountR2, _user$permissions, _user$permissions2, _user$permissions3,
|
|
92
|
+
var _savedSessionOnMountR, _savedSessionOnMountR2, _savedSessionOnMountR3, _savedSessionOnMountR4, _user$permissions, _user$permissions2, _user$permissions3, _savedSessionOnMountR7, _savedSessionOnMountR8, _agents$data;
|
|
63
93
|
var user = useUser();
|
|
64
94
|
var _useTranslation = useTranslation([SECTIONS.abmAgent]),
|
|
65
95
|
i18n = _useTranslation.i18n;
|
|
66
96
|
var amplitudEvent = useEvent();
|
|
67
97
|
var savedSessionOnMountRef = useRef(readMaiaPanelSession(user.id));
|
|
68
|
-
var shouldRestoreExpanded =
|
|
98
|
+
var shouldRestoreExpanded = (_savedSessionOnMountR = (_savedSessionOnMountR2 = savedSessionOnMountRef.current) === null || _savedSessionOnMountR2 === void 0 ? void 0 : _savedSessionOnMountR2.isExpanded) !== null && _savedSessionOnMountR !== void 0 ? _savedSessionOnMountR : false;
|
|
69
99
|
var pendingSessionRestoreRef = useRef(shouldRestoreExpanded ? savedSessionOnMountRef.current : null);
|
|
70
100
|
var sessionRestoreStartedRef = useRef(false);
|
|
71
101
|
var _useState = useState(function () {
|
|
@@ -74,7 +104,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
74
104
|
_useState2 = _slicedToArray(_useState, 2),
|
|
75
105
|
isRestoringSession = _useState2[0],
|
|
76
106
|
setIsRestoringSession = _useState2[1];
|
|
77
|
-
var sidebarOpenRef = useRef((
|
|
107
|
+
var sidebarOpenRef = useRef((_savedSessionOnMountR3 = (_savedSessionOnMountR4 = savedSessionOnMountRef.current) === null || _savedSessionOnMountR4 === void 0 ? void 0 : _savedSessionOnMountR4.sidebarOpen) !== null && _savedSessionOnMountR3 !== void 0 ? _savedSessionOnMountR3 : false);
|
|
78
108
|
|
|
79
109
|
// Tras navegar en el host (full page reload), restauramos el panel si estaba abierto.
|
|
80
110
|
var _useState3 = useState(function () {
|
|
@@ -83,10 +113,6 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
83
113
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
84
114
|
isMinimized = _useState4[0],
|
|
85
115
|
setIsMinimized = _useState4[1];
|
|
86
|
-
var isMaiaPageRoute = useIsMaiaPageRoute();
|
|
87
|
-
var _getMaiaHostPanelPres = getMaiaHostPanelPresentation(isMinimized, isMaiaPageRoute),
|
|
88
|
-
hidePanelContent = _getMaiaHostPanelPres.hidePanelContent,
|
|
89
|
-
showMinimizedPill = _getMaiaHostPanelPres.showMinimizedPill;
|
|
90
116
|
var setChatViewVisible = useChatsStore(function (state) {
|
|
91
117
|
return state.setChatViewVisible;
|
|
92
118
|
});
|
|
@@ -100,7 +126,9 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
100
126
|
// Los "..." del pill salen del motor, no de isStreaming/isWriting: esos reflejan
|
|
101
127
|
// la sesión activa y quedan stale cuando una respuesta termina en background.
|
|
102
128
|
var hasActiveStream = useSessionsStore(function (state) {
|
|
103
|
-
return
|
|
129
|
+
return Object.values(state.meta).some(function (meta) {
|
|
130
|
+
return isActiveSessionStatus(meta.status);
|
|
131
|
+
});
|
|
104
132
|
});
|
|
105
133
|
|
|
106
134
|
/** goToChat / handleGoHome se definen más abajo; los refs evitan depender del orden de declaración. */
|
|
@@ -115,18 +143,6 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
115
143
|
}
|
|
116
144
|
}, [setChatViewVisible]);
|
|
117
145
|
|
|
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
146
|
// Persistimos la conversación abierta para poder volver a ella desde el pill después
|
|
131
147
|
// de navegar o refrescar. El takeover desde un host la limpia (va al Home).
|
|
132
148
|
useEffect(function () {
|
|
@@ -188,7 +204,10 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
188
204
|
setRefetchChats = _useState20[1];
|
|
189
205
|
var _useState21 = useState(function () {
|
|
190
206
|
var saved = savedSessionOnMountRef.current;
|
|
191
|
-
|
|
207
|
+
if ((saved === null || saved === void 0 ? void 0 : saved.agentsNavActive) === 'myAgents') return options.myAgents;
|
|
208
|
+
if ((saved === null || saved === void 0 ? void 0 : saved.agentsNavActive) === 'mySkills' && canAccessToSkills(user)) return options.mySkills;
|
|
209
|
+
var savedOption = saved === null || saved === void 0 ? void 0 : saved.currentOption;
|
|
210
|
+
return savedOption && isValidMaiaPanelOption(savedOption) ? savedOption : options.home;
|
|
192
211
|
}),
|
|
193
212
|
_useState22 = _slicedToArray(_useState21, 2),
|
|
194
213
|
currentOption = _useState22[0],
|
|
@@ -263,23 +282,44 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
263
282
|
addSkill = _useGetSkills.addSkill,
|
|
264
283
|
updateSkillInList = _useGetSkills.updateSkillInList,
|
|
265
284
|
removeSkill = _useGetSkills.removeSkill;
|
|
285
|
+
var isMAIA = validateIsMaia(agent);
|
|
266
286
|
var userHasPermissions = ((user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 || (_user$permissions = _user$permissions.ai_agents) === null || _user$permissions === void 0 ? void 0 : _user$permissions.create) || (user === null || user === void 0 || (_user$permissions2 = user.permissions) === null || _user$permissions2 === void 0 || (_user$permissions2 = _user$permissions2.ai_agents) === null || _user$permissions2 === void 0 ? void 0 : _user$permissions2.edit) || (user === null || user === void 0 || (_user$permissions3 = user.permissions) === null || _user$permissions3 === void 0 || (_user$permissions3 = _user$permissions3.ai_agents) === null || _user$permissions3 === void 0 ? void 0 : _user$permissions3["delete"])) && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
|
|
267
287
|
var userHasSkillsAccess = canAccessToSkills(user);
|
|
268
288
|
var computedCurrentOption = useMemo(function () {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
289
|
+
var isGlobalSpecialist = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'global';
|
|
290
|
+
var isProjectSpecialist = isMAIA && ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project' || (agent === null || agent === void 0 ? void 0 : agent.entity) == null);
|
|
291
|
+
var isClientSpecialist = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'client';
|
|
292
|
+
var isMaiaker = isMarketplaceGlobalCloneAgent(agent);
|
|
293
|
+
if (currentOption === options.myAgents && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
|
|
294
|
+
return options.myAgents;
|
|
295
|
+
}
|
|
296
|
+
if (currentOption === options.mySkills && canAccessToSkills(user)) {
|
|
297
|
+
return options.mySkills;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// El orchestrator (MAIA) muestra su home con FAQs/acciones frecuentes; el resto de
|
|
301
|
+
// los global specialists (clones globales no-maiaker) siguen yendo directo al chat.
|
|
302
|
+
if (isGlobalSpecialist && !isMaiaker && (agent === null || agent === void 0 ? void 0 : agent.type) !== 'orchestrator' && currentOption === options.home) {
|
|
303
|
+
return options.chat;
|
|
304
|
+
}
|
|
305
|
+
var shouldShowProjectSelector = currentOption !== options.chat && isProjectSpecialist && !project;
|
|
306
|
+
var shouldShowClientSelector = currentOption !== options.chat && isClientSpecialist && !client;
|
|
307
|
+
if (shouldShowProjectSelector) {
|
|
308
|
+
return options.projectSelector;
|
|
309
|
+
}
|
|
310
|
+
if (shouldShowClientSelector) {
|
|
311
|
+
return options.clientSelector;
|
|
312
|
+
}
|
|
313
|
+
return currentOption;
|
|
314
|
+
}, [currentOption, project, client, isMAIA, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name, agent === null || agent === void 0 ? void 0 : agent.type, user]);
|
|
278
315
|
var isMaiakerAgentSelected = useMemo(function () {
|
|
279
316
|
return isMarketplaceGlobalCloneAgent(agent);
|
|
280
317
|
}, [agent]);
|
|
281
318
|
var sidebarAgentsNavActive = useMemo(function () {
|
|
282
|
-
|
|
319
|
+
if (computedCurrentOption === options.mySkills) return 'mySkills';
|
|
320
|
+
if (computedCurrentOption === options.myAgents) return 'myAgents';
|
|
321
|
+
if (isMaiakerAgentSelected) return 'maiaker';
|
|
322
|
+
return null;
|
|
283
323
|
}, [computedCurrentOption, isMaiakerAgentSelected]);
|
|
284
324
|
|
|
285
325
|
/* Reactivar con la fila “Mis agentes” en Sidebar: myAgentsCount prop
|
|
@@ -313,8 +353,8 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
313
353
|
var isFloating = layoutMode === 'floating';
|
|
314
354
|
var contentWrapperRef = useRef(null);
|
|
315
355
|
var _useState31 = useState(function () {
|
|
316
|
-
var
|
|
317
|
-
return (
|
|
356
|
+
var _savedSessionOnMountR5, _savedSessionOnMountR6;
|
|
357
|
+
return (_savedSessionOnMountR5 = (_savedSessionOnMountR6 = savedSessionOnMountRef.current) === null || _savedSessionOnMountR6 === void 0 ? void 0 : _savedSessionOnMountR6.dragPosition) !== null && _savedSessionOnMountR5 !== void 0 ? _savedSessionOnMountR5 : null;
|
|
318
358
|
}),
|
|
319
359
|
_useState32 = _slicedToArray(_useState31, 2),
|
|
320
360
|
dragPosition = _useState32[0],
|
|
@@ -336,7 +376,13 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
336
376
|
var _contentWrapper$getBo = contentWrapper.getBoundingClientRect(),
|
|
337
377
|
width = _contentWrapper$getBo.width,
|
|
338
378
|
height = _contentWrapper$getBo.height;
|
|
339
|
-
|
|
379
|
+
var offset = 16;
|
|
380
|
+
var maxX = Math.max(offset, window.innerWidth - width - offset);
|
|
381
|
+
var maxY = Math.max(offset, window.innerHeight - height - offset);
|
|
382
|
+
return {
|
|
383
|
+
x: Math.min(Math.max(x, offset), maxX),
|
|
384
|
+
y: Math.min(Math.max(y, offset), maxY)
|
|
385
|
+
};
|
|
340
386
|
}, []);
|
|
341
387
|
useLayoutEffect(function () {
|
|
342
388
|
if (layoutMode !== 'floating') {
|
|
@@ -392,15 +438,16 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
392
438
|
if (dragPosition) {
|
|
393
439
|
return dragPosition;
|
|
394
440
|
}
|
|
395
|
-
var
|
|
396
|
-
|
|
441
|
+
var pad = 16;
|
|
442
|
+
var x = typeof window !== 'undefined' ? window.innerWidth - getMaiaFloatingPanelWidthPx() - pad : pad;
|
|
443
|
+
return clampDragPosition(x, pad);
|
|
397
444
|
}, [layoutMode, dragPosition, clampDragPosition]);
|
|
398
445
|
var handleDragStart = useCallback(function (event) {
|
|
399
446
|
if (!isFloating || event.button !== 0) {
|
|
400
447
|
return;
|
|
401
448
|
}
|
|
402
449
|
var target = event.target;
|
|
403
|
-
if (
|
|
450
|
+
if (target.closest('button, a, input, textarea, select, [role="button"], [data-no-drag="true"]')) {
|
|
404
451
|
return;
|
|
405
452
|
}
|
|
406
453
|
var contentWrapper = contentWrapperRef.current;
|
|
@@ -452,24 +499,13 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
452
499
|
}, [handlers, sidebarHasError]);
|
|
453
500
|
var bannerFaqAutoSentRef = useRef(false);
|
|
454
501
|
useEffect(function () {
|
|
455
|
-
var
|
|
456
|
-
var
|
|
457
|
-
if (!(
|
|
458
|
-
return;
|
|
459
|
-
}
|
|
460
|
-
if (!isBannerFaqReadyToAutoSend({
|
|
461
|
-
faqTitle: bannerFaq.faqTitle,
|
|
462
|
-
alreadySent: bannerFaqAutoSentRef.current,
|
|
463
|
-
loading: loading,
|
|
464
|
-
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
465
|
-
section: section,
|
|
466
|
-
projectId: project === null || project === void 0 ? void 0 : project.id,
|
|
467
|
-
clientId: client === null || client === void 0 ? void 0 : client.id
|
|
468
|
-
})) {
|
|
502
|
+
var _bannerEntryFaq$faqTi;
|
|
503
|
+
var entityReady = section === 'project' ? Boolean(project === null || project === void 0 ? void 0 : project.id) : section === 'client' ? Boolean(client === null || client === void 0 ? void 0 : client.id) : true;
|
|
504
|
+
if (!(bannerEntryFaq !== null && bannerEntryFaq !== void 0 && (_bannerEntryFaq$faqTi = bannerEntryFaq.faqTitle) !== null && _bannerEntryFaq$faqTi !== void 0 && _bannerEntryFaq$faqTi.trim()) || bannerFaqAutoSentRef.current || loading || !(agent !== null && agent !== void 0 && agent.id) || !entityReady) {
|
|
469
505
|
return;
|
|
470
506
|
}
|
|
471
507
|
bannerFaqAutoSentRef.current = true;
|
|
472
|
-
startChat(
|
|
508
|
+
startChat(bannerEntryFaq.faqTitle, [], bannerEntryFaq.faqId, undefined, undefined, undefined, undefined, bannerEntryFaq.contextData);
|
|
473
509
|
}, [bannerEntryFaq === null || bannerEntryFaq === void 0 ? void 0 : bannerEntryFaq.faqId, bannerEntryFaq === null || bannerEntryFaq === void 0 ? void 0 : bannerEntryFaq.faqTitle, bannerEntryFaq === null || bannerEntryFaq === void 0 ? void 0 : bannerEntryFaq.contextData, loading, agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.entity, project === null || project === void 0 ? void 0 : project.id, client === null || client === void 0 ? void 0 : client.id, section, startChat]);
|
|
474
510
|
var goToChat = useCallback(function (chat) {
|
|
475
511
|
var sessionId = chat.sessionExternalId;
|
|
@@ -721,14 +757,14 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
721
757
|
setIsStreaming(streaming);
|
|
722
758
|
setIsWriting(writing);
|
|
723
759
|
}, []);
|
|
724
|
-
var handleSendMessage = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId
|
|
760
|
+
var handleSendMessage = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId) {
|
|
725
761
|
if (sidebarHasError) {
|
|
726
762
|
setSidebarHasError(false);
|
|
727
763
|
}
|
|
728
764
|
if (sendMessageFunction && computedCurrentOption === options.chat) {
|
|
729
|
-
sendMessageFunction(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId
|
|
765
|
+
sendMessageFunction(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId);
|
|
730
766
|
} else {
|
|
731
|
-
startChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId
|
|
767
|
+
startChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId);
|
|
732
768
|
}
|
|
733
769
|
}, [sendMessageFunction, startChat, computedCurrentOption, sidebarHasError]);
|
|
734
770
|
var handleGoHome = useCallback(function () {
|
|
@@ -1083,7 +1119,15 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1083
1119
|
// Cartel "continuar en un chat nuevo": se muestra al abrir una conversación de un clone legacy
|
|
1084
1120
|
// (agent_type === 'clone' con entity project/task/client). El input se reemplaza por el cartel.
|
|
1085
1121
|
var legacyContextSession = useMemo(function () {
|
|
1086
|
-
|
|
1122
|
+
if (computedCurrentOption !== options.chat) return null;
|
|
1123
|
+
if (!sessionMeta || sessionMeta.agentType !== 'clone') return null;
|
|
1124
|
+
var entity = sessionMeta.agentEntity;
|
|
1125
|
+
if (!entity || !LEGACY_CONTEXT_ENTITIES.includes(entity)) return null;
|
|
1126
|
+
var contextName = entity === 'task' ? sessionMeta.taskName : entity === 'project' ? sessionMeta.projectName : sessionMeta.clientName;
|
|
1127
|
+
return {
|
|
1128
|
+
entityType: entity,
|
|
1129
|
+
contextName: contextName || ''
|
|
1130
|
+
};
|
|
1087
1131
|
}, [computedCurrentOption, sessionMeta]);
|
|
1088
1132
|
|
|
1089
1133
|
// Marca el agente de la conversación legacy para que header, selector y avatar muestren el logo
|
|
@@ -1478,7 +1522,7 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1478
1522
|
handleOpenSkills: handleOpenSkills,
|
|
1479
1523
|
onOpenMaiakerCreator: handleGoToMaiaker,
|
|
1480
1524
|
isLegacyContextSession: !!legacyContextSession,
|
|
1481
|
-
initialOpen: (
|
|
1525
|
+
initialOpen: (_savedSessionOnMountR7 = (_savedSessionOnMountR8 = savedSessionOnMountRef.current) === null || _savedSessionOnMountR8 === void 0 ? void 0 : _savedSessionOnMountR8.sidebarOpen) !== null && _savedSessionOnMountR7 !== void 0 ? _savedSessionOnMountR7 : false,
|
|
1482
1526
|
onOpenChange: handleSidebarOpenChange
|
|
1483
1527
|
}) : null, /*#__PURE__*/_jsxs(SCCAIMContent, {
|
|
1484
1528
|
expanded: expanded,
|
|
@@ -1567,15 +1611,15 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1567
1611
|
layoutMode: layoutMode,
|
|
1568
1612
|
dragPosition: resolvedDragPosition,
|
|
1569
1613
|
elevated: section === 'task',
|
|
1570
|
-
$minimized:
|
|
1614
|
+
$minimized: isMinimized,
|
|
1571
1615
|
children: [/*#__PURE__*/_jsx(SCCAIMMinimizedHide, {
|
|
1572
|
-
$hidden:
|
|
1616
|
+
$hidden: isMinimized,
|
|
1573
1617
|
children: /*#__PURE__*/_jsx(FloatingPanelMotion, {
|
|
1574
1618
|
tilt: tiltMotion,
|
|
1575
1619
|
expanded: expanded,
|
|
1576
1620
|
children: contentWrapper
|
|
1577
1621
|
})
|
|
1578
|
-
}),
|
|
1622
|
+
}), isMinimized && /*#__PURE__*/_jsx(MaiaMinimizedPill, {
|
|
1579
1623
|
showNoveltyDot: showMinimizedNoveltyDot,
|
|
1580
1624
|
isStreaming: hasActiveStream,
|
|
1581
1625
|
onRestore: handleRestoreFromMinimized
|
|
@@ -1592,4 +1636,4 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1592
1636
|
}), userHasSkillsAccess && /*#__PURE__*/_jsx(AbmSkillGenerateModal, {}), /*#__PURE__*/_jsx(Snackbar, {})]
|
|
1593
1637
|
}), selector);
|
|
1594
1638
|
};
|
|
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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
|
|
1639
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9DaGF0QUkiLCJjYW5BY2Nlc3NUb1NraWxscyIsIk1BSUFFcnJvciIsInVzZU1haWFUYXNrUGFuZWxaSW5kZXgiLCJDaGF0QUlDb250ZW50IiwiYnVpbGRIYW5kbGVycyIsIm9wdGlvbnMiLCJTaWRlYmFyIiwidXNlR2V0QWdlbnRzIiwidXNlR2V0U2tpbGxzIiwidXNlR2xvYmFsQ29udGV4dCIsIkNoYXRBSU1vZGFsSGVhZGVyIiwiU25hY2tiYXIiLCJQcm9qZWN0U3VtbWFyeUNvbnRlbnQiLCJBYm1BZ2VudE1vZGFsIiwiQWJtU2tpbGxNb2RhbCIsIlNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5UIiwiQWJtU2tpbGxHZW5lcmF0ZU1vZGFsIiwiU0VDVElPTlMiLCJTQ0NBSU1Db250ZW50IiwiU0NDQUlNQ29udGVudFdyYXBwZXIiLCJTQ0NBSU1NaW5pbWl6ZWRIaWRlIiwiU0NDQUlNV3JhcHBlciIsIk1haWFNaW5pbWl6ZWRQaWxsIiwidXNlTWluaW1pemVkUGlsbE5vdmVsdHlEb3QiLCJnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgiLCJyZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSIsInNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZSIsImRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0IiwiZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IiwidXNlRmFxc1N0b3JlIiwiZ2V0Q2hhdHNTdG9yZVN0YXRlIiwidXNlQ2hhdHNTdG9yZSIsInJlYWRMYXN0QWN0aXZlQ2hhdElkIiwid3JpdGVMYXN0QWN0aXZlQ2hhdElkIiwiY2xlYXJNYWlhUGFuZWxTZXNzaW9uIiwiaXNWYWxpZE1haWFQYW5lbE9wdGlvbiIsInBhdGNoTWFpYVBhbmVsU2Vzc2lvbiIsInJlYWRNYWlhUGFuZWxTZXNzaW9uIiwid3JpdGVNYWlhUGFuZWxTZXNzaW9uIiwidXNlU2Vzc2lvbnNTdG9yZSIsImlzQWN0aXZlU2Vzc2lvblN0YXR1cyIsImZldGNoTWFpYSIsImZldGNoQWdlbnREZXRhaWwiLCJtYXBDT1JMYW5nIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5UIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMiLCJpc0dsb2JhbE1haWFTZWN0aW9uIiwic2VjdGlvbiIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJhZ2VudFR5cGUiLCJjdXJyZW50T3B0aW9uIiwiaG9tZU9wdGlvbiIsIklEX01PREFMX0NIQVRfQUdFTlQiLCJ2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSIsInVzZXIiLCJCb29sZWFuIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsIkNoYXRBSU1vZGFsIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSMiIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjMiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI0IiwiX3VzZXIkcGVybWlzc2lvbnMiLCJfdXNlciRwZXJtaXNzaW9uczIiLCJfdXNlciRwZXJtaXNzaW9uczMiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI3IiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSOCIsIl9hZ2VudHMkZGF0YSIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiaTE4biIsImFtcGxpdHVkRXZlbnQiLCJzYXZlZFNlc3Npb25Pbk1vdW50UmVmIiwiaWQiLCJzaG91bGRSZXN0b3JlRXhwYW5kZWQiLCJjdXJyZW50IiwiaXNFeHBhbmRlZCIsInBlbmRpbmdTZXNzaW9uUmVzdG9yZVJlZiIsInNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzUmVzdG9yaW5nU2Vzc2lvbiIsInNldElzUmVzdG9yaW5nU2Vzc2lvbiIsInNpZGViYXJPcGVuUmVmIiwic2lkZWJhck9wZW4iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzTWluaW1pemVkIiwic2V0SXNNaW5pbWl6ZWQiLCJzZXRDaGF0Vmlld1Zpc2libGUiLCJzdGF0ZSIsInVucmVhZENvdW50Iiwic2hvd01pbmltaXplZE5vdmVsdHlEb3QiLCJhY3RpdmVDaGF0SWQiLCJoYXNBY3RpdmVTdHJlYW0iLCJPYmplY3QiLCJ2YWx1ZXMiLCJtZXRhIiwic29tZSIsInN0YXR1cyIsImdvVG9DaGF0UmVmIiwiZ29Ib21lUmVmIiwiaGFuZGxlTWluaW1pemUiLCJhaUNoYXRNaW5pbWl6ZSIsImZvY3VzQ2hhdElucHV0Iiwic2V0VGltZW91dCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiX3VzZVN0YXRlNSIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTYiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJzZXRVc2VySW5pdGlhbE1lc3NhZ2UiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImluaXRpYWxDaGF0SWQiLCJzZXRJbml0aWFsQ2hhdElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJuZXdDaGF0S2V5Iiwic2V0TmV3Q2hhdEtleSIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlc3Npb25NZXRhIiwic2V0U2Vzc2lvbk1ldGEiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0Iiwic3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsInNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiaXNTdHJlYW1pbmciLCJzZXRJc1N0cmVhbWluZyIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJpc1dyaXRpbmciLCJzZXRJc1dyaXRpbmciLCJfdXNlU3RhdGUxOSIsIl91c2VTdGF0ZTIwIiwicmVmZXRjaENoYXRzIiwic2V0UmVmZXRjaENoYXRzIiwiX3VzZVN0YXRlMjEiLCJzYXZlZCIsImFnZW50c05hdkFjdGl2ZSIsIm15QWdlbnRzIiwibXlTa2lsbHMiLCJzYXZlZE9wdGlvbiIsImhvbWUiLCJfdXNlU3RhdGUyMiIsInNldEN1cnJlbnRPcHRpb24iLCJfdXNlU3RhdGUyMyIsIl91c2VTdGF0ZTI0IiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIl91c2VTdGF0ZTI1IiwiX3VzZVN0YXRlMjYiLCJkaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJwcmV2SGFzUGlubmVkQ29udGV4dFJlZiIsImhhbmRsZXJzIiwiX3VzZVN0YXRlMjciLCJfdXNlU3RhdGUyOCIsInNpZGViYXJIYXNFcnJvciIsInNldFNpZGViYXJIYXNFcnJvciIsImxhbmciLCJsYW5ndWFnZSIsImxvY2FsZSIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0QWdlbnQiLCJjbGVhckFnZW50IiwiYWdlbnQiLCJwcm9qZWN0IiwiY2xpZW50IiwidGFzayIsImNoaXBzUHJvamVjdCIsInRvZ2dsZVdlYlNlYXJjaCIsImlzV2ViU2VhcmNoQWN0aXZlIiwic2V0Q2hpcHNQcm9qZWN0Iiwic2V0Q2xpZW50Iiwic2V0UHJvamVjdCIsImJhbm5lckVudHJ5RmFxIiwic2V0VGFzayIsInRvb2x0aXBaSW5kZXgiLCJfdXNlR2V0QWdlbnRzIiwiaGFuZGxlR29Ib21lIiwiYWdlbnRzIiwibG9hZGluZyIsImxvYWRpbmdNb3JlIiwiYWdlbnRFcnJvciIsImVycm9yIiwiaGFuZGxlR2V0QWdlbnRzIiwibG9hZE1vcmVBZ2VudHMiLCJzZWFyY2hDdXN0b21BZ2VudHMiLCJzZWFyY2hMb2FkaW5nIiwiYWRkQWdlbnQiLCJyZW1vdmVBZ2VudCIsInVwZGF0ZUFnZW50IiwidXBkYXRlQWdlbnRGYXZvcml0ZSIsInNlbGVjdEZpcnN0QWdlbnQiLCJzb3J0QWdlbnRzTGlzdCIsImFnZW50c0RhdGFSZWYiLCJkYXRhIiwiX3VzZUdldFNraWxscyIsInNoYXJlZFNraWxscyIsImxvYWRpbmdTa2lsbHMiLCJoYW5kbGVHZXRTa2lsbHMiLCJhZGRTa2lsbCIsInVwZGF0ZVNraWxsSW5MaXN0IiwicmVtb3ZlU2tpbGwiLCJpc01BSUEiLCJ1c2VySGFzUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNyZWF0ZSIsImVkaXQiLCJ1c2VySGFzU2tpbGxzQWNjZXNzIiwiY29tcHV0ZWRDdXJyZW50T3B0aW9uIiwiaXNHbG9iYWxTcGVjaWFsaXN0IiwiZW50aXR5IiwiaXNQcm9qZWN0U3BlY2lhbGlzdCIsImlzQ2xpZW50U3BlY2lhbGlzdCIsImlzTWFpYWtlciIsInR5cGUiLCJjaGF0Iiwic2hvdWxkU2hvd1Byb2plY3RTZWxlY3RvciIsInNob3VsZFNob3dDbGllbnRTZWxlY3RvciIsInByb2plY3RTZWxlY3RvciIsImNsaWVudFNlbGVjdG9yIiwibmFtZSIsImlzTWFpYWtlckFnZW50U2VsZWN0ZWQiLCJzaWRlYmFyQWdlbnRzTmF2QWN0aXZlIiwiYWdlbnRzRmV0Y2hlZFJlZiIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImNvbmNhdCIsIl91c2VTdGF0ZTI5IiwiX3VzZVN0YXRlMzAiLCJsYXlvdXRNb2RlIiwic2V0TGF5b3V0TW9kZSIsImhhbmRsZUxheW91dE1vZGVDaGFuZ2UiLCJtb2RlIiwiZXhwYW5kZWQiLCJpc0Zsb2F0aW5nIiwiY29udGVudFdyYXBwZXJSZWYiLCJfdXNlU3RhdGUzMSIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjUiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI2IiwiZHJhZ1Bvc2l0aW9uIiwiX3VzZVN0YXRlMzIiLCJzZXREcmFnUG9zaXRpb24iLCJfdXNlRmxvYXRpbmdQYW5lbERyYWciLCJ0aWx0TW90aW9uIiwic3RhcnRQb2ludGVyVHJhY2tpbmciLCJzYW1wbGVQb2ludGVyTW92ZSIsImVuZFBvaW50ZXJUcmFja2luZyIsImRyYWdTdGF0ZVJlZiIsImNsYW1wRHJhZ1Bvc2l0aW9uIiwieCIsInkiLCJjb250ZW50V3JhcHBlciIsIl9jb250ZW50V3JhcHBlciRnZXRCbyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0Iiwib2Zmc2V0IiwibWF4WCIsIk1hdGgiLCJtYXgiLCJpbm5lcldpZHRoIiwibWF4WSIsImlubmVySGVpZ2h0IiwibWluIiwicHJldiIsInBhZCIsImhhbmRsZURyYWdFbmQiLCJldmVudCIsIl9kcmFnU3RhdGVSZWYkY3VycmVudCIsInBvaW50ZXJJZCIsImJvZHkiLCJzdHlsZSIsInVzZXJTZWxlY3QiLCJjdXJzb3IiLCJyZWN0IiwibGVmdCIsInRvcCIsImhhbmRsZURyYWdNb3ZlIiwiZHJhZ1N0YXRlIiwiY2xpZW50WCIsImNsaWVudFkiLCJuZXh0UG9zaXRpb24iLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJlc29sdmVkRHJhZ1Bvc2l0aW9uIiwiaGFuZGxlRHJhZ1N0YXJ0IiwiYnV0dG9uIiwidGFyZ2V0IiwiY2xvc2VzdCIsImluaXRpYWxQb3NpdGlvbiIsInBvaW50ZXJPZmZzZXRYIiwicG9pbnRlck9mZnNldFkiLCJjdXJyZW50VGFyZ2V0Iiwic2V0UG9pbnRlckNhcHR1cmUiLCJwcmV2ZW50RGVmYXVsdCIsImFpQ2hhdERyYWdnYWJsZSIsInN0YXJ0Q2hhdCIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwiX29iamVjdFNwcmVhZCIsImxlbmd0aCIsImJhbm5lckZhcUF1dG9TZW50UmVmIiwiX2Jhbm5lckVudHJ5RmFxJGZhcVRpIiwiZW50aXR5UmVhZHkiLCJmYXFUaXRsZSIsInRyaW0iLCJ1bmRlZmluZWQiLCJnb1RvQ2hhdCIsInNlc3Npb25JZCIsInNlc3Npb25FeHRlcm5hbElkIiwic2V0QWN0aXZlQ2hhdElkIiwiZGV0YWlsIiwic2VsZWN0ZWRBZ2VudCIsImZpbmQiLCJhZ2VudEl0ZW0iLCJhZ2VudElkIiwiaGFuZGxlU2lkZWJhck9wZW5DaGFuZ2UiLCJvcGVuIiwic3luY1BhbmVsU2Vzc2lvbiIsIl9hZ2VudCRpZCIsImhvc3RDb250ZXh0IiwiZW5zdXJlQWdlbnRzTG9hZGVkIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJsb2FkZWRBZ2VudHMiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJ0aW1lciIsImNsZWFyVGltZW91dCIsIm9uUGFnZUhpZGUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkIiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsImNoYXRzIiwibGFzdEFjdGl2ZUNoYXRJZCIsImZpcnN0VW5yZWFkIiwiaXNSZWFkIiwibGFzdEFjdGl2ZUNoYXQiLCJfZ29Ub0NoYXRSZWYkY3VycmVudCIsImNhbGwiLCJfZ29Ib21lUmVmJGN1cnJlbnQiLCJhaUNoYXRPcGVuIiwib3B0aW9uIiwidGhlbiIsIk51bWJlciIsImFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIiLCJfZGV0YWlsJHByb2plY3QyIiwiX2RldGFpbCRjbGllbnQyIiwiX2RldGFpbCR0YXNrMiIsImlzR2xvYmFsSGVhZGVyT3BlbiIsImdldFN0YXRlIiwiY2xlYXJGYXFzIiwiX2RldGFpbCRwcm9qZWN0IiwiX2RldGFpbCRjbGllbnQiLCJfZGV0YWlsJHRhc2siLCJuZXh0TGF5b3V0IiwiZmFxIiwiX2FnZW50JGlkMiIsInJlc29sdmVkQWdlbnRJZCIsImZpcnN0QWdlbnQiLCJoYW5kbGVTZW5kTWVzc2FnZVJlYWR5Iiwic2VuZE1lc3NhZ2UiLCJzdG9wR2VuZXJhdGlvbiIsInN0cmVhbWluZyIsIndyaXRpbmciLCJoYW5kbGVTZW5kTWVzc2FnZSIsImlzX2RlbGV0ZWQiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwiaGFzX25vdF9hY2Nlc3MiLCJwcm9qZWN0X2RlbGV0ZWQiLCJzdGFydE5ld0NoYXRGcm9tQ2F0YWxvZyIsIl9jYWxsZWUyIiwiZnJvbU15QWdlbnRzIiwiZnJvbU15U2tpbGxzIiwiYWdlbnRzTGlzdCIsIl90IiwiX2NvbnRleHQyIiwiaGFuZGxlU3RhcnROZXdDaGF0IiwiZnJvbU1haWFrZXJIb21lIiwiaGFuZGxlUmVzZXRDaGF0IiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJoYW5kbGVCYWNrIiwidG8iLCJhaUNoYXRCYWNrIiwicGlubmVkIiwicHJvamVjdElkIiwid2FzUGlubmVkIiwib25NZXJnZUNyZWF0ZWRBZ2VudCIsImV2dCIsIl9yZWY0IiwibmV4dEFnZW50IiwibmF2aWdhdGVIb21lIiwib25TeW5jRWRpdGVkQWdlbnQiLCJfcmVmNSIsIm9wZW5DaGF0VmlldyIsIm9wZW5Ib21lIiwiY2xpZW50SWQiLCJvcGVuRnJvbUhvc3QiLCJfcmVmNiIsIm9wZW5OZXdDaGF0V2l0aEFnZW50IiwiX2RldGFpbCRwcm9qZWN0MyIsIl9kZXRhaWwkY2xpZW50MyIsIl9yZWY3IiwiYXBwbHlTa2lsbFVzZUZsb3ciLCJfcmVmOCIsIl9jYWxsZWU0Iiwic2tpbGwiLCJ1c2VGaXJzdEFnZW50IiwiX2NvbnRleHQ0IiwiX3giLCJfeDIiLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlIiwiX3JlZjkiLCJfcmVmOSR1c2VGaXJzdEFnZW50Iiwib25TZXNzaW9uTWV0YSIsIl9yZWYwIiwibGVnYWN5Q29udGV4dFNlc3Npb24iLCJhZ2VudEVudGl0eSIsImluY2x1ZGVzIiwiY29udGV4dE5hbWUiLCJ0YXNrTmFtZSIsInByb2plY3ROYW1lIiwiY2xpZW50TmFtZSIsImVudGl0eVR5cGUiLCJpc19sZWdhY3lfY29udGV4dCIsImhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCIsInBJZCIsInBOYW1lIiwiY0lkIiwiY05hbWUiLCJ0SWQiLCJ0YXNrSWQiLCJ0TmFtZSIsIm9yY2hlc3RyYXRvciIsImEiLCJTdHJpbmciLCJzaG93TmV3Q2hhdCIsImlzTXlBZ2VudHNTZWN0aW9uIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJoYXNQaW5uZWRDb250ZXh0IiwiaXNDaGF0VmlldyIsImlzSG9tZVN0ZXAyIiwiaXNIZWFkZXJIb21lU3RlcDIiLCJpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiIsInNob3dCYWNrQnV0dG9uIiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJoYW5kbGVPcGVuU2tpbGxzIiwiaGFuZGxlR29Ub01haWFrZXIiLCJfY2FsbGVlNiIsIm1haWFrZXJBZ2VudCIsInJlc3BvbnNlIiwiX3QyIiwiX2NvbnRleHQ2IiwicGF0aCIsIm1ldGhvZCIsImpzb24iLCJsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUiLCJfcmVmMTEiLCJfY2FsbGVlNyIsInNuYXBzaG90IiwiYWdlbnRUb1NlbGVjdCIsIl90MyIsIl9jb250ZXh0NyIsIl94MyIsImFwcGx5U2Vzc2lvblJlc3RvcmUiLCJfcmVmMTIiLCJfY2FsbGVlOCIsIl9zbmFwc2hvdCRob3N0Q29udGV4dCIsIl9jb250ZXh0OCIsIl94NCIsInJ1blJlc3RvcmUiLCJfcmVmMTMiLCJfY2FsbGVlOSIsIl9jb250ZXh0OSIsImZpbmlzaCIsImhhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzIiwiaXNNYWlha2VyQ3JlYXRvckhvbWUiLCJtb2RhbFBhbmVsIiwiY2hpbGRyZW4iLCJvbkdvVG9DaGF0Iiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwib25PcGVuTWFpYWtlckNyZWF0b3IiLCJpc0xlZ2FjeUNvbnRleHRTZXNzaW9uIiwiaW5pdGlhbE9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJmbG9hdGluZyIsIm9uTGF5b3V0TW9kZUNoYW5nZSIsImRyYWdnYWJsZSIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnTW92ZSIsIm9uRHJhZ0VuZCIsImhhc01vcmUiLCJoYXNfbW9yZSIsIm9uQWdlbnRVcGRhdGUiLCJpc01haWFrZXJTZWN0aW9uIiwib25CYWNrIiwicmVmcyIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsImxvYWRpbmdBZ2VudHMiLCJvbkRlbGV0ZUFnZW50Iiwib25GYXZvcml0ZUFnZW50VXBkYXRlIiwiaGFzTW9yZUFnZW50cyIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJvbkRlbGV0ZVNraWxsIiwib25TZWFyY2hBZ2VudHMiLCJzZWFyY2hMb2FkaW5nQWdlbnRzIiwib25SZXN0YXJ0U3VtbWFyeSIsImhhbmRsZVN0b3BHZW5lcmF0aW9uIiwiY2hhdElkIiwib25Db250aW51ZUluTmV3Q2hhdCIsInJlZiIsImNyZWF0ZVBvcnRhbCIsImVsZXZhdGVkIiwiJG1pbmltaXplZCIsIiRoaWRkZW4iLCJ0aWx0Iiwic2hvd05vdmVsdHlEb3QiLCJvblJlc3RvcmUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvQ2hhdEFJTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtbm8tdXNlbGVzcy1mcmFnbWVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbiAgdXNlUmVmLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgUG9pbnRlckV2ZW50IGFzIFJlYWN0UG9pbnRlckV2ZW50LFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgY2FuQWNjZXNzVG9DaGF0QUksIGNhbkFjY2Vzc1RvU2tpbGxzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Blcm1pc3Npb25zJ1xuaW1wb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQUVycm9yJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5cbmltcG9ydCB7IENoYXRBSUNvbnRlbnQgfSBmcm9tICcuLi9DaGF0QUlDb250ZW50J1xuaW1wb3J0IHsgYnVpbGRIYW5kbGVycywgb3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJy4uL1NpZGViYXInXG5pbXBvcnQgeyB1c2VHZXRBZ2VudHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMnXG5pbXBvcnQgeyB1c2VHZXRTa2lsbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9nZXRTa2lsbHMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0LCB0eXBlIFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgQ2hhdEFJTW9kYWxIZWFkZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXInXG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9TbmFja0Jhci9TbmFja2JhcidcbmltcG9ydCB7IFByb2plY3RTdW1tYXJ5Q29udGVudCB9IGZyb20gJy4uL1Byb2plY3RTdW1tYXJ5Q29udGVudCdcbmltcG9ydCB7IEFibUFnZW50TW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxNb2RhbCwgU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxHZW5lcmF0ZU1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsR2VuZXJhdGVNb2RhbC9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBTQ0NBSU1Db250ZW50LCBTQ0NBSU1Db250ZW50V3JhcHBlciwgU0NDQUlNTWluaW1pemVkSGlkZSwgU0NDQUlNV3JhcHBlciB9IGZyb20gJy4vQ2hhdEFJTW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgTWFpYU1pbmltaXplZFBpbGwgfSBmcm9tICcuL2NvbXBvbmVudHMvTWFpYU1pbmltaXplZFBpbGwnXG5pbXBvcnQgeyB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90J1xuaW1wb3J0IHtcbiAgZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4LFxuICBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSxcbiAgcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUsXG4gIHNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZSxcbn0gZnJvbSAnLi9sYXlvdXQnXG5pbXBvcnQgeyBkaXNwYXRjaFNraWxsTWVudGlvbkluc2VydCwgZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UgfSBmcm9tICcuL0NoYXRBSU1vZGFsLmhlbHBlcnMnXG5pbXBvcnQgeyBGbG9hdGluZ1BhbmVsTW90aW9uLCB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQgfSBmcm9tICcuL2Zsb2F0aW5nUGFuZWxNb3Rpb24nXG5pbXBvcnQgeyBDaGF0QWlNb2RhbEZvb3RlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEZvb3RlcidcbmltcG9ydCB7IHZhbGlkYXRlSXNNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvdmFsaWRhdGVJc01haWEnXG5pbXBvcnQgeyBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2xpZW50J1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Rhc2snXG5pbXBvcnQgeyB1c2VGYXFzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VGYXFzU3RvcmUnXG5pbXBvcnQgeyBnZXRDaGF0c1N0b3JlU3RhdGUsIHVzZUNoYXRzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VDaGF0c1N0b3JlJ1xuaW1wb3J0IHR5cGUgeyBDaGF0TGlzdEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9jaGF0c1N0b3JlLnR5cGVzJ1xuaW1wb3J0IHsgcmVhZExhc3RBY3RpdmVDaGF0SWQsIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFMYXN0Q2hhdFBlcnNpc3RlbmNlJ1xuaW1wb3J0IHtcbiAgY2xlYXJNYWlhUGFuZWxTZXNzaW9uLFxuICBpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uLFxuICBwYXRjaE1haWFQYW5lbFNlc3Npb24sXG4gIHJlYWRNYWlhUGFuZWxTZXNzaW9uLFxuICB0eXBlIE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCxcbiAgd3JpdGVNYWlhUGFuZWxTZXNzaW9uLFxufSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhUGFuZWxTZXNzaW9uUGVyc2lzdGVuY2UnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IGlzQWN0aXZlU2Vzc2lvblN0YXR1cyB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25zLnR5cGVzJ1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgdHlwZSBNYWlhSG9zdE9wZW5EZXRhaWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhSG9zdE9wZW4nXG5cbi8qKiBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcyBhbCBjYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24pLiAqL1xudHlwZSBTZXNzaW9uTWV0YSA9IHtcbiAgY2hhdElkOiBzdHJpbmdcbiAgYWdlbnRUeXBlPzogc3RyaW5nXG4gIGFnZW50RW50aXR5Pzogc3RyaW5nXG4gIHByb2plY3RJZD86IG51bWJlclxuICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICBjbGllbnRJZD86IG51bWJlclxuICBjbGllbnROYW1lPzogc3RyaW5nXG4gIHRhc2tJZD86IG51bWJlclxuICB0YXNrTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUyA9IFsncHJvamVjdCcsICd0YXNrJywgJ2NsaWVudCddIGFzIGNvbnN0XG50eXBlIExlZ2FjeUNvbnRleHRFbnRpdHkgPSAodHlwZW9mIExFR0FDWV9DT05URVhUX0VOVElUSUVTKVtudW1iZXJdXG5cbnR5cGUgQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0gJ2dsb2JhbF9jb250ZXh0X2hvbWUnIHwgJ3Rhc2tfaG9tZScgfCAncGxhbm5lcl9ob21lJyB8ICdwcm9qZWN0X2hvbWUnIHwgJ2NsaWVudF9ob21lJ1xuXG4vKiogSG9tZSBnbG9iYWwgZGVsIG9yY2hlc3RyYXRvciAoc29sbyBoZWFkZXIpLiBQbGFubmVyIGVzIGhvbWUgZGUgRlVBcywgbm8gZGUgY29udGV4dG9zLiAqL1xuY29uc3QgaXNHbG9iYWxNYWlhU2VjdGlvbiA9IChzZWN0aW9uOiBTZWN0aW9uKTogYm9vbGVhbiA9PiBzZWN0aW9uID09PSAnaGVhZGVyJ1xuXG5jb25zdCByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0gKFxuICBzZWN0aW9uOiBTZWN0aW9uLFxuICBhZ2VudFR5cGU6IEFnZW50Wyd0eXBlJ10gfCB1bmRlZmluZWQsXG4gIGN1cnJlbnRPcHRpb246IHN0cmluZyxcbiAgaG9tZU9wdGlvbjogc3RyaW5nXG4pOiBBaUNoYXRCYWNrRGVzdGluYXRpb24gPT4ge1xuICBpZiAoaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBhZ2VudFR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IGhvbWVPcHRpb24pIHtcbiAgICByZXR1cm4gJ2dsb2JhbF9jb250ZXh0X2hvbWUnXG4gIH1cbiAgaWYgKHNlY3Rpb24gPT09ICd0YXNrJykgcmV0dXJuICd0YXNrX2hvbWUnXG4gIGlmIChzZWN0aW9uID09PSAncGxhbm5lcicpIHJldHVybiAncGxhbm5lcl9ob21lJ1xuICBpZiAoc2VjdGlvbiA9PT0gJ3Byb2plY3QnKSByZXR1cm4gJ3Byb2plY3RfaG9tZSdcbiAgaWYgKHNlY3Rpb24gPT09ICdjbGllbnQnKSByZXR1cm4gJ2NsaWVudF9ob21lJ1xuICByZXR1cm4gJ2dsb2JhbF9jb250ZXh0X2hvbWUnXG59XG5cbmV4cG9ydCBjb25zdCBJRF9NT0RBTF9DSEFUX0FHRU5UID0gJ21vZGFscy1wb3J0YWwtbWFpYS1jaGF0LWFnZW50J1xuXG5jb25zdCB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSA9IChzZWN0aW9uOiBTZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCwgdXNlcjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlVXNlcj4pID0+IHtcbiAgaWYgKCFzZWN0aW9uIHx8ICFjYW5BY2Nlc3NUb0NoYXRBSSh1c2VyKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gUGxhbm5lciB5IHRhc2sgYWJyZW4gc2llbXByZSBlbCBjaGF0IChob21lIGRlIEZVQXMpLCBudW5jYSByZXN1bWVuIGRlIHByb3llY3Rvcy5cbiAgaWYgKHNlY3Rpb24gPT09ICdwbGFubmVyJyB8fCBzZWN0aW9uID09PSAndGFzaycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHNlY3Rpb24gPT09ICdoZWFkZXInKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyB8fCB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUylcbiAgfVxuXG4gIHJldHVybiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MpXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNb2RhbCA9ICgpID0+IHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudF0pXG4gIGNvbnN0IGFtcGxpdHVkRXZlbnQgPSB1c2VFdmVudCgpXG5cbiAgY29uc3Qgc2F2ZWRTZXNzaW9uT25Nb3VudFJlZiA9IHVzZVJlZjxNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QgfCBudWxsPihyZWFkTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkKSlcbiAgY29uc3Qgc2hvdWxkUmVzdG9yZUV4cGFuZGVkID0gc2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5pc0V4cGFuZGVkID8/IGZhbHNlXG4gIGNvbnN0IHBlbmRpbmdTZXNzaW9uUmVzdG9yZVJlZiA9IHVzZVJlZjxNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QgfCBudWxsPihcbiAgICBzaG91bGRSZXN0b3JlRXhwYW5kZWQgPyBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQgOiBudWxsXG4gIClcbiAgY29uc3Qgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbaXNSZXN0b3JpbmdTZXNzaW9uLCBzZXRJc1Jlc3RvcmluZ1Nlc3Npb25dID0gdXNlU3RhdGUoKCkgPT4gcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgIT0gbnVsbClcbiAgY29uc3Qgc2lkZWJhck9wZW5SZWYgPSB1c2VSZWYoc2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5zaWRlYmFyT3BlbiA/PyBmYWxzZSlcblxuICAvLyBUcmFzIG5hdmVnYXIgZW4gZWwgaG9zdCAoZnVsbCBwYWdlIHJlbG9hZCksIHJlc3RhdXJhbW9zIGVsIHBhbmVsIHNpIGVzdGFiYSBhYmllcnRvLlxuICBjb25zdCBbaXNNaW5pbWl6ZWQsIHNldElzTWluaW1pemVkXSA9IHVzZVN0YXRlKCgpID0+ICFzaG91bGRSZXN0b3JlRXhwYW5kZWQpXG4gIGNvbnN0IHNldENoYXRWaWV3VmlzaWJsZSA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0Q2hhdFZpZXdWaXNpYmxlKVxuICBjb25zdCB1bnJlYWRDb3VudCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUudW5yZWFkQ291bnQpXG4gIGNvbnN0IHNob3dNaW5pbWl6ZWROb3ZlbHR5RG90ID0gdXNlTWluaW1pemVkUGlsbE5vdmVsdHlEb3QoaXNNaW5pbWl6ZWQsIHVucmVhZENvdW50KVxuICBjb25zdCBhY3RpdmVDaGF0SWQgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLmFjdGl2ZUNoYXRJZClcbiAgLy8gTG9zIFwiLi4uXCIgZGVsIHBpbGwgc2FsZW4gZGVsIG1vdG9yLCBubyBkZSBpc1N0cmVhbWluZy9pc1dyaXRpbmc6IGVzb3MgcmVmbGVqYW5cbiAgLy8gbGEgc2VzacOzbiBhY3RpdmEgeSBxdWVkYW4gc3RhbGUgY3VhbmRvIHVuYSByZXNwdWVzdGEgdGVybWluYSBlbiBiYWNrZ3JvdW5kLlxuICBjb25zdCBoYXNBY3RpdmVTdHJlYW0gPSB1c2VTZXNzaW9uc1N0b3JlKHN0YXRlID0+XG4gICAgT2JqZWN0LnZhbHVlcyhzdGF0ZS5tZXRhKS5zb21lKG1ldGEgPT4gaXNBY3RpdmVTZXNzaW9uU3RhdHVzKG1ldGEuc3RhdHVzKSlcbiAgKVxuXG4gIC8qKiBnb1RvQ2hhdCAvIGhhbmRsZUdvSG9tZSBzZSBkZWZpbmVuIG3DoXMgYWJham87IGxvcyByZWZzIGV2aXRhbiBkZXBlbmRlciBkZWwgb3JkZW4gZGUgZGVjbGFyYWNpw7NuLiAqL1xuICBjb25zdCBnb1RvQ2hhdFJlZiA9IHVzZVJlZjwoKGNoYXQ6IENoYXRMaXN0SXRlbSkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBnb0hvbWVSZWYgPSB1c2VSZWY8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcblxuICAvLyBNb250YSBjZXJyYWRhIHNhbHZvIHJlc3RhdXJhY2nDs24gZGUgc2VzacOzbjogc2kgZWwgcGFuZWwgbm8gZXN0w6EgdmlzaWJsZSwgbGFzIHJlc3B1ZXN0YXNcbiAgLy8gbnVldmFzIHF1ZWRhbiBjb21vIG5vIGxlw61kYXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCkge1xuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKGZhbHNlKVxuICAgIH1cbiAgfSwgW3NldENoYXRWaWV3VmlzaWJsZV0pXG5cbiAgLy8gUGVyc2lzdGltb3MgbGEgY29udmVyc2FjacOzbiBhYmllcnRhIHBhcmEgcG9kZXIgdm9sdmVyIGEgZWxsYSBkZXNkZSBlbCBwaWxsIGRlc3B1w6lzXG4gIC8vIGRlIG5hdmVnYXIgbyByZWZyZXNjYXIuIEVsIHRha2VvdmVyIGRlc2RlIHVuIGhvc3QgbGEgbGltcGlhICh2YSBhbCBIb21lKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYWN0aXZlQ2hhdElkKSB7XG4gICAgICB3cml0ZUxhc3RBY3RpdmVDaGF0SWQodXNlci5pZCwgYWN0aXZlQ2hhdElkKVxuICAgIH1cbiAgfSwgW2FjdGl2ZUNoYXRJZCwgdXNlci5pZF0pXG5cbiAgY29uc3QgaGFuZGxlTWluaW1pemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0TWluaW1pemUpXG4gICAgc2V0SXNNaW5pbWl6ZWQodHJ1ZSlcbiAgICBzZXRDaGF0Vmlld1Zpc2libGUoZmFsc2UpXG4gICAgd3JpdGVNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgaXNFeHBhbmRlZDogZmFsc2UgfSlcbiAgfSwgW2FtcGxpdHVkRXZlbnQsIHNldENoYXRWaWV3VmlzaWJsZSwgdXNlci5pZF0pXG5cbiAgY29uc3QgZm9jdXNDaGF0SW5wdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ21haWEtaW5wdXQtcmVmb2N1cycpKVxuICAgIH0sIDEwMClcbiAgfSwgW10pXG5cbiAgY29uc3QgW3VzZXJJbml0aWFsTWVzc2FnZSwgc2V0VXNlckluaXRpYWxNZXNzYWdlXSA9IHVzZVN0YXRlPHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIH0+KHtcbiAgICBtZXNzYWdlOiAnJyxcbiAgICBhdHRhY2htZW50czogW10sXG4gIH0pXG4gIGNvbnN0IFtpbml0aWFsQ2hhdElkLCBzZXRJbml0aWFsQ2hhdElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtuZXdDaGF0S2V5LCBzZXROZXdDaGF0S2V5XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtzZXNzaW9uTWV0YSwgc2V0U2Vzc2lvbk1ldGFdID0gdXNlU3RhdGU8U2Vzc2lvbk1ldGEgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbl0gPSB1c2VTdGF0ZTxcbiAgICB8ICgoXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICAgICkgPT4gdm9pZClcbiAgICB8IG51bGxcbiAgPihudWxsKVxuICBjb25zdCBbc3RvcEdlbmVyYXRpb25GdW5jdGlvbiwgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbl0gPSB1c2VTdGF0ZTwoKCkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNTdHJlYW1pbmcsIHNldElzU3RyZWFtaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNXcml0aW5nLCBzZXRJc1dyaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgW3JlZmV0Y2hDaGF0cywgc2V0UmVmZXRjaENoYXRzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudE9wdGlvbiwgc2V0Q3VycmVudE9wdGlvbl0gPSB1c2VTdGF0ZTxvcHRpb25zPigoKSA9PiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnRcbiAgICBpZiAoc2F2ZWQ/LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215QWdlbnRzJykgcmV0dXJuIG9wdGlvbnMubXlBZ2VudHNcbiAgICBpZiAoc2F2ZWQ/LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215U2tpbGxzJyAmJiBjYW5BY2Nlc3NUb1NraWxscyh1c2VyKSkgcmV0dXJuIG9wdGlvbnMubXlTa2lsbHNcbiAgICBjb25zdCBzYXZlZE9wdGlvbiA9IHNhdmVkPy5jdXJyZW50T3B0aW9uXG4gICAgcmV0dXJuIHNhdmVkT3B0aW9uICYmIGlzVmFsaWRNYWlhUGFuZWxPcHRpb24oc2F2ZWRPcHRpb24pID8gKHNhdmVkT3B0aW9uIGFzIG9wdGlvbnMpIDogb3B0aW9ucy5ob21lXG4gIH0pXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIEVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIGRlbCBvcmNoZXN0cmF0b3IgKGxvIGxpbXBpw7MgeSBwYXPDsyBwb3JcbiAgLy8gZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEhhYmlsaXRhIGVsIGJvdMOzbiBcInZvbHZlclwiIGVuIGVsIGhvbWUgcGFzbyAyIGRlIGVzYXNcbiAgLy8gc2VjY2lvbmVzLiBTZSByZXNldGVhIGFsIGNlcnJhci9yZWFicmlyIGVsIG1vZGFsIChlbCBjb21wb25lbnRlIHNlIGRlc21vbnRhKS5cbiAgY29uc3QgW2RpZFJlc2V0Q29udGV4dEluU2VjdGlvbiwgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBwcmV2SGFzUGlubmVkQ29udGV4dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBsYW5nID0gaTE4bi5sYW5ndWFnZSA9PT0gJ2JyJyA/ICdwdC1icicgOiBpMThuLmxhbmd1YWdlXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBjbGVhckFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IGFnZW50c0RhdGFSZWYgPSB1c2VSZWYoYWdlbnRzLmRhdGEpXG4gIGFnZW50c0RhdGFSZWYuY3VycmVudCA9IGFnZW50cy5kYXRhXG5cbiAgY29uc3Qge1xuICAgIG15U2tpbGxzLFxuICAgIHNoYXJlZFNraWxscyxcbiAgICBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLFxuICAgIGhhbmRsZUdldFNraWxscyxcbiAgICBhZGRTa2lsbCxcbiAgICB1cGRhdGVTa2lsbEluTGlzdCxcbiAgICByZW1vdmVTa2lsbCxcbiAgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID1cbiAgICAodXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uY3JlYXRlIHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5lZGl0IHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5kZWxldGUpICYmXG4gICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICBjb25zdCB1c2VySGFzU2tpbGxzQWNjZXNzID0gY2FuQWNjZXNzVG9Ta2lsbHModXNlcilcblxuICBjb25zdCBjb21wdXRlZEN1cnJlbnRPcHRpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpc0dsb2JhbFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCdcbiAgICBjb25zdCBpc1Byb2plY3RTcGVjaWFsaXN0ID0gaXNNQUlBICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PSBudWxsKVxuICAgIGNvbnN0IGlzQ2xpZW50U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50J1xuICAgIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGFnZW50KVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMgJiYgY2FuQWNjZXNzVG9Ta2lsbHModXNlcikpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15U2tpbGxzXG4gICAgfVxuXG4gICAgLy8gRWwgb3JjaGVzdHJhdG9yIChNQUlBKSBtdWVzdHJhIHN1IGhvbWUgY29uIEZBUXMvYWNjaW9uZXMgZnJlY3VlbnRlczsgZWwgcmVzdG8gZGVcbiAgICAvLyBsb3MgZ2xvYmFsIHNwZWNpYWxpc3RzIChjbG9uZXMgZ2xvYmFsZXMgbm8tbWFpYWtlcikgc2lndWVuIHllbmRvIGRpcmVjdG8gYWwgY2hhdC5cbiAgICBpZiAoaXNHbG9iYWxTcGVjaWFsaXN0ICYmICFpc01haWFrZXIgJiYgYWdlbnQ/LnR5cGUgIT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2hhdFxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNQcm9qZWN0U3BlY2lhbGlzdCAmJiAhcHJvamVjdFxuICAgIGNvbnN0IHNob3VsZFNob3dDbGllbnRTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc0NsaWVudFNwZWNpYWxpc3QgJiYgIWNsaWVudFxuXG4gICAgaWYgKHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnByb2plY3RTZWxlY3RvclxuICAgIH1cbiAgICBpZiAoc2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jbGllbnRTZWxlY3RvclxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudE9wdGlvblxuICB9LCBbY3VycmVudE9wdGlvbiwgcHJvamVjdCwgY2xpZW50LCBpc01BSUEsIGFnZW50Py5lbnRpdHksIGFnZW50Py5uYW1lLCBhZ2VudD8udHlwZSwgdXNlcl0pXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKCgpOiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgJ215U2tpbGxzJyB8IG51bGwgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMpIHJldHVybiAnbXlTa2lsbHMnXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cykgcmV0dXJuICdteUFnZW50cydcbiAgICBpZiAoaXNNYWlha2VyQWdlbnRTZWxlY3RlZCkgcmV0dXJuICdtYWlha2VyJ1xuICAgIHJldHVybiBudWxsXG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRdKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihcbiAgICAoKSA9PiBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LmRyYWdQb3NpdGlvbiA/PyBudWxsXG4gIClcbiAgY29uc3QgeyB0aWx0TW90aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZywgc2FtcGxlUG9pbnRlck1vdmUsIGVuZFBvaW50ZXJUcmFja2luZyB9ID1cbiAgICB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQoaXNGbG9hdGluZylcbiAgY29uc3QgZHJhZ1N0YXRlUmVmID0gdXNlUmVmPHtcbiAgICBwb2ludGVySWQ6IG51bWJlclxuICAgIG9mZnNldFg6IG51bWJlclxuICAgIG9mZnNldFk6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBjbGFtcERyYWdQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGVudFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBvZmZzZXQgPSAxNlxuICAgIGNvbnN0IG1heFggPSBNYXRoLm1heChvZmZzZXQsIHdpbmRvdy5pbm5lcldpZHRoIC0gd2lkdGggLSBvZmZzZXQpXG4gICAgY29uc3QgbWF4WSA9IE1hdGgubWF4KG9mZnNldCwgd2luZG93LmlubmVySGVpZ2h0IC0gaGVpZ2h0IC0gb2Zmc2V0KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IE1hdGgubWluKE1hdGgubWF4KHgsIG9mZnNldCksIG1heFgpLFxuICAgICAgeTogTWF0aC5taW4oTWF0aC5tYXgoeSwgb2Zmc2V0KSwgbWF4WSksXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsYXlvdXRNb2RlICE9PSAnZmxvYXRpbmcnKSB7XG4gICAgICBzZXREcmFnUG9zaXRpb24obnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldERyYWdQb3NpdGlvbihwcmV2ID0+IHtcbiAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHJldHVybiBjbGFtcERyYWdQb3NpdGlvbihwcmV2LngsIHByZXYueSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZCA9IDE2XG4gICAgICBjb25zdCB4ID0gd2luZG93LmlubmVyV2lkdGggLSBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgoKSAtIHBhZFxuICAgICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHgsIHBhZClcbiAgICB9KVxuICB9LCBbbGF5b3V0TW9kZSwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgZW5kUG9pbnRlclRyYWNraW5nKClcbiAgICAgIGlmIChkcmFnU3RhdGVSZWYuY3VycmVudD8ucG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJydcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJydcblxuICAgICAgaWYgKGxheW91dE1vZGUgPT09ICdmbG9hdGluZycgJiYgY29udGVudFdyYXBwZXJSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBkcmFnUG9zaXRpb246IHsgeDogcmVjdC5sZWZ0LCB5OiByZWN0LnRvcCB9IH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbZW5kUG9pbnRlclRyYWNraW5nLCBsYXlvdXRNb2RlLCB1c2VyLmlkXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRHJhZ01vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgZHJhZ1N0YXRlID0gZHJhZ1N0YXRlUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZHJhZ1N0YXRlIHx8IGRyYWdTdGF0ZS5wb2ludGVySWQgIT09IGV2ZW50LnBvaW50ZXJJZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2FtcGxlUG9pbnRlck1vdmUoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcblxuICAgICAgY29uc3QgbmV4dFBvc2l0aW9uID0gY2xhbXBEcmFnUG9zaXRpb24oZXZlbnQuY2xpZW50WCAtIGRyYWdTdGF0ZS5vZmZzZXRYLCBldmVudC5jbGllbnRZIC0gZHJhZ1N0YXRlLm9mZnNldFkpXG5cbiAgICAgIHNldERyYWdQb3NpdGlvbihwcmV2ID0+IHtcbiAgICAgICAgaWYgKHByZXYgJiYgcHJldi54ID09PSBuZXh0UG9zaXRpb24ueCAmJiBwcmV2LnkgPT09IG5leHRQb3NpdGlvbi55KSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dFBvc2l0aW9uXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBzYW1wbGVQb2ludGVyTW92ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxheW91dE1vZGUgIT09ICdmbG9hdGluZycpIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgaWYgKGRyYWdQb3NpdGlvbikge1xuICAgICAgcmV0dXJuIGRyYWdQb3NpdGlvblxuICAgIH1cbiAgICBjb25zdCBwYWQgPSAxNlxuICAgIGNvbnN0IHggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIC0gZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4KCkgLSBwYWQgOiBwYWRcbiAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24oeCwgcGFkKVxuICB9LCBbbGF5b3V0TW9kZSwgZHJhZ1Bvc2l0aW9uLCBjbGFtcERyYWdQb3NpdGlvbl0pXG5cbiAgY29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmICghaXNGbG9hdGluZyB8fCBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCdidXR0b24sIGEsIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBbcm9sZT1cImJ1dHRvblwiXSwgW2RhdGEtbm8tZHJhZz1cInRydWVcIl0nKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID8/IGNsYW1wRHJhZ1Bvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApXG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBpbml0aWFsUG9zaXRpb24ueFxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gaW5pdGlhbFBvc2l0aW9uLnlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKGluaXRpYWxQb3NpdGlvbilcbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0ge1xuICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgb2Zmc2V0WDogcG9pbnRlck9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHBvaW50ZXJPZmZzZXRZLFxuICAgICAgfVxuXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdERyYWdnYWJsZSlcbiAgICAgIHN0YXJ0UG9pbnRlclRyYWNraW5nKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIGlzRmxvYXRpbmcsIHJlc29sdmVkRHJhZ1Bvc2l0aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2Uoe1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8ICcnLFxuICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMgfHwgW10sXG4gICAgICAgIC4uLihmYXFJZCA/IHsgZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4obWVudGlvbnMgJiYgbWVudGlvbnMubGVuZ3RoID4gMCA/IHsgbWVudGlvbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGZ1YUlkID8geyBmdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4oc2NJZCA/IHsgc2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGJhbm5lckZhcUF1dG9TZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZW50aXR5UmVhZHkgPSBzZWN0aW9uID09PSAncHJvamVjdCcgPyBCb29sZWFuKHByb2plY3Q/LmlkKSA6IHNlY3Rpb24gPT09ICdjbGllbnQnID8gQm9vbGVhbihjbGllbnQ/LmlkKSA6IHRydWVcblxuICAgIGlmICghYmFubmVyRW50cnlGYXE/LmZhcVRpdGxlPy50cmltKCkgfHwgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCB8fCBsb2FkaW5nIHx8ICFhZ2VudD8uaWQgfHwgIWVudGl0eVJlYWR5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBiYW5uZXJGYXFBdXRvU2VudFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHN0YXJ0Q2hhdChcbiAgICAgIGJhbm5lckVudHJ5RmFxLmZhcVRpdGxlLFxuICAgICAgW10sXG4gICAgICBiYW5uZXJFbnRyeUZhcS5mYXFJZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGJhbm5lckVudHJ5RmFxLmNvbnRleHREYXRhXG4gICAgKVxuICB9LCBbXG4gICAgYmFubmVyRW50cnlGYXE/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/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQsXG4gICAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICAgIHN0cmVhbWluZzogYm9vbGVhbixcbiAgICAgIHdyaXRpbmc6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIHNldFNlbmRNZXNzYWdlRnVuY3Rpb24oKCkgPT4gc2VuZE1lc3NhZ2UpXG4gICAgICBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uKCgpID0+IHN0b3BHZW5lcmF0aW9uKVxuICAgICAgc2V0SXNTdHJlYW1pbmcoc3RyZWFtaW5nKVxuICAgICAgc2V0SXNXcml0aW5nKHdyaXRpbmcpXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSB7XG4gICAgICAgIHNldFNpZGViYXJIYXNFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmIChzZW5kTWVzc2FnZUZ1bmN0aW9uICYmIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICAgIHNlbmRNZXNzYWdlRnVuY3Rpb24obWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRDaGF0KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzdGFydENoYXQsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIFNpIGVzdGFtb3MgZW4gdW5hIGNvbnZlcnNhY2nDs24geSB2YW1vcyBhIGhvbWUsIHJlc2V0ZWFyIGluaXRpYWxDaGF0SWQgeSBpbmNyZW1lbnRhciBuZXdDaGF0S2V5XG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgLy8gTm8gY29ydGFtb3MgbGEgZ2VuZXJhY2nDs246IGxhIHNlc2nDs24gc2lndWUgcmVzcG9uZGllbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAvLyBObyBib3JyYXIgZWwgY2xpZW50ZSBzaSBlcyBhZ2VudGUgZGUgY2xpZW50ZXMgKGlndWFsIHF1ZSBlbCBwcm95ZWN0byBzZSBtYW50aWVuZSlcbiAgICAgIGlmIChhZ2VudD8uZW50aXR5ICE9PSAnY2xpZW50Jykge1xuICAgICAgICBzZXRDbGllbnQ/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+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlKVxuICAgIH1cbiAgfSwgW2FwcGx5U2tpbGxVc2VGbG93XSlcblxuICAvLyBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGFnZW50X3R5cGUvYWdlbnRfZW50aXR5ICsgY29udGV4dG8pLCBlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TZXNzaW9uTWV0YSA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZ0IGFzIEN1c3RvbUV2ZW50PFNlc3Npb25NZXRhPlxuICAgICAgaWYgKGRldGFpbCkgc2V0U2Vzc2lvbk1ldGEoZGV0YWlsKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24gbGltcGlhbW9zIGxhIG1ldGFkYXRhOyBlbCBsb2FkIGRlIGxhIG51ZXZhIHNlc3Npb24gbGEgdnVlbHZlIGEgZW1pdGlyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBDYXJ0ZWwgXCJjb250aW51YXIgZW4gdW4gY2hhdCBudWV2b1wiOiBzZSBtdWVzdHJhIGFsIGFicmlyIHVuYSBjb252ZXJzYWNpw7NuIGRlIHVuIGNsb25lIGxlZ2FjeVxuICAvLyAoYWdlbnRfdHlwZSA9PT0gJ2Nsb25lJyBjb24gZW50aXR5IHByb2plY3QvdGFzay9jbGllbnQpLiBFbCBpbnB1dCBzZSByZWVtcGxhemEgcG9yIGVsIGNhcnRlbC5cbiAgY29uc3QgbGVnYWN5Q29udGV4dFNlc3Npb24gPSB1c2VNZW1vPHsgZW50aXR5VHlwZTogTGVnYWN5Q29udGV4dEVudGl0eTsgY29udGV4dE5hbWU6IHN0cmluZyB9IHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCkgcmV0dXJuIG51bGxcbiAgICBpZiAoIXNlc3Npb25NZXRhIHx8IHNlc3Npb25NZXRhLmFnZW50VHlwZSAhPT0gJ2Nsb25lJykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBlbnRpdHkgPSBzZXNzaW9uTWV0YS5hZ2VudEVudGl0eVxuICAgIGlmICghZW50aXR5IHx8ICFMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUy5pbmNsdWRlcyhlbnRpdHkgYXMgTGVnYWN5Q29udGV4dEVudGl0eSkpIHJldHVybiBudWxsXG4gICAgY29uc3QgY29udGV4dE5hbWUgPVxuICAgICAgZW50aXR5ID09PSAndGFzaycgPyBzZXNzaW9uTWV0YS50YXNrTmFtZSA6IGVudGl0eSA9PT0gJ3Byb2plY3QnID8gc2Vzc2lvbk1ldGEucHJvamVjdE5hbWUgOiBzZXNzaW9uTWV0YS5jbGllbnROYW1lXG4gICAgcmV0dXJuIHsgZW50aXR5VHlwZTogZW50aXR5IGFzIExlZ2FjeUNvbnRleHRFbnRpdHksIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSB8fCAnJyB9XG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNlc3Npb25NZXRhXSlcblxuICAvLyBNYXJjYSBlbCBhZ2VudGUgZGUgbGEgY29udmVyc2FjacOzbiBsZWdhY3kgcGFyYSBxdWUgaGVhZGVyLCBzZWxlY3RvciB5IGF2YXRhciBtdWVzdHJlbiBlbCBsb2dvXG4gIC8vIE1BSUEgeSBlbCBub21icmUgdGFjaGFkbyAoYWdlbnRlIG9ic29sZXRvKSwgc2luIGRlcGVuZGVyIGRlbCBgdHlwZWAgcmVzdWVsdG8gZGUgbGEgc2VzacOzbiB2aWVqYS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGVnYWN5Q29udGV4dFNlc3Npb24gJiYgYWdlbnQgJiYgIWFnZW50LmlzX2xlZ2FjeV9jb250ZXh0KSB7XG4gICAgICBzZWxlY3RBZ2VudCh7IC4uLmFnZW50LCBpc19sZWdhY3lfY29udGV4dDogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW2xlZ2FjeUNvbnRleHRTZXNzaW9uLCBhZ2VudCwgc2VsZWN0QWdlbnRdKVxuXG4gIC8vIEFicmUgdW4gY2hhdCBudWV2byBjb24gZWwgb3JjaGVzdHJhdG9yIHNldGVhbmRvIGVsIGNvbnRleHRvIGRlbCBjbG9uZSBsZWdhY3kgKG1pc21vIGNyaXRlcmlvXG4gIC8vIHF1ZSBjbGlja2VhciB1biBjb250ZXh0byByZWNpZW50ZSBlbiBlbCBob21lIOKGkiBwYXNvIDIgY29uIEZBUXMvYWNjaW9uZXMgZGUgZXNlIGNvbnRleHRvKS5cbiAgY29uc3QgaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc2Vzc2lvbk1ldGEpIHJldHVyblxuICAgIGNvbnN0IHtcbiAgICAgIGFnZW50RW50aXR5LFxuICAgICAgcHJvamVjdElkOiBwSWQsXG4gICAgICBwcm9qZWN0TmFtZTogcE5hbWUsXG4gICAgICBjbGllbnRJZDogY0lkLFxuICAgICAgY2xpZW50TmFtZTogY05hbWUsXG4gICAgICB0YXNrSWQ6IHRJZCxcbiAgICAgIHRhc2tOYW1lOiB0TmFtZSxcbiAgICB9ID0gc2Vzc2lvbk1ldGFcblxuICAgIGNvbnN0IG9yY2hlc3RyYXRvciA9IGFnZW50cy5kYXRhLmZpbmQoKGE6IEFnZW50KSA9PiBhLnR5cGUgPT09ICdvcmNoZXN0cmF0b3InKVxuICAgIGlmICghb3JjaGVzdHJhdG9yKSByZXR1cm5cblxuICAgIC8vIFJlc2V0IGRlbCBjaGF0IOKGkiBjb252ZXJzYWNpw7NuIG51ZXZhIChsYSBhbnRlcmlvciBzaWd1ZSBlbiBiYWNrZ3JvdW5kKVxuICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcblxuICAgIC8vIFNldGVhciBjb250ZXh0byAobWlzbW8gY3JpdGVyaW8gcXVlIGhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQgZGVsIGhvbWUpXG4gICAgc2V0VGFzaz8uKG51bGwpXG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG5cbiAgICBpZiAoYWdlbnRFbnRpdHkgPT09ICdjbGllbnQnICYmIGNJZCAhPSBudWxsKSB7XG4gICAgICBzZXRDbGllbnQ/Lih7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgfSBlbHNlIGlmIChhZ2VudEVudGl0eSA9PT0gJ3Byb2plY3QnICYmIHBJZCAhPSBudWxsKSB7XG4gICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgaWQ6IHBJZCxcbiAgICAgICAgbmFtZTogcE5hbWUgfHwgJycsXG4gICAgICAgIC4uLihjSWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IGNJZCwgY2xpZW50OiB7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0gfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBzZXRDaGlwc1Byb2plY3QoeyBwcm9qZWN0SWQ6IFN0cmluZyhwSWQpLCBwcm9qZWN0TmFtZTogcE5hbWUgfHwgJycsIGNsaWVudE5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgfSBlbHNlIGlmIChhZ2VudEVudGl0eSA9PT0gJ3Rhc2snICYmIHRJZCAhPSBudWxsKSB7XG4gICAgICBzZXRUYXNrPy4oe1xuICAgICAgICBpZDogdElkLFxuICAgICAgICBuYW1lOiB0TmFtZSB8fCAnJyxcbiAgICAgICAgLi4uKHBJZCAhPSBudWxsID8geyBwcm9qZWN0SWQ6IHBJZCB9IDoge30pLFxuICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBpZiAoY0lkICE9IG51bGwpIHNldENsaWVudD8uKHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSlcbiAgICAgIGlmIChwSWQgIT0gbnVsbCkge1xuICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICBpZDogcElkLFxuICAgICAgICAgIG5hbWU6IHBOYW1lIHx8ICcnLFxuICAgICAgICAgIC4uLihjSWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IGNJZCwgY2xpZW50OiB7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0gfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHsgcHJvamVjdElkOiBTdHJpbmcocElkKSwgcHJvamVjdE5hbWU6IHBOYW1lIHx8ICcnLCBjbGllbnROYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEFnZW50KG9yY2hlc3RyYXRvcilcbiAgICBzZXRTZXNzaW9uTWV0YShudWxsKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICB9LCBbc2Vzc2lvbk1ldGEsIGFnZW50cy5kYXRhLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QsIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb25dKVxuXG4gIGNvbnN0IHNob3dOZXdDaGF0ID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXRcbiAgY29uc3QgaXNNeUFnZW50c1NlY3Rpb24gPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHNcbiAgY29uc3QgaXNNeVNraWxsc1NlY3Rpb24gPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHNcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIjogc29sbyBwYXJhIGVsIG9yY2hlc3RyYXRvci5cbiAgLy8gLSBFbiBlbCBjaGF0OiBkaXNwb25pYmxlIGVuIHRvZGFzIGxhcyBzZWNjaW9uZXMgKGhlYWRlciB5IHByb2plY3QvY2xpZW50L3Rhc2spLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvIHBpbmVhZG8pOiBlbiBlbCBoZWFkZXIgc2llbXByZTsgZW5cbiAgLy8gICBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKHBhc8OzIHBvciBlbCBzZWxlY3RvciBkZVxuICAvLyAgIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBlbCBwYXNvIDEgKHNpbiBjb250ZXh0bykgTk8gc2UgbXVlc3RyYS5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9ICEhKHRhc2s/LmlkIHx8IGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IGNsaWVudD8uaWQgfHwgcHJvamVjdD8uaWQpXG4gIGNvbnN0IGlzQ2hhdFZpZXcgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdFxuICBjb25zdCBpc0hvbWVTdGVwMiA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGhhc1Bpbm5lZENvbnRleHRcbiAgY29uc3QgaXNIZWFkZXJIb21lU3RlcDIgPSBpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGlzSG9tZVN0ZXAyXG4gIGNvbnN0IGlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyID0gIWlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgaXNIb21lU3RlcDIgJiYgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXG4gIGNvbnN0IHNob3dCYWNrQnV0dG9uID1cbiAgICBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiZcbiAgICAhaGFzRXJyb3IgJiZcbiAgICAhbG9hZGluZyAmJlxuICAgIChpc0NoYXRWaWV3IHx8IGlzSGVhZGVySG9tZVN0ZXAyIHx8IGlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyKVxuICBjb25zdCBoYW5kbGVPcGVuTWFya2V0cGxhY2UgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGF3YWl0IGVuc3VyZUFnZW50c0xvYWRlZCgpXG4gICAgY2xlYXJBZ2VudCgpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLm15QWdlbnRzKVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdteUFnZW50cycsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLm15QWdlbnRzLFxuICAgICAgYWN0aXZlQ2hhdElkOiBudWxsLFxuICAgICAgYWdlbnRJZDogbnVsbCxcbiAgICB9KVxuICB9LCBbY2xlYXJBZ2VudCwgZW5zdXJlQWdlbnRzTG9hZGVkLCB1c2VyLmlkXSlcblxuICBjb25zdCBoYW5kbGVPcGVuU2tpbGxzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghY2FuQWNjZXNzVG9Ta2lsbHModXNlcikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlTa2lsbHMpXG4gICAgaGFuZGxlR2V0U2tpbGxzKClcbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgYWdlbnRzTmF2QWN0aXZlOiAnbXlTa2lsbHMnLFxuICAgICAgY3VycmVudE9wdGlvbjogb3B0aW9ucy5teVNraWxscyxcbiAgICB9KVxuICB9LCBbY2xlYXJBZ2VudCwgaGFuZGxlR2V0U2tpbGxzLCB1c2VyXSlcblxuICBjb25zdCBoYW5kbGVHb1RvTWFpYWtlciA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBsZXQgbWFpYWtlckFnZW50ID0gYWdlbnRzLmRhdGEuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmVudGl0eT1nbG9iYWwmbGFuZz0ke21hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSl9YCxcbiAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgIG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGE6IEFnZW50KSA9PiBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhKSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZXRUYXNrPy4obnVsbClcbiAgICBzZWxlY3RBZ2VudChtYWlha2VyQWdlbnQpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgIGFnZW50c05hdkFjdGl2ZTogJ21haWFrZXInLFxuICAgICAgY3VycmVudE9wdGlvbjogb3B0aW9ucy5ob21lLFxuICAgICAgYWdlbnRJZDogbWFpYWtlckFnZW50LmlkLFxuICAgICAgYWN0aXZlQ2hhdElkOiBudWxsLFxuICAgIH0pXG4gIH0sIFthZ2VudHMuZGF0YSwgaTE4bi5sYW5ndWFnZSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgdXNlci5pZF0pXG5cbiAgY29uc3QgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNuYXBzaG90OiBNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGlmIChzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUgPT09ICdteVNraWxscycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBhZ2VudFRvU2VsZWN0OiBBZ2VudCB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHNuYXBzaG90LmFnZW50SWQgJiYgc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlICE9PSAnbXlBZ2VudHMnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWdlbnRUb1NlbGVjdCA9IGF3YWl0IGZldGNoQWdlbnREZXRhaWwoc25hcHNob3QuYWdlbnRJZClcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgYWdlbnRUb1NlbGVjdCA9IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgYXdhaXQgaGFuZGxlR2V0QWdlbnRzKHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215QWdlbnRzJyA/IHVuZGVmaW5lZCA6IGFnZW50VG9TZWxlY3QpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoYWdlbnRUb1NlbGVjdCAmJiBzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUgIT09ICdteUFnZW50cycpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoYWdlbnRUb1NlbGVjdClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVHZXRBZ2VudHMsIHNlbGVjdEFnZW50XVxuICApXG5cbiAgY29uc3QgYXBwbHlTZXNzaW9uUmVzdG9yZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChzbmFwc2hvdDogTWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90KSA9PiB7XG4gICAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuXG4gICAgICBpZiAoc25hcHNob3QuaG9zdENvbnRleHQ/LmNoaXBzUHJvamVjdCkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoc25hcHNob3QuaG9zdENvbnRleHQuY2hpcHNQcm9qZWN0KVxuICAgICAgfVxuXG4gICAgICBpZiAoc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlID09PSAnbXlBZ2VudHMnKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZU9wZW5NYXJrZXRwbGFjZSgpXG4gICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlID09PSAnbXlTa2lsbHMnKSB7XG4gICAgICAgIGhhbmRsZU9wZW5Ta2lsbHMoKVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSA9PT0gJ21haWFrZXInKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZUdvVG9NYWlha2VyKClcbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzbmFwc2hvdC5jdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQgJiYgc25hcHNob3QuYWN0aXZlQ2hhdElkKSB7XG4gICAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgICAgc2V0SW5pdGlhbENoYXRJZChzbmFwc2hvdC5hY3RpdmVDaGF0SWQpXG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLnNldEFjdGl2ZUNoYXRJZChzbmFwc2hvdC5hY3RpdmVDaGF0SWQpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgICBoYW5kbGVycy5jaGF0KClcbiAgICAgIH0gZWxzZSBpZiAoc25hcHNob3QuY3VycmVudE9wdGlvbiAmJiBpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uKHNuYXBzaG90LmN1cnJlbnRPcHRpb24pKSB7XG4gICAgICAgIHNldEN1cnJlbnRPcHRpb24oc25hcHNob3QuY3VycmVudE9wdGlvbiBhcyBvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICB9LFxuICAgIFtcbiAgICAgIGZvY3VzQ2hhdElucHV0LFxuICAgICAgaGFuZGxlR29Ub01haWFrZXIsXG4gICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gICAgICBoYW5kbGVPcGVuU2tpbGxzLFxuICAgICAgaGFuZGxlcnMsXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUsXG4gICAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uLFxuICAgIF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudFxuICAgIGlmICghc25hcHNob3QgfHwgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICBjb25zdCBydW5SZXN0b3JlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlKHNuYXBzaG90KVxuICAgICAgICBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYXdhaXQgYXBwbHlTZXNzaW9uUmVzdG9yZShzbmFwc2hvdClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzUmVzdG9yaW5nU2Vzc2lvbihmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBydW5SZXN0b3JlKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICB9LCBbYXBwbHlTZXNzaW9uUmVzdG9yZSwgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlLCBzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgcmVtb3ZlQWdlbnQoYWdlbnRJZClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IGFnZW50SWQpIHtcbiAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudChhZ2VudElkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50Py5pZCwgcmVtb3ZlQWdlbnQsIHNlbGVjdEZpcnN0QWdlbnRdXG4gIClcblxuICAvLyBFbCBmb290ZXIgKGlucHV0KSBzZSBvY3VsdGEgc29sbyBlbiBlbCBob21lIG1hcmtldHBsYWNlIGRlIE1haWFrZXIgKGJyb3dzZSBkZSBhZ2VudGVzKS5cbiAgLy8gRWwgaG9tZSBkZWwgb3JjaGVzdHJhdG9yIHPDrSBwZXJtaXRlIGVzY3JpYmlyLCBhc8OtIHF1ZSBtYW50aWVuZSBlbCBmb290ZXIuXG4gIGNvbnN0IGlzTWFpYWtlckNyZWF0b3JIb21lID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgaXNNYWlha2VyQWdlbnRTZWxlY3RlZFxuXG4gIGNvbnN0IG1vZGFsUGFuZWwgPSAoXG4gICAgPD5cbiAgICAgIHt2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKSAmJiAhaXNGbG9hdGluZyA/IChcbiAgICAgICAgPFNpZGViYXJcbiAgICAgICAgICBvbkdvVG9DaGF0PXtnb1RvQ2hhdH1cbiAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRTaWRlYmFySGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgaGFuZGxlR29Ub0hvbWU9e2hhbmRsZUdvSG9tZX1cbiAgICAgICAgICBoYW5kbGVTdGFydE5ld0NoYXQ9e2hhbmRsZVN0YXJ0TmV3Q2hhdH1cbiAgICAgICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2U9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICBzaG93TmV3Q2hhdD17c2hvd05ld0NoYXR9XG4gICAgICAgICAgcmVmZXRjaENoYXRzPXtyZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFuZGxlU2V0UmVmZXRjaENoYXRzPXtzZXRSZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFzRXJyb3I9e3NpZGViYXJIYXNFcnJvcn1cbiAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU9e3NpZGViYXJBZ2VudHNOYXZBY3RpdmV9XG4gICAgICAgICAgaGFuZGxlT3BlblNraWxscz17aGFuZGxlT3BlblNraWxsc31cbiAgICAgICAgICBvbk9wZW5NYWlha2VyQ3JlYXRvcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgaXNMZWdhY3lDb250ZXh0U2Vzc2lvbj17ISFsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgICBpbml0aWFsT3Blbj17c2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5zaWRlYmFyT3BlbiA/PyBmYWxzZX1cbiAgICAgICAgICBvbk9wZW5DaGFuZ2U9e2hhbmRsZVNpZGViYXJPcGVuQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8U0NDQUlNQ29udGVudCBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfT5cbiAgICAgICAgPENoYXRBSU1vZGFsSGVhZGVyXG4gICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICBvbkxheW91dE1vZGVDaGFuZ2U9e2hhbmRsZUxheW91dE1vZGVDaGFuZ2V9XG4gICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgIGRyYWdnYWJsZT17aXNGbG9hdGluZ31cbiAgICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICAgIG9uRHJhZ01vdmU9e2hhbmRsZURyYWdNb3ZlfVxuICAgICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgICBoYW5kbGVNaW5pbWl6ZT17aGFuZGxlTWluaW1pemV9XG4gICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICBoYXNFcnJvcj17ISFhZ2VudEVycm9yfVxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgbG9hZGluZ01vcmU9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2FnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICBoYW5kbGVSZXNldENoYXQ9e2hhbmRsZVJlc2V0Q2hhdH1cbiAgICAgICAgICBvbkFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgIGxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICBzb3J0QWdlbnRzTGlzdD17c29ydEFnZW50c0xpc3R9XG4gICAgICAgICAgaXNNeUFnZW50c1NlY3Rpb249e2lzTXlBZ2VudHNTZWN0aW9ufVxuICAgICAgICAgIGlzTXlTa2lsbHNTZWN0aW9uPXtpc015U2tpbGxzU2VjdGlvbn1cbiAgICAgICAgICBpc01haWFrZXJTZWN0aW9uPXtpc01haWFrZXJDcmVhdG9ySG9tZX1cbiAgICAgICAgICBzaG93QmFja0J1dHRvbj17c2hvd0JhY2tCdXR0b259XG4gICAgICAgICAgb25CYWNrPXtoYW5kbGVCYWNrfVxuICAgICAgICAvPlxuICAgICAgICB7aGFzRXJyb3IgPyAoXG4gICAgICAgICAgPE1BSUFFcnJvciAvPlxuICAgICAgICApIDogdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbiwgdXNlcikgPyAoXG4gICAgICAgICAgPENoYXRBSUNvbnRlbnRcbiAgICAgICAgICAgIGN1cnJlbnRPcHRpb249e2NvbXB1dGVkQ3VycmVudE9wdGlvbn1cbiAgICAgICAgICAgIGhhbmRsZXJzPXt7IC4uLmhhbmRsZXJzLCBjaGF0OiBzdGFydENoYXQsIGhvbWU6IGhhbmRsZXJzLmhvbWUsIGhhbmRsZUdvSG9tZSB9fVxuICAgICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0SGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgICByZWZzPXt7IHVzZXJJbml0aWFsTWVzc2FnZSwgaW5pdGlhbENoYXRJZCB9fVxuICAgICAgICAgICAgb25TZW5kTWVzc2FnZVJlYWR5PXtoYW5kbGVTZW5kTWVzc2FnZVJlYWR5fVxuICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgZmxvYXRpbmc9e2lzRmxvYXRpbmd9XG4gICAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgICAgbG9hZGluZ0FnZW50cz17bG9hZGluZ31cbiAgICAgICAgICAgIG9uRGVsZXRlQWdlbnQ9e2hhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzfVxuICAgICAgICAgICAgb25GYXZvcml0ZUFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgICAgaGFzTW9yZUFnZW50cz17ISFhZ2VudHMuaGFzX21vcmV9XG4gICAgICAgICAgICBsb2FkaW5nTW9yZUFnZW50cz17bG9hZGluZ01vcmV9XG4gICAgICAgICAgICBvbkxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICAgIG9uR29Ub01haWFrZXI9e2hhbmRsZUdvVG9NYWlha2VyfVxuICAgICAgICAgICAgbXlTa2lsbHM9e215U2tpbGxzfVxuICAgICAgICAgICAgc2hhcmVkU2tpbGxzPXtzaGFyZWRTa2lsbHN9XG4gICAgICAgICAgICBsb2FkaW5nU2tpbGxzPXtsb2FkaW5nU2tpbGxzfVxuICAgICAgICAgICAgb25EZWxldGVTa2lsbD17cmVtb3ZlU2tpbGx9XG4gICAgICAgICAgICBvblNlYXJjaEFnZW50cz17c2VhcmNoQ3VzdG9tQWdlbnRzfVxuICAgICAgICAgICAgc2VhcmNoTG9hZGluZ0FnZW50cz17c2VhcmNoTG9hZGluZ31cbiAgICAgICAgICAgIGFnZW50RXJyb3I9e2FnZW50RXJyb3J9XG4gICAgICAgICAgICBpc1Jlc3RvcmluZ1Nlc3Npb249e2lzUmVzdG9yaW5nU2Vzc2lvbn1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxQcm9qZWN0U3VtbWFyeUNvbnRlbnQgb25SZXN0YXJ0U3VtbWFyeT17aGFuZGxlcnMuaG9tZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAgeygoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgISFhZ2VudHM/LmRhdGE/Lmxlbmd0aCkgfHxcbiAgICAgICAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkgJiZcbiAgICAgICAgICAhaXNNYWlha2VyQ3JlYXRvckhvbWUgJiZcbiAgICAgICAgICAhaGFzRXJyb3IgJiZcbiAgICAgICAgICAhbG9hZGluZyAmJlxuICAgICAgICAgIHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpICYmIChcbiAgICAgICAgICAgIDxDaGF0QWlNb2RhbEZvb3RlclxuICAgICAgICAgICAgICBhZ2VudD17YWdlbnR9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbmRNZXNzYWdlPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgaGFuZGxlU3RvcEdlbmVyYXRpb249e3N0b3BHZW5lcmF0aW9uRnVuY3Rpb259XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNXcml0aW5nPXtpc1dyaXRpbmd9XG4gICAgICAgICAgICAgIGNoYXRJZD17aW5pdGlhbENoYXRJZH1cbiAgICAgICAgICAgICAgbmV3Q2hhdEtleT17bmV3Q2hhdEtleX1cbiAgICAgICAgICAgICAgdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH1cbiAgICAgICAgICAgICAgbGVnYWN5Q29udGV4dFNlc3Npb249e2xlZ2FjeUNvbnRleHRTZXNzaW9ufVxuICAgICAgICAgICAgICBvbkNvbnRpbnVlSW5OZXdDaGF0PXtoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXR9XG4gICAgICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8L1NDQ0FJTUNvbnRlbnQ+XG4gICAgPC8+XG4gIClcblxuICBjb25zdCBjb250ZW50V3JhcHBlciA9IChcbiAgICA8U0NDQUlNQ29udGVudFdyYXBwZXIgZXhwYW5kZWQ9e2V4cGFuZGVkfSBmbG9hdGluZz17aXNGbG9hdGluZ30gcmVmPXtjb250ZW50V3JhcHBlclJlZn0+XG4gICAgICB7bW9kYWxQYW5lbH1cbiAgICA8L1NDQ0FJTUNvbnRlbnRXcmFwcGVyPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICBzZWxlY3RvciAmJlxuICAgIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgIDxTQ0NBSU1XcmFwcGVyXG4gICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgZHJhZ1Bvc2l0aW9uPXtyZXNvbHZlZERyYWdQb3NpdGlvbn1cbiAgICAgICAgZWxldmF0ZWQ9e3NlY3Rpb24gPT09ICd0YXNrJ31cbiAgICAgICAgJG1pbmltaXplZD17aXNNaW5pbWl6ZWR9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSU1NaW5pbWl6ZWRIaWRlICRoaWRkZW49e2lzTWluaW1pemVkfT5cbiAgICAgICAgICA8RmxvYXRpbmdQYW5lbE1vdGlvbiB0aWx0PXt0aWx0TW90aW9ufSBleHBhbmRlZD17ZXhwYW5kZWR9PlxuICAgICAgICAgICAge2NvbnRlbnRXcmFwcGVyfVxuICAgICAgICAgIDwvRmxvYXRpbmdQYW5lbE1vdGlvbj5cbiAgICAgICAgPC9TQ0NBSU1NaW5pbWl6ZWRIaWRlPlxuICAgICAgICB7aXNNaW5pbWl6ZWQgJiYgKFxuICAgICAgICAgIDxNYWlhTWluaW1pemVkUGlsbFxuICAgICAgICAgICAgc2hvd05vdmVsdHlEb3Q9e3Nob3dNaW5pbWl6ZWROb3ZlbHR5RG90fVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2hhc0FjdGl2ZVN0cmVhbX1cbiAgICAgICAgICAgIG9uUmVzdG9yZT17aGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiAoXG4gICAgICAgICAgPEFibUFnZW50TW9kYWxcbiAgICAgICAgICAgIGFkZEFnZW50PXthZGRBZ2VudH1cbiAgICAgICAgICAgIHVwZGF0ZUFnZW50PXt1cGRhdGVBZ2VudH1cbiAgICAgICAgICAgIHJlbW92ZUFnZW50PXtyZW1vdmVBZ2VudH1cbiAgICAgICAgICAgIHVwZGF0ZUFnZW50RmF2b3JpdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBzZWxlY3RGaXJzdEFnZW50PXtzZWxlY3RGaXJzdEFnZW50fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHt1c2VySGFzU2tpbGxzQWNjZXNzICYmIChcbiAgICAgICAgICA8QWJtU2tpbGxNb2RhbCBhZGRTa2lsbD17YWRkU2tpbGx9IHVwZGF0ZVNraWxsSW5MaXN0PXt1cGRhdGVTa2lsbEluTGlzdH0gcmVtb3ZlU2tpbGw9e3JlbW92ZVNraWxsfSAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1NraWxsc0FjY2VzcyAmJiA8QWJtU2tpbGxHZW5lcmF0ZU1vZGFsIC8+fVxuICAgICAgICA8U25hY2tiYXIgLz5cbiAgICAgIDwvU0NDQUlNV3JhcHBlcj4sXG4gICAgICBzZWxlY3RvclxuICAgIClcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQ0VBLFdBQVcsRUFDWEMsT0FBTyxFQUNQQyxRQUFRLEVB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
|