@nlabs/reaktor 1.6.3 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/LICENSE +74 -201
  2. package/README.md +48 -16
  3. package/lib/actions/analytics.d.ts +10 -0
  4. package/lib/actions/analytics.js +539 -0
  5. package/lib/actions/apps.js +2 -2
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +2 -2
  8. package/lib/actions/conversations.js +2 -2
  9. package/lib/actions/crm.d.ts +11 -1
  10. package/lib/actions/crm.js +443 -13
  11. package/lib/actions/crud.js +2 -2
  12. package/lib/actions/dynamodb.d.ts +1 -1
  13. package/lib/actions/dynamodb.js +2 -2
  14. package/lib/actions/email.d.ts +1 -1
  15. package/lib/actions/email.js +2 -2
  16. package/lib/actions/files.js +2 -2
  17. package/lib/actions/flags.d.ts +6 -0
  18. package/lib/actions/flags.js +147 -0
  19. package/lib/actions/groups.js +2 -2
  20. package/lib/actions/images.d.ts +1 -1
  21. package/lib/actions/images.js +2 -2
  22. package/lib/actions/index.d.ts +3 -2
  23. package/lib/actions/index.js +4 -3
  24. package/lib/actions/ios.js +1 -1
  25. package/lib/actions/locations.js +2 -2
  26. package/lib/actions/messages.js +2 -2
  27. package/lib/actions/notifications.d.ts +1 -1
  28. package/lib/actions/notifications.js +2 -2
  29. package/lib/actions/payments.d.ts +3 -3
  30. package/lib/actions/payments.js +144 -189
  31. package/lib/actions/personas.js +1 -1
  32. package/lib/actions/posts.d.ts +0 -4
  33. package/lib/actions/posts.js +2 -4
  34. package/lib/actions/query.js +2 -2
  35. package/lib/actions/reactions.js +2 -2
  36. package/lib/actions/rum.js +148 -45
  37. package/lib/actions/s3.d.ts +1 -1
  38. package/lib/actions/s3.js +2 -2
  39. package/lib/actions/search.js +2 -2
  40. package/lib/actions/sms.js +2 -2
  41. package/lib/actions/statistics.js +2 -2
  42. package/lib/actions/subscriptions.js +2 -2
  43. package/lib/actions/tags.js +2 -2
  44. package/lib/actions/users.d.ts +4 -1
  45. package/lib/actions/users.js +85 -11
  46. package/lib/actions/videos.js +2 -2
  47. package/lib/adapters/arangoAdapter.js +1 -1
  48. package/lib/adapters/contentAdapter.js +2 -2
  49. package/lib/adapters/fileAdapter.js +1 -1
  50. package/lib/adapters/imageAdapter.js +1 -1
  51. package/lib/adapters/index.js +1 -1
  52. package/lib/adapters/messageAdapter.js +1 -1
  53. package/lib/adapters/postAdapter.js +1 -1
  54. package/lib/adapters/reaktorAdapter.js +1 -1
  55. package/lib/adapters/tagAdapter.d.ts +0 -1
  56. package/lib/adapters/tagAdapter.js +1 -2
  57. package/lib/adapters/userAdapter.d.ts +0 -1
  58. package/lib/adapters/userAdapter.js +1 -2
  59. package/lib/config.js +8 -2
  60. package/lib/constants/collections.d.ts +17 -1
  61. package/lib/constants/collections.js +18 -2
  62. package/lib/handlers/graphqlHandler.d.ts +2 -2
  63. package/lib/handlers/graphqlHandler.js +2 -19
  64. package/lib/index.d.ts +4 -2
  65. package/lib/index.js +4 -3
  66. package/lib/lambdas/actions/websockets.js +2 -2
  67. package/lib/lambdas/authorizer.js +2 -2
  68. package/lib/lambdas/connection.js +2 -2
  69. package/lib/lambdas/utils/message.js +2 -2
  70. package/lib/lambdas/utils/websocket.d.ts +1 -1
  71. package/lib/lambdas/utils/websocket.js +2 -2
  72. package/lib/mocks/conversation.js +1 -1
  73. package/lib/mocks/file.js +1 -1
  74. package/lib/mocks/group.js +1 -1
  75. package/lib/mocks/image.js +1 -1
  76. package/lib/mocks/post.js +1 -1
  77. package/lib/mocks/tag.js +1 -1
  78. package/lib/mocks/user.js +1 -1
  79. package/lib/mocks/video.js +1 -1
  80. package/lib/mutations/analytics/analytics.d.ts +1 -0
  81. package/lib/mutations/analytics/analytics.js +35 -0
  82. package/lib/mutations/content/content.js +2 -2
  83. package/lib/mutations/crm/crm.js +57 -11
  84. package/lib/mutations/events/events.js +2 -2
  85. package/lib/mutations/flags/flags.d.ts +1 -0
  86. package/lib/mutations/flags/flags.js +33 -0
  87. package/lib/mutations/groups/groups.js +2 -2
  88. package/lib/mutations/images/images.js +2 -2
  89. package/lib/mutations/index.d.ts +3 -1
  90. package/lib/mutations/index.js +13 -3
  91. package/lib/mutations/locations/locations.js +2 -2
  92. package/lib/mutations/messages/messages.js +2 -2
  93. package/lib/mutations/personas/personas.js +2 -2
  94. package/lib/mutations/posts/posts.js +2 -2
  95. package/lib/mutations/reactions/reactions.js +2 -2
  96. package/lib/mutations/rum/rum.js +2 -2
  97. package/lib/mutations/statistics/statistics.js +2 -2
  98. package/lib/mutations/subscriptions/subscriptions.js +2 -2
  99. package/lib/mutations/tags/tags.js +2 -2
  100. package/lib/mutations/users/users.js +30 -17
  101. package/lib/mutations/videos/videos.js +2 -2
  102. package/lib/objectTypes/analytics.d.ts +8 -0
  103. package/lib/objectTypes/analytics.js +147 -0
  104. package/lib/objectTypes/app.js +2 -2
  105. package/lib/objectTypes/bankAccount.js +2 -2
  106. package/lib/objectTypes/connection.js +2 -2
  107. package/lib/objectTypes/content.js +2 -2
  108. package/lib/objectTypes/conversation.js +2 -2
  109. package/lib/objectTypes/creditCard.js +2 -2
  110. package/lib/objectTypes/crm.d.ts +5 -0
  111. package/lib/objectTypes/crm.js +68 -2
  112. package/lib/objectTypes/document.js +1 -1
  113. package/lib/objectTypes/error.js +2 -2
  114. package/lib/objectTypes/event.js +2 -2
  115. package/lib/objectTypes/external.js +2 -2
  116. package/lib/objectTypes/file.js +2 -2
  117. package/lib/objectTypes/filter.js +2 -2
  118. package/lib/objectTypes/flag.d.ts +1 -0
  119. package/lib/objectTypes/flag.js +35 -0
  120. package/lib/objectTypes/group.js +2 -2
  121. package/lib/objectTypes/iapSubscription.js +2 -2
  122. package/lib/objectTypes/image.d.ts +1 -1
  123. package/lib/objectTypes/image.js +2 -2
  124. package/lib/objectTypes/index.d.ts +2 -0
  125. package/lib/objectTypes/index.js +3 -1
  126. package/lib/objectTypes/location.js +2 -2
  127. package/lib/objectTypes/message.js +2 -2
  128. package/lib/objectTypes/passcode.js +2 -2
  129. package/lib/objectTypes/persona.js +2 -2
  130. package/lib/objectTypes/plan.js +2 -2
  131. package/lib/objectTypes/post.js +2 -2
  132. package/lib/objectTypes/query.js +2 -2
  133. package/lib/objectTypes/reaction.js +2 -2
  134. package/lib/objectTypes/relation.js +2 -2
  135. package/lib/objectTypes/rum.js +4 -4
  136. package/lib/objectTypes/search.js +2 -2
  137. package/lib/objectTypes/statistics.js +2 -2
  138. package/lib/objectTypes/subscription.js +2 -2
  139. package/lib/objectTypes/tag.js +2 -2
  140. package/lib/objectTypes/user.js +10 -2
  141. package/lib/objectTypes/video.d.ts +1 -1
  142. package/lib/objectTypes/video.js +2 -2
  143. package/lib/queries/analytics/analytics.d.ts +1 -0
  144. package/lib/queries/analytics/analytics.js +41 -0
  145. package/lib/queries/content/content.js +2 -2
  146. package/lib/queries/crm/crm.js +52 -13
  147. package/lib/queries/events/events.js +2 -2
  148. package/lib/queries/flags/flags.d.ts +1 -0
  149. package/lib/queries/flags/flags.js +16 -0
  150. package/lib/queries/groups/groups.js +2 -2
  151. package/lib/queries/images/images.js +2 -2
  152. package/lib/queries/index.d.ts +3 -1
  153. package/lib/queries/index.js +13 -3
  154. package/lib/queries/locations/locations.js +2 -2
  155. package/lib/queries/messages/messages.js +1 -1
  156. package/lib/queries/personas/personas.js +2 -2
  157. package/lib/queries/posts/posts.js +2 -2
  158. package/lib/queries/query/query.js +2 -2
  159. package/lib/queries/reactions/reactions.js +2 -2
  160. package/lib/queries/statistics/statistics.js +2 -2
  161. package/lib/queries/subscriptions/subscriptions.js +1 -1
  162. package/lib/queries/tags/tags.js +2 -2
  163. package/lib/queries/users/users.js +2 -2
  164. package/lib/queries/videos/videos.js +2 -2
  165. package/lib/templates/email/layout.js +1 -1
  166. package/lib/templates/email/passwordForgot.js +1 -1
  167. package/lib/templates/email/passwordRecovery.js +1 -1
  168. package/lib/templates/email/verifyEmail.js +1 -1
  169. package/lib/templates/email/welcome.js +1 -1
  170. package/lib/templates/sms/passwordForgot.js +1 -1
  171. package/lib/templates/sms/passwordRecovery.js +1 -1
  172. package/lib/templates/sms/verifyEmail.js +1 -1
  173. package/lib/templates/sms/verifyPhone.js +1 -1
  174. package/lib/templates/sms/welcome.js +1 -1
  175. package/lib/types/analytics.types.d.ts +92 -0
  176. package/lib/types/analytics.types.js +6 -0
  177. package/lib/types/apps.types.d.ts +1 -1
  178. package/lib/types/apps.types.js +2 -2
  179. package/lib/types/arangodb.types.d.ts +2 -2
  180. package/lib/types/arangodb.types.js +2 -2
  181. package/lib/types/auth.types.d.ts +4 -1
  182. package/lib/types/auth.types.js +2 -2
  183. package/lib/types/connections.types.d.ts +1 -1
  184. package/lib/types/connections.types.js +2 -2
  185. package/lib/types/content.types.d.ts +1 -1
  186. package/lib/types/content.types.js +2 -2
  187. package/lib/types/conversations.types.d.ts +1 -1
  188. package/lib/types/conversations.types.js +2 -2
  189. package/lib/types/crm.types.d.ts +58 -2
  190. package/lib/types/crm.types.js +2 -2
  191. package/lib/types/email.types.d.ts +1 -1
  192. package/lib/types/email.types.js +2 -2
  193. package/lib/types/error.types.js +1 -1
  194. package/lib/types/files.types.d.ts +1 -1
  195. package/lib/types/files.types.js +2 -2
  196. package/lib/types/flags.types.d.ts +28 -0
  197. package/lib/types/flags.types.js +3 -0
  198. package/lib/types/google.types.d.ts +1 -1
  199. package/lib/types/google.types.js +2 -2
  200. package/lib/types/groups.types.d.ts +1 -1
  201. package/lib/types/groups.types.js +2 -2
  202. package/lib/types/images.types.d.ts +1 -1
  203. package/lib/types/images.types.js +2 -2
  204. package/lib/types/index.d.ts +3 -1
  205. package/lib/types/index.js +4 -2
  206. package/lib/types/locations.types.d.ts +1 -1
  207. package/lib/types/locations.types.js +2 -2
  208. package/lib/types/messages.types.d.ts +1 -1
  209. package/lib/types/messages.types.js +2 -2
  210. package/lib/types/notifications.types.d.ts +1 -1
  211. package/lib/types/notifications.types.js +2 -2
  212. package/lib/types/payments.types.d.ts +4 -1
  213. package/lib/types/payments.types.js +2 -2
  214. package/lib/types/personas.types.js +1 -1
  215. package/lib/types/posts.types.d.ts +1 -1
  216. package/lib/types/posts.types.js +2 -2
  217. package/lib/types/rum.types.d.ts +3 -3
  218. package/lib/types/rum.types.js +2 -2
  219. package/lib/types/statistics.types.js +1 -1
  220. package/lib/types/tags.types.d.ts +1 -1
  221. package/lib/types/tags.types.js +2 -2
  222. package/lib/types/users.types.d.ts +2 -1
  223. package/lib/types/users.types.js +2 -2
  224. package/lib/types/videos.types.d.ts +1 -1
  225. package/lib/types/videos.types.js +2 -2
  226. package/lib/types/websockets.types.d.ts +1 -1
  227. package/lib/types/websockets.types.js +2 -2
  228. package/lib/upload.js +4 -9
  229. package/lib/utils/adapterUtils.d.ts +1 -1
  230. package/lib/utils/adapterUtils.js +2 -2
  231. package/lib/utils/analyticsUtils.d.ts +1 -1
  232. package/lib/utils/analyticsUtils.js +2 -2
  233. package/lib/utils/appContext.d.ts +2 -0
  234. package/lib/utils/appContext.js +10 -0
  235. package/lib/utils/aqlHelpers.d.ts +1 -1
  236. package/lib/utils/aqlHelpers.js +2 -2
  237. package/lib/utils/arangodbUtils.d.ts +9 -1
  238. package/lib/utils/arangodbUtils.js +10 -2
  239. package/lib/utils/authUtils.js +2 -2
  240. package/lib/utils/awsUtils.js +2 -2
  241. package/lib/utils/collectionRegistry.d.ts +1 -1
  242. package/lib/utils/collectionRegistry.js +17 -2
  243. package/lib/utils/contextUtils.d.ts +2 -2
  244. package/lib/utils/contextUtils.js +2 -2
  245. package/lib/utils/dbI18n.example.d.ts +1 -1
  246. package/lib/utils/dbI18n.example.js +2 -2
  247. package/lib/utils/dbI18n.js +2 -2
  248. package/lib/utils/googleTranslate.d.ts +1 -1
  249. package/lib/utils/googleTranslate.js +2 -2
  250. package/lib/utils/graphqlUtils.d.ts +2 -0
  251. package/lib/utils/graphqlUtils.js +1 -1
  252. package/lib/utils/imageUtils.js +1 -1
  253. package/lib/utils/index.d.ts +1 -1
  254. package/lib/utils/index.js +2 -2
  255. package/lib/utils/languageDetection.js +1 -1
  256. package/lib/utils/localeUtils.d.ts +1 -1
  257. package/lib/utils/localeUtils.example.d.ts +1 -1
  258. package/lib/utils/localeUtils.example.js +2 -2
  259. package/lib/utils/localeUtils.js +2 -2
  260. package/lib/utils/middlewareUtils.js +1 -1
  261. package/lib/utils/queryBuilder.d.ts +1 -1
  262. package/lib/utils/queryBuilder.js +2 -2
  263. package/lib/utils/schemaUtils.js +1 -1
  264. package/lib/utils/sessionUtils.d.ts +4 -0
  265. package/lib/utils/sessionUtils.js +2 -2
  266. package/lib/utils/stripeUtils.d.ts +1 -1
  267. package/lib/utils/stripeUtils.js +2 -2
  268. package/lib/utils/templateUtils.js +1 -1
  269. package/lib/utils/testUtils.js +2 -2
  270. package/lib/utils/translationQueue.d.ts +1 -1
  271. package/lib/utils/translationQueue.example.d.ts +1 -1
  272. package/lib/utils/translationQueue.example.js +2 -2
  273. package/lib/utils/translationQueue.js +2 -2
  274. package/lib/videoProcessing.js +1 -1
  275. package/package.json +49 -86
  276. package/lib/actions/websockets.d.ts +0 -20
  277. package/lib/actions/websockets.js +0 -164
  278. package/lib/mocks/nlabs.png +0 -0
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { createHash, parseArangoId, parseEmail, parseId, parsePhone, parseString } from '@nlabs/utils/parsers/strings';
5
5
  import { ErrorTypes } from '../types/error.types.js';
6
6
  import { logError, logException, UserError } from '../utils/analyticsUtils.js';
@@ -218,4 +218,4 @@ export const getApps = async (context, options)=>{
218
218
  });
219
219
  };
220
220
 
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvYXBwcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUVtYWlsLCBwYXJzZUlkLCBwYXJzZVBob25lLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbiwgVXNlckVycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZX0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2lzQWRtaW5Vc2VyfSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcblxuaW1wb3J0IHR5cGUge0FwcFR5cGV9IGZyb20gJy4uL3R5cGVzL2FwcHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1Nlc3Npb259IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25VdGlscy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnYXBwcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZyb20/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0QXBwT3B0aW9uYWwgPSAoZmllbGRzOiBzdHJpbmdbXSA9IFtdKSA9PlxuICBmaWVsZHMucmVkdWNlKChzZWxlY3RzLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgaWYoZmllbGQuaW5jbHVkZXMoJ0NvdW50JykpIHtcbiAgICAgIHJldHVybiBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlKCdhcHBzJywgJ2EnLCBmaWVsZCwgc2VsZWN0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdHM7XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQXBwT3B0aW9ucyA9IChvcHRpb25zOiBBcHBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuXG4gIHJldHVybiB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBsaW1pdFxuICB9O1xufTtcblxuY29uc3QgYnVpbGRBcHBHZXRGaWx0ZXJzID0gKHtpZCwga2V5LCBuYW1lfTogQXBwT3B0aW9ucyk6IHtsb2dpYzogJ0FORCc7IGNvbmRpdGlvbnM6IGFueVtdfSA9PiB7XG4gIGNvbnN0IGNvbmRpdGlvbnM6IGFueVtdID0gW3tmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogdHJ1ZX1dO1xuXG4gIGlmKGlkKSB7XG4gICAgY29uZGl0aW9ucy5wdXNoKHtmaWVsZDogJ19pZCcsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogcGFyc2VBcmFuZ29JZChpZCl9KTtcbiAgfVxuXG4gIGlmKGtleSkge1xuICAgIGNvbmRpdGlvbnMucHVzaCh7ZmllbGQ6ICdfa2V5Jywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBwYXJzZUlkKGtleSl9KTtcbiAgfVxuXG4gIGlmKG5hbWUpIHtcbiAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAnbmFtZScsIG9wZXJhdG9yOiAnQ09OVEFJTlMnLCB2YWx1ZTogcGFyc2VTdHJpbmcobmFtZSl9KTtcbiAgfVxuXG4gIHJldHVybiB7bG9naWM6ICdBTkQnLCBjb25kaXRpb25zfTtcbn07XG5cbmNvbnN0IGdldEFwcFF1ZXJ5T3B0aW9ucyA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+IHtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0QXBwT3B0aW9uYWwoZmllbGRzKTtcblxuICByZXR1cm4ge1xuICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IHNlbGVjdE9iamVjdHMgOiB1bmRlZmluZWQsXG4gICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcy5sZW5ndGggPiAwID8gc2VsZWN0UXVlcmllcyA6IHVuZGVmaW5lZFxuICB9O1xufTtcblxuY29uc3QgZ2V0QXBwS2V5ID0gKGFwcDogQXBwVHlwZSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHtfa2V5LCBfaWQsIGlkLCBhcHBJZH0gPSBhcHA7XG4gIHJldHVybiBfa2V5IHx8IGlkIHx8IGFwcElkIHx8IF9pZD8uc3BsaXQoJy8nKVsxXTtcbn07XG5cbmNvbnN0IGJ1aWxkQXBwTXV0YXRpb24gPSAoYXBwOiBBcHBUeXBlKTogUGFydGlhbDxBcHBUeXBlPiA9PiB7XG4gIGNvbnN0IHtlbWFpbCA9ICcnLCBuYW1lID0gJycsIHBob25lID0gJyd9ID0gYXBwO1xuXG4gIHJldHVybiB7XG4gICAgZW1haWw6IHBhcnNlRW1haWwoZW1haWwpLFxuICAgIG5hbWU6IHBhcnNlU3RyaW5nKG5hbWUpLFxuICAgIHBob25lOiBwYXJzZVBob25lKHBob25lKVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEFwcCc7XG4gIGNvbnN0IHtuYW1lID0gJyd9ID0gYXBwO1xuICBjb25zdCBpbnNlcnREYXRhID0gYnVpbGRBcHBNdXRhdGlvbihhcHApO1xuICBjb25zdCB7ZW1haWw6IGZvcm1hdEVtYWlsLCBuYW1lOiBmb3JtYXROYW1lfSA9IGluc2VydERhdGE7XG5cbiAgaWYoIWZvcm1hdE5hbWUpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVJHVU1FTlRTXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBhcHAgdXNpbmcgZ2VuZXJpYyBxdWVyeVxuICAgIGNvbnN0IGNvbmRpdGlvbnM6IGFueVtdID0gW1xuICAgICAge2ZpZWxkOiAnbmFtZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0TmFtZX1cbiAgICBdO1xuXG4gICAgaWYoZm9ybWF0RW1haWwpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaCh7ZmllbGQ6ICdlbWFpbCcsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0RW1haWx9KTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ0FwcHMgPSBhd2FpdCBnZXRMaXN0Qnk8QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCB7XG4gICAgICBsb2dpYzogJ09SJyxcbiAgICAgIGNvbmRpdGlvbnNcbiAgICB9IGFzIGFueSk7XG5cbiAgICBpZihleGlzdGluZ0FwcHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtuYW1lfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuRVhJU1RJTkdfSVRFTVxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge25hbWV9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgaW5zZXJ0OiBBcHBUeXBlID0ge1xuICAgIF9rZXk6IGNyZWF0ZUhhc2gobmFtZSksXG4gICAgYWN0aXZlOiB0cnVlLFxuICAgIC4uLmluc2VydERhdGFcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgYWRkSXRlbTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGluc2VydCk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQXBwID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFwcDogQXBwVHlwZSk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICBjb25zdCBhcHBJZFBhcnNlZCA9IGdldEFwcEtleShhcHApO1xuXG4gIGlmKCFhcHBJZFBhcnNlZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb246ICd1cGRhdGVBcHAnLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHthcHB9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFNcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB1cGRhdGVJdGVtPEFwcFR5cGU+KGNvbnRleHQsICdhcHBzJywgYXBwSWRQYXJzZWQsIGJ1aWxkQXBwTXV0YXRpb24oYXBwKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQXBwID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFwcDogQXBwVHlwZSk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbiA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uIGFzIFNlc3Npb24pO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT04pKTtcbiAgfVxuXG4gIGNvbnN0IGFwcERvY0lkID0gZ2V0RG9jSWQoJ2FwcHMnLCBhcHApO1xuICBjb25zdCBkZWxldGVkQXBwID0gYXdhaXQgZGVsZXRlSXRlbTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGFwcERvY0lkKTtcblxuICBpZiAoIWRlbGV0ZWRBcHApIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uOiAnZGVsZXRlQXBwJyxcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7YXBwfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWxldGVkQXBwO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlYWN0aXZhdGVBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgYXBwOiBBcHBUeXBlKTogUHJvbWlzZTxBcHBUeXBlPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24gYXMgU2Vzc2lvbik7XG4gIGNvbnN0IGFwcERvY0lkID0gZ2V0RG9jSWQoJ2FwcHMnLCBhcHApO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT04pKTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWQ6IEFwcFR5cGUgPSB7XG4gICAgYWN0aXZlOiBmYWxzZVxuICB9O1xuXG4gIHJldHVybiBhd2FpdCB1cGRhdGVJdGVtPEFwcFR5cGU+KGNvbnRleHQsICdhcHBzJywgYXBwRG9jSWQsIHVwZGF0ZWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogQXBwT3B0aW9ucyk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICBjb25zdCB7ZmllbGRzLCBzZXNzaW9uID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHBhcnNlQXBwT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24gYXMgU2Vzc2lvbik7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTikpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGdldEl0ZW1CeTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGJ1aWxkQXBwR2V0RmlsdGVycyhwYXJzZWRPcHRpb25zKSBhcyBhbnksIGdldEFwcFF1ZXJ5T3B0aW9ucyhmaWVsZHMpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBzID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBBcHBPcHRpb25zKTogUHJvbWlzZTxBcHBUeXBlW10+ID0+IHtcbiAgY29uc3Qge2ZpZWxkcywgc2Vzc2lvbiA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSBwYXJzZUFwcE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZWRPcHRpb25zO1xuICBjb25zdCBpc0FkbWluID0gaXNBZG1pblVzZXIoc2Vzc2lvbiBhcyBTZXNzaW9uKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgZ2V0TGlzdEJ5PEFwcFR5cGU+KGNvbnRleHQsICdhcHBzJywgYnVpbGRBcHBHZXRGaWx0ZXJzKHBhcnNlZE9wdGlvbnMpIGFzIGFueSwge1xuICAgIHNvcnQ6IFt7ZmllbGQ6ICduYW1lJywgZGlyZWN0aW9uOiAnQVNDJ31dLFxuICAgIGxpbWl0OiB7ZnJvbTogbGltaXQuc3RhcnQsIHRvOiBsaW1pdC5zdGFydCArIGxpbWl0Lm51bX0sXG4gICAgLi4uZ2V0QXBwUXVlcnlPcHRpb25zKGZpZWxkcylcbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VFbWFpbCIsInBhcnNlSWQiLCJwYXJzZVBob25lIiwicGFyc2VTdHJpbmciLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJsb2dFeGNlcHRpb24iLCJVc2VyRXJyb3IiLCJnZXREb2NJZCIsImdldExpbWl0Iiwic2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSIsImlzQWRtaW5Vc2VyIiwiYWRkSXRlbSIsImRlbGV0ZUl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwiZXZlbnRDYXRlZ29yeSIsImdldEFwcE9wdGlvbmFsIiwiZmllbGRzIiwicmVkdWNlIiwic2VsZWN0cyIsImZpZWxkIiwiaW5jbHVkZXMiLCJvYmplY3RzIiwicXVlcmllcyIsInBhcnNlQXBwT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwidG8iLCJsaW1pdCIsImJ1aWxkQXBwR2V0RmlsdGVycyIsImlkIiwia2V5IiwibmFtZSIsImNvbmRpdGlvbnMiLCJvcGVyYXRvciIsInZhbHVlIiwicHVzaCIsImxvZ2ljIiwiZ2V0QXBwUXVlcnlPcHRpb25zIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJjdXN0b21PYmplY3RzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiY3VzdG9tUXVlcmllcyIsImdldEFwcEtleSIsImFwcCIsIl9rZXkiLCJfaWQiLCJhcHBJZCIsInNwbGl0IiwiYnVpbGRBcHBNdXRhdGlvbiIsImVtYWlsIiwicGhvbmUiLCJhZGRBcHAiLCJjb250ZXh0IiwiYWN0aW9uIiwiaW5zZXJ0RGF0YSIsImZvcm1hdEVtYWlsIiwiZm9ybWF0TmFtZSIsImNhdGVnb3J5IiwicGFyYW1zIiwiSU5WQUxJRF9BUkdVTUVOVFMiLCJleGlzdGluZ0FwcHMiLCJFWElTVElOR19JVEVNIiwiZXJyb3IiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiaW5zZXJ0IiwiYWN0aXZlIiwidXBkYXRlQXBwIiwiYXBwSWRQYXJzZWQiLCJkZWxldGVBcHAiLCJzZXNzaW9uIiwiaXNBZG1pbiIsIlByb21pc2UiLCJyZWplY3QiLCJJTlZBTElEX1NFU1NJT04iLCJhcHBEb2NJZCIsImRlbGV0ZWRBcHAiLCJJTlZBTElEX0lEIiwiZGVhY3RpdmF0ZUFwcCIsInVwZGF0ZWQiLCJnZXRBcHAiLCJwYXJzZWRPcHRpb25zIiwiZ2V0QXBwcyIsInNvcnQiLCJkaXJlY3Rpb24iLCJzdGFydCIsIm51bSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDckgsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxR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
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2FwcHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VFbWFpbCwgcGFyc2VJZCwgcGFyc2VQaG9uZSwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb24sIFVzZXJFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGV9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtpc0FkbWluVXNlcn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZGVsZXRlSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcHBUeXBlfSBmcm9tICcuLi90eXBlcy9hcHBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtTZXNzaW9ufSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2FwcHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE9wdGlvbnMge1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBmcm9tPzogbnVtYmVyO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB0bz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEFwcE9wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgnYXBwcycsICdhJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RzO1xuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUFwcE9wdGlvbnMgPSAob3B0aW9uczogQXBwT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbGltaXRcbiAgfTtcbn07XG5cbmNvbnN0IGJ1aWxkQXBwR2V0RmlsdGVycyA9ICh7aWQsIGtleSwgbmFtZX06IEFwcE9wdGlvbnMpOiB7bG9naWM6ICdBTkQnOyBjb25kaXRpb25zOiBhbnlbXX0gPT4ge1xuICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFt7ZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHRydWV9XTtcblxuICBpZihpZCkge1xuICAgIGNvbmRpdGlvbnMucHVzaCh7ZmllbGQ6ICdfaWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHBhcnNlQXJhbmdvSWQoaWQpfSk7XG4gIH1cblxuICBpZihrZXkpIHtcbiAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAnX2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogcGFyc2VJZChrZXkpfSk7XG4gIH1cblxuICBpZihuYW1lKSB7XG4gICAgY29uZGl0aW9ucy5wdXNoKHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJ0NPTlRBSU5TJywgdmFsdWU6IHBhcnNlU3RyaW5nKG5hbWUpfSk7XG4gIH1cblxuICByZXR1cm4ge2xvZ2ljOiAnQU5EJywgY29uZGl0aW9uc307XG59O1xuXG5jb25zdCBnZXRBcHBRdWVyeU9wdGlvbnMgPSAoZmllbGRzOiBzdHJpbmdbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEFwcE9wdGlvbmFsKGZpZWxkcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBzZWxlY3RPYmplY3RzIDogdW5kZWZpbmVkLFxuICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMubGVuZ3RoID4gMCA/IHNlbGVjdFF1ZXJpZXMgOiB1bmRlZmluZWRcbiAgfTtcbn07XG5cbmNvbnN0IGdldEFwcEtleSA9IChhcHA6IEFwcFR5cGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB7X2tleSwgX2lkLCBpZCwgYXBwSWR9ID0gYXBwO1xuICByZXR1cm4gX2tleSB8fCBpZCB8fCBhcHBJZCB8fCBfaWQ/LnNwbGl0KCcvJylbMV07XG59O1xuXG5jb25zdCBidWlsZEFwcE11dGF0aW9uID0gKGFwcDogQXBwVHlwZSk6IFBhcnRpYWw8QXBwVHlwZT4gPT4ge1xuICBjb25zdCB7ZW1haWwgPSAnJywgbmFtZSA9ICcnLCBwaG9uZSA9ICcnfSA9IGFwcDtcblxuICByZXR1cm4ge1xuICAgIGVtYWlsOiBwYXJzZUVtYWlsKGVtYWlsKSxcbiAgICBuYW1lOiBwYXJzZVN0cmluZyhuYW1lKSxcbiAgICBwaG9uZTogcGFyc2VQaG9uZShwaG9uZSlcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgYXBwOiBBcHBUeXBlKTogUHJvbWlzZTxBcHBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRBcHAnO1xuICBjb25zdCB7bmFtZSA9ICcnfSA9IGFwcDtcbiAgY29uc3QgaW5zZXJ0RGF0YSA9IGJ1aWxkQXBwTXV0YXRpb24oYXBwKTtcbiAgY29uc3Qge2VtYWlsOiBmb3JtYXRFbWFpbCwgbmFtZTogZm9ybWF0TmFtZX0gPSBpbnNlcnREYXRhO1xuXG4gIGlmKCFmb3JtYXROYW1lKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7bmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UU1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDaGVjayBmb3IgZXhpc3RpbmcgYXBwIHVzaW5nIGdlbmVyaWMgcXVlcnlcbiAgICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtcbiAgICAgIHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdE5hbWV9XG4gICAgXTtcblxuICAgIGlmKGZvcm1hdEVtYWlsKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAnZW1haWwnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdEVtYWlsfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdBcHBzID0gYXdhaXQgZ2V0TGlzdEJ5PEFwcFR5cGU+KGNvbnRleHQsICdhcHBzJywge1xuICAgICAgbG9naWM6ICdPUicsXG4gICAgICBjb25kaXRpb25zXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgaWYoZXhpc3RpbmdBcHBzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7bmFtZX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkVYSVNUSU5HX0lURU1cbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtuYW1lfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydDogQXBwVHlwZSA9IHtcbiAgICBfa2V5OiBjcmVhdGVIYXNoKG5hbWUpLFxuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAuLi5pbnNlcnREYXRhXG4gIH07XG5cbiAgcmV0dXJuIGF3YWl0IGFkZEl0ZW08QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCBpbnNlcnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3QgYXBwSWRQYXJzZWQgPSBnZXRBcHBLZXkoYXBwKTtcblxuICBpZighYXBwSWRQYXJzZWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uOiAndXBkYXRlQXBwJyxcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7YXBwfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVJHVU1FTlRTXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdXBkYXRlSXRlbTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGFwcElkUGFyc2VkLCBidWlsZEFwcE11dGF0aW9uKGFwcCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb24gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBpc0FkbWluID0gaXNBZG1pblVzZXIoc2Vzc2lvbiBhcyBTZXNzaW9uKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICBjb25zdCBhcHBEb2NJZCA9IGdldERvY0lkKCdhcHBzJywgYXBwKTtcbiAgY29uc3QgZGVsZXRlZEFwcCA9IGF3YWl0IGRlbGV0ZUl0ZW08QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCBhcHBEb2NJZCk7XG5cbiAgaWYgKCFkZWxldGVkQXBwKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbjogJ2RlbGV0ZUFwcCcsXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2FwcH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVsZXRlZEFwcDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWFjdGl2YXRlQXBwID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFwcDogQXBwVHlwZSk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbiA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uIGFzIFNlc3Npb24pO1xuICBjb25zdCBhcHBEb2NJZCA9IGdldERvY0lkKCdhcHBzJywgYXBwKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICBjb25zdCB1cGRhdGVkOiBBcHBUeXBlID0ge1xuICAgIGFjdGl2ZTogZmFsc2VcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgdXBkYXRlSXRlbTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGFwcERvY0lkLCB1cGRhdGVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IEFwcE9wdGlvbnMpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3Qge2ZpZWxkcywgc2Vzc2lvbiA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSBwYXJzZUFwcE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uIGFzIFNlc3Npb24pO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT04pKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBnZXRJdGVtQnk8QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCBidWlsZEFwcEdldEZpbHRlcnMocGFyc2VkT3B0aW9ucykgYXMgYW55LCBnZXRBcHBRdWVyeU9wdGlvbnMoZmllbGRzKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwcyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogQXBwT3B0aW9ucyk6IFByb21pc2U8QXBwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb24gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwYXJzZWRPcHRpb25zID0gcGFyc2VBcHBPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VkT3B0aW9ucztcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24gYXMgU2Vzc2lvbik7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTikpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGdldExpc3RCeTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGJ1aWxkQXBwR2V0RmlsdGVycyhwYXJzZWRPcHRpb25zKSBhcyBhbnksIHtcbiAgICBzb3J0OiBbe2ZpZWxkOiAnbmFtZScsIGRpcmVjdGlvbjogJ0FTQyd9XSxcbiAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgIC4uLmdldEFwcFF1ZXJ5T3B0aW9ucyhmaWVsZHMpXG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlRW1haWwiLCJwYXJzZUlkIiwicGFyc2VQaG9uZSIsInBhcnNlU3RyaW5nIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwibG9nRXhjZXB0aW9uIiwiVXNlckVycm9yIiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUiLCJpc0FkbWluVXNlciIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRBcHBPcHRpb25hbCIsImZpZWxkcyIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsImluY2x1ZGVzIiwib2JqZWN0cyIsInF1ZXJpZXMiLCJwYXJzZUFwcE9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwibGltaXQiLCJidWlsZEFwcEdldEZpbHRlcnMiLCJpZCIsImtleSIsIm5hbWUiLCJjb25kaXRpb25zIiwib3BlcmF0b3IiLCJ2YWx1ZSIsInB1c2giLCJsb2dpYyIsImdldEFwcFF1ZXJ5T3B0aW9ucyIsInNlbGVjdE9iamVjdHMiLCJzZWxlY3RRdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImN1c3RvbVF1ZXJpZXMiLCJnZXRBcHBLZXkiLCJhcHAiLCJfa2V5IiwiX2lkIiwiYXBwSWQiLCJzcGxpdCIsImJ1aWxkQXBwTXV0YXRpb24iLCJlbWFpbCIsInBob25lIiwiYWRkQXBwIiwiY29udGV4dCIsImFjdGlvbiIsImluc2VydERhdGEiLCJmb3JtYXRFbWFpbCIsImZvcm1hdE5hbWUiLCJjYXRlZ29yeSIsInBhcmFtcyIsIklOVkFMSURfQVJHVU1FTlRTIiwiZXhpc3RpbmdBcHBzIiwiRVhJU1RJTkdfSVRFTSIsImVycm9yIiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImluc2VydCIsImFjdGl2ZSIsInVwZGF0ZUFwcCIsImFwcElkUGFyc2VkIiwiZGVsZXRlQXBwIiwic2Vzc2lvbiIsImlzQWRtaW4iLCJQcm9taXNlIiwicmVqZWN0IiwiSU5WQUxJRF9TRVNTSU9OIiwiYXBwRG9jSWQiLCJkZWxldGVkQXBwIiwiSU5WQUxJRF9JRCIsImRlYWN0aXZhdGVBcHAiLCJ1cGRhdGVkIiwiZ2V0QXBwIiwicGFyc2VkT3B0aW9ucyIsImdldEFwcHMiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3JILFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLFNB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
@@ -125,4 +125,4 @@ export const deleteConnection = (context, fromType, fromId, toType, toId, connec
125
125
  });
126
126
  };
127
127
 
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29ubmVjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge2xpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtidWlsZEZpbHRlckNsYXVzZX0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcblxuaW1wb3J0IHR5cGUge0ZpbHRlckdyb3VwfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Nvbm5lY3Rpb25LaW5kc30gZnJvbSAnLi4vdHlwZXMvY29ubmVjdGlvbnMudHlwZXMuanMnO1xuXG5pbXBvcnQgdHlwZSB7Q29ubmVjdGlvbktpbmRUeXBlLCBDb25uZWN0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29ubmVjdGlvbnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2Nvbm5lY3Rpb25zJztcbmNvbnN0IGhhc0Nvbm5lY3Rpb25Db2xsZWN0aW9uID0gbGl0ZXJhbCgnaGFzQ29ubmVjdGlvbicpO1xuXG5jb25zdCByZW1vdmVGb2xsb3dDb25uZWN0aW9uc0ZvckJsb2NrZWRQYWlyID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tRG9jSWQ6IHN0cmluZyxcbiAgdG9Eb2NJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBGT1IgaGMgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBoYy50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgIEZJTFRFUiAoXG4gICAgICAgIChoYy5fZnJvbSA9PSAke2Zyb21Eb2NJZH0gJiYgaGMuX3RvID09ICR7dG9Eb2NJZH0pXG4gICAgICAgIHx8IChoYy5fZnJvbSA9PSAke3RvRG9jSWR9ICYmIGhjLl90byA9PSAke2Zyb21Eb2NJZH0pXG4gICAgICApXG4gICAgICBSRU1PVkUgaGMgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgYCk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQ29ubmVjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVR5cGU6IHN0cmluZyxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvVHlwZTogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmcsXG4gIHZhbHVlPzogc3RyaW5nLFxuICBjb25uZWN0aW9uVHlwZTogQ29ubmVjdGlvbktpbmRUeXBlID0gQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRDb25uZWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IGZvcm1hdEZyb21Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoYCR7ZnJvbVR5cGV9LyR7ZnJvbUlkfWApO1xuICBjb25zdCBmb3JtYXRUb0RvY0lkID0gcGFyc2VBcmFuZ29JZChgJHt0b1R5cGV9LyR7dG9JZH1gKTtcbiAgY29uc3QgaW5zZXJ0ID0ge1xuICAgIF9mcm9tOiBmb3JtYXRGcm9tRG9jSWQsXG4gICAgX3RvOiBmb3JtYXRUb0RvY0lkLFxuICAgIGlzRGlyZWN0OiB0cnVlLFxuICAgIHR5cGU6IGNvbm5lY3Rpb25UeXBlLFxuICAgIHZhbHVlOiAhIXZhbHVlID8gcGFyc2VTdHJpbmcodmFsdWUsIDMyKSA6IHVuZGVmaW5lZFxuICB9O1xuICBjb25zdCBhcWxRcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBoYXNDb25uZWN0aW9uYDtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICBpZihjb25uZWN0aW9uVHlwZSA9PT0gQ29ubmVjdGlvbktpbmRzLkJMT0NLKSB7XG4gICAgICAgIGF3YWl0IHJlbW92ZUZvbGxvd0Nvbm5lY3Rpb25zRm9yQmxvY2tlZFBhaXIoY29udGV4dCwgZm9ybWF0RnJvbURvY0lkLCBmb3JtYXRUb0RvY0lkKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KSlcbiAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVR5cGU6IHN0cmluZyxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvVHlwZTogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmcsXG4gIGNvbm5lY3Rpb25UeXBlOiBDb25uZWN0aW9uS2luZFR5cGUgPSBDb25uZWN0aW9uS2luZHMuRk9MTE9XXG4pOiBQcm9taXNlPENvbm5lY3Rpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDb25uZWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IGZvcm1hdEZyb21Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoYCR7ZnJvbVR5cGV9LyR7ZnJvbUlkfWApO1xuICBjb25zdCBmb3JtYXRUb0RvY0lkID0gcGFyc2VBcmFuZ29JZChgJHt0b1R5cGV9LyR7dG9JZH1gKTtcblxuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJHcm91cCA9IHtcbiAgICBsb2dpYzogJ0FORCcsXG4gICAgY29uZGl0aW9uczogW1xuICAgICAge2ZpZWxkOiAnX2Zyb20nLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdEZyb21Eb2NJZH0sXG4gICAgICB7ZmllbGQ6ICdfdG8nLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdFRvRG9jSWR9LFxuICAgICAge2ZpZWxkOiAndHlwZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogY29ubmVjdGlvblR5cGV9XG4gICAgXVxuICB9O1xuICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlckNsYXVzZShmaWx0ZXJzLCAnaGMnKTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYFxuICAgIEZPUiBoYyBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJDbGF1c2UpfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIGhjXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUNvbm5lY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21UeXBlOiBzdHJpbmcsXG4gIGZyb21JZDogc3RyaW5nLFxuICB0b1R5cGU6IHN0cmluZyxcbiAgdG9JZDogc3RyaW5nLFxuICBjb25uZWN0aW9uVHlwZTogQ29ubmVjdGlvbktpbmRUeXBlID0gQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVDb25uZWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRGcm9tRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke2Zyb21UeXBlfS8ke2Zyb21JZH1gKTtcbiAgY29uc3QgZm9ybWF0VG9Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG5cbiAgY29uc3QgZmlsdGVyczogRmlsdGVyR3JvdXAgPSB7XG4gICAgbG9naWM6ICdBTkQnLFxuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIHtmaWVsZDogJ19mcm9tJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRGcm9tRG9jSWR9LFxuICAgICAge2ZpZWxkOiAnX3RvJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRUb0RvY0lkfSxcbiAgICAgIHtmaWVsZDogJ3R5cGUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGNvbm5lY3Rpb25UeXBlfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2UoZmlsdGVycywgJ2hjJyk7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBcbiAgICBGT1IgaGMgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBoYyBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlQXJhbmdvSWQiLCJwYXJzZVN0cmluZyIsImFxbCIsImxpdGVyYWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJidWlsZEZpbHRlckNsYXVzZSIsInVzZURiIiwiQ29ubmVjdGlvbktpbmRzIiwiZXZlbnRDYXRlZ29yeSIsImhhc0Nvbm5lY3Rpb25Db2xsZWN0aW9uIiwicmVtb3ZlRm9sbG93Q29ubmVjdGlvbnNGb3JCbG9ja2VkUGFpciIsImNvbnRleHQiLCJmcm9tRG9jSWQiLCJ0b0RvY0lkIiwiZGF0YWJhc2VOYW1lIiwicXVlcnkiLCJGT0xMT1ciLCJhZGRDb25uZWN0aW9uIiwiZnJvbVR5cGUiLCJmcm9tSWQiLCJ0b1R5cGUiLCJ0b0lkIiwidmFsdWUiLCJjb25uZWN0aW9uVHlwZSIsImFjdGlvbiIsImZvcm1hdEZyb21Eb2NJZCIsImZvcm1hdFRvRG9jSWQiLCJpbnNlcnQiLCJfZnJvbSIsIl90byIsImlzRGlyZWN0IiwidHlwZSIsInVuZGVmaW5lZCIsImFxbFFyeSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIkJMT0NLIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldENvbm5lY3Rpb24iLCJmaWx0ZXJzIiwibG9naWMiLCJjb25kaXRpb25zIiwiZmllbGQiLCJvcGVyYXRvciIsImZpbHRlckNsYXVzZSIsImN1cnNvciIsIm5leHQiLCJkZWxldGVDb25uZWN0aW9uIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFRQSxhQUFhLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDeEUsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFFckMsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLGlCQUFpQixRQUFPLHlCQUF5QjtBQUN6RCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBSWhELFNBQVFDLGVBQWUsUUFBTyxnQ0FBZ0M7QUFJOUQsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLDBCQUEwQlAsUUFBUTtBQUV4QyxNQUFNUSx3Q0FBd0MsT0FDNUNDLFNBQ0FDLFdBQ0FDO0lBRUEsTUFBTVAsTUFBTUssUUFBUUcsWUFBWSxFQUFFQyxLQUFLLENBQUNkLEdBQUcsQ0FBQztjQUNoQyxFQUFFUSx3QkFBd0I7d0JBQ2hCLEVBQUVGLGdCQUFnQlMsTUFBTSxDQUFDOztxQkFFNUIsRUFBRUosVUFBVSxjQUFjLEVBQUVDLFFBQVE7d0JBQ2pDLEVBQUVBLFFBQVEsY0FBYyxFQUFFRCxVQUFVOzttQkFFekMsRUFBRUgsd0JBQXdCO0VBQzNDLENBQUM7QUFDSDtBQUVBLE9BQU8sTUFBTVEsZ0JBQWdCLENBQzNCTixTQUNBTyxVQUNBQyxRQUNBQyxRQUNBQyxNQUNBQyxPQUNBQyxpQkFBcUNoQixnQkFBZ0JTLE1BQU07SUFFM0QsTUFBTVEsU0FBUztJQUNmLE1BQU0sRUFBQ1YsWUFBWSxFQUFDLEdBQUdIO0lBRXZCLE1BQU1jLGtCQUFrQjFCLGNBQWMsR0FBR21CLFNBQVMsQ0FBQyxFQUFFQyxRQUFRO0lBQzdELE1BQU1PLGdCQUFnQjNCLGNBQWMsR0FB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
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2Nvbm5lY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7YnVpbGRGaWx0ZXJDbGF1c2V9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5cbmltcG9ydCB0eXBlIHtGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHtDb25uZWN0aW9uS2luZHN9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3Rpb25zLnR5cGVzLmpzJztcblxuaW1wb3J0IHR5cGUge0Nvbm5lY3Rpb25LaW5kVHlwZSwgQ29ubmVjdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3Rpb25zLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdjb25uZWN0aW9ucyc7XG5jb25zdCBoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoJ2hhc0Nvbm5lY3Rpb24nKTtcblxuY29uc3QgcmVtb3ZlRm9sbG93Q29ubmVjdGlvbnNGb3JCbG9ja2VkUGFpciA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbURvY0lkOiBzdHJpbmcsXG4gIHRvRG9jSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgRk9SIGhjIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgaGMudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICBGSUxURVIgKFxuICAgICAgICAoaGMuX2Zyb20gPT0gJHtmcm9tRG9jSWR9ICYmIGhjLl90byA9PSAke3RvRG9jSWR9KVxuICAgICAgICB8fCAoaGMuX2Zyb20gPT0gJHt0b0RvY0lkfSAmJiBoYy5fdG8gPT0gJHtmcm9tRG9jSWR9KVxuICAgICAgKVxuICAgICAgUkVNT1ZFIGhjIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gIGApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZENvbm5lY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21UeXBlOiBzdHJpbmcsXG4gIGZyb21JZDogc3RyaW5nLFxuICB0b1R5cGU6IHN0cmluZyxcbiAgdG9JZDogc3RyaW5nLFxuICB2YWx1ZT86IHN0cmluZyxcbiAgY29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25LaW5kVHlwZSA9IENvbm5lY3Rpb25LaW5kcy5GT0xMT1dcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkQ29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICBjb25zdCBmb3JtYXRGcm9tRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke2Zyb21UeXBlfS8ke2Zyb21JZH1gKTtcbiAgY29uc3QgZm9ybWF0VG9Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG4gIGNvbnN0IGluc2VydCA9IHtcbiAgICBfZnJvbTogZm9ybWF0RnJvbURvY0lkLFxuICAgIF90bzogZm9ybWF0VG9Eb2NJZCxcbiAgICBpc0RpcmVjdDogdHJ1ZSxcbiAgICB0eXBlOiBjb25uZWN0aW9uVHlwZSxcbiAgICB2YWx1ZTogISF2YWx1ZSA/IHBhcnNlU3RyaW5nKHZhbHVlLCAzMikgOiB1bmRlZmluZWRcbiAgfTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gaGFzQ29ubmVjdGlvbmA7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT09IENvbm5lY3Rpb25LaW5kcy5CTE9DSykge1xuICAgICAgICBhd2FpdCByZW1vdmVGb2xsb3dDb25uZWN0aW9uc0ZvckJsb2NrZWRQYWlyKGNvbnRleHQsIGZvcm1hdEZyb21Eb2NJZCwgZm9ybWF0VG9Eb2NJZCk7XG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSkpXG4gICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21UeXBlOiBzdHJpbmcsXG4gIGZyb21JZDogc3RyaW5nLFxuICB0b1R5cGU6IHN0cmluZyxcbiAgdG9JZDogc3RyaW5nLFxuICBjb25uZWN0aW9uVHlwZTogQ29ubmVjdGlvbktpbmRUeXBlID0gQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICBjb25zdCBmb3JtYXRGcm9tRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke2Zyb21UeXBlfS8ke2Zyb21JZH1gKTtcbiAgY29uc3QgZm9ybWF0VG9Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG5cbiAgY29uc3QgZmlsdGVyczogRmlsdGVyR3JvdXAgPSB7XG4gICAgbG9naWM6ICdBTkQnLFxuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIHtmaWVsZDogJ19mcm9tJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRGcm9tRG9jSWR9LFxuICAgICAge2ZpZWxkOiAnX3RvJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRUb0RvY0lkfSxcbiAgICAgIHtmaWVsZDogJ3R5cGUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGNvbm5lY3Rpb25UeXBlfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2UoZmlsdGVycywgJ2hjJyk7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBcbiAgICBGT1IgaGMgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBoY1xuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVDb25uZWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVHlwZTogc3RyaW5nLFxuICBmcm9tSWQ6IHN0cmluZyxcbiAgdG9UeXBlOiBzdHJpbmcsXG4gIHRvSWQ6IHN0cmluZyxcbiAgY29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25LaW5kVHlwZSA9IENvbm5lY3Rpb25LaW5kcy5GT0xMT1dcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlQ29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0RnJvbURvY0lkID0gcGFyc2VBcmFuZ29JZChgJHtmcm9tVHlwZX0vJHtmcm9tSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFRvRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke3RvVHlwZX0vJHt0b0lkfWApO1xuXG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlckdyb3VwID0ge1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICdfZnJvbScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0RnJvbURvY0lkfSxcbiAgICAgIHtmaWVsZDogJ190bycsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0VG9Eb2NJZH0sXG4gICAgICB7ZmllbGQ6ICd0eXBlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBjb25uZWN0aW9uVHlwZX1cbiAgICBdXG4gIH07XG4gIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVyQ2xhdXNlKGZpbHRlcnMsICdoYycpO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgXG4gICAgRk9SIGhjIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRU1PVkUgaGMgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZUFyYW5nb0lkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwiYnVpbGRGaWx0ZXJDbGF1c2UiLCJ1c2VEYiIsIkNvbm5lY3Rpb25LaW5kcyIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiIsInJlbW92ZUZvbGxvd0Nvbm5lY3Rpb25zRm9yQmxvY2tlZFBhaXIiLCJjb250ZXh0IiwiZnJvbURvY0lkIiwidG9Eb2NJZCIsImRhdGFiYXNlTmFtZSIsInF1ZXJ5IiwiRk9MTE9XIiwiYWRkQ29ubmVjdGlvbiIsImZyb21UeXBlIiwiZnJvbUlkIiwidG9UeXBlIiwidG9JZCIsInZhbHVlIiwiY29ubmVjdGlvblR5cGUiLCJhY3Rpb24iLCJmb3JtYXRGcm9tRG9jSWQiLCJmb3JtYXRUb0RvY0lkIiwiaW5zZXJ0IiwiX2Zyb20iLCJfdG8iLCJpc0RpcmVjdCIsInR5cGUiLCJ1bmRlZmluZWQiLCJhcWxRcnkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJCTE9DSyIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXRDb25uZWN0aW9uIiwiZmlsdGVycyIsImxvZ2ljIiwiY29uZGl0aW9ucyIsImZpZWxkIiwib3BlcmF0b3IiLCJmaWx0ZXJDbGF1c2UiLCJjdXJzb3IiLCJuZXh0IiwiZGVsZXRlQ29ubmVjdGlvbiJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUUEsYUFBYSxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3hFLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBRXJDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxpQkFBaUIsUUFBTyx5QkFBeUI7QUFDekQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUloRCxTQUFRQyxlQUFlLFFBQU8sZ0NBQWdDO0FBSTlELE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQywwQkFBMEJQLFFBQVE7QUFFeEMsTUFBTVEsd0NBQXdDLE9BQzVDQyxTQUNBQyxXQUNBQztJQUVBLE1BQU1QLE1BQU1LLFFBQVFHLFlBQVksRUFBRUMsS0FBSyxDQUFDZCxHQUFHLENBQUM7Y0FDaEMsRUFBRVEsd0JBQXdCO3dCQUNoQixFQUFFRixnQkFBZ0JTLE1BQU0sQ0FBQzs7cUJBRTVCLEVBQUVKLFVBQVUsY0FBYyxFQUFFQyxRQUFRO3dCQUNqQyxFQUFFQSxRQUFRLGNBQWMsRUFBRUQsVUFBVTs7bUJBRXpDLEVBQUVILHdCQUF3QjtFQUMzQyxDQUFDO0FBQ0g7QUFFQSxPQUFPLE1BQU1RLGdCQUFnQixDQUMzQk4sU0FDQU8sVUFDQUMsUUFDQUMsUUFDQUMsTUFDQUMsT0FDQUMsaUJBQXFDaEIsZ0JBQWdCUyxNQUFNO0lBRTNELE1BQU1RLFNBQVM7SUFDZixNQUFNLEVBQUNWLFlBQVksRUFBQyxHQUFHSDtJQUV2QixNQUFNYyxrQkFBa0IxQixjQUFjLEdBQUdtQixTQUFTLENBQUMsRUFBRUMsUUFBUTtJQUM3RCxNQUFNTyxn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
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { createHash, parseString } from '@nlabs/utils/parsers/strings';
5
5
  import { parseContentFromDb, parseContentInput } from '../adapters/contentAdapter.js';
6
6
  import { Config } from '../config.js';
@@ -209,4 +209,4 @@ export const searchContent = async (context, options = {})=>{
209
209
  return contentList.map((content)=>parseContentFromDb(content));
210
210
  };
211
211
 
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udGVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5cbmltcG9ydCB7cGFyc2VDb250ZW50RnJvbURiLCBwYXJzZUNvbnRlbnRJbnB1dH0gZnJvbSAnLi4vYWRhcHRlcnMvY29udGVudEFkYXB0ZXIuanMnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge3RyYW5zbGF0ZVRleHR9IGZyb20gJy4uL3V0aWxzL2dvb2dsZVRyYW5zbGF0ZS5qcyc7XG5pbXBvcnQge2V4dHJhY3RMYW5ndWFnZSwgaXNSZWdpb25hbExvY2FsZX0gZnJvbSAnLi4vdXRpbHMvbG9jYWxlVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0NvbnRlbnRJbnB1dFR5cGUsIENvbnRlbnRPcHRpb25zLCBDb250ZW50VHlwZSwgTG9jYWxlfSBmcm9tICcuLi90eXBlcy9jb250ZW50LnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnRPcHRpb25zID0gKG9wdGlvbnM6IENvbnRlbnRPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGNhdGVnb3J5LFxuICAgIGlzQWN0aXZlID0gdHJ1ZSxcbiAgICBrZXksXG4gICAgbG9jYWxlXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgY2F0ZWdvcnk6IGNhdGVnb3J5ID8gcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCkgOiB1bmRlZmluZWQsXG4gICAgaXNBY3RpdmUsXG4gICAga2V5OiBrZXkgPyBwYXJzZVN0cmluZyhrZXksIDIwMCkgOiB1bmRlZmluZWQsXG4gICAgbG9jYWxlXG4gIH07XG59O1xuXG5jb25zdCBidWlsZENvbnRlbnRGaWx0ZXJzID0gKG9wdGlvbnM6IENvbnRlbnRPcHRpb25zID0ge30pOiBGaWx0ZXJHcm91cCB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHtjYXRlZ29yeSwgaXNBY3RpdmUsIGtleSwgbG9jYWxlfSA9IHBhcnNlQ29udGVudE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZpbHRlcnM6IGFueVtdID0gW107XG5cbiAgaWYoa2V5KSB7XG4gICAgZmlsdGVycy5wdXNoKHtmaWVsZDogJ2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZToga2V5fSk7XG4gIH1cblxuICBpZihsb2NhbGUpIHtcbiAgICBmaWx0ZXJzLnB1c2goe2ZpZWxkOiAnbG9jYWxlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBsb2NhbGV9KTtcbiAgfVxuXG4gIGlmKGNhdGVnb3J5KSB7XG4gICAgZmlsdGVycy5wdXNoKHtmaWVsZDogJ2NhdGVnb3J5Jywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBjYXRlZ29yeX0pO1xuICB9XG5cbiAgaWYoaXNBY3RpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgIGZpbHRlcnMucHVzaCh7ZmllbGQ6ICdpc0FjdGl2ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogaXNBY3RpdmV9KTtcbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA+IDAgPyB7b3BlcmF0b3I6ICdBTkQnLCBmaWx0ZXJzfSBhcyBhbnkgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBidWlsZENvbnRlbnRNdXRhdGlvbiA9IChcbiAgY29udGVudElucHV0OiBDb250ZW50SW5wdXRUeXBlLFxuICBvcHRpb25zOiB7cmVhZG9ubHkgaW5jbHVkZUlkZW50aXR5PzogYm9vbGVhbn0gPSB7fVxuKTogUGFydGlhbDxDb250ZW50VHlwZT4gPT4ge1xuICBjb25zdCBwYXJzZWRDb250ZW50ID0gcGFyc2VDb250ZW50SW5wdXQoY29udGVudElucHV0KTtcbiAgY29uc3Qge1xuICAgIGNhdGVnb3J5LFxuICAgIGNvbnRlbnQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgaXNBY3RpdmUsXG4gICAga2V5LFxuICAgIGxvY2FsZTogcGFyc2VkTG9jYWxlXG4gIH0gPSBwYXJzZWRDb250ZW50O1xuICBjb25zdCB7aW5jbHVkZUlkZW50aXR5ID0gZmFsc2V9ID0gb3B0aW9ucztcbiAgY29uc3QgbG9jYWxlOiBMb2NhbGUgPSBwYXJzZWRMb2NhbGUgfHwgJ2VuJztcblxuICByZXR1cm4ge1xuICAgIC4uLihpbmNsdWRlSWRlbnRpdHkgJiYge2tleToga2V5ID8gcGFyc2VTdHJpbmcoa2V5LCAyMDApIDogdW5kZWZpbmVkLCBsb2NhbGV9KSxcbiAgICBjb250ZW50OiBjb250ZW50ICE9PSB1bmRlZmluZWQgPyBwYXJzZVN0cmluZyhjb250ZW50LCAxMDAwMCkgOiB1bmRlZmluZWQsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyAoZGVzY3JpcHRpb24gPyBwYXJzZVN0cmluZyhkZXNjcmlwdGlvbiwgNTAwKSA6IHVuZGVmaW5lZCkgYXMgc3RyaW5nIDogdW5kZWZpbmVkLFxuICAgIGNhdGVnb3J5OiBjYXRlZ29yeSAhPT0gdW5kZWZpbmVkID8gKGNhdGVnb3J5ID8gcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCkgOiB1bmRlZmluZWQpIGFzIHN0cmluZyA6IHVuZGVmaW5lZCxcbiAgICBpc0FjdGl2ZVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRlbnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbik6IFByb21pc2U8Q29udGVudFR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBnZXRJdGVtQnk8Q29udGVudFR5cGU+KGNvbnRleHQsICdjb250ZW50JywgYnVpbGRDb250ZW50RmlsdGVycyh7a2V5LCBsb2NhbGUsIGlzQWN0aXZlOiB0cnVlfSkpO1xuICByZXR1cm4gY29udGVudCA/IHBhcnNlQ29udGVudEZyb21EYihjb250ZW50KSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGVudFdpdGhGYWxsYmFjayA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAga2V5OiBzdHJpbmcsXG4gIGZhbGxiYWNrQ29udGVudDogc3RyaW5nLFxuICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGFwcExvY2FsZSA9IChDb25maWcuZ2V0KCdhcHAubG9jYWxlJykgfHwgJ2VuJykgYXMgTG9jYWxlO1xuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgbG9jYWxlKTtcblxuICAgIGlmKGNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgIHJldHVybiBjb250ZW50LmNvbnRlbnQ7XG4gICAgfVxuXG4gICAgaWYoaXNSZWdpb25hbExvY2FsZShsb2NhbGUpKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGV4dHJhY3RMYW5ndWFnZShsb2NhbGUpO1xuICAgICAgY29udGVudCA9IGF3YWl0IGdldENvbnRlbnQoY29udGV4dCwga2V5LCBsYW5ndWFnZSBhcyBMb2NhbGUpO1xuXG4gICAgICBpZihjb250ZW50Py5jb250ZW50KSB7XG4gICAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBjb250ZW50OiBjb250ZW50LmNvbnRlbnQsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgRXh0cmFjdGVkIGZyb20gJHtsYW5ndWFnZX1gXG4gICAgICAgIH0pLmNhdGNoKChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgZXh0cmFjdGVkIGNvbnRlbnQ6Jywgc2F2ZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQuY29udGVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihsb2NhbGUgPT09IGFwcExvY2FsZSkge1xuICAgICAgaWYoZmFsbGJhY2tDb250ZW50KSB7XG4gICAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBjb250ZW50OiBmYWxsYmFja0NvbnRlbnQsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXV0by1nZW5lcmF0ZWQgZnJvbSBmYWxsYmFjaydcbiAgICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBmYWxsYmFjayBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsbGJhY2tDb250ZW50IHx8IGtleTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzb3VyY2VDb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChjb250ZXh0LCBrZXksIGFwcExvY2FsZSk7XG4gICAgICBsZXQgc291cmNlVGV4dDogc3RyaW5nO1xuXG4gICAgICBpZihzb3VyY2VDb250ZW50Py5jb250ZW50KSB7XG4gICAgICAgIHNvdXJjZVRleHQgPSBzb3VyY2VDb250ZW50LmNvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihpc1JlZ2lvbmFsTG9jYWxlKGFwcExvY2FsZSkpIHtcbiAgICAgICAgICBjb25zdCBhcHBMYW5ndWFnZSA9IGV4dHJhY3RMYW5ndWFnZShhcHBMb2NhbGUpO1xuICAgICAgICAgIHNvdXJjZUNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgYXBwTGFuZ3VhZ2UgYXMgTG9jYWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHNvdXJjZUNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgICAgICBzb3VyY2VUZXh0ID0gc291cmNlQ29udGVudC5jb250ZW50O1xuICAgICAgICB9IGVsc2UgaWYoZmFsbGJhY2tDb250ZW50KSB7XG4gICAgICAgICAgc291cmNlVGV4dCA9IGZhbGxiYWNrQ29udGVudDtcblxuICAgICAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgY29udGVudDogZmFsbGJhY2tDb250ZW50LFxuICAgICAgICAgICAgbG9jYWxlOiBhcHBMb2NhbGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0F1dG8tZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2snXG4gICAgICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIGZhbGxiYWNrIGFzIGRlZmF1bHQgY29udGVudDonLCBzYXZlRXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJhbnNsYXRlZFRleHQgPSBhd2FpdCB0cmFuc2xhdGVUZXh0KHNvdXJjZVRleHQsIGV4dHJhY3RMYW5ndWFnZShsb2NhbGUpLCBleHRyYWN0TGFuZ3VhZ2UoYXBwTG9jYWxlKSk7XG5cbiAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICBrZXksXG4gICAgICAgIGNvbnRlbnQ6IHRyYW5zbGF0ZWRUZXh0LFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQXV0by10cmFuc2xhdGVkIGZyb20gJHthcHBMb2NhbGV9YFxuICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgdHJhbnNsYXRlZCBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRUZXh0O1xuICAgIH0gY2F0Y2godHJhbnNsYXRpb25FcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignVHJhbnNsYXRpb24gZXJyb3I6JywgdHJhbnNsYXRpb25FcnJvcik7XG5cbiAgICAgIHJldHVybiBmYWxsYmFja0NvbnRlbnQgfHwga2V5O1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNvbnRlbnQgZnJvbSBkYXRhYmFzZTonLCBlcnJvcik7XG4gICAgcmV0dXJuIGZhbGxiYWNrQ29udGVudCB8fCBrZXk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZGRDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb250ZW50SW5wdXQ6IENvbnRlbnRJbnB1dFR5cGVcbik6IFByb21pc2U8Q29udGVudFR5cGU+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3QgcGFyc2VkQ29udGVudCA9IHBhcnNlQ29udGVudElucHV0KGNvbnRlbnRJbnB1dCk7XG4gIGNvbnN0IHtcbiAgICBjYXRlZ29yeSxcbiAgICBjb250ZW50LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGlzQWN0aXZlLFxuICAgIGtleSxcbiAgICBsb2NhbGU6IHBhcnNlZExvY2FsZVxuICB9ID0gcGFyc2VkQ29udGVudDtcbiAgY29uc3QgbG9jYWxlOiBMb2NhbGUgPSBwYXJzZWRMb2NhbGUgfHwgJ2VuJztcbiAgY29uc3QgY29udGVudElkID0gY3JlYXRlSGFzaChgY29udGVudC0ke2tleX0tJHtsb2NhbGV9YCk7XG4gIGNvbnN0IGluc2VydDogQ29udGVudFR5cGUgPSB7XG4gICAgX2tleTogY29udGVudElkLFxuICAgIGtleTogcGFyc2VTdHJpbmcoa2V5LCAyMDApLFxuICAgIGxvY2FsZSxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50LCAxMDAwMCksXG4gICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYge2Rlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApIDogdW5kZWZpbmVkfSksXG4gICAgLi4uKGNhdGVnb3J5ICE9PSB1bmRlZmluZWQgJiYge2NhdGVnb3J5OiBjYXRlZ29yeSA/IHBhcnNlU3RyaW5nKGNhdGVnb3J5LCAxMDApIDogdW5kZWZpbmVkfSksXG4gICAgLi4uKGlzQWN0aXZlICE9PSB1bmRlZmluZWQgJiYge2lzQWN0aXZlfSksXG4gICAgdXNlcklkOiBzZXNzaW9uPy51c2VySWQgYXMgc3RyaW5nXG4gIH07XG5cbiAgY29uc3Qgc2F2ZWRDb250ZW50ID0gYXdhaXQgYWRkSXRlbTxDb250ZW50VHlwZT4oY29udGV4dCwgJ2NvbnRlbnQnLCBpbnNlcnQpO1xuICByZXR1cm4gcGFyc2VDb250ZW50RnJvbURiKHNhdmVkQ29udGVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udGVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udGVudElucHV0OiBDb250ZW50SW5wdXRUeXBlXG4pOiBQcm9taXNlPENvbnRlbnRUeXBlPiA9PiB7XG4gIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBwYXJzZUNvbnRlbnRJbnB1dChjb250ZW50SW5wdXQpO1xuICBjb25zdCB7Y29udGVudElkfSA9IHBhcnNlZENvbnRlbnQ7XG5cbiAgaWYoIWNvbnRlbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29udGVudCBJRCBpcyByZXF1aXJlZCBmb3IgdXBkYXRlJyk7XG4gIH1cblxuICBjb25zdCB1cGRhdGVkQ29udGVudCA9IGF3YWl0IHVwZGF0ZUl0ZW08Q29udGVudFR5cGU+KGNvbnRleHQsICdjb250ZW50JywgY29udGVudElkLCBidWlsZENvbnRlbnRNdXRhdGlvbihjb250ZW50SW5wdXQpKTtcblxuICBpZighdXBkYXRlZENvbnRlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRlbnQgbm90IGZvdW5kIG9yIGFjY2VzcyBkZW5pZWQnKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUNvbnRlbnRGcm9tRGIodXBkYXRlZENvbnRlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlYXJjaENvbnRlbnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG9wdGlvbnM6IENvbnRlbnRPcHRpb25zID0ge31cbik6IFByb21pc2U8Q29udGVudFR5cGVbXT4gPT4ge1xuICBjb25zdCBjb250ZW50TGlzdCA9IGF3YWl0IGdldExpc3RCeTxDb250ZW50VHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAnY29udGVudCcsXG4gICAgYnVpbGRDb250ZW50RmlsdGVycyhvcHRpb25zKSxcbiAgICB7c29ydDogW3tmaWVsZDogJ2tleScsIGRpcmVjdGlvbjogJ0FTQyd9LCB7ZmllbGQ6ICdsb2NhbGUnLCBkaXJlY3Rpb246ICdBU0MnfV19XG4gICk7XG5cbiAgcmV0dXJuIGNvbnRlbnRMaXN0Lm1hcCgoY29udGVudCkgPT4gcGFyc2VDb250ZW50RnJvbURiKGNvbnRlbnQpKTtcbn07XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlU3RyaW5nIiwicGFyc2VDb250ZW50RnJvbURiIiwicGFyc2VDb250ZW50SW5wdXQiLCJDb25maWciLCJ0cmFuc2xhdGVUZXh0IiwiZXh0cmFjdExhbmd1YWdlIiwiaXNSZWdpb25hbExvY2FsZSIsImFkZEl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwicGFyc2VDb250ZW50T3B0aW9ucyIsIm9wdGlvbnMiLCJjYXRlZ29yeSIsImlzQWN0aXZlIiwia2V5IiwibG9jYWxlIiwidW5kZWZpbmVkIiwiYnVpbGRDb250ZW50RmlsdGVycyIsImZpbHRlcnMiLCJwdXNoIiwiZmllbGQiLCJvcGVyYXRvciIsInZhbHVlIiwibGVuZ3RoIiwiYnVpbGRDb250ZW50TXV0YXRpb24iLCJjb250ZW50SW5wdXQiLCJwYXJzZWRDb250ZW50IiwiY29udGVudCIsImRlc2NyaXB0aW9uIiwicGFyc2VkTG9jYWxlIiwiaW5jbHVkZUlkZW50aXR5IiwiZ2V0Q29udGVudCIsImNvbnRleHQiLCJnZXRDb250ZW50V2l0aEZhbGxiYWNrIiwiZmFsbGJhY2tDb250ZW50IiwiYXBwTG9jYWxlIiwiZ2V0IiwibGFuZ3VhZ2UiLCJhZGRDb250ZW50IiwiY2F0Y2giLCJzYXZlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJzb3VyY2VDb250ZW50Iiwic291cmNlVGV4dCIsImFwcExhbmd1YWdlIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGlvbkVycm9yIiwic2Vzc2lvbiIsImNvbnRlbnRJZCIsImluc2VydCIsIl9rZXkiLCJ1c2VySWQiLCJzYXZlZENvbnRlbnQiLCJ1cGRhdGVDb250ZW50IiwiRXJyb3IiLCJ1cGRhdGVkQ29udGVudCIsInNlYXJjaENvbnRlbnQiLCJjb250ZW50TGlzdCIsInNvcnQiLCJkaXJlY3Rpb24iLCJtYXAiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUVyRSxTQUFRQyxrQkFBa0IsRUFBRUMsaUJBQWlCLFFBQU8sZ0NBQWdDO0FBQ3BGLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FB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
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2NvbnRlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuXG5pbXBvcnQge3BhcnNlQ29udGVudEZyb21EYiwgcGFyc2VDb250ZW50SW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2NvbnRlbnRBZGFwdGVyLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHt0cmFuc2xhdGVUZXh0fSBmcm9tICcuLi91dGlscy9nb29nbGVUcmFuc2xhdGUuanMnO1xuaW1wb3J0IHtleHRyYWN0TGFuZ3VhZ2UsIGlzUmVnaW9uYWxMb2NhbGV9IGZyb20gJy4uL3V0aWxzL2xvY2FsZVV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtDb250ZW50SW5wdXRUeXBlLCBDb250ZW50T3B0aW9ucywgQ29udGVudFR5cGUsIExvY2FsZX0gZnJvbSAnLi4vdHlwZXMvY29udGVudC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50T3B0aW9ucyA9IChvcHRpb25zOiBDb250ZW50T3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjYXRlZ29yeSxcbiAgICBpc0FjdGl2ZSA9IHRydWUsXG4gICAga2V5LFxuICAgIGxvY2FsZVxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGNhdGVnb3J5OiBjYXRlZ29yeSA/IHBhcnNlU3RyaW5nKGNhdGVnb3J5LCAxMDApIDogdW5kZWZpbmVkLFxuICAgIGlzQWN0aXZlLFxuICAgIGtleToga2V5ID8gcGFyc2VTdHJpbmcoa2V5LCAyMDApIDogdW5kZWZpbmVkLFxuICAgIGxvY2FsZVxuICB9O1xufTtcblxuY29uc3QgYnVpbGRDb250ZW50RmlsdGVycyA9IChvcHRpb25zOiBDb250ZW50T3B0aW9ucyA9IHt9KTogRmlsdGVyR3JvdXAgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB7Y2F0ZWdvcnksIGlzQWN0aXZlLCBrZXksIGxvY2FsZX0gPSBwYXJzZUNvbnRlbnRPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmaWx0ZXJzOiBhbnlbXSA9IFtdO1xuXG4gIGlmKGtleSkge1xuICAgIGZpbHRlcnMucHVzaCh7ZmllbGQ6ICdrZXknLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGtleX0pO1xuICB9XG5cbiAgaWYobG9jYWxlKSB7XG4gICAgZmlsdGVycy5wdXNoKHtmaWVsZDogJ2xvY2FsZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogbG9jYWxlfSk7XG4gIH1cblxuICBpZihjYXRlZ29yeSkge1xuICAgIGZpbHRlcnMucHVzaCh7ZmllbGQ6ICdjYXRlZ29yeScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogY2F0ZWdvcnl9KTtcbiAgfVxuXG4gIGlmKGlzQWN0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICBmaWx0ZXJzLnB1c2goe2ZpZWxkOiAnaXNBY3RpdmUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGlzQWN0aXZlfSk7XG4gIH1cblxuICByZXR1cm4gZmlsdGVycy5sZW5ndGggPiAwID8ge29wZXJhdG9yOiAnQU5EJywgZmlsdGVyc30gYXMgYW55IDogdW5kZWZpbmVkO1xufTtcblxuY29uc3QgYnVpbGRDb250ZW50TXV0YXRpb24gPSAoXG4gIGNvbnRlbnRJbnB1dDogQ29udGVudElucHV0VHlwZSxcbiAgb3B0aW9uczoge3JlYWRvbmx5IGluY2x1ZGVJZGVudGl0eT86IGJvb2xlYW59ID0ge31cbik6IFBhcnRpYWw8Q29udGVudFR5cGU+ID0+IHtcbiAgY29uc3QgcGFyc2VkQ29udGVudCA9IHBhcnNlQ29udGVudElucHV0KGNvbnRlbnRJbnB1dCk7XG4gIGNvbnN0IHtcbiAgICBjYXRlZ29yeSxcbiAgICBjb250ZW50LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGlzQWN0aXZlLFxuICAgIGtleSxcbiAgICBsb2NhbGU6IHBhcnNlZExvY2FsZVxuICB9ID0gcGFyc2VkQ29udGVudDtcbiAgY29uc3Qge2luY2x1ZGVJZGVudGl0eSA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxvY2FsZTogTG9jYWxlID0gcGFyc2VkTG9jYWxlIHx8ICdlbic7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oaW5jbHVkZUlkZW50aXR5ICYmIHtrZXk6IGtleSA/IHBhcnNlU3RyaW5nKGtleSwgMjAwKSA6IHVuZGVmaW5lZCwgbG9jYWxlfSksXG4gICAgY29udGVudDogY29udGVudCAhPT0gdW5kZWZpbmVkID8gcGFyc2VTdHJpbmcoY29udGVudCwgMTAwMDApIDogdW5kZWZpbmVkLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8gKGRlc2NyaXB0aW9uID8gcGFyc2VTdHJpbmcoZGVzY3JpcHRpb24sIDUwMCkgOiB1bmRlZmluZWQpIGFzIHN0cmluZyA6IHVuZGVmaW5lZCxcbiAgICBjYXRlZ29yeTogY2F0ZWdvcnkgIT09IHVuZGVmaW5lZCA/IChjYXRlZ29yeSA/IHBhcnNlU3RyaW5nKGNhdGVnb3J5LCAxMDApIDogdW5kZWZpbmVkKSBhcyBzdHJpbmcgOiB1bmRlZmluZWQsXG4gICAgaXNBY3RpdmVcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBrZXk6IHN0cmluZyxcbiAgbG9jYWxlOiBMb2NhbGUgPSAnZW4nXG4pOiBQcm9taXNlPENvbnRlbnRUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBjb250ZW50ID0gYXdhaXQgZ2V0SXRlbUJ5PENvbnRlbnRUeXBlPihjb250ZXh0LCAnY29udGVudCcsIGJ1aWxkQ29udGVudEZpbHRlcnMoe2tleSwgbG9jYWxlLCBpc0FjdGl2ZTogdHJ1ZX0pKTtcbiAgcmV0dXJuIGNvbnRlbnQgPyBwYXJzZUNvbnRlbnRGcm9tRGIoY29udGVudCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRlbnRXaXRoRmFsbGJhY2sgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICBmYWxsYmFja0NvbnRlbnQ6IHN0cmluZyxcbiAgbG9jYWxlOiBMb2NhbGUgPSAnZW4nXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBhcHBMb2NhbGUgPSAoQ29uZmlnLmdldCgnYXBwLmxvY2FsZScpIHx8ICdlbicpIGFzIExvY2FsZTtcblxuICB0cnkge1xuICAgIGxldCBjb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChjb250ZXh0LCBrZXksIGxvY2FsZSk7XG5cbiAgICBpZihjb250ZW50Py5jb250ZW50KSB7XG4gICAgICByZXR1cm4gY29udGVudC5jb250ZW50O1xuICAgIH1cblxuICAgIGlmKGlzUmVnaW9uYWxMb2NhbGUobG9jYWxlKSkge1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBleHRyYWN0TGFuZ3VhZ2UobG9jYWxlKTtcbiAgICAgIGNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgbGFuZ3VhZ2UgYXMgTG9jYWxlKTtcblxuICAgICAgaWYoY29udGVudD8uY29udGVudCkge1xuICAgICAgICBhZGRDb250ZW50KGNvbnRleHQsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgY29udGVudDogY29udGVudC5jb250ZW50LFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYEV4dHJhY3RlZCBmcm9tICR7bGFuZ3VhZ2V9YFxuICAgICAgICB9KS5jYXRjaCgoc2F2ZUVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIGV4dHJhY3RlZCBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb250ZW50LmNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYobG9jYWxlID09PSBhcHBMb2NhbGUpIHtcbiAgICAgIGlmKGZhbGxiYWNrQ29udGVudCkge1xuICAgICAgICBhZGRDb250ZW50KGNvbnRleHQsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgY29udGVudDogZmFsbGJhY2tDb250ZW50LFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0F1dG8tZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2snXG4gICAgICAgIH0pLmNhdGNoKChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgZmFsbGJhY2sgY29udGVudDonLCBzYXZlRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ29udGVudCB8fCBrZXk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsZXQgc291cmNlQ29udGVudCA9IGF3YWl0IGdldENvbnRlbnQoY29udGV4dCwga2V5LCBhcHBMb2NhbGUpO1xuICAgICAgbGV0IHNvdXJjZVRleHQ6IHN0cmluZztcblxuICAgICAgaWYoc291cmNlQ29udGVudD8uY29udGVudCkge1xuICAgICAgICBzb3VyY2VUZXh0ID0gc291cmNlQ29udGVudC5jb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYoaXNSZWdpb25hbExvY2FsZShhcHBMb2NhbGUpKSB7XG4gICAgICAgICAgY29uc3QgYXBwTGFuZ3VhZ2UgPSBleHRyYWN0TGFuZ3VhZ2UoYXBwTG9jYWxlKTtcbiAgICAgICAgICBzb3VyY2VDb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChjb250ZXh0LCBrZXksIGFwcExhbmd1YWdlIGFzIExvY2FsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihzb3VyY2VDb250ZW50Py5jb250ZW50KSB7XG4gICAgICAgICAgc291cmNlVGV4dCA9IHNvdXJjZUNvbnRlbnQuY29udGVudDtcbiAgICAgICAgfSBlbHNlIGlmKGZhbGxiYWNrQ29udGVudCkge1xuICAgICAgICAgIHNvdXJjZVRleHQgPSBmYWxsYmFja0NvbnRlbnQ7XG5cbiAgICAgICAgICBhZGRDb250ZW50KGNvbnRleHQsIHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGZhbGxiYWNrQ29udGVudCxcbiAgICAgICAgICAgIGxvY2FsZTogYXBwTG9jYWxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBdXRvLWdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrJ1xuICAgICAgICAgIH0pLmNhdGNoKChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBmYWxsYmFjayBhcyBkZWZhdWx0IGNvbnRlbnQ6Jywgc2F2ZUVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRUZXh0ID0gYXdhaXQgdHJhbnNsYXRlVGV4dChzb3VyY2VUZXh0LCBleHRyYWN0TGFuZ3VhZ2UobG9jYWxlKSwgZXh0cmFjdExhbmd1YWdlKGFwcExvY2FsZSkpO1xuXG4gICAgICBhZGRDb250ZW50KGNvbnRleHQsIHtcbiAgICAgICAga2V5LFxuICAgICAgICBjb250ZW50OiB0cmFuc2xhdGVkVGV4dCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEF1dG8tdHJhbnNsYXRlZCBmcm9tICR7YXBwTG9jYWxlfWBcbiAgICAgIH0pLmNhdGNoKChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIHRyYW5zbGF0ZWQgY29udGVudDonLCBzYXZlRXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cmFuc2xhdGVkVGV4dDtcbiAgICB9IGNhdGNoKHRyYW5zbGF0aW9uRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zbGF0aW9uIGVycm9yOicsIHRyYW5zbGF0aW9uRXJyb3IpO1xuXG4gICAgICByZXR1cm4gZmFsbGJhY2tDb250ZW50IHx8IGtleTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjb250ZW50IGZyb20gZGF0YWJhc2U6JywgZXJyb3IpO1xuICAgIHJldHVybiBmYWxsYmFja0NvbnRlbnQgfHwga2V5O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQ29udGVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udGVudElucHV0OiBDb250ZW50SW5wdXRUeXBlXG4pOiBQcm9taXNlPENvbnRlbnRUeXBlPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9ufSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBwYXJzZUNvbnRlbnRJbnB1dChjb250ZW50SW5wdXQpO1xuICBjb25zdCB7XG4gICAgY2F0ZWdvcnksXG4gICAgY29udGVudCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpc0FjdGl2ZSxcbiAgICBrZXksXG4gICAgbG9jYWxlOiBwYXJzZWRMb2NhbGVcbiAgfSA9IHBhcnNlZENvbnRlbnQ7XG4gIGNvbnN0IGxvY2FsZTogTG9jYWxlID0gcGFyc2VkTG9jYWxlIHx8ICdlbic7XG4gIGNvbnN0IGNvbnRlbnRJZCA9IGNyZWF0ZUhhc2goYGNvbnRlbnQtJHtrZXl9LSR7bG9jYWxlfWApO1xuICBjb25zdCBpbnNlcnQ6IENvbnRlbnRUeXBlID0ge1xuICAgIF9rZXk6IGNvbnRlbnRJZCxcbiAgICBrZXk6IHBhcnNlU3RyaW5nKGtleSwgMjAwKSxcbiAgICBsb2NhbGUsXG4gICAgY29udGVudDogcGFyc2VTdHJpbmcoY29udGVudCwgMTAwMDApLFxuICAgIC4uLihkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkICYmIHtkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPyBwYXJzZVN0cmluZyhkZXNjcmlwdGlvbiwgNTAwKSA6IHVuZGVmaW5lZH0pLFxuICAgIC4uLihjYXRlZ29yeSAhPT0gdW5kZWZpbmVkICYmIHtjYXRlZ29yeTogY2F0ZWdvcnkgPyBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKSA6IHVuZGVmaW5lZH0pLFxuICAgIC4uLihpc0FjdGl2ZSAhPT0gdW5kZWZpbmVkICYmIHtpc0FjdGl2ZX0pLFxuICAgIHVzZXJJZDogc2Vzc2lvbj8udXNlcklkIGFzIHN0cmluZ1xuICB9O1xuXG4gIGNvbnN0IHNhdmVkQ29udGVudCA9IGF3YWl0IGFkZEl0ZW08Q29udGVudFR5cGU+KGNvbnRleHQsICdjb250ZW50JywgaW5zZXJ0KTtcbiAgcmV0dXJuIHBhcnNlQ29udGVudEZyb21EYihzYXZlZENvbnRlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNvbnRlbnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnRlbnRJbnB1dDogQ29udGVudElucHV0VHlwZVxuKTogUHJvbWlzZTxDb250ZW50VHlwZT4gPT4ge1xuICBjb25zdCBwYXJzZWRDb250ZW50ID0gcGFyc2VDb250ZW50SW5wdXQoY29udGVudElucHV0KTtcbiAgY29uc3Qge2NvbnRlbnRJZH0gPSBwYXJzZWRDb250ZW50O1xuXG4gIGlmKCFjb250ZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRlbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHVwZGF0ZScpO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlZENvbnRlbnQgPSBhd2FpdCB1cGRhdGVJdGVtPENvbnRlbnRUeXBlPihjb250ZXh0LCAnY29udGVudCcsIGNvbnRlbnRJZCwgYnVpbGRDb250ZW50TXV0YXRpb24oY29udGVudElucHV0KSk7XG5cbiAgaWYoIXVwZGF0ZWRDb250ZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb250ZW50IG5vdCBmb3VuZCBvciBhY2Nlc3MgZGVuaWVkJyk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VDb250ZW50RnJvbURiKHVwZGF0ZWRDb250ZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWFyY2hDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBvcHRpb25zOiBDb250ZW50T3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPENvbnRlbnRUeXBlW10+ID0+IHtcbiAgY29uc3QgY29udGVudExpc3QgPSBhd2FpdCBnZXRMaXN0Qnk8Q29udGVudFR5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgJ2NvbnRlbnQnLFxuICAgIGJ1aWxkQ29udGVudEZpbHRlcnMob3B0aW9ucyksXG4gICAge3NvcnQ6IFt7ZmllbGQ6ICdrZXknLCBkaXJlY3Rpb246ICdBU0MnfSwge2ZpZWxkOiAnbG9jYWxlJywgZGlyZWN0aW9uOiAnQVNDJ31dfVxuICApO1xuXG4gIHJldHVybiBjb250ZW50TGlzdC5tYXAoKGNvbnRlbnQpID0+IHBhcnNlQ29udGVudEZyb21EYihjb250ZW50KSk7XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJwYXJzZVN0cmluZyIsInBhcnNlQ29udGVudEZyb21EYiIsInBhcnNlQ29udGVudElucHV0IiwiQ29uZmlnIiwidHJhbnNsYXRlVGV4dCIsImV4dHJhY3RMYW5ndWFnZSIsImlzUmVnaW9uYWxMb2NhbGUiLCJhZGRJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsInBhcnNlQ29udGVudE9wdGlvbnMiLCJvcHRpb25zIiwiY2F0ZWdvcnkiLCJpc0FjdGl2ZSIsImtleSIsImxvY2FsZSIsInVuZGVmaW5lZCIsImJ1aWxkQ29udGVudEZpbHRlcnMiLCJmaWx0ZXJzIiwicHVzaCIsImZpZWxkIiwib3BlcmF0b3IiLCJ2YWx1ZSIsImxlbmd0aCIsImJ1aWxkQ29udGVudE11dGF0aW9uIiwiY29udGVudElucHV0IiwicGFyc2VkQ29udGVudCIsImNvbnRlbnQiLCJkZXNjcmlwdGlvbiIsInBhcnNlZExvY2FsZSIsImluY2x1ZGVJZGVudGl0eSIsImdldENvbnRlbnQiLCJjb250ZXh0IiwiZ2V0Q29udGVudFdpdGhGYWxsYmFjayIsImZhbGxiYWNrQ29udGVudCIsImFwcExvY2FsZSIsImdldCIsImxhbmd1YWdlIiwiYWRkQ29udGVudCIsImNhdGNoIiwic2F2ZUVycm9yIiwiY29uc29sZSIsImVycm9yIiwic291cmNlQ29udGVudCIsInNvdXJjZVRleHQiLCJhcHBMYW5ndWFnZSIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRpb25FcnJvciIsInNlc3Npb24iLCJjb250ZW50SWQiLCJpbnNlcnQiLCJfa2V5IiwidXNlcklkIiwic2F2ZWRDb250ZW50IiwidXBkYXRlQ29udGVudCIsIkVycm9yIiwidXBkYXRlZENvbnRlbnQiLCJzZWFyY2hDb250ZW50IiwiY29udGVudExpc3QiLCJzb3J0IiwiZGlyZWN0aW9uIiwibWFwIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxVQUFVLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFFckUsU0FBUUMsa0JBQWtCLEVBQUVDLGlCQUFpQixRQUFPLGdDQUFnQztBQUNwRixTQUFRQyxNQUFNLFFBQU8sZUFB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
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { cloneDeep } from '@nlabs/utils/objects/clone';
5
5
  import { createHash, parseId } from '@nlabs/utils/parsers/strings';
6
6
  import { aql } from 'arangojs';
@@ -336,4 +336,4 @@ export const deleteUserFromConversation = (context, { conversationId, userId })=
336
336
  }, error, context));
337
337
  };
338
338
 
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjbG9uZURlZXB9IGZyb20gJ0BubGFicy91dGlscy9vYmplY3RzL2Nsb25lJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCBzb3J0SWRzLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2dldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSwgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWR9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtnZXRVc2VyQnlJZH0gZnJvbSAnLi91c2Vycy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXQsIEVkZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q29ubmVjdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3Rpb25zLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29udmVyc2F0aW9uT3B0aW9ucyxcbiAgQ29udmVyc2F0aW9uVHlwZSxcbiAgQ29udmVyc2F0aW9uVXNlcnNQYXJhbXMsXG4gIERpcmVjdENvbnZlcnNhdGlvblBhcmFtcyxcbiAgVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xufSBmcm9tICcuLi90eXBlcy9jb252ZXJzYXRpb25zLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2NvbnZlcnNhdGlvbnMnO1xuY29uc3QgaGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoJ2hhc0NvbnZlcnNhdGlvbicpO1xuXG5jb25zdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVXNlcklkOiBzdHJpbmcsXG4gIHRvVXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBbZnJvbVVzZXIsIHRvVXNlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZnJvbVVzZXJJZH0pLFxuICAgIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHRvVXNlcklkfSlcbiAgXSk7XG4gIGNvbnN0IGZyb21QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhmcm9tVXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IHRvUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcodG9Vc2VyPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZighZnJvbVBlcnNvbmFJZCB8fCAhdG9QZXJzb25hSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCB0b1BlcnNvbmFJZCwgZnJvbVBlcnNvbmFJZCk7XG5cbiAgaWYoIXJlbGF0aW9uc2hpcC5pc0ZyaWVuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG59O1xuXG5jb25zdCBmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uczogQ29udmVyc2F0aW9uVHlwZVtdID0gW11cbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZighc2Vzc2lvblBlcnNvbmFJZCB8fCAhY29udmVyc2F0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gY29udmVyc2F0aW9ucztcbiAgfVxuXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBhd2FpdCBQcm9taXNlLmFsbChjb252ZXJzYXRpb25zLm1hcChhc3luYyAoY29udmVyc2F0aW9uKSA9PiB7XG4gICAgaWYoIWNvbnZlcnNhdGlvbj8uaXNEaXJlY3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRpY2lwYW50ID0gQXJyYXkuaXNBcnJheShjb252ZXJzYXRpb24/LnVzZXJzKVxuICAgICAgPyBjb252ZXJzYXRpb24udXNlcnMuZmluZCgodXNlcikgPT4gcGFyc2VJZChTdHJpbmcodXNlcj8udXNlcklkIHx8IHVzZXI/Ll9rZXkgfHwgJycpKSAhPT0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSkpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgcGFydGljaXBhbnRQZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhwYXJ0aWNpcGFudD8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgICBpZighcGFydGljaXBhbnRQZXJzb25hSWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHBhcnRpY2lwYW50UGVyc29uYUlkLCBzZXNzaW9uUGVyc29uYUlkKSk7XG4gIH0pKTtcblxuICByZXR1cm4gY29udmVyc2F0aW9ucy5maWx0ZXIoKF9jb252ZXJzYXRpb24sIGluZGV4KSA9PiB2aXNpYmlsaXR5W2luZGV4XSk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IGdldENvbnZlcnNhdGlvbkJ5SWQoY29udGV4dCwgY29udmVyc2F0aW9uSWQpO1xuXG4gIGlmKCFjb252ZXJzYXRpb24/LmNvbnZlcnNhdGlvbklkICYmICFjb252ZXJzYXRpb24/Ll9rZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGlmKCFjb252ZXJzYXRpb24/LmlzRGlyZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBwYXJ0aWNpcGFudCA9IEFycmF5LmlzQXJyYXkoY29udmVyc2F0aW9uPy51c2VycylcbiAgICA/IGNvbnZlcnNhdGlvbi51c2Vycy5maW5kKCh1c2VyKSA9PiBwYXJzZUlkKFN0cmluZyh1c2VyPy51c2VySWQgfHwgdXNlcj8uX2tleSB8fCAnJykpICE9PSBzZXNzaW9uVXNlcklkKVxuICAgIDogbnVsbDtcbiAgY29uc3QgcGFydGljaXBhbnRVc2VySWQgPSBwYXJzZUlkKFN0cmluZyhwYXJ0aWNpcGFudD8udXNlcklkIHx8IHBhcnRpY2lwYW50Py5fa2V5IHx8ICcnKSk7XG5cbiAgaWYoIXNlc3Npb25Vc2VySWQgfHwgIXBhcnRpY2lwYW50VXNlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBhd2FpdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwKGNvbnRleHQsIHNlc3Npb25Vc2VySWQsIHBhcnRpY2lwYW50VXNlcklkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMgPSAob3B0aW9uczogQ29udmVyc2F0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uTGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz8pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29udmVyc2F0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7dXNlcklkfWA7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBcbiAgICBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7dXNlckRvY0lkfSAke2hhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb259XG4gICAgICBTT1JUIGMuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgJHtoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiB1Ll9pZCAhPSAke3VzZXJEb2NJZH1cbiAgICAgICAgICBSRVRVUk4gdVxuICAgICAgKVxuICAgICAgUkVUVVJOIE1FUkdFKGMsIHt1c2Vyc30pXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbnZlcnNhdGlvblR5cGVbXSlcbiAgICAudGhlbigoY29udmVyc2F0aW9ucykgPT4gZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMoY29udGV4dCwgY29udmVyc2F0aW9ucykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBmcm9tSWQsXG4gICAgdG9JZCxcbiAgICB0b1VzZXJcbiAgfTogRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZCA9IHBhcnNlSWQoZnJvbUlkKTtcbiAgICBjb25zdCBmb3JtYXRUb0lkID0gcGFyc2VJZCh0b0lkKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwKGNvbnRleHQsIGZvcm1hdEZyb21JZCwgZm9ybWF0VG9JZCk7XG4gICAgY29uc3QgdXNlcklkcyA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHMgPSBzb3J0SWRzKHVzZXJJZHMpO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IHVzZXI6IFVzZXJUeXBlID0gdG9Vc2VyIHx8IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IGZvcm1hdFRvSWR9KTtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBjID0gRE9DVU1FTlQoJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9KSBSRVRVUk4gY2A7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG5cbiAgICBpZihjb252ZXJzYXRpb24pIHtcbiAgICAgIHJldHVybiB7Li4uY29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkRGlyZWN0Q29udmVyc2F0aW9uKGNvbnRleHQsIHtmcm9tSWQsIHRvSWQsIHRvVXNlcjogdXNlcn0pO1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG5cbiAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICBfa2V5OiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGlzRGlyZWN0OiB0cnVlXG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVkQ29udmVyc2F0aW9uID0gYXdhaXQgYWRkSXRlbTxDb252ZXJzYXRpb25UeXBlPihjb250ZXh0LCAnY29udmVyc2F0aW9ucycsIGluc2VydCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh1c2VySWRzLm1hcCgodXNlcklkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNDb252ZXJzYXRpb24tJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBFZGdlVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IGB1c2Vycy8ke3VzZXJJZH1gLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7ZWRnZX0gSU4gaGFzQ29udmVyc2F0aW9uIFJFVFVSTiBORVdgO1xuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoaW5zZXJ0RWRnZVF1ZXJ5KTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gey4uLnVwZGF0ZWRDb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGF0YWJhc2VFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJMaXN0ID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbm5lY3Rpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbm5lY3Rpb25Vc2VyTGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGT1IgYyBJTiBjb25uZWN0aW9uc1xuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29ubmVjdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29udmVyc2F0aW9uVXNlcnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb252ZXJzYXRpb25UeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25CeUlkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7cGFyc2VJZChjb252ZXJzYXRpb25JZCl9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBjLl9pZCA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGluVXNlciwgaW5FZGdlIElOIDEuLjEgSU5CT1VORCAke2NvbnZlcnNhdGlvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICAgIFJFVFVSTiBpblVzZXJcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHV9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBpc0RpcmVjdCA9IGZhbHNlLFxuICAgIG5hbWVcbiAgfSA9IGNvbnZlcnNhdGlvbjtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgdXBkYXRlID0ge1xuICAgIGlzRGlyZWN0LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQgPSB7XG4gICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgX2tleTogZm9ybWF0Q29udmVyc2F0aW9uSWRcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmb3JtYXRDb252ZXJzYXRpb25JZH0gfVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiBjb252ZXJzYXRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXJUb0NvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFVzZXJUb0NvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBoYy5fdG8gPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGhjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoaGFzQ29udmVyc2F0aW9uRWRnZSkgPT4ge1xuICAgICAgaWYoISFoYXNDb252ZXJzYXRpb25FZGdlKSB7XG4gICAgICAgIHJldHVybiBoYXNDb252ZXJzYXRpb25FZGdlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0NvbnZlcnNhdGlvbicpO1xuICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9LSR7Zm9ybWF0VXNlcklkfWApO1xuXG4gICAgICBjb25zdCBlZGdlOiBDb252ZXJzYXRpb25UeXBlID0ge1xuICAgICAgICBfZnJvbTogdXNlckRvY0lkLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogY29udmVyc2F0aW9uRG9jSWQsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb25cbiAgICAgICAgLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAgIC50aGVuKCgpID0+IGVkZ2UpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgdXNlcklkXG4gIH06IFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFTU9WRSBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuIl0sIm5hbWVzIjpbImNsb25lRGVlcCIsImNyZWF0ZUhhc2giLCJwYXJzZUlkIiwiYXFsIiwibGl0ZXJhbCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImdldExpbWl0Iiwic29ydElkcyIsInVzZURiIiwiYWRkSXRlbSIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsImlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkIiwiZ2V0VXNlckJ5SWQiLCJldmVudENhdGVnb3J5IiwiaGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbiIsImVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAiLCJjb250ZXh0IiwiZnJvbVVzZXJJZCIsInRvVXNlcklkIiwiZnJvbVVzZXIiLCJ0b1VzZXIiLCJQcm9taXNlIiwiYWxsIiwidXNlcklkIiwiZnJvbVBlcnNvbmFJZCIsIlN0cmluZyIsInBlcnNvbmFJZCIsInRvUGVyc29uYUlkIiwiRXJyb3IiLCJJTlZBTElEX0FVVEhFTlRJQ0FUSU9OIiwicmVsYXRpb25zaGlwIiwiaXNGcmllbmQiLCJmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyIsImNvbnZlcnNhdGlvbnMiLCJzZXNzaW9uUGVyc29uYUlkIiwic2Vzc2lvbiIsImxlbmd0aCIsInZpc2liaWxpdHkiLCJtYXAiLCJjb252ZXJzYXRpb24iLCJpc0RpcmVjdCIsInBhcnRpY2lwYW50IiwiQXJyYXkiLCJpc0FycmF5IiwidXNlcnMiLCJmaW5kIiwidXNlciIsIl9rZXkiLCJwYXJ0aWNpcGFudFBlcnNvbmFJZCIsImZpbHRlciIsIl9jb252ZXJzYXRpb24iLCJpbmRleCIsImVuc3VyZUNvbnZlcnNhdGlvbk1lc3NhZ2luZ0FsbG93ZWQiLCJjb252ZXJzYXRpb25JZCIsImdldENvbnZlcnNhdGlvbkJ5SWQiLCJzZXNzaW9uVXNlcklkIiwicGFydGljaXBhbnRVc2VySWQiLCJwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwibGltaXQiLCJnZXRDb252ZXJzYXRpb25MaXN0QnlVc2VyIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwidXNlckRvY0lkIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldERpcmVjdENvbnZlcnNhdGlvbiIsImZyb21JZCIsInRvSWQiLCJmb3JtYXRGcm9tSWQiLCJmb3JtYXRUb0lkIiwidXNlcklkcyIsInNvcnRlZFVzZXJJZHMiLCJqb2luIiwibmV4dCIsImFkZERpcmVjdENvbnZlcnNhdGlvbiIsImRhdGFiYXNlRXJyb3IiLCJpbnNlcnQiLCJ1cGRhdGVkQ29udmVyc2F0aW9uIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJEYXRlIiwibm93IiwiaW5zZXJ0RWRnZVF1ZXJ5IiwiZ2V0Q29ubmVjdGlvblVzZXJMaXN0IiwiaW5jbHVkZUFsbCIsImZpbHRlcnMiLCJwdXNoIiwiZ2V0Q29udmVyc2F0aW9uVXNlcnMiLCJzZXNzaW9uSWQiLCJzZXNzaW9uRG9jSWQiLCJjb252ZXJzYXRpb25Eb2NJZCIsInVwZGF0ZUNvbnZlcnNhdGlvbiIsIm5hbWUiLCJmb3JtYXRDb252ZXJzYXRpb25JZCIsInVwZGF0ZSIsImFkZFVzZXJUb0NvbnZlcnNhdGlvbiIsImZvcm1hdFVzZXJJZCIsImhhc0NvbnZlcnNhdGlvbkVkZ2UiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJzYXZlIiwicmV0dXJuTmV3IiwiZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyw2QkFBNkI7QUFDckQsU0FBUUMsVUFBVSxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQ2pFLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBQ3JDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNuRSxTQUFRQyxPQUFPLFFBQU8sWUFBWTtBQUNsQyxTQUFRQywyQkFBMkIsRUFBRUMsMEJBQTBCLFFBQU8sZ0JBQWdCO0FBQ3RGLFNBQVFDLFdBQVcsUUFBTyxhQUFhO0FBZ0J2QyxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsNEJBQTRCWCxRQUFRO0FBRTFDLE1BQU1ZLHFDQUFxQyxPQUN6Q0MsU0FDQUMsWUFDQUM7SUFFQSxNQUFNLENBQUNDLFVBQVVDLE9BQU8sR0FBRyxNQUFNQyxRQUFRQyxHQUFHLENBQUM7UUFDM0NWLFlBQVlJLFNBQVM7WUFBQ08sUUFBUU47UUFBVTtRQUN4Q0wsWUFBWUksU0FBUztZQUFDTyxRQUFRTDtRQUFRO0tBQ3ZDO0lBQ0Qs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
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2NvbnZlcnNhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9jbG9uZSc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgc29ydElkcywgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUsIGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7Z2V0VXNlckJ5SWR9IGZyb20gJy4vdXNlcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0LCBFZGdlVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0Nvbm5lY3Rpb25UeXBlfSBmcm9tICcuLi90eXBlcy9jb25uZWN0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnZlcnNhdGlvbk9wdGlvbnMsXG4gIENvbnZlcnNhdGlvblR5cGUsXG4gIENvbnZlcnNhdGlvblVzZXJzUGFyYW1zLFxuICBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXMsXG4gIFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbn0gZnJvbSAnLi4vdHlwZXMvY29udmVyc2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdjb252ZXJzYXRpb25zJztcbmNvbnN0IGhhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKCdoYXNDb252ZXJzYXRpb24nKTtcblxuY29uc3QgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVVzZXJJZDogc3RyaW5nLFxuICB0b1VzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgW2Zyb21Vc2VyLCB0b1VzZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IGZyb21Vc2VySWR9KSxcbiAgICBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiB0b1VzZXJJZH0pXG4gIF0pO1xuICBjb25zdCBmcm9tUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoZnJvbVVzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCB0b1BlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHRvVXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgaWYoIWZyb21QZXJzb25hSWQgfHwgIXRvUGVyc29uYUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBjb25zdCByZWxhdGlvbnNoaXAgPSBhd2FpdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUoY29udGV4dCwgdG9QZXJzb25hSWQsIGZyb21QZXJzb25hSWQpO1xuXG4gIGlmKCFyZWxhdGlvbnNoaXAuaXNGcmllbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxufTtcblxuY29uc3QgZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbnM6IENvbnZlcnNhdGlvblR5cGVbXSA9IFtdXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIWNvbnZlcnNhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGNvbnZlcnNhdGlvbnM7XG4gIH1cblxuICBjb25zdCB2aXNpYmlsaXR5ID0gYXdhaXQgUHJvbWlzZS5hbGwoY29udmVyc2F0aW9ucy5tYXAoYXN5bmMgKGNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGlmKCFjb252ZXJzYXRpb24/LmlzRGlyZWN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0aWNpcGFudCA9IEFycmF5LmlzQXJyYXkoY29udmVyc2F0aW9uPy51c2VycylcbiAgICAgID8gY29udmVyc2F0aW9uLnVzZXJzLmZpbmQoKHVzZXIpID0+IHBhcnNlSWQoU3RyaW5nKHVzZXI/LnVzZXJJZCB8fCB1c2VyPy5fa2V5IHx8ICcnKSkgIT09IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHBhcnRpY2lwYW50UGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGFydGljaXBhbnQ/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gICAgaWYoIXBhcnRpY2lwYW50UGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIShhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBwYXJ0aWNpcGFudFBlcnNvbmFJZCwgc2Vzc2lvblBlcnNvbmFJZCkpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGNvbnZlcnNhdGlvbnMuZmlsdGVyKChfY29udmVyc2F0aW9uLCBpbmRleCkgPT4gdmlzaWJpbGl0eVtpbmRleF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGVuc3VyZUNvbnZlcnNhdGlvbk1lc3NhZ2luZ0FsbG93ZWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25CeUlkKGNvbnRleHQsIGNvbnZlcnNhdGlvbklkKTtcblxuICBpZighY29udmVyc2F0aW9uPy5jb252ZXJzYXRpb25JZCAmJiAhY29udmVyc2F0aW9uPy5fa2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBpZighY29udmVyc2F0aW9uPy5pc0RpcmVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3QgcGFydGljaXBhbnQgPSBBcnJheS5pc0FycmF5KGNvbnZlcnNhdGlvbj8udXNlcnMpXG4gICAgPyBjb252ZXJzYXRpb24udXNlcnMuZmluZCgodXNlcikgPT4gcGFyc2VJZChTdHJpbmcodXNlcj8udXNlcklkIHx8IHVzZXI/Ll9rZXkgfHwgJycpKSAhPT0gc2Vzc2lvblVzZXJJZClcbiAgICA6IG51bGw7XG4gIGNvbnN0IHBhcnRpY2lwYW50VXNlcklkID0gcGFyc2VJZChTdHJpbmcocGFydGljaXBhbnQ/LnVzZXJJZCB8fCBwYXJ0aWNpcGFudD8uX2tleSB8fCAnJykpO1xuXG4gIGlmKCFzZXNzaW9uVXNlcklkIHx8ICFwYXJ0aWNpcGFudFVzZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG5cbiAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBzZXNzaW9uVXNlcklkLCBwYXJ0aWNpcGFudFVzZXJJZCk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb252ZXJzYXRpb25PcHRpb25zID0gKG9wdGlvbnM6IENvbnZlcnNhdGlvbk9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbkxpc3RCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIG9wdGlvbnM/KTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbnZlcnNhdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke3VzZXJJZH1gO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgXG4gICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3VzZXJEb2NJZH0gJHtoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9ufVxuICAgICAgU09SVCBjLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgdWMgSU4gMS4uMSBJTkJPVU5EIGMuX2lkICR7aGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgdS5faWQgIT0gJHt1c2VyRG9jSWR9XG4gICAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnN9KVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb252ZXJzYXRpb25UeXBlW10pXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbnMpID0+IGZpbHRlckJsb2NrZWRDb252ZXJzYXRpb25zKGNvbnRleHQsIGNvbnZlcnNhdGlvbnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbnMtJHtzb3J0ZWRVc2VySWRzLmpvaW4oJy0nKX1gLCBudWxsKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgYyA9IERPQ1VNRU5UKCR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSkgUkVUVVJOIGNgO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuXG4gICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICByZXR1cm4gey4uLmNvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZERpcmVjdENvbnZlcnNhdGlvbihjb250ZXh0LCB7ZnJvbUlkLCB0b0lkLCB0b1VzZXI6IHVzZXJ9KTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBkYXRhYmFzZUVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQgPSBwYXJzZUlkKHRvSWQpO1xuICAgIGF3YWl0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAoY29udGV4dCwgZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkKTtcbiAgICBjb25zdCB1c2VySWRzID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkcyA9IHNvcnRJZHModXNlcklkcyk7XG4gICAgY29uc3QgdXNlcjogVXNlclR5cGUgPSB0b1VzZXIgfHwgYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuXG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgX2tleTogY29udmVyc2F0aW9uSWQsXG4gICAgICBpc0RpcmVjdDogdHJ1ZVxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlZENvbnZlcnNhdGlvbiA9IGF3YWl0IGFkZEl0ZW08Q29udmVyc2F0aW9uVHlwZT4oY29udGV4dCwgJ2NvbnZlcnNhdGlvbnMnLCBpbnNlcnQpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodXNlcklkcy5tYXAoKHVzZXJJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzQ29udmVyc2F0aW9uLSR7dXNlcklkfS0ke2NvbnZlcnNhdGlvbklkfWApO1xuICAgICAgY29uc3QgZWRnZTogRWRnZVR5cGUgPSB7XG4gICAgICAgIF9mcm9tOiBgdXNlcnMvJHt1c2VySWR9YCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnNlcnRFZGdlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2VkZ2V9IElOIGhhc0NvbnZlcnNhdGlvbiBSRVRVUk4gTkVXYDtcbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGluc2VydEVkZ2VRdWVyeSk7XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHsuLi51cGRhdGVkQ29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25Vc2VyTGlzdCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDb25uZWN0aW9uVXNlckxpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRk9SIGMgSU4gY29ubmVjdGlvbnNcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbm5lY3Rpb25UeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25Vc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbnZlcnNhdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25cbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29udmVyc2F0aW9uVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke3BhcnNlSWQoY29udmVyc2F0aW9uSWQpfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7c2Vzc2lvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgYy5faWQgPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMRVQgdSA9IChcbiAgICAgIEZPUiBpblVzZXIsIGluRWRnZSBJTiAxLi4xIElOQk9VTkQgJHtjb252ZXJzYXRpb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgICBSRVRVUk4gaW5Vc2VyXG4gICAgKVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGlmKCFjb252ZXJzYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnZlcnNhdGlvbjtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVDb252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZVxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbi0ke3Nlc3Npb25JZH0gYCksXG4gICAgaXNEaXJlY3QgPSBmYWxzZSxcbiAgICBuYW1lXG4gIH0gPSBjb252ZXJzYXRpb247XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBpc0RpcmVjdCxcbiAgICBuYW1lXG4gIH07XG5cbiAgY29uc3QgaW5zZXJ0ID0ge1xuICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgIF9rZXk6IGZvcm1hdENvbnZlcnNhdGlvbklkXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9IH1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4gY29udmVyc2F0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9Db252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICB1c2VySWRcbiAgfTogVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBoY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGhhc0NvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhaGFzQ29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gaGFzQ29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNDb252ZXJzYXRpb24nKTtcbiAgICAgIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbi0ke2Zvcm1hdENvbnZlcnNhdGlvbklkfS0ke2Zvcm1hdFVzZXJJZH1gKTtcblxuICAgICAgY29uc3QgZWRnZTogQ29udmVyc2F0aW9uVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IHVzZXJEb2NJZCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGNvbnZlcnNhdGlvbkRvY0lkLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uXG4gICAgICAgIC5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgICAudGhlbigoKSA9PiBlZGdlKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZCA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkID0gYGNvbnZlcnNhdGlvbnMvJHtmb3JtYXRDb252ZXJzYXRpb25JZH1gO1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGhjLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcbiJdLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJjcmVhdGVIYXNoIiwicGFyc2VJZCIsImFxbCIsImxpdGVyYWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJnZXRMaW1pdCIsInNvcnRJZHMiLCJ1c2VEYiIsImFkZEl0ZW0iLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImdldFVzZXJCeUlkIiwiZXZlbnRDYXRlZ29yeSIsImhhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb24iLCJlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwIiwiY29udGV4dCIsImZyb21Vc2VySWQiLCJ0b1VzZXJJZCIsImZyb21Vc2VyIiwidG9Vc2VyIiwiUHJvbWlzZSIsImFsbCIsInVzZXJJZCIsImZyb21QZXJzb25hSWQiLCJTdHJpbmciLCJwZXJzb25hSWQiLCJ0b1BlcnNvbmFJZCIsIkVycm9yIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwiZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMiLCJjb252ZXJzYXRpb25zIiwic2Vzc2lvblBlcnNvbmFJZCIsInNlc3Npb24iLCJsZW5ndGgiLCJ2aXNpYmlsaXR5IiwibWFwIiwiY29udmVyc2F0aW9uIiwiaXNEaXJlY3QiLCJwYXJ0aWNpcGFudCIsIkFycmF5IiwiaXNBcnJheSIsInVzZXJzIiwiZmluZCIsInVzZXIiLCJfa2V5IiwicGFydGljaXBhbnRQZXJzb25hSWQiLCJmaWx0ZXIiLCJfY29udmVyc2F0aW9uIiwiaW5kZXgiLCJlbnN1cmVDb252ZXJzYXRpb25NZXNzYWdpbmdBbGxvd2VkIiwiY29udmVyc2F0aW9uSWQiLCJnZXRDb252ZXJzYXRpb25CeUlkIiwic2Vzc2lvblVzZXJJZCIsInBhcnRpY2lwYW50VXNlcklkIiwicGFyc2VDb252ZXJzYXRpb25PcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsImxpbWl0IiwiZ2V0Q29udmVyc2F0aW9uTGlzdEJ5VXNlciIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsInVzZXJEb2NJZCIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXREaXJlY3RDb252ZXJzYXRpb24iLCJmcm9tSWQiLCJ0b0lkIiwiZm9ybWF0RnJvbUlkIiwiZm9ybWF0VG9JZCIsInVzZXJJZHMiLCJzb3J0ZWRVc2VySWRzIiwiam9pbiIsIm5leHQiLCJhZGREaXJlY3RDb252ZXJzYXRpb24iLCJkYXRhYmFzZUVycm9yIiwiaW5zZXJ0IiwidXBkYXRlZENvbnZlcnNhdGlvbiIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImFkZGVkIiwiRGF0ZSIsIm5vdyIsImluc2VydEVkZ2VRdWVyeSIsImdldENvbm5lY3Rpb25Vc2VyTGlzdCIsImluY2x1ZGVBbGwiLCJmaWx0ZXJzIiwicHVzaCIsImdldENvbnZlcnNhdGlvblVzZXJzIiwic2Vzc2lvbklkIiwic2Vzc2lvbkRvY0lkIiwiY29udmVyc2F0aW9uRG9jSWQiLCJ1cGRhdGVDb252ZXJzYXRpb24iLCJuYW1lIiwiZm9ybWF0Q29udmVyc2F0aW9uSWQiLCJ1cGRhdGUiLCJhZGRVc2VyVG9Db252ZXJzYXRpb24iLCJmb3JtYXRVc2VySWQiLCJoYXNDb252ZXJzYXRpb25FZGdlIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwic2F2ZSIsInJldHVybk5ldyIsImRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8sNkJBQTZCO0FBQ3JELFNBQVFDLFVBQVUsRUFBRUMsT0FBTyxRQUFPLCtCQUErQjtBQUNqRSxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUNyQyxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLEtBQUssUUFBTyw0QkFBNEI7QUFDbkUsU0FBUUMsT0FBTyxRQUFPLFlBQVk7QUFDbEMsU0FBUUMsMkJBQTJCLEVBQUVDLDBCQUEwQixRQUFPLGdCQUFnQjtBQUN0RixTQUFRQyxXQUFXLFFBQU8sYUFBYTtBQWdCdkMsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLDRCQUE0QlgsUUFBUTtBQUUxQyxNQUFNWSxxQ0FBcUMsT0FDekNDLFNBQ0FDLFlBQ0FDO0lBRUEsTUFBTSxDQUFDQyxVQUFVQyxPQUFPLEdBQUcsTUFBTUMsUUFBUUMsR0FBRyxDQUFDO1FBQzNDVixZQUFZSSxTQUFTO1lBQUNPLFFBQVFOO1FBQVU7UUFDeENMLFlBQVlJLFNBQVM7WUFBQ08sUUFBUUw7UUFBUTtLQUN2QztJ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
@@ -1,6 +1,12 @@
1
1
  import type { ApiContext } from '../types/auth.types.js';
2
- import type { CustomerNotificationType, CustomerOrderType, MailingListType, ShopifyCustomerOrderInput, SupportTicketEventType, SupportTicketMessageType, SupportTicketStatus, SupportTicketTypeData } from '../types/crm.types.js';
2
+ import type { CustomerNotificationType, CustomerOrderType, CrmCampaignInput, CrmCampaignType, CrmContactFilter, CrmFormSubmissionInput, CrmFormSubmissionType, MailingListType, PublicSupportTicketFeed, PublicSupportTicketInput, ShopifyCustomerOrderInput, SupportTicketEventType, SupportTicketMessageType, SupportTicketStatus, SupportTicketTypeData } from '../types/crm.types.js';
3
3
  import type { UserType } from '../types/users.types.js';
4
+ declare const requireCrmAdmin: (context: ApiContext) => void;
5
+ export declare const requireCrmAdministrator: typeof requireCrmAdmin;
6
+ export declare const submitCrmForm: (context: ApiContext, input: CrmFormSubmissionInput) => Promise<CrmFormSubmissionType>;
7
+ export declare const getCrmFormSubmissions: (context: ApiContext) => Promise<CrmFormSubmissionType[]>;
8
+ export declare const getCrmContacts: (context: ApiContext, filter?: CrmContactFilter) => Promise<UserType[]>;
9
+ export declare const sendCrmCampaign: (context: ApiContext, input: CrmCampaignInput) => Promise<CrmCampaignType>;
4
10
  export declare const createMailingList: (context: ApiContext, input: Partial<MailingListType>) => Promise<MailingListType>;
5
11
  export declare const getMailingLists: (context: ApiContext) => Promise<MailingListType[]>;
6
12
  export declare const addUserToMailingList: (context: ApiContext, userId: string, mailingListId: string, source?: string) => Promise<MailingListType | null>;
@@ -15,14 +21,18 @@ export declare const getEligibleMailingUsers: (context: ApiContext, options?: {
15
21
  export declare const ingestShopifyCustomerOrder: (context: ApiContext, input: ShopifyCustomerOrderInput) => Promise<CustomerOrderType>;
16
22
  export declare const getCustomerOrdersByUser: (context: ApiContext, userId: string) => Promise<CustomerOrderType[]>;
17
23
  export declare const createSupportTicket: (context: ApiContext, input: Partial<SupportTicketTypeData>) => Promise<SupportTicketTypeData>;
24
+ export declare const submitPublicSupportTicket: (context: ApiContext, input: PublicSupportTicketInput) => Promise<SupportTicketTypeData>;
25
+ export declare const getPublicSupportTicket: (context: ApiContext, ticketNumber: string, emailAddress: string) => Promise<PublicSupportTicketFeed | null>;
18
26
  export declare const getSupportTickets: (context: ApiContext, filters?: {
19
27
  readonly status?: string;
20
28
  readonly userId?: string;
21
29
  }) => Promise<SupportTicketTypeData[]>;
22
30
  export declare const updateSupportTicketStatus: (context: ApiContext, supportTicketId: string, status: SupportTicketStatus, resolutionSummary?: string) => Promise<SupportTicketTypeData>;
31
+ export declare const updateSupportTicketProgress: (context: ApiContext, supportTicketId: string, status: SupportTicketStatus, details: string) => Promise<SupportTicketTypeData>;
23
32
  export declare const addSupportTicketMessage: (context: ApiContext, input: Partial<SupportTicketMessageType>) => Promise<SupportTicketMessageType>;
24
33
  export declare const getSupportTicketMessages: (context: ApiContext, supportTicketId: string) => Promise<SupportTicketMessageType[]>;
25
34
  export declare const addSupportTicketEvent: (context: ApiContext, input: Partial<SupportTicketEventType>) => Promise<SupportTicketEventType>;
26
35
  export declare const getSupportTicketEvents: (context: ApiContext, supportTicketId: string) => Promise<SupportTicketEventType[]>;
27
36
  export declare const createCustomerNotification: (context: ApiContext, input: Partial<CustomerNotificationType>) => Promise<CustomerNotificationType>;
28
37
  export declare const getCustomerNotificationsByUser: (context: ApiContext, userId: string) => Promise<CustomerNotificationType[]>;
38
+ export {};