@nlabs/reaktor 1.18.0 → 1.19.1

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 (275) hide show
  1. package/README.md +14 -0
  2. package/docs/GENERATION.md +38 -16
  3. package/lib/actions/alfredFaq.js +1 -1
  4. package/lib/actions/analytics.js +1 -1
  5. package/lib/actions/apps.js +1 -1
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +1 -1
  8. package/lib/actions/contentGeneration.d.ts +3 -0
  9. package/lib/actions/contentGeneration.js +62 -9
  10. package/lib/actions/contentGenerationErrors.js +1 -1
  11. package/lib/actions/conversations.js +1 -1
  12. package/lib/actions/crm.js +1 -1
  13. package/lib/actions/crud.js +1 -1
  14. package/lib/actions/databaseAccounts.js +1 -1
  15. package/lib/actions/databaseProvisioningLease.js +1 -1
  16. package/lib/actions/dynamodb.js +1 -1
  17. package/lib/actions/email.js +1 -1
  18. package/lib/actions/files.js +1 -1
  19. package/lib/actions/flags.js +1 -1
  20. package/lib/actions/geminiVideo.js +1 -1
  21. package/lib/actions/groups.js +1 -1
  22. package/lib/actions/higgsfield.js +1 -1
  23. package/lib/actions/imageGeneration.js +1 -1
  24. package/lib/actions/images.js +1 -1
  25. package/lib/actions/index.js +1 -1
  26. package/lib/actions/ios.js +1 -1
  27. package/lib/actions/locations.js +1 -1
  28. package/lib/actions/messages.js +1 -1
  29. package/lib/actions/notifications.js +1 -1
  30. package/lib/actions/ollamaGeneration.js +1 -1
  31. package/lib/actions/openaiResponseSession.js +1 -1
  32. package/lib/actions/payments.js +1 -1
  33. package/lib/actions/personas.js +1 -1
  34. package/lib/actions/phoneSupport.js +1 -1
  35. package/lib/actions/posts.js +1 -1
  36. package/lib/actions/query.js +1 -1
  37. package/lib/actions/reactions.js +1 -1
  38. package/lib/actions/rum.js +1 -1
  39. package/lib/actions/s3.d.ts +10 -7
  40. package/lib/actions/s3.js +59 -14
  41. package/lib/actions/search.js +1 -1
  42. package/lib/actions/sms.js +1 -1
  43. package/lib/actions/statistics.js +1 -1
  44. package/lib/actions/subscriptions.js +1 -1
  45. package/lib/actions/tags.js +1 -1
  46. package/lib/actions/users.js +1 -1
  47. package/lib/actions/videoGeneration.js +1 -1
  48. package/lib/actions/videos.js +1 -1
  49. package/lib/adapters/arangoAdapter.js +1 -1
  50. package/lib/adapters/contentAdapter.js +1 -1
  51. package/lib/adapters/fileAdapter.js +1 -1
  52. package/lib/adapters/geminiGenerationAdapter.js +1 -1
  53. package/lib/adapters/higgsfieldAdapter.js +1 -1
  54. package/lib/adapters/higgsfieldModelCatalog.js +1 -1
  55. package/lib/adapters/higgsfieldModels.js +1 -1
  56. package/lib/adapters/imageAdapter.js +1 -1
  57. package/lib/adapters/imageGenerationAdapter.js +1 -1
  58. package/lib/adapters/index.js +1 -1
  59. package/lib/adapters/messageAdapter.js +1 -1
  60. package/lib/adapters/postAdapter.js +1 -1
  61. package/lib/adapters/reaktorAdapter.js +1 -1
  62. package/lib/adapters/tagAdapter.js +1 -1
  63. package/lib/adapters/userAdapter.js +1 -1
  64. package/lib/assistant/core.js +1 -1
  65. package/lib/assistant/faq.js +1 -1
  66. package/lib/assistant/faqCore.js +1 -1
  67. package/lib/assistant/index.js +1 -1
  68. package/lib/assistant/service.js +1 -1
  69. package/lib/config.js +1 -1
  70. package/lib/constants/collections.js +1 -1
  71. package/lib/durableChat/conversations.js +1 -1
  72. package/lib/durableChat/errors.js +1 -1
  73. package/lib/durableChat/events.js +1 -1
  74. package/lib/durableChat/index.js +1 -1
  75. package/lib/durableChat/membership.js +1 -1
  76. package/lib/durableChat/messageTypes.js +1 -1
  77. package/lib/durableChat/messages.js +1 -1
  78. package/lib/durableChat/transaction.js +1 -1
  79. package/lib/durableChat/types.js +1 -1
  80. package/lib/handlers/graphqlHandler.js +1 -1
  81. package/lib/index.js +1 -1
  82. package/lib/lambdas/actions/websockets.js +1 -1
  83. package/lib/lambdas/authorizer.js +1 -1
  84. package/lib/lambdas/connection.js +1 -1
  85. package/lib/lambdas/utils/message.js +1 -1
  86. package/lib/lambdas/utils/websocket.js +1 -1
  87. package/lib/mocks/conversation.js +1 -1
  88. package/lib/mocks/file.js +1 -1
  89. package/lib/mocks/group.js +1 -1
  90. package/lib/mocks/image.js +1 -1
  91. package/lib/mocks/post.js +1 -1
  92. package/lib/mocks/tag.js +1 -1
  93. package/lib/mocks/user.js +1 -1
  94. package/lib/mocks/video.js +1 -1
  95. package/lib/mutations/analytics/analytics.js +1 -1
  96. package/lib/mutations/content/content.js +1 -1
  97. package/lib/mutations/crm/crm.js +1 -1
  98. package/lib/mutations/events/events.js +1 -1
  99. package/lib/mutations/flags/flags.js +1 -1
  100. package/lib/mutations/groups/groups.js +1 -1
  101. package/lib/mutations/higgsfield/higgsfield.js +1 -1
  102. package/lib/mutations/images/images.js +1 -1
  103. package/lib/mutations/index.js +1 -1
  104. package/lib/mutations/locations/locations.js +1 -1
  105. package/lib/mutations/messages/messages.js +1 -1
  106. package/lib/mutations/personas/personas.js +1 -1
  107. package/lib/mutations/posts/posts.js +1 -1
  108. package/lib/mutations/reactions/reactions.js +1 -1
  109. package/lib/mutations/rum/rum.js +1 -1
  110. package/lib/mutations/statistics/statistics.js +1 -1
  111. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  112. package/lib/mutations/tags/tags.js +1 -1
  113. package/lib/mutations/users/users.js +1 -1
  114. package/lib/mutations/videos/videos.js +1 -1
  115. package/lib/nativePush/graphql.js +1 -1
  116. package/lib/nativePush/index.js +1 -1
  117. package/lib/nativePush/migrations.js +1 -1
  118. package/lib/nativePush/nativePushContract.fixture.js +1 -1
  119. package/lib/nativePush/payload.js +1 -1
  120. package/lib/nativePush/repository.js +1 -1
  121. package/lib/nativePush/service.js +1 -1
  122. package/lib/nativePush/snsProvider.js +1 -1
  123. package/lib/nativePush/types.js +1 -1
  124. package/lib/objectTypes/analytics.js +1 -1
  125. package/lib/objectTypes/app.js +1 -1
  126. package/lib/objectTypes/bankAccount.js +1 -1
  127. package/lib/objectTypes/connection.js +1 -1
  128. package/lib/objectTypes/content.js +1 -1
  129. package/lib/objectTypes/contentGeneration.js +1 -1
  130. package/lib/objectTypes/conversation.js +1 -1
  131. package/lib/objectTypes/creditCard.js +1 -1
  132. package/lib/objectTypes/crm.js +1 -1
  133. package/lib/objectTypes/document.js +1 -1
  134. package/lib/objectTypes/error.js +1 -1
  135. package/lib/objectTypes/event.js +1 -1
  136. package/lib/objectTypes/external.js +1 -1
  137. package/lib/objectTypes/file.js +1 -1
  138. package/lib/objectTypes/filter.js +1 -1
  139. package/lib/objectTypes/flag.js +1 -1
  140. package/lib/objectTypes/group.js +1 -1
  141. package/lib/objectTypes/higgsfield.js +1 -1
  142. package/lib/objectTypes/iapSubscription.js +1 -1
  143. package/lib/objectTypes/image.js +1 -1
  144. package/lib/objectTypes/imageGeneration.js +1 -1
  145. package/lib/objectTypes/index.js +1 -1
  146. package/lib/objectTypes/location.js +1 -1
  147. package/lib/objectTypes/message.js +1 -1
  148. package/lib/objectTypes/passcode.js +1 -1
  149. package/lib/objectTypes/persona.js +1 -1
  150. package/lib/objectTypes/plan.js +1 -1
  151. package/lib/objectTypes/post.js +1 -1
  152. package/lib/objectTypes/query.js +1 -1
  153. package/lib/objectTypes/reaction.js +1 -1
  154. package/lib/objectTypes/relation.js +1 -1
  155. package/lib/objectTypes/rum.js +1 -1
  156. package/lib/objectTypes/search.js +1 -1
  157. package/lib/objectTypes/statistics.js +1 -1
  158. package/lib/objectTypes/subscription.js +1 -1
  159. package/lib/objectTypes/tag.js +1 -1
  160. package/lib/objectTypes/user.js +1 -1
  161. package/lib/objectTypes/video.js +1 -1
  162. package/lib/objectTypes/videoGeneration.js +1 -1
  163. package/lib/organizations/accountLifecycle.js +1 -1
  164. package/lib/organizations/authorization.js +1 -1
  165. package/lib/organizations/billing.js +1 -1
  166. package/lib/organizations/billingProvider.js +1 -1
  167. package/lib/organizations/billingUpdates.js +1 -1
  168. package/lib/organizations/index.js +1 -1
  169. package/lib/organizations/mail.js +1 -1
  170. package/lib/organizations/memberDirectory.js +1 -1
  171. package/lib/organizations/membership.js +1 -1
  172. package/lib/organizations/passwordRecovery.js +1 -1
  173. package/lib/organizations/plans.js +1 -1
  174. package/lib/organizations/providerPagination.js +1 -1
  175. package/lib/organizations/reconciliation.js +1 -1
  176. package/lib/organizations/signup.js +1 -1
  177. package/lib/organizations/store.js +1 -1
  178. package/lib/organizations/types.js +1 -1
  179. package/lib/organizations/verification.js +1 -1
  180. package/lib/queries/analytics/analytics.js +1 -1
  181. package/lib/queries/content/content.js +1 -1
  182. package/lib/queries/crm/crm.js +1 -1
  183. package/lib/queries/events/events.js +1 -1
  184. package/lib/queries/flags/flags.js +1 -1
  185. package/lib/queries/groups/groups.js +1 -1
  186. package/lib/queries/higgsfield/higgsfield.js +1 -1
  187. package/lib/queries/images/images.js +1 -1
  188. package/lib/queries/index.js +1 -1
  189. package/lib/queries/locations/locations.js +1 -1
  190. package/lib/queries/messages/messages.js +1 -1
  191. package/lib/queries/personas/personas.js +1 -1
  192. package/lib/queries/posts/posts.js +1 -1
  193. package/lib/queries/query/query.js +1 -1
  194. package/lib/queries/reactions/reactions.js +1 -1
  195. package/lib/queries/statistics/statistics.js +1 -1
  196. package/lib/queries/subscriptions/subscriptions.js +1 -1
  197. package/lib/queries/tags/tags.js +1 -1
  198. package/lib/queries/users/users.js +1 -1
  199. package/lib/queries/videos/videos.js +1 -1
  200. package/lib/templates/email/layout.js +1 -1
  201. package/lib/templates/email/passwordForgot.js +1 -1
  202. package/lib/templates/email/passwordRecovery.js +1 -1
  203. package/lib/templates/email/verifyEmail.js +1 -1
  204. package/lib/templates/email/welcome.js +1 -1
  205. package/lib/templates/sms/passwordForgot.js +1 -1
  206. package/lib/templates/sms/passwordRecovery.js +1 -1
  207. package/lib/templates/sms/verifyEmail.js +1 -1
  208. package/lib/templates/sms/verifyPhone.js +1 -1
  209. package/lib/templates/sms/welcome.js +1 -1
  210. package/lib/types/analytics.types.js +1 -1
  211. package/lib/types/apps.types.js +1 -1
  212. package/lib/types/arangodb.types.js +1 -1
  213. package/lib/types/auth.types.js +1 -1
  214. package/lib/types/connections.types.js +1 -1
  215. package/lib/types/content.types.js +1 -1
  216. package/lib/types/conversations.types.js +1 -1
  217. package/lib/types/crm.types.js +1 -1
  218. package/lib/types/databaseCredentials.types.js +1 -1
  219. package/lib/types/email.types.js +1 -1
  220. package/lib/types/error.types.js +1 -1
  221. package/lib/types/files.types.js +1 -1
  222. package/lib/types/flags.types.js +1 -1
  223. package/lib/types/google.types.js +1 -1
  224. package/lib/types/groups.types.js +1 -1
  225. package/lib/types/images.types.js +1 -1
  226. package/lib/types/index.js +1 -1
  227. package/lib/types/locations.types.js +1 -1
  228. package/lib/types/messages.types.js +1 -1
  229. package/lib/types/notifications.types.js +1 -1
  230. package/lib/types/payments.types.js +1 -1
  231. package/lib/types/personas.types.js +1 -1
  232. package/lib/types/posts.types.js +1 -1
  233. package/lib/types/rum.types.js +1 -1
  234. package/lib/types/statistics.types.js +1 -1
  235. package/lib/types/tags.types.js +1 -1
  236. package/lib/types/users.types.js +1 -1
  237. package/lib/types/videos.types.js +1 -1
  238. package/lib/types/websockets.types.js +1 -1
  239. package/lib/upload.js +1 -1
  240. package/lib/utils/adapterUtils.js +1 -1
  241. package/lib/utils/analyticsUtils.js +1 -1
  242. package/lib/utils/appContext.js +1 -1
  243. package/lib/utils/aqlHelpers.js +1 -1
  244. package/lib/utils/arangodbUtils.js +1 -1
  245. package/lib/utils/authUtils.js +1 -1
  246. package/lib/utils/awsUtils.js +1 -1
  247. package/lib/utils/collectionRegistry.js +1 -1
  248. package/lib/utils/contextUtils.js +1 -1
  249. package/lib/utils/databaseCredentials.js +1 -1
  250. package/lib/utils/dbI18n.example.js +1 -1
  251. package/lib/utils/dbI18n.js +1 -1
  252. package/lib/utils/generationCallback.js +1 -1
  253. package/lib/utils/googleTranslate.js +1 -1
  254. package/lib/utils/graphqlUtils.js +1 -1
  255. package/lib/utils/imageUtils.js +1 -1
  256. package/lib/utils/index.js +1 -1
  257. package/lib/utils/languageDetection.js +1 -1
  258. package/lib/utils/localeUtils.example.js +1 -1
  259. package/lib/utils/localeUtils.js +1 -1
  260. package/lib/utils/mediaAccess.js +1 -1
  261. package/lib/utils/middlewareUtils.js +1 -1
  262. package/lib/utils/nodeRealtime.js +1 -1
  263. package/lib/utils/opaqueToken.js +1 -1
  264. package/lib/utils/queryBuilder.js +1 -1
  265. package/lib/utils/schemaUtils.js +1 -1
  266. package/lib/utils/secretDatabase.js +1 -1
  267. package/lib/utils/sessionUtils.js +1 -1
  268. package/lib/utils/stripeUtils.js +1 -1
  269. package/lib/utils/stripeUtils.ts.bak +1 -1
  270. package/lib/utils/templateUtils.js +1 -1
  271. package/lib/utils/testUtils.js +1 -1
  272. package/lib/utils/translationQueue.example.js +1 -1
  273. package/lib/utils/translationQueue.js +1 -1
  274. package/lib/videoProcessing.js +1 -1
  275. package/package.json +1 -1
@@ -604,4 +604,4 @@ export const deleteUserBillingCard = async (context)=>{
604
604
  }
605
605
  };
606
606
 
607
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9wYXltZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge3BhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmcsIHBhcnNlVmFyQ2hhcn0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCBzdHJpcGUgZnJvbSAnc3RyaXBlJztcblxuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtCaWxsaW5nU2V0dXBTZXNzaW9uT3B0aW9ucywgUGF5bWVudEJhbmtBY2NvdW50LCBQYXltZW50Q2FyZFR5cGUsIFBheW1lbnRDaGFyZ2UsIFBheW1lbnRUcmFuc2Zlcn0gZnJvbSAnLi4vdHlwZXMvcGF5bWVudHMudHlwZXMuanMnO1xuaW1wb3J0IHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvciwgVXNlckVycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7aGFzQWNjZXNzTGV2ZWx9IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25VdGlscy5qcyc7XG5pbXBvcnQge2dldFN0cmlwZUNsaWVudH0gZnJvbSAnLi4vdXRpbHMvc3RyaXBlVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRVc2VyQnlJZH0gZnJvbSAnLi91c2Vycy5qcyc7XG5cblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdwYXltZW50cyc7XG5jb25zdCBQTFVTX1BMQU5fSUQgPSAncGhhbnRhemUtcGx1cy1tb250aGx5JztcbmNvbnN0IFBMVVNfUExBTl9BTU9VTlQgPSAxMDAwO1xuY29uc3QgUExVU19QTEFOX0FDQ0VTUyA9IDE7XG5cbmV4cG9ydCBjb25zdCBhZGRDdXN0b21lckFjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkQ3VzdG9tZXJBY2NvdW50JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX0gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgLmNyZWF0ZSh7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZCxcbiAgICAgICAgdXNlcm5hbWVcbiAgICAgIH1cbiAgICB9IGFzIGFueSlcbiAgICAudGhlbigoY3VzdG9tZXIpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgdXBkYXRlOiBVc2VyVHlwZSA9IHtcbiAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgc3RyaXBlQ3VzdG9tZXJJZDogY3VzdG9tZXIuaWRcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKCh1cGRhdGVkVXNlcjogVXNlclR5cGUpID0+ICEhdXBkYXRlZFVzZXIpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRCYW5rQWNjb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBiYW5rQWNjb3VudDogUGF5bWVudEJhbmtBY2NvdW50KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQYXltZW50QWNjb3VudEJhbmsnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcblxuICAvLyBQYXJhbXNcbiAgY29uc3Qge1xuICAgIGFjY291bnROdW1iZXIsXG4gICAgZnVsbE5hbWUsXG4gICAgcm91dGluZ1xuICB9ID0gYmFua0FjY291bnQ7XG5cbiAgY29uc3QgZm9ybWF0QWNjb3VudCA9IHBhcnNlU3RyaW5nKGFjY291bnROdW1iZXIsIDMyKTtcblxuICBpZihmb3JtYXRBY2NvdW50ID09PSAnJykge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2FjY291bnRfbnVtYmVyJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRGdWxsTmFtZSA9IHBhcnNlVmFyQ2hhcihmdWxsTmFtZSwgMTI4KTtcblxuICBpZihmb3JtYXRGdWxsTmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9mdWxsX25hbWUnKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFJvdXRpbmcgPSBwYXJzZVN0cmluZyhyb3V0aW5nLCAzMik7XG5cbiAgaWYoZm9ybWF0Um91dGluZyA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9yb3V0aW5nX251bWJlcicpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgdG9rZW4gZmlyc3QsIHRoZW4gdXNlIHRoZSB0b2tlbiBhcyB0aGUgc291cmNlXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LnRva2Vucy5jcmVhdGUoe1xuICAgICAgICBiYW5rX2FjY291bnQ6IHtcbiAgICAgICAgICBhY2NvdW50X2hvbGRlcl9uYW1lOiBmb3JtYXRGdWxsTmFtZSxcbiAgICAgICAgICBhY2NvdW50X2hvbGRlcl90eXBlOiAnaW5kaXZpZHVhbCcsXG4gICAgICAgICAgYWNjb3VudF9udW1iZXI6IGZvcm1hdEFjY291bnQsXG4gICAgICAgICAgY291bnRyeTogJ1VTJyxcbiAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgICAgcm91dGluZ19udW1iZXI6IGZvcm1hdFJvdXRpbmdcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHRva2VuKSA9PiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLmNyZWF0ZVNvdXJjZShcbiAgICAgICAgICBzdHJpcGVBY2NvdW50SWQsXG4gICAgICAgICAge3NvdXJjZTogdG9rZW4uaWR9XG4gICAgICAgICkpXG4gICAgICAgIC50aGVuKChhY2NvdW50KSA9PiB7XG4gICAgICAgICAgLy8gVXNlIHR5cGUgYXNzZXJ0aW9uIGZvciBjYXJkIHByb3BlcnRpZXNcbiAgICAgICAgICAvLyBjb25zdCBjYXJkU291cmNlID0gYWNjb3VudCBhcyB1bmtub3duIGFzIENhcmQ7XG4gICAgICAgICAgLy8gY29uc3QgYnJhbmQgPSBjYXJkU291cmNlLmJyYW5kIHx8ICcnO1xuICAgICAgICAgIC8vIGNvbnN0IGN2Y0NoZWNrID0gY2FyZFNvdXJjZS5jdmNfY2hlY2sgfHwgJyc7XG4gICAgICAgICAgLy8gY29uc3QgbGFzdDQgPSBjYXJkU291cmNlLmxhc3Q0IHx8ICcnO1xuXG4gICAgICAgICAgLy8gQ3JlYXRlIHNlc3Npb25cbiAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICAgIGJhbmtBY2NvdW50LFxuICAgICAgICAgICAgYmFua0Z1bGxOYW1lOiBmb3JtYXRGdWxsTmFtZSxcbiAgICAgICAgICAgIGJhbmtJZDogYWNjb3VudC5pZCxcbiAgICAgICAgICAgIGJhbmtSb3V0aW5nOiBmb3JtYXRSb3V0aW5nLFxuICAgICAgICAgICAgbW9kaWZpZWQ6IG5vd1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXJUeXBlKSA9PiB1cGRhdGVkVXNlcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyb3IubWVzc2FnZTtcblxuICAgICAgICAgIGlmKG1zZyA9PT0gJ0EgYmFuayBhY2NvdW50IHdpdGggdGhhdCByb3V0aW5nIG51bWJlciBhbmQgYWNjb3VudCBudW1iZXIgJyArXG4gICAgICAgICAgICAnYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgY3VzdG9tZXIuJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdiYW5rX2FjY291bnRfZXhpc3RzJ1xuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkOiBQYXltZW50Q2FyZFR5cGUpOiBQcm9taXNlPFBheW1lbnRDYXJkVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBleHBNb250aCxcbiAgICBleHBZZWFyLFxuICAgIGZ1bGxOYW1lLFxuICAgIGlkLFxuICAgIHN0cmVldDEsXG4gICAgc3RhdGUsXG4gICAgemlwXG4gIH06IFBheW1lbnRDYXJkVHlwZSA9IGNhcmQ7XG5cbiAgY29uc3QgZm9ybWF0SWQgPSBwYXJzZUlkKGlkKTtcblxuICBpZihmb3JtYXRJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX2lkJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRFeHBNb250aCA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcbiAgY29uc3QgZm9ybWF0RXhwWWVhciA9IHBhcnNlTnVtKGV4cFllYXIsIDIpO1xuICBjb25zdCBmb3JtYXRDaXR5ID0gcGFyc2VWYXJDaGFyKGNpdHksIDMyKTtcbiAgY29uc3QgZm9ybWF0Q291bnRyeSA9IHBhcnNlQ2hhcihjb3VudHJ5LCAyKTtcbiAgY29uc3QgZm9ybWF0RnVsbE5hbWUgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RyZWV0MSA9IHBhcnNlU3RyaW5nKHN0cmVldDEsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RhdGUgPSBwYXJzZUNoYXIoc3RhdGUsIDIpO1xuICBjb25zdCBmb3JtYXRaaXAgPSBwYXJzZVZhckNoYXIoemlwLCAxMCk7XG5cbiAgY29uc3QgcGF5bWVudENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHtcbiAgICAuLi4oZm9ybWF0Q2l0eSA/IHtjaXR5OiBmb3JtYXRDaXR5fSA6IHt9KSxcbiAgICAuLi4oZm9ybWF0Q291bnRyeSA/IHtjb3VudHJ5OiBmb3JtYXRDb3VudHJ5fSA6IHt9KSxcbiAgICAuLi4oZm9ybWF0RXhwTW9udGggPyB7ZXhwTW9udGg6IGZvcm1hdEV4cE1vbnRofSA6IHt9KSxcbiAgICAuLi4oZm9ybWF0RXhwWWVhciA/IHtleHBZZWFyOiBmb3JtYXRFeHBZZWFyfSA6IHt9KSxcbiAgICAuLi4oZm9ybWF0RnVsbE5hbWUgPyB7ZnVsbE5hbWU6IGZvcm1hdEZ1bGxOYW1lfSA6IHt9KSxcbiAgICAuLi4oZm9ybWF0U3RhdGUgPyB7c3RhdGU6IGZvcm1hdFN0YXRlfSA6IHt9KSxcbiAgICAuLi4oZm9ybWF0U3RyZWV0MSA/IHtzdHJlZXQxOiBmb3JtYXRTdHJlZXQxfSA6IHt9KSxcbiAgICAuLi4oZm9ybWF0WmlwID8ge3ppcDogZm9ybWF0WmlwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZSA9IHBheW1lbnRDYXJkO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgTEVUIHVwZGF0ZWRDYXJkID0gRklSU1QoXG4gICAgICAgIEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgICAgIEZJTFRFUiBjLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIFVQREFURSBjIFdJVEggJHt1cGRhdGV9IElOIGNyZWRpdENhcmRzXG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIE5FV1xuICAgICAgKVxuICAgICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gdVxuICAgICAgKVxuICAgICAgUkVUVVJOIHt1c2VyOiB1c2VyLCBjYXJkOiB1cGRhdGVkQ2FyZH1gO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChyZXN1bHRzID0ge2NhcmQ6IHt9LCB1c2VyOiB7fX0pID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSByZXN1bHRzLmNhcmQ7XG4gICAgICBjb25zdCB7dXNlcn0gPSByZXN1bHRzO1xuXG4gICAgICBpZighdXBkYXRlZENhcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcignbm90X2ZvdW5kJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtzdHJpcGVDdXN0b21lcklkfSA9IHVzZXI7XG4gICAgICBjb25zdCB7c3RyaXBlSWR9ID0gY2FyZDtcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuICAgICAgY29uc3QgdXBkYXRlOiBzdHJpcGUuQ3VzdG9tZXJVcGRhdGVTb3VyY2VQYXJhbXMgPSB7XG4gICAgICAgIGFkZHJlc3NfY2l0eTogZm9ybWF0Q2l0eSxcbiAgICAgICAgYWRkcmVzc19jb3VudHJ5OiBmb3JtYXRDb3VudHJ5LFxuICAgICAgICBhZGRyZXNzX2xpbmUxOiBmb3JtYXRTdHJlZXQxLFxuICAgICAgICBhZGRyZXNzX3N0YXRlOiBmb3JtYXRTdGF0ZSxcbiAgICAgICAgYWRkcmVzc196aXA6IGZvcm1hdFppcCxcbiAgICAgICAgZXhwX21vbnRoOiBmb3JtYXRFeHBNb250aC50b1N0cmluZygpLFxuICAgICAgICBleHBfeWVhcjogZm9ybWF0RXhwWWVhci50b1N0cmluZygpLFxuICAgICAgICBuYW1lOiBmb3JtYXRGdWxsTmFtZVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLnVwZGF0ZVNvdXJjZShzdHJpcGVDdXN0b21lcklkLCBzdHJpcGVJZCwgdXBkYXRlKVxuICAgICAgICAudGhlbigoKSA9PiBjYXJkKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6dXBkYXRlQ2FyZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDcmVkaXRDYXJkcyA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50Q2FyZFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q3JlZGl0Q2FyZHMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICBGSUxURVIgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3Q6IFBheW1lbnRDYXJkVHlwZVtdID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENhcmRJZCA9IHBhcnNlSWQoY2FyZElkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgY2FyZCA9IEZJUlNUKFxuICAgICAgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgIEZJTFRFUiBjLl9rZXkgPT0gJHtmb3JtYXRDYXJkSWR9ICYmIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVNT1ZFIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgIFJFVFVSTiBPTERcbiAgICApXG4gICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICBGSUxURVIgdS5fa2V5ID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIHt1c2VyOiB1c2VyLCBjYXJkOiBjYXJkfWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdCA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge2NhcmQsIHVzZXJ9ID0gcmVzdWx0O1xuICAgICAgY29uc3Qge19rZXk6IGNhcmRLZXl9ID0gY2FyZDtcblxuICAgICAgLy8gUmVtb3ZlIGxpbmtlZCBlZGdlc1xuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc1BheW1lbnQnKTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLm91dEVkZ2VzKGNhcmRLZXksIHt9KVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAvLyBFeHRyYWN0IGVkZ2VzIGZyb20gdGhlIHJlc3BvbnNlXG4gICAgICAgICAgY29uc3QgZWRnZXMgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSA/IHJlc3BvbnNlIDogW107XG5cbiAgICAgICAgICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBlZGdlcy5tYXAoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7X2tleTogZWRnZUtleX0gPSBlZGdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUFxbFFyeTogQXFsUXVlcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGhhc1BheW1lbnRgO1xuICAgICAgICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHJlbW92ZUFxbFFyeSk7XG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXBlXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAgICAgICAgICAgLmRlbGV0ZVNvdXJjZSh1c2VyLnN0cmlwZUN1c3RvbWVySWQsIGNhcmQuc3RyaXBlSWQpXG4gICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjpkZWxldGVDYXJkOjplcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUJhbmtBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGJhbmtJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICAvLyBDbGVhbiBkYlxuICBjb25zdCB1cGRhdGU6IFVzZXJUeXBlID0ge1xuICAgIGJhbmtBY2NvdW50OiAnJyxcbiAgICBiYW5rRnVsbE5hbWU6ICcnLFxuICAgIGJhbmtJZDogJycsXG4gICAgYmFua1JvdXRpbmc6ICcnLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC5kZWxldGVTb3VyY2Uoc3RyaXBlQWNjb3VudElkLCBiYW5rSWQpXG4gICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgIC5jYXRjaCgoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50VHJhbnNmZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdHJhbnNmZXI6IFBheW1lbnRUcmFuc2Zlcik6IFByb21pc2U8UGF5bWVudFRyYW5zZmVyPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2Ftb3VudCwgY3VycmVuY3l9ID0gdHJhbnNmZXI7XG4gIGNvbnN0IGZvcm1hdEFtb3VudCA9IHBhcnNlTnVtKGFtb3VudCk7XG4gIGNvbnN0IGZvcm1hdEN1cnJlbmN5ID0gcGFyc2VDaGFyKGN1cnJlbmN5LCAzLCAnVVNEJykudG9VcHBlckNhc2UoKTtcblxuICByZXR1cm4gZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LnRyYW5zZmVyc1xuICAgICAgICAuY3JlYXRlKHtcbiAgICAgICAgICBhbW91bnQ6IGZvcm1hdEFtb3VudCxcbiAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgICAgZGVzdGluYXRpb246IHN0cmlwZUFjY291bnRJZFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoc3RyaXBlVHJhbnNmZXIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhzdHJpcGVUcmFuc2Zlcik7XG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRUcmFuc2ZlciA9IHtcbiAgICAgICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgICAgICBhbW91bnQ6IGZvcm1hdEFtb3VudCxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHRyYW5zZmVycyBSRVRVUk4gTkVXYDtcblxuICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigobmV3VHJhbnNmZXI6IFBheW1lbnRUcmFuc2ZlcikgPT4gbmV3VHJhbnNmZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50SG9sZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwYXltZW50OiBQYXltZW50Q2hhcmdlKTogUHJvbWlzZTxQYXltZW50Q2hhcmdlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2Ftb3VudCwgY2FwdHVyZSwgY2FyZElkLCBjdXJyZW5jeSwgZGVzY3JpcHRpb259ID0gcGF5bWVudDtcbiAgY29uc3QgZm9ybWF0Q3VycmVuY3kgPSBwYXJzZUNoYXIoY3VycmVuY3ksIDMsICdVU0QnKS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmNoYXJnZXNcbiAgICAuY3JlYXRlKHtcbiAgICAgIGFtb3VudCxcbiAgICAgIGNhcHR1cmUsXG4gICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHNvdXJjZTogY2FyZElkXG4gICAgfSlcbiAgICAudGhlbigoc3RyaXBlQ2hhcmdlKSA9PiB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgaW5zZXJ0OiBQYXltZW50Q2hhcmdlID0ge1xuICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIGNhcHR1cmUsXG4gICAgICAgIGNhcmRJZCxcbiAgICAgICAgY2hhcmdlRmFpbENvZGU6IHN0cmlwZUNoYXJnZS5mYWlsdXJlX2NvZGUsXG4gICAgICAgIGNoYXJnZUZhaWxNc2c6IHN0cmlwZUNoYXJnZS5mYWlsdXJlX21lc3NhZ2UsXG4gICAgICAgIGNoYXJnZUlkOiBzdHJpcGVDaGFyZ2UuaWQsXG4gICAgICAgIGNoYXJnZVN0YXR1czogc3RyaXBlQ2hhcmdlLnN0YXR1cyxcbiAgICAgICAgY3VycmVuY3k6IGZvcm1hdEN1cnJlbmN5LFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH07XG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gcGF5bWVudHMgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG5ld1BheW1lbnQ6IFBheW1lbnRDaGFyZ2UpID0+IG5ld1BheW1lbnQpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6Y3JlYXRlSG9sZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBlbnN1cmVTdHJpcGVDdXN0b21lcklkID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzZXNzaW9uSWQgPSBTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKTtcbiAgbGV0IHVzZXIgPSBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KTtcblxuICBpZighdXNlcj8uc3RyaXBlQ3VzdG9tZXJJZCkge1xuICAgIGF3YWl0IGFkZEN1c3RvbWVyQWNjb3VudChjb250ZXh0KTtcbiAgICB1c2VyID0gYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSk7XG4gIH1cblxuICByZXR1cm4gU3RyaW5nKHVzZXI/LnN0cmlwZUN1c3RvbWVySWQgfHwgJycpO1xufTtcblxuY29uc3QgZ2V0Q29uZmlndXJlZEJpbGxpbmdPcmlnaW5zID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBTZXQ8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGNvbmZpZ3VyZWRPcmlnaW5zID0gU3RyaW5nKHByb2Nlc3MuZW52LlNUUklQRV9SRVRVUk5fVVJMX09SSUdJTlMgfHwgJycpXG4gICAgLnNwbGl0KCcsJylcbiAgICAubWFwKChvcmlnaW4pID0+IG9yaWdpbi50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgYXBwVXJsID0gU3RyaW5nKGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy51cmwgfHwgJycpLnRyaW0oKTtcblxuICBpZihhcHBVcmwpIHtcbiAgICBjb25maWd1cmVkT3JpZ2lucy5wdXNoKGFwcFVybC5pbmNsdWRlcygnOi8vJykgPyBhcHBVcmwgOiBgaHR0cHM6Ly8ke2FwcFVybH1gKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2V0KGNvbmZpZ3VyZWRPcmlnaW5zLm1hcCgob3JpZ2luKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgVVJMKG9yaWdpbikub3JpZ2luO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSkuZmlsdGVyKEJvb2xlYW4pKTtcbn07XG5cbmNvbnN0IHBhcnNlQmlsbGluZ1JldHVyblVybCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZXR1cm5Vcmw6IHN0cmluZyk6IFVSTCA9PiB7XG4gIGxldCBwYXJzZWRVcmw6IFVSTDtcblxuICB0cnkge1xuICAgIHBhcnNlZFVybCA9IG5ldyBVUkwoU3RyaW5nKHJldHVyblVybCB8fCAnJykudHJpbSgpKTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9iaWxsaW5nX3JldHVybl91cmwnKTtcbiAgfVxuXG4gIGNvbnN0IGlzTG9jYWxEZXZlbG9wbWVudFVybCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHA6J1xuICAgICYmIFsnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCddLmluY2x1ZGVzKHBhcnNlZFVybC5ob3N0bmFtZSk7XG4gIGNvbnN0IGlzU2VjdXJlVXJsID0gcGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgY29uc3QgYWxsb3dlZE9yaWdpbnMgPSBnZXRDb25maWd1cmVkQmlsbGluZ09yaWdpbnMoY29udGV4dCk7XG5cbiAgaWYoKCFpc1NlY3VyZVVybCAmJiAhaXNMb2NhbERldmVsb3BtZW50VXJsKSB8fCAoIWlzTG9jYWxEZXZlbG9wbWVudFVybCAmJiAhYWxsb3dlZE9yaWdpbnMuaGFzKHBhcnNlZFVybC5vcmlnaW4pKSkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfYmlsbGluZ19yZXR1cm5fdXJsJyk7XG4gIH1cblxuICBwYXJzZWRVcmwuaGFzaCA9ICcnO1xuICByZXR1cm4gcGFyc2VkVXJsO1xufTtcblxuY29uc3QgZ2V0Q2hlY2tvdXRSZXR1cm5VcmwgPSAocmV0dXJuVXJsOiBVUkwsIHN0YXR1czogJ2NhbmNlbGVkJyB8ICdzdWNjZXNzJyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG5leHRVcmwgPSBuZXcgVVJMKHJldHVyblVybC50b1N0cmluZygpKTtcblxuICBuZXh0VXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2JpbGxpbmcnLCBzdGF0dXMpO1xuICBpZihzdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgIG5leHRVcmwuc2VhcmNoUGFyYW1zLnNldCgnc2Vzc2lvbl9pZCcsICd7Q0hFQ0tPVVRfU0VTU0lPTl9JRH0nKTtcbiAgfVxuXG4gIHJldHVybiBuZXh0VXJsLnRvU3RyaW5nKCkucmVwbGFjZSgnJTdCQ0hFQ0tPVVRfU0VTU0lPTl9JRCU3RCcsICd7Q0hFQ0tPVVRfU0VTU0lPTl9JRH0nKTtcbn07XG5cbmNvbnN0IHVwZGF0ZVVzZXJCaWxsaW5nUGF5bWVudE1ldGhvZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXBkYXRlOiBQYXJ0aWFsPFVzZXJUeXBlPlxuKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBzZXNzaW9uSWQgPSBTdHJpbmcoY29udGV4dC5zZXNzaW9uPy51c2VySWQgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgdXNlclVwZGF0ZTogUGFydGlhbDxVc2VyVHlwZT4gPSB7bW9kaWZpZWQ6IERhdGUubm93KCksIC4uLnVwZGF0ZX07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXNlclVwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4gdXNlcik7XG59O1xuXG5jb25zdCBlbnN1cmVQbHVzU3RyaXBlUGxhbiA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHN0cmlwZUNsaWVudC5wbGFucy5yZXRyaWV2ZShQTFVTX1BMQU5fSUQpO1xuICAgIHJldHVybiBQTFVTX1BMQU5fSUQ7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBhd2FpdCBzdHJpcGVDbGllbnQucGxhbnMuY3JlYXRlKHtcbiAgICAgIGFtb3VudDogUExVU19QTEFOX0FNT1VOVCxcbiAgICAgIGN1cnJlbmN5OiAndXNkJyxcbiAgICAgIGlkOiBQTFVTX1BMQU5fSUQsXG4gICAgICBpbnRlcnZhbDogJ21vbnRoJyxcbiAgICAgIGludGVydmFsX2NvdW50OiAxLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgcGxhbklkOiAncGx1cycsXG4gICAgICAgIHR5cGU6ICdhY2NvdW50J1xuICAgICAgfSxcbiAgICAgIHByb2R1Y3Q6IHtcbiAgICAgICAgbmFtZTogJ1BoYW50YXplIFBsdXMnXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUExVU19QTEFOX0lEO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBncmFkZVVzZXJUb1BsdXMgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZ3JhZGVVc2VyVG9QbHVzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfc2Vzc2lvbicpO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFVzZXIgPSBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KTtcblxuICBpZihoYXNBY2Nlc3NMZXZlbChjdXJyZW50VXNlciwgUExVU19QTEFOX0FDQ0VTUykgJiYgY3VycmVudFVzZXI/LnBsYW5TdWJzY3JpcHRpb25JZCkge1xuICAgIHJldHVybiBjdXJyZW50VXNlcjtcbiAgfVxuXG4gIGlmKCFjdXJyZW50VXNlcj8uc3RyaXBlQ2FyZElkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfYmlsbGluZ19jYXJkJyk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHN0cmlwZUN1c3RvbWVySWQgPSBhd2FpdCBlbnN1cmVTdHJpcGVDdXN0b21lcklkKGNvbnRleHQpO1xuXG4gICAgaWYoIXN0cmlwZUN1c3RvbWVySWQpIHtcbiAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHJpcGVQbGFuSWQgPSBhd2FpdCBlbnN1cmVQbHVzU3RyaXBlUGxhbigpO1xuICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuICAgIGNvbnN0IHN0cmlwZVN1YnNjcmlwdGlvbiA9IGF3YWl0IHN0cmlwZUNsaWVudC5zdWJzY3JpcHRpb25zLmNyZWF0ZSh7XG4gICAgICBjdXN0b21lcjogc3RyaXBlQ3VzdG9tZXJJZCxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwbGFuOiBzdHJpcGVQbGFuSWRcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHBsYW5JZDogJ3BsdXMnLFxuICAgICAgICB0eXBlOiAnYWNjb3VudCcsXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyaXBlUGVyaW9kRW5kID0gTnVtYmVyKChzdHJpcGVTdWJzY3JpcHRpb24gYXMgYW55KT8uY3VycmVudF9wZXJpb2RfZW5kIHx8IDApO1xuICAgIGNvbnN0IHVwZGF0ZTogUGFydGlhbDxVc2VyVHlwZT4gPSB7XG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgIHBsYW5FeHBpcmVzOiBzdHJpcGVQZXJpb2RFbmQgPyBzdHJpcGVQZXJpb2RFbmQgKiAxMDAwIDogMCxcbiAgICAgIHBsYW5JZDogJ3BsdXMnLFxuICAgICAgcGxhblN0YXR1czogU3RyaW5nKHN0cmlwZVN1YnNjcmlwdGlvbi5zdGF0dXMgfHwgJ2FjdGl2ZScpLFxuICAgICAgcGxhblN1YnNjcmlwdGlvbklkOiBzdHJpcGVTdWJzY3JpcHRpb24uaWQsXG4gICAgICB1c2VyQWNjZXNzOiBQTFVTX1BMQU5fQUNDRVNTXG4gICAgfTtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHVzZXIpO1xuICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQmlsbGluZ1NldHVwU2Vzc2lvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge3JldHVyblVybH06IEJpbGxpbmdTZXR1cFNlc3Npb25PcHRpb25zXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzZXNzaW9uSWQgPSBTdHJpbmcoY29udGV4dC5zZXNzaW9uPy51c2VySWQgfHwgJycpLnRyaW0oKTtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9zZXNzaW9uJyk7XG4gIH1cblxuICBjb25zdCBzdHJpcGVDdXN0b21lcklkID0gYXdhaXQgZW5zdXJlU3RyaXBlQ3VzdG9tZXJJZChjb250ZXh0KTtcblxuICBpZighc3RyaXBlQ3VzdG9tZXJJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFJldHVyblVybCA9IHBhcnNlQmlsbGluZ1JldHVyblVybChjb250ZXh0LCByZXR1cm5VcmwpO1xuICBjb25zdCBjaGVja291dFNlc3Npb24gPSBhd2FpdCBnZXRTdHJpcGVDbGllbnQoKS5jaGVja291dC5zZXNzaW9ucy5jcmVhdGUoe1xuICAgIGNhbmNlbF91cmw6IGdldENoZWNrb3V0UmV0dXJuVXJsKHBhcnNlZFJldHVyblVybCwgJ2NhbmNlbGVkJyksXG4gICAgY3VzdG9tZXI6IHN0cmlwZUN1c3RvbWVySWQsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIHR5cGU6ICdiaWxsaW5nLXBheW1lbnQtbWV0aG9kJyxcbiAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgfSxcbiAgICBtb2RlOiAnc2V0dXAnLFxuICAgIHBheW1lbnRfbWV0aG9kX3R5cGVzOiBbJ2NhcmQnXSxcbiAgICBzZXR1cF9pbnRlbnRfZGF0YToge1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdHlwZTogJ2JpbGxpbmctcGF5bWVudC1tZXRob2QnLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfVxuICAgIH0sXG4gICAgc3VjY2Vzc191cmw6IGdldENoZWNrb3V0UmV0dXJuVXJsKHBhcnNlZFJldHVyblVybCwgJ3N1Y2Nlc3MnKVxuICB9KTtcbiAgY29uc3QgY2hlY2tvdXRVcmwgPSBTdHJpbmcoY2hlY2tvdXRTZXNzaW9uLnVybCB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFjaGVja291dFVybCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgfVxuXG4gIHJldHVybiBjaGVja291dFVybDtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZUJpbGxpbmdTZXR1cFNlc3Npb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNoZWNrb3V0U2Vzc2lvbklkOiBzdHJpbmdcbik6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvbklkID0gU3RyaW5nKGNvbnRleHQuc2Vzc2lvbj8udXNlcklkIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDaGVja291dFNlc3Npb25JZCA9IFN0cmluZyhjaGVja291dFNlc3Npb25JZCB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgfVxuXG4gIGlmKCFub3JtYWxpemVkQ2hlY2tvdXRTZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX2JpbGxpbmdfc2V0dXBfc2Vzc2lvbicpO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFVzZXIgPSBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KTtcbiAgY29uc3Qgc3RyaXBlQ3VzdG9tZXJJZCA9IFN0cmluZyhjdXJyZW50VXNlcj8uc3RyaXBlQ3VzdG9tZXJJZCB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFzdHJpcGVDdXN0b21lcklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICB9XG5cbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG4gIGNvbnN0IGNoZWNrb3V0U2Vzc2lvbiA9IGF3YWl0IHN0cmlwZUNsaWVudC5jaGVja291dC5zZXNzaW9ucy5yZXRyaWV2ZShcbiAgICBub3JtYWxpemVkQ2hlY2tvdXRTZXNzaW9uSWQsXG4gICAge2V4cGFuZDogWydzZXR1cF9pbnRlbnQucGF5bWVudF9tZXRob2QnXX1cbiAgKTtcbiAgY29uc3QgY2hlY2tvdXRDdXN0b21lcklkID0gdHlwZW9mIGNoZWNrb3V0U2Vzc2lvbi5jdXN0b21lciA9PT0gJ3N0cmluZydcbiAgICA/IGNoZWNrb3V0U2Vzc2lvbi5jdXN0b21lclxuICAgIDogY2hlY2tvdXRTZXNzaW9uLmN1c3RvbWVyPy5pZDtcblxuICBpZihcbiAgICBjaGVja291dFNlc3Npb24ubW9kZSAhPT0gJ3NldHVwJ1xuICAgIHx8IGNoZWNrb3V0U2Vzc2lvbi5zdGF0dXMgIT09ICdjb21wbGV0ZSdcbiAgICB8fCBjaGVja291dEN1c3RvbWVySWQgIT09IHN0cmlwZUN1c3RvbWVySWRcbiAgICB8fCBjaGVja291dFNlc3Npb24ubWV0YWRhdGE/LnVzZXJJZCAhPT0gc2Vzc2lvbklkXG4gICkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfYmlsbGluZ19zZXR1cF9zZXNzaW9uJyk7XG4gIH1cblxuICBjb25zdCBzZXR1cEludGVudCA9IHR5cGVvZiBjaGVja291dFNlc3Npb24uc2V0dXBfaW50ZW50ID09PSAnc3RyaW5nJ1xuICAgID8gYXdhaXQgc3RyaXBlQ2xpZW50LnNldHVwSW50ZW50cy5yZXRyaWV2ZShjaGVja291dFNlc3Npb24uc2V0dXBfaW50ZW50LCB7ZXhwYW5kOiBbJ3BheW1lbnRfbWV0aG9kJ119KVxuICAgIDogY2hlY2tvdXRTZXNzaW9uLnNldHVwX2ludGVudDtcblxuICBpZighc2V0dXBJbnRlbnQgfHwgc2V0dXBJbnRlbnQuc3RhdHVzICE9PSAnc3VjY2VlZGVkJykge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2JpbGxpbmdfc2V0dXBfaW5jb21wbGV0ZScpO1xuICB9XG5cbiAgY29uc3QgcGF5bWVudE1ldGhvZCA9IHR5cGVvZiBzZXR1cEludGVudC5wYXltZW50X21ldGhvZCA9PT0gJ3N0cmluZydcbiAgICA/IGF3YWl0IHN0cmlwZUNsaWVudC5wYXltZW50TWV0aG9kcy5yZXRyaWV2ZShzZXR1cEludGVudC5wYXltZW50X21ldGhvZClcbiAgICA6IHNldHVwSW50ZW50LnBheW1lbnRfbWV0aG9kO1xuICBjb25zdCBwYXltZW50TWV0aG9kQ3VzdG9tZXJJZCA9IHR5cGVvZiBwYXltZW50TWV0aG9kPy5jdXN0b21lciA9PT0gJ3N0cmluZydcbiAgICA/IHBheW1lbnRNZXRob2QuY3VzdG9tZXJcbiAgICA6IHBheW1lbnRNZXRob2Q/LmN1c3RvbWVyPy5pZDtcblxuICBpZighcGF5bWVudE1ldGhvZCB8fCBwYXltZW50TWV0aG9kLnR5cGUgIT09ICdjYXJkJyB8fCAhcGF5bWVudE1ldGhvZC5jYXJkIHx8IHBheW1lbnRNZXRob2RDdXN0b21lcklkICE9PSBzdHJpcGVDdXN0b21lcklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9iaWxsaW5nX3BheW1lbnRfbWV0aG9kJyk7XG4gIH1cblxuICBhd2FpdCBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLnVwZGF0ZShzdHJpcGVDdXN0b21lcklkLCB7XG4gICAgaW52b2ljZV9zZXR0aW5nczoge2RlZmF1bHRfcGF5bWVudF9tZXRob2Q6IHBheW1lbnRNZXRob2QuaWR9XG4gIH0pO1xuXG4gIGNvbnN0IGN1cnJlbnRTdHJpcGVDYXJkSWQgPSBTdHJpbmcoY3VycmVudFVzZXI/LnN0cmlwZUNhcmRJZCB8fCAnJykudHJpbSgpO1xuXG4gIGlmKGN1cnJlbnRTdHJpcGVDYXJkSWQuc3RhcnRzV2l0aCgncG1fJykgJiYgY3VycmVudFN0cmlwZUNhcmRJZCAhPT0gcGF5bWVudE1ldGhvZC5pZCkge1xuICAgIGF3YWl0IHN0cmlwZUNsaWVudC5wYXltZW50TWV0aG9kcy5kZXRhY2goY3VycmVudFN0cmlwZUNhcmRJZCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlVXNlckJpbGxpbmdQYXltZW50TWV0aG9kKGNvbnRleHQsIHtcbiAgICBzdHJpcGVDYXJkQnJhbmQ6IFN0cmluZyhwYXltZW50TWV0aG9kLmNhcmQuYnJhbmQgfHwgJycpLnRyaW0oKSxcbiAgICBzdHJpcGVDYXJkSWQ6IHBheW1lbnRNZXRob2QuaWQsXG4gICAgc3RyaXBlQ2FyZExhc3Q0OiBTdHJpbmcocGF5bWVudE1ldGhvZC5jYXJkLmxhc3Q0IHx8ICcnKS50cmltKClcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVXNlckJpbGxpbmdDYXJkID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVVc2VyQmlsbGluZ0NhcmQnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSk7XG4gIGNvbnN0IHN0cmlwZUN1c3RvbWVySWQgPSBTdHJpbmcoY3VycmVudFVzZXI/LnN0cmlwZUN1c3RvbWVySWQgfHwgJycpO1xuICBjb25zdCBzdHJpcGVDYXJkSWQgPSBTdHJpbmcoY3VycmVudFVzZXI/LnN0cmlwZUNhcmRJZCB8fCAnJyk7XG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHRyeSB7XG4gICAgaWYoc3RyaXBlQ3VzdG9tZXJJZCAmJiBzdHJpcGVDYXJkSWQpIHtcbiAgICAgIGlmKHN0cmlwZUNhcmRJZC5zdGFydHNXaXRoKCdwbV8nKSkge1xuICAgICAgICBjb25zdCBjdXN0b21lciA9IGF3YWl0IHN0cmlwZUNsaWVudC5jdXN0b21lcnMucmV0cmlldmUoc3RyaXBlQ3VzdG9tZXJJZCk7XG5cbiAgICAgICAgaWYoISgnZGVsZXRlZCcgaW4gY3VzdG9tZXIpICYmIGN1c3RvbWVyLmludm9pY2Vfc2V0dGluZ3MuZGVmYXVsdF9wYXltZW50X21ldGhvZCA9PT0gc3RyaXBlQ2FyZElkKSB7XG4gICAgICAgICAgYXdhaXQgc3RyaXBlQ2xpZW50LmN1c3RvbWVycy51cGRhdGUoc3RyaXBlQ3VzdG9tZXJJZCwge1xuICAgICAgICAgICAgaW52b2ljZV9zZXR0aW5nczoge2RlZmF1bHRfcGF5bWVudF9tZXRob2Q6IG51bGx9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBzdHJpcGVDbGllbnQucGF5bWVudE1ldGhvZHMuZGV0YWNoKHN0cmlwZUNhcmRJZCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLmRlbGV0ZVNvdXJjZShzdHJpcGVDdXN0b21lcklkLCBzdHJpcGVDYXJkSWQpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVVc2VyQmlsbGluZ1BheW1lbnRNZXRob2QoY29udGV4dCwge1xuICAgICAgc3RyaXBlQ2FyZEJyYW5kOiAnJyxcbiAgICAgIHN0cmlwZUNhcmRJZDogJycsXG4gICAgICBzdHJpcGVDYXJkTGFzdDQ6ICcnXG4gICAgfSk7XG4gIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgIGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdwYXltZW50X2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJwYXJzZVZhckNoYXIiLCJhcWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJVc2VyRXJyb3IiLCJ1c2VEYiIsImhhc0FjY2Vzc0xldmVsIiwiZ2V0U3RyaXBlQ2xpZW50IiwiZ2V0VXNlckJ5SWQiLCJldmVudENhdGVnb3J5IiwiUExVU19QTEFOX0lEIiwiUExVU19QTEFOX0FNT1VOVCIsIlBMVVNfUExBTl9BQ0NFU1MiLCJhZGRDdXN0b21lckFjY291bnQiLCJjb250ZXh0IiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwic2Vzc2lvbiIsInVzZXJJZCIsInNlc3Npb25JZCIsInVzZXJuYW1lIiwic3RyaXBlQ2xpZW50IiwiY3VzdG9tZXJzIiwiY3JlYXRlIiwibWV0YWRhdGEiLCJ0aGVuIiwiY3VzdG9tZXIiLCJub3ciLCJEYXRlIiwidXBkYXRlIiwibW9kaWZpZWQiLCJzdHJpcGVDdXN0b21lcklkIiwiaWQiLCJhcWxRcnkiLCJxdWVyeSIsImN1cnNvciIsIm5leHQiLCJ1cGRhdGVkVXNlciIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJhZGRCYW5rQWNjb3VudCIsImJhbmtBY2NvdW50IiwiYWNjb3VudE51bWJlciIsImZ1bGxOYW1lIiwicm91dGluZyIsImZvcm1hdEFjY291bnQiLCJmb3JtYXRGdWxsTmFtZSIsImZvcm1hdFJvdXRpbmciLCJ1c2VyIiwic3RyaXBlQWNjb3VudElkIiwidG9rZW5zIiwiYmFua19hY2NvdW50IiwiYWNjb3VudF9ob2xkZXJfbmFtZSIsImFjY291bnRfaG9sZGVyX3R5cGUiLCJhY2NvdW50X251bWJlciIsImNvdW50cnkiLCJjdXJyZW5jeSIsInJvdXRpbmdfbnVtYmVyIiwidG9rZW4iLCJjcmVhdGVTb3VyY2UiLCJzb3VyY2UiLCJhY2NvdW50IiwiYmFua0Z1bGxOYW1lIiwiYmFua0lkIiwiYmFua1JvdXRpbmciLCJtc2ciLCJtZXNzYWdlIiwidXBkYXRlQ3JlZGl0Q2FyZCIsImNhcmQiLCJjaXR5IiwiZXhwTW9udGgiLCJleHBZZWFyIiwic3RyZWV0MSIsInN0YXRlIiwiemlwIiwiZm9ybWF0SWQiLCJmb3JtYXRFeHBNb250aCIsImZvcm1hdEV4cFllYXIiLCJmb3JtYXRDaXR5IiwiZm9ybWF0Q291bnRyeSIsImZvcm1hdFN0cmVldDEiLCJmb3JtYXRTdGF0ZSIsImZvcm1hdFppcCIsInBheW1lbnRDYXJkIiwicmVzdWx0cyIsInVwZGF0ZWRDYXJkIiwic3RyaXBlSWQiLCJhZGRyZXNzX2NpdHkiLCJhZGRyZXNzX2NvdW50cnkiLCJhZGRyZXNzX2xpbmUxIiwiYWRkcmVzc19zdGF0ZSIsImFkZHJlc3NfemlwIiwiZXhwX21vbnRoIiwidG9TdHJpbmciLCJleHBfeWVhciIsIm5hbWUiLCJ1cGRhdGVTb3VyY2UiLCJjb25zb2xlIiwibG9nIiwiZ2V0Q3JlZGl0Q2FyZHMiLCJhbGwiLCJsaXN0IiwiZGVsZXRlQ3JlZGl0Q2FyZCIsImNhcmRJZCIsImZvcm1hdENhcmRJZCIsInJlc3VsdCIsIl9rZXkiLCJjYXJkS2V5IiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwib3V0RWRnZXMiLCJyZXNwb25zZSIsImVkZ2VzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiUHJvbWlzZSIsIm1hcCIsImVkZ2UiLCJlZGdlS2V5IiwicmVtb3ZlQXFsUXJ5IiwiZGVsZXRlU291cmNlIiwiZGVsZXRlQmFua0FjY291bnQiLCJyZXNvbHZlIiwiY3JlYXRlUGF5bWVudFRyYW5zZmVyIiwidHJhbnNmZXIiLCJhbW91bnQiLCJmb3JtYXRBbW91bnQiLCJmb3JtYXRDdXJyZW5jeSIsInRvVXBwZXJDYXNlIiwidHJhbnNmZXJzIiwiZGVzdGluYXRpb24iLCJzdHJpcGVUcmFuc2ZlciIsImluc2VydCIsImFkZGVkIiwibmV3VHJhbnNmZXIiLCJjcmVhdGVQYXltZW50SG9sZCIsInBheW1lbnQiLCJjYXB0dXJlIiwiZGVzY3JpcHRpb24iLCJjaGFyZ2VzIiwic3RyaXBlQ2hhcmdlIiwiY2hhcmdlRmFpbENvZGUiLCJmYWlsdXJlX2NvZGUiLCJjaGFyZ2VGYWlsTXNnIiwiZmFpbHVyZV9tZXNzYWdlIiwiY2hhcmdlSWQiLCJjaGFyZ2VTdGF0dXMiLCJzdGF0dXMiLCJuZXdQYXltZW50IiwiZW5zdXJlU3RyaXBlQ3VzdG9tZXJJZCIsIlN0cmluZyIsImdldENvbmZpZ3VyZWRCaWxsaW5nT3JpZ2lucyIsImNvbmZpZ3VyZWRPcmlnaW5zIiwicHJvY2VzcyIsImVudiIsIlNUUklQRV9SRVRVUk5fVVJMX09SSUdJTlMiLCJzcGxpdCIsIm9yaWdpbiIsInRyaW0iLCJmaWx0ZXIiLCJCb29sZWFuIiwiYXBwVXJsIiwiY29uZmlnIiwiZGV0YWlscyIsInVybCIsInB1c2giLCJpbmNsdWRlcyIsIlNldCIsIlVSTCIsInBhcnNlQmlsbGluZ1JldHVyblVybCIsInJldHVyblVybCIsInBhcnNlZFVybCIsImlzTG9jYWxEZXZlbG9wbWVudFVybCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJpc1NlY3VyZVVybCIsImFsbG93ZWRPcmlnaW5zIiwiaGFzIiwiaGFzaCIsImdldENoZWNrb3V0UmV0dXJuVXJsIiwibmV4dFVybCIsInNlYXJjaFBhcmFtcyIsInNldCIsInJlcGxhY2UiLCJ1cGRhdGVVc2VyQmlsbGluZ1BheW1lbnRNZXRob2QiLCJ1c2VyVXBkYXRlIiwiZW5zdXJlUGx1c1N0cmlwZVBsYW4iLCJwbGFucyIsInJldHJpZXZlIiwiaW50ZXJ2YWwiLCJpbnRlcnZhbF9jb3VudCIsInBsYW5JZCIsInR5cGUiLCJwcm9kdWN0IiwidXBncmFkZVVzZXJUb1BsdXMiLCJjdXJyZW50VXNlciIsInBsYW5TdWJzY3JpcHRpb25JZCIsInN0cmlwZUNhcmRJZCIsInN0cmlwZVBsYW5JZCIsInN0cmlwZVN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbnMiLCJpdGVtcyIsInBsYW4iLCJzdHJpcGVQZXJpb2RFbmQiLCJOdW1iZXIiLCJjdXJyZW50X3BlcmlvZF9lbmQiLCJwbGFuRXhwaXJlcyIsInBsYW5TdGF0dXMiLCJ1c2VyQWNjZXNzIiwiY3JlYXRlQmlsbGluZ1NldHVwU2Vzc2lvbiIsInBhcnNlZFJldHVyblVybCIsImNoZWNrb3V0U2Vzc2lvbiIsImNoZWNrb3V0Iiwic2Vzc2lvbnMiLCJjYW5jZWxfdXJsIiwibW9kZSIsInBheW1lbnRfbWV0aG9kX3R5cGVzIiwic2V0dXBfaW50ZW50X2RhdGEiLCJzdWNjZXNzX3VybCIsImNoZWNrb3V0VXJsIiwiY29tcGxldGVCaWxsaW5nU2V0dXBTZXNzaW9uIiwiY2hlY2tvdXRTZXNzaW9uSWQiLCJub3JtYWxpemVkQ2hlY2tvdXRTZXNzaW9uSWQiLCJleHBhbmQiLCJjaGVja291dEN1c3RvbWVySWQiLCJzZXR1cEludGVudCIsInNldHVwX2ludGVudCIsInNldHVwSW50ZW50cyIsInBheW1lbnRNZXRob2QiLCJwYXltZW50X21ldGhvZCIsInBheW1lbnRNZXRob2RzIiwicGF5bWVudE1ldGhvZEN1c3RvbWVySWQiLCJpbnZvaWNlX3NldHRpbmdzIiwiZGVmYXVsdF9wYXltZW50X21ldGhvZCIsImN1cnJlbnRTdHJpcGVDYXJkSWQiLCJzdGFydHNXaXRoIiwiZGV0YWNoIiwic3RyaXBlQ2FyZEJyYW5kIiwiYnJhbmQiLCJzdHJpcGVDYXJkTGFzdDQiLCJsYXN0NCIsImRlbGV0ZVVzZXJCaWxsaW5nQ2FyZCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUFRQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxZQUFZLFFBQU8sK0JBQStCO0FBQzNGLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBSzdCLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFHbkQsU0FBUUMsUUFBUSxFQUFFQyxTQUFTLFFBQU8sNkJBQTZCO0FBQy9ELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsY0FBYyxRQUFPLDJCQUEyQjtBQUN4RCxTQUFRQyxlQUFlLFFBQU8sMEJBQTBCO0FBQ3hELFNBQVFDLFdBQVcsUUFBTyxhQUFhO0FBR3ZDLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyxlQUFlO0FBQ3JCLE1BQU1DLG1CQUFtQjtBQUN6QixNQUFNQyxtQkFBbUI7QUFFekIsT0FBTyxNQUFNQyxxQkFBcUIsQ0FBQ0M7SUFDakMsTUFBTUMsU0FBUztJQUNmLE1BQU0sRUFBQ0MsWUFBWSxFQUFFQyxTQUFTLEVBQUNDLFFBQVFDLFNBQVMsRUFBRUMsUUFBUSxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsR0FBR047SUFFcEUsTUFBTU8sZUFBZWQ7SUFFckIsT0FBT2MsYUFBYUMsU0FBUyxDQUMxQkMsTUFBTSxDQUFDO1FBQ05DLFVBQVU7WUFDUk4sUUFBUUM7WUFDUkM7UUFDRjtJQUNGLEdB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
607
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgc3RyaXBlIGZyb20gJ3N0cmlwZSc7XG5cbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7QmlsbGluZ1NldHVwU2Vzc2lvbk9wdGlvbnMsIFBheW1lbnRCYW5rQWNjb3VudCwgUGF5bWVudENhcmRUeXBlLCBQYXltZW50Q2hhcmdlLCBQYXltZW50VHJhbnNmZXJ9IGZyb20gJy4uL3R5cGVzL3BheW1lbnRzLnR5cGVzLmpzJztcbmltcG9ydCB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIFVzZXJFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2hhc0FjY2Vzc0xldmVsfSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRTdHJpcGVDbGllbnR9IGZyb20gJy4uL3V0aWxzL3N0cmlwZVV0aWxzLmpzJztcbmltcG9ydCB7Z2V0VXNlckJ5SWR9IGZyb20gJy4vdXNlcnMuanMnO1xuXG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncGF5bWVudHMnO1xuY29uc3QgUExVU19QTEFOX0lEID0gJ3BoYW50YXplLXBsdXMtbW9udGhseSc7XG5jb25zdCBQTFVTX1BMQU5fQU1PVU5UID0gMTAwMDtcbmNvbnN0IFBMVVNfUExBTl9BQ0NFU1MgPSAxO1xuXG5leHBvcnQgY29uc3QgYWRkQ3VzdG9tZXJBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEN1c3RvbWVyQWNjb3VudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlcm5hbWV9ID0ge319ID0gY29udGV4dDtcblxuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgIC5jcmVhdGUoe1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9XG4gICAgfSBhcyBhbnkpXG4gICAgLnRoZW4oKGN1c3RvbWVyKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogVXNlclR5cGUgPSB7XG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHN0cmlwZUN1c3RvbWVySWQ6IGN1c3RvbWVyLmlkXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXJUeXBlKSA9PiAhIXVwZGF0ZWRVc2VyKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0FjY291bnQ6IFBheW1lbnRCYW5rQWNjb3VudCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkUGF5bWVudEFjY291bnRCYW5rJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgLy8gUGFyYW1zXG4gIGNvbnN0IHtcbiAgICBhY2NvdW50TnVtYmVyLFxuICAgIGZ1bGxOYW1lLFxuICAgIHJvdXRpbmdcbiAgfSA9IGJhbmtBY2NvdW50O1xuXG4gIGNvbnN0IGZvcm1hdEFjY291bnQgPSBwYXJzZVN0cmluZyhhY2NvdW50TnVtYmVyLCAzMik7XG5cbiAgaWYoZm9ybWF0QWNjb3VudCA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9hY2NvdW50X251bWJlcicpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0RnVsbE5hbWUgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDEyOCk7XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfZnVsbF9uYW1lJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRSb3V0aW5nID0gcGFyc2VTdHJpbmcocm91dGluZywgMzIpO1xuXG4gIGlmKGZvcm1hdFJvdXRpbmcgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfcm91dGluZ19udW1iZXInKTtcbiAgfVxuXG4gIHJldHVybiBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIHRva2VuIGZpcnN0LCB0aGVuIHVzZSB0aGUgdG9rZW4gYXMgdGhlIHNvdXJjZVxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC50b2tlbnMuY3JlYXRlKHtcbiAgICAgICAgYmFua19hY2NvdW50OiB7XG4gICAgICAgICAgYWNjb3VudF9ob2xkZXJfbmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgICAgYWNjb3VudF9ob2xkZXJfdHlwZTogJ2luZGl2aWR1YWwnLFxuICAgICAgICAgIGFjY291bnRfbnVtYmVyOiBmb3JtYXRBY2NvdW50LFxuICAgICAgICAgIGNvdW50cnk6ICdVUycsXG4gICAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICAgIHJvdXRpbmdfbnVtYmVyOiBmb3JtYXRSb3V0aW5nXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAgIC50aGVuKCh0b2tlbikgPT4gc3RyaXBlQ2xpZW50LmN1c3RvbWVycy5jcmVhdGVTb3VyY2UoXG4gICAgICAgICAgc3RyaXBlQWNjb3VudElkLFxuICAgICAgICAgIHtzb3VyY2U6IHRva2VuLmlkfVxuICAgICAgICApKVxuICAgICAgICAudGhlbigoYWNjb3VudCkgPT4ge1xuICAgICAgICAgIC8vIFVzZSB0eXBlIGFzc2VydGlvbiBmb3IgY2FyZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgLy8gY29uc3QgY2FyZFNvdXJjZSA9IGFjY291bnQgYXMgdW5rbm93biBhcyBDYXJkO1xuICAgICAgICAgIC8vIGNvbnN0IGJyYW5kID0gY2FyZFNvdXJjZS5icmFuZCB8fCAnJztcbiAgICAgICAgICAvLyBjb25zdCBjdmNDaGVjayA9IGNhcmRTb3VyY2UuY3ZjX2NoZWNrIHx8ICcnO1xuICAgICAgICAgIC8vIGNvbnN0IGxhc3Q0ID0gY2FyZFNvdXJjZS5sYXN0NCB8fCAnJztcblxuICAgICAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgICBiYW5rQWNjb3VudCxcbiAgICAgICAgICAgIGJhbmtGdWxsTmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgICAgICBiYW5rSWQ6IGFjY291bnQuaWQsXG4gICAgICAgICAgICBiYW5rUm91dGluZzogZm9ybWF0Um91dGluZyxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3dcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKHVwZGF0ZWRVc2VyOiBVc2VyVHlwZSkgPT4gdXBkYXRlZFVzZXIpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgICBpZihtc2cgPT09ICdBIGJhbmsgYWNjb3VudCB3aXRoIHRoYXQgcm91dGluZyBudW1iZXIgYW5kIGFjY291bnQgbnVtYmVyICcgK1xuICAgICAgICAgICAgJ2FscmVhZHkgZXhpc3RzIGZvciB0aGlzIGN1c3RvbWVyLicpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAnYmFua19hY2NvdW50X2V4aXN0cydcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZDogUGF5bWVudENhcmRUeXBlKTogUHJvbWlzZTxQYXltZW50Q2FyZFR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHtcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgZXhwTW9udGgsXG4gICAgZXhwWWVhcixcbiAgICBmdWxsTmFtZSxcbiAgICBpZCxcbiAgICBzdHJlZXQxLFxuICAgIHN0YXRlLFxuICAgIHppcFxuICB9OiBQYXltZW50Q2FyZFR5cGUgPSBjYXJkO1xuXG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChpZCk7XG5cbiAgaWYoZm9ybWF0SWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9pZCcpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0RXhwTW9udGggPSBwYXJzZU51bShleHBNb250aCwgMik7XG4gIGNvbnN0IGZvcm1hdEV4cFllYXIgPSBwYXJzZU51bShleHBZZWFyLCAyKTtcbiAgY29uc3QgZm9ybWF0Q2l0eSA9IHBhcnNlVmFyQ2hhcihjaXR5LCAzMik7XG4gIGNvbnN0IGZvcm1hdENvdW50cnkgPSBwYXJzZUNoYXIoY291bnRyeSwgMik7XG4gIGNvbnN0IGZvcm1hdEZ1bGxOYW1lID0gcGFyc2VWYXJDaGFyKGZ1bGxOYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFN0cmVldDEgPSBwYXJzZVN0cmluZyhzdHJlZXQxLCAzMik7XG4gIGNvbnN0IGZvcm1hdFN0YXRlID0gcGFyc2VDaGFyKHN0YXRlLCAyKTtcbiAgY29uc3QgZm9ybWF0WmlwID0gcGFyc2VWYXJDaGFyKHppcCwgMTApO1xuXG4gIGNvbnN0IHBheW1lbnRDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSB7XG4gICAgLi4uKGZvcm1hdENpdHkgPyB7Y2l0eTogZm9ybWF0Q2l0eX0gOiB7fSksXG4gICAgLi4uKGZvcm1hdENvdW50cnkgPyB7Y291bnRyeTogZm9ybWF0Q291bnRyeX0gOiB7fSksXG4gICAgLi4uKGZvcm1hdEV4cE1vbnRoID8ge2V4cE1vbnRoOiBmb3JtYXRFeHBNb250aH0gOiB7fSksXG4gICAgLi4uKGZvcm1hdEV4cFllYXIgPyB7ZXhwWWVhcjogZm9ybWF0RXhwWWVhcn0gOiB7fSksXG4gICAgLi4uKGZvcm1hdEZ1bGxOYW1lID8ge2Z1bGxOYW1lOiBmb3JtYXRGdWxsTmFtZX0gOiB7fSksXG4gICAgLi4uKGZvcm1hdFN0YXRlID8ge3N0YXRlOiBmb3JtYXRTdGF0ZX0gOiB7fSksXG4gICAgLi4uKGZvcm1hdFN0cmVldDEgPyB7c3RyZWV0MTogZm9ybWF0U3RyZWV0MX0gOiB7fSksXG4gICAgLi4uKGZvcm1hdFppcCA/IHt6aXA6IGZvcm1hdFppcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCB1cGRhdGUgPSBwYXltZW50Q2FyZDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIExFVCB1cGRhdGVkQ2FyZCA9IEZJUlNUKFxuICAgICAgICBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBGSUxURVIgYy5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBVUERBVEUgYyBXSVRIICR7dXBkYXRlfSBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiBORVdcbiAgICAgIClcbiAgICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgIFJFVFVSTiB7dXNlcjogdXNlciwgY2FyZDogdXBkYXRlZENhcmR9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVzdWx0cyA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQ2FyZDogUGF5bWVudENhcmRUeXBlID0gcmVzdWx0cy5jYXJkO1xuICAgICAgY29uc3Qge3VzZXJ9ID0gcmVzdWx0cztcblxuICAgICAgaWYoIXVwZGF0ZWRDYXJkKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ25vdF9mb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7c3RyaXBlQ3VzdG9tZXJJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qge3N0cmlwZUlkfSA9IGNhcmQ7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogc3RyaXBlLkN1c3RvbWVyVXBkYXRlU291cmNlUGFyYW1zID0ge1xuICAgICAgICBhZGRyZXNzX2NpdHk6IGZvcm1hdENpdHksXG4gICAgICAgIGFkZHJlc3NfY291bnRyeTogZm9ybWF0Q291bnRyeSxcbiAgICAgICAgYWRkcmVzc19saW5lMTogZm9ybWF0U3RyZWV0MSxcbiAgICAgICAgYWRkcmVzc19zdGF0ZTogZm9ybWF0U3RhdGUsXG4gICAgICAgIGFkZHJlc3NfemlwOiBmb3JtYXRaaXAsXG4gICAgICAgIGV4cF9tb250aDogZm9ybWF0RXhwTW9udGgudG9TdHJpbmcoKSxcbiAgICAgICAgZXhwX3llYXI6IGZvcm1hdEV4cFllYXIudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogZm9ybWF0RnVsbE5hbWVcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC51cGRhdGVTb3VyY2Uoc3RyaXBlQ3VzdG9tZXJJZCwgc3RyaXBlSWQsIHVwZGF0ZSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY2FyZClcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OnVwZGF0ZUNhcmQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JlZGl0Q2FyZHMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudENhcmRUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENyZWRpdENhcmRzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgRklMVEVSIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0OiBQYXltZW50Q2FyZFR5cGVbXSA9IFtdKSA9PiBsaXN0KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUNyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDYXJkSWQgPSBwYXJzZUlkKGNhcmRJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIGNhcmQgPSBGSVJTVChcbiAgICAgIEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgICBGSUxURVIgYy5fa2V5ID09ICR7Zm9ybWF0Q2FyZElkfSAmJiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBjIElOIGNyZWRpdENhcmRzXG4gICAgICBSRVRVUk4gT0xEXG4gICAgKVxuICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB1XG4gICAgKVxuICAgIFJFVFVSTiB7dXNlcjogdXNlciwgY2FyZDogY2FyZH1gO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChyZXN1bHQgPSB7Y2FyZDoge30sIHVzZXI6IHt9fSkgPT4ge1xuICAgICAgaWYoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtjYXJkLCB1c2VyfSA9IHJlc3VsdDtcbiAgICAgIGNvbnN0IHtfa2V5OiBjYXJkS2V5fSA9IGNhcmQ7XG5cbiAgICAgIC8vIFJlbW92ZSBsaW5rZWQgZWRnZXNcbiAgICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNQYXltZW50Jyk7XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5vdXRFZGdlcyhjYXJkS2V5LCB7fSlcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgLy8gRXh0cmFjdCBlZGdlcyBmcm9tIHRoZSByZXNwb25zZVxuICAgICAgICAgIGNvbnN0IGVkZ2VzID0gQXJyYXkuaXNBcnJheShyZXNwb25zZSkgPyByZXNwb25zZSA6IFtdO1xuXG4gICAgICAgICAgaWYoZWRnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZWRnZXMubWFwKChlZGdlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFJFTU9WRSB7X2tleToke2VkZ2VLZXl9fSBJTiBoYXNQYXltZW50YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShyZW1vdmVBcWxRcnkpO1xuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFN0cmlwZVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgICAgICAgICAgIC5kZWxldGVTb3VyY2UodXNlci5zdHJpcGVDdXN0b21lcklkLCBjYXJkLnN0cmlwZUlkKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6ZGVsZXRlQ2FyZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVCYW5rQWNjb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBiYW5rSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgLy8gQ2xlYW4gZGJcbiAgY29uc3QgdXBkYXRlOiBVc2VyVHlwZSA9IHtcbiAgICBiYW5rQWNjb3VudDogJycsXG4gICAgYmFua0Z1bGxOYW1lOiAnJyxcbiAgICBiYW5rSWQ6ICcnLFxuICAgIGJhbmtSb3V0aW5nOiAnJyxcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKVxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAuZGVsZXRlU291cmNlKHN0cmlwZUFjY291bnRJZCwgYmFua0lkKVxuICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAuY2F0Y2goKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUGF5bWVudFRyYW5zZmVyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRyYW5zZmVyOiBQYXltZW50VHJhbnNmZXIpOiBQcm9taXNlPFBheW1lbnRUcmFuc2Zlcj4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHthbW91bnQsIGN1cnJlbmN5fSA9IHRyYW5zZmVyO1xuICBjb25zdCBmb3JtYXRBbW91bnQgPSBwYXJzZU51bShhbW91bnQpO1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgcmV0dXJuIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC50cmFuc2ZlcnNcbiAgICAgICAgLmNyZWF0ZSh7XG4gICAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQsXG4gICAgICAgICAgY3VycmVuY3k6IGZvcm1hdEN1cnJlbmN5LFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBzdHJpcGVBY2NvdW50SWRcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHN0cmlwZVRyYW5zZmVyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coc3RyaXBlVHJhbnNmZXIpO1xuICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0OiBQYXltZW50VHJhbnNmZXIgPSB7XG4gICAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQsXG4gICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiB0cmFuc2ZlcnMgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKG5ld1RyYW5zZmVyOiBQYXltZW50VHJhbnNmZXIpID0+IG5ld1RyYW5zZmVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUGF5bWVudEhvbGQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcGF5bWVudDogUGF5bWVudENoYXJnZSk6IFByb21pc2U8UGF5bWVudENoYXJnZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHthbW91bnQsIGNhcHR1cmUsIGNhcmRJZCwgY3VycmVuY3ksIGRlc2NyaXB0aW9ufSA9IHBheW1lbnQ7XG4gIGNvbnN0IGZvcm1hdEN1cnJlbmN5ID0gcGFyc2VDaGFyKGN1cnJlbmN5LCAzLCAnVVNEJykudG9VcHBlckNhc2UoKTtcbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgcmV0dXJuIHN0cmlwZUNsaWVudC5jaGFyZ2VzXG4gICAgLmNyZWF0ZSh7XG4gICAgICBhbW91bnQsXG4gICAgICBjYXB0dXJlLFxuICAgICAgY3VycmVuY3k6IGZvcm1hdEN1cnJlbmN5LFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBzb3VyY2U6IGNhcmRJZFxuICAgIH0pXG4gICAgLnRoZW4oKHN0cmlwZUNoYXJnZSkgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudENoYXJnZSA9IHtcbiAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBjYXB0dXJlLFxuICAgICAgICBjYXJkSWQsXG4gICAgICAgIGNoYXJnZUZhaWxDb2RlOiBzdHJpcGVDaGFyZ2UuZmFpbHVyZV9jb2RlLFxuICAgICAgICBjaGFyZ2VGYWlsTXNnOiBzdHJpcGVDaGFyZ2UuZmFpbHVyZV9tZXNzYWdlLFxuICAgICAgICBjaGFyZ2VJZDogc3RyaXBlQ2hhcmdlLmlkLFxuICAgICAgICBjaGFyZ2VTdGF0dXM6IHN0cmlwZUNoYXJnZS5zdGF0dXMsXG4gICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9O1xuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHBheW1lbnRzIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChuZXdQYXltZW50OiBQYXltZW50Q2hhcmdlKSA9PiBuZXdQYXltZW50KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmNyZWF0ZUhvbGQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgIH0pO1xufTtcblxuY29uc3QgZW5zdXJlU3RyaXBlQ3VzdG9tZXJJZCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvbklkID0gU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJyk7XG4gIGxldCB1c2VyID0gYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSk7XG5cbiAgaWYoIXVzZXI/LnN0cmlwZUN1c3RvbWVySWQpIHtcbiAgICBhd2FpdCBhZGRDdXN0b21lckFjY291bnQoY29udGV4dCk7XG4gICAgdXNlciA9IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pO1xuICB9XG5cbiAgcmV0dXJuIFN0cmluZyh1c2VyPy5zdHJpcGVDdXN0b21lcklkIHx8ICcnKTtcbn07XG5cbmNvbnN0IGdldENvbmZpZ3VyZWRCaWxsaW5nT3JpZ2lucyA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogU2V0PHN0cmluZz4gPT4ge1xuICBjb25zdCBjb25maWd1cmVkT3JpZ2lucyA9IFN0cmluZyhwcm9jZXNzLmVudi5TVFJJUEVfUkVUVVJOX1VSTF9PUklHSU5TIHx8ICcnKVxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcCgob3JpZ2luKSA9PiBvcmlnaW4udHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IGFwcFVybCA9IFN0cmluZyhjb250ZXh0LmNvbmZpZz8uZGV0YWlscz8udXJsIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoYXBwVXJsKSB7XG4gICAgY29uZmlndXJlZE9yaWdpbnMucHVzaChhcHBVcmwuaW5jbHVkZXMoJzovLycpID8gYXBwVXJsIDogYGh0dHBzOi8vJHthcHBVcmx9YCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNldChjb25maWd1cmVkT3JpZ2lucy5tYXAoKG9yaWdpbikgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChvcmlnaW4pLm9yaWdpbjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0pLmZpbHRlcihCb29sZWFuKSk7XG59O1xuXG5jb25zdCBwYXJzZUJpbGxpbmdSZXR1cm5VcmwgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcmV0dXJuVXJsOiBzdHJpbmcpOiBVUkwgPT4ge1xuICBsZXQgcGFyc2VkVXJsOiBVUkw7XG5cbiAgdHJ5IHtcbiAgICBwYXJzZWRVcmwgPSBuZXcgVVJMKFN0cmluZyhyZXR1cm5VcmwgfHwgJycpLnRyaW0oKSk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfYmlsbGluZ19yZXR1cm5fdXJsJyk7XG4gIH1cblxuICBjb25zdCBpc0xvY2FsRGV2ZWxvcG1lbnRVcmwgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwOidcbiAgICAmJiBbJzEyNy4wLjAuMScsICdsb2NhbGhvc3QnXS5pbmNsdWRlcyhwYXJzZWRVcmwuaG9zdG5hbWUpO1xuICBjb25zdCBpc1NlY3VyZVVybCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gIGNvbnN0IGFsbG93ZWRPcmlnaW5zID0gZ2V0Q29uZmlndXJlZEJpbGxpbmdPcmlnaW5zKGNvbnRleHQpO1xuXG4gIGlmKCghaXNTZWN1cmVVcmwgJiYgIWlzTG9jYWxEZXZlbG9wbWVudFVybCkgfHwgKCFpc0xvY2FsRGV2ZWxvcG1lbnRVcmwgJiYgIWFsbG93ZWRPcmlnaW5zLmhhcyhwYXJzZWRVcmwub3JpZ2luKSkpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX2JpbGxpbmdfcmV0dXJuX3VybCcpO1xuICB9XG5cbiAgcGFyc2VkVXJsLmhhc2ggPSAnJztcbiAgcmV0dXJuIHBhcnNlZFVybDtcbn07XG5cbmNvbnN0IGdldENoZWNrb3V0UmV0dXJuVXJsID0gKHJldHVyblVybDogVVJMLCBzdGF0dXM6ICdjYW5jZWxlZCcgfCAnc3VjY2VzcycpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBuZXh0VXJsID0gbmV3IFVSTChyZXR1cm5VcmwudG9TdHJpbmcoKSk7XG5cbiAgbmV4dFVybC5zZWFyY2hQYXJhbXMuc2V0KCdiaWxsaW5nJywgc3RhdHVzKTtcbiAgaWYoc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICBuZXh0VXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3Nlc3Npb25faWQnLCAne0NIRUNLT1VUX1NFU1NJT05fSUR9Jyk7XG4gIH1cblxuICByZXR1cm4gbmV4dFVybC50b1N0cmluZygpLnJlcGxhY2UoJyU3QkNIRUNLT1VUX1NFU1NJT05fSUQlN0QnLCAne0NIRUNLT1VUX1NFU1NJT05fSUR9Jyk7XG59O1xuXG5jb25zdCB1cGRhdGVVc2VyQmlsbGluZ1BheW1lbnRNZXRob2QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVwZGF0ZTogUGFydGlhbDxVc2VyVHlwZT5cbik6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvbklkID0gU3RyaW5nKGNvbnRleHQuc2Vzc2lvbj8udXNlcklkIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IHVzZXJVcGRhdGU6IFBhcnRpYWw8VXNlclR5cGU+ID0ge21vZGlmaWVkOiBEYXRlLm5vdygpLCAuLi51cGRhdGV9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VzZXJVcGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHVzZXIpO1xufTtcblxuY29uc3QgZW5zdXJlUGx1c1N0cmlwZVBsYW4gPSBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzdHJpcGVDbGllbnQucGxhbnMucmV0cmlldmUoUExVU19QTEFOX0lEKTtcbiAgICByZXR1cm4gUExVU19QTEFOX0lEO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgYXdhaXQgc3RyaXBlQ2xpZW50LnBsYW5zLmNyZWF0ZSh7XG4gICAgICBhbW91bnQ6IFBMVVNfUExBTl9BTU9VTlQsXG4gICAgICBjdXJyZW5jeTogJ3VzZCcsXG4gICAgICBpZDogUExVU19QTEFOX0lELFxuICAgICAgaW50ZXJ2YWw6ICdtb250aCcsXG4gICAgICBpbnRlcnZhbF9jb3VudDogMSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHBsYW5JZDogJ3BsdXMnLFxuICAgICAgICB0eXBlOiAnYWNjb3VudCdcbiAgICAgIH0sXG4gICAgICBwcm9kdWN0OiB7XG4gICAgICAgIG5hbWU6ICdQaGFudGF6ZSBQbHVzJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFBMVVNfUExBTl9JRDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZ3JhZGVVc2VyVG9QbHVzID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGdyYWRlVXNlclRvUGx1cyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSk7XG5cbiAgaWYoaGFzQWNjZXNzTGV2ZWwoY3VycmVudFVzZXIsIFBMVVNfUExBTl9BQ0NFU1MpICYmIGN1cnJlbnRVc2VyPy5wbGFuU3Vic2NyaXB0aW9uSWQpIHtcbiAgICByZXR1cm4gY3VycmVudFVzZXI7XG4gIH1cblxuICBpZighY3VycmVudFVzZXI/LnN0cmlwZUNhcmRJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2JpbGxpbmdfY2FyZCcpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzdHJpcGVDdXN0b21lcklkID0gYXdhaXQgZW5zdXJlU3RyaXBlQ3VzdG9tZXJJZChjb250ZXh0KTtcblxuICAgIGlmKCFzdHJpcGVDdXN0b21lcklkKSB7XG4gICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaXBlUGxhbklkID0gYXdhaXQgZW5zdXJlUGx1c1N0cmlwZVBsYW4oKTtcbiAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcbiAgICBjb25zdCBzdHJpcGVTdWJzY3JpcHRpb24gPSBhd2FpdCBzdHJpcGVDbGllbnQuc3Vic2NyaXB0aW9ucy5jcmVhdGUoe1xuICAgICAgY3VzdG9tZXI6IHN0cmlwZUN1c3RvbWVySWQsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgcGxhbjogc3RyaXBlUGxhbklkXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBwbGFuSWQ6ICdwbHVzJyxcbiAgICAgICAgdHlwZTogJ2FjY291bnQnLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN0cmlwZVBlcmlvZEVuZCA9IE51bWJlcigoc3RyaXBlU3Vic2NyaXB0aW9uIGFzIGFueSk/LmN1cnJlbnRfcGVyaW9kX2VuZCB8fCAwKTtcbiAgICBjb25zdCB1cGRhdGU6IFBhcnRpYWw8VXNlclR5cGU+ID0ge1xuICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICBwbGFuRXhwaXJlczogc3RyaXBlUGVyaW9kRW5kID8gc3RyaXBlUGVyaW9kRW5kICogMTAwMCA6IDAsXG4gICAgICBwbGFuSWQ6ICdwbHVzJyxcbiAgICAgIHBsYW5TdGF0dXM6IFN0cmluZyhzdHJpcGVTdWJzY3JpcHRpb24uc3RhdHVzIHx8ICdhY3RpdmUnKSxcbiAgICAgIHBsYW5TdWJzY3JpcHRpb25JZDogc3RyaXBlU3Vic2NyaXB0aW9uLmlkLFxuICAgICAgdXNlckFjY2VzczogUExVU19QTEFOX0FDQ0VTU1xuICAgIH07XG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB1c2VyKTtcbiAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJpbGxpbmdTZXR1cFNlc3Npb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtyZXR1cm5Vcmx9OiBCaWxsaW5nU2V0dXBTZXNzaW9uT3B0aW9uc1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvbklkID0gU3RyaW5nKGNvbnRleHQuc2Vzc2lvbj8udXNlcklkIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfc2Vzc2lvbicpO1xuICB9XG5cbiAgY29uc3Qgc3RyaXBlQ3VzdG9tZXJJZCA9IGF3YWl0IGVuc3VyZVN0cmlwZUN1c3RvbWVySWQoY29udGV4dCk7XG5cbiAgaWYoIXN0cmlwZUN1c3RvbWVySWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gIH1cblxuICBjb25zdCBwYXJzZWRSZXR1cm5VcmwgPSBwYXJzZUJpbGxpbmdSZXR1cm5VcmwoY29udGV4dCwgcmV0dXJuVXJsKTtcbiAgY29uc3QgY2hlY2tvdXRTZXNzaW9uID0gYXdhaXQgZ2V0U3RyaXBlQ2xpZW50KCkuY2hlY2tvdXQuc2Vzc2lvbnMuY3JlYXRlKHtcbiAgICBjYW5jZWxfdXJsOiBnZXRDaGVja291dFJldHVyblVybChwYXJzZWRSZXR1cm5VcmwsICdjYW5jZWxlZCcpLFxuICAgIGN1c3RvbWVyOiBzdHJpcGVDdXN0b21lcklkLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICB0eXBlOiAnYmlsbGluZy1wYXltZW50LW1ldGhvZCcsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0sXG4gICAgbW9kZTogJ3NldHVwJyxcbiAgICBwYXltZW50X21ldGhvZF90eXBlczogWydjYXJkJ10sXG4gICAgc2V0dXBfaW50ZW50X2RhdGE6IHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHR5cGU6ICdiaWxsaW5nLXBheW1lbnQtbWV0aG9kJyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH1cbiAgICB9LFxuICAgIHN1Y2Nlc3NfdXJsOiBnZXRDaGVja291dFJldHVyblVybChwYXJzZWRSZXR1cm5VcmwsICdzdWNjZXNzJylcbiAgfSk7XG4gIGNvbnN0IGNoZWNrb3V0VXJsID0gU3RyaW5nKGNoZWNrb3V0U2Vzc2lvbi51cmwgfHwgJycpLnRyaW0oKTtcblxuICBpZighY2hlY2tvdXRVcmwpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gIH1cblxuICByZXR1cm4gY2hlY2tvdXRVcmw7XG59O1xuXG5leHBvcnQgY29uc3QgY29tcGxldGVCaWxsaW5nU2V0dXBTZXNzaW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjaGVja291dFNlc3Npb25JZDogc3RyaW5nXG4pOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25JZCA9IFN0cmluZyhjb250ZXh0LnNlc3Npb24/LnVzZXJJZCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBub3JtYWxpemVkQ2hlY2tvdXRTZXNzaW9uSWQgPSBTdHJpbmcoY2hlY2tvdXRTZXNzaW9uSWQgfHwgJycpLnRyaW0oKTtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9zZXNzaW9uJyk7XG4gIH1cblxuICBpZighbm9ybWFsaXplZENoZWNrb3V0U2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9iaWxsaW5nX3NldHVwX3Nlc3Npb24nKTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSk7XG4gIGNvbnN0IHN0cmlwZUN1c3RvbWVySWQgPSBTdHJpbmcoY3VycmVudFVzZXI/LnN0cmlwZUN1c3RvbWVySWQgfHwgJycpLnRyaW0oKTtcblxuICBpZighc3RyaXBlQ3VzdG9tZXJJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgfVxuXG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuICBjb25zdCBjaGVja291dFNlc3Npb24gPSBhd2FpdCBzdHJpcGVDbGllbnQuY2hlY2tvdXQuc2Vzc2lvbnMucmV0cmlldmUoXG4gICAgbm9ybWFsaXplZENoZWNrb3V0U2Vzc2lvbklkLFxuICAgIHtleHBhbmQ6IFsnc2V0dXBfaW50ZW50LnBheW1lbnRfbWV0aG9kJ119XG4gICk7XG4gIGNvbnN0IGNoZWNrb3V0Q3VzdG9tZXJJZCA9IHR5cGVvZiBjaGVja291dFNlc3Npb24uY3VzdG9tZXIgPT09ICdzdHJpbmcnXG4gICAgPyBjaGVja291dFNlc3Npb24uY3VzdG9tZXJcbiAgICA6IGNoZWNrb3V0U2Vzc2lvbi5jdXN0b21lcj8uaWQ7XG5cbiAgaWYoXG4gICAgY2hlY2tvdXRTZXNzaW9uLm1vZGUgIT09ICdzZXR1cCdcbiAgICB8fCBjaGVja291dFNlc3Npb24uc3RhdHVzICE9PSAnY29tcGxldGUnXG4gICAgfHwgY2hlY2tvdXRDdXN0b21lcklkICE9PSBzdHJpcGVDdXN0b21lcklkXG4gICAgfHwgY2hlY2tvdXRTZXNzaW9uLm1ldGFkYXRhPy51c2VySWQgIT09IHNlc3Npb25JZFxuICApIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX2JpbGxpbmdfc2V0dXBfc2Vzc2lvbicpO1xuICB9XG5cbiAgY29uc3Qgc2V0dXBJbnRlbnQgPSB0eXBlb2YgY2hlY2tvdXRTZXNzaW9uLnNldHVwX2ludGVudCA9PT0gJ3N0cmluZydcbiAgICA/IGF3YWl0IHN0cmlwZUNsaWVudC5zZXR1cEludGVudHMucmV0cmlldmUoY2hlY2tvdXRTZXNzaW9uLnNldHVwX2ludGVudCwge2V4cGFuZDogWydwYXltZW50X21ldGhvZCddfSlcbiAgICA6IGNoZWNrb3V0U2Vzc2lvbi5zZXR1cF9pbnRlbnQ7XG5cbiAgaWYoIXNldHVwSW50ZW50IHx8IHNldHVwSW50ZW50LnN0YXR1cyAhPT0gJ3N1Y2NlZWRlZCcpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdiaWxsaW5nX3NldHVwX2luY29tcGxldGUnKTtcbiAgfVxuXG4gIGNvbnN0IHBheW1lbnRNZXRob2QgPSB0eXBlb2Ygc2V0dXBJbnRlbnQucGF5bWVudF9tZXRob2QgPT09ICdzdHJpbmcnXG4gICAgPyBhd2FpdCBzdHJpcGVDbGllbnQucGF5bWVudE1ldGhvZHMucmV0cmlldmUoc2V0dXBJbnRlbnQucGF5bWVudF9tZXRob2QpXG4gICAgOiBzZXR1cEludGVudC5wYXltZW50X21ldGhvZDtcbiAgY29uc3QgcGF5bWVudE1ldGhvZEN1c3RvbWVySWQgPSB0eXBlb2YgcGF5bWVudE1ldGhvZD8uY3VzdG9tZXIgPT09ICdzdHJpbmcnXG4gICAgPyBwYXltZW50TWV0aG9kLmN1c3RvbWVyXG4gICAgOiBwYXltZW50TWV0aG9kPy5jdXN0b21lcj8uaWQ7XG5cbiAgaWYoIXBheW1lbnRNZXRob2QgfHwgcGF5bWVudE1ldGhvZC50eXBlICE9PSAnY2FyZCcgfHwgIXBheW1lbnRNZXRob2QuY2FyZCB8fCBwYXltZW50TWV0aG9kQ3VzdG9tZXJJZCAhPT0gc3RyaXBlQ3VzdG9tZXJJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfYmlsbGluZ19wYXltZW50X21ldGhvZCcpO1xuICB9XG5cbiAgYXdhaXQgc3RyaXBlQ2xpZW50LmN1c3RvbWVycy51cGRhdGUoc3RyaXBlQ3VzdG9tZXJJZCwge1xuICAgIGludm9pY2Vfc2V0dGluZ3M6IHtkZWZhdWx0X3BheW1lbnRfbWV0aG9kOiBwYXltZW50TWV0aG9kLmlkfVxuICB9KTtcblxuICBjb25zdCBjdXJyZW50U3RyaXBlQ2FyZElkID0gU3RyaW5nKGN1cnJlbnRVc2VyPy5zdHJpcGVDYXJkSWQgfHwgJycpLnRyaW0oKTtcblxuICBpZihjdXJyZW50U3RyaXBlQ2FyZElkLnN0YXJ0c1dpdGgoJ3BtXycpICYmIGN1cnJlbnRTdHJpcGVDYXJkSWQgIT09IHBheW1lbnRNZXRob2QuaWQpIHtcbiAgICBhd2FpdCBzdHJpcGVDbGllbnQucGF5bWVudE1ldGhvZHMuZGV0YWNoKGN1cnJlbnRTdHJpcGVDYXJkSWQpLmNhdGNoKCgpID0+IG51bGwpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVVzZXJCaWxsaW5nUGF5bWVudE1ldGhvZChjb250ZXh0LCB7XG4gICAgc3RyaXBlQ2FyZEJyYW5kOiBTdHJpbmcocGF5bWVudE1ldGhvZC5jYXJkLmJyYW5kIHx8ICcnKS50cmltKCksXG4gICAgc3RyaXBlQ2FyZElkOiBwYXltZW50TWV0aG9kLmlkLFxuICAgIHN0cmlwZUNhcmRMYXN0NDogU3RyaW5nKHBheW1lbnRNZXRob2QuY2FyZC5sYXN0NCB8fCAnJykudHJpbSgpXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXJCaWxsaW5nQ2FyZCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVXNlckJpbGxpbmdDYXJkJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBjdXJyZW50VXNlciA9IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pO1xuICBjb25zdCBzdHJpcGVDdXN0b21lcklkID0gU3RyaW5nKGN1cnJlbnRVc2VyPy5zdHJpcGVDdXN0b21lcklkIHx8ICcnKTtcbiAgY29uc3Qgc3RyaXBlQ2FyZElkID0gU3RyaW5nKGN1cnJlbnRVc2VyPy5zdHJpcGVDYXJkSWQgfHwgJycpO1xuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICB0cnkge1xuICAgIGlmKHN0cmlwZUN1c3RvbWVySWQgJiYgc3RyaXBlQ2FyZElkKSB7XG4gICAgICBpZihzdHJpcGVDYXJkSWQuc3RhcnRzV2l0aCgncG1fJykpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tZXIgPSBhd2FpdCBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLnJldHJpZXZlKHN0cmlwZUN1c3RvbWVySWQpO1xuXG4gICAgICAgIGlmKCEoJ2RlbGV0ZWQnIGluIGN1c3RvbWVyKSAmJiBjdXN0b21lci5pbnZvaWNlX3NldHRpbmdzLmRlZmF1bHRfcGF5bWVudF9tZXRob2QgPT09IHN0cmlwZUNhcmRJZCkge1xuICAgICAgICAgIGF3YWl0IHN0cmlwZUNsaWVudC5jdXN0b21lcnMudXBkYXRlKHN0cmlwZUN1c3RvbWVySWQsIHtcbiAgICAgICAgICAgIGludm9pY2Vfc2V0dGluZ3M6IHtkZWZhdWx0X3BheW1lbnRfbWV0aG9kOiBudWxsfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgc3RyaXBlQ2xpZW50LnBheW1lbnRNZXRob2RzLmRldGFjaChzdHJpcGVDYXJkSWQpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgc3RyaXBlQ2xpZW50LmN1c3RvbWVycy5kZWxldGVTb3VyY2Uoc3RyaXBlQ3VzdG9tZXJJZCwgc3RyaXBlQ2FyZElkKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlVXNlckJpbGxpbmdQYXltZW50TWV0aG9kKGNvbnRleHQsIHtcbiAgICAgIHN0cmlwZUNhcmRCcmFuZDogJycsXG4gICAgICBzdHJpcGVDYXJkSWQ6ICcnLFxuICAgICAgc3RyaXBlQ2FyZExhc3Q0OiAnJ1xuICAgIH0pO1xuICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwiYXFsIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwiVXNlckVycm9yIiwidXNlRGIiLCJoYXNBY2Nlc3NMZXZlbCIsImdldFN0cmlwZUNsaWVudCIsImdldFVzZXJCeUlkIiwiZXZlbnRDYXRlZ29yeSIsIlBMVVNfUExBTl9JRCIsIlBMVVNfUExBTl9BTU9VTlQiLCJQTFVTX1BMQU5fQUNDRVNTIiwiYWRkQ3VzdG9tZXJBY2NvdW50IiwiY29udGV4dCIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsInNlc3Npb24iLCJ1c2VySWQiLCJzZXNzaW9uSWQiLCJ1c2VybmFtZSIsInN0cmlwZUNsaWVudCIsImN1c3RvbWVycyIsImNyZWF0ZSIsIm1ldGFkYXRhIiwidGhlbiIsImN1c3RvbWVyIiwibm93IiwiRGF0ZSIsInVwZGF0ZSIsIm1vZGlmaWVkIiwic3RyaXBlQ3VzdG9tZXJJZCIsImlkIiwiYXFsUXJ5IiwicXVlcnkiLCJjdXJzb3IiLCJuZXh0IiwidXBkYXRlZFVzZXIiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiYWRkQmFua0FjY291bnQiLCJiYW5rQWNjb3VudCIsImFjY291bnROdW1iZXIiLCJmdWxsTmFtZSIsInJvdXRpbmciLCJmb3JtYXRBY2NvdW50IiwiZm9ybWF0RnVsbE5hbWUiLCJmb3JtYXRSb3V0aW5nIiwidXNlciIsInN0cmlwZUFjY291bnRJZCIsInRva2VucyIsImJhbmtfYWNjb3VudCIsImFjY291bnRfaG9sZGVyX25hbWUiLCJhY2NvdW50X2hvbGRlcl90eXBlIiwiYWNjb3VudF9udW1iZXIiLCJjb3VudHJ5IiwiY3VycmVuY3kiLCJyb3V0aW5nX251bWJlciIsInRva2VuIiwiY3JlYXRlU291cmNlIiwic291cmNlIiwiYWNjb3VudCIsImJhbmtGdWxsTmFtZSIsImJhbmtJZCIsImJhbmtSb3V0aW5nIiwibXNnIiwibWVzc2FnZSIsInVwZGF0ZUNyZWRpdENhcmQiLCJjYXJkIiwiY2l0eSIsImV4cE1vbnRoIiwiZXhwWWVhciIsInN0cmVldDEiLCJzdGF0ZSIsInppcCIsImZvcm1hdElkIiwiZm9ybWF0RXhwTW9udGgiLCJmb3JtYXRFeHBZZWFyIiwiZm9ybWF0Q2l0eSIsImZvcm1hdENvdW50cnkiLCJmb3JtYXRTdHJlZXQxIiwiZm9ybWF0U3RhdGUiLCJmb3JtYXRaaXAiLCJwYXltZW50Q2FyZCIsInJlc3VsdHMiLCJ1cGRhdGVkQ2FyZCIsInN0cmlwZUlkIiwiYWRkcmVzc19jaXR5IiwiYWRkcmVzc19jb3VudHJ5IiwiYWRkcmVzc19saW5lMSIsImFkZHJlc3Nfc3RhdGUiLCJhZGRyZXNzX3ppcCIsImV4cF9tb250aCIsInRvU3RyaW5nIiwiZXhwX3llYXIiLCJuYW1lIiwidXBkYXRlU291cmNlIiwiY29uc29sZSIsImxvZyIsImdldENyZWRpdENhcmRzIiwiYWxsIiwibGlzdCIsImRlbGV0ZUNyZWRpdENhcmQiLCJjYXJkSWQiLCJmb3JtYXRDYXJkSWQiLCJyZXN1bHQiLCJfa2V5IiwiY2FyZEtleSIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsIm91dEVkZ2VzIiwicmVzcG9uc2UiLCJlZGdlcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIlByb21pc2UiLCJtYXAiLCJlZGdlIiwiZWRnZUtleSIsInJlbW92ZUFxbFFyeSIsImRlbGV0ZVNvdXJjZSIsImRlbGV0ZUJhbmtBY2NvdW50IiwicmVzb2x2ZSIsImNyZWF0ZVBheW1lbnRUcmFuc2ZlciIsInRyYW5zZmVyIiwiYW1vdW50IiwiZm9ybWF0QW1vdW50IiwiZm9ybWF0Q3VycmVuY3kiLCJ0b1VwcGVyQ2FzZSIsInRyYW5zZmVycyIsImRlc3RpbmF0aW9uIiwic3RyaXBlVHJhbnNmZXIiLCJpbnNlcnQiLCJhZGRlZCIsIm5ld1RyYW5zZmVyIiwiY3JlYXRlUGF5bWVudEhvbGQiLCJwYXltZW50IiwiY2FwdHVyZSIsImRlc2NyaXB0aW9uIiwiY2hhcmdlcyIsInN0cmlwZUNoYXJnZSIsImNoYXJnZUZhaWxDb2RlIiwiZmFpbHVyZV9jb2RlIiwiY2hhcmdlRmFpbE1zZyIsImZhaWx1cmVfbWVzc2FnZSIsImNoYXJnZUlkIiwiY2hhcmdlU3RhdHVzIiwic3RhdHVzIiwibmV3UGF5bWVudCIsImVuc3VyZVN0cmlwZUN1c3RvbWVySWQiLCJTdHJpbmciLCJnZXRDb25maWd1cmVkQmlsbGluZ09yaWdpbnMiLCJjb25maWd1cmVkT3JpZ2lucyIsInByb2Nlc3MiLCJlbnYiLCJTVFJJUEVfUkVUVVJOX1VSTF9PUklHSU5TIiwic3BsaXQiLCJvcmlnaW4iLCJ0cmltIiwiZmlsdGVyIiwiQm9vbGVhbiIsImFwcFVybCIsImNvbmZpZyIsImRldGFpbHMiLCJ1cmwiLCJwdXNoIiwiaW5jbHVkZXMiLCJTZXQiLCJVUkwiLCJwYXJzZUJpbGxpbmdSZXR1cm5VcmwiLCJyZXR1cm5VcmwiLCJwYXJzZWRVcmwiLCJpc0xvY2FsRGV2ZWxvcG1lbnRVcmwiLCJwcm90b2NvbCIsImhvc3RuYW1lIiwiaXNTZWN1cmVVcmwiLCJhbGxvd2VkT3JpZ2lucyIsImhhcyIsImhhc2giLCJnZXRDaGVja291dFJldHVyblVybCIsIm5leHRVcmwiLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJyZXBsYWNlIiwidXBkYXRlVXNlckJpbGxpbmdQYXltZW50TWV0aG9kIiwidXNlclVwZGF0ZSIsImVuc3VyZVBsdXNTdHJpcGVQbGFuIiwicGxhbnMiLCJyZXRyaWV2ZSIsImludGVydmFsIiwiaW50ZXJ2YWxfY291bnQiLCJwbGFuSWQiLCJ0eXBlIiwicHJvZHVjdCIsInVwZ3JhZGVVc2VyVG9QbHVzIiwiY3VycmVudFVzZXIiLCJwbGFuU3Vic2NyaXB0aW9uSWQiLCJzdHJpcGVDYXJkSWQiLCJzdHJpcGVQbGFuSWQiLCJzdHJpcGVTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25zIiwiaXRlbXMiLCJwbGFuIiwic3RyaXBlUGVyaW9kRW5kIiwiTnVtYmVyIiwiY3VycmVudF9wZXJpb2RfZW5kIiwicGxhbkV4cGlyZXMiLCJwbGFuU3RhdHVzIiwidXNlckFjY2VzcyIsImNyZWF0ZUJpbGxpbmdTZXR1cFNlc3Npb24iLCJwYXJzZWRSZXR1cm5VcmwiLCJjaGVja291dFNlc3Npb24iLCJjaGVja291dCIsInNlc3Npb25zIiwiY2FuY2VsX3VybCIsIm1vZGUiLCJwYXltZW50X21ldGhvZF90eXBlcyIsInNldHVwX2ludGVudF9kYXRhIiwic3VjY2Vzc191cmwiLCJjaGVja291dFVybCIsImNvbXBsZXRlQmlsbGluZ1NldHVwU2Vzc2lvbiIsImNoZWNrb3V0U2Vzc2lvbklkIiwibm9ybWFsaXplZENoZWNrb3V0U2Vzc2lvbklkIiwiZXhwYW5kIiwiY2hlY2tvdXRDdXN0b21lcklkIiwic2V0dXBJbnRlbnQiLCJzZXR1cF9pbnRlbnQiLCJzZXR1cEludGVudHMiLCJwYXltZW50TWV0aG9kIiwicGF5bWVudF9tZXRob2QiLCJwYXltZW50TWV0aG9kcyIsInBheW1lbnRNZXRob2RDdXN0b21lcklkIiwiaW52b2ljZV9zZXR0aW5ncyIsImRlZmF1bHRfcGF5bWVudF9tZXRob2QiLCJjdXJyZW50U3RyaXBlQ2FyZElkIiwic3RhcnRzV2l0aCIsImRldGFjaCIsInN0cmlwZUNhcmRCcmFuZCIsImJyYW5kIiwic3RyaXBlQ2FyZExhc3Q0IiwibGFzdDQiLCJkZWxldGVVc2VyQmlsbGluZ0NhcmQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FBUUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxRQUFPLCtCQUErQjtBQUMzRixTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUs3QixTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBR25ELFNBQVFDLFFBQVEsRUFBRUMsU0FBUyxRQUFPLDZCQUE2QjtBQUMvRCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLGNBQWMsUUFBTywyQkFBMkI7QUFDeEQsU0FBUUMsZUFBZSxRQUFPLDBCQUEwQjtBQUN4RCxTQUFRQyxXQUFXLFFBQU8sYUFBYTtBQUd2QyxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsZUFBZTtBQUNyQixNQUFNQyxtQkFBbUI7QUFDekIsTUFBTUMsbUJBQW1CO0FBRXpCLE9BQU8sTUFBTUMscUJBQXFCLENBQUNDO0lBQ2pDLE1BQU1DLFNBQVM7SUFDZixNQUFNLEVBQUNDLFlBQVksRUFBRUMsU0FBUyxFQUFDQyxRQUFRQyxTQUFTLEVBQUVDLFFBQVEsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEdBQUdOO0lBRXBFLE1BQU1PLGVBQWVkO0lBRXJCLE9BQU9jLGFBQWFDLFNBQVMsQ0FDMUJDLE1BQU0sQ0FBQztRQUNOQyxVQUFVO1lBQ1JOLFFB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
@@ -612,4 +612,4 @@ export const updatePersona = async (context, persona)=>{
612
612
  }
613
613
  };
614
614
 
615
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9wZXJzb25hcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjcmVhdGVIYXNoLFxuICBwYXJzZUFyYW5nb0lkLFxuICBwYXJzZUNoYXIsXG4gIHBhcnNlSWQsXG4gIHBhcnNlTnVtLFxuICBwYXJzZVN0cmluZyxcbiAgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7Q29ubmVjdGlvbktpbmRzfSBmcm9tICcuLi90eXBlcy9jb25uZWN0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRDb25uZWN0aW9ufSBmcm9tICcuL2Nvbm5lY3Rpb25zLmpzJztcbmltcG9ydCB7Z2V0VGFnTGlzdEJ5SXRlbX0gZnJvbSAnLi90YWdzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RWRnZVR5cGV9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtQZXJzb25hVHlwZX0gZnJvbSAnLi4vdHlwZXMvcGVyc29uYXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1VzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncGVyc29uYXMnO1xuY29uc3QgbWluaW11bUFkdWx0QWdlID0gMTg7XG5jb25zdCBtaW5pbXVtQWR1bHRCaXJ0aGRhdGUgPSBEYXRlLm5vdygpIC0gKG1pbmltdW1BZHVsdEFnZSAqIDM2NS4yNSAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXG5leHBvcnQgdHlwZSBQZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyA9IFJlYWRvbmx5PHtcbiAgcmVhZG9ubHkgbWFwQ3VzdG9tUGVyc29uYUZpZWxkcz86IChwZXJzb25hOiBQZXJzb25hVHlwZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59PjtcblxuZXhwb3J0IHR5cGUgUGVyc29uYUxpc3RGaWx0ZXJzID0gUmVhZG9ubHk8e1xuICByZWFkb25seSBnZW5kZXI/OiBzdHJpbmdbXTtcbn0+O1xuXG5leHBvcnQgdHlwZSBQZXJzb25hUmVsYXRpb25GaWx0ZXIgPSAnZm9sbG93ZXJzJyB8ICdmb2xsb3dpbmcnIHwgJ2ZyaWVuZHMnO1xuXG5sZXQgcGVyc29uYUFjdGlvbkV4dGVuc2lvbnM6IFBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0ge307XG5jb25zdCB1c2Vyc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlVTRVJTKTtcbmNvbnN0IHBlcnNvbmFzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuY29uc3QgdGFnc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlRBR1MpO1xuY29uc3QgaXNUYWdnZWRDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5JU19UQUdHRUQpO1xuY29uc3QgaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19DT05ORUNUSU9OKTtcblxuZXhwb3J0IGNvbnN0IGNvbmZpZ3VyZVBlcnNvbmFBY3Rpb25zID0gKGV4dGVuc2lvbnM6IFBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0ge30pOiB2b2lkID0+IHtcbiAgcGVyc29uYUFjdGlvbkV4dGVuc2lvbnMgPSB7Li4uZXh0ZW5zaW9uc307XG59O1xuXG5jb25zdCBidWlsZFBlcnNvbmFNdXRhdGlvbiA9IChwZXJzb25hOiBQZXJzb25hVHlwZSk6IFBhcnRpYWw8UGVyc29uYVR5cGU+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBzdHJlZXQxLFxuICAgIHN0cmVldDIsXG4gICAgemlwLFxuICAgIHN0YXRlLFxuICAgIHRpbWV6b25lLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBnZW5kZXIsXG4gICAgaW1hZ2VJZCxcbiAgICBuYW1lLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvY2F0aW9uLFxuICAgIGxvbmdpdHVkZSxcbiAgICB1c2VySWRcbiAgfSA9IHBlcnNvbmE7XG5cbiAgcmV0dXJuIHtcbiAgICBjaXR5OiBjaXR5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY2l0eSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGNvdW50cnk6IGNvdW50cnkgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihjb3VudHJ5LCAzMikgOiB1bmRlZmluZWQsXG4gICAgZmlyc3ROYW1lOiBmaXJzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihmaXJzdE5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBnZW5kZXI6IGdlbmRlciAhPT0gdW5kZWZpbmVkID8gcGFyc2VDaGFyKGdlbmRlciwgMSkudG9VcHBlckNhc2UoKSA6IHVuZGVmaW5lZCxcbiAgICBpbWFnZUlkOiBpbWFnZUlkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKGltYWdlSWQpIDogdW5kZWZpbmVkLFxuICAgIGxhc3ROYW1lOiBsYXN0TmFtZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGxhc3ROYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsYXRpdHVkZSwgMTIpIDogdW5kZWZpbmVkLFxuICAgIGxvY2F0aW9uOiBsb2NhdGlvbiAhPT0gdW5kZWZpbmVkID8gcGFyc2VTdHJpbmcobG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGxvbmdpdHVkZSwgMTIpIDogdW5kZWZpbmVkLFxuICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihuYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHN0YXRlICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RhdGUsIDIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDE6IHN0cmVldDEgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQxLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RyZWV0Mjogc3RyZWV0MiAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB0aW1lem9uZTogdGltZXpvbmUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih0aW1lem9uZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHVzZXJJZDogdXNlcklkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKHVzZXJJZCkgOiB1bmRlZmluZWQsXG4gICAgemlwOiB6aXAgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih6aXAsIDE2KSA6IHVuZGVmaW5lZFxuICB9O1xufTtcblxuY29uc3QgYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24gPSAocGVyc29uYTogUGVyc29uYVR5cGUpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IGZpZWxkcyA9IHBlcnNvbmFBY3Rpb25FeHRlbnNpb25zLm1hcEN1c3RvbVBlcnNvbmFGaWVsZHM/LihwZXJzb25hKSB8fCB7fTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmllbGRzKS5yZWR1Y2UoKHJlc3VsdCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaWYodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG59O1xuXG5jb25zdCBjcmVhdGVQZXJzb25hRWRnZSA9ICh1c2VyRG9jSWQ6IHN0cmluZywgcGVyc29uYURvY0lkOiBzdHJpbmcpOiBFZGdlVHlwZSA9PiAoe1xuICBfZnJvbTogcGFyc2VBcmFuZ29JZCh1c2VyRG9jSWQpLFxuICBfa2V5OiBjcmVhdGVIYXNoKGBwZXJzb25hLSR7dXNlckRvY0lkfS0ke3BlcnNvbmFEb2NJZH1gKSxcbiAgX3RvOiBwYXJzZUFyYW5nb0lkKHBlcnNvbmFEb2NJZCksXG4gIGFkZGVkOiBEYXRlLm5vdygpXG59KTtcblxuY29uc3QgZ2V0VXNlckJ5S2V5ID0gYXN5bmMgKGRhdGFiYXNlTmFtZTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8VXNlclR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHVzZXIgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICBGSUxURVIgdXNlci5fa2V5ID09ICR7dXNlcklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVzZXJcbiAgYDtcbiAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICByZXR1cm4gY3Vyc29yLm5leHQoKTtcbn07XG5cbmNvbnN0IGdldFNlc3Npb25QZXJzb25hSWQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgcmVxdWVzdGVkUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcblxuICBpZihyZXF1ZXN0ZWRQZXJzb25hSWQpIHtcbiAgICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgICBGT1IgcGVyc29uYSBJTiAke3BlcnNvbmFzQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHBlcnNvbmEuX2tleSA9PSAke3JlcXVlc3RlZFBlcnNvbmFJZH1cbiAgICAgICAgRklMVEVSIHBlcnNvbmEudXNlcklkID09ICR7c2Vzc2lvblVzZXJJZH1cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gcGVyc29uYS5fa2V5XG4gICAgYCk7XG5cbiAgICByZXR1cm4gcGFyc2VJZChTdHJpbmcoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAnJykpO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKHNlc3Npb25QZXJzb25hSWQpIHtcbiAgICByZXR1cm4gc2Vzc2lvblBlcnNvbmFJZDtcbiAgfVxuXG4gIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXJCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgc2Vzc2lvblVzZXJJZCk7XG4gIHJldHVybiBwYXJzZUlkKFN0cmluZyh1c2VyPy5wZXJzb25hSWQgfHwgJycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hT3duZXJVc2VySWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBlcnNvbmFJZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gIGlmKCFub3JtYWxpemVkUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYSA9IGF3YWl0IGdldFBlcnNvbmFCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgbm9ybWFsaXplZFBlcnNvbmFJZCk7XG4gIHJldHVybiBwYXJzZUlkKFN0cmluZyhwZXJzb25hPy51c2VySWQgfHwgJycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZXJWaXNpYmlsaXR5QmxvY2tlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFyZ2V0VXNlcklkOiBzdHJpbmcsXG4gIHNlc3Npb25Vc2VySWRPdmVycmlkZT86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKHNlc3Npb25Vc2VySWRPdmVycmlkZSB8fCAnJykgfHwgcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRVc2VySWQgPSBwYXJzZUlkKHRhcmdldFVzZXJJZCk7XG5cbiAgaWYoIXNlc3Npb25Vc2VySWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRVc2VySWQgfHwgc2Vzc2lvblVzZXJJZCA9PT0gbm9ybWFsaXplZFRhcmdldFVzZXJJZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IFtvdXRib3VuZEJsb2NrLCBpbmJvdW5kQmxvY2tdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuVVNFUlMsXG4gICAgICBzZXNzaW9uVXNlcklkLFxuICAgICAgQ09MTEVDVElPTlMuVVNFUlMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0VXNlcklkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkJMT0NLXG4gICAgKSxcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFVzZXJJZCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgc2Vzc2lvblVzZXJJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgIClcbiAgXSk7XG5cbiAgcmV0dXJuICEhb3V0Ym91bmRCbG9jayB8fCAhIWluYm91bmRCbG9jaztcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFyZ2V0UGVyc29uYUlkOiBzdHJpbmcsXG4gIHNlc3Npb25QZXJzb25hSWRPdmVycmlkZT86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKHNlc3Npb25QZXJzb25hSWRPdmVycmlkZSB8fCAnJykgfHwgYXdhaXQgZ2V0U2Vzc2lvblBlcnNvbmFJZChjb250ZXh0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCA9IHBhcnNlSWQodGFyZ2V0UGVyc29uYUlkKTtcblxuICBpZighc2Vzc2lvblBlcnNvbmFJZCB8fCAhbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCB8fCBzZXNzaW9uUGVyc29uYUlkID09PSBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBbdGFyZ2V0VXNlcklkLCBvdXRib3VuZEJsb2NrLCBpbmJvdW5kQmxvY2tdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldFBlcnNvbmFPd25lclVzZXJJZChjb250ZXh0LCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkKSxcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgc2Vzc2lvblBlcnNvbmFJZCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgICApXG4gIF0pO1xuXG4gIGlmKCEhb3V0Ym91bmRCbG9jayB8fCAhIWluYm91bmRCbG9jaykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYodGFyZ2V0VXNlcklkICYmIHNlc3Npb25Vc2VySWQpIHtcbiAgICByZXR1cm4gaXNVc2VyVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgdGFyZ2V0VXNlcklkLCBzZXNzaW9uVXNlcklkKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhcmdldFBlcnNvbmFJZDogc3RyaW5nLFxuICBzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGU/OiBzdHJpbmdcbik6IFByb21pc2U8UGljazxQZXJzb25hVHlwZSwgJ2lzQmxvY2tlZCcgfCAnaXNGb2xsb3dlZEJ5JyB8ICdpc0ZvbGxvd2luZycgfCAnaXNGcmllbmQnPj4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUgfHwgJycpIHx8IGF3YWl0IGdldFNlc3Npb25QZXJzb25hSWQoY29udGV4dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgPSBwYXJzZUlkKHRhcmdldFBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCA9PT0gbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0Jsb2NrZWQ6IGZhbHNlLFxuICAgICAgaXNGb2xsb3dlZEJ5OiBmYWxzZSxcbiAgICAgIGlzRm9sbG93aW5nOiBmYWxzZSxcbiAgICAgIGlzRnJpZW5kOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvdXRib3VuZEJsb2NrID0gYXdhaXQgZ2V0Q29ubmVjdGlvbihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgKTtcblxuICBpZihhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLCBzZXNzaW9uUGVyc29uYUlkKSkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0Jsb2NrZWQ6ICEhb3V0Ym91bmRCbG9jayxcbiAgICAgIGlzRm9sbG93ZWRCeTogZmFsc2UsXG4gICAgICBpc0ZvbGxvd2luZzogZmFsc2UsXG4gICAgICBpc0ZyaWVuZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgW291dGJvdW5kQ29ubmVjdGlvbiwgaW5ib3VuZENvbm5lY3Rpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuRk9MTE9XXG4gICAgKVxuICBdKTtcbiAgY29uc3QgaXNGb2xsb3dpbmcgPSAhIW91dGJvdW5kQ29ubmVjdGlvbjtcbiAgY29uc3QgaXNGb2xsb3dlZEJ5ID0gISFpbmJvdW5kQ29ubmVjdGlvbjtcblxuICByZXR1cm4ge1xuICAgIGlzQmxvY2tlZDogZmFsc2UsXG4gICAgaXNGb2xsb3dlZEJ5LFxuICAgIGlzRm9sbG93aW5nLFxuICAgIGlzRnJpZW5kOiBpc0ZvbGxvd2luZyAmJiBpc0ZvbGxvd2VkQnlcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hRm9sbG93ZXJDb3VudCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hRm9sbG93ZXJDb3VudCc7XG4gIGNvbnN0IGZvcm1hdFBlcnNvbmFJZCA9IHBhcnNlSWQocGVyc29uYUlkKTtcblxuICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gO1xuICAgIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgaGMgSU4gaGFzQ29ubmVjdGlvblxuICAgICAgICBGSUxURVIgaGMuX3RvID09ICR7cGVyc29uYURvY0lkfVxuICAgICAgICBGSUxURVIgaGMudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICAgIFJFVFVSTiBjb3VudFxuICAgIGA7XG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHFyeSk7XG4gICAgcmV0dXJuIE51bWJlcihhd2FpdCBjdXJzb3IubmV4dCgpIHx8IDApO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtwZXJzb25hSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hRm9sbG93aW5nQ291bnQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUZvbGxvd2luZ0NvdW50JztcbiAgY29uc3QgZm9ybWF0UGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gIGlmKCFmb3JtYXRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcGVyc29uYURvY0lkID0gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7Zm9ybWF0UGVyc29uYUlkfWA7XG4gICAgY29uc3QgcXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiBoYyBJTiBoYXNDb25uZWN0aW9uXG4gICAgICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3BlcnNvbmFEb2NJZH1cbiAgICAgICAgRklMVEVSIGhjLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICBSRVRVUk4gY291bnRcbiAgICBgO1xuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICAgIHJldHVybiBOdW1iZXIoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAwKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBnZXRQZXJzb25hQnlLZXkgPSBhc3luYyAoZGF0YWJhc2VOYW1lOiBzdHJpbmcsIHBlcnNvbmFJZDogc3RyaW5nKTogUHJvbWlzZTxQZXJzb25hVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgcXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcGVyc29uYSBJTiAke3BlcnNvbmFzQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBwZXJzb25hLl9rZXkgPT0gJHtwZXJzb25hSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gcGVyc29uYVxuICBgO1xuICBjb25zdCBjdXJzb3IgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHFyeSk7XG4gIHJldHVybiBjdXJzb3IubmV4dCgpO1xufTtcblxuY29uc3QgZm9ybWF0UGVyc29uYVJlc3VsdCA9IChwZXJzb25hOiBQZXJzb25hVHlwZSB8IG51bGwgfCB1bmRlZmluZWQsIGZhbGxiYWNrUGVyc29uYUlkID0gJycpOiBQZXJzb25hVHlwZSB8IG51bGwgPT4ge1xuICBpZighcGVyc29uYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wZXJzb25hLFxuICAgIHBlcnNvbmFJZDogKHBlcnNvbmEgYXMgYW55KS5fa2V5IHx8IGZhbGxiYWNrUGVyc29uYUlkXG4gIH0gYXMgUGVyc29uYVR5cGU7XG59O1xuXG5jb25zdCBub3JtYWxpemVSZWxhdGlvbkZpbHRlciA9IChyZWxhdGlvbjogdW5rbm93bik6IFBlcnNvbmFSZWxhdGlvbkZpbHRlciA9PiB7XG4gIGNvbnN0IHZhbHVlID0gU3RyaW5nKHJlbGF0aW9uIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICBpZih2YWx1ZSA9PT0gJ2ZvbGxvd2VycycgfHwgdmFsdWUgPT09ICdmcmllbmRzJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiAnZm9sbG93aW5nJztcbn07XG5cbmNvbnN0IHJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMgPSBhc3luYyAoXG4gIGZpbHRlcnM6IFBlcnNvbmFMaXN0RmlsdGVycyA9IHt9XG4pOiBQcm9taXNlPFJlcXVpcmVkPFBlcnNvbmFMaXN0RmlsdGVycz4+ID0+IHtcbiAgY29uc3QgZ2VuZGVycyA9IEFycmF5LmlzQXJyYXkoZmlsdGVycy5nZW5kZXIpXG4gICAgPyBmaWx0ZXJzLmdlbmRlci5tYXAoKGdlbmRlcikgPT4gcGFyc2VDaGFyKFN0cmluZyhnZW5kZXIgfHwgJycpLCAxKS50b1VwcGVyQ2FzZSgpKS5maWx0ZXIoQm9vbGVhbilcbiAgICA6IFtdO1xuXG4gIHJldHVybiB7XG4gICAgZ2VuZGVyOiBnZW5kZXJzXG4gIH07XG59O1xuXG5jb25zdCBoeWRyYXRlUGVyc29uYUxpc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYXM6IFBlcnNvbmFUeXBlW10gPSBbXSk6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBoeWRyYXRlZFBlcnNvbmFzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcGVyc29uYXMubWFwKGFzeW5jIChwZXJzb25hKSA9PiB7XG4gICAgICBjb25zdCBuZXh0UGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYT8uX2tleSB8fCBwZXJzb25hPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgICAgIGNvbnN0IGlzQmxvY2tlZCA9IG5leHRQZXJzb25hSWRcbiAgICAgICAgPyBhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBuZXh0UGVyc29uYUlkKVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgICBpZihpc0Jsb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBlcnNvbmFUYWdzID0gbmV4dFBlcnNvbmFJZCA/IGF3YWl0IGdldFRhZ0xpc3RCeUl0ZW0oY29udGV4dCwgYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7bmV4dFBlcnNvbmFJZH1gKSA6IFtdO1xuXG4gICAgICByZXR1cm4gZm9ybWF0UGVyc29uYVJlc3VsdCh7XG4gICAgICAgIC4uLihwZXJzb25hIHx8IHt9KSxcbiAgICAgICAgdGFnczogcGVyc29uYVRhZ3NcbiAgICAgIH0gYXMgUGVyc29uYVR5cGUsIG5leHRQZXJzb25hSWQpO1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIGh5ZHJhdGVkUGVyc29uYXMuZmlsdGVyKEJvb2xlYW4pIGFzIFBlcnNvbmFUeXBlW107XG59O1xuXG5jb25zdCBlbnN1cmVQZXJzb25hRWRnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHBlcnNvbmFEb2NJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX1BFUlNPTkEpO1xuICBjb25zdCBlZGdlID0gY3JlYXRlUGVyc29uYUVkZ2UoYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7dXNlcklkfWAsIHBlcnNvbmFEb2NJZCk7XG5cbiAgYXdhaXQgZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7b3ZlcndyaXRlTW9kZTogJ2lnbm9yZScsIHJldHVybk5ldzogdHJ1ZSwgc2lsZW50OiB0cnVlfSk7XG59O1xuXG5jb25zdCBzeW5jVXNlclBlcnNvbmEgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBwZXJzb25hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcGVyc29uYUlkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1c2VyVXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHBlcnNvbmFJZFxuICB9O1xuICBjb25zdCBtYXBwZWRJbWFnZUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYT8uaW1hZ2VJZCB8fCAnJykpO1xuXG4gIGlmKG1hcHBlZEltYWdlSWQpIHtcbiAgICB1c2VyVXBkYXRlLmltYWdlSWQgPSBtYXBwZWRJbWFnZUlkO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlVXNlclFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgVVBEQVRFICR7dXNlcklkfVxuICAgIFdJVEggJHt1c2VyVXBkYXRlfVxuICAgIElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHVzZXJDdXJzb3IgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkodXBkYXRlVXNlclFyeSk7XG4gIGF3YWl0IHVzZXJDdXJzb3IubmV4dCgpO1xufTtcblxuY29uc3QgcmVzb2x2ZVBlcnNvbmFPd25lciA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hOiBQZXJzb25hVHlwZSk6IFByb21pc2U8e1xuICBwZXJzb25hSWQ6IHN0cmluZztcbiAgdXNlcjogVXNlclR5cGUgfCBudWxsO1xuICB1c2VySWQ6IHN0cmluZztcbn0+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKTtcbiAgY29uc3QgZXhwbGljaXRVc2VySWQgPSBwYXJzZUlkKHBlcnNvbmE/LnVzZXJJZCB8fCAnJyk7XG4gIGNvbnN0IHVzZXJJZCA9IGV4cGxpY2l0VXNlcklkIHx8IHNlc3Npb25Vc2VySWQ7XG5cbiAgaWYoIXVzZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSB2YWxpZCB1c2VySWQgaXMgcmVxdWlyZWQgZm9yIHBlcnNvbmEgYWN0aW9ucy4nKTtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyQnlLZXkoY29udGV4dC5kYXRhYmFzZU5hbWUsIHVzZXJJZCk7XG4gIGNvbnN0IGxpbmtlZFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYT8ucGVyc29uYUlkIHx8IHVzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCBwZXJzb25hSWQgPSBsaW5rZWRQZXJzb25hSWQgfHwgY3JlYXRlSGFzaCh1c2VySWQpO1xuXG4gIHJldHVybiB7XG4gICAgcGVyc29uYUlkLFxuICAgIHVzZXIsXG4gICAgdXNlcklkXG4gIH07XG59O1xuXG5jb25zdCBzYXZlUGVyc29uYURvY3VtZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hOiBQZXJzb25hVHlwZSxcbiAgcGVyc29uYUlkOiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGJhc2VQZXJzb25hID0gYnVpbGRQZXJzb25hTXV0YXRpb24oey4uLnBlcnNvbmEsIHVzZXJJZH0pO1xuICBjb25zdCBjdXN0b21QZXJzb25hID0gYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24ocGVyc29uYSk7XG4gIGNvbnN0IHVwc2VydFBlcnNvbmFRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgVVBTRVJUIHtfa2V5OiAke3BlcnNvbmFJZH19XG4gICAgSU5TRVJUICR7e1xuICAgICAgX2tleTogcGVyc29uYUlkLFxuICAgICAgLi4uYmFzZVBlcnNvbmEsXG4gICAgICAuLi5jdXN0b21QZXJzb25hLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHVzZXJJZFxuICAgIH19XG4gICAgVVBEQVRFICR7e1xuICAgICAgLi4uYmFzZVBlcnNvbmEsXG4gICAgICAuLi5jdXN0b21QZXJzb25hLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHVzZXJJZFxuICAgIH19XG4gICAgSU4gJHtwZXJzb25hc0NvbGxlY3Rpb259XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBwZXJzb25hQ3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHVwc2VydFBlcnNvbmFRdWVyeSk7XG4gIHJldHVybiBhd2FpdCBwZXJzb25hQ3Vyc29yLm5leHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hQnlJZCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYVR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hQnlJZCc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRQZXJzb25hSWQgPSBwYXJzZUlkKHBlcnNvbmFJZCk7XG5cbiAgICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgZ2V0UGVyc29uYUJ5S2V5KGNvbnRleHQuZGF0YWJhc2VOYW1lLCBmb3JtYXRQZXJzb25hSWQpO1xuXG4gICAgaWYoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIGZvcm1hdFBlcnNvbmFJZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFt0YWdzLCByZWxhdGlvbnNoaXBTdGF0ZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZXRUYWdMaXN0QnlJdGVtKGNvbnRleHQsIGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gKSxcbiAgICAgIGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBmb3JtYXRQZXJzb25hSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gZm9ybWF0UGVyc29uYVJlc3VsdCh7XG4gICAgICAuLi5wZXJzb25hLFxuICAgICAgLi4ucmVsYXRpb25zaGlwU3RhdGUsXG4gICAgICB0YWdzXG4gICAgfSBhcyBQZXJzb25hVHlwZSwgZm9ybWF0UGVyc29uYUlkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmFJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBlcnNvbmFMaXN0QnlJZHMgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGVyc29uYUlkcyA9IEFycmF5LmlzQXJyYXkocGVyc29uYUlkcylcbiAgICA/IHBlcnNvbmFJZHMubWFwKChwZXJzb25hSWQpID0+IHBhcnNlSWQocGVyc29uYUlkKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcblxuICBpZighbm9ybWFsaXplZFBlcnNvbmFJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCBQcm9taXNlLmFsbChub3JtYWxpemVkUGVyc29uYUlkcy5tYXAoKHBlcnNvbmFJZCkgPT4gZ2V0UGVyc29uYUJ5SWQoY29udGV4dCwgcGVyc29uYUlkKSkpO1xuICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKEJvb2xlYW4pIGFzIFBlcnNvbmFUeXBlW107XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbSA9IDAsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgcmVsYXRpb24gPSAnZm9sbG93aW5nJyxcbiAgICB0byA9IDI0XG4gIH06IHtmcm9tPzogbnVtYmVyOyBwZXJzb25hSWQ/OiBzdHJpbmc7IHJlbGF0aW9uPzogUGVyc29uYVJlbGF0aW9uRmlsdGVyIHwgc3RyaW5nOyB0bz86IG51bWJlcn0gPSB7fVxuKTogUHJvbWlzZTxQZXJzb25hVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hTGlzdEJ5UmVsYXRpb24nO1xuICBjb25zdCBhY3RpdmVSZWxhdGlvbiA9IG5vcm1hbGl6ZVJlbGF0aW9uRmlsdGVyKHJlbGF0aW9uKTtcbiAgY29uc3QgbGltaXRGcm9tID0gTnVtYmVyKGZyb20pID49IDAgPyBOdW1iZXIoZnJvbSkgOiAwO1xuICBjb25zdCBsaW1pdFRvID0gTnVtYmVyKHRvKSA+IGxpbWl0RnJvbSA/IE51bWJlcih0bykgOiBsaW1pdEZyb20gKyAyNDtcbiAgY29uc3QgbGltaXRDb3VudCA9IGxpbWl0VG8gLSBsaW1pdEZyb207XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBhd2FpdCBnZXRTZXNzaW9uUGVyc29uYUlkKGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHNlc3Npb25QZXJzb25hRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtzZXNzaW9uUGVyc29uYUlkfWA7XG4gICAgY29uc3QgbmFtZWRQZXJzb25hRmlsdGVyID0gbGl0ZXJhbCgnRklMVEVSIExFTkdUSChUUklNKHBlcnNvbmEubmFtZSB8fCBcIlwiKSkgPiAwJyk7XG4gICAgY29uc3QgcmVsYXRpb25RdWVyeTogQXFsUXVlcnkgPSBhY3RpdmVSZWxhdGlvbiA9PT0gJ2ZvbGxvd2luZydcbiAgICAgID8gYXFsYFxuICAgICAgICBGT1IgY29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICBGSUxURVIgY29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICBGSUxURVIgU1RBUlRTX1dJVEgoY29ubmVjdGlvbi5fdG8sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoY29ubmVjdGlvbi5fdG8pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgU09SVCBMT1dFUihwZXJzb25hLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hLCB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBpc0ZvbGxvd2VkQnk6IExFTkdUSChcbiAgICAgICAgICAgICAgRk9SIHJlY2lwcm9jYWwgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC5fZnJvbSA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgICApID4gMCxcbiAgICAgICAgICAgIGlzRm9sbG93aW5nOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgIGBcbiAgICAgIDogYWN0aXZlUmVsYXRpb24gPT09ICdmb2xsb3dlcnMnXG4gICAgICAgID8gYXFsYFxuICAgICAgICBGT1IgY29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgRklMVEVSIGNvbm5lY3Rpb24udHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgRklMVEVSIFNUQVJUU19XSVRIKGNvbm5lY3Rpb24uX2Zyb20sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoY29ubmVjdGlvbi5fZnJvbSlcbiAgICAgICAgICBMRVQgb3duZXIgPSBET0NVTUVOVCgke3VzZXJzQ29sbGVjdGlvbn0sIHBlcnNvbmEudXNlcklkKVxuICAgICAgICAgIExFVCBwZXJzb25hQmlydGhkYXRlID0gVE9fTlVNQkVSKG93bmVyLmJpcnRoZGF0ZSB8fCAwKVxuICAgICAgICAgIExFVCBpc0ZvbGxvd2luZyA9IExFTkdUSChcbiAgICAgICAgICAgIEZPUiByZWNpcHJvY2FsIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwuX3RvID09IHBlcnNvbmEuX2lkXG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgU09SVCBMT1dFUihwZXJzb25hLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hLCB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBpc0ZvbGxvd2VkQnk6IHRydWUsXG4gICAgICAgICAgICBpc0ZvbGxvd2luZ1xuICAgICAgICAgIH0pXG4gICAgICBgXG4gICAgICAgIDogYXFsYFxuICAgICAgICBGT1IgZm9sbG93Q29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBmb2xsb3dDb25uZWN0aW9uLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICBGSUxURVIgZm9sbG93Q29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICBGSUxURVIgU1RBUlRTX1dJVEgoZm9sbG93Q29ubmVjdGlvbi5fdG8sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoZm9sbG93Q29ubmVjdGlvbi5fdG8pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBMRVQgaXNGb2xsb3dlZEJ5ID0gTEVOR1RIKFxuICAgICAgICAgICAgRk9SIHJlY2lwcm9jYWxDb25uZWN0aW9uIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsQ29ubmVjdGlvbi5fZnJvbSA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbENvbm5lY3Rpb24uX3RvID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWxDb25uZWN0aW9uLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgRklMVEVSIGlzRm9sbG93ZWRCeVxuICAgICAgICAgIFNPUlQgTE9XRVIocGVyc29uYS5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYSwge1xuICAgICAgICAgICAgYmlydGhkYXRlOiBwZXJzb25hQmlydGhkYXRlLFxuICAgICAgICAgICAgaXNGb2xsb3dlZEJ5OiB0cnVlLFxuICAgICAgICAgICAgaXNGb2xsb3dpbmc6IHRydWUsXG4gICAgICAgICAgICBpc0ZyaWVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICBgO1xuXG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocmVsYXRpb25RdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSkgYXMgUGVyc29uYVR5cGVbXTtcblxuICAgIHJldHVybiAoYXdhaXQgaHlkcmF0ZVBlcnNvbmFMaXN0KGNvbnRleHQsIHBlcnNvbmFzKSkubWFwKChwZXJzb25hKSA9PiAoe1xuICAgICAgLi4ucGVyc29uYSxcbiAgICAgIGlzRnJpZW5kOiBCb29sZWFuKHBlcnNvbmEuaXNGb2xsb3dpbmcgJiYgcGVyc29uYS5pc0ZvbGxvd2VkQnkpXG4gICAgfSkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmcm9tLCBwZXJzb25hSWQsIHJlbGF0aW9uOiBhY3RpdmVSZWxhdGlvbiwgdG99LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hTGlzdEJ5VGFncyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge3RhZ3MgPSBbXSwgdXNlcm5hbWUgPSAnJ306IHt0YWdzPzogc3RyaW5nW107IHVzZXJuYW1lPzogc3RyaW5nfSxcbiAge2ZpbHRlcnMgPSB7fSwgZnJvbSA9IDAsIHRvID0gMTB9OiB7ZmlsdGVycz86IFBlcnNvbmFMaXN0RmlsdGVyczsgZnJvbT86IG51bWJlcjsgdG8/OiBudW1iZXJ9ID0ge31cbik6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUxpc3RCeVRhZ3MnO1xuICBjb25zdCBmb3JtYXRUYWdzID0gQXJyYXkuaXNBcnJheSh0YWdzKVxuICAgID8gdGFncy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCB0YWdOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG5leHRUYWcgPSBTdHJpbmcodGFnTmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmKG5leHRUYWcpIHtcbiAgICAgICAgbGlzdC5wdXNoKG5leHRUYWcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9LCBbXSlcbiAgICA6IFtdO1xuICBjb25zdCBmb3JtYXRVc2VybmFtZSA9IFN0cmluZyh1c2VybmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGxpbWl0RnJvbSA9IE51bWJlcihmcm9tKSA+PSAwID8gTnVtYmVyKGZyb20pIDogMDtcbiAgY29uc3QgbGltaXRUbyA9IE51bWJlcih0bykgPiBsaW1pdEZyb20gPyBOdW1iZXIodG8pIDogbGltaXRGcm9tICsgMTA7XG4gIGNvbnN0IGxpbWl0Q291bnQgPSBsaW1pdFRvIC0gbGltaXRGcm9tO1xuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpO1xuICBjb25zdCB7Z2VuZGVyOiB0YXJnZXRHZW5kZXJzfSA9IGF3YWl0IHJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMoZmlsdGVycyk7XG5cbiAgaWYoIWZvcm1hdFRhZ3MubGVuZ3RoIHx8ICF0YXJnZXRHZW5kZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXNlcm5hbWVGaWx0ZXIgPSBmb3JtYXRVc2VybmFtZVxuICAgICAgPyBsaXRlcmFsKGBGSUxURVIgQ09OVEFJTlMoTE9XRVIocGVyc29uYS5uYW1lIHx8IFwiXCIpLCBcIiR7Zm9ybWF0VXNlcm5hbWV9XCIpYClcbiAgICAgIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgbmFtZWRQZXJzb25hRmlsdGVyID0gbGl0ZXJhbCgnRklMVEVSIExFTkdUSChUUklNKHBlcnNvbmEubmFtZSB8fCBcIlwiKSkgPiAwJyk7XG4gICAgY29uc3Qgc2Vzc2lvbkZpbHRlciA9IHNlc3Npb25Vc2VySWRcbiAgICAgID8gbGl0ZXJhbChgRklMVEVSIHBlcnNvbmEudXNlcklkICE9IFwiJHtzZXNzaW9uVXNlcklkfVwiYClcbiAgICAgIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgcGVyc29uYVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiB0IElOICR7dGFnc0NvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBQT1NJVElPTigke2Zvcm1hdFRhZ3N9LCBMT1dFUih0Lm5hbWUpKVxuICAgICAgICBGT1IgcGVyc29uYSwgZWRnZSBJTiBPVVRCT1VORCB0ICR7aXNUYWdnZWRDb2xsZWN0aW9ufVxuICAgICAgICAgIE9QVElPTlMge2JmczogdHJ1ZSwgdW5pcXVlVmVydGljZXM6IFwiZ2xvYmFsXCIsIHZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlBFUlNPTkFTfX1cbiAgICAgICAgICBMRVQgb3duZXIgPSBET0NVTUVOVCgke3VzZXJzQ29sbGVjdGlvbn0sIHBlcnNvbmEudXNlcklkKVxuICAgICAgICAgIExFVCBwZXJzb25hQmlydGhkYXRlID0gVE9fTlVNQkVSKG93bmVyLmJpcnRoZGF0ZSB8fCAwKVxuICAgICAgICAgIExFVCBwZXJzb25hR2VuZGVyID0gVVBQRVIocGVyc29uYS5nZW5kZXIgfHwgXCJcIilcbiAgICAgICAgICAke25hbWVkUGVyc29uYUZpbHRlcn1cbiAgICAgICAgICAke3VzZXJuYW1lRmlsdGVyfVxuICAgICAgICAgICR7c2Vzc2lvbkZpbHRlcn1cbiAgICAgICAgICBGSUxURVIgcGVyc29uYUJpcnRoZGF0ZSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYUJpcnRoZGF0ZSA8PSAke21pbmltdW1BZHVsdEJpcnRoZGF0ZX1cbiAgICAgICAgICBGSUxURVIgcGVyc29uYUdlbmRlciAhPSBcIlwiXG4gICAgICAgICAgRklMVEVSIFBPU0lUSU9OKCR7dGFyZ2V0R2VuZGVyc30sIHBlcnNvbmFHZW5kZXIpXG4gICAgICAgICAgQ09MTEVDVCBwZXJzb25hS2V5ID0gcGVyc29uYS5fa2V5IElOVE8gZ3JvdXBlZCA9IHtcbiAgICAgICAgICAgIGJpcnRoZGF0ZTogcGVyc29uYUJpcnRoZGF0ZSxcbiAgICAgICAgICAgIHBlcnNvbmEsXG4gICAgICAgICAgICBtYXRjaGVkVGFnOiBMT1dFUih0Lm5hbWUpXG4gICAgICAgICAgfVxuICAgICAgICAgIExFVCBtYXRjaGVkVGFncyA9IFVOSVFVRShncm91cGVkWypdLm1hdGNoZWRUYWcpXG4gICAgICAgICAgTEVUIGJpcnRoZGF0ZSA9IEZJUlNUKGdyb3VwZWRbKl0uYmlydGhkYXRlKVxuICAgICAgICAgIExFVCBwZXJzb25hRG9jID0gRklSU1QoZ3JvdXBlZFsqXS5wZXJzb25hKVxuICAgICAgICAgIFNPUlQgTEVOR1RIKG1hdGNoZWRUYWdzKSBERVNDLCBMT1dFUihwZXJzb25hRG9jLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hRG9jLCB7YmlydGhkYXRlLCBtYXRjaGVkVGFnQ291bnQ6IExFTkdUSChtYXRjaGVkVGFncyl9KVxuICAgIGA7XG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocGVyc29uYVF1ZXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKSBhcyBQZXJzb25hVHlwZVtdO1xuXG4gICAgcmV0dXJuIGh5ZHJhdGVQZXJzb25hTGlzdChjb250ZXh0LCBwZXJzb25hcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWx0ZXJzOiB7Z2VuZGVyOiB0YXJnZXRHZW5kZXJzfSwgZnJvbSwgdGFnczogZm9ybWF0VGFncywgdG8sIHVzZXJuYW1lOiBmb3JtYXRVc2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBlcnNvbmEgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQZXJzb25hJztcblxuICB0cnkge1xuICAgIGNvbnN0IHtwZXJzb25hSWQsIHVzZXJJZH0gPSBhd2FpdCByZXNvbHZlUGVyc29uYU93bmVyKGNvbnRleHQsIHBlcnNvbmEpO1xuICAgIGNvbnN0IHNhdmVkUGVyc29uYSA9IGF3YWl0IHNhdmVQZXJzb25hRG9jdW1lbnQoY29udGV4dCwgcGVyc29uYSwgcGVyc29uYUlkLCB1c2VySWQpO1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHNhdmVkUGVyc29uYT8uX2lkIHx8IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3NhdmVkUGVyc29uYT8uX2tleSB8fCBwZXJzb25hSWR9YDtcblxuICAgIGF3YWl0IGVuc3VyZVBlcnNvbmFFZGdlKGNvbnRleHQsIHVzZXJJZCwgcGVyc29uYURvY0lkKTtcbiAgICBhd2FpdCBzeW5jVXNlclBlcnNvbmEoY29udGV4dCwgdXNlcklkLCBzYXZlZFBlcnNvbmEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBlcnNvbmFJZCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHx8IGZvcm1hdFBlcnNvbmFSZXN1bHQoc2F2ZWRQZXJzb25hLCBwZXJzb25hSWQpIGFzIFBlcnNvbmFUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBlcnNvbmEgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVQZXJzb25hJztcblxuICB0cnkge1xuICAgIGNvbnN0IHtwZXJzb25hSWQsIHVzZXJJZH0gPSBhd2FpdCByZXNvbHZlUGVyc29uYU93bmVyKGNvbnRleHQsIHBlcnNvbmEpO1xuICAgIGNvbnN0IHNhdmVkUGVyc29uYSA9IGF3YWl0IHNhdmVQZXJzb25hRG9jdW1lbnQoY29udGV4dCwgcGVyc29uYSwgcGVyc29uYUlkLCB1c2VySWQpO1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHNhdmVkUGVyc29uYT8uX2lkIHx8IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3NhdmVkUGVyc29uYT8uX2tleSB8fCBwZXJzb25hSWR9YDtcblxuICAgIGF3YWl0IGVuc3VyZVBlcnNvbmFFZGdlKGNvbnRleHQsIHVzZXJJZCwgcGVyc29uYURvY0lkKTtcbiAgICBhd2FpdCBzeW5jVXNlclBlcnNvbmEoY29udGV4dCwgdXNlcklkLCBzYXZlZFBlcnNvbmEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBlcnNvbmFJZCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHx8IGZvcm1hdFBlcnNvbmFSZXN1bHQoc2F2ZWRQZXJzb25hLCBwZXJzb25hSWQpIGFzIFBlcnNvbmFUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZU51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwiYXFsIiwibGl0ZXJhbCIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJDb25uZWN0aW9uS2luZHMiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJ1c2VEYiIsImdldENvbm5lY3Rpb24iLCJnZXRUYWdMaXN0QnlJdGVtIiwiZXZlbnRDYXRlZ29yeSIsIm1pbmltdW1BZHVsdEFnZSIsIm1pbmltdW1BZHVsdEJpcnRoZGF0ZSIsIkRhdGUiLCJub3ciLCJwZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyIsInVzZXJzQ29sbGVjdGlvbiIsIlVTRVJTIiwicGVyc29uYXNDb2xsZWN0aW9uIiwiUEVSU09OQVMiLCJ0YWdzQ29sbGVjdGlvbiIsIlRBR1MiLCJpc1RhZ2dlZENvbGxlY3Rpb24iLCJJU19UQUdHRUQiLCJoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiIsIkhBU19DT05ORUNUSU9OIiwiY29uZmlndXJlUGVyc29uYUFjdGlvbnMiLCJleHRlbnNpb25zIiwiYnVpbGRQZXJzb25hTXV0YXRpb24iLCJwZXJzb25hIiwiY2l0eSIsImNvdW50cnkiLCJzdHJlZXQxIiwic3RyZWV0MiIsInppcCIsInN0YXRlIiwidGltZXpvbmUiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImdlbmRlciIsImltYWdlSWQiLCJuYW1lIiwibGF0aXR1ZGUiLCJsb2NhdGlvbiIsImxvbmdpdHVkZSIsInVzZXJJZCIsInVuZGVmaW5lZCIsInRvVXBwZXJDYXNlIiwiYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24iLCJmaWVsZHMiLCJtYXBDdXN0b21QZXJzb25hRmllbGRzIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsInZhbHVlIiwiY3JlYXRlUGVyc29uYUVkZ2UiLCJ1c2VyRG9jSWQiLCJwZXJzb25hRG9jSWQiLCJfZnJvbSIsIl9rZXkiLCJfdG8iLCJhZGRlZCIsImdldFVzZXJCeUtleSIsImRhdGFiYXNlTmFtZSIsInFyeSIsImN1cnNvciIsInF1ZXJ5IiwibmV4dCIsImdldFNlc3Npb25QZXJzb25hSWQiLCJjb250ZXh0IiwicGVyc29uYUlkIiwicmVxdWVzdGVkUGVyc29uYUlkIiwiU3RyaW5nIiwic2Vzc2lvblVzZXJJZCIsInNlc3Npb24iLCJzZXNzaW9uUGVyc29uYUlkIiwidXNlciIsImdldFBlcnNvbmFPd25lclVzZXJJZCIsIm5vcm1hbGl6ZWRQZXJzb25hSWQiLCJnZXRQZXJzb25hQnlLZXkiLCJpc1VzZXJWaXNpYmlsaXR5QmxvY2tlZCIsInRhcmdldFVzZXJJZCIsInNlc3Npb25Vc2VySWRPdmVycmlkZSIsIm5vcm1hbGl6ZWRUYXJnZXRVc2VySWQiLCJvdXRib3VuZEJsb2NrIiwiaW5ib3VuZEJsb2NrIiwiUHJvbWlzZSIsImFsbCIsIkJMT0NLIiwiaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQiLCJ0YXJnZXRQZXJzb25hSWQiLCJzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUiLCJub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiaXNCbG9ja2VkIiwiaXNGb2xsb3dlZEJ5IiwiaXNGb2xsb3dpbmciLCJpc0ZyaWVuZCIsIm91dGJvdW5kQ29ubmVjdGlvbiIsImluYm91bmRDb25uZWN0aW9uIiwiRk9MTE9XIiwiZ2V0UGVyc29uYUZvbGxvd2VyQ291bnQiLCJhY3Rpb24iLCJmb3JtYXRQZXJzb25hSWQiLCJOdW1iZXIiLCJlcnJvciIsImNhdGVnb3J5IiwicGFyYW1zIiwiREFUQUJBU0VfRVJST1IiLCJnZXRQZXJzb25hRm9sbG93aW5nQ291bnQiLCJmb3JtYXRQZXJzb25hUmVzdWx0IiwiZmFsbGJhY2tQZXJzb25hSWQiLCJub3JtYWxpemVSZWxhdGlvbkZpbHRlciIsInJlbGF0aW9uIiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVzb2x2ZVBlcnNvbmFMaXN0RmlsdGVycyIsImZpbHRlcnMiLCJnZW5kZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiZmlsdGVyIiwiQm9vbGVhbiIsImh5ZHJhdGVQZXJzb25hTGlzdCIsInBlcnNvbmFzIiwiaHlkcmF0ZWRQZXJzb25hcyIsIm5leHRQZXJzb25hSWQiLCJwZXJzb25hVGFncyIsInRhZ3MiLCJlbnN1cmVQZXJzb25hRWRnZSIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsIkhBU19QRVJTT05BIiwiZWRnZSIsInNhdmUiLCJvdmVyd3JpdGVNb2RlIiwicmV0dXJuTmV3Iiwic2lsZW50Iiwic3luY1VzZXJQZXJzb25hIiwidXNlclVwZGF0ZSIsIm1vZGlmaWVkIiwibWFwcGVkSW1hZ2VJZCIsInVwZGF0ZVVzZXJRcnkiLCJ1c2VyQ3Vyc29yIiwicmVzb2x2ZVBlcnNvbmFPd25lciIsImV4cGxpY2l0VXNlcklkIiwiRXJyb3IiLCJsaW5rZWRQZXJzb25hSWQiLCJzYXZlUGVyc29uYURvY3VtZW50IiwiYmFzZVBlcnNvbmEiLCJjdXN0b21QZXJzb25hIiwidXBzZXJ0UGVyc29uYVF1ZXJ5IiwicGVyc29uYUN1cnNvciIsImdldFBlcnNvbmFCeUlkIiwicmVsYXRpb25zaGlwU3RhdGUiLCJnZXRQZXJzb25hTGlzdEJ5SWRzIiwicGVyc29uYUlkcyIsIm5vcm1hbGl6ZWRQZXJzb25hSWRzIiwibGVuZ3RoIiwiZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uIiwiZnJvbSIsInRvIiwiYWN0aXZlUmVsYXRpb24iLCJsaW1pdEZyb20iLCJsaW1pdFRvIiwibGltaXRDb3VudCIsInNlc3Npb25QZXJzb25hRG9jSWQiLCJuYW1lZFBlcnNvbmFGaWx0ZXIiLCJyZWxhdGlvblF1ZXJ5IiwidGhlbiIsImdldFBlcnNvbmFMaXN0QnlUYWdzIiwidXNlcm5hbWUiLCJmb3JtYXRUYWdzIiwibGlzdCIsInRhZ05hbWUiLCJuZXh0VGFnIiwicHVzaCIsImZvcm1hdFVzZXJuYW1lIiwidGFyZ2V0R2VuZGVycyIsInVzZXJuYW1lRmlsdGVyIiwic2Vzc2lvbkZpbHRlciIsInBlcnNvbmFRdWVyeSIsImFkZFBlcnNvbmEiLCJzYXZlZFBlcnNvbmEiLCJfaWQiLCJ1cGRhdGVQZXJzb25hIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxVQUFVLEVBQ1ZDLGFBQWEsRUFDYkMsU0FBUyxFQUNUQyxPQUFPLEVBQ1BDLFFBQVEsRUFDUkMsV0FBVyxFQUNYQyxZQUFZLFFBQ1AsZUFBZTtBQUN0QixTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUVyQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsZUFBZSxRQUFPLGdDQUFnQztBQUM5RCxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxhQUFhLFFBQU8sbUJBQW1CO0FBQy9DLFNBQVFDLGdCQUFnQixRQUFPLFlBQVk7QUFTM0MsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyx3QkFBd0JDLEtBQUtDLEdBQUcs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
615
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvcGVyc29uYXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCxcbiAgcGFyc2VBcmFuZ29JZCxcbiAgcGFyc2VDaGFyLFxuICBwYXJzZUlkLFxuICBwYXJzZU51bSxcbiAgcGFyc2VTdHJpbmcsXG4gIHBhcnNlVmFyQ2hhclxufSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Nvbm5lY3Rpb25LaW5kc30gZnJvbSAnLi4vdHlwZXMvY29ubmVjdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0Q29ubmVjdGlvbn0gZnJvbSAnLi9jb25uZWN0aW9ucy5qcyc7XG5pbXBvcnQge2dldFRhZ0xpc3RCeUl0ZW19IGZyb20gJy4vdGFncy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge0VkZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7UGVyc29uYVR5cGV9IGZyb20gJy4uL3R5cGVzL3BlcnNvbmFzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3BlcnNvbmFzJztcbmNvbnN0IG1pbmltdW1BZHVsdEFnZSA9IDE4O1xuY29uc3QgbWluaW11bUFkdWx0QmlydGhkYXRlID0gRGF0ZS5ub3coKSAtIChtaW5pbXVtQWR1bHRBZ2UgKiAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcblxuZXhwb3J0IHR5cGUgUGVyc29uYUFjdGlvbkV4dGVuc2lvbnMgPSBSZWFkb25seTx7XG4gIHJlYWRvbmx5IG1hcEN1c3RvbVBlcnNvbmFGaWVsZHM/OiAocGVyc29uYTogUGVyc29uYVR5cGUpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufT47XG5cbmV4cG9ydCB0eXBlIFBlcnNvbmFMaXN0RmlsdGVycyA9IFJlYWRvbmx5PHtcbiAgcmVhZG9ubHkgZ2VuZGVyPzogc3RyaW5nW107XG59PjtcblxuZXhwb3J0IHR5cGUgUGVyc29uYVJlbGF0aW9uRmlsdGVyID0gJ2ZvbGxvd2VycycgfCAnZm9sbG93aW5nJyB8ICdmcmllbmRzJztcblxubGV0IHBlcnNvbmFBY3Rpb25FeHRlbnNpb25zOiBQZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyA9IHt9O1xuY29uc3QgdXNlcnNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5VU0VSUyk7XG5jb25zdCBwZXJzb25hc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKTtcbmNvbnN0IHRhZ3NDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5UQUdTKTtcbmNvbnN0IGlzVGFnZ2VkQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSVNfVEFHR0VEKTtcbmNvbnN0IGhhc0Nvbm5lY3Rpb25Db2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfQ09OTkVDVElPTik7XG5cbmV4cG9ydCBjb25zdCBjb25maWd1cmVQZXJzb25hQWN0aW9ucyA9IChleHRlbnNpb25zOiBQZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyA9IHt9KTogdm9pZCA9PiB7XG4gIHBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0gey4uLmV4dGVuc2lvbnN9O1xufTtcblxuY29uc3QgYnVpbGRQZXJzb25hTXV0YXRpb24gPSAocGVyc29uYTogUGVyc29uYVR5cGUpOiBQYXJ0aWFsPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgc3RyZWV0MSxcbiAgICBzdHJlZXQyLFxuICAgIHppcCxcbiAgICBzdGF0ZSxcbiAgICB0aW1lem9uZSxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgZ2VuZGVyLFxuICAgIGltYWdlSWQsXG4gICAgbmFtZSxcbiAgICBsYXRpdHVkZSxcbiAgICBsb2NhdGlvbixcbiAgICBsb25naXR1ZGUsXG4gICAgdXNlcklkXG4gIH0gPSBwZXJzb25hO1xuXG4gIHJldHVybiB7XG4gICAgY2l0eTogY2l0eSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGNpdHksIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBjb3VudHJ5OiBjb3VudHJ5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY291bnRyeSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGZpcnN0TmFtZTogZmlyc3ROYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoZmlyc3ROYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgZ2VuZGVyOiBnZW5kZXIgIT09IHVuZGVmaW5lZCA/IHBhcnNlQ2hhcihnZW5kZXIsIDEpLnRvVXBwZXJDYXNlKCkgOiB1bmRlZmluZWQsXG4gICAgaW1hZ2VJZDogaW1hZ2VJZCAhPT0gdW5kZWZpbmVkID8gcGFyc2VJZChpbWFnZUlkKSA6IHVuZGVmaW5lZCxcbiAgICBsYXN0TmFtZTogbGFzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihsYXN0TmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGxhdGl0dWRlOiBsYXRpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0obGF0aXR1ZGUsIDEyKSA6IHVuZGVmaW5lZCxcbiAgICBsb2NhdGlvbjogbG9jYXRpb24gIT09IHVuZGVmaW5lZCA/IHBhcnNlU3RyaW5nKGxvY2F0aW9uLCAxNjApIDogdW5kZWZpbmVkLFxuICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsb25naXR1ZGUsIDEyKSA6IHVuZGVmaW5lZCxcbiAgICBuYW1lOiBuYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIobmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHN0YXRlOiBzdGF0ZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0YXRlLCAyKSA6IHVuZGVmaW5lZCxcbiAgICBzdHJlZXQxOiBzdHJlZXQxICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RyZWV0MSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDI6IHN0cmVldDIgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQyLCAzMikgOiB1bmRlZmluZWQsXG4gICAgdGltZXpvbmU6IHRpbWV6b25lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIodGltZXpvbmUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB1c2VySWQ6IHVzZXJJZCAhPT0gdW5kZWZpbmVkID8gcGFyc2VJZCh1c2VySWQpIDogdW5kZWZpbmVkLFxuICAgIHppcDogemlwICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoemlwLCAxNikgOiB1bmRlZmluZWRcbiAgfTtcbn07XG5cbmNvbnN0IGJ1aWxkQ3VzdG9tUGVyc29uYU11dGF0aW9uID0gKHBlcnNvbmE6IFBlcnNvbmFUeXBlKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCBmaWVsZHMgPSBwZXJzb25hQWN0aW9uRXh0ZW5zaW9ucy5tYXBDdXN0b21QZXJzb25hRmllbGRzPy4ocGVyc29uYSkgfHwge307XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGZpZWxkcykucmVkdWNlKChyZXN1bHQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xufTtcblxuY29uc3QgY3JlYXRlUGVyc29uYUVkZ2UgPSAodXNlckRvY0lkOiBzdHJpbmcsIHBlcnNvbmFEb2NJZDogc3RyaW5nKTogRWRnZVR5cGUgPT4gKHtcbiAgX2Zyb206IHBhcnNlQXJhbmdvSWQodXNlckRvY0lkKSxcbiAgX2tleTogY3JlYXRlSGFzaChgcGVyc29uYS0ke3VzZXJEb2NJZH0tJHtwZXJzb25hRG9jSWR9YCksXG4gIF90bzogcGFyc2VBcmFuZ29JZChwZXJzb25hRG9jSWQpLFxuICBhZGRlZDogRGF0ZS5ub3coKVxufSk7XG5cbmNvbnN0IGdldFVzZXJCeUtleSA9IGFzeW5jIChkYXRhYmFzZU5hbWU6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPFVzZXJUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBxcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB1c2VyIElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSIHVzZXIuX2tleSA9PSAke3VzZXJJZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB1c2VyXG4gIGA7XG4gIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkocXJ5KTtcbiAgcmV0dXJuIGN1cnNvci5uZXh0KCk7XG59O1xuXG5jb25zdCBnZXRTZXNzaW9uUGVyc29uYUlkID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmFJZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHJlcXVlc3RlZFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG5cbiAgaWYocmVxdWVzdGVkUGVyc29uYUlkKSB7XG4gICAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBjdXJzb3IgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgICAgRk9SIHBlcnNvbmEgSU4gJHtwZXJzb25hc0NvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBwZXJzb25hLl9rZXkgPT0gJHtyZXF1ZXN0ZWRQZXJzb25hSWR9XG4gICAgICAgIEZJTFRFUiBwZXJzb25hLnVzZXJJZCA9PSAke3Nlc3Npb25Vc2VySWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHBlcnNvbmEuX2tleVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHBhcnNlSWQoU3RyaW5nKGF3YWl0IGN1cnNvci5uZXh0KCkgfHwgJycpKTtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZihzZXNzaW9uUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIHNlc3Npb25QZXJzb25hSWQ7XG4gIH1cblxuICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyQnlLZXkoY29udGV4dC5kYXRhYmFzZU5hbWUsIHNlc3Npb25Vc2VySWQpO1xuICByZXR1cm4gcGFyc2VJZChTdHJpbmcodXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYU93bmVyVXNlcklkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFBlcnNvbmFJZCA9IHBhcnNlSWQocGVyc29uYUlkKTtcblxuICBpZighbm9ybWFsaXplZFBlcnNvbmFJZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IHBlcnNvbmEgPSBhd2FpdCBnZXRQZXJzb25hQnlLZXkoY29udGV4dC5kYXRhYmFzZU5hbWUsIG5vcm1hbGl6ZWRQZXJzb25hSWQpO1xuICByZXR1cm4gcGFyc2VJZChTdHJpbmcocGVyc29uYT8udXNlcklkIHx8ICcnKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNVc2VyVmlzaWJpbGl0eUJsb2NrZWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhcmdldFVzZXJJZDogc3RyaW5nLFxuICBzZXNzaW9uVXNlcklkT3ZlcnJpZGU/OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChzZXNzaW9uVXNlcklkT3ZlcnJpZGUgfHwgJycpIHx8IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBub3JtYWxpemVkVGFyZ2V0VXNlcklkID0gcGFyc2VJZCh0YXJnZXRVc2VySWQpO1xuXG4gIGlmKCFzZXNzaW9uVXNlcklkIHx8ICFub3JtYWxpemVkVGFyZ2V0VXNlcklkIHx8IHNlc3Npb25Vc2VySWQgPT09IG5vcm1hbGl6ZWRUYXJnZXRVc2VySWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBbb3V0Ym91bmRCbG9jaywgaW5ib3VuZEJsb2NrXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgc2Vzc2lvblVzZXJJZCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFVzZXJJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5VU0VSUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRVc2VySWQsXG4gICAgICBDT0xMRUNUSU9OUy5VU0VSUyxcbiAgICAgIHNlc3Npb25Vc2VySWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgICApXG4gIF0pO1xuXG4gIHJldHVybiAhIW91dGJvdW5kQmxvY2sgfHwgISFpbmJvdW5kQmxvY2s7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhcmdldFBlcnNvbmFJZDogc3RyaW5nLFxuICBzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGU/OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUgfHwgJycpIHx8IGF3YWl0IGdldFNlc3Npb25QZXJzb25hSWQoY29udGV4dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgPSBwYXJzZUlkKHRhcmdldFBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCA9PT0gbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3QgW3RhcmdldFVzZXJJZCwgb3V0Ym91bmRCbG9jaywgaW5ib3VuZEJsb2NrXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRQZXJzb25hT3duZXJVc2VySWQoY29udGV4dCwgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgICApLFxuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkJMT0NLXG4gICAgKVxuICBdKTtcblxuICBpZighIW91dGJvdW5kQmxvY2sgfHwgISFpbmJvdW5kQmxvY2spIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmKHRhcmdldFVzZXJJZCAmJiBzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuIGlzVXNlclZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHRhcmdldFVzZXJJZCwgc2Vzc2lvblVzZXJJZCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0YXJnZXRQZXJzb25hSWQ6IHN0cmluZyxcbiAgc2Vzc2lvblBlcnNvbmFJZE92ZXJyaWRlPzogc3RyaW5nXG4pOiBQcm9taXNlPFBpY2s8UGVyc29uYVR5cGUsICdpc0Jsb2NrZWQnIHwgJ2lzRm9sbG93ZWRCeScgfCAnaXNGb2xsb3dpbmcnIHwgJ2lzRnJpZW5kJz4+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IHBhcnNlSWQoc2Vzc2lvblBlcnNvbmFJZE92ZXJyaWRlIHx8ICcnKSB8fCBhd2FpdCBnZXRTZXNzaW9uUGVyc29uYUlkKGNvbnRleHQpO1xuICBjb25zdCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkID0gcGFyc2VJZCh0YXJnZXRQZXJzb25hSWQpO1xuXG4gIGlmKCFzZXNzaW9uUGVyc29uYUlkIHx8ICFub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkIHx8IHNlc3Npb25QZXJzb25hSWQgPT09IG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNCbG9ja2VkOiBmYWxzZSxcbiAgICAgIGlzRm9sbG93ZWRCeTogZmFsc2UsXG4gICAgICBpc0ZvbGxvd2luZzogZmFsc2UsXG4gICAgICBpc0ZyaWVuZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb3V0Ym91bmRCbG9jayA9IGF3YWl0IGdldENvbm5lY3Rpb24oXG4gICAgY29udGV4dCxcbiAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgQ29ubmVjdGlvbktpbmRzLkJMT0NLXG4gICk7XG5cbiAgaWYoYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCwgc2Vzc2lvblBlcnNvbmFJZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNCbG9ja2VkOiAhIW91dGJvdW5kQmxvY2ssXG4gICAgICBpc0ZvbGxvd2VkQnk6IGZhbHNlLFxuICAgICAgaXNGb2xsb3dpbmc6IGZhbHNlLFxuICAgICAgaXNGcmllbmQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IFtvdXRib3VuZENvbm5lY3Rpb24sIGluYm91bmRDb25uZWN0aW9uXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgc2Vzc2lvblBlcnNvbmFJZCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5GT0xMT1dcbiAgICApLFxuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuICAgIClcbiAgXSk7XG4gIGNvbnN0IGlzRm9sbG93aW5nID0gISFvdXRib3VuZENvbm5lY3Rpb247XG4gIGNvbnN0IGlzRm9sbG93ZWRCeSA9ICEhaW5ib3VuZENvbm5lY3Rpb247XG5cbiAgcmV0dXJuIHtcbiAgICBpc0Jsb2NrZWQ6IGZhbHNlLFxuICAgIGlzRm9sbG93ZWRCeSxcbiAgICBpc0ZvbGxvd2luZyxcbiAgICBpc0ZyaWVuZDogaXNGb2xsb3dpbmcgJiYgaXNGb2xsb3dlZEJ5XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUZvbGxvd2VyQ291bnQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUZvbGxvd2VyQ291bnQnO1xuICBjb25zdCBmb3JtYXRQZXJzb25hSWQgPSBwYXJzZUlkKHBlcnNvbmFJZCk7XG5cbiAgaWYoIWZvcm1hdFBlcnNvbmFJZCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwZXJzb25hRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtmb3JtYXRQZXJzb25hSWR9YDtcbiAgICBjb25zdCBxcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgRk9SIGhjIElOIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgRklMVEVSIGhjLl90byA9PSAke3BlcnNvbmFEb2NJZH1cbiAgICAgICAgRklMVEVSIGhjLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICBSRVRVUk4gY291bnRcbiAgICBgO1xuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICAgIHJldHVybiBOdW1iZXIoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAwKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUZvbGxvd2luZ0NvdW50ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmFJZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBlcnNvbmFGb2xsb3dpbmdDb3VudCc7XG4gIGNvbnN0IGZvcm1hdFBlcnNvbmFJZCA9IHBhcnNlSWQocGVyc29uYUlkKTtcblxuICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gO1xuICAgIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgaGMgSU4gaGFzQ29ubmVjdGlvblxuICAgICAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHtwZXJzb25hRG9jSWR9XG4gICAgICAgIEZJTFRFUiBoYy50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgUkVUVVJOIGNvdW50XG4gICAgYDtcbiAgICBjb25zdCBjdXJzb3IgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXJ5KTtcbiAgICByZXR1cm4gTnVtYmVyKGF3YWl0IGN1cnNvci5uZXh0KCkgfHwgMCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmFJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZ2V0UGVyc29uYUJ5S2V5ID0gYXN5bmMgKGRhdGFiYXNlTmFtZTogc3RyaW5nLCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYVR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHBlcnNvbmEgSU4gJHtwZXJzb25hc0NvbGxlY3Rpb259XG4gICAgICBGSUxURVIgcGVyc29uYS5fa2V5ID09ICR7cGVyc29uYUlkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHBlcnNvbmFcbiAgYDtcbiAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICByZXR1cm4gY3Vyc29yLm5leHQoKTtcbn07XG5cbmNvbnN0IGZvcm1hdFBlcnNvbmFSZXN1bHQgPSAocGVyc29uYTogUGVyc29uYVR5cGUgfCBudWxsIHwgdW5kZWZpbmVkLCBmYWxsYmFja1BlcnNvbmFJZCA9ICcnKTogUGVyc29uYVR5cGUgfCBudWxsID0+IHtcbiAgaWYoIXBlcnNvbmEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ucGVyc29uYSxcbiAgICBwZXJzb25hSWQ6IChwZXJzb25hIGFzIGFueSkuX2tleSB8fCBmYWxsYmFja1BlcnNvbmFJZFxuICB9IGFzIFBlcnNvbmFUeXBlO1xufTtcblxuY29uc3Qgbm9ybWFsaXplUmVsYXRpb25GaWx0ZXIgPSAocmVsYXRpb246IHVua25vd24pOiBQZXJzb25hUmVsYXRpb25GaWx0ZXIgPT4ge1xuICBjb25zdCB2YWx1ZSA9IFN0cmluZyhyZWxhdGlvbiB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYodmFsdWUgPT09ICdmb2xsb3dlcnMnIHx8IHZhbHVlID09PSAnZnJpZW5kcycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gJ2ZvbGxvd2luZyc7XG59O1xuXG5jb25zdCByZXNvbHZlUGVyc29uYUxpc3RGaWx0ZXJzID0gYXN5bmMgKFxuICBmaWx0ZXJzOiBQZXJzb25hTGlzdEZpbHRlcnMgPSB7fVxuKTogUHJvbWlzZTxSZXF1aXJlZDxQZXJzb25hTGlzdEZpbHRlcnM+PiA9PiB7XG4gIGNvbnN0IGdlbmRlcnMgPSBBcnJheS5pc0FycmF5KGZpbHRlcnMuZ2VuZGVyKVxuICAgID8gZmlsdGVycy5nZW5kZXIubWFwKChnZW5kZXIpID0+IHBhcnNlQ2hhcihTdHJpbmcoZ2VuZGVyIHx8ICcnKSwgMSkudG9VcHBlckNhc2UoKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcblxuICByZXR1cm4ge1xuICAgIGdlbmRlcjogZ2VuZGVyc1xuICB9O1xufTtcblxuY29uc3QgaHlkcmF0ZVBlcnNvbmFMaXN0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmFzOiBQZXJzb25hVHlwZVtdID0gW10pOiBQcm9taXNlPFBlcnNvbmFUeXBlW10+ID0+IHtcbiAgY29uc3QgaHlkcmF0ZWRQZXJzb25hcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHBlcnNvbmFzLm1hcChhc3luYyAocGVyc29uYSkgPT4ge1xuICAgICAgY29uc3QgbmV4dFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYT8ucGVyc29uYUlkIHx8ICcnKSk7XG4gICAgICBjb25zdCBpc0Jsb2NrZWQgPSBuZXh0UGVyc29uYUlkXG4gICAgICAgID8gYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgbmV4dFBlcnNvbmFJZClcbiAgICAgICAgOiBmYWxzZTtcblxuICAgICAgaWYoaXNCbG9ja2VkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwZXJzb25hVGFncyA9IG5leHRQZXJzb25hSWQgPyBhd2FpdCBnZXRUYWdMaXN0QnlJdGVtKGNvbnRleHQsIGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke25leHRQZXJzb25hSWR9YCkgOiBbXTtcblxuICAgICAgcmV0dXJuIGZvcm1hdFBlcnNvbmFSZXN1bHQoe1xuICAgICAgICAuLi4ocGVyc29uYSB8fCB7fSksXG4gICAgICAgIHRhZ3M6IHBlcnNvbmFUYWdzXG4gICAgICB9IGFzIFBlcnNvbmFUeXBlLCBuZXh0UGVyc29uYUlkKTtcbiAgICB9KVxuICApO1xuXG4gIHJldHVybiBoeWRyYXRlZFBlcnNvbmFzLmZpbHRlcihCb29sZWFuKSBhcyBQZXJzb25hVHlwZVtdO1xufTtcblxuY29uc3QgZW5zdXJlUGVyc29uYUVkZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBwZXJzb25hRG9jSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKEVER0VTLkhBU19QRVJTT05BKTtcbiAgY29uc3QgZWRnZSA9IGNyZWF0ZVBlcnNvbmFFZGdlKGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3VzZXJJZH1gLCBwZXJzb25hRG9jSWQpO1xuXG4gIGF3YWl0IGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge292ZXJ3cml0ZU1vZGU6ICdpZ25vcmUnLCByZXR1cm5OZXc6IHRydWUsIHNpbGVudDogdHJ1ZX0pO1xufTtcblxuY29uc3Qgc3luY1VzZXJQZXJzb25hID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgcGVyc29uYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHBlcnNvbmFJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgdXNlclVwZGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBwZXJzb25hSWRcbiAgfTtcbiAgY29uc3QgbWFwcGVkSW1hZ2VJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmE/LmltYWdlSWQgfHwgJycpKTtcblxuICBpZihtYXBwZWRJbWFnZUlkKSB7XG4gICAgdXNlclVwZGF0ZS5pbWFnZUlkID0gbWFwcGVkSW1hZ2VJZDtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZVVzZXJRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIFVQREFURSAke3VzZXJJZH1cbiAgICBXSVRIICR7dXNlclVwZGF0ZX1cbiAgICBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCB1c2VyQ3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHVwZGF0ZVVzZXJRcnkpO1xuICBhd2FpdCB1c2VyQ3Vyc29yLm5leHQoKTtcbn07XG5cbmNvbnN0IHJlc29sdmVQZXJzb25hT3duZXIgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPHtcbiAgcGVyc29uYUlkOiBzdHJpbmc7XG4gIHVzZXI6IFVzZXJUeXBlIHwgbnVsbDtcbiAgdXNlcklkOiBzdHJpbmc7XG59PiA9PiB7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJyk7XG4gIGNvbnN0IGV4cGxpY2l0VXNlcklkID0gcGFyc2VJZChwZXJzb25hPy51c2VySWQgfHwgJycpO1xuICBjb25zdCB1c2VySWQgPSBleHBsaWNpdFVzZXJJZCB8fCBzZXNzaW9uVXNlcklkO1xuXG4gIGlmKCF1c2VySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgdmFsaWQgdXNlcklkIGlzIHJlcXVpcmVkIGZvciBwZXJzb25hIGFjdGlvbnMuJyk7XG4gIH1cblxuICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlckJ5S2V5KGNvbnRleHQuZGF0YWJhc2VOYW1lLCB1c2VySWQpO1xuICBjb25zdCBsaW5rZWRQZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhwZXJzb25hPy5fa2V5IHx8IHBlcnNvbmE/LnBlcnNvbmFJZCB8fCB1c2VyPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgY29uc3QgcGVyc29uYUlkID0gbGlua2VkUGVyc29uYUlkIHx8IGNyZWF0ZUhhc2godXNlcklkKTtcblxuICByZXR1cm4ge1xuICAgIHBlcnNvbmFJZCxcbiAgICB1c2VyLFxuICAgIHVzZXJJZFxuICB9O1xufTtcblxuY29uc3Qgc2F2ZVBlcnNvbmFEb2N1bWVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYTogUGVyc29uYVR5cGUsXG4gIHBlcnNvbmFJZDogc3RyaW5nLFxuICB1c2VySWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxQZXJzb25hVHlwZT4gPT4ge1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBiYXNlUGVyc29uYSA9IGJ1aWxkUGVyc29uYU11dGF0aW9uKHsuLi5wZXJzb25hLCB1c2VySWR9KTtcbiAgY29uc3QgY3VzdG9tUGVyc29uYSA9IGJ1aWxkQ3VzdG9tUGVyc29uYU11dGF0aW9uKHBlcnNvbmEpO1xuICBjb25zdCB1cHNlcnRQZXJzb25hUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHtwZXJzb25hSWR9fVxuICAgIElOU0VSVCAke3tcbiAgICAgIF9rZXk6IHBlcnNvbmFJZCxcbiAgICAgIC4uLmJhc2VQZXJzb25hLFxuICAgICAgLi4uY3VzdG9tUGVyc29uYSxcbiAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICB1c2VySWRcbiAgICB9fVxuICAgIFVQREFURSAke3tcbiAgICAgIC4uLmJhc2VQZXJzb25hLFxuICAgICAgLi4uY3VzdG9tUGVyc29uYSxcbiAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICB1c2VySWRcbiAgICB9fVxuICAgIElOICR7cGVyc29uYXNDb2xsZWN0aW9ufVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3QgcGVyc29uYUN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeSh1cHNlcnRQZXJzb25hUXVlcnkpO1xuICByZXR1cm4gYXdhaXQgcGVyc29uYUN1cnNvci5uZXh0KCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUJ5SWQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNvbmFUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUJ5SWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0UGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gICAgaWYoIWZvcm1hdFBlcnNvbmFJZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IGdldFBlcnNvbmFCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgZm9ybWF0UGVyc29uYUlkKTtcblxuICAgIGlmKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZihhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBmb3JtYXRQZXJzb25hSWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBbdGFncywgcmVsYXRpb25zaGlwU3RhdGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZ2V0VGFnTGlzdEJ5SXRlbShjb250ZXh0LCBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtmb3JtYXRQZXJzb25hSWR9YCksXG4gICAgICBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUoY29udGV4dCwgZm9ybWF0UGVyc29uYUlkKVxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGZvcm1hdFBlcnNvbmFSZXN1bHQoe1xuICAgICAgLi4ucGVyc29uYSxcbiAgICAgIC4uLnJlbGF0aW9uc2hpcFN0YXRlLFxuICAgICAgdGFnc1xuICAgIH0gYXMgUGVyc29uYVR5cGUsIGZvcm1hdFBlcnNvbmFJZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtwZXJzb25hSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hTGlzdEJ5SWRzID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmFJZHM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPFBlcnNvbmFUeXBlW10+ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFBlcnNvbmFJZHMgPSBBcnJheS5pc0FycmF5KHBlcnNvbmFJZHMpXG4gICAgPyBwZXJzb25hSWRzLm1hcCgocGVyc29uYUlkKSA9PiBwYXJzZUlkKHBlcnNvbmFJZCkpLmZpbHRlcihCb29sZWFuKVxuICAgIDogW107XG5cbiAgaWYoIW5vcm1hbGl6ZWRQZXJzb25hSWRzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgUHJvbWlzZS5hbGwobm9ybWFsaXplZFBlcnNvbmFJZHMubWFwKChwZXJzb25hSWQpID0+IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpKTtcbiAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlcihCb29sZWFuKSBhcyBQZXJzb25hVHlwZVtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBlcnNvbmFMaXN0QnlSZWxhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb20gPSAwLFxuICAgIHBlcnNvbmFJZCA9ICcnLFxuICAgIHJlbGF0aW9uID0gJ2ZvbGxvd2luZycsXG4gICAgdG8gPSAyNFxuICB9OiB7ZnJvbT86IG51bWJlcjsgcGVyc29uYUlkPzogc3RyaW5nOyByZWxhdGlvbj86IFBlcnNvbmFSZWxhdGlvbkZpbHRlciB8IHN0cmluZzsgdG8/OiBudW1iZXJ9ID0ge31cbik6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uJztcbiAgY29uc3QgYWN0aXZlUmVsYXRpb24gPSBub3JtYWxpemVSZWxhdGlvbkZpbHRlcihyZWxhdGlvbik7XG4gIGNvbnN0IGxpbWl0RnJvbSA9IE51bWJlcihmcm9tKSA+PSAwID8gTnVtYmVyKGZyb20pIDogMDtcbiAgY29uc3QgbGltaXRUbyA9IE51bWJlcih0bykgPiBsaW1pdEZyb20gPyBOdW1iZXIodG8pIDogbGltaXRGcm9tICsgMjQ7XG4gIGNvbnN0IGxpbWl0Q291bnQgPSBsaW1pdFRvIC0gbGltaXRGcm9tO1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gYXdhaXQgZ2V0U2Vzc2lvblBlcnNvbmFJZChjb250ZXh0LCBwZXJzb25hSWQpO1xuXG4gIGlmKCFzZXNzaW9uUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzZXNzaW9uUGVyc29uYURvY0lkID0gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7c2Vzc2lvblBlcnNvbmFJZH1gO1xuICAgIGNvbnN0IG5hbWVkUGVyc29uYUZpbHRlciA9IGxpdGVyYWwoJ0ZJTFRFUiBMRU5HVEgoVFJJTShwZXJzb25hLm5hbWUgfHwgXCJcIikpID4gMCcpO1xuICAgIGNvbnN0IHJlbGF0aW9uUXVlcnk6IEFxbFF1ZXJ5ID0gYWN0aXZlUmVsYXRpb24gPT09ICdmb2xsb3dpbmcnXG4gICAgICA/IGFxbGBcbiAgICAgICAgRk9SIGNvbm5lY3Rpb24gSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgY29ubmVjdGlvbi5fZnJvbSA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgRklMVEVSIGNvbm5lY3Rpb24udHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgRklMVEVSIFNUQVJUU19XSVRIKGNvbm5lY3Rpb24uX3RvLCAke2Ake0NPTExFQ1RJT05TLlBFUlNPTkFTfS9gfSlcbiAgICAgICAgICBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKGNvbm5lY3Rpb24uX3RvKVxuICAgICAgICAgIExFVCBvd25lciA9IERPQ1VNRU5UKCR7dXNlcnNDb2xsZWN0aW9ufSwgcGVyc29uYS51c2VySWQpXG4gICAgICAgICAgTEVUIHBlcnNvbmFCaXJ0aGRhdGUgPSBUT19OVU1CRVIob3duZXIuYmlydGhkYXRlIHx8IDApXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmEgIT0gbnVsbFxuICAgICAgICAgICR7bmFtZWRQZXJzb25hRmlsdGVyfVxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlID4gMFxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlIDw9ICR7bWluaW11bUFkdWx0QmlydGhkYXRlfVxuICAgICAgICAgIFNPUlQgTE9XRVIocGVyc29uYS5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYSwge1xuICAgICAgICAgICAgYmlydGhkYXRlOiBwZXJzb25hQmlydGhkYXRlLFxuICAgICAgICAgICAgaXNGb2xsb3dlZEJ5OiBMRU5HVEgoXG4gICAgICAgICAgICAgIEZPUiByZWNpcHJvY2FsIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwuX2Zyb20gPT0gcGVyc29uYS5faWRcbiAgICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC5fdG8gPT0gJHtzZXNzaW9uUGVyc29uYURvY0lkfVxuICAgICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICAgICAgICBSRVRVUk4gMVxuICAgICAgICAgICAgKSA+IDAsXG4gICAgICAgICAgICBpc0ZvbGxvd2luZzogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICBgXG4gICAgICA6IGFjdGl2ZVJlbGF0aW9uID09PSAnZm9sbG93ZXJzJ1xuICAgICAgICA/IGFxbGBcbiAgICAgICAgRk9SIGNvbm5lY3Rpb24gSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgY29ubmVjdGlvbi5fdG8gPT0gJHtzZXNzaW9uUGVyc29uYURvY0lkfVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgIEZJTFRFUiBTVEFSVFNfV0lUSChjb25uZWN0aW9uLl9mcm9tLCAke2Ake0NPTExFQ1RJT05TLlBFUlNPTkFTfS9gfSlcbiAgICAgICAgICBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKGNvbm5lY3Rpb24uX2Zyb20pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBMRVQgaXNGb2xsb3dpbmcgPSBMRU5HVEgoXG4gICAgICAgICAgICBGT1IgcmVjaXByb2NhbCBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC5fZnJvbSA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl90byA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICBSRVRVUk4gMVxuICAgICAgICAgICkgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmEgIT0gbnVsbFxuICAgICAgICAgICR7bmFtZWRQZXJzb25hRmlsdGVyfVxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlID4gMFxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlIDw9ICR7bWluaW11bUFkdWx0QmlydGhkYXRlfVxuICAgICAgICAgIFNPUlQgTE9XRVIocGVyc29uYS5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYSwge1xuICAgICAgICAgICAgYmlydGhkYXRlOiBwZXJzb25hQmlydGhkYXRlLFxuICAgICAgICAgICAgaXNGb2xsb3dlZEJ5OiB0cnVlLFxuICAgICAgICAgICAgaXNGb2xsb3dpbmdcbiAgICAgICAgICB9KVxuICAgICAgYFxuICAgICAgICA6IGFxbGBcbiAgICAgICAgRk9SIGZvbGxvd0Nvbm5lY3Rpb24gSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgZm9sbG93Q29ubmVjdGlvbi5fZnJvbSA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgRklMVEVSIGZvbGxvd0Nvbm5lY3Rpb24udHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgRklMVEVSIFNUQVJUU19XSVRIKGZvbGxvd0Nvbm5lY3Rpb24uX3RvLCAke2Ake0NPTExFQ1RJT05TLlBFUlNPTkFTfS9gfSlcbiAgICAgICAgICBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKGZvbGxvd0Nvbm5lY3Rpb24uX3RvKVxuICAgICAgICAgIExFVCBvd25lciA9IERPQ1VNRU5UKCR7dXNlcnNDb2xsZWN0aW9ufSwgcGVyc29uYS51c2VySWQpXG4gICAgICAgICAgTEVUIHBlcnNvbmFCaXJ0aGRhdGUgPSBUT19OVU1CRVIob3duZXIuYmlydGhkYXRlIHx8IDApXG4gICAgICAgICAgTEVUIGlzRm9sbG93ZWRCeSA9IExFTkdUSChcbiAgICAgICAgICAgIEZPUiByZWNpcHJvY2FsQ29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbENvbm5lY3Rpb24uX2Zyb20gPT0gcGVyc29uYS5faWRcbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWxDb25uZWN0aW9uLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsQ29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICBSRVRVUk4gMVxuICAgICAgICAgICkgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmEgIT0gbnVsbFxuICAgICAgICAgICR7bmFtZWRQZXJzb25hRmlsdGVyfVxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlID4gMFxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlIDw9ICR7bWluaW11bUFkdWx0QmlydGhkYXRlfVxuICAgICAgICAgIEZJTFRFUiBpc0ZvbGxvd2VkQnlcbiAgICAgICAgICBTT1JUIExPV0VSKHBlcnNvbmEubmFtZSB8fCAnJykgQVNDXG4gICAgICAgICAgTElNSVQgJHtsaW1pdEZyb219LCAke2xpbWl0Q291bnR9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHBlcnNvbmEsIHtcbiAgICAgICAgICAgIGJpcnRoZGF0ZTogcGVyc29uYUJpcnRoZGF0ZSxcbiAgICAgICAgICAgIGlzRm9sbG93ZWRCeTogdHJ1ZSxcbiAgICAgICAgICAgIGlzRm9sbG93aW5nOiB0cnVlLFxuICAgICAgICAgICAgaXNGcmllbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgYDtcblxuICAgIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHJlbGF0aW9uUXVlcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpIGFzIFBlcnNvbmFUeXBlW107XG5cbiAgICByZXR1cm4gKGF3YWl0IGh5ZHJhdGVQZXJzb25hTGlzdChjb250ZXh0LCBwZXJzb25hcykpLm1hcCgocGVyc29uYSkgPT4gKHtcbiAgICAgIC4uLnBlcnNvbmEsXG4gICAgICBpc0ZyaWVuZDogQm9vbGVhbihwZXJzb25hLmlzRm9sbG93aW5nICYmIHBlcnNvbmEuaXNGb2xsb3dlZEJ5KVxuICAgIH0pKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZnJvbSwgcGVyc29uYUlkLCByZWxhdGlvbjogYWN0aXZlUmVsYXRpb24sIHRvfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUxpc3RCeVRhZ3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHt0YWdzID0gW10sIHVzZXJuYW1lID0gJyd9OiB7dGFncz86IHN0cmluZ1tdOyB1c2VybmFtZT86IHN0cmluZ30sXG4gIHtmaWx0ZXJzID0ge30sIGZyb20gPSAwLCB0byA9IDEwfToge2ZpbHRlcnM/OiBQZXJzb25hTGlzdEZpbHRlcnM7IGZyb20/OiBudW1iZXI7IHRvPzogbnVtYmVyfSA9IHt9XG4pOiBQcm9taXNlPFBlcnNvbmFUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBlcnNvbmFMaXN0QnlUYWdzJztcbiAgY29uc3QgZm9ybWF0VGFncyA9IEFycmF5LmlzQXJyYXkodGFncylcbiAgICA/IHRhZ3MucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgdGFnTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBuZXh0VGFnID0gU3RyaW5nKHRhZ05hbWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZihuZXh0VGFnKSB7XG4gICAgICAgIGxpc3QucHVzaChuZXh0VGFnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfSwgW10pXG4gICAgOiBbXTtcbiAgY29uc3QgZm9ybWF0VXNlcm5hbWUgPSBTdHJpbmcodXNlcm5hbWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBsaW1pdEZyb20gPSBOdW1iZXIoZnJvbSkgPj0gMCA/IE51bWJlcihmcm9tKSA6IDA7XG4gIGNvbnN0IGxpbWl0VG8gPSBOdW1iZXIodG8pID4gbGltaXRGcm9tID8gTnVtYmVyKHRvKSA6IGxpbWl0RnJvbSArIDEwO1xuICBjb25zdCBsaW1pdENvdW50ID0gbGltaXRUbyAtIGxpbWl0RnJvbTtcbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKTtcbiAgY29uc3Qge2dlbmRlcjogdGFyZ2V0R2VuZGVyc30gPSBhd2FpdCByZXNvbHZlUGVyc29uYUxpc3RGaWx0ZXJzKGZpbHRlcnMpO1xuXG4gIGlmKCFmb3JtYXRUYWdzLmxlbmd0aCB8fCAhdGFyZ2V0R2VuZGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHVzZXJuYW1lRmlsdGVyID0gZm9ybWF0VXNlcm5hbWVcbiAgICAgID8gbGl0ZXJhbChgRklMVEVSIENPTlRBSU5TKExPV0VSKHBlcnNvbmEubmFtZSB8fCBcIlwiKSwgXCIke2Zvcm1hdFVzZXJuYW1lfVwiKWApXG4gICAgICA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IG5hbWVkUGVyc29uYUZpbHRlciA9IGxpdGVyYWwoJ0ZJTFRFUiBMRU5HVEgoVFJJTShwZXJzb25hLm5hbWUgfHwgXCJcIikpID4gMCcpO1xuICAgIGNvbnN0IHNlc3Npb25GaWx0ZXIgPSBzZXNzaW9uVXNlcklkXG4gICAgICA/IGxpdGVyYWwoYEZJTFRFUiBwZXJzb25hLnVzZXJJZCAhPSBcIiR7c2Vzc2lvblVzZXJJZH1cImApXG4gICAgICA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IHBlcnNvbmFRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgdCBJTiAke3RhZ3NDb2xsZWN0aW9ufVxuICAgICAgICBGSUxURVIgUE9TSVRJT04oJHtmb3JtYXRUYWdzfSwgTE9XRVIodC5uYW1lKSlcbiAgICAgICAgRk9SIHBlcnNvbmEsIGVkZ2UgSU4gT1VUQk9VTkQgdCAke2lzVGFnZ2VkQ29sbGVjdGlvbn1cbiAgICAgICAgICBPUFRJT05TIHtiZnM6IHRydWUsIHVuaXF1ZVZlcnRpY2VzOiBcImdsb2JhbFwiLCB2ZXJ0ZXhDb2xsZWN0aW9uczogJHtDT0xMRUNUSU9OUy5QRVJTT05BU319XG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBMRVQgcGVyc29uYUdlbmRlciA9IFVQUEVSKHBlcnNvbmEuZ2VuZGVyIHx8IFwiXCIpXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgJHt1c2VybmFtZUZpbHRlcn1cbiAgICAgICAgICAke3Nlc3Npb25GaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFHZW5kZXIgIT0gXCJcIlxuICAgICAgICAgIEZJTFRFUiBQT1NJVElPTigke3RhcmdldEdlbmRlcnN9LCBwZXJzb25hR2VuZGVyKVxuICAgICAgICAgIENPTExFQ1QgcGVyc29uYUtleSA9IHBlcnNvbmEuX2tleSBJTlRPIGdyb3VwZWQgPSB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBwZXJzb25hLFxuICAgICAgICAgICAgbWF0Y2hlZFRhZzogTE9XRVIodC5uYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgICBMRVQgbWF0Y2hlZFRhZ3MgPSBVTklRVUUoZ3JvdXBlZFsqXS5tYXRjaGVkVGFnKVxuICAgICAgICAgIExFVCBiaXJ0aGRhdGUgPSBGSVJTVChncm91cGVkWypdLmJpcnRoZGF0ZSlcbiAgICAgICAgICBMRVQgcGVyc29uYURvYyA9IEZJUlNUKGdyb3VwZWRbKl0ucGVyc29uYSlcbiAgICAgICAgICBTT1JUIExFTkdUSChtYXRjaGVkVGFncykgREVTQywgTE9XRVIocGVyc29uYURvYy5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYURvYywge2JpcnRoZGF0ZSwgbWF0Y2hlZFRhZ0NvdW50OiBMRU5HVEgobWF0Y2hlZFRhZ3MpfSlcbiAgICBgO1xuICAgIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHBlcnNvbmFRdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSkgYXMgUGVyc29uYVR5cGVbXTtcblxuICAgIHJldHVybiBoeWRyYXRlUGVyc29uYUxpc3QoY29udGV4dCwgcGVyc29uYXMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsdGVyczoge2dlbmRlcjogdGFyZ2V0R2VuZGVyc30sIGZyb20sIHRhZ3M6IGZvcm1hdFRhZ3MsIHRvLCB1c2VybmFtZTogZm9ybWF0VXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQZXJzb25hID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmE6IFBlcnNvbmFUeXBlKTogUHJvbWlzZTxQZXJzb25hVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkUGVyc29uYSc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7cGVyc29uYUlkLCB1c2VySWR9ID0gYXdhaXQgcmVzb2x2ZVBlcnNvbmFPd25lcihjb250ZXh0LCBwZXJzb25hKTtcbiAgICBjb25zdCBzYXZlZFBlcnNvbmEgPSBhd2FpdCBzYXZlUGVyc29uYURvY3VtZW50KGNvbnRleHQsIHBlcnNvbmEsIHBlcnNvbmFJZCwgdXNlcklkKTtcbiAgICBjb25zdCBwZXJzb25hRG9jSWQgPSBzYXZlZFBlcnNvbmE/Ll9pZCB8fCBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtzYXZlZFBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYUlkfWA7XG5cbiAgICBhd2FpdCBlbnN1cmVQZXJzb25hRWRnZShjb250ZXh0LCB1c2VySWQsIHBlcnNvbmFEb2NJZCk7XG4gICAgYXdhaXQgc3luY1VzZXJQZXJzb25hKGNvbnRleHQsIHVzZXJJZCwgc2F2ZWRQZXJzb25hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwZXJzb25hSWQpO1xuXG4gICAgcmV0dXJuIChhd2FpdCBnZXRQZXJzb25hQnlJZChjb250ZXh0LCBwZXJzb25hSWQpKSB8fCBmb3JtYXRQZXJzb25hUmVzdWx0KHNhdmVkUGVyc29uYSwgcGVyc29uYUlkKSBhcyBQZXJzb25hVHlwZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmF9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQZXJzb25hID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmE6IFBlcnNvbmFUeXBlKTogUHJvbWlzZTxQZXJzb25hVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlUGVyc29uYSc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7cGVyc29uYUlkLCB1c2VySWR9ID0gYXdhaXQgcmVzb2x2ZVBlcnNvbmFPd25lcihjb250ZXh0LCBwZXJzb25hKTtcbiAgICBjb25zdCBzYXZlZFBlcnNvbmEgPSBhd2FpdCBzYXZlUGVyc29uYURvY3VtZW50KGNvbnRleHQsIHBlcnNvbmEsIHBlcnNvbmFJZCwgdXNlcklkKTtcbiAgICBjb25zdCBwZXJzb25hRG9jSWQgPSBzYXZlZFBlcnNvbmE/Ll9pZCB8fCBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtzYXZlZFBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYUlkfWA7XG5cbiAgICBhd2FpdCBlbnN1cmVQZXJzb25hRWRnZShjb250ZXh0LCB1c2VySWQsIHBlcnNvbmFEb2NJZCk7XG4gICAgYXdhaXQgc3luY1VzZXJQZXJzb25hKGNvbnRleHQsIHVzZXJJZCwgc2F2ZWRQZXJzb25hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwZXJzb25hSWQpO1xuXG4gICAgcmV0dXJuIChhd2FpdCBnZXRQZXJzb25hQnlJZChjb250ZXh0LCBwZXJzb25hSWQpKSB8fCBmb3JtYXRQZXJzb25hUmVzdWx0KHNhdmVkUGVyc29uYSwgcGVyc29uYUlkKSBhcyBQZXJzb25hVHlwZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmF9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VOdW0iLCJwYXJzZVN0cmluZyIsInBhcnNlVmFyQ2hhciIsImFxbCIsImxpdGVyYWwiLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiQ29ubmVjdGlvbktpbmRzIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwidXNlRGIiLCJnZXRDb25uZWN0aW9uIiwiZ2V0VGFnTGlzdEJ5SXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJtaW5pbXVtQWR1bHRBZ2UiLCJtaW5pbXVtQWR1bHRCaXJ0aGRhdGUiLCJEYXRlIiwibm93IiwicGVyc29uYUFjdGlvbkV4dGVuc2lvbnMiLCJ1c2Vyc0NvbGxlY3Rpb24iLCJVU0VSUyIsInBlcnNvbmFzQ29sbGVjdGlvbiIsIlBFUlNPTkFTIiwidGFnc0NvbGxlY3Rpb24iLCJUQUdTIiwiaXNUYWdnZWRDb2xsZWN0aW9uIiwiSVNfVEFHR0VEIiwiaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24iLCJIQVNfQ09OTkVDVElPTiIsImNvbmZpZ3VyZVBlcnNvbmFBY3Rpb25zIiwiZXh0ZW5zaW9ucyIsImJ1aWxkUGVyc29uYU11dGF0aW9uIiwicGVyc29uYSIsImNpdHkiLCJjb3VudHJ5Iiwic3RyZWV0MSIsInN0cmVldDIiLCJ6aXAiLCJzdGF0ZSIsInRpbWV6b25lIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJnZW5kZXIiLCJpbWFnZUlkIiwibmFtZSIsImxhdGl0dWRlIiwibG9jYXRpb24iLCJsb25naXR1ZGUiLCJ1c2VySWQiLCJ1bmRlZmluZWQiLCJ0b1VwcGVyQ2FzZSIsImJ1aWxkQ3VzdG9tUGVyc29uYU11dGF0aW9uIiwiZmllbGRzIiwibWFwQ3VzdG9tUGVyc29uYUZpZWxkcyIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsImNyZWF0ZVBlcnNvbmFFZGdlIiwidXNlckRvY0lkIiwicGVyc29uYURvY0lkIiwiX2Zyb20iLCJfa2V5IiwiX3RvIiwiYWRkZWQiLCJnZXRVc2VyQnlLZXkiLCJkYXRhYmFzZU5hbWUiLCJxcnkiLCJjdXJzb3IiLCJxdWVyeSIsIm5leHQiLCJnZXRTZXNzaW9uUGVyc29uYUlkIiwiY29udGV4dCIsInBlcnNvbmFJZCIsInJlcXVlc3RlZFBlcnNvbmFJZCIsIlN0cmluZyIsInNlc3Npb25Vc2VySWQiLCJzZXNzaW9uIiwic2Vzc2lvblBlcnNvbmFJZCIsInVzZXIiLCJnZXRQZXJzb25hT3duZXJVc2VySWQiLCJub3JtYWxpemVkUGVyc29uYUlkIiwiZ2V0UGVyc29uYUJ5S2V5IiwiaXNVc2VyVmlzaWJpbGl0eUJsb2NrZWQiLCJ0YXJnZXRVc2VySWQiLCJzZXNzaW9uVXNlcklkT3ZlcnJpZGUiLCJub3JtYWxpemVkVGFyZ2V0VXNlcklkIiwib3V0Ym91bmRCbG9jayIsImluYm91bmRCbG9jayIsIlByb21pc2UiLCJhbGwiLCJCTE9DSyIsImlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkIiwidGFyZ2V0UGVyc29uYUlkIiwic2Vzc2lvblBlcnNvbmFJZE92ZXJyaWRlIiwibm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsImlzQmxvY2tlZCIsImlzRm9sbG93ZWRCeSIsImlzRm9sbG93aW5nIiwiaXNGcmllbmQiLCJvdXRib3VuZENvbm5lY3Rpb24iLCJpbmJvdW5kQ29ubmVjdGlvbiIsIkZPTExPVyIsImdldFBlcnNvbmFGb2xsb3dlckNvdW50IiwiYWN0aW9uIiwiZm9ybWF0UGVyc29uYUlkIiwiTnVtYmVyIiwiZXJyb3IiLCJjYXRlZ29yeSIsInBhcmFtcyIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0UGVyc29uYUZvbGxvd2luZ0NvdW50IiwiZm9ybWF0UGVyc29uYVJlc3VsdCIsImZhbGxiYWNrUGVyc29uYUlkIiwibm9ybWFsaXplUmVsYXRpb25GaWx0ZXIiLCJyZWxhdGlvbiIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMiLCJmaWx0ZXJzIiwiZ2VuZGVycyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImZpbHRlciIsIkJvb2xlYW4iLCJoeWRyYXRlUGVyc29uYUxpc3QiLCJwZXJzb25hcyIsImh5ZHJhdGVkUGVyc29uYXMiLCJuZXh0UGVyc29uYUlkIiwicGVyc29uYVRhZ3MiLCJ0YWdzIiwiZW5zdXJlUGVyc29uYUVkZ2UiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJIQVNfUEVSU09OQSIsImVkZ2UiLCJzYXZlIiwib3ZlcndyaXRlTW9kZSIsInJldHVybk5ldyIsInNpbGVudCIsInN5bmNVc2VyUGVyc29uYSIsInVzZXJVcGRhdGUiLCJtb2RpZmllZCIsIm1hcHBlZEltYWdlSWQiLCJ1cGRhdGVVc2VyUXJ5IiwidXNlckN1cnNvciIsInJlc29sdmVQZXJzb25hT3duZXIiLCJleHBsaWNpdFVzZXJJZCIsIkVycm9yIiwibGlua2VkUGVyc29uYUlkIiwic2F2ZVBlcnNvbmFEb2N1bWVudCIsImJhc2VQZXJzb25hIiwiY3VzdG9tUGVyc29uYSIsInVwc2VydFBlcnNvbmFRdWVyeSIsInBlcnNvbmFDdXJzb3IiLCJnZXRQZXJzb25hQnlJZCIsInJlbGF0aW9uc2hpcFN0YXRlIiwiZ2V0UGVyc29uYUxpc3RCeUlkcyIsInBlcnNvbmFJZHMiLCJub3JtYWxpemVkUGVyc29uYUlkcyIsImxlbmd0aCIsImdldFBlcnNvbmFMaXN0QnlSZWxhdGlvbiIsImZyb20iLCJ0byIsImFjdGl2ZVJlbGF0aW9uIiwibGltaXRGcm9tIiwibGltaXRUbyIsImxpbWl0Q291bnQiLCJzZXNzaW9uUGVyc29uYURvY0lkIiwibmFtZWRQZXJzb25hRmlsdGVyIiwicmVsYXRpb25RdWVyeSIsInRoZW4iLCJnZXRQZXJzb25hTGlzdEJ5VGFncyIsInVzZXJuYW1lIiwiZm9ybWF0VGFncyIsImxpc3QiLCJ0YWdOYW1lIiwibmV4dFRhZyIsInB1c2giLCJmb3JtYXRVc2VybmFtZSIsInRhcmdldEdlbmRlcnMiLCJ1c2VybmFtZUZpbHRlciIsInNlc3Npb25GaWx0ZXIiLCJwZXJzb25hUXVlcnkiLCJhZGRQZXJzb25hIiwic2F2ZWRQZXJzb25hIiwiX2lkIiwidXBkYXRlUGVyc29uYSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDRUEsVUFBVSxFQUNWQyxhQUFhLEVBQ2JDLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyxRQUFRLEVBQ1JDLFdBQVcsRUFDWEMsWUFBWSxRQUNQLGVBQWU7QUFDdEIsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFFckMsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLGVBQWUsUUFBTyxnQ0FBZ0M7QUFDOUQsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsYUFBYSxRQUFPLG1CQUFtQjtBQUMvQyxTQUFRQyxnQkFBZ0IsUUFBTyxZQUFZO0FBUzNDLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyxrQkFBa0I7QUFDeEIsTUFB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