@cartanova/qgrid-cli 2.4.8 → 2.5.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 (735) hide show
  1. package/README.ko.md +18 -11
  2. package/README.md +18 -11
  3. package/bundle/.env +0 -0
  4. package/bundle/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.140.0/helpers/esm}/decorate.js +2 -2
  5. package/bundle/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.140.0/helpers/esm}/decorateMetadata.js +2 -2
  6. package/bundle/dist/_virtual/_rolldown/runtime.js +2 -3
  7. package/bundle/dist/application/monit/log-buffer.js +3 -2
  8. package/bundle/dist/application/monit/monit.frame.js +5 -6
  9. package/bundle/dist/application/monit/monit.types.js +1 -2
  10. package/bundle/dist/application/qgrid/conv-routing.js +1 -2
  11. package/bundle/dist/application/qgrid/oauth.js +1 -2
  12. package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -2
  13. package/bundle/dist/application/qgrid/qgrid-response-format.js +1 -2
  14. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +76 -47
  15. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +1 -2
  16. package/bundle/dist/application/qgrid/qgrid.frame.js +73 -97
  17. package/bundle/dist/application/qgrid/qgrid.types.js +11 -10
  18. package/bundle/dist/application/qgrid/token-subscriber.js +3 -2
  19. package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -2
  20. package/bundle/dist/application/qgrid/tool-emulation.js +1 -2
  21. package/bundle/dist/application/queries.generated.js +1 -2
  22. package/bundle/dist/application/request-log/request-log.model.js +116 -47
  23. package/bundle/dist/application/request-log/request-log.types.js +1 -2
  24. package/bundle/dist/application/request-log-step/request-log-step.model.js +3 -4
  25. package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -2
  26. package/bundle/dist/application/sonamu.generated.js +14 -15
  27. package/bundle/dist/application/sonamu.generated.sso.js +1 -2
  28. package/bundle/dist/application/token/token.model.js +3 -4
  29. package/bundle/dist/application/token/token.types.js +1 -2
  30. package/bundle/dist/codex-protocol/AbsolutePathBuf.js +0 -1
  31. package/bundle/dist/codex-protocol/AgentPath.js +0 -1
  32. package/bundle/dist/codex-protocol/ApplyPatchApprovalParams.js +0 -1
  33. package/bundle/dist/codex-protocol/ApplyPatchApprovalResponse.js +0 -1
  34. package/bundle/dist/codex-protocol/AuthMode.js +0 -1
  35. package/bundle/dist/codex-protocol/ClientInfo.js +0 -1
  36. package/bundle/dist/codex-protocol/ClientNotification.js +0 -1
  37. package/bundle/dist/codex-protocol/ClientRequest.js +0 -1
  38. package/bundle/dist/codex-protocol/CollaborationMode.js +0 -1
  39. package/bundle/dist/codex-protocol/ContentItem.js +0 -1
  40. package/bundle/dist/codex-protocol/ConversationGitInfo.js +0 -1
  41. package/bundle/dist/codex-protocol/ConversationSummary.js +0 -1
  42. package/bundle/dist/codex-protocol/ExecCommandApprovalParams.js +0 -1
  43. package/bundle/dist/codex-protocol/ExecCommandApprovalResponse.js +0 -1
  44. package/bundle/dist/codex-protocol/ExecPolicyAmendment.js +0 -1
  45. package/bundle/dist/codex-protocol/FileChange.js +0 -1
  46. package/bundle/dist/codex-protocol/ForcedLoginMethod.js +0 -1
  47. package/bundle/dist/codex-protocol/FunctionCallOutputBody.js +0 -1
  48. package/bundle/dist/codex-protocol/FunctionCallOutputContentItem.js +0 -1
  49. package/bundle/dist/codex-protocol/FuzzyFileSearchMatchType.js +0 -1
  50. package/bundle/dist/codex-protocol/FuzzyFileSearchParams.js +0 -1
  51. package/bundle/dist/codex-protocol/FuzzyFileSearchResponse.js +0 -1
  52. package/bundle/dist/codex-protocol/FuzzyFileSearchResult.js +0 -1
  53. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionCompletedNotification.js +0 -1
  54. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.js +0 -1
  55. package/bundle/dist/codex-protocol/GetAuthStatusParams.js +0 -1
  56. package/bundle/dist/codex-protocol/GetAuthStatusResponse.js +0 -1
  57. package/bundle/dist/codex-protocol/GetConversationSummaryParams.js +0 -1
  58. package/bundle/dist/codex-protocol/GetConversationSummaryResponse.js +0 -1
  59. package/bundle/dist/codex-protocol/GitDiffToRemoteParams.js +0 -1
  60. package/bundle/dist/codex-protocol/GitDiffToRemoteResponse.js +0 -1
  61. package/bundle/dist/codex-protocol/GitSha.js +0 -1
  62. package/bundle/dist/codex-protocol/ImageDetail.js +0 -1
  63. package/bundle/dist/codex-protocol/InitializeCapabilities.js +0 -1
  64. package/bundle/dist/codex-protocol/InitializeParams.js +0 -1
  65. package/bundle/dist/codex-protocol/InitializeResponse.js +0 -1
  66. package/bundle/dist/codex-protocol/InputModality.js +0 -1
  67. package/bundle/dist/codex-protocol/InternalSessionSource.js +0 -1
  68. package/bundle/dist/codex-protocol/LocalShellAction.js +0 -1
  69. package/bundle/dist/codex-protocol/LocalShellExecAction.js +0 -1
  70. package/bundle/dist/codex-protocol/LocalShellStatus.js +0 -1
  71. package/bundle/dist/codex-protocol/MessagePhase.js +0 -1
  72. package/bundle/dist/codex-protocol/ModeKind.js +0 -1
  73. package/bundle/dist/codex-protocol/NetworkPolicyAmendment.js +0 -1
  74. package/bundle/dist/codex-protocol/NetworkPolicyRuleAction.js +0 -1
  75. package/bundle/dist/codex-protocol/ParsedCommand.js +0 -1
  76. package/bundle/dist/codex-protocol/Personality.js +0 -1
  77. package/bundle/dist/codex-protocol/PlanType.js +0 -1
  78. package/bundle/dist/codex-protocol/RealtimeConversationVersion.js +0 -1
  79. package/bundle/dist/codex-protocol/RealtimeOutputModality.js +0 -1
  80. package/bundle/dist/codex-protocol/RealtimeVoice.js +0 -1
  81. package/bundle/dist/codex-protocol/RealtimeVoicesList.js +0 -1
  82. package/bundle/dist/codex-protocol/ReasoningEffort.js +0 -1
  83. package/bundle/dist/codex-protocol/ReasoningItemContent.js +0 -1
  84. package/bundle/dist/codex-protocol/ReasoningItemReasoningSummary.js +0 -1
  85. package/bundle/dist/codex-protocol/ReasoningSummary.js +0 -1
  86. package/bundle/dist/codex-protocol/RequestId.js +0 -1
  87. package/bundle/dist/codex-protocol/Resource.js +0 -1
  88. package/bundle/dist/codex-protocol/ResourceContent.js +0 -1
  89. package/bundle/dist/codex-protocol/ResourceTemplate.js +0 -1
  90. package/bundle/dist/codex-protocol/ResponseItem.js +0 -1
  91. package/bundle/dist/codex-protocol/ReviewDecision.js +0 -1
  92. package/bundle/dist/codex-protocol/ServerNotification.js +0 -1
  93. package/bundle/dist/codex-protocol/ServerRequest.js +0 -1
  94. package/bundle/dist/codex-protocol/SessionSource.js +0 -1
  95. package/bundle/dist/codex-protocol/Settings.js +0 -1
  96. package/bundle/dist/codex-protocol/SubAgentSource.js +0 -1
  97. package/bundle/dist/codex-protocol/ThreadId.js +0 -1
  98. package/bundle/dist/codex-protocol/ThreadMemoryMode.js +0 -1
  99. package/bundle/dist/codex-protocol/Tool.js +0 -1
  100. package/bundle/dist/codex-protocol/Verbosity.js +0 -1
  101. package/bundle/dist/codex-protocol/WebSearchAction.js +0 -1
  102. package/bundle/dist/codex-protocol/WebSearchContextSize.js +0 -1
  103. package/bundle/dist/codex-protocol/WebSearchLocation.js +0 -1
  104. package/bundle/dist/codex-protocol/WebSearchMode.js +0 -1
  105. package/bundle/dist/codex-protocol/WebSearchToolConfig.js +0 -1
  106. package/bundle/dist/codex-protocol/index.js +0 -1
  107. package/bundle/dist/codex-protocol/serde_json/JsonValue.js +0 -1
  108. package/bundle/dist/codex-protocol/v2/Account.js +0 -1
  109. package/bundle/dist/codex-protocol/v2/AccountLoginCompletedNotification.js +0 -1
  110. package/bundle/dist/codex-protocol/v2/AccountRateLimitsUpdatedNotification.js +0 -1
  111. package/bundle/dist/codex-protocol/v2/AccountUpdatedNotification.js +0 -1
  112. package/bundle/dist/codex-protocol/v2/ActivePermissionProfile.js +0 -1
  113. package/bundle/dist/codex-protocol/v2/ActivePermissionProfileModification.js +0 -1
  114. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeCreditType.js +0 -1
  115. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeEmailStatus.js +0 -1
  116. package/bundle/dist/codex-protocol/v2/AdditionalFileSystemPermissions.js +0 -1
  117. package/bundle/dist/codex-protocol/v2/AdditionalNetworkPermissions.js +0 -1
  118. package/bundle/dist/codex-protocol/v2/AdditionalPermissionProfile.js +0 -1
  119. package/bundle/dist/codex-protocol/v2/AgentMessageDeltaNotification.js +0 -1
  120. package/bundle/dist/codex-protocol/v2/AnalyticsConfig.js +0 -1
  121. package/bundle/dist/codex-protocol/v2/AppBranding.js +0 -1
  122. package/bundle/dist/codex-protocol/v2/AppInfo.js +0 -1
  123. package/bundle/dist/codex-protocol/v2/AppListUpdatedNotification.js +0 -1
  124. package/bundle/dist/codex-protocol/v2/AppMetadata.js +0 -1
  125. package/bundle/dist/codex-protocol/v2/AppReview.js +0 -1
  126. package/bundle/dist/codex-protocol/v2/AppScreenshot.js +0 -1
  127. package/bundle/dist/codex-protocol/v2/AppSummary.js +0 -1
  128. package/bundle/dist/codex-protocol/v2/AppToolApproval.js +0 -1
  129. package/bundle/dist/codex-protocol/v2/AppToolsConfig.js +0 -1
  130. package/bundle/dist/codex-protocol/v2/ApprovalsReviewer.js +0 -1
  131. package/bundle/dist/codex-protocol/v2/AppsConfig.js +0 -1
  132. package/bundle/dist/codex-protocol/v2/AppsDefaultConfig.js +0 -1
  133. package/bundle/dist/codex-protocol/v2/AppsListParams.js +0 -1
  134. package/bundle/dist/codex-protocol/v2/AppsListResponse.js +0 -1
  135. package/bundle/dist/codex-protocol/v2/AskForApproval.js +0 -1
  136. package/bundle/dist/codex-protocol/v2/AutoReviewDecisionSource.js +0 -1
  137. package/bundle/dist/codex-protocol/v2/ByteRange.js +0 -1
  138. package/bundle/dist/codex-protocol/v2/CancelLoginAccountParams.js +0 -1
  139. package/bundle/dist/codex-protocol/v2/CancelLoginAccountResponse.js +0 -1
  140. package/bundle/dist/codex-protocol/v2/CancelLoginAccountStatus.js +0 -1
  141. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshParams.js +0 -1
  142. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshReason.js +0 -1
  143. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.js +0 -1
  144. package/bundle/dist/codex-protocol/v2/CodexErrorInfo.js +0 -1
  145. package/bundle/dist/codex-protocol/v2/CollabAgentState.js +0 -1
  146. package/bundle/dist/codex-protocol/v2/CollabAgentStatus.js +0 -1
  147. package/bundle/dist/codex-protocol/v2/CollabAgentTool.js +0 -1
  148. package/bundle/dist/codex-protocol/v2/CollabAgentToolCallStatus.js +0 -1
  149. package/bundle/dist/codex-protocol/v2/CollaborationModeMask.js +0 -1
  150. package/bundle/dist/codex-protocol/v2/CommandAction.js +0 -1
  151. package/bundle/dist/codex-protocol/v2/CommandExecOutputDeltaNotification.js +0 -1
  152. package/bundle/dist/codex-protocol/v2/CommandExecOutputStream.js +0 -1
  153. package/bundle/dist/codex-protocol/v2/CommandExecParams.js +0 -1
  154. package/bundle/dist/codex-protocol/v2/CommandExecResizeParams.js +0 -1
  155. package/bundle/dist/codex-protocol/v2/CommandExecResizeResponse.js +0 -1
  156. package/bundle/dist/codex-protocol/v2/CommandExecResponse.js +0 -1
  157. package/bundle/dist/codex-protocol/v2/CommandExecTerminalSize.js +0 -1
  158. package/bundle/dist/codex-protocol/v2/CommandExecTerminateParams.js +0 -1
  159. package/bundle/dist/codex-protocol/v2/CommandExecTerminateResponse.js +0 -1
  160. package/bundle/dist/codex-protocol/v2/CommandExecWriteParams.js +0 -1
  161. package/bundle/dist/codex-protocol/v2/CommandExecWriteResponse.js +0 -1
  162. package/bundle/dist/codex-protocol/v2/CommandExecutionApprovalDecision.js +0 -1
  163. package/bundle/dist/codex-protocol/v2/CommandExecutionOutputDeltaNotification.js +0 -1
  164. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalParams.js +0 -1
  165. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalResponse.js +0 -1
  166. package/bundle/dist/codex-protocol/v2/CommandExecutionSource.js +0 -1
  167. package/bundle/dist/codex-protocol/v2/CommandExecutionStatus.js +0 -1
  168. package/bundle/dist/codex-protocol/v2/CommandMigration.js +0 -1
  169. package/bundle/dist/codex-protocol/v2/Config.js +0 -1
  170. package/bundle/dist/codex-protocol/v2/ConfigBatchWriteParams.js +0 -1
  171. package/bundle/dist/codex-protocol/v2/ConfigEdit.js +0 -1
  172. package/bundle/dist/codex-protocol/v2/ConfigLayer.js +0 -1
  173. package/bundle/dist/codex-protocol/v2/ConfigLayerMetadata.js +0 -1
  174. package/bundle/dist/codex-protocol/v2/ConfigLayerSource.js +0 -1
  175. package/bundle/dist/codex-protocol/v2/ConfigReadParams.js +0 -1
  176. package/bundle/dist/codex-protocol/v2/ConfigReadResponse.js +0 -1
  177. package/bundle/dist/codex-protocol/v2/ConfigRequirements.js +0 -1
  178. package/bundle/dist/codex-protocol/v2/ConfigRequirementsReadResponse.js +0 -1
  179. package/bundle/dist/codex-protocol/v2/ConfigValueWriteParams.js +0 -1
  180. package/bundle/dist/codex-protocol/v2/ConfigWarningNotification.js +0 -1
  181. package/bundle/dist/codex-protocol/v2/ConfigWriteResponse.js +0 -1
  182. package/bundle/dist/codex-protocol/v2/ConfiguredHookHandler.js +0 -1
  183. package/bundle/dist/codex-protocol/v2/ConfiguredHookMatcherGroup.js +0 -1
  184. package/bundle/dist/codex-protocol/v2/ContextCompactedNotification.js +0 -1
  185. package/bundle/dist/codex-protocol/v2/CreditsSnapshot.js +0 -1
  186. package/bundle/dist/codex-protocol/v2/DeprecationNoticeNotification.js +0 -1
  187. package/bundle/dist/codex-protocol/v2/DynamicToolCallOutputContentItem.js +0 -1
  188. package/bundle/dist/codex-protocol/v2/DynamicToolCallParams.js +0 -1
  189. package/bundle/dist/codex-protocol/v2/DynamicToolCallResponse.js +0 -1
  190. package/bundle/dist/codex-protocol/v2/DynamicToolCallStatus.js +0 -1
  191. package/bundle/dist/codex-protocol/v2/DynamicToolSpec.js +0 -1
  192. package/bundle/dist/codex-protocol/v2/ErrorNotification.js +0 -1
  193. package/bundle/dist/codex-protocol/v2/ExecPolicyAmendment.js +0 -1
  194. package/bundle/dist/codex-protocol/v2/ExperimentalFeature.js +0 -1
  195. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.js +0 -1
  196. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.js +0 -1
  197. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListParams.js +0 -1
  198. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListResponse.js +0 -1
  199. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureStage.js +0 -1
  200. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectParams.js +0 -1
  201. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectResponse.js +0 -1
  202. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.js +0 -1
  203. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportParams.js +0 -1
  204. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportResponse.js +0 -1
  205. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItem.js +0 -1
  206. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItemType.js +0 -1
  207. package/bundle/dist/codex-protocol/v2/FeedbackUploadParams.js +0 -1
  208. package/bundle/dist/codex-protocol/v2/FeedbackUploadResponse.js +0 -1
  209. package/bundle/dist/codex-protocol/v2/FileChangeApprovalDecision.js +0 -1
  210. package/bundle/dist/codex-protocol/v2/FileChangeOutputDeltaNotification.js +0 -1
  211. package/bundle/dist/codex-protocol/v2/FileChangePatchUpdatedNotification.js +0 -1
  212. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalParams.js +0 -1
  213. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalResponse.js +0 -1
  214. package/bundle/dist/codex-protocol/v2/FileSystemAccessMode.js +0 -1
  215. package/bundle/dist/codex-protocol/v2/FileSystemPath.js +0 -1
  216. package/bundle/dist/codex-protocol/v2/FileSystemSandboxEntry.js +0 -1
  217. package/bundle/dist/codex-protocol/v2/FileSystemSpecialPath.js +0 -1
  218. package/bundle/dist/codex-protocol/v2/FileUpdateChange.js +0 -1
  219. package/bundle/dist/codex-protocol/v2/FsChangedNotification.js +0 -1
  220. package/bundle/dist/codex-protocol/v2/FsCopyParams.js +0 -1
  221. package/bundle/dist/codex-protocol/v2/FsCopyResponse.js +0 -1
  222. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryParams.js +0 -1
  223. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryResponse.js +0 -1
  224. package/bundle/dist/codex-protocol/v2/FsGetMetadataParams.js +0 -1
  225. package/bundle/dist/codex-protocol/v2/FsGetMetadataResponse.js +0 -1
  226. package/bundle/dist/codex-protocol/v2/FsReadDirectoryEntry.js +0 -1
  227. package/bundle/dist/codex-protocol/v2/FsReadDirectoryParams.js +0 -1
  228. package/bundle/dist/codex-protocol/v2/FsReadDirectoryResponse.js +0 -1
  229. package/bundle/dist/codex-protocol/v2/FsReadFileParams.js +0 -1
  230. package/bundle/dist/codex-protocol/v2/FsReadFileResponse.js +0 -1
  231. package/bundle/dist/codex-protocol/v2/FsRemoveParams.js +0 -1
  232. package/bundle/dist/codex-protocol/v2/FsRemoveResponse.js +0 -1
  233. package/bundle/dist/codex-protocol/v2/FsUnwatchParams.js +0 -1
  234. package/bundle/dist/codex-protocol/v2/FsUnwatchResponse.js +0 -1
  235. package/bundle/dist/codex-protocol/v2/FsWatchParams.js +0 -1
  236. package/bundle/dist/codex-protocol/v2/FsWatchResponse.js +0 -1
  237. package/bundle/dist/codex-protocol/v2/FsWriteFileParams.js +0 -1
  238. package/bundle/dist/codex-protocol/v2/FsWriteFileResponse.js +0 -1
  239. package/bundle/dist/codex-protocol/v2/GetAccountParams.js +0 -1
  240. package/bundle/dist/codex-protocol/v2/GetAccountRateLimitsResponse.js +0 -1
  241. package/bundle/dist/codex-protocol/v2/GetAccountResponse.js +0 -1
  242. package/bundle/dist/codex-protocol/v2/GitInfo.js +0 -1
  243. package/bundle/dist/codex-protocol/v2/GrantedPermissionProfile.js +0 -1
  244. package/bundle/dist/codex-protocol/v2/GuardianApprovalReview.js +0 -1
  245. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewAction.js +0 -1
  246. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewStatus.js +0 -1
  247. package/bundle/dist/codex-protocol/v2/GuardianCommandSource.js +0 -1
  248. package/bundle/dist/codex-protocol/v2/GuardianRiskLevel.js +0 -1
  249. package/bundle/dist/codex-protocol/v2/GuardianUserAuthorization.js +0 -1
  250. package/bundle/dist/codex-protocol/v2/GuardianWarningNotification.js +0 -1
  251. package/bundle/dist/codex-protocol/v2/HookCompletedNotification.js +0 -1
  252. package/bundle/dist/codex-protocol/v2/HookErrorInfo.js +0 -1
  253. package/bundle/dist/codex-protocol/v2/HookEventName.js +0 -1
  254. package/bundle/dist/codex-protocol/v2/HookExecutionMode.js +0 -1
  255. package/bundle/dist/codex-protocol/v2/HookHandlerType.js +0 -1
  256. package/bundle/dist/codex-protocol/v2/HookMetadata.js +0 -1
  257. package/bundle/dist/codex-protocol/v2/HookMigration.js +0 -1
  258. package/bundle/dist/codex-protocol/v2/HookOutputEntry.js +0 -1
  259. package/bundle/dist/codex-protocol/v2/HookOutputEntryKind.js +0 -1
  260. package/bundle/dist/codex-protocol/v2/HookPromptFragment.js +0 -1
  261. package/bundle/dist/codex-protocol/v2/HookRunStatus.js +0 -1
  262. package/bundle/dist/codex-protocol/v2/HookRunSummary.js +0 -1
  263. package/bundle/dist/codex-protocol/v2/HookScope.js +0 -1
  264. package/bundle/dist/codex-protocol/v2/HookSource.js +0 -1
  265. package/bundle/dist/codex-protocol/v2/HookStartedNotification.js +0 -1
  266. package/bundle/dist/codex-protocol/v2/HookTrustStatus.js +0 -1
  267. package/bundle/dist/codex-protocol/v2/HooksListEntry.js +0 -1
  268. package/bundle/dist/codex-protocol/v2/HooksListParams.js +0 -1
  269. package/bundle/dist/codex-protocol/v2/HooksListResponse.js +0 -1
  270. package/bundle/dist/codex-protocol/v2/ItemCompletedNotification.js +0 -1
  271. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.js +0 -1
  272. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.js +0 -1
  273. package/bundle/dist/codex-protocol/v2/ItemStartedNotification.js +0 -1
  274. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusParams.js +0 -1
  275. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusResponse.js +0 -1
  276. package/bundle/dist/codex-protocol/v2/LoginAccountParams.js +0 -1
  277. package/bundle/dist/codex-protocol/v2/LoginAccountResponse.js +0 -1
  278. package/bundle/dist/codex-protocol/v2/LogoutAccountResponse.js +0 -1
  279. package/bundle/dist/codex-protocol/v2/ManagedHooksRequirements.js +0 -1
  280. package/bundle/dist/codex-protocol/v2/MarketplaceAddParams.js +0 -1
  281. package/bundle/dist/codex-protocol/v2/MarketplaceAddResponse.js +0 -1
  282. package/bundle/dist/codex-protocol/v2/MarketplaceInterface.js +0 -1
  283. package/bundle/dist/codex-protocol/v2/MarketplaceLoadErrorInfo.js +0 -1
  284. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveParams.js +0 -1
  285. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveResponse.js +0 -1
  286. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeErrorInfo.js +0 -1
  287. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeParams.js +0 -1
  288. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeResponse.js +0 -1
  289. package/bundle/dist/codex-protocol/v2/McpAuthStatus.js +0 -1
  290. package/bundle/dist/codex-protocol/v2/McpElicitationArrayType.js +0 -1
  291. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanSchema.js +0 -1
  292. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanType.js +0 -1
  293. package/bundle/dist/codex-protocol/v2/McpElicitationConstOption.js +0 -1
  294. package/bundle/dist/codex-protocol/v2/McpElicitationEnumSchema.js +0 -1
  295. package/bundle/dist/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.js +0 -1
  296. package/bundle/dist/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.js +0 -1
  297. package/bundle/dist/codex-protocol/v2/McpElicitationNumberSchema.js +0 -1
  298. package/bundle/dist/codex-protocol/v2/McpElicitationNumberType.js +0 -1
  299. package/bundle/dist/codex-protocol/v2/McpElicitationObjectType.js +0 -1
  300. package/bundle/dist/codex-protocol/v2/McpElicitationPrimitiveSchema.js +0 -1
  301. package/bundle/dist/codex-protocol/v2/McpElicitationSchema.js +0 -1
  302. package/bundle/dist/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.js +0 -1
  303. package/bundle/dist/codex-protocol/v2/McpElicitationStringFormat.js +0 -1
  304. package/bundle/dist/codex-protocol/v2/McpElicitationStringSchema.js +0 -1
  305. package/bundle/dist/codex-protocol/v2/McpElicitationStringType.js +0 -1
  306. package/bundle/dist/codex-protocol/v2/McpElicitationTitledEnumItems.js +0 -1
  307. package/bundle/dist/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.js +0 -1
  308. package/bundle/dist/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.js +0 -1
  309. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledEnumItems.js +0 -1
  310. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.js +0 -1
  311. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.js +0 -1
  312. package/bundle/dist/codex-protocol/v2/McpResourceReadParams.js +0 -1
  313. package/bundle/dist/codex-protocol/v2/McpResourceReadResponse.js +0 -1
  314. package/bundle/dist/codex-protocol/v2/McpServerElicitationAction.js +0 -1
  315. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestParams.js +0 -1
  316. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestResponse.js +0 -1
  317. package/bundle/dist/codex-protocol/v2/McpServerMigration.js +0 -1
  318. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginCompletedNotification.js +0 -1
  319. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginParams.js +0 -1
  320. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginResponse.js +0 -1
  321. package/bundle/dist/codex-protocol/v2/McpServerRefreshResponse.js +0 -1
  322. package/bundle/dist/codex-protocol/v2/McpServerStartupState.js +0 -1
  323. package/bundle/dist/codex-protocol/v2/McpServerStatus.js +0 -1
  324. package/bundle/dist/codex-protocol/v2/McpServerStatusDetail.js +0 -1
  325. package/bundle/dist/codex-protocol/v2/McpServerStatusUpdatedNotification.js +0 -1
  326. package/bundle/dist/codex-protocol/v2/McpServerToolCallParams.js +0 -1
  327. package/bundle/dist/codex-protocol/v2/McpServerToolCallResponse.js +0 -1
  328. package/bundle/dist/codex-protocol/v2/McpToolCallError.js +0 -1
  329. package/bundle/dist/codex-protocol/v2/McpToolCallProgressNotification.js +0 -1
  330. package/bundle/dist/codex-protocol/v2/McpToolCallResult.js +0 -1
  331. package/bundle/dist/codex-protocol/v2/McpToolCallStatus.js +0 -1
  332. package/bundle/dist/codex-protocol/v2/MemoryCitation.js +0 -1
  333. package/bundle/dist/codex-protocol/v2/MemoryCitationEntry.js +0 -1
  334. package/bundle/dist/codex-protocol/v2/MergeStrategy.js +0 -1
  335. package/bundle/dist/codex-protocol/v2/MigrationDetails.js +0 -1
  336. package/bundle/dist/codex-protocol/v2/Model.js +0 -1
  337. package/bundle/dist/codex-protocol/v2/ModelAvailabilityNux.js +0 -1
  338. package/bundle/dist/codex-protocol/v2/ModelListParams.js +0 -1
  339. package/bundle/dist/codex-protocol/v2/ModelListResponse.js +0 -1
  340. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadParams.js +0 -1
  341. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.js +0 -1
  342. package/bundle/dist/codex-protocol/v2/ModelRerouteReason.js +0 -1
  343. package/bundle/dist/codex-protocol/v2/ModelReroutedNotification.js +0 -1
  344. package/bundle/dist/codex-protocol/v2/ModelServiceTier.js +0 -1
  345. package/bundle/dist/codex-protocol/v2/ModelUpgradeInfo.js +0 -1
  346. package/bundle/dist/codex-protocol/v2/ModelVerification.js +0 -1
  347. package/bundle/dist/codex-protocol/v2/ModelVerificationNotification.js +0 -1
  348. package/bundle/dist/codex-protocol/v2/NetworkAccess.js +0 -1
  349. package/bundle/dist/codex-protocol/v2/NetworkApprovalContext.js +0 -1
  350. package/bundle/dist/codex-protocol/v2/NetworkApprovalProtocol.js +0 -1
  351. package/bundle/dist/codex-protocol/v2/NetworkDomainPermission.js +0 -1
  352. package/bundle/dist/codex-protocol/v2/NetworkPolicyAmendment.js +0 -1
  353. package/bundle/dist/codex-protocol/v2/NetworkPolicyRuleAction.js +0 -1
  354. package/bundle/dist/codex-protocol/v2/NetworkRequirements.js +0 -1
  355. package/bundle/dist/codex-protocol/v2/NetworkUnixSocketPermission.js +0 -1
  356. package/bundle/dist/codex-protocol/v2/NonSteerableTurnKind.js +0 -1
  357. package/bundle/dist/codex-protocol/v2/OverriddenMetadata.js +0 -1
  358. package/bundle/dist/codex-protocol/v2/PatchApplyStatus.js +0 -1
  359. package/bundle/dist/codex-protocol/v2/PatchChangeKind.js +0 -1
  360. package/bundle/dist/codex-protocol/v2/PermissionGrantScope.js +0 -1
  361. package/bundle/dist/codex-protocol/v2/PermissionProfile.js +0 -1
  362. package/bundle/dist/codex-protocol/v2/PermissionProfileFileSystemPermissions.js +0 -1
  363. package/bundle/dist/codex-protocol/v2/PermissionProfileModificationParams.js +0 -1
  364. package/bundle/dist/codex-protocol/v2/PermissionProfileNetworkPermissions.js +0 -1
  365. package/bundle/dist/codex-protocol/v2/PermissionProfileSelectionParams.js +0 -1
  366. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalParams.js +0 -1
  367. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalResponse.js +0 -1
  368. package/bundle/dist/codex-protocol/v2/PlanDeltaNotification.js +0 -1
  369. package/bundle/dist/codex-protocol/v2/PluginAuthPolicy.js +0 -1
  370. package/bundle/dist/codex-protocol/v2/PluginAvailability.js +0 -1
  371. package/bundle/dist/codex-protocol/v2/PluginDetail.js +0 -1
  372. package/bundle/dist/codex-protocol/v2/PluginHookSummary.js +0 -1
  373. package/bundle/dist/codex-protocol/v2/PluginInstallParams.js +0 -1
  374. package/bundle/dist/codex-protocol/v2/PluginInstallPolicy.js +0 -1
  375. package/bundle/dist/codex-protocol/v2/PluginInstallResponse.js +0 -1
  376. package/bundle/dist/codex-protocol/v2/PluginInterface.js +0 -1
  377. package/bundle/dist/codex-protocol/v2/PluginListMarketplaceKind.js +0 -1
  378. package/bundle/dist/codex-protocol/v2/PluginListParams.js +0 -1
  379. package/bundle/dist/codex-protocol/v2/PluginListResponse.js +0 -1
  380. package/bundle/dist/codex-protocol/v2/PluginMarketplaceEntry.js +0 -1
  381. package/bundle/dist/codex-protocol/v2/PluginReadParams.js +0 -1
  382. package/bundle/dist/codex-protocol/v2/PluginReadResponse.js +0 -1
  383. package/bundle/dist/codex-protocol/v2/PluginShareContext.js +0 -1
  384. package/bundle/dist/codex-protocol/v2/PluginShareDeleteParams.js +0 -1
  385. package/bundle/dist/codex-protocol/v2/PluginShareDeleteResponse.js +0 -1
  386. package/bundle/dist/codex-protocol/v2/PluginShareDiscoverability.js +0 -1
  387. package/bundle/dist/codex-protocol/v2/PluginShareListItem.js +0 -1
  388. package/bundle/dist/codex-protocol/v2/PluginShareListParams.js +0 -1
  389. package/bundle/dist/codex-protocol/v2/PluginShareListResponse.js +0 -1
  390. package/bundle/dist/codex-protocol/v2/PluginSharePrincipal.js +0 -1
  391. package/bundle/dist/codex-protocol/v2/PluginSharePrincipalType.js +0 -1
  392. package/bundle/dist/codex-protocol/v2/PluginShareSaveParams.js +0 -1
  393. package/bundle/dist/codex-protocol/v2/PluginShareSaveResponse.js +0 -1
  394. package/bundle/dist/codex-protocol/v2/PluginShareTarget.js +0 -1
  395. package/bundle/dist/codex-protocol/v2/PluginShareUpdateDiscoverability.js +0 -1
  396. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsParams.js +0 -1
  397. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsResponse.js +0 -1
  398. package/bundle/dist/codex-protocol/v2/PluginSkillReadParams.js +0 -1
  399. package/bundle/dist/codex-protocol/v2/PluginSkillReadResponse.js +0 -1
  400. package/bundle/dist/codex-protocol/v2/PluginSource.js +0 -1
  401. package/bundle/dist/codex-protocol/v2/PluginSummary.js +0 -1
  402. package/bundle/dist/codex-protocol/v2/PluginUninstallParams.js +0 -1
  403. package/bundle/dist/codex-protocol/v2/PluginUninstallResponse.js +0 -1
  404. package/bundle/dist/codex-protocol/v2/PluginsMigration.js +0 -1
  405. package/bundle/dist/codex-protocol/v2/ProcessExitedNotification.js +0 -1
  406. package/bundle/dist/codex-protocol/v2/ProcessOutputDeltaNotification.js +0 -1
  407. package/bundle/dist/codex-protocol/v2/ProcessOutputStream.js +0 -1
  408. package/bundle/dist/codex-protocol/v2/ProcessTerminalSize.js +0 -1
  409. package/bundle/dist/codex-protocol/v2/ProfileV2.js +0 -1
  410. package/bundle/dist/codex-protocol/v2/RateLimitReachedType.js +0 -1
  411. package/bundle/dist/codex-protocol/v2/RateLimitSnapshot.js +0 -1
  412. package/bundle/dist/codex-protocol/v2/RateLimitWindow.js +0 -1
  413. package/bundle/dist/codex-protocol/v2/RawResponseItemCompletedNotification.js +0 -1
  414. package/bundle/dist/codex-protocol/v2/ReasoningEffortOption.js +0 -1
  415. package/bundle/dist/codex-protocol/v2/ReasoningSummaryPartAddedNotification.js +0 -1
  416. package/bundle/dist/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.js +0 -1
  417. package/bundle/dist/codex-protocol/v2/ReasoningTextDeltaNotification.js +0 -1
  418. package/bundle/dist/codex-protocol/v2/RemoteControlConnectionStatus.js +0 -1
  419. package/bundle/dist/codex-protocol/v2/RemoteControlStatusChangedNotification.js +0 -1
  420. package/bundle/dist/codex-protocol/v2/RequestPermissionProfile.js +0 -1
  421. package/bundle/dist/codex-protocol/v2/ResidencyRequirement.js +0 -1
  422. package/bundle/dist/codex-protocol/v2/ReviewDelivery.js +0 -1
  423. package/bundle/dist/codex-protocol/v2/ReviewStartParams.js +0 -1
  424. package/bundle/dist/codex-protocol/v2/ReviewStartResponse.js +0 -1
  425. package/bundle/dist/codex-protocol/v2/ReviewTarget.js +0 -1
  426. package/bundle/dist/codex-protocol/v2/SandboxMode.js +0 -1
  427. package/bundle/dist/codex-protocol/v2/SandboxPolicy.js +0 -1
  428. package/bundle/dist/codex-protocol/v2/SandboxWorkspaceWrite.js +0 -1
  429. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailParams.js +0 -1
  430. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.js +0 -1
  431. package/bundle/dist/codex-protocol/v2/ServerRequestResolvedNotification.js +0 -1
  432. package/bundle/dist/codex-protocol/v2/SessionMigration.js +0 -1
  433. package/bundle/dist/codex-protocol/v2/SessionSource.js +0 -1
  434. package/bundle/dist/codex-protocol/v2/SkillDependencies.js +0 -1
  435. package/bundle/dist/codex-protocol/v2/SkillErrorInfo.js +0 -1
  436. package/bundle/dist/codex-protocol/v2/SkillInterface.js +0 -1
  437. package/bundle/dist/codex-protocol/v2/SkillMetadata.js +0 -1
  438. package/bundle/dist/codex-protocol/v2/SkillScope.js +0 -1
  439. package/bundle/dist/codex-protocol/v2/SkillSummary.js +0 -1
  440. package/bundle/dist/codex-protocol/v2/SkillToolDependency.js +0 -1
  441. package/bundle/dist/codex-protocol/v2/SkillsChangedNotification.js +0 -1
  442. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteParams.js +0 -1
  443. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteResponse.js +0 -1
  444. package/bundle/dist/codex-protocol/v2/SkillsListEntry.js +0 -1
  445. package/bundle/dist/codex-protocol/v2/SkillsListParams.js +0 -1
  446. package/bundle/dist/codex-protocol/v2/SkillsListResponse.js +0 -1
  447. package/bundle/dist/codex-protocol/v2/SortDirection.js +0 -1
  448. package/bundle/dist/codex-protocol/v2/SubagentMigration.js +0 -1
  449. package/bundle/dist/codex-protocol/v2/TerminalInteractionNotification.js +0 -1
  450. package/bundle/dist/codex-protocol/v2/TextElement.js +0 -1
  451. package/bundle/dist/codex-protocol/v2/TextPosition.js +0 -1
  452. package/bundle/dist/codex-protocol/v2/TextRange.js +0 -1
  453. package/bundle/dist/codex-protocol/v2/Thread.js +0 -1
  454. package/bundle/dist/codex-protocol/v2/ThreadActiveFlag.js +0 -1
  455. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.js +0 -1
  456. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.js +0 -1
  457. package/bundle/dist/codex-protocol/v2/ThreadArchiveParams.js +0 -1
  458. package/bundle/dist/codex-protocol/v2/ThreadArchiveResponse.js +0 -1
  459. package/bundle/dist/codex-protocol/v2/ThreadArchivedNotification.js +0 -1
  460. package/bundle/dist/codex-protocol/v2/ThreadClosedNotification.js +0 -1
  461. package/bundle/dist/codex-protocol/v2/ThreadCompactStartParams.js +0 -1
  462. package/bundle/dist/codex-protocol/v2/ThreadCompactStartResponse.js +0 -1
  463. package/bundle/dist/codex-protocol/v2/ThreadForkParams.js +0 -1
  464. package/bundle/dist/codex-protocol/v2/ThreadForkResponse.js +0 -1
  465. package/bundle/dist/codex-protocol/v2/ThreadGoal.js +0 -1
  466. package/bundle/dist/codex-protocol/v2/ThreadGoalClearedNotification.js +0 -1
  467. package/bundle/dist/codex-protocol/v2/ThreadGoalStatus.js +0 -1
  468. package/bundle/dist/codex-protocol/v2/ThreadGoalUpdatedNotification.js +0 -1
  469. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsParams.js +0 -1
  470. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsResponse.js +0 -1
  471. package/bundle/dist/codex-protocol/v2/ThreadItem.js +0 -1
  472. package/bundle/dist/codex-protocol/v2/ThreadListParams.js +0 -1
  473. package/bundle/dist/codex-protocol/v2/ThreadListResponse.js +0 -1
  474. package/bundle/dist/codex-protocol/v2/ThreadLoadedListParams.js +0 -1
  475. package/bundle/dist/codex-protocol/v2/ThreadLoadedListResponse.js +0 -1
  476. package/bundle/dist/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.js +0 -1
  477. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateParams.js +0 -1
  478. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateResponse.js +0 -1
  479. package/bundle/dist/codex-protocol/v2/ThreadNameUpdatedNotification.js +0 -1
  480. package/bundle/dist/codex-protocol/v2/ThreadReadParams.js +0 -1
  481. package/bundle/dist/codex-protocol/v2/ThreadReadResponse.js +0 -1
  482. package/bundle/dist/codex-protocol/v2/ThreadRealtimeAudioChunk.js +0 -1
  483. package/bundle/dist/codex-protocol/v2/ThreadRealtimeClosedNotification.js +0 -1
  484. package/bundle/dist/codex-protocol/v2/ThreadRealtimeErrorNotification.js +0 -1
  485. package/bundle/dist/codex-protocol/v2/ThreadRealtimeItemAddedNotification.js +0 -1
  486. package/bundle/dist/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.js +0 -1
  487. package/bundle/dist/codex-protocol/v2/ThreadRealtimeSdpNotification.js +0 -1
  488. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartTransport.js +0 -1
  489. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartedNotification.js +0 -1
  490. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.js +0 -1
  491. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.js +0 -1
  492. package/bundle/dist/codex-protocol/v2/ThreadResumeParams.js +0 -1
  493. package/bundle/dist/codex-protocol/v2/ThreadResumeResponse.js +0 -1
  494. package/bundle/dist/codex-protocol/v2/ThreadRollbackParams.js +0 -1
  495. package/bundle/dist/codex-protocol/v2/ThreadRollbackResponse.js +0 -1
  496. package/bundle/dist/codex-protocol/v2/ThreadSetNameParams.js +0 -1
  497. package/bundle/dist/codex-protocol/v2/ThreadSetNameResponse.js +0 -1
  498. package/bundle/dist/codex-protocol/v2/ThreadShellCommandParams.js +0 -1
  499. package/bundle/dist/codex-protocol/v2/ThreadShellCommandResponse.js +0 -1
  500. package/bundle/dist/codex-protocol/v2/ThreadSortKey.js +0 -1
  501. package/bundle/dist/codex-protocol/v2/ThreadSource.js +0 -1
  502. package/bundle/dist/codex-protocol/v2/ThreadSourceKind.js +0 -1
  503. package/bundle/dist/codex-protocol/v2/ThreadStartParams.js +0 -1
  504. package/bundle/dist/codex-protocol/v2/ThreadStartResponse.js +0 -1
  505. package/bundle/dist/codex-protocol/v2/ThreadStartSource.js +0 -1
  506. package/bundle/dist/codex-protocol/v2/ThreadStartedNotification.js +0 -1
  507. package/bundle/dist/codex-protocol/v2/ThreadStatus.js +0 -1
  508. package/bundle/dist/codex-protocol/v2/ThreadStatusChangedNotification.js +0 -1
  509. package/bundle/dist/codex-protocol/v2/ThreadTokenUsage.js +0 -1
  510. package/bundle/dist/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.js +0 -1
  511. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveParams.js +0 -1
  512. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveResponse.js +0 -1
  513. package/bundle/dist/codex-protocol/v2/ThreadUnarchivedNotification.js +0 -1
  514. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeParams.js +0 -1
  515. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeResponse.js +0 -1
  516. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeStatus.js +0 -1
  517. package/bundle/dist/codex-protocol/v2/TokenUsageBreakdown.js +0 -1
  518. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputAnswer.js +0 -1
  519. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputOption.js +0 -1
  520. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputParams.js +0 -1
  521. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputQuestion.js +0 -1
  522. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputResponse.js +0 -1
  523. package/bundle/dist/codex-protocol/v2/ToolsV2.js +0 -1
  524. package/bundle/dist/codex-protocol/v2/Turn.js +0 -1
  525. package/bundle/dist/codex-protocol/v2/TurnCompletedNotification.js +0 -1
  526. package/bundle/dist/codex-protocol/v2/TurnDiffUpdatedNotification.js +0 -1
  527. package/bundle/dist/codex-protocol/v2/TurnEnvironmentParams.js +0 -1
  528. package/bundle/dist/codex-protocol/v2/TurnError.js +0 -1
  529. package/bundle/dist/codex-protocol/v2/TurnInterruptParams.js +0 -1
  530. package/bundle/dist/codex-protocol/v2/TurnInterruptResponse.js +0 -1
  531. package/bundle/dist/codex-protocol/v2/TurnItemsView.js +0 -1
  532. package/bundle/dist/codex-protocol/v2/TurnPlanStep.js +0 -1
  533. package/bundle/dist/codex-protocol/v2/TurnPlanStepStatus.js +0 -1
  534. package/bundle/dist/codex-protocol/v2/TurnPlanUpdatedNotification.js +0 -1
  535. package/bundle/dist/codex-protocol/v2/TurnStartParams.js +0 -1
  536. package/bundle/dist/codex-protocol/v2/TurnStartResponse.js +0 -1
  537. package/bundle/dist/codex-protocol/v2/TurnStartedNotification.js +0 -1
  538. package/bundle/dist/codex-protocol/v2/TurnStatus.js +0 -1
  539. package/bundle/dist/codex-protocol/v2/TurnSteerParams.js +0 -1
  540. package/bundle/dist/codex-protocol/v2/TurnSteerResponse.js +0 -1
  541. package/bundle/dist/codex-protocol/v2/UserInput.js +0 -1
  542. package/bundle/dist/codex-protocol/v2/WarningNotification.js +0 -1
  543. package/bundle/dist/codex-protocol/v2/WebSearchAction.js +0 -1
  544. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadiness.js +0 -1
  545. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadinessResponse.js +0 -1
  546. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.js +0 -1
  547. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupMode.js +0 -1
  548. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartParams.js +0 -1
  549. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartResponse.js +0 -1
  550. package/bundle/dist/codex-protocol/v2/WindowsWorldWritableWarningNotification.js +0 -1
  551. package/bundle/dist/codex-protocol/v2/WriteStatus.js +0 -1
  552. package/bundle/dist/i18n/en.js +1 -2
  553. package/bundle/dist/i18n/ko.js +1 -2
  554. package/bundle/dist/i18n/sd.generated.js +54 -21
  555. package/bundle/dist/index.js +1 -2
  556. package/bundle/dist/migrations/20260410171405_create__request_logs.js +1 -2
  557. package/bundle/dist/migrations/20260410171406_create__tokens.js +1 -2
  558. package/bundle/dist/migrations/20260411120624_alter_tokens_alter2.js +1 -2
  559. package/bundle/dist/migrations/20260415113716_alter_tokens_add_ord.js +1 -2
  560. package/bundle/dist/migrations/20260415134649_alter_request_logs_alter1.js +1 -2
  561. package/bundle/dist/migrations/20260421223627_alter_request_logs_add1_alter1.js +1 -2
  562. package/bundle/dist/migrations/20260423180818_alter_request_logs_add1_alter1.js +1 -2
  563. package/bundle/dist/migrations/20260423182017_alter_request_logs_add2_drop1_alter1.js +1 -2
  564. package/bundle/dist/migrations/20260423183613_alter_request_logs_add1_alter1.js +1 -2
  565. package/bundle/dist/migrations/20260518145411_alter_tokens_add2_drop4_alter1.js +1 -2
  566. package/bundle/dist/migrations/20260520112853_alter_request_logs_add3_alter1.js +1 -2
  567. package/bundle/dist/migrations/20260520124755_alter_request_logs_drop1_alter1.js +1 -2
  568. package/bundle/dist/migrations/20260520130420_create__request_log_steps.js +1 -2
  569. package/bundle/dist/migrations/20260520134908_alter_request_logs_add2_alter8.js +1 -2
  570. package/bundle/dist/migrations/20260520134909_alter_request_log_steps_add1_alter3.js +1 -2
  571. package/bundle/dist/migrations/20260520141449_alter_request_logs_add1_alter1.js +1 -2
  572. package/bundle/dist/migrations/20260521134025_alter_request_log_steps_alter1.js +1 -2
  573. package/bundle/dist/migrations/20260521134026_alter_request_log_steps_foreigns.js +1 -2
  574. package/bundle/dist/migrations/20260522181721_alter_request_log_steps_add2_alter1.js +1 -2
  575. package/bundle/dist/migrations/20260630223950_alter_tokens_add1_alter1.js +1 -2
  576. package/bundle/dist/migrations/20260701105327_alter_request_logs_add1_alter1.js +1 -2
  577. package/bundle/dist/migrations/20260701105328_alter_request_log_steps_add1_alter1.js +1 -2
  578. package/bundle/dist/migrations/20260705140614_alter_request_logs_add1_alter1.js +1 -2
  579. package/bundle/dist/migrations/20260706120000_alter_request_logs_add_image_cost.js +1 -2
  580. package/bundle/dist/migrations/20260710090000_alter_tokens_add_weight.js +1 -2
  581. package/bundle/dist/migrations/20260718180824_alter_request_logs_add5_alter1.js +1 -2
  582. package/bundle/dist/migrations/20260718180825_alter_request_log_steps_add7_alter1.js +1 -2
  583. package/bundle/dist/migrations/20260722174410_alter_request_logs_alter3.js +17 -0
  584. package/bundle/dist/migrations/20260722174411_alter_request_log_steps_alter3.js +17 -0
  585. package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +255 -4
  586. package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +1507 -0
  587. package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +887 -0
  588. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +2756 -0
  589. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +8 -0
  590. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +8 -0
  591. package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +922 -0
  592. package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +386 -0
  593. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +121 -0
  594. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +51 -0
  595. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +1317 -0
  596. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +561 -0
  597. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +40 -0
  598. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +272 -0
  599. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +27 -0
  600. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +77 -0
  601. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +381 -0
  602. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +51 -0
  603. package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +103 -3
  604. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +1 -1
  605. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +1 -1
  606. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +1 -1
  607. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +1 -1
  608. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +1 -1
  609. package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +2 -3
  610. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +4 -4
  611. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +2 -2
  612. package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +18 -7
  613. package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +18 -3
  614. package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_2519c2e8d8013fcbc7b443879bc9da6d/node_modules/vite/dist/node/module-runner.js +1265 -0
  615. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +6 -3
  616. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +8 -8
  617. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +5 -5
  618. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +3 -3
  619. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +46 -0
  620. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +66 -6
  621. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +3044 -0
  622. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +19 -4
  623. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/index.js +28 -0
  624. package/bundle/dist/server-bootstrap.js +1 -2
  625. package/bundle/dist/sonamu.config.js +11 -27
  626. package/bundle/dist/startup-migrations.js +1 -2
  627. package/bundle/dist/testing/fixture.js +1 -2
  628. package/bundle/dist/testing/global.js +6 -7
  629. package/bundle/dist/testing/setup-mocks.js +3 -4
  630. package/bundle/dist/testing/test-database-name.js +5 -8
  631. package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +8 -8
  632. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +1 -2
  633. package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +1 -2
  634. package/bundle/dist/utils/providers/anthropic/claude-session.js +5 -7
  635. package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +1 -2
  636. package/bundle/dist/utils/providers/common/credentials.js +1 -2
  637. package/bundle/dist/utils/providers/common/model-cost.js +3 -3
  638. package/bundle/dist/utils/providers/common/provider-dispatcher.js +0 -1
  639. package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -2
  640. package/bundle/dist/utils/providers/common/strictifier.js +2 -2
  641. package/bundle/dist/utils/providers/common/token-picker.js +1 -2
  642. package/bundle/dist/utils/providers/common/ttft.js +1 -2
  643. package/bundle/dist/utils/providers/openai/codex-rpc.js +4 -2
  644. package/bundle/dist/utils/providers/openai/codex-worker.js +2 -2
  645. package/bundle/dist/utils/providers/openai/openai-constants.js +1 -2
  646. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +103 -40
  647. package/bundle/dist/utils/providers/openai/openai-quota.js +1 -2
  648. package/bundle/dist/utils/providers/openai/openai-refresh.js +1 -2
  649. package/bundle/dist/utils/subset-loaders.js +1 -2
  650. package/bundle/src/application/monit/monit.frame.test.ts +2 -2
  651. package/bundle/src/application/monit/monit.frame.ts +2 -2
  652. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +242 -8
  653. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +97 -57
  654. package/bundle/src/application/qgrid/qgrid.frame.test.ts +400 -96
  655. package/bundle/src/application/qgrid/qgrid.frame.ts +85 -123
  656. package/bundle/src/application/qgrid/qgrid.types.ts +35 -27
  657. package/bundle/src/application/request-log/request-log.entity.json +2 -2
  658. package/bundle/src/application/request-log/request-log.model.test.ts +325 -21
  659. package/bundle/src/application/request-log/request-log.model.ts +233 -125
  660. package/bundle/src/application/request-log-step/request-log-step.entity.json +2 -2
  661. package/bundle/src/application/sonamu.generated.http +2 -2
  662. package/bundle/src/application/sonamu.generated.ts +13 -13
  663. package/bundle/src/i18n/sd.generated.ts +83 -14
  664. package/bundle/src/migrations/20260722174410_alter_request_logs_alter3.ts +19 -0
  665. package/bundle/src/migrations/20260722174411_alter_request_log_steps_alter3.ts +19 -0
  666. package/bundle/src/sonamu.config.ts +5 -23
  667. package/bundle/src/testing/global.ts +5 -5
  668. package/bundle/src/testing/test-database-name.test.ts +5 -5
  669. package/bundle/src/testing/test-database-name.ts +9 -8
  670. package/bundle/src/utils/providers/anthropic/anthropic-constants.test.ts +10 -6
  671. package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +9 -5
  672. package/bundle/src/utils/providers/anthropic/claude-session.test.ts +18 -3
  673. package/bundle/src/utils/providers/anthropic/claude-session.ts +4 -4
  674. package/bundle/src/utils/providers/common/model-cost.test.ts +1 -0
  675. package/bundle/src/utils/providers/common/model-cost.ts +1 -0
  676. package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +440 -0
  677. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +143 -45
  678. package/bundle/web-dist/client/assets/{index-CmuPjbCl.js → index-B8Qj0LZK.js} +3 -3
  679. package/bundle/web-dist/client/assets/logs-C7R8Hvyy.js +1 -0
  680. package/bundle/web-dist/client/assets/{monit-B5Edhvy-.js → monit-Cj2KSodR.js} +1 -1
  681. package/bundle/web-dist/client/assets/{routes-UPWScORY.js → routes-DI1rjqGY.js} +1 -1
  682. package/bundle/web-dist/client/assets/{sd.generated-DYuKzBY6.js → sd.generated-DbBC73_z.js} +1 -1
  683. package/bundle/web-dist/client/assets/{services.generated-D_SkWOo-.js → services.generated-BWyAypSh.js} +1 -1
  684. package/bundle/web-dist/client/assets/{show-pRp-eZIK.js → show-B9hDSX9F.js} +2 -2
  685. package/bundle/web-dist/client/assets/{tokens-DJlttxCM.js → tokens-xUexYz3u.js} +1 -1
  686. package/bundle/web-dist/client/assets/{use-update-token-mutation-CpFGLWUl.js → use-update-token-mutation-DeDBiZiM.js} +1 -1
  687. package/bundle/web-dist/client/index.html +2 -2
  688. package/bundle/web-dist/server/assets/{lazyRouteComponent-Cu6IkL8A.js → lazyRouteComponent-BCJr868T.js} +1 -1
  689. package/bundle/web-dist/server/assets/{logs-Dx2knN2T.js → logs-33YNafdW.js} +32 -11
  690. package/bundle/web-dist/server/assets/{monit-DU6PLatf.js → monit--9mVsjNU.js} +2 -2
  691. package/bundle/web-dist/server/assets/{routes-CTco1oJZ.js → routes-BK3Xh1UB.js} +3 -3
  692. package/bundle/web-dist/server/assets/{sd.generated-qzuRe35X.js → sd.generated-C3gcvRcU.js} +1 -0
  693. package/bundle/web-dist/server/assets/{services.generated-C8q1M41a.js → services.generated-B2_Auwvk.js} +1 -1
  694. package/bundle/web-dist/server/assets/{show-B3q8_GDh.js → show-Dxxxe608.js} +15 -9
  695. package/bundle/web-dist/server/assets/{tokens-Bvjn15h9.js → tokens-BWPVvdfi.js} +3 -3
  696. package/bundle/web-dist/server/assets/{use-update-token-mutation-BlZo6swF.js → use-update-token-mutation-CNBgTysy.js} +1 -1
  697. package/bundle/web-dist/server/entry-server.generated.js +23 -23
  698. package/dist/cli.d.ts +1 -0
  699. package/dist/cli.js +18 -12
  700. package/package.json +6 -6
  701. package/skills/qgrid/SKILL.md +4 -0
  702. package/skills/qgrid/references/ai-sdk-provider-contract.md +28 -2
  703. package/skills/qgrid/references/anthropic-claude-code-runtime.md +5 -4
  704. package/skills/qgrid/references/cli-env-and-server-boot.md +20 -8
  705. package/skills/qgrid/references/decision-rationale.md +4 -0
  706. package/skills/qgrid/references/docs-workflow.md +10 -0
  707. package/skills/qgrid/references/openai-codex-runtime.md +11 -3
  708. package/skills/qgrid/references/provider-runtime-differences.md +3 -3
  709. package/skills/qgrid/references/request-log-run-lifecycle.md +46 -28
  710. package/skills/qgrid/references/sonamu-api-web-flow.md +4 -0
  711. package/skills/qgrid/references/token-auth-quota-lifecycle.md +6 -0
  712. package/skills/qgrid/references/tool-calling-and-multiturn.md +8 -7
  713. package/skills/qgrid/references/verification-and-debugging.md +1 -1
  714. package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.2/node_modules/@vitest/expect/dist/index.js +0 -1484
  715. package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.2/node_modules/@vitest/pretty-format/dist/index.js +0 -887
  716. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2746
  717. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/index.js +0 -8
  718. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/utils.js +0 -8
  719. package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.2/node_modules/@vitest/snapshot/dist/index.js +0 -662
  720. package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.2/node_modules/@vitest/spy/dist/index.js +0 -386
  721. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -82
  722. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/constants.js +0 -48
  723. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/diff.js +0 -1307
  724. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/display.js +0 -558
  725. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/error.js +0 -33
  726. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/helpers.js +0 -226
  727. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/offset.js +0 -27
  728. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/serialize.js +0 -77
  729. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/source-map.js +0 -374
  730. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/timers.js +0 -37
  731. package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.9.2_@emnapi_runtime@1.9.2_@types_node@25.0.7_esbuild@0.27.4_jiti@2.6.1_sass@1.98.0_tsx@4.21.0/node_modules/vite/dist/node/module-runner.js +0 -426
  732. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496/node_modules/vitest/dist/chunks/index.DOa3dzoN.js +0 -16
  733. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496/node_modules/vitest/dist/chunks/test.p_J6dB8a.js +0 -2910
  734. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496/node_modules/vitest/dist/index.js +0 -28
  735. package/bundle/web-dist/client/assets/logs-cXOsDli3.js +0 -1
@@ -625,16 +625,115 @@ function inspect(value, opts = {}) {
625
625
  }
626
626
  __name(inspect, "inspect");
627
627
  var config = {
628
+ /**
629
+ * ### config.includeStack
630
+ *
631
+ * User configurable property, influences whether stack trace
632
+ * is included in Assertion error message. Default of false
633
+ * suppresses stack trace in the error message.
634
+ *
635
+ * chai.config.includeStack = true; // enable stack on error
636
+ *
637
+ * @param {boolean}
638
+ * @public
639
+ */
628
640
  includeStack: false,
641
+ /**
642
+ * ### config.showDiff
643
+ *
644
+ * User configurable property, influences whether or not
645
+ * the `showDiff` flag should be included in the thrown
646
+ * AssertionErrors. `false` will always be `false`; `true`
647
+ * will be true when the assertion has requested a diff
648
+ * be shown.
649
+ *
650
+ * @param {boolean}
651
+ * @public
652
+ */
629
653
  showDiff: true,
654
+ /**
655
+ * ### config.truncateThreshold
656
+ *
657
+ * User configurable property, sets length threshold for actual and
658
+ * expected values in assertion errors. If this threshold is exceeded, for
659
+ * example for large data structures, the value is replaced with something
660
+ * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.
661
+ *
662
+ * Set it to zero if you want to disable truncating altogether.
663
+ *
664
+ * This is especially userful when doing assertions on arrays: having this
665
+ * set to a reasonable large value makes the failure messages readily
666
+ * inspectable.
667
+ *
668
+ * chai.config.truncateThreshold = 0; // disable truncating
669
+ *
670
+ * @param {number}
671
+ * @public
672
+ */
630
673
  truncateThreshold: 40,
674
+ /**
675
+ * ### config.useProxy
676
+ *
677
+ * User configurable property, defines if chai will use a Proxy to throw
678
+ * an error when a non-existent property is read, which protects users
679
+ * from typos when using property-based assertions.
680
+ *
681
+ * Set it to false if you want to disable this feature.
682
+ *
683
+ * chai.config.useProxy = false; // disable use of Proxy
684
+ *
685
+ * This feature is automatically disabled regardless of this config value
686
+ * in environments that don't support proxies.
687
+ *
688
+ * @param {boolean}
689
+ * @public
690
+ */
631
691
  useProxy: true,
692
+ /**
693
+ * ### config.proxyExcludedKeys
694
+ *
695
+ * User configurable property, defines which properties should be ignored
696
+ * instead of throwing an error if they do not exist on the assertion.
697
+ * This is only applied if the environment Chai is running in supports proxies and
698
+ * if the `useProxy` configuration setting is enabled.
699
+ * By default, `then` and `inspect` will not throw an error if they do not exist on the
700
+ * assertion object because the `.inspect` property is read by `util.inspect` (for example, when
701
+ * using `console.log` on the assertion object) and `.then` is necessary for promise type-checking.
702
+ *
703
+ * // By default these keys will not throw an error if they do not exist on the assertion object
704
+ * chai.config.proxyExcludedKeys = ['then', 'inspect'];
705
+ *
706
+ * @param {Array}
707
+ * @public
708
+ */
632
709
  proxyExcludedKeys: [
633
710
  "then",
634
711
  "catch",
635
712
  "inspect",
636
713
  "toJSON"
637
714
  ],
715
+ /**
716
+ * ### config.deepEqual
717
+ *
718
+ * User configurable property, defines which a custom function to use for deepEqual
719
+ * comparisons.
720
+ * By default, the function used is the one from the `deep-eql` package without custom comparator.
721
+ *
722
+ * // use a custom comparator
723
+ * chai.config.deepEqual = (expected, actual) => {
724
+ * return chai.util.eql(expected, actual, {
725
+ * comparator: (expected, actual) => {
726
+ * // for non number comparison, use the default behavior
727
+ * if(typeof expected !== 'number') return null;
728
+ * // allow a difference of 10 between compared numbers
729
+ * return typeof actual === 'number' && Math.abs(actual - expected) < 10
730
+ * }
731
+ * })
732
+ * };
733
+ *
734
+ * @param {Function}
735
+ * @public
736
+ */
638
737
  deepEqual: null
639
738
  };
640
739
  function inspect2(obj, showHidden, depth, colors) {
@@ -1337,7 +1436,8 @@ function addChainableMethod(ctx, name, method, chainingBehavior) {
1337
1436
  Object.setPrototypeOf(chainableMethodWrapper, prototype);
1338
1437
  } else Object.getOwnPropertyNames(ctx).forEach(function(asserterName) {
1339
1438
  if (excludeNames.indexOf(asserterName) !== -1) return;
1340
- Object.defineProperty(chainableMethodWrapper, asserterName, Object.getOwnPropertyDescriptor(ctx, asserterName));
1439
+ let pd = Object.getOwnPropertyDescriptor(ctx, asserterName);
1440
+ Object.defineProperty(chainableMethodWrapper, asserterName, pd);
1341
1441
  });
1342
1442
  transferFlags(this, chainableMethodWrapper);
1343
1443
  return proxify(chainableMethodWrapper);
@@ -2881,6 +2981,6 @@ function use(fn) {
2881
2981
  }
2882
2982
  __name(use, "use");
2883
2983
  //#endregion
2884
- export { Assertion, assert, chai_exports, expect, should, use, utils_exports };
2984
+ export { Assertion, AssertionError, Should, assert, chai_exports, config, expect, should, use, utils_exports as util };
2885
2985
 
2886
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANi4yLjIvbm9kZV9tb2R1bGVzL2NoYWkvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4gX19kZWZOb3JtYWxQcm9wKG9iaiwgdHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIiA/IGtleSArIFwiXCIgOiBrZXksIHZhbHVlKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaW5kZXguanNcbnZhciB1dGlsc19leHBvcnRzID0ge307XG5fX2V4cG9ydCh1dGlsc19leHBvcnRzLCB7XG4gIGFkZENoYWluYWJsZU1ldGhvZDogKCkgPT4gYWRkQ2hhaW5hYmxlTWV0aG9kLFxuICBhZGRMZW5ndGhHdWFyZDogKCkgPT4gYWRkTGVuZ3RoR3VhcmQsXG4gIGFkZE1ldGhvZDogKCkgPT4gYWRkTWV0aG9kLFxuICBhZGRQcm9wZXJ0eTogKCkgPT4gYWRkUHJvcGVydHksXG4gIGNoZWNrRXJyb3I6ICgpID0+IGNoZWNrX2Vycm9yX2V4cG9ydHMsXG4gIGNvbXBhcmVCeUluc3BlY3Q6ICgpID0+IGNvbXBhcmVCeUluc3BlY3QsXG4gIGVxbDogKCkgPT4gZGVlcF9lcWxfZGVmYXVsdCxcbiAgZXZlbnRzOiAoKSA9PiBldmVudHMsXG4gIGV4cGVjdFR5cGVzOiAoKSA9PiBleHBlY3RUeXBlcyxcbiAgZmxhZzogKCkgPT4gZmxhZyxcbiAgZ2V0QWN0dWFsOiAoKSA9PiBnZXRBY3R1YWwsXG4gIGdldE1lc3NhZ2U6ICgpID0+IGdldE1lc3NhZ2UyLFxuICBnZXROYW1lOiAoKSA9PiBnZXROYW1lLFxuICBnZXRPcGVyYXRvcjogKCkgPT4gZ2V0T3BlcmF0b3IsXG4gIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzOiAoKSA9PiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyxcbiAgZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sczogKCkgPT4gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyxcbiAgZ2V0UGF0aEluZm86ICgpID0+IGdldFBhdGhJbmZvLFxuICBoYXNQcm9wZXJ0eTogKCkgPT4gaGFzUHJvcGVydHksXG4gIGluc3BlY3Q6ICgpID0+IGluc3BlY3QyLFxuICBpc05hTjogKCkgPT4gaXNOYU4yLFxuICBpc051bWVyaWM6ICgpID0+IGlzTnVtZXJpYyxcbiAgaXNQcm94eUVuYWJsZWQ6ICgpID0+IGlzUHJveHlFbmFibGVkLFxuICBpc1JlZ0V4cDogKCkgPT4gaXNSZWdFeHAyLFxuICBvYmpEaXNwbGF5OiAoKSA9PiBvYmpEaXNwbGF5LFxuICBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2Q6ICgpID0+IG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCxcbiAgb3ZlcndyaXRlTWV0aG9kOiAoKSA9PiBvdmVyd3JpdGVNZXRob2QsXG4gIG92ZXJ3cml0ZVByb3BlcnR5OiAoKSA9PiBvdmVyd3JpdGVQcm9wZXJ0eSxcbiAgcHJveGlmeTogKCkgPT4gcHJveGlmeSxcbiAgdGVzdDogKCkgPT4gdGVzdCxcbiAgdHJhbnNmZXJGbGFnczogKCkgPT4gdHJhbnNmZXJGbGFncyxcbiAgdHlwZTogKCkgPT4gdHlwZVxufSk7XG5cbi8vIG5vZGVfbW9kdWxlcy9jaGVjay1lcnJvci9pbmRleC5qc1xudmFyIGNoZWNrX2Vycm9yX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGNoZWNrX2Vycm9yX2V4cG9ydHMsIHtcbiAgY29tcGF0aWJsZUNvbnN0cnVjdG9yOiAoKSA9PiBjb21wYXRpYmxlQ29uc3RydWN0b3IsXG4gIGNvbXBhdGlibGVJbnN0YW5jZTogKCkgPT4gY29tcGF0aWJsZUluc3RhbmNlLFxuICBjb21wYXRpYmxlTWVzc2FnZTogKCkgPT4gY29tcGF0aWJsZU1lc3NhZ2UsXG4gIGdldENvbnN0cnVjdG9yTmFtZTogKCkgPT4gZ2V0Q29uc3RydWN0b3JOYW1lLFxuICBnZXRNZXNzYWdlOiAoKSA9PiBnZXRNZXNzYWdlXG59KTtcbmZ1bmN0aW9uIGlzRXJyb3JJbnN0YW5jZShvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEVycm9yIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgRXJyb3JdXCI7XG59XG5fX25hbWUoaXNFcnJvckluc3RhbmNlLCBcImlzRXJyb3JJbnN0YW5jZVwiKTtcbmZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBSZWdFeHBdXCI7XG59XG5fX25hbWUoaXNSZWdFeHAsIFwiaXNSZWdFeHBcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlSW5zdGFuY2UodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgcmV0dXJuIGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpICYmIHRocm93biA9PT0gZXJyb3JMaWtlO1xufVxuX19uYW1lKGNvbXBhdGlibGVJbnN0YW5jZSwgXCJjb21wYXRpYmxlSW5zdGFuY2VcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlQ29uc3RydWN0b3IodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgaWYgKGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpKSB7XG4gICAgcmV0dXJuIHRocm93bi5jb25zdHJ1Y3RvciA9PT0gZXJyb3JMaWtlLmNvbnN0cnVjdG9yIHx8IHRocm93biBpbnN0YW5jZW9mIGVycm9yTGlrZS5jb25zdHJ1Y3RvcjtcbiAgfSBlbHNlIGlmICgodHlwZW9mIGVycm9yTGlrZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZXJyb3JMaWtlID09PSBcImZ1bmN0aW9uXCIpICYmIGVycm9yTGlrZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gdGhyb3duLmNvbnN0cnVjdG9yID09PSBlcnJvckxpa2UgfHwgdGhyb3duIGluc3RhbmNlb2YgZXJyb3JMaWtlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShjb21wYXRpYmxlQ29uc3RydWN0b3IsIFwiY29tcGF0aWJsZUNvbnN0cnVjdG9yXCIpO1xuZnVuY3Rpb24gY29tcGF0aWJsZU1lc3NhZ2UodGhyb3duLCBlcnJNYXRjaGVyKSB7XG4gIGNvbnN0IGNvbXBhcmlzb25TdHJpbmcgPSB0eXBlb2YgdGhyb3duID09PSBcInN0cmluZ1wiID8gdGhyb3duIDogdGhyb3duLm1lc3NhZ2U7XG4gIGlmIChpc1JlZ0V4cChlcnJNYXRjaGVyKSkge1xuICAgIHJldHVybiBlcnJNYXRjaGVyLnRlc3QoY29tcGFyaXNvblN0cmluZyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVyck1hdGNoZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gY29tcGFyaXNvblN0cmluZy5pbmRleE9mKGVyck1hdGNoZXIpICE9PSAtMTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUoY29tcGF0aWJsZU1lc3NhZ2UsIFwiY29tcGF0aWJsZU1lc3NhZ2VcIik7XG5mdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSB7XG4gIGxldCBjb25zdHJ1Y3Rvck5hbWUgPSBlcnJvckxpa2U7XG4gIGlmIChpc0Vycm9ySW5zdGFuY2UoZXJyb3JMaWtlKSkge1xuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZS5uYW1lO1xuICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09IFwiXCIpIHtcbiAgICAgIGNvbnN0IG5ld0NvbnN0cnVjdG9yTmFtZSA9IG5ldyBlcnJvckxpa2UoKS5uYW1lO1xuICAgICAgY29uc3RydWN0b3JOYW1lID0gbmV3Q29uc3RydWN0b3JOYW1lIHx8IGNvbnN0cnVjdG9yTmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbn1cbl9fbmFtZShnZXRDb25zdHJ1Y3Rvck5hbWUsIFwiZ2V0Q29uc3RydWN0b3JOYW1lXCIpO1xuZnVuY3Rpb24gZ2V0TWVzc2FnZShlcnJvckxpa2UpIHtcbiAgbGV0IG1zZyA9IFwiXCI7XG4gIGlmIChlcnJvckxpa2UgJiYgZXJyb3JMaWtlLm1lc3NhZ2UpIHtcbiAgICBtc2cgPSBlcnJvckxpa2UubWVzc2FnZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3JMaWtlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbXNnID0gZXJyb3JMaWtlO1xuICB9XG4gIHJldHVybiBtc2c7XG59XG5fX25hbWUoZ2V0TWVzc2FnZSwgXCJnZXRNZXNzYWdlXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9mbGFnLmpzXG5mdW5jdGlvbiBmbGFnKG9iaiwga2V5LCB2YWx1ZSkge1xuICBsZXQgZmxhZ3MgPSBvYmouX19mbGFncyB8fCAob2JqLl9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZmxhZ3Nba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmbGFnc1trZXldO1xuICB9XG59XG5fX25hbWUoZmxhZywgXCJmbGFnXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy90ZXN0LmpzXG5mdW5jdGlvbiB0ZXN0KG9iaiwgYXJncykge1xuICBsZXQgbmVnYXRlID0gZmxhZyhvYmosIFwibmVnYXRlXCIpLCBleHByID0gYXJnc1swXTtcbiAgcmV0dXJuIG5lZ2F0ZSA/ICFleHByIDogZXhwcjtcbn1cbl9fbmFtZSh0ZXN0LCBcInRlc3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3R5cGUtZGV0ZWN0LmpzXG5mdW5jdGlvbiB0eXBlKG9iaikge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJudWxsXCI7XG4gIH1cbiAgY29uc3Qgc3RyaW5nVGFnID0gb2JqW1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIGlmICh0eXBlb2Ygc3RyaW5nVGFnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuICBjb25zdCB0eXBlMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKTtcbiAgcmV0dXJuIHR5cGUzO1xufVxuX19uYW1lKHR5cGUsIFwidHlwZVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2Fzc2VydGlvbi1lcnJvci9pbmRleC5qc1xudmFyIGNhbkVsaWRlRnJhbWVzID0gXCJjYXB0dXJlU3RhY2tUcmFjZVwiIGluIEVycm9yO1xudmFyIF9Bc3NlcnRpb25FcnJvciA9IGNsYXNzIF9Bc3NlcnRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9IFwiVW5zcGVjaWZpZWQgQXNzZXJ0aW9uRXJyb3JcIiwgcHJvcHMsIHNzZikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIF9fcHVibGljRmllbGQodGhpcywgXCJtZXNzYWdlXCIpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKGNhbkVsaWRlRnJhbWVzKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBzc2YgfHwgX0Fzc2VydGlvbkVycm9yKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIGlmICghKGtleSBpbiB0aGlzKSkge1xuICAgICAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gXCJBc3NlcnRpb25FcnJvclwiO1xuICB9XG4gIGdldCBvaygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdG9KU09OKHN0YWNrKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBvazogZmFsc2UsXG4gICAgICBzdGFjazogc3RhY2sgIT09IGZhbHNlID8gdGhpcy5zdGFjayA6IHZvaWQgMFxuICAgIH07XG4gIH1cbn07XG5fX25hbWUoX0Fzc2VydGlvbkVycm9yLCBcIkFzc2VydGlvbkVycm9yXCIpO1xudmFyIEFzc2VydGlvbkVycm9yID0gX0Fzc2VydGlvbkVycm9yO1xuXG4vLyBsaWIvY2hhaS91dGlscy9leHBlY3RUeXBlcy5qc1xuZnVuY3Rpb24gZXhwZWN0VHlwZXMob2JqLCB0eXBlcykge1xuICBsZXQgZmxhZ01zZyA9IGZsYWcob2JqLCBcIm1lc3NhZ2VcIik7XG4gIGxldCBzc2ZpID0gZmxhZyhvYmosIFwic3NmaVwiKTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgb2JqID0gZmxhZyhvYmosIFwib2JqZWN0XCIpO1xuICB0eXBlcyA9IHR5cGVzLm1hcChmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHQudG9Mb3dlckNhc2UoKTtcbiAgfSk7XG4gIHR5cGVzLnNvcnQoKTtcbiAgbGV0IHN0ciA9IHR5cGVzLm1hcChmdW5jdGlvbih0LCBpbmRleCkge1xuICAgIGxldCBhcnQgPSB+W1wiYVwiLCBcImVcIiwgXCJpXCIsIFwib1wiLCBcInVcIl0uaW5kZXhPZih0LmNoYXJBdCgwKSkgPyBcImFuXCIgOiBcImFcIjtcbiAgICBsZXQgb3IgPSB0eXBlcy5sZW5ndGggPiAxICYmIGluZGV4ID09PSB0eXBlcy5sZW5ndGggLSAxID8gXCJvciBcIiA6IFwiXCI7XG4gICAgcmV0dXJuIG9yICsgYXJ0ICsgXCIgXCIgKyB0O1xuICB9KS5qb2luKFwiLCBcIik7XG4gIGxldCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghdHlwZXMuc29tZShmdW5jdGlvbihleHBlY3RlZCkge1xuICAgIHJldHVybiBvYmpUeXBlID09PSBleHBlY3RlZDtcbiAgfSkpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgXCJvYmplY3QgdGVzdGVkIG11c3QgYmUgXCIgKyBzdHIgKyBcIiwgYnV0IFwiICsgb2JqVHlwZSArIFwiIGdpdmVuXCIsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGV4cGVjdFR5cGVzLCBcImV4cGVjdFR5cGVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRBY3R1YWwuanNcbmZ1bmN0aW9uIGdldEFjdHVhbChvYmosIGFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3MubGVuZ3RoID4gNCA/IGFyZ3NbNF0gOiBvYmouX29iajtcbn1cbl9fbmFtZShnZXRBY3R1YWwsIFwiZ2V0QWN0dWFsXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2hlbHBlcnMuanNcbnZhciBhbnNpQ29sb3JzID0ge1xuICBib2xkOiBbXCIxXCIsIFwiMjJcIl0sXG4gIGRpbTogW1wiMlwiLCBcIjIyXCJdLFxuICBpdGFsaWM6IFtcIjNcIiwgXCIyM1wiXSxcbiAgdW5kZXJsaW5lOiBbXCI0XCIsIFwiMjRcIl0sXG4gIC8vIDUgJiA2IGFyZSBibGlua2luZ1xuICBpbnZlcnNlOiBbXCI3XCIsIFwiMjdcIl0sXG4gIGhpZGRlbjogW1wiOFwiLCBcIjI4XCJdLFxuICBzdHJpa2U6IFtcIjlcIiwgXCIyOVwiXSxcbiAgLy8gMTAtMjAgYXJlIGZvbnRzXG4gIC8vIDIxLTI5IGFyZSByZXNldHMgZm9yIDEtOVxuICBibGFjazogW1wiMzBcIiwgXCIzOVwiXSxcbiAgcmVkOiBbXCIzMVwiLCBcIjM5XCJdLFxuICBncmVlbjogW1wiMzJcIiwgXCIzOVwiXSxcbiAgeWVsbG93OiBbXCIzM1wiLCBcIjM5XCJdLFxuICBibHVlOiBbXCIzNFwiLCBcIjM5XCJdLFxuICBtYWdlbnRhOiBbXCIzNVwiLCBcIjM5XCJdLFxuICBjeWFuOiBbXCIzNlwiLCBcIjM5XCJdLFxuICB3aGl0ZTogW1wiMzdcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0YmxhY2s6IFtcIjMwOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0cmVkOiBbXCIzMTsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodGdyZWVuOiBbXCIzMjsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodHllbGxvdzogW1wiMzM7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRibHVlOiBbXCIzNDsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodG1hZ2VudGE6IFtcIjM1OzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0Y3lhbjogW1wiMzY7MVwiLCBcIjM5XCJdLFxuICBicmlnaHR3aGl0ZTogW1wiMzc7MVwiLCBcIjM5XCJdLFxuICBncmV5OiBbXCI5MFwiLCBcIjM5XCJdXG59O1xudmFyIHN0eWxlcyA9IHtcbiAgc3BlY2lhbDogXCJjeWFuXCIsXG4gIG51bWJlcjogXCJ5ZWxsb3dcIixcbiAgYmlnaW50OiBcInllbGxvd1wiLFxuICBib29sZWFuOiBcInllbGxvd1wiLFxuICB1bmRlZmluZWQ6IFwiZ3JleVwiLFxuICBudWxsOiBcImJvbGRcIixcbiAgc3RyaW5nOiBcImdyZWVuXCIsXG4gIHN5bWJvbDogXCJncmVlblwiLFxuICBkYXRlOiBcIm1hZ2VudGFcIixcbiAgcmVnZXhwOiBcInJlZFwiXG59O1xudmFyIHRydW5jYXRvciA9IFwiXFx1MjAyNlwiO1xuZnVuY3Rpb24gY29sb3Jpc2UodmFsdWUsIHN0eWxlVHlwZSkge1xuICBjb25zdCBjb2xvciA9IGFuc2lDb2xvcnNbc3R5bGVzW3N0eWxlVHlwZV1dIHx8IGFuc2lDb2xvcnNbc3R5bGVUeXBlXSB8fCBcIlwiO1xuICBpZiAoIWNvbG9yKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGBcXHgxQlske2NvbG9yWzBdfW0ke1N0cmluZyh2YWx1ZSl9XFx4MUJbJHtjb2xvclsxXX1tYDtcbn1cbl9fbmFtZShjb2xvcmlzZSwgXCJjb2xvcmlzZVwiKTtcbmZ1bmN0aW9uIG5vcm1hbGlzZU9wdGlvbnMoe1xuICBzaG93SGlkZGVuID0gZmFsc2UsXG4gIGRlcHRoID0gMixcbiAgY29sb3JzID0gZmFsc2UsXG4gIGN1c3RvbUluc3BlY3QgPSB0cnVlLFxuICBzaG93UHJveHkgPSBmYWxzZSxcbiAgbWF4QXJyYXlMZW5ndGggPSBJbmZpbml0eSxcbiAgYnJlYWtMZW5ndGggPSBJbmZpbml0eSxcbiAgc2VlbiA9IFtdLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gIHRydW5jYXRlOiB0cnVuY2F0ZTIgPSBJbmZpbml0eSxcbiAgc3R5bGl6ZSA9IFN0cmluZ1xufSA9IHt9LCBpbnNwZWN0Mykge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHNob3dIaWRkZW46IEJvb2xlYW4oc2hvd0hpZGRlbiksXG4gICAgZGVwdGg6IE51bWJlcihkZXB0aCksXG4gICAgY29sb3JzOiBCb29sZWFuKGNvbG9ycyksXG4gICAgY3VzdG9tSW5zcGVjdDogQm9vbGVhbihjdXN0b21JbnNwZWN0KSxcbiAgICBzaG93UHJveHk6IEJvb2xlYW4oc2hvd1Byb3h5KSxcbiAgICBtYXhBcnJheUxlbmd0aDogTnVtYmVyKG1heEFycmF5TGVuZ3RoKSxcbiAgICBicmVha0xlbmd0aDogTnVtYmVyKGJyZWFrTGVuZ3RoKSxcbiAgICB0cnVuY2F0ZTogTnVtYmVyKHRydW5jYXRlMiksXG4gICAgc2VlbixcbiAgICBpbnNwZWN0OiBpbnNwZWN0MyxcbiAgICBzdHlsaXplXG4gIH07XG4gIGlmIChvcHRpb25zLmNvbG9ycykge1xuICAgIG9wdGlvbnMuc3R5bGl6ZSA9IGNvbG9yaXNlO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuX19uYW1lKG5vcm1hbGlzZU9wdGlvbnMsIFwibm9ybWFsaXNlT3B0aW9uc1wiKTtcbmZ1bmN0aW9uIGlzSGlnaFN1cnJvZ2F0ZShjaGFyKSB7XG4gIHJldHVybiBjaGFyID49IFwiXFx1RDgwMFwiICYmIGNoYXIgPD0gXCJcXHVEQkZGXCI7XG59XG5fX25hbWUoaXNIaWdoU3Vycm9nYXRlLCBcImlzSGlnaFN1cnJvZ2F0ZVwiKTtcbmZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZywgbGVuZ3RoLCB0YWlsID0gdHJ1bmNhdG9yKSB7XG4gIHN0cmluZyA9IFN0cmluZyhzdHJpbmcpO1xuICBjb25zdCB0YWlsTGVuZ3RoID0gdGFpbC5sZW5ndGg7XG4gIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIGlmICh0YWlsTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICByZXR1cm4gdGFpbDtcbiAgfVxuICBpZiAoc3RyaW5nTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICBsZXQgZW5kID0gbGVuZ3RoIC0gdGFpbExlbmd0aDtcbiAgICBpZiAoZW5kID4gMCAmJiBpc0hpZ2hTdXJyb2dhdGUoc3RyaW5nW2VuZCAtIDFdKSkge1xuICAgICAgZW5kID0gZW5kIC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3N0cmluZy5zbGljZSgwLCBlbmQpfSR7dGFpbH1gO1xuICB9XG4gIHJldHVybiBzdHJpbmc7XG59XG5fX25hbWUodHJ1bmNhdGUsIFwidHJ1bmNhdGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0TGlzdChsaXN0LCBvcHRpb25zLCBpbnNwZWN0SXRlbSwgc2VwYXJhdG9yID0gXCIsIFwiKSB7XG4gIGluc3BlY3RJdGVtID0gaW5zcGVjdEl0ZW0gfHwgb3B0aW9ucy5pbnNwZWN0O1xuICBjb25zdCBzaXplID0gbGlzdC5sZW5ndGg7XG4gIGlmIChzaXplID09PSAwKVxuICAgIHJldHVybiBcIlwiO1xuICBjb25zdCBvcmlnaW5hbExlbmd0aCA9IG9wdGlvbnMudHJ1bmNhdGU7XG4gIGxldCBvdXRwdXQgPSBcIlwiO1xuICBsZXQgcGVlayA9IFwiXCI7XG4gIGxldCB0cnVuY2F0ZWQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkgKz0gMSkge1xuICAgIGNvbnN0IGxhc3QgPSBpICsgMSA9PT0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3Qgc2Vjb25kVG9MYXN0ID0gaSArIDIgPT09IGxpc3QubGVuZ3RoO1xuICAgIHRydW5jYXRlZCA9IGAke3RydW5jYXRvcn0oJHtsaXN0Lmxlbmd0aCAtIGl9KWA7XG4gICAgY29uc3QgdmFsdWUgPSBsaXN0W2ldO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgPSBvcmlnaW5hbExlbmd0aCAtIG91dHB1dC5sZW5ndGggLSAobGFzdCA/IDAgOiBzZXBhcmF0b3IubGVuZ3RoKTtcbiAgICBjb25zdCBzdHJpbmcgPSBwZWVrIHx8IGluc3BlY3RJdGVtKHZhbHVlLCBvcHRpb25zKSArIChsYXN0ID8gXCJcIiA6IHNlcGFyYXRvcik7XG4gICAgY29uc3QgbmV4dExlbmd0aCA9IG91dHB1dC5sZW5ndGggKyBzdHJpbmcubGVuZ3RoO1xuICAgIGNvbnN0IHRydW5jYXRlZExlbmd0aCA9IG5leHRMZW5ndGggKyB0cnVuY2F0ZWQubGVuZ3RoO1xuICAgIGlmIChsYXN0ICYmIG5leHRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCAmJiBvdXRwdXQubGVuZ3RoICsgdHJ1bmNhdGVkLmxlbmd0aCA8PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIHRydW5jYXRlZExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcGVlayA9IGxhc3QgPyBcIlwiIDogaW5zcGVjdEl0ZW0obGlzdFtpICsgMV0sIG9wdGlvbnMpICsgKHNlY29uZFRvTGFzdCA/IFwiXCIgOiBzZXBhcmF0b3IpO1xuICAgIGlmICghbGFzdCAmJiBzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGggJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvdXRwdXQgKz0gc3RyaW5nO1xuICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIG5leHRMZW5ndGggKyBwZWVrLmxlbmd0aCA+PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgdHJ1bmNhdGVkID0gYCR7dHJ1bmNhdG9yfSgke2xpc3QubGVuZ3RoIC0gaSAtIDF9KWA7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdHJ1bmNhdGVkID0gXCJcIjtcbiAgfVxuICByZXR1cm4gYCR7b3V0cHV0fSR7dHJ1bmNhdGVkfWA7XG59XG5fX25hbWUoaW5zcGVjdExpc3QsIFwiaW5zcGVjdExpc3RcIik7XG5mdW5jdGlvbiBxdW90ZUNvbXBsZXhLZXkoa2V5KSB7XG4gIGlmIChrZXkubWF0Y2goL15bYS16QS1aX11bYS16QS1aXzAtOV0qJC8pKSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa2V5KS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csICdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG59XG5fX25hbWUocXVvdGVDb21wbGV4S2V5LCBcInF1b3RlQ29tcGxleEtleVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RQcm9wZXJ0eShba2V5LCB2YWx1ZV0sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSAyO1xuICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGtleSA9IHF1b3RlQ29tcGxleEtleShrZXkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgIT09IFwibnVtYmVyXCIpIHtcbiAgICBrZXkgPSBgWyR7b3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyl9XWA7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBrZXkubGVuZ3RoO1xuICB2YWx1ZSA9IG9wdGlvbnMuaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIHJldHVybiBgJHtrZXl9OiAke3ZhbHVlfWA7XG59XG5fX25hbWUoaW5zcGVjdFByb3BlcnR5LCBcImluc3BlY3RQcm9wZXJ0eVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9hcnJheS5qc1xuZnVuY3Rpb24gaW5zcGVjdEFycmF5KGFycmF5LCBvcHRpb25zKSB7XG4gIGNvbnN0IG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aClcbiAgICByZXR1cm4gXCJbXVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gIGNvbnN0IGxpc3RDb250ZW50cyA9IGluc3BlY3RMaXN0KGFycmF5LCBvcHRpb25zKTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBsaXN0Q29udGVudHMubGVuZ3RoO1xuICBsZXQgcHJvcGVydHlDb250ZW50cyA9IFwiXCI7XG4gIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgYXJyYXlba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICB9XG4gIHJldHVybiBgWyAke2xpc3RDb250ZW50c30ke3Byb3BlcnR5Q29udGVudHMgPyBgLCAke3Byb3BlcnR5Q29udGVudHN9YCA6IFwiXCJ9IF1gO1xufVxuX19uYW1lKGluc3BlY3RBcnJheSwgXCJpbnNwZWN0QXJyYXlcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvdHlwZWRhcnJheS5qc1xudmFyIGdldEFycmF5TmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFycmF5KSA9PiB7XG4gIGlmICh0eXBlb2YgQnVmZmVyID09PSBcImZ1bmN0aW9uXCIgJiYgYXJyYXkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gXCJCdWZmZXJcIjtcbiAgfVxuICBpZiAoYXJyYXlbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgIHJldHVybiBhcnJheVtTeW1ib2wudG9TdHJpbmdUYWddO1xuICB9XG4gIHJldHVybiBhcnJheS5jb25zdHJ1Y3Rvci5uYW1lO1xufSwgXCJnZXRBcnJheU5hbWVcIik7XG5mdW5jdGlvbiBpbnNwZWN0VHlwZWRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICBjb25zdCBuYW1lID0gZ2V0QXJyYXlOYW1lKGFycmF5KTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aCArIDQ7XG4gIGNvbnN0IG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aClcbiAgICByZXR1cm4gYCR7bmFtZX1bXWA7XG4gIGxldCBvdXRwdXQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gYCR7b3B0aW9ucy5zdHlsaXplKHRydW5jYXRlKGFycmF5W2ldLCBvcHRpb25zLnRydW5jYXRlKSwgXCJudW1iZXJcIil9JHtpID09PSBhcnJheS5sZW5ndGggLSAxID8gXCJcIiA6IFwiLCBcIn1gO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gc3RyaW5nLmxlbmd0aDtcbiAgICBpZiAoYXJyYXlbaV0gIT09IGFycmF5Lmxlbmd0aCAmJiBvcHRpb25zLnRydW5jYXRlIDw9IDMpIHtcbiAgICAgIG91dHB1dCArPSBgJHt0cnVuY2F0b3J9KCR7YXJyYXkubGVuZ3RoIC0gYXJyYXlbaV0gKyAxfSlgO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG91dHB1dCArPSBzdHJpbmc7XG4gIH1cbiAgbGV0IHByb3BlcnR5Q29udGVudHMgPSBcIlwiO1xuICBpZiAobm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChub25JbmRleFByb3BlcnRpZXMubWFwKChrZXkpID0+IFtrZXksIGFycmF5W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgfVxuICByZXR1cm4gYCR7bmFtZX1bICR7b3V0cHV0fSR7cHJvcGVydHlDb250ZW50cyA/IGAsICR7cHJvcGVydHlDb250ZW50c31gIDogXCJcIn0gXWA7XG59XG5fX25hbWUoaW5zcGVjdFR5cGVkQXJyYXksIFwiaW5zcGVjdFR5cGVkQXJyYXlcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZGF0ZS5qc1xuZnVuY3Rpb24gaW5zcGVjdERhdGUoZGF0ZU9iamVjdCwgb3B0aW9ucykge1xuICBjb25zdCBzdHJpbmdSZXByZXNlbnRhdGlvbiA9IGRhdGVPYmplY3QudG9KU09OKCk7XG4gIGlmIChzdHJpbmdSZXByZXNlbnRhdGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIkludmFsaWQgRGF0ZVwiO1xuICB9XG4gIGNvbnN0IHNwbGl0ID0gc3RyaW5nUmVwcmVzZW50YXRpb24uc3BsaXQoXCJUXCIpO1xuICBjb25zdCBkYXRlID0gc3BsaXRbMF07XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYCR7ZGF0ZX1UJHt0cnVuY2F0ZShzcGxpdFsxXSwgb3B0aW9ucy50cnVuY2F0ZSAtIGRhdGUubGVuZ3RoIC0gMSl9YCwgXCJkYXRlXCIpO1xufVxuX19uYW1lKGluc3BlY3REYXRlLCBcImluc3BlY3REYXRlXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2Z1bmN0aW9uLmpzXG5mdW5jdGlvbiBpbnNwZWN0RnVuY3Rpb24oZnVuYywgb3B0aW9ucykge1xuICBjb25zdCBmdW5jdGlvblR5cGUgPSBmdW5jW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgXCJGdW5jdGlvblwiO1xuICBjb25zdCBuYW1lID0gZnVuYy5uYW1lO1xuICBpZiAoIW5hbWUpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGBbJHtmdW5jdGlvblR5cGV9XWAsIFwic3BlY2lhbFwiKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGBbJHtmdW5jdGlvblR5cGV9ICR7dHJ1bmNhdGUobmFtZSwgb3B0aW9ucy50cnVuY2F0ZSAtIDExKX1dYCwgXCJzcGVjaWFsXCIpO1xufVxuX19uYW1lKGluc3BlY3RGdW5jdGlvbiwgXCJpbnNwZWN0RnVuY3Rpb25cIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvbWFwLmpzXG5mdW5jdGlvbiBpbnNwZWN0TWFwRW50cnkoW2tleSwgdmFsdWVdLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAga2V5ID0gb3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyk7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0ga2V5Lmxlbmd0aDtcbiAgdmFsdWUgPSBvcHRpb25zLmluc3BlY3QodmFsdWUsIG9wdGlvbnMpO1xuICByZXR1cm4gYCR7a2V5fSA9PiAke3ZhbHVlfWA7XG59XG5fX25hbWUoaW5zcGVjdE1hcEVudHJ5LCBcImluc3BlY3RNYXBFbnRyeVwiKTtcbmZ1bmN0aW9uIG1hcFRvRW50cmllcyhtYXApIHtcbiAgY29uc3QgZW50cmllcyA9IFtdO1xuICBtYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIGVudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5fX25hbWUobWFwVG9FbnRyaWVzLCBcIm1hcFRvRW50cmllc1wiKTtcbmZ1bmN0aW9uIGluc3BlY3RNYXAobWFwLCBvcHRpb25zKSB7XG4gIGlmIChtYXAuc2l6ZSA9PT0gMClcbiAgICByZXR1cm4gXCJNYXB7fVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDc7XG4gIHJldHVybiBgTWFweyAke2luc3BlY3RMaXN0KG1hcFRvRW50cmllcyhtYXApLCBvcHRpb25zLCBpbnNwZWN0TWFwRW50cnkpfSB9YDtcbn1cbl9fbmFtZShpbnNwZWN0TWFwLCBcImluc3BlY3RNYXBcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvbnVtYmVyLmpzXG52YXIgaXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgKChpKSA9PiBpICE9PSBpKTtcbmZ1bmN0aW9uIGluc3BlY3ROdW1iZXIobnVtYmVyLCBvcHRpb25zKSB7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIk5hTlwiLCBcIm51bWJlclwiKTtcbiAgfVxuICBpZiAobnVtYmVyID09PSBJbmZpbml0eSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJJbmZpbml0eVwiLCBcIm51bWJlclwiKTtcbiAgfVxuICBpZiAobnVtYmVyID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiLUluZmluaXR5XCIsIFwibnVtYmVyXCIpO1xuICB9XG4gIGlmIChudW1iZXIgPT09IDApIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKDEgLyBudW1iZXIgPT09IEluZmluaXR5ID8gXCIrMFwiIDogXCItMFwiLCBcIm51bWJlclwiKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKHRydW5jYXRlKFN0cmluZyhudW1iZXIpLCBvcHRpb25zLnRydW5jYXRlKSwgXCJudW1iZXJcIik7XG59XG5fX25hbWUoaW5zcGVjdE51bWJlciwgXCJpbnNwZWN0TnVtYmVyXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2JpZ2ludC5qc1xuZnVuY3Rpb24gaW5zcGVjdEJpZ0ludChudW1iZXIsIG9wdGlvbnMpIHtcbiAgbGV0IG51bXMgPSB0cnVuY2F0ZShudW1iZXIudG9TdHJpbmcoKSwgb3B0aW9ucy50cnVuY2F0ZSAtIDEpO1xuICBpZiAobnVtcyAhPT0gdHJ1bmNhdG9yKVxuICAgIG51bXMgKz0gXCJuXCI7XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUobnVtcywgXCJiaWdpbnRcIik7XG59XG5fX25hbWUoaW5zcGVjdEJpZ0ludCwgXCJpbnNwZWN0QmlnSW50XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3JlZ2V4cC5qc1xuZnVuY3Rpb24gaW5zcGVjdFJlZ0V4cCh2YWx1ZSwgb3B0aW9ucykge1xuICBjb25zdCBmbGFncyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCIvXCIpWzJdO1xuICBjb25zdCBzb3VyY2VMZW5ndGggPSBvcHRpb25zLnRydW5jYXRlIC0gKDIgKyBmbGFncy5sZW5ndGgpO1xuICBjb25zdCBzb3VyY2UgPSB2YWx1ZS5zb3VyY2U7XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYC8ke3RydW5jYXRlKHNvdXJjZSwgc291cmNlTGVuZ3RoKX0vJHtmbGFnc31gLCBcInJlZ2V4cFwiKTtcbn1cbl9fbmFtZShpbnNwZWN0UmVnRXhwLCBcImluc3BlY3RSZWdFeHBcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvc2V0LmpzXG5mdW5jdGlvbiBhcnJheUZyb21TZXQoc2V0Mikge1xuICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgc2V0Mi5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiB2YWx1ZXM7XG59XG5fX25hbWUoYXJyYXlGcm9tU2V0LCBcImFycmF5RnJvbVNldFwiKTtcbmZ1bmN0aW9uIGluc3BlY3RTZXQoc2V0Miwgb3B0aW9ucykge1xuICBpZiAoc2V0Mi5zaXplID09PSAwKVxuICAgIHJldHVybiBcIlNldHt9XCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNztcbiAgcmV0dXJuIGBTZXR7ICR7aW5zcGVjdExpc3QoYXJyYXlGcm9tU2V0KHNldDIpLCBvcHRpb25zKX0gfWA7XG59XG5fX25hbWUoaW5zcGVjdFNldCwgXCJpbnNwZWN0U2V0XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3N0cmluZy5qc1xudmFyIHN0cmluZ0VzY2FwZUNoYXJzID0gbmV3IFJlZ0V4cChcIlsnXFxcXHUwMDAwLVxcXFx1MDAxZlxcXFx1MDA3Zi1cXFxcdTAwOWZcXFxcdTAwYWRcXFxcdTA2MDAtXFxcXHUwNjA0XFxcXHUwNzBmXFxcXHUxN2I0XFxcXHUxN2I1XFxcXHUyMDBjLVxcXFx1MjAwZlxcXFx1MjAyOC1cXFxcdTIwMmZcXFxcdTIwNjAtXFxcXHUyMDZmXFxcXHVmZWZmXFxcXHVmZmYwLVxcXFx1ZmZmZl1cIiwgXCJnXCIpO1xudmFyIGVzY2FwZUNoYXJhY3RlcnMgPSB7XG4gIFwiXFxiXCI6IFwiXFxcXGJcIixcbiAgXCJcdFwiOiBcIlxcXFx0XCIsXG4gIFwiXFxuXCI6IFwiXFxcXG5cIixcbiAgXCJcXGZcIjogXCJcXFxcZlwiLFxuICBcIlxcclwiOiBcIlxcXFxyXCIsXG4gIFwiJ1wiOiBcIlxcXFwnXCIsXG4gIFwiXFxcXFwiOiBcIlxcXFxcXFxcXCJcbn07XG52YXIgaGV4ID0gMTY7XG52YXIgdW5pY29kZUxlbmd0aCA9IDQ7XG5mdW5jdGlvbiBlc2NhcGUoY2hhcikge1xuICByZXR1cm4gZXNjYXBlQ2hhcmFjdGVyc1tjaGFyXSB8fCBgXFxcXHUke2AwMDAwJHtjaGFyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoaGV4KX1gLnNsaWNlKC11bmljb2RlTGVuZ3RoKX1gO1xufVxuX19uYW1lKGVzY2FwZSwgXCJlc2NhcGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0U3RyaW5nKHN0cmluZywgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nRXNjYXBlQ2hhcnMudGVzdChzdHJpbmcpKSB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2Uoc3RyaW5nRXNjYXBlQ2hhcnMsIGVzY2FwZSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgJyR7dHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zLnRydW5jYXRlIC0gMil9J2AsIFwic3RyaW5nXCIpO1xufVxuX19uYW1lKGluc3BlY3RTdHJpbmcsIFwiaW5zcGVjdFN0cmluZ1wiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9zeW1ib2wuanNcbmZ1bmN0aW9uIGluc3BlY3RTeW1ib2wodmFsdWUpIHtcbiAgaWYgKFwiZGVzY3JpcHRpb25cIiBpbiBTeW1ib2wucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmRlc2NyaXB0aW9uID8gYFN5bWJvbCgke3ZhbHVlLmRlc2NyaXB0aW9ufSlgIDogXCJTeW1ib2woKVwiO1xuICB9XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xufVxuX19uYW1lKGluc3BlY3RTeW1ib2wsIFwiaW5zcGVjdFN5bWJvbFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9wcm9taXNlLmpzXG52YXIgZ2V0UHJvbWlzZVZhbHVlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBcIlByb21pc2V7XFx1MjAyNn1cIiwgXCJnZXRQcm9taXNlVmFsdWVcIik7XG52YXIgcHJvbWlzZV9kZWZhdWx0ID0gZ2V0UHJvbWlzZVZhbHVlO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL29iamVjdC5qc1xuZnVuY3Rpb24gaW5zcGVjdE9iamVjdChvYmplY3QsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4gIGNvbnN0IHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpIDogW107XG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCAmJiBzeW1ib2xzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcInt9XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICBvcHRpb25zLnNlZW4gPSBvcHRpb25zLnNlZW4gfHwgW107XG4gIGlmIChvcHRpb25zLnNlZW4uaW5jbHVkZXMob2JqZWN0KSkge1xuICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgfVxuICBvcHRpb25zLnNlZW4ucHVzaChvYmplY3QpO1xuICBjb25zdCBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgb2JqZWN0W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgY29uc3Qgc3ltYm9sQ29udGVudHMgPSBpbnNwZWN0TGlzdChzeW1ib2xzLm1hcCgoa2V5KSA9PiBba2V5LCBvYmplY3Rba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICBvcHRpb25zLnNlZW4ucG9wKCk7XG4gIGxldCBzZXAgPSBcIlwiO1xuICBpZiAocHJvcGVydHlDb250ZW50cyAmJiBzeW1ib2xDb250ZW50cykge1xuICAgIHNlcCA9IFwiLCBcIjtcbiAgfVxuICByZXR1cm4gYHsgJHtwcm9wZXJ0eUNvbnRlbnRzfSR7c2VwfSR7c3ltYm9sQ29udGVudHN9IH1gO1xufVxuX19uYW1lKGluc3BlY3RPYmplY3QsIFwiaW5zcGVjdE9iamVjdFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9jbGFzcy5qc1xudmFyIHRvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBmYWxzZTtcbmZ1bmN0aW9uIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucykge1xuICBsZXQgbmFtZSA9IFwiXCI7XG4gIGlmICh0b1N0cmluZ1RhZyAmJiB0b1N0cmluZ1RhZyBpbiB2YWx1ZSkge1xuICAgIG5hbWUgPSB2YWx1ZVt0b1N0cmluZ1RhZ107XG4gIH1cbiAgbmFtZSA9IG5hbWUgfHwgdmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKCFuYW1lIHx8IG5hbWUgPT09IFwiX2NsYXNzXCIpIHtcbiAgICBuYW1lID0gXCI8QW5vbnltb3VzIENsYXNzPlwiO1xuICB9XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGg7XG4gIHJldHVybiBgJHtuYW1lfSR7aW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyl9YDtcbn1cbl9fbmFtZShpbnNwZWN0Q2xhc3MsIFwiaW5zcGVjdENsYXNzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2FyZ3VtZW50cy5qc1xuZnVuY3Rpb24gaW5zcGVjdEFyZ3VtZW50cyhhcmdzLCBvcHRpb25zKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gXCJBcmd1bWVudHNbXVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDEzO1xuICByZXR1cm4gYEFyZ3VtZW50c1sgJHtpbnNwZWN0TGlzdChhcmdzLCBvcHRpb25zKX0gXWA7XG59XG5fX25hbWUoaW5zcGVjdEFyZ3VtZW50cywgXCJpbnNwZWN0QXJndW1lbnRzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2Vycm9yLmpzXG52YXIgZXJyb3JLZXlzID0gW1xuICBcInN0YWNrXCIsXG4gIFwibGluZVwiLFxuICBcImNvbHVtblwiLFxuICBcIm5hbWVcIixcbiAgXCJtZXNzYWdlXCIsXG4gIFwiZmlsZU5hbWVcIixcbiAgXCJsaW5lTnVtYmVyXCIsXG4gIFwiY29sdW1uTnVtYmVyXCIsXG4gIFwibnVtYmVyXCIsXG4gIFwiZGVzY3JpcHRpb25cIixcbiAgXCJjYXVzZVwiXG5dO1xuZnVuY3Rpb24gaW5zcGVjdE9iamVjdDIoZXJyb3IsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKS5maWx0ZXIoKGtleSkgPT4gZXJyb3JLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpO1xuICBjb25zdCBuYW1lID0gZXJyb3IubmFtZTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aDtcbiAgbGV0IG1lc3NhZ2UgPSBcIlwiO1xuICBpZiAodHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtZXNzYWdlID0gdHJ1bmNhdGUoZXJyb3IubWVzc2FnZSwgb3B0aW9ucy50cnVuY2F0ZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcy51bnNoaWZ0KFwibWVzc2FnZVwiKTtcbiAgfVxuICBtZXNzYWdlID0gbWVzc2FnZSA/IGA6ICR7bWVzc2FnZX1gIDogXCJcIjtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBtZXNzYWdlLmxlbmd0aCArIDU7XG4gIG9wdGlvbnMuc2VlbiA9IG9wdGlvbnMuc2VlbiB8fCBbXTtcbiAgaWYgKG9wdGlvbnMuc2Vlbi5pbmNsdWRlcyhlcnJvcikpIHtcbiAgICByZXR1cm4gXCJbQ2lyY3VsYXJdXCI7XG4gIH1cbiAgb3B0aW9ucy5zZWVuLnB1c2goZXJyb3IpO1xuICBjb25zdCBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgZXJyb3Jba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICByZXR1cm4gYCR7bmFtZX0ke21lc3NhZ2V9JHtwcm9wZXJ0eUNvbnRlbnRzID8gYCB7ICR7cHJvcGVydHlDb250ZW50c30gfWAgOiBcIlwifWA7XG59XG5fX25hbWUoaW5zcGVjdE9iamVjdDIsIFwiaW5zcGVjdE9iamVjdFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9odG1sLmpzXG5mdW5jdGlvbiBpbnNwZWN0QXR0cmlidXRlKFtrZXksIHZhbHVlXSwgb3B0aW9ucykge1xuICBvcHRpb25zLnRydW5jYXRlIC09IDM7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gYCR7b3B0aW9ucy5zdHlsaXplKFN0cmluZyhrZXkpLCBcInllbGxvd1wiKX1gO1xuICB9XG4gIHJldHVybiBgJHtvcHRpb25zLnN0eWxpemUoU3RyaW5nKGtleSksIFwieWVsbG93XCIpfT0ke29wdGlvbnMuc3R5bGl6ZShgXCIke3ZhbHVlfVwiYCwgXCJzdHJpbmdcIil9YDtcbn1cbl9fbmFtZShpbnNwZWN0QXR0cmlidXRlLCBcImluc3BlY3RBdHRyaWJ1dGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0Tm9kZUNvbGxlY3Rpb24oY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICByZXR1cm4gaW5zcGVjdExpc3QoY29sbGVjdGlvbiwgb3B0aW9ucywgaW5zcGVjdE5vZGUsIFwiXFxuXCIpO1xufVxuX19uYW1lKGluc3BlY3ROb2RlQ29sbGVjdGlvbiwgXCJpbnNwZWN0Tm9kZUNvbGxlY3Rpb25cIik7XG5mdW5jdGlvbiBpbnNwZWN0Tm9kZShub2RlLCBvcHRpb25zKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBpbnNwZWN0SFRNTChub2RlLCBvcHRpb25zKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnNwZWN0KG5vZGUuZGF0YSwgb3B0aW9ucyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBvcHRpb25zLmluc3BlY3Qobm9kZSwgb3B0aW9ucyk7XG4gIH1cbn1cbl9fbmFtZShpbnNwZWN0Tm9kZSwgXCJpbnNwZWN0Tm9kZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RIVE1MKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcbiAgY29uc3QgbmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBoZWFkID0gb3B0aW9ucy5zdHlsaXplKGA8JHtuYW1lfWAsIFwic3BlY2lhbFwiKTtcbiAgY29uc3QgaGVhZENsb3NlID0gb3B0aW9ucy5zdHlsaXplKGA+YCwgXCJzcGVjaWFsXCIpO1xuICBjb25zdCB0YWlsID0gb3B0aW9ucy5zdHlsaXplKGA8LyR7bmFtZX0+YCwgXCJzcGVjaWFsXCIpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICogMiArIDU7XG4gIGxldCBwcm9wZXJ0eUNvbnRlbnRzID0gXCJcIjtcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgKz0gXCIgXCI7XG4gICAgcHJvcGVydHlDb250ZW50cyArPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpXSksIG9wdGlvbnMsIGluc3BlY3RBdHRyaWJ1dGUsIFwiIFwiKTtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IHByb3BlcnR5Q29udGVudHMubGVuZ3RoO1xuICBjb25zdCB0cnVuY2F0ZTIgPSBvcHRpb25zLnRydW5jYXRlO1xuICBsZXQgY2hpbGRyZW4gPSBpbnNwZWN0Tm9kZUNvbGxlY3Rpb24oZWxlbWVudC5jaGlsZHJlbiwgb3B0aW9ucyk7XG4gIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiB0cnVuY2F0ZTIpIHtcbiAgICBjaGlsZHJlbiA9IGAke3RydW5jYXRvcn0oJHtlbGVtZW50LmNoaWxkcmVuLmxlbmd0aH0pYDtcbiAgfVxuICByZXR1cm4gYCR7aGVhZH0ke3Byb3BlcnR5Q29udGVudHN9JHtoZWFkQ2xvc2V9JHtjaGlsZHJlbn0ke3RhaWx9YDtcbn1cbl9fbmFtZShpbnNwZWN0SFRNTCwgXCJpbnNwZWN0SFRNTFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9pbmRleC5qc1xudmFyIHN5bWJvbHNTdXBwb3J0ZWQgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09IFwiZnVuY3Rpb25cIjtcbnZhciBjaGFpSW5zcGVjdCA9IHN5bWJvbHNTdXBwb3J0ZWQgPyAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcihcImNoYWkvaW5zcGVjdFwiKSA6IFwiQEBjaGFpL2luc3BlY3RcIjtcbnZhciBub2RlSW5zcGVjdCA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b21cIik7XG52YXIgY29uc3RydWN0b3JNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBzdHJpbmdUYWdNYXAgPSB7fTtcbnZhciBiYXNlVHlwZXNNYXAgPSB7XG4gIHVuZGVmaW5lZDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcInVuZGVmaW5lZFwiLCBcInVuZGVmaW5lZFwiKSwgXCJ1bmRlZmluZWRcIiksXG4gIG51bGw6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJudWxsXCIsIFwibnVsbFwiKSwgXCJudWxsXCIpLFxuICBib29sZWFuOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIFwiYm9vbGVhblwiKSwgXCJib29sZWFuXCIpLFxuICBCb29sZWFuOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIFwiYm9vbGVhblwiKSwgXCJCb29sZWFuXCIpLFxuICBudW1iZXI6IGluc3BlY3ROdW1iZXIsXG4gIE51bWJlcjogaW5zcGVjdE51bWJlcixcbiAgYmlnaW50OiBpbnNwZWN0QmlnSW50LFxuICBCaWdJbnQ6IGluc3BlY3RCaWdJbnQsXG4gIHN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgU3RyaW5nOiBpbnNwZWN0U3RyaW5nLFxuICBmdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICBGdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICBzeW1ib2w6IGluc3BlY3RTeW1ib2wsXG4gIC8vIEEgU3ltYm9sIHBvbHlmaWxsIHdpbGwgcmV0dXJuIGBTeW1ib2xgIG5vdCBgc3ltYm9sYCBmcm9tIHR5cGVkZXRlY3RcbiAgU3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICBBcnJheTogaW5zcGVjdEFycmF5LFxuICBEYXRlOiBpbnNwZWN0RGF0ZSxcbiAgTWFwOiBpbnNwZWN0TWFwLFxuICBTZXQ6IGluc3BlY3RTZXQsXG4gIFJlZ0V4cDogaW5zcGVjdFJlZ0V4cCxcbiAgUHJvbWlzZTogcHJvbWlzZV9kZWZhdWx0LFxuICAvLyBXZWFrU2V0LCBXZWFrTWFwIGFyZSB0b3RhbGx5IG9wYXF1ZSB0byB1c1xuICBXZWFrU2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwiV2Vha1NldHtcXHUyMDI2fVwiLCBcInNwZWNpYWxcIiksIFwiV2Vha1NldFwiKSxcbiAgV2Vha01hcDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcIldlYWtNYXB7XFx1MjAyNn1cIiwgXCJzcGVjaWFsXCIpLCBcIldlYWtNYXBcIiksXG4gIEFyZ3VtZW50czogaW5zcGVjdEFyZ3VtZW50cyxcbiAgSW50OEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDhBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQ4Q2xhbXBlZEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgSW50MTZBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgSW50MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgRmxvYXQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgRmxvYXQ2NEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgR2VuZXJhdG9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IFwiXCIsIFwiR2VuZXJhdG9yXCIpLFxuICBEYXRhVmlldzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBcIlwiLCBcIkRhdGFWaWV3XCIpLFxuICBBcnJheUJ1ZmZlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBcIlwiLCBcIkFycmF5QnVmZmVyXCIpLFxuICBFcnJvcjogaW5zcGVjdE9iamVjdDIsXG4gIEhUTUxDb2xsZWN0aW9uOiBpbnNwZWN0Tm9kZUNvbGxlY3Rpb24sXG4gIE5vZGVMaXN0OiBpbnNwZWN0Tm9kZUNvbGxlY3Rpb25cbn07XG52YXIgaW5zcGVjdEN1c3RvbSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBvcHRpb25zLCB0eXBlMywgaW5zcGVjdEZuKSA9PiB7XG4gIGlmIChjaGFpSW5zcGVjdCBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbY2hhaUluc3BlY3RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWVbY2hhaUluc3BlY3RdKG9wdGlvbnMpO1xuICB9XG4gIGlmIChub2RlSW5zcGVjdCBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbbm9kZUluc3BlY3RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWVbbm9kZUluc3BlY3RdKG9wdGlvbnMuZGVwdGgsIG9wdGlvbnMsIGluc3BlY3RGbik7XG4gIH1cbiAgaWYgKFwiaW5zcGVjdFwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5pbnNwZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5zcGVjdChvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoXCJjb25zdHJ1Y3RvclwiIGluIHZhbHVlICYmIGNvbnN0cnVjdG9yTWFwLmhhcyh2YWx1ZS5jb25zdHJ1Y3RvcikpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3JNYXAuZ2V0KHZhbHVlLmNvbnN0cnVjdG9yKSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHN0cmluZ1RhZ01hcFt0eXBlM10pIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59LCBcImluc3BlY3RDdXN0b21cIik7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBub3JtYWxpc2VPcHRpb25zKG9wdHMsIGluc3BlY3QpO1xuICBjb25zdCB7IGN1c3RvbUluc3BlY3QgfSA9IG9wdGlvbnM7XG4gIGxldCB0eXBlMyA9IHZhbHVlID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlMyA9PT0gXCJvYmplY3RcIikge1xuICAgIHR5cGUzID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpO1xuICB9XG4gIGlmICh0eXBlMyBpbiBiYXNlVHlwZXNNYXApIHtcbiAgICByZXR1cm4gYmFzZVR5cGVzTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGN1c3RvbUluc3BlY3QgJiYgdmFsdWUpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBpbnNwZWN0Q3VzdG9tKHZhbHVlLCBvcHRpb25zLCB0eXBlMywgaW5zcGVjdCk7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICByZXR1cm4gaW5zcGVjdChvdXRwdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjb25zdCBwcm90byA9IHZhbHVlID8gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA6IGZhbHNlO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gaW5zcGVjdEhUTUwodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChcImNvbnN0cnVjdG9yXCIgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWUuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgcmV0dXJuIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAodmFsdWUgPT09IE9iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCB0eXBlMyk7XG59XG5fX25hbWUoaW5zcGVjdCwgXCJpbnNwZWN0XCIpO1xuXG4vLyBsaWIvY2hhaS9jb25maWcuanNcbnZhciBjb25maWcgPSB7XG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmluY2x1ZGVTdGFja1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIHN0YWNrIHRyYWNlXG4gICAqIGlzIGluY2x1ZGVkIGluIEFzc2VydGlvbiBlcnJvciBtZXNzYWdlLiBEZWZhdWx0IG9mIGZhbHNlXG4gICAqIHN1cHByZXNzZXMgc3RhY2sgdHJhY2UgaW4gdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgPSB0cnVlOyAgLy8gZW5hYmxlIHN0YWNrIG9uIGVycm9yXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgaW5jbHVkZVN0YWNrOiBmYWxzZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcuc2hvd0RpZmZcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBvciBub3RcbiAgICogdGhlIGBzaG93RGlmZmAgZmxhZyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHRocm93blxuICAgKiBBc3NlcnRpb25FcnJvcnMuIGBmYWxzZWAgd2lsbCBhbHdheXMgYmUgYGZhbHNlYDsgYHRydWVgXG4gICAqIHdpbGwgYmUgdHJ1ZSB3aGVuIHRoZSBhc3NlcnRpb24gaGFzIHJlcXVlc3RlZCBhIGRpZmZcbiAgICogYmUgc2hvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgc2hvd0RpZmY6IHRydWUsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnRydW5jYXRlVGhyZXNob2xkXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBzZXRzIGxlbmd0aCB0aHJlc2hvbGQgZm9yIGFjdHVhbCBhbmRcbiAgICogZXhwZWN0ZWQgdmFsdWVzIGluIGFzc2VydGlvbiBlcnJvcnMuIElmIHRoaXMgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCBmb3JcbiAgICogZXhhbXBsZSBmb3IgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgdmFsdWUgaXMgcmVwbGFjZWQgd2l0aCBzb21ldGhpbmdcbiAgICogbGlrZSBgWyBBcnJheSgzKSBdYCBvciBgeyBPYmplY3QgKHByb3AxLCBwcm9wMikgfWAuXG4gICAqXG4gICAqIFNldCBpdCB0byB6ZXJvIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgdHJ1bmNhdGluZyBhbHRvZ2V0aGVyLlxuICAgKlxuICAgKiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlcmZ1bCB3aGVuIGRvaW5nIGFzc2VydGlvbnMgb24gYXJyYXlzOiBoYXZpbmcgdGhpc1xuICAgKiBzZXQgdG8gYSByZWFzb25hYmxlIGxhcmdlIHZhbHVlIG1ha2VzIHRoZSBmYWlsdXJlIG1lc3NhZ2VzIHJlYWRpbHlcbiAgICogaW5zcGVjdGFibGUuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA9IDA7ICAvLyBkaXNhYmxlIHRydW5jYXRpbmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHRydW5jYXRlVGhyZXNob2xkOiA0MCxcbiAgLyoqXG4gICAqICMjIyBjb25maWcudXNlUHJveHlcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgaWYgY2hhaSB3aWxsIHVzZSBhIFByb3h5IHRvIHRocm93XG4gICAqIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnQgcHJvcGVydHkgaXMgcmVhZCwgd2hpY2ggcHJvdGVjdHMgdXNlcnNcbiAgICogZnJvbSB0eXBvcyB3aGVuIHVzaW5nIHByb3BlcnR5LWJhc2VkIGFzc2VydGlvbnMuXG4gICAqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnVzZVByb3h5ID0gZmFsc2U7ICAvLyBkaXNhYmxlIHVzZSBvZiBQcm94eVxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlnIHZhbHVlXG4gICAqIGluIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgcHJveGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufVxuICAgKiBAcHVibGljXG4gICAqL1xuICB1c2VQcm94eTogdHJ1ZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcucHJveHlFeGNsdWRlZEtleXNcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgd2hpY2ggcHJvcGVydGllcyBzaG91bGQgYmUgaWdub3JlZFxuICAgKiBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZSBhc3NlcnRpb24uXG4gICAqIFRoaXMgaXMgb25seSBhcHBsaWVkIGlmIHRoZSBlbnZpcm9ubWVudCBDaGFpIGlzIHJ1bm5pbmcgaW4gc3VwcG9ydHMgcHJveGllcyBhbmRcbiAgICogaWYgdGhlIGB1c2VQcm94eWAgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGVuYWJsZWQuXG4gICAqIEJ5IGRlZmF1bHQsIGB0aGVuYCBhbmQgYGluc3BlY3RgIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZVxuICAgKiBhc3NlcnRpb24gb2JqZWN0IGJlY2F1c2UgdGhlIGAuaW5zcGVjdGAgcHJvcGVydHkgaXMgcmVhZCBieSBgdXRpbC5pbnNwZWN0YCAoZm9yIGV4YW1wbGUsIHdoZW5cbiAgICogdXNpbmcgYGNvbnNvbGUubG9nYCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdCkgYW5kIGAudGhlbmAgaXMgbmVjZXNzYXJ5IGZvciBwcm9taXNlIHR5cGUtY2hlY2tpbmcuXG4gICAqXG4gICAqICAgICAvLyBCeSBkZWZhdWx0IHRoZXNlIGtleXMgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbiBvYmplY3RcbiAgICogICAgIGNoYWkuY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzID0gWyd0aGVuJywgJ2luc3BlY3QnXTtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHJveHlFeGNsdWRlZEtleXM6IFtcInRoZW5cIiwgXCJjYXRjaFwiLCBcImluc3BlY3RcIiwgXCJ0b0pTT05cIl0sXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmRlZXBFcXVhbFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBhIGN1c3RvbSBmdW5jdGlvbiB0byB1c2UgZm9yIGRlZXBFcXVhbFxuICAgKiBjb21wYXJpc29ucy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGZ1bmN0aW9uIHVzZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBgZGVlcC1lcWxgIHBhY2thZ2Ugd2l0aG91dCBjdXN0b20gY29tcGFyYXRvci5cbiAgICpcbiAgICogICAgIC8vIHVzZSBhIGN1c3RvbSBjb21wYXJhdG9yXG4gICAqICAgICBjaGFpLmNvbmZpZy5kZWVwRXF1YWwgPSAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICAgKiAgICAgICAgIHJldHVybiBjaGFpLnV0aWwuZXFsKGV4cGVjdGVkLCBhY3R1YWwsIHtcbiAgICogICAgICAgICAgICAgY29tcGFyYXRvcjogKGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICogICAgICAgICAgICAgICAgIC8vIGZvciBub24gbnVtYmVyIGNvbXBhcmlzb24sIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgKiAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGV4cGVjdGVkICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gICAqICAgICAgICAgICAgICAgICAvLyBhbGxvdyBhIGRpZmZlcmVuY2Ugb2YgMTAgYmV0d2VlbiBjb21wYXJlZCBudW1iZXJzXG4gICAqICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFjdHVhbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgMTBcbiAgICogICAgICAgICAgICAgfVxuICAgKiAgICAgICAgIH0pXG4gICAqICAgICB9O1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICAgKiBAcHVibGljXG4gICAqL1xuICBkZWVwRXF1YWw6IG51bGxcbn07XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luc3BlY3QuanNcbmZ1bmN0aW9uIGluc3BlY3QyKG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycykge1xuICBsZXQgb3B0aW9ucyA9IHtcbiAgICBjb2xvcnMsXG4gICAgZGVwdGg6IHR5cGVvZiBkZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IDIgOiBkZXB0aCxcbiAgICBzaG93SGlkZGVuLFxuICAgIHRydW5jYXRlOiBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPyBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgOiBJbmZpbml0eVxuICB9O1xuICByZXR1cm4gaW5zcGVjdChvYmosIG9wdGlvbnMpO1xufVxuX19uYW1lKGluc3BlY3QyLCBcImluc3BlY3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL29iakRpc3BsYXkuanNcbmZ1bmN0aW9uIG9iakRpc3BsYXkob2JqKSB7XG4gIGxldCBzdHIgPSBpbnNwZWN0MihvYmopLCB0eXBlMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xuICBpZiAoY29uZmlnLnRydW5jYXRlVGhyZXNob2xkICYmIHN0ci5sZW5ndGggPj0gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkKSB7XG4gICAgaWYgKHR5cGUzID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCIpIHtcbiAgICAgIHJldHVybiAhb2JqLm5hbWUgfHwgb2JqLm5hbWUgPT09IFwiXCIgPyBcIltGdW5jdGlvbl1cIiA6IFwiW0Z1bmN0aW9uOiBcIiArIG9iai5uYW1lICsgXCJdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG4gICAgICByZXR1cm4gXCJbIEFycmF5KFwiICsgb2JqLmxlbmd0aCArIFwiKSBdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIikge1xuICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopLCBrc3RyID0ga2V5cy5sZW5ndGggPiAyID8ga2V5cy5zcGxpY2UoMCwgMikuam9pbihcIiwgXCIpICsgXCIsIC4uLlwiIDoga2V5cy5qb2luKFwiLCBcIik7XG4gICAgICByZXR1cm4gXCJ7IE9iamVjdCAoXCIgKyBrc3RyICsgXCIpIH1cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuX19uYW1lKG9iakRpc3BsYXksIFwib2JqRGlzcGxheVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0TWVzc2FnZS5qc1xuZnVuY3Rpb24gZ2V0TWVzc2FnZTIob2JqLCBhcmdzKSB7XG4gIGxldCBuZWdhdGUgPSBmbGFnKG9iaiwgXCJuZWdhdGVcIik7XG4gIGxldCB2YWwgPSBmbGFnKG9iaiwgXCJvYmplY3RcIik7XG4gIGxldCBleHBlY3RlZCA9IGFyZ3NbM107XG4gIGxldCBhY3R1YWwgPSBnZXRBY3R1YWwob2JqLCBhcmdzKTtcbiAgbGV0IG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdO1xuICBsZXQgZmxhZ01zZyA9IGZsYWcob2JqLCBcIm1lc3NhZ2VcIik7XG4gIGlmICh0eXBlb2YgbXNnID09PSBcImZ1bmN0aW9uXCIpIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgXCJcIjtcbiAgbXNnID0gbXNnLnJlcGxhY2UoLyNcXHt0aGlzXFx9L2csIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvYmpEaXNwbGF5KHZhbCk7XG4gIH0pLnJlcGxhY2UoLyNcXHthY3RcXH0vZywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9iakRpc3BsYXkoYWN0dWFsKTtcbiAgfSkucmVwbGFjZSgvI1xce2V4cFxcfS9nLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb2JqRGlzcGxheShleHBlY3RlZCk7XG4gIH0pO1xuICByZXR1cm4gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgKyBtc2cgOiBtc2c7XG59XG5fX25hbWUoZ2V0TWVzc2FnZTIsIFwiZ2V0TWVzc2FnZVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qc1xuZnVuY3Rpb24gdHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG9iamVjdCwgaW5jbHVkZUFsbCkge1xuICBsZXQgZmxhZ3MgPSBhc3NlcnRpb24uX19mbGFncyB8fCAoYXNzZXJ0aW9uLl9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmICghb2JqZWN0Ll9fZmxhZ3MpIHtcbiAgICBvYmplY3QuX19mbGFncyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG4gIGluY2x1ZGVBbGwgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gaW5jbHVkZUFsbCA6IHRydWU7XG4gIGZvciAobGV0IGZsYWczIGluIGZsYWdzKSB7XG4gICAgaWYgKGluY2x1ZGVBbGwgfHwgZmxhZzMgIT09IFwib2JqZWN0XCIgJiYgZmxhZzMgIT09IFwic3NmaVwiICYmIGZsYWczICE9PSBcImxvY2tTc2ZpXCIgJiYgZmxhZzMgIT0gXCJtZXNzYWdlXCIpIHtcbiAgICAgIG9iamVjdC5fX2ZsYWdzW2ZsYWczXSA9IGZsYWdzW2ZsYWczXTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZSh0cmFuc2ZlckZsYWdzLCBcInRyYW5zZmVyRmxhZ3NcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9kZWVwLWVxbC9pbmRleC5qc1xuZnVuY3Rpb24gdHlwZTIob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIm51bGxcIjtcbiAgfVxuICBjb25zdCBzdHJpbmdUYWcgPSBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG4gIGNvbnN0IHNsaWNlU3RhcnQgPSA4O1xuICBjb25zdCBzbGljZUVuZCA9IC0xO1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VFbmQpO1xufVxuX19uYW1lKHR5cGUyLCBcInR5cGVcIik7XG5mdW5jdGlvbiBGYWtlTWFwKCkge1xuICB0aGlzLl9rZXkgPSBcImNoYWkvZGVlcC1lcWxfX1wiICsgTWF0aC5yYW5kb20oKSArIERhdGUubm93KCk7XG59XG5fX25hbWUoRmFrZU1hcCwgXCJGYWtlTWFwXCIpO1xuRmFrZU1hcC5wcm90b3R5cGUgPSB7XG4gIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIGtleVt0aGlzLl9rZXldO1xuICB9LCBcImdldFwiKSxcbiAgc2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5fa2V5LCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgXCJzZXRcIilcbn07XG52YXIgTWVtb2l6ZU1hcCA9IHR5cGVvZiBXZWFrTWFwID09PSBcImZ1bmN0aW9uXCIgPyBXZWFrTWFwIDogRmFrZU1hcDtcbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbWVtb2l6ZU1hcCkge1xuICBpZiAoIW1lbW9pemVNYXAgfHwgaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIHZhciByZXN1bHQgPSBsZWZ0SGFuZE1hcC5nZXQocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShtZW1vaXplQ29tcGFyZSwgXCJtZW1vaXplQ29tcGFyZVwiKTtcbmZ1bmN0aW9uIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBtZW1vaXplTWFwLCByZXN1bHQpIHtcbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGxlZnRIYW5kTWFwID0gbWVtb2l6ZU1hcC5nZXQobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kTWFwKSB7XG4gICAgbGVmdEhhbmRNYXAuc2V0KHJpZ2h0SGFuZE9wZXJhbmQsIHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdEhhbmRNYXAgPSBuZXcgTWVtb2l6ZU1hcCgpO1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICAgIG1lbW9pemVNYXAuc2V0KGxlZnRIYW5kT3BlcmFuZCwgbGVmdEhhbmRNYXApO1xuICB9XG59XG5fX25hbWUobWVtb2l6ZVNldCwgXCJtZW1vaXplU2V0XCIpO1xudmFyIGRlZXBfZXFsX2RlZmF1bHQgPSBkZWVwRXF1YWw7XG5mdW5jdGlvbiBkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxuICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xufVxuX19uYW1lKGRlZXBFcXVhbCwgXCJkZWVwRXF1YWxcIik7XG5mdW5jdGlvbiBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCA9PT0gcmlnaHRIYW5kT3BlcmFuZCkge1xuICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQgIT09IDAgfHwgMSAvIGxlZnRIYW5kT3BlcmFuZCA9PT0gMSAvIHJpZ2h0SGFuZE9wZXJhbmQ7XG4gIH1cbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCAhPT0gbGVmdEhhbmRPcGVyYW5kICYmIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJpZ2h0SGFuZE9wZXJhbmQgIT09IHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShzaW1wbGVFcXVhbCwgXCJzaW1wbGVFcXVhbFwiKTtcbmZ1bmN0aW9uIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMubWVtb2l6ZSA9IG9wdGlvbnMubWVtb2l6ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IG9wdGlvbnMubWVtb2l6ZSB8fCBuZXcgTWVtb2l6ZU1hcCgpO1xuICB2YXIgY29tcGFyYXRvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wYXJhdG9yO1xuICB2YXIgbWVtb2l6ZVJlc3VsdExlZnQgPSBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSk7XG4gIGlmIChtZW1vaXplUmVzdWx0TGVmdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0TGVmdDtcbiAgfVxuICB2YXIgbWVtb2l6ZVJlc3VsdFJpZ2h0ID0gbWVtb2l6ZUNvbXBhcmUocmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdFJpZ2h0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lbW9pemVSZXN1bHRSaWdodDtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIHZhciBjb21wYXJhdG9yUmVzdWx0ID0gY29tcGFyYXRvcihsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmIChjb21wYXJhdG9yUmVzdWx0ID09PSBmYWxzZSB8fCBjb21wYXJhdG9yUmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBjb21wYXJhdG9yUmVzdWx0KTtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yUmVzdWx0O1xuICAgIH1cbiAgICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAoc2ltcGxlUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc2ltcGxlUmVzdWx0O1xuICAgIH1cbiAgfVxuICB2YXIgbGVmdEhhbmRUeXBlID0gdHlwZTIobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kVHlwZSAhPT0gdHlwZTIocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHRydWUpO1xuICB2YXIgcmVzdWx0ID0gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKTtcbiAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShleHRlbnNpdmVEZWVwRXF1YWwsIFwiZXh0ZW5zaXZlRGVlcEVxdWFsXCIpO1xuZnVuY3Rpb24gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKSB7XG4gIHN3aXRjaCAobGVmdEhhbmRUeXBlKSB7XG4gICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgIGNhc2UgXCJOdW1iZXJcIjpcbiAgICBjYXNlIFwiQm9vbGVhblwiOlxuICAgIGNhc2UgXCJEYXRlXCI6XG4gICAgICByZXR1cm4gZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZC52YWx1ZU9mKCksIHJpZ2h0SGFuZE9wZXJhbmQudmFsdWVPZigpKTtcbiAgICBjYXNlIFwiUHJvbWlzZVwiOlxuICAgIGNhc2UgXCJTeW1ib2xcIjpcbiAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICBjYXNlIFwiV2Vha01hcFwiOlxuICAgIGNhc2UgXCJXZWFrU2V0XCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kO1xuICAgIGNhc2UgXCJFcnJvclwiOlxuICAgICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIFtcIm5hbWVcIiwgXCJtZXNzYWdlXCIsIFwiY29kZVwiXSwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIkFyZ3VtZW50c1wiOlxuICAgIGNhc2UgXCJJbnQ4QXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgIGNhc2UgXCJVaW50OENsYW1wZWRBcnJheVwiOlxuICAgIGNhc2UgXCJJbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIkludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiRmxvYXQzMkFycmF5XCI6XG4gICAgY2FzZSBcIkZsb2F0NjRBcnJheVwiOlxuICAgIGNhc2UgXCJBcnJheVwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiUmVnRXhwXCI6XG4gICAgICByZXR1cm4gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBjYXNlIFwiR2VuZXJhdG9yXCI6XG4gICAgICByZXR1cm4gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiRGF0YVZpZXdcIjpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKG5ldyBVaW50OEFycmF5KGxlZnRIYW5kT3BlcmFuZC5idWZmZXIpLCBuZXcgVWludDhBcnJheShyaWdodEhhbmRPcGVyYW5kLmJ1ZmZlciksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJBcnJheUJ1ZmZlclwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgIHJldHVybiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiTWFwXCI6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluRGF0ZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpblRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5EYXRlVGltZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5JbnN0YW50XCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlpvbmVkRGF0ZVRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5ZZWFyTW9udGhcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5Nb250aERheVwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC5lcXVhbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLkR1cmF0aW9uXCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvdGFsKFwibmFub3NlY29uZHNcIikgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG90YWwoXCJuYW5vc2Vjb25kc1wiKTtcbiAgICBjYXNlIFwiVGVtcG9yYWwuVGltZVpvbmVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuQ2FsZW5kYXJcIjpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG9TdHJpbmcoKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b1N0cmluZygpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb2JqZWN0RXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxufVxuX19uYW1lKGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZSwgXCJleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGVcIik7XG5mdW5jdGlvbiByZWdleHBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b1N0cmluZygpID09PSByaWdodEhhbmRPcGVyYW5kLnRvU3RyaW5nKCk7XG59XG5fX25hbWUocmVnZXhwRXF1YWwsIFwicmVnZXhwRXF1YWxcIik7XG5mdW5jdGlvbiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplICE9PSByaWdodEhhbmRPcGVyYW5kLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNpemVFcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGVmdEhhbmRJdGVtcyA9IFtdO1xuICB2YXIgcmlnaHRIYW5kSXRlbXMgPSBbXTtcbiAgbGVmdEhhbmRPcGVyYW5kLmZvckVhY2goLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnYXRoZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICBsZWZ0SGFuZEl0ZW1zLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSwgXCJnYXRoZXJFbnRyaWVzXCIpKTtcbiAgcmlnaHRIYW5kT3BlcmFuZC5mb3JFYWNoKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgcmlnaHRIYW5kSXRlbXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LCBcImdhdGhlckVudHJpZXNcIikpO1xuICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZEl0ZW1zLnNvcnQoKSwgcmlnaHRIYW5kSXRlbXMuc29ydCgpLCBvcHRpb25zKTtcbn1cbl9fbmFtZShlbnRyaWVzRXF1YWwsIFwiZW50cmllc0VxdWFsXCIpO1xuZnVuY3Rpb24gaXRlcmFibGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGxlZnRIYW5kT3BlcmFuZC5sZW5ndGg7XG4gIGlmIChsZW5ndGggIT09IHJpZ2h0SGFuZE9wZXJhbmQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChsZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZFtpbmRleF0sIHJpZ2h0SGFuZE9wZXJhbmRbaW5kZXhdLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoaXRlcmFibGVFcXVhbCwgXCJpdGVyYWJsZUVxdWFsXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHJldHVybiBpdGVyYWJsZUVxdWFsKGdldEdlbmVyYXRvckVudHJpZXMobGVmdEhhbmRPcGVyYW5kKSwgZ2V0R2VuZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKSwgb3B0aW9ucyk7XG59XG5fX25hbWUoZ2VuZXJhdG9yRXF1YWwsIFwiZ2VuZXJhdG9yRXF1YWxcIik7XG5mdW5jdGlvbiBoYXNJdGVyYXRvckZ1bmN0aW9uKHRhcmdldCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG59XG5fX25hbWUoaGFzSXRlcmF0b3JGdW5jdGlvbiwgXCJoYXNJdGVyYXRvckZ1bmN0aW9uXCIpO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JFbnRyaWVzKHRhcmdldCkge1xuICBpZiAoaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBnZXRHZW5lcmF0b3JFbnRyaWVzKHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdKCkpO1xuICAgIH0gY2F0Y2ggKGl0ZXJhdG9yRXJyb3IpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuX19uYW1lKGdldEl0ZXJhdG9yRW50cmllcywgXCJnZXRJdGVyYXRvckVudHJpZXNcIik7XG5mdW5jdGlvbiBnZXRHZW5lcmF0b3JFbnRyaWVzKGdlbmVyYXRvcikge1xuICB2YXIgZ2VuZXJhdG9yUmVzdWx0ID0gZ2VuZXJhdG9yLm5leHQoKTtcbiAgdmFyIGFjY3VtdWxhdG9yID0gW2dlbmVyYXRvclJlc3VsdC52YWx1ZV07XG4gIHdoaWxlIChnZW5lcmF0b3JSZXN1bHQuZG9uZSA9PT0gZmFsc2UpIHtcbiAgICBnZW5lcmF0b3JSZXN1bHQgPSBnZW5lcmF0b3IubmV4dCgpO1xuICAgIGFjY3VtdWxhdG9yLnB1c2goZ2VuZXJhdG9yUmVzdWx0LnZhbHVlKTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5fX25hbWUoZ2V0R2VuZXJhdG9yRW50cmllcywgXCJnZXRHZW5lcmF0b3JFbnRyaWVzXCIpO1xuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZUtleXModGFyZ2V0KSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlS2V5cywgXCJnZXRFbnVtZXJhYmxlS2V5c1wiKTtcbmZ1bmN0aW9uIGdldEVudW1lcmFibGVTeW1ib2xzKHRhcmdldCkge1xuICB2YXIga2V5cyA9IFtdO1xuICB2YXIgYWxsS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGtleSA9IGFsbEtleXNbaV07XG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpLmVudW1lcmFibGUpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlU3ltYm9scywgXCJnZXRFbnVtZXJhYmxlU3ltYm9sc1wiKTtcbmZ1bmN0aW9uIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kW2tleXNbaV1dLCByaWdodEhhbmRPcGVyYW5kW2tleXNbaV1dLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoa2V5c0VxdWFsLCBcImtleXNFcXVhbFwiKTtcbmZ1bmN0aW9uIG9iamVjdEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB2YXIgbGVmdEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZEtleXMgPSBnZXRFbnVtZXJhYmxlS2V5cyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgdmFyIGxlZnRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRTeW1ib2xzID0gZ2V0RW51bWVyYWJsZVN5bWJvbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIGxlZnRIYW5kS2V5cyA9IGxlZnRIYW5kS2V5cy5jb25jYXQobGVmdEhhbmRTeW1ib2xzKTtcbiAgcmlnaHRIYW5kS2V5cyA9IHJpZ2h0SGFuZEtleXMuY29uY2F0KHJpZ2h0SGFuZFN5bWJvbHMpO1xuICBpZiAobGVmdEhhbmRLZXlzLmxlbmd0aCAmJiBsZWZ0SGFuZEtleXMubGVuZ3RoID09PSByaWdodEhhbmRLZXlzLmxlbmd0aCkge1xuICAgIGlmIChpdGVyYWJsZUVxdWFsKG1hcFN5bWJvbHMobGVmdEhhbmRLZXlzKS5zb3J0KCksIG1hcFN5bWJvbHMocmlnaHRIYW5kS2V5cykuc29ydCgpKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kS2V5cywgb3B0aW9ucyk7XG4gIH1cbiAgdmFyIGxlZnRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kRW50cmllcy5sZW5ndGggJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gcmlnaHRIYW5kRW50cmllcy5sZW5ndGgpIHtcbiAgICBsZWZ0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJpZ2h0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kRW50cmllcywgcmlnaHRIYW5kRW50cmllcywgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGxlZnRIYW5kS2V5cy5sZW5ndGggPT09IDAgJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRLZXlzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShvYmplY3RFcXVhbCwgXCJvYmplY3RFcXVhbFwiKTtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCI7XG59XG5fX25hbWUoaXNQcmltaXRpdmUsIFwiaXNQcmltaXRpdmVcIik7XG5mdW5jdGlvbiBtYXBTeW1ib2xzKGFycikge1xuICByZXR1cm4gYXJyLm1hcCgvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG1hcFN5bWJvbChlbnRyeSkge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgIHJldHVybiBlbnRyeS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0sIFwibWFwU3ltYm9sXCIpKTtcbn1cbl9fbmFtZShtYXBTeW1ib2xzLCBcIm1hcFN5bWJvbHNcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9wYXRodmFsL2luZGV4LmpzXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgfHwgb2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBuYW1lIGluIE9iamVjdChvYmopO1xufVxuX19uYW1lKGhhc1Byb3BlcnR5LCBcImhhc1Byb3BlcnR5XCIpO1xuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgY29uc3Qgc3RyID0gcGF0aC5yZXBsYWNlKC8oW15cXFxcXSlcXFsvZywgXCIkMS5bXCIpO1xuICBjb25zdCBwYXJ0cyA9IHN0ci5tYXRjaCgvKFxcXFxcXC58W14uXSs/KSsvZyk7XG4gIHJldHVybiBwYXJ0cy5tYXAoKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBcImNvbnN0cnVjdG9yXCIgfHwgdmFsdWUgPT09IFwiX19wcm90b19fXCIgfHwgdmFsdWUgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcmVnZXhwID0gL15cXFsoXFxkKylcXF0kLztcbiAgICBjb25zdCBtQXJyID0gcmVnZXhwLmV4ZWModmFsdWUpO1xuICAgIGxldCBwYXJzZWQgPSBudWxsO1xuICAgIGlmIChtQXJyKSB7XG4gICAgICBwYXJzZWQgPSB7IGk6IHBhcnNlRmxvYXQobUFyclsxXSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0geyBwOiB2YWx1ZS5yZXBsYWNlKC9cXFxcKFsuW1xcXV0pL2csIFwiJDFcIikgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSk7XG59XG5fX25hbWUocGFyc2VQYXRoLCBcInBhcnNlUGF0aFwiKTtcbmZ1bmN0aW9uIGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkLCBwYXRoRGVwdGgpIHtcbiAgbGV0IHRlbXBvcmFyeVZhbHVlID0gb2JqO1xuICBsZXQgcmVzID0gbnVsbDtcbiAgcGF0aERlcHRoID0gdHlwZW9mIHBhdGhEZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IHBhcnNlZC5sZW5ndGggOiBwYXRoRGVwdGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aERlcHRoOyBpKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFyc2VkW2ldO1xuICAgIGlmICh0ZW1wb3JhcnlWYWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0LnAgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LmldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LnBdO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IHBhdGhEZXB0aCAtIDEpIHtcbiAgICAgICAgcmVzID0gdGVtcG9yYXJ5VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5fX25hbWUoaW50ZXJuYWxHZXRQYXRoVmFsdWUsIFwiaW50ZXJuYWxHZXRQYXRoVmFsdWVcIik7XG5mdW5jdGlvbiBnZXRQYXRoSW5mbyhvYmosIHBhdGgpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VQYXRoKHBhdGgpO1xuICBjb25zdCBsYXN0ID0gcGFyc2VkW3BhcnNlZC5sZW5ndGggLSAxXTtcbiAgY29uc3QgaW5mbyA9IHtcbiAgICBwYXJlbnQ6IHBhcnNlZC5sZW5ndGggPiAxID8gaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhcnNlZC5sZW5ndGggLSAxKSA6IG9iaixcbiAgICBuYW1lOiBsYXN0LnAgfHwgbGFzdC5pLFxuICAgIHZhbHVlOiBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZClcbiAgfTtcbiAgaW5mby5leGlzdHMgPSBoYXNQcm9wZXJ0eShpbmZvLnBhcmVudCwgaW5mby5uYW1lKTtcbiAgcmV0dXJuIGluZm87XG59XG5fX25hbWUoZ2V0UGF0aEluZm8sIFwiZ2V0UGF0aEluZm9cIik7XG5cbi8vIGxpYi9jaGFpL2Fzc2VydGlvbi5qc1xudmFyIF9Bc3NlcnRpb24gPSBjbGFzcyBfQXNzZXJ0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgb2JqZWN0IGZvciBjaGFpbmluZy5cbiAgICogYEFzc2VydGlvbmAgb2JqZWN0cyBjb250YWluIG1ldGFkYXRhIGluIHRoZSBmb3JtIG9mIGZsYWdzLiBUaHJlZSBmbGFncyBjYW5cbiAgICogYmUgYXNzaWduZWQgZHVyaW5nIGluc3RhbnRpYXRpb24gYnkgcGFzc2luZyBhcmd1bWVudHMgdG8gdGhpcyBjb25zdHJ1Y3RvcjpcbiAgICpcbiAgICogLSBgb2JqZWN0YDogVGhpcyBmbGFnIGNvbnRhaW5zIHRoZSB0YXJnZXQgb2YgdGhlIGFzc2VydGlvbi4gRm9yIGV4YW1wbGUsIGluXG4gICAqIHRoZSBhc3NlcnRpb24gYGV4cGVjdChudW1LaXR0ZW5zKS50by5lcXVhbCg3KTtgLCB0aGUgYG9iamVjdGAgZmxhZyB3aWxsXG4gICAqIGNvbnRhaW4gYG51bUtpdHRlbnNgIHNvIHRoYXQgdGhlIGBlcXVhbGAgYXNzZXJ0aW9uIGNhbiByZWZlcmVuY2UgaXQgd2hlblxuICAgKiBuZWVkZWQuXG4gICAqXG4gICAqIC0gYG1lc3NhZ2VgOiBUaGlzIGZsYWcgY29udGFpbnMgYW4gb3B0aW9uYWwgY3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gYmVcbiAgICogcHJlcGVuZGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQncyBnZW5lcmF0ZWQgYnkgdGhlIGFzc2VydGlvbiB3aGVuIGl0XG4gICAqIGZhaWxzLlxuICAgKlxuICAgKiAtIGBzc2ZpYDogVGhpcyBmbGFnIHN0YW5kcyBmb3IgXCJzdGFydCBzdGFjayBmdW5jdGlvbiBpbmRpY2F0b3JcIi4gSXRcbiAgICogY29udGFpbnMgYSBmdW5jdGlvbiByZWZlcmVuY2UgdGhhdCBzZXJ2ZXMgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvclxuICAgKiByZW1vdmluZyBmcmFtZXMgZnJvbSB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGVycm9yIHRoYXQncyBjcmVhdGVkIGJ5IHRoZVxuICAgKiBhc3NlcnRpb24gd2hlbiBpdCBmYWlscy4gVGhlIGdvYWwgaXMgdG8gcHJvdmlkZSBhIGNsZWFuZXIgc3RhY2sgdHJhY2UgdG9cbiAgICogZW5kIHVzZXJzIGJ5IHJlbW92aW5nIENoYWkncyBpbnRlcm5hbCBmdW5jdGlvbnMuIE5vdGUgdGhhdCBpdCBvbmx5IHdvcmtzXG4gICAqIGluIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgYEVycm9yLmNhcHR1cmVTdGFja1RyYWNlYCwgYW5kIG9ubHkgd2hlblxuICAgKiBgQ2hhaS5jb25maWcuaW5jbHVkZVN0YWNrYCBoYXNuJ3QgYmVlbiBzZXQgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogLSBgbG9ja1NzZmlgOiBUaGlzIGZsYWcgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIGBzc2ZpYCBmbGFnXG4gICAqIHNob3VsZCByZXRhaW4gaXRzIGN1cnJlbnQgdmFsdWUsIGV2ZW4gYXMgYXNzZXJ0aW9ucyBhcmUgY2hhaW5lZCBvZmYgb2ZcbiAgICogdGhpcyBvYmplY3QuIFRoaXMgaXMgdXN1YWxseSBzZXQgdG8gYHRydWVgIHdoZW4gY3JlYXRpbmcgYSBuZXcgYXNzZXJ0aW9uXG4gICAqIGZyb20gd2l0aGluIGFub3RoZXIgYXNzZXJ0aW9uLiBJdCdzIGFsc28gdGVtcG9yYXJpbHkgc2V0IHRvIGB0cnVlYCBiZWZvcmVcbiAgICogYW4gb3ZlcndyaXR0ZW4gYXNzZXJ0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSBvdmVyd3JpdGluZyBhc3NlcnRpb24uXG4gICAqXG4gICAqIC0gYGVxbGA6IFRoaXMgZmxhZyBjb250YWlucyB0aGUgZGVlcEVxdWFsIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYnkgdGhlIGFzc2VydGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHt1bmtub3dufSBvYmogdGFyZ2V0IG9mIHRoZSBhc3NlcnRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFttc2ddIChvcHRpb25hbCkgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3NzZmldIChvcHRpb25hbCkgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIHN0YWNrIGZyYW1lc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtsb2NrU3NmaV0gKG9wdGlvbmFsKSB3aGV0aGVyIG9yIG5vdCB0aGUgc3NmaSBmbGFnIGlzIGxvY2tlZFxuICAgKi9cbiAgY29uc3RydWN0b3Iob2JqLCBtc2csIHNzZmksIGxvY2tTc2ZpKSB7XG4gICAgLyoqIEB0eXBlIHt7fX0gKi9cbiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsIFwiX19mbGFnc1wiLCB7fSk7XG4gICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgc3NmaSB8fCBfQXNzZXJ0aW9uKTtcbiAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgbG9ja1NzZmkpO1xuICAgIGZsYWcodGhpcywgXCJvYmplY3RcIiwgb2JqKTtcbiAgICBmbGFnKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICAgIGZsYWcodGhpcywgXCJlcWxcIiwgY29uZmlnLmRlZXBFcXVhbCB8fCBkZWVwX2VxbF9kZWZhdWx0KTtcbiAgICByZXR1cm4gcHJveGlmeSh0aGlzKTtcbiAgfVxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIHN0YXRpYyBnZXQgaW5jbHVkZVN0YWNrKCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuXCJcbiAgICApO1xuICAgIHJldHVybiBjb25maWcuaW5jbHVkZVN0YWNrO1xuICB9XG4gIC8qKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlICovXG4gIHN0YXRpYyBzZXQgaW5jbHVkZVN0YWNrKHZhbHVlKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC5cIlxuICAgICk7XG4gICAgY29uZmlnLmluY2x1ZGVTdGFjayA9IHZhbHVlO1xuICB9XG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgc3RhdGljIGdldCBzaG93RGlmZigpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIkFzc2VydGlvbi5zaG93RGlmZiBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuc2hvd0RpZmYgaW5zdGVhZC5cIlxuICAgICk7XG4gICAgcmV0dXJuIGNvbmZpZy5zaG93RGlmZjtcbiAgfVxuICAvKiogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAqL1xuICBzdGF0aWMgc2V0IHNob3dEaWZmKHZhbHVlKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJBc3NlcnRpb24uc2hvd0RpZmYgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLnNob3dEaWZmIGluc3RlYWQuXCJcbiAgICApO1xuICAgIGNvbmZpZy5zaG93RGlmZiA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKi9cbiAgc3RhdGljIGFkZFByb3BlcnR5KG5hbWUsIGZuKSB7XG4gICAgYWRkUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICovXG4gIHN0YXRpYyBhZGRNZXRob2QobmFtZSwgZm4pIHtcbiAgICBhZGRNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhaW5pbmdCZWhhdmlvclxuICAgKi9cbiAgc3RhdGljIGFkZENoYWluYWJsZU1ldGhvZChuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIGFkZENoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKi9cbiAgc3RhdGljIG92ZXJ3cml0ZVByb3BlcnR5KG5hbWUsIGZuKSB7XG4gICAgb3ZlcndyaXRlUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICovXG4gIHN0YXRpYyBvdmVyd3JpdGVNZXRob2QobmFtZSwgZm4pIHtcbiAgICBvdmVyd3JpdGVNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhaW5pbmdCZWhhdmlvclxuICAgKi9cbiAgc3RhdGljIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZChuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xuICB9XG4gIC8qKlxuICAgKiAjIyMgLmFzc2VydChleHByZXNzaW9uLCBtZXNzYWdlLCBuZWdhdGVNZXNzYWdlLCBleHBlY3RlZCwgYWN0dWFsLCBzaG93RGlmZilcbiAgICpcbiAgICogRXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiBhbmQgY2hlY2sgZXhwZWN0YXRpb25zLiBUaHJvd3MgQXNzZXJ0aW9uRXJyb3IgZm9yIHJlcG9ydGluZyBpZiB0ZXN0IGRvZXNuJ3QgcGFzcy5cbiAgICpcbiAgICogQG5hbWUgYXNzZXJ0XG4gICAqIEBwYXJhbSB7dW5rbm93bn0gX2V4cHIgdG8gYmUgdGVzdGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRnVuY3Rpb259IG1zZyBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgbWVzc2FnZSB0byBkaXNwbGF5IGlmIGV4cHJlc3Npb24gZmFpbHNcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBGdW5jdGlvbn0gX25lZ2F0ZU1zZyBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgbmVnYXRlZE1lc3NhZ2UgdG8gZGlzcGxheSBpZiBuZWdhdGVkIGV4cHJlc3Npb24gZmFpbHNcbiAgICogQHBhcmFtIHt1bmtub3dufSBleHBlY3RlZCB2YWx1ZSAocmVtZW1iZXIgdG8gY2hlY2sgZm9yIG5lZ2F0aW9uKVxuICAgKiBAcGFyYW0ge3Vua25vd259IF9hY3R1YWwgKG9wdGlvbmFsKSB3aWxsIGRlZmF1bHQgdG8gYHRoaXMub2JqYFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dEaWZmIChvcHRpb25hbCkgd2hlbiBzZXQgdG8gYHRydWVgLCBhc3NlcnQgd2lsbCBkaXNwbGF5IGEgZGlmZiBpbiBhZGRpdGlvbiB0byB0aGUgbWVzc2FnZSBpZiBleHByZXNzaW9uIGZhaWxzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgYXNzZXJ0KF9leHByLCBtc2csIF9uZWdhdGVNc2csIGV4cGVjdGVkLCBfYWN0dWFsLCBzaG93RGlmZikge1xuICAgIGNvbnN0IG9rID0gdGVzdCh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChmYWxzZSAhPT0gc2hvd0RpZmYpIHNob3dEaWZmID0gdHJ1ZTtcbiAgICBpZiAodm9pZCAwID09PSBleHBlY3RlZCAmJiB2b2lkIDAgPT09IF9hY3R1YWwpIHNob3dEaWZmID0gZmFsc2U7XG4gICAgaWYgKHRydWUgIT09IGNvbmZpZy5zaG93RGlmZikgc2hvd0RpZmYgPSBmYWxzZTtcbiAgICBpZiAoIW9rKSB7XG4gICAgICBtc2cgPSBnZXRNZXNzYWdlMih0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgY29uc3QgYWN0dWFsID0gZ2V0QWN0dWFsKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBjb25zdCBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMgPSB7XG4gICAgICAgIGFjdHVhbCxcbiAgICAgICAgZXhwZWN0ZWQsXG4gICAgICAgIHNob3dEaWZmXG4gICAgICB9O1xuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBnZXRPcGVyYXRvcih0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKG9wZXJhdG9yKSB7XG4gICAgICAgIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBtc2csXG4gICAgICAgIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcyxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBOb3Qgc3VyZSB3aGF0IHRvIGRvIGFib3V0IHRoZXNlIHR5cGVzIHlldFxuICAgICAgICBjb25maWcuaW5jbHVkZVN0YWNrID8gdGhpcy5hc3NlcnQgOiBmbGFnKHRoaXMsIFwic3NmaVwiKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFF1aWNrIHJlZmVyZW5jZSB0byBzdG9yZWQgYGFjdHVhbGAgdmFsdWUgZm9yIHBsdWdpbiBkZXZlbG9wZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dW5rbm93bn1cbiAgICovXG4gIGdldCBfb2JqKCkge1xuICAgIHJldHVybiBmbGFnKHRoaXMsIFwib2JqZWN0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBRdWljayByZWZlcmVuY2UgdG8gc3RvcmVkIGBhY3R1YWxgIHZhbHVlIGZvciBwbHVnaW4gZGV2ZWxvcGVycy5cbiAgICpcbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWxcbiAgICovXG4gIHNldCBfb2JqKHZhbCkge1xuICAgIGZsYWcodGhpcywgXCJvYmplY3RcIiwgdmFsKTtcbiAgfVxufTtcbl9fbmFtZShfQXNzZXJ0aW9uLCBcIkFzc2VydGlvblwiKTtcbnZhciBBc3NlcnRpb24gPSBfQXNzZXJ0aW9uO1xuXG4vLyBsaWIvY2hhaS91dGlscy9ldmVudHMuanNcbnZhciBldmVudHMgPSBuZXcgRXZlbnRUYXJnZXQoKTtcbnZhciBfUGx1Z2luRXZlbnQgPSBjbGFzcyBfUGx1Z2luRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yKHR5cGUzLCBuYW1lLCBmbikge1xuICAgIHN1cGVyKHR5cGUzKTtcbiAgICB0aGlzLm5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgdGhpcy5mbiA9IGZuO1xuICB9XG59O1xuX19uYW1lKF9QbHVnaW5FdmVudCwgXCJQbHVnaW5FdmVudFwiKTtcbnZhciBQbHVnaW5FdmVudCA9IF9QbHVnaW5FdmVudDtcblxuLy8gbGliL2NoYWkvdXRpbHMvaXNQcm94eUVuYWJsZWQuanNcbmZ1bmN0aW9uIGlzUHJveHlFbmFibGVkKCkge1xuICByZXR1cm4gY29uZmlnLnVzZVByb3h5ICYmIHR5cGVvZiBQcm94eSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIjtcbn1cbl9fbmFtZShpc1Byb3h5RW5hYmxlZCwgXCJpc1Byb3h5RW5hYmxlZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkUHJvcGVydHkuanNcbmZ1bmN0aW9uIGFkZFByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKSB7XG4gIGdldHRlciA9IGdldHRlciA9PT0gdm9pZCAwID8gZnVuY3Rpb24oKSB7XG4gIH0gOiBnZXR0ZXI7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIG5hbWUsIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIoKSB7XG4gICAgICBpZiAoIWlzUHJveHlFbmFibGVkKCkgJiYgIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBwcm9wZXJ0eUdldHRlcik7XG4gICAgICB9XG4gICAgICBsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHJldHVybiByZXN1bHQ7XG4gICAgICBsZXQgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICB9LCBcInByb3BlcnR5R2V0dGVyXCIpLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgZXZlbnRzLmRpc3BhdGNoRXZlbnQobmV3IFBsdWdpbkV2ZW50KFwiYWRkUHJvcGVydHlcIiwgbmFtZSwgZ2V0dGVyKSk7XG59XG5fX25hbWUoYWRkUHJvcGVydHksIFwiYWRkUHJvcGVydHlcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZExlbmd0aEd1YXJkLmpzXG52YXIgZm5MZW5ndGhEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmdW5jdGlvbigpIHtcbn0sIFwibGVuZ3RoXCIpO1xuZnVuY3Rpb24gYWRkTGVuZ3RoR3VhcmQoZm4sIGFzc2VydGlvbk5hbWUsIGlzQ2hhaW5hYmxlKSB7XG4gIGlmICghZm5MZW5ndGhEZXNjLmNvbmZpZ3VyYWJsZSkgcmV0dXJuIGZuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIFwibGVuZ3RoXCIsIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoaXNDaGFpbmFibGUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBEdWUgdG8gYSBjb21wYXRpYmlsaXR5IGlzc3VlLCBcImxlbmd0aFwiIGNhbm5vdCBkaXJlY3RseSBmb2xsb3cgXCInICsgYXNzZXJ0aW9uTmFtZSArICdcIi4gVXNlIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aE9mXCIgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnXCIuJ1xuICAgICAgKTtcbiAgICB9LCBcImdldFwiKVxuICB9KTtcbiAgcmV0dXJuIGZuO1xufVxuX19uYW1lKGFkZExlbmd0aEd1YXJkLCBcImFkZExlbmd0aEd1YXJkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRQcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKG9iamVjdCkge1xuICBsZXQgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgZnVuY3Rpb24gYWRkUHJvcGVydHkyKHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGFkZFByb3BlcnR5MiwgXCJhZGRQcm9wZXJ0eVwiKTtcbiAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gIHdoaWxlIChwcm90byAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGFkZFByb3BlcnR5Mik7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoZ2V0UHJvcGVydGllcywgXCJnZXRQcm9wZXJ0aWVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9wcm94aWZ5LmpzXG52YXIgYnVpbHRpbnMgPSBbXCJfX2ZsYWdzXCIsIFwiX19tZXRob2RzXCIsIFwiX29ialwiLCBcImFzc2VydFwiXTtcbmZ1bmN0aW9uIHByb3hpZnkob2JqLCBub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gIGlmICghaXNQcm94eUVuYWJsZWQoKSkgcmV0dXJuIG9iajtcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHJveHlHZXR0ZXIodGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIiAmJiBjb25maWcucHJveHlFeGNsdWRlZEtleXMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmICFSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5KSkge1xuICAgICAgICBpZiAobm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSkge1xuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSArIFwiLlwiICsgcHJvcGVydHkgKyAnLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyAnXCIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1Z2dlc3Rpb24gPSBudWxsO1xuICAgICAgICBsZXQgc3VnZ2VzdGlvbkRpc3RhbmNlID0gNDtcbiAgICAgICAgZ2V0UHJvcGVydGllcyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIHdlIGFjdHVhbGx5IG1lYW4gdG8gY2hlY2sgYE9iamVjdC5wcm90b3R5cGVgIGhlcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApICYmIGJ1aWx0aW5zLmluZGV4T2YocHJvcCkgPT09IC0xXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgZGlzdCA9IHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKHByb3BlcnR5LCBwcm9wLCBzdWdnZXN0aW9uRGlzdGFuY2UpO1xuICAgICAgICAgICAgaWYgKGRpc3QgPCBzdWdnZXN0aW9uRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IHByb3A7XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25EaXN0YW5jZSA9IGRpc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIHByb3BlcnR5ICsgJy4gRGlkIHlvdSBtZWFuIFwiJyArIHN1Z2dlc3Rpb24gKyAnXCI/J1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgcHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYnVpbHRpbnMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmICFmbGFnKHRhcmdldCwgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICBmbGFnKHRhcmdldCwgXCJzc2ZpXCIsIHByb3h5R2V0dGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICB9LCBcInByb3h5R2V0dGVyXCIpXG4gIH0pO1xufVxuX19uYW1lKHByb3hpZnksIFwicHJveGlmeVwiKTtcbmZ1bmN0aW9uIHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKHN0ckEsIHN0ckIsIGNhcCkge1xuICBpZiAoTWF0aC5hYnMoc3RyQS5sZW5ndGggLSBzdHJCLmxlbmd0aCkgPj0gY2FwKSB7XG4gICAgcmV0dXJuIGNhcDtcbiAgfVxuICBsZXQgbWVtbyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgbWVtb1tpXSA9IEFycmF5KHN0ckIubGVuZ3RoICsgMSkuZmlsbCgwKTtcbiAgICBtZW1vW2ldWzBdID0gaTtcbiAgfVxuICBmb3IgKGxldCBqID0gMDsgaiA8IHN0ckIubGVuZ3RoOyBqKyspIHtcbiAgICBtZW1vWzBdW2pdID0gajtcbiAgfVxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNoID0gc3RyQS5jaGFyQ29kZUF0KGkgLSAxKTtcbiAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBzdHJCLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoaSAtIGopID49IGNhcCkge1xuICAgICAgICBtZW1vW2ldW2pdID0gY2FwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG1lbW9baV1bal0gPSBNYXRoLm1pbihcbiAgICAgICAgbWVtb1tpIC0gMV1bal0gKyAxLFxuICAgICAgICBtZW1vW2ldW2ogLSAxXSArIDEsXG4gICAgICAgIG1lbW9baSAtIDFdW2ogLSAxXSArIChjaCA9PT0gc3RyQi5jaGFyQ29kZUF0KGogLSAxKSA/IDAgOiAxKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lbW9bc3RyQS5sZW5ndGhdW3N0ckIubGVuZ3RoXTtcbn1cbl9fbmFtZShzdHJpbmdEaXN0YW5jZUNhcHBlZCwgXCJzdHJpbmdEaXN0YW5jZUNhcHBlZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkTWV0aG9kLmpzXG5mdW5jdGlvbiBhZGRNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgbGV0IG1ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIGlmICghZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBtZXRob2RXcmFwcGVyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkgcmV0dXJuIHJlc3VsdDtcbiAgICBsZXQgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm1ldGhvZFdyYXBwZXJcIik7XG4gIGFkZExlbmd0aEd1YXJkKG1ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShtZXRob2RXcmFwcGVyLCBuYW1lKTtcbiAgZXZlbnRzLmRpc3BhdGNoRXZlbnQobmV3IFBsdWdpbkV2ZW50KFwiYWRkTWV0aG9kXCIsIG5hbWUsIG1ldGhvZCkpO1xufVxuX19uYW1lKGFkZE1ldGhvZCwgXCJhZGRNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZVByb3BlcnR5LmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVQcm9wZXJ0eShjdHgsIG5hbWUsIGdldHRlcikge1xuICBsZXQgX2dldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3R4LCBuYW1lKSwgX3N1cGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgfSwgXCJfc3VwZXJcIik7XG4gIGlmIChfZ2V0ICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9nZXQuZ2V0KSBfc3VwZXIgPSBfZ2V0LmdldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgbmFtZSwge1xuICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyKCkge1xuICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgb3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlcik7XG4gICAgICB9XG4gICAgICBsZXQgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgICAgZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgICAgbGV0IHJlc3VsdCA9IGdldHRlcihfc3VwZXIpLmNhbGwodGhpcyk7XG4gICAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgb3JpZ0xvY2tTc2ZpKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgbGV0IG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgfSwgXCJvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyXCIpLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cbl9fbmFtZShvdmVyd3JpdGVQcm9wZXJ0eSwgXCJvdmVyd3JpdGVQcm9wZXJ0eVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlTWV0aG9kLmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgbGV0IF9tZXRob2QgPSBjdHhbbmFtZV0sIF9zdXBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgfSwgXCJfc3VwZXJcIik7XG4gIGlmIChfbWV0aG9kICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9tZXRob2QpIF9zdXBlciA9IF9tZXRob2Q7XG4gIGxldCBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIGlmICghZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIpO1xuICAgIH1cbiAgICBsZXQgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICBsZXQgcmVzdWx0ID0gbWV0aG9kKF9zdXBlcikuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgb3JpZ0xvY2tTc2ZpKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGxldCBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwib3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyXCIpO1xuICBhZGRMZW5ndGhHdWFyZChvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUpO1xufVxuX19uYW1lKG92ZXJ3cml0ZU1ldGhvZCwgXCJvdmVyd3JpdGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZENoYWluYWJsZU1ldGhvZC5qc1xudmFyIGNhblNldFByb3RvdHlwZSA9IHR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPT09IFwiZnVuY3Rpb25cIjtcbnZhciB0ZXN0Rm4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xufSwgXCJ0ZXN0Rm5cIik7XG52YXIgZXhjbHVkZU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdEZuKS5maWx0ZXIoZnVuY3Rpb24obmFtZSkge1xuICBsZXQgcHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlc3RGbiwgbmFtZSk7XG4gIGlmICh0eXBlb2YgcHJvcERlc2MgIT09IFwib2JqZWN0XCIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gIXByb3BEZXNjLmNvbmZpZ3VyYWJsZTtcbn0pO1xudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcbnZhciBfUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQgPSBjbGFzcyBfUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQgZXh0ZW5kcyBQbHVnaW5FdmVudCB7XG4gIGNvbnN0cnVjdG9yKHR5cGUzLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIHN1cGVyKHR5cGUzLCBuYW1lLCBmbik7XG4gICAgdGhpcy5jaGFpbmluZ0JlaGF2aW9yID0gY2hhaW5pbmdCZWhhdmlvcjtcbiAgfVxufTtcbl9fbmFtZShfUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQsIFwiUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnRcIik7XG52YXIgUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQgPSBfUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQ7XG5mdW5jdGlvbiBhZGRDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgaWYgKHR5cGVvZiBjaGFpbmluZ0JlaGF2aW9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjaGFpbmluZ0JlaGF2aW9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICB9LCBcImNoYWluaW5nQmVoYXZpb3JcIik7XG4gIH1cbiAgbGV0IGNoYWluYWJsZUJlaGF2aW9yID0ge1xuICAgIG1ldGhvZCxcbiAgICBjaGFpbmluZ0JlaGF2aW9yXG4gIH07XG4gIGlmICghY3R4Ll9fbWV0aG9kcykge1xuICAgIGN0eC5fX21ldGhvZHMgPSB7fTtcbiAgfVxuICBjdHguX19tZXRob2RzW25hbWVdID0gY2hhaW5hYmxlQmVoYXZpb3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIG5hbWUsIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gY2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgICAgY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvci5jYWxsKHRoaXMpO1xuICAgICAgbGV0IGNoYWluYWJsZU1ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICB9LCBcImNoYWluYWJsZU1ldGhvZFdyYXBwZXJcIik7XG4gICAgICBhZGRMZW5ndGhHdWFyZChjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBuYW1lLCB0cnVlKTtcbiAgICAgIGlmIChjYW5TZXRQcm90b3R5cGUpIHtcbiAgICAgICAgbGV0IHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgIHByb3RvdHlwZS5jYWxsID0gY2FsbDtcbiAgICAgICAgcHJvdG90eXBlLmFwcGx5ID0gYXBwbHk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBwcm90b3R5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGFzc2VydGVyTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdHgpO1xuICAgICAgICBhc3NlcnRlck5hbWVzLmZvckVhY2goZnVuY3Rpb24oYXNzZXJ0ZXJOYW1lKSB7XG4gICAgICAgICAgaWYgKGV4Y2x1ZGVOYW1lcy5pbmRleE9mKGFzc2VydGVyTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3R4LCBhc3NlcnRlck5hbWUpO1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBhc3NlcnRlck5hbWUsIHBkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgcmV0dXJuIHByb3hpZnkoY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgfSwgXCJjaGFpbmFibGVNZXRob2RHZXR0ZXJcIiksXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBldmVudHMuZGlzcGF0Y2hFdmVudChcbiAgICBuZXcgUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQoXG4gICAgICBcImFkZENoYWluYWJsZU1ldGhvZFwiLFxuICAgICAgbmFtZSxcbiAgICAgIG1ldGhvZCxcbiAgICAgIGNoYWluaW5nQmVoYXZpb3JcbiAgICApXG4gICk7XG59XG5fX25hbWUoYWRkQ2hhaW5hYmxlTWV0aG9kLCBcImFkZENoYWluYWJsZU1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgbGV0IGNoYWluYWJsZUJlaGF2aW9yID0gY3R4Ll9fbWV0aG9kc1tuYW1lXTtcbiAgbGV0IF9jaGFpbmluZ0JlaGF2aW9yID0gY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvcjtcbiAgY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RHZXR0ZXIoKSB7XG4gICAgbGV0IHJlc3VsdCA9IGNoYWluaW5nQmVoYXZpb3IoX2NoYWluaW5nQmVoYXZpb3IpLmNhbGwodGhpcyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBsZXQgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kR2V0dGVyXCIpO1xuICBsZXQgX21ldGhvZCA9IGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZDtcbiAgY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZFdyYXBwZXIoKSB7XG4gICAgbGV0IHJlc3VsdCA9IG1ldGhvZChfbWV0aG9kKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgbGV0IG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZFdyYXBwZXJcIik7XG59XG5fX25hbWUob3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLCBcIm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvY29tcGFyZUJ5SW5zcGVjdC5qc1xuZnVuY3Rpb24gY29tcGFyZUJ5SW5zcGVjdChhLCBiKSB7XG4gIHJldHVybiBpbnNwZWN0MihhKSA8IGluc3BlY3QyKGIpID8gLTEgOiAxO1xufVxuX19uYW1lKGNvbXBhcmVCeUluc3BlY3QsIFwiY29tcGFyZUJ5SW5zcGVjdFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scy5qc1xuZnVuY3Rpb24gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopIHtcbiAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBbXTtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKS5maWx0ZXIoZnVuY3Rpb24oc3ltKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pLmVudW1lcmFibGU7XG4gIH0pO1xufVxuX19uYW1lKGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMsIFwiZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5jb25jYXQoZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopKTtcbn1cbl9fbmFtZShnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcywgXCJnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaXNOYU4uanNcbnZhciBpc05hTjIgPSBOdW1iZXIuaXNOYU47XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE9wZXJhdG9yLmpzXG5mdW5jdGlvbiBpc09iamVjdFR5cGUob2JqKSB7XG4gIGxldCBvYmplY3RUeXBlID0gdHlwZShvYmopO1xuICBsZXQgb2JqZWN0VHlwZXMgPSBbXCJBcnJheVwiLCBcIk9iamVjdFwiLCBcIkZ1bmN0aW9uXCJdO1xuICByZXR1cm4gb2JqZWN0VHlwZXMuaW5kZXhPZihvYmplY3RUeXBlKSAhPT0gLTE7XG59XG5fX25hbWUoaXNPYmplY3RUeXBlLCBcImlzT2JqZWN0VHlwZVwiKTtcbmZ1bmN0aW9uIGdldE9wZXJhdG9yKG9iaiwgYXJncykge1xuICBsZXQgb3BlcmF0b3IgPSBmbGFnKG9iaiwgXCJvcGVyYXRvclwiKTtcbiAgbGV0IG5lZ2F0ZSA9IGZsYWcob2JqLCBcIm5lZ2F0ZVwiKTtcbiAgbGV0IGV4cGVjdGVkID0gYXJnc1szXTtcbiAgbGV0IG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdO1xuICBpZiAob3BlcmF0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0b3I7XG4gIH1cbiAgaWYgKHR5cGVvZiBtc2cgPT09IFwiZnVuY3Rpb25cIikgbXNnID0gbXNnKCk7XG4gIG1zZyA9IG1zZyB8fCBcIlwiO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgaWYgKC9cXHNoYXZlXFxzLy50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGxldCBpc09iamVjdCA9IGlzT2JqZWN0VHlwZShleHBlY3RlZCk7XG4gIGlmICgvXFxzbm90XFxzLy50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gaXNPYmplY3QgPyBcIm5vdERlZXBTdHJpY3RFcXVhbFwiIDogXCJub3RTdHJpY3RFcXVhbFwiO1xuICB9XG4gIHJldHVybiBpc09iamVjdCA/IFwiZGVlcFN0cmljdEVxdWFsXCIgOiBcInN0cmljdEVxdWFsXCI7XG59XG5fX25hbWUoZ2V0T3BlcmF0b3IsIFwiZ2V0T3BlcmF0b3JcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luZGV4LmpzXG5mdW5jdGlvbiBnZXROYW1lKGZuKSB7XG4gIHJldHVybiBmbi5uYW1lO1xufVxuX19uYW1lKGdldE5hbWUsIFwiZ2V0TmFtZVwiKTtcbmZ1bmN0aW9uIGlzUmVnRXhwMihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgUmVnRXhwXVwiO1xufVxuX19uYW1lKGlzUmVnRXhwMiwgXCJpc1JlZ0V4cFwiKTtcbmZ1bmN0aW9uIGlzTnVtZXJpYyhvYmopIHtcbiAgcmV0dXJuIFtcIk51bWJlclwiLCBcIkJpZ0ludFwiXS5pbmNsdWRlcyh0eXBlKG9iaikpO1xufVxuX19uYW1lKGlzTnVtZXJpYywgXCJpc051bWVyaWNcIik7XG5cbi8vIGxpYi9jaGFpL2NvcmUvYXNzZXJ0aW9ucy5qc1xudmFyIHsgZmxhZzogZmxhZzIgfSA9IHV0aWxzX2V4cG9ydHM7XG5bXG4gIFwidG9cIixcbiAgXCJiZVwiLFxuICBcImJlZW5cIixcbiAgXCJpc1wiLFxuICBcImFuZFwiLFxuICBcImhhc1wiLFxuICBcImhhdmVcIixcbiAgXCJ3aXRoXCIsXG4gIFwidGhhdFwiLFxuICBcIndoaWNoXCIsXG4gIFwiYXRcIixcbiAgXCJvZlwiLFxuICBcInNhbWVcIixcbiAgXCJidXRcIixcbiAgXCJkb2VzXCIsXG4gIFwic3RpbGxcIixcbiAgXCJhbHNvXCJcbl0uZm9yRWFjaChmdW5jdGlvbihjaGFpbikge1xuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoY2hhaW4pO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJub3RcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJkZWVwXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcImRlZXBcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm5lc3RlZFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJuZXN0ZWRcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm93blwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJvd25cIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm9yZGVyZWRcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwib3JkZXJlZFwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiYW55XCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcImFueVwiLCB0cnVlKTtcbiAgZmxhZzIodGhpcywgXCJhbGxcIiwgZmFsc2UpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJhbGxcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwiYWxsXCIsIHRydWUpO1xuICBmbGFnMih0aGlzLCBcImFueVwiLCBmYWxzZSk7XG59KTtcbnZhciBmdW5jdGlvblR5cGVzID0ge1xuICBmdW5jdGlvbjogW1xuICAgIFwiZnVuY3Rpb25cIixcbiAgICBcImFzeW5jZnVuY3Rpb25cIixcbiAgICBcImdlbmVyYXRvcmZ1bmN0aW9uXCIsXG4gICAgXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJcbiAgXSxcbiAgYXN5bmNmdW5jdGlvbjogW1wiYXN5bmNmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIGdlbmVyYXRvcmZ1bmN0aW9uOiBbXCJnZW5lcmF0b3JmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIGFzeW5jZ2VuZXJhdG9yZnVuY3Rpb246IFtcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl1cbn07XG5mdW5jdGlvbiBhbih0eXBlMywgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB0eXBlMyA9IHR5cGUzLnRvTG93ZXJDYXNlKCk7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgYXJ0aWNsZSA9IH5bXCJhXCIsIFwiZVwiLCBcImlcIiwgXCJvXCIsIFwidVwiXS5pbmRleE9mKHR5cGUzLmNoYXJBdCgwKSkgPyBcImFuIFwiIDogXCJhIFwiO1xuICBjb25zdCBkZXRlY3RlZFR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGZ1bmN0aW9uVHlwZXNbXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlMykpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGZ1bmN0aW9uVHlwZXNbdHlwZTNdLmluY2x1ZGVzKGRldGVjdGVkVHlwZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHR5cGUzID09PSBkZXRlY3RlZFR5cGUsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFuLCBcImFuXCIpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImFuXCIsIGFuKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJhXCIsIGFuKTtcbmZ1bmN0aW9uIFNhbWVWYWx1ZVplcm8oYSwgYikge1xuICByZXR1cm4gaXNOYU4yKGEpICYmIGlzTmFOMihiKSB8fCBhID09PSBiO1xufVxuX19uYW1lKFNhbWVWYWx1ZVplcm8sIFwiU2FtZVZhbHVlWmVyb1wiKTtcbmZ1bmN0aW9uIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKCkge1xuICBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIsIHRydWUpO1xufVxuX19uYW1lKGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yLCBcImluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yXCIpO1xuZnVuY3Rpb24gaW5jbHVkZSh2YWwsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBpc0RlZXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIiksIGRlc2NyaXB0b3IgPSBpc0RlZXAgPyBcImRlZXAgXCIgOiBcIlwiLCBpc0VxbCA9IGlzRGVlcCA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogU2FtZVZhbHVlWmVybztcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgbGV0IGluY2x1ZGVkID0gZmFsc2U7XG4gIHN3aXRjaCAob2JqVHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGluY2x1ZGVkID0gb2JqLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwid2Vha3NldFwiOlxuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwidW5hYmxlIHRvIHVzZSAuZGVlcC5pbmNsdWRlIHdpdGggV2Vha1NldFwiLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpbmNsdWRlZCA9IG9iai5oYXModmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgaW5jbHVkZWQgPSBpbmNsdWRlZCB8fCBpc0VxbChpdGVtLCB2YWwpO1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic2V0XCI6XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaGFzKHZhbCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouc29tZShmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgXCJ0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2YgYXJndW1lbnRzIChcIiArIG9ialR5cGUgKyBcIiBhbmQgXCIgKyB0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSArIFwiKSBpcyBpbnZhbGlkIGZvciB0aGlzIGFzc2VydGlvbi4gWW91IGNhbiB1c2UgYW4gYXJyYXksIGEgbWFwLCBhbiBvYmplY3QsIGEgc2V0LCBhIHN0cmluZywgb3IgYSB3ZWFrc2V0IGluc3RlYWQgb2YgYSBcIiArIHR5cGUodmFsKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBsZXQgcHJvcHMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgbGV0IGZpcnN0RXJyID0gbnVsbDtcbiAgICAgIGxldCBudW1FcnJzID0gMDtcbiAgICAgIHByb3BzLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICBsZXQgcHJvcEFzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24ob2JqKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBwcm9wQXNzZXJ0aW9uLCB0cnVlKTtcbiAgICAgICAgZmxhZzIocHJvcEFzc2VydGlvbiwgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICAgICAgaWYgKCFuZWdhdGUgfHwgcHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcHJvcEFzc2VydGlvbi5wcm9wZXJ0eShwcm9wLCB2YWxbcHJvcF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHByb3BBc3NlcnRpb24ucHJvcGVydHkocHJvcCwgdmFsW3Byb3BdKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKCFjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihlcnIsIEFzc2VydGlvbkVycm9yKSkge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlyc3RFcnIgPT09IG51bGwpIGZpcnN0RXJyID0gZXJyO1xuICAgICAgICAgIG51bUVycnMrKztcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICBpZiAobmVnYXRlICYmIHByb3BzLmxlbmd0aCA+IDEgJiYgbnVtRXJycyA9PT0gcHJvcHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IGZpcnN0RXJyO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICBpbmNsdWRlZCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gXCIgKyBkZXNjcmlwdG9yICsgXCJpbmNsdWRlIFwiICsgaW5zcGVjdDIodmFsKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IFwiICsgZGVzY3JpcHRvciArIFwiaW5jbHVkZSBcIiArIGluc3BlY3QyKHZhbClcbiAgKTtcbn1cbl9fbmFtZShpbmNsdWRlLCBcImluY2x1ZGVcIik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiaW5jbHVkZVwiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiY29udGFpblwiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiY29udGFpbnNcIiwgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImluY2x1ZGVzXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm9rXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1dGh5XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHN5XCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwidHJ1ZVwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgdHJ1ZSA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydWVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2VcIixcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJudW1lcmljXCIsIGZ1bmN0aW9uKCkge1xuICBjb25zdCBvYmplY3QgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgW1wiTnVtYmVyXCIsIFwiQmlnSW50XCJdLmluY2x1ZGVzKHR5cGUob2JqZWN0KSksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bWVyaWNcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIG51bWVyaWNcIixcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJjYWxsYWJsZVwiLCBmdW5jdGlvbigpIHtcbiAgY29uc3QgdmFsID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGNvbnN0IHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIGNvbnN0IG1lc3NhZ2UgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UgPyBgJHttZXNzYWdlfTogYCA6IFwiXCI7XG4gIGNvbnN0IG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpO1xuICBjb25zdCBhc3NlcnRpb25NZXNzYWdlID0gbmVnYXRlID8gYCR7bXNnfWV4cGVjdGVkICR7aW5zcGVjdDIodmFsKX0gbm90IHRvIGJlIGEgY2FsbGFibGUgZnVuY3Rpb25gIDogYCR7bXNnfWV4cGVjdGVkICR7aW5zcGVjdDIodmFsKX0gdG8gYmUgYSBjYWxsYWJsZSBmdW5jdGlvbmA7XG4gIGNvbnN0IGlzQ2FsbGFibGUgPSBbXG4gICAgXCJGdW5jdGlvblwiLFxuICAgIFwiQXN5bmNGdW5jdGlvblwiLFxuICAgIFwiR2VuZXJhdG9yRnVuY3Rpb25cIixcbiAgICBcIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb25cIlxuICBdLmluY2x1ZGVzKHR5cGUodmFsKSk7XG4gIGlmIChpc0NhbGxhYmxlICYmIG5lZ2F0ZSB8fCAhaXNDYWxsYWJsZSAmJiAhbmVnYXRlKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGFzc2VydGlvbk1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZmFsc2VcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZhbHNlID09PSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2VcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZVwiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm51bGxcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG51bGwgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBudWxsXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBudWxsXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwidW5kZWZpbmVkXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICB2b2lkIDAgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB1bmRlZmluZWRcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIHVuZGVmaW5lZFwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIk5hTlwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNOYU4yKGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgTmFOXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBOYU5cIlxuICApO1xufSk7XG5mdW5jdGlvbiBhc3NlcnRFeGlzdCgpIHtcbiAgbGV0IHZhbCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB2b2lkIDAsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGV4aXN0XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBleGlzdFwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0RXhpc3QsIFwiYXNzZXJ0RXhpc3RcIik7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleGlzdFwiLCBhc3NlcnRFeGlzdCk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleGlzdHNcIiwgYXNzZXJ0RXhpc3QpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZW1wdHlcIiwgZnVuY3Rpb24oKSB7XG4gIGxldCB2YWwgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgaXRlbXNDb3VudDtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgc3dpdGNoICh0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGl0ZW1zQ291bnQgPSB2YWwubGVuZ3RoO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGl0ZW1zQ291bnQgPSB2YWwuc2l6ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ3ZWFrbWFwXCI6XG4gICAgY2FzZSBcIndlYWtzZXRcIjpcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgYSB3ZWFrIGNvbGxlY3Rpb25cIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIGNhc2UgXCJmdW5jdGlvblwiOiB7XG4gICAgICBjb25zdCBtc2cgPSBmbGFnTXNnICsgXCIuZW1wdHkgd2FzIHBhc3NlZCBhIGZ1bmN0aW9uIFwiICsgZ2V0TmFtZSh2YWwpO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZy50cmltKCksIHZvaWQgMCwgc3NmaSk7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodmFsICE9PSBPYmplY3QodmFsKSkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgbm9uLXN0cmluZyBwcmltaXRpdmUgXCIgKyBpbnNwZWN0Mih2YWwpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpdGVtc0NvdW50ID0gT2JqZWN0LmtleXModmFsKS5sZW5ndGg7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgMCA9PT0gaXRlbXNDb3VudCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZW1wdHlcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGVtcHR5XCJcbiAgKTtcbn0pO1xuZnVuY3Rpb24gY2hlY2tBcmd1bWVudHMoKSB7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgdHlwZTMgPSB0eXBlKG9iaik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIFwiQXJndW1lbnRzXCIgPT09IHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhcmd1bWVudHMgYnV0IGdvdCBcIiArIHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYXJndW1lbnRzXCJcbiAgKTtcbn1cbl9fbmFtZShjaGVja0FyZ3VtZW50cywgXCJjaGVja0FyZ3VtZW50c1wiKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFyZ3VtZW50c1wiLCBjaGVja0FyZ3VtZW50cyk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJBcmd1bWVudHNcIiwgY2hlY2tBcmd1bWVudHMpO1xuZnVuY3Rpb24gYXNzZXJ0RXF1YWwodmFsLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgaWYgKGZsYWcyKHRoaXMsIFwiZGVlcFwiKSkge1xuICAgIGxldCBwcmV2TG9ja1NzZmkgPSBmbGFnMih0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgIGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIiwgdHJ1ZSk7XG4gICAgdGhpcy5lcWwodmFsKTtcbiAgICBmbGFnMih0aGlzLCBcImxvY2tTc2ZpXCIsIHByZXZMb2NrU3NmaSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICB2YWwgPT09IG9iaixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3tleHB9XCIsXG4gICAgICB2YWwsXG4gICAgICB0aGlzLl9vYmosXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydEVxdWFsLCBcImFzc2VydEVxdWFsXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxdWFsXCIsIGFzc2VydEVxdWFsKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcXVhbHNcIiwgYXNzZXJ0RXF1YWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxXCIsIGFzc2VydEVxdWFsKTtcbmZ1bmN0aW9uIGFzc2VydEVxbChvYmosIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IGVxbCA9IGZsYWcyKHRoaXMsIFwiZXFsXCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBlcWwob2JqLCBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGRlZXBseSBlcXVhbCAje2V4cH1cIixcbiAgICBvYmosXG4gICAgdGhpcy5fb2JqLFxuICAgIHRydWVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRFcWwsIFwiYXNzZXJ0RXFsXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxbFwiLCBhc3NlcnRFcWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxbHNcIiwgYXNzZXJ0RXFsKTtcbmZ1bmN0aW9uIGFzc2VydEFib3ZlKG4sIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgb2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYWJvdmUgbXVzdCBiZSBhIGRhdGVcIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9IGVsc2UgaWYgKCFpc051bWVyaWMobikgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBudW1iZXJcIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpIHtcbiAgICBsZXQgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIGxldCBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPiBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhYm92ZSAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqID4gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRBYm92ZSwgXCJhc3NlcnRBYm92ZVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJhYm92ZVwiLCBhc3NlcnRBYm92ZSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3RcIiwgYXNzZXJ0QWJvdmUpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImdyZWF0ZXJUaGFuXCIsIGFzc2VydEFib3ZlKTtcbmZ1bmN0aW9uIGFzc2VydExlYXN0KG4sIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGxlYXN0IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpIHtcbiAgICBsZXQgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgbGV0IGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA+PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhdCBsZWFzdCAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYmVsb3cgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPj0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBsZWFzdCAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0TGVhc3QsIFwiYXNzZXJ0TGVhc3RcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibGVhc3RcIiwgYXNzZXJ0TGVhc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImd0ZVwiLCBhc3NlcnRMZWFzdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3JlYXRlclRoYW5PckVxdWFsXCIsIGFzc2VydExlYXN0KTtcbmZ1bmN0aW9uIGFzc2VydEJlbG93KG4sIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGJlbG93IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpIHtcbiAgICBsZXQgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgbGV0IGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA8IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGJlbG93ICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYmVsb3cgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPCBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IGxlYXN0ICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRCZWxvdywgXCJhc3NlcnRCZWxvd1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJiZWxvd1wiLCBhc3NlcnRCZWxvdyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibHRcIiwgYXNzZXJ0QmVsb3cpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImxlc3NUaGFuXCIsIGFzc2VydEJlbG93KTtcbmZ1bmN0aW9uIGFzc2VydE1vc3QobiwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGRvTGVuZ3RoID0gZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbXNnUHJlZml4ID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIG5UeXBlID0gdHlwZShuKS50b0xvd2VyQ2FzZSgpLCBlcnJvck1lc3NhZ2UsIHNob3VsZFRocm93ID0gdHJ1ZTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgb2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbW9zdCBtdXN0IGJlIGEgZGF0ZVwiO1xuICB9IGVsc2UgaWYgKCFpc051bWVyaWMobikgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIG1vc3QgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpIHtcbiAgICBsZXQgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgbGV0IGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA8PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhdCBtb3N0ICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhYm92ZSAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA8PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IG1vc3QgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYWJvdmUgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydE1vc3QsIFwiYXNzZXJ0TW9zdFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtb3N0XCIsIGFzc2VydE1vc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImx0ZVwiLCBhc3NlcnRNb3N0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsZXNzVGhhbk9yRXF1YWxcIiwgYXNzZXJ0TW9zdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwid2l0aGluXCIsIGZ1bmN0aW9uKHN0YXJ0LCBmaW5pc2gsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBzdGFydFR5cGUgPSB0eXBlKHN0YXJ0KS50b0xvd2VyQ2FzZSgpLCBmaW5pc2hUeXBlID0gdHlwZShmaW5pc2gpLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlLCByYW5nZSA9IHN0YXJ0VHlwZSA9PT0gXCJkYXRlXCIgJiYgZmluaXNoVHlwZSA9PT0gXCJkYXRlXCIgPyBzdGFydC50b0lTT1N0cmluZygpICsgXCIuLlwiICsgZmluaXNoLnRvSVNPU3RyaW5nKCkgOiBzdGFydCArIFwiLi5cIiArIGZpbmlzaDtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgb2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgKHN0YXJ0VHlwZSAhPT0gXCJkYXRlXCIgfHwgZmluaXNoVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnRzIHRvIHdpdGhpbiBtdXN0IGJlIGRhdGVzXCI7XG4gIH0gZWxzZSBpZiAoKCFpc051bWVyaWMoc3RhcnQpIHx8ICFpc051bWVyaWMoZmluaXNoKSkgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50cyB0byB3aXRoaW4gbXVzdCBiZSBudW1iZXJzXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkge1xuICAgIGxldCBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICBsZXQgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50ID49IHN0YXJ0ICYmIGl0ZW1zQ291bnQgPD0gZmluaXNoLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiB3aXRoaW4gXCIgKyByYW5nZSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIHdpdGhpbiBcIiArIHJhbmdlXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA+PSBzdGFydCAmJiBvYmogPD0gZmluaXNoLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHdpdGhpbiBcIiArIHJhbmdlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSB3aXRoaW4gXCIgKyByYW5nZVxuICAgICk7XG4gIH1cbn0pO1xuZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VPZihjb25zdHJ1Y3RvciwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgdGFyZ2V0ID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGxldCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBsZXQgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgbGV0IGlzSW5zdGFuY2VPZjtcbiAgdHJ5IHtcbiAgICBpc0luc3RhbmNlT2YgPSB0YXJnZXQgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwiVGhlIGluc3RhbmNlb2YgYXNzZXJ0aW9uIG5lZWRzIGEgY29uc3RydWN0b3IgYnV0IFwiICsgdHlwZShjb25zdHJ1Y3RvcikgKyBcIiB3YXMgZ2l2ZW4uXCIsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIGxldCBuYW1lID0gZ2V0TmFtZShjb25zdHJ1Y3Rvcik7XG4gIGlmIChuYW1lID09IG51bGwpIHtcbiAgICBuYW1lID0gXCJhbiB1bm5hbWVkIGNvbnN0cnVjdG9yXCI7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNJbnN0YW5jZU9mLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhbiBpbnN0YW5jZSBvZiBcIiArIG5hbWUsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhbiBpbnN0YW5jZSBvZiBcIiArIG5hbWVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRJbnN0YW5jZU9mLCBcImFzc2VydEluc3RhbmNlT2ZcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5zdGFuY2VvZlwiLCBhc3NlcnRJbnN0YW5jZU9mKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbnN0YW5jZU9mXCIsIGFzc2VydEluc3RhbmNlT2YpO1xuZnVuY3Rpb24gYXNzZXJ0UHJvcGVydHkobmFtZSwgdmFsLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBpc05lc3RlZCA9IGZsYWcyKHRoaXMsIFwibmVzdGVkXCIpLCBpc093biA9IGZsYWcyKHRoaXMsIFwib3duXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgbmFtZVR5cGUgPSB0eXBlb2YgbmFtZTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgaWYgKGlzTmVzdGVkKSB7XG4gICAgaWYgKG5hbWVUeXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcInRoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgbmVzdGVkIHN5bnRheFwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChuYW1lVHlwZSAhPT0gXCJzdHJpbmdcIiAmJiBuYW1lVHlwZSAhPT0gXCJudW1iZXJcIiAmJiBuYW1lVHlwZSAhPT0gXCJzeW1ib2xcIikge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCJ0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZywgbnVtYmVyLCBvciBzeW1ib2xcIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoaXNOZXN0ZWQgJiYgaXNPd24pIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgJ1RoZSBcIm5lc3RlZFwiIGFuZCBcIm93blwiIGZsYWdzIGNhbm5vdCBiZSBjb21iaW5lZC4nLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGZsYWdNc2cgKyBcIlRhcmdldCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuXCIsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxuICBsZXQgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSwgcGF0aEluZm8gPSBpc05lc3RlZCA/IGdldFBhdGhJbmZvKG9iaiwgbmFtZSkgOiBudWxsLCB2YWx1ZSA9IGlzTmVzdGVkID8gcGF0aEluZm8udmFsdWUgOiBvYmpbbmFtZV0sIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcbiAgbGV0IGRlc2NyaXB0b3IgPSBcIlwiO1xuICBpZiAoaXNEZWVwKSBkZXNjcmlwdG9yICs9IFwiZGVlcCBcIjtcbiAgaWYgKGlzT3duKSBkZXNjcmlwdG9yICs9IFwib3duIFwiO1xuICBpZiAoaXNOZXN0ZWQpIGRlc2NyaXB0b3IgKz0gXCJuZXN0ZWQgXCI7XG4gIGRlc2NyaXB0b3IgKz0gXCJwcm9wZXJ0eSBcIjtcbiAgbGV0IGhhc1Byb3BlcnR5MjtcbiAgaWYgKGlzT3duKSBoYXNQcm9wZXJ0eTIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBuYW1lKTtcbiAgZWxzZSBpZiAoaXNOZXN0ZWQpIGhhc1Byb3BlcnR5MiA9IHBhdGhJbmZvLmV4aXN0cztcbiAgZWxzZSBoYXNQcm9wZXJ0eTIgPSBoYXNQcm9wZXJ0eShvYmosIG5hbWUpO1xuICBpZiAoIW5lZ2F0ZSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKVxuICAgICk7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIgJiYgaXNFcWwodmFsLCB2YWx1ZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7ZXhwfSwgYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7YWN0fVwiLFxuICAgICAgdmFsLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIHZhbHVlKTtcbn1cbl9fbmFtZShhc3NlcnRQcm9wZXJ0eSwgXCJhc3NlcnRQcm9wZXJ0eVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJwcm9wZXJ0eVwiLCBhc3NlcnRQcm9wZXJ0eSk7XG5mdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eShfbmFtZSwgX3ZhbHVlLCBfbXNnKSB7XG4gIGZsYWcyKHRoaXMsIFwib3duXCIsIHRydWUpO1xuICBhc3NlcnRQcm9wZXJ0eS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuX19uYW1lKGFzc2VydE93blByb3BlcnR5LCBcImFzc2VydE93blByb3BlcnR5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm93blByb3BlcnR5XCIsIGFzc2VydE93blByb3BlcnR5KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJoYXZlT3duUHJvcGVydHlcIiwgYXNzZXJ0T3duUHJvcGVydHkpO1xuZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hbWUsIGRlc2NyaXB0b3IsIG1zZykge1xuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtc2cgPSBkZXNjcmlwdG9yO1xuICAgIGRlc2NyaXB0b3IgPSBudWxsO1xuICB9XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGxldCBhY3R1YWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qob2JqKSwgbmFtZSk7XG4gIGxldCBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgaWYgKGFjdHVhbERlc2NyaXB0b3IgJiYgZGVzY3JpcHRvcikge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZXFsKGRlc2NyaXB0b3IsIGFjdHVhbERlc2NyaXB0b3IpLFxuICAgICAgXCJleHBlY3RlZCB0aGUgb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSkgKyBcIiBvbiAje3RoaXN9IHRvIG1hdGNoIFwiICsgaW5zcGVjdDIoZGVzY3JpcHRvcikgKyBcIiwgZ290IFwiICsgaW5zcGVjdDIoYWN0dWFsRGVzY3JpcHRvciksXG4gICAgICBcImV4cGVjdGVkIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgXCIgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9uICN7dGhpc30gdG8gbm90IG1hdGNoIFwiICsgaW5zcGVjdDIoZGVzY3JpcHRvciksXG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgYWN0dWFsRGVzY3JpcHRvcixcbiAgICAgIHRydWVcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgYWN0dWFsRGVzY3JpcHRvcixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpXG4gICAgKTtcbiAgfVxuICBmbGFnMih0aGlzLCBcIm9iamVjdFwiLCBhY3R1YWxEZXNjcmlwdG9yKTtcbn1cbl9fbmFtZShhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwiYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm93blByb3BlcnR5RGVzY3JpcHRvclwiLCBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImhhdmVPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIiwgYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKTtcbmZ1bmN0aW9uIGFzc2VydExlbmd0aENoYWluKCkge1xuICBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIsIHRydWUpO1xufVxuX19uYW1lKGFzc2VydExlbmd0aENoYWluLCBcImFzc2VydExlbmd0aENoYWluXCIpO1xuZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoKG4sIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICBzd2l0Y2ggKG9ialR5cGUpIHtcbiAgICBjYXNlIFwibWFwXCI6XG4gICAgY2FzZSBcInNldFwiOlxuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgaXRlbXNDb3VudCA9PSBuLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgb2YgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgb2YgI3thY3R9XCIsXG4gICAgbixcbiAgICBpdGVtc0NvdW50XG4gICk7XG59XG5fX25hbWUoYXNzZXJ0TGVuZ3RoLCBcImFzc2VydExlbmd0aFwiKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJsZW5ndGhcIiwgYXNzZXJ0TGVuZ3RoLCBhc3NlcnRMZW5ndGhDaGFpbik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwibGVuZ3RoT2ZcIiwgYXNzZXJ0TGVuZ3RoLCBhc3NlcnRMZW5ndGhDaGFpbik7XG5mdW5jdGlvbiBhc3NlcnRNYXRjaChyZSwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHJlLmV4ZWMob2JqKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbWF0Y2ggXCIgKyByZSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIG1hdGNoIFwiICsgcmVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRNYXRjaCwgXCJhc3NlcnRNYXRjaFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtYXRjaFwiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibWF0Y2hlc1wiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic3RyaW5nXCIsIGZ1bmN0aW9uKHN0ciwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwic3RyaW5nXCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB+b2JqLmluZGV4T2Yoc3RyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gY29udGFpbiBcIiArIGluc3BlY3QyKHN0ciksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIFwiICsgaW5zcGVjdDIoc3RyKVxuICApO1xufSk7XG5mdW5jdGlvbiBhc3NlcnRLZXlzKGtleXMpIHtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLCBrZXlzVHlwZSA9IHR5cGUoa2V5cyksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgc3RyLCBkZWVwU3RyID0gXCJcIiwgYWN0dWFsLCBvayA9IHRydWUsIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gIGxldCBtaXhlZEFyZ3NNc2cgPSBmbGFnTXNnICsgXCJ3aGVuIHRlc3Rpbmcga2V5cyBhZ2FpbnN0IGFuIG9iamVjdCBvciBhbiBhcnJheSB5b3UgbXVzdCBnaXZlIGEgc2luZ2xlIEFycmF5fE9iamVjdHxTdHJpbmcgYXJndW1lbnQgb3IgbXVsdGlwbGUgU3RyaW5nIGFyZ3VtZW50c1wiO1xuICBpZiAob2JqVHlwZSA9PT0gXCJNYXBcIiB8fCBvYmpUeXBlID09PSBcIlNldFwiKSB7XG4gICAgZGVlcFN0ciA9IGlzRGVlcCA/IFwiZGVlcGx5IFwiIDogXCJcIjtcbiAgICBhY3R1YWwgPSBbXTtcbiAgICBvYmouZm9yRWFjaChmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgYWN0dWFsLnB1c2goa2V5KTtcbiAgICB9KTtcbiAgICBpZiAoa2V5c1R5cGUgIT09IFwiQXJyYXlcIikge1xuICAgICAga2V5cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFjdHVhbCA9IGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaik7XG4gICAgc3dpdGNoIChrZXlzVHlwZSkge1xuICAgICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHZvaWQgMCwgc3NmaSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHZvaWQgMCwgc3NmaSk7XG4gICAgICAgIH1cbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGtleXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cbiAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJzeW1ib2xcIiA/IHZhbCA6IFN0cmluZyh2YWwpO1xuICAgIH0pO1xuICB9XG4gIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyArIFwia2V5cyByZXF1aXJlZFwiLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGxldCBsZW4gPSBrZXlzLmxlbmd0aCwgYW55ID0gZmxhZzIodGhpcywgXCJhbnlcIiksIGFsbCA9IGZsYWcyKHRoaXMsIFwiYWxsXCIpLCBleHBlY3RlZCA9IGtleXMsIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcbiAgaWYgKCFhbnkgJiYgIWFsbCkge1xuICAgIGFsbCA9IHRydWU7XG4gIH1cbiAgaWYgKGFueSkge1xuICAgIG9rID0gZXhwZWN0ZWQuc29tZShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBpZiAoYWxsKSB7XG4gICAgb2sgPSBleHBlY3RlZC5ldmVyeShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoIWZsYWcyKHRoaXMsIFwiY29udGFpbnNcIikpIHtcbiAgICAgIG9rID0gb2sgJiYga2V5cy5sZW5ndGggPT0gYWN0dWFsLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gaW5zcGVjdDIoa2V5KTtcbiAgICB9KTtcbiAgICBsZXQgbGFzdCA9IGtleXMucG9wKCk7XG4gICAgaWYgKGFsbCkge1xuICAgICAgc3RyID0ga2V5cy5qb2luKFwiLCBcIikgKyBcIiwgYW5kIFwiICsgbGFzdDtcbiAgICB9XG4gICAgaWYgKGFueSkge1xuICAgICAgc3RyID0ga2V5cy5qb2luKFwiLCBcIikgKyBcIiwgb3IgXCIgKyBsYXN0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBpbnNwZWN0MihrZXlzWzBdKTtcbiAgfVxuICBzdHIgPSAobGVuID4gMSA/IFwia2V5cyBcIiA6IFwia2V5IFwiKSArIHN0cjtcbiAgc3RyID0gKGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIikgPyBcImNvbnRhaW4gXCIgOiBcImhhdmUgXCIpICsgc3RyO1xuICB0aGlzLmFzc2VydChcbiAgICBvayxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gXCIgKyBkZWVwU3RyICsgc3RyLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgXCIgKyBkZWVwU3RyICsgc3RyLFxuICAgIGV4cGVjdGVkLnNsaWNlKDApLnNvcnQoY29tcGFyZUJ5SW5zcGVjdCksXG4gICAgYWN0dWFsLnNvcnQoY29tcGFyZUJ5SW5zcGVjdCksXG4gICAgdHJ1ZVxuICApO1xufVxuX19uYW1lKGFzc2VydEtleXMsIFwiYXNzZXJ0S2V5c1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJrZXlzXCIsIGFzc2VydEtleXMpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImtleVwiLCBhc3NlcnRLZXlzKTtcbmZ1bmN0aW9uIGFzc2VydFRocm93cyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSB8fCBmYWxzZTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgaWYgKGlzUmVnRXhwMihlcnJvckxpa2UpIHx8IHR5cGVvZiBlcnJvckxpa2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBlcnJNc2dNYXRjaGVyID0gZXJyb3JMaWtlO1xuICAgIGVycm9yTGlrZSA9IG51bGw7XG4gIH1cbiAgbGV0IGNhdWdodEVycjtcbiAgbGV0IGVycm9yV2FzVGhyb3duID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgb2JqKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yV2FzVGhyb3duID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnIgPSBlcnI7XG4gIH1cbiAgbGV0IGV2ZXJ5QXJnSXNVbmRlZmluZWQgPSBlcnJvckxpa2UgPT09IHZvaWQgMCAmJiBlcnJNc2dNYXRjaGVyID09PSB2b2lkIDA7XG4gIGxldCBldmVyeUFyZ0lzRGVmaW5lZCA9IEJvb2xlYW4oZXJyb3JMaWtlICYmIGVyck1zZ01hdGNoZXIpO1xuICBsZXQgZXJyb3JMaWtlRmFpbCA9IGZhbHNlO1xuICBsZXQgZXJyTXNnTWF0Y2hlckZhaWwgPSBmYWxzZTtcbiAgaWYgKGV2ZXJ5QXJnSXNVbmRlZmluZWQgfHwgIWV2ZXJ5QXJnSXNVbmRlZmluZWQgJiYgIW5lZ2F0ZSkge1xuICAgIGxldCBlcnJvckxpa2VTdHJpbmcgPSBcImFuIGVycm9yXCI7XG4gICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnJvckxpa2VTdHJpbmcgPSBcIiN7ZXhwfVwiO1xuICAgIH0gZWxzZSBpZiAoZXJyb3JMaWtlKSB7XG4gICAgICBlcnJvckxpa2VTdHJpbmcgPSBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpO1xuICAgIH1cbiAgICBsZXQgYWN0dWFsID0gY2F1Z2h0RXJyO1xuICAgIGlmIChjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgYWN0dWFsID0gY2F1Z2h0RXJyLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2F1Z2h0RXJyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBhY3R1YWwgPSBjYXVnaHRFcnI7XG4gICAgfSBlbHNlIGlmIChjYXVnaHRFcnIgJiYgKHR5cGVvZiBjYXVnaHRFcnIgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhdWdodEVyciA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0dWFsID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKTtcbiAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBlcnJvcldhc1Rocm93bixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBcIiArIGVycm9yTGlrZVN0cmluZyxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgYW4gZXJyb3IgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICBlcnJvckxpa2UgJiYgZXJyb3JMaWtlLnRvU3RyaW5nKCksXG4gICAgICBhY3R1YWxcbiAgICApO1xuICB9XG4gIGlmIChlcnJvckxpa2UgJiYgY2F1Z2h0RXJyKSB7XG4gICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBsZXQgaXNDb21wYXRpYmxlSW5zdGFuY2UgPSBjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVJbnN0YW5jZShcbiAgICAgICAgY2F1Z2h0RXJyLFxuICAgICAgICBlcnJvckxpa2VcbiAgICAgICk7XG4gICAgICBpZiAoaXNDb21wYXRpYmxlSW5zdGFuY2UgPT09IG5lZ2F0ZSkge1xuICAgICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgICAgZXJyb3JMaWtlRmFpbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBuZWdhdGUsXG4gICAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH1cIiArIChjYXVnaHRFcnIgJiYgIW5lZ2F0ZSA/IFwiIGJ1dCAje2FjdH0gd2FzIHRocm93blwiIDogXCJcIiksXG4gICAgICAgICAgICBlcnJvckxpa2UudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGNhdWdodEVyci50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgaXNDb21wYXRpYmxlQ29uc3RydWN0b3IgPSBjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihcbiAgICAgIGNhdWdodEVycixcbiAgICAgIGVycm9yTGlrZVxuICAgICk7XG4gICAgaWYgKGlzQ29tcGF0aWJsZUNvbnN0cnVjdG9yID09PSBuZWdhdGUpIHtcbiAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgZXJyb3JMaWtlRmFpbCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBuZWdhdGUsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfVwiICsgKGNhdWdodEVyciA/IFwiIGJ1dCAje2FjdH0gd2FzIHRocm93blwiIDogXCJcIiksXG4gICAgICAgICAgZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckxpa2UudG9TdHJpbmcoKSA6IGVycm9yTGlrZSAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpLFxuICAgICAgICAgIGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yID8gY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiBjYXVnaHRFcnIgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoY2F1Z2h0RXJyICYmIGVyck1zZ01hdGNoZXIgIT09IHZvaWQgMCAmJiBlcnJNc2dNYXRjaGVyICE9PSBudWxsKSB7XG4gICAgbGV0IHBsYWNlaG9sZGVyID0gXCJpbmNsdWRpbmdcIjtcbiAgICBpZiAoaXNSZWdFeHAyKGVyck1zZ01hdGNoZXIpKSB7XG4gICAgICBwbGFjZWhvbGRlciA9IFwibWF0Y2hpbmdcIjtcbiAgICB9XG4gICAgbGV0IGlzQ29tcGF0aWJsZU1lc3NhZ2UgPSBjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVNZXNzYWdlKFxuICAgICAgY2F1Z2h0RXJyLFxuICAgICAgZXJyTXNnTWF0Y2hlclxuICAgICk7XG4gICAgaWYgKGlzQ29tcGF0aWJsZU1lc3NhZ2UgPT09IG5lZ2F0ZSkge1xuICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICBlcnJNc2dNYXRjaGVyRmFpbCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBuZWdhdGUsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yIFwiICsgcGxhY2Vob2xkZXIgKyBcIiAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgZXJyb3Igbm90IFwiICsgcGxhY2Vob2xkZXIgKyBcIiAje2V4cH1cIixcbiAgICAgICAgICBlcnJNc2dNYXRjaGVyLFxuICAgICAgICAgIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0TWVzc2FnZShjYXVnaHRFcnIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChlcnJvckxpa2VGYWlsICYmIGVyck1zZ01hdGNoZXJGYWlsKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBuZWdhdGUsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH1cIiArIChjYXVnaHRFcnIgPyBcIiBidXQgI3thY3R9IHdhcyB0aHJvd25cIiA6IFwiXCIpLFxuICAgICAgZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckxpa2UudG9TdHJpbmcoKSA6IGVycm9yTGlrZSAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpLFxuICAgICAgY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVnaHRFcnIudG9TdHJpbmcoKSA6IGNhdWdodEVyciAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpXG4gICAgKTtcbiAgfVxuICBmbGFnMih0aGlzLCBcIm9iamVjdFwiLCBjYXVnaHRFcnIpO1xufVxuX19uYW1lKGFzc2VydFRocm93cywgXCJhc3NlcnRUaHJvd3NcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwidGhyb3dcIiwgYXNzZXJ0VGhyb3dzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJ0aHJvd3NcIiwgYXNzZXJ0VGhyb3dzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJUaHJvd1wiLCBhc3NlcnRUaHJvd3MpO1xuZnVuY3Rpb24gcmVzcG9uZFRvKG1ldGhvZCwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGl0c2VsZiA9IGZsYWcyKHRoaXMsIFwiaXRzZWxmXCIpLCBjb250ZXh0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb2JqICYmICFpdHNlbGYgPyBvYmoucHJvdG90eXBlW21ldGhvZF0gOiBvYmpbbWV0aG9kXTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGV4dCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gcmVzcG9uZCB0byBcIiArIGluc3BlY3QyKG1ldGhvZCksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCByZXNwb25kIHRvIFwiICsgaW5zcGVjdDIobWV0aG9kKVxuICApO1xufVxuX19uYW1lKHJlc3BvbmRUbywgXCJyZXNwb25kVG9cIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZFRvXCIsIHJlc3BvbmRUbyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZHNUb1wiLCByZXNwb25kVG8pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiaXRzZWxmXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIml0c2VsZlwiLCB0cnVlKTtcbn0pO1xuZnVuY3Rpb24gc2F0aXNmeShtYXRjaGVyLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgbGV0IHJlc3VsdCA9IG1hdGNoZXIob2JqKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgcmVzdWx0LFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBzYXRpc2Z5IFwiICsgb2JqRGlzcGxheShtYXRjaGVyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHNhdGlzZnlcIiArIG9iakRpc3BsYXkobWF0Y2hlciksXG4gICAgZmxhZzIodGhpcywgXCJuZWdhdGVcIikgPyBmYWxzZSA6IHRydWUsXG4gICAgcmVzdWx0XG4gICk7XG59XG5fX25hbWUoc2F0aXNmeSwgXCJzYXRpc2Z5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInNhdGlzZnlcIiwgc2F0aXNmeSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic2F0aXNmaWVzXCIsIHNhdGlzZnkpO1xuZnVuY3Rpb24gY2xvc2VUbyhleHBlY3RlZCwgZGVsdGEsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMubnVtZXJpYztcbiAgbGV0IG1lc3NhZ2UgPSBcIkEgYGRlbHRhYCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgYGNsb3NlVG9gXCI7XG4gIGlmIChkZWx0YSA9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnID8gYCR7ZmxhZ01zZ306ICR7bWVzc2FnZX1gIDogbWVzc2FnZSxcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZGVsdGEsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIG1lc3NhZ2UgPSBcIkEgYGV4cGVjdGVkYCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgYGNsb3NlVG9gXCI7XG4gIGlmIChleHBlY3RlZCA9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnID8gYCR7ZmxhZ01zZ306ICR7bWVzc2FnZX1gIDogbWVzc2FnZSxcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZXhwZWN0ZWQsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIGNvbnN0IGFicyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgpID0+IHggPCAwID8gLXggOiB4LCBcImFic1wiKTtcbiAgY29uc3Qgc3RyaXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChudW1iZXIpID0+IHBhcnNlRmxvYXQocGFyc2VGbG9hdChudW1iZXIpLnRvUHJlY2lzaW9uKDEyKSksIFwic3RyaXBcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHN0cmlwKGFicyhvYmogLSBleHBlY3RlZCkpIDw9IGRlbHRhLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBjbG9zZSB0byBcIiArIGV4cGVjdGVkICsgXCIgKy8tIFwiICsgZGVsdGEsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBjbG9zZSB0byBcIiArIGV4cGVjdGVkICsgXCIgKy8tIFwiICsgZGVsdGFcbiAgKTtcbn1cbl9fbmFtZShjbG9zZVRvLCBcImNsb3NlVG9cIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiY2xvc2VUb1wiLCBjbG9zZVRvKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJhcHByb3hpbWF0ZWx5XCIsIGNsb3NlVG8pO1xuZnVuY3Rpb24gaXNTdWJzZXRPZihfc3Vic2V0LCBfc3VwZXJzZXQsIGNtcCwgY29udGFpbnMsIG9yZGVyZWQpIHtcbiAgbGV0IHN1cGVyc2V0ID0gQXJyYXkuZnJvbShfc3VwZXJzZXQpO1xuICBsZXQgc3Vic2V0ID0gQXJyYXkuZnJvbShfc3Vic2V0KTtcbiAgaWYgKCFjb250YWlucykge1xuICAgIGlmIChzdWJzZXQubGVuZ3RoICE9PSBzdXBlcnNldC5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBzdXBlcnNldCA9IHN1cGVyc2V0LnNsaWNlKCk7XG4gIH1cbiAgcmV0dXJuIHN1YnNldC5ldmVyeShmdW5jdGlvbihlbGVtLCBpZHgpIHtcbiAgICBpZiAob3JkZXJlZCkgcmV0dXJuIGNtcCA/IGNtcChlbGVtLCBzdXBlcnNldFtpZHhdKSA6IGVsZW0gPT09IHN1cGVyc2V0W2lkeF07XG4gICAgaWYgKCFjbXApIHtcbiAgICAgIGxldCBtYXRjaElkeCA9IHN1cGVyc2V0LmluZGV4T2YoZWxlbSk7XG4gICAgICBpZiAobWF0Y2hJZHggPT09IC0xKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWNvbnRhaW5zKSBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzdXBlcnNldC5zb21lKGZ1bmN0aW9uKGVsZW0yLCBtYXRjaElkeCkge1xuICAgICAgaWYgKCFjbXAoZWxlbSwgZWxlbTIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWNvbnRhaW5zKSBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0pO1xufVxuX19uYW1lKGlzU3Vic2V0T2YsIFwiaXNTdWJzZXRPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtZW1iZXJzXCIsIGZ1bmN0aW9uKHN1YnNldCwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5pdGVyYWJsZTtcbiAgbmV3IEFzc2VydGlvbihzdWJzZXQsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLml0ZXJhYmxlO1xuICBsZXQgY29udGFpbnMgPSBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIpO1xuICBsZXQgb3JkZXJlZCA9IGZsYWcyKHRoaXMsIFwib3JkZXJlZFwiKTtcbiAgbGV0IHN1YmplY3QsIGZhaWxNc2csIGZhaWxOZWdhdGVNc2c7XG4gIGlmIChjb250YWlucykge1xuICAgIHN1YmplY3QgPSBvcmRlcmVkID8gXCJhbiBvcmRlcmVkIHN1cGVyc2V0XCIgOiBcImEgc3VwZXJzZXRcIjtcbiAgICBmYWlsTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIFwiICsgc3ViamVjdCArIFwiIG9mICN7ZXhwfVwiO1xuICAgIGZhaWxOZWdhdGVNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIFwiICsgc3ViamVjdCArIFwiIG9mICN7ZXhwfVwiO1xuICB9IGVsc2Uge1xuICAgIHN1YmplY3QgPSBvcmRlcmVkID8gXCJvcmRlcmVkIG1lbWJlcnNcIiA6IFwibWVtYmVyc1wiO1xuICAgIGZhaWxNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSB0aGUgc2FtZSBcIiArIHN1YmplY3QgKyBcIiBhcyAje2V4cH1cIjtcbiAgICBmYWlsTmVnYXRlTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIHRoZSBzYW1lIFwiICsgc3ViamVjdCArIFwiIGFzICN7ZXhwfVwiO1xuICB9XG4gIGxldCBjbXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIikgPyBmbGFnMih0aGlzLCBcImVxbFwiKSA6IHZvaWQgMDtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNTdWJzZXRPZihzdWJzZXQsIG9iaiwgY21wLCBjb250YWlucywgb3JkZXJlZCksXG4gICAgZmFpbE1zZyxcbiAgICBmYWlsTmVnYXRlTXNnLFxuICAgIHN1YnNldCxcbiAgICBvYmosXG4gICAgdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJpdGVyYWJsZVwiLCBmdW5jdGlvbihtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgb2JqICE9IHZvaWQgMCAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYW4gaXRlcmFibGVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGFuIGl0ZXJhYmxlXCIsXG4gICAgb2JqXG4gICk7XG59KTtcbmZ1bmN0aW9uIG9uZU9mKGxpc3QsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IGV4cGVjdGVkID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGNvbnRhaW5zID0gZmxhZzIodGhpcywgXCJjb250YWluc1wiKSwgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgbmV3IEFzc2VydGlvbihsaXN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbihcImFycmF5XCIpO1xuICBpZiAoY29udGFpbnMpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQuaW5kZXhPZihwb3NzaWJpbGl0eSkgPiAtMTtcbiAgICAgIH0pLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gb25lIG9mICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIG9uZSBvZiAje2V4cH1cIixcbiAgICAgIGxpc3QsXG4gICAgICBleHBlY3RlZFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVlcCkge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICAgIHJldHVybiBlcWwoZXhwZWN0ZWQsIHBvc3NpYmlsaXR5KTtcbiAgICAgICAgfSksXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgbGlzdCxcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBsaXN0LmluZGV4T2YoZXhwZWN0ZWQpID4gLTEsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBvbmUgb2YgI3tleHB9XCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBsaXN0LFxuICAgICAgICBleHBlY3RlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZShvbmVPZiwgXCJvbmVPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJvbmVPZlwiLCBvbmVPZik7XG5mdW5jdGlvbiBhc3NlcnRDaGFuZ2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IGZuID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24oZm4sIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgbGV0IGluaXRpYWw7XG4gIGlmICghcHJvcCkge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0KCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0W3Byb3BdO1xuICB9XG4gIGZuKCk7XG4gIGxldCBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgbGV0IG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImNoYW5nZVwiKTtcbiAgZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIiwgZmluYWwgIT09IGluaXRpYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBpbml0aWFsICE9PSBmaW5hbCxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gY2hhbmdlXCIsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBjaGFuZ2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydENoYW5nZXMsIFwiYXNzZXJ0Q2hhbmdlc1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjaGFuZ2VcIiwgYXNzZXJ0Q2hhbmdlcyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiY2hhbmdlc1wiLCBhc3NlcnRDaGFuZ2VzKTtcbmZ1bmN0aW9uIGFzc2VydEluY3JlYXNlcyhzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBmbiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIGxldCBpbml0aWFsO1xuICBpZiAoIXByb3ApIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICB9IGVsc2Uge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGluaXRpYWwsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJudW1iZXJcIik7XG4gIGZuKCk7XG4gIGxldCBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgbGV0IG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImluY3JlYXNlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBmaW5hbCAtIGluaXRpYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBmaW5hbCAtIGluaXRpYWwgPiAwLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBpbmNyZWFzZVwiLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgaW5jcmVhc2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydEluY3JlYXNlcywgXCJhc3NlcnRJbmNyZWFzZXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5jcmVhc2VcIiwgYXNzZXJ0SW5jcmVhc2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbmNyZWFzZXNcIiwgYXNzZXJ0SW5jcmVhc2VzKTtcbmZ1bmN0aW9uIGFzc2VydERlY3JlYXNlcyhzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBmbiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIGxldCBpbml0aWFsO1xuICBpZiAoIXByb3ApIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICB9IGVsc2Uge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGluaXRpYWwsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJudW1iZXJcIik7XG4gIGZuKCk7XG4gIGxldCBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgbGV0IG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImRlY3JlYXNlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBpbml0aWFsIC0gZmluYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBmaW5hbCAtIGluaXRpYWwgPCAwLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBkZWNyZWFzZVwiLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgZGVjcmVhc2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydERlY3JlYXNlcywgXCJhc3NlcnREZWNyZWFzZXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZGVjcmVhc2VcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJkZWNyZWFzZXNcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbmZ1bmN0aW9uIGFzc2VydERlbHRhKGRlbHRhLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBtc2dPYmogPSBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIpO1xuICBsZXQgaW5pdGlhbCA9IGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIik7XG4gIGxldCBmaW5hbCA9IGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIpO1xuICBsZXQgYmVoYXZpb3IgPSBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIik7XG4gIGxldCByZWFsRGVsdGEgPSBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiKTtcbiAgbGV0IGV4cHJlc3Npb247XG4gIGlmIChiZWhhdmlvciA9PT0gXCJjaGFuZ2VcIikge1xuICAgIGV4cHJlc3Npb24gPSBNYXRoLmFicyhmaW5hbCAtIGluaXRpYWwpID09PSBNYXRoLmFicyhkZWx0YSk7XG4gIH0gZWxzZSB7XG4gICAgZXhwcmVzc2lvbiA9IHJlYWxEZWx0YSA9PT0gTWF0aC5hYnMoZGVsdGEpO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGV4cHJlc3Npb24sXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIFwiICsgYmVoYXZpb3IgKyBcIiBieSBcIiArIGRlbHRhLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgXCIgKyBiZWhhdmlvciArIFwiIGJ5IFwiICsgZGVsdGFcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnREZWx0YSwgXCJhc3NlcnREZWx0YVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJieVwiLCBhc3NlcnREZWx0YSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleHRlbnNpYmxlXCIsIGZ1bmN0aW9uKCkge1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGxldCBpc0V4dGVuc2libGUgPSBvYmogPT09IE9iamVjdChvYmopICYmIE9iamVjdC5pc0V4dGVuc2libGUob2JqKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNFeHRlbnNpYmxlLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBleHRlbnNpYmxlXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBleHRlbnNpYmxlXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwic2VhbGVkXCIsIGZ1bmN0aW9uKCkge1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGxldCBpc1NlYWxlZCA9IG9iaiA9PT0gT2JqZWN0KG9iaikgPyBPYmplY3QuaXNTZWFsZWQob2JqKSA6IHRydWU7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzU2VhbGVkLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBzZWFsZWRcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIHNlYWxlZFwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImZyb3plblwiLCBmdW5jdGlvbigpIHtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICBsZXQgaXNGcm96ZW4gPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzRnJvemVuKG9iaikgOiB0cnVlO1xuICB0aGlzLmFzc2VydChcbiAgICBpc0Zyb3plbixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZnJvemVuXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBmcm96ZW5cIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJmaW5pdGVcIiwgZnVuY3Rpb24oX21zZykge1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUob2JqKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYSBmaW5pdGUgbnVtYmVyXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhIGZpbml0ZSBudW1iZXJcIlxuICApO1xufSk7XG5mdW5jdGlvbiBjb21wYXJlU3Vic2V0KGV4cGVjdGVkLCBhY3R1YWwpIHtcbiAgaWYgKGV4cGVjdGVkID09PSBhY3R1YWwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGFjdHVhbCAhPT0gdHlwZW9mIGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgIT09IFwib2JqZWN0XCIgfHwgZXhwZWN0ZWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQgPT09IGFjdHVhbDtcbiAgfVxuICBpZiAoIWFjdHVhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWN0dWFsKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZXhwZWN0ZWQuZXZlcnkoZnVuY3Rpb24oZXhwKSB7XG4gICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0KSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlU3Vic2V0KGV4cCwgYWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGlmIChleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkLmdldFRpbWUoKSA9PT0gYWN0dWFsLmdldFRpbWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoZXhwZWN0ZWQpLmV2ZXJ5KGZ1bmN0aW9uKGtleSkge1xuICAgIGxldCBleHBlY3RlZFZhbHVlID0gZXhwZWN0ZWRba2V5XTtcbiAgICBsZXQgYWN0dWFsVmFsdWUgPSBhY3R1YWxba2V5XTtcbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkVmFsdWUgPT09IFwib2JqZWN0XCIgJiYgZXhwZWN0ZWRWYWx1ZSAhPT0gbnVsbCAmJiBhY3R1YWxWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVTdWJzZXQoZXhwZWN0ZWRWYWx1ZSwgYWN0dWFsVmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkVmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkVmFsdWUoYWN0dWFsVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gYWN0dWFsVmFsdWUgPT09IGV4cGVjdGVkVmFsdWU7XG4gIH0pO1xufVxuX19uYW1lKGNvbXBhcmVTdWJzZXQsIFwiY29tcGFyZVN1YnNldFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjb250YWluU3Vic2V0XCIsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gIGNvbnN0IGFjdHVhbCA9IGZsYWcodGhpcywgXCJvYmplY3RcIik7XG4gIGNvbnN0IHNob3dEaWZmID0gY29uZmlnLnNob3dEaWZmO1xuICB0aGlzLmFzc2VydChcbiAgICBjb21wYXJlU3Vic2V0KGV4cGVjdGVkLCBhY3R1YWwpLFxuICAgIFwiZXhwZWN0ZWQgI3thY3R9IHRvIGNvbnRhaW4gc3Vic2V0ICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3thY3R9IHRvIG5vdCBjb250YWluIHN1YnNldCAje2V4cH1cIixcbiAgICBleHBlY3RlZCxcbiAgICBhY3R1YWwsXG4gICAgc2hvd0RpZmZcbiAgKTtcbn0pO1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2UvZXhwZWN0LmpzXG5mdW5jdGlvbiBleHBlY3QodmFsLCBtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKHZhbCwgbWVzc2FnZSk7XG59XG5fX25hbWUoZXhwZWN0LCBcImV4cGVjdFwiKTtcbmV4cGVjdC5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICBhY3R1YWwgPSB2b2lkIDA7XG4gIH1cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJleHBlY3QuZmFpbCgpXCI7XG4gIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICBtZXNzYWdlLFxuICAgIHtcbiAgICAgIGFjdHVhbCxcbiAgICAgIGV4cGVjdGVkLFxuICAgICAgb3BlcmF0b3JcbiAgICB9LFxuICAgIGV4cGVjdC5mYWlsXG4gICk7XG59O1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2Uvc2hvdWxkLmpzXG52YXIgc2hvdWxkX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNob3VsZF9leHBvcnRzLCB7XG4gIFNob3VsZDogKCkgPT4gU2hvdWxkLFxuICBzaG91bGQ6ICgpID0+IHNob3VsZFxufSk7XG5mdW5jdGlvbiBsb2FkU2hvdWxkKCkge1xuICBmdW5jdGlvbiBzaG91bGRHZXR0ZXIoKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdGhpcyBpbnN0YW5jZW9mIE51bWJlciB8fCB0aGlzIGluc3RhbmNlb2YgQm9vbGVhbiB8fCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIFN5bWJvbCB8fCB0eXBlb2YgQmlnSW50ID09PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIEJpZ0ludCkge1xuICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcy52YWx1ZU9mKCksIG51bGwsIHNob3VsZEdldHRlcik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHRoaXMsIG51bGwsIHNob3VsZEdldHRlcik7XG4gIH1cbiAgX19uYW1lKHNob3VsZEdldHRlciwgXCJzaG91bGRHZXR0ZXJcIik7XG4gIGZ1bmN0aW9uIHNob3VsZFNldHRlcih2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNob3VsZFwiLCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIF9fbmFtZShzaG91bGRTZXR0ZXIsIFwic2hvdWxkU2V0dGVyXCIpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgXCJzaG91bGRcIiwge1xuICAgIHNldDogc2hvdWxkU2V0dGVyLFxuICAgIGdldDogc2hvdWxkR2V0dGVyLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgbGV0IHNob3VsZDIgPSB7fTtcbiAgc2hvdWxkMi5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgICBhY3R1YWwgPSB2b2lkIDA7XG4gICAgfVxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IFwic2hvdWxkLmZhaWwoKVwiO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB7XG4gICAgICAgIGFjdHVhbCxcbiAgICAgICAgZXhwZWN0ZWQsXG4gICAgICAgIG9wZXJhdG9yXG4gICAgICB9LFxuICAgICAgc2hvdWxkMi5mYWlsXG4gICAgKTtcbiAgfTtcbiAgc2hvdWxkMi5lcXVhbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdHVhbCwgbWVzc2FnZSkudG8uZXF1YWwoZXhwZWN0ZWQpO1xuICB9O1xuICBzaG91bGQyLlRocm93ID0gZnVuY3Rpb24oZm4sIGVycnQsIGVycnMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8uVGhyb3coZXJydCwgZXJycyk7XG4gIH07XG4gIHNob3VsZDIuZXhpc3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmV4aXN0O1xuICB9O1xuICBzaG91bGQyLm5vdCA9IHt9O1xuICBzaG91bGQyLm5vdC5lcXVhbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0dWFsLCBtc2cpLnRvLm5vdC5lcXVhbChleHBlY3RlZCk7XG4gIH07XG4gIHNob3VsZDIubm90LlRocm93ID0gZnVuY3Rpb24oZm4sIGVycnQsIGVycnMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8ubm90LlRocm93KGVycnQsIGVycnMpO1xuICB9O1xuICBzaG91bGQyLm5vdC5leGlzdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmV4aXN0O1xuICB9O1xuICBzaG91bGQyW1widGhyb3dcIl0gPSBzaG91bGQyW1wiVGhyb3dcIl07XG4gIHNob3VsZDIubm90W1widGhyb3dcIl0gPSBzaG91bGQyLm5vdFtcIlRocm93XCJdO1xuICByZXR1cm4gc2hvdWxkMjtcbn1cbl9fbmFtZShsb2FkU2hvdWxkLCBcImxvYWRTaG91bGRcIik7XG52YXIgc2hvdWxkID0gbG9hZFNob3VsZDtcbnZhciBTaG91bGQgPSBsb2FkU2hvdWxkO1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2UvYXNzZXJ0LmpzXG5mdW5jdGlvbiBhc3NlcnQoZXhwcmVzcywgZXJybXNnKSB7XG4gIGxldCB0ZXN0MiA9IG5ldyBBc3NlcnRpb24obnVsbCwgbnVsbCwgYXNzZXJ0LCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KGV4cHJlc3MsIGVycm1zZywgXCJbIG5lZ2F0aW9uIG1lc3NhZ2UgdW5hdmFpbGFibGUgXVwiKTtcbn1cbl9fbmFtZShhc3NlcnQsIFwiYXNzZXJ0XCIpO1xuYXNzZXJ0LmZhaWwgPSBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgIGFjdHVhbCA9IHZvaWQgMDtcbiAgfVxuICBtZXNzYWdlID0gbWVzc2FnZSB8fCBcImFzc2VydC5mYWlsKClcIjtcbiAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgIG1lc3NhZ2UsXG4gICAge1xuICAgICAgYWN0dWFsLFxuICAgICAgZXhwZWN0ZWQsXG4gICAgICBvcGVyYXRvclxuICAgIH0sXG4gICAgYXNzZXJ0LmZhaWxcbiAgKTtcbn07XG5hc3NlcnQuaXNPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09rLCB0cnVlKS5pcy5vaztcbn07XG5hc3NlcnQuaXNOb3RPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE9rLCB0cnVlKS5pcy5ub3Qub2s7XG59O1xuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBsZXQgdGVzdDIgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuZXF1YWwsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgZXhwID09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7YWN0fVwiLFxuICAgIGV4cCxcbiAgICBhY3QsXG4gICAgdHJ1ZVxuICApO1xufTtcbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgbGV0IHRlc3QyID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdEVxdWFsLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIGV4cCAhPSBmbGFnKHRlc3QyLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2FjdH1cIixcbiAgICBleHAsXG4gICAgYWN0LFxuICAgIHRydWVcbiAgKTtcbn07XG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5zdHJpY3RFcXVhbCwgdHJ1ZSkudG8uZXF1YWwoZXhwKTtcbn07XG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3RTdHJpY3RFcXVhbCwgdHJ1ZSkudG8ubm90LmVxdWFsKGV4cCk7XG59O1xuYXNzZXJ0LmRlZXBFcXVhbCA9IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5kZWVwRXF1YWwsIHRydWUpLnRvLmVxbChleHApO1xufTtcbmFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3REZWVwRXF1YWwsIHRydWUpLnRvLm5vdC5lcWwoZXhwKTtcbn07XG5hc3NlcnQuaXNBYm92ZSA9IGZ1bmN0aW9uKHZhbCwgYWJ2LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQWJvdmUsIHRydWUpLnRvLmJlLmFib3ZlKGFidik7XG59O1xuYXNzZXJ0LmlzQXRMZWFzdCA9IGZ1bmN0aW9uKHZhbCwgYXRsc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdExlYXN0LCB0cnVlKS50by5iZS5sZWFzdChhdGxzdCk7XG59O1xuYXNzZXJ0LmlzQmVsb3cgPSBmdW5jdGlvbih2YWwsIGJsdywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0JlbG93LCB0cnVlKS50by5iZS5iZWxvdyhibHcpO1xufTtcbmFzc2VydC5pc0F0TW9zdCA9IGZ1bmN0aW9uKHZhbCwgYXRtc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdE1vc3QsIHRydWUpLnRvLmJlLm1vc3QoYXRtc3QpO1xufTtcbmFzc2VydC5pc1RydWUgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNUcnVlLCB0cnVlKS5pc1tcInRydWVcIl07XG59O1xuYXNzZXJ0LmlzTm90VHJ1ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFRydWUsIHRydWUpLnRvLm5vdC5lcXVhbCh0cnVlKTtcbn07XG5hc3NlcnQuaXNGYWxzZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0ZhbHNlLCB0cnVlKS5pc1tcImZhbHNlXCJdO1xufTtcbmFzc2VydC5pc05vdEZhbHNlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RmFsc2UsIHRydWUpLnRvLm5vdC5lcXVhbChmYWxzZSk7XG59O1xuYXNzZXJ0LmlzTnVsbCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bGwsIHRydWUpLnRvLmVxdWFsKG51bGwpO1xufTtcbmFzc2VydC5pc05vdE51bGwgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdWxsLCB0cnVlKS50by5ub3QuZXF1YWwobnVsbCk7XG59O1xuYXNzZXJ0LmlzTmFOID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTmFOLCB0cnVlKS50by5iZS5OYU47XG59O1xuYXNzZXJ0LmlzTm90TmFOID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0LmlzTm90TmFOLCB0cnVlKS5ub3QudG8uYmUuTmFOO1xufTtcbmFzc2VydC5leGlzdHMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuZXhpc3RzLCB0cnVlKS50by5leGlzdDtcbn07XG5hc3NlcnQubm90RXhpc3RzID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lm5vdEV4aXN0cywgdHJ1ZSkudG8ubm90LmV4aXN0O1xufTtcbmFzc2VydC5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1VuZGVmaW5lZCwgdHJ1ZSkudG8uZXF1YWwodm9pZCAwKTtcbn07XG5hc3NlcnQuaXNEZWZpbmVkID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRGVmaW5lZCwgdHJ1ZSkudG8ubm90LmVxdWFsKHZvaWQgMCk7XG59O1xuYXNzZXJ0LmlzQ2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNDYWxsYWJsZSwgdHJ1ZSkuaXMuY2FsbGFibGU7XG59O1xuYXNzZXJ0LmlzTm90Q2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNOb3RDYWxsYWJsZSwgdHJ1ZSkuaXMubm90LmNhbGxhYmxlO1xufTtcbmFzc2VydC5pc09iamVjdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09iamVjdCwgdHJ1ZSkudG8uYmUuYShcIm9iamVjdFwiKTtcbn07XG5hc3NlcnQuaXNOb3RPYmplY3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPYmplY3QsIHRydWUpLnRvLm5vdC5iZS5hKFwib2JqZWN0XCIpO1xufTtcbmFzc2VydC5pc0FycmF5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXJyYXksIHRydWUpLnRvLmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzTm90QXJyYXkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RBcnJheSwgdHJ1ZSkudG8ubm90LmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzU3RyaW5nID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzU3RyaW5nLCB0cnVlKS50by5iZS5hKFwic3RyaW5nXCIpO1xufTtcbmFzc2VydC5pc05vdFN0cmluZyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFN0cmluZywgdHJ1ZSkudG8ubm90LmJlLmEoXCJzdHJpbmdcIik7XG59O1xuYXNzZXJ0LmlzTnVtYmVyID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVtYmVyLCB0cnVlKS50by5iZS5hKFwibnVtYmVyXCIpO1xufTtcbmFzc2VydC5pc05vdE51bWJlciA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWJlciwgdHJ1ZSkudG8ubm90LmJlLmEoXCJudW1iZXJcIik7XG59O1xuYXNzZXJ0LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bWVyaWMsIHRydWUpLmlzLm51bWVyaWM7XG59O1xuYXNzZXJ0LmlzTm90TnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWVyaWMsIHRydWUpLmlzLm5vdC5udW1lcmljO1xufTtcbmFzc2VydC5pc0Zpbml0ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Zpbml0ZSwgdHJ1ZSkudG8uYmUuZmluaXRlO1xufTtcbmFzc2VydC5pc0Jvb2xlYW4gPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCb29sZWFuLCB0cnVlKS50by5iZS5hKFwiYm9vbGVhblwiKTtcbn07XG5hc3NlcnQuaXNOb3RCb29sZWFuID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90Qm9vbGVhbiwgdHJ1ZSkudG8ubm90LmJlLmEoXCJib29sZWFuXCIpO1xufTtcbmFzc2VydC50eXBlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LnR5cGVPZiwgdHJ1ZSkudG8uYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lm5vdFR5cGVPZiA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlMywgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQubm90VHlwZU9mLCB0cnVlKS50by5ub3QuYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lmluc3RhbmNlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lmluc3RhbmNlT2YsIHRydWUpLnRvLmJlLmluc3RhbmNlT2YodHlwZTMpO1xufTtcbmFzc2VydC5ub3RJbnN0YW5jZU9mID0gZnVuY3Rpb24odmFsLCB0eXBlMywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RJbnN0YW5jZU9mLCB0cnVlKS50by5ub3QuYmUuaW5zdGFuY2VPZihcbiAgICB0eXBlM1xuICApO1xufTtcbmFzc2VydC5pbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuaW5jbHVkZSwgdHJ1ZSkuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZSwgdHJ1ZSkubm90LmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQuZGVlcEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwSW5jbHVkZSwgdHJ1ZSkuZGVlcC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUsIHRydWUpLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlLCB0cnVlKS5ub3QubmVzdGVkLmluY2x1ZGUoXG4gICAgaW5jXG4gICk7XG59O1xuYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUsIHRydWUpLmRlZXAubmVzdGVkLmluY2x1ZGUoXG4gICAgaW5jXG4gICk7XG59O1xuYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIGV4cCxcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlLFxuICAgIHRydWVcbiAgKS5ub3QuZGVlcC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5vd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQub3duSW5jbHVkZSwgdHJ1ZSkub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90T3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE93bkluY2x1ZGUsIHRydWUpLm5vdC5vd24uaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwT3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBPd25JbmNsdWRlLCB0cnVlKS5kZWVwLm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcE93bkluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLm93bi5pbmNsdWRlKFxuICAgIGluY1xuICApO1xufTtcbmFzc2VydC5tYXRjaCA9IGZ1bmN0aW9uKGV4cCwgcmUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubWF0Y2gsIHRydWUpLnRvLm1hdGNoKHJlKTtcbn07XG5hc3NlcnQubm90TWF0Y2ggPSBmdW5jdGlvbihleHAsIHJlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE1hdGNoLCB0cnVlKS50by5ub3QubWF0Y2gocmUpO1xufTtcbmFzc2VydC5wcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5wcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubm90UHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90UHJvcGVydHksIHRydWUpLnRvLm5vdC5oYXZlLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5wcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LnByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm5vdFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90UHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLnByb3BlcnR5KFxuICAgIHByb3AsXG4gICAgdmFsXG4gICk7XG59O1xuYXNzZXJ0LmRlZXBQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5kZWVwLnByb3BlcnR5KFxuICAgIHByb3AsXG4gICAgdmFsXG4gICk7XG59O1xuYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBvYmosXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5oYXZlLmRlZXAucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQub3duUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHksIHRydWUpLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5ub3RPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSwgdHJ1ZSkudG8ubm90LmhhdmUub3duLnByb3BlcnR5KFxuICAgIHByb3BcbiAgKTtcbn07XG5hc3NlcnQub3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm93blByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLm93bi5wcm9wZXJ0eShcbiAgICBwcm9wLFxuICAgIHZhbHVlXG4gICk7XG59O1xuYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubm90T3duUHJvcGVydHlWYWwsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5oYXZlLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIG9iaixcbiAgICBtc2csXG4gICAgYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCxcbiAgICB0cnVlXG4gICkudG8uaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIG9iaixcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCxcbiAgICB0cnVlXG4gICkudG8ubm90LmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5uZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoXG4gICAgcHJvcFxuICApO1xufTtcbmFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHksXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubmVzdGVkUHJvcGVydHlWYWwsXG4gICAgdHJ1ZVxuICApLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIG9iaixcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQuZGVlcE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIG9iaixcbiAgICBtc2csXG4gICAgYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCxcbiAgICB0cnVlXG4gICkudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5sZW5ndGhPZiA9IGZ1bmN0aW9uKGV4cCwgbGVuLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lmxlbmd0aE9mLCB0cnVlKS50by5oYXZlLmxlbmd0aE9mKGxlbik7XG59O1xuYXNzZXJ0Lmhhc0FueUtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQW55S2V5cywgdHJ1ZSkudG8uaGF2ZS5hbnkua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQWxsS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxLZXlzLCB0cnVlKS50by5oYXZlLmFsbC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5jb250YWluc0FsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxLZXlzLCB0cnVlKS50by5jb250YWluLmFsbC5rZXlzKFxuICAgIGtleXNcbiAgKTtcbn07XG5hc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYW55LmtleXMoXG4gICAga2V5c1xuICApO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbGwua2V5cyhcbiAgICBrZXlzXG4gICk7XG59O1xuYXNzZXJ0Lmhhc0FueURlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FueURlZXBLZXlzLCB0cnVlKS50by5oYXZlLmFueS5kZWVwLmtleXMoXG4gICAga2V5c1xuICApO1xufTtcbmFzc2VydC5oYXNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxEZWVwS2V5cywgdHJ1ZSkudG8uaGF2ZS5hbGwuZGVlcC5rZXlzKFxuICAgIGtleXNcbiAgKTtcbn07XG5hc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyxcbiAgICB0cnVlXG4gICkudG8uY29udGFpbi5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBvYmosXG4gICAgbXNnLFxuICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5hbnkuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBvYmosXG4gICAgbXNnLFxuICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIGxldCBhc3NlcnRFcnIgPSBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC50aHJvd3MsIHRydWUpLnRvLnRocm93KFxuICAgIGVycm9yTGlrZSxcbiAgICBlcnJNc2dNYXRjaGVyXG4gICk7XG4gIHJldHVybiBmbGFnKGFzc2VydEVyciwgXCJvYmplY3RcIik7XG59O1xuYXNzZXJ0LmRvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1lc3NhZ2UsIGFzc2VydC5kb2VzTm90VGhyb3csIHRydWUpLnRvLm5vdC50aHJvdyhcbiAgICBlcnJvckxpa2UsXG4gICAgZXJyTXNnTWF0Y2hlclxuICApO1xufTtcbmFzc2VydC5vcGVyYXRvciA9IGZ1bmN0aW9uKHZhbCwgb3BlcmF0b3IsIHZhbDIsIG1zZykge1xuICBsZXQgb2s7XG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlIFwiPT1cIjpcbiAgICAgIG9rID0gdmFsID09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPT09XCI6XG4gICAgICBvayA9IHZhbCA9PT0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI+XCI6XG4gICAgICBvayA9IHZhbCA+IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPj1cIjpcbiAgICAgIG9rID0gdmFsID49IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPFwiOlxuICAgICAgb2sgPSB2YWwgPCB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIjw9XCI6XG4gICAgICBvayA9IHZhbCA8PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9XCI6XG4gICAgICBvayA9IHZhbCAhPSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9PVwiOlxuICAgICAgb2sgPSB2YWwgIT09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbXNnID0gbXNnID8gbXNnICsgXCI6IFwiIDogbXNnO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBtc2cgKyAnSW52YWxpZCBvcGVyYXRvciBcIicgKyBvcGVyYXRvciArICdcIicsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgYXNzZXJ0Lm9wZXJhdG9yXG4gICAgICApO1xuICB9XG4gIGxldCB0ZXN0MiA9IG5ldyBBc3NlcnRpb24ob2ssIG1zZywgYXNzZXJ0Lm9wZXJhdG9yLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIHRydWUgPT09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBpbnNwZWN0Mih2YWwpICsgXCIgdG8gYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMiksXG4gICAgXCJleHBlY3RlZCBcIiArIGluc3BlY3QyKHZhbCkgKyBcIiB0byBub3QgYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMilcbiAgKTtcbn07XG5hc3NlcnQuY2xvc2VUbyA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBkZWx0YSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5jbG9zZVRvLCB0cnVlKS50by5iZS5jbG9zZVRvKGV4cCwgZGVsdGEpO1xufTtcbmFzc2VydC5hcHByb3hpbWF0ZWx5ID0gZnVuY3Rpb24oYWN0LCBleHAsIGRlbHRhLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmFwcHJveGltYXRlbHksIHRydWUpLnRvLmJlLmFwcHJveGltYXRlbHkoXG4gICAgZXhwLFxuICAgIGRlbHRhXG4gICk7XG59O1xuYXNzZXJ0LnNhbWVNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZU1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIHNldDEsXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3RTYW1lTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8ubm90LmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5zYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzZXQxLFxuICAgIG1zZyxcbiAgICBhc3NlcnQuc2FtZURlZXBNZW1iZXJzLFxuICAgIHRydWVcbiAgKS50by5oYXZlLnNhbWUuZGVlcC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzZXQxLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubm90U2FtZURlZXBNZW1iZXJzLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuc2FtZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc2V0MSxcbiAgICBtc2csXG4gICAgYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8uaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc2V0MSxcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdFNhbWVPcmRlcmVkTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8ubm90LmhhdmUuc2FtZS5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LnNhbWVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzZXQxLFxuICAgIG1zZyxcbiAgICBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8uaGF2ZS5zYW1lLmRlZXAub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc2V0MSxcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LmluY2x1ZGVNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVNZW1iZXJzLCB0cnVlKS50by5pbmNsdWRlLm1lbWJlcnMoXG4gICAgc3Vic2V0XG4gICk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGVNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc3VwZXJzZXQsXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8ubm90LmluY2x1ZGUubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzdXBlcnNldCxcbiAgICBtc2csXG4gICAgYXNzZXJ0LmluY2x1ZGVEZWVwTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc3VwZXJzZXQsXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5pbmNsdWRlLmRlZXAubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzdXBlcnNldCxcbiAgICBtc2csXG4gICAgYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8uaW5jbHVkZS5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc3VwZXJzZXQsXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc3VwZXJzZXQsXG4gICAgbXNnLFxuICAgIGFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzLFxuICAgIHRydWVcbiAgKS50by5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzdXBlcnNldCxcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm9uZU9mID0gZnVuY3Rpb24oaW5MaXN0LCBsaXN0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihpbkxpc3QsIG1zZywgYXNzZXJ0Lm9uZU9mLCB0cnVlKS50by5iZS5vbmVPZihsaXN0KTtcbn07XG5hc3NlcnQuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIGlmIChvYmogPT0gdm9pZCAwIHx8ICFvYmpbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgIG1zZyA9IG1zZyA/IGAke21zZ30gZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWAgOiBgZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWA7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZywgdm9pZCAwLCBhc3NlcnQuaXNJdGVyYWJsZSk7XG4gIH1cbn07XG5hc3NlcnQuY2hhbmdlcyA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXMsIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5jaGFuZ2VzQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlc0J5LCB0cnVlKS50by5jaGFuZ2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRvZXNOb3RDaGFuZ2UgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdENoYW5nZSwgdHJ1ZSkudG8ubm90LmNoYW5nZShcbiAgICBvYmosXG4gICAgcHJvcFxuICApO1xufTtcbmFzc2VydC5jaGFuZ2VzQnV0Tm90QnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlc0J1dE5vdEJ5LCB0cnVlKS50by5jaGFuZ2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuaW5jcmVhc2VzID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlcywgdHJ1ZSkudG8uaW5jcmVhc2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuaW5jcmVhc2VzQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzQnksIHRydWUpLnRvLmluY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kb2VzTm90SW5jcmVhc2UgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdEluY3JlYXNlLCB0cnVlKS50by5ub3QuaW5jcmVhc2UoXG4gICAgb2JqLFxuICAgIHByb3BcbiAgKTtcbn07XG5hc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnksIHRydWUpLnRvLmluY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRlY3JlYXNlcyA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXMsIHRydWUpLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmRlY3JlYXNlc0J5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsZXQgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlc0J5LCB0cnVlKS50by5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZG9lc05vdERlY3JlYXNlID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3REZWNyZWFzZSwgdHJ1ZSkudG8ubm90LmRlY3JlYXNlKFxuICAgIG9iaixcbiAgICBwcm9wXG4gICk7XG59O1xuYXNzZXJ0LmRvZXNOb3REZWNyZWFzZUJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsZXQgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSwgdHJ1ZSkudG8ubm90LmRlY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kZWNyZWFzZXNCdXROb3RCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbGV0IHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXNCdXROb3RCeSwgdHJ1ZSkudG8uZGVjcmVhc2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKHZhbCkge1xuICBpZiAodmFsKSB7XG4gICAgdGhyb3cgdmFsO1xuICB9XG59O1xuYXNzZXJ0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc0V4dGVuc2libGUsIHRydWUpLnRvLmJlLmV4dGVuc2libGU7XG59O1xuYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEV4dGVuc2libGUsIHRydWUpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xufTtcbmFzc2VydC5pc1NlYWxlZCA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc1NlYWxlZCwgdHJ1ZSkudG8uYmUuc2VhbGVkO1xufTtcbmFzc2VydC5pc05vdFNlYWxlZCA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdFNlYWxlZCwgdHJ1ZSkudG8ubm90LmJlLnNlYWxlZDtcbn07XG5hc3NlcnQuaXNGcm96ZW4gPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNGcm96ZW4sIHRydWUpLnRvLmJlLmZyb3plbjtcbn07XG5hc3NlcnQuaXNOb3RGcm96ZW4gPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RGcm96ZW4sIHRydWUpLnRvLm5vdC5iZS5mcm96ZW47XG59O1xuYXNzZXJ0LmlzRW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNFbXB0eSwgdHJ1ZSkudG8uYmUuZW1wdHk7XG59O1xuYXNzZXJ0LmlzTm90RW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RFbXB0eSwgdHJ1ZSkudG8ubm90LmJlLmVtcHR5O1xufTtcbmFzc2VydC5jb250YWluc1N1YnNldCA9IGZ1bmN0aW9uKHZhbCwgZXhwLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8uY29udGFpblN1YnNldChleHApO1xufTtcbmFzc2VydC5kb2VzTm90Q29udGFpblN1YnNldCA9IGZ1bmN0aW9uKHZhbCwgZXhwLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmNvbnRhaW5TdWJzZXQoZXhwKTtcbn07XG52YXIgYWxpYXNlcyA9IFtcbiAgW1wiaXNPa1wiLCBcIm9rXCJdLFxuICBbXCJpc05vdE9rXCIsIFwibm90T2tcIl0sXG4gIFtcInRocm93c1wiLCBcInRocm93XCJdLFxuICBbXCJ0aHJvd3NcIiwgXCJUaHJvd1wiXSxcbiAgW1wiaXNFeHRlbnNpYmxlXCIsIFwiZXh0ZW5zaWJsZVwiXSxcbiAgW1wiaXNOb3RFeHRlbnNpYmxlXCIsIFwibm90RXh0ZW5zaWJsZVwiXSxcbiAgW1wiaXNTZWFsZWRcIiwgXCJzZWFsZWRcIl0sXG4gIFtcImlzTm90U2VhbGVkXCIsIFwibm90U2VhbGVkXCJdLFxuICBbXCJpc0Zyb3plblwiLCBcImZyb3plblwiXSxcbiAgW1wiaXNOb3RGcm96ZW5cIiwgXCJub3RGcm96ZW5cIl0sXG4gIFtcImlzRW1wdHlcIiwgXCJlbXB0eVwiXSxcbiAgW1wiaXNOb3RFbXB0eVwiLCBcIm5vdEVtcHR5XCJdLFxuICBbXCJpc0NhbGxhYmxlXCIsIFwiaXNGdW5jdGlvblwiXSxcbiAgW1wiaXNOb3RDYWxsYWJsZVwiLCBcImlzTm90RnVuY3Rpb25cIl0sXG4gIFtcImNvbnRhaW5zU3Vic2V0XCIsIFwiY29udGFpblN1YnNldFwiXVxuXTtcbmZvciAoY29uc3QgW25hbWUsIGFzXSBvZiBhbGlhc2VzKSB7XG4gIGFzc2VydFthc10gPSBhc3NlcnRbbmFtZV07XG59XG5cbi8vIGxpYi9jaGFpLmpzXG52YXIgdXNlZCA9IFtdO1xuZnVuY3Rpb24gdXNlKGZuKSB7XG4gIGNvbnN0IGV4cG9ydHMgPSB7XG4gICAgdXNlLFxuICAgIEFzc2VydGlvbkVycm9yLFxuICAgIHV0aWw6IHV0aWxzX2V4cG9ydHMsXG4gICAgY29uZmlnLFxuICAgIGV4cGVjdCxcbiAgICBhc3NlcnQsXG4gICAgQXNzZXJ0aW9uLFxuICAgIC4uLnNob3VsZF9leHBvcnRzXG4gIH07XG4gIGlmICghfnVzZWQuaW5kZXhPZihmbikpIHtcbiAgICBmbihleHBvcnRzLCB1dGlsc19leHBvcnRzKTtcbiAgICB1c2VkLnB1c2goZm4pO1xuICB9XG4gIHJldHVybiBleHBvcnRzO1xufVxuX19uYW1lKHVzZSwgXCJ1c2VcIik7XG5leHBvcnQge1xuICBBc3NlcnRpb24sXG4gIEFzc2VydGlvbkVycm9yLFxuICBTaG91bGQsXG4gIGFzc2VydCxcbiAgY29uZmlnLFxuICBleHBlY3QsXG4gIHNob3VsZCxcbiAgdXNlLFxuICB1dGlsc19leHBvcnRzIGFzIHV0aWxcbn07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUksWUFBWSxPQUFPO0FBQ3ZCLElBQUksbUJBQW1CLEtBQUssS0FBSyxVQUFVLE9BQU8sTUFBTSxVQUFVLEtBQUssS0FBSztDQUFFLFlBQVk7Q0FBTSxjQUFjO0NBQU0sVUFBVTtDQUFNO0NBQU8sQ0FBQyxHQUFHLElBQUksT0FBTztBQUMxSixJQUFJLFVBQVUsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRO0NBQUU7Q0FBTyxjQUFjO0NBQU0sQ0FBQztBQUN4RixJQUFJLFlBQVksUUFBUSxRQUFRO0FBQzlCLE1BQUssSUFBSSxRQUFRLElBQ2YsV0FBVSxRQUFRLE1BQU07RUFBRSxLQUFLLElBQUk7RUFBTyxZQUFZO0VBQU0sQ0FBQzs7QUFFakUsSUFBSSxpQkFBaUIsS0FBSyxLQUFLLFVBQVUsZ0JBQWdCLEtBQUssT0FBTyxRQUFRLFdBQVcsTUFBTSxLQUFLLEtBQUssTUFBTTtBQUc5RyxJQUFJLGdCQUFnQixFQUFFO0FBQ3RCLFNBQVMsZUFBZTtDQUN0QiwwQkFBMEI7Q0FDMUIsc0JBQXNCO0NBQ3RCLGlCQUFpQjtDQUNqQixtQkFBbUI7Q0FDbkIsa0JBQWtCO0NBQ2xCLHdCQUF3QjtDQUN4QixXQUFXO0NBQ1gsY0FBYztDQUNkLG1CQUFtQjtDQUNuQixZQUFZO0NBQ1osaUJBQWlCO0NBQ2pCLGtCQUFrQjtDQUNsQixlQUFlO0NBQ2YsbUJBQW1CO0NBQ25CLGtDQUFrQztDQUNsQyx1Q0FBdUM7Q0FDdkMsbUJBQW1CO0NBQ25CLG1CQUFtQjtDQUNuQixlQUFlO0NBQ2YsYUFBYTtDQUNiLGlCQUFpQjtD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
2986
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANi4yLjIvbm9kZV9tb2R1bGVzL2NoYWkvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4gX19kZWZOb3JtYWxQcm9wKG9iaiwgdHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIiA/IGtleSArIFwiXCIgOiBrZXksIHZhbHVlKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaW5kZXguanNcbnZhciB1dGlsc19leHBvcnRzID0ge307XG5fX2V4cG9ydCh1dGlsc19leHBvcnRzLCB7XG4gIGFkZENoYWluYWJsZU1ldGhvZDogKCkgPT4gYWRkQ2hhaW5hYmxlTWV0aG9kLFxuICBhZGRMZW5ndGhHdWFyZDogKCkgPT4gYWRkTGVuZ3RoR3VhcmQsXG4gIGFkZE1ldGhvZDogKCkgPT4gYWRkTWV0aG9kLFxuICBhZGRQcm9wZXJ0eTogKCkgPT4gYWRkUHJvcGVydHksXG4gIGNoZWNrRXJyb3I6ICgpID0+IGNoZWNrX2Vycm9yX2V4cG9ydHMsXG4gIGNvbXBhcmVCeUluc3BlY3Q6ICgpID0+IGNvbXBhcmVCeUluc3BlY3QsXG4gIGVxbDogKCkgPT4gZGVlcF9lcWxfZGVmYXVsdCxcbiAgZXZlbnRzOiAoKSA9PiBldmVudHMsXG4gIGV4cGVjdFR5cGVzOiAoKSA9PiBleHBlY3RUeXBlcyxcbiAgZmxhZzogKCkgPT4gZmxhZyxcbiAgZ2V0QWN0dWFsOiAoKSA9PiBnZXRBY3R1YWwsXG4gIGdldE1lc3NhZ2U6ICgpID0+IGdldE1lc3NhZ2UyLFxuICBnZXROYW1lOiAoKSA9PiBnZXROYW1lLFxuICBnZXRPcGVyYXRvcjogKCkgPT4gZ2V0T3BlcmF0b3IsXG4gIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzOiAoKSA9PiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyxcbiAgZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sczogKCkgPT4gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyxcbiAgZ2V0UGF0aEluZm86ICgpID0+IGdldFBhdGhJbmZvLFxuICBoYXNQcm9wZXJ0eTogKCkgPT4gaGFzUHJvcGVydHksXG4gIGluc3BlY3Q6ICgpID0+IGluc3BlY3QyLFxuICBpc05hTjogKCkgPT4gaXNOYU4yLFxuICBpc051bWVyaWM6ICgpID0+IGlzTnVtZXJpYyxcbiAgaXNQcm94eUVuYWJsZWQ6ICgpID0+IGlzUHJveHlFbmFibGVkLFxuICBpc1JlZ0V4cDogKCkgPT4gaXNSZWdFeHAyLFxuICBvYmpEaXNwbGF5OiAoKSA9PiBvYmpEaXNwbGF5LFxuICBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2Q6ICgpID0+IG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCxcbiAgb3ZlcndyaXRlTWV0aG9kOiAoKSA9PiBvdmVyd3JpdGVNZXRob2QsXG4gIG92ZXJ3cml0ZVByb3BlcnR5OiAoKSA9PiBvdmVyd3JpdGVQcm9wZXJ0eSxcbiAgcHJveGlmeTogKCkgPT4gcHJveGlmeSxcbiAgdGVzdDogKCkgPT4gdGVzdCxcbiAgdHJhbnNmZXJGbGFnczogKCkgPT4gdHJhbnNmZXJGbGFncyxcbiAgdHlwZTogKCkgPT4gdHlwZVxufSk7XG5cbi8vIG5vZGVfbW9kdWxlcy9jaGVjay1lcnJvci9pbmRleC5qc1xudmFyIGNoZWNrX2Vycm9yX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGNoZWNrX2Vycm9yX2V4cG9ydHMsIHtcbiAgY29tcGF0aWJsZUNvbnN0cnVjdG9yOiAoKSA9PiBjb21wYXRpYmxlQ29uc3RydWN0b3IsXG4gIGNvbXBhdGlibGVJbnN0YW5jZTogKCkgPT4gY29tcGF0aWJsZUluc3RhbmNlLFxuICBjb21wYXRpYmxlTWVzc2FnZTogKCkgPT4gY29tcGF0aWJsZU1lc3NhZ2UsXG4gIGdldENvbnN0cnVjdG9yTmFtZTogKCkgPT4gZ2V0Q29uc3RydWN0b3JOYW1lLFxuICBnZXRNZXNzYWdlOiAoKSA9PiBnZXRNZXNzYWdlXG59KTtcbmZ1bmN0aW9uIGlzRXJyb3JJbnN0YW5jZShvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEVycm9yIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgRXJyb3JdXCI7XG59XG5fX25hbWUoaXNFcnJvckluc3RhbmNlLCBcImlzRXJyb3JJbnN0YW5jZVwiKTtcbmZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBSZWdFeHBdXCI7XG59XG5fX25hbWUoaXNSZWdFeHAsIFwiaXNSZWdFeHBcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlSW5zdGFuY2UodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgcmV0dXJuIGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpICYmIHRocm93biA9PT0gZXJyb3JMaWtlO1xufVxuX19uYW1lKGNvbXBhdGlibGVJbnN0YW5jZSwgXCJjb21wYXRpYmxlSW5zdGFuY2VcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlQ29uc3RydWN0b3IodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgaWYgKGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpKSB7XG4gICAgcmV0dXJuIHRocm93bi5jb25zdHJ1Y3RvciA9PT0gZXJyb3JMaWtlLmNvbnN0cnVjdG9yIHx8IHRocm93biBpbnN0YW5jZW9mIGVycm9yTGlrZS5jb25zdHJ1Y3RvcjtcbiAgfSBlbHNlIGlmICgodHlwZW9mIGVycm9yTGlrZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZXJyb3JMaWtlID09PSBcImZ1bmN0aW9uXCIpICYmIGVycm9yTGlrZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gdGhyb3duLmNvbnN0cnVjdG9yID09PSBlcnJvckxpa2UgfHwgdGhyb3duIGluc3RhbmNlb2YgZXJyb3JMaWtlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShjb21wYXRpYmxlQ29uc3RydWN0b3IsIFwiY29tcGF0aWJsZUNvbnN0cnVjdG9yXCIpO1xuZnVuY3Rpb24gY29tcGF0aWJsZU1lc3NhZ2UodGhyb3duLCBlcnJNYXRjaGVyKSB7XG4gIGNvbnN0IGNvbXBhcmlzb25TdHJpbmcgPSB0eXBlb2YgdGhyb3duID09PSBcInN0cmluZ1wiID8gdGhyb3duIDogdGhyb3duLm1lc3NhZ2U7XG4gIGlmIChpc1JlZ0V4cChlcnJNYXRjaGVyKSkge1xuICAgIHJldHVybiBlcnJNYXRjaGVyLnRlc3QoY29tcGFyaXNvblN0cmluZyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVyck1hdGNoZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gY29tcGFyaXNvblN0cmluZy5pbmRleE9mKGVyck1hdGNoZXIpICE9PSAtMTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUoY29tcGF0aWJsZU1lc3NhZ2UsIFwiY29tcGF0aWJsZU1lc3NhZ2VcIik7XG5mdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSB7XG4gIGxldCBjb25zdHJ1Y3Rvck5hbWUgPSBlcnJvckxpa2U7XG4gIGlmIChpc0Vycm9ySW5zdGFuY2UoZXJyb3JMaWtlKSkge1xuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZS5uYW1lO1xuICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09IFwiXCIpIHtcbiAgICAgIGNvbnN0IG5ld0NvbnN0cnVjdG9yTmFtZSA9IG5ldyBlcnJvckxpa2UoKS5uYW1lO1xuICAgICAgY29uc3RydWN0b3JOYW1lID0gbmV3Q29uc3RydWN0b3JOYW1lIHx8IGNvbnN0cnVjdG9yTmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbn1cbl9fbmFtZShnZXRDb25zdHJ1Y3Rvck5hbWUsIFwiZ2V0Q29uc3RydWN0b3JOYW1lXCIpO1xuZnVuY3Rpb24gZ2V0TWVzc2FnZShlcnJvckxpa2UpIHtcbiAgbGV0IG1zZyA9IFwiXCI7XG4gIGlmIChlcnJvckxpa2UgJiYgZXJyb3JMaWtlLm1lc3NhZ2UpIHtcbiAgICBtc2cgPSBlcnJvckxpa2UubWVzc2FnZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3JMaWtlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbXNnID0gZXJyb3JMaWtlO1xuICB9XG4gIHJldHVybiBtc2c7XG59XG5fX25hbWUoZ2V0TWVzc2FnZSwgXCJnZXRNZXNzYWdlXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9mbGFnLmpzXG5mdW5jdGlvbiBmbGFnKG9iaiwga2V5LCB2YWx1ZSkge1xuICBsZXQgZmxhZ3MgPSBvYmouX19mbGFncyB8fCAob2JqLl9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZmxhZ3Nba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmbGFnc1trZXldO1xuICB9XG59XG5fX25hbWUoZmxhZywgXCJmbGFnXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy90ZXN0LmpzXG5mdW5jdGlvbiB0ZXN0KG9iaiwgYXJncykge1xuICBsZXQgbmVnYXRlID0gZmxhZyhvYmosIFwibmVnYXRlXCIpLCBleHByID0gYXJnc1swXTtcbiAgcmV0dXJuIG5lZ2F0ZSA/ICFleHByIDogZXhwcjtcbn1cbl9fbmFtZSh0ZXN0LCBcInRlc3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3R5cGUtZGV0ZWN0LmpzXG5mdW5jdGlvbiB0eXBlKG9iaikge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJudWxsXCI7XG4gIH1cbiAgY29uc3Qgc3RyaW5nVGFnID0gb2JqW1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIGlmICh0eXBlb2Ygc3RyaW5nVGFnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuICBjb25zdCB0eXBlMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKTtcbiAgcmV0dXJuIHR5cGUzO1xufVxuX19uYW1lKHR5cGUsIFwidHlwZVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2Fzc2VydGlvbi1lcnJvci9pbmRleC5qc1xudmFyIGNhbkVsaWRlRnJhbWVzID0gXCJjYXB0dXJlU3RhY2tUcmFjZVwiIGluIEVycm9yO1xudmFyIF9Bc3NlcnRpb25FcnJvciA9IGNsYXNzIF9Bc3NlcnRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9IFwiVW5zcGVjaWZpZWQgQXNzZXJ0aW9uRXJyb3JcIiwgcHJvcHMsIHNzZikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIF9fcHVibGljRmllbGQodGhpcywgXCJtZXNzYWdlXCIpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKGNhbkVsaWRlRnJhbWVzKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBzc2YgfHwgX0Fzc2VydGlvbkVycm9yKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIGlmICghKGtleSBpbiB0aGlzKSkge1xuICAgICAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gXCJBc3NlcnRpb25FcnJvclwiO1xuICB9XG4gIGdldCBvaygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdG9KU09OKHN0YWNrKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBvazogZmFsc2UsXG4gICAgICBzdGFjazogc3RhY2sgIT09IGZhbHNlID8gdGhpcy5zdGFjayA6IHZvaWQgMFxuICAgIH07XG4gIH1cbn07XG5fX25hbWUoX0Fzc2VydGlvbkVycm9yLCBcIkFzc2VydGlvbkVycm9yXCIpO1xudmFyIEFzc2VydGlvbkVycm9yID0gX0Fzc2VydGlvbkVycm9yO1xuXG4vLyBsaWIvY2hhaS91dGlscy9leHBlY3RUeXBlcy5qc1xuZnVuY3Rpb24gZXhwZWN0VHlwZXMob2JqLCB0eXBlcykge1xuICBsZXQgZmxhZ01zZyA9IGZsYWcob2JqLCBcIm1lc3NhZ2VcIik7XG4gIGxldCBzc2ZpID0gZmxhZyhvYmosIFwic3NmaVwiKTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgb2JqID0gZmxhZyhvYmosIFwib2JqZWN0XCIpO1xuICB0eXBlcyA9IHR5cGVzLm1hcChmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHQudG9Mb3dlckNhc2UoKTtcbiAgfSk7XG4gIHR5cGVzLnNvcnQoKTtcbiAgbGV0IHN0ciA9IHR5cGVzLm1hcChmdW5jdGlvbih0LCBpbmRleCkge1xuICAgIGxldCBhcnQgPSB+W1wiYVwiLCBcImVcIiwgXCJpXCIsIFwib1wiLCBcInVcIl0uaW5kZXhPZih0LmNoYXJBdCgwKSkgPyBcImFuXCIgOiBcImFcIjtcbiAgICBsZXQgb3IgPSB0eXBlcy5sZW5ndGggPiAxICYmIGluZGV4ID09PSB0eXBlcy5sZW5ndGggLSAxID8gXCJvciBcIiA6IFwiXCI7XG4gICAgcmV0dXJuIG9yICsgYXJ0ICsgXCIgXCIgKyB0O1xuICB9KS5qb2luKFwiLCBcIik7XG4gIGxldCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghdHlwZXMuc29tZShmdW5jdGlvbihleHBlY3RlZCkge1xuICAgIHJldHVybiBvYmpUeXBlID09PSBleHBlY3RlZDtcbiAgfSkpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgXCJvYmplY3QgdGVzdGVkIG11c3QgYmUgXCIgKyBzdHIgKyBcIiwgYnV0IFwiICsgb2JqVHlwZSArIFwiIGdpdmVuXCIsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGV4cGVjdFR5cGVzLCBcImV4cGVjdFR5cGVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRBY3R1YWwuanNcbmZ1bmN0aW9uIGdldEFjdHVhbChvYmosIGFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3MubGVuZ3RoID4gNCA/IGFyZ3NbNF0gOiBvYmouX29iajtcbn1cbl9fbmFtZShnZXRBY3R1YWwsIFwiZ2V0QWN0dWFsXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2hlbHBlcnMuanNcbnZhciBhbnNpQ29sb3JzID0ge1xuICBib2xkOiBbXCIxXCIsIFwiMjJcIl0sXG4gIGRpbTogW1wiMlwiLCBcIjIyXCJdLFxuICBpdGFsaWM6IFtcIjNcIiwgXCIyM1wiXSxcbiAgdW5kZXJsaW5lOiBbXCI0XCIsIFwiMjRcIl0sXG4gIC8vIDUgJiA2IGFyZSBibGlua2luZ1xuICBpbnZlcnNlOiBbXCI3XCIsIFwiMjdcIl0sXG4gIGhpZGRlbjogW1wiOFwiLCBcIjI4XCJdLFxuICBzdHJpa2U6IFtcIjlcIiwgXCIyOVwiXSxcbiAgLy8gMTAtMjAgYXJlIGZvbnRzXG4gIC8vIDIxLTI5IGFyZSByZXNldHMgZm9yIDEtOVxuICBibGFjazogW1wiMzBcIiwgXCIzOVwiXSxcbiAgcmVkOiBbXCIzMVwiLCBcIjM5XCJdLFxuICBncmVlbjogW1wiMzJcIiwgXCIzOVwiXSxcbiAgeWVsbG93OiBbXCIzM1wiLCBcIjM5XCJdLFxuICBibHVlOiBbXCIzNFwiLCBcIjM5XCJdLFxuICBtYWdlbnRhOiBbXCIzNVwiLCBcIjM5XCJdLFxuICBjeWFuOiBbXCIzNlwiLCBcIjM5XCJdLFxuICB3aGl0ZTogW1wiMzdcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0YmxhY2s6IFtcIjMwOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0cmVkOiBbXCIzMTsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodGdyZWVuOiBbXCIzMjsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodHllbGxvdzogW1wiMzM7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRibHVlOiBbXCIzNDsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodG1hZ2VudGE6IFtcIjM1OzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0Y3lhbjogW1wiMzY7MVwiLCBcIjM5XCJdLFxuICBicmlnaHR3aGl0ZTogW1wiMzc7MVwiLCBcIjM5XCJdLFxuICBncmV5OiBbXCI5MFwiLCBcIjM5XCJdXG59O1xudmFyIHN0eWxlcyA9IHtcbiAgc3BlY2lhbDogXCJjeWFuXCIsXG4gIG51bWJlcjogXCJ5ZWxsb3dcIixcbiAgYmlnaW50OiBcInllbGxvd1wiLFxuICBib29sZWFuOiBcInllbGxvd1wiLFxuICB1bmRlZmluZWQ6IFwiZ3JleVwiLFxuICBudWxsOiBcImJvbGRcIixcbiAgc3RyaW5nOiBcImdyZWVuXCIsXG4gIHN5bWJvbDogXCJncmVlblwiLFxuICBkYXRlOiBcIm1hZ2VudGFcIixcbiAgcmVnZXhwOiBcInJlZFwiXG59O1xudmFyIHRydW5jYXRvciA9IFwiXFx1MjAyNlwiO1xuZnVuY3Rpb24gY29sb3Jpc2UodmFsdWUsIHN0eWxlVHlwZSkge1xuICBjb25zdCBjb2xvciA9IGFuc2lDb2xvcnNbc3R5bGVzW3N0eWxlVHlwZV1dIHx8IGFuc2lDb2xvcnNbc3R5bGVUeXBlXSB8fCBcIlwiO1xuICBpZiAoIWNvbG9yKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGBcXHgxQlske2NvbG9yWzBdfW0ke1N0cmluZyh2YWx1ZSl9XFx4MUJbJHtjb2xvclsxXX1tYDtcbn1cbl9fbmFtZShjb2xvcmlzZSwgXCJjb2xvcmlzZVwiKTtcbmZ1bmN0aW9uIG5vcm1hbGlzZU9wdGlvbnMoe1xuICBzaG93SGlkZGVuID0gZmFsc2UsXG4gIGRlcHRoID0gMixcbiAgY29sb3JzID0gZmFsc2UsXG4gIGN1c3RvbUluc3BlY3QgPSB0cnVlLFxuICBzaG93UHJveHkgPSBmYWxzZSxcbiAgbWF4QXJyYXlMZW5ndGggPSBJbmZpbml0eSxcbiAgYnJlYWtMZW5ndGggPSBJbmZpbml0eSxcbiAgc2VlbiA9IFtdLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gIHRydW5jYXRlOiB0cnVuY2F0ZTIgPSBJbmZpbml0eSxcbiAgc3R5bGl6ZSA9IFN0cmluZ1xufSA9IHt9LCBpbnNwZWN0Mykge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHNob3dIaWRkZW46IEJvb2xlYW4oc2hvd0hpZGRlbiksXG4gICAgZGVwdGg6IE51bWJlcihkZXB0aCksXG4gICAgY29sb3JzOiBCb29sZWFuKGNvbG9ycyksXG4gICAgY3VzdG9tSW5zcGVjdDogQm9vbGVhbihjdXN0b21JbnNwZWN0KSxcbiAgICBzaG93UHJveHk6IEJvb2xlYW4oc2hvd1Byb3h5KSxcbiAgICBtYXhBcnJheUxlbmd0aDogTnVtYmVyKG1heEFycmF5TGVuZ3RoKSxcbiAgICBicmVha0xlbmd0aDogTnVtYmVyKGJyZWFrTGVuZ3RoKSxcbiAgICB0cnVuY2F0ZTogTnVtYmVyKHRydW5jYXRlMiksXG4gICAgc2VlbixcbiAgICBpbnNwZWN0OiBpbnNwZWN0MyxcbiAgICBzdHlsaXplXG4gIH07XG4gIGlmIChvcHRpb25zLmNvbG9ycykge1xuICAgIG9wdGlvbnMuc3R5bGl6ZSA9IGNvbG9yaXNlO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuX19uYW1lKG5vcm1hbGlzZU9wdGlvbnMsIFwibm9ybWFsaXNlT3B0aW9uc1wiKTtcbmZ1bmN0aW9uIGlzSGlnaFN1cnJvZ2F0ZShjaGFyKSB7XG4gIHJldHVybiBjaGFyID49IFwiXFx1RDgwMFwiICYmIGNoYXIgPD0gXCJcXHVEQkZGXCI7XG59XG5fX25hbWUoaXNIaWdoU3Vycm9nYXRlLCBcImlzSGlnaFN1cnJvZ2F0ZVwiKTtcbmZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZywgbGVuZ3RoLCB0YWlsID0gdHJ1bmNhdG9yKSB7XG4gIHN0cmluZyA9IFN0cmluZyhzdHJpbmcpO1xuICBjb25zdCB0YWlsTGVuZ3RoID0gdGFpbC5sZW5ndGg7XG4gIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIGlmICh0YWlsTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICByZXR1cm4gdGFpbDtcbiAgfVxuICBpZiAoc3RyaW5nTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICBsZXQgZW5kID0gbGVuZ3RoIC0gdGFpbExlbmd0aDtcbiAgICBpZiAoZW5kID4gMCAmJiBpc0hpZ2hTdXJyb2dhdGUoc3RyaW5nW2VuZCAtIDFdKSkge1xuICAgICAgZW5kID0gZW5kIC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3N0cmluZy5zbGljZSgwLCBlbmQpfSR7dGFpbH1gO1xuICB9XG4gIHJldHVybiBzdHJpbmc7XG59XG5fX25hbWUodHJ1bmNhdGUsIFwidHJ1bmNhdGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0TGlzdChsaXN0LCBvcHRpb25zLCBpbnNwZWN0SXRlbSwgc2VwYXJhdG9yID0gXCIsIFwiKSB7XG4gIGluc3BlY3RJdGVtID0gaW5zcGVjdEl0ZW0gfHwgb3B0aW9ucy5pbnNwZWN0O1xuICBjb25zdCBzaXplID0gbGlzdC5sZW5ndGg7XG4gIGlmIChzaXplID09PSAwKVxuICAgIHJldHVybiBcIlwiO1xuICBjb25zdCBvcmlnaW5hbExlbmd0aCA9IG9wdGlvbnMudHJ1bmNhdGU7XG4gIGxldCBvdXRwdXQgPSBcIlwiO1xuICBsZXQgcGVlayA9IFwiXCI7XG4gIGxldCB0cnVuY2F0ZWQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkgKz0gMSkge1xuICAgIGNvbnN0IGxhc3QgPSBpICsgMSA9PT0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3Qgc2Vjb25kVG9MYXN0ID0gaSArIDIgPT09IGxpc3QubGVuZ3RoO1xuICAgIHRydW5jYXRlZCA9IGAke3RydW5jYXRvcn0oJHtsaXN0Lmxlbmd0aCAtIGl9KWA7XG4gICAgY29uc3QgdmFsdWUgPSBsaXN0W2ldO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgPSBvcmlnaW5hbExlbmd0aCAtIG91dHB1dC5sZW5ndGggLSAobGFzdCA/IDAgOiBzZXBhcmF0b3IubGVuZ3RoKTtcbiAgICBjb25zdCBzdHJpbmcgPSBwZWVrIHx8IGluc3BlY3RJdGVtKHZhbHVlLCBvcHRpb25zKSArIChsYXN0ID8gXCJcIiA6IHNlcGFyYXRvcik7XG4gICAgY29uc3QgbmV4dExlbmd0aCA9IG91dHB1dC5sZW5ndGggKyBzdHJpbmcubGVuZ3RoO1xuICAgIGNvbnN0IHRydW5jYXRlZExlbmd0aCA9IG5leHRMZW5ndGggKyB0cnVuY2F0ZWQubGVuZ3RoO1xuICAgIGlmIChsYXN0ICYmIG5leHRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCAmJiBvdXRwdXQubGVuZ3RoICsgdHJ1bmNhdGVkLmxlbmd0aCA8PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIHRydW5jYXRlZExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcGVlayA9IGxhc3QgPyBcIlwiIDogaW5zcGVjdEl0ZW0obGlzdFtpICsgMV0sIG9wdGlvbnMpICsgKHNlY29uZFRvTGFzdCA/IFwiXCIgOiBzZXBhcmF0b3IpO1xuICAgIGlmICghbGFzdCAmJiBzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGggJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvdXRwdXQgKz0gc3RyaW5nO1xuICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIG5leHRMZW5ndGggKyBwZWVrLmxlbmd0aCA+PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgdHJ1bmNhdGVkID0gYCR7dHJ1bmNhdG9yfSgke2xpc3QubGVuZ3RoIC0gaSAtIDF9KWA7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdHJ1bmNhdGVkID0gXCJcIjtcbiAgfVxuICByZXR1cm4gYCR7b3V0cHV0fSR7dHJ1bmNhdGVkfWA7XG59XG5fX25hbWUoaW5zcGVjdExpc3QsIFwiaW5zcGVjdExpc3RcIik7XG5mdW5jdGlvbiBxdW90ZUNvbXBsZXhLZXkoa2V5KSB7XG4gIGlmIChrZXkubWF0Y2goL15bYS16QS1aX11bYS16QS1aXzAtOV0qJC8pKSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa2V5KS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csICdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG59XG5fX25hbWUocXVvdGVDb21wbGV4S2V5LCBcInF1b3RlQ29tcGxleEtleVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RQcm9wZXJ0eShba2V5LCB2YWx1ZV0sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSAyO1xuICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGtleSA9IHF1b3RlQ29tcGxleEtleShrZXkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgIT09IFwibnVtYmVyXCIpIHtcbiAgICBrZXkgPSBgWyR7b3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyl9XWA7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBrZXkubGVuZ3RoO1xuICB2YWx1ZSA9IG9wdGlvbnMuaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIHJldHVybiBgJHtrZXl9OiAke3ZhbHVlfWA7XG59XG5fX25hbWUoaW5zcGVjdFByb3BlcnR5LCBcImluc3BlY3RQcm9wZXJ0eVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9hcnJheS5qc1xuZnVuY3Rpb24gaW5zcGVjdEFycmF5KGFycmF5LCBvcHRpb25zKSB7XG4gIGNvbnN0IG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aClcbiAgICByZXR1cm4gXCJbXVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gIGNvbnN0IGxpc3RDb250ZW50cyA9IGluc3BlY3RMaXN0KGFycmF5LCBvcHRpb25zKTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBsaXN0Q29udGVudHMubGVuZ3RoO1xuICBsZXQgcHJvcGVydHlDb250ZW50cyA9IFwiXCI7XG4gIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgYXJyYXlba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICB9XG4gIHJldHVybiBgWyAke2xpc3RDb250ZW50c30ke3Byb3BlcnR5Q29udGVudHMgPyBgLCAke3Byb3BlcnR5Q29udGVudHN9YCA6IFwiXCJ9IF1gO1xufVxuX19uYW1lKGluc3BlY3RBcnJheSwgXCJpbnNwZWN0QXJyYXlcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvdHlwZWRhcnJheS5qc1xudmFyIGdldEFycmF5TmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFycmF5KSA9PiB7XG4gIGlmICh0eXBlb2YgQnVmZmVyID09PSBcImZ1bmN0aW9uXCIgJiYgYXJyYXkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gXCJCdWZmZXJcIjtcbiAgfVxuICBpZiAoYXJyYXlbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgIHJldHVybiBhcnJheVtTeW1ib2wudG9TdHJpbmdUYWddO1xuICB9XG4gIHJldHVybiBhcnJheS5jb25zdHJ1Y3Rvci5uYW1lO1xufSwgXCJnZXRBcnJheU5hbWVcIik7XG5mdW5jdGlvbiBpbnNwZWN0VHlwZWRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICBjb25zdCBuYW1lID0gZ2V0QXJyYXlOYW1lKGFycmF5KTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aCArIDQ7XG4gIGNvbnN0IG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aClcbiAgICByZXR1cm4gYCR7bmFtZX1bXWA7XG4gIGxldCBvdXRwdXQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gYCR7b3B0aW9ucy5zdHlsaXplKHRydW5jYXRlKGFycmF5W2ldLCBvcHRpb25zLnRydW5jYXRlKSwgXCJudW1iZXJcIil9JHtpID09PSBhcnJheS5sZW5ndGggLSAxID8gXCJcIiA6IFwiLCBcIn1gO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gc3RyaW5nLmxlbmd0aDtcbiAgICBpZiAoYXJyYXlbaV0gIT09IGFycmF5Lmxlbmd0aCAmJiBvcHRpb25zLnRydW5jYXRlIDw9IDMpIHtcbiAgICAgIG91dHB1dCArPSBgJHt0cnVuY2F0b3J9KCR7YXJyYXkubGVuZ3RoIC0gYXJyYXlbaV0gKyAxfSlgO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG91dHB1dCArPSBzdHJpbmc7XG4gIH1cbiAgbGV0IHByb3BlcnR5Q29udGVudHMgPSBcIlwiO1xuICBpZiAobm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChub25JbmRleFByb3BlcnRpZXMubWFwKChrZXkpID0+IFtrZXksIGFycmF5W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgfVxuICByZXR1cm4gYCR7bmFtZX1bICR7b3V0cHV0fSR7cHJvcGVydHlDb250ZW50cyA/IGAsICR7cHJvcGVydHlDb250ZW50c31gIDogXCJcIn0gXWA7XG59XG5fX25hbWUoaW5zcGVjdFR5cGVkQXJyYXksIFwiaW5zcGVjdFR5cGVkQXJyYXlcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZGF0ZS5qc1xuZnVuY3Rpb24gaW5zcGVjdERhdGUoZGF0ZU9iamVjdCwgb3B0aW9ucykge1xuICBjb25zdCBzdHJpbmdSZXByZXNlbnRhdGlvbiA9IGRhdGVPYmplY3QudG9KU09OKCk7XG4gIGlmIChzdHJpbmdSZXByZXNlbnRhdGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIkludmFsaWQgRGF0ZVwiO1xuICB9XG4gIGNvbnN0IHNwbGl0ID0gc3RyaW5nUmVwcmVzZW50YXRpb24uc3BsaXQoXCJUXCIpO1xuICBjb25zdCBkYXRlID0gc3BsaXRbMF07XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYCR7ZGF0ZX1UJHt0cnVuY2F0ZShzcGxpdFsxXSwgb3B0aW9ucy50cnVuY2F0ZSAtIGRhdGUubGVuZ3RoIC0gMSl9YCwgXCJkYXRlXCIpO1xufVxuX19uYW1lKGluc3BlY3REYXRlLCBcImluc3BlY3REYXRlXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2Z1bmN0aW9uLmpzXG5mdW5jdGlvbiBpbnNwZWN0RnVuY3Rpb24oZnVuYywgb3B0aW9ucykge1xuICBjb25zdCBmdW5jdGlvblR5cGUgPSBmdW5jW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgXCJGdW5jdGlvblwiO1xuICBjb25zdCBuYW1lID0gZnVuYy5uYW1lO1xuICBpZiAoIW5hbWUpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGBbJHtmdW5jdGlvblR5cGV9XWAsIFwic3BlY2lhbFwiKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGBbJHtmdW5jdGlvblR5cGV9ICR7dHJ1bmNhdGUobmFtZSwgb3B0aW9ucy50cnVuY2F0ZSAtIDExKX1dYCwgXCJzcGVjaWFsXCIpO1xufVxuX19uYW1lKGluc3BlY3RGdW5jdGlvbiwgXCJpbnNwZWN0RnVuY3Rpb25cIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvbWFwLmpzXG5mdW5jdGlvbiBpbnNwZWN0TWFwRW50cnkoW2tleSwgdmFsdWVdLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAga2V5ID0gb3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyk7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0ga2V5Lmxlbmd0aDtcbiAgdmFsdWUgPSBvcHRpb25zLmluc3BlY3QodmFsdWUsIG9wdGlvbnMpO1xuICByZXR1cm4gYCR7a2V5fSA9PiAke3ZhbHVlfWA7XG59XG5fX25hbWUoaW5zcGVjdE1hcEVudHJ5LCBcImluc3BlY3RNYXBFbnRyeVwiKTtcbmZ1bmN0aW9uIG1hcFRvRW50cmllcyhtYXApIHtcbiAgY29uc3QgZW50cmllcyA9IFtdO1xuICBtYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIGVudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5fX25hbWUobWFwVG9FbnRyaWVzLCBcIm1hcFRvRW50cmllc1wiKTtcbmZ1bmN0aW9uIGluc3BlY3RNYXAobWFwLCBvcHRpb25zKSB7XG4gIGlmIChtYXAuc2l6ZSA9PT0gMClcbiAgICByZXR1cm4gXCJNYXB7fVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDc7XG4gIHJldHVybiBgTWFweyAke2luc3BlY3RMaXN0KG1hcFRvRW50cmllcyhtYXApLCBvcHRpb25zLCBpbnNwZWN0TWFwRW50cnkpfSB9YDtcbn1cbl9fbmFtZShpbnNwZWN0TWFwLCBcImluc3BlY3RNYXBcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvbnVtYmVyLmpzXG52YXIgaXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgKChpKSA9PiBpICE9PSBpKTtcbmZ1bmN0aW9uIGluc3BlY3ROdW1iZXIobnVtYmVyLCBvcHRpb25zKSB7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIk5hTlwiLCBcIm51bWJlclwiKTtcbiAgfVxuICBpZiAobnVtYmVyID09PSBJbmZpbml0eSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJJbmZpbml0eVwiLCBcIm51bWJlclwiKTtcbiAgfVxuICBpZiAobnVtYmVyID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiLUluZmluaXR5XCIsIFwibnVtYmVyXCIpO1xuICB9XG4gIGlmIChudW1iZXIgPT09IDApIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKDEgLyBudW1iZXIgPT09IEluZmluaXR5ID8gXCIrMFwiIDogXCItMFwiLCBcIm51bWJlclwiKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKHRydW5jYXRlKFN0cmluZyhudW1iZXIpLCBvcHRpb25zLnRydW5jYXRlKSwgXCJudW1iZXJcIik7XG59XG5fX25hbWUoaW5zcGVjdE51bWJlciwgXCJpbnNwZWN0TnVtYmVyXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2JpZ2ludC5qc1xuZnVuY3Rpb24gaW5zcGVjdEJpZ0ludChudW1iZXIsIG9wdGlvbnMpIHtcbiAgbGV0IG51bXMgPSB0cnVuY2F0ZShudW1iZXIudG9TdHJpbmcoKSwgb3B0aW9ucy50cnVuY2F0ZSAtIDEpO1xuICBpZiAobnVtcyAhPT0gdHJ1bmNhdG9yKVxuICAgIG51bXMgKz0gXCJuXCI7XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUobnVtcywgXCJiaWdpbnRcIik7XG59XG5fX25hbWUoaW5zcGVjdEJpZ0ludCwgXCJpbnNwZWN0QmlnSW50XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3JlZ2V4cC5qc1xuZnVuY3Rpb24gaW5zcGVjdFJlZ0V4cCh2YWx1ZSwgb3B0aW9ucykge1xuICBjb25zdCBmbGFncyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCIvXCIpWzJdO1xuICBjb25zdCBzb3VyY2VMZW5ndGggPSBvcHRpb25zLnRydW5jYXRlIC0gKDIgKyBmbGFncy5sZW5ndGgpO1xuICBjb25zdCBzb3VyY2UgPSB2YWx1ZS5zb3VyY2U7XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYC8ke3RydW5jYXRlKHNvdXJjZSwgc291cmNlTGVuZ3RoKX0vJHtmbGFnc31gLCBcInJlZ2V4cFwiKTtcbn1cbl9fbmFtZShpbnNwZWN0UmVnRXhwLCBcImluc3BlY3RSZWdFeHBcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvc2V0LmpzXG5mdW5jdGlvbiBhcnJheUZyb21TZXQoc2V0Mikge1xuICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgc2V0Mi5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiB2YWx1ZXM7XG59XG5fX25hbWUoYXJyYXlGcm9tU2V0LCBcImFycmF5RnJvbVNldFwiKTtcbmZ1bmN0aW9uIGluc3BlY3RTZXQoc2V0Miwgb3B0aW9ucykge1xuICBpZiAoc2V0Mi5zaXplID09PSAwKVxuICAgIHJldHVybiBcIlNldHt9XCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNztcbiAgcmV0dXJuIGBTZXR7ICR7aW5zcGVjdExpc3QoYXJyYXlGcm9tU2V0KHNldDIpLCBvcHRpb25zKX0gfWA7XG59XG5fX25hbWUoaW5zcGVjdFNldCwgXCJpbnNwZWN0U2V0XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3N0cmluZy5qc1xudmFyIHN0cmluZ0VzY2FwZUNoYXJzID0gbmV3IFJlZ0V4cChcIlsnXFxcXHUwMDAwLVxcXFx1MDAxZlxcXFx1MDA3Zi1cXFxcdTAwOWZcXFxcdTAwYWRcXFxcdTA2MDAtXFxcXHUwNjA0XFxcXHUwNzBmXFxcXHUxN2I0XFxcXHUxN2I1XFxcXHUyMDBjLVxcXFx1MjAwZlxcXFx1MjAyOC1cXFxcdTIwMmZcXFxcdTIwNjAtXFxcXHUyMDZmXFxcXHVmZWZmXFxcXHVmZmYwLVxcXFx1ZmZmZl1cIiwgXCJnXCIpO1xudmFyIGVzY2FwZUNoYXJhY3RlcnMgPSB7XG4gIFwiXFxiXCI6IFwiXFxcXGJcIixcbiAgXCJcdFwiOiBcIlxcXFx0XCIsXG4gIFwiXFxuXCI6IFwiXFxcXG5cIixcbiAgXCJcXGZcIjogXCJcXFxcZlwiLFxuICBcIlxcclwiOiBcIlxcXFxyXCIsXG4gIFwiJ1wiOiBcIlxcXFwnXCIsXG4gIFwiXFxcXFwiOiBcIlxcXFxcXFxcXCJcbn07XG52YXIgaGV4ID0gMTY7XG52YXIgdW5pY29kZUxlbmd0aCA9IDQ7XG5mdW5jdGlvbiBlc2NhcGUoY2hhcikge1xuICByZXR1cm4gZXNjYXBlQ2hhcmFjdGVyc1tjaGFyXSB8fCBgXFxcXHUke2AwMDAwJHtjaGFyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoaGV4KX1gLnNsaWNlKC11bmljb2RlTGVuZ3RoKX1gO1xufVxuX19uYW1lKGVzY2FwZSwgXCJlc2NhcGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0U3RyaW5nKHN0cmluZywgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nRXNjYXBlQ2hhcnMudGVzdChzdHJpbmcpKSB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2Uoc3RyaW5nRXNjYXBlQ2hhcnMsIGVzY2FwZSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgJyR7dHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zLnRydW5jYXRlIC0gMil9J2AsIFwic3RyaW5nXCIpO1xufVxuX19uYW1lKGluc3BlY3RTdHJpbmcsIFwiaW5zcGVjdFN0cmluZ1wiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9zeW1ib2wuanNcbmZ1bmN0aW9uIGluc3BlY3RTeW1ib2wodmFsdWUpIHtcbiAgaWYgKFwiZGVzY3JpcHRpb25cIiBpbiBTeW1ib2wucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmRlc2NyaXB0aW9uID8gYFN5bWJvbCgke3ZhbHVlLmRlc2NyaXB0aW9ufSlgIDogXCJTeW1ib2woKVwiO1xuICB9XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xufVxuX19uYW1lKGluc3BlY3RTeW1ib2wsIFwiaW5zcGVjdFN5bWJvbFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9wcm9taXNlLmpzXG52YXIgZ2V0UHJvbWlzZVZhbHVlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBcIlByb21pc2V7XFx1MjAyNn1cIiwgXCJnZXRQcm9taXNlVmFsdWVcIik7XG52YXIgcHJvbWlzZV9kZWZhdWx0ID0gZ2V0UHJvbWlzZVZhbHVlO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL29iamVjdC5qc1xuZnVuY3Rpb24gaW5zcGVjdE9iamVjdChvYmplY3QsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4gIGNvbnN0IHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpIDogW107XG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCAmJiBzeW1ib2xzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcInt9XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICBvcHRpb25zLnNlZW4gPSBvcHRpb25zLnNlZW4gfHwgW107XG4gIGlmIChvcHRpb25zLnNlZW4uaW5jbHVkZXMob2JqZWN0KSkge1xuICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgfVxuICBvcHRpb25zLnNlZW4ucHVzaChvYmplY3QpO1xuICBjb25zdCBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgb2JqZWN0W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgY29uc3Qgc3ltYm9sQ29udGVudHMgPSBpbnNwZWN0TGlzdChzeW1ib2xzLm1hcCgoa2V5KSA9PiBba2V5LCBvYmplY3Rba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICBvcHRpb25zLnNlZW4ucG9wKCk7XG4gIGxldCBzZXAgPSBcIlwiO1xuICBpZiAocHJvcGVydHlDb250ZW50cyAmJiBzeW1ib2xDb250ZW50cykge1xuICAgIHNlcCA9IFwiLCBcIjtcbiAgfVxuICByZXR1cm4gYHsgJHtwcm9wZXJ0eUNvbnRlbnRzfSR7c2VwfSR7c3ltYm9sQ29udGVudHN9IH1gO1xufVxuX19uYW1lKGluc3BlY3RPYmplY3QsIFwiaW5zcGVjdE9iamVjdFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9jbGFzcy5qc1xudmFyIHRvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBmYWxzZTtcbmZ1bmN0aW9uIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucykge1xuICBsZXQgbmFtZSA9IFwiXCI7XG4gIGlmICh0b1N0cmluZ1RhZyAmJiB0b1N0cmluZ1RhZyBpbiB2YWx1ZSkge1xuICAgIG5hbWUgPSB2YWx1ZVt0b1N0cmluZ1RhZ107XG4gIH1cbiAgbmFtZSA9IG5hbWUgfHwgdmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKCFuYW1lIHx8IG5hbWUgPT09IFwiX2NsYXNzXCIpIHtcbiAgICBuYW1lID0gXCI8QW5vbnltb3VzIENsYXNzPlwiO1xuICB9XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGg7XG4gIHJldHVybiBgJHtuYW1lfSR7aW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyl9YDtcbn1cbl9fbmFtZShpbnNwZWN0Q2xhc3MsIFwiaW5zcGVjdENsYXNzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2FyZ3VtZW50cy5qc1xuZnVuY3Rpb24gaW5zcGVjdEFyZ3VtZW50cyhhcmdzLCBvcHRpb25zKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gXCJBcmd1bWVudHNbXVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDEzO1xuICByZXR1cm4gYEFyZ3VtZW50c1sgJHtpbnNwZWN0TGlzdChhcmdzLCBvcHRpb25zKX0gXWA7XG59XG5fX25hbWUoaW5zcGVjdEFyZ3VtZW50cywgXCJpbnNwZWN0QXJndW1lbnRzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2Vycm9yLmpzXG52YXIgZXJyb3JLZXlzID0gW1xuICBcInN0YWNrXCIsXG4gIFwibGluZVwiLFxuICBcImNvbHVtblwiLFxuICBcIm5hbWVcIixcbiAgXCJtZXNzYWdlXCIsXG4gIFwiZmlsZU5hbWVcIixcbiAgXCJsaW5lTnVtYmVyXCIsXG4gIFwiY29sdW1uTnVtYmVyXCIsXG4gIFwibnVtYmVyXCIsXG4gIFwiZGVzY3JpcHRpb25cIixcbiAgXCJjYXVzZVwiXG5dO1xuZnVuY3Rpb24gaW5zcGVjdE9iamVjdDIoZXJyb3IsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKS5maWx0ZXIoKGtleSkgPT4gZXJyb3JLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpO1xuICBjb25zdCBuYW1lID0gZXJyb3IubmFtZTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aDtcbiAgbGV0IG1lc3NhZ2UgPSBcIlwiO1xuICBpZiAodHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtZXNzYWdlID0gdHJ1bmNhdGUoZXJyb3IubWVzc2FnZSwgb3B0aW9ucy50cnVuY2F0ZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcy51bnNoaWZ0KFwibWVzc2FnZVwiKTtcbiAgfVxuICBtZXNzYWdlID0gbWVzc2FnZSA/IGA6ICR7bWVzc2FnZX1gIDogXCJcIjtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBtZXNzYWdlLmxlbmd0aCArIDU7XG4gIG9wdGlvbnMuc2VlbiA9IG9wdGlvbnMuc2VlbiB8fCBbXTtcbiAgaWYgKG9wdGlvbnMuc2Vlbi5pbmNsdWRlcyhlcnJvcikpIHtcbiAgICByZXR1cm4gXCJbQ2lyY3VsYXJdXCI7XG4gIH1cbiAgb3B0aW9ucy5zZWVuLnB1c2goZXJyb3IpO1xuICBjb25zdCBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgZXJyb3Jba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICByZXR1cm4gYCR7bmFtZX0ke21lc3NhZ2V9JHtwcm9wZXJ0eUNvbnRlbnRzID8gYCB7ICR7cHJvcGVydHlDb250ZW50c30gfWAgOiBcIlwifWA7XG59XG5fX25hbWUoaW5zcGVjdE9iamVjdDIsIFwiaW5zcGVjdE9iamVjdFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9odG1sLmpzXG5mdW5jdGlvbiBpbnNwZWN0QXR0cmlidXRlKFtrZXksIHZhbHVlXSwgb3B0aW9ucykge1xuICBvcHRpb25zLnRydW5jYXRlIC09IDM7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gYCR7b3B0aW9ucy5zdHlsaXplKFN0cmluZyhrZXkpLCBcInllbGxvd1wiKX1gO1xuICB9XG4gIHJldHVybiBgJHtvcHRpb25zLnN0eWxpemUoU3RyaW5nKGtleSksIFwieWVsbG93XCIpfT0ke29wdGlvbnMuc3R5bGl6ZShgXCIke3ZhbHVlfVwiYCwgXCJzdHJpbmdcIil9YDtcbn1cbl9fbmFtZShpbnNwZWN0QXR0cmlidXRlLCBcImluc3BlY3RBdHRyaWJ1dGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0Tm9kZUNvbGxlY3Rpb24oY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICByZXR1cm4gaW5zcGVjdExpc3QoY29sbGVjdGlvbiwgb3B0aW9ucywgaW5zcGVjdE5vZGUsIFwiXFxuXCIpO1xufVxuX19uYW1lKGluc3BlY3ROb2RlQ29sbGVjdGlvbiwgXCJpbnNwZWN0Tm9kZUNvbGxlY3Rpb25cIik7XG5mdW5jdGlvbiBpbnNwZWN0Tm9kZShub2RlLCBvcHRpb25zKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBpbnNwZWN0SFRNTChub2RlLCBvcHRpb25zKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnNwZWN0KG5vZGUuZGF0YSwgb3B0aW9ucyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBvcHRpb25zLmluc3BlY3Qobm9kZSwgb3B0aW9ucyk7XG4gIH1cbn1cbl9fbmFtZShpbnNwZWN0Tm9kZSwgXCJpbnNwZWN0Tm9kZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RIVE1MKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcbiAgY29uc3QgbmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBoZWFkID0gb3B0aW9ucy5zdHlsaXplKGA8JHtuYW1lfWAsIFwic3BlY2lhbFwiKTtcbiAgY29uc3QgaGVhZENsb3NlID0gb3B0aW9ucy5zdHlsaXplKGA+YCwgXCJzcGVjaWFsXCIpO1xuICBjb25zdCB0YWlsID0gb3B0aW9ucy5zdHlsaXplKGA8LyR7bmFtZX0+YCwgXCJzcGVjaWFsXCIpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICogMiArIDU7XG4gIGxldCBwcm9wZXJ0eUNvbnRlbnRzID0gXCJcIjtcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgKz0gXCIgXCI7XG4gICAgcHJvcGVydHlDb250ZW50cyArPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpXSksIG9wdGlvbnMsIGluc3BlY3RBdHRyaWJ1dGUsIFwiIFwiKTtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IHByb3BlcnR5Q29udGVudHMubGVuZ3RoO1xuICBjb25zdCB0cnVuY2F0ZTIgPSBvcHRpb25zLnRydW5jYXRlO1xuICBsZXQgY2hpbGRyZW4gPSBpbnNwZWN0Tm9kZUNvbGxlY3Rpb24oZWxlbWVudC5jaGlsZHJlbiwgb3B0aW9ucyk7XG4gIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiB0cnVuY2F0ZTIpIHtcbiAgICBjaGlsZHJlbiA9IGAke3RydW5jYXRvcn0oJHtlbGVtZW50LmNoaWxkcmVuLmxlbmd0aH0pYDtcbiAgfVxuICByZXR1cm4gYCR7aGVhZH0ke3Byb3BlcnR5Q29udGVudHN9JHtoZWFkQ2xvc2V9JHtjaGlsZHJlbn0ke3RhaWx9YDtcbn1cbl9fbmFtZShpbnNwZWN0SFRNTCwgXCJpbnNwZWN0SFRNTFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9pbmRleC5qc1xudmFyIHN5bWJvbHNTdXBwb3J0ZWQgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09IFwiZnVuY3Rpb25cIjtcbnZhciBjaGFpSW5zcGVjdCA9IHN5bWJvbHNTdXBwb3J0ZWQgPyAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcihcImNoYWkvaW5zcGVjdFwiKSA6IFwiQEBjaGFpL2luc3BlY3RcIjtcbnZhciBub2RlSW5zcGVjdCA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b21cIik7XG52YXIgY29uc3RydWN0b3JNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBzdHJpbmdUYWdNYXAgPSB7fTtcbnZhciBiYXNlVHlwZXNNYXAgPSB7XG4gIHVuZGVmaW5lZDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcInVuZGVmaW5lZFwiLCBcInVuZGVmaW5lZFwiKSwgXCJ1bmRlZmluZWRcIiksXG4gIG51bGw6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJudWxsXCIsIFwibnVsbFwiKSwgXCJudWxsXCIpLFxuICBib29sZWFuOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIFwiYm9vbGVhblwiKSwgXCJib29sZWFuXCIpLFxuICBCb29sZWFuOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIFwiYm9vbGVhblwiKSwgXCJCb29sZWFuXCIpLFxuICBudW1iZXI6IGluc3BlY3ROdW1iZXIsXG4gIE51bWJlcjogaW5zcGVjdE51bWJlcixcbiAgYmlnaW50OiBpbnNwZWN0QmlnSW50LFxuICBCaWdJbnQ6IGluc3BlY3RCaWdJbnQsXG4gIHN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgU3RyaW5nOiBpbnNwZWN0U3RyaW5nLFxuICBmdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICBGdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICBzeW1ib2w6IGluc3BlY3RTeW1ib2wsXG4gIC8vIEEgU3ltYm9sIHBvbHlmaWxsIHdpbGwgcmV0dXJuIGBTeW1ib2xgIG5vdCBgc3ltYm9sYCBmcm9tIHR5cGVkZXRlY3RcbiAgU3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICBBcnJheTogaW5zcGVjdEFycmF5LFxuICBEYXRlOiBpbnNwZWN0RGF0ZSxcbiAgTWFwOiBpbnNwZWN0TWFwLFxuICBTZXQ6IGluc3BlY3RTZXQsXG4gIFJlZ0V4cDogaW5zcGVjdFJlZ0V4cCxcbiAgUHJvbWlzZTogcHJvbWlzZV9kZWZhdWx0LFxuICAvLyBXZWFrU2V0LCBXZWFrTWFwIGFyZSB0b3RhbGx5IG9wYXF1ZSB0byB1c1xuICBXZWFrU2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwiV2Vha1NldHtcXHUyMDI2fVwiLCBcInNwZWNpYWxcIiksIFwiV2Vha1NldFwiKSxcbiAgV2Vha01hcDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcIldlYWtNYXB7XFx1MjAyNn1cIiwgXCJzcGVjaWFsXCIpLCBcIldlYWtNYXBcIiksXG4gIEFyZ3VtZW50czogaW5zcGVjdEFyZ3VtZW50cyxcbiAgSW50OEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDhBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQ4Q2xhbXBlZEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgSW50MTZBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgSW50MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgRmxvYXQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgRmxvYXQ2NEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgR2VuZXJhdG9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IFwiXCIsIFwiR2VuZXJhdG9yXCIpLFxuICBEYXRhVmlldzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBcIlwiLCBcIkRhdGFWaWV3XCIpLFxuICBBcnJheUJ1ZmZlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBcIlwiLCBcIkFycmF5QnVmZmVyXCIpLFxuICBFcnJvcjogaW5zcGVjdE9iamVjdDIsXG4gIEhUTUxDb2xsZWN0aW9uOiBpbnNwZWN0Tm9kZUNvbGxlY3Rpb24sXG4gIE5vZGVMaXN0OiBpbnNwZWN0Tm9kZUNvbGxlY3Rpb25cbn07XG52YXIgaW5zcGVjdEN1c3RvbSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBvcHRpb25zLCB0eXBlMywgaW5zcGVjdEZuKSA9PiB7XG4gIGlmIChjaGFpSW5zcGVjdCBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbY2hhaUluc3BlY3RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWVbY2hhaUluc3BlY3RdKG9wdGlvbnMpO1xuICB9XG4gIGlmIChub2RlSW5zcGVjdCBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbbm9kZUluc3BlY3RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWVbbm9kZUluc3BlY3RdKG9wdGlvbnMuZGVwdGgsIG9wdGlvbnMsIGluc3BlY3RGbik7XG4gIH1cbiAgaWYgKFwiaW5zcGVjdFwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5pbnNwZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5zcGVjdChvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoXCJjb25zdHJ1Y3RvclwiIGluIHZhbHVlICYmIGNvbnN0cnVjdG9yTWFwLmhhcyh2YWx1ZS5jb25zdHJ1Y3RvcikpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3JNYXAuZ2V0KHZhbHVlLmNvbnN0cnVjdG9yKSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHN0cmluZ1RhZ01hcFt0eXBlM10pIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59LCBcImluc3BlY3RDdXN0b21cIik7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBub3JtYWxpc2VPcHRpb25zKG9wdHMsIGluc3BlY3QpO1xuICBjb25zdCB7IGN1c3RvbUluc3BlY3QgfSA9IG9wdGlvbnM7XG4gIGxldCB0eXBlMyA9IHZhbHVlID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlMyA9PT0gXCJvYmplY3RcIikge1xuICAgIHR5cGUzID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpO1xuICB9XG4gIGlmICh0eXBlMyBpbiBiYXNlVHlwZXNNYXApIHtcbiAgICByZXR1cm4gYmFzZVR5cGVzTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGN1c3RvbUluc3BlY3QgJiYgdmFsdWUpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBpbnNwZWN0Q3VzdG9tKHZhbHVlLCBvcHRpb25zLCB0eXBlMywgaW5zcGVjdCk7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICByZXR1cm4gaW5zcGVjdChvdXRwdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjb25zdCBwcm90byA9IHZhbHVlID8gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA6IGZhbHNlO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gaW5zcGVjdEhUTUwodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChcImNvbnN0cnVjdG9yXCIgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWUuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgcmV0dXJuIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAodmFsdWUgPT09IE9iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCB0eXBlMyk7XG59XG5fX25hbWUoaW5zcGVjdCwgXCJpbnNwZWN0XCIpO1xuXG4vLyBsaWIvY2hhaS9jb25maWcuanNcbnZhciBjb25maWcgPSB7XG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmluY2x1ZGVTdGFja1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIHN0YWNrIHRyYWNlXG4gICAqIGlzIGluY2x1ZGVkIGluIEFzc2VydGlvbiBlcnJvciBtZXNzYWdlLiBEZWZhdWx0IG9mIGZhbHNlXG4gICAqIHN1cHByZXNzZXMgc3RhY2sgdHJhY2UgaW4gdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgPSB0cnVlOyAgLy8gZW5hYmxlIHN0YWNrIG9uIGVycm9yXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgaW5jbHVkZVN0YWNrOiBmYWxzZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcuc2hvd0RpZmZcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBvciBub3RcbiAgICogdGhlIGBzaG93RGlmZmAgZmxhZyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHRocm93blxuICAgKiBBc3NlcnRpb25FcnJvcnMuIGBmYWxzZWAgd2lsbCBhbHdheXMgYmUgYGZhbHNlYDsgYHRydWVgXG4gICAqIHdpbGwgYmUgdHJ1ZSB3aGVuIHRoZSBhc3NlcnRpb24gaGFzIHJlcXVlc3RlZCBhIGRpZmZcbiAgICogYmUgc2hvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgc2hvd0RpZmY6IHRydWUsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnRydW5jYXRlVGhyZXNob2xkXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBzZXRzIGxlbmd0aCB0aHJlc2hvbGQgZm9yIGFjdHVhbCBhbmRcbiAgICogZXhwZWN0ZWQgdmFsdWVzIGluIGFzc2VydGlvbiBlcnJvcnMuIElmIHRoaXMgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCBmb3JcbiAgICogZXhhbXBsZSBmb3IgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgdmFsdWUgaXMgcmVwbGFjZWQgd2l0aCBzb21ldGhpbmdcbiAgICogbGlrZSBgWyBBcnJheSgzKSBdYCBvciBgeyBPYmplY3QgKHByb3AxLCBwcm9wMikgfWAuXG4gICAqXG4gICAqIFNldCBpdCB0byB6ZXJvIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgdHJ1bmNhdGluZyBhbHRvZ2V0aGVyLlxuICAgKlxuICAgKiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlcmZ1bCB3aGVuIGRvaW5nIGFzc2VydGlvbnMgb24gYXJyYXlzOiBoYXZpbmcgdGhpc1xuICAgKiBzZXQgdG8gYSByZWFzb25hYmxlIGxhcmdlIHZhbHVlIG1ha2VzIHRoZSBmYWlsdXJlIG1lc3NhZ2VzIHJlYWRpbHlcbiAgICogaW5zcGVjdGFibGUuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA9IDA7ICAvLyBkaXNhYmxlIHRydW5jYXRpbmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHRydW5jYXRlVGhyZXNob2xkOiA0MCxcbiAgLyoqXG4gICAqICMjIyBjb25maWcudXNlUHJveHlcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgaWYgY2hhaSB3aWxsIHVzZSBhIFByb3h5IHRvIHRocm93XG4gICAqIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnQgcHJvcGVydHkgaXMgcmVhZCwgd2hpY2ggcHJvdGVjdHMgdXNlcnNcbiAgICogZnJvbSB0eXBvcyB3aGVuIHVzaW5nIHByb3BlcnR5LWJhc2VkIGFzc2VydGlvbnMuXG4gICAqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnVzZVByb3h5ID0gZmFsc2U7ICAvLyBkaXNhYmxlIHVzZSBvZiBQcm94eVxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlnIHZhbHVlXG4gICAqIGluIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgcHJveGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufVxuICAgKiBAcHVibGljXG4gICAqL1xuICB1c2VQcm94eTogdHJ1ZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcucHJveHlFeGNsdWRlZEtleXNcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgd2hpY2ggcHJvcGVydGllcyBzaG91bGQgYmUgaWdub3JlZFxuICAgKiBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZSBhc3NlcnRpb24uXG4gICAqIFRoaXMgaXMgb25seSBhcHBsaWVkIGlmIHRoZSBlbnZpcm9ubWVudCBDaGFpIGlzIHJ1bm5pbmcgaW4gc3VwcG9ydHMgcHJveGllcyBhbmRcbiAgICogaWYgdGhlIGB1c2VQcm94eWAgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGVuYWJsZWQuXG4gICAqIEJ5IGRlZmF1bHQsIGB0aGVuYCBhbmQgYGluc3BlY3RgIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZVxuICAgKiBhc3NlcnRpb24gb2JqZWN0IGJlY2F1c2UgdGhlIGAuaW5zcGVjdGAgcHJvcGVydHkgaXMgcmVhZCBieSBgdXRpbC5pbnNwZWN0YCAoZm9yIGV4YW1wbGUsIHdoZW5cbiAgICogdXNpbmcgYGNvbnNvbGUubG9nYCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdCkgYW5kIGAudGhlbmAgaXMgbmVjZXNzYXJ5IGZvciBwcm9taXNlIHR5cGUtY2hlY2tpbmcuXG4gICAqXG4gICAqICAgICAvLyBCeSBkZWZhdWx0IHRoZXNlIGtleXMgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbiBvYmplY3RcbiAgICogICAgIGNoYWkuY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzID0gWyd0aGVuJywgJ2luc3BlY3QnXTtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHJveHlFeGNsdWRlZEtleXM6IFtcInRoZW5cIiwgXCJjYXRjaFwiLCBcImluc3BlY3RcIiwgXCJ0b0pTT05cIl0sXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmRlZXBFcXVhbFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBhIGN1c3RvbSBmdW5jdGlvbiB0byB1c2UgZm9yIGRlZXBFcXVhbFxuICAgKiBjb21wYXJpc29ucy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGZ1bmN0aW9uIHVzZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBgZGVlcC1lcWxgIHBhY2thZ2Ugd2l0aG91dCBjdXN0b20gY29tcGFyYXRvci5cbiAgICpcbiAgICogICAgIC8vIHVzZSBhIGN1c3RvbSBjb21wYXJhdG9yXG4gICAqICAgICBjaGFpLmNvbmZpZy5kZWVwRXF1YWwgPSAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICAgKiAgICAgICAgIHJldHVybiBjaGFpLnV0aWwuZXFsKGV4cGVjdGVkLCBhY3R1YWwsIHtcbiAgICogICAgICAgICAgICAgY29tcGFyYXRvcjogKGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICogICAgICAgICAgICAgICAgIC8vIGZvciBub24gbnVtYmVyIGNvbXBhcmlzb24sIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgKiAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGV4cGVjdGVkICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gICAqICAgICAgICAgICAgICAgICAvLyBhbGxvdyBhIGRpZmZlcmVuY2Ugb2YgMTAgYmV0d2VlbiBjb21wYXJlZCBudW1iZXJzXG4gICAqICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFjdHVhbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgMTBcbiAgICogICAgICAgICAgICAgfVxuICAgKiAgICAgICAgIH0pXG4gICAqICAgICB9O1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICAgKiBAcHVibGljXG4gICAqL1xuICBkZWVwRXF1YWw6IG51bGxcbn07XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luc3BlY3QuanNcbmZ1bmN0aW9uIGluc3BlY3QyKG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycykge1xuICBsZXQgb3B0aW9ucyA9IHtcbiAgICBjb2xvcnMsXG4gICAgZGVwdGg6IHR5cGVvZiBkZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IDIgOiBkZXB0aCxcbiAgICBzaG93SGlkZGVuLFxuICAgIHRydW5jYXRlOiBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPyBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgOiBJbmZpbml0eVxuICB9O1xuICByZXR1cm4gaW5zcGVjdChvYmosIG9wdGlvbnMpO1xufVxuX19uYW1lKGluc3BlY3QyLCBcImluc3BlY3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL29iakRpc3BsYXkuanNcbmZ1bmN0aW9uIG9iakRpc3BsYXkob2JqKSB7XG4gIGxldCBzdHIgPSBpbnNwZWN0MihvYmopLCB0eXBlMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xuICBpZiAoY29uZmlnLnRydW5jYXRlVGhyZXNob2xkICYmIHN0ci5sZW5ndGggPj0gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkKSB7XG4gICAgaWYgKHR5cGUzID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCIpIHtcbiAgICAgIHJldHVybiAhb2JqLm5hbWUgfHwgb2JqLm5hbWUgPT09IFwiXCIgPyBcIltGdW5jdGlvbl1cIiA6IFwiW0Z1bmN0aW9uOiBcIiArIG9iai5uYW1lICsgXCJdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG4gICAgICByZXR1cm4gXCJbIEFycmF5KFwiICsgb2JqLmxlbmd0aCArIFwiKSBdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIikge1xuICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopLCBrc3RyID0ga2V5cy5sZW5ndGggPiAyID8ga2V5cy5zcGxpY2UoMCwgMikuam9pbihcIiwgXCIpICsgXCIsIC4uLlwiIDoga2V5cy5qb2luKFwiLCBcIik7XG4gICAgICByZXR1cm4gXCJ7IE9iamVjdCAoXCIgKyBrc3RyICsgXCIpIH1cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuX19uYW1lKG9iakRpc3BsYXksIFwib2JqRGlzcGxheVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0TWVzc2FnZS5qc1xuZnVuY3Rpb24gZ2V0TWVzc2FnZTIob2JqLCBhcmdzKSB7XG4gIGxldCBuZWdhdGUgPSBmbGFnKG9iaiwgXCJuZWdhdGVcIik7XG4gIGxldCB2YWwgPSBmbGFnKG9iaiwgXCJvYmplY3RcIik7XG4gIGxldCBleHBlY3RlZCA9IGFyZ3NbM107XG4gIGxldCBhY3R1YWwgPSBnZXRBY3R1YWwob2JqLCBhcmdzKTtcbiAgbGV0IG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdO1xuICBsZXQgZmxhZ01zZyA9IGZsYWcob2JqLCBcIm1lc3NhZ2VcIik7XG4gIGlmICh0eXBlb2YgbXNnID09PSBcImZ1bmN0aW9uXCIpIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgXCJcIjtcbiAgbXNnID0gbXNnLnJlcGxhY2UoLyNcXHt0aGlzXFx9L2csIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvYmpEaXNwbGF5KHZhbCk7XG4gIH0pLnJlcGxhY2UoLyNcXHthY3RcXH0vZywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9iakRpc3BsYXkoYWN0dWFsKTtcbiAgfSkucmVwbGFjZSgvI1xce2V4cFxcfS9nLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb2JqRGlzcGxheShleHBlY3RlZCk7XG4gIH0pO1xuICByZXR1cm4gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgKyBtc2cgOiBtc2c7XG59XG5fX25hbWUoZ2V0TWVzc2FnZTIsIFwiZ2V0TWVzc2FnZVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qc1xuZnVuY3Rpb24gdHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG9iamVjdCwgaW5jbHVkZUFsbCkge1xuICBsZXQgZmxhZ3MgPSBhc3NlcnRpb24uX19mbGFncyB8fCAoYXNzZXJ0aW9uLl9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmICghb2JqZWN0Ll9fZmxhZ3MpIHtcbiAgICBvYmplY3QuX19mbGFncyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG4gIGluY2x1ZGVBbGwgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gaW5jbHVkZUFsbCA6IHRydWU7XG4gIGZvciAobGV0IGZsYWczIGluIGZsYWdzKSB7XG4gICAgaWYgKGluY2x1ZGVBbGwgfHwgZmxhZzMgIT09IFwib2JqZWN0XCIgJiYgZmxhZzMgIT09IFwic3NmaVwiICYmIGZsYWczICE9PSBcImxvY2tTc2ZpXCIgJiYgZmxhZzMgIT0gXCJtZXNzYWdlXCIpIHtcbiAgICAgIG9iamVjdC5fX2ZsYWdzW2ZsYWczXSA9IGZsYWdzW2ZsYWczXTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZSh0cmFuc2ZlckZsYWdzLCBcInRyYW5zZmVyRmxhZ3NcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9kZWVwLWVxbC9pbmRleC5qc1xuZnVuY3Rpb24gdHlwZTIob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIm51bGxcIjtcbiAgfVxuICBjb25zdCBzdHJpbmdUYWcgPSBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG4gIGNvbnN0IHNsaWNlU3RhcnQgPSA4O1xuICBjb25zdCBzbGljZUVuZCA9IC0xO1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VFbmQpO1xufVxuX19uYW1lKHR5cGUyLCBcInR5cGVcIik7XG5mdW5jdGlvbiBGYWtlTWFwKCkge1xuICB0aGlzLl9rZXkgPSBcImNoYWkvZGVlcC1lcWxfX1wiICsgTWF0aC5yYW5kb20oKSArIERhdGUubm93KCk7XG59XG5fX25hbWUoRmFrZU1hcCwgXCJGYWtlTWFwXCIpO1xuRmFrZU1hcC5wcm90b3R5cGUgPSB7XG4gIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIGtleVt0aGlzLl9rZXldO1xuICB9LCBcImdldFwiKSxcbiAgc2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5fa2V5LCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgXCJzZXRcIilcbn07XG52YXIgTWVtb2l6ZU1hcCA9IHR5cGVvZiBXZWFrTWFwID09PSBcImZ1bmN0aW9uXCIgPyBXZWFrTWFwIDogRmFrZU1hcDtcbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbWVtb2l6ZU1hcCkge1xuICBpZiAoIW1lbW9pemVNYXAgfHwgaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIHZhciByZXN1bHQgPSBsZWZ0SGFuZE1hcC5nZXQocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShtZW1vaXplQ29tcGFyZSwgXCJtZW1vaXplQ29tcGFyZVwiKTtcbmZ1bmN0aW9uIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBtZW1vaXplTWFwLCByZXN1bHQpIHtcbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGxlZnRIYW5kTWFwID0gbWVtb2l6ZU1hcC5nZXQobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kTWFwKSB7XG4gICAgbGVmdEhhbmRNYXAuc2V0KHJpZ2h0SGFuZE9wZXJhbmQsIHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdEhhbmRNYXAgPSBuZXcgTWVtb2l6ZU1hcCgpO1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICAgIG1lbW9pemVNYXAuc2V0KGxlZnRIYW5kT3BlcmFuZCwgbGVmdEhhbmRNYXApO1xuICB9XG59XG5fX25hbWUobWVtb2l6ZVNldCwgXCJtZW1vaXplU2V0XCIpO1xudmFyIGRlZXBfZXFsX2RlZmF1bHQgPSBkZWVwRXF1YWw7XG5mdW5jdGlvbiBkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxuICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xufVxuX19uYW1lKGRlZXBFcXVhbCwgXCJkZWVwRXF1YWxcIik7XG5mdW5jdGlvbiBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCA9PT0gcmlnaHRIYW5kT3BlcmFuZCkge1xuICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQgIT09IDAgfHwgMSAvIGxlZnRIYW5kT3BlcmFuZCA9PT0gMSAvIHJpZ2h0SGFuZE9wZXJhbmQ7XG4gIH1cbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCAhPT0gbGVmdEhhbmRPcGVyYW5kICYmIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJpZ2h0SGFuZE9wZXJhbmQgIT09IHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShzaW1wbGVFcXVhbCwgXCJzaW1wbGVFcXVhbFwiKTtcbmZ1bmN0aW9uIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMubWVtb2l6ZSA9IG9wdGlvbnMubWVtb2l6ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IG9wdGlvbnMubWVtb2l6ZSB8fCBuZXcgTWVtb2l6ZU1hcCgpO1xuICB2YXIgY29tcGFyYXRvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wYXJhdG9yO1xuICB2YXIgbWVtb2l6ZVJlc3VsdExlZnQgPSBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSk7XG4gIGlmIChtZW1vaXplUmVzdWx0TGVmdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0TGVmdDtcbiAgfVxuICB2YXIgbWVtb2l6ZVJlc3VsdFJpZ2h0ID0gbWVtb2l6ZUNvbXBhcmUocmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdFJpZ2h0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lbW9pemVSZXN1bHRSaWdodDtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIHZhciBjb21wYXJhdG9yUmVzdWx0ID0gY29tcGFyYXRvcihsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmIChjb21wYXJhdG9yUmVzdWx0ID09PSBmYWxzZSB8fCBjb21wYXJhdG9yUmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBjb21wYXJhdG9yUmVzdWx0KTtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yUmVzdWx0O1xuICAgIH1cbiAgICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAoc2ltcGxlUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc2ltcGxlUmVzdWx0O1xuICAgIH1cbiAgfVxuICB2YXIgbGVmdEhhbmRUeXBlID0gdHlwZTIobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kVHlwZSAhPT0gdHlwZTIocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHRydWUpO1xuICB2YXIgcmVzdWx0ID0gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKTtcbiAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShleHRlbnNpdmVEZWVwRXF1YWwsIFwiZXh0ZW5zaXZlRGVlcEVxdWFsXCIpO1xuZnVuY3Rpb24gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKSB7XG4gIHN3aXRjaCAobGVmdEhhbmRUeXBlKSB7XG4gICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgIGNhc2UgXCJOdW1iZXJcIjpcbiAgICBjYXNlIFwiQm9vbGVhblwiOlxuICAgIGNhc2UgXCJEYXRlXCI6XG4gICAgICByZXR1cm4gZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZC52YWx1ZU9mKCksIHJpZ2h0SGFuZE9wZXJhbmQudmFsdWVPZigpKTtcbiAgICBjYXNlIFwiUHJvbWlzZVwiOlxuICAgIGNhc2UgXCJTeW1ib2xcIjpcbiAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICBjYXNlIFwiV2Vha01hcFwiOlxuICAgIGNhc2UgXCJXZWFrU2V0XCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kO1xuICAgIGNhc2UgXCJFcnJvclwiOlxuICAgICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIFtcIm5hbWVcIiwgXCJtZXNzYWdlXCIsIFwiY29kZVwiXSwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIkFyZ3VtZW50c1wiOlxuICAgIGNhc2UgXCJJbnQ4QXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgIGNhc2UgXCJVaW50OENsYW1wZWRBcnJheVwiOlxuICAgIGNhc2UgXCJJbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIkludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiRmxvYXQzMkFycmF5XCI6XG4gICAgY2FzZSBcIkZsb2F0NjRBcnJheVwiOlxuICAgIGNhc2UgXCJBcnJheVwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiUmVnRXhwXCI6XG4gICAgICByZXR1cm4gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBjYXNlIFwiR2VuZXJhdG9yXCI6XG4gICAgICByZXR1cm4gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiRGF0YVZpZXdcIjpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKG5ldyBVaW50OEFycmF5KGxlZnRIYW5kT3BlcmFuZC5idWZmZXIpLCBuZXcgVWludDhBcnJheShyaWdodEhhbmRPcGVyYW5kLmJ1ZmZlciksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJBcnJheUJ1ZmZlclwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgIHJldHVybiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiTWFwXCI6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluRGF0ZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpblRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5EYXRlVGltZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5JbnN0YW50XCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlpvbmVkRGF0ZVRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5ZZWFyTW9udGhcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5Nb250aERheVwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC5lcXVhbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLkR1cmF0aW9uXCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvdGFsKFwibmFub3NlY29uZHNcIikgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG90YWwoXCJuYW5vc2Vjb25kc1wiKTtcbiAgICBjYXNlIFwiVGVtcG9yYWwuVGltZVpvbmVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuQ2FsZW5kYXJcIjpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG9TdHJpbmcoKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b1N0cmluZygpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb2JqZWN0RXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxufVxuX19uYW1lKGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZSwgXCJleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGVcIik7XG5mdW5jdGlvbiByZWdleHBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b1N0cmluZygpID09PSByaWdodEhhbmRPcGVyYW5kLnRvU3RyaW5nKCk7XG59XG5fX25hbWUocmVnZXhwRXF1YWwsIFwicmVnZXhwRXF1YWxcIik7XG5mdW5jdGlvbiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplICE9PSByaWdodEhhbmRPcGVyYW5kLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNpemVFcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGVmdEhhbmRJdGVtcyA9IFtdO1xuICB2YXIgcmlnaHRIYW5kSXRlbXMgPSBbXTtcbiAgbGVmdEhhbmRPcGVyYW5kLmZvckVhY2goLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnYXRoZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICBsZWZ0SGFuZEl0ZW1zLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSwgXCJnYXRoZXJFbnRyaWVzXCIpKTtcbiAgcmlnaHRIYW5kT3BlcmFuZC5mb3JFYWNoKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgcmlnaHRIYW5kSXRlbXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LCBcImdhdGhlckVudHJpZXNcIikpO1xuICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZEl0ZW1zLnNvcnQoKSwgcmlnaHRIYW5kSXRlbXMuc29ydCgpLCBvcHRpb25zKTtcbn1cbl9fbmFtZShlbnRyaWVzRXF1YWwsIFwiZW50cmllc0VxdWFsXCIpO1xuZnVuY3Rpb24gaXRlcmFibGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGxlZnRIYW5kT3BlcmFuZC5sZW5ndGg7XG4gIGlmIChsZW5ndGggIT09IHJpZ2h0SGFuZE9wZXJhbmQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChsZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZFtpbmRleF0sIHJpZ2h0SGFuZE9wZXJhbmRbaW5kZXhdLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoaXRlcmFibGVFcXVhbCwgXCJpdGVyYWJsZUVxdWFsXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHJldHVybiBpdGVyYWJsZUVxdWFsKGdldEdlbmVyYXRvckVudHJpZXMobGVmdEhhbmRPcGVyYW5kKSwgZ2V0R2VuZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKSwgb3B0aW9ucyk7XG59XG5fX25hbWUoZ2VuZXJhdG9yRXF1YWwsIFwiZ2VuZXJhdG9yRXF1YWxcIik7XG5mdW5jdGlvbiBoYXNJdGVyYXRvckZ1bmN0aW9uKHRhcmdldCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG59XG5fX25hbWUoaGFzSXRlcmF0b3JGdW5jdGlvbiwgXCJoYXNJdGVyYXRvckZ1bmN0aW9uXCIpO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JFbnRyaWVzKHRhcmdldCkge1xuICBpZiAoaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBnZXRHZW5lcmF0b3JFbnRyaWVzKHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdKCkpO1xuICAgIH0gY2F0Y2ggKGl0ZXJhdG9yRXJyb3IpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuX19uYW1lKGdldEl0ZXJhdG9yRW50cmllcywgXCJnZXRJdGVyYXRvckVudHJpZXNcIik7XG5mdW5jdGlvbiBnZXRHZW5lcmF0b3JFbnRyaWVzKGdlbmVyYXRvcikge1xuICB2YXIgZ2VuZXJhdG9yUmVzdWx0ID0gZ2VuZXJhdG9yLm5leHQoKTtcbiAgdmFyIGFjY3VtdWxhdG9yID0gW2dlbmVyYXRvclJlc3VsdC52YWx1ZV07XG4gIHdoaWxlIChnZW5lcmF0b3JSZXN1bHQuZG9uZSA9PT0gZmFsc2UpIHtcbiAgICBnZW5lcmF0b3JSZXN1bHQgPSBnZW5lcmF0b3IubmV4dCgpO1xuICAgIGFjY3VtdWxhdG9yLnB1c2goZ2VuZXJhdG9yUmVzdWx0LnZhbHVlKTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5fX25hbWUoZ2V0R2VuZXJhdG9yRW50cmllcywgXCJnZXRHZW5lcmF0b3JFbnRyaWVzXCIpO1xuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZUtleXModGFyZ2V0KSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlS2V5cywgXCJnZXRFbnVtZXJhYmxlS2V5c1wiKTtcbmZ1bmN0aW9uIGdldEVudW1lcmFibGVTeW1ib2xzKHRhcmdldCkge1xuICB2YXIga2V5cyA9IFtdO1xuICB2YXIgYWxsS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGtleSA9IGFsbEtleXNbaV07XG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpLmVudW1lcmFibGUpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlU3ltYm9scywgXCJnZXRFbnVtZXJhYmxlU3ltYm9sc1wiKTtcbmZ1bmN0aW9uIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kW2tleXNbaV1dLCByaWdodEhhbmRPcGVyYW5kW2tleXNbaV1dLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoa2V5c0VxdWFsLCBcImtleXNFcXVhbFwiKTtcbmZ1bmN0aW9uIG9iamVjdEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB2YXIgbGVmdEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZEtleXMgPSBnZXRFbnVtZXJhYmxlS2V5cyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgdmFyIGxlZnRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRTeW1ib2xzID0gZ2V0RW51bWVyYWJsZVN5bWJvbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIGxlZnRIYW5kS2V5cyA9IGxlZnRIYW5kS2V5cy5jb25jYXQobGVmdEhhbmRTeW1ib2xzKTtcbiAgcmlnaHRIYW5kS2V5cyA9IHJpZ2h0SGFuZEtleXMuY29uY2F0KHJpZ2h0SGFuZFN5bWJvbHMpO1xuICBpZiAobGVmdEhhbmRLZXlzLmxlbmd0aCAmJiBsZWZ0SGFuZEtleXMubGVuZ3RoID09PSByaWdodEhhbmRLZXlzLmxlbmd0aCkge1xuICAgIGlmIChpdGVyYWJsZUVxdWFsKG1hcFN5bWJvbHMobGVmdEhhbmRLZXlzKS5zb3J0KCksIG1hcFN5bWJvbHMocmlnaHRIYW5kS2V5cykuc29ydCgpKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kS2V5cywgb3B0aW9ucyk7XG4gIH1cbiAgdmFyIGxlZnRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kRW50cmllcy5sZW5ndGggJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gcmlnaHRIYW5kRW50cmllcy5sZW5ndGgpIHtcbiAgICBsZWZ0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJpZ2h0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kRW50cmllcywgcmlnaHRIYW5kRW50cmllcywgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGxlZnRIYW5kS2V5cy5sZW5ndGggPT09IDAgJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRLZXlzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShvYmplY3RFcXVhbCwgXCJvYmplY3RFcXVhbFwiKTtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCI7XG59XG5fX25hbWUoaXNQcmltaXRpdmUsIFwiaXNQcmltaXRpdmVcIik7XG5mdW5jdGlvbiBtYXBTeW1ib2xzKGFycikge1xuICByZXR1cm4gYXJyLm1hcCgvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG1hcFN5bWJvbChlbnRyeSkge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgIHJldHVybiBlbnRyeS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0sIFwibWFwU3ltYm9sXCIpKTtcbn1cbl9fbmFtZShtYXBTeW1ib2xzLCBcIm1hcFN5bWJvbHNcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9wYXRodmFsL2luZGV4LmpzXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgfHwgb2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBuYW1lIGluIE9iamVjdChvYmopO1xufVxuX19uYW1lKGhhc1Byb3BlcnR5LCBcImhhc1Byb3BlcnR5XCIpO1xuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgY29uc3Qgc3RyID0gcGF0aC5yZXBsYWNlKC8oW15cXFxcXSlcXFsvZywgXCIkMS5bXCIpO1xuICBjb25zdCBwYXJ0cyA9IHN0ci5tYXRjaCgvKFxcXFxcXC58W14uXSs/KSsvZyk7XG4gIHJldHVybiBwYXJ0cy5tYXAoKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBcImNvbnN0cnVjdG9yXCIgfHwgdmFsdWUgPT09IFwiX19wcm90b19fXCIgfHwgdmFsdWUgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcmVnZXhwID0gL15cXFsoXFxkKylcXF0kLztcbiAgICBjb25zdCBtQXJyID0gcmVnZXhwLmV4ZWModmFsdWUpO1xuICAgIGxldCBwYXJzZWQgPSBudWxsO1xuICAgIGlmIChtQXJyKSB7XG4gICAgICBwYXJzZWQgPSB7IGk6IHBhcnNlRmxvYXQobUFyclsxXSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0geyBwOiB2YWx1ZS5yZXBsYWNlKC9cXFxcKFsuW1xcXV0pL2csIFwiJDFcIikgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSk7XG59XG5fX25hbWUocGFyc2VQYXRoLCBcInBhcnNlUGF0aFwiKTtcbmZ1bmN0aW9uIGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkLCBwYXRoRGVwdGgpIHtcbiAgbGV0IHRlbXBvcmFyeVZhbHVlID0gb2JqO1xuICBsZXQgcmVzID0gbnVsbDtcbiAgcGF0aERlcHRoID0gdHlwZW9mIHBhdGhEZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IHBhcnNlZC5sZW5ndGggOiBwYXRoRGVwdGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aERlcHRoOyBpKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFyc2VkW2ldO1xuICAgIGlmICh0ZW1wb3JhcnlWYWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0LnAgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LmldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LnBdO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IHBhdGhEZXB0aCAtIDEpIHtcbiAgICAgICAgcmVzID0gdGVtcG9yYXJ5VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5fX25hbWUoaW50ZXJuYWxHZXRQYXRoVmFsdWUsIFwiaW50ZXJuYWxHZXRQYXRoVmFsdWVcIik7XG5mdW5jdGlvbiBnZXRQYXRoSW5mbyhvYmosIHBhdGgpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VQYXRoKHBhdGgpO1xuICBjb25zdCBsYXN0ID0gcGFyc2VkW3BhcnNlZC5sZW5ndGggLSAxXTtcbiAgY29uc3QgaW5mbyA9IHtcbiAgICBwYXJlbnQ6IHBhcnNlZC5sZW5ndGggPiAxID8gaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhcnNlZC5sZW5ndGggLSAxKSA6IG9iaixcbiAgICBuYW1lOiBsYXN0LnAgfHwgbGFzdC5pLFxuICAgIHZhbHVlOiBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZClcbiAgfTtcbiAgaW5mby5leGlzdHMgPSBoYXNQcm9wZXJ0eShpbmZvLnBhcmVudCwgaW5mby5uYW1lKTtcbiAgcmV0dXJuIGluZm87XG59XG5fX25hbWUoZ2V0UGF0aEluZm8sIFwiZ2V0UGF0aEluZm9cIik7XG5cbi8vIGxpYi9jaGFpL2Fzc2VydGlvbi5qc1xudmFyIF9Bc3NlcnRpb24gPSBjbGFzcyBfQXNzZXJ0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgb2JqZWN0IGZvciBjaGFpbmluZy5cbiAgICogYEFzc2VydGlvbmAgb2JqZWN0cyBjb250YWluIG1ldGFkYXRhIGluIHRoZSBmb3JtIG9mIGZsYWdzLiBUaHJlZSBmbGFncyBjYW5cbiAgICogYmUgYXNzaWduZWQgZHVyaW5nIGluc3RhbnRpYXRpb24gYnkgcGFzc2luZyBhcmd1bWVudHMgdG8gdGhpcyBjb25zdHJ1Y3RvcjpcbiAgICpcbiAgICogLSBgb2JqZWN0YDogVGhpcyBmbGFnIGNvbnRhaW5zIHRoZSB0YXJnZXQgb2YgdGhlIGFzc2VydGlvbi4gRm9yIGV4YW1wbGUsIGluXG4gICAqIHRoZSBhc3NlcnRpb24gYGV4cGVjdChudW1LaXR0ZW5zKS50by5lcXVhbCg3KTtgLCB0aGUgYG9iamVjdGAgZmxhZyB3aWxsXG4gICAqIGNvbnRhaW4gYG51bUtpdHRlbnNgIHNvIHRoYXQgdGhlIGBlcXVhbGAgYXNzZXJ0aW9uIGNhbiByZWZlcmVuY2UgaXQgd2hlblxuICAgKiBuZWVkZWQuXG4gICAqXG4gICAqIC0gYG1lc3NhZ2VgOiBUaGlzIGZsYWcgY29udGFpbnMgYW4gb3B0aW9uYWwgY3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gYmVcbiAgICogcHJlcGVuZGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQncyBnZW5lcmF0ZWQgYnkgdGhlIGFzc2VydGlvbiB3aGVuIGl0XG4gICAqIGZhaWxzLlxuICAgKlxuICAgKiAtIGBzc2ZpYDogVGhpcyBmbGFnIHN0YW5kcyBmb3IgXCJzdGFydCBzdGFjayBmdW5jdGlvbiBpbmRpY2F0b3JcIi4gSXRcbiAgICogY29udGFpbnMgYSBmdW5jdGlvbiByZWZlcmVuY2UgdGhhdCBzZXJ2ZXMgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvclxuICAgKiByZW1vdmluZyBmcmFtZXMgZnJvbSB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGVycm9yIHRoYXQncyBjcmVhdGVkIGJ5IHRoZVxuICAgKiBhc3NlcnRpb24gd2hlbiBpdCBmYWlscy4gVGhlIGdvYWwgaXMgdG8gcHJvdmlkZSBhIGNsZWFuZXIgc3RhY2sgdHJhY2UgdG9cbiAgICogZW5kIHVzZXJzIGJ5IHJlbW92aW5nIENoYWkncyBpbnRlcm5hbCBmdW5jdGlvbnMuIE5vdGUgdGhhdCBpdCBvbmx5IHdvcmtzXG4gICAqIGluIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgYEVycm9yLmNhcHR1cmVTdGFja1RyYWNlYCwgYW5kIG9ubHkgd2hlblxuICAgKiBgQ2hhaS5jb25maWcuaW5jbHVkZVN0YWNrYCBoYXNuJ3QgYmVlbiBzZXQgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogLSBgbG9ja1NzZmlgOiBUaGlzIGZsYWcgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIGBzc2ZpYCBmbGFnXG4gICAqIHNob3VsZCByZXRhaW4gaXRzIGN1cnJlbnQgdmFsdWUsIGV2ZW4gYXMgYXNzZXJ0aW9ucyBhcmUgY2hhaW5lZCBvZmYgb2ZcbiAgICogdGhpcyBvYmplY3QuIFRoaXMgaXMgdXN1YWxseSBzZXQgdG8gYHRydWVgIHdoZW4gY3JlYXRpbmcgYSBuZXcgYXNzZXJ0aW9uXG4gICAqIGZyb20gd2l0aGluIGFub3RoZXIgYXNzZXJ0aW9uLiBJdCdzIGFsc28gdGVtcG9yYXJpbHkgc2V0IHRvIGB0cnVlYCBiZWZvcmVcbiAgICogYW4gb3ZlcndyaXR0ZW4gYXNzZXJ0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSBvdmVyd3JpdGluZyBhc3NlcnRpb24uXG4gICAqXG4gICAqIC0gYGVxbGA6IFRoaXMgZmxhZyBjb250YWlucyB0aGUgZGVlcEVxdWFsIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYnkgdGhlIGFzc2VydGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHt1bmtub3dufSBvYmogdGFyZ2V0IG9mIHRoZSBhc3NlcnRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFttc2ddIChvcHRpb25hbCkgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3NzZmldIChvcHRpb25hbCkgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIHN0YWNrIGZyYW1lc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtsb2NrU3NmaV0gKG9wdGlvbmFsKSB3aGV0aGVyIG9yIG5vdCB0aGUgc3NmaSBmbGFnIGlzIGxvY2tlZFxuICAgKi9cbiAgY29uc3RydWN0b3Iob2JqLCBtc2csIHNzZmksIGxvY2tTc2ZpKSB7XG4gICAgLyoqIEB0eXBlIHt7fX0gKi9cbiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsIFwiX19mbGFnc1wiLCB7fSk7XG4gICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgc3NmaSB8fCBfQXNzZXJ0aW9uKTtcbiAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgbG9ja1NzZmkpO1xuICAgIGZsYWcodGhpcywgXCJvYmplY3RcIiwgb2JqKTtcbiAgICBmbGFnKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICAgIGZsYWcodGhpcywgXCJlcWxcIiwgY29uZmlnLmRlZXBFcXVhbCB8fCBkZWVwX2VxbF9kZWZhdWx0KTtcbiAgICByZXR1cm4gcHJveGlmeSh0aGlzKTtcbiAgfVxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIHN0YXRpYyBnZXQgaW5jbHVkZVN0YWNrKCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuXCJcbiAgICApO1xuICAgIHJldHVybiBjb25maWcuaW5jbHVkZVN0YWNrO1xuICB9XG4gIC8qKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlICovXG4gIHN0YXRpYyBzZXQgaW5jbHVkZVN0YWNrKHZhbHVlKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC5cIlxuICAgICk7XG4gICAgY29uZmlnLmluY2x1ZGVTdGFjayA9IHZhbHVlO1xuICB9XG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgc3RhdGljIGdldCBzaG93RGlmZigpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIkFzc2VydGlvbi5zaG93RGlmZiBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuc2hvd0RpZmYgaW5zdGVhZC5cIlxuICAgICk7XG4gICAgcmV0dXJuIGNvbmZpZy5zaG93RGlmZjtcbiAgfVxuICAvKiogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAqL1xuICBzdGF0aWMgc2V0IHNob3dEaWZmKHZhbHVlKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJBc3NlcnRpb24uc2hvd0RpZmYgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLnNob3dEaWZmIGluc3RlYWQuXCJcbiAgICApO1xuICAgIGNvbmZpZy5zaG93RGlmZiA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKi9cbiAgc3RhdGljIGFkZFByb3BlcnR5KG5hbWUsIGZuKSB7XG4gICAgYWRkUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICovXG4gIHN0YXRpYyBhZGRNZXRob2QobmFtZSwgZm4pIHtcbiAgICBhZGRNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhaW5pbmdCZWhhdmlvclxuICAgKi9cbiAgc3RhdGljIGFkZENoYWluYWJsZU1ldGhvZChuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIGFkZENoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKi9cbiAgc3RhdGljIG92ZXJ3cml0ZVByb3BlcnR5KG5hbWUsIGZuKSB7XG4gICAgb3ZlcndyaXRlUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICovXG4gIHN0YXRpYyBvdmVyd3JpdGVNZXRob2QobmFtZSwgZm4pIHtcbiAgICBvdmVyd3JpdGVNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhaW5pbmdCZWhhdmlvclxuICAgKi9cbiAgc3RhdGljIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZChuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xuICB9XG4gIC8qKlxuICAgKiAjIyMgLmFzc2VydChleHByZXNzaW9uLCBtZXNzYWdlLCBuZWdhdGVNZXNzYWdlLCBleHBlY3RlZCwgYWN0dWFsLCBzaG93RGlmZilcbiAgICpcbiAgICogRXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiBhbmQgY2hlY2sgZXhwZWN0YXRpb25zLiBUaHJvd3MgQXNzZXJ0aW9uRXJyb3IgZm9yIHJlcG9ydGluZyBpZiB0ZXN0IGRvZXNuJ3QgcGFzcy5cbiAgICpcbiAgICogQG5hbWUgYXNzZXJ0XG4gICAqIEBwYXJhbSB7dW5rbm93bn0gX2V4cHIgdG8gYmUgdGVzdGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRnVuY3Rpb259IG1zZyBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgbWVzc2FnZSB0byBkaXNwbGF5IGlmIGV4cHJlc3Npb24gZmFpbHNcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBGdW5jdGlvbn0gX25lZ2F0ZU1zZyBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgbmVnYXRlZE1lc3NhZ2UgdG8gZGlzcGxheSBpZiBuZWdhdGVkIGV4cHJlc3Npb24gZmFpbHNcbiAgICogQHBhcmFtIHt1bmtub3dufSBleHBlY3RlZCB2YWx1ZSAocmVtZW1iZXIgdG8gY2hlY2sgZm9yIG5lZ2F0aW9uKVxuICAgKiBAcGFyYW0ge3Vua25vd259IF9hY3R1YWwgKG9wdGlvbmFsKSB3aWxsIGRlZmF1bHQgdG8gYHRoaXMub2JqYFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dEaWZmIChvcHRpb25hbCkgd2hlbiBzZXQgdG8gYHRydWVgLCBhc3NlcnQgd2lsbCBkaXNwbGF5IGEgZGlmZiBpbiBhZGRpdGlvbiB0byB0aGUgbWVzc2FnZSBpZiBleHByZXNzaW9uIGZhaWxzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgYXNzZXJ0KF9leHByLCBtc2csIF9uZWdhdGVNc2csIGV4cGVjdGVkLCBfYWN0dWFsLCBzaG93RGlmZikge1xuICAgIGNvbnN0IG9rID0gdGVzdCh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChmYWxzZSAhPT0gc2hvd0RpZmYpIHNob3dEaWZmID0gdHJ1ZTtcbiAgICBpZiAodm9pZCAwID09PSBleHBlY3RlZCAmJiB2b2lkIDAgPT09IF9hY3R1YWwpIHNob3dEaWZmID0gZmFsc2U7XG4gICAgaWYgKHRydWUgIT09IGNvbmZpZy5zaG93RGlmZikgc2hvd0RpZmYgPSBmYWxzZTtcbiAgICBpZiAoIW9rKSB7XG4gICAgICBtc2cgPSBnZXRNZXNzYWdlMih0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgY29uc3QgYWN0dWFsID0gZ2V0QWN0dWFsKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBjb25zdCBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMgPSB7XG4gICAgICAgIGFjdHVhbCxcbiAgICAgICAgZXhwZWN0ZWQsXG4gICAgICAgIHNob3dEaWZmXG4gICAgICB9O1xuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBnZXRPcGVyYXRvcih0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKG9wZXJhdG9yKSB7XG4gICAgICAgIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBtc2csXG4gICAgICAgIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcyxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBOb3Qgc3VyZSB3aGF0IHRvIGRvIGFib3V0IHRoZXNlIHR5cGVzIHlldFxuICAgICAgICBjb25maWcuaW5jbHVkZVN0YWNrID8gdGhpcy5hc3NlcnQgOiBmbGFnKHRoaXMsIFwic3NmaVwiKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFF1aWNrIHJlZmVyZW5jZSB0byBzdG9yZWQgYGFjdHVhbGAgdmFsdWUgZm9yIHBsdWdpbiBkZXZlbG9wZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dW5rbm93bn1cbiAgICovXG4gIGdldCBfb2JqKCkge1xuICAgIHJldHVybiBmbGFnKHRoaXMsIFwib2JqZWN0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBRdWljayByZWZlcmVuY2UgdG8gc3RvcmVkIGBhY3R1YWxgIHZhbHVlIGZvciBwbHVnaW4gZGV2ZWxvcGVycy5cbiAgICpcbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWxcbiAgICovXG4gIHNldCBfb2JqKHZhbCkge1xuICAgIGZsYWcodGhpcywgXCJvYmplY3RcIiwgdmFsKTtcbiAgfVxufTtcbl9fbmFtZShfQXNzZXJ0aW9uLCBcIkFzc2VydGlvblwiKTtcbnZhciBBc3NlcnRpb24gPSBfQXNzZXJ0aW9uO1xuXG4vLyBsaWIvY2hhaS91dGlscy9ldmVudHMuanNcbnZhciBldmVudHMgPSBuZXcgRXZlbnRUYXJnZXQoKTtcbnZhciBfUGx1Z2luRXZlbnQgPSBjbGFzcyBfUGx1Z2luRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yKHR5cGUzLCBuYW1lLCBmbikge1xuICAgIHN1cGVyKHR5cGUzKTtcbiAgICB0aGlzLm5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgdGhpcy5mbiA9IGZuO1xuICB9XG59O1xuX19uYW1lKF9QbHVnaW5FdmVudCwgXCJQbHVnaW5FdmVudFwiKTtcbnZhciBQbHVnaW5FdmVudCA9IF9QbHVnaW5FdmVudDtcblxuLy8gbGliL2NoYWkvdXRpbHMvaXNQcm94eUVuYWJsZWQuanNcbmZ1bmN0aW9uIGlzUHJveHlFbmFibGVkKCkge1xuICByZXR1cm4gY29uZmlnLnVzZVByb3h5ICYmIHR5cGVvZiBQcm94eSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIjtcbn1cbl9fbmFtZShpc1Byb3h5RW5hYmxlZCwgXCJpc1Byb3h5RW5hYmxlZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkUHJvcGVydHkuanNcbmZ1bmN0aW9uIGFkZFByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKSB7XG4gIGdldHRlciA9IGdldHRlciA9PT0gdm9pZCAwID8gZnVuY3Rpb24oKSB7XG4gIH0gOiBnZXR0ZXI7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIG5hbWUsIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIoKSB7XG4gICAgICBpZiAoIWlzUHJveHlFbmFibGVkKCkgJiYgIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBwcm9wZXJ0eUdldHRlcik7XG4gICAgICB9XG4gICAgICBsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHJldHVybiByZXN1bHQ7XG4gICAgICBsZXQgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICB9LCBcInByb3BlcnR5R2V0dGVyXCIpLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgZXZlbnRzLmRpc3BhdGNoRXZlbnQobmV3IFBsdWdpbkV2ZW50KFwiYWRkUHJvcGVydHlcIiwgbmFtZSwgZ2V0dGVyKSk7XG59XG5fX25hbWUoYWRkUHJvcGVydHksIFwiYWRkUHJvcGVydHlcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZExlbmd0aEd1YXJkLmpzXG52YXIgZm5MZW5ndGhEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmdW5jdGlvbigpIHtcbn0sIFwibGVuZ3RoXCIpO1xuZnVuY3Rpb24gYWRkTGVuZ3RoR3VhcmQoZm4sIGFzc2VydGlvbk5hbWUsIGlzQ2hhaW5hYmxlKSB7XG4gIGlmICghZm5MZW5ndGhEZXNjLmNvbmZpZ3VyYWJsZSkgcmV0dXJuIGZuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIFwibGVuZ3RoXCIsIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoaXNDaGFpbmFibGUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBEdWUgdG8gYSBjb21wYXRpYmlsaXR5IGlzc3VlLCBcImxlbmd0aFwiIGNhbm5vdCBkaXJlY3RseSBmb2xsb3cgXCInICsgYXNzZXJ0aW9uTmFtZSArICdcIi4gVXNlIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aE9mXCIgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnXCIuJ1xuICAgICAgKTtcbiAgICB9LCBcImdldFwiKVxuICB9KTtcbiAgcmV0dXJuIGZuO1xufVxuX19uYW1lKGFkZExlbmd0aEd1YXJkLCBcImFkZExlbmd0aEd1YXJkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRQcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKG9iamVjdCkge1xuICBsZXQgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgZnVuY3Rpb24gYWRkUHJvcGVydHkyKHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGFkZFByb3BlcnR5MiwgXCJhZGRQcm9wZXJ0eVwiKTtcbiAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gIHdoaWxlIChwcm90byAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGFkZFByb3BlcnR5Mik7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoZ2V0UHJvcGVydGllcywgXCJnZXRQcm9wZXJ0aWVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9wcm94aWZ5LmpzXG52YXIgYnVpbHRpbnMgPSBbXCJfX2ZsYWdzXCIsIFwiX19tZXRob2RzXCIsIFwiX29ialwiLCBcImFzc2VydFwiXTtcbmZ1bmN0aW9uIHByb3hpZnkob2JqLCBub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gIGlmICghaXNQcm94eUVuYWJsZWQoKSkgcmV0dXJuIG9iajtcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHJveHlHZXR0ZXIodGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIiAmJiBjb25maWcucHJveHlFeGNsdWRlZEtleXMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmICFSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5KSkge1xuICAgICAgICBpZiAobm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSkge1xuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSArIFwiLlwiICsgcHJvcGVydHkgKyAnLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyAnXCIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1Z2dlc3Rpb24gPSBudWxsO1xuICAgICAgICBsZXQgc3VnZ2VzdGlvbkRpc3RhbmNlID0gNDtcbiAgICAgICAgZ2V0UHJvcGVydGllcyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIHdlIGFjdHVhbGx5IG1lYW4gdG8gY2hlY2sgYE9iamVjdC5wcm90b3R5cGVgIGhlcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApICYmIGJ1aWx0aW5zLmluZGV4T2YocHJvcCkgPT09IC0xXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgZGlzdCA9IHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKHByb3BlcnR5LCBwcm9wLCBzdWdnZXN0aW9uRGlzdGFuY2UpO1xuICAgICAgICAgICAgaWYgKGRpc3QgPCBzdWdnZXN0aW9uRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IHByb3A7XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25EaXN0YW5jZSA9IGRpc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIHByb3BlcnR5ICsgJy4gRGlkIHlvdSBtZWFuIFwiJyArIHN1Z2dlc3Rpb24gKyAnXCI/J1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgcHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYnVpbHRpbnMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmICFmbGFnKHRhcmdldCwgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICBmbGFnKHRhcmdldCwgXCJzc2ZpXCIsIHByb3h5R2V0dGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICB9LCBcInByb3h5R2V0dGVyXCIpXG4gIH0pO1xufVxuX19uYW1lKHByb3hpZnksIFwicHJveGlmeVwiKTtcbmZ1bmN0aW9uIHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKHN0ckEsIHN0ckIsIGNhcCkge1xuICBpZiAoTWF0aC5hYnMoc3RyQS5sZW5ndGggLSBzdHJCLmxlbmd0aCkgPj0gY2FwKSB7XG4gICAgcmV0dXJuIGNhcDtcbiAgfVxuICBsZXQgbWVtbyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgbWVtb1tpXSA9IEFycmF5KHN0ckIubGVuZ3RoICsgMSkuZmlsbCgwKTtcbiAgICBtZW1vW2ldWzBdID0gaTtcbiAgfVxuICBmb3IgKGxldCBqID0gMDsgaiA8IHN0ckIubGVuZ3RoOyBqKyspIHtcbiAgICBtZW1vWzBdW2pdID0gajtcbiAgfVxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNoID0gc3RyQS5jaGFyQ29kZUF0KGkgLSAxKTtcbiAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBzdHJCLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoaSAtIGopID49IGNhcCkge1xuICAgICAgICBtZW1vW2ldW2pdID0gY2FwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG1lbW9baV1bal0gPSBNYXRoLm1pbihcbiAgICAgICAgbWVtb1tpIC0gMV1bal0gKyAxLFxuICAgICAgICBtZW1vW2ldW2ogLSAxXSArIDEsXG4gICAgICAgIG1lbW9baSAtIDFdW2ogLSAxXSArIChjaCA9PT0gc3RyQi5jaGFyQ29kZUF0KGogLSAxKSA/IDAgOiAxKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lbW9bc3RyQS5sZW5ndGhdW3N0ckIubGVuZ3RoXTtcbn1cbl9fbmFtZShzdHJpbmdEaXN0YW5jZUNhcHBlZCwgXCJzdHJpbmdEaXN0YW5jZUNhcHBlZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkTWV0aG9kLmpzXG5mdW5jdGlvbiBhZGRNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgbGV0IG1ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIGlmICghZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBtZXRob2RXcmFwcGVyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkgcmV0dXJuIHJlc3VsdDtcbiAgICBsZXQgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm1ldGhvZFdyYXBwZXJcIik7XG4gIGFkZExlbmd0aEd1YXJkKG1ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShtZXRob2RXcmFwcGVyLCBuYW1lKTtcbiAgZXZlbnRzLmRpc3BhdGNoRXZlbnQobmV3IFBsdWdpbkV2ZW50KFwiYWRkTWV0aG9kXCIsIG5hbWUsIG1ldGhvZCkpO1xufVxuX19uYW1lKGFkZE1ldGhvZCwgXCJhZGRNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZVByb3BlcnR5LmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVQcm9wZXJ0eShjdHgsIG5hbWUsIGdldHRlcikge1xuICBsZXQgX2dldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3R4LCBuYW1lKSwgX3N1cGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgfSwgXCJfc3VwZXJcIik7XG4gIGlmIChfZ2V0ICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9nZXQuZ2V0KSBfc3VwZXIgPSBfZ2V0LmdldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgbmFtZSwge1xuICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyKCkge1xuICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgb3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlcik7XG4gICAgICB9XG4gICAgICBsZXQgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgICAgZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgICAgbGV0IHJlc3VsdCA9IGdldHRlcihfc3VwZXIpLmNhbGwodGhpcyk7XG4gICAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgb3JpZ0xvY2tTc2ZpKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgbGV0IG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgfSwgXCJvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyXCIpLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cbl9fbmFtZShvdmVyd3JpdGVQcm9wZXJ0eSwgXCJvdmVyd3JpdGVQcm9wZXJ0eVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlTWV0aG9kLmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgbGV0IF9tZXRob2QgPSBjdHhbbmFtZV0sIF9zdXBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgfSwgXCJfc3VwZXJcIik7XG4gIGlmIChfbWV0aG9kICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9tZXRob2QpIF9zdXBlciA9IF9tZXRob2Q7XG4gIGxldCBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIGlmICghZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIpO1xuICAgIH1cbiAgICBsZXQgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICBsZXQgcmVzdWx0ID0gbWV0aG9kKF9zdXBlcikuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgb3JpZ0xvY2tTc2ZpKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGxldCBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwib3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyXCIpO1xuICBhZGRMZW5ndGhHdWFyZChvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUpO1xufVxuX19uYW1lKG92ZXJ3cml0ZU1ldGhvZCwgXCJvdmVyd3JpdGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZENoYWluYWJsZU1ldGhvZC5qc1xudmFyIGNhblNldFByb3RvdHlwZSA9IHR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPT09IFwiZnVuY3Rpb25cIjtcbnZhciB0ZXN0Rm4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xufSwgXCJ0ZXN0Rm5cIik7XG52YXIgZXhjbHVkZU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdEZuKS5maWx0ZXIoZnVuY3Rpb24obmFtZSkge1xuICBsZXQgcHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlc3RGbiwgbmFtZSk7XG4gIGlmICh0eXBlb2YgcHJvcERlc2MgIT09IFwib2JqZWN0XCIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gIXByb3BEZXNjLmNvbmZpZ3VyYWJsZTtcbn0pO1xudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcbnZhciBfUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQgPSBjbGFzcyBfUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQgZXh0ZW5kcyBQbHVnaW5FdmVudCB7XG4gIGNvbnN0cnVjdG9yKHR5cGUzLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIHN1cGVyKHR5cGUzLCBuYW1lLCBmbik7XG4gICAgdGhpcy5jaGFpbmluZ0JlaGF2aW9yID0gY2hhaW5pbmdCZWhhdmlvcjtcbiAgfVxufTtcbl9fbmFtZShfUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQsIFwiUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnRcIik7XG52YXIgUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQgPSBfUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQ7XG5mdW5jdGlvbiBhZGRDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgaWYgKHR5cGVvZiBjaGFpbmluZ0JlaGF2aW9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjaGFpbmluZ0JlaGF2aW9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICB9LCBcImNoYWluaW5nQmVoYXZpb3JcIik7XG4gIH1cbiAgbGV0IGNoYWluYWJsZUJlaGF2aW9yID0ge1xuICAgIG1ldGhvZCxcbiAgICBjaGFpbmluZ0JlaGF2aW9yXG4gIH07XG4gIGlmICghY3R4Ll9fbWV0aG9kcykge1xuICAgIGN0eC5fX21ldGhvZHMgPSB7fTtcbiAgfVxuICBjdHguX19tZXRob2RzW25hbWVdID0gY2hhaW5hYmxlQmVoYXZpb3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIG5hbWUsIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gY2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgICAgY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvci5jYWxsKHRoaXMpO1xuICAgICAgbGV0IGNoYWluYWJsZU1ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICB9LCBcImNoYWluYWJsZU1ldGhvZFdyYXBwZXJcIik7XG4gICAgICBhZGRMZW5ndGhHdWFyZChjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBuYW1lLCB0cnVlKTtcbiAgICAgIGlmIChjYW5TZXRQcm90b3R5cGUpIHtcbiAgICAgICAgbGV0IHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgIHByb3RvdHlwZS5jYWxsID0gY2FsbDtcbiAgICAgICAgcHJvdG90eXBlLmFwcGx5ID0gYXBwbHk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBwcm90b3R5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGFzc2VydGVyTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdHgpO1xuICAgICAgICBhc3NlcnRlck5hbWVzLmZvckVhY2goZnVuY3Rpb24oYXNzZXJ0ZXJOYW1lKSB7XG4gICAgICAgICAgaWYgKGV4Y2x1ZGVOYW1lcy5pbmRleE9mKGFzc2VydGVyTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3R4LCBhc3NlcnRlck5hbWUpO1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBhc3NlcnRlck5hbWUsIHBkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgcmV0dXJuIHByb3hpZnkoY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgfSwgXCJjaGFpbmFibGVNZXRob2RHZXR0ZXJcIiksXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBldmVudHMuZGlzcGF0Y2hFdmVudChcbiAgICBuZXcgUGx1Z2luQWRkQ2hhaW5hYmxlTWV0aG9kRXZlbnQoXG4gICAgICBcImFkZENoYWluYWJsZU1ldGhvZFwiLFxuICAgICAgbmFtZSxcbiAgICAgIG1ldGhvZCxcbiAgICAgIGNoYWluaW5nQmVoYXZpb3JcbiAgICApXG4gICk7XG59XG5fX25hbWUoYWRkQ2hhaW5hYmxlTWV0aG9kLCBcImFkZENoYWluYWJsZU1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgbGV0IGNoYWluYWJsZUJlaGF2aW9yID0gY3R4Ll9fbWV0aG9kc1tuYW1lXTtcbiAgbGV0IF9jaGFpbmluZ0JlaGF2aW9yID0gY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvcjtcbiAgY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RHZXR0ZXIoKSB7XG4gICAgbGV0IHJlc3VsdCA9IGNoYWluaW5nQmVoYXZpb3IoX2NoYWluaW5nQmVoYXZpb3IpLmNhbGwodGhpcyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBsZXQgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kR2V0dGVyXCIpO1xuICBsZXQgX21ldGhvZCA9IGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZDtcbiAgY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZFdyYXBwZXIoKSB7XG4gICAgbGV0IHJlc3VsdCA9IG1ldGhvZChfbWV0aG9kKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgbGV0IG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZFdyYXBwZXJcIik7XG59XG5fX25hbWUob3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLCBcIm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvY29tcGFyZUJ5SW5zcGVjdC5qc1xuZnVuY3Rpb24gY29tcGFyZUJ5SW5zcGVjdChhLCBiKSB7XG4gIHJldHVybiBpbnNwZWN0MihhKSA8IGluc3BlY3QyKGIpID8gLTEgOiAxO1xufVxuX19uYW1lKGNvbXBhcmVCeUluc3BlY3QsIFwiY29tcGFyZUJ5SW5zcGVjdFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scy5qc1xuZnVuY3Rpb24gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopIHtcbiAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBbXTtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKS5maWx0ZXIoZnVuY3Rpb24oc3ltKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pLmVudW1lcmFibGU7XG4gIH0pO1xufVxuX19uYW1lKGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMsIFwiZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5jb25jYXQoZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopKTtcbn1cbl9fbmFtZShnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcywgXCJnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaXNOYU4uanNcbnZhciBpc05hTjIgPSBOdW1iZXIuaXNOYU47XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE9wZXJhdG9yLmpzXG5mdW5jdGlvbiBpc09iamVjdFR5cGUob2JqKSB7XG4gIGxldCBvYmplY3RUeXBlID0gdHlwZShvYmopO1xuICBsZXQgb2JqZWN0VHlwZXMgPSBbXCJBcnJheVwiLCBcIk9iamVjdFwiLCBcIkZ1bmN0aW9uXCJdO1xuICByZXR1cm4gb2JqZWN0VHlwZXMuaW5kZXhPZihvYmplY3RUeXBlKSAhPT0gLTE7XG59XG5fX25hbWUoaXNPYmplY3RUeXBlLCBcImlzT2JqZWN0VHlwZVwiKTtcbmZ1bmN0aW9uIGdldE9wZXJhdG9yKG9iaiwgYXJncykge1xuICBsZXQgb3BlcmF0b3IgPSBmbGFnKG9iaiwgXCJvcGVyYXRvclwiKTtcbiAgbGV0IG5lZ2F0ZSA9IGZsYWcob2JqLCBcIm5lZ2F0ZVwiKTtcbiAgbGV0IGV4cGVjdGVkID0gYXJnc1szXTtcbiAgbGV0IG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdO1xuICBpZiAob3BlcmF0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0b3I7XG4gIH1cbiAgaWYgKHR5cGVvZiBtc2cgPT09IFwiZnVuY3Rpb25cIikgbXNnID0gbXNnKCk7XG4gIG1zZyA9IG1zZyB8fCBcIlwiO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgaWYgKC9cXHNoYXZlXFxzLy50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGxldCBpc09iamVjdCA9IGlzT2JqZWN0VHlwZShleHBlY3RlZCk7XG4gIGlmICgvXFxzbm90XFxzLy50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gaXNPYmplY3QgPyBcIm5vdERlZXBTdHJpY3RFcXVhbFwiIDogXCJub3RTdHJpY3RFcXVhbFwiO1xuICB9XG4gIHJldHVybiBpc09iamVjdCA/IFwiZGVlcFN0cmljdEVxdWFsXCIgOiBcInN0cmljdEVxdWFsXCI7XG59XG5fX25hbWUoZ2V0T3BlcmF0b3IsIFwiZ2V0T3BlcmF0b3JcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luZGV4LmpzXG5mdW5jdGlvbiBnZXROYW1lKGZuKSB7XG4gIHJldHVybiBmbi5uYW1lO1xufVxuX19uYW1lKGdldE5hbWUsIFwiZ2V0TmFtZVwiKTtcbmZ1bmN0aW9uIGlzUmVnRXhwMihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgUmVnRXhwXVwiO1xufVxuX19uYW1lKGlzUmVnRXhwMiwgXCJpc1JlZ0V4cFwiKTtcbmZ1bmN0aW9uIGlzTnVtZXJpYyhvYmopIHtcbiAgcmV0dXJuIFtcIk51bWJlclwiLCBcIkJpZ0ludFwiXS5pbmNsdWRlcyh0eXBlKG9iaikpO1xufVxuX19uYW1lKGlzTnVtZXJpYywgXCJpc051bWVyaWNcIik7XG5cbi8vIGxpYi9jaGFpL2NvcmUvYXNzZXJ0aW9ucy5qc1xudmFyIHsgZmxhZzogZmxhZzIgfSA9IHV0aWxzX2V4cG9ydHM7XG5bXG4gIFwidG9cIixcbiAgXCJiZVwiLFxuICBcImJlZW5cIixcbiAgXCJpc1wiLFxuICBcImFuZFwiLFxuICBcImhhc1wiLFxuICBcImhhdmVcIixcbiAgXCJ3aXRoXCIsXG4gIFwidGhhdFwiLFxuICBcIndoaWNoXCIsXG4gIFwiYXRcIixcbiAgXCJvZlwiLFxuICBcInNhbWVcIixcbiAgXCJidXRcIixcbiAgXCJkb2VzXCIsXG4gIFwic3RpbGxcIixcbiAgXCJhbHNvXCJcbl0uZm9yRWFjaChmdW5jdGlvbihjaGFpbikge1xuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoY2hhaW4pO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJub3RcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJkZWVwXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcImRlZXBcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm5lc3RlZFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJuZXN0ZWRcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm93blwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJvd25cIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm9yZGVyZWRcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwib3JkZXJlZFwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiYW55XCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcImFueVwiLCB0cnVlKTtcbiAgZmxhZzIodGhpcywgXCJhbGxcIiwgZmFsc2UpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJhbGxcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwiYWxsXCIsIHRydWUpO1xuICBmbGFnMih0aGlzLCBcImFueVwiLCBmYWxzZSk7XG59KTtcbnZhciBmdW5jdGlvblR5cGVzID0ge1xuICBmdW5jdGlvbjogW1xuICAgIFwiZnVuY3Rpb25cIixcbiAgICBcImFzeW5jZnVuY3Rpb25cIixcbiAgICBcImdlbmVyYXRvcmZ1bmN0aW9uXCIsXG4gICAgXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJcbiAgXSxcbiAgYXN5bmNmdW5jdGlvbjogW1wiYXN5bmNmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIGdlbmVyYXRvcmZ1bmN0aW9uOiBbXCJnZW5lcmF0b3JmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIGFzeW5jZ2VuZXJhdG9yZnVuY3Rpb246IFtcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl1cbn07XG5mdW5jdGlvbiBhbih0eXBlMywgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB0eXBlMyA9IHR5cGUzLnRvTG93ZXJDYXNlKCk7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgYXJ0aWNsZSA9IH5bXCJhXCIsIFwiZVwiLCBcImlcIiwgXCJvXCIsIFwidVwiXS5pbmRleE9mKHR5cGUzLmNoYXJBdCgwKSkgPyBcImFuIFwiIDogXCJhIFwiO1xuICBjb25zdCBkZXRlY3RlZFR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGZ1bmN0aW9uVHlwZXNbXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlMykpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGZ1bmN0aW9uVHlwZXNbdHlwZTNdLmluY2x1ZGVzKGRldGVjdGVkVHlwZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHR5cGUzID09PSBkZXRlY3RlZFR5cGUsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFuLCBcImFuXCIpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImFuXCIsIGFuKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJhXCIsIGFuKTtcbmZ1bmN0aW9uIFNhbWVWYWx1ZVplcm8oYSwgYikge1xuICByZXR1cm4gaXNOYU4yKGEpICYmIGlzTmFOMihiKSB8fCBhID09PSBiO1xufVxuX19uYW1lKFNhbWVWYWx1ZVplcm8sIFwiU2FtZVZhbHVlWmVyb1wiKTtcbmZ1bmN0aW9uIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKCkge1xuICBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIsIHRydWUpO1xufVxuX19uYW1lKGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yLCBcImluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yXCIpO1xuZnVuY3Rpb24gaW5jbHVkZSh2YWwsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBpc0RlZXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIiksIGRlc2NyaXB0b3IgPSBpc0RlZXAgPyBcImRlZXAgXCIgOiBcIlwiLCBpc0VxbCA9IGlzRGVlcCA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogU2FtZVZhbHVlWmVybztcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgbGV0IGluY2x1ZGVkID0gZmFsc2U7XG4gIHN3aXRjaCAob2JqVHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGluY2x1ZGVkID0gb2JqLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwid2Vha3NldFwiOlxuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwidW5hYmxlIHRvIHVzZSAuZGVlcC5pbmNsdWRlIHdpdGggV2Vha1NldFwiLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpbmNsdWRlZCA9IG9iai5oYXModmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgaW5jbHVkZWQgPSBpbmNsdWRlZCB8fCBpc0VxbChpdGVtLCB2YWwpO1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic2V0XCI6XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaGFzKHZhbCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouc29tZShmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgXCJ0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2YgYXJndW1lbnRzIChcIiArIG9ialR5cGUgKyBcIiBhbmQgXCIgKyB0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSArIFwiKSBpcyBpbnZhbGlkIGZvciB0aGlzIGFzc2VydGlvbi4gWW91IGNhbiB1c2UgYW4gYXJyYXksIGEgbWFwLCBhbiBvYmplY3QsIGEgc2V0LCBhIHN0cmluZywgb3IgYSB3ZWFrc2V0IGluc3RlYWQgb2YgYSBcIiArIHR5cGUodmFsKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBsZXQgcHJvcHMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgbGV0IGZpcnN0RXJyID0gbnVsbDtcbiAgICAgIGxldCBudW1FcnJzID0gMDtcbiAgICAgIHByb3BzLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICBsZXQgcHJvcEFzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24ob2JqKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBwcm9wQXNzZXJ0aW9uLCB0cnVlKTtcbiAgICAgICAgZmxhZzIocHJvcEFzc2VydGlvbiwgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICAgICAgaWYgKCFuZWdhdGUgfHwgcHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcHJvcEFzc2VydGlvbi5wcm9wZXJ0eShwcm9wLCB2YWxbcHJvcF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHByb3BBc3NlcnRpb24ucHJvcGVydHkocHJvcCwgdmFsW3Byb3BdKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKCFjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihlcnIsIEFzc2VydGlvbkVycm9yKSkge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlyc3RFcnIgPT09IG51bGwpIGZpcnN0RXJyID0gZXJyO1xuICAgICAgICAgIG51bUVycnMrKztcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICBpZiAobmVnYXRlICYmIHByb3BzLmxlbmd0aCA+IDEgJiYgbnVtRXJycyA9PT0gcHJvcHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IGZpcnN0RXJyO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICBpbmNsdWRlZCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gXCIgKyBkZXNjcmlwdG9yICsgXCJpbmNsdWRlIFwiICsgaW5zcGVjdDIodmFsKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IFwiICsgZGVzY3JpcHRvciArIFwiaW5jbHVkZSBcIiArIGluc3BlY3QyKHZhbClcbiAgKTtcbn1cbl9fbmFtZShpbmNsdWRlLCBcImluY2x1ZGVcIik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiaW5jbHVkZVwiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiY29udGFpblwiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiY29udGFpbnNcIiwgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImluY2x1ZGVzXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm9rXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1dGh5XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHN5XCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwidHJ1ZVwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgdHJ1ZSA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydWVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2VcIixcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJudW1lcmljXCIsIGZ1bmN0aW9uKCkge1xuICBjb25zdCBvYmplY3QgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgW1wiTnVtYmVyXCIsIFwiQmlnSW50XCJdLmluY2x1ZGVzKHR5cGUob2JqZWN0KSksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bWVyaWNcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIG51bWVyaWNcIixcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJjYWxsYWJsZVwiLCBmdW5jdGlvbigpIHtcbiAgY29uc3QgdmFsID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGNvbnN0IHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIGNvbnN0IG1lc3NhZ2UgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UgPyBgJHttZXNzYWdlfTogYCA6IFwiXCI7XG4gIGNvbnN0IG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpO1xuICBjb25zdCBhc3NlcnRpb25NZXNzYWdlID0gbmVnYXRlID8gYCR7bXNnfWV4cGVjdGVkICR7aW5zcGVjdDIodmFsKX0gbm90IHRvIGJlIGEgY2FsbGFibGUgZnVuY3Rpb25gIDogYCR7bXNnfWV4cGVjdGVkICR7aW5zcGVjdDIodmFsKX0gdG8gYmUgYSBjYWxsYWJsZSBmdW5jdGlvbmA7XG4gIGNvbnN0IGlzQ2FsbGFibGUgPSBbXG4gICAgXCJGdW5jdGlvblwiLFxuICAgIFwiQXN5bmNGdW5jdGlvblwiLFxuICAgIFwiR2VuZXJhdG9yRnVuY3Rpb25cIixcbiAgICBcIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb25cIlxuICBdLmluY2x1ZGVzKHR5cGUodmFsKSk7XG4gIGlmIChpc0NhbGxhYmxlICYmIG5lZ2F0ZSB8fCAhaXNDYWxsYWJsZSAmJiAhbmVnYXRlKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGFzc2VydGlvbk1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZmFsc2VcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZhbHNlID09PSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2VcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZVwiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm51bGxcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG51bGwgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBudWxsXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBudWxsXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwidW5kZWZpbmVkXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICB2b2lkIDAgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB1bmRlZmluZWRcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIHVuZGVmaW5lZFwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIk5hTlwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNOYU4yKGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgTmFOXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBOYU5cIlxuICApO1xufSk7XG5mdW5jdGlvbiBhc3NlcnRFeGlzdCgpIHtcbiAgbGV0IHZhbCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB2b2lkIDAsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGV4aXN0XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBleGlzdFwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0RXhpc3QsIFwiYXNzZXJ0RXhpc3RcIik7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleGlzdFwiLCBhc3NlcnRFeGlzdCk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleGlzdHNcIiwgYXNzZXJ0RXhpc3QpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZW1wdHlcIiwgZnVuY3Rpb24oKSB7XG4gIGxldCB2YWwgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgaXRlbXNDb3VudDtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgc3dpdGNoICh0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGl0ZW1zQ291bnQgPSB2YWwubGVuZ3RoO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGl0ZW1zQ291bnQgPSB2YWwuc2l6ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ3ZWFrbWFwXCI6XG4gICAgY2FzZSBcIndlYWtzZXRcIjpcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgYSB3ZWFrIGNvbGxlY3Rpb25cIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIGNhc2UgXCJmdW5jdGlvblwiOiB7XG4gICAgICBjb25zdCBtc2cgPSBmbGFnTXNnICsgXCIuZW1wdHkgd2FzIHBhc3NlZCBhIGZ1bmN0aW9uIFwiICsgZ2V0TmFtZSh2YWwpO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZy50cmltKCksIHZvaWQgMCwgc3NmaSk7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodmFsICE9PSBPYmplY3QodmFsKSkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgbm9uLXN0cmluZyBwcmltaXRpdmUgXCIgKyBpbnNwZWN0Mih2YWwpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpdGVtc0NvdW50ID0gT2JqZWN0LmtleXModmFsKS5sZW5ndGg7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgMCA9PT0gaXRlbXNDb3VudCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZW1wdHlcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGVtcHR5XCJcbiAgKTtcbn0pO1xuZnVuY3Rpb24gY2hlY2tBcmd1bWVudHMoKSB7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgdHlwZTMgPSB0eXBlKG9iaik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIFwiQXJndW1lbnRzXCIgPT09IHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhcmd1bWVudHMgYnV0IGdvdCBcIiArIHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYXJndW1lbnRzXCJcbiAgKTtcbn1cbl9fbmFtZShjaGVja0FyZ3VtZW50cywgXCJjaGVja0FyZ3VtZW50c1wiKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFyZ3VtZW50c1wiLCBjaGVja0FyZ3VtZW50cyk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJBcmd1bWVudHNcIiwgY2hlY2tBcmd1bWVudHMpO1xuZnVuY3Rpb24gYXNzZXJ0RXF1YWwodmFsLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgaWYgKGZsYWcyKHRoaXMsIFwiZGVlcFwiKSkge1xuICAgIGxldCBwcmV2TG9ja1NzZmkgPSBmbGFnMih0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgIGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIiwgdHJ1ZSk7XG4gICAgdGhpcy5lcWwodmFsKTtcbiAgICBmbGFnMih0aGlzLCBcImxvY2tTc2ZpXCIsIHByZXZMb2NrU3NmaSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICB2YWwgPT09IG9iaixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3tleHB9XCIsXG4gICAgICB2YWwsXG4gICAgICB0aGlzLl9vYmosXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydEVxdWFsLCBcImFzc2VydEVxdWFsXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxdWFsXCIsIGFzc2VydEVxdWFsKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcXVhbHNcIiwgYXNzZXJ0RXF1YWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxXCIsIGFzc2VydEVxdWFsKTtcbmZ1bmN0aW9uIGFzc2VydEVxbChvYmosIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IGVxbCA9IGZsYWcyKHRoaXMsIFwiZXFsXCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBlcWwob2JqLCBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGRlZXBseSBlcXVhbCAje2V4cH1cIixcbiAgICBvYmosXG4gICAgdGhpcy5fb2JqLFxuICAgIHRydWVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRFcWwsIFwiYXNzZXJ0RXFsXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxbFwiLCBhc3NlcnRFcWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxbHNcIiwgYXNzZXJ0RXFsKTtcbmZ1bmN0aW9uIGFzc2VydEFib3ZlKG4sIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgb2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYWJvdmUgbXVzdCBiZSBhIGRhdGVcIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9IGVsc2UgaWYgKCFpc051bWVyaWMobikgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBudW1iZXJcIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpIHtcbiAgICBsZXQgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIGxldCBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPiBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhYm92ZSAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqID4gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRBYm92ZSwgXCJhc3NlcnRBYm92ZVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJhYm92ZVwiLCBhc3NlcnRBYm92ZSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3RcIiwgYXNzZXJ0QWJvdmUpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImdyZWF0ZXJUaGFuXCIsIGFzc2VydEFib3ZlKTtcbmZ1bmN0aW9uIGFzc2VydExlYXN0KG4sIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGxlYXN0IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpIHtcbiAgICBsZXQgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgbGV0IGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA+PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhdCBsZWFzdCAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYmVsb3cgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPj0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBsZWFzdCAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0TGVhc3QsIFwiYXNzZXJ0TGVhc3RcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibGVhc3RcIiwgYXNzZXJ0TGVhc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImd0ZVwiLCBhc3NlcnRMZWFzdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3JlYXRlclRoYW5PckVxdWFsXCIsIGFzc2VydExlYXN0KTtcbmZ1bmN0aW9uIGFzc2VydEJlbG93KG4sIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGJlbG93IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpIHtcbiAgICBsZXQgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgbGV0IGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA8IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGJlbG93ICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYmVsb3cgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPCBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IGxlYXN0ICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRCZWxvdywgXCJhc3NlcnRCZWxvd1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJiZWxvd1wiLCBhc3NlcnRCZWxvdyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibHRcIiwgYXNzZXJ0QmVsb3cpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImxlc3NUaGFuXCIsIGFzc2VydEJlbG93KTtcbmZ1bmN0aW9uIGFzc2VydE1vc3QobiwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGRvTGVuZ3RoID0gZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbXNnUHJlZml4ID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIG5UeXBlID0gdHlwZShuKS50b0xvd2VyQ2FzZSgpLCBlcnJvck1lc3NhZ2UsIHNob3VsZFRocm93ID0gdHJ1ZTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgb2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbW9zdCBtdXN0IGJlIGEgZGF0ZVwiO1xuICB9IGVsc2UgaWYgKCFpc051bWVyaWMobikgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIG1vc3QgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpIHtcbiAgICBsZXQgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgbGV0IGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA8PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhdCBtb3N0ICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhYm92ZSAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA8PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IG1vc3QgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYWJvdmUgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydE1vc3QsIFwiYXNzZXJ0TW9zdFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtb3N0XCIsIGFzc2VydE1vc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImx0ZVwiLCBhc3NlcnRNb3N0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsZXNzVGhhbk9yRXF1YWxcIiwgYXNzZXJ0TW9zdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwid2l0aGluXCIsIGZ1bmN0aW9uKHN0YXJ0LCBmaW5pc2gsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBzdGFydFR5cGUgPSB0eXBlKHN0YXJ0KS50b0xvd2VyQ2FzZSgpLCBmaW5pc2hUeXBlID0gdHlwZShmaW5pc2gpLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlLCByYW5nZSA9IHN0YXJ0VHlwZSA9PT0gXCJkYXRlXCIgJiYgZmluaXNoVHlwZSA9PT0gXCJkYXRlXCIgPyBzdGFydC50b0lTT1N0cmluZygpICsgXCIuLlwiICsgZmluaXNoLnRvSVNPU3RyaW5nKCkgOiBzdGFydCArIFwiLi5cIiArIGZpbmlzaDtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgb2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgKHN0YXJ0VHlwZSAhPT0gXCJkYXRlXCIgfHwgZmluaXNoVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnRzIHRvIHdpdGhpbiBtdXN0IGJlIGRhdGVzXCI7XG4gIH0gZWxzZSBpZiAoKCFpc051bWVyaWMoc3RhcnQpIHx8ICFpc051bWVyaWMoZmluaXNoKSkgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50cyB0byB3aXRoaW4gbXVzdCBiZSBudW1iZXJzXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkge1xuICAgIGxldCBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICBsZXQgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50ID49IHN0YXJ0ICYmIGl0ZW1zQ291bnQgPD0gZmluaXNoLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiB3aXRoaW4gXCIgKyByYW5nZSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIHdpdGhpbiBcIiArIHJhbmdlXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA+PSBzdGFydCAmJiBvYmogPD0gZmluaXNoLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHdpdGhpbiBcIiArIHJhbmdlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSB3aXRoaW4gXCIgKyByYW5nZVxuICAgICk7XG4gIH1cbn0pO1xuZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VPZihjb25zdHJ1Y3RvciwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgdGFyZ2V0ID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGxldCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBsZXQgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgbGV0IGlzSW5zdGFuY2VPZjtcbiAgdHJ5IHtcbiAgICBpc0luc3RhbmNlT2YgPSB0YXJnZXQgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwiVGhlIGluc3RhbmNlb2YgYXNzZXJ0aW9uIG5lZWRzIGEgY29uc3RydWN0b3IgYnV0IFwiICsgdHlwZShjb25zdHJ1Y3RvcikgKyBcIiB3YXMgZ2l2ZW4uXCIsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIGxldCBuYW1lID0gZ2V0TmFtZShjb25zdHJ1Y3Rvcik7XG4gIGlmIChuYW1lID09IG51bGwpIHtcbiAgICBuYW1lID0gXCJhbiB1bm5hbWVkIGNvbnN0cnVjdG9yXCI7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNJbnN0YW5jZU9mLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhbiBpbnN0YW5jZSBvZiBcIiArIG5hbWUsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhbiBpbnN0YW5jZSBvZiBcIiArIG5hbWVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRJbnN0YW5jZU9mLCBcImFzc2VydEluc3RhbmNlT2ZcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5zdGFuY2VvZlwiLCBhc3NlcnRJbnN0YW5jZU9mKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbnN0YW5jZU9mXCIsIGFzc2VydEluc3RhbmNlT2YpO1xuZnVuY3Rpb24gYXNzZXJ0UHJvcGVydHkobmFtZSwgdmFsLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBpc05lc3RlZCA9IGZsYWcyKHRoaXMsIFwibmVzdGVkXCIpLCBpc093biA9IGZsYWcyKHRoaXMsIFwib3duXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgbmFtZVR5cGUgPSB0eXBlb2YgbmFtZTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgaWYgKGlzTmVzdGVkKSB7XG4gICAgaWYgKG5hbWVUeXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcInRoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgbmVzdGVkIHN5bnRheFwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChuYW1lVHlwZSAhPT0gXCJzdHJpbmdcIiAmJiBuYW1lVHlwZSAhPT0gXCJudW1iZXJcIiAmJiBuYW1lVHlwZSAhPT0gXCJzeW1ib2xcIikge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCJ0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZywgbnVtYmVyLCBvciBzeW1ib2xcIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoaXNOZXN0ZWQgJiYgaXNPd24pIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgJ1RoZSBcIm5lc3RlZFwiIGFuZCBcIm93blwiIGZsYWdzIGNhbm5vdCBiZSBjb21iaW5lZC4nLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGZsYWdNc2cgKyBcIlRhcmdldCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuXCIsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxuICBsZXQgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSwgcGF0aEluZm8gPSBpc05lc3RlZCA/IGdldFBhdGhJbmZvKG9iaiwgbmFtZSkgOiBudWxsLCB2YWx1ZSA9IGlzTmVzdGVkID8gcGF0aEluZm8udmFsdWUgOiBvYmpbbmFtZV0sIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcbiAgbGV0IGRlc2NyaXB0b3IgPSBcIlwiO1xuICBpZiAoaXNEZWVwKSBkZXNjcmlwdG9yICs9IFwiZGVlcCBcIjtcbiAgaWYgKGlzT3duKSBkZXNjcmlwdG9yICs9IFwib3duIFwiO1xuICBpZiAoaXNOZXN0ZWQpIGRlc2NyaXB0b3IgKz0gXCJuZXN0ZWQgXCI7XG4gIGRlc2NyaXB0b3IgKz0gXCJwcm9wZXJ0eSBcIjtcbiAgbGV0IGhhc1Byb3BlcnR5MjtcbiAgaWYgKGlzT3duKSBoYXNQcm9wZXJ0eTIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBuYW1lKTtcbiAgZWxzZSBpZiAoaXNOZXN0ZWQpIGhhc1Byb3BlcnR5MiA9IHBhdGhJbmZvLmV4aXN0cztcbiAgZWxzZSBoYXNQcm9wZXJ0eTIgPSBoYXNQcm9wZXJ0eShvYmosIG5hbWUpO1xuICBpZiAoIW5lZ2F0ZSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKVxuICAgICk7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIgJiYgaXNFcWwodmFsLCB2YWx1ZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7ZXhwfSwgYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7YWN0fVwiLFxuICAgICAgdmFsLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIHZhbHVlKTtcbn1cbl9fbmFtZShhc3NlcnRQcm9wZXJ0eSwgXCJhc3NlcnRQcm9wZXJ0eVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJwcm9wZXJ0eVwiLCBhc3NlcnRQcm9wZXJ0eSk7XG5mdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eShfbmFtZSwgX3ZhbHVlLCBfbXNnKSB7XG4gIGZsYWcyKHRoaXMsIFwib3duXCIsIHRydWUpO1xuICBhc3NlcnRQcm9wZXJ0eS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuX19uYW1lKGFzc2VydE93blByb3BlcnR5LCBcImFzc2VydE93blByb3BlcnR5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm93blByb3BlcnR5XCIsIGFzc2VydE93blByb3BlcnR5KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJoYXZlT3duUHJvcGVydHlcIiwgYXNzZXJ0T3duUHJvcGVydHkpO1xuZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hbWUsIGRlc2NyaXB0b3IsIG1zZykge1xuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtc2cgPSBkZXNjcmlwdG9yO1xuICAgIGRlc2NyaXB0b3IgPSBudWxsO1xuICB9XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGxldCBhY3R1YWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qob2JqKSwgbmFtZSk7XG4gIGxldCBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgaWYgKGFjdHVhbERlc2NyaXB0b3IgJiYgZGVzY3JpcHRvcikge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZXFsKGRlc2NyaXB0b3IsIGFjdHVhbERlc2NyaXB0b3IpLFxuICAgICAgXCJleHBlY3RlZCB0aGUgb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSkgKyBcIiBvbiAje3RoaXN9IHRvIG1hdGNoIFwiICsgaW5zcGVjdDIoZGVzY3JpcHRvcikgKyBcIiwgZ290IFwiICsgaW5zcGVjdDIoYWN0dWFsRGVzY3JpcHRvciksXG4gICAgICBcImV4cGVjdGVkIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgXCIgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9uICN7dGhpc30gdG8gbm90IG1hdGNoIFwiICsgaW5zcGVjdDIoZGVzY3JpcHRvciksXG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgYWN0dWFsRGVzY3JpcHRvcixcbiAgICAgIHRydWVcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgYWN0dWFsRGVzY3JpcHRvcixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpXG4gICAgKTtcbiAgfVxuICBmbGFnMih0aGlzLCBcIm9iamVjdFwiLCBhY3R1YWxEZXNjcmlwdG9yKTtcbn1cbl9fbmFtZShhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwiYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm93blByb3BlcnR5RGVzY3JpcHRvclwiLCBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImhhdmVPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIiwgYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKTtcbmZ1bmN0aW9uIGFzc2VydExlbmd0aENoYWluKCkge1xuICBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIsIHRydWUpO1xufVxuX19uYW1lKGFzc2VydExlbmd0aENoYWluLCBcImFzc2VydExlbmd0aENoYWluXCIpO1xuZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoKG4sIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICBzd2l0Y2ggKG9ialR5cGUpIHtcbiAgICBjYXNlIFwibWFwXCI6XG4gICAgY2FzZSBcInNldFwiOlxuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgaXRlbXNDb3VudCA9PSBuLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgb2YgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgb2YgI3thY3R9XCIsXG4gICAgbixcbiAgICBpdGVtc0NvdW50XG4gICk7XG59XG5fX25hbWUoYXNzZXJ0TGVuZ3RoLCBcImFzc2VydExlbmd0aFwiKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJsZW5ndGhcIiwgYXNzZXJ0TGVuZ3RoLCBhc3NlcnRMZW5ndGhDaGFpbik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwibGVuZ3RoT2ZcIiwgYXNzZXJ0TGVuZ3RoLCBhc3NlcnRMZW5ndGhDaGFpbik7XG5mdW5jdGlvbiBhc3NlcnRNYXRjaChyZSwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHJlLmV4ZWMob2JqKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbWF0Y2ggXCIgKyByZSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIG1hdGNoIFwiICsgcmVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRNYXRjaCwgXCJhc3NlcnRNYXRjaFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtYXRjaFwiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibWF0Y2hlc1wiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic3RyaW5nXCIsIGZ1bmN0aW9uKHN0ciwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwic3RyaW5nXCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB+b2JqLmluZGV4T2Yoc3RyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gY29udGFpbiBcIiArIGluc3BlY3QyKHN0ciksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIFwiICsgaW5zcGVjdDIoc3RyKVxuICApO1xufSk7XG5mdW5jdGlvbiBhc3NlcnRLZXlzKGtleXMpIHtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLCBrZXlzVHlwZSA9IHR5cGUoa2V5cyksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgc3RyLCBkZWVwU3RyID0gXCJcIiwgYWN0dWFsLCBvayA9IHRydWUsIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gIGxldCBtaXhlZEFyZ3NNc2cgPSBmbGFnTXNnICsgXCJ3aGVuIHRlc3Rpbmcga2V5cyBhZ2FpbnN0IGFuIG9iamVjdCBvciBhbiBhcnJheSB5b3UgbXVzdCBnaXZlIGEgc2luZ2xlIEFycmF5fE9iamVjdHxTdHJpbmcgYXJndW1lbnQgb3IgbXVsdGlwbGUgU3RyaW5nIGFyZ3VtZW50c1wiO1xuICBpZiAob2JqVHlwZSA9PT0gXCJNYXBcIiB8fCBvYmpUeXBlID09PSBcIlNldFwiKSB7XG4gICAgZGVlcFN0ciA9IGlzRGVlcCA/IFwiZGVlcGx5IFwiIDogXCJcIjtcbiAgICBhY3R1YWwgPSBbXTtcbiAgICBvYmouZm9yRWFjaChmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgYWN0dWFsLnB1c2goa2V5KTtcbiAgICB9KTtcbiAgICBpZiAoa2V5c1R5cGUgIT09IFwiQXJyYXlcIikge1xuICAgICAga2V5cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFjdHVhbCA9IGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaik7XG4gICAgc3dpdGNoIChrZXlzVHlwZSkge1xuICAgICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHZvaWQgMCwgc3NmaSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHZvaWQgMCwgc3NmaSk7XG4gICAgICAgIH1cbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGtleXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cbiAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJzeW1ib2xcIiA/IHZhbCA6IFN0cmluZyh2YWwpO1xuICAgIH0pO1xuICB9XG4gIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyArIFwia2V5cyByZXF1aXJlZFwiLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGxldCBsZW4gPSBrZXlzLmxlbmd0aCwgYW55ID0gZmxhZzIodGhpcywgXCJhbnlcIiksIGFsbCA9IGZsYWcyKHRoaXMsIFwiYWxsXCIpLCBleHBlY3RlZCA9IGtleXMsIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcbiAgaWYgKCFhbnkgJiYgIWFsbCkge1xuICAgIGFsbCA9IHRydWU7XG4gIH1cbiAgaWYgKGFueSkge1xuICAgIG9rID0gZXhwZWN0ZWQuc29tZShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBpZiAoYWxsKSB7XG4gICAgb2sgPSBleHBlY3RlZC5ldmVyeShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoIWZsYWcyKHRoaXMsIFwiY29udGFpbnNcIikpIHtcbiAgICAgIG9rID0gb2sgJiYga2V5cy5sZW5ndGggPT0gYWN0dWFsLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gaW5zcGVjdDIoa2V5KTtcbiAgICB9KTtcbiAgICBsZXQgbGFzdCA9IGtleXMucG9wKCk7XG4gICAgaWYgKGFsbCkge1xuICAgICAgc3RyID0ga2V5cy5qb2luKFwiLCBcIikgKyBcIiwgYW5kIFwiICsgbGFzdDtcbiAgICB9XG4gICAgaWYgKGFueSkge1xuICAgICAgc3RyID0ga2V5cy5qb2luKFwiLCBcIikgKyBcIiwgb3IgXCIgKyBsYXN0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBpbnNwZWN0MihrZXlzWzBdKTtcbiAgfVxuICBzdHIgPSAobGVuID4gMSA/IFwia2V5cyBcIiA6IFwia2V5IFwiKSArIHN0cjtcbiAgc3RyID0gKGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIikgPyBcImNvbnRhaW4gXCIgOiBcImhhdmUgXCIpICsgc3RyO1xuICB0aGlzLmFzc2VydChcbiAgICBvayxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gXCIgKyBkZWVwU3RyICsgc3RyLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgXCIgKyBkZWVwU3RyICsgc3RyLFxuICAgIGV4cGVjdGVkLnNsaWNlKDApLnNvcnQoY29tcGFyZUJ5SW5zcGVjdCksXG4gICAgYWN0dWFsLnNvcnQoY29tcGFyZUJ5SW5zcGVjdCksXG4gICAgdHJ1ZVxuICApO1xufVxuX19uYW1lKGFzc2VydEtleXMsIFwiYXNzZXJ0S2V5c1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJrZXlzXCIsIGFzc2VydEtleXMpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImtleVwiLCBhc3NlcnRLZXlzKTtcbmZ1bmN0aW9uIGFzc2VydFRocm93cyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSB8fCBmYWxzZTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgaWYgKGlzUmVnRXhwMihlcnJvckxpa2UpIHx8IHR5cGVvZiBlcnJvckxpa2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBlcnJNc2dNYXRjaGVyID0gZXJyb3JMaWtlO1xuICAgIGVycm9yTGlrZSA9IG51bGw7XG4gIH1cbiAgbGV0IGNhdWdodEVycjtcbiAgbGV0IGVycm9yV2FzVGhyb3duID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgb2JqKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yV2FzVGhyb3duID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnIgPSBlcnI7XG4gIH1cbiAgbGV0IGV2ZXJ5QXJnSXNVbmRlZmluZWQgPSBlcnJvckxpa2UgPT09IHZvaWQgMCAmJiBlcnJNc2dNYXRjaGVyID09PSB2b2lkIDA7XG4gIGxldCBldmVyeUFyZ0lzRGVmaW5lZCA9IEJvb2xlYW4oZXJyb3JMaWtlICYmIGVyck1zZ01hdGNoZXIpO1xuICBsZXQgZXJyb3JMaWtlRmFpbCA9IGZhbHNlO1xuICBsZXQgZXJyTXNnTWF0Y2hlckZhaWwgPSBmYWxzZTtcbiAgaWYgKGV2ZXJ5QXJnSXNVbmRlZmluZWQgfHwgIWV2ZXJ5QXJnSXNVbmRlZmluZWQgJiYgIW5lZ2F0ZSkge1xuICAgIGxldCBlcnJvckxpa2VTdHJpbmcgPSBcImFuIGVycm9yXCI7XG4gICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnJvckxpa2VTdHJpbmcgPSBcIiN7ZXhwfVwiO1xuICAgIH0gZWxzZSBpZiAoZXJyb3JMaWtlKSB7XG4gICAgICBlcnJvckxpa2VTdHJpbmcgPSBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpO1xuICAgIH1cbiAgICBsZXQgYWN0dWFsID0gY2F1Z2h0RXJyO1xuICAgIGlmIChjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgYWN0dWFsID0gY2F1Z2h0RXJyLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2F1Z2h0RXJyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBhY3R1YWwgPSBjYXVnaHRFcnI7XG4gICAgfSBlbHNlIGlmIChjYXVnaHRFcnIgJiYgKHR5cGVvZiBjYXVnaHRFcnIgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhdWdodEVyciA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0dWFsID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKTtcbiAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBlcnJvcldhc1Rocm93bixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBcIiArIGVycm9yTGlrZVN0cmluZyxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgYW4gZXJyb3IgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICBlcnJvckxpa2UgJiYgZXJyb3JMaWtlLnRvU3RyaW5nKCksXG4gICAgICBhY3R1YWxcbiAgICApO1xuICB9XG4gIGlmIChlcnJvckxpa2UgJiYgY2F1Z2h0RXJyKSB7XG4gICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBsZXQgaXNDb21wYXRpYmxlSW5zdGFuY2UgPSBjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVJbnN0YW5jZShcbiAgICAgICAgY2F1Z2h0RXJyLFxuICAgICAgICBlcnJvckxpa2VcbiAgICAgICk7XG4gICAgICBpZiAoaXNDb21wYXRpYmxlSW5zdGFuY2UgPT09IG5lZ2F0ZSkge1xuICAgICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgICAgZXJyb3JMaWtlRmFpbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBuZWdhdGUsXG4gICAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH1cIiArIChjYXVnaHRFcnIgJiYgIW5lZ2F0ZSA/IFwiIGJ1dCAje2FjdH0gd2FzIHRocm93blwiIDogXCJcIiksXG4gICAgICAgICAgICBlcnJvckxpa2UudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGNhdWdodEVyci50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgaXNDb21wYXRpYmxlQ29uc3RydWN0b3IgPSBjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihcbiAgICAgIGNhdWdodEVycixcbiAgICAgIGVycm9yTGlrZVxuICAgICk7XG4gICAgaWYgKGlzQ29tcGF0aWJsZUNvbnN0cnVjdG9yID09PSBuZWdhdGUpIHtcbiAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgZXJyb3JMaWtlRmFpbCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBuZWdhdGUsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfVwiICsgKGNhdWdodEVyciA/IFwiIGJ1dCAje2FjdH0gd2FzIHRocm93blwiIDogXCJcIiksXG4gICAgICAgICAgZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckxpa2UudG9TdHJpbmcoKSA6IGVycm9yTGlrZSAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpLFxuICAgICAgICAgIGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yID8gY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiBjYXVnaHRFcnIgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoY2F1Z2h0RXJyICYmIGVyck1zZ01hdGNoZXIgIT09IHZvaWQgMCAmJiBlcnJNc2dNYXRjaGVyICE9PSBudWxsKSB7XG4gICAgbGV0IHBsYWNlaG9sZGVyID0gXCJpbmNsdWRpbmdcIjtcbiAgICBpZiAoaXNSZWdFeHAyKGVyck1zZ01hdGNoZXIpKSB7XG4gICAgICBwbGFjZWhvbGRlciA9IFwibWF0Y2hpbmdcIjtcbiAgICB9XG4gICAgbGV0IGlzQ29tcGF0aWJsZU1lc3NhZ2UgPSBjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVNZXNzYWdlKFxuICAgICAgY2F1Z2h0RXJyLFxuICAgICAgZXJyTXNnTWF0Y2hlclxuICAgICk7XG4gICAgaWYgKGlzQ29tcGF0aWJsZU1lc3NhZ2UgPT09IG5lZ2F0ZSkge1xuICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICBlcnJNc2dNYXRjaGVyRmFpbCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBuZWdhdGUsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yIFwiICsgcGxhY2Vob2xkZXIgKyBcIiAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgZXJyb3Igbm90IFwiICsgcGxhY2Vob2xkZXIgKyBcIiAje2V4cH1cIixcbiAgICAgICAgICBlcnJNc2dNYXRjaGVyLFxuICAgICAgICAgIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0TWVzc2FnZShjYXVnaHRFcnIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChlcnJvckxpa2VGYWlsICYmIGVyck1zZ01hdGNoZXJGYWlsKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBuZWdhdGUsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH1cIiArIChjYXVnaHRFcnIgPyBcIiBidXQgI3thY3R9IHdhcyB0aHJvd25cIiA6IFwiXCIpLFxuICAgICAgZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckxpa2UudG9TdHJpbmcoKSA6IGVycm9yTGlrZSAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpLFxuICAgICAgY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVnaHRFcnIudG9TdHJpbmcoKSA6IGNhdWdodEVyciAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpXG4gICAgKTtcbiAgfVxuICBmbGFnMih0aGlzLCBcIm9iamVjdFwiLCBjYXVnaHRFcnIpO1xufVxuX19uYW1lKGFzc2VydFRocm93cywgXCJhc3NlcnRUaHJvd3NcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwidGhyb3dcIiwgYXNzZXJ0VGhyb3dzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJ0aHJvd3NcIiwgYXNzZXJ0VGhyb3dzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJUaHJvd1wiLCBhc3NlcnRUaHJvd3MpO1xuZnVuY3Rpb24gcmVzcG9uZFRvKG1ldGhvZCwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGl0c2VsZiA9IGZsYWcyKHRoaXMsIFwiaXRzZWxmXCIpLCBjb250ZXh0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb2JqICYmICFpdHNlbGYgPyBvYmoucHJvdG90eXBlW21ldGhvZF0gOiBvYmpbbWV0aG9kXTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGV4dCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gcmVzcG9uZCB0byBcIiArIGluc3BlY3QyKG1ldGhvZCksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCByZXNwb25kIHRvIFwiICsgaW5zcGVjdDIobWV0aG9kKVxuICApO1xufVxuX19uYW1lKHJlc3BvbmRUbywgXCJyZXNwb25kVG9cIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZFRvXCIsIHJlc3BvbmRUbyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZHNUb1wiLCByZXNwb25kVG8pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiaXRzZWxmXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIml0c2VsZlwiLCB0cnVlKTtcbn0pO1xuZnVuY3Rpb24gc2F0aXNmeShtYXRjaGVyLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgbGV0IHJlc3VsdCA9IG1hdGNoZXIob2JqKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgcmVzdWx0LFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBzYXRpc2Z5IFwiICsgb2JqRGlzcGxheShtYXRjaGVyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHNhdGlzZnlcIiArIG9iakRpc3BsYXkobWF0Y2hlciksXG4gICAgZmxhZzIodGhpcywgXCJuZWdhdGVcIikgPyBmYWxzZSA6IHRydWUsXG4gICAgcmVzdWx0XG4gICk7XG59XG5fX25hbWUoc2F0aXNmeSwgXCJzYXRpc2Z5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInNhdGlzZnlcIiwgc2F0aXNmeSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic2F0aXNmaWVzXCIsIHNhdGlzZnkpO1xuZnVuY3Rpb24gY2xvc2VUbyhleHBlY3RlZCwgZGVsdGEsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMubnVtZXJpYztcbiAgbGV0IG1lc3NhZ2UgPSBcIkEgYGRlbHRhYCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgYGNsb3NlVG9gXCI7XG4gIGlmIChkZWx0YSA9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnID8gYCR7ZmxhZ01zZ306ICR7bWVzc2FnZX1gIDogbWVzc2FnZSxcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZGVsdGEsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIG1lc3NhZ2UgPSBcIkEgYGV4cGVjdGVkYCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgYGNsb3NlVG9gXCI7XG4gIGlmIChleHBlY3RlZCA9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnID8gYCR7ZmxhZ01zZ306ICR7bWVzc2FnZX1gIDogbWVzc2FnZSxcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZXhwZWN0ZWQsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIGNvbnN0IGFicyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgpID0+IHggPCAwID8gLXggOiB4LCBcImFic1wiKTtcbiAgY29uc3Qgc3RyaXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChudW1iZXIpID0+IHBhcnNlRmxvYXQocGFyc2VGbG9hdChudW1iZXIpLnRvUHJlY2lzaW9uKDEyKSksIFwic3RyaXBcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHN0cmlwKGFicyhvYmogLSBleHBlY3RlZCkpIDw9IGRlbHRhLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBjbG9zZSB0byBcIiArIGV4cGVjdGVkICsgXCIgKy8tIFwiICsgZGVsdGEsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBjbG9zZSB0byBcIiArIGV4cGVjdGVkICsgXCIgKy8tIFwiICsgZGVsdGFcbiAgKTtcbn1cbl9fbmFtZShjbG9zZVRvLCBcImNsb3NlVG9cIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiY2xvc2VUb1wiLCBjbG9zZVRvKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJhcHByb3hpbWF0ZWx5XCIsIGNsb3NlVG8pO1xuZnVuY3Rpb24gaXNTdWJzZXRPZihfc3Vic2V0LCBfc3VwZXJzZXQsIGNtcCwgY29udGFpbnMsIG9yZGVyZWQpIHtcbiAgbGV0IHN1cGVyc2V0ID0gQXJyYXkuZnJvbShfc3VwZXJzZXQpO1xuICBsZXQgc3Vic2V0ID0gQXJyYXkuZnJvbShfc3Vic2V0KTtcbiAgaWYgKCFjb250YWlucykge1xuICAgIGlmIChzdWJzZXQubGVuZ3RoICE9PSBzdXBlcnNldC5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBzdXBlcnNldCA9IHN1cGVyc2V0LnNsaWNlKCk7XG4gIH1cbiAgcmV0dXJuIHN1YnNldC5ldmVyeShmdW5jdGlvbihlbGVtLCBpZHgpIHtcbiAgICBpZiAob3JkZXJlZCkgcmV0dXJuIGNtcCA/IGNtcChlbGVtLCBzdXBlcnNldFtpZHhdKSA6IGVsZW0gPT09IHN1cGVyc2V0W2lkeF07XG4gICAgaWYgKCFjbXApIHtcbiAgICAgIGxldCBtYXRjaElkeCA9IHN1cGVyc2V0LmluZGV4T2YoZWxlbSk7XG4gICAgICBpZiAobWF0Y2hJZHggPT09IC0xKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWNvbnRhaW5zKSBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzdXBlcnNldC5zb21lKGZ1bmN0aW9uKGVsZW0yLCBtYXRjaElkeCkge1xuICAgICAgaWYgKCFjbXAoZWxlbSwgZWxlbTIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWNvbnRhaW5zKSBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0pO1xufVxuX19uYW1lKGlzU3Vic2V0T2YsIFwiaXNTdWJzZXRPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtZW1iZXJzXCIsIGZ1bmN0aW9uKHN1YnNldCwgbXNnKSB7XG4gIGlmIChtc2cpIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5pdGVyYWJsZTtcbiAgbmV3IEFzc2VydGlvbihzdWJzZXQsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLml0ZXJhYmxlO1xuICBsZXQgY29udGFpbnMgPSBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIpO1xuICBsZXQgb3JkZXJlZCA9IGZsYWcyKHRoaXMsIFwib3JkZXJlZFwiKTtcbiAgbGV0IHN1YmplY3QsIGZhaWxNc2csIGZhaWxOZWdhdGVNc2c7XG4gIGlmIChjb250YWlucykge1xuICAgIHN1YmplY3QgPSBvcmRlcmVkID8gXCJhbiBvcmRlcmVkIHN1cGVyc2V0XCIgOiBcImEgc3VwZXJzZXRcIjtcbiAgICBmYWlsTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIFwiICsgc3ViamVjdCArIFwiIG9mICN7ZXhwfVwiO1xuICAgIGZhaWxOZWdhdGVNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIFwiICsgc3ViamVjdCArIFwiIG9mICN7ZXhwfVwiO1xuICB9IGVsc2Uge1xuICAgIHN1YmplY3QgPSBvcmRlcmVkID8gXCJvcmRlcmVkIG1lbWJlcnNcIiA6IFwibWVtYmVyc1wiO1xuICAgIGZhaWxNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSB0aGUgc2FtZSBcIiArIHN1YmplY3QgKyBcIiBhcyAje2V4cH1cIjtcbiAgICBmYWlsTmVnYXRlTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIHRoZSBzYW1lIFwiICsgc3ViamVjdCArIFwiIGFzICN7ZXhwfVwiO1xuICB9XG4gIGxldCBjbXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIikgPyBmbGFnMih0aGlzLCBcImVxbFwiKSA6IHZvaWQgMDtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNTdWJzZXRPZihzdWJzZXQsIG9iaiwgY21wLCBjb250YWlucywgb3JkZXJlZCksXG4gICAgZmFpbE1zZyxcbiAgICBmYWlsTmVnYXRlTXNnLFxuICAgIHN1YnNldCxcbiAgICBvYmosXG4gICAgdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJpdGVyYWJsZVwiLCBmdW5jdGlvbihtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgb2JqICE9IHZvaWQgMCAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYW4gaXRlcmFibGVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGFuIGl0ZXJhYmxlXCIsXG4gICAgb2JqXG4gICk7XG59KTtcbmZ1bmN0aW9uIG9uZU9mKGxpc3QsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IGV4cGVjdGVkID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGNvbnRhaW5zID0gZmxhZzIodGhpcywgXCJjb250YWluc1wiKSwgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgbmV3IEFzc2VydGlvbihsaXN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbihcImFycmF5XCIpO1xuICBpZiAoY29udGFpbnMpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQuaW5kZXhPZihwb3NzaWJpbGl0eSkgPiAtMTtcbiAgICAgIH0pLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gb25lIG9mICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIG9uZSBvZiAje2V4cH1cIixcbiAgICAgIGxpc3QsXG4gICAgICBleHBlY3RlZFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVlcCkge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICAgIHJldHVybiBlcWwoZXhwZWN0ZWQsIHBvc3NpYmlsaXR5KTtcbiAgICAgICAgfSksXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgbGlzdCxcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBsaXN0LmluZGV4T2YoZXhwZWN0ZWQpID4gLTEsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBvbmUgb2YgI3tleHB9XCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBsaXN0LFxuICAgICAgICBleHBlY3RlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZShvbmVPZiwgXCJvbmVPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJvbmVPZlwiLCBvbmVPZik7XG5mdW5jdGlvbiBhc3NlcnRDaGFuZ2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgbGV0IGZuID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24oZm4sIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgbGV0IGluaXRpYWw7XG4gIGlmICghcHJvcCkge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0KCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0W3Byb3BdO1xuICB9XG4gIGZuKCk7XG4gIGxldCBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgbGV0IG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImNoYW5nZVwiKTtcbiAgZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIiwgZmluYWwgIT09IGluaXRpYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBpbml0aWFsICE9PSBmaW5hbCxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gY2hhbmdlXCIsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBjaGFuZ2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydENoYW5nZXMsIFwiYXNzZXJ0Q2hhbmdlc1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjaGFuZ2VcIiwgYXNzZXJ0Q2hhbmdlcyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiY2hhbmdlc1wiLCBhc3NlcnRDaGFuZ2VzKTtcbmZ1bmN0aW9uIGFzc2VydEluY3JlYXNlcyhzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBmbiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIGxldCBpbml0aWFsO1xuICBpZiAoIXByb3ApIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICB9IGVsc2Uge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGluaXRpYWwsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJudW1iZXJcIik7XG4gIGZuKCk7XG4gIGxldCBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgbGV0IG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImluY3JlYXNlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBmaW5hbCAtIGluaXRpYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBmaW5hbCAtIGluaXRpYWwgPiAwLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBpbmNyZWFzZVwiLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgaW5jcmVhc2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydEluY3JlYXNlcywgXCJhc3NlcnRJbmNyZWFzZXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5jcmVhc2VcIiwgYXNzZXJ0SW5jcmVhc2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbmNyZWFzZXNcIiwgYXNzZXJ0SW5jcmVhc2VzKTtcbmZ1bmN0aW9uIGFzc2VydERlY3JlYXNlcyhzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBmbiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIGxldCBpbml0aWFsO1xuICBpZiAoIXByb3ApIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICB9IGVsc2Uge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGluaXRpYWwsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJudW1iZXJcIik7XG4gIGZuKCk7XG4gIGxldCBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgbGV0IG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImRlY3JlYXNlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBpbml0aWFsIC0gZmluYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBmaW5hbCAtIGluaXRpYWwgPCAwLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBkZWNyZWFzZVwiLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgZGVjcmVhc2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydERlY3JlYXNlcywgXCJhc3NlcnREZWNyZWFzZXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZGVjcmVhc2VcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJkZWNyZWFzZXNcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbmZ1bmN0aW9uIGFzc2VydERlbHRhKGRlbHRhLCBtc2cpIHtcbiAgaWYgKG1zZykgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGxldCBtc2dPYmogPSBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIpO1xuICBsZXQgaW5pdGlhbCA9IGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIik7XG4gIGxldCBmaW5hbCA9IGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIpO1xuICBsZXQgYmVoYXZpb3IgPSBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIik7XG4gIGxldCByZWFsRGVsdGEgPSBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiKTtcbiAgbGV0IGV4cHJlc3Npb247XG4gIGlmIChiZWhhdmlvciA9PT0gXCJjaGFuZ2VcIikge1xuICAgIGV4cHJlc3Npb24gPSBNYXRoLmFicyhmaW5hbCAtIGluaXRpYWwpID09PSBNYXRoLmFicyhkZWx0YSk7XG4gIH0gZWxzZSB7XG4gICAgZXhwcmVzc2lvbiA9IHJlYWxEZWx0YSA9PT0gTWF0aC5hYnMoZGVsdGEpO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGV4cHJlc3Npb24sXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIFwiICsgYmVoYXZpb3IgKyBcIiBieSBcIiArIGRlbHRhLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgXCIgKyBiZWhhdmlvciArIFwiIGJ5IFwiICsgZGVsdGFcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnREZWx0YSwgXCJhc3NlcnREZWx0YVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJieVwiLCBhc3NlcnREZWx0YSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleHRlbnNpYmxlXCIsIGZ1bmN0aW9uKCkge1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGxldCBpc0V4dGVuc2libGUgPSBvYmogPT09IE9iamVjdChvYmopICYmIE9iamVjdC5pc0V4dGVuc2libGUob2JqKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNFeHRlbnNpYmxlLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBleHRlbnNpYmxlXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBleHRlbnNpYmxlXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwic2VhbGVkXCIsIGZ1bmN0aW9uKCkge1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGxldCBpc1NlYWxlZCA9IG9iaiA9PT0gT2JqZWN0KG9iaikgPyBPYmplY3QuaXNTZWFsZWQob2JqKSA6IHRydWU7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzU2VhbGVkLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBzZWFsZWRcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIHNlYWxlZFwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImZyb3plblwiLCBmdW5jdGlvbigpIHtcbiAgbGV0IG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICBsZXQgaXNGcm96ZW4gPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzRnJvemVuKG9iaikgOiB0cnVlO1xuICB0aGlzLmFzc2VydChcbiAgICBpc0Zyb3plbixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZnJvemVuXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBmcm96ZW5cIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJmaW5pdGVcIiwgZnVuY3Rpb24oX21zZykge1xuICBsZXQgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUob2JqKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYSBmaW5pdGUgbnVtYmVyXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhIGZpbml0ZSBudW1iZXJcIlxuICApO1xufSk7XG5mdW5jdGlvbiBjb21wYXJlU3Vic2V0KGV4cGVjdGVkLCBhY3R1YWwpIHtcbiAgaWYgKGV4cGVjdGVkID09PSBhY3R1YWwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGFjdHVhbCAhPT0gdHlwZW9mIGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgIT09IFwib2JqZWN0XCIgfHwgZXhwZWN0ZWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQgPT09IGFjdHVhbDtcbiAgfVxuICBpZiAoIWFjdHVhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWN0dWFsKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZXhwZWN0ZWQuZXZlcnkoZnVuY3Rpb24oZXhwKSB7XG4gICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0KSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlU3Vic2V0KGV4cCwgYWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGlmIChleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkLmdldFRpbWUoKSA9PT0gYWN0dWFsLmdldFRpbWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoZXhwZWN0ZWQpLmV2ZXJ5KGZ1bmN0aW9uKGtleSkge1xuICAgIGxldCBleHBlY3RlZFZhbHVlID0gZXhwZWN0ZWRba2V5XTtcbiAgICBsZXQgYWN0dWFsVmFsdWUgPSBhY3R1YWxba2V5XTtcbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkVmFsdWUgPT09IFwib2JqZWN0XCIgJiYgZXhwZWN0ZWRWYWx1ZSAhPT0gbnVsbCAmJiBhY3R1YWxWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVTdWJzZXQoZXhwZWN0ZWRWYWx1ZSwgYWN0dWFsVmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkVmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkVmFsdWUoYWN0dWFsVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gYWN0dWFsVmFsdWUgPT09IGV4cGVjdGVkVmFsdWU7XG4gIH0pO1xufVxuX19uYW1lKGNvbXBhcmVTdWJzZXQsIFwiY29tcGFyZVN1YnNldFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjb250YWluU3Vic2V0XCIsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gIGNvbnN0IGFjdHVhbCA9IGZsYWcodGhpcywgXCJvYmplY3RcIik7XG4gIGNvbnN0IHNob3dEaWZmID0gY29uZmlnLnNob3dEaWZmO1xuICB0aGlzLmFzc2VydChcbiAgICBjb21wYXJlU3Vic2V0KGV4cGVjdGVkLCBhY3R1YWwpLFxuICAgIFwiZXhwZWN0ZWQgI3thY3R9IHRvIGNvbnRhaW4gc3Vic2V0ICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3thY3R9IHRvIG5vdCBjb250YWluIHN1YnNldCAje2V4cH1cIixcbiAgICBleHBlY3RlZCxcbiAgICBhY3R1YWwsXG4gICAgc2hvd0RpZmZcbiAgKTtcbn0pO1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2UvZXhwZWN0LmpzXG5mdW5jdGlvbiBleHBlY3QodmFsLCBtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKHZhbCwgbWVzc2FnZSk7XG59XG5fX25hbWUoZXhwZWN0LCBcImV4cGVjdFwiKTtcbmV4cGVjdC5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICBhY3R1YWwgPSB2b2lkIDA7XG4gIH1cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJleHBlY3QuZmFpbCgpXCI7XG4gIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICBtZXNzYWdlLFxuICAgIHtcbiAgICAgIGFjdHVhbCxcbiAgICAgIGV4cGVjdGVkLFxuICAgICAgb3BlcmF0b3JcbiAgICB9LFxuICAgIGV4cGVjdC5mYWlsXG4gICk7XG59O1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2Uvc2hvdWxkLmpzXG52YXIgc2hvdWxkX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNob3VsZF9leHBvcnRzLCB7XG4gIFNob3VsZDogKCkgPT4gU2hvdWxkLFxuICBzaG91bGQ6ICgpID0+IHNob3VsZFxufSk7XG5mdW5jdGlvbiBsb2FkU2hvdWxkKCkge1xuICBmdW5jdGlvbiBzaG91bGRHZXR0ZXIoKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdGhpcyBpbnN0YW5jZW9mIE51bWJlciB8fCB0aGlzIGluc3RhbmNlb2YgQm9vbGVhbiB8fCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIFN5bWJvbCB8fCB0eXBlb2YgQmlnSW50ID09PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIEJpZ0ludCkge1xuICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcy52YWx1ZU9mKCksIG51bGwsIHNob3VsZEdldHRlcik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHRoaXMsIG51bGwsIHNob3VsZEdldHRlcik7XG4gIH1cbiAgX19uYW1lKHNob3VsZEdldHRlciwgXCJzaG91bGRHZXR0ZXJcIik7XG4gIGZ1bmN0aW9uIHNob3VsZFNldHRlcih2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNob3VsZFwiLCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIF9fbmFtZShzaG91bGRTZXR0ZXIsIFwic2hvdWxkU2V0dGVyXCIpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgXCJzaG91bGRcIiwge1xuICAgIHNldDogc2hvdWxkU2V0dGVyLFxuICAgIGdldDogc2hvdWxkR2V0dGVyLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgbGV0IHNob3VsZDIgPSB7fTtcbiAgc2hvdWxkMi5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgICBhY3R1YWwgPSB2b2lkIDA7XG4gICAgfVxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IFwic2hvdWxkLmZhaWwoKVwiO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB7XG4gICAgICAgIGFjdHVhbCxcbiAgICAgICAgZXhwZWN0ZWQsXG4gICAgICAgIG9wZXJhdG9yXG4gICAgICB9LFxuICAgICAgc2hvdWxkMi5mYWlsXG4gICAgKTtcbiAgfTtcbiAgc2hvdWxkMi5lcXVhbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdHVhbCwgbWVzc2FnZSkudG8uZXF1YWwoZXhwZWN0ZWQpO1xuICB9O1xuICBzaG91bGQyLlRocm93ID0gZnVuY3Rpb24oZm4sIGVycnQsIGVycnMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8uVGhyb3coZXJydCwgZXJycyk7XG4gIH07XG4gIHNob3VsZDIuZXhpc3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmV4aXN0O1xuICB9O1xuICBzaG91bGQyLm5vdCA9IHt9O1xuICBzaG91bGQyLm5vdC5lcXVhbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0dWFsLCBtc2cpLnRvLm5vdC5lcXVhbChleHBlY3RlZCk7XG4gIH07XG4gIHNob3VsZDIubm90LlRocm93ID0gZnVuY3Rpb24oZm4sIGVycnQsIGVycnMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8ubm90LlRocm93KGVycnQsIGVycnMpO1xuICB9O1xuICBzaG91bGQyLm5vdC5leGlzdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmV4aXN0O1xuICB9O1xuICBzaG91bGQyW1widGhyb3dcIl0gPSBzaG91bGQyW1wiVGhyb3dcIl07XG4gIHNob3VsZDIubm90W1widGhyb3dcIl0gPSBzaG91bGQyLm5vdFtcIlRocm93XCJdO1xuICByZXR1cm4gc2hvdWxkMjtcbn1cbl9fbmFtZShsb2FkU2hvdWxkLCBcImxvYWRTaG91bGRcIik7XG52YXIgc2hvdWxkID0gbG9hZFNob3VsZDtcbnZhciBTaG91bGQgPSBsb2FkU2hvdWxkO1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2UvYXNzZXJ0LmpzXG5mdW5jdGlvbiBhc3NlcnQoZXhwcmVzcywgZXJybXNnKSB7XG4gIGxldCB0ZXN0MiA9IG5ldyBBc3NlcnRpb24obnVsbCwgbnVsbCwgYXNzZXJ0LCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KGV4cHJlc3MsIGVycm1zZywgXCJbIG5lZ2F0aW9uIG1lc3NhZ2UgdW5hdmFpbGFibGUgXVwiKTtcbn1cbl9fbmFtZShhc3NlcnQsIFwiYXNzZXJ0XCIpO1xuYXNzZXJ0LmZhaWwgPSBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgIGFjdHVhbCA9IHZvaWQgMDtcbiAgfVxuICBtZXNzYWdlID0gbWVzc2FnZSB8fCBcImFzc2VydC5mYWlsKClcIjtcbiAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgIG1lc3NhZ2UsXG4gICAge1xuICAgICAgYWN0dWFsLFxuICAgICAgZXhwZWN0ZWQsXG4gICAgICBvcGVyYXRvclxuICAgIH0sXG4gICAgYXNzZXJ0LmZhaWxcbiAgKTtcbn07XG5hc3NlcnQuaXNPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09rLCB0cnVlKS5pcy5vaztcbn07XG5hc3NlcnQuaXNOb3RPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE9rLCB0cnVlKS5pcy5ub3Qub2s7XG59O1xuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBsZXQgdGVzdDIgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuZXF1YWwsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgZXhwID09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7YWN0fVwiLFxuICAgIGV4cCxcbiAgICBhY3QsXG4gICAgdHJ1ZVxuICApO1xufTtcbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgbGV0IHRlc3QyID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdEVxdWFsLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIGV4cCAhPSBmbGFnKHRlc3QyLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2FjdH1cIixcbiAgICBleHAsXG4gICAgYWN0LFxuICAgIHRydWVcbiAgKTtcbn07XG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5zdHJpY3RFcXVhbCwgdHJ1ZSkudG8uZXF1YWwoZXhwKTtcbn07XG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3RTdHJpY3RFcXVhbCwgdHJ1ZSkudG8ubm90LmVxdWFsKGV4cCk7XG59O1xuYXNzZXJ0LmRlZXBFcXVhbCA9IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5kZWVwRXF1YWwsIHRydWUpLnRvLmVxbChleHApO1xufTtcbmFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3REZWVwRXF1YWwsIHRydWUpLnRvLm5vdC5lcWwoZXhwKTtcbn07XG5hc3NlcnQuaXNBYm92ZSA9IGZ1bmN0aW9uKHZhbCwgYWJ2LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQWJvdmUsIHRydWUpLnRvLmJlLmFib3ZlKGFidik7XG59O1xuYXNzZXJ0LmlzQXRMZWFzdCA9IGZ1bmN0aW9uKHZhbCwgYXRsc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdExlYXN0LCB0cnVlKS50by5iZS5sZWFzdChhdGxzdCk7XG59O1xuYXNzZXJ0LmlzQmVsb3cgPSBmdW5jdGlvbih2YWwsIGJsdywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0JlbG93LCB0cnVlKS50by5iZS5iZWxvdyhibHcpO1xufTtcbmFzc2VydC5pc0F0TW9zdCA9IGZ1bmN0aW9uKHZhbCwgYXRtc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdE1vc3QsIHRydWUpLnRvLmJlLm1vc3QoYXRtc3QpO1xufTtcbmFzc2VydC5pc1RydWUgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNUcnVlLCB0cnVlKS5pc1tcInRydWVcIl07XG59O1xuYXNzZXJ0LmlzTm90VHJ1ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFRydWUsIHRydWUpLnRvLm5vdC5lcXVhbCh0cnVlKTtcbn07XG5hc3NlcnQuaXNGYWxzZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0ZhbHNlLCB0cnVlKS5pc1tcImZhbHNlXCJdO1xufTtcbmFzc2VydC5pc05vdEZhbHNlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RmFsc2UsIHRydWUpLnRvLm5vdC5lcXVhbChmYWxzZSk7XG59O1xuYXNzZXJ0LmlzTnVsbCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bGwsIHRydWUpLnRvLmVxdWFsKG51bGwpO1xufTtcbmFzc2VydC5pc05vdE51bGwgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdWxsLCB0cnVlKS50by5ub3QuZXF1YWwobnVsbCk7XG59O1xuYXNzZXJ0LmlzTmFOID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTmFOLCB0cnVlKS50by5iZS5OYU47XG59O1xuYXNzZXJ0LmlzTm90TmFOID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0LmlzTm90TmFOLCB0cnVlKS5ub3QudG8uYmUuTmFOO1xufTtcbmFzc2VydC5leGlzdHMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuZXhpc3RzLCB0cnVlKS50by5leGlzdDtcbn07XG5hc3NlcnQubm90RXhpc3RzID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lm5vdEV4aXN0cywgdHJ1ZSkudG8ubm90LmV4aXN0O1xufTtcbmFzc2VydC5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1VuZGVmaW5lZCwgdHJ1ZSkudG8uZXF1YWwodm9pZCAwKTtcbn07XG5hc3NlcnQuaXNEZWZpbmVkID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRGVmaW5lZCwgdHJ1ZSkudG8ubm90LmVxdWFsKHZvaWQgMCk7XG59O1xuYXNzZXJ0LmlzQ2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNDYWxsYWJsZSwgdHJ1ZSkuaXMuY2FsbGFibGU7XG59O1xuYXNzZXJ0LmlzTm90Q2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNOb3RDYWxsYWJsZSwgdHJ1ZSkuaXMubm90LmNhbGxhYmxlO1xufTtcbmFzc2VydC5pc09iamVjdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09iamVjdCwgdHJ1ZSkudG8uYmUuYShcIm9iamVjdFwiKTtcbn07XG5hc3NlcnQuaXNOb3RPYmplY3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPYmplY3QsIHRydWUpLnRvLm5vdC5iZS5hKFwib2JqZWN0XCIpO1xufTtcbmFzc2VydC5pc0FycmF5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXJyYXksIHRydWUpLnRvLmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzTm90QXJyYXkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RBcnJheSwgdHJ1ZSkudG8ubm90LmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzU3RyaW5nID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzU3RyaW5nLCB0cnVlKS50by5iZS5hKFwic3RyaW5nXCIpO1xufTtcbmFzc2VydC5pc05vdFN0cmluZyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFN0cmluZywgdHJ1ZSkudG8ubm90LmJlLmEoXCJzdHJpbmdcIik7XG59O1xuYXNzZXJ0LmlzTnVtYmVyID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVtYmVyLCB0cnVlKS50by5iZS5hKFwibnVtYmVyXCIpO1xufTtcbmFzc2VydC5pc05vdE51bWJlciA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWJlciwgdHJ1ZSkudG8ubm90LmJlLmEoXCJudW1iZXJcIik7XG59O1xuYXNzZXJ0LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bWVyaWMsIHRydWUpLmlzLm51bWVyaWM7XG59O1xuYXNzZXJ0LmlzTm90TnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWVyaWMsIHRydWUpLmlzLm5vdC5udW1lcmljO1xufTtcbmFzc2VydC5pc0Zpbml0ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Zpbml0ZSwgdHJ1ZSkudG8uYmUuZmluaXRlO1xufTtcbmFzc2VydC5pc0Jvb2xlYW4gPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCb29sZWFuLCB0cnVlKS50by5iZS5hKFwiYm9vbGVhblwiKTtcbn07XG5hc3NlcnQuaXNOb3RCb29sZWFuID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90Qm9vbGVhbiwgdHJ1ZSkudG8ubm90LmJlLmEoXCJib29sZWFuXCIpO1xufTtcbmFzc2VydC50eXBlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LnR5cGVPZiwgdHJ1ZSkudG8uYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lm5vdFR5cGVPZiA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlMywgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQubm90VHlwZU9mLCB0cnVlKS50by5ub3QuYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lmluc3RhbmNlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lmluc3RhbmNlT2YsIHRydWUpLnRvLmJlLmluc3RhbmNlT2YodHlwZTMpO1xufTtcbmFzc2VydC5ub3RJbnN0YW5jZU9mID0gZnVuY3Rpb24odmFsLCB0eXBlMywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RJbnN0YW5jZU9mLCB0cnVlKS50by5ub3QuYmUuaW5zdGFuY2VPZihcbiAgICB0eXBlM1xuICApO1xufTtcbmFzc2VydC5pbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuaW5jbHVkZSwgdHJ1ZSkuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZSwgdHJ1ZSkubm90LmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQuZGVlcEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwSW5jbHVkZSwgdHJ1ZSkuZGVlcC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUsIHRydWUpLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlLCB0cnVlKS5ub3QubmVzdGVkLmluY2x1ZGUoXG4gICAgaW5jXG4gICk7XG59O1xuYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUsIHRydWUpLmRlZXAubmVzdGVkLmluY2x1ZGUoXG4gICAgaW5jXG4gICk7XG59O1xuYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIGV4cCxcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlLFxuICAgIHRydWVcbiAgKS5ub3QuZGVlcC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5vd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQub3duSW5jbHVkZSwgdHJ1ZSkub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90T3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE93bkluY2x1ZGUsIHRydWUpLm5vdC5vd24uaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwT3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBPd25JbmNsdWRlLCB0cnVlKS5kZWVwLm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcE93bkluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLm93bi5pbmNsdWRlKFxuICAgIGluY1xuICApO1xufTtcbmFzc2VydC5tYXRjaCA9IGZ1bmN0aW9uKGV4cCwgcmUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubWF0Y2gsIHRydWUpLnRvLm1hdGNoKHJlKTtcbn07XG5hc3NlcnQubm90TWF0Y2ggPSBmdW5jdGlvbihleHAsIHJlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE1hdGNoLCB0cnVlKS50by5ub3QubWF0Y2gocmUpO1xufTtcbmFzc2VydC5wcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5wcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubm90UHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90UHJvcGVydHksIHRydWUpLnRvLm5vdC5oYXZlLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5wcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LnByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm5vdFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90UHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLnByb3BlcnR5KFxuICAgIHByb3AsXG4gICAgdmFsXG4gICk7XG59O1xuYXNzZXJ0LmRlZXBQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5kZWVwLnByb3BlcnR5KFxuICAgIHByb3AsXG4gICAgdmFsXG4gICk7XG59O1xuYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBvYmosXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5oYXZlLmRlZXAucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQub3duUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHksIHRydWUpLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5ub3RPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSwgdHJ1ZSkudG8ubm90LmhhdmUub3duLnByb3BlcnR5KFxuICAgIHByb3BcbiAgKTtcbn07XG5hc3NlcnQub3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm93blByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLm93bi5wcm9wZXJ0eShcbiAgICBwcm9wLFxuICAgIHZhbHVlXG4gICk7XG59O1xuYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubm90T3duUHJvcGVydHlWYWwsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5oYXZlLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIG9iaixcbiAgICBtc2csXG4gICAgYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCxcbiAgICB0cnVlXG4gICkudG8uaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIG9iaixcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCxcbiAgICB0cnVlXG4gICkudG8ubm90LmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5uZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoXG4gICAgcHJvcFxuICApO1xufTtcbmFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHksXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubmVzdGVkUHJvcGVydHlWYWwsXG4gICAgdHJ1ZVxuICApLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIG9iaixcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQuZGVlcE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIG9iaixcbiAgICBtc2csXG4gICAgYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCxcbiAgICB0cnVlXG4gICkudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5sZW5ndGhPZiA9IGZ1bmN0aW9uKGV4cCwgbGVuLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lmxlbmd0aE9mLCB0cnVlKS50by5oYXZlLmxlbmd0aE9mKGxlbik7XG59O1xuYXNzZXJ0Lmhhc0FueUtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQW55S2V5cywgdHJ1ZSkudG8uaGF2ZS5hbnkua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQWxsS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxLZXlzLCB0cnVlKS50by5oYXZlLmFsbC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5jb250YWluc0FsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxLZXlzLCB0cnVlKS50by5jb250YWluLmFsbC5rZXlzKFxuICAgIGtleXNcbiAgKTtcbn07XG5hc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYW55LmtleXMoXG4gICAga2V5c1xuICApO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbGwua2V5cyhcbiAgICBrZXlzXG4gICk7XG59O1xuYXNzZXJ0Lmhhc0FueURlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FueURlZXBLZXlzLCB0cnVlKS50by5oYXZlLmFueS5kZWVwLmtleXMoXG4gICAga2V5c1xuICApO1xufTtcbmFzc2VydC5oYXNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxEZWVwS2V5cywgdHJ1ZSkudG8uaGF2ZS5hbGwuZGVlcC5rZXlzKFxuICAgIGtleXNcbiAgKTtcbn07XG5hc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgb2JqLFxuICAgIG1zZyxcbiAgICBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyxcbiAgICB0cnVlXG4gICkudG8uY29udGFpbi5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBvYmosXG4gICAgbXNnLFxuICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5hbnkuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBvYmosXG4gICAgbXNnLFxuICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIGxldCBhc3NlcnRFcnIgPSBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC50aHJvd3MsIHRydWUpLnRvLnRocm93KFxuICAgIGVycm9yTGlrZSxcbiAgICBlcnJNc2dNYXRjaGVyXG4gICk7XG4gIHJldHVybiBmbGFnKGFzc2VydEVyciwgXCJvYmplY3RcIik7XG59O1xuYXNzZXJ0LmRvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1lc3NhZ2UsIGFzc2VydC5kb2VzTm90VGhyb3csIHRydWUpLnRvLm5vdC50aHJvdyhcbiAgICBlcnJvckxpa2UsXG4gICAgZXJyTXNnTWF0Y2hlclxuICApO1xufTtcbmFzc2VydC5vcGVyYXRvciA9IGZ1bmN0aW9uKHZhbCwgb3BlcmF0b3IsIHZhbDIsIG1zZykge1xuICBsZXQgb2s7XG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlIFwiPT1cIjpcbiAgICAgIG9rID0gdmFsID09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPT09XCI6XG4gICAgICBvayA9IHZhbCA9PT0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI+XCI6XG4gICAgICBvayA9IHZhbCA+IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPj1cIjpcbiAgICAgIG9rID0gdmFsID49IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPFwiOlxuICAgICAgb2sgPSB2YWwgPCB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIjw9XCI6XG4gICAgICBvayA9IHZhbCA8PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9XCI6XG4gICAgICBvayA9IHZhbCAhPSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9PVwiOlxuICAgICAgb2sgPSB2YWwgIT09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbXNnID0gbXNnID8gbXNnICsgXCI6IFwiIDogbXNnO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBtc2cgKyAnSW52YWxpZCBvcGVyYXRvciBcIicgKyBvcGVyYXRvciArICdcIicsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgYXNzZXJ0Lm9wZXJhdG9yXG4gICAgICApO1xuICB9XG4gIGxldCB0ZXN0MiA9IG5ldyBBc3NlcnRpb24ob2ssIG1zZywgYXNzZXJ0Lm9wZXJhdG9yLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIHRydWUgPT09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBpbnNwZWN0Mih2YWwpICsgXCIgdG8gYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMiksXG4gICAgXCJleHBlY3RlZCBcIiArIGluc3BlY3QyKHZhbCkgKyBcIiB0byBub3QgYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMilcbiAgKTtcbn07XG5hc3NlcnQuY2xvc2VUbyA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBkZWx0YSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5jbG9zZVRvLCB0cnVlKS50by5iZS5jbG9zZVRvKGV4cCwgZGVsdGEpO1xufTtcbmFzc2VydC5hcHByb3hpbWF0ZWx5ID0gZnVuY3Rpb24oYWN0LCBleHAsIGRlbHRhLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmFwcHJveGltYXRlbHksIHRydWUpLnRvLmJlLmFwcHJveGltYXRlbHkoXG4gICAgZXhwLFxuICAgIGRlbHRhXG4gICk7XG59O1xuYXNzZXJ0LnNhbWVNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZU1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKFxuICAgIHNldDEsXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3RTYW1lTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8ubm90LmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5zYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzZXQxLFxuICAgIG1zZyxcbiAgICBhc3NlcnQuc2FtZURlZXBNZW1iZXJzLFxuICAgIHRydWVcbiAgKS50by5oYXZlLnNhbWUuZGVlcC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzZXQxLFxuICAgIG1zZyxcbiAgICBhc3NlcnQubm90U2FtZURlZXBNZW1iZXJzLFxuICAgIHRydWVcbiAgKS50by5ub3QuaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuc2FtZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc2V0MSxcbiAgICBtc2csXG4gICAgYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8uaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc2V0MSxcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdFNhbWVPcmRlcmVkTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8ubm90LmhhdmUuc2FtZS5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LnNhbWVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzZXQxLFxuICAgIG1zZyxcbiAgICBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8uaGF2ZS5zYW1lLmRlZXAub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc2V0MSxcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LmluY2x1ZGVNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVNZW1iZXJzLCB0cnVlKS50by5pbmNsdWRlLm1lbWJlcnMoXG4gICAgc3Vic2V0XG4gICk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGVNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc3VwZXJzZXQsXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8ubm90LmluY2x1ZGUubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzdXBlcnNldCxcbiAgICBtc2csXG4gICAgYXNzZXJ0LmluY2x1ZGVEZWVwTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc3VwZXJzZXQsXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5pbmNsdWRlLmRlZXAubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzdXBlcnNldCxcbiAgICBtc2csXG4gICAgYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycyxcbiAgICB0cnVlXG4gICkudG8uaW5jbHVkZS5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc3VwZXJzZXQsXG4gICAgbXNnLFxuICAgIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oXG4gICAgc3VwZXJzZXQsXG4gICAgbXNnLFxuICAgIGFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzLFxuICAgIHRydWVcbiAgKS50by5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihcbiAgICBzdXBlcnNldCxcbiAgICBtc2csXG4gICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsXG4gICAgdHJ1ZVxuICApLnRvLm5vdC5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm9uZU9mID0gZnVuY3Rpb24oaW5MaXN0LCBsaXN0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihpbkxpc3QsIG1zZywgYXNzZXJ0Lm9uZU9mLCB0cnVlKS50by5iZS5vbmVPZihsaXN0KTtcbn07XG5hc3NlcnQuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIGlmIChvYmogPT0gdm9pZCAwIHx8ICFvYmpbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgIG1zZyA9IG1zZyA/IGAke21zZ30gZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWAgOiBgZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWA7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZywgdm9pZCAwLCBhc3NlcnQuaXNJdGVyYWJsZSk7XG4gIH1cbn07XG5hc3NlcnQuY2hhbmdlcyA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXMsIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5jaGFuZ2VzQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlc0J5LCB0cnVlKS50by5jaGFuZ2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRvZXNOb3RDaGFuZ2UgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdENoYW5nZSwgdHJ1ZSkudG8ubm90LmNoYW5nZShcbiAgICBvYmosXG4gICAgcHJvcFxuICApO1xufTtcbmFzc2VydC5jaGFuZ2VzQnV0Tm90QnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlc0J1dE5vdEJ5LCB0cnVlKS50by5jaGFuZ2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuaW5jcmVhc2VzID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlcywgdHJ1ZSkudG8uaW5jcmVhc2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuaW5jcmVhc2VzQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzQnksIHRydWUpLnRvLmluY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kb2VzTm90SW5jcmVhc2UgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdEluY3JlYXNlLCB0cnVlKS50by5ub3QuaW5jcmVhc2UoXG4gICAgb2JqLFxuICAgIHByb3BcbiAgKTtcbn07XG5hc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnksIHRydWUpLnRvLmluY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRlY3JlYXNlcyA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXMsIHRydWUpLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmRlY3JlYXNlc0J5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsZXQgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlc0J5LCB0cnVlKS50by5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZG9lc05vdERlY3JlYXNlID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3REZWNyZWFzZSwgdHJ1ZSkudG8ubm90LmRlY3JlYXNlKFxuICAgIG9iaixcbiAgICBwcm9wXG4gICk7XG59O1xuYXNzZXJ0LmRvZXNOb3REZWNyZWFzZUJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsZXQgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSwgdHJ1ZSkudG8ubm90LmRlY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kZWNyZWFzZXNCdXROb3RCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbGV0IHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXNCdXROb3RCeSwgdHJ1ZSkudG8uZGVjcmVhc2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKHZhbCkge1xuICBpZiAodmFsKSB7XG4gICAgdGhyb3cgdmFsO1xuICB9XG59O1xuYXNzZXJ0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc0V4dGVuc2libGUsIHRydWUpLnRvLmJlLmV4dGVuc2libGU7XG59O1xuYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEV4dGVuc2libGUsIHRydWUpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xufTtcbmFzc2VydC5pc1NlYWxlZCA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc1NlYWxlZCwgdHJ1ZSkudG8uYmUuc2VhbGVkO1xufTtcbmFzc2VydC5pc05vdFNlYWxlZCA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdFNlYWxlZCwgdHJ1ZSkudG8ubm90LmJlLnNlYWxlZDtcbn07XG5hc3NlcnQuaXNGcm96ZW4gPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNGcm96ZW4sIHRydWUpLnRvLmJlLmZyb3plbjtcbn07XG5hc3NlcnQuaXNOb3RGcm96ZW4gPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RGcm96ZW4sIHRydWUpLnRvLm5vdC5iZS5mcm96ZW47XG59O1xuYXNzZXJ0LmlzRW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNFbXB0eSwgdHJ1ZSkudG8uYmUuZW1wdHk7XG59O1xuYXNzZXJ0LmlzTm90RW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RFbXB0eSwgdHJ1ZSkudG8ubm90LmJlLmVtcHR5O1xufTtcbmFzc2VydC5jb250YWluc1N1YnNldCA9IGZ1bmN0aW9uKHZhbCwgZXhwLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8uY29udGFpblN1YnNldChleHApO1xufTtcbmFzc2VydC5kb2VzTm90Q29udGFpblN1YnNldCA9IGZ1bmN0aW9uKHZhbCwgZXhwLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmNvbnRhaW5TdWJzZXQoZXhwKTtcbn07XG52YXIgYWxpYXNlcyA9IFtcbiAgW1wiaXNPa1wiLCBcIm9rXCJdLFxuICBbXCJpc05vdE9rXCIsIFwibm90T2tcIl0sXG4gIFtcInRocm93c1wiLCBcInRocm93XCJdLFxuICBbXCJ0aHJvd3NcIiwgXCJUaHJvd1wiXSxcbiAgW1wiaXNFeHRlbnNpYmxlXCIsIFwiZXh0ZW5zaWJsZVwiXSxcbiAgW1wiaXNOb3RFeHRlbnNpYmxlXCIsIFwibm90RXh0ZW5zaWJsZVwiXSxcbiAgW1wiaXNTZWFsZWRcIiwgXCJzZWFsZWRcIl0sXG4gIFtcImlzTm90U2VhbGVkXCIsIFwibm90U2VhbGVkXCJdLFxuICBbXCJpc0Zyb3plblwiLCBcImZyb3plblwiXSxcbiAgW1wiaXNOb3RGcm96ZW5cIiwgXCJub3RGcm96ZW5cIl0sXG4gIFtcImlzRW1wdHlcIiwgXCJlbXB0eVwiXSxcbiAgW1wiaXNOb3RFbXB0eVwiLCBcIm5vdEVtcHR5XCJdLFxuICBbXCJpc0NhbGxhYmxlXCIsIFwiaXNGdW5jdGlvblwiXSxcbiAgW1wiaXNOb3RDYWxsYWJsZVwiLCBcImlzTm90RnVuY3Rpb25cIl0sXG4gIFtcImNvbnRhaW5zU3Vic2V0XCIsIFwiY29udGFpblN1YnNldFwiXVxuXTtcbmZvciAoY29uc3QgW25hbWUsIGFzXSBvZiBhbGlhc2VzKSB7XG4gIGFzc2VydFthc10gPSBhc3NlcnRbbmFtZV07XG59XG5cbi8vIGxpYi9jaGFpLmpzXG52YXIgdXNlZCA9IFtdO1xuZnVuY3Rpb24gdXNlKGZuKSB7XG4gIGNvbnN0IGV4cG9ydHMgPSB7XG4gICAgdXNlLFxuICAgIEFzc2VydGlvbkVycm9yLFxuICAgIHV0aWw6IHV0aWxzX2V4cG9ydHMsXG4gICAgY29uZmlnLFxuICAgIGV4cGVjdCxcbiAgICBhc3NlcnQsXG4gICAgQXNzZXJ0aW9uLFxuICAgIC4uLnNob3VsZF9leHBvcnRzXG4gIH07XG4gIGlmICghfnVzZWQuaW5kZXhPZihmbikpIHtcbiAgICBmbihleHBvcnRzLCB1dGlsc19leHBvcnRzKTtcbiAgICB1c2VkLnB1c2goZm4pO1xuICB9XG4gIHJldHVybiBleHBvcnRzO1xufVxuX19uYW1lKHVzZSwgXCJ1c2VcIik7XG5leHBvcnQge1xuICBBc3NlcnRpb24sXG4gIEFzc2VydGlvbkVycm9yLFxuICBTaG91bGQsXG4gIGFzc2VydCxcbiAgY29uZmlnLFxuICBleHBlY3QsXG4gIHNob3VsZCxcbiAgdXNlLFxuICB1dGlsc19leHBvcnRzIGFzIHV0aWxcbn07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUksWUFBWSxPQUFPO0FBQ3ZCLElBQUksbUJBQW1CLEtBQUssS0FBSyxVQUFVLE9BQU8sTUFBTSxVQUFVLEtBQUssS0FBSztDQUFFLFlBQVk7Q0FBTSxjQUFjO0NBQU0sVUFBVTtDQUFNO0FBQU0sQ0FBQyxJQUFJLElBQUksT0FBTztBQUMxSixJQUFJLFVBQVUsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRO0NBQUU7Q0FBTyxjQUFjO0FBQUssQ0FBQztBQUN2RixJQUFJLFlBQVksUUFBUSxRQUFRO0NBQzlCLEtBQUssSUFBSSxRQUFRLEtBQ2YsVUFBVSxRQUFRLE1BQU07RUFBRSxLQUFLLElBQUk7RUFBTyxZQUFZO0NBQUssQ0FBQztBQUNoRTtBQUNBLElBQUksaUJBQWlCLEtBQUssS0FBSyxVQUFVLGdCQUFnQixLQUFLLE9BQU8sUUFBUSxXQUFXLE1BQU0sS0FBSyxLQUFLLEtBQUs7QUFHN0csSUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixTQUFTLGVBQWU7Q0FDdEIsMEJBQTBCO0NBQzFCLHNCQUFzQjtDQUN0QixpQkFBaUI7Q0FDakIsbUJBQW1CO0NBQ25CLGtCQUFrQjtDQUNsQix3QkFBd0I7Q0FDeEIsV0FBVztDQUNYLGNBQWM7Q0FDZCxtQkFBbUI7Q0FDbkIsWUFBWTtDQUNaLGlCQUFpQjtDQUNqQixrQkFBa0I7Q0FDbEIsZUFBZTtDQUNmLG1CQUFtQjtDQUNuQixrQ0FBa0M7Q0FDbEMsdUNBQXVDO0NBQ3ZDLG1CQUFtQjtDQUNuQixtQkFBbUI7Q0FDbkIsZUFBZTtDQUNmLGFBQWE7Q0FDYixpQkFB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LEtBQUssS0FBSztDQUNuQyxJQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQ2pFO0FBQ0EsT0FBTyxjQUFjLFNBQVMsS0FBSyxLQUFLO0NBQ3RDLElBQUksVUFBVSxLQUFLLEtBQUssT0FBTyxhQUFhLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUN4RTtBQUNBLE9BQU8sVUFBVSxTQUFTLEtBQUssS0FBSztDQUNsQyxJQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPO0FBQ2hFO0FBQ0EsT0FBTyxhQUFhLFNBQVMsS0FBSyxLQUFLO0NBQ3JDLElBQUksVUFBVSxLQUFLLEtBQUssT0FBTyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsT0FBTztBQUN2RTtBQUNBLE9BQU8sV0FBVyxTQUFTLEtBQUssS0FBSztDQUNuQyxJQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQ2pFO0FBQ0EsT0FBTyxjQUFjLFNBQVMsS0FBSyxLQUFLO0NBQ3RDLElBQUksVUFBVSxLQUFLLEtBQUssT0FBTyxhQUFhLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUN4RTtBQUNBLE9BQU8sV0FBVyxTQUFTLEtBQUssS0FBSztDQUNuQyxJQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQ2pFO0FBQ0EsT0FBTyxjQUFjLFNBQVMsS0FBSyxLQUFLO0NBQ3RDLElBQUksVUFBVSxLQUFLLEtBQUssT0FBTyxhQUFhLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUN4RTtBQUNBLE9BQU8sWUFBWSxTQUFTLEtBQUssS0FBSztDQUNwQyxJQUFJLFVB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