@projectcor/maia-components 2.47.0 → 2.48.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/ActionableButton.spec.js +111 -0
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
  4. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
  5. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
  6. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
  7. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +65 -0
  8. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +66 -0
  9. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +5 -51
  10. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +211 -0
  11. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
  12. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +55 -0
  13. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +41 -0
  14. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +18 -76
  15. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +253 -0
  16. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
  17. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +31 -0
  18. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +33 -0
  19. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +3 -31
  20. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +25 -0
  21. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
  22. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
  23. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
  24. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
  25. package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
  26. package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
  27. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
  28. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  29. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  30. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
  31. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +88 -0
  32. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  33. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
  34. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
  35. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +77 -0
  36. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
  37. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
  38. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +31 -0
  39. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +48 -0
  40. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -34
  41. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +231 -0
  42. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
  43. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
  44. package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
  45. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
  46. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
  47. package/lib/components/atoms/Expand/Expand.spec.js +57 -0
  48. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  49. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
  50. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
  51. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  52. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
  53. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  54. package/lib/components/atoms/HelpButton.spec.js +87 -0
  55. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
  56. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
  57. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
  58. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
  59. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
  60. package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
  61. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  62. package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
  63. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +12 -0
  64. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +26 -0
  65. package/lib/components/atoms/MAIAInput/MAIAInput.js +8 -12
  66. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +444 -0
  67. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +50 -0
  68. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +20 -0
  69. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -60
  70. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +53 -0
  71. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +22 -0
  72. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
  73. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
  74. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
  75. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
  76. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
  77. package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
  78. package/lib/components/atoms/NextPageLoader.spec.js +37 -0
  79. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
  80. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
  81. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
  82. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
  83. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
  84. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +86 -0
  85. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +36 -8
  86. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +23 -5
  87. package/lib/components/atoms/PrimaryButton.spec.js +42 -0
  88. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
  89. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  90. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  91. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
  92. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
  93. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  94. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
  95. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
  96. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
  97. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
  98. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
  99. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
  100. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
  101. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
  102. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
  103. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
  104. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
  105. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  106. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  107. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
  108. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
  109. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
  110. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  111. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
  112. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
  113. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  114. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
  115. package/lib/components/atoms/TextArea/TextArea.spec.js +68 -0
  116. package/lib/components/atoms/ThirdButton.spec.js +29 -0
  117. package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
  118. package/lib/components/atoms/WithAppCfg.spec.js +60 -0
  119. package/lib/components/index.js +2 -1
  120. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
  121. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
  122. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +129 -39
  123. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +495 -0
  124. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +39 -0
  125. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +57 -0
  126. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +6 -40
  127. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +227 -0
  128. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +86 -0
  129. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +108 -0
  130. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +18 -90
  131. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +254 -0
  132. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
  133. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
  134. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
  135. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
  136. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  137. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  138. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  139. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  140. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  141. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  142. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  143. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  144. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
  145. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  146. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
  147. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
  148. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +92 -73
  149. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
  150. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
  151. package/lib/components/molecules/ChatAIHome/styles.js +85 -78
  152. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  153. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +54 -0
  154. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +77 -0
  155. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +39 -57
  156. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +445 -0
  157. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  158. package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
  159. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +147 -4
  160. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +471 -0
  161. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +64 -108
  162. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +659 -0
  163. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  164. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
  165. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
  166. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
  167. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
  168. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  169. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
  170. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  171. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +30 -0
  172. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +95 -0
  173. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +76 -86
  174. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
  175. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  176. package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
  177. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
  178. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
  179. package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
  180. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +172 -0
  181. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
  182. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
  183. package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
  184. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
  185. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
  186. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
  187. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +82 -0
  188. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
  189. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
  190. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  191. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  192. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
  193. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
  194. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
  195. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
  196. package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
  197. package/lib/components/molecules/Sidebar/Sidebar.spec.js +453 -0
  198. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +199 -0
  199. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +391 -0
  200. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +133 -215
  201. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1204 -0
  202. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
  203. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
  204. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  205. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +526 -0
  206. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
  207. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  208. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  209. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  210. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  211. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
  212. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
  213. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
  214. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
  215. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
  216. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  217. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  218. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  219. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  220. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
  221. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  222. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  223. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  224. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
  225. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
  226. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
  227. package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
  228. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
  229. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
  230. package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
  231. package/lib/constants/maiaFeatureAccess.spec.js +30 -0
  232. package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
  233. package/lib/constants/maiaTaskPanelAccess.spec.js +30 -0
  234. package/lib/constants/permissions/clientRoleAccess.spec.js +31 -0
  235. package/lib/constants/permissions/index.js +2 -2
  236. package/lib/constants/permissions/utils.js +4 -1
  237. package/lib/constants/permissions/utils.spec.js +128 -0
  238. package/lib/dev/DevMaiaPage.js +30 -0
  239. package/lib/dev/DevReasoningTimeline.js +68 -37
  240. package/lib/dev/Providers.js +5 -3
  241. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  242. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  243. package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
  244. package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
  245. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +231 -0
  246. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
  247. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +313 -0
  248. package/lib/hooks/useAgentSuggestions.spec.js +89 -0
  249. package/lib/hooks/useCaretPosition.spec.js +58 -0
  250. package/lib/hooks/useChatManager/useChatManager.helpers.js +353 -0
  251. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +506 -0
  252. package/lib/hooks/useChatManager/useChatManager.js +76 -351
  253. package/lib/hooks/useChatManager/useChatManager.spec.js +1261 -0
  254. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +109 -0
  255. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +176 -0
  256. package/lib/hooks/useChatMessages/useChatMessages.js +12 -82
  257. package/lib/hooks/useChatMessages/useChatMessages.spec.js +379 -0
  258. package/lib/hooks/useChats/useChats.spec.js +208 -0
  259. package/lib/hooks/useClientSearch.helpers.js +36 -0
  260. package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
  261. package/lib/hooks/useClientSearch.js +4 -32
  262. package/lib/hooks/useClientSearch.spec.js +86 -0
  263. package/lib/hooks/useContextMentions.helpers.js +152 -0
  264. package/lib/hooks/useContextMentions.helpers.spec.js +143 -0
  265. package/lib/hooks/useContextMentions.js +2 -163
  266. package/lib/hooks/useContextMentions.spec.js +239 -0
  267. package/lib/hooks/useContextMentions.types.js +2 -0
  268. package/lib/hooks/useContextPinPopover.helpers.js +95 -0
  269. package/lib/hooks/useContextPinPopover.helpers.spec.js +115 -0
  270. package/lib/hooks/useContextPinPopover.js +16 -75
  271. package/lib/hooks/useContextPinPopover.spec.js +159 -0
  272. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  273. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  274. package/lib/hooks/useDebounce.spec.js +42 -0
  275. package/lib/hooks/useEntitySearch.helpers.js +359 -0
  276. package/lib/hooks/useEntitySearch.helpers.spec.js +321 -0
  277. package/lib/hooks/useEntitySearch.js +38 -391
  278. package/lib/hooks/useEntitySearch.spec.js +443 -0
  279. package/lib/hooks/useEvent.spec.js +45 -0
  280. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
  281. package/lib/hooks/useFrequentlyUsedActions.js +60 -22
  282. package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
  283. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  284. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  285. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
  286. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
  287. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
  288. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
  289. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  290. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  291. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  292. package/lib/hooks/useMentionPopover.helpers.js +41 -0
  293. package/lib/hooks/useMentionPopover.helpers.spec.js +71 -0
  294. package/lib/hooks/useMentionPopover.js +9 -35
  295. package/lib/hooks/useMentionPopover.spec.js +215 -0
  296. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
  297. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +132 -0
  298. package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
  299. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
  300. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  301. package/lib/hooks/useModal/useModal.spec.js +73 -0
  302. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +192 -0
  303. package/lib/hooks/useProjectSearch.helpers.js +61 -0
  304. package/lib/hooks/useProjectSearch.helpers.spec.js +70 -0
  305. package/lib/hooks/useProjectSearch.js +4 -58
  306. package/lib/hooks/useProjectSearch.spec.js +91 -0
  307. package/lib/hooks/useProjectSummary.spec.js +193 -0
  308. package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
  309. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +92 -0
  310. package/lib/hooks/useProjectSummaryConfig.js +14 -52
  311. package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
  312. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
  313. package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
  314. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
  315. package/lib/hooks/useRecentClientsSearch.js +4 -32
  316. package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
  317. package/lib/hooks/useRecentContexts.spec.js +139 -0
  318. package/lib/hooks/useResize.spec.js +37 -0
  319. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  320. package/lib/hooks/useSlashCommands.spec.js +139 -0
  321. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
  322. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  323. package/lib/hooks/useStreamResponse.spec.js +199 -0
  324. package/lib/hooks/useT.spec.js +20 -0
  325. package/lib/hooks/useToggle.spec.js +33 -0
  326. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
  327. package/lib/index.js +5 -2
  328. package/lib/lang/br/index.js +29 -1
  329. package/lib/lang/en/index.js +29 -1
  330. package/lib/lang/es/index.js +29 -1
  331. package/lib/lang/fr/index.js +29 -1
  332. package/lib/services/maia/Access/updateAccess.spec.js +137 -0
  333. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  334. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
  335. package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
  336. package/lib/services/maia/Agents/connectors.js +88 -46
  337. package/lib/services/maia/Agents/connectors.spec.js +359 -0
  338. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  339. package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
  340. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  341. package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
  342. package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
  343. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
  344. package/lib/services/maia/Agents/getAgents.helpers.js +181 -0
  345. package/lib/services/maia/Agents/getAgents.helpers.spec.js +211 -0
  346. package/lib/services/maia/Agents/getAgents.js +78 -242
  347. package/lib/services/maia/Agents/getAgents.spec.js +697 -0
  348. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  349. package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
  350. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  351. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  352. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  353. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  354. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  355. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  356. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  357. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  358. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  359. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  360. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  361. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
  362. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +153 -0
  363. package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
  364. package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
  365. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  366. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
  367. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  368. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  369. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  370. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  371. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  372. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  373. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  374. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  375. package/lib/services/maia/client.spec.js +56 -0
  376. package/lib/services/utils/fetchCOR.spec.js +211 -0
  377. package/lib/services/utils/getCookie.spec.js +20 -0
  378. package/lib/services/utils/mapChatMessages.spec.js +254 -0
  379. package/lib/store/chatsSidebarOptimistic.spec.js +112 -0
  380. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  381. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  382. package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
  383. package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
  384. package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
  385. package/lib/store/sessions/sessionNotifications.js +35 -41
  386. package/lib/store/sessions/sessionNotifications.spec.js +106 -0
  387. package/lib/store/sessions/sessionStreamManager.js +50 -51
  388. package/lib/store/sessions/sessionStreamManager.spec.js +503 -0
  389. package/lib/store/sessions/sessions.types.spec.js +16 -0
  390. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  391. package/lib/store/useChatsStore.spec.js +619 -0
  392. package/lib/store/useFaqsStore.spec.js +57 -0
  393. package/lib/styles/cascade.js +29 -3
  394. package/lib/styles/transitions.js +3 -1
  395. package/lib/test/mockSseStream.js +121 -0
  396. package/lib/test/streamdownCodeMock.js +6 -0
  397. package/lib/test/streamdownMock.js +12 -0
  398. package/lib/types/agentModal.js +1 -1
  399. package/lib/types/global.d.js +1 -1
  400. package/lib/utils/actionCategoryMap.spec.js +18 -0
  401. package/lib/utils/agentDisplayName.spec.js +44 -0
  402. package/lib/utils/autoApproveStorage.spec.js +25 -0
  403. package/lib/utils/chatInputFiles.spec.js +39 -0
  404. package/lib/utils/contextMentionIcons.spec.js +41 -0
  405. package/lib/utils/contextMentionLabel.spec.js +13 -0
  406. package/lib/utils/contextMentionTriggers.spec.js +38 -0
  407. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  408. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  409. package/lib/utils/entityLinkRender.spec.js +72 -0
  410. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  411. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  412. package/lib/utils/formatUnreadCount.spec.js +12 -0
  413. package/lib/utils/getUnitFileSize.spec.js +18 -0
  414. package/lib/utils/hitlAnalytics.spec.js +100 -0
  415. package/lib/utils/hoursPlannerQuickActionType.js +74 -1
  416. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  417. package/lib/utils/imagePreprocessor.helpers.js +28 -0
  418. package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
  419. package/lib/utils/imagePreprocessor.js +12 -37
  420. package/lib/utils/imagePreprocessor.spec.js +112 -0
  421. package/lib/utils/maiaPageRoute.js +24 -0
  422. package/lib/utils/maiaPageRoute.spec.js +23 -0
  423. package/lib/utils/mapBackendLang.spec.js +19 -0
  424. package/lib/utils/navigateContextEntity.spec.js +50 -0
  425. package/lib/utils/normalizeAgentConnectors.js +4 -4
  426. package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
  427. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  428. package/lib/utils/reasoningMappers.spec.js +103 -0
  429. package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
  430. package/lib/utils/renderContextMentions.spec.js +158 -0
  431. package/lib/utils/retryCompletion.spec.js +99 -0
  432. package/lib/utils/skillContentSize.spec.js +13 -0
  433. package/lib/utils/slashCommandMarker.spec.js +43 -0
  434. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  435. package/lib/utils/sseStreamContent.spec.js +31 -0
  436. package/lib/utils/streamActivityMessages.js +32 -19
  437. package/lib/utils/streamActivityMessages.spec.js +253 -0
  438. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  439. package/package.json +1 -1
  440. package/README.md +0 -2
@@ -47,32 +47,12 @@ import { DeleteQuestionModal } from '../DeleteQuestionModal/DeleteQuestionModal'
47
47
  import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
48
48
  import { useAccessClient } from '../../../hooks/useAccessClient/useAccessClient';
49
49
  import { useToggleFavorite } from '../../../hooks';
50
- import { deriveConnectedConnectorSlugs, deriveCorAccessFromToolGroupSlugs, DEFAULT_COR_ACCESS, COR_TOOL_GROUP_SLUGS, buildAgentToolGroupsRequest } from '../../../utils/normalizeAgentConnectors';
50
+ import { buildAgentToolGroupsRequest, DEFAULT_COR_ACCESS, deriveAssignedConnectorSlugs } from '../../../utils/normalizeAgentConnectors';
51
+ import { applyKnowledgeFileStatusUpdate, buildEditingModalValuesFromAgentDetail, createInitialAbmModalValues, hasAbmPendingChanges, hasAccessibilitySectionChanged, hasInactiveAccessibilityClients, isAbmSaveDisabled, isSameAgentModalSnapshot, resolveKnowledgeUploadOutcome, shouldConfirmAbmClose } from './AbmAgentModal.helpers';
51
52
  import { getAgentConnectors } from '../../../services/maia/Agents/connectors';
52
53
  import { hasMaiaExternalConnectorsAccess } from '../../../constants/maiaExternalConnectorsAccess';
53
54
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
54
- var initialValues = Object.freeze({
55
- isEditing: false,
56
- knowledge: [],
57
- general: {
58
- name: '',
59
- emoji: '',
60
- introduction: '',
61
- inputPlaceholder: '',
62
- isActive: false,
63
- aiModel: null,
64
- id: null,
65
- userPrompt: null,
66
- knowledgeBases: [],
67
- is_favorite: false
68
- },
69
- accessibility: {
70
- accessType: 'company',
71
- clients: null,
72
- corAccess: DEFAULT_COR_ACCESS,
73
- selectedConnectors: []
74
- }
75
- });
55
+ var initialValues = Object.freeze(createInitialAbmModalValues());
76
56
  export var SectionByKey = {
77
57
  general: function general(props) {
78
58
  return /*#__PURE__*/_jsx(AbmGeneralSection, _objectSpread({}, props));
@@ -84,64 +64,8 @@ export var SectionByKey = {
84
64
  return /*#__PURE__*/_jsx(AbmAccessibilitySection, _objectSpread({}, props));
85
65
  }
86
66
  };
87
- var validateFieldValues = function validateFieldValues(valueToValidate) {
88
- if (!valueToValidate.general.name || !valueToValidate.general.userPrompt) {
89
- return false;
90
- }
91
- return true;
92
- };
93
-
94
- /** Misma estructura que el efecto que hidrata desde useGetAgentById (todas las pestañas del ABM). */
95
- function buildEditingModalValuesFromAgentDetail(agentById, agentModels, prev) {
96
- var _agentById$knowledgeB, _agentById$clients;
97
- var agentModel = agentModels.find(function (model) {
98
- return model.id === agentById.modelAiId;
99
- });
100
- return _objectSpread(_objectSpread({}, prev), {}, {
101
- isEditing: true,
102
- general: {
103
- emoji: agentById.emoji,
104
- name: agentById.name,
105
- introduction: agentById.introduction,
106
- inputPlaceholder: agentById.inputPlaceholder,
107
- isActive: agentById.isActive,
108
- aiModel: agentModel || null,
109
- id: agentById.id,
110
- userPrompt: agentById.userPrompt,
111
- knowledgeBases: [],
112
- is_favorite: agentById.is_favorite,
113
- created_by: agentById.createdBy
114
- },
115
- knowledge: ((_agentById$knowledgeB = agentById.knowledgeBases) === null || _agentById$knowledgeB === void 0 ? void 0 : _agentById$knowledgeB.map(function (k) {
116
- return {
117
- file: new File([], k.filename),
118
- id: k.id.toString(),
119
- name: k.filename,
120
- size: k.file_size_bytes || 0,
121
- type: k.original_file_type,
122
- status: k.status,
123
- url_original: k.url_original || undefined,
124
- url_thumbnail: k.url_thumbnail || undefined
125
- };
126
- })) || [],
127
- accessibility: {
128
- accessType: agentById.access,
129
- clients: ((_agentById$clients = agentById.clients) === null || _agentById$clients === void 0 ? void 0 : _agentById$clients.map(function (client) {
130
- var _client$id, _client$is_active, _client$is_deleted;
131
- return {
132
- id: ((_client$id = client.id) === null || _client$id === void 0 ? void 0 : _client$id.toString()) || '',
133
- name: client.name,
134
- is_active: (_client$is_active = client.is_active) !== null && _client$is_active !== void 0 ? _client$is_active : false,
135
- is_deleted: (_client$is_deleted = client.is_deleted) !== null && _client$is_deleted !== void 0 ? _client$is_deleted : false
136
- };
137
- })) || null,
138
- corAccess: deriveCorAccessFromToolGroupSlugs(agentById.toolGroupSlugs),
139
- selectedConnectors: []
140
- }
141
- });
142
- }
143
67
  export var AbmAgentModal = function AbmAgentModal(_ref) {
144
- var _user$permissions, _modalValues$accessib4, _modalValues$general3, _modalValues$general4, _modalValues$general5, _modalValues$general6;
68
+ var _user$permissions, _modalValues$accessib3, _modalValues$general3, _modalValues$general4, _modalValues$general5, _modalValues$general6;
145
69
  var addAgent = _ref.addAgent,
146
70
  updateAgent = _ref.updateAgent,
147
71
  removeAgent = _ref.removeAgent,
@@ -181,6 +105,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
181
105
  var agentCreatedRef = useRef(null);
182
106
  var pendingInitialSectionRef = useRef(null);
183
107
  var prefetchedAgentByIdRef = useRef(null);
108
+ var hydratingAgentIdRef = useRef(null);
184
109
  var filesFinishedRef = useRef(false);
185
110
  // Marca cuando cerramos el loader por el timeout de seguridad de archivos.
186
111
  // Mientras esté activo, los useEffect de post-guardado NO deben disparar
@@ -259,67 +184,23 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
259
184
  successUpdateAccess = _useAccessClient.success,
260
185
  isLoadingUpdateAccess = _useAccessClient.isLoading,
261
186
  resetSuccessUpdateAccess = _useAccessClient.handleResetSuccess;
262
- if (!selector) return null;
263
- var areClientsArraysEqual = function areClientsArraysEqual(clients1, clients2) {
264
- if (!clients1 && !clients2) return true;
265
- if (!clients1 || !clients2) return false;
266
- if (clients1.length !== clients2.length) return false;
267
- var clients1Ids = clients1.map(function (c) {
268
- return c.clientId;
269
- }).sort();
270
- var clients2Ids = clients2.map(function (c) {
271
- return c.clientId;
272
- }).sort();
273
- return clients1Ids.every(function (id, index) {
274
- return id === clients2Ids[index];
275
- });
276
- };
187
+ var creationDraftDefaults = useMemo(function () {
188
+ var _agentModels$0$id, _agentModels$;
189
+ return {
190
+ defaultInputPlaceholder: t('generalSection.inputPlaceholder'),
191
+ defaultUserPromptPlaceholder: t('generalSection.initialPromptPlaceholder'),
192
+ defaultAiModelId: (_agentModels$0$id = (_agentModels$ = agentModels[0]) === null || _agentModels$ === void 0 ? void 0 : _agentModels$.id) !== null && _agentModels$0$id !== void 0 ? _agentModels$0$id : null
193
+ };
194
+ }, [agentModels, t]);
277
195
  var hasAccessibilityChanged = function hasAccessibilityChanged() {
278
- var _firstValueAgent$curr, _modalValues$accessib, _firstValueAgent$curr2;
279
- if (!((_firstValueAgent$curr = firstValueAgent.current) !== null && _firstValueAgent$curr !== void 0 && _firstValueAgent$curr.accessibility) || !(modalValues !== null && modalValues !== void 0 && modalValues.accessibility)) return true;
280
- var accessTypeSame = modalValues.accessibility.accessType === firstValueAgent.current.accessibility.accessType;
281
- var clientsSame = areClientsArraysEqual(modalValues.accessibility.clients, firstValueAgent.current.accessibility.clients);
282
- var currentCorAccess = (_modalValues$accessib = modalValues.accessibility.corAccess) !== null && _modalValues$accessib !== void 0 ? _modalValues$accessib : DEFAULT_COR_ACCESS;
283
- var initialCorAccess = (_firstValueAgent$curr2 = firstValueAgent.current.accessibility.corAccess) !== null && _firstValueAgent$curr2 !== void 0 ? _firstValueAgent$curr2 : DEFAULT_COR_ACCESS;
284
- var corAccessSame = COR_TOOL_GROUP_SLUGS.every(function (slug) {
285
- return currentCorAccess[slug] === initialCorAccess[slug];
286
- });
287
- var currentConnectors = _toConsumableArray(modalValues.accessibility.selectedConnectors || []).sort();
288
- var originalConnectors = _toConsumableArray(firstValueAgent.current.accessibility.selectedConnectors || []).sort();
289
- var connectorsSame = currentConnectors.length === originalConnectors.length && currentConnectors.every(function (slug, index) {
290
- return slug === originalConnectors[index];
291
- });
292
- return !accessTypeSame || !clientsSame || !corAccessSame || !connectorsSame;
293
- };
294
- var validateAgentValuesIsSame = function validateAgentValuesIsSame() {
295
- var _firstValueAgent$curr3, _modalValues$general$, _firstValueAgent$curr4, _modalValues$knowledg, _firstValueAgent$curr5, _modalValues$knowledg2, _firstValueAgent$curr6, _actionsToFiles$curre, _actionsToFiles$curre2;
296
- if (!((_firstValueAgent$curr3 = firstValueAgent.current) !== null && _firstValueAgent$curr3 !== void 0 && _firstValueAgent$curr3.general) || !(modalValues !== null && modalValues !== void 0 && modalValues.general)) return false;
297
- return modalValues.general.name === firstValueAgent.current.general.name && modalValues.general.emoji === firstValueAgent.current.general.emoji && modalValues.general.introduction === firstValueAgent.current.general.introduction && modalValues.general.inputPlaceholder === firstValueAgent.current.general.inputPlaceholder && ((_modalValues$general$ = modalValues.general.aiModel) === null || _modalValues$general$ === void 0 ? void 0 : _modalValues$general$.id) === ((_firstValueAgent$curr4 = firstValueAgent.current.general.aiModel) === null || _firstValueAgent$curr4 === void 0 ? void 0 : _firstValueAgent$curr4.id) && modalValues.general.userPrompt === firstValueAgent.current.general.userPrompt && (((_modalValues$knowledg = modalValues.knowledge) === null || _modalValues$knowledg === void 0 ? void 0 : _modalValues$knowledg.length) === ((_firstValueAgent$curr5 = firstValueAgent.current) === null || _firstValueAgent$curr5 === void 0 || (_firstValueAgent$curr5 = _firstValueAgent$curr5.knowledge) === null || _firstValueAgent$curr5 === void 0 ? void 0 : _firstValueAgent$curr5.length) || !((_modalValues$knowledg2 = modalValues.knowledge) !== null && _modalValues$knowledg2 !== void 0 && _modalValues$knowledg2.length) && !((_firstValueAgent$curr6 = firstValueAgent.current) !== null && _firstValueAgent$curr6 !== void 0 && (_firstValueAgent$curr6 = _firstValueAgent$curr6.knowledge) !== null && _firstValueAgent$curr6 !== void 0 && _firstValueAgent$curr6.length)) && !((_actionsToFiles$curre = actionsToFiles.current.toUpdate) !== null && _actionsToFiles$curre !== void 0 && _actionsToFiles$curre.length) && !((_actionsToFiles$curre2 = actionsToFiles.current.toDelete) !== null && _actionsToFiles$curre2 !== void 0 && _actionsToFiles$curre2.length) && !hasAccessibilityChanged();
298
- };
299
- var hasAnyValueForCreation = function hasAnyValueForCreation() {
300
- var _modalValues$general$2, _agentModels$, _modalValues$general$3;
301
- if (modalValues.isEditing) return false;
302
- var isDefaultAiModel = !!agentModels.length && ((_modalValues$general$2 = modalValues.general.aiModel) === null || _modalValues$general$2 === void 0 ? void 0 : _modalValues$general$2.id) === ((_agentModels$ = agentModels[0]) === null || _agentModels$ === void 0 ? void 0 : _agentModels$.id);
303
- var defaultInputPlaceholder = t('generalSection.inputPlaceholder');
304
- var isDefaultInputPlaceholder = modalValues.general.inputPlaceholder === defaultInputPlaceholder;
305
- var defaultUserPromptPlaceholder = t('generalSection.initialPromptPlaceholder');
306
- var isDefaultUserPrompt = modalValues.general.userPrompt === defaultUserPromptPlaceholder || modalValues.general.userPrompt === '' || modalValues.general.userPrompt === null;
307
- var hasName = modalValues.general.name.trim() !== '';
308
- var hasEmoji = modalValues.general.emoji.trim() !== '';
309
- var hasIntroduction = modalValues.general.introduction.trim() !== '';
310
- var hasInputPlaceholder = modalValues.general.inputPlaceholder.trim() !== '' && !isDefaultInputPlaceholder;
311
- var hasUserPrompt = ((_modalValues$general$3 = modalValues.general.userPrompt) === null || _modalValues$general$3 === void 0 ? void 0 : _modalValues$general$3.trim()) !== '' && !isDefaultUserPrompt;
312
- var hasKnowledge = !!modalValues.knowledge.length;
313
- var hasCustomAiModel = modalValues.general.aiModel && !isDefaultAiModel;
314
- var hasAccessibility = modalValues.accessibility.accessType !== 'company';
315
- return hasName || hasEmoji || hasIntroduction || hasInputPlaceholder || hasUserPrompt || hasKnowledge || hasCustomAiModel || hasAccessibility;
316
- };
317
- var hasChangesForEditing = function hasChangesForEditing() {
318
- if (!modalValues.isEditing) return false;
319
- return !validateAgentValuesIsSame() || !!actionsToFiles.current.toDelete.length || !!actionsToFiles.current.toUpload.length;
196
+ var _firstValueAgent$curr;
197
+ return hasAccessibilitySectionChanged(modalValues.accessibility, (_firstValueAgent$curr = firstValueAgent.current) === null || _firstValueAgent$curr === void 0 ? void 0 : _firstValueAgent$curr.accessibility);
320
198
  };
321
199
  var hasPendingChanges = function hasPendingChanges() {
322
- return hasAnyValueForCreation() || hasChangesForEditing();
200
+ return hasAbmPendingChanges(modalValues, firstValueAgent.current, actionsToFiles.current, creationDraftDefaults);
201
+ };
202
+ var validateAgentValuesIsSame = function validateAgentValuesIsSame() {
203
+ return Boolean(firstValueAgent.current && isSameAgentModalSnapshot(modalValues, firstValueAgent.current, actionsToFiles.current));
323
204
  };
324
205
 
325
206
  // Helper para manejar el toggle de favorito y actualizar el estado con ordenamiento
@@ -337,7 +218,11 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
337
218
  }, agent.is_favorite);
338
219
  }, [toggleFavorite, updateAgentFavorite]);
339
220
  var handleClose = function handleClose() {
340
- if (hasPendingChanges() && !successCreate && !successUpdate && !successDelete) {
221
+ if (shouldConfirmAbmClose(hasPendingChanges(), {
222
+ create: successCreate,
223
+ update: successUpdate,
224
+ "delete": successDelete
225
+ })) {
341
226
  var confirmMessage = modalValues.isEditing ? t('confirmCloseEditAgent') : t('confirmCloseCreateAgent');
342
227
  if (!window.confirm(confirmMessage)) {
343
228
  return;
@@ -367,6 +252,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
367
252
  setFilesProcessed(0);
368
253
  setSection('general');
369
254
  setIsOpen(false);
255
+ hydratingAgentIdRef.current = null;
370
256
  agentCreatedRef.current = null;
371
257
  pendingInitialSectionRef.current = null;
372
258
  prefetchedAgentByIdRef.current = null;
@@ -388,8 +274,8 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
388
274
  deleteKnowledge = _ref2.deleteKnowledge;
389
275
  if (key === 'knowledge') {
390
276
  if (!deleteKnowledge) {
391
- var _actionsToFiles$curre3;
392
- (_actionsToFiles$curre3 = actionsToFiles.current.toUpload).push.apply(_actionsToFiles$curre3, _toConsumableArray(value || []));
277
+ var _actionsToFiles$curre;
278
+ (_actionsToFiles$curre = actionsToFiles.current.toUpload).push.apply(_actionsToFiles$curre, _toConsumableArray(value || []));
393
279
  } else {
394
280
  var filesPrevIds = value.length ? new Set(value.map(function (file) {
395
281
  return file.id;
@@ -421,7 +307,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
421
307
  };
422
308
  var _handleConfirmAction = /*#__PURE__*/function () {
423
309
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat, action) {
424
- var _modalValues$accessib2;
310
+ var _modalValues$accessib;
425
311
  var corAccess;
426
312
  return _regeneratorRuntime.wrap(function (_context) {
427
313
  while (1) switch (_context.prev = _context.next) {
@@ -440,7 +326,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
440
326
  handleDeleteAgent(chat.id);
441
327
  return _context.abrupt("return");
442
328
  case 2:
443
- corAccess = (_modalValues$accessib2 = modalValues.accessibility.corAccess) !== null && _modalValues$accessib2 !== void 0 ? _modalValues$accessib2 : DEFAULT_COR_ACCESS;
329
+ corAccess = (_modalValues$accessib = modalValues.accessibility.corAccess) !== null && _modalValues$accessib !== void 0 ? _modalValues$accessib : DEFAULT_COR_ACCESS;
444
330
  eventAmplitude(EVENTS.confirmAction, {
445
331
  option: modalValues.isEditing ? 'edit' : 'create',
446
332
  cor_slugs: buildAgentToolGroupsRequest(corAccess),
@@ -481,6 +367,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
481
367
  var agentValues = event.detail.agentValues;
482
368
  var initialSection = agentValues === null || agentValues === void 0 ? void 0 : agentValues.initialSection;
483
369
  pendingInitialSectionRef.current = initialSection && ['general', 'knowledge', 'accessibility'].includes(initialSection) ? initialSection : null;
370
+ hydratingAgentIdRef.current = null;
484
371
  getAllAgentModels();
485
372
  setIsOpen(true);
486
373
  setIsLoading(true);
@@ -942,26 +829,13 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
942
829
  var fileStatus = modelData;
943
830
  if (fileStatus.status === 'done' || fileStatus.status === 'failed') {
944
831
  setModalValues(function (prev) {
945
- var updatedKnowledge = prev.knowledge.map(function (file) {
946
- if (file.name === fileStatus.filename) {
947
- return _objectSpread(_objectSpread({}, file), {}, {
948
- status: fileStatus.status,
949
- id: fileStatus.knowledge_base_id || file.id
950
- });
951
- }
952
- return file;
953
- });
954
- var hasPendingFiles = updatedKnowledge.some(function (file) {
955
- return file.status === 'pending';
956
- });
957
- var hasErrorFiles = updatedKnowledge.some(function (file) {
958
- return file.status === 'failed';
959
- });
960
- if (hasErrorFiles && !hasPendingFiles) {
832
+ var updatedKnowledge = applyKnowledgeFileStatusUpdate(prev.knowledge, fileStatus);
833
+ var uploadOutcome = resolveKnowledgeUploadOutcome(updatedKnowledge);
834
+ if (uploadOutcome === 'error') {
961
835
  hasPendingFilesRef.current = false;
962
836
  setIsShowProcessFiles(false);
963
837
  handleSnackbarError(modalValues.isEditing ? t('confirmAgentUpdatedWithFilesError') : t('confirmAgentWithFilesError'));
964
- } else if (!hasPendingFiles && !hasErrorFiles) {
838
+ } else if (uploadOutcome === 'complete') {
965
839
  hasPendingFilesRef.current = false;
966
840
  setIsShowProcessFiles(false);
967
841
 
@@ -1161,50 +1035,80 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1161
1035
  useEffect(function () {
1162
1036
  if (!isOpen || !agentModels.length) return;
1163
1037
  if (agentLoading && !prefetchedAgentByIdRef.current) return;
1164
- var applyEditingAgent = function applyEditingAgent(source) {
1165
- if (source.type !== 'custom' || !window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
1166
- handleSnackbarError(t('errorAccessDenied'));
1167
- setIsLoading(false);
1168
- setTimeout(function () {
1169
- handleClose();
1170
- }, 3000);
1171
- return false;
1172
- }
1173
- setModalValues(function (prev) {
1174
- var agentValuesToSet = buildEditingModalValuesFromAgentDetail(source, agentModels, prev);
1175
- firstValueAgent.current = agentValuesToSet;
1176
- return agentValuesToSet;
1177
- });
1178
- setIsLoading(false);
1179
- if (pendingInitialSectionRef.current) {
1180
- setSection(pendingInitialSectionRef.current);
1181
- pendingInitialSectionRef.current = null;
1182
- }
1183
- var agentId = source.id;
1184
- // Sin el feature no hidratamos conectores: la sección no se muestra y el
1185
- // guardado ni los toca, así que pedirlos sería una llamada de más.
1186
- if (agentId && hasMaiaExternalConnectorsAccess()) {
1187
- getAgentConnectors(agentId.toString()).then(function (connectors) {
1188
- var connected = deriveConnectedConnectorSlugs(connectors);
1189
- setModalValues(function (prev) {
1190
- var next = _objectSpread(_objectSpread({}, prev), {}, {
1191
- accessibility: _objectSpread(_objectSpread({}, prev.accessibility), {}, {
1192
- selectedConnectors: connected
1193
- })
1194
- });
1195
- firstValueAgent.current = _objectSpread(_objectSpread({}, firstValueAgent.current), {}, {
1196
- accessibility: _objectSpread(_objectSpread({}, firstValueAgent.current.accessibility), {}, {
1197
- selectedConnectors: connected
1198
- })
1199
- });
1200
- return next;
1201
- });
1202
- })["catch"](function (error) {
1203
- console.error('Error fetching agent connectors:', error);
1204
- });
1205
- }
1206
- return true;
1207
- };
1038
+ var applyEditingAgent = /*#__PURE__*/function () {
1039
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(source) {
1040
+ var agentId, agentValuesToSet, connectors, _t;
1041
+ return _regeneratorRuntime.wrap(function (_context2) {
1042
+ while (1) switch (_context2.prev = _context2.next) {
1043
+ case 0:
1044
+ if (!(source.type !== 'custom' || !window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS)) {
1045
+ _context2.next = 1;
1046
+ break;
1047
+ }
1048
+ handleSnackbarError(t('errorAccessDenied'));
1049
+ setIsLoading(false);
1050
+ setTimeout(function () {
1051
+ handleClose();
1052
+ }, 3000);
1053
+ return _context2.abrupt("return", false);
1054
+ case 1:
1055
+ agentId = source.id != null ? String(source.id) : null;
1056
+ if (!(agentId && hydratingAgentIdRef.current === agentId)) {
1057
+ _context2.next = 2;
1058
+ break;
1059
+ }
1060
+ return _context2.abrupt("return", true);
1061
+ case 2:
1062
+ hydratingAgentIdRef.current = agentId;
1063
+ agentValuesToSet = buildEditingModalValuesFromAgentDetail(source, agentModels, modalValues); // Keep the loading view until both the agent and its connector status are ready.
1064
+ if (!(agentId && hasMaiaExternalConnectorsAccess())) {
1065
+ _context2.next = 6;
1066
+ break;
1067
+ }
1068
+ _context2.prev = 3;
1069
+ _context2.next = 4;
1070
+ return getAgentConnectors(agentId);
1071
+ case 4:
1072
+ connectors = _context2.sent;
1073
+ agentValuesToSet = _objectSpread(_objectSpread({}, agentValuesToSet), {}, {
1074
+ accessibility: _objectSpread(_objectSpread({}, agentValuesToSet.accessibility), {}, {
1075
+ selectedConnectors: deriveAssignedConnectorSlugs(connectors),
1076
+ connectorStatuses: Object.fromEntries(connectors.map(function (connector) {
1077
+ return [connector.slug, connector.connection_status || (connector.user_authorized ? 'ok' : 'needs_attention')];
1078
+ }))
1079
+ })
1080
+ });
1081
+ _context2.next = 6;
1082
+ break;
1083
+ case 5:
1084
+ _context2.prev = 5;
1085
+ _t = _context2["catch"](3);
1086
+ console.error('Error fetching agent connectors:', _t);
1087
+ case 6:
1088
+ if (!(hydratingAgentIdRef.current !== agentId)) {
1089
+ _context2.next = 7;
1090
+ break;
1091
+ }
1092
+ return _context2.abrupt("return", false);
1093
+ case 7:
1094
+ firstValueAgent.current = agentValuesToSet;
1095
+ setModalValues(agentValuesToSet);
1096
+ setIsLoading(false);
1097
+ if (pendingInitialSectionRef.current) {
1098
+ setSection(pendingInitialSectionRef.current);
1099
+ pendingInitialSectionRef.current = null;
1100
+ }
1101
+ return _context2.abrupt("return", true);
1102
+ case 8:
1103
+ case "end":
1104
+ return _context2.stop();
1105
+ }
1106
+ }, _callee2, null, [[3, 5]]);
1107
+ }));
1108
+ return function applyEditingAgent(_x3) {
1109
+ return _ref5.apply(this, arguments);
1110
+ };
1111
+ }();
1208
1112
  var prefetched = prefetchedAgentByIdRef.current;
1209
1113
  if (prefetched) {
1210
1114
  prefetchedAgentByIdRef.current = null;
@@ -1241,14 +1145,9 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1241
1145
  }
1242
1146
  }, [errorGetAgentById]);
1243
1147
  var shouldDisableSaveForClients = useMemo(function () {
1244
- var _modalValues$accessib3;
1245
- if (!(modalValues !== null && modalValues !== void 0 && (_modalValues$accessib3 = modalValues.accessibility) !== null && _modalValues$accessib3 !== void 0 && _modalValues$accessib3.clients) || modalValues.accessibility.clients.length === 0) {
1246
- return false;
1247
- }
1248
- return modalValues.accessibility.clients.some(function (client) {
1249
- return client.is_active === false || client.is_deleted === true;
1250
- });
1251
- }, [modalValues === null || modalValues === void 0 || (_modalValues$accessib4 = modalValues.accessibility) === null || _modalValues$accessib4 === void 0 ? void 0 : _modalValues$accessib4.clients]);
1148
+ var _modalValues$accessib2;
1149
+ return hasInactiveAccessibilityClients(modalValues === null || modalValues === void 0 || (_modalValues$accessib2 = modalValues.accessibility) === null || _modalValues$accessib2 === void 0 ? void 0 : _modalValues$accessib2.clients);
1150
+ }, [modalValues === null || modalValues === void 0 || (_modalValues$accessib3 = modalValues.accessibility) === null || _modalValues$accessib3 === void 0 ? void 0 : _modalValues$accessib3.clients]);
1252
1151
  var handleToggleFavorite = function handleToggleFavorite() {
1253
1152
  var _modalValues$general;
1254
1153
  if (modalValues !== null && modalValues !== void 0 && (_modalValues$general = modalValues.general) !== null && _modalValues$general !== void 0 && _modalValues$general.id) {
@@ -1279,6 +1178,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1279
1178
  });
1280
1179
  }
1281
1180
  };
1181
+ if (!selector) return null;
1282
1182
  if (!isOpen || !(userPermissions !== null && userPermissions !== void 0 && userPermissions.create) && !(userPermissions !== null && userPermissions !== void 0 && userPermissions.edit) && !(userPermissions !== null && userPermissions !== void 0 && userPermissions["delete"])) return null;
1283
1183
  return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(Backdrop, {
1284
1184
  zIndex: abmAgentModalZIndex,
@@ -1426,14 +1326,32 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1426
1326
  gap: '24px'
1427
1327
  },
1428
1328
  children: /*#__PURE__*/_jsx(SCAAMSaveButton, {
1429
- isDisabled: !validateFieldValues(modalValues) || validateAgentValuesIsSame() || isLoading || isLoadingKnowledge || isLoadingCreate || isLoadingUpdateAccess || shouldDisableSaveForClients || hasFileErrors,
1329
+ isDisabled: isAbmSaveDisabled({
1330
+ values: modalValues,
1331
+ initial: firstValueAgent.current,
1332
+ fileActions: actionsToFiles.current,
1333
+ isLoading: isLoading,
1334
+ isLoadingKnowledge: isLoadingKnowledge,
1335
+ isLoadingCreate: isLoadingCreate,
1336
+ isLoadingUpdateAccess: isLoadingUpdateAccess,
1337
+ hasFileErrors: hasFileErrors
1338
+ }),
1430
1339
  children: /*#__PURE__*/_jsx(CUButton, {
1431
1340
  variant: "contained",
1432
1341
  size: "medium",
1433
1342
  onClick: function onClick() {
1434
1343
  _handleConfirmAction(null, 'create');
1435
1344
  },
1436
- disabled: !validateFieldValues(modalValues) || validateAgentValuesIsSame() || isLoading || isLoadingKnowledge || isLoadingCreate || isLoadingUpdateAccess || shouldDisableSaveForClients || hasFileErrors,
1345
+ disabled: isAbmSaveDisabled({
1346
+ values: modalValues,
1347
+ initial: firstValueAgent.current,
1348
+ fileActions: actionsToFiles.current,
1349
+ isLoading: isLoading,
1350
+ isLoadingKnowledge: isLoadingKnowledge,
1351
+ isLoadingCreate: isLoadingCreate,
1352
+ isLoadingUpdateAccess: isLoadingUpdateAccess,
1353
+ hasFileErrors: hasFileErrors
1354
+ }),
1437
1355
  children: modalValues.isEditing ? t('saveChanges') : t('createAgentLabelButton')
1438
1356
  })
1439
1357
  })
@@ -1458,4 +1376,4 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1458
1376
  })]
1459
1377
  }), selector);
1460
1378
  };
1461
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsImNyZWF0ZVBvcnRhbCIsInVzZVRyYW5zbGF0aW9uIiwiQ1VCdXR0b24iLCJDYXRlZ29yeSIsIkFsZXJ0IiwiVHJhc2giLCJTdGFyIiwiQ3Jvc3MiLCJTcGlubmVyTG90dGllIiwiVG9vbHRpcCIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiQmFja2Ryb3AiLCJ1c2VVc2VyIiwiQWNjZXNzaWJpbGl0eUljb24iLCJCcmFpbkljb24iLCJ1c2VBZ2VudE1vZGVsIiwidXNlR2V0QWdlbnRCeUlkIiwiQWJtR2VuZXJhbFNlY3Rpb24iLCJBYm1Lbm93bGVkZ2VTZWN0aW9uIiwiU0NBQU1Db250ZW50IiwiU0NBQU1Gb290ZXIiLCJTQ0FBTUhlYWRlciIsIlNDQUFNSGVhZGVyVGl0bGUiLCJTQ0FBTUhlYWRlckxlZnQiLCJTQ0FBTUhlYWRlckZhdm9yaXRlIiwiU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbiIsIlNDQUFNU2lkZWJhciIsIlNDQUFNV3JhcHBlciIsIlNDQUFNU2lkZWJhckl0ZW0iLCJTQ0FBTVNpZGViYXJJdGVtVGl0bGUiLCJTQ0FBTURlbGV0ZUJ1dHRvbiIsIlNDQUFNU2F2ZUJ1dHRvbiIsIlNDQUFNV3JhcHBlclNwaW5uZXIiLCJTQ0FBTVdyYXBwZXJTcGlubmVyQ29udGVudCIsIlNDQUFNU2lkZWJhckl0ZW1FcnJvciIsInVzZUNyZWF0ZUFnZW50IiwidXNlRGVsZXRlQWdlbnQiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlVXBkYXRlQWdlbnQiLCJ1c2VLbm93bGVkZ2VPcGVyYXRpb25zIiwiQWJtTG9hZGVyRmlsZXMiLCJXcmFwcGVyQ2VudGVySWNvbiIsIkVWRU5UUyIsInVzZUV2ZW50IiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsInVzZU1haWFUYXNrUGFuZWxaSW5kZXgiLCJ1c2VBY2Nlc3NDbGllbnQiLCJ1c2VUb2dnbGVGYXZvcml0ZSIsImRlcml2ZUNvbm5lY3RlZENvbm5lY3RvclNsdWdzIiwiZGVyaXZlQ29yQWNjZXNzRnJvbVRvb2xHcm91cFNsdWdzIiwiREVGQVVMVF9DT1JfQUNDRVNTIiwiQ09SX1RPT0xfR1JPVVBfU0xVR1MiLCJidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QiLCJnZXRBZ2VudENvbm5lY3RvcnMiLCJoYXNNYWlhRXh0ZXJuYWxDb25uZWN0b3JzQWNjZXNzIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiaW5pdGlhbFZhbHVlcyIsIk9iamVjdCIsImZyZWV6ZSIsImlzRWRpdGluZyIsImtub3dsZWRnZSIsImdlbmVyYWwiLCJuYW1lIiwiZW1vamkiLCJpbnRyb2R1Y3Rpb24iLCJpbnB1dFBsYWNlaG9sZGVyIiwiaXNBY3RpdmUiLCJhaU1vZGVsIiwiaWQiLCJ1c2VyUHJvbXB0Iiwia25vd2xlZGdlQmFzZXMiLCJpc19mYXZvcml0ZSIsImFjY2Vzc2liaWxpdHkiLCJhY2Nlc3NUeXBlIiwiY2xpZW50cyIsImNvckFjY2VzcyIsInNlbGVjdGVkQ29ubmVjdG9ycyIsIlNlY3Rpb25CeUtleSIsInByb3BzIiwiX29iamVjdFNwcmVhZCIsInZhbGlkYXRlRmllbGRWYWx1ZXMiLCJ2YWx1ZVRvVmFsaWRhdGUiLCJidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbCIsImFnZW50QnlJZCIsImFnZW50TW9kZWxzIiwicHJldiIsIl9hZ2VudEJ5SWQka25vd2xlZGdlQiIsIl9hZ2VudEJ5SWQkY2xpZW50cyIsImFnZW50TW9kZWwiLCJmaW5kIiwibW9kZWwiLCJtb2RlbEFpSWQiLCJjcmVhdGVkX2J5IiwiY3JlYXRlZEJ5IiwibWFwIiwiayIsImZpbGUiLCJGaWxlIiwiZmlsZW5hbWUiLCJ0b1N0cmluZyIsInNpemUiLCJmaWxlX3NpemVfYnl0ZXMiLCJ0eXBlIiwib3JpZ2luYWxfZmlsZV90eXBlIiwic3RhdHVzIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsImFjY2VzcyIsImNsaWVudCIsIl9jbGllbnQkaWQiLCJfY2xpZW50JGlzX2FjdGl2ZSIsIl9jbGllbnQkaXNfZGVsZXRlZCIsImlzX2FjdGl2ZSIsImlzX2RlbGV0ZWQiLCJ0b29sR3JvdXBTbHVncyIsIkFibUFnZW50TW9kYWwiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJfbW9kYWxWYWx1ZXMkYWNjZXNzaWI0IiwiX21vZGFsVmFsdWVzJGdlbmVyYWwzIiwiX21vZGFsVmFsdWVzJGdlbmVyYWw0IiwiX21vZGFsVmFsdWVzJGdlbmVyYWw1IiwiX21vZGFsVmFsdWVzJGdlbmVyYWw2IiwiYWRkQWdlbnQiLCJ1cGRhdGVBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnRGYXZvcml0ZSIsInNlbGVjdEZpcnN0QWdlbnQiLCJ1c2VyIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlVHJhbnNsYXRpb24iLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJjdXJyZW50U2VsZWN0ZWRBZ2VudCIsImFnZW50Iiwic2VsZWN0QWdlbnQiLCJhYm1BZ2VudE1vZGFsWkluZGV4IiwidG9vbHRpcFpJbmRleCIsIl91c2VUb2dnbGVGYXZvcml0ZSIsInRvZ2dsZUZhdm9yaXRlIiwic2VsZWN0b3IiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNTdWJzY3JpYmVkIiwic2V0SXNTdWJzY3JpYmVkIiwibW9kYWxSZWYiLCJoYXNQZW5kaW5nRmlsZXNSZWYiLCJhY3Rpb25zVG9GaWxlcyIsInRvRGVsZXRlIiwidG9VcGxvYWQiLCJhY2Nlc3NVcGRhdGVDb250ZXh0IiwiaXNGcm9tQ3JlYXRpb24iLCJpc0Zyb21FZGl0aW5nIiwiaGFzQWN0aW9uRmlsZXMiLCJvcGVyYXRpb25UeXBlIiwiaGFzQmVlbkNhbGxlZCIsImFjY2Vzc0hhbmRsZWRSZWYiLCJhZ2VudENyZWF0ZWRSZWYiLCJwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYiLCJwcmVmZXRjaGVkQWdlbnRCeUlkUmVmIiwiZmlsZXNGaW5pc2hlZFJlZiIsInByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJmaWxlc1Byb2Nlc3NlZCIsInNldEZpbGVzUHJvY2Vzc2VkIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dNb2RhbERlbGV0ZSIsInNldFNob3dNb2RhbERlbGV0ZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VjdGlvbiIsInNldFNlY3Rpb24iLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwibW9kYWxWYWx1ZXMiLCJzZXRNb2RhbFZhbHVlcyIsIl91c2VHZXRBZ2VudEJ5SWQiLCJhZ2VudExvYWRpbmciLCJsb2FkaW5nIiwiaGFuZGxlR2V0QWdlbnRCeUlkIiwiaGFuZGxlQ2xlYW5BZ2VudCIsImVycm9yR2V0QWdlbnRCeUlkIiwiZXJyb3IiLCJfdXNlQWdlbnRNb2RlbCIsImdldEFsbEFnZW50TW9kZWxzIiwiZmlyc3RWYWx1ZUFnZW50IiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsImlzU2hvd1Byb2Nlc3NGaWxlcyIsInNldElzU2hvd1Byb2Nlc3NGaWxlcyIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJoYXNGaWxlRXJyb3JzIiwic2V0SGFzRmlsZUVycm9ycyIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiX3VzZURlbGV0ZUFnZW50IiwiaGFuZGxlRGVsZXRlQWdlbnQiLCJzdWNjZXNzRGVsZXRlIiwic3VjY2VzcyIsInJlc2V0U3VjY2VzcyIsIl91c2VVcGRhdGVBZ2VudCIsImhhbmRsZVVwZGF0ZUFnZW50Iiwic3VjY2Vzc1VwZGF0ZSIsInJlc2V0U3VjY2Vzc1VwZGF0ZSIsIl91c2VDcmVhdGVBZ2VudCIsImhhbmRsZUNyZWF0ZUFnZW50IiwiaXNMb2FkaW5nQ3JlYXRlIiwic3VjY2Vzc0NyZWF0ZSIsInJlc2V0U3VjY2Vzc0NyZWF0ZSIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhclN1Y2Nlc3MiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiX3VzZUtub3dsZWRnZU9wZXJhdGlvIiwiaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyIsImhhbmRsZURlbGV0ZUtub3dsZWRnZXMiLCJoYW5kbGVEZWxldGVBbmRDcmVhdGVLbm93bGVkZ2VzIiwiaXNMb2FkaW5nS25vd2xlZGdlIiwiZXJyb3JLbm93bGVkZ2UiLCJzdWNjZXNzS25vd2xlZGdlRGVsZXRlIiwiaGFuZGxlUmVzZXRTdWNjZXNzU2F2ZSIsImhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSIsIl91c2VBY2Nlc3NDbGllbnQiLCJoYW5kbGVBY2Nlc3NDbGllbnQiLCJzdWNjZXNzVXBkYXRlQWNjZXNzIiwiaXNMb2FkaW5nVXBkYXRlQWNjZXNzIiwicmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzIiwiaGFuZGxlUmVzZXRTdWNjZXNzIiwiYXJlQ2xpZW50c0FycmF5c0VxdWFsIiwiY2xpZW50czEiLCJjbGllbnRzMiIsImxlbmd0aCIsImNsaWVudHMxSWRzIiwiYyIsImNsaWVudElkIiwic29ydCIsImNsaWVudHMySWRzIiwiZXZlcnkiLCJpbmRleCIsImhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyIiwiX21vZGFsVmFsdWVzJGFjY2Vzc2liIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyMiIsImN1cnJlbnQiLCJhY2Nlc3NUeXBlU2FtZSIsImNsaWVudHNTYW1lIiwiY3VycmVudENvckFjY2VzcyIsImluaXRpYWxDb3JBY2Nlc3MiLCJjb3JBY2Nlc3NTYW1lIiwic2x1ZyIsImN1cnJlbnRDb25uZWN0b3JzIiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwib3JpZ2luYWxDb25uZWN0b3JzIiwiY29ubmVjdG9yc1NhbWUiLCJ2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyMyIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsJCIsIl9maXJzdFZhbHVlQWdlbnQkY3VycjQiLCJfbW9kYWxWYWx1ZXMka25vd2xlZGciLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnI1IiwiX21vZGFsVmFsdWVzJGtub3dsZWRnMiIsIl9maXJzdFZhbHVlQWdlbnQkY3VycjYiLCJfYWN0aW9uc1RvRmlsZXMkY3VycmUiLCJfYWN0aW9uc1RvRmlsZXMkY3VycmUyIiwidG9VcGRhdGUiLCJoYXNBbnlWYWx1ZUZvckNyZWF0aW9uIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwkMiIsIl9hZ2VudE1vZGVscyQiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbCQzIiwiaXNEZWZhdWx0QWlNb2RlbCIsImRlZmF1bHRJbnB1dFBsYWNlaG9sZGVyIiwiaXNEZWZhdWx0SW5wdXRQbGFjZWhvbGRlciIsImRlZmF1bHRVc2VyUHJvbXB0UGxhY2Vob2xkZXIiLCJpc0RlZmF1bHRVc2VyUHJvbXB0IiwiaGFzTmFtZSIsInRyaW0iLCJoYXNFbW9qaSIsImhhc0ludHJvZHVjdGlvbiIsImhhc0lucHV0UGxhY2Vob2xkZXIiLCJoYXNVc2VyUHJvbXB0IiwiaGFzS25vd2xlZGdlIiwiaGFzQ3VzdG9tQWlNb2RlbCIsImhhc0FjY2Vzc2liaWxpdHkiLCJoYXNDaGFuZ2VzRm9yRWRpdGluZyIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudCIsImFnZW50SWQiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwidXBkYXRlZEFnZW50IiwiaGFuZGxlQ2xvc2UiLCJjb25maXJtTWVzc2FnZSIsIndpbmRvdyIsImNvbmZpcm0iLCJoYW5kbGVCYWNrZHJvcENsaWNrIiwiZXZlbnQiLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiaGFuZGxlU2VjdGlvbkNoYW5nZSIsIm5ld1NlY3Rpb24iLCJ0YWJTZWN0aW9uIiwib3B0aW9uIiwiaGFuZGxlU2V0QWdlbnRWYWx1ZXNCeUtleXMiLCJfcmVmMiIsImtleSIsInZhbHVlIiwiZGVsZXRlS25vd2xlZGdlIiwiX2FjdGlvbnNUb0ZpbGVzJGN1cnJlMyIsInB1c2giLCJhcHBseSIsImZpbGVzUHJldklkcyIsIlNldCIsIm5ld0ZpbGVzIiwiZmlsdGVyIiwiaGFzIiwidmFsdWVJZHMiLCJjb25jYXQiLCJrbm93bGVkZ2VGaWxlcyIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiY2hhdCIsImFjdGlvbiIsIl9tb2RhbFZhbHVlcyRhY2Nlc3NpYjIiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFicnVwdCIsImNvbmZpcm1BY3Rpb24iLCJjb3Jfc2x1Z3MiLCJjb3JfYWNjZXNzIiwic3RvcCIsIl94IiwiX3gyIiwiYXJndW1lbnRzIiwiaGFuZGxlU2V0QWdlbnRWYWx1ZXMiLCJfYWdlbnRWYWx1ZXMkdmFsdWVzIiwiX2FnZW50VmFsdWVzJHZhbHVlczMiLCJhZ2VudFZhbHVlcyIsImRldGFpbCIsImluaXRpYWxTZWN0aW9uIiwiaW5jbHVkZXMiLCJ2YWx1ZXMiLCJfYWdlbnRWYWx1ZXMkdmFsdWVzMiIsInByZWZldGNoZWRBZ2VudEJ5SWQiLCJuZXh0VmFsdWVzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfZG9jdW1lbnQiLCJib2R5Iiwib3JpZ2luYWxPdmVyZmxvdyIsInN0eWxlIiwib3ZlcmZsb3ciLCJoYW5kbGVCZWZvcmVVbmxvYWQiLCJwcmV2ZW50RGVmYXVsdCIsInJldHVyblZhbHVlIiwicHJvbWlzZXMiLCJmaWxlc1RvRGVsZXRlIiwiZmlsZXNUb0NyZWF0ZSIsImFnZW50V2l0aEZhdm9yaXRlIiwiYWdlbnRGb3JUb2dnbGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFsbCIsImZpbGVzIiwiYWlDaGF0RmF2b3JpdGUiLCJmaWxlc1RvVXBsb2FkIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlUHJvY2Vzc0ZpbGVzVGltZW91dCIsIndlYlNvY2tldEZ1bmN0aW9uIiwiX3JlZjQiLCJtb2RlbERhdGEiLCJtb2RlbF9kYXRhIiwiZmlsZVN0YXR1cyIsInVwZGF0ZWRLbm93bGVkZ2UiLCJrbm93bGVkZ2VfYmFzZV9pZCIsImhhc1BlbmRpbmdGaWxlcyIsInNvbWUiLCJoYXNFcnJvckZpbGVzIiwicHJldkNvdW50IiwiY29udGV4dCIsImFnZW50VG9BZGQiLCJfc3VjY2Vzc0NyZWF0ZSRpZCIsImNoYW5uZWwiLCIkX3NjIiwiXyRfc2MiLCJzdWJzY3JpYmVIYW5kbGVyIiwiXyRfc2MyIiwiXyRfc2MzIiwiXyRfc2MkY2hhbm5lbFR5cGUiLCJtb2RlbF9oYXNoIiwiYWN0aW9uVHlwZSIsIlNVQlNDUklCRSIsInVwZGF0ZUNvbm5lY3Rpb25Nb2RlbCIsImNoYW5uZWxUeXBlIiwiTU9ERUxfQ0hBTk5FTCIsImFwcGx5RWRpdGluZ0FnZW50Iiwic291cmNlIiwic2V0VGltZW91dCIsImFnZW50VmFsdWVzVG9TZXQiLCJ0aGVuIiwiY29ubmVjdG9ycyIsImNvbm5lY3RlZCIsImNvbnNvbGUiLCJwcmVmZXRjaGVkIiwic2hvdWxkRGlzYWJsZVNhdmVGb3JDbGllbnRzIiwiX21vZGFsVmFsdWVzJGFjY2Vzc2liMyIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDIiLCJjcmVhdGUiLCJlZGl0IiwiekluZGV4Iiwib25DbGljayIsImNoaWxkcmVuIiwicmVmIiwidGFiSW5kZXgiLCJjb2xvciIsImF0dGFjaG1lbnRzIiwibGFiZWwiLCJvblRpbWVvdXQiLCJ0aXRsZSIsIndpZHRoIiwiaGVpZ2h0IiwiZmlsbCIsInZhcmlhbnQiLCJjbGFzc05hbWUiLCJjYW5jZWxNb2RhbCIsImRpc2FibGVkIiwiaGFzU2Nyb2xsIiwiJGluZGV4IiwiZXhpc3RpbmdLbm93bGVkZ2UiLCJuZXdLbm93bGVkZ2UiLCJvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlIiwib25SZW1vdmVOZXdLbm93bGVkZ2UiLCJvbkZpbGVFcnJvckNoYW5nZSIsImNoaWxkcmVuV2l0aEljb24iLCJkaXNwbGF5IiwiZ2FwIiwiaXNEaXNhYmxlZCIsIm9uQ2xvc2UiLCJoYW5kbGVycyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWFsZXJ0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tY3ljbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DYXRlZ29yeSdcbmltcG9ydCB7IEFsZXJ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQWxlcnQnXG5pbXBvcnQgeyBUcmFzaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1RyYXNoJ1xuaW1wb3J0IHsgU3RhciB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXInXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgU3Bpbm5lckxvdHRpZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2Nvci1jb21tb25zL2xpYi9jb21wb25lbnRzL3NwaW5uZXItbG90dGllJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbidcbmltcG9ydCB7IEJhY2tkcm9wIH0gZnJvbSAnLi4vLi4vYXRvbXMvQmFja2Ryb3AnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEFjY2Vzc2liaWxpdHlJY29uLCBCcmFpbkljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IHVzZUFnZW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZUFnZW50TW9kZWwnXG5pbXBvcnQgeyBBZ2VudCwgQWdlbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgdXNlR2V0QWdlbnRCeUlkIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZ2V0QWdlbnRCeUlkJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQWJtR2VuZXJhbFNlY3Rpb24sIEFibUtub3dsZWRnZVNlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbidcbmltcG9ydCB7IE1vZGFsVmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnRNb2RhbCdcbmltcG9ydCB7XG4gIFNDQUFNQ29udGVudCxcbiAgU0NBQU1Gb290ZXIsXG4gIFNDQUFNSGVhZGVyLFxuICBTQ0FBTUhlYWRlclRpdGxlLFxuICBTQ0FBTUhlYWRlckxlZnQsXG4gIFNDQUFNSGVhZGVyRmF2b3JpdGUsXG4gIFNDQUFNSGVhZGVyQ2xvc2VCdXR0b24sXG4gIFNDQUFNU2lkZWJhcixcbiAgU0NBQU1XcmFwcGVyLFxuICBTQ0FBTVNpZGViYXJJdGVtLFxuICBTQ0FBTVNpZGViYXJJdGVtVGl0bGUsXG4gIFNDQUFNRGVsZXRlQnV0dG9uLFxuICBTQ0FBTVNhdmVCdXR0b24sXG4gIFNDQUFNV3JhcHBlclNwaW5uZXIsXG4gIFNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50LFxuICBTQ0FBTVNpZGViYXJJdGVtRXJyb3IsXG59IGZyb20gJy4vQWJtQWdlbnRNb2RhbC5zdHlsZXMnXG5pbXBvcnQgeyB1c2VDcmVhdGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlQ3JlYXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VEZWxldGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlRGVsZXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VVcGRhdGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlVXBkYXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VLbm93bGVkZ2VPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlS25vd2xlZGdlJ1xuaW1wb3J0IHsgQWJtTG9hZGVyRmlsZXMgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1Mb2FkZXJGaWxlcydcbmltcG9ydCB7IFdyYXBwZXJDZW50ZXJJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvV3JhcHBlckNlbnRlckljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQgeyB1c2VBY2Nlc3NDbGllbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBY2Nlc3NDbGllbnQvdXNlQWNjZXNzQ2xpZW50J1xuaW1wb3J0IHsgdXNlVG9nZ2xlRmF2b3JpdGUgfSBmcm9tICcuLi8uLi8uLi9ob29rcydcbmltcG9ydCB7XG4gIGRlcml2ZUNvbm5lY3RlZENvbm5lY3RvclNsdWdzLFxuICBkZXJpdmVDb3JBY2Nlc3NGcm9tVG9vbEdyb3VwU2x1Z3MsXG4gIERFRkFVTFRfQ09SX0FDQ0VTUyxcbiAgQ09SX1RPT0xfR1JPVVBfU0xVR1MsXG4gIGJ1aWxkQWdlbnRUb29sR3JvdXBzUmVxdWVzdCxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbm9ybWFsaXplQWdlbnRDb25uZWN0b3JzJ1xuaW1wb3J0IHsgZ2V0QWdlbnRDb25uZWN0b3JzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvY29ubmVjdG9ycydcbmltcG9ydCB7IGhhc01haWFFeHRlcm5hbENvbm5lY3RvcnNBY2Nlc3MgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvbWFpYUV4dGVybmFsQ29ubmVjdG9yc0FjY2VzcydcblxuY29uc3QgaW5pdGlhbFZhbHVlcyA9IE9iamVjdC5mcmVlemUoe1xuICBpc0VkaXRpbmc6IGZhbHNlLFxuICBrbm93bGVkZ2U6IFtdLFxuICBnZW5lcmFsOiB7XG4gICAgbmFtZTogJycsXG4gICAgZW1vamk6ICcnLFxuICAgIGludHJvZHVjdGlvbjogJycsXG4gICAgaW5wdXRQbGFjZWhvbGRlcjogJycsXG4gICAgaXNBY3RpdmU6IGZhbHNlLFxuICAgIGFpTW9kZWw6IG51bGwsXG4gICAgaWQ6IG51bGwsXG4gICAgdXNlclByb21wdDogbnVsbCxcbiAgICBrbm93bGVkZ2VCYXNlczogW10sXG4gICAgaXNfZmF2b3JpdGU6IGZhbHNlLFxuICB9LFxuICBhY2Nlc3NpYmlsaXR5OiB7XG4gICAgYWNjZXNzVHlwZTogJ2NvbXBhbnknLFxuICAgIGNsaWVudHM6IG51bGwsXG4gICAgY29yQWNjZXNzOiBERUZBVUxUX0NPUl9BQ0NFU1MsXG4gICAgc2VsZWN0ZWRDb25uZWN0b3JzOiBbXSxcbiAgfSxcbn0pXG5cbnR5cGUgQWJtU2VjdGlvbiA9ICdnZW5lcmFsJyB8ICdrbm93bGVkZ2UnIHwgJ3RyYWluaW5nJyB8ICd0ZXN0aW5nJyB8ICdhY2Nlc3NpYmlsaXR5J1xuXG5leHBvcnQgY29uc3QgU2VjdGlvbkJ5S2V5ID0ge1xuICBnZW5lcmFsOiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgICB9OiB7XG4gICAgICBrZXk6IHN0cmluZ1xuICAgICAgdmFsdWU6IHVua25vd25cbiAgICAgIGRlbGV0ZUtub3dsZWRnZT86IGJvb2xlYW5cbiAgICB9KSA9PiB2b2lkXG4gICAgYWdlbnRNb2RlbHM6IEFnZW50TW9kZWxbXVxuICAgIGxvYWRpbmc6IGJvb2xlYW5cbiAgICB0b29sdGlwWkluZGV4PzogbnVtYmVyXG4gIH0pID0+IDxBYm1HZW5lcmFsU2VjdGlvbiB7Li4ucHJvcHN9IC8+LFxuICBrbm93bGVkZ2U6IChwcm9wczoge1xuICAgIHZhbHVlczogTW9kYWxWYWx1ZXNcbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkXG4gICAgZXhpc3RpbmdLbm93bGVkZ2U6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBuZXdLbm93bGVkZ2U6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlOiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvblJlbW92ZU5ld0tub3dsZWRnZTogKGZpbGVJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25GaWxlRXJyb3JDaGFuZ2U6IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgICB0b29sdGlwWkluZGV4PzogbnVtYmVyXG4gIH0pID0+IDxBYm1Lbm93bGVkZ2VTZWN0aW9uIHsuLi5wcm9wc30gLz4sXG4gIGFjY2Vzc2liaWxpdHk6IChwcm9wczoge1xuICAgIHZhbHVlczogTW9kYWxWYWx1ZXNcbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkXG4gIH0pID0+IDxBYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbiB7Li4ucHJvcHN9IC8+LFxufVxuXG50eXBlIEFibUFnZW50TW9kYWxQcm9wcyA9IHtcbiAgYWRkQWdlbnQ6IChuZXdBZ2VudDogQWdlbnQsIG9wdGlvbnM/OiB7IG5hdmlnYXRlSG9tZT86IGJvb2xlYW4gfSkgPT4gdm9pZFxuICByZW1vdmVBZ2VudDogKGFnZW50SWQ6IG51bWJlciB8IHN0cmluZykgPT4gdm9pZFxuICB1cGRhdGVBZ2VudDogKHVwZGF0ZWRBZ2VudDogQWdlbnQpID0+IHZvaWRcbiAgdXBkYXRlQWdlbnRGYXZvcml0ZTogKHVwZGF0ZWRBZ2VudDogQWdlbnQsIHNob3VsZFNvcnQ/OiBib29sZWFuKSA9PiB2b2lkXG4gIHNlbGVjdEZpcnN0QWdlbnQ6IChhZ2VudElkOiBzdHJpbmcpID0+IHZvaWRcbn1cblxuY29uc3QgdmFsaWRhdGVGaWVsZFZhbHVlcyA9ICh2YWx1ZVRvVmFsaWRhdGU6IE1vZGFsVmFsdWVzKSA9PiB7XG4gIGlmICghdmFsdWVUb1ZhbGlkYXRlLmdlbmVyYWwubmFtZSB8fCAhdmFsdWVUb1ZhbGlkYXRlLmdlbmVyYWwudXNlclByb21wdCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKiBNaXNtYSBlc3RydWN0dXJhIHF1ZSBlbCBlZmVjdG8gcXVlIGhpZHJhdGEgZGVzZGUgdXNlR2V0QWdlbnRCeUlkICh0b2RhcyBsYXMgcGVzdGHDsWFzIGRlbCBBQk0pLiAqL1xuZnVuY3Rpb24gYnVpbGRFZGl0aW5nTW9kYWxWYWx1ZXNGcm9tQWdlbnREZXRhaWwoXG4gIGFnZW50QnlJZDogYW55LFxuICBhZ2VudE1vZGVsczogQWdlbnRNb2RlbFtdLFxuICBwcmV2OiBNb2RhbFZhbHVlc1xuKTogTW9kYWxWYWx1ZXMge1xuICBjb25zdCBhZ2VudE1vZGVsID0gYWdlbnRNb2RlbHMuZmluZChtb2RlbCA9PiBtb2RlbC5pZCA9PT0gYWdlbnRCeUlkLm1vZGVsQWlJZClcbiAgcmV0dXJuIHtcbiAgICAuLi5wcmV2LFxuICAgIGlzRWRpdGluZzogdHJ1ZSxcbiAgICBnZW5lcmFsOiB7XG4gICAgICBlbW9qaTogYWdlbnRCeUlkLmVtb2ppLFxuICAgICAgbmFtZTogYWdlbnRCeUlkLm5hbWUsXG4gICAgICBpbnRyb2R1Y3Rpb246IGFnZW50QnlJZC5pbnRyb2R1Y3Rpb24sXG4gICAgICBpbnB1dFBsYWNlaG9sZGVyOiBhZ2VudEJ5SWQuaW5wdXRQbGFjZWhvbGRlcixcbiAgICAgIGlzQWN0aXZlOiBhZ2VudEJ5SWQuaXNBY3RpdmUsXG4gICAgICBhaU1vZGVsOiBhZ2VudE1vZGVsIHx8IG51bGwsXG4gICAgICBpZDogYWdlbnRCeUlkLmlkLFxuICAgICAgdXNlclByb21wdDogYWdlbnRCeUlkLnVzZXJQcm9tcHQsXG4gICAgICBrbm93bGVkZ2VCYXNlczogW10sXG4gICAgICBpc19mYXZvcml0ZTogYWdlbnRCeUlkLmlzX2Zhdm9yaXRlLFxuICAgICAgY3JlYXRlZF9ieTogYWdlbnRCeUlkLmNyZWF0ZWRCeSxcbiAgICB9LFxuICAgIGtub3dsZWRnZTpcbiAgICAgIGFnZW50QnlJZC5rbm93bGVkZ2VCYXNlcz8ubWFwKChrOiBhbnkpID0+ICh7XG4gICAgICAgIGZpbGU6IG5ldyBGaWxlKFtdLCBrLmZpbGVuYW1lKSxcbiAgICAgICAgaWQ6IGsuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogay5maWxlbmFtZSxcbiAgICAgICAgc2l6ZTogay5maWxlX3NpemVfYnl0ZXMgfHwgMCxcbiAgICAgICAgdHlwZTogay5vcmlnaW5hbF9maWxlX3R5cGUsXG4gICAgICAgIHN0YXR1czogay5zdGF0dXMsXG4gICAgICAgIHVybF9vcmlnaW5hbDogay51cmxfb3JpZ2luYWwgfHwgdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiBrLnVybF90aHVtYm5haWwgfHwgdW5kZWZpbmVkLFxuICAgICAgfSkpIHx8IFtdLFxuICAgIGFjY2Vzc2liaWxpdHk6IHtcbiAgICAgIGFjY2Vzc1R5cGU6IGFnZW50QnlJZC5hY2Nlc3MsXG4gICAgICBjbGllbnRzOlxuICAgICAgICBhZ2VudEJ5SWQuY2xpZW50cz8ubWFwKChjbGllbnQ6IGFueSkgPT4gKHtcbiAgICAgICAgICBpZDogY2xpZW50LmlkPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgIG5hbWU6IGNsaWVudC5uYW1lLFxuICAgICAgICAgIGlzX2FjdGl2ZTogY2xpZW50LmlzX2FjdGl2ZSA/PyBmYWxzZSxcbiAgICAgICAgICBpc19kZWxldGVkOiBjbGllbnQuaXNfZGVsZXRlZCA/PyBmYWxzZSxcbiAgICAgICAgfSkpIHx8IG51bGwsXG4gICAgICBjb3JBY2Nlc3M6IGRlcml2ZUNvckFjY2Vzc0Zyb21Ub29sR3JvdXBTbHVncyhhZ2VudEJ5SWQudG9vbEdyb3VwU2x1Z3MpLFxuICAgICAgc2VsZWN0ZWRDb25uZWN0b3JzOiBbXSxcbiAgICB9LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBBYm1BZ2VudE1vZGFsID0gKHtcbiAgYWRkQWdlbnQsXG4gIHVwZGF0ZUFnZW50LFxuICByZW1vdmVBZ2VudCxcbiAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgc2VsZWN0Rmlyc3RBZ2VudCxcbn06IEFibUFnZW50TW9kYWxQcm9wcykgPT4ge1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhYm1fYWdlbnRfc2VjdGlvbicpXG4gIC8vIGNvbnN0ICRfc2M6IGFueSA9IG51bGxcbiAgY29uc3QgeyBhZ2VudDogY3VycmVudFNlbGVjdGVkQWdlbnQsIHNlbGVjdEFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgYWJtQWdlbnRNb2RhbFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTExMiwgJ2FnZW50TW9kYWwnKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnbmVzdGVkTW9kYWwnKVxuICBjb25zdCB7IHRvZ2dsZUZhdm9yaXRlIH0gPSB1c2VUb2dnbGVGYXZvcml0ZSgpXG4gIGNvbnN0IHNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FibS1hZ2VudC1tb2RhbCcpXG4gIGNvbnN0IFtpc1N1YnNjcmliZWQsIHNldElzU3Vic2NyaWJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgbW9kYWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGhhc1BlbmRpbmdGaWxlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYWN0aW9uc1RvRmlsZXMgPSB1c2VSZWY8YW55Pih7XG4gICAgdG9EZWxldGU6IFtdLFxuICAgIHRvVXBsb2FkOiBbXSxcbiAgfSlcbiAgY29uc3QgYWNjZXNzVXBkYXRlQ29udGV4dCA9IHVzZVJlZjx7XG4gICAgaXNGcm9tQ3JlYXRpb246IGJvb2xlYW5cbiAgICBpc0Zyb21FZGl0aW5nOiBib29sZWFuXG4gICAgaGFzQWN0aW9uRmlsZXM6IGJvb2xlYW5cbiAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyB8ICd1cGRhdGUnIHwgbnVsbFxuICAgIGhhc0JlZW5DYWxsZWQ/OiBib29sZWFuXG4gIH0+KHtcbiAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gIH0pXG4gIGNvbnN0IGFjY2Vzc0hhbmRsZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGFnZW50Q3JlYXRlZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYgPSB1c2VSZWY8QWJtU2VjdGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHByZWZldGNoZWRBZ2VudEJ5SWRSZWYgPSB1c2VSZWY8YW55PihudWxsKVxuICBjb25zdCBmaWxlc0ZpbmlzaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvLyBNYXJjYSBjdWFuZG8gY2VycmFtb3MgZWwgbG9hZGVyIHBvciBlbCB0aW1lb3V0IGRlIHNlZ3VyaWRhZCBkZSBhcmNoaXZvcy5cbiAgLy8gTWllbnRyYXMgZXN0w6kgYWN0aXZvLCBsb3MgdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gTk8gZGViZW4gZGlzcGFyYXJcbiAgLy8gc25hY2tiYXJzIGRlIMOpeGl0byBuaSBhdXRvLWNlcnJhciBlbCBtb2RhbC5cbiAgY29uc3QgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFtmaWxlc1Byb2Nlc3NlZCwgc2V0RmlsZXNQcm9jZXNzZWRdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd01vZGFsRGVsZXRlLCBzZXRTaG93TW9kYWxEZWxldGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWN0aW9uLCBzZXRTZWN0aW9uXSA9IHVzZVN0YXRlPEFibVNlY3Rpb24+KCdnZW5lcmFsJylcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxWYWx1ZXMsIHNldE1vZGFsVmFsdWVzXSA9IHVzZVN0YXRlPHtcbiAgICBnZW5lcmFsOiBhbnlcbiAgICBrbm93bGVkZ2U6IGFueVxuICAgIGlzRWRpdGluZzogYm9vbGVhblxuICAgIGFjY2Vzc2liaWxpdHk6IGFueVxuICB9Pihpbml0aWFsVmFsdWVzKVxuICBjb25zdCB7XG4gICAgbG9hZGluZzogYWdlbnRMb2FkaW5nLFxuICAgIGhhbmRsZUdldEFnZW50QnlJZCxcbiAgICBhZ2VudDogYWdlbnRCeUlkLFxuICAgIGhhbmRsZUNsZWFuQWdlbnQsXG4gICAgZXJyb3I6IGVycm9yR2V0QWdlbnRCeUlkLFxuICB9ID0gdXNlR2V0QWdlbnRCeUlkKClcbiAgY29uc3QgeyBhZ2VudE1vZGVscywgZ2V0QWxsQWdlbnRNb2RlbHMgfSA9IHVzZUFnZW50TW9kZWwoKVxuICBjb25zdCBmaXJzdFZhbHVlQWdlbnQgPSB1c2VSZWY8YW55PihudWxsKVxuICBjb25zdCBbaXNTaG93UHJvY2Vzc0ZpbGVzLCBzZXRJc1Nob3dQcm9jZXNzRmlsZXNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtoYXNGaWxlRXJyb3JzLCBzZXRIYXNGaWxlRXJyb3JzXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcblxuICBjb25zdCB7IGhhbmRsZURlbGV0ZUFnZW50LCBzdWNjZXNzOiBzdWNjZXNzRGVsZXRlLCByZXNldFN1Y2Nlc3MgfSA9IHVzZURlbGV0ZUFnZW50KClcbiAgY29uc3QgeyBoYW5kbGVVcGRhdGVBZ2VudCwgc3VjY2Vzczogc3VjY2Vzc1VwZGF0ZSwgcmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NVcGRhdGUgfSA9IHVzZVVwZGF0ZUFnZW50KClcblxuICBjb25zdCB7XG4gICAgaGFuZGxlQ3JlYXRlQWdlbnQsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdDcmVhdGUsXG4gICAgc3VjY2Vzczogc3VjY2Vzc0NyZWF0ZSxcbiAgICByZXNldFN1Y2Nlc3M6IHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgfSA9IHVzZUNyZWF0ZUFnZW50KClcblxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcblxuICBjb25zdCB7XG4gICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdLbm93bGVkZ2UsXG4gICAgZXJyb3I6IGVycm9yS25vd2xlZGdlLFxuICAgIHN1Y2Nlc3NEZWxldGU6IHN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzU2F2ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUsXG4gIH0gPSB1c2VLbm93bGVkZ2VPcGVyYXRpb25zKClcblxuICBjb25zdCB7XG4gICAgaGFuZGxlQWNjZXNzQ2xpZW50LFxuICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gIH0gPSB1c2VBY2Nlc3NDbGllbnQoKVxuXG4gIGlmICghc2VsZWN0b3IpIHJldHVybiBudWxsXG5cbiAgY29uc3QgYXJlQ2xpZW50c0FycmF5c0VxdWFsID0gKGNsaWVudHMxOiBhbnlbXSB8IG51bGwsIGNsaWVudHMyOiBhbnlbXSB8IG51bGwpID0+IHtcbiAgICBpZiAoIWNsaWVudHMxICYmICFjbGllbnRzMikgcmV0dXJuIHRydWVcbiAgICBpZiAoIWNsaWVudHMxIHx8ICFjbGllbnRzMikgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGNsaWVudHMxLmxlbmd0aCAhPT0gY2xpZW50czIubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGNsaWVudHMxSWRzID0gY2xpZW50czEubWFwKGMgPT4gYy5jbGllbnRJZCkuc29ydCgpXG4gICAgY29uc3QgY2xpZW50czJJZHMgPSBjbGllbnRzMi5tYXAoYyA9PiBjLmNsaWVudElkKS5zb3J0KClcblxuICAgIHJldHVybiBjbGllbnRzMUlkcy5ldmVyeSgoaWQsIGluZGV4KSA9PiBpZCA9PT0gY2xpZW50czJJZHNbaW5kZXhdKVxuICB9XG5cbiAgY29uc3QgaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8uYWNjZXNzaWJpbGl0eSB8fCAhbW9kYWxWYWx1ZXM/LmFjY2Vzc2liaWxpdHkpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBhY2Nlc3NUeXBlU2FtZSA9IG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlXG4gICAgY29uc3QgY2xpZW50c1NhbWUgPSBhcmVDbGllbnRzQXJyYXlzRXF1YWwoXG4gICAgICBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMsXG4gICAgICBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5hY2Nlc3NpYmlsaXR5LmNsaWVudHNcbiAgICApXG4gICAgY29uc3QgY3VycmVudENvckFjY2VzcyA9IG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuY29yQWNjZXNzID8/IERFRkFVTFRfQ09SX0FDQ0VTU1xuICAgIGNvbnN0IGluaXRpYWxDb3JBY2Nlc3MgPSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5hY2Nlc3NpYmlsaXR5LmNvckFjY2VzcyA/PyBERUZBVUxUX0NPUl9BQ0NFU1NcbiAgICBjb25zdCBjb3JBY2Nlc3NTYW1lID0gQ09SX1RPT0xfR1JPVVBfU0xVR1MuZXZlcnkoc2x1ZyA9PiBjdXJyZW50Q29yQWNjZXNzW3NsdWddID09PSBpbml0aWFsQ29yQWNjZXNzW3NsdWddKVxuICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0b3JzID0gWy4uLihtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LnNlbGVjdGVkQ29ubmVjdG9ycyB8fCBbXSldLnNvcnQoKVxuICAgIGNvbnN0IG9yaWdpbmFsQ29ubmVjdG9ycyA9IFsuLi4oZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuYWNjZXNzaWJpbGl0eS5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW10pXS5zb3J0KClcbiAgICBjb25zdCBjb25uZWN0b3JzU2FtZSA9XG4gICAgICBjdXJyZW50Q29ubmVjdG9ycy5sZW5ndGggPT09IG9yaWdpbmFsQ29ubmVjdG9ycy5sZW5ndGggJiZcbiAgICAgIGN1cnJlbnRDb25uZWN0b3JzLmV2ZXJ5KChzbHVnLCBpbmRleCkgPT4gc2x1ZyA9PT0gb3JpZ2luYWxDb25uZWN0b3JzW2luZGV4XSlcblxuICAgIHJldHVybiAhYWNjZXNzVHlwZVNhbWUgfHwgIWNsaWVudHNTYW1lIHx8ICFjb3JBY2Nlc3NTYW1lIHx8ICFjb25uZWN0b3JzU2FtZVxuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSA9ICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5nZW5lcmFsIHx8ICFtb2RhbFZhbHVlcz8uZ2VuZXJhbCkgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gKFxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5uYW1lID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLm5hbWUgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuZW1vamkgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuZW1vamkgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaW50cm9kdWN0aW9uID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmludHJvZHVjdGlvbiAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuYWlNb2RlbD8uaWQgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuYWlNb2RlbD8uaWQgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC51c2VyUHJvbXB0ICYmXG4gICAgICAobW9kYWxWYWx1ZXMua25vd2xlZGdlPy5sZW5ndGggPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5rbm93bGVkZ2U/Lmxlbmd0aCB8fFxuICAgICAgICAoIW1vZGFsVmFsdWVzLmtub3dsZWRnZT8ubGVuZ3RoICYmICFmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8ua25vd2xlZGdlPy5sZW5ndGgpKSAmJlxuICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGRhdGU/Lmxlbmd0aCAmJlxuICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGU/Lmxlbmd0aCAmJlxuICAgICAgIWhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKClcbiAgICApXG4gIH1cblxuICBjb25zdCBoYXNBbnlWYWx1ZUZvckNyZWF0aW9uID0gKCkgPT4ge1xuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgaXNEZWZhdWx0QWlNb2RlbCA9ICEhYWdlbnRNb2RlbHMubGVuZ3RoICYmIG1vZGFsVmFsdWVzLmdlbmVyYWwuYWlNb2RlbD8uaWQgPT09IGFnZW50TW9kZWxzWzBdPy5pZFxuXG4gICAgY29uc3QgZGVmYXVsdElucHV0UGxhY2Vob2xkZXIgPSB0KCdnZW5lcmFsU2VjdGlvbi5pbnB1dFBsYWNlaG9sZGVyJylcbiAgICBjb25zdCBpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyID09PSBkZWZhdWx0SW5wdXRQbGFjZWhvbGRlclxuXG4gICAgY29uc3QgZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciA9IHQoJ2dlbmVyYWxTZWN0aW9uLmluaXRpYWxQcm9tcHRQbGFjZWhvbGRlcicpXG4gICAgY29uc3QgaXNEZWZhdWx0VXNlclByb21wdCA9XG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09IGRlZmF1bHRVc2VyUHJvbXB0UGxhY2Vob2xkZXIgfHxcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gJycgfHxcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gbnVsbFxuXG4gICAgY29uc3QgaGFzTmFtZSA9IG1vZGFsVmFsdWVzLmdlbmVyYWwubmFtZS50cmltKCkgIT09ICcnXG4gICAgY29uc3QgaGFzRW1vamkgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmVtb2ppLnRyaW0oKSAhPT0gJydcbiAgICBjb25zdCBoYXNJbnRyb2R1Y3Rpb24gPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmludHJvZHVjdGlvbi50cmltKCkgIT09ICcnXG4gICAgY29uc3QgaGFzSW5wdXRQbGFjZWhvbGRlciA9IG1vZGFsVmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlci50cmltKCkgIT09ICcnICYmICFpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyXG4gICAgY29uc3QgaGFzVXNlclByb21wdCA9IG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdD8udHJpbSgpICE9PSAnJyAmJiAhaXNEZWZhdWx0VXNlclByb21wdFxuICAgIGNvbnN0IGhhc0tub3dsZWRnZSA9ICEhbW9kYWxWYWx1ZXMua25vd2xlZGdlLmxlbmd0aFxuICAgIGNvbnN0IGhhc0N1c3RvbUFpTW9kZWwgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmFpTW9kZWwgJiYgIWlzRGVmYXVsdEFpTW9kZWxcbiAgICBjb25zdCBoYXNBY2Nlc3NpYmlsaXR5ID0gbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueSdcblxuICAgIHJldHVybiAoXG4gICAgICBoYXNOYW1lIHx8XG4gICAgICBoYXNFbW9qaSB8fFxuICAgICAgaGFzSW50cm9kdWN0aW9uIHx8XG4gICAgICBoYXNJbnB1dFBsYWNlaG9sZGVyIHx8XG4gICAgICBoYXNVc2VyUHJvbXB0IHx8XG4gICAgICBoYXNLbm93bGVkZ2UgfHxcbiAgICAgIGhhc0N1c3RvbUFpTW9kZWwgfHxcbiAgICAgIGhhc0FjY2Vzc2liaWxpdHlcbiAgICApXG4gIH1cblxuICBjb25zdCBoYXNDaGFuZ2VzRm9yRWRpdGluZyA9ICgpID0+IHtcbiAgICBpZiAoIW1vZGFsVmFsdWVzLmlzRWRpdGluZykgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gKFxuICAgICAgIXZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUoKSB8fFxuICAgICAgISFhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLmxlbmd0aCB8fFxuICAgICAgISFhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmxlbmd0aFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhc1BlbmRpbmdDaGFuZ2VzID0gKCkgPT4ge1xuICAgIHJldHVybiBoYXNBbnlWYWx1ZUZvckNyZWF0aW9uKCkgfHwgaGFzQ2hhbmdlc0ZvckVkaXRpbmcoKVxuICB9XG5cbiAgLy8gSGVscGVyIHBhcmEgbWFuZWphciBlbCB0b2dnbGUgZGUgZmF2b3JpdG8geSBhY3R1YWxpemFyIGVsIGVzdGFkbyBjb24gb3JkZW5hbWllbnRvXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoYWdlbnRJZDogc3RyaW5nLCBhZ2VudDogQWdlbnQsIG9uU3VjY2Vzcz86ICh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB2b2lkLCBvbkVycm9yPzogKCkgPT4gdm9pZCkgPT4ge1xuICAgICAgdG9nZ2xlRmF2b3JpdGUoXG4gICAgICAgIGFnZW50SWQsXG4gICAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgICAgLy8gQWN0dWFsaXphciBlbCBlc3RhZG8gZGUgYWdlbnRlcyBjb24gZWwgcmVzdWx0YWRvIGRlbCBzZXJ2aWRvciB5IG9yZGVuYXJcbiAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlKHVwZGF0ZWRBZ2VudCwgdHJ1ZSlcbiAgICAgICAgICBpZiAob25TdWNjZXNzKSB7XG4gICAgICAgICAgICBvblN1Y2Nlc3ModXBkYXRlZEFnZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgICAgICBvbkVycm9yKClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFnZW50LmlzX2Zhdm9yaXRlXG4gICAgICApXG4gICAgfSxcbiAgICBbdG9nZ2xlRmF2b3JpdGUsIHVwZGF0ZUFnZW50RmF2b3JpdGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcbiAgICBpZiAoaGFzUGVuZGluZ0NoYW5nZXMoKSAmJiAhc3VjY2Vzc0NyZWF0ZSAmJiAhc3VjY2Vzc1VwZGF0ZSAmJiAhc3VjY2Vzc0RlbGV0ZSkge1xuICAgICAgY29uc3QgY29uZmlybU1lc3NhZ2UgPSBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdjb25maXJtQ2xvc2VFZGl0QWdlbnQnKSA6IHQoJ2NvbmZpcm1DbG9zZUNyZWF0ZUFnZW50JylcblxuICAgICAgaWYgKCF3aW5kb3cuY29uZmlybShjb25maXJtTWVzc2FnZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0TW9kYWxWYWx1ZXMoaW5pdGlhbFZhbHVlcylcbiAgICBoYW5kbGVDbGVhbkFnZW50KClcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlKClcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcygpXG4gICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudCA9IHtcbiAgICAgIHRvRGVsZXRlOiBbXSxcbiAgICAgIHRvVXBsb2FkOiBbXSxcbiAgICB9XG4gICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgfVxuICAgIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyhmYWxzZSlcbiAgICBzZXRJc1N1YnNjcmliZWQoZmFsc2UpXG4gICAgc2V0RmlsZXNQcm9jZXNzZWQoMClcbiAgICBzZXRTZWN0aW9uKCdnZW5lcmFsJylcbiAgICBzZXRJc09wZW4oZmFsc2UpXG4gICAgYWdlbnRDcmVhdGVkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmFja2Ryb3BDbGljayA9IChldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykge1xuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNlY3Rpb25DaGFuZ2UgPSAobmV3U2VjdGlvbjogQWJtU2VjdGlvbikgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy50YWJTZWN0aW9uLCB7IG9wdGlvbjogbmV3U2VjdGlvbiB9KVxuICAgIHNldFNlY3Rpb24obmV3U2VjdGlvbilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzID0gKHtcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gICAgZGVsZXRlS25vd2xlZGdlLFxuICB9OiB7XG4gICAga2V5OiBzdHJpbmdcbiAgICB2YWx1ZTogYW55XG4gICAgZGVsZXRlS25vd2xlZGdlOiBib29sZWFuXG4gIH0pID0+IHtcbiAgICBpZiAoa2V5ID09PSAna25vd2xlZGdlJykge1xuICAgICAgaWYgKCFkZWxldGVLbm93bGVkZ2UpIHtcbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5wdXNoKC4uLih2YWx1ZSB8fCBbXSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWxlc1ByZXZJZHMgPSB2YWx1ZS5sZW5ndGggPyBuZXcgU2V0KHZhbHVlLm1hcChmaWxlID0+IGZpbGUuaWQpKSA6IG5ldyBTZXQoKVxuICAgICAgICBjb25zdCBuZXdGaWxlcyA9IG1vZGFsVmFsdWVzLmtub3dsZWRnZS5maWx0ZXIoZmlsZSA9PiAhZmlsZXNQcmV2SWRzLmhhcyhmaWxlLmlkKSAmJiBmaWxlLnN0YXR1cyAhPT0gJ3N0YXJ0ZWQnKVxuICAgICAgICBpZiAoIW5ld0ZpbGVzLmxlbmd0aCAmJiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlSWRzID0gbmV3IFNldCh2YWx1ZS5tYXAoZmlsZSA9PiBmaWxlLmlkKSlcbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5maWx0ZXIoZmlsZSA9PiB2YWx1ZUlkcy5oYXMoZmlsZS5pZCkpXG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSA9IFsuLi4oYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSB8fCBbXSksIC4uLm5ld0ZpbGVzXVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGtub3dsZWRnZUZpbGVzID1cbiAgICAgICAga2V5ID09PSAna25vd2xlZGdlJ1xuICAgICAgICAgID8gZGVsZXRlS25vd2xlZGdlXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IFsuLi4ocHJldi5rbm93bGVkZ2UgfHwgW10pLCAuLi4oKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10pIHx8IFtdKV1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIC4uLihrZXkgPT09ICdrbm93bGVkZ2UnXG4gICAgICAgICAgPyB7IGtub3dsZWRnZToga25vd2xlZGdlRmlsZXMgfVxuICAgICAgICAgIDoga2V5ID09PSAnYWNjZXNzaWJpbGl0eSdcbiAgICAgICAgICAgID8geyBhY2Nlc3NpYmlsaXR5OiB2YWx1ZSB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1BY3Rpb24gPSBhc3luYyAoY2hhdDogYW55LCBhY3Rpb246ICdkZWxldGUnIHwgJ3VwZGF0ZScgfCAnY3JlYXRlJykgPT4ge1xuICAgIC8vIFNvbG8gcGVybWl0aXIgb3BlcmFjaW9uZXMgZGUgYWdlbnRlcyBjdXN0b20gc2kgbGEgZmVhdHVyZSBmbGFnIGVzdMOhIGhhYmlsaXRhZGFcbiAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmRlbGV0ZSlcbiAgICAgIGhhbmRsZURlbGV0ZUFnZW50KGNoYXQuaWQgYXMgdW5rbm93biBhcyBzdHJpbmcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgY29yQWNjZXNzID0gbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jb3JBY2Nlc3MgPz8gREVGQVVMVF9DT1JfQUNDRVNTXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmNvbmZpcm1BY3Rpb24sIHtcbiAgICAgIG9wdGlvbjogbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gJ2VkaXQnIDogJ2NyZWF0ZScsXG4gICAgICBjb3Jfc2x1Z3M6IGJ1aWxkQWdlbnRUb29sR3JvdXBzUmVxdWVzdChjb3JBY2Nlc3MpLFxuICAgICAgY29yX2FjY2VzczogY29yQWNjZXNzLFxuICAgIH0pXG4gICAgLy8gQWwgcmVpbnRlbnRhciBndWFyZGFyLCBsaWJlcmFyIGVsIGZyZW5vIGRlbCB0aW1lb3V0IHByZXZpbyBwYXJhIHF1ZSBsb3NcbiAgICAvLyB1c2VFZmZlY3QgZGUgcG9zdC1ndWFyZGFkbyB2dWVsdmFuIGEgcG9kZXIgZGlzcGFyYXIgc25hY2tiYXJzIHkgY2VycmFyLlxuICAgIHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHtcbiAgICAgIGlmICghdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVVwZGF0ZUFnZW50KG1vZGFsVmFsdWVzKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoYW5kbGVDcmVhdGVBZ2VudChtb2RhbFZhbHVlcylcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnRWYWx1ZXMgfSA9IGV2ZW50LmRldGFpbFxuICAgICAgY29uc3QgaW5pdGlhbFNlY3Rpb24gPSBhZ2VudFZhbHVlcz8uaW5pdGlhbFNlY3Rpb24gYXMgQWJtU2VjdGlvbiB8IHVuZGVmaW5lZFxuICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPVxuICAgICAgICBpbml0aWFsU2VjdGlvbiAmJiBbJ2dlbmVyYWwnLCAna25vd2xlZGdlJywgJ2FjY2Vzc2liaWxpdHknXS5pbmNsdWRlcyhpbml0aWFsU2VjdGlvbikgPyBpbml0aWFsU2VjdGlvbiA6IG51bGxcblxuICAgICAgZ2V0QWxsQWdlbnRNb2RlbHMoKVxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYWdlbnRWYWx1ZXMudmFsdWVzPy5pc0VkaXRpbmcpIHtcbiAgICAgICAgLy8gVmFsaWRhciBxdWUgbGEgZmVhdHVyZSBmbGFnIGVzdMOpIGhhYmlsaXRhZGEgYW50ZXMgZGUgY2FyZ2FyIGVsIGFnZW50ZSBwYXJhIGVkaXRhclxuICAgICAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICAgIHNldElzT3BlbihmYWxzZSlcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChhZ2VudFZhbHVlcy5wcmVmZXRjaGVkQWdlbnRCeUlkKSB7XG4gICAgICAgICAgaGFuZGxlQ2xlYW5BZ2VudCgpXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gYWdlbnRWYWx1ZXMucHJlZmV0Y2hlZEFnZW50QnlJZFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZUdldEFnZW50QnlJZChhZ2VudFZhbHVlcz8udmFsdWVzPy5nZW5lcmFsPy5pZCBhcyB1bmtub3duIGFzIHN0cmluZylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChhZ2VudFZhbHVlcy52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHtcbiAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAgIC4uLmFnZW50VmFsdWVzLnZhbHVlcyxcbiAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLmdlbmVyYWwsXG4gICAgICAgICAgICAuLi4oYWdlbnRWYWx1ZXMudmFsdWVzLmdlbmVyYWwgfHwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LFxuICAgICAgICAgICAgLi4uKGFnZW50VmFsdWVzLnZhbHVlcy5hY2Nlc3NpYmlsaXR5IHx8IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGtub3dsZWRnZTogYWdlbnRWYWx1ZXMudmFsdWVzLmtub3dsZWRnZSB8fCBbXSxcbiAgICAgICAgfVxuXG4gICAgICAgIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50ID0gbmV4dFZhbHVlc1xuICAgICAgICBzZXRNb2RhbFZhbHVlcyhuZXh0VmFsdWVzKVxuICAgICAgfVxuXG4gICAgICBpZiAocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgJiYgIWFnZW50VmFsdWVzLnZhbHVlcz8uaXNFZGl0aW5nKSB7XG4gICAgICAgIHNldFNlY3Rpb24ocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQpXG4gICAgICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMgYXMgRXZlbnRMaXN0ZW5lcilcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIHVzZUVmZmVjdCB0byBoYW5kbGUgdGhlIG92ZXJmbG93IG9mIHRoZSBib2R5IHdoZW4gdGhlIG1vZGFsIGlzIG9wZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE92ZXJmbG93ID0gYm9keS5zdHlsZS5vdmVyZmxvd1xuICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbE92ZXJmbG93XG4gICAgfVxuICB9LCBbaXNPcGVuXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUJlZm9yZVVubG9hZCA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHtcbiAgICAgIGlmIChoYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gdCgnY29uZmlybVJlbG9hZEJyb3dzZXInKVxuICAgICAgICByZXR1cm4gdCgnY29uZmlybVJlbG9hZEJyb3dzZXInKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpXG4gICAgfVxuICB9LCBbaXNPcGVuLCBoYXNQZW5kaW5nQ2hhbmdlcywgdF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3VjY2Vzc0RlbGV0ZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudERlbGV0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2VzcygpXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkIGFzIHN0cmluZylcbiAgICAgIH1cbiAgICAgIHJlbW92ZUFnZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpXG4gICAgICBzZXRTaG93TW9kYWxEZWxldGUoZmFsc2UpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICB9LCBbc3VjY2Vzc0RlbGV0ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBFdml0YXIgZWplY3VjacOzbiBtw7psdGlwbGUgZGVsIGVmZWN0b1xuICAgIGlmIChzdWNjZXNzQ3JlYXRlICYmICFpc0xvYWRpbmdDcmVhdGUgJiYgYWdlbnRDcmVhdGVkUmVmLmN1cnJlbnQgIT09IHN1Y2Nlc3NDcmVhdGUuaWQpIHtcbiAgICAgIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ID0gc3VjY2Vzc0NyZWF0ZS5pZFxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUubGVuZ3RoICYmIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICBmaWxlc1RvRGVsZXRlOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLFxuICAgICAgICAgICAgZmlsZXNUb0NyZWF0ZTogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyh7IGZpbGVzOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLCBhZ2VudElkOiBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCkgfSksXG4gICAgICAgIF1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueScpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKGhhbmRsZUFjY2Vzc0NsaWVudChzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaXNfZmF2b3JpdGUpIHtcbiAgICAgICAgICBjb25zdCBhZ2VudFdpdGhGYXZvcml0ZSA9IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfVxuICAgICAgICAgIGFkZEFnZW50KGFnZW50V2l0aEZhdm9yaXRlKVxuICAgICAgICAgIC8vIEN1YW5kbyBzZSBjcmVhIHVuIGFnZW50ZSBudWV2bywgZWwgc2Vydmlkb3Igbm8gdGllbmUgZWwgZmF2b3JpdG8gbWFyY2FkbyBhw7puXG4gICAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVzb2x2ZSgpLFxuICAgICAgICAgICAgICAgICgpID0+IHJlamVjdCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEFnZW50KHN1Y2Nlc3NDcmVhdGUpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAvLyBTb2xvIHJlc2V0ZWFyIGVsIGNvbnRleHRvIHNpIE5PIHNlIGhhIGxsYW1hZG8gdG9kYXbDrWFcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgIGNvbnN0IHsgaGFzQWN0aW9uRmlsZXMgfSA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogaGFzQWN0aW9uRmlsZXMgfHwgZmFsc2UsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQpIHtcbiAgICAgICAgICBoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KVxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBoYW5kbGVBY2Nlc3NDbGllbnQsIGVsIGFnZW50ZSBzZSBhZ3JlZ2Fyw6EgeSBlbCB0b2dnbGUgc2UgaGFyw6EgZW4gc3VjY2Vzc1VwZGF0ZUFjY2Vzc1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGZhdm9yaXRlIGlmIGl0IHdhcyBtYXJrZWQgZHVyaW5nIGNyZWF0aW9uXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBQcmltZXJvIGFncmVnYXIgZWwgYWdlbnRlIGEgbGEgbGlzdGEgKGFkZEFnZW50IHlhIG9yZGVuYSlcbiAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG5cbiAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAvLyBMdWVnbyBoYWNlciBlbCB0b2dnbGUgZGUgZmF2b3JpdG8gZW4gZWwgc2Vydmlkb3IgeSBhY3R1YWxpemFyIGVsIGVzdGFkb1xuICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyB9KVxuICAgICAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUgfSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogJ2FkZCcgfSlcbiAgICAgICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGlzTG9hZGluZ0NyZWF0ZSxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIGFkZEFnZW50LFxuICAgIHNlbGVjdEFnZW50LFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gICAgaGFuZGxlQ2xvc2UsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzVXBkYXRlKSB7XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlID0gW11cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBmaWxlc1RvQ3JlYXRlOiBmaWxlc1RvVXBsb2FkLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlczogZmlsZXNUb1VwbG9hZCxcbiAgICAgICAgICAgICAgYWdlbnRJZDogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4oaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKVxuICAgICAgICAgICAgICA/IFtoYW5kbGVBY2Nlc3NDbGllbnQobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KV1cbiAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgXSlcbiAgICAgICAgfVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgLy8gU29sbyByZXNldGVhciBlbCBjb250ZXh0byBzaSBOTyBzZSBoYSBsbGFtYWRvIHRvZGF2w61hIHkgTk8gaGF5IGFyY2hpdm9zIHBlbmRpZW50ZXNcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCAmJiAhYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICAvLyBMbGFtYXIgYSBoYW5kbGVBY2Nlc3NDbGllbnQgc29sbyB1bmEgdmV6XG4gICAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgICAgaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSlcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gU29sbyBjZXJyYXIgc2kgbm8gaGF5IGFyY2hpdm9zIHNpZW5kbyBwcm9jZXNhZG9zIG5pIGFjY2VzcyBwZW5kaWVudGVcbiAgICAgIGlmIChcbiAgICAgICAgIWhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ICYmXG4gICAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXMgJiZcbiAgICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoICYmXG4gICAgICAgICFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgICAgICAgIXN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiZcbiAgICAgICAgIXByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnRcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50VXBkYXRlZCcpKVxuICAgICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBzdWNjZXNzVXBkYXRlLmlkKSB7XG4gICAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJykpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBzdWNjZXNzVXBkYXRlLFxuICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVQcm9jZXNzRmlsZXNUaW1lb3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykgcmV0dXJuXG5cbiAgICAvLyBBbCBjdW1wbGlyc2UgZWwgdGltZW91dCBhc3VtaW1vcyBxdWUgZWwgZ3VhcmRhZG8gZGVsIGFnZW50ZSBmdWUgZXhpdG9zb1xuICAgIC8vIChlbCBzZXJ2ZXIgcmVzcG9uZGnDsyBPSykgeSBxdWUgbG9zIGFyY2hpdm9zIHNlIGVudmlhcm9uIGNvcnJlY3RhbWVudGUuXG4gICAgLy8gU29sbyBwZXJkaW1vcyBsYSBjb25maXJtYWNpw7NuIGFzaW5jcsOzbmljYSBkZWwgV2ViU29ja2V0IHNvYnJlIHN1XG4gICAgLy8gcHJvY2VzYW1pZW50by4gQ2VycmFtb3MgdG9kbyBtb3N0cmFuZG8gZWwgc25hY2tiYXIgZGUgw6l4aXRvIHF1ZSBodWJpZXNlXG4gICAgLy8gZGlzcGFyYWRvIGVsIGZsdWpvIG5vcm1hbCBkZSDDqXhpdG8uXG5cbiAgICAvLyBGcmVubyBwYXJhIHF1ZSBsb3MgdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gbm8gcmUtZGlzcGFyZW4gc25hY2tiYXJzXG4gICAgLy8gbyBjaWVycmVzIGR1cGxpY2Fkb3MgY3VhbmRvIHNldElzU2hvd1Byb2Nlc3NGaWxlcyhmYWxzZSkgbG9zIGdhdGlsbGUuXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IHRydWVcblxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcgJiYgc3VjY2Vzc1VwZGF0ZSkge1xuICAgICAgdXBkYXRlQWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgPT09IHN1Y2Nlc3NVcGRhdGUuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgIH0gZWxzZSBpZiAoIW1vZGFsVmFsdWVzLmlzRWRpdGluZyAmJiBzdWNjZXNzQ3JlYXRlKSB7XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlKClcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcygpXG5cbiAgICBoYW5kbGVDbG9zZSgpXG4gIH0sIFtcbiAgICBpc1Nob3dQcm9jZXNzRmlsZXMsXG4gICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLFxuICAgIHN1Y2Nlc3NVcGRhdGUsXG4gICAgc3VjY2Vzc0NyZWF0ZSxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICBjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlLFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgY29uc3Qgd2ViU29ja2V0RnVuY3Rpb24gPSAoeyBtb2RlbF9kYXRhOiBtb2RlbERhdGEgfTogeyBtb2RlbF9kYXRhOiBhbnkgfSkgPT4ge1xuICAgIGNvbnN0IGZpbGVTdGF0dXMgPSBtb2RlbERhdGFcbiAgICBpZiAoZmlsZVN0YXR1cy5zdGF0dXMgPT09ICdkb25lJyB8fCBmaWxlU3RhdHVzLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkS25vd2xlZGdlID0gcHJldi5rbm93bGVkZ2UubWFwKGZpbGUgPT4ge1xuICAgICAgICAgIGlmIChmaWxlLm5hbWUgPT09IGZpbGVTdGF0dXMuZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmZpbGUsXG4gICAgICAgICAgICAgIHN0YXR1czogZmlsZVN0YXR1cy5zdGF0dXMsXG4gICAgICAgICAgICAgIGlkOiBmaWxlU3RhdHVzLmtub3dsZWRnZV9iYXNlX2lkIHx8IGZpbGUuaWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWxlXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGhhc1BlbmRpbmdGaWxlcyA9IHVwZGF0ZWRLbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAncGVuZGluZycpXG4gICAgICAgIGNvbnN0IGhhc0Vycm9yRmlsZXMgPSB1cGRhdGVkS25vd2xlZGdlLnNvbWUoZmlsZSA9PiBmaWxlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpXG4gICAgICAgIGlmIChoYXNFcnJvckZpbGVzICYmICFoYXNQZW5kaW5nRmlsZXMpIHtcbiAgICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IoXG4gICAgICAgICAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InKSA6IHQoJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJylcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1BlbmRpbmdGaWxlcyAmJiAhaGFzRXJyb3JGaWxlcykge1xuICAgICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG5cbiAgICAgICAgICAvLyBTaSBoYWLDrWEgYWNjZXNzIHBlbmRpZW50ZSB5IHlhIGVzdGFiYSBtYW5lamFkbywgZm9yemFyIHF1ZSBlbCB1c2VFZmZlY3QgZGUgYWNjZXNzIHNlIGVqZWN1dGUgZGUgbnVldm9cbiAgICAgICAgICBpZiAoYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzICYmIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgc2V0RmlsZXNQcm9jZXNzZWQocHJldkNvdW50ID0+IHByZXZDb3VudCArIDEpXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgICAgICAgIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgICAgICAgIWZpbGVzRmluaXNoZWRSZWYuY3VycmVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU2kgZXMgY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkLCBtYXJjYXIgcXVlIGxvcyBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgICAgICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgICBzZXRGaWxlc1Byb2Nlc3NlZChwcmV2Q291bnQgPT4gcHJldkNvdW50ICsgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGtub3dsZWRnZTogdXBkYXRlZEtub3dsZWRnZSxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzS25vd2xlZGdlRGVsZXRlICYmICFpc0xvYWRpbmdLbm93bGVkZ2UgJiYgIWVycm9yS25vd2xlZGdlKSB7XG4gICAgICAvLyBTb2xvIGNlcnJhciBzaSBOTyBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3NcbiAgICAgIGlmIChoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCB8fCBpc1Nob3dQcm9jZXNzRmlsZXMgfHwgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBTaSBlbCBsb2FkZXIgc2UgY2VycsOzIHBvciB0aW1lb3V0LCBubyBtb3N0cmFyIHNuYWNrYmFyIGRlIMOpeGl0byBuaSBjZXJyYXJcbiAgICAgIGlmIChwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICAgIGlmIChlcnJvcktub3dsZWRnZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihcbiAgICAgICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnY29uZmlybUFnZW50VXBkYXRlZFdpdGhGaWxlc0Vycm9yJykgOiB0KCdjb25maXJtQWdlbnRXaXRoRmlsZXNFcnJvcicpXG4gICAgICApXG4gICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NLbm93bGVkZ2VEZWxldGUsIGlzTG9hZGluZ0tub3dsZWRnZSwgZXJyb3JLbm93bGVkZ2UsIGlzU2hvd1Byb2Nlc3NGaWxlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG5cbiAgICAvLyBTaSBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3MsIGVzcGVyYXIgYSBxdWUgdGVybWluZW5cbiAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiAoaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgfHwgaXNTaG93UHJvY2Vzc0ZpbGVzKSkge1xuICAgICAgLy8gU2kgc3VjY2Vzc1VwZGF0ZUFjY2VzcyBlc3TDoSBhY3Rpdm8sIG1hcmNhciBjb21vIG1hbmVqYWRvIHBlcm8gTk8gcmVzZXRlYXIgaGFzdGEgcXVlIHRlcm1pbmVuIGxvcyBhcmNoaXZvc1xuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiYgIWFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTaSB5YSBmdWUgbWFuZWphZG8geSBubyBoYXkgYXJjaGl2b3MgcGVuZGllbnRlcywgZWplY3V0YXIgZWwgY2llcnJlXG4gICAgaWYgKGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCAmJiBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuXG4gICAgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIC8vIFNpIGhheSBhcmNoaXZvcywgZWwgYWdlbnRlIHlhIGZ1ZSBhZ3JlZ2FkbyB5IGVsIHRvZ2dsZSB5YSBzZSBoaXpvIGVuIHN1Y2Nlc3NDcmVhdGVcbiAgICAgIC8vIFNvbG8gbmVjZXNpdGFtb3MgY2VycmFyIGVsIG1vZGFsXG4gICAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcykge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBTaSBlbCBhZ2VudGUgZnVlIGNyZWFkbyBjb24gZmF2b3JpdG8sIG5lY2VzaXRhbW9zIG9yZGVuYXIgZGVzcHXDqXMgZGUgYWdyZWdhcmxvXG4gICAgICBjb25zdCBhZ2VudFRvQWRkID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSA/IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfSA6IHN1Y2Nlc3NDcmVhdGVcblxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIGFkZEFnZW50KGFnZW50VG9BZGQpXG4gICAgICBzZWxlY3RBZ2VudChhZ2VudFRvQWRkKVxuXG4gICAgICAvLyBTaSB0aWVuZSBmYXZvcml0bywgaGFjZXIgdG9nZ2xlIHkgYWN0dWFsaXphciBlc3RhZG8gYW50ZXMgZGUgY2VycmFyXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRUb0FkZCwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2VycmFyIGRlc3B1w6lzIGRlIHF1ZSBlbCB0b2dnbGUgY29tcGxldGUgeSBhY3R1YWxpY2UgZWwgZXN0YWRvXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gc3VjY2Vzc1VwZGF0ZS5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgfVxuICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlKClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG5cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gIH0sIFtzdWNjZXNzVXBkYXRlQWNjZXNzLCBmaWxlc1Byb2Nlc3NlZF0pXG5cbiAgLy8gdXNlRWZmZWN0IHBhcmEgbWFuZWphciBlbCBjaWVycmUgZGVsIG1vZGFsIGN1YW5kbyB0ZXJtaW5hbiBsb3MgYXJjaGl2b3MgZW4gY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuXG4gICAgLy8gU29sbyBwcm9jZXNhciBzaTpcbiAgICAvLyAtIEVzIHVuYSBvcGVyYWNpw7NuIGRlIGNyZWFjacOzblxuICAgIC8vIC0gTm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVuZGllbnRlXG4gICAgLy8gLSBMb3MgYXJjaGl2b3MgdGVybWluYXJvbiBkZSBwcm9jZXNhcnNlXG4gICAgLy8gLSBFbCBhZ2VudGUgZnVlIGNyZWFkbyBleGl0b3NhbWVudGVcbiAgICAvLyAtIEHDum4gbm8gc2UgaGEgY2VycmFkbyBlbCBtb2RhbFxuICAgIGlmIChcbiAgICAgIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScgJiZcbiAgICAgICFjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgIHN1Y2Nlc3NDcmVhdGUgJiZcbiAgICAgICFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJlxuICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlc1xuICAgICkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhbWJpw6luIG1hbmVqYXIgZWwgY2FzbyBjdWFuZG8gaGF5IGFjY2VzaWJpbGlkYWQgeSBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgaWYgKFxuICAgICAgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ICYmXG4gICAgICBzdWNjZXNzQ3JlYXRlICYmXG4gICAgICAhaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiZcbiAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXNcbiAgICApIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBmaWxlc1Byb2Nlc3NlZCxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIHN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaXNTaG93UHJvY2Vzc0ZpbGVzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNTaG93UHJvY2Vzc0ZpbGVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gYGtub3dsZWRnZS1iYXNlLnN0YXR1czoke2FnZW50QnlJZCA/IGFnZW50QnlJZD8uaWQgOiBzdWNjZXNzQ3JlYXRlPy5pZD8udG9TdHJpbmcoKX1gXG4gICAgICBpZiAoJF9zYykge1xuICAgICAgICBpZiAoaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgJF9zYz8uc3Vic2NyaWJlSGFuZGxlcihjaGFubmVsLCB3ZWJTb2NrZXRGdW5jdGlvbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBtb2RlbERhdGEgPSB7XG4gICAgICAgICAgICBtb2RlbF9oYXNoOiBjaGFubmVsLFxuICAgICAgICAgICAgYWN0aW9uOiAkX3NjPy5hY3Rpb25UeXBlPy5TVUJTQ1JJQkUsXG4gICAgICAgICAgfVxuICAgICAgICAgICRfc2M/LnVwZGF0ZUNvbm5lY3Rpb25Nb2RlbChtb2RlbERhdGEsIGNoYW5uZWwsIHVzZXIsIHVzZXIsICRfc2MuY2hhbm5lbFR5cGU/Lk1PREVMX0NIQU5ORUwpXG4gICAgICAgICAgc2V0SXNTdWJzY3JpYmVkKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc1Nob3dQcm9jZXNzRmlsZXMsIGlzU3Vic2NyaWJlZCwgJF9zYywgYWdlbnRCeUlkLCBzdWNjZXNzQ3JlYXRlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFhZ2VudE1vZGVscy5sZW5ndGgpIHJldHVyblxuICAgIGlmIChhZ2VudExvYWRpbmcgJiYgIXByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBhcHBseUVkaXRpbmdBZ2VudCA9IChzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZS50eXBlICE9PSAnY3VzdG9tJyB8fCAhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+IHtcbiAgICAgICAgY29uc3QgYWdlbnRWYWx1ZXNUb1NldCA9IGJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsKHNvdXJjZSwgYWdlbnRNb2RlbHMsIHByZXYpXG4gICAgICAgIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50ID0gYWdlbnRWYWx1ZXNUb1NldFxuICAgICAgICByZXR1cm4gYWdlbnRWYWx1ZXNUb1NldFxuICAgICAgfSlcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIGlmIChwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCkge1xuICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFnZW50SWQgPSBzb3VyY2UuaWRcbiAgICAgIC8vIFNpbiBlbCBmZWF0dXJlIG5vIGhpZHJhdGFtb3MgY29uZWN0b3JlczogbGEgc2VjY2nDs24gbm8gc2UgbXVlc3RyYSB5IGVsXG4gICAgICAvLyBndWFyZGFkbyBuaSBsb3MgdG9jYSwgYXPDrSBxdWUgcGVkaXJsb3Mgc2Vyw61hIHVuYSBsbGFtYWRhIGRlIG3DoXMuXG4gICAgICBpZiAoYWdlbnRJZCAmJiBoYXNNYWlhRXh0ZXJuYWxDb25uZWN0b3JzQWNjZXNzKCkpIHtcbiAgICAgICAgZ2V0QWdlbnRDb25uZWN0b3JzKGFnZW50SWQudG9TdHJpbmcoKSlcbiAgICAgICAgICAudGhlbihjb25uZWN0b3JzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RlZCA9IGRlcml2ZUNvbm5lY3RlZENvbm5lY3RvclNsdWdzKGNvbm5lY3RvcnMpXG4gICAgICAgICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHk6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnByZXYuYWNjZXNzaWJpbGl0eSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29ubmVjdG9yczogY29ubmVjdGVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICAgICAgLi4uZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgICAgICAgICAgICAgLi4uZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuYWNjZXNzaWJpbGl0eSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29ubmVjdG9yczogY29ubmVjdGVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG5leHRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgYWdlbnQgY29ubmVjdG9yczonLCBlcnJvcilcbiAgICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwcmVmZXRjaGVkID0gcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50XG4gICAgaWYgKHByZWZldGNoZWQpIHtcbiAgICAgIHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFwcGx5RWRpdGluZ0FnZW50KHByZWZldGNoZWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYWdlbnRCeUlkICYmICFhZ2VudExvYWRpbmcgJiYgYWdlbnRNb2RlbHMubGVuZ3RoKSB7XG4gICAgICBhcHBseUVkaXRpbmdBZ2VudChhZ2VudEJ5SWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWlzTG9hZGluZyAmJiAhYWdlbnRMb2FkaW5nICYmICFhZ2VudEJ5SWQgJiYgIW1vZGFsVmFsdWVzLmlzRWRpdGluZykge1xuICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgIGFpTW9kZWw6IGFnZW50TW9kZWxzWzBdLFxuICAgICAgICB9LFxuICAgICAgfSkpXG4gICAgfVxuICB9LCBbYWdlbnRCeUlkLCBpc09wZW4sIGlzTG9hZGluZywgYWdlbnRMb2FkaW5nLCBhZ2VudE1vZGVscz8ubGVuZ3RoLCBtb2RhbFZhbHVlcy5pc0VkaXRpbmcsIHRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVycm9yR2V0QWdlbnRCeUlkKSB7XG4gICAgICBpZiAoZXJyb3JHZXRBZ2VudEJ5SWQgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiKSB7XG4gICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBY2Nlc3NEZW5pZWQnKSlcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICB9LCAzMDAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IoZXJyb3JHZXRBZ2VudEJ5SWQpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfSwgMzAwMClcbiAgICB9XG4gIH0sIFtlcnJvckdldEFnZW50QnlJZF0pXG5cbiAgY29uc3Qgc2hvdWxkRGlzYWJsZVNhdmVGb3JDbGllbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFtb2RhbFZhbHVlcz8uYWNjZXNzaWJpbGl0eT8uY2xpZW50cyB8fCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuY2xpZW50cy5zb21lKGNsaWVudCA9PiBjbGllbnQuaXNfYWN0aXZlID09PSBmYWxzZSB8fCBjbGllbnQuaXNfZGVsZXRlZCA9PT0gdHJ1ZSlcbiAgfSwgW21vZGFsVmFsdWVzPy5hY2Nlc3NpYmlsaXR5Py5jbGllbnRzXSlcblxuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZSA9ICgpID0+IHtcbiAgICBpZiAobW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlkKSB7XG4gICAgICAvLyBFeGlzdGluZyBhZ2VudFxuICAgICAgdG9nZ2xlRmF2b3JpdGUoXG4gICAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgICAgICBpc19mYXZvcml0ZTogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAvLyBBY3R1YWxpemFyIGVsIGVzdGFkbyBkZSBhZ2VudGVzIHkgb3JkZW5hciBjdWFuZG8gc2UgaGFjZSBkZXNkZSBlbCBtb2RhbCBBQk1cbiAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlKHVwZGF0ZWRBZ2VudCwgdHJ1ZSlcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0RmF2b3JpdGUsIHtcbiAgICAgICAgICAgIG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIG1vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgbmV3IGFnZW50XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgaXNfZmF2b3JpdGU6ICFwcmV2LmdlbmVyYWwuaXNfZmF2b3JpdGUsXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3BlbiB8fCAoIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9e2FibUFnZW50TW9kYWxaSW5kZXh9IG9uQ2xpY2s9e2hhbmRsZUJhY2tkcm9wQ2xpY2t9PlxuICAgICAgPFNDQUFNV3JhcHBlciByZWY9e21vZGFsUmVmfSB0YWJJbmRleD17LTF9PlxuICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgIDxTQ0FBTVdyYXBwZXJTcGlubmVyPlxuICAgICAgICAgICAgPFNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgICAgICA8U3Bpbm5lckxvdHRpZSBzaXplPVwiODBweFwiIGNvbG9yPVwicHJpbWFyeVwiIC8+XG4gICAgICAgICAgICA8L1NDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgIDwvU0NBQU1XcmFwcGVyU3Bpbm5lcj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2lzU2hvd1Byb2Nlc3NGaWxlcyAmJiBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA/IChcbiAgICAgICAgICAgICAgPEFibUxvYWRlckZpbGVzXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM9e21vZGFsVmFsdWVzLmtub3dsZWRnZX1cbiAgICAgICAgICAgICAgICBsYWJlbD17dChgcHJvY2Vzc2luZ0tub3dsZWRnZS4ke21vZGFsVmFsdWVzLmlzRWRpdGluZyA/ICdkZXNjcmlwdGlvblVwZGF0ZScgOiAnZGVzY3JpcHRpb25DcmVhdGUnfWApfVxuICAgICAgICAgICAgICAgIG9uVGltZW91dD17aGFuZGxlUHJvY2Vzc0ZpbGVzVGltZW91dH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdCgnZ2VuZXJhbFNlY3Rpb24ucmVtb3ZlRmF2b3JpdGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2dlbmVyYWxTZWN0aW9uLmFkZEZhdm9yaXRlJylcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJGYXZvcml0ZSBvbkNsaWNrPXtoYW5kbGVUb2dnbGVGYXZvcml0ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXttb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGUgPyAnI0ZGQzYyNCcgOiAnI2E2YTZhNid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICdub25lJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXttb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGUgPyAnJyA6ICdzdGFyLWZhdm9yaXRlLWljb24nfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyRmF2b3JpdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyVGl0bGU+e21vZGFsVmFsdWVzPy5pc0VkaXRpbmcgPyB0KCdlZGl0QWdlbnQnKSA6IHQoJ25ld0FnZW50Jyl9PC9TQ0FBTUhlYWRlclRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTUhlYWRlckxlZnQ+XG4gICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJDbG9zZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmNhbmNlbE1vZGFsKVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0xvYWRpbmdLbm93bGVkZ2UgfHwgaXNMb2FkaW5nQ3JlYXRlIHx8IGlzTG9hZGluZ1VwZGF0ZUFjY2Vzc31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiI2E2YTZhNlwiIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxTQ0FBTUNvbnRlbnQgaGFzU2Nyb2xsPXtzZWN0aW9uICE9PSAna25vd2xlZGdlJ30+XG4gICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFyPlxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnZ2VuZXJhbCd9XG4gICAgICAgICAgICAgICAgICAgICAgJGluZGV4PXswfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlY3Rpb25DaGFuZ2UoJ2dlbmVyYWwnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1nZW5lcmFsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdnZW5lcmFsJyA/ICdyZ2JhKDYzLCA2MywgNjMsIDEpJyA6ICdyZ2JhKDE2NiwgMTY2LCAxNjYsIDEpJ31gfVxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtVGl0bGUgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdnZW5lcmFsJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbFNlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnfVxuICAgICAgICAgICAgICAgICAgICAgICRpbmRleD17MX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdrbm93bGVkZ2UnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1rbm93bGVkZ2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEJyYWluSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2tub3dsZWRnZSd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2tub3dsZWRnZVNlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdhY2Nlc3NpYmlsaXR5J31cbiAgICAgICAgICAgICAgICAgICAgICAkaW5kZXg9ezJ9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VjdGlvbkNoYW5nZSgnYWNjZXNzaWJpbGl0eScpfVxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWFnZW50LW1vZGFsLWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2liaWxpdHlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YCR7c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50aXRsZVRhYicpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIHtzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNsaWVudHNFcnJvcicpfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbUVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBbGVydCBjb2xvcj1cIiNDNzA1MDVcIiB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtRXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXI+XG4gICAgICAgICAgICAgICAgICB7U2VjdGlvbkJ5S2V5W3NlY3Rpb25dKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBtb2RhbFZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6IGhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzLFxuICAgICAgICAgICAgICAgICAgICBhZ2VudE1vZGVscyxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nS25vd2xlZGdlOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgbmV3S25vd2xlZGdlOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgb25SZW1vdmVFeGlzdGluZ0tub3dsZWRnZTogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlTmV3S25vd2xlZGdlOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgb25GaWxlRXJyb3JDaGFuZ2U6IHNldEhhc0ZpbGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBaSW5kZXgsXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L1NDQUFNQ29udGVudD5cbiAgICAgICAgICAgICAgICA8U0NBQU1Gb290ZXIgaXNFZGl0aW5nPXshIW1vZGFsVmFsdWVzPy5pc0VkaXRpbmcgJiYgISF1c2VyUGVybWlzc2lvbnM/LmRlbGV0ZX0+XG4gICAgICAgICAgICAgICAgICB7ISFtb2RhbFZhbHVlcz8uaXNFZGl0aW5nICYmXG4gICAgICAgICAgICAgICAgICAgICEhdXNlclBlcm1pc3Npb25zPy5kZWxldGUgJiZcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTURlbGV0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDVUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuV2l0aEljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dNb2RhbERlbGV0ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzTG9hZGluZ0tub3dsZWRnZSB8fCBpc0xvYWRpbmdDcmVhdGUgfHwgaXNMb2FkaW5nVXBkYXRlQWNjZXNzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8V3JhcHBlckNlbnRlckljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIGNvbG9yPVwiIzA4Y1wiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnZGVsZXRlQWdlbnQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9XcmFwcGVyQ2VudGVySWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ1VCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTURlbGV0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcyNHB4JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2F2ZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgIXZhbGlkYXRlRmllbGRWYWx1ZXMobW9kYWxWYWx1ZXMpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nS25vd2xlZGdlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdDcmVhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZ1VwZGF0ZUFjY2VzcyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkRGlzYWJsZVNhdmVGb3JDbGllbnRzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNGaWxlRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPENVQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uKG51bGwsICdjcmVhdGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIXZhbGlkYXRlRmllbGRWYWx1ZXMobW9kYWxWYWx1ZXMpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nS25vd2xlZGdlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZ0NyZWF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVcGRhdGVBY2Nlc3MgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkRGlzYWJsZVNhdmVGb3JDbGllbnRzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ZpbGVFcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnc2F2ZUNoYW5nZXMnKSA6IHQoJ2NyZWF0ZUFnZW50TGFiZWxCdXR0b24nKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2F2ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvU0NBQU1Gb290ZXI+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NBQU1XcmFwcGVyPlxuICAgICAge3Nob3dNb2RhbERlbGV0ZSAmJiAoXG4gICAgICAgIDxEZWxldGVRdWVzdGlvbk1vZGFsXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01vZGFsRGVsZXRlKGZhbHNlKX1cbiAgICAgICAgICBoYW5kbGVycz17e1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbjogKHByb3BzOiBhbnkpID0+IGhhbmRsZUNvbmZpcm1BY3Rpb24ocHJvcHMsICdkZWxldGUnKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNoYXQ9e3sgdGl0bGU6IG1vZGFsVmFsdWVzLmdlbmVyYWwubmFtZSwgaWQ6IG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQgfX1cbiAgICAgICAgICBhY3Rpb249XCJhZ2VudFwiXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvQmFja2Ryb3A+LFxuICAgIHNlbGVjdG9yXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxXQUFXLFFBQVEsT0FBTztBQUN6RSxTQUFTQyxZQUFZLFFBQVEs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
1379
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsImNyZWF0ZVBvcnRhbCIsInVzZVRyYW5zbGF0aW9uIiwiQ1VCdXR0b24iLCJDYXRlZ29yeSIsIkFsZXJ0IiwiVHJhc2giLCJTdGFyIiwiQ3Jvc3MiLCJTcGlubmVyTG90dGllIiwiVG9vbHRpcCIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiQmFja2Ryb3AiLCJ1c2VVc2VyIiwiQWNjZXNzaWJpbGl0eUljb24iLCJCcmFpbkljb24iLCJ1c2VBZ2VudE1vZGVsIiwidXNlR2V0QWdlbnRCeUlkIiwiQWJtR2VuZXJhbFNlY3Rpb24iLCJBYm1Lbm93bGVkZ2VTZWN0aW9uIiwiU0NBQU1Db250ZW50IiwiU0NBQU1Gb290ZXIiLCJTQ0FBTUhlYWRlciIsIlNDQUFNSGVhZGVyVGl0bGUiLCJTQ0FBTUhlYWRlckxlZnQiLCJTQ0FBTUhlYWRlckZhdm9yaXRlIiwiU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbiIsIlNDQUFNU2lkZWJhciIsIlNDQUFNV3JhcHBlciIsIlNDQUFNU2lkZWJhckl0ZW0iLCJTQ0FBTVNpZGViYXJJdGVtVGl0bGUiLCJTQ0FBTURlbGV0ZUJ1dHRvbiIsIlNDQUFNU2F2ZUJ1dHRvbiIsIlNDQUFNV3JhcHBlclNwaW5uZXIiLCJTQ0FBTVdyYXBwZXJTcGlubmVyQ29udGVudCIsIlNDQUFNU2lkZWJhckl0ZW1FcnJvciIsInVzZUNyZWF0ZUFnZW50IiwidXNlRGVsZXRlQWdlbnQiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlVXBkYXRlQWdlbnQiLCJ1c2VLbm93bGVkZ2VPcGVyYXRpb25zIiwiQWJtTG9hZGVyRmlsZXMiLCJXcmFwcGVyQ2VudGVySWNvbiIsIkVWRU5UUyIsInVzZUV2ZW50IiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsInVzZU1haWFUYXNrUGFuZWxaSW5kZXgiLCJ1c2VBY2Nlc3NDbGllbnQiLCJ1c2VUb2dnbGVGYXZvcml0ZSIsImJ1aWxkQWdlbnRUb29sR3JvdXBzUmVxdWVzdCIsIkRFRkFVTFRfQ09SX0FDQ0VTUyIsImRlcml2ZUFzc2lnbmVkQ29ubmVjdG9yU2x1Z3MiLCJhcHBseUtub3dsZWRnZUZpbGVTdGF0dXNVcGRhdGUiLCJidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbCIsImNyZWF0ZUluaXRpYWxBYm1Nb2RhbFZhbHVlcyIsImhhc0FibVBlbmRpbmdDaGFuZ2VzIiwiaGFzQWNjZXNzaWJpbGl0eVNlY3Rpb25DaGFuZ2VkIiwiaGFzSW5hY3RpdmVBY2Nlc3NpYmlsaXR5Q2xpZW50cyIsImlzQWJtU2F2ZURpc2FibGVkIiwiaXNTYW1lQWdlbnRNb2RhbFNuYXBzaG90IiwicmVzb2x2ZUtub3dsZWRnZVVwbG9hZE91dGNvbWUiLCJzaG91bGRDb25maXJtQWJtQ2xvc2UiLCJnZXRBZ2VudENvbm5lY3RvcnMiLCJoYXNNYWlhRXh0ZXJuYWxDb25uZWN0b3JzQWNjZXNzIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiaW5pdGlhbFZhbHVlcyIsIk9iamVjdCIsImZyZWV6ZSIsIlNlY3Rpb25CeUtleSIsImdlbmVyYWwiLCJwcm9wcyIsIl9vYmplY3RTcHJlYWQiLCJrbm93bGVkZ2UiLCJhY2Nlc3NpYmlsaXR5IiwiQWJtQWdlbnRNb2RhbCIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl9tb2RhbFZhbHVlcyRhY2Nlc3NpYjMiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDMiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDQiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDUiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDYiLCJhZGRBZ2VudCIsInVwZGF0ZUFnZW50IiwicmVtb3ZlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInVzZXIiLCJldmVudEFtcGxpdHVkZSIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsImN1cnJlbnRTZWxlY3RlZEFnZW50IiwiYWdlbnQiLCJzZWxlY3RBZ2VudCIsImFibUFnZW50TW9kYWxaSW5kZXgiLCJ0b29sdGlwWkluZGV4IiwiX3VzZVRvZ2dsZUZhdm9yaXRlIiwidG9nZ2xlRmF2b3JpdGUiLCJzZWxlY3RvciIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc1N1YnNjcmliZWQiLCJzZXRJc1N1YnNjcmliZWQiLCJtb2RhbFJlZiIsImhhc1BlbmRpbmdGaWxlc1JlZiIsImFjdGlvbnNUb0ZpbGVzIiwidG9EZWxldGUiLCJ0b1VwbG9hZCIsImFjY2Vzc1VwZGF0ZUNvbnRleHQiLCJpc0Zyb21DcmVhdGlvbiIsImlzRnJvbUVkaXRpbmciLCJoYXNBY3Rpb25GaWxlcyIsIm9wZXJhdGlvblR5cGUiLCJoYXNCZWVuQ2FsbGVkIiwiYWNjZXNzSGFuZGxlZFJlZiIsImFnZW50Q3JlYXRlZFJlZiIsInBlbmRpbmdJbml0aWFsU2VjdGlvblJlZiIsInByZWZldGNoZWRBZ2VudEJ5SWRSZWYiLCJoeWRyYXRpbmdBZ2VudElkUmVmIiwiZmlsZXNGaW5pc2hlZFJlZiIsInByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJmaWxlc1Byb2Nlc3NlZCIsInNldEZpbGVzUHJvY2Vzc2VkIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dNb2RhbERlbGV0ZSIsInNldFNob3dNb2RhbERlbGV0ZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VjdGlvbiIsInNldFNlY3Rpb24iLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwibW9kYWxWYWx1ZXMiLCJzZXRNb2RhbFZhbHVlcyIsIl91c2VHZXRBZ2VudEJ5SWQiLCJhZ2VudExvYWRpbmciLCJsb2FkaW5nIiwiaGFuZGxlR2V0QWdlbnRCeUlkIiwiYWdlbnRCeUlkIiwiaGFuZGxlQ2xlYW5BZ2VudCIsImVycm9yR2V0QWdlbnRCeUlkIiwiZXJyb3IiLCJfdXNlQWdlbnRNb2RlbCIsImFnZW50TW9kZWxzIiwiZ2V0QWxsQWdlbnRNb2RlbHMiLCJmaXJzdFZhbHVlQWdlbnQiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaXNTaG93UHJvY2Vzc0ZpbGVzIiwic2V0SXNTaG93UHJvY2Vzc0ZpbGVzIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImhhc0ZpbGVFcnJvcnMiLCJzZXRIYXNGaWxlRXJyb3JzIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJfdXNlRGVsZXRlQWdlbnQiLCJoYW5kbGVEZWxldGVBZ2VudCIsInN1Y2Nlc3NEZWxldGUiLCJzdWNjZXNzIiwicmVzZXRTdWNjZXNzIiwiX3VzZVVwZGF0ZUFnZW50IiwiaGFuZGxlVXBkYXRlQWdlbnQiLCJzdWNjZXNzVXBkYXRlIiwicmVzZXRTdWNjZXNzVXBkYXRlIiwiX3VzZUNyZWF0ZUFnZW50IiwiaGFuZGxlQ3JlYXRlQWdlbnQiLCJpc0xvYWRpbmdDcmVhdGUiLCJzdWNjZXNzQ3JlYXRlIiwicmVzZXRTdWNjZXNzQ3JlYXRlIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlS25vd2xlZGdlT3BlcmF0aW8iLCJoYW5kbGVDcmVhdGVLbm93bGVkZ2VzIiwiaGFuZGxlRGVsZXRlS25vd2xlZGdlcyIsImhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMiLCJpc0xvYWRpbmdLbm93bGVkZ2UiLCJlcnJvcktub3dsZWRnZSIsInN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUiLCJoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlIiwiaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlIiwiX3VzZUFjY2Vzc0NsaWVudCIsImhhbmRsZUFjY2Vzc0NsaWVudCIsInN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJpc0xvYWRpbmdVcGRhdGVBY2Nlc3MiLCJyZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJoYW5kbGVSZXNldFN1Y2Nlc3MiLCJjcmVhdGlvbkRyYWZ0RGVmYXVsdHMiLCJfYWdlbnRNb2RlbHMkMCRpZCIsIl9hZ2VudE1vZGVscyQiLCJkZWZhdWx0SW5wdXRQbGFjZWhvbGRlciIsImRlZmF1bHRVc2VyUHJvbXB0UGxhY2Vob2xkZXIiLCJkZWZhdWx0QWlNb2RlbElkIiwiaWQiLCJoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCIsIl9maXJzdFZhbHVlQWdlbnQkY3VyciIsImN1cnJlbnQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUiLCJCb29sZWFuIiwiaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudCIsImFnZW50SWQiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwidXBkYXRlZEFnZW50IiwiaXNfZmF2b3JpdGUiLCJoYW5kbGVDbG9zZSIsImNyZWF0ZSIsInVwZGF0ZSIsImNvbmZpcm1NZXNzYWdlIiwiaXNFZGl0aW5nIiwid2luZG93IiwiY29uZmlybSIsImhhbmRsZUJhY2tkcm9wQ2xpY2siLCJldmVudCIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJoYW5kbGVTZWN0aW9uQ2hhbmdlIiwibmV3U2VjdGlvbiIsInRhYlNlY3Rpb24iLCJvcHRpb24iLCJoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyIsIl9yZWYyIiwia2V5IiwidmFsdWUiLCJkZWxldGVLbm93bGVkZ2UiLCJfYWN0aW9uc1RvRmlsZXMkY3VycmUiLCJwdXNoIiwiYXBwbHkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJmaWxlc1ByZXZJZHMiLCJsZW5ndGgiLCJTZXQiLCJtYXAiLCJmaWxlIiwibmV3RmlsZXMiLCJmaWx0ZXIiLCJoYXMiLCJzdGF0dXMiLCJ2YWx1ZUlkcyIsImNvbmNhdCIsInByZXYiLCJrbm93bGVkZ2VGaWxlcyIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiY2hhdCIsImFjdGlvbiIsIl9tb2RhbFZhbHVlcyRhY2Nlc3NpYiIsImNvckFjY2VzcyIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiYWJydXB0IiwiY29uZmlybUFjdGlvbiIsImNvcl9zbHVncyIsImNvcl9hY2Nlc3MiLCJzdG9wIiwiX3giLCJfeDIiLCJhcmd1bWVudHMiLCJoYW5kbGVTZXRBZ2VudFZhbHVlcyIsIl9hZ2VudFZhbHVlcyR2YWx1ZXMiLCJfYWdlbnRWYWx1ZXMkdmFsdWVzMyIsImFnZW50VmFsdWVzIiwiZGV0YWlsIiwiaW5pdGlhbFNlY3Rpb24iLCJpbmNsdWRlcyIsInZhbHVlcyIsIl9hZ2VudFZhbHVlcyR2YWx1ZXMyIiwicHJlZmV0Y2hlZEFnZW50QnlJZCIsIm5leHRWYWx1ZXMiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVuZGVmaW5lZCIsIl9kb2N1bWVudCIsImJvZHkiLCJvcmlnaW5hbE92ZXJmbG93Iiwic3R5bGUiLCJvdmVyZmxvdyIsImhhbmRsZUJlZm9yZVVubG9hZCIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJhY2Nlc3NUeXBlIiwicHJvbWlzZXMiLCJmaWxlc1RvRGVsZXRlIiwiZmlsZXNUb0NyZWF0ZSIsInRvU3RyaW5nIiwiYWdlbnRXaXRoRmF2b3JpdGUiLCJhZ2VudEZvclRvZ2dsZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiYWxsIiwiZmlsZXMiLCJhaUNoYXRGYXZvcml0ZSIsImZpbGVzVG9VcGxvYWQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJoYW5kbGVQcm9jZXNzRmlsZXNUaW1lb3V0Iiwid2ViU29ja2V0RnVuY3Rpb24iLCJfcmVmNCIsIm1vZGVsRGF0YSIsIm1vZGVsX2RhdGEiLCJmaWxlU3RhdHVzIiwidXBkYXRlZEtub3dsZWRnZSIsInVwbG9hZE91dGNvbWUiLCJwcmV2Q291bnQiLCJjb250ZXh0IiwiYWdlbnRUb0FkZCIsIl9zdWNjZXNzQ3JlYXRlJGlkIiwiY2hhbm5lbCIsIiRfc2MiLCJfJF9zYyIsInN1YnNjcmliZUhhbmRsZXIiLCJfJF9zYzIiLCJfJF9zYzMiLCJfJF9zYyRjaGFubmVsVHlwZSIsIm1vZGVsX2hhc2giLCJhY3Rpb25UeXBlIiwiU1VCU0NSSUJFIiwidXBkYXRlQ29ubmVjdGlvbk1vZGVsIiwiY2hhbm5lbFR5cGUiLCJNT0RFTF9DSEFOTkVMIiwiYXBwbHlFZGl0aW5nQWdlbnQiLCJfcmVmNSIsIl9jYWxsZWUyIiwic291cmNlIiwiYWdlbnRWYWx1ZXNUb1NldCIsImNvbm5lY3RvcnMiLCJfdCIsIl9jb250ZXh0MiIsInR5cGUiLCJzZXRUaW1lb3V0IiwiU3RyaW5nIiwic2VudCIsInNlbGVjdGVkQ29ubmVjdG9ycyIsImNvbm5lY3RvclN0YXR1c2VzIiwiZnJvbUVudHJpZXMiLCJjb25uZWN0b3IiLCJzbHVnIiwiY29ubmVjdGlvbl9zdGF0dXMiLCJ1c2VyX2F1dGhvcml6ZWQiLCJjb25zb2xlIiwiX3gzIiwicHJlZmV0Y2hlZCIsImFpTW9kZWwiLCJzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMiLCJfbW9kYWxWYWx1ZXMkYWNjZXNzaWIyIiwiY2xpZW50cyIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDIiLCJlZGl0IiwiekluZGV4Iiwib25DbGljayIsImNoaWxkcmVuIiwicmVmIiwidGFiSW5kZXgiLCJzaXplIiwiY29sb3IiLCJhdHRhY2htZW50cyIsImxhYmVsIiwib25UaW1lb3V0IiwidGl0bGUiLCJ3aWR0aCIsImhlaWdodCIsImZpbGwiLCJ2YXJpYW50IiwiY2xhc3NOYW1lIiwiY2FuY2VsTW9kYWwiLCJkaXNhYmxlZCIsImhhc1Njcm9sbCIsImlzQWN0aXZlIiwiJGluZGV4IiwiZXhpc3RpbmdLbm93bGVkZ2UiLCJuZXdLbm93bGVkZ2UiLCJvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlIiwib25SZW1vdmVOZXdLbm93bGVkZ2UiLCJvbkZpbGVFcnJvckNoYW5nZSIsImNoaWxkcmVuV2l0aEljb24iLCJkaXNwbGF5IiwiZ2FwIiwiaXNEaXNhYmxlZCIsImluaXRpYWwiLCJmaWxlQWN0aW9ucyIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsIm5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1hbGVydCAqL1xuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWN5Y2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtbm8tdXNlbGVzcy1mcmFnbWVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuXG5pbXBvcnQgeyBDVUJ1dHRvbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2J1dHRvbi9saWIvY29tcG9uZW50cy9DVUJ1dHRvbidcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2F0ZWdvcnknXG5pbXBvcnQgeyBBbGVydCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0FsZXJ0J1xuaW1wb3J0IHsgVHJhc2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9UcmFzaCdcbmltcG9ydCB7IFN0YXIgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9TdGFyJ1xuaW1wb3J0IHsgQ3Jvc3MgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9Dcm9zcydcbmltcG9ydCB7IFNwaW5uZXJMb3R0aWUgfSBmcm9tICdAcHJvamVjdGNvci9jb3ItY29tbW9ucy9saWIvY29tcG9uZW50cy9zcGlubmVyLWxvdHRpZSdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IEFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0FibVNlY3Rpb24vQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24vQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24nXG5pbXBvcnQgeyBCYWNrZHJvcCB9IGZyb20gJy4uLy4uL2F0b21zL0JhY2tkcm9wJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBBY2Nlc3NpYmlsaXR5SWNvbiwgQnJhaW5JY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyB1c2VBZ2VudE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VBZ2VudE1vZGVsJ1xuaW1wb3J0IHsgQWdlbnQsIEFnZW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IHVzZUdldEFnZW50QnlJZCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2dldEFnZW50QnlJZCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEFibUdlbmVyYWxTZWN0aW9uLCBBYm1Lbm93bGVkZ2VTZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0FibVNlY3Rpb24nXG5pbXBvcnQgeyBNb2RhbFZhbHVlcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50TW9kYWwnXG5pbXBvcnQge1xuICBTQ0FBTUNvbnRlbnQsXG4gIFNDQUFNRm9vdGVyLFxuICBTQ0FBTUhlYWRlcixcbiAgU0NBQU1IZWFkZXJUaXRsZSxcbiAgU0NBQU1IZWFkZXJMZWZ0LFxuICBTQ0FBTUhlYWRlckZhdm9yaXRlLFxuICBTQ0FBTUhlYWRlckNsb3NlQnV0dG9uLFxuICBTQ0FBTVNpZGViYXIsXG4gIFNDQUFNV3JhcHBlcixcbiAgU0NBQU1TaWRlYmFySXRlbSxcbiAgU0NBQU1TaWRlYmFySXRlbVRpdGxlLFxuICBTQ0FBTURlbGV0ZUJ1dHRvbixcbiAgU0NBQU1TYXZlQnV0dG9uLFxuICBTQ0FBTVdyYXBwZXJTcGlubmVyLFxuICBTQ0FBTVdyYXBwZXJTcGlubmVyQ29udGVudCxcbiAgU0NBQU1TaWRlYmFySXRlbUVycm9yLFxufSBmcm9tICcuL0FibUFnZW50TW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgdXNlQ3JlYXRlQWdlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZUNyZWF0ZUFnZW50J1xuaW1wb3J0IHsgdXNlRGVsZXRlQWdlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZURlbGV0ZUFnZW50J1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVXBkYXRlQWdlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZVVwZGF0ZUFnZW50J1xuaW1wb3J0IHsgdXNlS25vd2xlZGdlT3BlcmF0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUtub3dsZWRnZSdcbmltcG9ydCB7IEFibUxvYWRlckZpbGVzIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0FibVNlY3Rpb24vQWJtTG9hZGVyRmlsZXMnXG5pbXBvcnQgeyBXcmFwcGVyQ2VudGVySWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL1dyYXBwZXJDZW50ZXJJY29uJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uL0RlbGV0ZVF1ZXN0aW9uTW9kYWwvRGVsZXRlUXVlc3Rpb25Nb2RhbCdcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuaW1wb3J0IHsgdXNlQWNjZXNzQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWNjZXNzQ2xpZW50L3VzZUFjY2Vzc0NsaWVudCdcbmltcG9ydCB7IHVzZVRvZ2dsZUZhdm9yaXRlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MnXG5pbXBvcnQge1xuICBidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QsXG4gIERFRkFVTFRfQ09SX0FDQ0VTUyxcbiAgZGVyaXZlQXNzaWduZWRDb25uZWN0b3JTbHVncyxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbm9ybWFsaXplQWdlbnRDb25uZWN0b3JzJ1xuaW1wb3J0IHtcbiAgYXBwbHlLbm93bGVkZ2VGaWxlU3RhdHVzVXBkYXRlLFxuICBidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbCxcbiAgY3JlYXRlSW5pdGlhbEFibU1vZGFsVmFsdWVzLFxuICBoYXNBYm1QZW5kaW5nQ2hhbmdlcyxcbiAgaGFzQWNjZXNzaWJpbGl0eVNlY3Rpb25DaGFuZ2VkLFxuICBoYXNJbmFjdGl2ZUFjY2Vzc2liaWxpdHlDbGllbnRzLFxuICBpc0FibVNhdmVEaXNhYmxlZCxcbiAgaXNTYW1lQWdlbnRNb2RhbFNuYXBzaG90LFxuICByZXNvbHZlS25vd2xlZGdlVXBsb2FkT3V0Y29tZSxcbiAgc2hvdWxkQ29uZmlybUFibUNsb3NlLFxufSBmcm9tICcuL0FibUFnZW50TW9kYWwuaGVscGVycydcbmltcG9ydCB7IGdldEFnZW50Q29ubmVjdG9ycyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2Nvbm5lY3RvcnMnXG5pbXBvcnQgeyBoYXNNYWlhRXh0ZXJuYWxDb25uZWN0b3JzQWNjZXNzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL21haWFFeHRlcm5hbENvbm5lY3RvcnNBY2Nlc3MnXG5cbmNvbnN0IGluaXRpYWxWYWx1ZXMgPSBPYmplY3QuZnJlZXplKGNyZWF0ZUluaXRpYWxBYm1Nb2RhbFZhbHVlcygpKVxuXG50eXBlIEFibVNlY3Rpb24gPSAnZ2VuZXJhbCcgfCAna25vd2xlZGdlJyB8ICd0cmFpbmluZycgfCAndGVzdGluZycgfCAnYWNjZXNzaWJpbGl0eSdcblxuZXhwb3J0IGNvbnN0IFNlY3Rpb25CeUtleSA9IHtcbiAgZ2VuZXJhbDogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoe1xuICAgICAga2V5LFxuICAgICAgdmFsdWUsXG4gICAgICBkZWxldGVLbm93bGVkZ2UsXG4gICAgfToge1xuICAgICAga2V5OiBzdHJpbmdcbiAgICAgIHZhbHVlOiB1bmtub3duXG4gICAgICBkZWxldGVLbm93bGVkZ2U/OiBib29sZWFuXG4gICAgfSkgPT4gdm9pZFxuICAgIGFnZW50TW9kZWxzOiBBZ2VudE1vZGVsW11cbiAgICBsb2FkaW5nOiBib29sZWFuXG4gICAgdG9vbHRpcFpJbmRleD86IG51bWJlclxuICB9KSA9PiA8QWJtR2VuZXJhbFNlY3Rpb24gey4uLnByb3BzfSAvPixcbiAga25vd2xlZGdlOiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7IGtleSwgdmFsdWUgfTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZFxuICAgIGV4aXN0aW5nS25vd2xlZGdlOiBBdHRhY2htZW50RmlsZVtdXG4gICAgbmV3S25vd2xlZGdlOiBBdHRhY2htZW50RmlsZVtdXG4gICAgb25SZW1vdmVFeGlzdGluZ0tub3dsZWRnZTogKGZpbGVJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25SZW1vdmVOZXdLbm93bGVkZ2U6IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uRmlsZUVycm9yQ2hhbmdlOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gICAgdG9vbHRpcFpJbmRleD86IG51bWJlclxuICB9KSA9PiA8QWJtS25vd2xlZGdlU2VjdGlvbiB7Li4ucHJvcHN9IC8+LFxuICBhY2Nlc3NpYmlsaXR5OiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7IGtleSwgdmFsdWUgfTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZFxuICB9KSA9PiA8QWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24gey4uLnByb3BzfSAvPixcbn1cblxudHlwZSBBYm1BZ2VudE1vZGFsUHJvcHMgPSB7XG4gIGFkZEFnZW50OiAobmV3QWdlbnQ6IEFnZW50LCBvcHRpb25zPzogeyBuYXZpZ2F0ZUhvbWU/OiBib29sZWFuIH0pID0+IHZvaWRcbiAgcmVtb3ZlQWdlbnQ6IChhZ2VudElkOiBudW1iZXIgfCBzdHJpbmcpID0+IHZvaWRcbiAgdXBkYXRlQWdlbnQ6ICh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIHVwZGF0ZUFnZW50RmF2b3JpdGU6ICh1cGRhdGVkQWdlbnQ6IEFnZW50LCBzaG91bGRTb3J0PzogYm9vbGVhbikgPT4gdm9pZFxuICBzZWxlY3RGaXJzdEFnZW50OiAoYWdlbnRJZDogc3RyaW5nKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBBYm1BZ2VudE1vZGFsID0gKHtcbiAgYWRkQWdlbnQsXG4gIHVwZGF0ZUFnZW50LFxuICByZW1vdmVBZ2VudCxcbiAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgc2VsZWN0Rmlyc3RBZ2VudCxcbn06IEFibUFnZW50TW9kYWxQcm9wcykgPT4ge1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhYm1fYWdlbnRfc2VjdGlvbicpXG4gIC8vIGNvbnN0ICRfc2M6IGFueSA9IG51bGxcbiAgY29uc3QgeyBhZ2VudDogY3VycmVudFNlbGVjdGVkQWdlbnQsIHNlbGVjdEFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgYWJtQWdlbnRNb2RhbFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTExMiwgJ2FnZW50TW9kYWwnKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnbmVzdGVkTW9kYWwnKVxuICBjb25zdCB7IHRvZ2dsZUZhdm9yaXRlIH0gPSB1c2VUb2dnbGVGYXZvcml0ZSgpXG4gIGNvbnN0IHNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FibS1hZ2VudC1tb2RhbCcpXG4gIGNvbnN0IFtpc1N1YnNjcmliZWQsIHNldElzU3Vic2NyaWJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgbW9kYWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGhhc1BlbmRpbmdGaWxlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYWN0aW9uc1RvRmlsZXMgPSB1c2VSZWY8YW55Pih7XG4gICAgdG9EZWxldGU6IFtdLFxuICAgIHRvVXBsb2FkOiBbXSxcbiAgfSlcbiAgY29uc3QgYWNjZXNzVXBkYXRlQ29udGV4dCA9IHVzZVJlZjx7XG4gICAgaXNGcm9tQ3JlYXRpb246IGJvb2xlYW5cbiAgICBpc0Zyb21FZGl0aW5nOiBib29sZWFuXG4gICAgaGFzQWN0aW9uRmlsZXM6IGJvb2xlYW5cbiAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyB8ICd1cGRhdGUnIHwgbnVsbFxuICAgIGhhc0JlZW5DYWxsZWQ/OiBib29sZWFuXG4gIH0+KHtcbiAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gIH0pXG4gIGNvbnN0IGFjY2Vzc0hhbmRsZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGFnZW50Q3JlYXRlZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYgPSB1c2VSZWY8QWJtU2VjdGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHByZWZldGNoZWRBZ2VudEJ5SWRSZWYgPSB1c2VSZWY8YW55PihudWxsKVxuICBjb25zdCBoeWRyYXRpbmdBZ2VudElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGZpbGVzRmluaXNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8vIE1hcmNhIGN1YW5kbyBjZXJyYW1vcyBlbCBsb2FkZXIgcG9yIGVsIHRpbWVvdXQgZGUgc2VndXJpZGFkIGRlIGFyY2hpdm9zLlxuICAvLyBNaWVudHJhcyBlc3TDqSBhY3Rpdm8sIGxvcyB1c2VFZmZlY3QgZGUgcG9zdC1ndWFyZGFkbyBOTyBkZWJlbiBkaXNwYXJhclxuICAvLyBzbmFja2JhcnMgZGUgw6l4aXRvIG5pIGF1dG8tY2VycmFyIGVsIG1vZGFsLlxuICBjb25zdCBwcm9jZXNzRmlsZXNUaW1lZE91dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgW2ZpbGVzUHJvY2Vzc2VkLCBzZXRGaWxlc1Byb2Nlc3NlZF0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93TW9kYWxEZWxldGUsIHNldFNob3dNb2RhbERlbGV0ZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlY3Rpb24sIHNldFNlY3Rpb25dID0gdXNlU3RhdGU8QWJtU2VjdGlvbj4oJ2dlbmVyYWwnKVxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFttb2RhbFZhbHVlcywgc2V0TW9kYWxWYWx1ZXNdID0gdXNlU3RhdGU8e1xuICAgIGdlbmVyYWw6IGFueVxuICAgIGtub3dsZWRnZTogYW55XG4gICAgaXNFZGl0aW5nOiBib29sZWFuXG4gICAgYWNjZXNzaWJpbGl0eTogYW55XG4gIH0+KGluaXRpYWxWYWx1ZXMpXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nOiBhZ2VudExvYWRpbmcsXG4gICAgaGFuZGxlR2V0QWdlbnRCeUlkLFxuICAgIGFnZW50OiBhZ2VudEJ5SWQsXG4gICAgaGFuZGxlQ2xlYW5BZ2VudCxcbiAgICBlcnJvcjogZXJyb3JHZXRBZ2VudEJ5SWQsXG4gIH0gPSB1c2VHZXRBZ2VudEJ5SWQoKVxuICBjb25zdCB7IGFnZW50TW9kZWxzLCBnZXRBbGxBZ2VudE1vZGVscyB9ID0gdXNlQWdlbnRNb2RlbCgpXG4gIGNvbnN0IGZpcnN0VmFsdWVBZ2VudCA9IHVzZVJlZjxhbnk+KG51bGwpXG4gIGNvbnN0IFtpc1Nob3dQcm9jZXNzRmlsZXMsIHNldElzU2hvd1Byb2Nlc3NGaWxlc10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhc0ZpbGVFcnJvcnMsIHNldEhhc0ZpbGVFcnJvcnNdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50c1xuXG4gIGNvbnN0IHsgaGFuZGxlRGVsZXRlQWdlbnQsIHN1Y2Nlc3M6IHN1Y2Nlc3NEZWxldGUsIHJlc2V0U3VjY2VzcyB9ID0gdXNlRGVsZXRlQWdlbnQoKVxuICBjb25zdCB7IGhhbmRsZVVwZGF0ZUFnZW50LCBzdWNjZXNzOiBzdWNjZXNzVXBkYXRlLCByZXNldFN1Y2Nlc3M6IHJlc2V0U3VjY2Vzc1VwZGF0ZSB9ID0gdXNlVXBkYXRlQWdlbnQoKVxuXG4gIGNvbnN0IHtcbiAgICBoYW5kbGVDcmVhdGVBZ2VudCxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0NyZWF0ZSxcbiAgICBzdWNjZXNzOiBzdWNjZXNzQ3JlYXRlLFxuICAgIHJlc2V0U3VjY2VzczogcmVzZXRTdWNjZXNzQ3JlYXRlLFxuICB9ID0gdXNlQ3JlYXRlQWdlbnQoKVxuXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJTdWNjZXNzLCBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuXG4gIGNvbnN0IHtcbiAgICBoYW5kbGVDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZURlbGV0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0tub3dsZWRnZSxcbiAgICBlcnJvcjogZXJyb3JLbm93bGVkZ2UsXG4gICAgc3VjY2Vzc0RlbGV0ZTogc3VjY2Vzc0tub3dsZWRnZURlbGV0ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgfSA9IHVzZUtub3dsZWRnZU9wZXJhdGlvbnMoKVxuXG4gIGNvbnN0IHtcbiAgICBoYW5kbGVBY2Nlc3NDbGllbnQsXG4gICAgc3VjY2Vzczogc3VjY2Vzc1VwZGF0ZUFjY2VzcyxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1VwZGF0ZUFjY2VzcyxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3M6IHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcyxcbiAgfSA9IHVzZUFjY2Vzc0NsaWVudCgpXG5cbiAgY29uc3QgY3JlYXRpb25EcmFmdERlZmF1bHRzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZGVmYXVsdElucHV0UGxhY2Vob2xkZXI6IHQoJ2dlbmVyYWxTZWN0aW9uLmlucHV0UGxhY2Vob2xkZXInKSxcbiAgICAgIGRlZmF1bHRVc2VyUHJvbXB0UGxhY2Vob2xkZXI6IHQoJ2dlbmVyYWxTZWN0aW9uLmluaXRpYWxQcm9tcHRQbGFjZWhvbGRlcicpLFxuICAgICAgZGVmYXVsdEFpTW9kZWxJZDogYWdlbnRNb2RlbHNbMF0/LmlkID8/IG51bGwsXG4gICAgfSksXG4gICAgW2FnZW50TW9kZWxzLCB0XVxuICApXG5cbiAgY29uc3QgaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQgPSAoKSA9PlxuICAgIGhhc0FjY2Vzc2liaWxpdHlTZWN0aW9uQ2hhbmdlZChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LCBmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8uYWNjZXNzaWJpbGl0eSlcblxuICBjb25zdCBoYXNQZW5kaW5nQ2hhbmdlcyA9ICgpID0+XG4gICAgaGFzQWJtUGVuZGluZ0NoYW5nZXMobW9kYWxWYWx1ZXMsIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LCBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LCBjcmVhdGlvbkRyYWZ0RGVmYXVsdHMpXG5cbiAgY29uc3QgdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSA9ICgpID0+XG4gICAgQm9vbGVhbihcbiAgICAgIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50ICYmIGlzU2FtZUFnZW50TW9kYWxTbmFwc2hvdChtb2RhbFZhbHVlcywgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQsIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQpXG4gICAgKVxuXG4gIC8vIEhlbHBlciBwYXJhIG1hbmVqYXIgZWwgdG9nZ2xlIGRlIGZhdm9yaXRvIHkgYWN0dWFsaXphciBlbCBlc3RhZG8gY29uIG9yZGVuYW1pZW50b1xuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZywgYWdlbnQ6IEFnZW50LCBvblN1Y2Nlc3M/OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZCwgb25FcnJvcj86ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIHRvZ2dsZUZhdm9yaXRlKFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgIC8vIEFjdHVhbGl6YXIgZWwgZXN0YWRvIGRlIGFnZW50ZXMgY29uIGVsIHJlc3VsdGFkbyBkZWwgc2Vydmlkb3IgeSBvcmRlbmFyXG4gICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZSh1cGRhdGVkQWdlbnQsIHRydWUpXG4gICAgICAgICAgaWYgKG9uU3VjY2Vzcykge1xuICAgICAgICAgICAgb25TdWNjZXNzKHVwZGF0ZWRBZ2VudClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgICAgb25FcnJvcigpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZ2VudC5pc19mYXZvcml0ZVxuICAgICAgKVxuICAgIH0sXG4gICAgW3RvZ2dsZUZhdm9yaXRlLCB1cGRhdGVBZ2VudEZhdm9yaXRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgc2hvdWxkQ29uZmlybUFibUNsb3NlKGhhc1BlbmRpbmdDaGFuZ2VzKCksIHtcbiAgICAgICAgY3JlYXRlOiBzdWNjZXNzQ3JlYXRlLFxuICAgICAgICB1cGRhdGU6IHN1Y2Nlc3NVcGRhdGUsXG4gICAgICAgIGRlbGV0ZTogc3VjY2Vzc0RlbGV0ZSxcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICBjb25zdCBjb25maXJtTWVzc2FnZSA9IG1vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ2NvbmZpcm1DbG9zZUVkaXRBZ2VudCcpIDogdCgnY29uZmlybUNsb3NlQ3JlYXRlQWdlbnQnKVxuXG4gICAgICBpZiAoIXdpbmRvdy5jb25maXJtKGNvbmZpcm1NZXNzYWdlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRNb2RhbFZhbHVlcyhpbml0aWFsVmFsdWVzKVxuICAgIGhhbmRsZUNsZWFuQWdlbnQoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50ID0ge1xuICAgICAgdG9EZWxldGU6IFtdLFxuICAgICAgdG9VcGxvYWQ6IFtdLFxuICAgIH1cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgIHNldElzU3Vic2NyaWJlZChmYWxzZSlcbiAgICBzZXRGaWxlc1Byb2Nlc3NlZCgwKVxuICAgIHNldFNlY3Rpb24oJ2dlbmVyYWwnKVxuICAgIHNldElzT3BlbihmYWxzZSlcbiAgICBoeWRyYXRpbmdBZ2VudElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWdlbnRDcmVhdGVkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmFja2Ryb3BDbGljayA9IChldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykge1xuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNlY3Rpb25DaGFuZ2UgPSAobmV3U2VjdGlvbjogQWJtU2VjdGlvbikgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy50YWJTZWN0aW9uLCB7IG9wdGlvbjogbmV3U2VjdGlvbiB9KVxuICAgIHNldFNlY3Rpb24obmV3U2VjdGlvbilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzID0gKHtcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gICAgZGVsZXRlS25vd2xlZGdlLFxuICB9OiB7XG4gICAga2V5OiBzdHJpbmdcbiAgICB2YWx1ZTogYW55XG4gICAgZGVsZXRlS25vd2xlZGdlOiBib29sZWFuXG4gIH0pID0+IHtcbiAgICBpZiAoa2V5ID09PSAna25vd2xlZGdlJykge1xuICAgICAgaWYgKCFkZWxldGVLbm93bGVkZ2UpIHtcbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5wdXNoKC4uLih2YWx1ZSB8fCBbXSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWxlc1ByZXZJZHMgPSB2YWx1ZS5sZW5ndGggPyBuZXcgU2V0KHZhbHVlLm1hcChmaWxlID0+IGZpbGUuaWQpKSA6IG5ldyBTZXQoKVxuICAgICAgICBjb25zdCBuZXdGaWxlcyA9IG1vZGFsVmFsdWVzLmtub3dsZWRnZS5maWx0ZXIoZmlsZSA9PiAhZmlsZXNQcmV2SWRzLmhhcyhmaWxlLmlkKSAmJiBmaWxlLnN0YXR1cyAhPT0gJ3N0YXJ0ZWQnKVxuICAgICAgICBpZiAoIW5ld0ZpbGVzLmxlbmd0aCAmJiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlSWRzID0gbmV3IFNldCh2YWx1ZS5tYXAoZmlsZSA9PiBmaWxlLmlkKSlcbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5maWx0ZXIoZmlsZSA9PiB2YWx1ZUlkcy5oYXMoZmlsZS5pZCkpXG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSA9IFsuLi4oYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSB8fCBbXSksIC4uLm5ld0ZpbGVzXVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGtub3dsZWRnZUZpbGVzID1cbiAgICAgICAga2V5ID09PSAna25vd2xlZGdlJ1xuICAgICAgICAgID8gZGVsZXRlS25vd2xlZGdlXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IFsuLi4ocHJldi5rbm93bGVkZ2UgfHwgW10pLCAuLi4oKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10pIHx8IFtdKV1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIC4uLihrZXkgPT09ICdrbm93bGVkZ2UnXG4gICAgICAgICAgPyB7IGtub3dsZWRnZToga25vd2xlZGdlRmlsZXMgfVxuICAgICAgICAgIDoga2V5ID09PSAnYWNjZXNzaWJpbGl0eSdcbiAgICAgICAgICAgID8geyBhY2Nlc3NpYmlsaXR5OiB2YWx1ZSB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1BY3Rpb24gPSBhc3luYyAoY2hhdDogYW55LCBhY3Rpb246ICdkZWxldGUnIHwgJ3VwZGF0ZScgfCAnY3JlYXRlJykgPT4ge1xuICAgIC8vIFNvbG8gcGVybWl0aXIgb3BlcmFjaW9uZXMgZGUgYWdlbnRlcyBjdXN0b20gc2kgbGEgZmVhdHVyZSBmbGFnIGVzdMOhIGhhYmlsaXRhZGFcbiAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmRlbGV0ZSlcbiAgICAgIGhhbmRsZURlbGV0ZUFnZW50KGNoYXQuaWQgYXMgdW5rbm93biBhcyBzdHJpbmcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgY29yQWNjZXNzID0gbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jb3JBY2Nlc3MgPz8gREVGQVVMVF9DT1JfQUNDRVNTXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmNvbmZpcm1BY3Rpb24sIHtcbiAgICAgIG9wdGlvbjogbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gJ2VkaXQnIDogJ2NyZWF0ZScsXG4gICAgICBjb3Jfc2x1Z3M6IGJ1aWxkQWdlbnRUb29sR3JvdXBzUmVxdWVzdChjb3JBY2Nlc3MpLFxuICAgICAgY29yX2FjY2VzczogY29yQWNjZXNzLFxuICAgIH0pXG4gICAgLy8gQWwgcmVpbnRlbnRhciBndWFyZGFyLCBsaWJlcmFyIGVsIGZyZW5vIGRlbCB0aW1lb3V0IHByZXZpbyBwYXJhIHF1ZSBsb3NcbiAgICAvLyB1c2VFZmZlY3QgZGUgcG9zdC1ndWFyZGFkbyB2dWVsdmFuIGEgcG9kZXIgZGlzcGFyYXIgc25hY2tiYXJzIHkgY2VycmFyLlxuICAgIHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHtcbiAgICAgIGlmICghdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVVwZGF0ZUFnZW50KG1vZGFsVmFsdWVzKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoYW5kbGVDcmVhdGVBZ2VudChtb2RhbFZhbHVlcylcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnRWYWx1ZXMgfSA9IGV2ZW50LmRldGFpbFxuICAgICAgY29uc3QgaW5pdGlhbFNlY3Rpb24gPSBhZ2VudFZhbHVlcz8uaW5pdGlhbFNlY3Rpb24gYXMgQWJtU2VjdGlvbiB8IHVuZGVmaW5lZFxuICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPVxuICAgICAgICBpbml0aWFsU2VjdGlvbiAmJiBbJ2dlbmVyYWwnLCAna25vd2xlZGdlJywgJ2FjY2Vzc2liaWxpdHknXS5pbmNsdWRlcyhpbml0aWFsU2VjdGlvbikgPyBpbml0aWFsU2VjdGlvbiA6IG51bGxcbiAgICAgIGh5ZHJhdGluZ0FnZW50SWRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgZ2V0QWxsQWdlbnRNb2RlbHMoKVxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYWdlbnRWYWx1ZXMudmFsdWVzPy5pc0VkaXRpbmcpIHtcbiAgICAgICAgLy8gVmFsaWRhciBxdWUgbGEgZmVhdHVyZSBmbGFnIGVzdMOpIGhhYmlsaXRhZGEgYW50ZXMgZGUgY2FyZ2FyIGVsIGFnZW50ZSBwYXJhIGVkaXRhclxuICAgICAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICAgIHNldElzT3BlbihmYWxzZSlcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChhZ2VudFZhbHVlcy5wcmVmZXRjaGVkQWdlbnRCeUlkKSB7XG4gICAgICAgICAgaGFuZGxlQ2xlYW5BZ2VudCgpXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gYWdlbnRWYWx1ZXMucHJlZmV0Y2hlZEFnZW50QnlJZFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZUdldEFnZW50QnlJZChhZ2VudFZhbHVlcz8udmFsdWVzPy5nZW5lcmFsPy5pZCBhcyB1bmtub3duIGFzIHN0cmluZylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChhZ2VudFZhbHVlcy52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHtcbiAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAgIC4uLmFnZW50VmFsdWVzLnZhbHVlcyxcbiAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLmdlbmVyYWwsXG4gICAgICAgICAgICAuLi4oYWdlbnRWYWx1ZXMudmFsdWVzLmdlbmVyYWwgfHwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LFxuICAgICAgICAgICAgLi4uKGFnZW50VmFsdWVzLnZhbHVlcy5hY2Nlc3NpYmlsaXR5IHx8IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGtub3dsZWRnZTogYWdlbnRWYWx1ZXMudmFsdWVzLmtub3dsZWRnZSB8fCBbXSxcbiAgICAgICAgfVxuXG4gICAgICAgIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50ID0gbmV4dFZhbHVlc1xuICAgICAgICBzZXRNb2RhbFZhbHVlcyhuZXh0VmFsdWVzKVxuICAgICAgfVxuXG4gICAgICBpZiAocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgJiYgIWFnZW50VmFsdWVzLnZhbHVlcz8uaXNFZGl0aW5nKSB7XG4gICAgICAgIHNldFNlY3Rpb24ocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQpXG4gICAgICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMgYXMgRXZlbnRMaXN0ZW5lcilcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIHVzZUVmZmVjdCB0byBoYW5kbGUgdGhlIG92ZXJmbG93IG9mIHRoZSBib2R5IHdoZW4gdGhlIG1vZGFsIGlzIG9wZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE92ZXJmbG93ID0gYm9keS5zdHlsZS5vdmVyZmxvd1xuICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbE92ZXJmbG93XG4gICAgfVxuICB9LCBbaXNPcGVuXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUJlZm9yZVVubG9hZCA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHtcbiAgICAgIGlmIChoYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gdCgnY29uZmlybVJlbG9hZEJyb3dzZXInKVxuICAgICAgICByZXR1cm4gdCgnY29uZmlybVJlbG9hZEJyb3dzZXInKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpXG4gICAgfVxuICB9LCBbaXNPcGVuLCBoYXNQZW5kaW5nQ2hhbmdlcywgdF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3VjY2Vzc0RlbGV0ZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudERlbGV0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2VzcygpXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkIGFzIHN0cmluZylcbiAgICAgIH1cbiAgICAgIHJlbW92ZUFnZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpXG4gICAgICBzZXRTaG93TW9kYWxEZWxldGUoZmFsc2UpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICB9LCBbc3VjY2Vzc0RlbGV0ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBFdml0YXIgZWplY3VjacOzbiBtw7psdGlwbGUgZGVsIGVmZWN0b1xuICAgIGlmIChzdWNjZXNzQ3JlYXRlICYmICFpc0xvYWRpbmdDcmVhdGUgJiYgYWdlbnRDcmVhdGVkUmVmLmN1cnJlbnQgIT09IHN1Y2Nlc3NDcmVhdGUuaWQpIHtcbiAgICAgIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ID0gc3VjY2Vzc0NyZWF0ZS5pZFxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUubGVuZ3RoICYmIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICBmaWxlc1RvRGVsZXRlOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLFxuICAgICAgICAgICAgZmlsZXNUb0NyZWF0ZTogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyh7IGZpbGVzOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLCBhZ2VudElkOiBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCkgfSksXG4gICAgICAgIF1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueScpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKGhhbmRsZUFjY2Vzc0NsaWVudChzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaXNfZmF2b3JpdGUpIHtcbiAgICAgICAgICBjb25zdCBhZ2VudFdpdGhGYXZvcml0ZSA9IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfVxuICAgICAgICAgIGFkZEFnZW50KGFnZW50V2l0aEZhdm9yaXRlKVxuICAgICAgICAgIC8vIEN1YW5kbyBzZSBjcmVhIHVuIGFnZW50ZSBudWV2bywgZWwgc2Vydmlkb3Igbm8gdGllbmUgZWwgZmF2b3JpdG8gbWFyY2FkbyBhw7puXG4gICAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVzb2x2ZSgpLFxuICAgICAgICAgICAgICAgICgpID0+IHJlamVjdCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEFnZW50KHN1Y2Nlc3NDcmVhdGUpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAvLyBTb2xvIHJlc2V0ZWFyIGVsIGNvbnRleHRvIHNpIE5PIHNlIGhhIGxsYW1hZG8gdG9kYXbDrWFcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgIGNvbnN0IHsgaGFzQWN0aW9uRmlsZXMgfSA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogaGFzQWN0aW9uRmlsZXMgfHwgZmFsc2UsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQpIHtcbiAgICAgICAgICBoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KVxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBoYW5kbGVBY2Nlc3NDbGllbnQsIGVsIGFnZW50ZSBzZSBhZ3JlZ2Fyw6EgeSBlbCB0b2dnbGUgc2UgaGFyw6EgZW4gc3VjY2Vzc1VwZGF0ZUFjY2Vzc1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGZhdm9yaXRlIGlmIGl0IHdhcyBtYXJrZWQgZHVyaW5nIGNyZWF0aW9uXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBQcmltZXJvIGFncmVnYXIgZWwgYWdlbnRlIGEgbGEgbGlzdGEgKGFkZEFnZW50IHlhIG9yZGVuYSlcbiAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG5cbiAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAvLyBMdWVnbyBoYWNlciBlbCB0b2dnbGUgZGUgZmF2b3JpdG8gZW4gZWwgc2Vydmlkb3IgeSBhY3R1YWxpemFyIGVsIGVzdGFkb1xuICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyB9KVxuICAgICAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUgfSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogJ2FkZCcgfSlcbiAgICAgICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGlzTG9hZGluZ0NyZWF0ZSxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIGFkZEFnZW50LFxuICAgIHNlbGVjdEFnZW50LFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gICAgaGFuZGxlQ2xvc2UsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzVXBkYXRlKSB7XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlID0gW11cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBmaWxlc1RvQ3JlYXRlOiBmaWxlc1RvVXBsb2FkLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlczogZmlsZXNUb1VwbG9hZCxcbiAgICAgICAgICAgICAgYWdlbnRJZDogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4oaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKVxuICAgICAgICAgICAgICA/IFtoYW5kbGVBY2Nlc3NDbGllbnQobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KV1cbiAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgXSlcbiAgICAgICAgfVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgLy8gU29sbyByZXNldGVhciBlbCBjb250ZXh0byBzaSBOTyBzZSBoYSBsbGFtYWRvIHRvZGF2w61hIHkgTk8gaGF5IGFyY2hpdm9zIHBlbmRpZW50ZXNcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCAmJiAhYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICAvLyBMbGFtYXIgYSBoYW5kbGVBY2Nlc3NDbGllbnQgc29sbyB1bmEgdmV6XG4gICAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgICAgaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSlcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gU29sbyBjZXJyYXIgc2kgbm8gaGF5IGFyY2hpdm9zIHNpZW5kbyBwcm9jZXNhZG9zIG5pIGFjY2VzcyBwZW5kaWVudGVcbiAgICAgIGlmIChcbiAgICAgICAgIWhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ICYmXG4gICAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXMgJiZcbiAgICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoICYmXG4gICAgICAgICFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgICAgICAgIXN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiZcbiAgICAgICAgIXByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnRcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50VXBkYXRlZCcpKVxuICAgICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBzdWNjZXNzVXBkYXRlLmlkKSB7XG4gICAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJykpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBzdWNjZXNzVXBkYXRlLFxuICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVQcm9jZXNzRmlsZXNUaW1lb3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykgcmV0dXJuXG5cbiAgICAvLyBBbCBjdW1wbGlyc2UgZWwgdGltZW91dCBhc3VtaW1vcyBxdWUgZWwgZ3VhcmRhZG8gZGVsIGFnZW50ZSBmdWUgZXhpdG9zb1xuICAgIC8vIChlbCBzZXJ2ZXIgcmVzcG9uZGnDsyBPSykgeSBxdWUgbG9zIGFyY2hpdm9zIHNlIGVudmlhcm9uIGNvcnJlY3RhbWVudGUuXG4gICAgLy8gU29sbyBwZXJkaW1vcyBsYSBjb25maXJtYWNpw7NuIGFzaW5jcsOzbmljYSBkZWwgV2ViU29ja2V0IHNvYnJlIHN1XG4gICAgLy8gcHJvY2VzYW1pZW50by4gQ2VycmFtb3MgdG9kbyBtb3N0cmFuZG8gZWwgc25hY2tiYXIgZGUgw6l4aXRvIHF1ZSBodWJpZXNlXG4gICAgLy8gZGlzcGFyYWRvIGVsIGZsdWpvIG5vcm1hbCBkZSDDqXhpdG8uXG5cbiAgICAvLyBGcmVubyBwYXJhIHF1ZSBsb3MgdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gbm8gcmUtZGlzcGFyZW4gc25hY2tiYXJzXG4gICAgLy8gbyBjaWVycmVzIGR1cGxpY2Fkb3MgY3VhbmRvIHNldElzU2hvd1Byb2Nlc3NGaWxlcyhmYWxzZSkgbG9zIGdhdGlsbGUuXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IHRydWVcblxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcgJiYgc3VjY2Vzc1VwZGF0ZSkge1xuICAgICAgdXBkYXRlQWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgPT09IHN1Y2Nlc3NVcGRhdGUuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgIH0gZWxzZSBpZiAoIW1vZGFsVmFsdWVzLmlzRWRpdGluZyAmJiBzdWNjZXNzQ3JlYXRlKSB7XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlKClcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcygpXG5cbiAgICBoYW5kbGVDbG9zZSgpXG4gIH0sIFtcbiAgICBpc1Nob3dQcm9jZXNzRmlsZXMsXG4gICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLFxuICAgIHN1Y2Nlc3NVcGRhdGUsXG4gICAgc3VjY2Vzc0NyZWF0ZSxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICBjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlLFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgY29uc3Qgd2ViU29ja2V0RnVuY3Rpb24gPSAoeyBtb2RlbF9kYXRhOiBtb2RlbERhdGEgfTogeyBtb2RlbF9kYXRhOiBhbnkgfSkgPT4ge1xuICAgIGNvbnN0IGZpbGVTdGF0dXMgPSBtb2RlbERhdGFcbiAgICBpZiAoZmlsZVN0YXR1cy5zdGF0dXMgPT09ICdkb25lJyB8fCBmaWxlU3RhdHVzLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkS25vd2xlZGdlID0gYXBwbHlLbm93bGVkZ2VGaWxlU3RhdHVzVXBkYXRlKHByZXYua25vd2xlZGdlLCBmaWxlU3RhdHVzKVxuICAgICAgICBjb25zdCB1cGxvYWRPdXRjb21lID0gcmVzb2x2ZUtub3dsZWRnZVVwbG9hZE91dGNvbWUodXBkYXRlZEtub3dsZWRnZSlcbiAgICAgICAgaWYgKHVwbG9hZE91dGNvbWUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IoXG4gICAgICAgICAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InKSA6IHQoJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJylcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAodXBsb2FkT3V0Y29tZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG5cbiAgICAgICAgICAvLyBTaSBoYWLDrWEgYWNjZXNzIHBlbmRpZW50ZSB5IHlhIGVzdGFiYSBtYW5lamFkbywgZm9yemFyIHF1ZSBlbCB1c2VFZmZlY3QgZGUgYWNjZXNzIHNlIGVqZWN1dGUgZGUgbnVldm9cbiAgICAgICAgICBpZiAoYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzICYmIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgc2V0RmlsZXNQcm9jZXNzZWQocHJldkNvdW50ID0+IHByZXZDb3VudCArIDEpXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgICAgICAgIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgICAgICAgIWZpbGVzRmluaXNoZWRSZWYuY3VycmVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU2kgZXMgY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkLCBtYXJjYXIgcXVlIGxvcyBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgICAgICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgICBzZXRGaWxlc1Byb2Nlc3NlZChwcmV2Q291bnQgPT4gcHJldkNvdW50ICsgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGtub3dsZWRnZTogdXBkYXRlZEtub3dsZWRnZSxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzS25vd2xlZGdlRGVsZXRlICYmICFpc0xvYWRpbmdLbm93bGVkZ2UgJiYgIWVycm9yS25vd2xlZGdlKSB7XG4gICAgICAvLyBTb2xvIGNlcnJhciBzaSBOTyBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3NcbiAgICAgIGlmIChoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCB8fCBpc1Nob3dQcm9jZXNzRmlsZXMgfHwgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBTaSBlbCBsb2FkZXIgc2UgY2VycsOzIHBvciB0aW1lb3V0LCBubyBtb3N0cmFyIHNuYWNrYmFyIGRlIMOpeGl0byBuaSBjZXJyYXJcbiAgICAgIGlmIChwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICAgIGlmIChlcnJvcktub3dsZWRnZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihcbiAgICAgICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnY29uZmlybUFnZW50VXBkYXRlZFdpdGhGaWxlc0Vycm9yJykgOiB0KCdjb25maXJtQWdlbnRXaXRoRmlsZXNFcnJvcicpXG4gICAgICApXG4gICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NLbm93bGVkZ2VEZWxldGUsIGlzTG9hZGluZ0tub3dsZWRnZSwgZXJyb3JLbm93bGVkZ2UsIGlzU2hvd1Byb2Nlc3NGaWxlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG5cbiAgICAvLyBTaSBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3MsIGVzcGVyYXIgYSBxdWUgdGVybWluZW5cbiAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiAoaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgfHwgaXNTaG93UHJvY2Vzc0ZpbGVzKSkge1xuICAgICAgLy8gU2kgc3VjY2Vzc1VwZGF0ZUFjY2VzcyBlc3TDoSBhY3Rpdm8sIG1hcmNhciBjb21vIG1hbmVqYWRvIHBlcm8gTk8gcmVzZXRlYXIgaGFzdGEgcXVlIHRlcm1pbmVuIGxvcyBhcmNoaXZvc1xuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiYgIWFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTaSB5YSBmdWUgbWFuZWphZG8geSBubyBoYXkgYXJjaGl2b3MgcGVuZGllbnRlcywgZWplY3V0YXIgZWwgY2llcnJlXG4gICAgaWYgKGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCAmJiBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuXG4gICAgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIC8vIFNpIGhheSBhcmNoaXZvcywgZWwgYWdlbnRlIHlhIGZ1ZSBhZ3JlZ2FkbyB5IGVsIHRvZ2dsZSB5YSBzZSBoaXpvIGVuIHN1Y2Nlc3NDcmVhdGVcbiAgICAgIC8vIFNvbG8gbmVjZXNpdGFtb3MgY2VycmFyIGVsIG1vZGFsXG4gICAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcykge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBTaSBlbCBhZ2VudGUgZnVlIGNyZWFkbyBjb24gZmF2b3JpdG8sIG5lY2VzaXRhbW9zIG9yZGVuYXIgZGVzcHXDqXMgZGUgYWdyZWdhcmxvXG4gICAgICBjb25zdCBhZ2VudFRvQWRkID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSA/IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfSA6IHN1Y2Nlc3NDcmVhdGVcblxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIGFkZEFnZW50KGFnZW50VG9BZGQpXG4gICAgICBzZWxlY3RBZ2VudChhZ2VudFRvQWRkKVxuXG4gICAgICAvLyBTaSB0aWVuZSBmYXZvcml0bywgaGFjZXIgdG9nZ2xlIHkgYWN0dWFsaXphciBlc3RhZG8gYW50ZXMgZGUgY2VycmFyXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRUb0FkZCwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2VycmFyIGRlc3B1w6lzIGRlIHF1ZSBlbCB0b2dnbGUgY29tcGxldGUgeSBhY3R1YWxpY2UgZWwgZXN0YWRvXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gc3VjY2Vzc1VwZGF0ZS5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgfVxuICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlKClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG5cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gIH0sIFtzdWNjZXNzVXBkYXRlQWNjZXNzLCBmaWxlc1Byb2Nlc3NlZF0pXG5cbiAgLy8gdXNlRWZmZWN0IHBhcmEgbWFuZWphciBlbCBjaWVycmUgZGVsIG1vZGFsIGN1YW5kbyB0ZXJtaW5hbiBsb3MgYXJjaGl2b3MgZW4gY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuXG4gICAgLy8gU29sbyBwcm9jZXNhciBzaTpcbiAgICAvLyAtIEVzIHVuYSBvcGVyYWNpw7NuIGRlIGNyZWFjacOzblxuICAgIC8vIC0gTm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVuZGllbnRlXG4gICAgLy8gLSBMb3MgYXJjaGl2b3MgdGVybWluYXJvbiBkZSBwcm9jZXNhcnNlXG4gICAgLy8gLSBFbCBhZ2VudGUgZnVlIGNyZWFkbyBleGl0b3NhbWVudGVcbiAgICAvLyAtIEHDum4gbm8gc2UgaGEgY2VycmFkbyBlbCBtb2RhbFxuICAgIGlmIChcbiAgICAgIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScgJiZcbiAgICAgICFjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgIHN1Y2Nlc3NDcmVhdGUgJiZcbiAgICAgICFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJlxuICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlc1xuICAgICkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhbWJpw6luIG1hbmVqYXIgZWwgY2FzbyBjdWFuZG8gaGF5IGFjY2VzaWJpbGlkYWQgeSBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgaWYgKFxuICAgICAgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ICYmXG4gICAgICBzdWNjZXNzQ3JlYXRlICYmXG4gICAgICAhaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiZcbiAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXNcbiAgICApIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBmaWxlc1Byb2Nlc3NlZCxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIHN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaXNTaG93UHJvY2Vzc0ZpbGVzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNTaG93UHJvY2Vzc0ZpbGVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gYGtub3dsZWRnZS1iYXNlLnN0YXR1czoke2FnZW50QnlJZCA/IGFnZW50QnlJZD8uaWQgOiBzdWNjZXNzQ3JlYXRlPy5pZD8udG9TdHJpbmcoKX1gXG4gICAgICBpZiAoJF9zYykge1xuICAgICAgICBpZiAoaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgJF9zYz8uc3Vic2NyaWJlSGFuZGxlcihjaGFubmVsLCB3ZWJTb2NrZXRGdW5jdGlvbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBtb2RlbERhdGEgPSB7XG4gICAgICAgICAgICBtb2RlbF9oYXNoOiBjaGFubmVsLFxuICAgICAgICAgICAgYWN0aW9uOiAkX3NjPy5hY3Rpb25UeXBlPy5TVUJTQ1JJQkUsXG4gICAgICAgICAgfVxuICAgICAgICAgICRfc2M/LnVwZGF0ZUNvbm5lY3Rpb25Nb2RlbChtb2RlbERhdGEsIGNoYW5uZWwsIHVzZXIsIHVzZXIsICRfc2MuY2hhbm5lbFR5cGU/Lk1PREVMX0NIQU5ORUwpXG4gICAgICAgICAgc2V0SXNTdWJzY3JpYmVkKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc1Nob3dQcm9jZXNzRmlsZXMsIGlzU3Vic2NyaWJlZCwgJF9zYywgYWdlbnRCeUlkLCBzdWNjZXNzQ3JlYXRlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFhZ2VudE1vZGVscy5sZW5ndGgpIHJldHVyblxuICAgIGlmIChhZ2VudExvYWRpbmcgJiYgIXByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBhcHBseUVkaXRpbmdBZ2VudCA9IGFzeW5jIChzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZS50eXBlICE9PSAnY3VzdG9tJyB8fCAhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBhZ2VudElkID0gc291cmNlLmlkICE9IG51bGwgPyBTdHJpbmcoc291cmNlLmlkKSA6IG51bGxcbiAgICAgIGlmIChhZ2VudElkICYmIGh5ZHJhdGluZ0FnZW50SWRSZWYuY3VycmVudCA9PT0gYWdlbnRJZCkgcmV0dXJuIHRydWVcbiAgICAgIGh5ZHJhdGluZ0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50SWRcblxuICAgICAgbGV0IGFnZW50VmFsdWVzVG9TZXQgPSBidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbChzb3VyY2UsIGFnZW50TW9kZWxzLCBtb2RhbFZhbHVlcylcbiAgICAgIC8vIEtlZXAgdGhlIGxvYWRpbmcgdmlldyB1bnRpbCBib3RoIHRoZSBhZ2VudCBhbmQgaXRzIGNvbm5lY3RvciBzdGF0dXMgYXJlIHJlYWR5LlxuICAgICAgaWYgKGFnZW50SWQgJiYgaGFzTWFpYUV4dGVybmFsQ29ubmVjdG9yc0FjY2VzcygpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdG9ycyA9IGF3YWl0IGdldEFnZW50Q29ubmVjdG9ycyhhZ2VudElkKVxuICAgICAgICAgIGFnZW50VmFsdWVzVG9TZXQgPSB7XG4gICAgICAgICAgICAuLi5hZ2VudFZhbHVlc1RvU2V0LFxuICAgICAgICAgICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgICAgICAgICAuLi5hZ2VudFZhbHVlc1RvU2V0LmFjY2Vzc2liaWxpdHksXG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29ubmVjdG9yczogZGVyaXZlQXNzaWduZWRDb25uZWN0b3JTbHVncyhjb25uZWN0b3JzKSxcbiAgICAgICAgICAgICAgY29ubmVjdG9yU3RhdHVzZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICBjb25uZWN0b3JzLm1hcChjb25uZWN0b3IgPT4gW1xuICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLnNsdWcsXG4gICAgICAgICAgICAgICAgICBjb25uZWN0b3IuY29ubmVjdGlvbl9zdGF0dXMgfHwgKGNvbm5lY3Rvci51c2VyX2F1dGhvcml6ZWQgPyAnb2snIDogJ25lZWRzX2F0dGVudGlvbicpLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhZ2VudCBjb25uZWN0b3JzOicsIGVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaHlkcmF0aW5nQWdlbnRJZFJlZi5jdXJyZW50ICE9PSBhZ2VudElkKSByZXR1cm4gZmFsc2VcbiAgICAgIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50ID0gYWdlbnRWYWx1ZXNUb1NldFxuICAgICAgc2V0TW9kYWxWYWx1ZXMoYWdlbnRWYWx1ZXNUb1NldClcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIGlmIChwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCkge1xuICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcHJlZmV0Y2hlZCA9IHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudFxuICAgIGlmIChwcmVmZXRjaGVkKSB7XG4gICAgICBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhcHBseUVkaXRpbmdBZ2VudChwcmVmZXRjaGVkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFnZW50QnlJZCAmJiAhYWdlbnRMb2FkaW5nICYmIGFnZW50TW9kZWxzLmxlbmd0aCkge1xuICAgICAgYXBwbHlFZGl0aW5nQWdlbnQoYWdlbnRCeUlkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFpc0xvYWRpbmcgJiYgIWFnZW50TG9hZGluZyAmJiAhYWdlbnRCeUlkICYmICFtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHtcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICBhaU1vZGVsOiBhZ2VudE1vZGVsc1swXSxcbiAgICAgICAgfSxcbiAgICAgIH0pKVxuICAgIH1cbiAgfSwgW2FnZW50QnlJZCwgaXNPcGVuLCBpc0xvYWRpbmcsIGFnZW50TG9hZGluZywgYWdlbnRNb2RlbHM/Lmxlbmd0aCwgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLCB0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlcnJvckdldEFnZW50QnlJZCkge1xuICAgICAgaWYgKGVycm9yR2V0QWdlbnRCeUlkID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIikge1xuICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWNjZXNzRGVuaWVkJykpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKGVycm9yR2V0QWdlbnRCeUlkKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH0sIDMwMDApXG4gICAgfVxuICB9LCBbZXJyb3JHZXRBZ2VudEJ5SWRdKVxuXG4gIGNvbnN0IHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gaGFzSW5hY3RpdmVBY2Nlc3NpYmlsaXR5Q2xpZW50cyhtb2RhbFZhbHVlcz8uYWNjZXNzaWJpbGl0eT8uY2xpZW50cyksXG4gICAgW21vZGFsVmFsdWVzPy5hY2Nlc3NpYmlsaXR5Py5jbGllbnRzXVxuICApXG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRmF2b3JpdGUgPSAoKSA9PiB7XG4gICAgaWYgKG1vZGFsVmFsdWVzPy5nZW5lcmFsPy5pZCkge1xuICAgICAgLy8gRXhpc3RpbmcgYWdlbnRcbiAgICAgIHRvZ2dsZUZhdm9yaXRlKFxuICAgICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLFxuICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICAgICAgaXNfZmF2b3JpdGU6IHVwZGF0ZWRBZ2VudC5pc19mYXZvcml0ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkpXG4gICAgICAgICAgLy8gQWN0dWFsaXphciBlbCBlc3RhZG8gZGUgYWdlbnRlcyB5IG9yZGVuYXIgY3VhbmRvIHNlIGhhY2UgZGVzZGUgZWwgbW9kYWwgQUJNXG4gICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZSh1cGRhdGVkQWdlbnQsIHRydWUpXG4gICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7XG4gICAgICAgICAgICBvcHRpb246IHVwZGF0ZWRBZ2VudC5pc19mYXZvcml0ZSA/ICdhZGQnIDogJ3JlbW92ZScsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBtb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGVcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIG5ldyBhZ2VudFxuICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgIGlzX2Zhdm9yaXRlOiAhcHJldi5nZW5lcmFsLmlzX2Zhdm9yaXRlLFxuICAgICAgICB9LFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIG51bGxcblxuICBpZiAoIWlzT3BlbiB8fCAoIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9e2FibUFnZW50TW9kYWxaSW5kZXh9IG9uQ2xpY2s9e2hhbmRsZUJhY2tkcm9wQ2xpY2t9PlxuICAgICAgPFNDQUFNV3JhcHBlciByZWY9e21vZGFsUmVmfSB0YWJJbmRleD17LTF9PlxuICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgIDxTQ0FBTVdyYXBwZXJTcGlubmVyPlxuICAgICAgICAgICAgPFNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgICAgICA8U3Bpbm5lckxvdHRpZSBzaXplPVwiODBweFwiIGNvbG9yPVwicHJpbWFyeVwiIC8+XG4gICAgICAgICAgICA8L1NDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgIDwvU0NBQU1XcmFwcGVyU3Bpbm5lcj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2lzU2hvd1Byb2Nlc3NGaWxlcyAmJiBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA/IChcbiAgICAgICAgICAgICAgPEFibUxvYWRlckZpbGVzXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM9e21vZGFsVmFsdWVzLmtub3dsZWRnZX1cbiAgICAgICAgICAgICAgICBsYWJlbD17dChgcHJvY2Vzc2luZ0tub3dsZWRnZS4ke21vZGFsVmFsdWVzLmlzRWRpdGluZyA/ICdkZXNjcmlwdGlvblVwZGF0ZScgOiAnZGVzY3JpcHRpb25DcmVhdGUnfWApfVxuICAgICAgICAgICAgICAgIG9uVGltZW91dD17aGFuZGxlUHJvY2Vzc0ZpbGVzVGltZW91dH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdCgnZ2VuZXJhbFNlY3Rpb24ucmVtb3ZlRmF2b3JpdGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2dlbmVyYWxTZWN0aW9uLmFkZEZhdm9yaXRlJylcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJGYXZvcml0ZSBvbkNsaWNrPXtoYW5kbGVUb2dnbGVGYXZvcml0ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXttb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGUgPyAnI0ZGQzYyNCcgOiAnI2E2YTZhNid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICdub25lJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXttb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGUgPyAnJyA6ICdzdGFyLWZhdm9yaXRlLWljb24nfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyRmF2b3JpdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyVGl0bGU+e21vZGFsVmFsdWVzPy5pc0VkaXRpbmcgPyB0KCdlZGl0QWdlbnQnKSA6IHQoJ25ld0FnZW50Jyl9PC9TQ0FBTUhlYWRlclRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTUhlYWRlckxlZnQ+XG4gICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJDbG9zZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmNhbmNlbE1vZGFsKVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0xvYWRpbmdLbm93bGVkZ2UgfHwgaXNMb2FkaW5nQ3JlYXRlIHx8IGlzTG9hZGluZ1VwZGF0ZUFjY2Vzc31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiI2E2YTZhNlwiIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxTQ0FBTUNvbnRlbnQgaGFzU2Nyb2xsPXtzZWN0aW9uICE9PSAna25vd2xlZGdlJ30+XG4gICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFyPlxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnZ2VuZXJhbCd9XG4gICAgICAgICAgICAgICAgICAgICAgJGluZGV4PXswfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlY3Rpb25DaGFuZ2UoJ2dlbmVyYWwnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1nZW5lcmFsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdnZW5lcmFsJyA/ICdyZ2JhKDYzLCA2MywgNjMsIDEpJyA6ICdyZ2JhKDE2NiwgMTY2LCAxNjYsIDEpJ31gfVxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtVGl0bGUgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdnZW5lcmFsJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbFNlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnfVxuICAgICAgICAgICAgICAgICAgICAgICRpbmRleD17MX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdrbm93bGVkZ2UnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1rbm93bGVkZ2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEJyYWluSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2tub3dsZWRnZSd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2tub3dsZWRnZVNlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdhY2Nlc3NpYmlsaXR5J31cbiAgICAgICAgICAgICAgICAgICAgICAkaW5kZXg9ezJ9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VjdGlvbkNoYW5nZSgnYWNjZXNzaWJpbGl0eScpfVxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWFnZW50LW1vZGFsLWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2liaWxpdHlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YCR7c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50aXRsZVRhYicpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIHtzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNsaWVudHNFcnJvcicpfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbUVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBbGVydCBjb2xvcj1cIiNDNzA1MDVcIiB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtRXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXI+XG4gICAgICAgICAgICAgICAgICB7U2VjdGlvbkJ5S2V5W3NlY3Rpb25dKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBtb2RhbFZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6IGhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzLFxuICAgICAgICAgICAgICAgICAgICBhZ2VudE1vZGVscyxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nS25vd2xlZGdlOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgbmV3S25vd2xlZGdlOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgb25SZW1vdmVFeGlzdGluZ0tub3dsZWRnZTogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlTmV3S25vd2xlZGdlOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgb25GaWxlRXJyb3JDaGFuZ2U6IHNldEhhc0ZpbGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBaSW5kZXgsXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L1NDQUFNQ29udGVudD5cbiAgICAgICAgICAgICAgICA8U0NBQU1Gb290ZXIgaXNFZGl0aW5nPXshIW1vZGFsVmFsdWVzPy5pc0VkaXRpbmcgJiYgISF1c2VyUGVybWlzc2lvbnM/LmRlbGV0ZX0+XG4gICAgICAgICAgICAgICAgICB7ISFtb2RhbFZhbHVlcz8uaXNFZGl0aW5nICYmXG4gICAgICAgICAgICAgICAgICAgICEhdXNlclBlcm1pc3Npb25zPy5kZWxldGUgJiZcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTURlbGV0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDVUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuV2l0aEljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dNb2RhbERlbGV0ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzTG9hZGluZ0tub3dsZWRnZSB8fCBpc0xvYWRpbmdDcmVhdGUgfHwgaXNMb2FkaW5nVXBkYXRlQWNjZXNzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8V3JhcHBlckNlbnRlckljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIGNvbG9yPVwiIzA4Y1wiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnZGVsZXRlQWdlbnQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9XcmFwcGVyQ2VudGVySWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ1VCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTURlbGV0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcyNHB4JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2F2ZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzQWJtU2F2ZURpc2FibGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogbW9kYWxWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsOiBmaXJzdFZhbHVlQWdlbnQuY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVBY3Rpb25zOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nS25vd2xlZGdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nQ3JlYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nVXBkYXRlQWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRmlsZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxDVUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbihudWxsLCAnY3JlYXRlJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBYm1TYXZlRGlzYWJsZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IG1vZGFsVmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsOiBmaXJzdFZhbHVlQWdlbnQuY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUFjdGlvbnM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nS25vd2xlZGdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdDcmVhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZ1VwZGF0ZUFjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRmlsZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHttb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdzYXZlQ2hhbmdlcycpIDogdCgnY3JlYXRlQWdlbnRMYWJlbEJ1dHRvbicpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvQ1VCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TYXZlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9TQ0FBTUZvb3Rlcj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9TQ0FBTVdyYXBwZXI+XG4gICAgICB7c2hvd01vZGFsRGVsZXRlICYmIChcbiAgICAgICAgPERlbGV0ZVF1ZXN0aW9uTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TW9kYWxEZWxldGUoZmFsc2UpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiAocHJvcHM6IGFueSkgPT4gaGFuZGxlQ29uZmlybUFjdGlvbihwcm9wcywgJ2RlbGV0ZScpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17eyB0aXRsZTogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5uYW1lLCBpZDogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCB9fVxuICAgICAgICAgIGFjdGlvbj1cImFnZW50XCJcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9CYWNrZHJvcD4sXG4gICAgc2VsZWN0b3JcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsUUFBUSxPQUFPO0FBQ3pFLFNBQVNDLFlBQVksUUFBUSxXQUFXO0FBQ3hDLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRTlDLFNBQVNDLFFBQVEsUUFBUSw0Q0FBNEM7QUFDckUsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsSUFBSSxRQUFRLHVDQUF1QztBQUM1RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLGFBQWEsUUFBUSx1REFBdUQ7QUFDckYsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyx1QkFBdUIsUUFBUSw0RUFBNEU7QUFDcEgsU0FBU0MsUUFBUSxRQUFRLHNCQUFzQjtBQUMvQyxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBQ25ELFNBQVNDLGlCQUFpQixFQUFFQyxTQUFTLFFBQVEsbUJBQW1CO0FBQ2hFLFNBQVNDLGFBQWEsUUFBUSw0Q0FBNEM7QUFFMUUsU0FBU0MsZUFBZSxRQUFRLDRDQUE0QztBQUU1RSxTQUFTQyxpQkFBaUIsRUFBRUMsbUJBQW1CLFFB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